changeset 8834:b00a29a55d68 jdk7u221-b02 jdk7u221-ga jdk7u231-b00

Merge
author andrew
date Tue, 16 Apr 2019 02:48:40 +0100
parents 113968fa7826 c933c0ff6815
children 3654dc22b8e9
files
diffstat 73 files changed, 7299 insertions(+), 452 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Wed Apr 03 03:51:25 2019 +0100
+++ b/.hgtags	Tue Apr 16 02:48:40 2019 +0100
@@ -621,3 +621,4 @@
 f992c97c7f1e47b8a0dacddb5b91ac2e937c4eb8 jdk7u211-b01
 303a29c24e3b1c876b4142f14d5dcacdbc33fac4 jdk7u211-b02
 ca1fa5965ae7982b6ed872bb7af19eefb8ba760f jdk7u221-b00
+1321440241267d98a2eed2c3efd1e1cc30c4aa88 jdk7u221-b01
--- a/make/tools/freetypecheck/freetypecheck.c	Wed Apr 03 03:51:25 2019 +0100
+++ b/make/tools/freetypecheck/freetypecheck.c	Tue Apr 16 02:48:40 2019 +0100
@@ -74,26 +74,65 @@
 #define QUOTEMACRO(x) QUOTEME(x)
 #define QUOTEME(x) #x
 
+int compare_versions(FT_Int req_major, FT_Int req_minor, FT_Int req_patch,
+                     FT_Int major, FT_Int minor, FT_Int patch) {
+    if (major > req_major) {
+        printf("Major version %d greater than required major version %d\n",
+               major, req_major);
+        return 0;
+    }
+    if (major < req_major) {
+        printf("Major version %d less than required major version %d\n",
+               major, req_major);
+        return -1;
+    }
+    printf("Major version %d equal to required major version %d\n",
+           major, req_major);
+    if (minor > req_minor) {
+        printf("Minor version %d greater than required minor version %d\n",
+               minor, req_minor);
+        return 0;
+    }
+    if (minor < req_minor) {
+        printf("Minor version %d less than required minor version %d\n",
+               minor, req_minor);
+        return -2;
+    }
+    printf("Minor version %d equal to required minor version %d\n",
+           minor, req_minor);
+    if (patch >= req_patch) {
+        printf("Patch version %d greater than or equal to required patch version %d\n",
+               patch, req_patch);
+        return 0;
+    }
+    printf("Patch version %d less than required patch version %d\n",
+           patch, req_patch);
+    return -3;
+}
+
 int main(int argc, char** argv) {
-   char v[50];
-   FT_Int major, minor, patch;
+   FT_Int major, minor, patch, req_major, req_minor, req_patch;
    FT_Library library;
-   sprintf(v, "%d.%d.%d", FREETYPE_MAJOR, FREETYPE_MINOR, FREETYPE_PATCH);
 
-   printf("Required version of freetype: %s\n",
-       QUOTEMACRO(REQUIRED_FREETYPE_VERSION));
+   sscanf(QUOTEMACRO(REQUIRED_FREETYPE_VERSION),
+          "%d.%d.%d", &req_major, &req_minor, &req_patch);
+   printf("Required version of freetype: %d.%d.%d\n",
+          req_major, req_minor, req_patch);
 
-   printf("Detected freetype headers: %s\n", v);
-   if (strcmp(v, QUOTEMACRO(REQUIRED_FREETYPE_VERSION)) < 0) {
+   printf("Detected freetype headers: %d.%d.%d\n",
+          FREETYPE_MAJOR, FREETYPE_MINOR, FREETYPE_PATCH);
+   if (compare_versions(req_major, req_minor, req_patch,
+                        FREETYPE_MAJOR, FREETYPE_MINOR, FREETYPE_PATCH) < 0) {
        printf("Failed: headers are too old.\n");
    }
 
    FT_Init_FreeType(&library);
    FT_Library_Version(library, &major, &minor, &patch);
-   sprintf(v, "%d.%d.%d", major, minor, patch);
 
-   printf("Detected freetype library: %s\n", v);
-   if (strcmp(v, QUOTEMACRO(REQUIRED_FREETYPE_VERSION)) < 0) {
+   printf("Detected freetype library: %d.%d.%d\n",
+          major, minor, patch);
+   if (compare_versions(req_major, req_minor, req_patch,
+                        major, minor, patch) < 0) {
       printf("Failed: too old library.\n");
    }
 
--- a/make/tools/src/build/tools/generatecurrencydata/GenerateCurrencyData.java	Wed Apr 03 03:51:25 2019 +0100
+++ b/make/tools/src/build/tools/generatecurrencydata/GenerateCurrencyData.java	Tue Apr 16 02:48:40 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -72,10 +72,6 @@
     private static String formatVersion;
     private static String dataVersion;
     private static String validCurrencyCodes;
-    private static String currenciesWith0MinorUnitDecimals;
-    private static String currenciesWith1MinorUnitDecimal;
-    private static String currenciesWith3MinorUnitDecimal;
-    private static String currenciesWithMinorUnitsUndefined;
 
     // handy constants - must match definitions in java.util.Currency
     // magic number
@@ -83,29 +79,31 @@
     // number of characters from A to Z
     private static final int A_TO_Z = ('Z' - 'A') + 1;
     // entry for invalid country codes
-    private static final int INVALID_COUNTRY_ENTRY = 0x007F;
+    private static final int INVALID_COUNTRY_ENTRY = 0x0000007F;
     // entry for countries without currency
-    private static final int COUNTRY_WITHOUT_CURRENCY_ENTRY = 0x0080;
+    private static final int COUNTRY_WITHOUT_CURRENCY_ENTRY = 0x00000200;
     // mask for simple case country entries
-    private static final int SIMPLE_CASE_COUNTRY_MASK = 0x0000;
+    private static final int SIMPLE_CASE_COUNTRY_MASK = 0x00000000;
     // mask for simple case country entry final character
-    private static final int SIMPLE_CASE_COUNTRY_FINAL_CHAR_MASK = 0x001F;
+    private static final int SIMPLE_CASE_COUNTRY_FINAL_CHAR_MASK = 0x0000001F;
     // mask for simple case country entry default currency digits
-    private static final int SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_MASK = 0x0060;
+    private static final int SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_MASK = 0x000001E0;
     // shift count for simple case country entry default currency digits
     private static final int SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_SHIFT = 5;
+    // maximum number for simple case country entry default currency digits
+    private static final int SIMPLE_CASE_COUNTRY_MAX_DEFAULT_DIGITS = 9;
     // mask for special case country entries
-    private static final int SPECIAL_CASE_COUNTRY_MASK = 0x0080;
+    private static final int SPECIAL_CASE_COUNTRY_MASK = 0x00000200;
     // mask for special case country index
-    private static final int SPECIAL_CASE_COUNTRY_INDEX_MASK = 0x001F;
+    private static final int SPECIAL_CASE_COUNTRY_INDEX_MASK = 0x0000001F;
     // delta from entry index component in main table to index into special case tables
     private static final int SPECIAL_CASE_COUNTRY_INDEX_DELTA = 1;
     // mask for distinguishing simple and special case countries
     private static final int COUNTRY_TYPE_MASK = SIMPLE_CASE_COUNTRY_MASK | SPECIAL_CASE_COUNTRY_MASK;
     // mask for the numeric code of the currency
-    private static final int NUMERIC_CODE_MASK = 0x0003FF00;
+    private static final int NUMERIC_CODE_MASK = 0x000FFC00;
     // shift count for the numeric code of the currency
-    private static final int NUMERIC_CODE_SHIFT = 8;
+    private static final int NUMERIC_CODE_SHIFT = 10;
 
     // generated data
     private static int[] mainTable = new int[A_TO_Z * A_TO_Z];
@@ -120,7 +118,7 @@
     private static int[] specialCaseOldCurrenciesNumericCode = new int[maxSpecialCases];
     private static int[] specialCaseNewCurrenciesNumericCode = new int[maxSpecialCases];
 
-    private static final int maxOtherCurrencies = 70;
+    private static final int maxOtherCurrencies = 128;
     private static int otherCurrenciesCount = 0;
     private static StringBuffer otherCurrencies = new StringBuffer();
     private static int[] otherCurrenciesDefaultFractionDigits = new int[maxOtherCurrencies];
@@ -129,6 +127,11 @@
     // date format for parsing cut-over times
     private static SimpleDateFormat format;
 
+    // Minor Units
+    private static String[] currenciesWithDefinedMinorUnitDecimals =
+        new String[SIMPLE_CASE_COUNTRY_MAX_DEFAULT_DIGITS + 1];
+    private static String currenciesWithMinorUnitsUndefined;
+
     public static void main(String[] args) {
 
         // Look for "-o outputfilename" option
@@ -171,16 +174,14 @@
         formatVersion = (String) currencyData.get("formatVersion");
         dataVersion = (String) currencyData.get("dataVersion");
         validCurrencyCodes = (String) currencyData.get("all");
-        currenciesWith0MinorUnitDecimals  = (String) currencyData.get("minor0");
-        currenciesWith1MinorUnitDecimal  = (String) currencyData.get("minor1");
-        currenciesWith3MinorUnitDecimal  = (String) currencyData.get("minor3");
+        for (int i = 0; i <= SIMPLE_CASE_COUNTRY_MAX_DEFAULT_DIGITS; i++) {
+            currenciesWithDefinedMinorUnitDecimals[i]
+                = (String) currencyData.get("minor"+i);
+        }
         currenciesWithMinorUnitsUndefined  = (String) currencyData.get("minorUndefined");
         if (formatVersion == null ||
                 dataVersion == null ||
                 validCurrencyCodes == null ||
-                currenciesWith0MinorUnitDecimals == null ||
-                currenciesWith1MinorUnitDecimal == null ||
-                currenciesWith3MinorUnitDecimal == null ||
                 currenciesWithMinorUnitsUndefined == null) {
             throw new NullPointerException("not all required data is defined in input");
         }
@@ -207,7 +208,7 @@
                         if (currencyInfo.charAt(0) == firstChar && currencyInfo.charAt(1) == secondChar) {
                             checkCurrencyCode(currencyInfo);
                             int digits = getDefaultFractionDigits(currencyInfo);
-                            if (digits < 0 || digits > 3) {
+                            if (digits < 0 || digits > SIMPLE_CASE_COUNTRY_MAX_DEFAULT_DIGITS) {
                                 throw new RuntimeException("fraction digits out of range for " + currencyInfo);
                             }
                             int numericCode= getNumericCode(currencyInfo);
@@ -231,13 +232,14 @@
     }
 
     private static int getDefaultFractionDigits(String currencyCode) {
-        if (currenciesWith0MinorUnitDecimals.indexOf(currencyCode) != -1) {
-            return 0;
-        } else if (currenciesWith1MinorUnitDecimal.indexOf(currencyCode) != -1) {
-            return 1;
-        } else if (currenciesWith3MinorUnitDecimal.indexOf(currencyCode) != -1) {
-            return 3;
-        } else if (currenciesWithMinorUnitsUndefined.indexOf(currencyCode) != -1) {
+        for (int i = 0; i <= SIMPLE_CASE_COUNTRY_MAX_DEFAULT_DIGITS; i++) {
+            if (currenciesWithDefinedMinorUnitDecimals[i] != null &&
+                currenciesWithDefinedMinorUnitDecimals[i].indexOf(currencyCode) != -1) {
+                return i;
+            }
+        }
+
+        if (currenciesWithMinorUnitsUndefined.indexOf(currencyCode) != -1) {
             return -1;
         } else {
             return 2;
--- a/src/share/classes/java/util/Currency.java	Wed Apr 03 03:51:25 2019 +0100
+++ b/src/share/classes/java/util/Currency.java	Tue Apr 16 02:48:40 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -58,12 +58,13 @@
  * no public constructor. You obtain a <code>Currency</code> instance using
  * the <code>getInstance</code> methods.
  * <p>
- * Users can supersede the Java runtime currency data by creating a properties
- * file named <code>&lt;JAVA_HOME&gt;/lib/currency.properties</code>.  The contents
- * of the properties file are key/value pairs of the ISO 3166 country codes
- * and the ISO 4217 currency data respectively.  The value part consists of
- * three ISO 4217 values of a currency, i.e., an alphabetic code, a numeric
- * code, and a minor unit.  Those three ISO 4217 values are separated by commas.
+ * Users can supersede the Java runtime currency data by means of the system
+ * property {@code java.util.currency.data}. If this system property is
+ * defined then its value is the location of a properties file, the contents of
+ * which are key/value pairs of the ISO 3166 country codes and the ISO 4217
+ * currency data respectively.  The value part consists of three ISO 4217 values
+ * of a currency, i.e., an alphabetic code, a numeric code, and a minor unit.
+ * Those three ISO 4217 values are separated by commas.
  * The lines which start with '#'s are considered comment lines.  For example,
  * <p>
  * <code>
@@ -121,11 +122,11 @@
     //   - maps country code to 32-bit int
     //   - 26*26 entries, corresponding to [A-Z]*[A-Z]
     //   - \u007F -> not valid country
-    //   - bits 18-31: unused
-    //   - bits 8-17: numeric code (0 to 1023)
-    //   - bit 7: 1 - special case, bits 0-4 indicate which one
+    //   - bits 20-31: unused
+    //   - bits 10-19: numeric code (0 to 1023)
+    //   - bit 9: 1 - special case, bits 0-4 indicate which one
     //            0 - simple country, bits 0-4 indicate final char of currency code
-    //   - bits 5-6: fraction digits for simple countries, 0 for special cases
+    //   - bits 5-8: fraction digits for simple countries, 0 for special cases
     //   - bits 0-4: final char for currency code for simple country, or ID of special case
     // - special case IDs:
     //   - 0: country has no currency
@@ -163,32 +164,34 @@
     // number of characters from A to Z
     private static final int A_TO_Z = ('Z' - 'A') + 1;
     // entry for invalid country codes
-    private static final int INVALID_COUNTRY_ENTRY = 0x007F;
+    private static final int INVALID_COUNTRY_ENTRY = 0x0000007F;
     // entry for countries without currency
-    private static final int COUNTRY_WITHOUT_CURRENCY_ENTRY = 0x0080;
+    private static final int COUNTRY_WITHOUT_CURRENCY_ENTRY = 0x00000200;
     // mask for simple case country entries
-    private static final int SIMPLE_CASE_COUNTRY_MASK = 0x0000;
+    private static final int SIMPLE_CASE_COUNTRY_MASK = 0x00000000;
     // mask for simple case country entry final character
-    private static final int SIMPLE_CASE_COUNTRY_FINAL_CHAR_MASK = 0x001F;
+    private static final int SIMPLE_CASE_COUNTRY_FINAL_CHAR_MASK = 0x0000001F;
     // mask for simple case country entry default currency digits
-    private static final int SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_MASK = 0x0060;
+    private static final int SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_MASK = 0x000001E0;
     // shift count for simple case country entry default currency digits
     private static final int SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_SHIFT = 5;
+    // maximum number for simple case country entry default currency digits
+    private static final int SIMPLE_CASE_COUNTRY_MAX_DEFAULT_DIGITS = 9;
     // mask for special case country entries
-    private static final int SPECIAL_CASE_COUNTRY_MASK = 0x0080;
+    private static final int SPECIAL_CASE_COUNTRY_MASK = 0x00000200;
     // mask for special case country index
-    private static final int SPECIAL_CASE_COUNTRY_INDEX_MASK = 0x001F;
+    private static final int SPECIAL_CASE_COUNTRY_INDEX_MASK = 0x0000001F;
     // delta from entry index component in main table to index into special case tables
     private static final int SPECIAL_CASE_COUNTRY_INDEX_DELTA = 1;
     // mask for distinguishing simple and special case countries
     private static final int COUNTRY_TYPE_MASK = SIMPLE_CASE_COUNTRY_MASK | SPECIAL_CASE_COUNTRY_MASK;
     // mask for the numeric code of the currency
-    private static final int NUMERIC_CODE_MASK = 0x0003FF00;
+    private static final int NUMERIC_CODE_MASK = 0x000FFC00;
     // shift count for the numeric code of the currency
-    private static final int NUMERIC_CODE_SHIFT = 8;
+    private static final int NUMERIC_CODE_SHIFT = 10;
 
     // Currency data format version
-    private static final int VALID_FORMAT_VERSION = 1;
+    private static final int VALID_FORMAT_VERSION = 2;
 
     static {
         AccessController.doPrivileged(new PrivilegedAction<Object>() {
@@ -229,10 +232,13 @@
                 }
 
                 // look for the properties file for overrides
+                String propsFile = System.getProperty("java.util.currency.data");
+                if (propsFile == null) {
+                    propsFile = homeDir + File.separator + "lib" +
+                        File.separator + "currency.properties";
+                }
                 try {
-                    File propFile = new File(homeDir + File.separator +
-                                             "lib" + File.separator +
-                                             "currency.properties");
+                    File propFile = new File(propsFile);
                     if (propFile.exists()) {
                         Properties props = new Properties();
                         try (FileReader fr = new FileReader(propFile)) {
@@ -240,7 +246,7 @@
                         }
                         Set<String> keys = props.stringPropertyNames();
                         Pattern propertiesPattern =
-                            Pattern.compile("([A-Z]{3})\\s*,\\s*(\\d{3})\\s*,\\s*([0-3])");
+                            Pattern.compile("([A-Z]{3})\\s*,\\s*(\\d{3})\\s*,\\s*(\\d+)");
                         for (String key : keys) {
                            replaceCurrencyData(propertiesPattern,
                                key.toUpperCase(Locale.ROOT),
@@ -691,7 +697,7 @@
      * @param ctry country code
      * @param data currency data.  This is a comma separated string that
      *    consists of "three-letter alphabet code", "three-digit numeric code",
-     *    and "one-digit (0,1,2, or 3) default fraction digit".
+     *    and "one-digit (0-9) default fraction digit".
      *    For example, "JPZ,392,0".
      * @throws
      */
@@ -721,8 +727,14 @@
 
         String code = m.group(1);
         int numeric = Integer.parseInt(m.group(2));
+        int entry = numeric << NUMERIC_CODE_SHIFT;
         int fraction = Integer.parseInt(m.group(3));
-        int entry = numeric << NUMERIC_CODE_SHIFT;
+        if (fraction > SIMPLE_CASE_COUNTRY_MAX_DEFAULT_DIGITS) {
+            info("currency.properties entry for " + ctry +
+                " ignored since the fraction is more than " +
+                SIMPLE_CASE_COUNTRY_MAX_DEFAULT_DIGITS + ":" + curdata, null);
+            return;
+        }
 
         int index;
         for (index = 0; index < scOldCurrencies.length; index++) {
--- a/src/share/classes/java/util/CurrencyData.properties	Wed Apr 03 03:51:25 2019 +0100
+++ b/src/share/classes/java/util/CurrencyData.properties	Tue Apr 16 02:48:40 2019 +0100
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -23,20 +23,23 @@
 # questions.
 #
 
-formatVersion=1
+# Version of the currency data format.
+#   1: initial
+#   2: Change in minor unit (allowing 4-9 digits)
+formatVersion=2
 
 # Version of the currency code information in this class.
 # It is a serial number that accompanies with each amendment.
 
-dataVersion=159
+dataVersion=162
 
 # List of all valid ISO 4217 currency codes.
 # To ensure compatibility, do not remove codes.
 
 all=ADP020-AED784-AFA004-AFN971-ALL008-AMD051-ANG532-AOA973-ARS032-ATS040-AUD036-\
     AWG533-AYM945-AZM031-AZN944-BAM977-BBD052-BDT050-BEF056-BGL100-BGN975-BHD048-BIF108-\
-    BMD060-BND096-BOB068-BOV984-BRL986-BSD044-BTN064-BWP072-BYB112-BYR974-\
-    BZD084-CAD124-CDF976-CHF756-CLF990-CLP152-CNY156-COP170-CRC188-CSD891-CUP192-CUC931-\
+    BMD060-BND096-BOB068-BOV984-BRL986-BSD044-BTN064-BWP072-BYB112-BYR974-BYN933-\
+    BZD084-CAD124-CDF976-CHE947-CHF756-CHW948-CLF990-CLP152-CNY156-COP170-COU970-CRC188-CSD891-CUP192-CUC931-\
     CVE132-CYP196-CZK203-DEM276-DJF262-DKK208-DOP214-DZD012-EEK233-EGP818-\
     ERN232-ESP724-ETB230-EUR978-FIM246-FJD242-FKP238-FRF250-GBP826-GEL981-\
     GHC288-GHS936-GIP292-GMD270-GNF324-GRD300-GTQ320-GWP624-GYD328-HKD344-HNL340-\
@@ -49,7 +52,7 @@
     PKR586-PLN985-PTE620-PYG600-QAR634-ROL946-RON946-RSD941-RUB643-RUR810-RWF646-SAR682-\
     SBD090-SCR690-SDD736-SDG938-SEK752-SGD702-SHP654-SIT705-SKK703-SLL694-SOS706-\
     SRD968-SRG740-SSP728-STD678-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TMT934-TND788-TOP776-\
-    TPE626-TRL792-TRY949-TTD780-TWD901-TZS834-UAH980-UGX800-USD840-USN997-USS998-\
+    TPE626-TRL792-TRY949-TTD780-TWD901-TZS834-UAH980-UGX800-USD840-USN997-USS998-UYI940-\
     UYU858-UZS860-VEB862-VEF937-VND704-VUV548-WST882-XAF950-XAG961-XAU959-XBA955-\
     XBB956-XBC957-XBD958-XCD951-XDR960-XFO000-XFU000-XOF952-XPD964-XPF953-\
     XPT962-XSU994-XTS963-XUA965-XXX999-YER886-YUM891-ZAR710-ZMK894-ZMW967-ZWD716-ZWL932-\
@@ -106,7 +109,7 @@
 AT=EUR
 # AZERBAIJAN
 AZ=AZN
-# BAHAMAS
+# BAHAMAS (THE)
 BS=BSD
 # BAHRAIN
 BH=BHD
@@ -115,7 +118,7 @@
 # BARBADOS
 BB=BBD
 # BELARUS
-BY=BYR
+BY=BYN
 # BELGIUM
 BE=EUR
 # BELIZE
@@ -128,7 +131,7 @@
 BQ=USD
 # BHUTAN
 BT=BTN
-# BOLIVIA
+# BOLIVIA (PLURINATIONAL STATE OF)
 BO=BOB
 # BOSNIA AND HERZEGOVINA
 BA=BAM
@@ -138,7 +141,7 @@
 BV=NOK
 # BRAZIL
 BR=BRL
-# BRITISH INDIAN OCEAN TERRITORY
+# BRITISH INDIAN OCEAN TERRITORY (THE)
 IO=USD
 # BRUNEI DARUSSALAM
 BN=BND
@@ -156,9 +159,9 @@
 CA=CAD
 # CAPE VERDE
 CV=CVE
-# CAYMAN ISLANDS
+# CAYMAN ISLANDS (THE)
 KY=KYD
-# CENTRAL AFRICAN REPUBLIC
+# CENTRAL AFRICAN REPUBLIC (THE)
 CF=XAF
 # CHAD
 TD=XAF
@@ -168,17 +171,17 @@
 CN=CNY
 # CHRISTMAS ISLAND
 CX=AUD
-# COCOS (KEELING) ISLANDS
+# COCOS (KEELING) ISLANDS (THE)
 CC=AUD
 # COLOMBIA
 CO=COP
-# COMOROS
+# COMOROS (THE)
 KM=KMF
-# CONGO
+# CONGO (THE)
 CG=XAF
-# CONGO, THE DEMOCRATIC REPUBLIC OF THE
+# CONGO (THE DEMOCRATIC REPUBLIC OF THE)
 CD=CDF
-# COOK ISLANDS
+# COOK ISLANDS (THE)
 CK=NZD
 # COSTA RICA
 CR=CRC
@@ -192,7 +195,7 @@
 CW=ANG
 # CYPRUS
 CY=EUR
-# CZECH REPUBLIC
+# CZECH REPUBLIC (THE)
 CZ=CZK
 # DENMARK
 DK=DKK
@@ -200,7 +203,7 @@
 DJ=DJF
 # DOMINICA
 DM=XCD
-# DOMINICAN REPUBLIC
+# DOMINICAN REPUBLIC (THE)
 DO=DOP
 # ECUADOR
 EC=USD
@@ -217,9 +220,9 @@
 EE=EUR
 # ETHIOPIA
 ET=ETB
-# FALKLAND ISLANDS (MALVINAS)
+# FALKLAND ISLANDS (THE) [MALVINAS]
 FK=FKP
-# FAROE ISLANDS
+# FAROE ISLANDS (THE)
 FO=DKK
 # FIJI
 FJ=FJD
@@ -231,11 +234,11 @@
 GF=EUR
 # FRENCH POLYNESIA
 PF=XPF
-# FRENCH SOUTHERN TERRITORIES
+# FRENCH SOUTHERN TERRITORIES (THE)
 TF=EUR
 # GABON
 GA=XAF
-# GAMBIA
+# GAMBIA (THE)
 GM=GMD
 # GEORGIA
 GE=GEL
@@ -269,7 +272,7 @@
 HT=HTG
 # HEARD ISLAND AND MCDONALD ISLANDS
 HM=AUD
-# HOLY SEE (VATICAN CITY STATE)
+# HOLY SEE (THE)
 VA=EUR
 # HONDURAS
 HN=HNL
@@ -283,7 +286,7 @@
 IN=INR
 # INDONESIA
 ID=IDR
-# IRAN, ISLAMIC REPUBLIC OF
+# IRAN (ISLAMIC REPUBLIC OF)
 IR=IRR
 # IRAQ
 IQ=IQD
@@ -309,15 +312,15 @@
 KE=KES
 # KIRIBATI
 KI=AUD
-# KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF
+# KOREA (THE DEMOCRATIC PEOPLE'S REPUBLIC OF)
 KP=KPW
-# KOREA, REPUBLIC OF
+# KOREA (THE REPUBLIC OF)
 KR=KRW
 # KUWAIT
 KW=KWD
 # KYRGYZSTAN
 KG=KGS
-# LAO PEOPLE'S DEMOCRATIC REPUBLIC
+# LAO PEOPLE'S DEMOCRATIC REPUBLIC (THE)
 LA=LAK
 # LATVIA
 LV=LVL;2013-12-31-22-00-00;EUR
@@ -337,7 +340,7 @@
 LU=EUR
 # MACAU
 MO=MOP
-# MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF
+# MACEDONIA (THE FORMER YUGOSLAV REPUBLIC OF)
 MK=MKD
 # MADAGASCAR
 MG=MGA
@@ -351,7 +354,7 @@
 ML=XOF
 # MALTA
 MT=EUR
-# MARSHALL ISLANDS
+# MARSHALL ISLANDS (THE)
 MH=USD
 # MARTINIQUE
 MQ=EUR
@@ -363,9 +366,9 @@
 YT=EUR
 # MEXICO
 MX=MXN
-# MICRONESIA, FEDERATED STATES OF
+# MICRONESIA (FEDERATED STATES OF)
 FM=USD
-# MOLDOVA, REPUBLIC OF
+# MOLDOVA (THE REPUBLIC OF)
 MD=MDL
 # MONACO
 MC=EUR
@@ -387,7 +390,7 @@
 NR=AUD
 # NEPAL
 NP=NPR
-# NETHERLANDS
+# NETHERLANDS (THE)
 NL=EUR
 # NETHERLANDS ANTILLES
 AN=ANG
@@ -397,7 +400,7 @@
 NZ=NZD
 # NICARAGUA
 NI=NIO
-# NIGER
+# NIGER (THE)
 NE=XOF
 # NIGERIA
 NG=NGN
@@ -405,7 +408,7 @@
 NU=NZD
 # NORFOLK ISLAND
 NF=AUD
-# NORTHERN MARIANA ISLANDS
+# NORTHERN MARIANA ISLANDS (THE)
 MP=USD
 # NORWAY
 NO=NOK
@@ -425,7 +428,7 @@
 PY=PYG
 # PERU
 PE=PEN
-# PHILIPPINES
+# PHILIPPINES (THE)
 PH=PHP
 # PITCAIRN
 PN=NZD
@@ -441,7 +444,7 @@
 RE=EUR
 # ROMANIA
 RO=RON
-# RUSSIAN FEDERATION
+# RUSSIAN FEDERATION (THE)
 RU=RUB
 # RWANDA
 RW=RWF
@@ -497,7 +500,7 @@
 ES=EUR
 # SRI LANKA
 LK=LKR
-# SUDAN
+# SUDAN (THE)
 SD=SDG
 # SURINAME
 SR=SRD
@@ -513,7 +516,7 @@
 CH=CHF
 # SYRIAN ARAB REPUBLIC
 SY=SYP
-# TAIWAN
+# TAIWAN (PROVINCE OF CHINA)
 TW=TWD
 # TAJIKISTAN
 TJ=TJS
@@ -537,7 +540,7 @@
 TR=TRY
 # TURKMENISTAN
 TM=TMT
-# TURKS AND CAICOS ISLANDS
+# TURKS AND CAICOS ISLANDS (THE)
 TC=USD
 # TUVALU
 TV=AUD
@@ -545,13 +548,13 @@
 UG=UGX
 # UKRAINE
 UA=UAH
-# UNITED ARAB EMIRATES
+# UNITED ARAB EMIRATES (THE)
 AE=AED
-# UNITED KINGDOM
+# UNITED KINGDOM OF GREAT BRITAIN AND NORTHERN IRELAND (THE)
 GB=GBP
-# UNITED STATES
+# UNITED STATES OF AMERICA (THE)
 US=USD
-# UNITED STATES MINOR OUTLYING ISLANDS
+# UNITED STATES MINOR OUTLYING ISLANDS (THE)
 UM=USD
 # URUGUAY
 UY=UYU
@@ -559,7 +562,7 @@
 UZ=UZS
 # VANUATU
 VU=VUV
-# VENEZUELA
+# VENEZUELA (BOLIVARIAN REPUBLIC OF)
 VE=VEF
 # VIET NAM
 VN=VND
@@ -579,16 +582,17 @@
 ZW=ZWL
 
 
-# List of currencies with 0, 1, OR 3 decimals for minor units, or where there
-# are no minor units defined. All others use 2 decimals.
+# List of currencies with non-2digit decimals for minor units,
+# or where there are no minor units defined. All others use 2 decimals.
 
 minor0=\
-    ADP-BEF-BIF-BYB-BYR-CLF-CLP-DJF-ESP-GNF-\
+    ADP-BEF-BIF-BYB-BYR-CLP-DJF-ESP-GNF-\
     GRD-ISK-ITL-JPY-KMF-KRW-LUF-MGF-PYG-PTE-RWF-\
-    TPE-TRL-UGX-VND-VUV-XAF-XOF-XPF
-minor1=
+    TPE-TRL-UGX-UYI-VND-VUV-XAF-XOF-XPF
 minor3=\
     BHD-IQD-JOD-KWD-LYD-OMR-TND
+minor4=\
+    CLF
 minorUndefined=\
     XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-\
     XPT-XSU-XTS-XUA-XXX
--- a/src/share/classes/java/util/JapaneseImperialCalendar.java	Wed Apr 03 03:51:25 2019 +0100
+++ b/src/share/classes/java/util/JapaneseImperialCalendar.java	Tue Apr 16 02:48:40 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,20 +38,21 @@
 import sun.util.resources.LocaleData;
 
 /**
- * <code>JapaneseImperialCalendar</code> implements a Japanese
+ * {@code JapaneseImperialCalendar} 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>
+ * <pre>{@code
  * 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
+ *     1       Meiji       1868-01-01T00:00:00 local time
+ *     2       Taisho      1912-07-30T00:00:00 local time
+ *     3       Showa       1926-12-25T00:00:00 local time
+ *     4       Heisei      1989-01-08T00:00:00 local time
+ *     5       Reiwa       2019-05-01T00:00:00 local time
  * ------------------------------------------------------
- * </tt></pre>
+ * }</pre>
  *
  * <p><code>ERA</code> value 0 specifies the years before Meiji and
  * the Gregorian year values are used. Unlike {@link
@@ -101,8 +102,12 @@
      */
     public static final int HEISEI = 4;
 
+    /**
+     * The ERA constant designating the Reiwa era.
+     */
+    private static final int REIWA = 5;
+
     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
@@ -133,6 +138,9 @@
     // Fixed date of the first date of each era.
     private static final long[] sinceFixedDates;
 
+    // The current era
+    private static final int currentEra;
+
     /*
      * <pre>
      *                                 Greatest       Least
@@ -228,13 +236,18 @@
         // eras[BEFORE_MEIJI] and sinceFixedDate[BEFORE_MEIJI] are the
         // same as Gregorian.
         int index = BEFORE_MEIJI;
+        int current = index;
         sinceFixedDates[index] = gcal.getFixedDate(BEFORE_MEIJI_ERA.getSinceDate());
         eras[index++] = BEFORE_MEIJI_ERA;
         for (Era e : es) {
+            if(e.getSince(TimeZone.NO_TIMEZONE) < System.currentTimeMillis()) {
+                current = index;
+            }
             CalendarDate d = e.getSinceDate();
             sinceFixedDates[index] = gcal.getFixedDate(d);
             eras[index++] = e;
         }
+        currentEra = current;
 
         LEAST_MAX_VALUES[ERA] = MAX_VALUES[ERA] = eras.length - 1;
 
@@ -313,6 +326,7 @@
      * <code>false</code> otherwise.
      * @see Calendar#compareTo(Calendar)
      */
+    @Override
     public boolean equals(Object obj) {
         return obj instanceof JapaneseImperialCalendar &&
             super.equals(obj);
@@ -322,6 +336,7 @@
      * Generates the hash code for this
      * <code>JapaneseImperialCalendar</code> object.
      */
+    @Override
     public int hashCode() {
         return super.hashCode() ^ jdate.hashCode();
     }
@@ -354,6 +369,7 @@
      * or if any calendar fields have out-of-range values in
      * non-lenient mode.
      */
+    @Override
     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.
@@ -482,6 +498,7 @@
         }
     }
 
+    @Override
     public void roll(int field, boolean up) {
         roll(field, up ? +1 : -1);
     }
@@ -506,6 +523,7 @@
      * @see #add(int,int)
      * @see #set(int,int)
      */
+    @Override
     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.
@@ -1744,12 +1762,12 @@
                     }
                 } else if (transitionYear) {
                     if (jdate.getYear() == 1) {
-                        // As of Heisei (since Meiji) there's no case
+                        // As of Reiwa (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) {
+                        if (era > REIWA) {
                             CalendarDate pd = eras[era - 1].getSinceDate();
                             if (normalizedYear == pd.getYear()) {
                                 d.setMonth(pd.getMonth()).setDayOfMonth(pd.getDayOfMonth());
@@ -1884,7 +1902,7 @@
             year = isSet(YEAR) ? internalGet(YEAR) : 1;
         } else {
             if (isSet(YEAR)) {
-                era = eras.length - 1;
+                era = currentEra;
                 year = internalGet(YEAR);
             } else {
                 // Equivalent to 1970 (Gregorian)
@@ -2366,7 +2384,7 @@
      * 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;
+        return isSet(ERA) ? internalGet(ERA) : currentEra;
     }
 
     /**
--- a/src/share/classes/sun/security/ssl/SSLAlgorithmDecomposer.java	Wed Apr 03 03:51:25 2019 +0100
+++ b/src/share/classes/sun/security/ssl/SSLAlgorithmDecomposer.java	Tue Apr 16 02:48:40 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -234,7 +234,8 @@
                 // ignore: unknown or unsupported ciphersuite
             }
 
-            if (cipherSuite != null) {
+            if (cipherSuite != null &&
+                cipherSuite != CipherSuite.C_SCSV /* TLS_EMPTY_RENEGOTIATION_INFO_SCSV */) {
                 return decompose(cipherSuite.keyExchange, cipherSuite.cipher,
                         cipherSuite.macAlg);
             }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/sun/security/validator/CADistrustPolicy.java	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 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.validator;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.Security;
+import java.security.cert.X509Certificate;
+import java.util.EnumSet;
+
+import sun.security.util.Debug;
+
+/**
+ * Policies for distrusting a certificate authority (CA). See the
+ * jdk.security.caDistrustPolicies security property for more information.
+ */
+enum CADistrustPolicy {
+    /**
+     * Distrust TLS Server certificates anchored by a Symantec root CA and
+     * issued after April 16, 2019 (with exceptions for a couple of subordinate
+     * CAs, see the jdk.security.caDistrustPolicies definition in the
+     * java.security file for more details). If enabled, this policy is
+     * currently enforced by the PKIX and SunX509 TrustManager implementations
+     * of the SunJSSE provider implementation.
+     */
+    SYMANTEC_TLS {
+        void checkDistrust(String variant, X509Certificate[] chain)
+                           throws ValidatorException {
+            if (!variant.equals(Validator.VAR_TLS_SERVER)) {
+                return;
+            }
+            SymantecTLSPolicy.checkDistrust(chain);
+        }
+    };
+
+    /**
+     * Checks if the end-entity certificate is distrusted.
+     *
+     * @param variant the type of certificate being checked
+     * @param chain the end-entity's certificate chain. The end entity cert
+     *              is at index 0, the trust anchor at index n-1.
+     * @throws ValidatorException if the end-entity certificate is distrusted
+     */
+    abstract void checkDistrust(String variant,
+                                X509Certificate[] chain)
+                                throws ValidatorException;
+
+    // The policies set in the jdk.security.caDistrustPolicies property.
+    static final EnumSet<CADistrustPolicy> POLICIES = parseProperty();
+    private static EnumSet<CADistrustPolicy> parseProperty() {
+        String property = AccessController.doPrivileged(
+            new PrivilegedAction<String>() {
+                @Override
+                public String run() {
+                    return Security.getProperty(
+                        "jdk.security.caDistrustPolicies");
+                }
+            });
+        EnumSet<CADistrustPolicy> set = EnumSet.noneOf(CADistrustPolicy.class);
+        // if property is null or empty, the restrictions are not enforced
+        if (property == null || property.isEmpty()) {
+            return set;
+        }
+        String[] policies = property.split(",");
+        for (String policy : policies) {
+            policy = policy.trim();
+            try {
+                CADistrustPolicy caPolicy =
+                    Enum.valueOf(CADistrustPolicy.class, policy);
+                set.add(caPolicy);
+            } catch (IllegalArgumentException iae) {
+                // ignore unknown values but log it
+                Debug debug = Debug.getInstance("certpath");
+                if (debug != null) {
+                    debug.println("Unknown value for the " +
+                                  "jdk.security.caDistrustPolicies property: "
+                                  + policy);
+                }
+            }
+        }
+        return set;
+    }
+}
--- a/src/share/classes/sun/security/validator/EndEntityChecker.java	Wed Apr 03 03:51:25 2019 +0100
+++ b/src/share/classes/sun/security/validator/EndEntityChecker.java	Tue Apr 16 02:48:40 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -132,25 +132,26 @@
         return new EndEntityChecker(type, variant);
     }
 
-    void check(X509Certificate cert, Object parameter,
-            boolean checkUnresolvedCritExts) throws CertificateException {
+    void check(X509Certificate[] chain, Object parameter,
+            boolean checkUnresolvedCritExts)
+            throws CertificateException {
         if (variant.equals(Validator.VAR_GENERIC)) {
             return; // no checks
         }
 
-        Set<String> exts = getCriticalExtensions(cert);
+        Set<String> exts = getCriticalExtensions(chain[0]);
         if (variant.equals(Validator.VAR_TLS_SERVER)) {
-            checkTLSServer(cert, (String)parameter, exts);
+            checkTLSServer(chain[0], (String)parameter, exts);
         } else if (variant.equals(Validator.VAR_TLS_CLIENT)) {
-            checkTLSClient(cert, exts);
+            checkTLSClient(chain[0], exts);
         } else if (variant.equals(Validator.VAR_CODE_SIGNING)) {
-            checkCodeSigning(cert, exts);
+            checkCodeSigning(chain[0], exts);
         } else if (variant.equals(Validator.VAR_JCE_SIGNING)) {
-            checkCodeSigning(cert, exts);
+            checkCodeSigning(chain[0], exts);
         } else if (variant.equals(Validator.VAR_PLUGIN_CODE_SIGNING)) {
-            checkCodeSigning(cert, exts);
+            checkCodeSigning(chain[0], exts);
         } else if (variant.equals(Validator.VAR_TSA_SERVER)) {
-            checkTSAServer(cert, exts);
+            checkTSAServer(chain[0], exts);
         } else {
             throw new CertificateException("Unknown variant: " + variant);
         }
@@ -159,6 +160,12 @@
         if (checkUnresolvedCritExts) {
             checkRemainingExtensions(exts);
         }
+
+        // check if certificate should be distrusted according to policies
+        // set in the jdk.security.caDistrustPolicies security property
+        for (CADistrustPolicy policy : CADistrustPolicy.POLICIES) {
+            policy.checkDistrust(variant, chain);
+        }
     }
 
     /**
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/sun/security/validator/SymantecTLSPolicy.java	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,207 @@
+/*
+ * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 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.validator;
+
+import java.security.cert.X509Certificate;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.TimeZone;
+
+import sun.security.x509.X509CertImpl;
+
+/**
+ * This class checks if Symantec issued TLS Server certificates should be
+ * restricted.
+ */
+final class SymantecTLSPolicy {
+    private static final Date DECEMBER_31_2019;
+    // Any TLS Server certificate that is anchored by one of the Symantec
+    // roots above and is issued after this date will be distrusted.
+    private static final Date APRIL_16_2019;
+
+    // SHA-256 certificate fingerprints of subCAs with later distrust dates
+    private static final Map<String, Date> EXEMPT_SUBCAS = new HashMap<>();
+    static {
+        /*
+           We need to ensure that a date occurs after these dates.
+           As Calendar objects always include a time as well as a date,
+           we ensure the time is the last moment within that date, so that
+           Date.after returns true for any moment from midnight the next day.
+        */
+        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+        cal.set(2019, Calendar.DECEMBER, 31, 23, 59, 59);
+        DECEMBER_31_2019 = cal.getTime();
+        cal.set(2019, Calendar.APRIL, 16, 23, 59, 59);
+        APRIL_16_2019 = cal.getTime();
+
+        // Subject DN: C=US, O=Apple Inc., OU=Certification Authority,
+        //             CN=Apple IST CA 2 - G1
+        // Issuer DN: CN=GeoTrust Global CA, O=GeoTrust Inc., C=US
+        EXEMPT_SUBCAS.put("AC2B922ECFD5E01711772FEA8ED372DE9D1E2245FCE3F57A9CDBEC77296A424B",
+                          DECEMBER_31_2019);
+
+
+        // Subject DN: C=US, O=Apple Inc., OU=Certification Authority,
+        //             CN=Apple IST CA 8 - G1
+        // Issuer DN: CN=GeoTrust Primary Certification Authority - G2,
+        //            OU=(c) 2007 GeoTrust Inc. - For authorized use only,
+        //            O=GeoTrust Inc., C=US
+        EXEMPT_SUBCAS.put("A4FE7C7F15155F3F0AEF7AAA83CF6E06DEB97CA3F909DF920AC1490882D488ED",
+                          DECEMBER_31_2019);
+    }
+
+    // SHA-256 certificate fingerprints of distrusted roots
+    private static final Set<String> FINGERPRINTS = new HashSet<>(Arrays.asList(
+        // cacerts alias: geotrustglobalca
+        // DN: CN=GeoTrust Global CA, O=GeoTrust Inc., C=US
+        "FF856A2D251DCD88D36656F450126798CFABAADE40799C722DE4D2B5DB36A73A",
+        // cacerts alias: geotrustprimaryca
+        // DN: CN=GeoTrust Primary Certification Authority,
+        //     O=GeoTrust Inc., C=US
+        "37D51006C512EAAB626421F1EC8C92013FC5F82AE98EE533EB4619B8DEB4D06C",
+        // cacerts alias: geotrustprimarycag2
+        // DN: CN=GeoTrust Primary Certification Authority - G2,
+        //     OU=(c) 2007 GeoTrust Inc. - For authorized use only,
+        //     O=GeoTrust Inc., C=US
+        "5EDB7AC43B82A06A8761E8D7BE4979EBF2611F7DD79BF91C1C6B566A219ED766",
+        // cacerts alias: geotrustprimarycag3
+        // DN: CN=GeoTrust Primary Certification Authority - G3,
+        //     OU=(c) 2008 GeoTrust Inc. - For authorized use only,
+        //     O=GeoTrust Inc., C=US
+        "B478B812250DF878635C2AA7EC7D155EAA625EE82916E2CD294361886CD1FBD4",
+        // cacerts alias: geotrustuniversalca
+        // DN: CN=GeoTrust Universal CA, O=GeoTrust Inc., C=US
+        "A0459B9F63B22559F5FA5D4C6DB3F9F72FF19342033578F073BF1D1B46CBB912",
+        // cacerts alias: thawteprimaryrootca
+        // DN: CN=thawte Primary Root CA,
+        //     OU="(c) 2006 thawte, Inc. - For authorized use only",
+        //     OU=Certification Services Division, O="thawte, Inc.", C=US
+        "8D722F81A9C113C0791DF136A2966DB26C950A971DB46B4199F4EA54B78BFB9F",
+        // cacerts alias: thawteprimaryrootcag2
+        // DN: CN=thawte Primary Root CA - G2,
+        //     OU="(c) 2007 thawte, Inc. - For authorized use only",
+        //     O="thawte, Inc.", C=US
+        "A4310D50AF18A6447190372A86AFAF8B951FFB431D837F1E5688B45971ED1557",
+        // cacerts alias: thawteprimaryrootcag3
+        // DN: CN=thawte Primary Root CA - G3,
+        //     OU="(c) 2008 thawte, Inc. - For authorized use only",
+        //     OU=Certification Services Division, O="thawte, Inc.", C=US
+        "4B03F45807AD70F21BFC2CAE71C9FDE4604C064CF5FFB686BAE5DBAAD7FDD34C",
+        // cacerts alias: thawtepremiumserverca
+        // DN: EMAILADDRESS=premium-server@thawte.com,
+        //     CN=Thawte Premium Server CA, OU=Certification Services Division,
+        //     O=Thawte Consulting cc, L=Cape Town, ST=Western Cape, C=ZA
+        "3F9F27D583204B9E09C8A3D2066C4B57D3A2479C3693650880505698105DBCE9",
+        // cacerts alias: verisignclass2g2ca
+        // DN: OU=VeriSign Trust Network,
+        //     OU="(c) 1998 VeriSign, Inc. - For authorized use only",
+        //     OU=Class 2 Public Primary Certification Authority - G2,
+        //     O="VeriSign, Inc.", C=US
+        "3A43E220FE7F3EA9653D1E21742EAC2B75C20FD8980305BC502CAF8C2D9B41A1",
+        // cacerts alias: verisignclass3ca
+        // DN: OU=Class 3 Public Primary Certification Authority,
+        //     O="VeriSign, Inc.", C=US
+        "A4B6B3996FC2F306B3FD8681BD63413D8C5009CC4FA329C2CCF0E2FA1B140305",
+        // cacerts alias: verisignclass3g2ca
+        // DN: OU=VeriSign Trust Network,
+        //     OU="(c) 1998 VeriSign, Inc. - For authorized use only",
+        //     OU=Class 3 Public Primary Certification Authority - G2,
+        //     O="VeriSign, Inc.", C=US
+        "83CE3C1229688A593D485F81973C0F9195431EDA37CC5E36430E79C7A888638B",
+        // cacerts alias: verisignclass3g3ca
+        // DN: CN=VeriSign Class 3 Public Primary Certification Authority - G3,
+        //     OU="(c) 1999 VeriSign, Inc. - For authorized use only",
+        //     OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US
+        "EB04CF5EB1F39AFA762F2BB120F296CBA520C1B97DB1589565B81CB9A17B7244",
+        // cacerts alias: verisignclass3g4ca
+        // DN: CN=VeriSign Class 3 Public Primary Certification Authority - G4,
+        //     OU="(c) 2007 VeriSign, Inc. - For authorized use only",
+        //     OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US
+        "69DDD7EA90BB57C93E135DC85EA6FCD5480B603239BDC454FC758B2A26CF7F79",
+        // cacerts alias: verisignclass3g5ca
+        // DN: CN=VeriSign Class 3 Public Primary Certification Authority - G5,
+        //     OU="(c) 2006 VeriSign, Inc. - For authorized use only",
+        //     OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US
+        "9ACFAB7E43C8D880D06B262A94DEEEE4B4659989C3D0CAF19BAF6405E41AB7DF",
+        // cacerts alias: verisignuniversalrootca
+        // DN: CN=VeriSign Universal Root Certification Authority,
+        //     OU="(c) 2008 VeriSign, Inc. - For authorized use only",
+        //     OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US
+        "2399561127A57125DE8CEFEA610DDF2FA078B5C8067F4E828290BFB860E84B3C"
+    ));
+
+    /**
+     * This method assumes the eeCert is a TLS Server Cert and chains back to
+     * the anchor.
+     *
+     * @param chain the end-entity's certificate chain. The end entity cert
+     *              is at index 0, the trust anchor at index n-1.
+     * @throws ValidatorException if the certificate is distrusted
+     */
+    static void checkDistrust(X509Certificate[] chain)
+                              throws ValidatorException {
+        X509Certificate anchor = chain[chain.length-1];
+        if (FINGERPRINTS.contains(fingerprint(anchor))) {
+            Date notBefore = chain[0].getNotBefore();
+
+            // check if chain goes through one of the subCAs
+            if (chain.length > 2) {
+                X509Certificate subCA = chain[chain.length - 2];
+                Date distrustDate = EXEMPT_SUBCAS.get(fingerprint(subCA));
+                if (distrustDate != null) {
+                    // reject if certificate is issued after specified date
+                    checkNotBefore(notBefore, distrustDate, anchor);
+                    return; // success
+                }
+            }
+            // reject if certificate is issued after April 16, 2019
+            checkNotBefore(notBefore, APRIL_16_2019, anchor);
+        }
+    }
+
+    private static String fingerprint(X509Certificate cert) {
+        return (cert instanceof X509CertImpl)
+               ? ((X509CertImpl)cert).getFingerprint("SHA-256")
+               : X509CertImpl.getFingerprint("SHA-256", cert);
+    }
+
+    private static void checkNotBefore(Date notBeforeDate,
+            Date distrustDate, X509Certificate anchor)
+            throws ValidatorException {
+        if (notBeforeDate.after(distrustDate)) {
+            throw new ValidatorException
+                    ("TLS Server certificate issued after " + distrustDate +
+                     " and anchored by a distrusted legacy Symantec root CA: "
+                     + anchor.getSubjectX500Principal(),
+                     ValidatorException.T_UNTRUSTED_CERT, anchor);
+        }
+    }
+    private SymantecTLSPolicy() {}
+}
--- a/src/share/classes/sun/security/validator/Validator.java	Wed Apr 03 03:51:25 2019 +0100
+++ b/src/share/classes/sun/security/validator/Validator.java	Tue Apr 16 02:48:40 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -271,7 +271,7 @@
             // redundant.
             boolean checkUnresolvedCritExts =
                     (type == TYPE_PKIX) ? false : true;
-            endEntityChecker.check(chain[0], parameter,
+            endEntityChecker.check(chain, parameter,
                                    checkUnresolvedCritExts);
         }
 
--- a/src/share/classes/sun/text/resources/FormatData.java	Wed Apr 03 03:51:25 2019 +0100
+++ b/src/share/classes/sun/text/resources/FormatData.java	Tue Apr 16 02:48:40 2019 +0100
@@ -138,6 +138,7 @@
                     "Taisho",
                     "Showa",
                     "Heisei",
+                    "Reiwa",
                 }
             },
             { "java.util.JapaneseImperialCalendar.short.Eras",
@@ -147,6 +148,7 @@
                     "T",
                     "S",
                     "H",
+                    "R",
                 }
             },
             { "java.util.JapaneseImperialCalendar.FirstYear",
--- a/src/share/classes/sun/text/resources/FormatData_ja.java	Wed Apr 03 03:51:25 2019 +0100
+++ b/src/share/classes/sun/text/resources/FormatData_ja.java	Tue Apr 16 02:48:40 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -129,6 +129,7 @@
                     "\u5927\u6b63",     // Taisho
                     "\u662d\u548c",     // Showa
                     "\u5e73\u6210",     // Heisei
+                    "\u4ee4\u548c",     // Reiwa
                 }
             },
             { "java.util.JapaneseImperialCalendar.FirstYear",
--- a/src/share/classes/sun/util/calendar/Era.java	Wed Apr 03 03:51:25 2019 +0100
+++ b/src/share/classes/sun/util/calendar/Era.java	Tue Apr 16 02:48:40 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -41,20 +41,16 @@
  * <code>CalendarDate</code>.
  *
  * <p>The following era names are defined in this release.
- * <!-- TODO: use HTML table -->
- * <pre><tt>
+ * <pre>{@code
  *   Calendar system         Era name         Since (in Gregorian)
  *   -----------------------------------------------------------------------
- *   Japanese calendar       Meiji            1868-01-01 midnight local time
- *                           Taisho           1912-07-30 midnight local time
- *                           Showa            1926-12-26 midnight local time
- *                           Heisei           1989-01-08 midnight local time
- *   Julian calendar         BeforeCommonEra  -292275055-05-16T16:47:04.192Z
- *                           CommonEra        0000-12-30 midnight local time
- *   Taiwanese calendar      MinGuo           1911-01-01 midnight local time
- *   Thai Buddhist calendar  BuddhistEra      -543-01-01 midnight local time
+ *   Japanese calendar       Meiji            1868-01-01T00:00:00 local time
+ *                           Taisho           1912-07-30T00:00:00 local time
+ *                           Showa            1926-12-25T00:00:00 local time
+ *                           Heisei           1989-01-08T00:00:00 local time
+ *                           Reiwa            2019-05-01T00:00:00 local time
  *   -----------------------------------------------------------------------
- * </tt></pre>
+ * }</pre>
  *
  * @author Masayoshi Okutsu
  * @since 1.5
--- a/src/share/classes/sun/util/resources/CurrencyNames.properties	Wed Apr 03 03:51:25 2019 +0100
+++ b/src/share/classes/sun/util/resources/CurrencyNames.properties	Tue Apr 16 02:48:40 2019 +0100
@@ -60,9 +60,6 @@
 # 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!
-#
 ADP=ADP
 AED=AED
 AFA=AFA
@@ -95,6 +92,7 @@
 BTN=BTN
 BWP=BWP
 BYB=BYB
+BYN=BYN
 BYR=BYR
 BZD=BZD
 CAD=CAD
@@ -313,8 +311,9 @@
 bsd=Bahamian Dollar
 btn=Bhutanese Ngultrum
 bwp=Botswanan Pula
-byb=Belarusian New Ruble (1994-1999)
-byr=Belarusian Ruble
+byb=Belarusian Ruble (1994-1999)
+byn=Belarusian Ruble
+byr=Belarusian Ruble (2000-2016)
 bzd=Belize Dollar
 cad=Canadian Dollar
 cdf=Congolese Franc
@@ -358,7 +357,7 @@
 gyd=Guyanaese Dollar
 hkd=Hong Kong Dollar
 hnl=Honduran Lempira
-hrk=Croatian Kuna
+hrk=Kuna
 htg=Haitian Gourde
 huf=Hungarian Forint
 idr=Indonesian Rupiah
@@ -402,7 +401,7 @@
 mtl=Maltese Lira
 mur=Mauritian Rupee
 mvr=Maldivian Rufiyaa
-mwk=Malawian Kwacha
+mwk=Malawian Malawi Kwacha
 mxn=Mexican Peso
 mxv=Mexican Investment Unit
 myr=Malaysian Ringgit
@@ -417,7 +416,7 @@
 nzd=New Zealand Dollar
 omr=Omani Rial
 pab=Panamanian Balboa
-pen=Peruvian Nuevo Sol
+pen=Peruvian Sol
 pgk=Papua New Guinean Kina
 php=Philippine Peso
 pkr=Pakistani Rupee
--- a/src/share/classes/sun/util/resources/CurrencyNames_be_BY.properties	Wed Apr 03 03:51:25 2019 +0100
+++ b/src/share/classes/sun/util/resources/CurrencyNames_be_BY.properties	Tue Apr 16 02:48:40 2019 +0100
@@ -35,4 +35,5 @@
 # This notice and attribution to Taligent may not be removed.
 # Taligent is a registered trademark of Taligent, Inc.
 
+BYN=\u0420\u0443\u0431
 BYR=\u0420\u0443\u0431
--- a/src/share/lib/calendars.properties	Wed Apr 03 03:51:25 2019 +0100
+++ b/src/share/lib/calendars.properties	Tue Apr 16 02:48:40 2019 +0100
@@ -29,12 +29,14 @@
 #   Taisho since 1912-07-30 00:00:00 local time (Gregorian)
 #   Showa  since 1926-12-25 00:00:00 local time (Gregorian)
 #   Heisei since 1989-01-08 00:00:00 local time (Gregorian)
+#   Reiwa  since 2019-05-01 00:00:00 local time (Gregorian)
 calendar.japanese.type: LocalGregorianCalendar
 calendar.japanese.eras: \
 	name=Meiji,abbr=M,since=-3218832000000;  \
 	name=Taisho,abbr=T,since=-1812153600000; \
 	name=Showa,abbr=S,since=-1357603200000;  \
-	name=Heisei,abbr=H,since=600220800000
+	name=Heisei,abbr=H,since=600220800000;   \
+	name=Reiwa,abbr=R,since=1556668800000
 
 #
 # Taiwanese calendar
--- a/src/share/lib/security/java.security-linux	Wed Apr 03 03:51:25 2019 +0100
+++ b/src/share/lib/security/java.security-linux	Tue Apr 16 02:48:40 2019 +0100
@@ -892,3 +892,33 @@
 # and javax.crypto.spec.SecretKeySpec and rejects all the others.
 jceks.key.serialFilter = java.lang.Enum;java.security.KeyRep;\
   java.security.KeyRep$Type;javax.crypto.spec.SecretKeySpec;!*
+
+#
+# Policies for distrusting Certificate Authorities (CAs).
+#
+# This is a comma separated value of one or more case-sensitive strings, each
+# of which represents a policy for determining if a CA should be distrusted.
+# The supported values are:
+#
+#
+#   SYMANTEC_TLS : Distrust TLS Server certificates anchored by a Symantec
+#   root CA and issued after April 16, 2019 unless issued by one of the
+#   following subordinate CAs which have a later distrust date:
+#     1. Apple IST CA 2 - G1, SHA-256 fingerprint:
+#        AC2B922ECFD5E01711772FEA8ED372DE9D1E2245FCE3F57A9CDBEC77296A424B
+#        Distrust after December 31, 2019.
+#     2. Apple IST CA 8 - G1, SHA-256 fingerprint:
+#        A4FE7C7F15155F3F0AEF7AAA83CF6E06DEB97CA3F909DF920AC1490882D488ED
+#        Distrust after December 31, 2019.
+# Leading and trailing whitespace surrounding each value are ignored.
+# Unknown values are ignored. If the property is commented out or set to the
+# empty String, no policies are enforced.
+#
+# Note: This property is currently used by the JDK Reference implementation.
+# It is not guaranteed to be supported by other SE implementations. Also, this
+# property does not override other security properties which can restrict
+# certificates such as jdk.tls.disabledAlgorithms or
+# jdk.certpath.disabledAlgorithms; those restrictions are still enforced even
+# if this property is not enabled.
+#
+jdk.security.caDistrustPolicies=SYMANTEC_TLS
--- a/src/share/lib/security/java.security-macosx	Wed Apr 03 03:51:25 2019 +0100
+++ b/src/share/lib/security/java.security-macosx	Tue Apr 16 02:48:40 2019 +0100
@@ -891,3 +891,33 @@
 # and javax.crypto.spec.SecretKeySpec and rejects all the others.
 jceks.key.serialFilter = java.lang.Enum;java.security.KeyRep;\
   java.security.KeyRep$Type;javax.crypto.spec.SecretKeySpec;!*
+
+#
+# Policies for distrusting Certificate Authorities (CAs).
+#
+# This is a comma separated value of one or more case-sensitive strings, each
+# of which represents a policy for determining if a CA should be distrusted.
+# The supported values are:
+#
+#
+#   SYMANTEC_TLS : Distrust TLS Server certificates anchored by a Symantec
+#   root CA and issued after April 16, 2019 unless issued by one of the
+#   following subordinate CAs which have a later distrust date:
+#     1. Apple IST CA 2 - G1, SHA-256 fingerprint:
+#        AC2B922ECFD5E01711772FEA8ED372DE9D1E2245FCE3F57A9CDBEC77296A424B
+#        Distrust after December 31, 2019.
+#     2. Apple IST CA 8 - G1, SHA-256 fingerprint:
+#        A4FE7C7F15155F3F0AEF7AAA83CF6E06DEB97CA3F909DF920AC1490882D488ED
+#        Distrust after December 31, 2019.
+# Leading and trailing whitespace surrounding each value are ignored.
+# Unknown values are ignored. If the property is commented out or set to the
+# empty String, no policies are enforced.
+#
+# Note: This property is currently used by the JDK Reference implementation.
+# It is not guaranteed to be supported by other SE implementations. Also, this
+# property does not override other security properties which can restrict
+# certificates such as jdk.tls.disabledAlgorithms or
+# jdk.certpath.disabledAlgorithms; those restrictions are still enforced even
+# if this property is not enabled.
+#
+jdk.security.caDistrustPolicies=SYMANTEC_TLS
--- a/src/share/lib/security/java.security-solaris	Wed Apr 03 03:51:25 2019 +0100
+++ b/src/share/lib/security/java.security-solaris	Tue Apr 16 02:48:40 2019 +0100
@@ -890,3 +890,33 @@
 # and javax.crypto.spec.SecretKeySpec and rejects all the others.
 jceks.key.serialFilter = java.lang.Enum;java.security.KeyRep;\
   java.security.KeyRep$Type;javax.crypto.spec.SecretKeySpec;!*
+
+#
+# Policies for distrusting Certificate Authorities (CAs).
+#
+# This is a comma separated value of one or more case-sensitive strings, each
+# of which represents a policy for determining if a CA should be distrusted.
+# The supported values are:
+#
+#
+#   SYMANTEC_TLS : Distrust TLS Server certificates anchored by a Symantec
+#   root CA and issued after April 16, 2019 unless issued by one of the
+#   following subordinate CAs which have a later distrust date:
+#     1. Apple IST CA 2 - G1, SHA-256 fingerprint:
+#        AC2B922ECFD5E01711772FEA8ED372DE9D1E2245FCE3F57A9CDBEC77296A424B
+#        Distrust after December 31, 2019.
+#     2. Apple IST CA 8 - G1, SHA-256 fingerprint:
+#        A4FE7C7F15155F3F0AEF7AAA83CF6E06DEB97CA3F909DF920AC1490882D488ED
+#        Distrust after December 31, 2019.
+# Leading and trailing whitespace surrounding each value are ignored.
+# Unknown values are ignored. If the property is commented out or set to the
+# empty String, no policies are enforced.
+#
+# Note: This property is currently used by the JDK Reference implementation.
+# It is not guaranteed to be supported by other SE implementations. Also, this
+# property does not override other security properties which can restrict
+# certificates such as jdk.tls.disabledAlgorithms or
+# jdk.certpath.disabledAlgorithms; those restrictions are still enforced even
+# if this property is not enabled.
+#
+jdk.security.caDistrustPolicies=SYMANTEC_TLS
--- a/src/share/lib/security/java.security-windows	Wed Apr 03 03:51:25 2019 +0100
+++ b/src/share/lib/security/java.security-windows	Tue Apr 16 02:48:40 2019 +0100
@@ -891,3 +891,33 @@
 # and javax.crypto.spec.SecretKeySpec and rejects all the others.
 jceks.key.serialFilter = java.lang.Enum;java.security.KeyRep;\
   java.security.KeyRep$Type;javax.crypto.spec.SecretKeySpec;!*
+
+#
+# Policies for distrusting Certificate Authorities (CAs).
+#
+# This is a comma separated value of one or more case-sensitive strings, each
+# of which represents a policy for determining if a CA should be distrusted.
+# The supported values are:
+#
+#
+#   SYMANTEC_TLS : Distrust TLS Server certificates anchored by a Symantec
+#   root CA and issued after April 16, 2019 unless issued by one of the
+#   following subordinate CAs which have a later distrust date:
+#     1. Apple IST CA 2 - G1, SHA-256 fingerprint:
+#        AC2B922ECFD5E01711772FEA8ED372DE9D1E2245FCE3F57A9CDBEC77296A424B
+#        Distrust after December 31, 2019.
+#     2. Apple IST CA 8 - G1, SHA-256 fingerprint:
+#        A4FE7C7F15155F3F0AEF7AAA83CF6E06DEB97CA3F909DF920AC1490882D488ED
+#        Distrust after December 31, 2019.
+# Leading and trailing whitespace surrounding each value are ignored.
+# Unknown values are ignored. If the property is commented out or set to the
+# empty String, no policies are enforced.
+#
+# Note: This property is currently used by the JDK Reference implementation.
+# It is not guaranteed to be supported by other SE implementations. Also, this
+# property does not override other security properties which can restrict
+# certificates such as jdk.tls.disabledAlgorithms or
+# jdk.certpath.disabledAlgorithms; those restrictions are still enforced even
+# if this property is not enabled.
+#
+jdk.security.caDistrustPolicies=SYMANTEC_TLS
--- a/test/java/text/Format/DateFormat/WeekDateTest.java	Wed Apr 03 03:51:25 2019 +0100
+++ b/test/java/text/Format/DateFormat/WeekDateTest.java	Tue Apr 16 02:48:40 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -137,20 +137,28 @@
         Calendar jcal = Calendar.getInstance(TimeZone.getTimeZone("GMT"),
                                              new Locale("ja", "JP", "JP"));
 
+        String format = "2-W01-2"; // 2019-12-31 == R1-12-31
+        int expectedYear = 2019;
+        // Check the current era, Heisei or Reiwa
+        if (System.currentTimeMillis() < 1556668800000L) {
+            format = "21-W01-3"; // 2008-12-31 == H20-12-31
+            expectedYear = 2008;
+        }
         jcal.setFirstDayOfWeek(MONDAY);
         jcal.setMinimalDaysInFirstWeek(4);
         SimpleDateFormat sdf = new SimpleDateFormat("Y-'W'ww-u");
         sdf.setCalendar(jcal);
-        Date d = sdf.parse("21-W01-3"); // 2008-12-31 == H20-12-31
+        Date d = sdf.parse(format);
         GregorianCalendar gcal = newCalendar();
         gcal.setTime(d);
-        if (gcal.get(YEAR) != 2008
+        if (gcal.get(YEAR) != expectedYear
             || gcal.get(MONTH) != DECEMBER
             || gcal.get(DAY_OF_MONTH) != 31) {
-            String s = String.format("noWeekDateSupport: got %04d-%02d-%02d, expected 2008-12-31%n",
+            String s = String.format("noWeekDateSupport: got %04d-%02d-%02d, expected %4d-12-31%n",
                                      gcal.get(YEAR),
                                      gcal.get(MONTH)+1,
-                                     gcal.get(DAY_OF_MONTH));
+                                     gcal.get(DAY_OF_MONTH),
+                                     expectedYear);
             throw new RuntimeException(s);
         }
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/CalendarAdapter.java	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,437 @@
+/*
+ * Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+import java.util.Calendar;
+import sun.util.calendar.CalendarUtils;
+
+public class CalendarAdapter extends Calendar {
+    public static enum Type {
+        GREGORIAN, BUDDHIST, JAPANESE;
+    }
+
+    static final String[] FIELD_NAMES = {
+        "ERA", "YEAR", "MONTH", "WEEK_OF_YEAR", "WEEK_OF_MONTH", "DAY_OF_MONTH",
+        "DAY_OF_YEAR", "DAY_OF_WEEK", "DAY_OF_WEEK_IN_MONTH", "AM_PM", "HOUR",
+        "HOUR_OF_DAY", "MINUTE", "SECOND", "MILLISECOND", "ZONE_OFFSET",
+        "DST_OFFSET"
+    };
+
+    Calendar cal;
+    GregorianAdapter gcal;
+    private Type type;
+
+    public CalendarAdapter(Calendar cal) {
+        if (cal == null)
+            throw new NullPointerException();
+
+        this.cal = cal;
+        if (cal instanceof sun.util.BuddhistCalendar) {
+            type = Type.BUDDHIST;
+        } else if (cal instanceof GregorianAdapter) {
+            type = Type.GREGORIAN;
+            gcal = (GregorianAdapter) cal;
+        } else {
+            type = Type.JAPANESE;
+        }
+    }
+
+    public void setFirstDayOfWeek(int w) {
+        cal.setFirstDayOfWeek(w);
+    }
+
+    public int getFirstDayOfWeek() {
+        return cal.getFirstDayOfWeek();
+    }
+
+    public void setMinimalDaysInFirstWeek(int value) {
+        cal.setMinimalDaysInFirstWeek(value);
+    }
+
+    public int getMinimalDaysInFirstWeek() {
+        return getMinimalDaysInFirstWeek();
+    }
+
+    public long getTimeInMillis() {
+        return cal.getTimeInMillis();
+    }
+
+    public void setTimeInMillis(long millis) {
+        cal.setTimeInMillis(millis);
+    }
+
+    public int get(int field) {
+        return cal.get(field);
+    }
+
+    public void set(int field, int value) {
+        cal.set(field, value);
+    }
+
+    public void add(int field, int amount) {
+        cal.add(field, amount);
+    }
+
+    public void roll(int field, boolean dir) {
+        cal.roll(field, dir);
+    }
+
+    public void roll(int field, int amount) {
+        cal.roll(field, amount);
+    }
+
+    public void setDate(int year, int month, int date)
+    {
+        cal.set(year, month, date);
+    }
+
+    public void setDate(int era, int year, int month, int date) {
+        cal.set(ERA, era);
+        cal.set(year, month, date);
+    }
+
+    public void setDateTime(int year, int month, int date, int hourOfDay, int minute, int second)
+    {
+        cal.set(year, month, date, hourOfDay, minute, second);
+    }
+
+    public void clearAll() {
+        cal.clear();
+    }
+
+    public void clearField(int field)
+    {
+        cal.clear(field);
+    }
+
+    public boolean isSetField(int field)
+    {
+        return cal.isSet(field);
+    }
+
+    public int getMaximum(int field) {
+        return cal.getMaximum(field);
+    }
+
+    public int getLeastMaximum(int field) {
+        return cal.getLeastMaximum(field);
+    }
+
+    public int getActualMaximum(int field) {
+        return cal.getActualMaximum(field);
+    }
+
+    public int getMinimum(int field) {
+        return cal.getMinimum(field);
+    }
+
+    public int getGreatestMinimum(int field) {
+        return cal.getGreatestMinimum(field);
+    }
+
+    public int getActualMinimum(int field) {
+        return cal.getActualMinimum(field);
+    }
+
+    public void setLenient(boolean lenient) {
+        cal.setLenient(lenient);
+    }
+
+    public String toString() {
+        return cal.toString();
+    }
+
+    protected void computeFields() {
+    }
+
+    protected void computeTime() {
+    }
+
+    void setTimeOfDay(int hourOfDay, int minute, int second, int ms) {
+        cal.set(HOUR_OF_DAY, hourOfDay);
+        cal.set(MINUTE, minute);
+        cal.set(SECOND, second);
+        cal.set(MILLISECOND, ms);
+    }
+
+    // GregorianAdapter specific methods
+
+    // When gcal is null, the methods throw a NPE.
+
+    int getSetStateFields() {
+        return gcal.getSetStateFields();
+    }
+
+    int[] getFields() {
+        return gcal.getFields();
+    }
+
+    boolean checkInternalDate(int year, int month, int dayOfMonth) {
+        return gcal.checkInternalDate(year, month, dayOfMonth);
+    }
+
+    boolean checkInternalDate(int year, int month, int dayOfMonth, int dayOfWeek) {
+        return gcal.checkInternalDate(year, month, dayOfMonth, dayOfWeek);
+    }
+
+    boolean checkInternalField(int field, int expectedValue) {
+        return checkInternalField(field, expectedValue);
+    }
+
+    // check methods
+
+    boolean checkAllSet() {
+        initTest();
+        for (int i = 0; i < FIELD_COUNT; i++) {
+            checkFieldState(i, true);
+        }
+        return getStatus();
+    }
+
+    boolean checkMaximum(int field, int expectedValue) {
+        int val;
+        if ((val = getMaximum(field)) != expectedValue) {
+            appendMessage("getMaximum("+FIELD_NAMES[field]+"): got " + val
+                          + " expected " + expectedValue);
+        }
+        return getStatus();
+    }
+
+    boolean checkActualMaximum(int field, int expectedValue) {
+        int val;
+        if ((val = getActualMaximum(field)) != expectedValue) {
+            appendMessage("getActualMaximum("+FIELD_NAMES[field]+"): got " + val
+                          + " expected " + expectedValue);
+        }
+        return getStatus();
+    }
+
+    boolean checkLeastMaximum(int field, int expectedValue) {
+        int val;
+        if ((val = getLeastMaximum(field)) != expectedValue) {
+            appendMessage("getLeastMaximum("+FIELD_NAMES[field]+"): got " + val
+                          + " expected " + expectedValue);
+        }
+        return getStatus();
+    }
+
+    boolean checkMinimum(int field, int expectedValue) {
+        int val;
+        if ((val = getMinimum(field)) != expectedValue) {
+            appendMessage("getMinimum("+FIELD_NAMES[field]+"): got " + val
+                          + " expected " + expectedValue);
+        }
+        return getStatus();
+    }
+
+    boolean checkActualMinimum(int field, int expectedValue) {
+        int val;
+        if ((val = getActualMinimum(field)) != expectedValue) {
+            appendMessage("getActualMinimum("+FIELD_NAMES[field]+"): got " + val
+                          + " expected " + expectedValue);
+        }
+        return getStatus();
+    }
+
+    boolean checkGreatestMinimum(int field, int expectedValue) {
+        int val;
+        if ((val = getGreatestMinimum(field)) != expectedValue) {
+            appendMessage("getGreatestMinimum("+FIELD_NAMES[field]+"): got " + val
+                          + " expected " + expectedValue);
+        }
+        return getStatus();
+    }
+
+    boolean checkDate(int year, int month, int dayOfMonth) {
+        initTest();
+        checkField(YEAR, year);
+        checkField(MONTH, month);
+        checkField(DAY_OF_MONTH, dayOfMonth);
+        return getStatus();
+    }
+
+    boolean checkDate(int era, int year, int month, int dayOfMonth) {
+        initTest();
+        checkField(ERA, era);
+        checkField(YEAR, year);
+        checkField(MONTH, month);
+        checkField(DAY_OF_MONTH, dayOfMonth);
+        return getStatus();
+    }
+
+    boolean checkDateTime(int year, int month, int dayOfMonth,
+                          int hourOfDay, int minute, int second) {
+        initTest();
+        checkField(YEAR, year);
+        checkField(MONTH, month);
+        checkField(DAY_OF_MONTH, dayOfMonth);
+        checkField(HOUR_OF_DAY, hourOfDay);
+        checkField(MINUTE, minute);
+        checkField(SECOND, second);
+        return getStatus();
+    }
+
+    boolean checkDateTime(int year, int month, int dayOfMonth,
+                          int hourOfDay, int minute, int second, int ms) {
+        initTest();
+        checkField(YEAR, year);
+        checkField(MONTH, month);
+        checkField(DAY_OF_MONTH, dayOfMonth);
+        checkField(HOUR_OF_DAY, hourOfDay);
+        checkField(MINUTE, minute);
+        checkField(SECOND, second);
+        checkField(MILLISECOND, ms);
+        return getStatus();
+    }
+
+    boolean checkTimeOfDay(int hourOfDay, int minute, int second, int ms) {
+        initTest();
+        checkField(HOUR_OF_DAY, hourOfDay);
+        checkField(MINUTE, minute);
+        checkField(SECOND, second);
+        checkField(MILLISECOND, ms);
+        return getStatus();
+    }
+
+    boolean checkMillis(long millis) {
+        initTest();
+        long t = cal.getTimeInMillis();
+        if (t != millis) {
+            appendMessage("wrong millis: got " + t + ", expected " + millis);
+            return false;
+        }
+        return true;
+    }
+
+    boolean checkFieldState(int field, boolean expectedState) {
+        if (isSet(field) != expectedState) {
+            appendMessage(FIELD_NAMES[field] + " state is not " + expectedState + "; ");
+            return false;
+        }
+        return true;
+    }
+
+    boolean checkField(int field, int expectedValue) {
+        int val;
+        if ((val = get(field)) != expectedValue) {
+            appendMessage("get(" + FIELD_NAMES[field] + "): got " + val +
+                          ", expected " + expectedValue + "; ");
+            return false;
+        }
+        return true;
+    }
+
+    static final String fieldName(int field) {
+        return FIELD_NAMES[field];
+    }
+
+    String toDateString() {
+        StringBuffer sb = new StringBuffer();
+        String[] eraNames = null;
+        switch (type) {
+        case GREGORIAN:
+            eraNames = new String[] { "BCE", "" };
+            break;
+
+        case BUDDHIST:
+            eraNames = new String[] { "Before BE", "BE"};
+            break;
+
+        case JAPANESE:
+            eraNames = new String[] {
+                "BeforeMeiji",
+                "Meiji",
+                "Taisho",
+                "Showa",
+                "Heisei",
+                "Reiwa"
+            };
+            break;
+        }
+
+        sb.append(eraNames[cal.get(ERA)]);
+        if (sb.length() > 0)
+            sb.append(' ');
+        CalendarUtils.sprintf0d(sb, cal.get(YEAR), 4).append('-');
+        CalendarUtils.sprintf0d(sb, cal.get(MONTH)+1, 2).append('-');
+        CalendarUtils.sprintf0d(sb, cal.get(DAY_OF_MONTH), 2);
+        return sb.toString();
+    }
+
+    String toTimeString() {
+        StringBuffer sb = new StringBuffer();
+        CalendarUtils.sprintf0d(sb, cal.get(HOUR_OF_DAY), 2).append(':');
+        CalendarUtils.sprintf0d(sb, cal.get(MINUTE), 2).append(':');
+        CalendarUtils.sprintf0d(sb, cal.get(SECOND),2 ).append('.');
+        CalendarUtils.sprintf0d(sb, cal.get(MILLISECOND), 3);
+        int zoneOffset = cal.get(ZONE_OFFSET) + cal.get(DST_OFFSET);
+        if (zoneOffset == 0) {
+            sb.append('Z');
+        } else {
+            int offset;
+            char sign;
+            if (zoneOffset > 0) {
+                offset = zoneOffset;
+                sign = '+';
+            } else {
+                offset = -zoneOffset;
+                sign = '-';
+            }
+            offset /= 60000;
+            sb.append(sign);
+            CalendarUtils.sprintf0d(sb, offset / 60, 2);
+            CalendarUtils.sprintf0d(sb, offset % 60, 2);
+        }
+        return sb.toString();
+    }
+
+    String toDateTimeString() {
+        return toDateString() + "T" + toTimeString();
+    }
+
+    // Message handling
+
+    StringBuffer msg = new StringBuffer();
+
+    private void initTest() {
+        msg = new StringBuffer();
+    }
+
+    String getMessage() {
+        String s = msg.toString();
+        msg = new StringBuffer();
+        return "    " + s;
+    }
+
+    private void setMessage(String msg) {
+        this.msg = new StringBuffer(msg);
+    }
+
+    private void appendMessage(String msg) {
+        this.msg.append(msg);
+    }
+
+    boolean getStatus() {
+        return msg.length() == 0;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/CalendarTestEngine.java	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,782 @@
+/*
+ * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.util.*;
+
+public class CalendarTestEngine {
+    private static File file;
+    private static BufferedReader in;
+    private static int testCount;
+    private static int lineno;
+    private static Locale locale;
+    private static TimeZone timezone;
+    private static boolean leniency = true;
+
+    public static void main(String[] args) throws Exception {
+        Locale loc = Locale.getDefault();
+        TimeZone tz = TimeZone.getDefault();
+        locale = loc;
+        timezone = tz;
+        try {
+            for (String arg : args) {
+                file = new File(arg);
+                FileInputStream fis = new FileInputStream(file);
+                System.out.println("Starting " + file.getName() + "...");
+                in = new BufferedReader(new InputStreamReader(fis));
+                testCount = lineno = 0;
+                run();
+                System.out.println("Completed " + file.getName());
+            }
+        } finally {
+            Locale.setDefault(loc);
+            TimeZone.setDefault(tz);
+        }
+    }
+
+    private static void run() throws Exception {
+        String line;
+        int section = 0;
+        Map<String, CalendarAdapter> cals = new HashMap<String, CalendarAdapter>();
+        CalendarAdapter calendar = null;
+        Result result = new Result();
+
+        while ((line = in.readLine()) != null) {
+            lineno++;
+            line = line.trim();
+            // Skip blank and comment lines
+            if (line.length() == 0 || line.charAt(0) == '#') {
+                continue;
+            }
+            int comment = line.indexOf('#');
+            if (comment != -1) {
+                line = line.substring(0, comment).trim();
+            }
+            Scanner sc = new Scanner(line);
+            String token = sc.next();
+            Symbol operation = symbol(token);
+            if (operation == null) {
+                throw new RuntimeException(lineno() + "wrong op? " + token);
+            }
+
+
+            if (operation.type == Symbol.Type.EXCEPTION) {
+                String className = sc.next();
+                Class clazz = Exceptions.get(className);
+                Exception e = result.getException();
+                if (!clazz.isInstance(e)) {
+                    throw new RuntimeException(lineno() + "unexpected exception: got: " + e
+                                               + ", expected=" + clazz);
+                }
+            }
+
+            Exception x = result.getException();
+            if (x != null) {
+                throw new RuntimeException(lineno(result.getLineno()) + "Unexpected exception", x);
+            }
+
+            try {
+                switch (operation.type) {
+                case LOCALE:
+                    {
+                        String lang = sc.next();
+                        String country = "", var = "";
+                        if (sc.hasNext()) {
+                            country = sc.next();
+                            if (sc.hasNext()) {
+                                var = sc.next();
+                            }
+                        }
+                        locale = new Locale(lang, country, var);
+                    }
+                    break;
+
+                case TIMEZONE:
+                    {
+                        if (sc.hasNext()) {
+                            String id = sc.next();
+                            timezone = TimeZone.getTimeZone(id);
+                            if (!timezone.getID().equals(id)) {
+                                System.err.printf("Warning: line %d: may get wrong time zone? "
+                                                  +"(specified: %s vs. actual: %s)%n",
+                                                  lineno, id, timezone.getID());
+                            }
+                        }
+                    }
+                    break;
+
+                case NEW:
+                    {
+                        Symbol op = symbol(sc.next());
+                        Calendar cal = null;
+                        switch (op.type) {
+                        case INSTANCE:
+                            cal = Calendar.getInstance(timezone, locale);
+                            break;
+                        case GREGORIAN:
+                            cal = new GregorianAdapter(timezone, locale);
+                            break;
+                        default:
+                            symbolError(op);
+                            break;
+                        }
+                        cal.setLenient(leniency);
+                        calendar = new CalendarAdapter(cal);
+                        if (sc.hasNext()) {
+                            String name = sc.next();
+                            cals.put(name.toLowerCase(Locale.ROOT), calendar);
+                            if (!leniency) {
+                                System.out.printf("%s%s is non-lenient%n", lineno(), name);
+                            }
+                        } else {
+                            throw new RuntimeException(lineno() + "Missing associated name");
+                        }
+                    }
+                    break;
+
+                case TEST:
+                    testCount++;
+                    if (sc.hasNext()) {
+                        System.out.printf("Test#%d:%s%n", testCount, sc.findInLine(".+"));
+                    } else {
+                        System.out.printf("Test#%d:%n", testCount);
+                    }
+                    break;
+
+                case USE:
+                    {
+                        String name = sc.next().toLowerCase(Locale.ROOT);
+                        CalendarAdapter c = cals.get(name);
+                        if (c == null) {
+                            throw new CalendarTestException(lineno() + "calendar " + name
+                                                            + " not found.");
+                        }
+                        calendar = c;
+                    }
+                    break;
+
+                case ASSIGN:
+                    {
+                        long v = getLong(sc);
+                        String to = sc.next().toLowerCase(Locale.ROOT);
+                        boolean assign = true;
+                        if (sc.hasNext()) {
+                            Symbol condition = symbol(sc.next());
+                            if (condition.type == Symbol.Type.IF) {
+                                long v1 = getLong(sc);
+                                Symbol op = symbol(sc.next());
+                                long v2 = getLong(sc);
+                                assign = relation(v1, op, v2);
+                            } else {
+                                symbolError(condition);
+                            }
+                        }
+                        if (assign)
+                            Variable.newVar(to, v);
+                    }
+                    break;
+
+                case EVAL:
+                    {
+                        long v1 = getLong(sc);
+                        String op = sc.next();
+                        Symbol operator = symbol(op);
+                        if (operator == null) {
+                            throw new RuntimeException("op " + op + " invalid");
+                        }
+                        long v2 = getLong(sc);
+                        if (operator.isArithmetic()) {
+                            long value = 0;
+                            switch (operator.type) {
+                            case PLUS:
+                                value = v1 + v2;
+                                break;
+
+                            case MINUS:
+                                value = v1 - v2;
+                                break;
+
+                            case MULTIPLY:
+                                value = v1 * v2;
+                                break;
+
+                            case DIVIDE:
+                                value = v1 / v2;
+                                break;
+
+                            case MOD:
+                                value = v1 % v2;
+                                break;
+
+                            default:
+                                symbolError(operator);
+                                break;
+                            }
+                            result.setValue(value);
+                        } else {
+                            if (!relation(v1, operator, v2)) {
+                                throw new RuntimeException("not " + v1 + " " + op + " " + v2);
+                            }
+                        }
+                    }
+                    break;
+
+                case CLEAR:
+                    {
+                        Symbol sym = symbol(sc.next());
+                        if (sym.type == Symbol.Type.ALL) {
+                            calendar.clearAll();
+                        } else if (sym.type == Symbol.Type.FIELD) {
+                            int f = sym.value();
+                            calendar.clearField(f);
+                        } else {
+                            symbolError(sym);
+                        }
+                    }
+                    break;
+
+                case GET:
+                    {
+                        Symbol sym = symbol(sc.next());
+                        switch (sym.type) {
+                        case FIELD:
+                            {
+                                int f = sym.value();
+                                int v = calendar.get(f);
+                                result.setValue(v);
+                            }
+                            break;
+
+                        case MILLIS:
+                            {
+                                long v = calendar.getTimeInMillis();
+                                result.setValue(v);
+                            }
+                            break;
+
+                        case MINIMUM:
+                            {
+                                int f = getInt(sc);
+                                int v = calendar.getMinimum(f);
+                                result.setValue(v);
+                            }
+                            break;
+
+                        case GREATESTMINIMUM:
+                            {
+                                int f = getInt(sc);
+                                int v = calendar.getGreatestMinimum(f);
+                                result.setValue(v);
+                            }
+                            break;
+
+                        case ACTUALMINIMUM:
+                            {
+                                int f = getInt(sc);
+                                int v = calendar.getActualMinimum(f);
+                                result.setValue(v);
+                            }
+                            break;
+
+                        case MAXIMUM:
+                            {
+                                int f = getInt(sc);
+                                int v = calendar.getMaximum(f);
+                                result.setValue(v);
+                            }
+                            break;
+
+                        case LEASTMAXIMUM:
+                            {
+                                int f = getInt(sc);
+                                int v = calendar.getLeastMaximum(f);
+                                result.setValue(v);
+                            }
+                            break;
+
+                        case ACTUALMAXIMUM:
+                            {
+                                int f = getInt(sc);
+                                int v = calendar.getActualMaximum(f);
+                                result.setValue(v);
+                            }
+                            break;
+
+                        case FIRSTDAYOFWEEK:
+                            {
+                                result.setValue(calendar.getFirstDayOfWeek());
+                            }
+                            break;
+
+                        case MINIMALDAYSINFIRSTWEEK:
+                            {
+                                int v = calendar.getMinimalDaysInFirstWeek();
+                                result.setValue(v);
+                            }
+                            break;
+
+                        default:
+                            symbolError(sym);
+                            break;
+                        }
+                    }
+                    break;
+
+                case ADD:
+                case ROLL:
+                    {
+                        Symbol sym = symbol(sc.next());
+                        if (sym.type == Symbol.Type.FIELD) {
+                            int f = sym.value();
+                            int v = sc.nextInt();
+                            switch (operation.type) {
+                            case ADD:
+                                calendar.add(f, v);
+                                break;
+
+                            case ROLL:
+                                calendar.roll(f, v);
+                                break;
+                            }
+                        } else {
+                            symbolError(sym);
+                        }
+                    }
+                    break;
+
+                case SET:
+                    {
+                        Symbol sym = symbol(sc.next());
+                        switch (sym.type) {
+                        case FIELD:
+                            {
+                                int f = sym.value();
+                                int v = getInt(sc);
+                                calendar.set(f, v);
+                            }
+                            break;
+
+                        case MILLIS:
+                            {
+                                long v = getLong(sc);
+                                calendar.setTimeInMillis(v);
+                            }
+                            break;
+
+                        case DATE:
+                            {
+                                int a = getInt(sc);
+                                int b = getInt(sc);
+                                int c = getInt(sc);
+                                if (sc.hasNext()) {
+                                    int d = getInt(sc);
+                                    // era, year, month, dayOfMonth
+                                    calendar.setDate(a, b, c, d);
+                                } else {
+                                    // year, month, dayOfMonth
+                                    calendar.setDate(a, b, c);
+                                }
+                            }
+                            break;
+
+                        case DATETIME:
+                            {
+                                int y = getInt(sc);
+                                int m = getInt(sc);
+                                int d = getInt(sc);
+                                int hh = getInt(sc);
+                                int mm = getInt(sc);
+                                int ss = getInt(sc);
+                                calendar.setDateTime(y, m, d, hh, mm, ss);
+                            }
+                            break;
+
+                        case TIMEOFDAY:
+                            {
+                                int hh = getInt(sc);
+                                int mm = getInt(sc);
+                                int ss = getInt(sc);
+                                int ms = getInt(sc);
+                                calendar.setTimeOfDay(hh, mm, ss, ms);
+                            }
+                            break;
+
+                        case FIRSTDAYOFWEEK:
+                            {
+                                int v = getInt(sc);
+                                calendar.setFirstDayOfWeek(v);
+                            }
+                            break;
+
+                        case MINIMALDAYSINFIRSTWEEK:
+                            {
+                                int v = getInt(sc);
+                                calendar.setMinimalDaysInFirstWeek(v);
+                            }
+                            break;
+
+                        case LENIENT:
+                            if (calendar != null) {
+                                calendar.setLenient(true);
+                            }
+                            leniency = true;
+                            break;
+
+                        case NONLENIENT:
+                            if (calendar != null) {
+                                calendar.setLenient(false);
+                            }
+                            leniency = false;
+                            break;
+
+                        default:
+                            symbolError(sym);
+                        }
+                        if (sc.hasNext()) {
+                            throw new RuntimeException(lineno() + "extra param(s) "
+                                                       + sc.findInLine(".+"));
+                        }
+                    }
+                    break;
+
+                case CHECK:
+                    {
+                        Symbol sym = symbol(sc.next());
+                        boolean stat = false;
+                        switch (sym.type) {
+                        case MILLIS:
+                            {
+                                long millis = getLong(sc);
+                                stat = calendar.checkMillis(millis);
+                            }
+                            break;
+
+                        case FIELD:
+                            {
+                                int f = sym.value();
+                                int v = getInt(sc);
+                                stat = calendar.checkField(f, v);
+                            }
+                            break;
+
+                        case DATE:
+                            {
+                                int a = getInt(sc);
+                                int b = getInt(sc);
+                                int c = getInt(sc);
+                                if (sc.hasNext()) {
+                                    int d = getInt(sc);
+                                    // era year month dayOfMonth
+                                    stat = calendar.checkDate(a, b, c, d);
+                                } else {
+                                    // year month dayOfMonth
+                                    stat = calendar.checkDate(a, b, c);
+                                }
+                            }
+                            break;
+
+                        case DATETIME:
+                            {
+                                int y = getInt(sc);
+                                int m = getInt(sc);
+                                int d = getInt(sc);
+                                int hh = getInt(sc);
+                                int mm = getInt(sc);
+                                int ss = getInt(sc);
+                                if (sc.hasNext()) {
+                                    int ms = getInt(sc);
+                                    stat = calendar.checkDateTime(y, m, d, hh, mm, ss, ms);
+                                } else {
+                                    stat = calendar.checkDateTime(y, m, d, hh, mm, ss);
+                                }
+                            }
+                            break;
+
+                        case TIMEOFDAY:
+                            {
+                                int hh = sc.nextInt();
+                                int mm = sc.nextInt();
+                                int ss = sc.nextInt();
+                                int millis = sc.nextInt();
+                                stat = calendar.checkTimeOfDay(hh, mm, ss, millis);
+                            }
+                            break;
+
+                        case MINIMUM:
+                            {
+                                int f = getInt(sc);
+                                int v = getInt(sc);
+                                stat = calendar.checkMinimum(f, v);
+                            }
+                            break;
+
+                        case GREATESTMINIMUM:
+                            {
+                                int f = getInt(sc);
+                                int v = getInt(sc);
+                                stat = calendar.checkGreatestMinimum(f, v);
+                            }
+                            break;
+
+                        case ACTUALMINIMUM:
+                            {
+                                int f = getInt(sc);
+                                int v = getInt(sc);
+                                stat = calendar.checkActualMinimum(f, v);
+                            }
+                            break;
+
+                        case MAXIMUM:
+                            {
+                                int f = getInt(sc);
+                                int v = getInt(sc);
+                                stat = calendar.checkMaximum(f, v);
+                            }
+                            break;
+
+                        case LEASTMAXIMUM:
+                            {
+                                int f = getInt(sc);
+                                int v = getInt(sc);
+                                stat = calendar.checkLeastMaximum(f, v);
+                            }
+                            break;
+
+                        case ACTUALMAXIMUM:
+                            {
+                                int f = getInt(sc);
+                                int v = getInt(sc);
+                                stat = calendar.checkActualMaximum(f, v);
+                            }
+                            break;
+
+                        default:
+                            throw new RuntimeException(lineno() + "Unknown operand");
+                        }
+                        if (!stat) {
+                            throw new RuntimeException(lineno() + calendar.getMessage());
+                        }
+                    }
+                    break;
+
+                case PRINT:
+                    {
+                        String s = sc.next();
+                        if (s.charAt(0) == '$') {
+                            Variable var = variable(s);
+                            if (var == null)
+                                throw new RuntimeException(lineno() + "Unknown token: " + s);
+                            System.out.printf("%s%s=%d%n", lineno(), s, var.longValue());
+                            break;
+                        }
+
+                        Symbol sym = symbol(s);
+                        switch (sym.type) {
+                        case INSTANCE:
+                            {
+                                Calendar cal = calendar;
+                                String name = "current";
+                                if (sc.hasNext()) {
+                                    name = sc.next();
+                                    cal = cals.get(name.toLowerCase(Locale.ROOT));
+                                }
+                                System.out.printf("%s%s=%s%n", lineno(), name, cal);
+                            }
+                            break;
+
+                        case FIELD:
+                            {
+                                int f = sym.value();
+                                String remark = "";
+                                if (sc.hasNext()) {
+                                    remark = sc.findInLine(".+");
+                                }
+                                System.out.printf("%s%s=%d %s%n", lineno(), calendar.fieldName(f),
+                                                  calendar.get(f), remark);
+                            }
+                            break;
+
+                        case MILLIS:
+                            {
+                                String remark = "";
+                                if (sc.hasNext()) {
+                                    remark = sc.findInLine(".+");
+                                }
+                                System.out.printf("%sMillis=%d %s%n", lineno(),
+                                                  calendar.getTimeInMillis(), remark);
+                            }
+                            break;
+
+                        case MINIMUM:
+                            System.out.printf("%s%s=%d%n", lineno(),
+                                              s, calendar.getMinimum(getInt(sc)));
+                            break;
+
+                        case GREATESTMINIMUM:
+                            System.out.printf("%s%s=%d%n", lineno(),
+                                              s, calendar.getGreatestMinimum(getInt(sc)));
+                            break;
+
+                        case ACTUALMINIMUM:
+                            System.out.printf("%s%s=%d%n", lineno(),
+                                              s, calendar.getActualMinimum(getInt(sc)));
+                            break;
+
+                        case MAXIMUM:
+                            System.out.printf("%s%s=%d%n", lineno(),
+                                              s, calendar.getMaximum(getInt(sc)));
+                            break;
+
+                        case LEASTMAXIMUM:
+                            System.out.printf("%s%s=%d%n", lineno(),
+                                              s, calendar.getLeastMaximum(getInt(sc)));
+                            break;
+
+                        case ACTUALMAXIMUM:
+                            System.out.printf("%s%s=%d%n", lineno(),
+                                              s, calendar.getActualMaximum(getInt(sc)));
+                            break;
+
+                        case DATE:
+                            System.out.println(lineno() + calendar.toDateString());
+                            break;
+
+                        case DATETIME:
+                            System.out.println(lineno() + calendar.toDateTimeString());
+                            break;
+
+                        case TIMEZONE:
+                            System.out.println(lineno() + "timezone=" + timezone);
+                            break;
+
+                        case LOCALE:
+                            System.out.println(lineno() + "locale=" + locale);
+                            break;
+                        }
+                    }
+                }
+            } catch (CalendarTestException cte) {
+                throw cte;
+            } catch (NoSuchElementException nsee) {
+                throw new NoSuchElementException(lineno() + "syntax error");
+            } catch (Exception e) {
+                result.setException(e);
+                result.setLineno(lineno);
+            }
+        }
+        Exception x = result.getException();
+        if (x != null) {
+            throw new RuntimeException(lineno(result.getLineno()) + "Unexpected exception", x);
+        }
+    }
+
+    private static Symbol symbol(String s) {
+        return Symbol.get(s.toLowerCase(Locale.ROOT));
+    }
+
+    private static Variable variable(String s) {
+        return Variable.get(s.toLowerCase(Locale.ROOT));
+    }
+
+    private static int getInt(Scanner sc) {
+        if (sc.hasNextInt()) {
+            return sc.nextInt();
+        }
+
+        String s = sc.next();
+        if (s.charAt(0) == '$') {
+            Variable var = variable(s);
+            if (var == null)
+                throw new RuntimeException(lineno() + "Unknown token: " + s);
+            return var.intValue();
+        }
+        Symbol sym = symbol(s);
+        if (sym == null)
+            throw new RuntimeException(lineno() + "Unknown token: " + s);
+        return sym.value();
+    }
+
+    private static long getLong(Scanner sc) {
+        if (sc.hasNextLong()) {
+            return sc.nextLong();
+        }
+
+        String s = sc.next();
+        if (s.charAt(0) == '$') {
+            Variable var = variable(s);
+            if (var == null)
+                throw new RuntimeException(lineno() + "Unknown token: " + s);
+            return var.longValue();
+        }
+        Symbol sym = symbol(s);
+        if (sym == null)
+            throw new RuntimeException(lineno() + "Unknown token: " + s);
+        return sym.value();
+    }
+
+    private static boolean relation(long v1, Symbol relop, long v2) {
+        boolean result = false;
+        switch (relop.type) {
+        case GT:
+            result = v1 > v2;
+            break;
+
+        case GE:
+            result = v1 >= v2;
+            break;
+
+        case EQ:
+            result = v1 == v2;
+            break;
+
+        case NEQ:
+            result = v1 != v2;
+            break;
+
+        case LE:
+            result = v1 <= v2;
+            break;
+
+        case LT:
+            result = v1 < v2;
+            break;
+        }
+        return result;
+    }
+
+    private static String lineno() {
+        return lineno(lineno);
+    }
+
+    private static String lineno(int ln) {
+        return file.getName() + ":" + ln + ": ";
+    }
+
+    private static void symbolError(Symbol sym) {
+        throw new RuntimeException(lineno + ": unexpected symbol: " + sym);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/CalendarTestException.java	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+public class CalendarTestException extends RuntimeException {
+    public CalendarTestException() {
+        super();
+    }
+
+    public CalendarTestException(String msg) {
+        super(msg);
+    }
+
+    public CalendarTestException(String msg, Throwable t) {
+        super(msg, t);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/Exceptions.java	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+public class Exceptions {
+    private static Map<String, Class> exceptions = new HashMap<String, Class>();
+
+    static {
+        put("nullpointerexception", NullPointerException.class);
+        put("illegalargumentexception", IllegalArgumentException.class);
+    }
+
+    private static void put(String key, Class clazz) {
+        Class c = exceptions.put(key, clazz);
+        if (c != null) {
+            throw new RuntimeException(key + " already exisits");
+        }
+    }
+
+    public static Class get(String key) {
+        return exceptions.get(key.toLowerCase(Locale.ROOT));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/GregorianAdapter.java	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.util.GregorianCalendar;
+import java.util.Locale;
+import java.util.TimeZone;
+
+public class GregorianAdapter extends GregorianCalendar {
+    static final int ALL_FIELDS = (1 << FIELD_COUNT) - 1;
+
+    public GregorianAdapter() {
+        super();
+    }
+
+    public GregorianAdapter(TimeZone tz) {
+        super(tz);
+    }
+
+    public GregorianAdapter(Locale loc) {
+        super(loc);
+    }
+
+    public GregorianAdapter(TimeZone tz, Locale loc) {
+        super(tz, loc);
+    }
+
+    public void computeTime() {
+        super.computeTime();
+    }
+
+    public void computeFields() {
+        super.computeFields();
+    }
+
+    public void complete() {
+        super.complete();
+    }
+
+    StringBuffer msg = new StringBuffer();
+
+    void initTest() {
+        msg = new StringBuffer();
+    }
+
+    String getMessage() {
+        String s = msg.toString();
+        msg = new StringBuffer();
+        return "    " + s;
+    }
+
+    void setMessage(String msg) {
+        this.msg = new StringBuffer(msg);
+    }
+
+    void appendMessage(String msg) {
+        this.msg.append(msg);
+    }
+
+    boolean getStatus() {
+        return msg.length() == 0;
+    }
+
+    int getSetStateFields() {
+        int mask = 0;
+        for (int i = 0; i < FIELD_COUNT; i++) {
+            if (isSet(i)) {
+                mask |= 1 << i;
+            }
+        }
+        return mask;
+    }
+
+    int[] getFields() {
+        int[] fds = new int[fields.length];
+        System.arraycopy(fields, 0, fds, 0, fds.length);
+        return fds;
+    }
+
+    boolean checkInternalDate(int year, int month, int dayOfMonth) {
+        initTest();
+        checkInternalField(YEAR, year);
+        checkInternalField(MONTH, month);
+        checkInternalField(DAY_OF_MONTH, dayOfMonth);
+        return getStatus();
+    }
+
+    boolean checkInternalDate(int year, int month, int dayOfMonth, int dayOfWeek) {
+        initTest();
+        checkInternalField(YEAR, year);
+        checkInternalField(MONTH, month);
+        checkInternalField(DAY_OF_MONTH, dayOfMonth);
+        checkInternalField(DAY_OF_WEEK, dayOfWeek);
+        return getStatus();
+    }
+
+    boolean checkInternalField(int field, int expectedValue) {
+        int val;
+        if ((val = internalGet(field)) != expectedValue) {
+            appendMessage("internalGet(" + CalendarAdapter.FIELD_NAMES[field] + "): got " + val +
+                          ", expected " + expectedValue + "; ");
+            return false;
+        }
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/JapaneseRollDayOfWeekTestGenerator.java	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.PrintWriter;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.GregorianCalendar;
+import java.util.Locale;
+import static java.util.Calendar.*;
+
+
+public class JapaneseRollDayOfWeekTestGenerator {
+    private static final String[] ERAS = {
+        "BeforeMeiji", "Meiji", "Taisho", "Showa", "Heisei"
+    };
+
+    private static final String[] DAYOFWEEK = {
+        null, "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+    };
+
+    private static final int[] DAYOFMONTH = {
+        25, 26, 27, 28, 29, 30, 31,
+         1,  2,  3,  4,  5,  6,  7
+    };
+
+    private static final int DOM_BASE = 7;
+
+    //Usage: JapaneseRollDayOfWeekTestGenerator will generate test script into
+    // file rolldow.cts.
+    public static void generateTestScript(String[] args) throws Exception{
+        Locale.setDefault(Locale.ROOT);
+
+        //This test generator assumes that Heisei has (nYears - 1) or more years.
+        int nYears = (args.length == 1) ?
+                Math.max(3, Math.min(Integer.parseInt(args[0]), 40)) : 28;
+
+        // Start from Showa 63
+        int era = 3;
+        int year = 63;
+        Path testPath = Paths.get(System.getProperty("test.classes"));
+        String scFileName = testPath + "/rolldow.cts";
+
+        try (PrintWriter out = new PrintWriter(scFileName)){
+            out.println("locale ja JP JP\n" + "new instance jcal\n" + "use jcal");
+            for (int y = 0; y < nYears; y++) {
+                out.printf("\nTest %s %d\n", ERAS[era], year);
+                for (int fdw = SUNDAY; fdw <= SATURDAY; fdw++) {
+                    int endFdw = fdw + 6;
+                    if (endFdw > SATURDAY) {
+                        endFdw -= 7;
+                    }
+                    for (int mdifw = 1; mdifw <= 7; mdifw++) {
+                        int domIndex = DOM_BASE;
+                        out.println(" clear all");
+                        out.printf(" set FirstDayOfWeek %s\n", DAYOFWEEK[fdw]);
+                        out.printf(" set MinimalDaysInFirstWeek %d\n", mdifw);
+                        out.printf(" set date %s %d Jan 1\n", ERAS[era], year);
+                        out.println(" get week_of_year\n" + " assign $result $woy");
+                        out.println(" get day_of_week\n" + " assign $result $doy");
+
+                        int gyear = year + (year >= 60 ? 1925 : 1988);
+                        int next = new GregorianCalendar(gyear, JANUARY, 1).get(DAY_OF_WEEK);
+                        for (int i = 0; i < 10; i++) {
+
+                            out.println(" roll day_of_week 1");
+                            next = nextFdw(next, fdw, endFdw);
+                            if (next == fdw) {
+                                domIndex -= 6;
+                            } else {
+                                domIndex++;
+                            }
+                            int dom = DAYOFMONTH[domIndex];
+                            out.printf("\tcheck date %d %s %d%n", (dom >= 25) ? year - 1 : year,
+                                    (dom >= 25) ? "Dec" : "Jan", dom);
+                            out.println("\teval $doy + 1");
+                            out.println("\tassign $result $doy");
+                            out.println("\tassign Sun $doy if $doy > Sat");
+                            out.println("\tcheck day_of_week $doy");
+                            out.println("\tcheck week_of_year $woy");
+                        }
+
+                        for (int i = 0; i < 10; i++) {
+                            out.println("\troll day_of_week -1");
+                            out.println("\teval $doy - 1");
+                            out.println("\tassign $result $doy");
+                            out.println("\tassign Sat $doy if $doy < Sun");
+                            out.println("\tcheck day_of_week $doy");
+                            out.println("\tcheck week_of_year $woy");
+                        }
+                    }
+                }
+
+                if (year == 64 && era == 3) {
+                    era++;
+                    year = 2;
+                } else {
+                    year++;
+                }
+            }
+        }
+    }
+
+    private static int nextFdw(int x, int start, int end) {
+        if (x == end)
+            return start;
+        x++;
+        if (x > SATURDAY)
+            x = SUNDAY;
+        return x;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/JapaneseRollTests.java	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @summary tests Japanese Calendar.
+ * @bug 4609228
+ * @compile -XDignore.symbol.file
+ *    CalendarAdapter.java
+ *    CalendarTestEngine.java
+ *    CalendarTestException.java
+ *    Exceptions.java
+ *    GregorianAdapter.java
+ *    Result.java
+ *    Symbol.java
+ *    Variable.java
+ *    JapaneseRollDayOfWeekTestGenerator.java
+ * @run main/timeout=120/othervm JapaneseRollTests
+ */
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class JapaneseRollTests {
+    private static List<String> TZ_TEST_LIST = Arrays.asList(
+        "tz_japan.cts", "tz_pst.cts");
+    private static Path srcPath = Paths.get(System.getProperty("test.src"));
+    private static Path testPath = Paths.get(System.getProperty("test.classes"));
+
+    public static void main(String[] args) throws Throwable {
+        List<String> modeList = getFileNameList("params");
+        //Test only 3 years by default
+        String[] jpyear ={"3"};
+        JapaneseRollDayOfWeekTestGenerator.generateTestScript(jpyear);
+
+        for (String tz : TZ_TEST_LIST) {
+            for(String mode:modeList){
+                String[] ts = { srcPath + "/timezones/" + tz,
+                        srcPath + "/params/" + mode,
+                        testPath + "/rolldow.cts"};
+
+                CalendarTestEngine.main(ts);
+            }
+        }
+    }
+
+    private static List<String> getFileNameList(String type ){
+        List<String> fileList = new ArrayList<>();
+        File dir = new File(srcPath + "/"+ type);
+        File[] testFiles = dir.listFiles(new FilenameFilter() {
+            public boolean accept(File dir, String name) {
+                return name.toLowerCase().endsWith(".cts");
+            }
+        });
+        for (File f:testFiles) {
+            fileList.add(f.getName());
+        }
+
+        return fileList;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/JapaneseTests.java	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @summary tests Japanese Calendar.
+ * @bug 4609228
+ * @compile -XDignore.symbol.file
+ *    CalendarAdapter.java
+ *    CalendarTestEngine.java
+ *    CalendarTestException.java
+ *    Exceptions.java
+ *    GregorianAdapter.java
+ *    Result.java
+ *    Symbol.java
+ *    Variable.java
+ * @run main/othervm/timeout=120 JapaneseTests
+ */
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class JapaneseTests {
+
+    private static List<String> SET_LENIENT = Arrays.asList(
+            "japanese_minmax.cts",
+            "japanese_add.cts",
+            "japanese_roll.cts",
+            "japanese_exceptions.cts");
+    private static List<String> DEFAULT_LENIENT = Arrays.asList(
+            "japanese.cts",
+            "japanese_normalization.cts");
+
+    private static Path srcPath = Paths.get(System.getProperty("test.src"));
+
+    public static void main(String[] args) throws Throwable {
+        List<String> tzList = getFileNameList("timezones");
+        List<String> modeList = getFileNameList("params");
+
+        for (String jaTest: DEFAULT_LENIENT) {
+            for (String tz : tzList) {
+                String[] ts = { srcPath + "/timezones/" + tz,
+                        srcPath + "/japanese/" + jaTest};
+                CalendarTestEngine.main(ts);
+            }
+        }
+
+        for (String jaTest: SET_LENIENT) {
+            for (String tz : tzList) {
+                for (String mode : modeList) {
+                    String[] ts = { srcPath + "/timezones/" + tz,
+                            srcPath + "/params/" + mode,
+                            srcPath + "/japanese/" + jaTest };
+                    CalendarTestEngine.main(ts);
+                }
+            }
+        }
+    }
+
+    private static List<String> getFileNameList(String type ){
+        List<String> fileList = new ArrayList<>();
+        File dir = new File(srcPath + "/"+ type);
+        File[] testFiles = dir.listFiles(new FilenameFilter() {
+            public boolean accept(File dir, String name) {
+                return name.toLowerCase().endsWith(".cts");
+            }
+        });
+        for (File f:testFiles) {
+            fileList.add(f.getName());
+        }
+        return fileList;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/README	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,566 @@
+Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
+DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+This code is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License version 2 only, as
+published by the Free Software Foundation.
+
+This code is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+version 2 for more details (a copy is included in the LICENSE file that
+accompanied this code).
+
+You should have received a copy of the GNU General Public License version
+2 along with this work; if not, write to the Free Software Foundation,
+Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+or visit www.oracle.com if you need additional information or have any
+questions.
+ 
+			   CALENDAR TEST SCRIPT
+
+			     Masayoshi Okutsu
+				2005-03-18
+
+Introduction
+------------
+
+Calendar Test Script is a simple scripting language to describe test cases
+for java.util.Calendar and its subclasses. It should be much more
+productive to use this script language than writing test programs in Java.
+
+A script looks like below.
+
+1    locale ja JP JP
+2    timezone Asia/Tokyo
+3    new instance jcal
+4    test day of week on Heisei 1 Jan 8
+5	use jcal
+6	    clear all
+7	    set date Heisei 1 Jan 8
+8	    check day_of_week Sun
+
+The first line defines a Locale to be used for creating Calendar
+instances. Line 2 defines the current TimeZone to be Asia/Tokyo that is
+used creating Calendar instances. Line 3 creates a Calendar instance with
+the Locale and TimeZone instances. Its reference name is `jcal'. Line 4
+indicates a start point for a test case with a short test case
+description. Line 5 designates `jcal' as the current Calendar
+instance. All calendar operation commands are applied to the current
+Calendar instance. Line 6 clears all of the calendar fields (e.g., ERA,
+YEAR, MONTH, etc.). Line 7 sets the ERA, YEAR, MONTH and DAY_OF_MONTH
+fields to Heisei, 1, JANUARY and 8, respectively. Line 8 checks if the
+DAY_OF_WEEK value is SUNDAY. If it's not, then a RuntimeException is
+thrown.
+
+Script Grammar
+--------------
+
+A line is a comment, blank or command line. Any text after '#' is always
+treated as a comment and ignored, like a shell script.
+
+    # This is a comment line.
+
+A command line consists of a command and its parameters, optionally
+followed by a comment. For example,
+
+    set date Heisei 1 Jan 8     # The first day of Heisei
+
+`set' is a command to set `date' to Heisei year 1 January 8th. `Heisei' is
+a constant for the Japanese Heisei era value which is consistent with the
+Japanese imperial calendar implementation. `Jan' is a constant for
+Calendar.SUNDAY. The text after '#' is ignored.
+
+Keywords are case-insensitive.
+
+    set DAY_OF_WEEK MON
+    SET day_of_week Mon
+
+are the same thing.
+
+Lexical analysis is very simple. A command must be complete in a single
+line. Keywords and symbols must be separated by white space. For example,
+"$result+1" is parsed as one token. It must be written as "$result + 1".
+
+Variables
+---------
+
+Variables can be used in any context to store an integer value and are
+referenced in any contexts where an integer value is required. A variable
+name must start with a '$', such as `$maxyear'. The integer value is
+handled as a long.
+
+`$result' is reserved for storing a result of a get commend operation. For
+example, executing the following command:
+
+    get day_of_month
+
+sets $result to the get(Calendar.DAY_OF_MONTH) value of the current
+Calendar instance. (See NEW and USE commands for the current Calendar
+instance.)
+
+Commands
+--------
+
+The following defines each command and its syntax. Keywords are described
+in upper case below.
+
+LOCALE language [country [variant]]
+
+    Creates a Locale instance by calling new Locale(language, country,
+    variant). country and variant are optional. Defining LOCALE overrides
+    the previously defined Locale value if any. The initial Locale value
+    is Locale.getDefault().
+
+TIMEZONE tzid
+
+    Creates a TimeZone instance by calling
+    TimeZone.getTimeZone(tzid). Defining TIMEZONE overrides the previously
+    defined Locale value if any. The initial TimeZone value is
+    TimeZone.getDefault().
+
+NEW INSTANCE calendarname
+
+    Creates a Calendar instance by calling Calendar.getInstance(TimeZone,
+    Locale). TimeZone and Locale are those defined by TIMEZONE and LOCALE
+    commands (or their initial values), respectively. The instance is
+    associated with `calendarname' and becomes the current Calendar
+    instance to be used for testing.
+
+NEW GREGORIAN calendarname
+
+    Creates a Calendar instance by calling new GregorianCalendar(TimeZone,
+    Locale). TimeZone and Locale are those defined by TIMEZONE and LOCALE
+    commands (or their initial values), respectively. The instance is
+    associated with `calendarname' and becomes the current Calendar
+    instance to be used for testing.
+
+TEST [comments...]
+
+    Declares the beginning of a test case. `comments...' gives a short
+    description of a test case. (Multiple lines are not supported.) The
+    test system displays `comments...' to System.out. For example, the
+    following command:
+
+       test A test case for non-lenient mode
+
+    will output:
+
+       Test #n: A test case for non-lenient mode
+
+    where `n' is a sequence number of TEST command lines appeared in a
+    test script file.
+
+USE calendarname
+
+    Specifies the current Calendar instance to use for testing by
+    `calendarname'. If you need to use more than one Calendar instances,
+    then you have to switch those Calendar instances by the USE command.
+
+ASSIGN value variable
+
+    Assigns `value' to `variable'. `value' can be an integer literal, a
+    variable name or a constant. Examples are:
+
+	assign 2005 $year
+	assign $result $temp
+	assign Sun $Microsystems
+
+ASSIGN value variable IF condition
+
+    Assigns `value' to `variable' if `condition' is true. `condition' is a
+    relational expression as:
+
+        value1 relOp value2
+
+    `relOp' must be one of >, >=, ==, !=, <=, <.
+
+EVAL expression
+
+    Evaluates the given *simple* expression and assigns the expression
+    value to $result if `op' is one of the arithmetic operators (+, -, *,
+    /, %). If `op' is one of the relational operators (>, >=, ==, !=, <=,
+    <), then EVAL throws an exception if the expression value is false, or
+    does nothing if the value is true. Note that an operator and values
+    must be separated by white space.
+
+    The following is an example of the ASSIGN and EVAL commands usage to
+    get the next day of week value. Then, it's used to check the
+    roll(DAY_OF_WEEK) result.
+
+        get day_of_week
+	eval $result + 1
+	assign $result $nextDayOfWeek
+	assign Sun $nextDayOfWeek if $nextDayOfWeek > Sat
+        roll day_of_week 1
+        check day_of_week $nextDayOfWeek
+
+CLEAR ALL
+
+    Clears all the calendar fields of the current Calendar instance by
+    calling Calendar.clear().
+
+CLEAR field
+
+    Clears the specified calendar `field' of the current Calendar instance
+    by calling Calendar.clear(field).`field' must be one of the Calendar
+    field indices, ERA, YEAR, MONTH, DAY_OF_MONTH, WEEK_OF_YEAR, etc.
+
+GET MILLIS
+
+    Gets the millisecond value of the current Calendar instance by calling
+    Calendar.getTimeInMillis(). The value is assigned to $result.
+
+GET field
+
+    Gets the `field' value specified of the current Calendar instance by
+    calling Calendar.get(field). The value is assigned to $result.
+
+GET MIN field
+
+    Gets the minimum value of the specified `field' of the current
+    Calendar instance by calling Calendar.getMinimum(field). The value is
+    assigned to $result.
+
+GET GREATESTMIN field
+
+    Gets the greatest minimum value of the specified `field' of the
+    current Calendar instance by calling
+    Calendar.getGreatestMinimum(field). The value is assigned to $result.
+
+GET ACTUALMIN field
+
+    Gets the actual minimum value of the specified `field' of the current
+    Calendar instance by calling Calendar.getActualMinimum(field). The
+    value is assigned to $result.
+
+GET MAX field
+
+    Gets the maximum value of the specified `field' of the current
+    Calendar instance by calling Calendar.getMaximum(field). The value is
+    assigned to $result.
+
+GET LEASTMAX field
+
+    Gets the least maximum value of the specified `field' of the current
+    Calendar instance by calling Calendar.getLeastMaximum(field). The
+    value is assigned to $result.
+
+GET ACTUALMAX field
+
+    Gets the actual maximum value of the specified `field' of the current
+    Calendar instance by calling Calendar.getActualMaximum(field). The
+    value is assigned to $result.
+
+GET FIRSTDAYOFWEEK
+
+    Gets the first day of week value of the current Calendar instance by
+    calling Calendar.getFirstDayOfWeek(). The value is assigned to
+    $result.
+
+GET MINIMALDAYSINFIRSTWEEK
+
+    Gets the minimal days in first week value of the current Calendar
+    instance by calling Calendar.getMinimalDaysInFirstWeek(). The value is
+    assigned to $result.
+
+ADD field amount
+
+    Adds `amount' to the specified `field' of the current Calendar
+    instance by calling Calendar.add(field, amount).
+
+ROLL field amount
+
+    Rolls `amount' of the specified `field' of the current Calendar
+    instance by calling Calendar.roll(field, amount).
+
+SET MILLIS value
+
+    Sets the millisecond value of the current Calendar instance to `value'
+    by calling Calendar.setTimeInMillis(value).
+
+SET field value
+
+    Sets the `field' value of the current Calendar instance to `value' by
+    calling Calendar.set(field, value).
+
+SET DATE era year month dayOfMonth
+
+    Sets the date of the current Calendar instance to the date specified
+    by `era', `year', `month' and `dayOfMonth' by calling
+    Calendar.set(ERA, era) and Calendar.set(year, month,
+    dayOfMonth). Please note that `month' follows the Calendar convention
+    and is 0-based. (e.g., JANUARY is 0)
+
+SET DATE year month dayOfMonth
+
+    Sets the date of the current Calendar instance to the date specified
+    by `year', `month' and `dayOfMonth' by calling
+    Calendar.set(year, month, dayOfMont). Please note that `month'
+    follows the Calendar convention and is 0-based. (e.g., JANUARY is 0)
+
+SET DATETIME year month dayOfMonth hourOfDay minute second
+
+    Sets the date and time of the current Calendar instance to the date
+    and time specified by `year', `month', `dayOfMonth', `hourOfDay',
+    `minute', and `second' by calling Calendar.set(year, month,
+    dayOfMonth, hourOfDay, minute, second). Please note that `hourOfDay'
+    is the 24-hour clock.
+
+SET TIMEOFDAY hourOfDay minute second millisecond
+
+    Sets the date and time of the current Calendar instance to the date
+    and time specified by `year', `month', `dayOfMonth', `hourOfDay',
+    `minute', and `second' by calling Calendar.set(HOUR_OF_DAY,
+    hourOfDay), Calendar.set(MINUTE, minute), and Calendar.set(SECOND,
+    second).
+
+SET FIRSTDAYOFWEEK value
+
+    Sets the first day of week value of the current Calendar instance to
+    `value' by calling Calendar.setFirstDayOfWeek(value).
+
+SET MINIMALDAYSINFIRSTWEEK value
+
+    Sets the minimal days in the first week value of the current Calendar
+    instance to `value' by calling Calendar.setMinimalDaysInFirstWeek(value).
+
+SET LENIENT
+
+    Sets the lenient mode in the current Calendar instance by calling
+    Calendar.setLenient(true).
+
+SET NON-LENIENT
+
+    Sets the non-lenient mode in the current Calendar instance by calling
+    Calendar.setLenient(false).
+
+CHECK MILLIS value
+
+    Checks if the specified `value' is the same as the millisecond value
+    of the current Calendar instance given by calling
+    Calendar.getTimeInMillis(). If the values are different, an exception
+    is thrown.
+
+CHECK DATE era year month dayOfMonth
+
+    Checks if the date specified by `era', `year', `month' and
+    `dayOfMonth' is the same date of the current Calendar instance. The
+    calendar date is given by calling Calendar.get(ERA),
+    Calendar.get(YEAR), Calendar.get(MONTH), and
+    Calendar.get(DAY_OF_MONTH). If the dates are different, an exception
+    is thrown.
+
+CHECK DATE year month dayOfMonth
+
+    Checks if the date specified by `year', `month' and `dayOfMonth' is
+    the same date of the current Calendar instance. The calendar date is
+    given by calling Calendar.get(YEAR), Calendar.get(MONTH), and
+    Calendar.get(DAY_OF_MONTH). If the dates are different, an exception
+    is thrown.
+
+CHECK DATETIME year month dayOfMonth hourOfDay minute second
+
+    Checks if the date and time specified by `year', `month',
+    `dayOfMonth', `hourOfDay', `minute', and `second' are the same ones of
+    the current Calendar instance. The calendar date and time are given by
+    calling Calendar.get(YEAR), Calendar.get(MONTH),
+    Calendar.get(DAY_OF_MONTH), Calendar.get(HOUR_OF_DAY),
+    Calendar.get(MINUTE) and Calendar.get(SECOND). If the dates or times
+    are different, an exception is thrown.
+
+CHECK DATETIME year month dayOfMonth hourOfDay minute second millisecond
+
+    Checks if the date and time specified by `year', `month',
+    `dayOfMonth', `hourOfDay', `minute', `second' and `millisecond' are
+    the same ones of the current Calendar instance. The calendar date and
+    time are given by calling Calendar.get(YEAR), Calendar.get(MONTH),
+    Calendar.get(DAY_OF_MONTH), Calendar.get(HOUR_OF_DAY),
+    Calendar.get(MINUTE), Calendar.get(SECOND) and
+    Calendar.get(MILLISECOND). If the dates or times are different, an
+    exception is thrown.
+
+CHECK TIMEOFDAY hourOfDay minute second millisecond
+
+    Checks if the time of day specified by `hourOfDay', `minute', `second'
+    and `millisecond' are the same ones of the current Calendar
+    instance. The calendar date and time are given by calling
+    Calendar.get(HOUR_OF_DAY), Calendar.get(MINUTE), Calendar.get(SECOND)
+    and Calendar.get(MILLISECOND). If the times are different, an
+    exception is thrown.
+
+CHECK field value
+
+    Checks if the value of the given `field' of the current Calendar
+    instance is equal to the given `value'. If it doesn't, an exception is
+    thrown.
+
+CHECK MIN field value
+
+    Checks if the minimum value of the specified `field' of the current
+    Calendar instance is equal to the specified `value'. If not, an
+    exception is thrown.
+
+CHECK GREATESTMIN field value
+
+    Checks if the greatest minimum value of the specified `field' of the
+    current Calendar instance is equal to the specified `value'. If not,
+    an exception is thrown.
+
+CHECK ACTUALMIN field value
+
+    Checks if the actual minimum value of the specified `field' of the
+    current Calendar instance is equal to the specified `value'. If not,
+    an exception is thrown.
+
+CHECK MAX field value
+
+    Checks if the maximum value of the specified `field' of the current
+    Calendar instance is equal to the specified `value'. If not, an
+    exception is thrown.
+
+CHECK LEASTMAX field value
+
+    Checks if the least maximum value of the specified `field' of the
+    current Calendar instance is equal to the specified `value'. If not,
+    an exception is thrown.
+
+CHECK ACTUALMAX field value
+
+    Checks if the actual maximum value of the specified `field' of the
+    current Calendar instance is equal to the specified `value'. If not,
+    an exception is thrown.
+
+EXCEPTION exceptionname
+
+    Checks if the previous command threw the specified exception by
+    `exceptionname'. For example, the following tests invalid date
+    detection in non-lenient.
+
+	set non-lenient
+	set date 2005 Feb 29 # 2005 isn't a leap year.
+	get millis
+	exception IllegalArgumentException
+
+PRINT variable
+
+    Prints the value of `variable'.
+
+PRINT INSTANCE [calendarname]
+
+    Prints the Calendar.toString() value of the current Calendar instance
+    or the instance given by `calendarname'.
+
+PRINT field
+
+    Prints the value of the specified `field' of the current Calendar
+    instance. The value is obtained by calling Calendar.get(field).
+
+PRINT MILLIS
+
+    Prints the millisecond value of the current Calendar instance. The
+    value is obtained by calling Calendar.getTimeInMillis().
+
+PRINT MIN field
+
+    Prints the minimum value of the specified field by `field' of the
+    current Calendar instance. The value is obtained by calling
+    Calendar.getMinimum(field).
+
+PRINT GREATESTMIN field
+
+    Prints the greatest minimum value of the specified field by `field' of
+    the current Calendar instance. The value is obtained by calling
+    Calendar.getGreatestMinimum(field).
+
+PRINT ACTUALMIN field
+
+    Prints the actual minimum value of the specified field by `field' of
+    the current Calendar instance by calling
+    Calendar.getActualMinimum(field).
+
+PRINT MAX field
+
+    Prints the maximum value of the specified field by `field' of the
+    current Calendar instance. The value is obtained by calling
+    Calendar.getMaximum(field).
+
+PRINT LEASTMAX field
+
+    Prints the least maximum value of the specified field by `field' of
+    the current Calendar instance. The value is obtained by calling
+    Calendar.getLeastMaximum(field).
+
+PRINT ACTUALMAX field
+
+    Prints the actual maximum value of the specified field by `field' of
+    the current Calendar instance. The value is obtained by calling
+    Calendar.getActualMaximum(field).
+
+PRINT DATE
+
+    Prints the date of the current Calendar instance in format
+    "[ERA] yyyy-MM-dd". The date is obtained by calling Calendar.get(ERA),
+    Calendar.get(YEAR), Calendar.get(MONTH), and
+    Calendar.get(DAY_OF_MONTH).
+
+PRINT DATETIME
+
+    Prints the date and time of the current Calendar instance in an ISO
+    8601-style format "[ERA] yyyy-MM-ddTHH:mm:ss.SSS{Z|{+|-}hhmm}". The
+    date and time are obtained by calling Calendar.get(ERA),
+    Calendar.get(YEAR), Calendar.get(MONTH), Calendar.get(DAY_OF_MONTH),
+    Calendar.get(HOUR_OF_DAY), Calendar.get(MINUTE), Calendar.get(SECOND),
+    Calendar.get(MILLISECOND), Calendar.get(ZONE_OFFSET), and
+    Calendar.get(DST_OFFSET).
+
+PRINT TIMEZONE
+
+    Prints the toString() value of the current TimeZone.
+
+PRINT LOCALE
+
+    Prints the toString() value of the current Locale.
+
+Usage
+-----
+
+The usage of the test script system at this directory is:
+
+   $ javac -d classes --add-exports java.base/sun.util=ALL-UNNAMED --add-exports java.base/sun.util.calendar=ALL-UNNAMED *.java
+   $ java -cp classes CalendarTestEngine scriptfiles...
+
+A script file has suffix ".cts" by convention. If multiple script files
+are specified. Those files are sequentially executed as if those are a
+single test script. For example, if we have the following script files:
+
+   file1.cts:
+        locale ja JP JP
+        timezone Asia/Tokyo
+   file2.cts:
+        new instance jcal
+        new gregorian gcal
+        test example
+            use jcal
+                print datetime
+		get millis
+		print $result
+            use gcal
+		set millis $result
+		print datetime
+
+running CalendarTestEngine with those files will produce:
+
+    $ java -cp classes CalendarTestEngine file1.cts file2.cts
+    Starting file1.cts...
+    Completed file1.cts
+    Starting file2.cts...
+    Test #1: example
+    file2.cts:5: Heisei 0017-03-18T20:00:25.402+0900
+    file2.cts:7: $result=1111143625402
+    file2.cts:10: 2005-03-18T20:00:25.402+0900
+    Completed file2.cts	
+
+[end of README]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/Result.java	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+public class Result extends Variable {
+    private Exception e;
+    private int lineno;
+
+    public Result() {
+        super("$result", 0);
+        put("$result", this);
+    }
+
+    public void setLineno(int lineno) {
+        this.lineno = lineno;
+    }
+
+    public int getLineno() {
+        return lineno;
+    }
+
+    public void setException(Exception e) {
+        if (this.e != null) {
+            throw new RuntimeException("existing exception: " + e, e);
+        }
+        this.e = e;
+    }
+
+    public Exception getException() {
+        Exception e = this.e;
+        this.e = null;
+        return e;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/Symbol.java	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,328 @@
+/*
+ * Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import static java.util.Calendar.*;
+import static java.util.GregorianCalendar.*;
+
+public class Symbol {
+
+    private static Map<String, Symbol> symbols;
+
+    String name;
+    Type type;
+    int value;
+    boolean isArithmetic;
+
+    private Symbol(Type type, Integer value) {
+        this(type, value, false);
+    }
+
+    private Symbol(Type type) {
+        this(type, null, false);
+    }
+
+    private Symbol(Type type, boolean isArithmetic) {
+        this(type, null, isArithmetic);
+    }
+
+    private Symbol(Type type, Integer value, boolean isArithmetic) {
+        this.name = type.toString().toLowerCase(Locale.ROOT);
+        this.type = type;
+        if (value != null)
+            this.value = value;
+        this.isArithmetic = isArithmetic;
+    }
+
+    public int value() {
+        return value;
+    }
+
+    public String toString() {
+        return type.name();
+    }
+
+    public boolean isArithmetic() {
+        return isArithmetic;
+    }
+
+    public static Symbol get(String s) {
+        return symbols.get(s);
+    }
+
+    public static enum Type {
+        // Directives
+        TEST,
+        // Commands
+        LOCALE, TIMEZONE, NEW, USE, ASSIGN, EVAL,
+        CLEAR, SET, GET, ADD, ROLL, CHECK, PRINT, EXCEPTION,
+        IF,
+        // Operands
+        INSTANCE, GREGORIAN, ALL, MILLIS, DATE, DATETIME, TIMEOFDAY,
+        LENIENT, NONLENIENT,
+        MINIMUM, GREATESTMINIMUM, ACTUALMINIMUM,
+        MAXIMUM, LEASTMAXIMUM, ACTUALMAXIMUM,
+        FIRSTDAYOFWEEK, MINIMALDAYSINFIRSTWEEK,
+        // Arithmetic operators
+        PLUS, MINUS, MULTIPLY, DIVIDE, MOD,
+        // Relational operators
+        GT, GE, EQ, NEQ, LE, LT,
+        // Calendar field indices
+        FIELD,
+        // Day of week
+        DAYOFWEEK,
+        // Month
+        MONTH,
+        // AM/PM
+        AMPM,
+        // Era values
+        ERA;
+    }
+
+    private static final void put(String key, Symbol sym) {
+        Symbol s = symbols.put(key, sym);
+        if (s != null) {
+            throw new RuntimeException("duplicated key: " + key);
+        }
+    }
+
+    static {
+        symbols = new HashMap<String, Symbol>();
+        Symbol sym;
+        // Directives
+        put("test", new Symbol(Type.TEST));
+
+        // Commands
+        put("locale", new Symbol(Type.LOCALE));
+        sym = new Symbol(Type.TIMEZONE);
+        put("tz", sym);
+        put("timezone", sym);
+        put("new", new Symbol(Type.NEW));
+        put("use", new Symbol(Type.USE));
+        put("assign", new Symbol(Type.ASSIGN));
+        put("eval", new Symbol(Type.EVAL));
+        put("clear", new Symbol(Type.CLEAR));
+        put("set", new Symbol(Type.SET));
+        put("get", new Symbol(Type.GET));
+        put("add", new Symbol(Type.ADD));
+        put("roll", new Symbol(Type.ROLL));
+        put("check", new Symbol(Type.CHECK));
+        put("print", new Symbol(Type.PRINT));
+        put("exception", new Symbol(Type.EXCEPTION));
+        put("throw", get("exception"));
+        put("if", new Symbol(Type.IF));
+
+        // Operands
+        put("instance", new Symbol(Type.INSTANCE));
+        put("gregorian", new Symbol(Type.GREGORIAN));
+        put("all", new Symbol(Type.ALL));
+        put("millis", new Symbol(Type.MILLIS));
+        put("date", new Symbol(Type.DATE));
+        put("datetime", new Symbol(Type.DATETIME));
+        put("timeofday", new Symbol(Type.TIMEOFDAY));
+        put("lenient", new Symbol(Type.LENIENT));
+        sym = new Symbol(Type.NONLENIENT);
+        put("non-lenient", sym);
+        put("nonlenient", sym);
+        put("firstdayofweek", new Symbol(Type.FIRSTDAYOFWEEK));
+        put("minimaldaysinfirstweek", new Symbol(Type.MINIMALDAYSINFIRSTWEEK));
+
+        sym = new Symbol(Type.MINIMUM);
+        put("minimum", sym);
+        put("min", sym);
+        sym = new Symbol(Type.GREATESTMINIMUM);
+        put("greatestminimum", sym);
+        put("greatestmin", sym);
+        sym = new Symbol(Type.ACTUALMINIMUM);
+        put("actualminimum", sym);
+        put("actualmin", sym);
+        sym = new Symbol(Type.MAXIMUM);
+        put("maximum", sym);
+        put("max", sym);
+        sym = new Symbol(Type.LEASTMAXIMUM);
+        put("leastmaximum", sym);
+        put("leastmax", sym);
+        sym = new Symbol(Type.ACTUALMAXIMUM);
+        put("actualmaximum", sym);
+        put("actualmax", sym);
+
+        // Arithmetic operators
+        put("+", new Symbol(Type.PLUS, true));
+        put("-", new Symbol(Type.MINUS, true));
+        put("*", new Symbol(Type.MULTIPLY, true));
+        put("/", new Symbol(Type.DIVIDE, true));
+        put("%", new Symbol(Type.MOD, true));
+
+        // Relational operators
+        put(">", new Symbol(Type.GT, false));
+        put(">=", new Symbol(Type.GE, false));
+        put("==", new Symbol(Type.EQ, false));
+        put("!=", new Symbol(Type.NEQ, false));
+        put("<=", new Symbol(Type.LE, false));
+        put("<", new Symbol(Type.LT, false));
+
+        // Calendar Fields
+        put("era", new Symbol(Type.FIELD, ERA));
+        put("year", new Symbol(Type.FIELD, YEAR));
+        put("month", new Symbol(Type.FIELD, MONTH));
+        sym = new Symbol(Type.FIELD, WEEK_OF_YEAR);
+        put("week_of_year", sym);
+        put("weekofyear", sym);
+        put("woy", sym);
+        sym = new Symbol(Type.FIELD, WEEK_OF_MONTH);
+        put("week_of_month", sym);
+        put("weekofmonth", sym);
+        put("wom", sym);
+        sym = new Symbol(Type.FIELD, DAY_OF_MONTH);
+        put("day_of_month", sym);
+        put("dayofmonth", sym);
+        put("dom", sym);
+        sym = new Symbol(Type.FIELD, DAY_OF_YEAR);
+        put("day_of_year", sym);
+        put("dayofyear", sym);
+        put("doy", sym);
+
+        sym = new Symbol(Type.FIELD, DAY_OF_WEEK);
+        put("day_of_week", sym);
+        put("dayofweek", sym);
+        put("dow", sym);
+        sym = new Symbol(Type.FIELD, DAY_OF_WEEK_IN_MONTH);
+        put("day_of_week_in_month", sym);
+        put("dayofweekinmonth", sym);
+        put("dowim", sym);
+        sym = new Symbol(Type.FIELD, AM_PM);
+        put("am_pm", sym);
+        put("ampm", sym);
+        put("hour", new Symbol(Type.FIELD, HOUR));
+        sym = new Symbol(Type.FIELD, HOUR_OF_DAY);
+        put("hour_of_day", sym);
+        put("hourofday", sym);
+        put("hod", sym);
+        put("minute", new Symbol(Type.FIELD, MINUTE));
+        put("second", new Symbol(Type.FIELD, SECOND));
+        put("millisecond", new Symbol(Type.FIELD, MILLISECOND));
+        sym = new Symbol(Type.FIELD, ZONE_OFFSET);
+        put("zone_offset", sym);
+        put("zoneoffset", sym);
+        put("zo", sym);
+        sym = new Symbol(Type.FIELD, DST_OFFSET);
+        put("dst_offset", sym);
+        put("dstoffset", sym);
+        put("do", sym);
+
+        // Day of week
+        sym = new Symbol(Type.DAYOFWEEK, SUNDAY);
+        put("sunday", sym);
+        put("sun", sym);
+        sym = new Symbol(Type.DAYOFWEEK, MONDAY);
+        put("monday", sym);
+        put("mon", sym);
+        sym = new Symbol(Type.DAYOFWEEK, TUESDAY);
+        put("tuesday", sym);
+        put("tue", sym);
+        sym = new Symbol(Type.DAYOFWEEK, WEDNESDAY);
+        put("wednesday", sym);
+        put("wed", sym);
+        sym = new Symbol(Type.DAYOFWEEK, THURSDAY);
+        put("thursday", sym);
+        put("thu", sym);
+        sym = new Symbol(Type.DAYOFWEEK, FRIDAY);
+        put("friday", sym);
+        put("fri", sym);
+        sym = new Symbol(Type.DAYOFWEEK, SATURDAY);
+        put("saturday", sym);
+        put("sat", sym);
+
+
+        // Month
+        sym = new Symbol(Type.MONTH, JANUARY);
+        put("january", sym);
+        put("jan", sym);
+        sym = new Symbol(Type.MONTH, FEBRUARY);
+        put("february", sym);
+        put("feb", sym);
+        sym = new Symbol(Type.MONTH, MARCH);
+        put("march", sym);
+        put("mar", sym);
+        sym = new Symbol(Type.MONTH, APRIL);
+        put("april", sym);
+        put("apr", sym);
+        sym = new Symbol(Type.MONTH, MAY);
+        put("may", sym);
+        sym = new Symbol(Type.MONTH, JUNE);
+        put("june", sym);
+        put("jun", sym);
+        sym = new Symbol(Type.MONTH, JULY);
+        put("july", sym);
+        put("jul", sym);
+        sym = new Symbol(Type.MONTH, AUGUST);
+        put("august", sym);
+        put("aug", sym);
+        sym = new Symbol(Type.MONTH, SEPTEMBER);
+        put("september", sym);
+        put("sep", sym);
+        sym = new Symbol(Type.MONTH, OCTOBER);
+        put("octobwe", sym);
+        put("oct", sym);
+        sym = new Symbol(Type.MONTH, NOVEMBER);
+        put("november", sym);
+        put("nov", sym);
+        sym = new Symbol(Type.MONTH, DECEMBER);
+        put("december", sym);
+        put("dec", sym);
+        sym = new Symbol(Type.MONTH, UNDECIMBER);
+        put("undecimber", sym);
+
+        // AM/PM
+        put("am", new Symbol(Type.AMPM, AM));
+        put("pm", new Symbol(Type.AMPM, PM));
+
+        // Eras
+
+        // Julian eras
+        sym = new Symbol(Type.ERA, BC);
+        put("bc", sym);
+        put("bce", sym);
+        sym = new Symbol(Type.ERA, AD);
+        put("ad", sym);
+        put("ce", sym);
+
+        // Buddhist era
+        put("be", new Symbol(Type.ERA, 1));
+
+        // Japanese imperial eras
+        sym = new Symbol(Type.ERA, 0);
+        put("before_meiji", sym);
+        put("beforemeiji", sym);
+        put("meiji", new Symbol(Type.ERA, 1));
+        put("taisho", new Symbol(Type.ERA, 2));
+        put("showa", new Symbol(Type.ERA, 3));
+        put("heisei", new Symbol(Type.ERA, 4));
+        put("reiwa", new Symbol(Type.ERA, 5));
+
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/Variable.java	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+public class Variable {
+    private static Map<String,Variable> vars = new HashMap<String,Variable>();
+
+    private String name;
+    private long value;
+
+    Variable(String name, long value) {
+        this.name = name;
+        this.value = value;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public int intValue() {
+        if (value > Integer.MAX_VALUE || value < Integer.MIN_VALUE) {
+            throw new RuntimeException("Overflow/Underflow: " + value);
+        }
+        return (int) value;
+    }
+
+    public long longValue() {
+        return value;
+    }
+
+    public void setValue(int v) { value = v; }
+    public void setValue(long v) { value = v; }
+
+    // static methods
+
+    public static Variable newVar(String name, long value) {
+        if (name.charAt(0) != '$') {
+            throw new RuntimeException("wrong var name: " + name);
+        }
+        String s = name.toLowerCase(Locale.ROOT);
+        Variable v = new Variable(name, value);
+        put(name, v);
+        return v;
+    }
+
+    static void put(String s, Variable var) {
+        vars.put(s, var);
+    }
+
+    public static Variable get(String name) {
+        return vars.get(name);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/japanese/japanese.cts	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,331 @@
+#
+#
+#
+
+locale ja JP JP
+new instance jcal
+new gregorian gcal
+
+test Default dates
+    # Default for all unset fields
+    # 1970-01-01T00:00:00.000 local time (Gregorian)
+    # which is equivalent to Showa 45.
+    use gcal
+        clear all
+	get millis
+	# get the default milliseconds from the Epoch. It's time zone
+	# dependent.
+	assign $result $defmillis
+    use jcal
+	clear all
+	get millis
+	eval $result == $defmillis
+	check era Showa
+	check datetime 45 Jan 1 0 0 0
+	check millisecond 0
+
+    # If each era is set, then January 1 of each Gan-nen is the
+    # default.
+	clear all
+	set era BeforeMeiji
+	check era BeforeMeiji
+	check datetime 1 Jan 1 0 0 0
+	check millisecond 0
+
+	clear all
+	set era Meiji
+	check era Meiji
+	check datetime 1 Jan 1 0 0 0
+	check millisecond 0
+
+	clear all
+	set era Taisho
+	check era Meiji
+	check datetime 45 Jan 1 0 0 0
+	check millisecond 0
+
+	clear all
+	set era Showa
+	check era Taisho
+	check datetime 15 Jan 1 0 0 0
+	check millisecond 0
+
+	clear all
+	set era Heisei
+	check era Showa
+	check datetime 64 Jan 1 0 0 0
+	check millisecond 0
+
+	clear all
+	set era Reiwa
+	check era Heisei
+	check datetime 31 Jan 1 0 0 0
+	check millisecond 0
+
+#
+# Field resolution tests
+#
+	clear all
+	get firstdayofweek
+	# The test cases below assume that the first day of week is
+	# Sunday. So we should make sure it is.
+	eval $result == Sun
+	assign $result $fdow
+
+test Field resolution: YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK
+	set era Showa
+	set year 64
+	set week_of_month 1
+	check day_of_week $fdow
+	check date 64 Jan 1
+
+	clear all
+	set era Showa
+	set year 64
+	set week_of_month 1
+	set day_of_week Thu
+	check era Showa
+	check day_of_week Thu
+	check date 64 Jan 5
+
+	clear all
+	# Heise 1 January and Showa 64 January are the same month. Its
+	# first week should be the same week. (January is the default
+	# month.)
+	set era Heisei
+	set year 1
+	set week_of_month 1
+	check day_of_week $fdow
+	check era Showa
+	check date 64 Jan 1
+
+	# Test aggregation
+	clear all
+	set date Heisei 17 Mar 16
+	set week_of_month 1
+	set day_of_week Tue
+	check date Heisei 17 Mar 1
+
+	clear all
+	set week_of_month 1
+	set date Heisei 17 Mar 16
+	set day_of_week Tue
+	check date Heisei 17 Mar 1
+
+	clear all
+	set day_of_week Tue
+	set date Heisei 17 Mar 16
+	set week_of_month 1
+	check date Heisei 17 Mar 1
+
+	clear all
+	set day_of_week Tue
+	set date Heisei 17 Mar 16
+	set week_of_year 10
+	set week_of_month 1
+	check date Heisei 17 Mar 1
+
+	clear all
+	set day_of_week Tue
+	set date Heisei 17 Mar 16
+	set day_of_year 300
+	set week_of_month 1
+	check date Heisei 17 Mar 1
+
+test Field resolution: YEAR + MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK
+	clear all
+	set era Meiji
+	set year 45
+ 	set month Jul
+	set day_of_week_in_month 5
+	set day_of_week Mon
+	check date Meiji 45 Jul 29
+
+	clear all
+	set era Meiji
+	set year 45
+ 	set month Jul
+	set day_of_week_in_month 4
+	check date Meiji 45 Jul 28
+
+	clear all
+	set era Meiji
+	set year 45
+ 	set month Jul
+	set day_of_week_in_month 5
+	set day_of_week Tue
+	check date Taisho 1 Jul 30
+
+	clear all
+	set era Taisho
+	set year 1
+ 	set month Jul
+	set day_of_week_in_month 1
+	set day_of_week Tue
+	check date Meiji 45 Jul 2
+
+	# Test aggregation
+	clear all
+	set date Heisei 17 Mar 16
+	set day_of_week_in_month 1
+	set day_of_week Wed
+	check date Heisei 17 Mar 2
+
+	clear all
+	set day_of_week_in_month 1
+	set date Heisei 17 Mar 16
+	set day_of_week Wed
+	check date Heisei 17 Mar 2
+
+	clear all
+	set day_of_week Wed
+	set date Heisei 17 Mar 16
+	set day_of_week_in_month 1
+	check date Heisei 17 Mar 2
+
+	clear all
+	set day_of_week Wed
+	set date Heisei 17 Mar 16
+	set week_of_month 4
+	set day_of_week_in_month 1
+	check date Heisei 17 Mar 2
+
+	clear all
+	set day_of_week Wed
+	set date Heisei 17 Mar 16
+	set day_of_year 365
+	set day_of_week_in_month 1
+	check date Heisei 17 Mar 2
+
+	clear all
+	set day_of_week Wed
+	set date Heisei 17 Mar 16
+	set week_of_year 50
+	set day_of_week_in_month 1
+	check date Heisei 17 Mar 2
+
+test Field resolution: YEAR + DAY_OF_YEAR
+	clear all
+	set era Showa
+	set year 64
+	set day_of_year 7
+	check date Showa 64 Jan 7
+
+	clear all
+	set era Showa
+	set year 64
+	set day_of_year 10
+	check date Heisei 1 Jan 10
+
+	clear all
+	set era Showa
+	set year 64
+	check date Showa 64 Jan 1
+	check day_of_year 1
+
+	clear all
+	set era Heisei
+	set year 1
+	set day_of_year 10
+	check date Heisei 1 Jan 17
+
+	clear all
+	set era Heisei
+	set year 1
+	set day_of_year 1
+	check date Heisei 1 Jan 8
+
+	clear all
+	set era Heisei
+	set year 1
+	set day_of_year -1
+	check date Showa 64 Jan 6
+
+	clear all
+	set date Heisei 17 Mar 16
+	set day_of_year 31
+	check date Heisei 17 Jan 31
+
+	clear all
+	set date Heisei 17 Mar 16
+	set week_of_year 50
+	set day_of_week Wed
+	set day_of_year 31
+	check date Heisei 17 Jan 31
+
+	clear all
+	set date Heisei 17 Mar 16
+	set week_of_month 5
+	set day_of_week Wed
+	set day_of_year 31
+	check date Heisei 17 Jan 31
+
+test Field resolution: YEAR + DAY_OF_WEEK + WEEK_OF_YEAR
+	clear all
+	set era Showa
+	set year 64
+	set week_of_year 1
+	check day_of_week $fdow
+	check date 64 Jan 1
+
+	clear all
+	set era Showa
+	set year 64
+	set week_of_year 1
+	set day_of_week Wed
+	check date Showa 64 Jan 4
+
+	clear all
+	set era Heisei
+	set year 1
+	set week_of_year 1
+	check day_of_week $fdow
+	check date 1 Jan 8
+
+	clear all
+	set date Heisei 17 Mar 16
+	set week_of_year 2
+	set day_of_week Thu
+	check date Heisei 17 Jan 6
+
+	clear all
+	set week_of_year 2
+	set date Heisei 17 Mar 16
+	set day_of_week Thu
+	check date Heisei 17 Jan 6
+
+	clear all
+	set day_of_week Thu
+	set date Heisei 17 Mar 16
+	set week_of_year 2
+	check date Heisei 17 Jan 6
+
+test zone offsets
+    # Tests here depend on the GMT offset.
+    timezone GMT+09:00
+    new instance cal0900
+    use cal0900
+	clear all
+	set date Heisei 17 Mar 12
+	get millis
+	assign $result $H17Mar12
+	clear all
+	set date Heisei 17 Mar 12
+	set zone_offset 0
+	get millis
+	eval $result - 32400000 # -9 hours
+	eval $result == $H17Mar12
+
+	clear all
+	set date Heisei 17 Mar 12
+	set zone_offset 28800000 # 8 hours
+	set dst_offset 3600000 # 1 hour
+	get millis
+	eval $result == $H17Mar12
+
+	clear all
+	set date Heisei 17 Mar 12
+	set zone_offset 18000000 # 5 hours
+	set dst_offset 14400000 # 4 hours
+	get millis
+	eval $result == $H17Mar12
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/japanese/japanese_add.cts	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,521 @@
+#
+# %i%
+#
+
+# The test cases in this file assume the first day of week is Sunday
+# and the minimal days in the first week is 1.
+
+locale ja JP JP
+new instance jcal
+
+timezone Asia/Tokyo
+new instance tokyocal
+
+set non-lenient
+
+test add ERA
+    use jcal
+	clear all
+	set date Reiwa 17 Mar 8
+	add era 10
+	# as of Reiwa 17 March 8
+	check era Reiwa
+	add era -100
+	check era BeforeMeiji
+
+test add HOUR_OF_DAY
+    use jcal
+	clear all
+	set era Heisei
+	set datetime 1 Jan 8 23 59 59
+	add hour_of_day 1
+	check datetime 1 Jan 9 0 59 59
+	check ampm AM
+	check hour 0
+	add hour_of_day -1
+	check datetime 1 Jan 8 23 59 59
+	add hour_of_day 24
+	check datetime 1 Jan 9 23 59 59
+	add hour_of_day -24
+	check datetime 1 Jan 8 23 59 59
+
+test add HOUR
+    use jcal
+	clear all
+	set era Showa
+	set datetime 64 Jan 7 11 59 59
+	check era Showa
+	check hour 11
+	check ampm AM
+	add hour 1
+	check hour 0
+	check ampm PM
+	check datetime 64 Jan 7  12 59 59
+	add hour -1
+	check datetime 64 Jan 7 11 59 59
+	add hour 240
+	check era Heisei
+	check datetime 1 Jan 17 11 59 59
+	add hour -240
+	check era Showa
+	check datetime 64 Jan 7 11 59 59
+
+	clear all
+	set era Showa
+	set datetime 64 Jan 7 23 59 59
+	check era Showa
+	check hour 11
+	check ampm PM
+	add hour 1
+	check hour 0
+	check ampm AM
+	check era Heisei
+	check datetime 1 Jan 8 0 59 59
+	add hour -1
+	check datetime 64 Jan 7 23 59 59
+	add hour 240
+	check era Heisei
+	check datetime 1 Jan 17 23 59 59
+	add hour -240
+	check era Showa
+	check datetime 64 Jan 7 23 59 59
+
+	clear all
+	set era Heisei
+	set datetime 1 Jan 8 23 59 59
+	check date Heisei 1 Jan 8
+	check hour 11
+	check ampm PM
+	add hour 1
+	check hour 0
+	check ampm AM
+	check era Heisei
+	check datetime 1 Jan 9  0 59 59
+	add hour -1
+	check datetime 1 Jan 8 23 59 59
+	add hour 240
+	check datetime 1 Jan 18 23 59 59
+	add hour -240
+	check datetime 1 Jan 8 23 59 59
+
+test add YEAR
+    use jcal
+	clear all
+	# check if pinDayOfMonth works correctly.
+	# Heisei 12 (Y2K) is a leap year.
+	set date Heisei 12 Feb 29
+	add year 5
+	check date Heisei 17 Feb 28
+	add year -5
+	check date Heisei 12 Feb 28 # not 29!
+
+	clear all
+	set date BeforeMeiji 1867 Jan 1
+	add year 1
+	check date Meiji 1 Jan 1
+	add year -1
+	check date BeforeMeiji 1867 Jan 1
+
+	clear all
+	set date Meiji 45 Jul 29
+	add year 1
+	check date Taisho 2 Jul 29
+	add year -1
+	check date Meiji 45 Jul 29
+
+	clear all
+	set date Meiji 44 Jul 30
+	add year 1
+	check date Taisho 1 Jul 30
+	add year -1
+	check date Meiji 44 Jul 30
+
+	clear all
+	set date Taisho 15 Aug 1
+	add year 1
+	check date Showa 2 Aug 1
+	add year -1
+	check date Taisho 15 Aug 1
+
+	clear all
+	set date Taisho 14 Dec 31
+	add year 1
+	check date Showa 1 Dec 31
+	add year -1
+	check date Taisho 14 Dec 31
+
+	clear all
+	set date Showa 63 Feb 1
+	add year 1
+	check date Heisei 1 Feb 1
+	add year -1
+	check date Showa 63 Feb 1
+
+	set date Showa 63 Dec 30
+	add year 1
+	check date Heisei 1 Dec 30
+	add year -1
+	check date Showa 63 Dec 30
+
+	set date Showa 64 Jan 7
+	add year 1
+	check date Heisei 2 Jan 7
+	add year -1
+	check date Showa 64 Jan 7
+
+	set date Heisei 2 Jan 7
+	add year -1
+	check date Showa 64 Jan 7
+	add year 1
+	check date Heisei 2 Jan 7
+
+test add MONTH
+	clear all
+	# Check pinDayOfMonth works correctly.
+	# Heisei 12 is a leap year.
+	set date Heisei 12 Jan 31
+	add month 1
+	check date Heisei 12 Feb 29
+	add month -1
+	check date Heisei 12 Jan 29
+
+	# Another leap year
+	set date Showa 63 Jan 31
+	add month 1
+	check date Showa 63 Feb 29
+	add month -1
+	check date Showa 63 Jan 29
+
+	# Non leap year
+	set date Heisei 15 Jan 31
+	add month 1
+	check date Heisei 15 Feb 28
+	add month -1
+	check date Heisei 15 Jan 28
+
+	set date Heisei 15 Mar 31
+	add month 1
+	check date Heisei 15 Apr 30
+	add month -1
+	check date Heisei 15 Mar 30
+
+	set date Heisei 15 May 31
+	add month 1
+	check date Heisei 15 Jun 30
+	add month -1
+	check date Heisei 15 May 30
+
+	set date Heisei 15 Aug 31
+	add month 1
+	check date Heisei 15 Sep 30
+	add month -1
+	check date Heisei 15 Aug 30
+
+	set date Heisei 15 Oct 31
+	add month 1
+	check date Heisei 15 Nov 30
+	add month -1
+	check date Heisei 15 Oct 30
+
+	set date Heisei 15 Dec 31
+	add month -1
+	check date Heisei 15 Nov 30
+	add month 1
+	check date Heisei 15 Dec 30
+
+	set date Heisei 15 Dec 31
+	add month 2
+	check date Heisei 16 Feb 29
+	add month -1
+	check date Heisei 16 Jan 29
+
+	# end of pinDayOfMonth tests
+
+	set date BeforeMeiji 1867 Dec 1
+	add month 1
+	check date Meiji 1 Jan 1
+	add month -1
+	check date BeforeMeiji 1867 Dec 1
+	add month 14
+	check date Meiji 2 Feb 1
+	add month -14
+	check date BeforeMeiji 1867 Dec 1
+
+	set date Meiji 1 Dec 1
+	add month 1
+	check date Meiji 2 Jan 1
+	add month -1
+	check date Meiji 1 Dec 1
+	add month 13
+	check date Meiji 3 Jan 1
+	add month -13
+	check date Meiji 1 Dec 1
+
+	set date Meiji 45 Jun 30
+	add month 1
+	check date Taisho 1 Jul 30
+	add month -1
+	check date Meiji 45 Jun 30
+
+	set date Meiji 45 Jun 30
+	add month 14
+	check date Taisho 2 Aug 30
+	add month -14
+	check date Meiji 45 Jun 30
+
+	# Taisho Gan-nen (year 1) has only 6 months.
+	set date Taisho 1 Jul 30
+	add month -1
+	check date Meiji 45 Jun 30
+	add month 1
+	check date Taisho 1 Jul 30
+	add month -18
+	check date Meiji 44 Jan 30
+	add month 18
+	check date Taisho 1 Jul 30
+
+	set date Taisho 15 Jan 20
+	add month 11
+	check date Taisho 15 Dec 20
+
+	set date Taisho 15 Jan 25
+	add month 11
+	check date Showa 1 Dec 25
+
+	set date Showa 1 Dec 25
+	add month 1
+	check date Showa 2 Jan 25
+	add month -1
+	check date Showa 1 Dec 25
+	add month 17
+	check date Showa 3 May 25
+	add month -17
+	check date Showa 1 Dec 25
+
+	set date Showa 64 Jan 7
+	add month 1
+	check date Heisei 1 Feb 7
+
+	set date Heisei 1 Feb 1
+	add month -1
+	# Heisei starts from Jan 8.
+	check date Showa 64 Jan 1
+	add month 1
+	check date Heisei 1 Feb 1
+
+	set date Heisei 1 Feb 8
+	add month -1
+	check date Heisei 1 Jan 8
+
+	set date Heisei 1 Dec 1
+	add month 1
+	check date Heisei 2 Jan 1
+	add month -1
+	check date Heisei 1 Dec 1
+
+	set date Heisei 1 Dec 8
+	add month 1
+	check date Heisei 2 Jan 8
+	add month -1
+	check date Heisei 1 Dec 8
+
+    # time zone dependent tests
+    use tokyocal
+	clear all
+
+	set date BeforeMeiji 1 Jan 1
+	get min year
+	assign $result $minyear
+	# actual min date: -292275055.05.17T01:47:04.192+0900
+
+	set date BeforeMeiji $minyear Dec 17
+	set timeofday 1 47 4 192
+	add month -7
+	check date BeforeMeiji $minyear May 17
+	check timeofday 1 47 4 192
+	add month 7
+	check date BeforeMeiji $minyear Dec 17
+	check timeofday 1 47 4 192
+	set date BeforeMeiji $minyear Dec 17
+	set timeofday 1 47 4 191
+	add month -7
+	check date BeforeMeiji $minyear May 18
+	check timeofday 1 47 4 191
+
+	set date Reiwa 17 Jan 1
+	get max year
+	assign $result $max
+	set date Reiwa $max Jul 17
+	add month 1
+	check date Reiwa $max Aug 17
+#	set date Heisei $max Jul 28
+#	set timeofday 23 59 59 999
+#	add month 1
+#	check date Heisei $max Aug 16
+#	check timeofday 23 59 59 999
+
+test add WEEK_OF_YEAR
+    use jcal
+	clear all
+	# 1867 Dec 23 is Monday.
+	set date BeforeMeiji 1867 Dec 23
+	add week_of_year 2
+	check day_of_week Mon
+	check date Meiji 1 Jan 6
+	add week_of_year -2
+	check day_of_week Mon
+	check date BeforeMeiji 1867 Dec 23
+
+	# 1867 Dec 23 is Wednesday.
+	set date Meiji 1 Dec 23
+	add week_of_year 2
+	check day_of_week Wed
+	check date Meiji 2 Jan 6
+	add week_of_year -2
+	check day_of_week Wed
+	check date Meiji 1 Dec 23
+
+	# Meiji 45 July 23 is Tuesday.
+	set date Meiji 45 Jul 23
+	add week_of_year 1
+	check day_of_week Tue
+	check date Taisho 1 Jul 30
+	add week_of_year -1
+	check day_of_week Tue
+	check date Meiji 45 Jul 23
+
+	# Taisho 15 December 23 is Thursday.
+	set date Taisho 15 Dec 23
+	add week_of_year 1
+	check day_of_week Thu
+	check date Showa 1 Dec 30
+	add week_of_year -1
+	check day_of_week Thu
+	check date Taisho 15 Dec 23
+
+	# Showa Gan-nen December 30 is Thursday.  Showa Gan-nen has
+	# only one week. Rolling any number of weeks brings to the
+	# same date.
+	set date Showa 1 Dec 30
+	add week_of_year 1
+	check day_of_week Thu
+	check date Showa 2 Jan 6
+	add week_of_year -1
+	check day_of_week Thu
+	check date Showa 1 Dec 30
+
+	# Showa 64 January 7 is Saturday. The year has only one week.
+	set date Showa 64 Jan 7
+	add week_of_year 1
+	check day_of_week Sat
+	check date Heisei 1 Jan 14
+	add week_of_year -1
+	check day_of_week Sat
+	check date Showa 64 Jan 7
+
+    use tokyocal
+	clear all
+
+	set date BeforeMeiji $minyear Dec 25
+	check day_of_week Sat
+	eval $minyear + 1
+	assign $result $minyear_plus_1
+	add week_of_year 1
+	check day_of_week Sat
+	check date BeforeMeiji $minyear_plus_1 Jan 1
+	add week_of_year -1
+	check day_of_week Sat
+	check date BeforeMeiji $minyear Dec 25
+
+test WEEK_OF_MONTH
+    use jcal
+	clear all
+
+test DAY_OF_MONTH
+    use jcal
+	clear all
+
+test DAY_OF_YEAR
+    use jcal
+	clear all
+
+	# 1867 is a regular Gregorian year.
+	set date BeforeMeiji 1867 Dec 31
+	add day_of_year 1
+	check date Meiji 1 Jan 1
+	add day_of_year -1
+	check date BeforeMeiji 1867 Dec 31
+	add day_of_year 26
+	check date Meiji 1 Jan 26
+	add day_of_year -26
+	check date BeforeMeiji 1867 Dec 31
+
+	# Meiji 1 starts from Jan 1. It's a regular year as well.
+	set date Meiji 1 Dec 31
+	add day_of_year 1
+	check date Meiji 2 Jan 1
+	add day_of_year -1
+	check date Meiji 1 Dec 31
+	add day_of_year 26
+	check date Meiji 2 Jan 26
+	add day_of_year -26
+	check date Meiji 1 Dec 31
+
+	# The last year of Meiji (45) has an irregularity. Meiji 45
+	# July 30 is actually Taisho 1 July 30.
+	set date Meiji 45 Jul 29
+	add day_of_year 1
+	check date Taisho 1 Jul 30
+	add day_of_year -1
+	check date Meiji 45 Jul 29
+
+	# The first day of Taisho, July 30.
+	set date Taisho 1 Jul 30
+	add day_of_year -1
+	check date Meiji 45 Jul 29
+	add day_of_year 1
+	check date Taisho 1 Jul 30
+
+	set date Taisho 15 Dec 24
+	add day_of_year 1
+	check date Showa 1 Dec 25
+	add day_of_year -1
+	check date Taisho 15 Dec 24
+
+	set date Showa 1 Dec 31
+	add day_of_year 1
+	check date Showa 2 Jan 1
+	add day_of_year -1
+	check date Showa 1 Dec 31
+	add day_of_year 25
+	check date Showa 2 Jan 25
+	add day_of_year -25
+	check date Showa 1 Dec 31
+
+	set date Showa 64 Jan 7
+	add day_of_year 1
+	check date Heisei 1 Jan 8
+	add day_of_year -1
+	check date Showa 64 Jan 7
+
+	set date Heisei 1 Dec 31
+	add day_of_year 5
+	check date Heisei 2 Jan 5
+	add day_of_year -5
+	check date Heisei 1 Dec 31
+
+    use tokyocal
+	clear all
+
+	set date BeforeMeiji $minyear Dec 31
+	set timeofday 1 47 4 192
+	add day_of_year 1
+	check date BeforeMeiji $minyear_plus_1 Jan 1
+	check timeofday 1 47 4 192
+	add day_of_year -1
+	check date BeforeMeiji $minyear Dec 31
+	check timeofday 1 47 4 192
+
+test DAY_OF_WEEK_IN_MONTH
+    use jcal
+	clear all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/japanese/japanese_exceptions.cts	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,204 @@
+#
+#
+#
+
+locale ja JP JP
+
+# Use jcal in non-lenient mode for all test cases.
+set non-lenient
+new instance jcal
+
+use jcal
+clear all
+
+test Invalid BeforeMeiji dates
+    set date BeforeMeiji 1868 Jan 1
+    get millis
+    exception IllegalArgumentException
+    set date BeforeMeiji 1868 Jan 32
+    get millis
+    exception IllegalArgumentException
+    set date BeforeMeiji 2005 Mar 9
+    get millis
+    exception IllegalArgumentException
+
+test Invalid Meiji dates
+    set date Meiji -1 Jan 1
+    get millis
+    exception IllegalArgumentException
+    set date Meiji 1 Feb 30
+    get millis
+    exception IllegalArgumentException
+    set date Meiji 45 Jul 30
+    get millis
+    exception IllegalArgumentException
+    set date Meiji 46 Jan 1
+    get millis
+    exception IllegalArgumentException
+
+test Invalid Taisho dates
+    set date Taisho -1 Jan 1
+    get millis
+    exception IllegalArgumentException
+    set date Taisho 1 Jan 1
+    get millis
+    exception IllegalArgumentException
+    set date Taisho 1 Apr 1
+    get millis
+    exception IllegalArgumentException
+    set date Taisho 15 Dec 30
+    get millis
+    exception IllegalArgumentException
+    set date Taisho 15 Feb 29
+    get millis
+    exception IllegalArgumentException
+
+test Invalid Showa dates
+    set date Showa -11 Jan 1
+    get millis
+    exception IllegalArgumentException
+    set date Showa 1 Jan 1
+    get millis
+    exception IllegalArgumentException
+    set date Showa 1 Jun 1
+    get millis
+    exception IllegalArgumentException
+    set date Showa 1 Jul 29
+    get millis
+    exception IllegalArgumentException
+    set date Showa 64 Jan 8
+    get millis
+    exception IllegalArgumentException
+    set date Showa 64 Dec 8
+    get millis
+    exception IllegalArgumentException
+    set date Showa 65 Jan 1
+    get millis
+    exception IllegalArgumentException
+
+test Invalid Heisei dates
+    clear all
+    set date Heisei -1 Jan 1
+    get millis
+    exception IllegalArgumentException
+    set date Heisei 1 Jan 1
+    get millis
+    exception IllegalArgumentException
+    set date Heisei 1 Jan 7
+    get millis
+    exception IllegalArgumentException
+    set date Heisei 1 Jan 8
+    get max year
+    eval $result + 1
+    set date Heisei $result Jan 1
+    get millis
+    exception IllegalArgumentException
+
+test Invalid ERA
+    get max era
+    eval $result + 1
+    set era $result # max era + 1
+    get era
+    exception IllegalArgumentException
+    set era 100
+    get era
+    exception IllegalArgumentException
+    set era -100
+    get era
+    exception IllegalArgumentException
+
+test Invalid HOUR_OF_DAY
+    clear all
+    set date Heisei 17 Mar 14
+    set hour_of_day 25
+    get millis
+    exception IllegalArgumentException
+    set hour_of_day -9
+    get millis
+    exception IllegalArgumentException
+
+test Invalid AMPM
+    clear all
+    set date Heisei 17 Mar 14
+    set ampm -1
+    set hour 1
+    get millis
+    exception IllegalArgumentException
+    set ampm 5
+    set hour 1
+    get millis
+    exception IllegalArgumentException
+
+test Invalid HOUR
+    clear all
+    set date Heisei 17 Mar 14
+    set ampm AM
+    set hour 13
+    get millis
+    exception IllegalArgumentException
+    set ampm PM
+    set hour -1
+    get millis
+    exception IllegalArgumentException
+
+test Invalid MINUTE
+    clear all
+    set date Heisei 17 Mar 14
+    set minute 61
+    get millis
+    exception IllegalArgumentException
+    set minute -2
+    get millis
+    exception IllegalArgumentException
+
+test Invalid SECOND
+    clear all
+    set date Heisei 17 Mar 14
+    set second 61
+    get millis
+    exception IllegalArgumentException
+    set second -2
+    get millis
+    exception IllegalArgumentException
+
+test Invalid MILLISECOND
+    clear all
+    set date Heisei 17 Mar 14
+    set millisecond 1000
+    get millis
+    exception IllegalArgumentException
+    set millisecond -2
+    get millis
+    exception IllegalArgumentException
+
+test Invalid ZONE_OFFSET
+    clear all
+    set date Heisei 17 Mar 14
+    set zone_offset -360000000
+    get millis
+    exception IllegalArgumentException
+    set zone_offset -360000000
+    get year
+    exception IllegalArgumentException
+    set zone_offset 360000000
+    get millis
+    exception IllegalArgumentException
+    set zone_offset 360000000
+    get year
+    exception IllegalArgumentException
+
+test Invalid DST_OFFSET
+    clear all
+    set date Heisei 17 Mar 14
+    set dst_offset -360000000
+    get millis
+    exception IllegalArgumentException
+    set dst_offset -360000000
+    get year
+    exception IllegalArgumentException
+    set dst_offset 360000000
+    get millis
+    exception IllegalArgumentException
+    set dst_offset 360000000
+    get year
+    exception IllegalArgumentException
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/japanese/japanese_minmax.cts	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,336 @@
+#
+#
+#
+
+locale ja JP JP
+new instance jcal
+new gregorian gcal
+
+# Use GMT+09:00 for max day of year test which depends on time zone
+# offsets.
+
+timezone GMT+09:00
+new instance tokyocal
+
+test Make sure that the maximum year value doesn't depent on era
+    use jcal
+	# Note: the max year value is as of Reiwa
+	assign 292276976 $max
+	clear all
+	set date Reiwa 1 May 1
+	get millis
+	check max year $max
+	assign $max $maxyear
+
+	clear all
+	set date Heisei 20 May 5
+	get millis
+	check max year $maxyear
+
+	clear all
+	set date Showa 35 May 5
+	get millis
+	check max year $maxyear
+
+	clear all
+	set date BeforeMeiji 1 Jun 1
+	get millis
+	check max year $max
+
+test Max of ERA
+    use jcal
+	# Assumption: Reiwa is the current era
+	check maximum era Reiwa
+	check leastmax era Reiwa
+
+test Actual max MONTH
+    use jcal
+	clear all
+	set date BeforeMeiji 1867 Jan 31
+	check actualmax month Dec
+	# Make sure that the same value is returned after
+	# normalization.
+	get millis
+	check actualmax month Dec
+
+	clear all
+	set date Meiji 45 Mar 31
+	check actualmax month Jul
+	get millis
+	check actualmax month Jul
+
+	clear all
+	set date Taisho 15 June 1
+	check actualmax month Dec
+	get millis
+	check actualmax month Dec
+
+	clear all
+	set date Showa 64 Jan 4
+	check actualmax month Jan
+	get millis
+	check actualmax month Jan
+
+	clear all
+	set date Heisei 31 Jan 4
+	check actualmax month Apr
+	get millis
+	check actualmax month Apr
+
+	clear all
+	set date Reiwa 2 Jan 1
+	set year $maxyear
+	check actualmax month Aug
+	get millis
+	check actualmax month Aug
+
+	clear all
+	set date 17 Mar 1
+	check actualmax month Dec
+	get millis
+	check actualmax month Dec
+
+test Actual max DAY_OF_YEAR
+    use jcal
+	clear all
+	set date Meiji 1 Dec 31
+	# Meiji Gan-nen is a leap year.
+	check actualmax day_of_year 366
+	check day_of_year 366
+
+	clear all
+	set date Meiji 45 Jan 1
+	# Meiji 45 or Taishi Gan-nen is also a leap year.
+	check actualmax day_of_year 211 # 31+29+31+30+31+30+29
+	set date Meiji 45 Jul 29
+	check day_of_year 211
+	set date Taisho 1 Jul 31
+	get millis
+	check actualmax day_of_year 155 # 366 - 211
+	set date Taisho 1 Dec 31
+	check day_of_year 155
+
+	clear all
+	set date Taisho 15 Sep 23
+	check actualmax day_of_year 358 # 365 - 7
+	set date Taisho 15 Dec 24
+	check day_of_year 358
+	set date Showa 1 Dec 25
+	check actualmax day_of_year 7
+	set date Showa 1 Dec 31
+	check day_of_year 7
+
+	clear all
+	set date Showa 64 Jan 3
+	check actualmax day_of_year 7
+	set date Showa 64 Jan 7
+	check day_of_year 7
+	set date Heisei 1 Aug 9
+	check actualmax day_of_year 358 # 365 - 7
+	set date Heisei 1 Dec 31
+	check day_of_year 358
+
+   # time zone dependent
+   use tokyocal
+	clear all
+	set date Reiwa $maxyear Jan 1
+	# the last date of Reiwa is R292276976.08.17T16:12:55.807+0900
+	check actualmax day_of_year 229 # 31+28+31+30+31+30+31+17
+
+test Actual max WEEK_OF_YEAR
+    use jcal
+	clear all
+	set date Meiji 1 Jan 1
+	# Meiji gan-nen is a leap year.
+	check actualmax week_of_year 52
+
+	clear all
+	set date Meiji 45 Jan 1
+	check actualmax week_of_year 30
+	set date Taisho 1 July 31
+	check actualmax week_of_year 22
+
+	clear all
+	set date Taisho 15 Sep 23
+	check actualmax week_of_year 51
+	set date Showa 1 Dec 25
+	check actualmax week_of_year 1
+
+	clear all
+	set date Showa 64 Jan 3
+	check actualmax week_of_year 1
+	set date Heisei 1 Aug 9
+	check actualmax week_of_year 51
+
+	clear all
+	set date Heisei 31 Apr 28
+	check actualmax week_of_year 17
+	set date Reiwa 1 Aug 9
+	check actualmax week_of_year 35
+
+    use tokyocal
+	set date Reiwa $maxyear Jan 1
+	# the last date of Reiwa is R292276976.08.17T16:12:55.807+0900 (Sunday)	
+	# The year is equivalent to 2003 (Gregorian).
+	check actualmax week_of_year 34
+
+test Actual max WEEK_OF_MONTH
+    use jcal
+	clear all
+	set date Meiji 45 Jul 1
+	check actualmax week_of_month 5
+	set date Taisho 1 Jul 31
+	check actualmax week_of_month 5
+
+	clear all
+	set date Taisho 15 Dec 1
+	check actualmax week_of_month 5
+	set date Showa 1 Dec 25
+	check actualmax week_of_month 5
+
+	clear all
+	set date Showa 64 Jan 1
+	check actualmax week_of_month 5
+	set date Heisei 1 Jan 8
+	check actualmax week_of_month 5
+
+	clear all
+	set date Heisei 31 Apr 30
+	check actualmax week_of_month 5
+	set date Reiwa 1 May 1
+	check actualmax week_of_month 5
+
+    use tokyocal
+	set date Reiwa $maxyear Jan 1
+	# the last date of Reiwa is R292276976.08.17T16:12:55.807+0900 (Sunday)	
+	# The year is equivalent to 2003 (Gregorian).
+	check actualmax week_of_month 4
+	
+test Actual max DAY_OF_WEEK_IN_MONTH
+    use jcal
+	clear all
+	set date Meiji 45 Jul 1
+	check actualmax week_of_month 5
+	set date Taisho 1 Jul 31
+	check actualmax week_of_month 5
+
+	clear all
+	set date Taisho 15 Dec 1
+	check actualmax week_of_month 5
+	set date Showa 1 Dec 25
+	check actualmax week_of_month 5
+
+	clear all
+	set date Showa 64 Jan 1
+	check actualmax week_of_month 5
+	set date Heisei 1 Jan 8
+	check actualmax week_of_month 5
+
+	clear all
+	set date Heisei 31 Apr 30
+	check actualmax week_of_month 5
+	set date Reiwa 1 May 1
+	check actualmax week_of_month 5
+
+    use tokyocal
+	clear all
+	set date Reiwa $maxyear Jan 1
+	# the last date of Reiwa is R292276976.08.17T16:12:55.807+0900 (Sunday)	
+	# The year is equivalent to 2003 (Gregorian).
+	check actualmax week_of_month 4
+
+test Actual max YEAR
+    use jcal
+	clear all
+	set date BeforeMeiji 1 Jan 1
+	check actualmax year 1867
+
+	set date Meiji 1 Jan 1
+	check actualmax year 45
+
+	set date Meiji 1 Jul 30
+	check actualmax year 44
+
+	set date Taisho 1 Jul 30
+	check actualmax year 15
+
+	set date Taisho 1 Dec 25
+	check actualmax year 14
+
+	set date Showa 2 Jan 1
+	check actualmax year 64
+
+	set date Showa 1 Dec 25
+	check actualmax year 63
+
+	set date Heisei 1 Jan 7
+	check actualmax year 64 
+
+	set date Heisei 1 Aug 18
+	check actualmax year 30
+
+	set date Reiwa 1 Apr 30
+	check actualmax year 31
+
+	# Date/time beyond the last date in the max year.
+	set date Reiwa 1 Aug 18
+	check actualmax year 292276975
+	
+test Least max YEAR
+	set date Heisei 17 Mar 1
+	# Taisho is the shortest era, 14 years.
+	# (See above actual max YEAR case.)
+	check leastmax year 14
+
+test Acutual min YEAR
+	# Get minimum values for comparison
+	clear all
+	set era BeforeMeiji
+	get min year
+	assign $result $minyear
+	set date $minyear Dec 31
+	eval $minyear + 1
+	assign $result $minyear_plus_one
+
+	# BeforeMeiji 1 Dec 31 should exist in the minimum year which
+	# should be the same value as the getMinimum() value.
+	set date BeforeMeiji 1 Dec 31
+	check actualmin year $minyear
+
+	# Jan 1 shouldn't exist in the same year. So the actual minimum is
+	# $minyear + 1.
+	set date 1 Jan 1
+	check actualmin year $minyear_plus_one
+
+	# 1 should be returned if it's on a date of the last
+	# year which also exists in the first year of each era.
+	clear all
+	set date Meiji 45 Jan 1
+	check actualmin year 1
+
+	clear all
+	set date Taisho 14 Jul 30
+	check actualmin year 1
+
+	clear all
+	set date Showa 60 Dec 25
+	check actualmin year 1
+
+	clear all
+	set date Heisei 17 Jan 8
+	check actualmin year 1
+
+	# 2 should be returned if it's on a date of the last year which
+	# doesn't exist in the first year of each era. (Meiji is an
+	# exception.)
+	clear all
+	set date Taisho 14 Jul 29
+	check actualmin year 2
+
+	clear all
+	set date Showa 60 Dec 23
+	check actualmin year 2
+
+	clear all
+	set date Heisei 17 Jan 7
+	check actualmin year 2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/japanese/japanese_normalization.cts	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,97 @@
+#
+#
+#
+
+locale ja JP JP
+tz Asia/Tokyo
+new instance jcal
+new gregorian gcal
+
+test Normalize year 0 and -1 (Showa)
+    use jcal
+	clear all
+	set date Showa 1 Jan 1
+	check date Taisho 15 Jan 1
+
+	clear all
+	set date Showa 0 Jan 1
+	check era Taisho
+	check date 14 Jan 1
+
+	clear all
+	set date Showa -1 Jan 1
+	check era Taisho
+	check date 13 Jan 1
+
+test Normalize year max and max+1 (Showa)
+	clear all
+	set date Showa 64 Aug 9
+	check date Heisei 1 Aug 9
+
+	clear all
+	set date Showa 65 Aug 9
+	check date Heisei 2 Aug 9
+
+test Normalize year 0 and -1 (Heisei)
+    use jcal
+	clear all
+	set date Heisei 1 Jan 1
+	check date Showa 64 Jan 1
+
+	clear all
+	set date Heisei 0 Jan 1
+	check date Showa 63 Jan 1
+
+	clear all
+	set date Heisei -1 Jan 1
+	check date Showa 62 Jan 1
+
+test Normalize year max and max+1 (Taisho)
+	clear all
+	set date Taisho 15 Dec 25
+	check date Showa 1 Dec 25
+
+	clear all
+	set date Taisho 16 Dec 25
+	check date Showa 2 Dec 25
+
+test Normalize day of month 0 and -1 (Heisei)
+    use jcal
+	clear all
+	set date Heisei 1 Jan 1
+	check date Showa 64 Jan 1
+
+	clear all
+	set date Heisei 1 Jan 0
+	check date Showa 63 Dec 31
+
+	clear all
+	set date Heisei 1 Jan -1
+	check date Showa 63 Dec 30
+
+test Normalize hour of day  -1:00 (Heisei)
+	clear all
+	set era Heisei
+	set datetime 1 Jan 1 0 0 0
+	check era Showa
+	check datetime 64 Jan 1 0 0 0
+
+	clear all
+	set era Heisei
+	set datetime 1 Jan 1 -1 0 0
+	check era Showa
+	check datetime 63 Dec 31 23 0 0
+
+test Normalize hour of day 25:00 (Taisho)
+	clear all
+	set era Taisho
+	set datetime 15 Dec 25 25 0 0
+	check era Showa
+	check datetime 1 Dec 26 1 0 0
+
+test Normalize hour of day 25:00 (Showa)
+	clear all
+	set era Showa
+	set datetime 64 Jan 7 25 0 0
+	check era Heisei
+	check datetime 1 Jan 8 1 0 0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/japanese/japanese_roll.cts	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,556 @@
+#
+#
+#
+
+# The test cases in this file assume that the first day of week is Sunday
+# and the minimal days in the first week is 1.
+
+locale ja JP JP
+new instance jcal
+
+timezone Asia/Tokyo
+new instance tokyocal
+
+test roll HOUR_OF_DAY
+    use jcal
+	clear all
+	set era Heisei
+	set datetime 1 Jan 8 23 59 59
+	roll hour_of_day 1
+	check datetime 1 Jan 8 0 59 59
+	check ampm AM
+	check hour 0
+	roll hour_of_day -1
+	check datetime 1 Jan 8 23 59 59
+	roll hour_of_day 240
+	check datetime 1 Jan 8 23 59 59
+	roll hour_of_day -240
+	check datetime 1 Jan 8 23 59 59
+
+test roll HOUR
+    use jcal
+	clear all
+	set era Showa
+	set datetime 64 Jan 7 11 59 59
+	get ampm
+	check era Showa
+	check hour 11
+	check ampm AM
+	roll hour 1
+	check hour 0
+	check ampm AM
+	check datetime 64 Jan 7  0 59 59
+	roll hour -1
+	check datetime 64 Jan 7 11 59 59
+	roll hour 240
+	check datetime 64 Jan 7 11 59 59
+	roll hour -240
+	check datetime 64 Jan 7 11 59 59
+
+	clear all
+	set era Showa
+	set datetime 64 Jan 7 23 59 59
+	get ampm
+	check era Showa
+	check hour 11
+	check ampm PM
+	roll hour 1
+	check hour 0
+	check ampm PM
+	check datetime 64 Jan 7 12 59 59
+	roll hour -1
+	check datetime 64 Jan 7 23 59 59
+	roll hour 240
+	check datetime 64 Jan 7 23 59 59
+	roll hour -240
+	check datetime 64 Jan 7 23 59 59
+
+	clear all
+	set era Heisei
+	set datetime 1 Jan 8 23 59 59
+	get ampm
+	check hour 11
+	check ampm PM
+	roll hour 1
+	check hour 0
+	check ampm PM
+	check datetime 1 Jan 8 12 59 59
+	roll hour -1
+	check datetime 1 Jan 8 23 59 59
+	roll hour 240
+	check datetime 1 Jan 8 23 59 59
+	roll hour -240
+	check datetime 1 Jan 8 23 59 59
+
+test roll YEAR
+	clear all
+	set date BeforeMeiji 1867 Jan 1
+	get actualmin year
+	# roll to the min year value of Gregorian (not Julian)
+	roll year 1
+	check date BeforeMeiji $result Jan 1
+	roll year -1
+	check date BeforeMeiji 1867 Jan 1
+
+	clear all
+	set date Meiji 45 Jul 29
+	roll year 1
+	check date Meiji 1 Jul 29
+	roll year -1
+	check date Meiji 45 Jul 29
+
+	clear all
+	set date Meiji 44 Jul 30
+	roll year 1
+	check date Meiji 1 Jul 30
+	roll year -1
+	check date Meiji 44 Jul 30
+
+	clear all
+	set date Taisho 15 Aug 1
+	roll year 1
+	check date Taisho 1 Aug 1
+	roll year -1
+	check date Taisho 15 Aug 1
+
+	clear all
+	set date Taisho 14 Dec 31
+	roll year 1
+	check date Taisho 1 Dec 31
+	roll year -1
+	check date Taisho 14 Dec 31
+
+	clear all
+	set date Showa 63 Feb 1
+	# Neither 64 Feb 1 nor 1 Feb 1 exists in Showa.
+	roll year 1
+	check date Showa 2 Feb 1
+	roll year -1
+	check date Showa 63 Feb 1
+
+	set date Showa 63 Dec 30
+	roll year 1
+	# Showa 1 Dec 30 exists.
+	check date Showa 1 Dec 30
+	roll year -1
+	check date Showa 63 Dec 30
+
+	set date Showa 64 Jan 7
+	roll year 1
+	check date Showa 2 Jan 7
+	roll year -1
+	check date Showa 64 Jan 7
+
+	set date Heisei 31 Apr 30
+	roll year 1
+	check date Heisei 1 Apr 30
+	roll year -1
+	check date Heisei 31 Apr 30
+
+	set date Reiwa 2 Apr 30
+	get max year
+	assign $result $hmax
+	roll year -1
+	check date Reiwa $hmax Apr 30
+	roll year 1
+	check date Reiwa 2 Apr 30
+
+test roll MONTH
+	set date BeforeMeiji 1867 Dec 1
+	roll month 1
+	check date BeforeMeiji 1867 Jan 1
+	roll month -1
+	check date BeforeMeiji 1867 Dec 1
+	roll month 14
+	check date BeforeMeiji 1867 Feb 1
+	roll month -14
+	check date BeforeMeiji 1867 Dec 1
+
+	set date Meiji 1 Dec 1
+	roll month 1
+	check date Meiji 1 Jan 1
+	roll month -1
+	check date Meiji 1 Dec 1
+	roll month 13
+	check date Meiji 1 Jan 1
+	roll month -13
+	check date Meiji 1 Dec 1
+
+	set date Meiji 45 Jun 30
+	roll month 1
+	# Meiji 45 Jun 30 is actually Taisho 1 Jun 30. By the rule of
+	# roll() that year can't be changed, the day of month value
+	# has to be changed ("pin date to month").
+	check date Meiji 45 Jul 29
+	roll month -1
+	# doesn't roll back to Jun 30, but to Jun 29.
+	check date Meiji 45 Jun 29
+
+	set date Meiji 45 Jun 30
+	# Meiji 45 (year) has only 7 months. rolling 14 months must
+	# bring the given date to the same date.
+	roll month 14
+	check date Meiji 45 Jun 30
+	roll month -14
+	check date Meiji 45 Jun 30
+
+	# Taisho Gan-nen (year 1) has only 6 months.
+	set date Taisho 1 Jul 30
+	roll month -1
+	check date Taisho 1 Dec 30
+	roll month 1
+	check date Taisho 1 Jul 30
+	roll month -18
+	check date Taisho 1 Jul 30
+	roll month 18
+	check date Taisho 1 Jul 30
+
+	set date Taisho 15 Jan 20
+	roll month 11
+	check date Taisho 15 Dec 20
+
+	set date Taisho 15 Jan 25
+	roll month 11
+	# Taisho 15 Dec 25 is actually Showa 1 Dec 25. Day of month is
+	# adjusted to the last day of month. ("pin date to month")
+	check date Taisho 15 Dec 24
+
+	set date Showa 1 Dec 25
+	roll month 1
+	check date Showa 1 Dec 25
+	roll month -1
+	check date Showa 1 Dec 25
+	roll month 17
+	check date Showa 1 Dec 25
+	roll month -17
+	check date Showa 1 Dec 25
+
+	set date Showa 64 Jan 7
+	roll month 1
+	check date Showa 64 Jan 7
+
+	set date Heisei 1 Feb 1
+	roll month -1
+	# Heisei starts from Jan 8.
+	check date Heisei 1 Jan 8
+	roll month 1
+	check date Heisei 1 Feb 8
+
+	set date Heisei 1 Feb 8
+	roll month -1
+	check date Heisei 1 Jan 8
+
+	set date Heisei 1 Dec 1
+	roll month 1
+	check date Heisei 1 Jan 8
+	roll month -1
+	check date Heisei 1 Dec 8
+
+	set date Heisei 1 Dec 8
+	roll month 1
+	check date Heisei 1 Jan 8
+	roll month -1
+	check date Heisei 1 Dec 8
+
+    # time zone dependent tests
+    use tokyocal
+	clear all
+
+	set date BeforeMeiji 1 Jan 1
+	get min year
+	assign $result $minyear
+	# actual min date: -292275055.05.17T01:47:04.192+0900
+	set date BeforeMeiji $minyear Dec 31
+	roll month 1
+	check date BeforeMeiji $minyear May 31
+
+	set date BeforeMeiji $minyear Dec 1
+	set timeofday 1 47 4 192
+	roll month 1
+	check date BeforeMeiji $minyear May 17
+	check timeofday 1 47 4 192
+	
+	set date BeforeMeiji $minyear Dec 1
+	set timeofday 1 47 4 191
+	roll month 1
+	check date BeforeMeiji $minyear May 18
+	check timeofday 1 47 4 191
+
+	set date Reiwa 17 Jan 1
+	get max year
+	assign $result $max
+	set date Reiwa $max Jul 28
+	roll month 1
+	check date Reiwa $max Aug 17
+	set date Reiwa $max Jul 28
+	set timeofday 23 59 59 999
+	roll month 1
+	check date Reiwa $max Aug 16
+	check timeofday 23 59 59 999
+
+test roll WEEK_OF_YEAR
+    use jcal
+	clear all
+	# 1867 Dec 23 is Monday.
+	set date BeforeMeiji 1867 Dec 23
+	roll week_of_year 1
+	check day_of_week Mon
+	check date BeforeMeiji 1867 Jan 7
+	roll week_of_year -1
+	check day_of_week Mon
+	check date BeforeMeiji 1867 Dec 23
+	roll week_of_year 26
+	check day_of_week Mon
+	check date BeforeMeiji 1867 Jul 1
+	roll week_of_year -26
+	check day_of_week Mon
+	check date BeforeMeiji 1867 Dec 23
+
+	# 1867 Dec 23 is Wednesday.
+	set date Meiji 1 Dec 23
+	roll week_of_year 1
+	check day_of_week Wed
+	check date Meiji 1 Jan 1
+	roll week_of_year -1
+	check day_of_week Wed
+	check date Meiji 1 Dec 23
+	roll week_of_year 26
+	check day_of_week Wed
+	check date Meiji 1 Jun 24
+	roll week_of_year -26
+	check day_of_week Wed
+	check date Meiji 1 Dec 23
+
+	# Meiji 45 July 22 is Monday.
+	set date Meiji 45 Jul 22
+	# the next week if the first week of Taisho 1
+	roll week_of_year 1
+	check day_of_week Mon
+	check date Meiji 45 Jan 1
+	roll week_of_year -1
+	check day_of_week Mon
+	check date Meiji 45 Jul 22
+	roll week_of_year 26
+	check day_of_week Mon
+	check date Meiji 45 Jun 24
+
+	# Taisho Gan-nen (year 1) July 30 is Tuesday.
+	set date Taisho 1 Jul 30
+	roll week_of_year -1
+	# Taisho Gen-nen December 31 is the first week of the next year.
+	check day_of_week Tue
+	check date Taisho 1 Dec 24
+	roll week_of_year 1
+	check day_of_week Tue
+	check date Taisho 1 Jul 30
+	roll week_of_year 26
+	check day_of_week Tue
+	check date Taisho 1 Aug 27
+	roll week_of_year -26
+	check day_of_week Tue
+	check date Taisho 1 Jul 30
+
+	# Taisho 15 January 7 is Thursday.
+	set date Taisho 15 Jan 7
+	roll week_of_year -1
+	check day_of_week Thu
+	check date Taisho 15 Dec 16
+	roll week_of_year 1
+	check day_of_week Thu
+	check date Taisho 15 Jan 7
+
+	roll week_of_year 51
+	check day_of_week Thu
+	check date Taisho 15 Jan 14
+
+	# Showa Gan-nen December 30 is Thursday.  Showa Gan-nen has
+	# only one week. Rolling any number of weeks brings to the
+	# same date.
+	set date Showa 1 Dec 30
+	roll week_of_year 1
+	check day_of_week Thu
+	check date Showa 1 Dec 30
+	roll week_of_year -1
+	check day_of_week Thu
+	check date Showa 1 Dec 30
+	roll week_of_year 26
+	check day_of_week Thu
+	check date Showa 1 Dec 30
+	roll week_of_year -26
+	check day_of_week Thu
+	check date Showa 1 Dec 30
+
+	# Showa 64 January 7 is Saturday. The year has only one week.
+	set date Showa 64 Jan 7
+	roll week_of_year 1
+	check day_of_week Sat
+	check date Showa 64 Jan 7
+	roll week_of_year -1
+	check day_of_week Sat
+	check date Showa 64 Jan 7
+	roll week_of_year 26
+	check day_of_week Sat
+	check date Showa 64 Jan 7
+	roll week_of_year -26
+	check day_of_week Sat
+	check date Showa 64 Jan 7
+
+	# Heisei Gan-nen January 14 is Saturday.
+	set date Heisei 1 Jan 14
+	roll week_of_year -1
+	check day_of_week Sat
+	check date Heisei 1 Dec 30
+	roll week_of_year 1
+	check day_of_week Sat
+	check date Heisei 1 Jan 14
+	roll week_of_year -26
+	check day_of_week Sat
+	check date Heisei 1 Jul 8
+	roll week_of_year 26
+	check day_of_week Sat
+	check date Heisei 1 Jan 14
+
+	# Heisei Gan-nen December 1 is Friday.
+	set date Heisei 1 Dec 1
+	roll week_of_year 5
+	check day_of_week Fri
+	check date Heisei 1 Jan 13
+	roll week_of_year -5
+	check day_of_week Fri
+	check date Heisei 1 Dec 1
+	roll week_of_year 55
+	check day_of_week Fri
+	check date Heisei 1 Dec 29
+
+    use tokyocal
+	clear all
+
+	set date BeforeMeiji $minyear Dec 25
+	check day_of_week Sat
+	roll week_of_year 1
+	check day_of_week Sat
+	check date BeforeMeiji $minyear May 22
+	roll week_of_year -1
+	check day_of_week Sat
+	check date BeforeMeiji $minyear Dec 25
+
+test WEEK_OF_MONTH
+	# Needs to wait for 6191841 fix. (WEEK_OF_MONTH needs to change
+	# ERA and YEAR in a transition month.)
+
+test DAY_OF_MONTH
+	# Needs to wait for 6191841 fix. (DAY_OF_MONTH needs to change
+	# ERA and YEAR in a transition month.)
+
+test DAY_OF_YEAR
+    use jcal
+	clear all
+
+	# 1867 is a regular Gregorian year.
+	set date BeforeMeiji 1867 Dec 31
+	roll day_of_year 1
+	check date BeforeMeiji 1867 Jan 1
+	roll day_of_year -1
+	check date BeforeMeiji 1867 Dec 31
+	roll day_of_year 26
+	check date BeforeMeiji 1867 Jan 26
+	roll day_of_year -26
+	check date BeforeMeiji 1867 Dec 31
+
+	# Meiji 1 starts from Jan 1. It's a regular year as well.
+	set date Meiji 1 Dec 31
+	roll day_of_year 1
+	check date Meiji 1 Jan 1
+	roll day_of_year -1
+	check date Meiji 1 Dec 31
+	roll day_of_year 26
+	check date Meiji 1 Jan 26
+	roll day_of_year -26
+	check date Meiji 1 Dec 31
+
+	# The last year of Meiji (45) has an irregularity. Meiji 45
+	# July 30 is actually Taisho 1 July 30.
+	set date Meiji 45 Jul 29
+	roll day_of_year 1
+	check date Meiji 45 Jan 1
+	roll day_of_year -1
+	check date Meiji 45 Jul 29
+	roll day_of_year 26
+	check date Meiji 45 Jan 26
+	roll day_of_year -26
+	check date Meiji 45 Jul 29
+
+	# The first day of Taisho, July 30.
+	set date Taisho 1 Jul 30
+	roll day_of_year -1
+	check date Taisho 1 Dec 31
+	roll day_of_year 1
+	check date Taisho 1 Jul 30
+	roll day_of_year 26
+	check date Taisho 1 Aug 25
+	roll day_of_year -26
+	check date Taisho 1 Jul 30
+
+	set date Taisho 15 Jan 1
+	roll day_of_year -1
+	check date Taisho 15 Dec 24
+	roll day_of_year 1
+	check date Taisho 15 Jan 1
+
+	set date Showa 1 Dec 31
+	roll day_of_year 1
+	check date Showa 1 Dec 25
+	roll day_of_year -1
+	check date Showa 1 Dec 31
+	roll day_of_year 26
+	# 26 % 7 = 5
+	check date Showa 1 Dec 29
+	roll day_of_year -26
+	check date Showa 1 Dec 31
+
+	set date Showa 64 Jan 7
+	roll day_of_year 1
+	check date Showa 64 Jan 1
+	roll day_of_year -1
+	check date Showa 64 Jan 7
+	roll day_of_year 26
+	# 26 % 7 = 5
+	check date Showa 64 Jan 5
+	roll day_of_year -26
+	check date Showa 64 Jan 7
+
+	set date Heisei 1 Jan 8
+	roll day_of_year -1
+	check date Heisei 1 Dec 31
+	roll day_of_year 1
+	check date Heisei 1 Jan 8
+	roll day_of_year -26
+	check date Heisei 1 Dec 6
+	roll day_of_year 26
+	check date Heisei 1 Jan 8
+
+	set date Heisei 1 Dec 31
+	roll day_of_year 5
+	check date Heisei 1 Jan 12
+	roll day_of_year -5
+	check date Heisei 1 Dec 31
+	roll day_of_year 55
+	check date Heisei 1 Mar 3
+	roll day_of_year -55
+	check date Heisei 1 Dec 31
+
+    use tokyocal
+	clear all
+
+	set date BeforeMeiji $minyear Dec 31
+	set timeofday 1 47 4 192
+	roll day_of_year 1
+	check date BeforeMeiji $minyear May 17
+	check timeofday 1 47 4 192
+	roll day_of_year -1
+	check date BeforeMeiji $minyear Dec 31
+	check timeofday 1 47 4 192
+
+test DAY_OF_WEEK_IN_MONTH
+    use jcal
+	clear all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/params/lenient.cts	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,5 @@
+#
+#
+#
+
+set lenient
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/params/non-lenient.cts	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,5 @@
+#
+#
+#
+
+set non-lenient
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/timezones/tz_japan.cts	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,5 @@
+#
+#
+#
+
+timezone Asia/Tokyo
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/timezones/tz_novosibirsk.cts	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,5 @@
+#
+#
+#
+
+timezone Asia/Novosibirsk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/timezones/tz_pst.cts	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,5 @@
+#
+#
+#
+
+timezone America/Los_Angeles
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/CalendarTestScripts/timezones/tz_sydney.cts	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,5 @@
+#
+#
+#
+
+timezone Australia/Sydney
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/JapaneseEraNameTest.java	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8202088
+ * @summary Test the localized Japanese new era name (May 1st. 2019-)
+ *      is retrieved no matter CLDR provider contains the name or not.
+ * @run testng/othervm JapaneseEraNameTest
+ */
+
+import static java.util.Calendar.*;
+import static java.util.Locale.*;
+import java.util.Calendar;
+import java.util.Locale;
+
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import static org.testng.Assert.assertEquals;
+
+@Test
+public class JapaneseEraNameTest {
+    static final Calendar c;
+
+    static {
+        c = Calendar.getInstance(new Locale("ja","JP","JP"));
+        c.set(ERA, 5);
+        c.set(YEAR, 1);
+        c.set(MONTH, MAY);
+        c.set(DAY_OF_MONTH, 1);
+    }
+
+    @DataProvider(name="names")
+    Object[][] names() {
+        return new Object[][] {
+            // type,    locale,  name
+            { LONG,     JAPAN,   "\u4ee4\u548c" },
+            { LONG,     US,      "Reiwa" },
+            { LONG,     CHINA,   "Reiwa" },
+            { SHORT,    JAPAN,   "R" },
+            { SHORT,    US,      "R" },
+            { SHORT,    CHINA,   "R" },
+        };
+    }
+
+    @Test(dataProvider="names")
+    public void testJapaneseNewEraName(int type, Locale locale, String expected) {
+        assertEquals(c.getDisplayName(ERA, type, locale), expected);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/Calendar/JapaneseLenientEraTest.java	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8206120
+ * @summary Test whether lenient era is accepted in JapaneseImperialCalendar
+ * @run testng/othervm JapaneseLenientEraTest
+ */
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import static org.testng.Assert.assertEquals;
+
+@Test
+public class JapaneseLenientEraTest {
+
+    @DataProvider(name="lenientEra")
+    Object[][] names() {
+        return new Object[][] {
+            // lenient era/year, strict era/year
+            { "Meiji 123", "Heisei 2" },
+            { "Showa 65", "Heisei 2" },
+            { "Heisei 32", "Reiwa 2" },
+        };
+    }
+
+    @Test(dataProvider="lenientEra")
+    public void testLenientEra(String lenient, String strict) throws Exception {
+        Locale loc = new Locale.Builder().setUnicodeLocaleKeyword("ca","japanese").build();
+        Calendar c = Calendar.getInstance(loc);
+        DateFormat df = new SimpleDateFormat("GGGG y-M-d", Locale.ROOT);
+        df.setCalendar(c);
+        Date lenDate = df.parse(lenient + "-01-01");
+        df.setLenient(false);
+        Date strDate = df.parse(strict + "-01-01");
+        assertEquals(lenDate, strDate);
+    }
+}
--- a/test/java/util/Currency/CurrencyTest.java	Wed Apr 03 03:51:25 2019 +0100
+++ b/test/java/util/Currency/CurrencyTest.java	Tue Apr 16 02:48:40 2019 +0100
@@ -23,7 +23,7 @@
 /*
  * @test
  * @bug 4290801 4692419 4693631 5101540 5104960 6296410 6336600 6371531
- *    6488442 7036905
+ *    6488442 7036905 8074350 8074351
  * @summary Basic tests for Currency class.
  */
 
@@ -49,6 +49,7 @@
         testFractionDigits();
         testSerialization();
         testDisplayNames();
+        testFundsCodes();
     }
 
     static void testCurrencyCodeValidation() {
@@ -263,4 +264,41 @@
         }
     }
 
+    static void testFundsCodes() {
+        testValidCurrency("BOV");
+        testValidCurrency("CHE");
+        testValidCurrency("CHW");
+        testValidCurrency("CLF");
+        testValidCurrency("COU");
+        testValidCurrency("MXV");
+        testValidCurrency("USN");
+        testValidCurrency("UYI");
+
+        testFractionDigits("BOV", 2);
+        testFractionDigits("CHE", 2);
+        testFractionDigits("CHW", 2);
+        testFractionDigits("CLF", 4);
+        testFractionDigits("COU", 2);
+        testFractionDigits("MXV", 2);
+        testFractionDigits("USN", 2);
+        testFractionDigits("UYI", 0);
+
+        testNumericCode("BOV", 984);
+        testNumericCode("CHE", 947);
+        testNumericCode("CHW", 948);
+        testNumericCode("CLF", 990);
+        testNumericCode("COU", 970);
+        testNumericCode("MXV", 979);
+        testNumericCode("USN", 997);
+        testNumericCode("UYI", 940);
+    }
+
+    static void testNumericCode(String currencyCode, int expectedNumeric) {
+        int numeric = Currency.getInstance(currencyCode).getNumericCode();
+        if (numeric != expectedNumeric) {
+            throw new RuntimeException("Wrong numeric code for currency " +
+                    currencyCode +": expected " + expectedNumeric +
+                    ", got " + numeric);
+        }
+    }
 }
--- a/test/java/util/Currency/PropertiesTest.java	Wed Apr 03 03:51:25 2019 +0100
+++ b/test/java/util/Currency/PropertiesTest.java	Tue Apr 16 02:48:40 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,22 +26,15 @@
 import java.util.regex.*;
 
 public class PropertiesTest {
-    public static void main(String[] s) {
-        for (int i = 0; i < s.length; i ++) {
-            if ("-d".equals(s[i])) {
-                i++;
-                if (i == s.length) {
-                    throw new RuntimeException("-d needs output file name");
-                } else {
-                    dump(s[i]);
-                }
-            } else if ("-c".equals(s[i])) {
-                if (i+2 == s.length) {
-                    throw new RuntimeException("-d needs two file name arguments, before and after respectively");
-                } else {
-                    compare(s[++i], s[++i]);
-                }
-            }
+    public static void main(String[] args) throws Exception {
+        if (args.length == 2 && args[0].equals("-d")) {
+            dump(args[1]);
+        } else if (args.length == 4 && args[0].equals("-c")) {
+            compare(args[1], args[2], args[3]);
+        } else {
+            System.err.println("Usage:  java PropertiesTest -d <dumpfile>");
+            System.err.println("        java PropertiesTest -c <beforedump> <afterdump> <propsfile>");
+            System.exit(-1);
         }
     }
 
@@ -76,15 +69,17 @@
         pw.close();
     }
 
-    private static void compare(String beforeFile, String afterFile) {
+    private static void compare(String beforeFile, String afterFile, String propsFile)
+        throws IOException
+    {
         // load file contents
         Properties before = new Properties();
+        try (Reader reader = new FileReader(beforeFile)) {
+            before.load(reader);
+        }
         Properties after = new Properties();
-        try {
-            before.load(new FileReader(beforeFile));
-            after.load(new FileReader(afterFile));
-        } catch (IOException ioe) {
-            throw new RuntimeException(ioe);
+        try (Reader reader = new FileReader(afterFile)) {
+            after.load(reader);
         }
 
         // remove the same contents from the 'after' properties
@@ -102,19 +97,15 @@
         }
 
         // now look at the currency.properties
-        String propFileName = System.getProperty("java.home") + File.separator +
-                              "lib" + File.separator + "currency.properties";
         Properties p = new Properties();
-        try {
-            p.load(new FileReader(propFileName));
-        } catch (IOException ioe) {
-            throw new RuntimeException(ioe);
+        try (Reader reader = new FileReader(propsFile)) {
+            p.load(reader);
         }
 
         // test each replacements
         keys = p.stringPropertyNames();
         Pattern propertiesPattern =
-            Pattern.compile("([A-Z]{3})\\s*,\\s*(\\d{3})\\s*,\\s*([0-3])");
+            Pattern.compile("([A-Z]{3})\\s*,\\s*(\\d{3})\\s*,\\s*(\\d+)");
         for (String key: keys) {
             String val = p.getProperty(key);
             String afterVal = after.getProperty(key);
@@ -132,14 +123,19 @@
                 continue;
             }
 
+            String code = m.group(1);
+            int numeric = Integer.parseInt(m.group(2));
+            int fraction = Integer.parseInt(m.group(3));
+            if (fraction > 9) {
+                System.out.println("Skipping since the fraction is greater than 9");
+                continue;
+            }
+
             Matcher mAfter = propertiesPattern.matcher(afterVal);
             mAfter.find();
 
-            String code = m.group(1);
             String codeAfter = mAfter.group(1);
-            int numeric = Integer.parseInt(m.group(2));
             int numericAfter = Integer.parseInt(mAfter.group(2));
-            int fraction = Integer.parseInt(m.group(3));
             int fractionAfter = Integer.parseInt(mAfter.group(3));
             if (code.equals(codeAfter) &&
                 (numeric == numericAfter)&&
--- a/test/java/util/Currency/PropertiesTest.sh	Wed Apr 03 03:51:25 2019 +0100
+++ b/test/java/util/Currency/PropertiesTest.sh	Tue Apr 16 02:48:40 2019 +0100
@@ -1,7 +1,29 @@
 #!/bin/sh
+
+# Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
 # @test
-# @bug 6332666
+# @bug 6332666 8003846 8074350 8074351
 # @summary tests the capability of replacing the currency data with user
 #     specified currency properties file
 # @build PropertiesTest
@@ -36,7 +58,7 @@
     ;;
   Windows* | CYGWIN* )
     PS=";"
-    FS="\\"
+    FS="/"
     ;;
   * )
     echo "Unrecognized system!"
@@ -44,23 +66,32 @@
     ;;
 esac
 
-# Currency dump path #1.  Just dump currencies with the bare JRE
+failures=0
 
 # run
-RUNCMD="${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -classpath ${TESTCLASSES} PropertiesTest -d dump1"
+run() {
+    echo ''
+    sh -xc "${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -cp ${TESTCLASSES} $*" 2>&1
+    if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
+}
 
-echo ${RUNCMD}
-${RUNCMD}
-result=$?
+PROPS=${TESTSRC}${FS}currency.properties
 
-if [ $result -eq 0 ]
-then
-  echo "Execution successful"
-else
-  echo "Execution of the test case failed."
-fi
 
-# Currency dump path #2.  Dump currencies using the JRE with replacement currencies
+# Dump built-in currency data
+
+run PropertiesTest -d dump1
+
+
+# Dump built-in currency data + overrides in properties file specified
+# by system property.
+
+run -Djava.util.currency.data=${PROPS} PropertiesTest -d dump2
+run PropertiesTest -c dump1 dump2 ${PROPS}
+
+
+# Dump built-in currency data + overrides in properties file copied into
+# JRE image.
 
 # copy the test properties file
 COPIED=0
@@ -79,44 +110,27 @@
 else
   PROPLOCATION=${WRITABLEJDK}${FS}lib
 fi
-cp ${TESTSRC}${FS}currency.properties $PROPLOCATION
+cp ${PROPS} $PROPLOCATION
 
 # run
-RUNCMD="${WRITABLEJDK}${FS}bin${FS}java ${TESTVMOPTS} -classpath ${TESTCLASSES} PropertiesTest -d dump2"
-
-echo ${RUNCMD}
-${RUNCMD}
-result=$?
-
-if [ $result -eq 0 ]
-then
-  echo "Execution successful"
-else
-  echo "Execution of the test case failed."
-fi
-
-# Now compare the two dump files
-
-RUNCMD="${WRITABLEJDK}${FS}bin${FS}java -classpath ${TESTCLASSES} PropertiesTest -c dump1 dump2"
-
-echo ${RUNCMD}
-${RUNCMD}
-result=$?
-
-if [ $result -eq 0 ]
-then
-  echo "Execution successful"
-else
-  echo "Execution of the test case failed."
-fi
+echo ''
+sh -xc "${WRITABLEJDK}${FS}bin${FS}java ${TESTVMOPTS} -cp ${TESTCLASSES} PropertiesTest -d dump3"
+if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
 
 # Cleanup
-rm -f dump1
-rm -f dump2
 rm -f ${PROPLOCATION}${FS}currency.properties
 if [ $COPIED -eq 1 ]
 then
   rm -rf $WRITABLEJDK
 fi
 
-exit $result
+# compare the two dump files
+run PropertiesTest -c dump1 dump3 ${PROPS}
+
+
+# Results
+echo ''
+if [ $failures -gt 0 ];
+  then echo "$failures tests failed";
+  else echo "All tests passed"; fi
+exit $failures
--- a/test/java/util/Currency/ValidateISO4217.java	Wed Apr 03 03:51:25 2019 +0100
+++ b/test/java/util/Currency/ValidateISO4217.java	Tue Apr 16 02:48:40 2019 +0100
@@ -23,6 +23,7 @@
 /*
  * @test
  * @bug 4691089 4819436 4942982 5104960 6544471 6627549 7066203 7195759
+ *      8074350 8074351 8145952
  * @summary Validate ISO 4217 data for Currency class.
  */
 
@@ -92,7 +93,7 @@
 
     /* Codes that are obsolete, do not have related country */
     static final String otherCodes =
-        "ADP-AFA-ATS-AYM-AZM-BEF-BGL-BOV-BYB-CLF-CUC-CYP-DEM-EEK-ESP-FIM-FRF-GHC-GRD-GWP-IEP-ITL-LUF-MGF-MTL-MXV-MZM-NLG-PTE-ROL-RUR-SDD-SIT-SKK-SRG-TMM-TPE-TRL-VEF-USN-USS-VEB-XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-XPT-XSU-XTS-XUA-XXX-YUM-ZMK-ZWD-ZWN-ZWR";
+        "ADP-AFA-ATS-AYM-AZM-BEF-BGL-BOV-BYB-BYR-CHE-CHW-CLF-COU-CUC-CYP-DEM-EEK-ESP-FIM-FRF-GHC-GRD-GWP-IEP-ITL-LUF-MGF-MTL-MXV-MZM-NLG-PTE-ROL-RUR-SDD-SIT-SKK-SRG-TMM-TPE-TRL-VEF-UYI-USN-USS-VEB-XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-XPT-XSU-XTS-XUA-XXX-YUM-ZMK-ZWD-ZWN-ZWR";
 
     static boolean err = false;
 
--- a/test/java/util/Currency/currency.properties	Wed Apr 03 03:51:25 2019 +0100
+++ b/test/java/util/Currency/currency.properties	Tue Apr 16 02:48:40 2019 +0100
@@ -1,10 +1,23 @@
 #
 # Test data for replacing the currency data
 #
+
+# valid entries
+CL=CLF,990,4
+ES=ESD,877,2
 JP=JPZ,123,2
+MA=MAA,555,5
+MC=MCC,555,6
+MD=MDD,555,7
+ME=MEE,555,8
+MF=MFF,555,9
+NO=EUR   ,978  ,2
 US=euR,978,2
 ZZ	=	ZZZ	,	999	,	3
 
 # invalid entries
+FR=zzzzz.123
 GB=123
-FR=zzzzz.123
+MG=MGG,990,10
+PE=EUR   ,978  ,2,  20399-01-01T00:00:00
+MG=MGG,990,10
--- a/test/java/util/Currency/tablea1.txt	Wed Apr 03 03:51:25 2019 +0100
+++ b/test/java/util/Currency/tablea1.txt	Tue Apr 16 02:48:40 2019 +0100
@@ -1,12 +1,12 @@
 #
 #
-# Amendments up until ISO 4217 AMENDMENT NUMBER 159
-#   (As of 15 August 2014)
+# Amendments up until ISO 4217 AMENDMENT NUMBER 162
+#   (As of 30 Auguest 2016)
 #
 
 # Version
-FILEVERSION=1
-DATAVERSION=159
+FILEVERSION=2
+DATAVERSION=162
 
 # ISO 4217 currency data
 AF	AFN	971	2
@@ -28,7 +28,7 @@
 BH	BHD	48	3
 BD	BDT	50	2
 BB	BBD	52	2
-BY	BYR	974	0
+BY	BYN	933	2
 BE	EUR	978	2
 BZ	BZD	84	2
 BJ	XOF	952	0
@@ -55,7 +55,7 @@
 CF	XAF	950	0
 TD	XAF	950	0
 CL	CLP	152	0
-#CL	CLF	990	0
+#CL	CLF	990	4
 CN	CNY	156	2
 CX	AUD	36	2
 CC	AUD	36	2
@@ -265,6 +265,7 @@
 #US	USN	997	2
 UM	USD	840	2
 UY	UYU	858	2
+#UY	UYI	940	0
 UZ	UZS	860	2
 VU	VUV	548	0
 VE	VEF	937	2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/lib/security/SecurityUtils.java	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.security.KeyStore;
+
+/**
+ * Common library for various security test helper functions.
+ */
+public final class SecurityUtils {
+
+    private static String getCacerts() {
+        String sep = File.separator;
+        return System.getProperty("java.home") + sep
+                + "lib" + sep + "security" + sep + "cacerts";
+    }
+
+    /**
+     * Returns the cacerts keystore with the configured CA certificates.
+     */
+    public static KeyStore getCacertsKeyStore() throws Exception {
+        File file = new File(getCacerts());
+        if (!file.exists()) {
+            return null;
+        }
+
+        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
+        try (FileInputStream fis = new FileInputStream(file)) {
+            ks.load(fis, null);
+        }
+        return ks;
+    }
+
+    private SecurityUtils() {}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/Distrust.java	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,270 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.*;
+import java.math.BigInteger;
+import java.security.*;
+import java.security.cert.*;
+import java.util.*;
+import javax.net.ssl.*;
+import sun.security.validator.Validator;
+import sun.security.validator.ValidatorException;
+
+
+/**
+ * @test
+ * @bug 8207258 8216280
+ * @summary Check that TLS Server certificates chaining back to distrusted
+ *          Symantec roots are invalid
+ * @library /lib/security
+ * @run main/othervm Distrust after policyOn invalid
+ * @run main/othervm Distrust after policyOff valid
+ * @run main/othervm Distrust before policyOn valid
+ * @run main/othervm Distrust before policyOff valid
+ */
+
+public class Distrust {
+
+    private static final String TEST_SRC = System.getProperty("test.src", ".");
+    private static CertificateFactory cf;
+
+    // Each of the roots have a test certificate chain stored in a file
+    // named "<root>-chain.pem".
+    private static String[] rootsToTest = new String[] {
+        "geotrustglobalca", "geotrustprimarycag2", "geotrustprimarycag3",
+        "geotrustuniversalca", "thawteprimaryrootca", "thawteprimaryrootcag2",
+        "thawteprimaryrootcag3", "verisignclass3g3ca", "verisignclass3g4ca",
+        "verisignclass3g5ca", "verisignuniversalrootca" };
+
+    // Each of the subCAs with a delayed distrust date have a test certificate
+    // chain stored in a file named "<subCA>-chain.pem".
+    private static String[] subCAsToTest = new String[] {
+        "appleistca2g1", "appleistca8g1" };
+
+
+    // A date that is after the restrictions take affect
+    private static final Date APRIL_17_2019;
+
+    // A date that is a second before the restrictions take affect
+    private static final Date BEFORE_APRIL_17_2019;
+
+    // A date that is after the subCA restrictions take affect
+    private static final Date JANUARY_1_2020;
+
+    // A date that is a second before the subCA restrictions take affect
+    private static final Date BEFORE_JANUARY_1_2020;
+
+    static {
+        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+        cal.set(2019, Calendar.APRIL, 17, 0, 0, 0);
+        APRIL_17_2019 = cal.getTime();
+        cal.add(Calendar.SECOND, -1);
+        BEFORE_APRIL_17_2019 = cal.getTime();
+        cal.set(2020, Calendar.JANUARY, 1, 0, 0, 0);
+        JANUARY_1_2020 = cal.getTime();
+        cal.add(Calendar.SECOND, -1);
+        BEFORE_JANUARY_1_2020 = cal.getTime();
+    }
+
+    public static void main(String[] args) throws Exception {
+
+        cf = CertificateFactory.getInstance("X.509");
+        boolean distrust = args[0].equals("true");
+
+        boolean before = args[0].equals("before");
+        boolean policyOn = args[1].equals("policyOn");
+        boolean isValid = args[2].equals("valid");
+
+        if (!policyOn) {
+            // disable policy (default is on)
+            Security.setProperty("jdk.security.caDistrustPolicies", "");
+        }
+
+        Date notBefore = before ? BEFORE_APRIL_17_2019 : APRIL_17_2019;
+
+        X509TrustManager pkixTM = getTMF("PKIX", null);
+        X509TrustManager sunX509TM = getTMF("SunX509", null);
+        for (String test : rootsToTest) {
+            System.err.println("Testing " + test);
+            X509Certificate[] chain = loadCertificateChain(test);
+
+            testTM(sunX509TM, chain, notBefore, isValid);
+            testTM(pkixTM, chain, notBefore, isValid);
+
+        }
+
+        // test chain if params are passed to TrustManager
+        System.err.println("Testing verisignuniversalrootca with params");
+        testTM(getTMF("PKIX", getParams()),
+               loadCertificateChain("verisignuniversalrootca"),
+               notBefore, isValid);
+
+        // test code-signing chain (should be valid as restrictions don't apply)
+        System.err.println("Testing verisignclass3g5ca code-signing chain");
+        Validator v = Validator.getInstance(Validator.TYPE_PKIX,
+                                            Validator.VAR_CODE_SIGNING,
+                                            getParams());
+        // set validation date so this will still pass when cert expires
+        v.setValidationDate(new Date(1544197375493l));
+        v.validate(loadCertificateChain("verisignclass3g5ca-codesigning"));
+
+        // test chains issued through subCAs
+        notBefore = before ? BEFORE_JANUARY_1_2020 : JANUARY_1_2020;
+        for (String test : subCAsToTest) {
+            System.err.println("Testing " + test);
+            X509Certificate[] chain = loadCertificateChain(test);
+
+            testTM(sunX509TM, chain, notBefore, isValid);
+            testTM(pkixTM, chain, notBefore, isValid);
+        }
+    }
+
+    private static X509TrustManager getTMF(String type,
+            PKIXBuilderParameters params) throws Exception {
+        TrustManagerFactory tmf = TrustManagerFactory.getInstance(type);
+        if (params == null) {
+            tmf.init((KeyStore)null);
+        } else {
+            tmf.init(new CertPathTrustManagerParameters(params));
+        }
+        TrustManager[] tms = tmf.getTrustManagers();
+        for (TrustManager tm : tms) {
+            X509TrustManager xtm = (X509TrustManager)tm;
+            return xtm;
+        }
+        throw new Exception("No TrustManager for " + type);
+    }
+
+    private static PKIXBuilderParameters getParams() throws Exception {
+        PKIXBuilderParameters pbp =
+            new PKIXBuilderParameters(SecurityUtils.getCacertsKeyStore(),
+                                      new X509CertSelector());
+        pbp.setRevocationEnabled(false);
+        return pbp;
+    }
+
+    private static void testTM(X509TrustManager xtm, X509Certificate[] chain,
+                               Date notBefore, boolean valid) throws Exception {
+        // Check if TLS Server certificate (the first element of the chain)
+        // is issued after the specified notBefore date (should be rejected
+        // unless distrust property is false). To do this, we need to
+        // fake the notBefore date since none of the test certs are issued
+        // after then.
+        chain[0] = new DistrustedTLSServerCert(chain[0], notBefore);
+
+        try {
+            xtm.checkServerTrusted(chain, "ECDHE_RSA");
+            if (!valid) {
+                throw new Exception("chain should be invalid");
+            }
+        } catch (CertificateException ce) {
+            if (valid) {
+                throw new Exception("Unexpected exception, chain " +
+                                    "should be valid", ce);
+            }
+            if (ce instanceof ValidatorException) {
+                ValidatorException ve = (ValidatorException)ce;
+                if (ve.getErrorType() != ValidatorException.T_UNTRUSTED_CERT) {
+                    throw new Exception("Unexpected exception: " + ce);
+                }
+            } else {
+                throw new Exception("Unexpected exception: " + ce);
+            }
+        }
+    }
+
+    private static X509Certificate[] loadCertificateChain(String name)
+            throws Exception {
+        try (InputStream in = new FileInputStream(TEST_SRC + File.separator +
+                                                  name + "-chain.pem")) {
+            Collection<X509Certificate> certs =
+                (Collection<X509Certificate>)cf.generateCertificates(in);
+            return certs.toArray(new X509Certificate[0]);
+        }
+    }
+
+    private static class DistrustedTLSServerCert extends X509Certificate {
+        private final X509Certificate cert;
+        private final Date notBefore;
+        DistrustedTLSServerCert(X509Certificate cert, Date notBefore) {
+            this.cert = cert;
+            this.notBefore = notBefore;
+        }
+        public Set<String> getCriticalExtensionOIDs() {
+           return cert.getCriticalExtensionOIDs();
+        }
+        public byte[] getExtensionValue(String oid) {
+            return cert.getExtensionValue(oid);
+        }
+        public Set<String> getNonCriticalExtensionOIDs() {
+            return cert.getNonCriticalExtensionOIDs();
+        }
+        public boolean hasUnsupportedCriticalExtension() {
+            return cert.hasUnsupportedCriticalExtension();
+        }
+        public void checkValidity() throws CertificateExpiredException,
+            CertificateNotYetValidException {
+            // always pass
+        }
+        public void checkValidity(Date date) throws CertificateExpiredException,
+            CertificateNotYetValidException {
+            // always pass
+        }
+        public int getVersion() { return cert.getVersion(); }
+        public BigInteger getSerialNumber() { return cert.getSerialNumber(); }
+        public Principal getIssuerDN() { return cert.getIssuerDN(); }
+        public Principal getSubjectDN() { return cert.getSubjectDN(); }
+        public Date getNotBefore() { return notBefore; }
+        public Date getNotAfter() { return cert.getNotAfter(); }
+        public byte[] getTBSCertificate() throws CertificateEncodingException {
+            return cert.getTBSCertificate();
+        }
+        public byte[] getSignature() { return cert.getSignature(); }
+        public String getSigAlgName() { return cert.getSigAlgName(); }
+        public String getSigAlgOID() { return cert.getSigAlgOID(); }
+        public byte[] getSigAlgParams() { return cert.getSigAlgParams(); }
+        public boolean[] getIssuerUniqueID() {
+            return cert.getIssuerUniqueID();
+        }
+        public boolean[] getSubjectUniqueID() {
+            return cert.getSubjectUniqueID();
+        }
+        public boolean[] getKeyUsage() { return cert.getKeyUsage(); }
+        public int getBasicConstraints() { return cert.getBasicConstraints(); }
+        public byte[] getEncoded() throws CertificateEncodingException {
+            return cert.getEncoded();
+        }
+        public void verify(PublicKey key) throws CertificateException,
+            InvalidKeyException, NoSuchAlgorithmException,
+            NoSuchProviderException, SignatureException {
+            cert.verify(key);
+        }
+        public void verify(PublicKey key, String sigProvider) throws
+            CertificateException, InvalidKeyException, NoSuchAlgorithmException,
+            NoSuchProviderException, SignatureException {
+            cert.verify(key, sigProvider);
+        }
+        public PublicKey getPublicKey() { return cert.getPublicKey(); }
+        public String toString() { return cert.toString(); }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/appleistca2g1-chain.pem	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,80 @@
+-----BEGIN CERTIFICATE-----
+MIIGGzCCBQOgAwIBAgIITJltLCqcD0gwDQYJKoZIhvcNAQELBQAwYjEcMBoGA1UE
+AxMTQXBwbGUgSVNUIENBIDIgLSBHMTEgMB4GA1UECxMXQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkxEzARBgNVBAoTCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMB4XDTE5
+MDEwODIxMTcxNFoXDTIwMDgwODIxMjcwMFowgaoxSjBIBgNVBAMMQWFjdGl2ZS5n
+ZW90cnVzdC1nbG9iYWwtY2EudGVzdC1wYWdlcy5jZXJ0aWZpY2F0ZW1hbmFnZXIu
+YXBwbGUuY29tMSUwIwYDVQQLDBxtYW5hZ2VtZW50OmlkbXMuZ3JvdXAuODY0ODU5
+MRMwEQYDVQQKDApBcHBsZSBJbmMuMRMwEQYDVQQIDApDYWxpZm9ybmlhMQswCQYD
+VQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMCjFUrVHTEX
+0aVU6x9LiGa6oVr9blaCsMFrLicPQguc43Vs/pN+g4jzRXsTSMe9XefezBQb6tzZ
+SMRXVB4kWMr4K1BVgQDkXeyoh4KrXRkdEF9ZIJPNxwTmmYUOc5M6NOYwkLelYz+t
+7n1iNIGylbjwU4qwauElk2alFVqYTEPDLzwvqVDb9jMAJ8MPSDjfUlXW0XD9oXZM
+hC+8LU9JBgJ3YBdzRHa4WnrudUbWjspqaNfAYpVIX0cfCJKnMsKqaSKjS4pIRtWm
+L6NlCTCoIMyOh+wmbWPPX24H2D3+ump5FA35fRYbVznmosl5n1AK34S9tD4XZ7lO
+WZKfaFi1liMCAwEAAaOCAoowggKGMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAU
+2HqURHyQcJAWnt0XnAFEA4bWKikwfgYIKwYBBQUHAQEEcjBwMDQGCCsGAQUFBzAC
+hihodHRwOi8vY2VydHMuYXBwbGUuY29tL2FwcGxlaXN0Y2EyZzEuZGVyMDgGCCsG
+AQUFBzABhixodHRwOi8vb2NzcC5hcHBsZS5jb20vb2NzcDAzLWFwcGxlaXN0Y2Ey
+ZzEwMTBMBgNVHREERTBDgkFhY3RpdmUuZ2VvdHJ1c3QtZ2xvYmFsLWNhLnRlc3Qt
+cGFnZXMuY2VydGlmaWNhdGVtYW5hZ2VyLmFwcGxlLmNvbTCB/wYDVR0gBIH3MIH0
+MIHxBgoqhkiG92NkBQsEMIHiMIGkBggrBgEFBQcCAjCBlwyBlFJlbGlhbmNlIG9u
+IHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0YW5j
+ZSBvZiBhbnkgYXBwbGljYWJsZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2Ug
+YW5kL29yIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wOQYIKwYB
+BQUHAgEWLWh0dHA6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5
+L3JwYTAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwNwYDVR0fBDAwLjAs
+oCqgKIYmaHR0cDovL2NybC5hcHBsZS5jb20vYXBwbGVpc3RjYTJnMS5jcmwwHQYD
+VR0OBBYEFP0qkmFJhArI0MsfW0V+/wY9x4GSMA4GA1UdDwEB/wQEAwIFoDANBgkq
+hkiG9w0BAQsFAAOCAQEATjT8M0bIq+mFc8k5cd4KDjCMBjYl/l3/8zKlWYGP+nl1
+KRogXcGRa3LcfpdJcqgMrx8e9Xohduvl8MBzwv671rYkppzZdsmZdLVorAdbL5GL
+suhTjAS5yL3NBWNMRpeOgFsVr7YtPDEvo3CFsnzjg7THe0S6Y35oYukJtUzGUvSY
+kC3ApBTdjj0vAeow+dbt+AHKnQiEnon4ToSFmtnkru08Uxe7uyHCQ2sLUg0EPYc9
+t9I8lviaHfK/mQoCzlme2O/H5Rher8dXCv8hVT1NKbsi28EpgpqcTLS+hn/Edc/q
+4dPDoO1Ozs+ixRzFeMpA+JrnAyARb6qbSrAPBgtIbQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEQDCCAyigAwIBAgIDAjp0MA0GCSqGSIb3DQEBCwUAMEIxCzAJBgNVBAYTAlVT
+MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
+YWwgQ0EwHhcNMTQwNjE2MTU0MjAyWhcNMjIwNTIwMTU0MjAyWjBiMRwwGgYDVQQD
+ExNBcHBsZSBJU1QgQ0EgMiAtIEcxMSAwHgYDVQQLExdDZXJ0aWZpY2F0aW9uIEF1
+dGhvcml0eTETMBEGA1UEChMKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQk6EdR0MgFrILa+vD1bTox5jN896/
+6E3p4zaAB/xFG2p8RYauVtOkCX9hDWtdflJrfbTIOcT0Zzr3g84Zb4YvfkV+Rxxn
+UsqVBV3iNlGFwNRngDVvFd0+/R3S/Y80UNjsdiq+49Pa5P3I6ygClhGXF2Ec6cRZ
+O0LcMtEJHdqm0UOG/16yvIzPZtsBiwKulEjzOI/96jKoCOyGl1GUJD5JSZZT6Hmh
+QIHpBbuTlVH84/18EUv3ngizFUkVB/nRN6CbSzL2tcTcatH8Cu324MUpoKiLcf4N
+krz+VHAYCm3H7Qz7yS0Gw4yF/MuGXNY2jhKLCX/7GRo41fCUMHoPpozzAgMBAAGj
+ggEdMIIBGTAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1luMrMTjAdBgNVHQ4E
+FgQU2HqURHyQcJAWnt0XnAFEA4bWKikwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNV
+HQ8BAf8EBAMCAQYwNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2cuc3ltY2IuY29t
+L2NybHMvZ3RnbG9iYWwuY3JsMC4GCCsGAQUFBwEBBCIwIDAeBggrBgEFBQcwAYYS
+aHR0cDovL2cuc3ltY2QuY29tMEwGA1UdIARFMEMwQQYKYIZIAYb4RQEHNjAzMDEG
+CCsGAQUFBwIBFiVodHRwOi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvY3Bz
+MA0GCSqGSIb3DQEBCwUAA4IBAQAWR3NvhaJi4ecqdruJlUIml7xKrKxwUzo/MYM9
+PByrmuKxXRx2GqA8DHJXvtOeUODImdZY1wLqzg0pVHzN9cLGkClVo28UqAtCDTqY
+bQZ4nvBqox0CCqIopI3CgUY+bWfa3j/+hQ5CKhLetbf7uBunlux3n+zUU5V6/wf0
+8goUwFFSsdaOUAsamVy8C8m97e34XsFW201+I6QRoSzUGwWa5BtS9nw4mQVLunKN
+QolgBGYq9P1o12v3mUEo1mwkq+YlUy7Igpnioo8jvjCDsSeL+mh/AUnoxphrEC6Y
+XorXykuxx8lYmtA225aV7LaB5PLNbxt5h0wQPInkTfpU3Kqm
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
+MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
+YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
+EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
+R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
+9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
+fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
+iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
+1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
+MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
+ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
+uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
+Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
+tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
+PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
+hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
+5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/appleistca8g1-chain.pem	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,64 @@
+-----BEGIN CERTIFICATE-----
+MIIElDCCBDqgAwIBAgIIWax3IY1ByGIwCgYIKoZIzj0EAwIwYjEcMBoGA1UEAwwT
+QXBwbGUgSVNUIENBIDggLSBHMTEgMB4GA1UECwwXQ2VydGlmaWNhdGlvbiBBdXRo
+b3JpdHkxEzARBgNVBAoMCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMB4XDTE5MDEw
+ODIxMTAyNFoXDTIwMDgwODIxMjAwMFowga0xTTBLBgNVBAMMRGFjdGl2ZS5nZW90
+cnVzdC1nbG9iYWwtY2EtZzIudGVzdC1wYWdlcy5jZXJ0aWZpY2F0ZW1hbmFnZXIu
+YXBwbGUuY29tMSUwIwYDVQQLDBxtYW5hZ2VtZW50OmlkbXMuZ3JvdXAuODY0ODU5
+MRMwEQYDVQQKDApBcHBsZSBJbmMuMRMwEQYDVQQIDApDYWxpZm9ybmlhMQswCQYD
+VQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABN4oxNLGzmOIfgFRxDaU
+SaOYTQVZCc7a7MXlK1L4/KgN22stgSkrg47aOWviMuzb9Q9hDA/Tn19o9Zr8G5ON
+pYijggKMMIICiDAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFMPEpFgFY9eDBrqW
+jdyyjzL2u7dBMH4GCCsGAQUFBwEBBHIwcDA0BggrBgEFBQcwAoYoaHR0cDovL2Nl
+cnRzLmFwcGxlLmNvbS9hcHBsZWlzdGNhOGcxLmRlcjA4BggrBgEFBQcwAYYsaHR0
+cDovL29jc3AuYXBwbGUuY29tL29jc3AwMy1hcHBsZWlzdGNhOGcxMDEwTwYDVR0R
+BEgwRoJEYWN0aXZlLmdlb3RydXN0LWdsb2JhbC1jYS1nMi50ZXN0LXBhZ2VzLmNl
+cnRpZmljYXRlbWFuYWdlci5hcHBsZS5jb20wgf4GA1UdIASB9jCB8zCB8AYKKoZI
+hvdjZAULBDCB4TCBpAYIKwYBBQUHAgIwgZcMgZRSZWxpYW5jZSBvbiB0aGlzIGNl
+cnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgYW55
+IGFwcGxpY2FibGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFuZC9vciBj
+ZXJ0aWZpY2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudHMuMDgGCCsGAQUFBwICMCwM
+Kmh0dHA6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5LzAdBgNV
+HSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwNwYDVR0fBDAwLjAsoCqgKIYmaHR0
+cDovL2NybC5hcHBsZS5jb20vYXBwbGVpc3RjYThnMS5jcmwwHQYDVR0OBBYEFCQy
+hU8U00tcIz6L0MCT6EGVho0EMA4GA1UdDwEB/wQEAwIDiDAKBggqhkjOPQQDAgNI
+ADBFAiAl5nGHi2u8V0aJSp4o1i3TlK7ao8WvxwBuHKfuKibSLAIhAN8PZqhESS9u
+V7Dr6qzs88yn/1z6oeqPwDsntFpUFtWG
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDVDCCAtugAwIBAgIQE1Iuv8HdXOEe8nZAdR/n3zAKBggqhkjOPQQDAzCBmDEL
+MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
+KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
+MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eSAtIEcyMB4XDTE2MDYwOTAwMDAwMFoXDTMxMDYwODIzNTk1OVowYjEcMBoGA1UE
+AwwTQXBwbGUgSVNUIENBIDggLSBHMTEgMB4GA1UECwwXQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkxEzARBgNVBAoMCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMFkwEwYH
+KoZIzj0CAQYIKoZIzj0DAQcDQgAELVSOaLAQE+/0LdvYCbJD6J1lmW40uNSXyY7J
+1qgiNzLIcWDusPHyxWT2ukdf/OYHeDIt9sqAIMn9cPhykyGIRaOCATowggE2MBIG
+A1UdEwEB/wQIMAYBAf8CAQAwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2cuc3lt
+Y2IuY29tL0dlb1RydXN0UENBLUcyLmNybDAOBgNVHQ8BAf8EBAMCAQYwLgYIKwYB
+BQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vZy5zeW1jZC5jb20wSQYDVR0g
+BEIwQDA+BgZngQwBAgIwNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93d3cuZ2VvdHJ1
+c3QuY29tL3Jlc291cmNlcy9jcHMwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUF
+BwMCMB0GA1UdDgQWBBTDxKRYBWPXgwa6lo3cso8y9ru3QTAfBgNVHSMEGDAWgBQV
+XzVXUVX7JbKtA2n8AaP6vhFV1TAKBggqhkjOPQQDAwNnADBkAjBH2jMNybjCk3Ts
+OidXxJX9YDPMd5S3KDCv8vyTdJGhtoly7fQJRNv5rnVz+6YGfsMCMEp6wyheL7NK
+mqavsduix2R+j1B3wRjelzJYgXzgM3nwhQKKlJWxpF7IGHuva1taxg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL
+MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
+KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
+MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV
+BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw
+NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV
+BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
+MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL
+So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal
+tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
+BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG
+CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT
+qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz
+rD6ogRLQy7rQkgu2npaqBA+K
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/geotrustglobalca-chain.pem	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,66 @@
+-----BEGIN CERTIFICATE-----
+MIIHBjCCBe6gAwIBAgIQanINWwJAuap0V7lFjnfUwTANBgkqhkiG9w0BAQsFADBE
+MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMU
+R2VvVHJ1c3QgU1NMIENBIC0gRzMwHhcNMTcwNTAzMDAwMDAwWhcNMjAwNTAyMjM1
+OTU5WjCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNV
+BAcMDU1vdW50YWluIFZpZXcxFzAVBgNVBAoMDkdlb1RydXN0LCBJbmMuMRgwFgYD
+VQQLDA9Sb290IDEwIC0gVkFMSUQxIjAgBgNVBAMMGXZhbGlkLXJvb3QxMC5nZW90
+cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTegUYhAh0
+P7aF6jzk8dit4Vzddo3hM+J7Eak/+N1sqVUS2HpNd7VO50FrbEWKIRusv7QNtlpY
+1Cgrla8M4RAhCB0wkkHXZ1Evz6E1AEFQqNSjyuRQxeEXl+xCL+MF+yAMhDRnHh+E
+eSJ3ie0T66saOyaLM9fPpr3xomAQ/IRlP1atJ/Z8XbPo25HuxwzxiWFW+RjwVIfI
+gxHz4Okwc1uImDUIDlEu9Uaqqb4jHhxU1EkKMmgEncpqwCROcZMujUkogfB49Z7+
+K17r6ARIrUuxqfNPrPwe+O88WgIeDSWffPM67UlvtomZOwuTNdv9OoCX1wUCLS7m
+/gZ3rqqqeJvfAgMBAAGjggOkMIIDoDAkBgNVHREEHTAbghl2YWxpZC1yb290MTAu
+Z2VvdHJ1c3QuY29tMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgWgMCsGA1UdHwQk
+MCIwIKAeoByGGmh0dHA6Ly9nbi5zeW1jYi5jb20vZ24uY3JsMIGdBgNVHSAEgZUw
+gZIwgY8GBmeBDAECAjCBhDA/BggrBgEFBQcCARYzaHR0cHM6Ly93d3cuZ2VvdHJ1
+c3QuY29tL3Jlc291cmNlcy9yZXBvc2l0b3J5L2xlZ2FsMEEGCCsGAQUFBwICMDUM
+M2h0dHBzOi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvcmVwb3NpdG9yeS9s
+ZWdhbDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHwYDVR0jBBgwFoAU
+0m/3lvSFP3I8MH0j2oV4m6N8WnwwVwYIKwYBBQUHAQEESzBJMB8GCCsGAQUFBzAB
+hhNodHRwOi8vZ24uc3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8vZ24uc3lt
+Y2IuY29tL2duLmNydDCCAfUGCisGAQQB1nkCBAIEggHlBIIB4QHfAHUA3esdK3oN
+T6Ygi4GtgWhwfi6OnQHVXIiNPRHEzbbsvswAAAFbz9h5vQAABAMARjBEAiAx/C0U
+5NdHxK4v2oHnstYksb1Vny8PcQkSvgpx9PsZEwIgNTOU70Zc5szG23xdbvtoH5lN
+SAoVswiF5gFQS5MGu1sAdgCkuQmQtBhYFIe7E6LMZ3AKPDWYBPkb37jjd80OyA3c
+EAAAAVvP2HnZAAAEAwBHMEUCIFGjB8r2H0VDwTUE/aY/Mv+M97sqAvEP1doOcHpg
+0qyfAiEArw/S2F7OEcmKGUY1WRBuApfAx5d7hzrTSV/jZv95qJwAdgDuS723dc5g
+uuFCaR+r4Z5mow9+X7By2IMAxHuJeqj9ywAAAVvP2HoDAAAEAwBHMEUCIQCH6MFZ
+tZF3Cqukt3/69fkU0Y5ePXXx8+xkOXRsIG3EGgIgSmCBWrnmPiiGA3x5QP8I8m4r
+Uee0y7s4NQNwjMgHrjwAdgC8eOHfxfY8aEZJM02hD6FfCXlpIAnAgbTz9pF/Ptm4
+pQAAAVvP2HqcAAAEAwBHMEUCIA8e2kAVYYuQCtn4PqK98BuHnLm9rC40DboFLCle
+SmQsAiEApbCJR05hr9VkNWmjaaUUGGZdVyUu9XX504LHVWyXZDUwDQYJKoZIhvcN
+AQELBQADggEBAEtfBfZ2y5uTohvW3h00Kcuop6Nq7Y59GU3MeizPKtx48DB8qHyd
+y5bLFwXzsGA1WkwpKzPbROsTGcAAXJHh03bj24AemUr/J/eQcjkfSoNBdHDpiSsk
+VZkQK2fGJDiYJ/r9mxKZcgd2pyN3l2OtVtNMv2dnFGF35UkkeqO3jqImwbypAmRX
+HdQV9dvW2YDRjzkebNNey6UwY9+YTSzr4da2hcaMHrj588Eqa4DDgNcY9QnE2RzN
+giArA+4RlM4AZ3jC2A756I67hrlvH+lhumHLp06hGfMiQJF1aaauFVSa36HKc3C/
+ty+sLdJbemEJLAr8uNXggFD+U8TKw1S4LSw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIETzCCAzegAwIBAgIDAjpvMA0GCSqGSIb3DQEBCwUAMEIxCzAJBgNVBAYTAlVT
+MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
+YWwgQ0EwHhcNMTMxMTA1MjEzNjUwWhcNMjIwNTIwMjEzNjUwWjBEMQswCQYDVQQG
+EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
+U1NMIENBIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDjvn4K
+hqPPa209K6GXrUkkTdd3uTR5CKWeop7eRxKSPX7qGYax6E89X/fQp3eaWx8KA7UZ
+U9ulIZRpY51qTJEMEEe+EfpshiW3qwRoQjgJZfAU2hme+msLq2LvjafvY3AjqK+B
+89FuiGdT7BKkKXWKp/JXPaKDmJfyCn3U50NuMHhiIllZuHEnRaoPZsZVP/oyFysx
+j0ag+mkUfJ2fWuLrM04QprPtd2PYw5703d95mnrU7t7dmszDt6ldzBE6B7tvl6QB
+I0eVH6N3+liSxsfQvc+TGEK3fveeZerVO8rtrMVwof7UEJrwEgRErBpbeFBFV0xv
+vYDLgVwts7x2oR5lAgMBAAGjggFKMIIBRjAfBgNVHSMEGDAWgBTAephojYn7qwVk
+DBF9qn1luMrMTjAdBgNVHQ4EFgQU0m/3lvSFP3I8MH0j2oV4m6N8WnwwEgYDVR0T
+AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwNgYDVR0fBC8wLTAroCmgJ4Yl
+aHR0cDovL2cxLnN5bWNiLmNvbS9jcmxzL2d0Z2xvYmFsLmNybDAvBggrBgEFBQcB
+AQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9nMi5zeW1jYi5jb20wTAYDVR0gBEUw
+QzBBBgpghkgBhvhFAQc2MDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuZ2VvdHJ1
+c3QuY29tL3Jlc291cmNlcy9jcHMwKQYDVR0RBCIwIKQeMBwxGjAYBgNVBAMTEVN5
+bWFudGVjUEtJLTEtNTM5MA0GCSqGSIb3DQEBCwUAA4IBAQCg1Pcs+3QLf2TxzUNq
+n2JTHAJ8mJCi7k9o1CAacxI+d7NQ63K87oi+fxfqd4+DYZVPhKHLMk9sIb7SaZZ9
+Y73cK6gf0BOEcP72NZWJ+aZ3sEbIu7cT9clgadZM/tKO79NgwYCA4ef7i28heUrg
+3Kkbwbf7w0lZXLV3B0TUl/xJAIlvBk4BcBmsLxHA4uYPL4ZLjXvDuacu9PGsFj45
+SVGeF0tPEDpbpaiSb/361gsDTUdWVxnzy2v189bPsPX1oxHSIFMTNDcFLENaY9+N
+QNaFHlHpURceA1bJ8TCt55sRornQMYGbaLHZ6PPmlH7HrhMvh+3QJbBo+d4IWvMp
+zNSS
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/geotrustprimarycag2-chain.pem	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,55 @@
+-----BEGIN CERTIFICATE-----
+MIIFcDCCBRegAwIBAgIQHw+Lyn4UTWqRF8/JM7DH+zAKBggqhkjOPQQDAjBHMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOR2VvVHJ1c3QsIEluYy4xHzAdBgNVBAMTFkdl
+b1RydXN0IEVDQyBFViBTU0wgQ0EwHhcNMTcwNTExMDAwMDAwWhcNMTkwNTAzMjM1
+OTU5WjCB8jETMBEGCysGAQQBgjc8AgEDEwJVUzEZMBcGCysGAQQBgjc8AgECDAhE
+ZWxhd2FyZTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNV
+BAcMDU1vdW50YWluIFZpZXcxHTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9u
+MRAwDgYDVQQFEwczNDc5NzUwMRcwFQYDVQQKDA5HZW9UcnVzdCwgSW5jLjEYMBYG
+A1UECwwPUm9vdCAxMiAtIFZBTElEMSIwIAYDVQQDDBl2YWxpZC1yb290MTIuZ2Vv
+dHJ1c3QuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEbvbmcvKl4MkBRBNY
+7EOQ7ugwPIPPCp73W++hAcbFPqiDmupl/fqfrbjL06FImeWzDY7cQOhLbv0Ha8Yq
+UrL8HKOCAzcwggMzMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG
+AQUFBwMCMA4GA1UdDwEB/wQEAwIFoDCBqQYDVR0gBIGhMIGeMIGSBgkrBgEEAfAi
+AQYwgYQwPwYIKwYBBQUHAgEWM2h0dHBzOi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNv
+dXJjZXMvcmVwb3NpdG9yeS9sZWdhbDBBBggrBgEFBQcCAjA1DDNodHRwczovL3d3
+dy5nZW90cnVzdC5jb20vcmVzb3VyY2VzL3JlcG9zaXRvcnkvbGVnYWwwBwYFZ4EM
+AQEwKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL2ZlLnN5bWNiLmNvbS9mZS5jcmww
+VwYIKwYBBQUHAQEESzBJMB8GCCsGAQUFBzABhhNodHRwOi8vZmUuc3ltY2QuY29t
+MCYGCCsGAQUFBzAChhpodHRwOi8vZmUuc3ltY2IuY29tL2ZlLmNydDAkBgNVHREE
+HTAbghl2YWxpZC1yb290MTIuZ2VvdHJ1c3QuY29tMB8GA1UdIwQYMBaAFABLH5GB
+DgtDzgRzu5abgh1mY608MIIBfAYKKwYBBAHWeQIEAgSCAWwEggFoAWYAdQDd6x0r
+eg1PpiCLga2BaHB+Lo6dAdVciI09EcTNtuy+zAAAAVv4eJwGAAAEAwBGMEQCIBSx
+ZdTP+tDh1rstAJ7vyIPNH7HBE6mCRj9W41ccUwbGAiA7p0ljgNoO/ldknmgTiZdI
+FlgEy1KgPQiHYvNS+9MHYwB1AKS5CZC0GFgUh7sTosxncAo8NZgE+RvfuON3zQ7I
+DdwQAAABW/h4nDMAAAQDAEYwRAIgWf4vMQ9lrM5xKD+iEVXkC7g5CB3fmuxP7fNp
+7qX7PB8CIDNe8HT3262gw3D13MGQccxfUhf7dZ9aCRgk7UEDimsJAHYA7ku9t3XO
+YLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo/csAAAFb+Hid8wAABAMARzBFAiAxSFtr
+/dpMd53ZSC4N9FomEZhoNnARnYe7cWnTAdKVHAIhALEz0JaOqgYTf0k9yYPuNW4E
+Bo26yneH6KtdkMV7/gRoMAoGCCqGSM49BAMCA0cAMEQCIBPb1wYt8d6EdjLXiAZp
+UfKGFdQF/oexd5GCB1TU0juDAiBWPRPVggfYfc4gLOkYSqIPvPRmEmEhyY8fqsM6
+3YJgDg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDyDCCA06gAwIBAgIQDww3Kf30lVv4ZevF7vQy/DAKBggqhkjOPQQDAzCBmDEL
+MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
+KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
+MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eSAtIEcyMB4XDTE2MDEwNzAwMDAwMFoXDTI2MDEwNjIzNTk1OVowRzELMAkGA1UE
+BhMCVVMxFzAVBgNVBAoTDkdlb1RydXN0LCBJbmMuMR8wHQYDVQQDExZHZW9UcnVz
+dCBFQ0MgRVYgU1NMIENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEF136Fo2A
+bY7q0YbhVBTL4HNFaJyTdoU3y+o8YdhxQuw1SrpQT9EwLTyx8Xzf/LNPeoalIKNu
+U/3LQgNct6Fk9aOCAcgwggHEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHSUEFjAUBggr
+BgEFBQcDAQYIKwYBBQUHAwIwLgYIKwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJo
+dHRwOi8vZy5zeW1jZC5jb20wEgYDVR0TAQH/BAgwBgEB/wIBADCBqQYDVR0gBIGh
+MIGeMAcGBWeBDAEBMIGSBgkrBgEEAfAiAQYwgYQwPwYIKwYBBQUHAgEWM2h0dHBz
+Oi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvcmVwb3NpdG9yeS9sZWdhbDBB
+BggrBgEFBQcCAjA1GjNodHRwczovL3d3dy5nZW90cnVzdC5jb20vcmVzb3VyY2Vz
+L3JlcG9zaXRvcnkvbGVnYWwwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2cuc3lt
+Y2IuY29tL0dlb1RydXN0UENBLUcyLmNybDArBgNVHREEJDAipCAwHjEcMBoGA1UE
+AxMTU1lNQy1FQ0MtQ0EtcDI1Ni0zMjAdBgNVHQ4EFgQUAEsfkYEOC0POBHO7lpuC
+HWZjrTwwHwYDVR0jBBgwFoAUFV81V1FV+yWyrQNp/AGj+r4RVdUwCgYIKoZIzj0E
+AwMDaAAwZQIweZGj+Ar54cOBtC1I6rkfdNOtxSg77WBAvvsEv1+knWbbu8Acroz1
+Q9xqHnHLXpgRAjEAxNA5KzWxutl/kVj/7bUCYtvSWLfmb2ZTTsvof7VjjWlRnPje
+wLtx+yN5EV7LPWDi
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/geotrustprimarycag3-chain.pem	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,67 @@
+-----BEGIN CERTIFICATE-----
+MIIG6jCCBdKgAwIBAgIQZfxPPcDd0zSbl2UQK6dtRzANBgkqhkiG9w0BAQsFADBG
+MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEfMB0GA1UEAxMW
+R2VvVHJ1c3QgU0hBMjU2IFNTTCBDQTAeFw0xNzAyMDEwMDAwMDBaFw0yMDAzMDIy
+MzU5NTlaMHgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYD
+VQQHDA1Nb3VudGFpbiBWaWV3MR0wGwYDVQQKDBRTeW1hbnRlYyBDb3Jwb3JhdGlv
+bjEdMBsGA1UEAwwUc3NsdGVzdDEzLmJidGVzdC5uZXQwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQDV734wSAESareltMadza6jJ0SVi6bLb/Q23La5v5Z/
+rFCdPzSRrMMKj08NfAA/i1k+TF/d7NZ+rrFvCIN33kfDzSLvIQiJh7NZ/yivA9DY
+eH7RAuVXfrsqhsqpgHVNSmMXxaGxOIJ4RcEx0RB3vbb3frm46lCLMH0uCavJ7Txo
+gDJpAG6AP/hF524IVJcIcHxhJqZo1pQO/iwb/uNGkqwRuAeL9zKhv0tYyiHKNqyW
+AXk51Nzm+TQq0flw0nw7EC9f+VNrquiO5j76JKeL+DaxpUtftTpzL5b5oM/LXwDt
+62VUMujOyVuKPIj1ieQVdhETSDvf340tQI7MB4qFrHlFAgMBAAGjggOgMIIDnDAf
+BgNVHREEGDAWghRzc2x0ZXN0MTMuYmJ0ZXN0Lm5ldDAJBgNVHRMEAjAAMA4GA1Ud
+DwEB/wQEAwIFoDArBgNVHR8EJDAiMCCgHqAchhpodHRwOi8vZ2ouc3ltY2IuY29t
+L2dqLmNybDCBnQYDVR0gBIGVMIGSMIGPBgZngQwBAgIwgYQwPwYIKwYBBQUHAgEW
+M2h0dHBzOi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvcmVwb3NpdG9yeS9s
+ZWdhbDBBBggrBgEFBQcCAjA1DDNodHRwczovL3d3dy5nZW90cnVzdC5jb20vcmVz
+b3VyY2VzL3JlcG9zaXRvcnkvbGVnYWwwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG
+AQUFBwMCMB8GA1UdIwQYMBaAFBRnju2DT9YenUAEDARGoXA0sg9yMFcGCCsGAQUF
+BwEBBEswSTAfBggrBgEFBQcwAYYTaHR0cDovL2dqLnN5bWNkLmNvbTAmBggrBgEF
+BQcwAoYaaHR0cDovL2dqLnN5bWNiLmNvbS9nai5jcnQwggH2BgorBgEEAdZ5AgQC
+BIIB5gSCAeIB4AB1AN3rHSt6DU+mIIuBrYFocH4ujp0B1VyIjT0RxM227L7MAAAB
+WfvjZWcAAAQDAEYwRAIgIxFLEWNCRmGQl2o+3psXrWAd88rz9G1JbxbAgHFpXmAC
+IFxZpWwuj1Aq4Yx6VrBBqvA+K/GlNY2OcThPaeoj3jdfAHYApLkJkLQYWBSHuxOi
+zGdwCjw1mAT5G9+443fNDsgN3BAAAAFZ++NlpAAABAMARzBFAiB+iko2tw6USdc2
+E956ZIpXy9TTUiVtpKHzKFhuR7mdwwIhAMwTisbIGh6UTdjXnPktWPFcWhfxQOPB
+U41c/v7zuFV9AHcA7ku9t3XOYLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo/csAAAFZ
+++NnWwAABAMASDBGAiEAmqY4AhQPt/tU1iR0LvrlpIjKlc0IArbxENVkVbNTYwcC
+IQCPlJZQb7mmlPwjy//aJMyOtEeVFb6DzfM4uhJiSrU9WAB2ALx44d/F9jxoRkkz
+TaEPoV8JeWkgCcCBtPP2kX8+2bilAAABWfvjZmgAAAQDAEcwRQIgMcV63d6G3RHm
+rN34V1zDiAbKG1k/pDEErcfZ+8Y0GdwCIQCcuqmKjnpUYs8ps4/NSx78U2ssNuLA
++QDpYuH1XKHCUTANBgkqhkiG9w0BAQsFAAOCAQEAjYdQJYtrhPJTIHcsyksTWGHS
+cpIt7y1bzp+t06KYn6x+ax+09sTJQzr7L2BA3h24blgMWr2yEH0mvQdVncBFt8xr
+9O8jeg5dHSeJknnDlXOA23Z2NJLanX7m29/713DxZ+HJXFx0Wiz5mtuTo7Q6FpQF
+SI44v0fbUTb7LV81fFpyriroZTlpiMI01NLWGldyCchC795fEYiibSvr1uidjp9i
++MKppG3t3YXb1/Wu2A21b6Z4akgl021A5cJcg8/Q3wjYMqQTtuUEezsBl2jLoey1
+pa/ag3epMe19zTq4iqS3Z4r+2jrZ4IjnKmkDKo4uKvTAfUX2Yu2+Lm3E6Vfdow==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIExzCCA6+gAwIBAgIQQYISfRLZxrMhOUMSVmQAuDANBgkqhkiG9w0BAQsFADCB
+mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
+MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
+eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
+cml0eSAtIEczMB4XDTEzMDUyMzAwMDAwMFoXDTIzMDUyMjIzNTk1OVowRjELMAkG
+A1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHzAdBgNVBAMTFkdlb1Ry
+dXN0IFNIQTI1NiBTU0wgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQDGqQtdF6V9xs8q78Zm0UIeX4N4aJGv5qeL8B1EAQoZypzUix3hoZCjwVu011tq
+i/wOSR7CYin+gBU5i4EqJ7X7EqgFIgvFLPXZmN0WLztm52KiQzKsj7WFyFIGLFzA
+d/pn94PoXgWNyKuhFjKK0kDshjocI6mNtQDecr2FVf4GAWBdrbPgZXOlkhSelFZv
+k+6vqTowJUqOCYTvt9LV15tJzenAXmdxIqxQkEMgXaGjFYP9/Kc5vGtlSBJg/90j
+szqq9J+cN1NBokeTgTMJ5SLGyBxJoW6NzIOzms3qQ/IZ0yTLqCmuUsz0CCewhOrO
+J7XhNBNzklyHhirGsGg2rcsJAgMBAAGjggFcMIIBWDA7BggrBgEFBQcBAQQvMC0w
+KwYIKwYBBQUHMAGGH2h0dHA6Ly9wY2EtZzMtb2NzcC5nZW90cnVzdC5jb20wEgYD
+VR0TAQH/BAgwBgEB/wIBADBMBgNVHSAERTBDMEEGCmCGSAGG+EUBBzYwMzAxBggr
+BgEFBQcCARYlaHR0cDovL3d3dy5nZW90cnVzdC5jb20vcmVzb3VyY2VzL2NwczA7
+BgNVHR8ENDAyMDCgLqAshipodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9HZW9UcnVz
+dFBDQS1HMy5jcmwwDgYDVR0PAQH/BAQDAgEGMCoGA1UdEQQjMCGkHzAdMRswGQYD
+VQQDExJWZXJpU2lnbk1QS0ktMi00MTYwHQYDVR0OBBYEFBRnju2DT9YenUAEDARG
+oXA0sg9yMB8GA1UdIwQYMBaAFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3
+DQEBCwUAA4IBAQAQEOryENYIRuLBjz42WcgrD/5N7OP4tlYxeCXUdvII3e8/zYsc
+fqp//AuoI2RRs4fWCfoi+scKUejOuPYDcOAbWrmxspMREPmXBQcpbG1XJVTo+Wab
+Dvvbn+6Wb2XLH9hVzjH6zwL00H9QZv8veZulwt/Wz8gVg5aEmLJG1F8TqD6nNJwF
+ONrP1mmVqSaHdgHXslEPgWlGJhyZtoNY4ztYj9y0ccC5v0KcHAOe5Eao6rnBzfZb
+qTyW+3mkM3Onnni5cNxydMQyyAAbye9I0/s6m/r+eppAaRzI2ig3C9OjuX6WzCso
+w1Zsb+nbUrH6mvvnr7WXpiLDxaiTsQDJB7J9
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/geotrustuniversalca-chain.pem	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,71 @@
+-----BEGIN CERTIFICATE-----
+MIIHATCCBemgAwIBAgIQJmVwMHBfVctB6q6UbCC4eDANBgkqhkiG9w0BAQsFADBH
+MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMX
+R2VvVHJ1c3QgRVYgU1NMIENBIC0gRzYwHhcNMTcwNTA5MDAwMDAwWhcNMTkwNTAz
+MjM1OTU5WjCB8jETMBEGCysGAQQBgjc8AgEDEwJVUzEZMBcGCysGAQQBgjc8AgEC
+DAhEZWxhd2FyZTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAU
+BgNVBAcMDU1vdW50YWluIFZpZXcxHTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0
+aW9uMRAwDgYDVQQFEwczNDc5NzUwMRcwFQYDVQQKDA5HZW9UcnVzdCwgSW5jLjEY
+MBYGA1UECwwPUm9vdCAxNCAtIFZBTElEMSIwIAYDVQQDDBl2YWxpZC1yb290MTQu
+Z2VvdHJ1c3QuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAua4C
+iQ+Sk3VXblrh9xI6DqxELgjGxLOxORgayEM1/x4lKC5Dah5Ey9jeDhy6eDLJRXce
+JHjR5FYFNpjRpp8w58SzmosAQk7tgRy6HGPtVUUXCVkfUDJ6LIcZE1UcwKO3CUdh
+2Dn3naVCNImdqqoUTCr4H/8iIy+1l4aUDnukiAsTV6M2Len0UQpD8MY2KyVmWNJz
+GLGzZKXKwU42CZwK8hR+xUH/BSEcWvfU2bFShVGIY1CCpJ5vdhi0QMaRfDzpAXVw
+3gvO5bN7RvDD8tABtLUjpnm0P7HzxkVkEO+BGg0P+qpw4bflu+TE7die+pFY1Skz
+1rEFOvMEVOCqoinanwIDAQABo4IDOzCCAzcwJAYDVR0RBB0wG4IZdmFsaWQtcm9v
+dDE0Lmdlb3RydXN0LmNvbTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIFoDCBqQYD
+VR0gBIGhMIGeMIGSBgkrBgEEAfAiAQYwgYQwPwYIKwYBBQUHAgEWM2h0dHBzOi8v
+d3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvcmVwb3NpdG9yeS9sZWdhbDBBBggr
+BgEFBQcCAjA1DDNodHRwczovL3d3dy5nZW90cnVzdC5jb20vcmVzb3VyY2VzL3Jl
+cG9zaXRvcnkvbGVnYWwwBwYFZ4EMAQEwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG
+AQUFBwMCMFcGCCsGAQUFBwEBBEswSTAfBggrBgEFBQcwAYYTaHR0cDovL2ZpLnN5
+bWNkLmNvbTAmBggrBgEFBQcwAoYaaHR0cDovL2ZpLnN5bWNiLmNvbS9maS5jcnQw
+KwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL2ZpLnN5bWNiLmNvbS9maS5jcmwwHwYD
+VR0jBBgwFoAUvpmWhYTv5p/5H+H8ZmdbVqX6i1MwggGABgorBgEEAdZ5AgQCBIIB
+cASCAWwBagB3AN3rHSt6DU+mIIuBrYFocH4ujp0B1VyIjT0RxM227L7MAAABW/fm
+zy4AAAQDAEgwRgIhALUgY0DrJaqjpgv19bbS434UDMpUfIfZ7qyxz30M1LiQAiEA
+4dXlkRJLc3i+DcFUNSjRh8dKPLZMC3DhD4bm7tDQaWwAdgCkuQmQtBhYFIe7E6LM
+Z3AKPDWYBPkb37jjd80OyA3cEAAAAVvuRpVUAAAEAwBHMEUCIGUbCcQ2agQi+sWo
+zudL0F2rSS4elFAgHy/nSzGb/fl0AiEA5zLqvTsn8ioQ89KycY3HocNCLAPtqDqe
+t9+6pcJnVFsAdwDuS723dc5guuFCaR+r4Z5mow9+X7By2IMAxHuJeqj9ywAAAVvu
+RpV3AAAEAwBIMEYCIQDrKkvy08fPVx4vbVO4wBYw7tpqkmrWTaKCIs7Tx9utYwIh
+ANuH3S2ngCM7WzCebmbLFVDmaNxQki3kmZbCOp358sRvMA0GCSqGSIb3DQEBCwUA
+A4IBAQAOEMVj7HwG97PurqFqoa9JI2adgj8er1hc70dIGkTt21OKLWvWp0Yafcjx
+qqEByFjzkF0/yreVmbxl1zf7utUMfWslmv7ElXDvS79lZ2UWO6vptyaZM6VSJ2s+
+pmGHJaQgw3AbDmu5yLmUPlHwOttv//AOuaZvrQISzrwmMs60sHn+pS7qtSdL3lYa
+PtqhCBQNJoLDstn57B/aLBUYx5rSqhK68CCxY4ZcA1i02RakZJIhGbOAOy4x5pZH
+uZiiRFTxgZRGNNUDjrhmVVk7cQDu3eDRDkUKD9m7796GJ+aFDZlvzmORaNW5GYjv
+0qIRajIKmohnwumn+xaJFpmDEuw+
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFUjCCAzqgAwIBAgIQAQAZ9apyafiMHhwSEeyNTzANBgkqhkiG9w0BAQsFADBF
+MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMV
+R2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTE3MDUwMTE0MTcxNloXDTI3MDQyOTE0
+MTcxNlowRzELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xIDAe
+BgNVBAMTF0dlb1RydXN0IEVWIFNTTCBDQSAtIEc2MIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEArvBCvG8ORCUSTiERfNmMdtEvKhvmnV8MrSLOw6t3q24c
++r/y69NGdUJArGmBv8crE5Vxd5mYlecmflrJtyuh08HDFc4Mr4yh2xcGmeKA7Uz5
+Q/Wpfropvop1cFB3r/8BwpfxortVi2jkawQ89TDo3l0RacJrjM29dq+rQwqIWvfK
+dHuU58t54CsXzvJrqDnhL4v+LQ2mqZMbAfh1Mhh8MftEH5UfOSgY2uXwnu5vERYI
+3cl0nakgoJOyUlb187iFd/TrSrYGquv8dYAKTKOTd44YNwxb43iKk/esqxOTiqW8
+rAFv6/E6aOmHwqyP9l7LMtLzVE27ra1wESMR70JttwIDAQABo4IBOjCCATYwHwYD
+VR0jBBgwFoAU2rsuqrAMuIgmUXRcbQPTwNiPetYwHQYDVR0OBBYEFL6ZloWE7+af
++R/h/GZnW1al+otTMA4GA1UdDwEB/wQEAwIBBjAuBggrBgEFBQcBAQQiMCAwHgYI
+KwYBBQUHMAGGEmh0dHA6Ly9nLnN5bWNkLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEA
+MB8GA1UdIAQYMBYwBwYFZ4EMAQEwCwYJKwYBBAHwIgEGMDUGA1UdHwQuMCwwKqAo
+oCaGJGh0dHA6Ly9nLnN5bWNiLmNvbS9jcmxzL2d0dW5pY2ExLmNybDAdBgNVHSUE
+FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwKQYDVR0RBCIwIKQeMBwxGjAYBgNVBAMT
+EVN5bWFudGVjUEtJLTItNzU3MA0GCSqGSIb3DQEBCwUAA4ICAQA8iM9XJ01hEzSM
+iATIdK/z+F1Vtm9hHjp0FzkOvVYkp7v6LIkazg299fyAy2+A/tpSzKyMIzy5B2R/
+sjbWykIK+3vtOlgUNilP7EoudiCjR/692THUtJ/QjPNzFYhO9apU2Wpc33ZYMH0Q
+YKUPmAd7eBmsdVKHNLENcMjjCjnkjXnYtxq/jv2R4QhD83tbFnvBoKjxi2vAfDXG
+xN8aItVg/FSdScZCMhe0w/HLzcN6N3NCGDBn2PjF0o3QLJa9yVSrvJ9Nh3my6rUb
+gMhlfFEQXTmLxucqL5/n5lXyUWd0kTxFv++TalTeqYf3G/oeu5kcpfjUJREp/9ed
+gQqhDEGIuJFrMm4qi+sNDrq0OkLBHCqefFArTz2ApiI9zd9pcKfjS3f/EB87AVmW
+3m1lfqPeS+w+vBg7VCGNY9gGNUe+w4juTEBiwIjnp7I+aBVnIwxV9PdJoj1ZaLCx
+U8AEN6tXD8IcCquLxs3fBsF85svvUfK8qh3ufKB3I3RHGq5Asmtvc5URcyeuA+d2
+zPQ1qAXH5m3DLkb0KdAvJ5E6mQ2S2aqwJPXtpqx2J40C1Qx+uUsHG2vDoT3ZTazt
+LPBIIqF2YJr1hr760yXM3Jf14eyc+RXPrjA1mc/CKNbv6SvU5MvlYj+Vvx70y+k8
+U5ev+YdiYoYu0wQtDJQCJjM+eavqxQ==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/thawteprimaryrootca-chain.pem	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,66 @@
+-----BEGIN CERTIFICATE-----
+MIIG/TCCBeWgAwIBAgIQfVQyuY0yb1Q+TZDQHtRC8TANBgkqhkiG9w0BAQsFADBH
+MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMX
+R2VvVHJ1c3QgRVYgU1NMIENBIC0gRzQwHhcNMTcwNTAzMDAwMDAwWhcNMTkwNTAz
+MjM1OTU5WjCB8jETMBEGCysGAQQBgjc8AgEDEwJVUzEZMBcGCysGAQQBgjc8AgEC
+DAhEZWxhd2FyZTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAU
+BgNVBAcMDU1vdW50YWluIFZpZXcxHTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0
+aW9uMRAwDgYDVQQFEwczNDc5NzUwMRcwFQYDVQQKDA5HZW9UcnVzdCwgSW5jLjEY
+MBYGA1UECwwPUm9vdCAxMSAtIFZBTElEMSIwIAYDVQQDDBl2YWxpZC1yb290MTEu
+Z2VvdHJ1c3QuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy5Wn
+8CUYyHQnisa3ihcezpRBrKNF9OGb9ye9G4mUFRAHoFlNdwVP3qxBtEo7N6ylZ7G0
+tMcLwqy+cdMZlyCw0qPQrJQXqp5AEL034IMeckSvR9I2RyR7DUW3kVtKRsDiAUo9
+4r8h/5ZT96OW/jtdE2WPr0Wt5r0DyG8xzUbUdh5tYFwlxMJLeHgomqsG1WXBEDvS
+cTJk9JMZpH5d1FYux+T0BkJsYyj0NRcDnQuc6P4QIkpim3wsOBKMa7beEiCanmcK
+dSBrBfl2iep67VfOEYfjYTDOwqwaknSfb2H33e0lpunI76Rwv1uZkr/4ciDyaNZS
+IsLh1i57eKvWqn+G9wIDAQABo4IDNzCCAzMwJAYDVR0RBB0wG4IZdmFsaWQtcm9v
+dDExLmdlb3RydXN0LmNvbTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIFoDArBgNV
+HR8EJDAiMCCgHqAchhpodHRwOi8vZ20uc3ltY2IuY29tL2dtLmNybDCBqQYDVR0g
+BIGhMIGeMIGSBgkrBgEEAfAiAQYwgYQwPwYIKwYBBQUHAgEWM2h0dHBzOi8vd3d3
+Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvcmVwb3NpdG9yeS9sZWdhbDBBBggrBgEF
+BQcCAjA1DDNodHRwczovL3d3dy5nZW90cnVzdC5jb20vcmVzb3VyY2VzL3JlcG9z
+aXRvcnkvbGVnYWwwBwYFZ4EMAQEwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUF
+BwMCMB8GA1UdIwQYMBaAFN7PXFC3rgIfFReqFugNtSidalrzMFcGCCsGAQUFBwEB
+BEswSTAfBggrBgEFBQcwAYYTaHR0cDovL2dtLnN5bWNkLmNvbTAmBggrBgEFBQcw
+AoYaaHR0cDovL2dtLnN5bWNiLmNvbS9nbS5jcnQwggF8BgorBgEEAdZ5AgQCBIIB
+bASCAWgBZgB1AN3rHSt6DU+mIIuBrYFocH4ujp0B1VyIjT0RxM227L7MAAABW8/Y
+RIwAAAQDAEYwRAIgWDLmmEUz8FyqMxfyweXN18EAYitvP3XPnU3XkJzRSrQCIB5y
+KErRbSiDkj43iFWQVodPA70HtcgdIzk4X3KA7thOAHYApLkJkLQYWBSHuxOizGdw
+Cjw1mAT5G9+443fNDsgN3BAAAAFbz9hEtwAABAMARzBFAiAjTCcAEJDj9M/xY7a/
+pysTrl0MrE6rMzpotNZ5kik1PgIhAMTAYXIUeA7LqKhYlvOvW/cH+uB+8329J8cy
+xMF8dmEJAHUA7ku9t3XOYLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo/csAAAFbz9hE
+3gAABAMARjBEAiA7UGcNzFIEVvXeJRuWPfhA8t0JOjl//7ZuLYgdnt6/jAIgIHyH
+QHLo2q5o99msj2s8o1BaTmxxnSF4TZPm8iZGLywwDQYJKoZIhvcNAQELBQADggEB
+AGBUtaCjWXpAPSc7ypv6f+IJGYfGHR7NLBLLjTytKHcIx5Hb0YT14TFWnXacaSHk
+XL/vY3v3CrdGqn6UZb4UEdyB54juG6J7DLQF/l8oeG0GzPQLlSOt0ZU4Cq9DayO0
+OFS6jD7K7FqalSiBzvFnDFmWqLXZQaO/dFPHvZVIdhfO6Vl/3yH+nkphrc8AiHqV
+0LkFaoki3RUJMqPvb1pyZ41MzMVsS/LMPoxS0JUl+YKAhL5H1JS1OPMY1B++k2hs
+BoScopXAC1xsOkpQWg+U2+mMnAebcCeFWtKrjVUIA+lzaAr6jbBOK9dLSschRXBe
+R9xGJ3I9J4t0pKD5lFr9+fQ=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEbjCCA1agAwIBAgIQboqQ68/wRIpyDQgF0IKlRDANBgkqhkiG9w0BAQsFADBY
+MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
+R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xMzEw
+MzEwMDAwMDBaFw0yMzEwMzAyMzU5NTlaMEcxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
+Ew1HZW9UcnVzdCBJbmMuMSAwHgYDVQQDExdHZW9UcnVzdCBFViBTU0wgQ0EgLSBH
+NDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANm0BfI4Zw8J53z1Yyrl
+uV6oEa51cdlMhGetiV38KD0qsKXV1OYwCoTU5BjLhTfFRnHrHHtp22VpjDAFPgfh
+bzzBC2HmOET8vIwvTnVX9ZaZfD6HHw+QS3DDPzlFOzpry7t7QFTRi0uhctIE6eBy
+GpMRei/xq52cmFiuLOp3Xy8uh6+4a+Pi4j/WPeCWRN8RVWNSL/QmeMQPIE0KwGhw
+FYY47rd2iKsYj081HtSMydt+PUTUNozBN7VZW4f56fHUxSi9HdzMlnLReqGnILW4
+r/hupWB7K40f7vQr1mnNr8qAWCnoTAAgikkKbo6MqNEAEoS2xeKVosA7pGvwgtCW
+XSUCAwEAAaOCAUMwggE/MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQD
+AgEGMC8GCCsGAQUFBwEBBCMwITAfBggrBgEFBQcwAYYTaHR0cDovL2cyLnN5bWNi
+LmNvbTBHBgNVHSAEQDA+MDwGBFUdIAAwNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93
+d3cuZ2VvdHJ1c3QuY29tL3Jlc291cmNlcy9jcHMwNAYDVR0fBC0wKzApoCegJYYj
+aHR0cDovL2cxLnN5bWNiLmNvbS9HZW9UcnVzdFBDQS5jcmwwKQYDVR0RBCIwIKQe
+MBwxGjAYBgNVBAMTEVN5bWFudGVjUEtJLTEtNTM4MB0GA1UdDgQWBBTez1xQt64C
+HxUXqhboDbUonWpa8zAfBgNVHSMEGDAWgBQs1VBBlxWL8I82YVtK+2vZmckzkjAN
+BgkqhkiG9w0BAQsFAAOCAQEAtI69B7mahew7Z70HYGHmhNHU7+sbuguCS5VktmZT
+I723hN3ke40J2s+y9fHDv4eEvk6mqMLnEjkoNOCkVkRADJ+IoxXT6NNe4xwEYPtp
+Nk9qfgwqKMHzqlgObM4dB8NKwJyNw3SxroLwGuH5Tim9Rt63Hfl929kPhMuSRcwc
+sxj2oM9xbwwum9Its5mTg0SsFaqbLmfsT4hpBVZ7i7JDqTpsHBMzJRv9qMhXAvsc
+4NG9O1ZEZcNj9Rvv7DDZ424uE+k5CCoMcvOazPYnKYTT70zHhBFlH8bjgQPbh8x4
+97Wdlj5qf7wRhXp15kF9Dc/55YVpJY/HjQct+GkPy0FTAA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/thawteprimaryrootcag2-chain.pem	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,51 @@
+-----BEGIN CERTIFICATE-----
+MIIFNjCCBN2gAwIBAgIQWCw1fnWLWedosJcJlxQbhDAKBggqhkjOPQQDAjBDMQsw
+CQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3RlLCBJbmMuMR0wGwYDVQQDExR0aGF3
+dGUgRUNDIEVWIFNTTCBDQTAeFw0xNzA1MTEwMDAwMDBaFw0xOTA1MDgyMzU5NTla
+MIHsMRMwEQYLKwYBBAGCNzwCAQMTAlVTMRkwFwYLKwYBBAGCNzwCAQIMCERlbGF3
+YXJlMRUwEwYDVQQKDAxUaGF3dGUsIEluYy4xCzAJBgNVBAYTAlVTMRMwEQYDVQQI
+DApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MR0wGwYDVQQPExRQ
+cml2YXRlIE9yZ2FuaXphdGlvbjEQMA4GA1UEBRMHMzg5ODI2MTEXMBUGA1UECwwO
+Um9vdCA4IC0gVkFMSUQxHzAdBgNVBAMMFnZhbGlkLXJvb3Q4LnRoYXd0ZS5jb20w
+WTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATVxsOfZ4/2K7l7FYl6ejjp5aNuX1J9
+gqfb8WdGQdmKW8TVlhzM9p3BQ61hcISHVW01ZzR2PgYQ5aALzTaZ/Vt9o4IDBzCC
+AwMwCQYDVR0TBAIwADB8BgNVHSAEdTBzMGgGC2CGSAGG+EUBBzABMFkwJgYIKwYB
+BQUHAgEWGmh0dHBzOi8vd3d3LnRoYXd0ZS5jb20vY3BzMC8GCCsGAQUFBwICMCMM
+IWh0dHBzOi8vd3d3LnRoYXd0ZS5jb20vcmVwb3NpdG9yeTAHBgVngQwBATArBgNV
+HR8EJDAiMCCgHqAchhpodHRwOi8vdHEuc3ltY2IuY29tL3RxLmNybDAdBgNVHSUE
+FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH/BAQDAgWgMFcGCCsGAQUF
+BwEBBEswSTAfBggrBgEFBQcwAYYTaHR0cDovL3RxLnN5bWNkLmNvbTAmBggrBgEF
+BQcwAoYaaHR0cDovL3RxLnN5bWNiLmNvbS90cS5jcnQwIQYDVR0RBBowGIIWdmFs
+aWQtcm9vdDgudGhhd3RlLmNvbTAfBgNVHSMEGDAWgBRbM681oBoZN0INV+a8vWtj
+IMKWATCCAX0GCisGAQQB1nkCBAIEggFtBIIBaQFnAHYA3esdK3oNT6Ygi4GtgWhw
+fi6OnQHVXIiNPRHEzbbsvswAAAFb+KihvQAABAMARzBFAiBghdkYlqbxNHmxETaN
+TKTcLlmD8amIlOWP7KnL9/WrBAIhANAssLlY1gvBLJ61ULFbdrVTMi1dqMXPBec8
+LfKdwER4AHYApLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BAAAAFb+Kih
+ywAABAMARzBFAiAW4sOV17H0V1n4pwnfeeKflHLmr1t4pB9KBCYGh0NaEgIhAMUI
+rLg1SuTCV2pXxRvWkzIAiifaJcPbxPhEp4DGz2d5AHUA7ku9t3XOYLrhQmkfq+Ge
+ZqMPfl+wctiDAMR7iXqo/csAAAFb+Kih/AAABAMARjBEAiA1u/TczjmZ5EDB4Jue
+TYEUyFHFDj3ytCItXk6vzcVPYgIgT6Yc1ugrgocOLqpDsRoQ7Jll/5PIi7QFg5N8
+//OhX+kwCgYIKoZIzj0EAwIDRwAwRAIgCK09KwyaiPsZZMtkjCec9zeVx7YRk8oh
+PvV2UnQf6sQCIAfYgjH7ZQeIKCMi4ctdTja1ng/lU8ibnkpU5NDZGaTN
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDgDCCAwagAwIBAgIQH/L8vGMmqr0oZpOZH0PsITAKBggqhkjOPQQDAzCBhDEL
+MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
+IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
+BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0xNjAxMDcwMDAw
+MDBaFw0yNjAxMDYyMzU5NTlaMEMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3
+dGUsIEluYy4xHTAbBgNVBAMTFHRoYXd0ZSBFQ0MgRVYgU1NMIENBMFkwEwYHKoZI
+zj0CAQYIKoZIzj0DAQcDQgAEmcXM1zsNS0E2+7pcpYHdwqumr+KIIt3jEJA6jBBm
+1SoBGgZESt6OKROJBt2sZJhUl4oU0q5kINTS/bG+eYTTlqOCAZgwggGUMA4GA1Ud
+DwEB/wQEAwIBBjAuBggrBgEFBQcBAQQiMCAwHgYIKwYBBQUHMAGGEmh0dHA6Ly90
+LnN5bWNkLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEAMHwGA1UdIAR1MHMwBwYFZ4EM
+AQEwaAYLYIZIAYb4RQEHMAEwWTAmBggrBgEFBQcCARYaaHR0cHM6Ly93d3cudGhh
+d3RlLmNvbS9jcHMwLwYIKwYBBQUHAgIwIxohaHR0cHM6Ly93d3cudGhhd3RlLmNv
+bS9yZXBvc2l0b3J5MDQGA1UdHwQtMCswKaAnoCWGI2h0dHA6Ly90LnN5bWNiLmNv
+bS9UaGF3dGVQQ0EtRzIuY3JsMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD
+AjArBgNVHREEJDAipCAwHjEcMBoGA1UEAxMTU1lNQy1FQ0MtQ0EtcDI1Ni0zMTAd
+BgNVHQ4EFgQUWzOvNaAaGTdCDVfmvL1rYyDClgEwHwYDVR0jBBgwFoAUmtgAMADn
+a3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaAAwZQIwMMf+C0NMBVt58Of4YvVO
+mVS0OYfzEiB4AOz8QF9pmEyaCAelGeOmq2pOLDEsQbKzAjEA2WTDVMhnnJI3NSnD
+itmCtBQnW6NEAohvLUsB4iVehDAJK3mNY8FbYafl4LjFzA4V
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/thawteprimaryrootcag3-chain.pem	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,67 @@
+-----BEGIN CERTIFICATE-----
+MIIG2TCCBcGgAwIBAgIQdS+C2M35zv3l1EWcCL2MfTANBgkqhkiG9w0BAQsFADBX
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3RlLCBJbmMuMTEwLwYDVQQDEyh0
+aGF3dGUgRXh0ZW5kZWQgVmFsaWRhdGlvbiBTSEEyNTYgU1NMIENBMB4XDTE3MDUw
+ODAwMDAwMFoXDTE5MDUwODIzNTk1OVowgewxEzARBgsrBgEEAYI3PAIBAxMCVVMx
+GTAXBgsrBgEEAYI3PAIBAgwIRGVsYXdhcmUxFTATBgNVBAoMDFRoYXd0ZSwgSW5j
+LjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1v
+dW50YWluIFZpZXcxHTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMRAwDgYD
+VQQFEwczODk4MjYxMRcwFQYDVQQLDA5Sb290IDkgLSBWQUxJRDEfMB0GA1UEAwwW
+dmFsaWQtcm9vdDkudGhhd3RlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAMGMwXWgvpsjK9b7JwFIs8Ch6EORhDfWRMk16KGdnO0jeIh1D4NRi1GL
+g0WcHiW06dFOF9UaT/Lg66mJLjHguftTHSoi9/cuMHcy0gbbWR+j+6RMxr7RwI6S
+eC8VesPWxM+5xW6bI+QBWq678ZK8JYr/cALXX+8ekDhY8vswIdzkUp7qHekkoja6
+4ki2JyJO4Q/uf/gWfohsGc88fEiMAQi3qhyZlHm7QzjeUoB0WgPC+CVB+vxSmZip
+6rkfjgPeKPlM1tqIAPjQWnQbdi2AvYCOUT0ZvVPPmsbINp7IMdAZmv9yF5qoW36A
+oFtBL3wLNe7w+lm5ZnZ15DHB2b2gDAECAwEAAaOCAwkwggMFMCEGA1UdEQQaMBiC
+FnZhbGlkLXJvb3Q5LnRoYXd0ZS5jb20wCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMC
+BaAwKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3RmLnN5bWNiLmNvbS90Zi5jcmww
+fAYDVR0gBHUwczBoBgtghkgBhvhFAQcwATBZMCYGCCsGAQUFBwIBFhpodHRwczov
+L3d3dy50aGF3dGUuY29tL2NwczAvBggrBgEFBQcCAjAjDCFodHRwczovL3d3dy50
+aGF3dGUuY29tL3JlcG9zaXRvcnkwBwYFZ4EMAQEwHQYDVR0lBBYwFAYIKwYBBQUH
+AwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFDskyDGgt1rQarjSygd0zB4k1MTcMFcG
+CCsGAQUFBwEBBEswSTAfBggrBgEFBQcwAYYTaHR0cDovL3RmLnN5bWNkLmNvbTAm
+BggrBgEFBQcwAoYaaHR0cDovL3RmLnN5bWNiLmNvbS90Zi5jcnQwggF/BgorBgEE
+AdZ5AgQCBIIBbwSCAWsBaQB2AN3rHSt6DU+mIIuBrYFocH4ujp0B1VyIjT0RxM22
+7L7MAAABW+pl8UMAAAQDAEcwRQIhAMdGpN45mO8sPe9cyqC2vxeA7kwbpPL4Ie1Z
+qP8A8YSmAiB+O2TOyUyg9TE31kCYyimqMS5tycpG8qTusAi6VClvAAB2AKS5CZC0
+GFgUh7sTosxncAo8NZgE+RvfuON3zQ7IDdwQAAABW+pl8i4AAAQDAEcwRQIhALoI
+UwV2CIRu4MVgjNYTnVdKI6ZeklPdb9IQzEYBLI5OAiAgR+WX0RgWiOmn0Khon7ck
+QEQ0H+j9VSFAuTqxFNWzXwB3AO5Lvbd1zmC64UJpH6vhnmajD35fsHLYgwDEe4l6
+qP3LAAABW+pl8ZMAAAQDAEgwRgIhAO/SefmFUyrtfsa1WjfN3WRG2pVSRCqaSxc7
+8pbqk7ynAiEA12r243Cr4IWKQdp6IoTqeULQZfZEGGnIUQxVG9yRzdcwDQYJKoZI
+hvcNAQELBQADggEBALcczMzw4qLLwR1hbM2qnzs+Ng4ByHPaDcwIZzGlxLCTOjZc
+AaVc8TA/MRUQBFxWto2fLmVIoFNS9EceKOx9VWcNK+9gYKkLl0K4amLTWWW+uShT
+DooJSdkP2fX2QB1jNsD1jH+44aG6Ll94HEgz88ziVeUH5T0yM3Fou1axDVI1ADKE
+Z0UsdhlTIDKcTndv3Wk6HZz2wxtvt3Z3Eenr/6TQuipGCBpfRccVRVhrpIsylVtp
+9UkD0UpX0VRgyrQOIXmtbL0WmPodfxB8crczcd6C0Yy2A77torg72fAyUtKmaBBZ
+ajj05MMBn8QmmnAZ0pXxvFTnD8MhOZ0nBccJnQM=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE0DCCA7igAwIBAgIQCkieiFN+iqZFTW4sSyrrIDANBgkqhkiG9w0BAQsFADCB
+rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
+Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
+MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV
+BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0xMzA0MDkwMDAwMDBa
+Fw0yMzA0MDgyMzU5NTlaMFcxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUs
+IEluYy4xMTAvBgNVBAMTKHRoYXd0ZSBFeHRlbmRlZCBWYWxpZGF0aW9uIFNIQTI1
+NiBTU0wgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDyxLx06CX2
+AGIo40zouN8Tn4sHN+9iSvFXCfaC6HXwCqknz5M77DaJpW4d1lTzuASXcrRpJczR
+Qg5b1Rx/omBusVIa25MvuwsNZFMWyxwJJJUpIrSKGACJ/vcfcsjoXC8aG6IYuO8Y
+XMu12zpO2w+u38R54x6qXKOk5axhmzeFj0h1G7nVaJbpJ3lwVyMau2yTkMdF1xfS
+Nyp2s82CqU/AA3vhPXp+W7iF8vUV+3CpvfVQZRad47ZrYW6hep7oDRz3Ko5pfkMw
+jnjO7mUeO5uHHkkc+DJGXShGeSpOJ10XWKg3/qgTqWkV3zYiiXW6ygFALu2d1wyq
+Mc4nrlfV0lH7AgMBAAGjggE+MIIBOjASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1Ud
+DwEB/wQEAwIBBjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9v
+Y3NwLnRoYXd0ZS5jb20wOwYDVR0gBDQwMjAwBgRVHSAAMCgwJgYIKwYBBQUHAgEW
+Gmh0dHBzOi8vd3d3LnRoYXd0ZS5jb20vY3BzMDcGA1UdHwQwMC4wLKAqoCiGJmh0
+dHA6Ly9jcmwudGhhd3RlLmNvbS9UaGF3dGVQQ0EtRzMuY3JsMCoGA1UdEQQjMCGk
+HzAdMRswGQYDVQQDExJWZXJpU2lnbk1QS0ktMi0zNzQwHQYDVR0OBBYEFDskyDGg
+t1rQarjSygd0zB4k1MTcMB8GA1UdIwQYMBaAFK1sqpRgnO3k//o+CnQrYwP3tlm/
+MA0GCSqGSIb3DQEBCwUAA4IBAQBomCaq1DPJunVw1J9JrdbBVNzuqlYfeKfwoaTu
+C/kSr9+muO7DyzUTalkq+MnpTC+8sbwrwgIw4cO+wvCBjJl3iVgAo8x/owJMU7Ju
+Nk/+34d2sz/sWmJQtgBFWPKHrHfm0CBQY8XksnAVGJAFe3uvK0a+a04fU/yEJ66D
+0o1HU6cOH2O1utsW2GoJJVV9jz1KwYP5s7mnBFrI8xEEkVMw2VKHyzkAnOxTwwIJ
+fqc2jnIhLyO7TMZHpaHuZ8QvXDpHOGHiwx43kp7IL2v679LDzSmNmPhSF+21Uzzf
+r8kbYq3fAu5dNPZBS8vDVa+xy9qcc9UCqC2nrPzh5QfQUeg1
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/verisignclass3g3ca-chain.pem	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,71 @@
+-----BEGIN CERTIFICATE-----
+MIIHIDCCBgigAwIBAgIQS0wGL8U0T0yVa8wAE4DBqjANBgkqhkiG9w0BAQsFADB+
+MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAd
+BgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVj
+IENsYXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MB4XDTE3MDUwMTAwMDAwMFoX
+DTIwMDQzMDIzNTk1OVowgaExCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9y
+bmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MR0wGwYDVQQKDBRTeW1hbnRlYyBD
+b3Jwb3JhdGlvbjEXMBUGA1UECwwOUm9vdCA0IC0gVkFMSUQxLTArBgNVBAMMJHZh
+bGlkLXJvb3Q0LndlYnNlY3VyaXR5LnN5bWFudGVjLmNvbTCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBALll3Mb7Fu0CAWPMWpSbr6RHdAl10hwmMaDr8ENk
+hAv3offJxsUmgS+vqCC+xQNiS5ClDeOLyf5QeltArLuaYNjUaXEy00EEuXFQO5kj
+HjTdsWeEkOxzmt2thAJx8eMbskvvtqnHHali2LFIOuMXuyS9mpkk7cG1yk85LvgZ
+Ov1xrpBCuB+ppir0MhhXRLmcZ9QMgVUzfjrmQoQWHE0Qu69Mci6mk7fuBboqaPe0
+v0s2KsA1tLSknn39HrXE3d5D1AOoLJP1RiHU+RFQIOJ0oiXPZSH0bdiWhO0xcyuo
+vXY+0vaQPO1Uwrj/VdpL7bs65dgdFqXpTdqvMURu5WoDumUCAwEAAaOCA3QwggNw
+MC8GA1UdEQQoMCaCJHZhbGlkLXJvb3Q0LndlYnNlY3VyaXR5LnN5bWFudGVjLmNv
+bTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcD
+AQYIKwYBBQUHAwIwYQYDVR0gBFowWDBWBgZngQwBAgIwTDAjBggrBgEFBQcCARYX
+aHR0cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGQwXaHR0cHM6Ly9k
+LnN5bWNiLmNvbS9ycGEwHwYDVR0jBBgwFoAUX2DPYZBV34RDFIpgKrL1evRDGO8w
+KwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3NzLnN5bWNiLmNvbS9zcy5jcmwwVwYI
+KwYBBQUHAQEESzBJMB8GCCsGAQUFBzABhhNodHRwOi8vc3Muc3ltY2QuY29tMCYG
+CCsGAQUFBzAChhpodHRwOi8vc3Muc3ltY2IuY29tL3NzLmNydDCCAfcGCisGAQQB
+1nkCBAIEggHnBIIB4wHhAHYA3esdK3oNT6Ygi4GtgWhwfi6OnQHVXIiNPRHEzbbs
+vswAAAFbxYEdRwAABAMARzBFAiEAurXvGE124ya7O5ZjYZckdJ7OU64A4fEAszhI
+UG3OqMACIGbAqoQLGMr9sMYBqS3cPxtD6EIK8BXzBaYHOe3pGhcXAHYApLkJkLQY
+WBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BAAAAFbxYEdagAABAMARzBFAiBY4mXZ
+w8zBWrVURFxwmQGf046/oaidgJQ3Wf9+AlJ+7AIhANWkGBd6nlwE8V/dzQvkjnTz
+2edJKGy2NqgyxinZMAbWAHcA7ku9t3XOYLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo
+/csAAAFbxYEfSwAABAMASDBGAiEAltQbZJ9+Gt1M+YV4YBJVR63aPhk1dFIyKdQL
+yjYdBh0CIQDUGxHmR2KVW8N6wHnAGFlUhcwlBJFoiTqaSRP/1Yk0wAB2ALx44d/F
+9jxoRkkzTaEPoV8JeWkgCcCBtPP2kX8+2bilAAABW8WBHkcAAAQDAEcwRQIgFqqM
+DTAo3RKfwU9gwkD53Zr1HXPJuoI/MhwHQgc8nvkCIQDbwhd3gOdRJhtMyGqxGqr7
+sbD43D/fkyH3BNWOhff04TANBgkqhkiG9w0BAQsFAAOCAQEAQkWtNshWRmFY1t1Y
+pH3Ztxd891f4VYLtBzrpapejHIe5ijlZES2d+x4+aCilVUo6sDs0RUgy5Jk9eU5I
+6vOh+NkZ1THFqod+w5FKPgDaDuHHryvRaiGdcpn9x5R7zkpgKQ1WqgvcbzAmZkAr
+YxpvXfTLhcgbQhPedxbS5YyU1y1QCi8MUrxTwejcFDhAQXGOW3cTMpGsXtRvQVE0
+iI93jCPb3Djpqus9SS7ggzkfJe3bQpl72bv2agn5peBJa0sC1PqRXIT/cWUQe9ez
+rKSDoqdPNjTmIcJjql50T+WceNF5nxNPCq+jhMOcmKXJUF3H6yYc8pjLuDDBAFFz
+uxAuxw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFFTCCA/2gAwIBAgIQKC4nkXkzkuQo8iGnTsk3rjANBgkqhkiG9w0BAQsFADCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMTk5OSBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
+ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5IC0gRzMwHhcNMTMxMDMxMDAwMDAwWhcNMjMxMDMwMjM1OTU5WjB+MQsw
+CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV
+BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVjIENs
+YXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAstgFyhx0LbUXVjnFSlIJluhL2AzxaJ+aQihiw6UwU35VEYJb
+A3oNL+F5BMm0lncZgQGUWfm893qZJ4Itt4PdWid/sgN6nFMl6UgfRk/InSn4vnlW
+9vf92Tpo2otLgjNBEsPIPMzWlnqEIRoiBAMnF4scaGGTDw5RgDMdtLXO637QYqzu
+s3sBdO9pNevK1T2p7peYyo2qRA4lmUoVlqTObQJUHypqJuIGOmNIrLRM0XWTUP8T
+L9ba4cYY9Z/JJV3zADreJk20KQnNDz0jbxZKgRb78oMQw7jW2FUyPfG9D72MUpVK
+Fpd6UiFjdS8W+cRmvvW1Cdj/JwDNRHxvSz+w9wIDAQABo4IBQDCCATwwHQYDVR0O
+BBYEFF9gz2GQVd+EQxSKYCqy9Xr0QxjvMBIGA1UdEwEB/wQIMAYBAf8CAQAwawYD
+VR0gBGQwYjBgBgpghkgBhvhFAQc2MFIwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cu
+c3ltYXV0aC5jb20vY3BzMCgGCCsGAQUFBwICMBwaGmh0dHA6Ly93d3cuc3ltYXV0
+aC5jb20vcnBhMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9zLnN5bWNiLmNvbS9w
+Y2EzLWczLmNybDAOBgNVHQ8BAf8EBAMCAQYwKQYDVR0RBCIwIKQeMBwxGjAYBgNV
+BAMTEVN5bWFudGVjUEtJLTEtNTM0MC4GCCsGAQUFBwEBBCIwIDAeBggrBgEFBQcw
+AYYSaHR0cDovL3Muc3ltY2QuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQBbF1K+1lZ7
+9Pc0CUuWysf2IdBpgO/nmhnoJOJ/2S9h3RPrWmXk4WqQy04q6YoW51KN9kMbRwUN
+gKOomv4p07wdKNWlStRxPA91xQtzPwBIZXkNq2oeJQzAAt5mrL1LBmuaV4oqgX5n
+m7pSYHPEFfe7wVDJCKW6V0o6GxBzHOF7tpQDS65RsIJAOloknO4NWF2uuil6yjOe
+soHCL47BJ89A8AShP/U3wsr8rFNtqVNpT+F2ZAwlgak3A/I5czTSwXx4GByoaxbn
+5+CdKa/Y5Gk5eZVpuXtcXQGc1PfzSEUTZJXXCm5y2kMiJG8+WnDcwJLgLeVX+OQr
+J+71/xuzAYN6
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/verisignclass3g4ca-chain.pem	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,56 @@
+-----BEGIN CERTIFICATE-----
+MIIFxDCCBWmgAwIBAgIQZMjAlhAdRd/Im/aYbmgO8DAKBggqhkjOPQQDAjCBizEL
+MAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYD
+VQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTwwOgYDVQQDEzNTeW1hbnRlYyBD
+bGFzcyAzIEVDQyAyNTYgYml0IEV4dGVuZGVkIFZhbGlkYXRpb24gQ0EwHhcNMTcw
+NTAxMDAwMDAwWhcNMTkwNTAxMjM1OTU5WjCCAS0xEzARBgsrBgEEAYI3PAIBAxMC
+VVMxGTAXBgsrBgEEAYI3PAIBAgwIRGVsYXdhcmUxHTAbBgNVBA8TFFByaXZhdGUg
+T3JnYW5pemF0aW9uMRAwDgYDVQQFEwcyMTU4MTEzMQswCQYDVQQGEwJVUzEOMAwG
+A1UEEQwFOTQwNDMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50
+YWluIFZpZXcxGTAXBgNVBAkMEDM1MCBFbGxpcyBTdHJlZXQxHTAbBgNVBAoMFFN5
+bWFudGVjIENvcnBvcmF0aW9uMRcwFQYDVQQLDA5Sb290IDMgLSBWQUxJRDEtMCsG
+A1UEAwwkdmFsaWQtcm9vdDMud2Vic2VjdXJpdHkuc3ltYW50ZWMuY29tMFkwEwYH
+KoZIzj0CAQYIKoZIzj0DAQcDQgAERAIBieoafYh/yFaVSP+vyzoxzZ/zKy4tx7o0
+R1gugD5SArEcRar0oodVQ99eJkT63Xn910gGKx4cP+CM+jZfJqOCAwgwggMEMC8G
+A1UdEQQoMCaCJHZhbGlkLXJvb3QzLndlYnNlY3VyaXR5LnN5bWFudGVjLmNvbTAJ
+BgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYI
+KwYBBQUHAwIwbwYDVR0gBGgwZjBbBgtghkgBhvhFAQcXBjBMMCMGCCsGAQUFBwIB
+FhdodHRwczovL2Quc3ltY2IuY29tL2NwczAlBggrBgEFBQcCAjAZDBdodHRwczov
+L2Quc3ltY2IuY29tL3JwYTAHBgVngQwBATAfBgNVHSMEGDAWgBRIE2UXlOyeFioq
+dFzoUy20+4PrjjArBgNVHR8EJDAiMCCgHqAchhpodHRwOi8vc24uc3ltY2IuY29t
+L3NuLmNybDBXBggrBgEFBQcBAQRLMEkwHwYIKwYBBQUHMAGGE2h0dHA6Ly9zbi5z
+eW1jZC5jb20wJgYIKwYBBQUHMAKGGmh0dHA6Ly9zbi5zeW1jYi5jb20vc24uY3J0
+MIIBfQYKKwYBBAHWeQIEAgSCAW0EggFpAWcAdgDd6x0reg1PpiCLga2BaHB+Lo6d
+AdVciI09EcTNtuy+zAAAAVvFgWTjAAAEAwBHMEUCIF7mhfWFvkMauS0jlQz7t/fO
+nDXX+VeHwI7YIHU3Wvg5AiEA97a9fZzAjALA1VTaXOv/WSDyEzA/X9YPesI4Aq+4
+da8AdQCkuQmQtBhYFIe7E6LMZ3AKPDWYBPkb37jjd80OyA3cEAAAAVvFgWUIAAAE
+AwBGMEQCIAM5H16X3/vPGds9N8b7Q3+H8cFe7woTT9ddKPfUyLZJAiAF8FivrVBd
+wJ5rjxxJOwPSrlkRV2vhbKfSbJH0lDq1XQB2AO5Lvbd1zmC64UJpH6vhnmajD35f
+sHLYgwDEe4l6qP3LAAABW8WBZRoAAAQDAEcwRQIgRpro/bdvZbK5eW5FTbTqGUTi
+W5RSpjcFW2Gd27Ql6bACIQCgow7825ZtJ31KRYJ2fiTlqvc6jyZ+u67hFT4qs/1Q
+oDAKBggqhkjOPQQDAgNJADBGAiEAl565i7SXROFdn7y+hM0AgChi/75FGmaokJaj
+h9jhmiMCIQCqIZZ4SuOgBbkt7bMOSI1sOtFqhlsGVXwZKjzSaIFSYA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID4zCCA2qgAwIBAgIQTZVdIK+FxJ9pJfurfGZfiTAKBggqhkjOPQQDAzCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
+ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
+U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
+aXR5IC0gRzQwHhcNMTIxMjIwMDAwMDAwWhcNMjIxMjE5MjM1OTU5WjCBizELMAkG
+A1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQL
+ExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTwwOgYDVQQDEzNTeW1hbnRlYyBDbGFz
+cyAzIEVDQyAyNTYgYml0IEV4dGVuZGVkIFZhbGlkYXRpb24gQ0EwWTATBgcqhkjO
+PQIBBggqhkjOPQMBBwNCAATdBD2y8pCTl8bpu7yR21Hwo4bt+8bThZMyBUngBINh
+llH/VyGuC9oO5wShf9sqHL3KmDXFcXNAzehqq1SEQybio4IBbTCCAWkwEgYDVR0T
+AQH/BAgwBgEB/wIBADA3BgNVHR8EMDAuMCygKqAohiZodHRwOi8vY3JsLndzLnN5
+bWFudGVjLmNvbS9wY2EzLWc0LmNybDAOBgNVHQ8BAf8EBAMCAQYwNwYIKwYBBQUH
+AQEEKzApMCcGCCsGAQUFBzABhhtodHRwOi8vb2NzcC53cy5zeW1hbnRlYy5jb20w
+ZQYDVR0gBF4wXDBaBgRVHSAAMFIwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cuc3lt
+YXV0aC5jb20vY3BzMCgGCCsGAQUFBwICMBwaGmh0dHA6Ly93d3cuc3ltYXV0aC5j
+b20vcnBhMCoGA1UdEQQjMCGkHzAdMRswGQYDVQQDExJTWU1DLUVDQy1DQS1wMjU2
+LTMwHQYDVR0OBBYEFEgTZReU7J4WKip0XOhTLbT7g+uOMB8GA1UdIwQYMBaAFLMW
+kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2cAMGQCMFyb7oOjdk2MLQVM
+gjS6s77Oj+jDNIH7QHfoNGxbFys7rdWno9LzZsJPsrDIdpiPvwIwT8IvzpLFqb3O
+fU7UGztmJOpOzYKvVEqI7+O/OpNjVCF9EjDSMs2ryYGwpxFDe0Vm
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/verisignclass3g5ca-chain.pem	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,71 @@
+-----BEGIN CERTIFICATE-----
+MIIHOTCCBiGgAwIBAgIQCBmps2cB8a6CGTXUyg9ZzjANBgkqhkiG9w0BAQsFADB3
+MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAd
+BgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVj
+IENsYXNzIDMgRVYgU1NMIENBIC0gRzMwHhcNMTcwNDI4MDAwMDAwWhcNMTkwNDI4
+MjM1OTU5WjCCAS0xEzARBgsrBgEEAYI3PAIBAxMCVVMxGTAXBgsrBgEEAYI3PAIB
+AgwIRGVsYXdhcmUxHTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMRAwDgYD
+VQQFEwcyMTU4MTEzMQswCQYDVQQGEwJVUzEOMAwGA1UEEQwFOTQwNDMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxGTAXBgNVBAkM
+EDM1MCBFbGxpcyBTdHJlZXQxHTAbBgNVBAoMFFN5bWFudGVjIENvcnBvcmF0aW9u
+MRcwFQYDVQQLDA5Sb290IDEgLSBWQUxJRDEtMCsGA1UEAwwkdmFsaWQtcm9vdDEu
+d2Vic2VjdXJpdHkuc3ltYW50ZWMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEApbJSThUcOfpFWl6PyOeFqED399DWeBcBoAMdXkPfatQ+uJPeRryZ
+4UfC1iuQWQM6agDrMhDmnc+IiBiltbF0PVEHkQXxfR6x6TFF1doWDxVfOgl2y9Pz
+ilRgdBdGmnQsWbYqaKlCBS3aZ2jCZMUAKmQce8WNLEf8qDjQcHRT1vI2k5AW3+L0
+FccXRSFXx2wZUAh9qxa2gKxEjnUF+qy42WEgh/mXD4smbhtEf+pCUXPYuODlxOaA
+ZCy9SeBrKb5Nl3C9UzBhchONPQLUgzlk8d0M17pFLYKLfa8MvBcKRVyTk7/XXdTj
+OmW5OO7f4epmXNlN5fHnGZlA5FE/4candwIDAQABo4IDBzCCAwMwLwYDVR0RBCgw
+JoIkdmFsaWQtcm9vdDEud2Vic2VjdXJpdHkuc3ltYW50ZWMuY29tMAkGA1UdEwQC
+MAAwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD
+AjBvBgNVHSAEaDBmMFsGC2CGSAGG+EUBBxcGMEwwIwYIKwYBBQUHAgEWF2h0dHBz
+Oi8vZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkMF2h0dHBzOi8vZC5zeW1j
+Yi5jb20vcnBhMAcGBWeBDAEBMB8GA1UdIwQYMBaAFAFZq+fdOgtZpmRj1s8gB1fV
+kedqMCsGA1UdHwQkMCIwIKAeoByGGmh0dHA6Ly9zci5zeW1jYi5jb20vc3IuY3Js
+MFcGCCsGAQUFBwEBBEswSTAfBggrBgEFBQcwAYYTaHR0cDovL3NyLnN5bWNkLmNv
+bTAmBggrBgEFBQcwAoYaaHR0cDovL3NyLnN5bWNiLmNvbS9zci5jcnQwggF8Bgor
+BgEEAdZ5AgQCBIIBbASCAWgBZgB2AN3rHSt6DU+mIIuBrYFocH4ujp0B1VyIjT0R
+xM227L7MAAABW7a3ZxAAAAQDAEcwRQIgeoFObGH+PGc5LRj+f1yzoG3TGHrPQA/z
+nRsNG1MXNXACIQCVd5wZWbP1+hp4kaE1sYgUnSiRFN3kfMf5uUQysYvkSwB1AKS5
+CZC0GFgUh7sTosxncAo8NZgE+RvfuON3zQ7IDdwQAAABW7a3Z1AAAAQDAEYwRAIg
+MRBDGE2dq1xzPDJ9tKzDTwKP5rC4DrjHZbmtYiZZh3sCIDCMlTV8bpEeeq2evzna
+Xq/930hOaclzf4pXEwUHmW/HAHUA7ku9t3XOYLrhQmkfq+GeZqMPfl+wctiDAMR7
+iXqo/csAAAFbtrdpDwAABAMARjBEAiBQpNfvWoFAkIraeupW8zM804c8XvlLIbX4
+6kCYS04HbQIgOmEunrjYREwtG5Rdk1Vd01Fp7lR42AgJ/LQFn7DmXigwDQYJKoZI
+hvcNAQELBQADggEBAKlkTQil8u0sfwLdpfFmtUvFexhx4C8gTsZwZeN/40n+S4xR
+b6U3rEHIKlFAelipc5EzeYIsJKHGP5qHSs7m7jPKBrf0KsoryvZrSfhMfXDHvrJF
+RpF0Rs1VODoK2l/1CosUZ9rTqEjQcv7kUvFvgZpNIoV++k/Y2TsoBsLliRdXKpL8
+SQADr18BlEt1Y8A7E77lJFMmgD4bFN1jJWkEJoAGkrYqsF6i8fAHiESjSLy85Bcs
+DGXgP4z8Nifje78wGVygI/4NYgYiFClsk8epBHXOveEV5HRO42XzPG0Zn0BMWCSI
+0P08Lq3dwSQSQarkID6iRuhgt4GZvm3zh6MdfrA=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFKzCCBBOgAwIBAgIQfuFKb2/v8tN/P61lTTratDANBgkqhkiG9w0BAQsFADCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
+ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5IC0gRzUwHhcNMTMxMDMxMDAwMDAwWhcNMjMxMDMwMjM1OTU5WjB3MQsw
+CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV
+BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIENs
+YXNzIDMgRVYgU1NMIENBIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQDYoWV0I+grZOIy1zM3PY71NBZI3U9/hxz4RCMTjvsR2ERaGHGOYBYmkpv9
+FwvhcXBC/r/6HMCqo6e1cej/GIP23xAKE2LIPZyn3i4/DNkd5y77Ks7Imn+Hv9hM
+BBUyydHMlXGgTihPhNk1++OGb5RT5nKKY2cuvmn2926OnGAE6yn6xEdC0niY4+wL
+pZLct5q9gGQrOHw4CVtm9i2VeoayNC6FnpAOX7ddpFFyRnATv2fytqdNFB5suVPu
+IxpOjUhVQ0GxiXVqQCjFfd3SbtICGS97JJRL6/EaqZvjI5rq+jOrCiy39GAI3Z8c
+zd0tAWaAr7MvKR0juIrhoXAHDDQPAgMBAAGjggFdMIIBWTAvBggrBgEFBQcBAQQj
+MCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9zMi5zeW1jYi5jb20wEgYDVR0TAQH/BAgw
+BgEB/wIBADBlBgNVHSAEXjBcMFoGBFUdIAAwUjAmBggrBgEFBQcCARYaaHR0cDov
+L3d3dy5zeW1hdXRoLmNvbS9jcHMwKAYIKwYBBQUHAgIwHBoaaHR0cDovL3d3dy5z
+eW1hdXRoLmNvbS9ycGEwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL3MxLnN5bWNi
+LmNvbS9wY2EzLWc1LmNybDAOBgNVHQ8BAf8EBAMCAQYwKQYDVR0RBCIwIKQeMBwx
+GjAYBgNVBAMTEVN5bWFudGVjUEtJLTEtNTMzMB0GA1UdDgQWBBQBWavn3ToLWaZk
+Y9bPIAdX1ZHnajAfBgNVHSMEGDAWgBR/02Wnwt3su/AwCfNDOfoCrzMxMzANBgkq
+hkiG9w0BAQsFAAOCAQEAQgFVe9AWGl1Y6LubqE3X89frE5SG1n8hC0e8V5uSXU8F
+nzikEHzPg74GQ0aNCLxq1xCm+quvL2GoY/Jl339MiBKIT7Np2f8nwAqXkY9W+4nE
+qLuSLRtzsMarNvSWbCAI7woeZiRFT2cAQMgHVHQzO6atuyOfZu2iRHA0+w7qAf3P
+eHTfp61Vt19N9tY/4IbOJMdCqRMURDVLtt/JYKwMf9mTIUvunORJApjTYHtcvNUw
+LwfORELEC5n+5p/8sHiGUW3RLJ3GlvuFgrsEL/digO9i2n/2DqyQuFa9eT/ygG6j
+2bkPXToHHZGThkspTOHcteHgM52zyzaRS/6htO7w+Q==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/verisignclass3g5ca-codesigning-chain.pem	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,170 @@
+Signer #1:
+
+Signature:
+
+Certificate owner: CN="Oracle America, Inc.", OU=Software Engineering, O="Oracle America, Inc.", L=Redwood City, ST=California, C=US
+
+-----BEGIN CERTIFICATE-----
+MIIE4DCCA8igAwIBAgIQMJBKmqOhTgIuAsUw5l33hTANBgkqhkiG9w0BAQsFADB/
+MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAd
+BgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMDAuBgNVBAMTJ1N5bWFudGVj
+IENsYXNzIDMgU0hBMjU2IENvZGUgU2lnbmluZyBDQTAeFw0xNzEyMjEwMDAwMDBa
+Fw0yMDAyMDEyMzU5NTlaMIGWMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZv
+cm5pYTEVMBMGA1UEBwwMUmVkd29vZCBDaXR5MR0wGwYDVQQKDBRPcmFjbGUgQW1l
+cmljYSwgSW5jLjEdMBsGA1UECwwUU29mdHdhcmUgRW5naW5lZXJpbmcxHTAbBgNV
+BAMMFE9yYWNsZSBBbWVyaWNhLCBJbmMuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAxrxa5UAMwofgt7m++glHqMSYP3nlTDxRnWu14FtVtQiaacn20u3w
+T5d+5mkoezHXNU3g1sgwkr/Ovf4YVSwz9wtqZWTbK3/r6Ctb9eRxb2th64N4AuDI
+R9C/LU2J7ruXsu7FpEhXMIdNLxR4ihfkBA5ndpNqmXmIG9HvFQkd8APsSFRpMQh7
+Com1YlbkySgMyjBwYfAw74bqNrClBmLNAVfq7JSqjJ8EJtlq6lEJWHXEYysZfRIf
+StxZ0XtKD3wtADeowBHs1DRnXrkgD/q3kWX5LF75nfHtRWEtHxWKk7/R452pweIv
+ZZYXsvSrRA3vC+jbbhtZiRYRk2QCXsUxrQIDAQABo4IBPjCCATowCQYDVR0TBAIw
+ADAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwYQYDVR0gBFow
+WDBWBgZngQwBBAEwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9j
+cHMwJQYIKwYBBQUHAgIwGQwXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwHwYDVR0j
+BBgwFoAUljtT8Hkzl699g+8uK8zKt4YecmYwKwYDVR0fBCQwIjAgoB6gHIYaaHR0
+cDovL3N2LnN5bWNiLmNvbS9zdi5jcmwwVwYIKwYBBQUHAQEESzBJMB8GCCsGAQUF
+BzABhhNodHRwOi8vc3Yuc3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8vc3Yu
+c3ltY2IuY29tL3N2LmNydDANBgkqhkiG9w0BAQsFAAOCAQEAQcZqmjMAuBgnaQZ5
+JsP3+Rzaa5FrukVVk2brqrJFnqt/79khvfCf95pBafHHCqdndB0T4xuzBL4fk2ZW
+Z48ACgq3U6oNP9Ci4pcDuTqU/vZHwh7ICkSWLhGzpErfwby7zZV9ZeIK0AB5vJCK
+qgL4DetXgqGOm29gAjTKcXa67jP9lX6tAdh9TcQDbBbGny3NHGAiCderJxTOYhid
+9+4v+p+lt2OPxlxmZMPnT/9U2Yp3OzH//OYgQysnwy/UkSVCa2DuMPbL4LTxwV65
+nwEU3jT0Iq7io+oEcjW5FTZDgVC2A7lDVVrNlbAW/f5QoKcmyw8hDLo7TH6tDv8n
+hhKFDg==
+-----END CERTIFICATE-----
+
+Certificate owner: CN=Symantec Class 3 SHA256 Code Signing CA, OU=Symantec Trust Network, O=Symantec Corporation, C=US
+
+-----BEGIN CERTIFICATE-----
+MIIFWTCCBEGgAwIBAgIQPXjX+XZJYLJhffTwHsqGKjANBgkqhkiG9w0BAQsFADCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
+ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5IC0gRzUwHhcNMTMxMjEwMDAwMDAwWhcNMjMxMjA5MjM1OTU5WjB/MQsw
+CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV
+BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMDAuBgNVBAMTJ1N5bWFudGVjIENs
+YXNzIDMgU0hBMjU2IENvZGUgU2lnbmluZyBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAJeDHgAWryyx0gjE12iTUWAecfbiR7TbWE0jYmq0v1obUfej
+DRh3aLvYNqsvIVDanvPnXydOC8KXyAlwk6naXA1OpA2RoLTsFM6RclQuzqPbROlS
+Gz9BPMpK5KrA6DmrU8wh0MzPf5vmwsxYaoIV7j02zxzFlwckjvF7vjEtPW7ctZlC
+n0thlV8ccO4XfduL5WGJeMdoG68ReBqYrsRVR1PZszLWoQ5GQMWXkorRU6eZW4U1
+V9Pqk2JhIArHMHckEU1ig7a6e2iCMe5lyt/51Y2yNdyMK29qclxghJzyDJRewFZS
+AEjM0/ilfd4v1xPkOKiE1Ua4E4bCG53qWjjdm9sCAwEAAaOCAYMwggF/MC8GCCsG
+AQUFBwEBBCMwITAfBggrBgEFBQcwAYYTaHR0cDovL3MyLnN5bWNiLmNvbTASBgNV
+HRMBAf8ECDAGAQH/AgEAMGwGA1UdIARlMGMwYQYLYIZIAYb4RQEHFwMwUjAmBggr
+BgEFBQcCARYaaHR0cDovL3d3dy5zeW1hdXRoLmNvbS9jcHMwKAYIKwYBBQUHAgIw
+HBoaaHR0cDovL3d3dy5zeW1hdXRoLmNvbS9ycGEwMAYDVR0fBCkwJzAloCOgIYYf
+aHR0cDovL3MxLnN5bWNiLmNvbS9wY2EzLWc1LmNybDAdBgNVHSUEFjAUBggrBgEF
+BQcDAgYIKwYBBQUHAwMwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRow
+GAYDVQQDExFTeW1hbnRlY1BLSS0xLTU2NzAdBgNVHQ4EFgQUljtT8Hkzl699g+8u
+K8zKt4YecmYwHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnzQzn6Aq8zMTMwDQYJKoZI
+hvcNAQELBQADggEBABOFGh5pqTf3oL2kr34dYVP+nYxeDKZ1HngXI9397BoDVTn7
+cZXHZVqnjjDSRFph23Bv2iEFwi5zuknx0ZP+XcnNXgPgiZ4/dB7X9ziLqdbPuzUv
+M1ioklbRyE07guZ5hBb8KLCxR/Mdoj7uh9mmf6RWpT+thC4p3ny8qKqjPQQB6rqT
+og5QIikXTIfkOhFf1qQliZsFay+0yQFMJ3sLrBkFIqBgFT/ayftNTI/7cmd3/SeU
+x7o1DohJ/o39KK9KEr0Ns5cF3kQMFfo2KwPcwVAB8aERXRTl4r0nS1S+K4ReD6bD
+dAUK75fDiSKxH3fzvc1D1PFMqT+1i4SvZPLQFCE=
+-----END CERTIFICATE-----
+
+Certificate owner: CN=VeriSign Class 3 Public Primary Certification Authority - G5, OU="(c) 2006 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US
+
+-----BEGIN CERTIFICATE-----
+MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
+ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
+ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
+U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
+aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
+nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
+t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
+SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
+BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
+rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
+NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
+BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
+BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
+aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
+MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
+p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
+5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
+WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
+4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
+hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
+-----END CERTIFICATE-----
+
+Timestamp:
+
+Certificate owner: CN=Symantec SHA256 TimeStamping Signer - G2, OU=Symantec Trust Network, O=Symantec Corporation, C=US
+
+-----BEGIN CERTIFICATE-----
+MIIFSzCCBDOgAwIBAgIQVFjyqtdB1kS8hKl7oJZS5jANBgkqhkiG9w0BAQsFADB3
+MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAd
+BgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVj
+IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwHhcNMTcwMTAyMDAwMDAwWhcNMjgwNDAx
+MjM1OTU5WjCBgDELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBv
+cmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQD
+EyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIFNpZ25lciAtIEcyMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmfP82AQJA4b511ymk8BCfOp8Y89d
+AOKO88CQ348p9RjqlLeS5dewoHOB6OkKm0p8Af+dj6Q5pw7qRfQiDDpw7TlFi+TF
+G1zwRWhGJAVjdpsc/J5sKrFW5Yp/UnGu8jXVRiMGHM9ILR20zbjZdiOOHP8+v7sG
+XGkHpmUO+F6ufS7tTa4178nXAEL9KJUOn11yQgm8w9pE0u3MR4Tk/MotrFi+rveu
+2UQNCLfCd9YaQ3DRbgPeUpLEEAhx2boiVfIfvO2bnTviXh1Mg/+XD3sL51WDTtIN
+677X7K5uR7mf36XWUbwEVe3/J3BMye0qSxPhsblMD8kB7lVlX2kCeGbLPwIDAQAB
+o4IBxzCCAcMwDAYDVR0TAQH/BAIwADBmBgNVHSAEXzBdMFsGC2CGSAGG+EUBBxcD
+MEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUF
+BwICMBkaF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMEAGA1UdHwQ5MDcwNaAzoDGG
+L2h0dHA6Ly90cy1jcmwud3Muc3ltYW50ZWMuY29tL3NoYTI1Ni10c3MtY2EuY3Js
+MBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDB3BggrBgEF
+BQcBAQRrMGkwKgYIKwYBBQUHMAGGHmh0dHA6Ly90cy1vY3NwLndzLnN5bWFudGVj
+LmNvbTA7BggrBgEFBQcwAoYvaHR0cDovL3RzLWFpYS53cy5zeW1hbnRlYy5jb20v
+c2hhMjU2LXRzcy1jYS5jZXIwKAYDVR0RBCEwH6QdMBsxGTAXBgNVBAMTEFRpbWVT
+dGFtcC0yMDQ4LTUwHQYDVR0OBBYEFAm1wf6WcpcpQ5rJ4AK6rvj9L7r2MB8GA1Ud
+IwQYMBaAFK9j1sqjToVy4Ke8QfMpojh/gHViMA0GCSqGSIb3DQEBCwUAA4IBAQAX
+swqI6VxaXiBrOwoVsmzFqYoyh9Ox9BxTroW+P5v/17y3lIW0x1J+lOi97WGy1KeZ
+5MPJk8E1PQvoaApdVpi9sSI70UR617/wbVEyitUj3zgBN/biUyt6KxGPt01sejMD
+G3xrCZQXu+TbWNQhE2Xn7NElyix1mpx//Mm7KmirxH20z6PJbKfZxACciQp3kfRN
+ovsxO4Zu9uYfUAOGm7/LQqvmdptyWhEBisbvpW+V592uuuYiZfAYWRsRyc2At9iX
+Rx9CCPiscR+wRlOz1LLVo6tQdUgSF4Ktz+BBTzJ+zZUcv5GKCD2kp2cClt8kTKXQ
+QcCCYKOKFzJL07zPpLSM
+-----END CERTIFICATE-----
+
+Certificate owner: CN=Symantec SHA256 TimeStamping CA, OU=Symantec Trust Network, O=Symantec Corporation, C=US
+
+-----BEGIN CERTIFICATE-----
+MIIFODCCBCCgAwIBAgIQewWx1EloUUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCB
+vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W
+ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
+Fw0xNjAxMTIwMDAwMDBaFw0zMTAxMTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0w
+GwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMg
+VHJ1c3QgTmV0d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFt
+cGluZyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtZnVlVT52M
+cl0agaLrVfOwAa08cawyjwVrhponADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhi
+G37rpgfi3n9ebUA41JEG50F8eRzLy60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3t
+r4eOzo3HberSmLU6Hx45ncP0mqj0hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/K
+O9T1sptL4YiZGvXA6TMU1t/HgNuR7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO
+6AmRX7WEeTWKeKwZMo8jwTJBG1kOqT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO
+1DaXhnjFoTcCAwEAAaOCAXcwggFzMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8E
+CDAGAQH/AgEAMGYGA1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcC
+ARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6
+Ly9kLnN5bWNiLmNvbS9ycGEwLgYIKwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJo
+dHRwOi8vcy5zeW1jZC5jb20wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3lt
+Y2IuY29tL3VuaXZlcnNhbC1yb290LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAo
+BgNVHREEITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4E
+FgQUr2PWyqNOhXLgp7xB8ymiOH+AdWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLq
+BzJ2B9GXBxkwDQYJKoZIhvcNAQELBQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X
+6t3cT/OhyIGI96ePFeZAKa3mXfSi2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0c
+kUfJ4uiNA/vMkC/WCmxOM+zWtJPITJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dB
+kC/hHk1O3MoQeGxCbvC2xfhhXFL1TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUu
+qmaFBJm3+AZX4cYO9uiv2uybGB+queM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+
+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD6itas5VYVQR9x5rsIwONhSrS/66pYYE=
+-----END CERTIFICATE-----
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/verisignuniversalrootca-chain.pem	Tue Apr 16 02:48:40 2019 +0100
@@ -0,0 +1,73 @@
+-----BEGIN CERTIFICATE-----
+MIIHTzCCBjegAwIBAgIQPYH1xfKSpwYMrTEqOxG4OzANBgkqhkiG9w0BAQsFADCB
+ijELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8w
+HQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTswOQYDVQQDEzJTeW1hbnRl
+YyBDbGFzcyAzIEV4dGVuZGVkIFZhbGlkYXRpb24gU0hBMjU2IFNTTCBDQTAeFw0x
+NzA1MDEwMDAwMDBaFw0xOTA1MDEyMzU5NTlaMIIBLTETMBEGCysGAQQBgjc8AgED
+EwJVUzEZMBcGCysGAQQBgjc8AgECDAhEZWxhd2FyZTEdMBsGA1UEDxMUUHJpdmF0
+ZSBPcmdhbml6YXRpb24xEDAOBgNVBAUTBzIxNTgxMTMxCzAJBgNVBAYTAlVTMQ4w
+DAYDVQQRDAU5NDA0MzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91
+bnRhaW4gVmlldzEZMBcGA1UECQwQMzUwIEVsbGlzIFN0cmVldDEdMBsGA1UECgwU
+U3ltYW50ZWMgQ29ycG9yYXRpb24xFzAVBgNVBAsMDlJvb3QgMiAtIFZBTElEMS0w
+KwYDVQQDDCR2YWxpZC1yb290Mi53ZWJzZWN1cml0eS5zeW1hbnRlYy5jb20wggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDjQDZuIKKgrjmO0+0ty8WIlFZk
+HcvIGX/kIAxByd/XA19h0Zk6kjFLgZaRtsUdRotG40DST72Ki8Vmy7nX3w/cqpFg
+0x0nl7ZORE/L1EjEOUApqEpaA5GtcMaznu/SVVp2mZgoOWhn4EAvocT6GKQWaKi1
+/tCh6UiieHRz6L29CrN6/JWT6OXv6TGePkGcVKSjJrZoNMiNzoTFyCdvVpYutZiv
+YsMzcRJ+KxTepwFM1imssBGc5WM2Wit+Z3kWJhYe0IdOIdqmuR6WxwLGb7nrY44R
+dPy+h0n71GJvjbEzI+Qb/ehc8HjOGba0sh/+x/p14t7PplDZyicxzaC/tpTnAgMB
+AAGjggMJMIIDBTAvBgNVHREEKDAmgiR2YWxpZC1yb290Mi53ZWJzZWN1cml0eS5z
+eW1hbnRlYy5jb20wCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYw
+FAYIKwYBBQUHAwEGCCsGAQUFBwMCMG8GA1UdIARoMGYwWwYLYIZIAYb4RQEHFwYw
+TDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUH
+AgIwGQwXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwBwYFZ4EMAQEwHwYDVR0jBBgw
+FoAUsm3j5BQPjDxzQqZamRrTFHW2htswKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDov
+L3NoLnN5bWNiLmNvbS9zaC5jcmwwVwYIKwYBBQUHAQEESzBJMB8GCCsGAQUFBzAB
+hhNodHRwOi8vc2guc3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8vc2guc3lt
+Y2IuY29tL3NoLmNydDCCAX4GCisGAQQB1nkCBAIEggFuBIIBagFoAHYA3esdK3oN
+T6Ygi4GtgWhwfi6OnQHVXIiNPRHEzbbsvswAAAFbxYHx8wAABAMARzBFAiEAoZAV
+7qASZQXq7visy9vw4552zDWP/+K/8FmgvPpFHuACICl4k+7Omje9NoIRTwnPs4fm
+fqW4rDXzK+HKIGNfEmQ4AHYApLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN
+3BAAAAFbxYHyLgAABAMARzBFAiAuvBGEqgabzmMmG2Tzv1KjGR0nTtEz1R1XluNc
+w8NrnAIhAOBL9OgiJfN4SRq6Gmfesx8BJGFr7pDfpDKECGOT1uqZAHYA7ku9t3XO
+YLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo/csAAAFbxYHz8gAABAMARzBFAiEA2/T1
+kmfJQ/F0SrRDPozVMhaQW/ydrynOQovjsNJM3M0CIEN0T1ac8FsiatIVoxv690J3
+sIfanWlSX7UvPVShVGg2MA0GCSqGSIb3DQEBCwUAA4IBAQB4unTd5lxCGKsEyViE
+m1AZpxTwISBdxuixpXoskuHwCw5LApp8WbaO0W4h4ZLfL+P2cAKx7awvfsaLKQ0i
+tnmhyCZitwI9cfmRs8wwU3WgVH/CiIWv96R9mqA8AQ0pMRUp240idzd/VkLYc2RL
+CFECQOdsgflyp95PqWyFD1aGdMmwCW5nFUYkbA18cJER5VG9nquBNROzM14z73Wa
+PelMX56on9fk+KgryPQIMJFQxqwWbiszby6UaWLQ3ZDKiNwdJsmZWvQ/Gw05NTtp
+J1gOExSwrDQM0X5gxMaSxTDU7zEWQz2kjYWjdtdtiq8AtRjQ8DlqXseTpHOUB8iW
+5vWY
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFSTCCBDGgAwIBAgIQCbdJ/X8LSRbKBVZWz/bZgjANBgkqhkiG9w0BAQsFADCB
+vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W
+ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
+Fw0xMzA0MDkwMDAwMDBaFw0yMzA0MDgyMzU5NTlaMIGKMQswCQYDVQQGEwJVUzEd
+MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj
+IFRydXN0IE5ldHdvcmsxOzA5BgNVBAMTMlN5bWFudGVjIENsYXNzIDMgRXh0ZW5k
+ZWQgVmFsaWRhdGlvbiBTSEEyNTYgU1NMIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAwUo5gP1SVSC5FK9OwhPfSgNKsGXFaGaKJJxyi63peok7gyXs
+LFcSKSb3qHD0Y+AGVTyD8cPxY0sypzk9D/exa/G+Xxua5KoXZUbBpue3YXWKmCYZ
+HqcPo8eypoUnOQR0G8YHFiqSqOjpm8RaIIoby0YJUeSi5CGDM9UnyXvbqOF2hljp
+4b0TV2vgGq9xA7MV8EQB5WFk9fIRmVLs7ej1PRNrISfCxgPA8g/VWH/17yql/yjq
+jeWOdt8sZmSbNb9j/Z9KSJ8whT7VsvH+yESoWC6gnWC9Cs7BJQgcTfK0w+tcOLfY
+1JslzuMzFs/JL8wocPpjdNXExxEVpZnyKSLABQIDAQABo4IBdDCCAXAwNwYIKwYB
+BQUHAQEEKzApMCcGCCsGAQUFBzABhhtodHRwOi8vb2NzcC53cy5zeW1hbnRlYy5j
+b20wEgYDVR0TAQH/BAgwBgEB/wIBADBlBgNVHSAEXjBcMFoGBFUdIAAwUjAmBggr
+BgEFBQcCARYaaHR0cDovL3d3dy5zeW1hdXRoLmNvbS9jcHMwKAYIKwYBBQUHAgIw
+HBoaaHR0cDovL3d3dy5zeW1hdXRoLmNvbS9ycGEwPgYDVR0fBDcwNTAzoDGgL4Yt
+aHR0cDovL2NybC53cy5zeW1hbnRlYy5jb20vdW5pdmVyc2FsLXJvb3QuY3JsMA4G
+A1UdDwEB/wQEAwIBBjAqBgNVHREEIzAhpB8wHTEbMBkGA1UEAxMSVmVyaVNpZ25N
+UEtJLTItMzcyMB0GA1UdDgQWBBSybePkFA+MPHNCplqZGtMUdbaG2zAfBgNVHSME
+GDAWgBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEAdJ3d
+mGjc+GgcDYkNvwlH3cWvtjX7EqazxfQGSbmJcnB0fKn1cxQh6wAW9VOsKBq0salx
+V6wBS/SYJMULRSKRRtL+1rYIRPMbgwUcFMBo34qHylbm72/zlBO0W4VPrVe68Ow7
+gOeiAV+7ZYUARJc0uNiuIW+Xva9zHMVw3Mb3x2sgh6oEYmnI9sPzpHSPG1VPKrsH
+NUZlCdqof2NXVfDrn0kVlVeqf8tER1EAWVaDHUCRLdgd0l9x7ibBbkUNxU0SP7+R
+5TYnB2qysmYrhf8nQaKSs8pOAY371fbh5FTWa8ySae7kOY6dNM4Us/CAauNW7mW0
+zB9UpGiJBN2YLL3Pow==
+-----END CERTIFICATE-----
--- a/test/sun/security/ssl/sanity/ciphersuites/CheckCipherSuites.java	Wed Apr 03 03:51:25 2019 +0100
+++ b/test/sun/security/ssl/sanity/ciphersuites/CheckCipherSuites.java	Tue Apr 16 02:48:40 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,221 +23,140 @@
 
 /*
  * @test
- * @bug 4750141 4895631
+ * @bug 4750141 4895631 8217579
  * @summary Check enabled and supported ciphersuites are correct
- * @ignore JSSE supported cipher suites are changed with CR 6916074,
- *     need to update this test case in JDK 7 soon
+ * @run main CheckCipherSuites default
+ * @run main/othervm CheckCipherSuites limited
  */
 
 import java.util.*;
-
+import java.security.Security;
 import javax.net.ssl.*;
 
-import javax.crypto.Cipher;
-import javax.crypto.spec.*;
-
 public class CheckCipherSuites {
 
+    // List of enabled cipher suites when the "crypto.policy" security
+    // property is set to "unlimited" (the default value).
     private final static String[] ENABLED_DEFAULT = {
-        "SSL_RSA_WITH_RC4_128_MD5",
-        "SSL_RSA_WITH_RC4_128_SHA",
+        "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384",
+        "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
+        "TLS_RSA_WITH_AES_256_CBC_SHA256",
+        "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384",
+        "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384",
+        "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256",
+        "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256",
+        "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
+        "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
+        "TLS_RSA_WITH_AES_256_CBC_SHA",
+        "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA",
+        "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA",
+        "TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
+        "TLS_DHE_DSS_WITH_AES_256_CBC_SHA",
+        "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
+        "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
+        "TLS_RSA_WITH_AES_128_CBC_SHA256",
+        "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256",
+        "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256",
+        "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",
+        "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256",
+        "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
+        "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
         "TLS_RSA_WITH_AES_128_CBC_SHA",
-        "TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
         "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA",
-        "TLS_ECDH_RSA_WITH_RC4_128_SHA",
         "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA",
-        "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
-        "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
-        "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
-        "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
         "TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
         "TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
-        "SSL_RSA_WITH_3DES_EDE_CBC_SHA",
-        "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA",
-        "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA",
-        "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA",
-        "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
-        "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA",
-        "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA",
-        "SSL_RSA_WITH_DES_CBC_SHA",
-        "SSL_DHE_RSA_WITH_DES_CBC_SHA",
-        "SSL_DHE_DSS_WITH_DES_CBC_SHA",
-        "SSL_RSA_EXPORT_WITH_RC4_40_MD5",
-        "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
-        "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
-        "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
-        "TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
-
+        "TLS_EMPTY_RENEGOTIATION_INFO_SCSV"
     };
 
-    private final static String[] ENABLED_UNLIMITED = {
-        "SSL_RSA_WITH_RC4_128_MD5",
-        "SSL_RSA_WITH_RC4_128_SHA",
+    // List of enabled cipher suites when the "crypto.policy" security
+    // property is set to "limited".
+    private final static String[] ENABLED_LIMITED = {
+        "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
+        "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
+        "TLS_RSA_WITH_AES_128_CBC_SHA256",
+        "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256",
+        "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256",
+        "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",
+        "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256",
+        "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
+        "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
         "TLS_RSA_WITH_AES_128_CBC_SHA",
-        "TLS_RSA_WITH_AES_256_CBC_SHA",
-        "TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
         "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA",
-        "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA",
-        "TLS_ECDH_RSA_WITH_RC4_128_SHA",
         "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA",
-        "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA",
-        "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
-        "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
-        "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
-        "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
-        "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
-        "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
         "TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
-        "TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
         "TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
-        "TLS_DHE_DSS_WITH_AES_256_CBC_SHA",
-        "SSL_RSA_WITH_3DES_EDE_CBC_SHA",
-        "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA",
-        "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA",
-        "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA",
-        "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
-        "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA",
-        "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA",
-        "SSL_RSA_WITH_DES_CBC_SHA",
-        "SSL_DHE_RSA_WITH_DES_CBC_SHA",
-        "SSL_DHE_DSS_WITH_DES_CBC_SHA",
-        "SSL_RSA_EXPORT_WITH_RC4_40_MD5",
-        "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
-        "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
-        "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
-        "TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
-
+        "TLS_EMPTY_RENEGOTIATION_INFO_SCSV"
     };
 
-    // supported ciphersuites using default JCE policy jurisdiction files
-    // AES/256 unavailable
+    // List of supported cipher suites when the "crypto.policy" security
+    // property is set to "unlimited" (the default value).
     private final static String[] SUPPORTED_DEFAULT = {
-        "SSL_RSA_WITH_RC4_128_MD5",
-        "SSL_RSA_WITH_RC4_128_SHA",
+        "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384",
+        "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
+        "TLS_RSA_WITH_AES_256_CBC_SHA256",
+        "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384",
+        "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384",
+        "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256",
+        "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256",
+        "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
+        "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
+        "TLS_RSA_WITH_AES_256_CBC_SHA",
+        "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA",
+        "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA",
+        "TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
+        "TLS_DHE_DSS_WITH_AES_256_CBC_SHA",
+        "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
+        "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
+        "TLS_RSA_WITH_AES_128_CBC_SHA256",
+        "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256",
+        "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256",
+        "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",
+        "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256",
+        "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
+        "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
         "TLS_RSA_WITH_AES_128_CBC_SHA",
-        "TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
         "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA",
-        "TLS_ECDH_RSA_WITH_RC4_128_SHA",
         "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA",
-        "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
-        "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
-        "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
-        "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
         "TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
         "TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
-        "SSL_RSA_WITH_3DES_EDE_CBC_SHA",
-        "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA",
-        "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA",
-        "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA",
-        "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
-        "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA",
-        "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA",
-        "SSL_RSA_WITH_DES_CBC_SHA",
-        "SSL_DHE_RSA_WITH_DES_CBC_SHA",
-        "SSL_DHE_DSS_WITH_DES_CBC_SHA",
-        "SSL_RSA_EXPORT_WITH_RC4_40_MD5",
-        "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
-        "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
-        "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
         "TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
-
-        "SSL_RSA_WITH_NULL_MD5",
-        "SSL_RSA_WITH_NULL_SHA",
-        "TLS_ECDH_ECDSA_WITH_NULL_SHA",
-        "TLS_ECDH_RSA_WITH_NULL_SHA",
-        "TLS_ECDHE_ECDSA_WITH_NULL_SHA",
-        "TLS_ECDHE_RSA_WITH_NULL_SHA",
-        "SSL_DH_anon_WITH_RC4_128_MD5",
-        "TLS_DH_anon_WITH_AES_128_CBC_SHA",
-        "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
-        "SSL_DH_anon_WITH_DES_CBC_SHA",
-        "TLS_ECDH_anon_WITH_RC4_128_SHA",
-        "TLS_ECDH_anon_WITH_AES_128_CBC_SHA",
-        "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
-        "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
-        "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
-        "TLS_ECDH_anon_WITH_NULL_SHA",
+        "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
+        "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
+        "SSL_RSA_WITH_RC4_128_SHA",
+        "TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
+        "TLS_ECDH_RSA_WITH_RC4_128_SHA",
+        "SSL_RSA_WITH_RC4_128_MD5",
         "TLS_KRB5_WITH_RC4_128_SHA",
-        "TLS_KRB5_WITH_RC4_128_MD5",
-        "TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
-        "TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
-        "TLS_KRB5_WITH_DES_CBC_SHA",
-        "TLS_KRB5_WITH_DES_CBC_MD5",
-        "TLS_KRB5_EXPORT_WITH_RC4_40_SHA",
-        "TLS_KRB5_EXPORT_WITH_RC4_40_MD5",
-        "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
-        "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5",
-
+        "TLS_KRB5_WITH_RC4_128_MD5"
     };
 
-    // supported ciphersuites using unlimited JCE policy jurisdiction files
-    // AES/256 available
-    private final static String[] SUPPORTED_UNLIMITED = {
+    // List of supported cipher suites when the "crypto.policy" security
+    // property is set to "limited".
+    private final static String[] SUPPORTED_LIMITED = {
+        "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
+        "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
+        "TLS_RSA_WITH_AES_128_CBC_SHA256",
+        "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256",
+        "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256",
+        "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",
+        "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256",
+        "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
+        "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
+        "TLS_RSA_WITH_AES_128_CBC_SHA",
+        "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA",
+        "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA",
+        "TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
+        "TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
+        "TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
+        "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
+        "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
+        "SSL_RSA_WITH_RC4_128_SHA",
+        "TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
+        "TLS_ECDH_RSA_WITH_RC4_128_SHA",
         "SSL_RSA_WITH_RC4_128_MD5",
-        "SSL_RSA_WITH_RC4_128_SHA",
-        "TLS_RSA_WITH_AES_128_CBC_SHA",
-        "TLS_RSA_WITH_AES_256_CBC_SHA",
-        "TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
-        "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA",
-        "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA",
-        "TLS_ECDH_RSA_WITH_RC4_128_SHA",
-        "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA",
-        "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA",
-        "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
-        "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
-        "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
-        "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
-        "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
-        "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
-        "TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
-        "TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
-        "TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
-        "TLS_DHE_DSS_WITH_AES_256_CBC_SHA",
-        "SSL_RSA_WITH_3DES_EDE_CBC_SHA",
-        "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA",
-        "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA",
-        "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA",
-        "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
-        "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA",
-        "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA",
-        "SSL_RSA_WITH_DES_CBC_SHA",
-        "SSL_DHE_RSA_WITH_DES_CBC_SHA",
-        "SSL_DHE_DSS_WITH_DES_CBC_SHA",
-        "SSL_RSA_EXPORT_WITH_RC4_40_MD5",
-        "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
-        "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
-        "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
-        "TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
-
-        "SSL_RSA_WITH_NULL_MD5",
-        "SSL_RSA_WITH_NULL_SHA",
-        "TLS_ECDH_ECDSA_WITH_NULL_SHA",
-        "TLS_ECDH_RSA_WITH_NULL_SHA",
-        "TLS_ECDHE_ECDSA_WITH_NULL_SHA",
-        "TLS_ECDHE_RSA_WITH_NULL_SHA",
-        "SSL_DH_anon_WITH_RC4_128_MD5",
-        "TLS_DH_anon_WITH_AES_128_CBC_SHA",
-        "TLS_DH_anon_WITH_AES_256_CBC_SHA",
-        "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
-        "SSL_DH_anon_WITH_DES_CBC_SHA",
-        "TLS_ECDH_anon_WITH_RC4_128_SHA",
-        "TLS_ECDH_anon_WITH_AES_128_CBC_SHA",
-        "TLS_ECDH_anon_WITH_AES_256_CBC_SHA",
-        "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
-        "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
-        "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
-        "TLS_ECDH_anon_WITH_NULL_SHA",
         "TLS_KRB5_WITH_RC4_128_SHA",
-        "TLS_KRB5_WITH_RC4_128_MD5",
-        "TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
-        "TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
-        "TLS_KRB5_WITH_DES_CBC_SHA",
-        "TLS_KRB5_WITH_DES_CBC_MD5",
-        "TLS_KRB5_EXPORT_WITH_RC4_40_SHA",
-        "TLS_KRB5_EXPORT_WITH_RC4_40_MD5",
-        "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
-        "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5",
-
+        "TLS_KRB5_WITH_RC4_128_MD5"
     };
 
     private static void showSuites(String[] suites) {
@@ -252,19 +171,21 @@
     public static void main(String[] args) throws Exception {
         long start = System.currentTimeMillis();
 
+        if (args.length != 1) {
+            throw new Exception("One arg required");
+        }
+
         String[] ENABLED;
         String[] SUPPORTED;
-        try {
-            Cipher c = Cipher.getInstance("AES/CBC/NoPadding");
-            SecretKeySpec key = new SecretKeySpec(new byte[32], "AES");
-            c.init(Cipher.ENCRYPT_MODE, key);
-            System.out.println("AES/256 is available");
-            ENABLED = ENABLED_UNLIMITED;
-            SUPPORTED = SUPPORTED_UNLIMITED;
-        } catch (Exception e) {
-            System.out.println("AES/256 is NOT available (" + e + ")");
+        if (args[0].equals("default")) {
             ENABLED = ENABLED_DEFAULT;
             SUPPORTED = SUPPORTED_DEFAULT;
+        } else if (args[0].equals("limited")) {
+            Security.setProperty("crypto.policy", "limited");
+            ENABLED = ENABLED_LIMITED;
+            SUPPORTED = SUPPORTED_LIMITED;
+        } else {
+            throw new Exception("Illegal argument");
         }
 
         SSLSocketFactory factory = (SSLSocketFactory)SSLSocketFactory.getDefault();
--- a/test/sun/text/resources/LocaleData	Wed Apr 03 03:51:25 2019 +0100
+++ b/test/sun/text/resources/LocaleData	Tue Apr 16 02:48:40 2019 +0100
@@ -6373,8 +6373,8 @@
 CurrencyNames//bif=Burundian Franc
 CurrencyNames//bob=Bolivian Boliviano
 CurrencyNames//btn=Bhutanese Ngultrum
-CurrencyNames//byb=Belarusian New Ruble (1994-1999)
-CurrencyNames//byr=Belarusian Ruble
+CurrencyNames//byb=Belarusian Ruble (1994-1999)
+CurrencyNames//byr=Belarusian Ruble (2000-2016)
 CurrencyNames//cdf=Congolese Franc
 CurrencyNames//clf=Chilean Unit of Account (UF)
 CurrencyNames//cny=Chinese Yuan
@@ -6406,7 +6406,6 @@
 CurrencyNames//mro=Mauritanian Ouguiya
 CurrencyNames//mur=Mauritian Rupee
 CurrencyNames//mvr=Maldivian Rufiyaa
-CurrencyNames//mwk=Malawian Kwacha
 CurrencyNames//mxv=Mexican Investment Unit
 CurrencyNames//mzm=Mozambican Metical (1980-2006)
 CurrencyNames//mzn=Mozambican Metical
@@ -6414,7 +6413,6 @@
 CurrencyNames//nio=Nicaraguan C\u00f3rdoba
 CurrencyNames//nlg=Dutch Guilder
 CurrencyNames//omr=Omani Rial
-CurrencyNames//pen=Peruvian Nuevo Sol
 CurrencyNames//pgk=Papua New Guinean Kina
 CurrencyNames//pkr=Pakistani Rupee
 CurrencyNames//pyg=Paraguayan Guarani
@@ -7033,3 +7031,14 @@
 
 # bug 8027695
 FormatData/sv_SE/NumberPatterns/2=#,##0 %
+
+# bug #8129361
+CurrencyNames//hrk=Kuna
+
+# bug #8164784
+CurrencyNames//mwk=Malawian Malawi Kwacha
+CurrencyNames//pen=Peruvian Sol
+
+# bug #8145952
+CurrencyNames//byn=Belarusian Ruble
+CurrencyNames/be_BY/BYN=\u0420\u0443\u0431
--- a/test/sun/text/resources/LocaleDataTest.java	Wed Apr 03 03:51:25 2019 +0100
+++ b/test/sun/text/resources/LocaleDataTest.java	Tue Apr 16 02:48:40 2019 +0100
@@ -34,7 +34,8 @@
  *      6509039 6609737 6610748 6645271 6507067 6873931 6450945 6645268 6646611
  *      6645405 6650730 6910489 6573250 6870908 6585666 6716626 6914413 6916787
  *      6919624 6998391 7019267 7020960 7025837 7020583 7036905 7066203 7189611
- *      7171028 8013836 7028073 7195759 7085757 6931564 8027695
+ *      7171028 8013836 7028073 7195759 7085757 6931564 8027695 8129361
+ *      8145952 8164784
  * @summary Verify locale data
  *
  */