Merge
authorprr
Thu, 12 Apr 2018 16:25:29 -0700
changeset 49696 508e9f6632fd
parent 49695 a4d1d2dec618 (current diff)
parent 49588 ae568aefc5aa (diff)
child 49697 59c4713c5d21
Merge
src/java.base/share/classes/java/time/format/ZoneName.java
src/java.base/share/classes/jdk/internal/misc/JavaSecurityProtectionDomainAccess.java
test/jdk/ProblemList.txt
--- a/.hgtags	Thu Apr 12 14:11:42 2018 +0100
+++ b/.hgtags	Thu Apr 12 16:25:29 2018 -0700
@@ -479,3 +479,4 @@
 3acb379b86725c47e7f33358cb22efa8752ae532 jdk-11+6
 f7363de371c9a1f668bd0a01b7df3d1ddb9cc58b jdk-11+7
 755e1b55a4dff510f9639cdb5c5e82549a7e09b3 jdk-11+8
+0c3e252cea44f06aef570ef464950ab97c669970 jdk-11+9
--- a/make/Init.gmk	Thu Apr 12 14:11:42 2018 +0100
+++ b/make/Init.gmk	Thu Apr 12 16:25:29 2018 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 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
@@ -226,6 +226,15 @@
   # Parse COMPARE_BUILD (for makefile development)
   $(eval $(call ParseCompareBuild))
 
+  # If no LOG= was given on command line, but we have a non-standard default
+  # value, use that instead and re-parse log level.
+  ifeq ($(LOG), )
+    ifneq ($(DEFAULT_LOG), )
+      override LOG := $(DEFAULT_LOG)
+      $(eval $(call ParseLogLevel))
+    endif
+  endif
+
   ifeq ($(LOG_NOFILE), true)
     # Disable build log if LOG=[level,]nofile was given
     override BUILD_LOG_PIPE :=
--- a/make/InitSupport.gmk	Thu Apr 12 14:11:42 2018 +0100
+++ b/make/InitSupport.gmk	Thu Apr 12 16:25:29 2018 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -131,73 +131,6 @@
     endif
   endef
 
-  # Look for a given option in the LOG variable, and if found, set a variable
-  # and remove the option from the LOG variable
-  # $1: The option to look for
-  # $2: The option to set to "true" if the option is found
-  define ParseLogOption
-    ifneq ($$(findstring $1, $$(LOG)),)
-      $2 := true
-      # COMMA is defined in spec.gmk, but that is not included yet
-      COMMA := ,
-      # First try to remove ",<option>" if it exists, otherwise just remove "<option>"
-      LOG_STRIPPED := $$(subst $1,, $$(subst $$(COMMA)$(strip $1),, $$(LOG)))
-      # We might have ended up with a leading comma. Remove it. Need override
-      # since LOG is set from the command line.
-      override LOG := $$(strip $$(patsubst $$(COMMA)%, %, $$(LOG_STRIPPED)))
-    endif
-  endef
-
-  define ParseLogLevel
-    # Catch old-style VERBOSE= command lines.
-    ifneq ($$(origin VERBOSE), undefined)
-      $$(info Error: VERBOSE is deprecated. Use LOG=<warn|info|debug|trace> instead.)
-      $$(error Cannot continue)
-    endif
-
-    # Setup logging according to LOG
-
-    # If the "nofile" argument is given, act on it and strip it away
-    $$(eval $$(call ParseLogOption, nofile, LOG_NOFILE))
-
-    # If the "cmdline" argument is given, act on it and strip it away
-    $$(eval $$(call ParseLogOption, cmdlines, LOG_CMDLINES))
-
-    # If the "profile-to-log" argument is given, write shell times in build log
-    $$(eval $$(call ParseLogOption, profile-to-log, LOG_PROFILE_TIMES_LOG))
-
-    # If the "profile" argument is given, write shell times in separate log file
-    # IMPORTANT: $(ParseLogOption profile-to-log) should go first. Otherwise
-    # parsing of 'LOG=debug,profile-to-log,nofile' ends up in the following error:
-    # Error: LOG contains unknown option or log level: debug-to-log.
-    $$(eval $$(call ParseLogOption, profile, LOG_PROFILE_TIMES_FILE))
-
-    # Treat LOG=profile-to-log as if it were LOG=profile,profile-to-log
-    LOG_PROFILE_TIMES_FILE := $$(firstword $$(LOG_PROFILE_TIMES_FILE) $$(LOG_PROFILE_TIMES_LOG))
-
-    LOG_LEVEL := $$(LOG)
-
-    ifeq ($$(LOG_LEVEL),)
-      # Set LOG to "warn" as default if not set
-      LOG_LEVEL := warn
-    endif
-
-    ifeq ($$(LOG_LEVEL), warn)
-      MAKE_LOG_FLAGS := -s
-    else ifeq ($$(LOG_LEVEL), info)
-      MAKE_LOG_FLAGS := -s
-    else ifeq ($$(LOG_LEVEL), debug)
-      MAKE_LOG_FLAGS :=
-    else ifeq ($$(LOG_LEVEL), trace)
-      MAKE_LOG_FLAGS :=
-    else
-      $$(info Error: LOG contains unknown option or log level: $$(LOG).)
-      $$(info LOG can be <level>[,<opt>[...]] where <opt> is nofile | cmdlines | profile | profile-to-log)
-      $$(info and <level> is warn | info | debug | trace)
-      $$(error Cannot continue)
-    endif
-  endef
-
   define ParseConfAndSpec
     ifneq ($$(origin SPEC), undefined)
       # We have been given a SPEC, check that it works out properly
@@ -477,30 +410,38 @@
   endef
 
   define PrintFailureReports
-	$(if $(wildcard $(MAKESUPPORT_OUTPUTDIR)/failure-logs/*.log), \
-	  $(PRINTF) "\n=== Output from failing command(s) repeated here ===\n" $(NEWLINE) \
-	  $(foreach logfile, $(sort $(wildcard $(MAKESUPPORT_OUTPUTDIR)/failure-logs/*.log)), \
-	      $(PRINTF) "* For target $(notdir $(basename $(logfile))):\n" $(NEWLINE) \
-	      ($(GREP) -v -e "^Note: including file:" <  $(logfile) || true) | $(HEAD) -n 12 $(NEWLINE) \
-	      if test `$(WC) -l < $(logfile)` -gt 12; then \
-	        $(ECHO) "   ... (rest of output omitted)" ; \
-	      fi $(NEWLINE) \
+	$(if $(filter none, $(LOG_REPORT)), , \
+	  $(if $(wildcard $(MAKESUPPORT_OUTPUTDIR)/failure-logs/*.log), \
+	    $(PRINTF) "\n=== Output from failing command(s) repeated here ===\n" $(NEWLINE) \
+	    $(foreach logfile, $(sort $(wildcard $(MAKESUPPORT_OUTPUTDIR)/failure-logs/*.log)), \
+	        $(PRINTF) "* For target $(notdir $(basename $(logfile))):\n" $(NEWLINE) \
+	        $(if $(filter all, $(LOG_REPORT)), \
+	          $(GREP) -v -e "^Note: including file:" <  $(logfile) || true $(NEWLINE) \
+	        , \
+	          ($(GREP) -v -e "^Note: including file:" <  $(logfile) || true) | $(HEAD) -n 12 $(NEWLINE) \
+	          if test `$(WC) -l < $(logfile)` -gt 12; then \
+	            $(ECHO) "   ... (rest of output omitted)" ; \
+	          fi $(NEWLINE) \
+	        ) \
+	    ) \
+	    $(PRINTF) "\n* All command lines available in $(MAKESUPPORT_OUTPUTDIR)/failure-logs.\n" $(NEWLINE) \
+	    $(PRINTF) "=== End of repeated output ===\n" \
 	  ) \
-	  $(PRINTF) "\n* All command lines available in $(MAKESUPPORT_OUTPUTDIR)/failure-logs.\n" $(NEWLINE) \
-	  $(PRINTF) "=== End of repeated output ===\n" \
 	)
   endef
 
   define PrintBuildLogFailures
-	if $(GREP) -q "recipe for target .* failed" $(BUILD_LOG) 2> /dev/null; then  \
-	  $(PRINTF) "\n=== Make failed targets repeated here ===\n" ; \
-	  $(GREP) "recipe for target .* failed" $(BUILD_LOG) ; \
-	  $(PRINTF) "=== End of repeated output ===\n" ; \
-	  $(PRINTF) "\nHint: Try searching the build log for the name of the first failed target.\n" ; \
-	else \
-	  $(PRINTF) "\nNo indication of failed target found.\n" ; \
-	  $(PRINTF) "Hint: Try searching the build log for '] Error'.\n" ; \
-	fi
+	$(if $(filter none, $(LOG_REPORT)), , \
+	  if $(GREP) -q "recipe for target .* failed" $(BUILD_LOG) 2> /dev/null; then  \
+	    $(PRINTF) "\n=== Make failed targets repeated here ===\n" ; \
+	    $(GREP) "recipe for target .* failed" $(BUILD_LOG) ; \
+	    $(PRINTF) "=== End of repeated output ===\n" ; \
+	    $(PRINTF) "\nHint: Try searching the build log for the name of the first failed target.\n" ; \
+	  else \
+	    $(PRINTF) "\nNo indication of failed target found.\n" ; \
+	    $(PRINTF) "Hint: Try searching the build log for '] Error'.\n" ; \
+	  fi \
+	)
   endef
 
   define RotateLogFiles
@@ -583,8 +524,107 @@
 
 endif # HAS_SPEC
 
+# Look for a given option in the LOG variable, and if found, set a variable
+# and remove the option from the LOG variable
+# $1: The option to look for
+# $2: The variable to set to "true" if the option is found
+define ParseLogOption
+  ifneq ($$(findstring $1, $$(LOG)),)
+    override $2 := true
+    # COMMA is defined in spec.gmk, but that is not included yet
+    COMMA := ,
+    # First try to remove ",<option>" if it exists, otherwise just remove "<option>"
+    LOG_STRIPPED := $$(subst $1,, $$(subst $$(COMMA)$$(strip $1),, $$(LOG)))
+    # We might have ended up with a leading comma. Remove it. Need override
+    # since LOG is set from the command line.
+    override LOG := $$(strip $$(patsubst $$(COMMA)%, %, $$(LOG_STRIPPED)))
+  endif
+endef
+
+# Look for a given option with an assignment in the LOG variable, and if found,
+# set a variable to that value and remove the option from the LOG variable
+# $1: The option to look for
+# $2: The variable to set to the value of the option, if found
+define ParseLogValue
+  ifneq ($$(findstring $1=, $$(LOG)),)
+    # Make words of out comma-separated list and find the one with opt=val
+    value := $$(strip $$(subst $$(strip $1)=,, $$(filter $$(strip $1)=%, $$(subst $$(COMMA), , $$(LOG)))))
+    override $2 := $$(value)
+    # COMMA is defined in spec.gmk, but that is not included yet
+    COMMA := ,
+    # First try to remove ",<option>" if it exists, otherwise just remove "<option>"
+    LOG_STRIPPED := $$(subst $$(strip $1)=$$(value),, \
+        $$(subst $$(COMMA)$$(strip $1)=$$(value),, $$(LOG)))
+    # We might have ended up with a leading comma. Remove it. Need override
+    # since LOG is set from the command line.
+    override LOG := $$(strip $$(patsubst $$(COMMA)%, %, $$(LOG_STRIPPED)))
+  endif
+endef
+
+
+define ParseLogLevel
+  # Catch old-style VERBOSE= command lines.
+  ifneq ($$(origin VERBOSE), undefined)
+    $$(info Error: VERBOSE is deprecated. Use LOG=<warn|info|debug|trace> instead.)
+    $$(error Cannot continue)
+  endif
+
+  # Setup logging according to LOG
+
+  # If "nofile" is present, do not log to a file
+  $$(eval $$(call ParseLogOption, nofile, LOG_NOFILE))
+
+  # If "cmdline" is present, print all executes "important" command lines.
+  $$(eval $$(call ParseLogOption, cmdlines, LOG_CMDLINES))
+
+  # If "report" is present, use non-standard reporting options at build failure.
+  $$(eval $$(call ParseLogValue, report, LOG_REPORT))
+  ifneq ($$(LOG_REPORT), )
+    ifeq ($$(filter $$(LOG_REPORT), none all default), )
+      $$(info Error: LOG=report has invalid value: $$(LOG_REPORT).)
+      $$(info Valid values: LOG=report=<none>|<all>|<default>)
+      $$(error Cannot continue)
+    endif
+  endif
+
+  # If "profile-to-log" is present, write shell times in build log
+  $$(eval $$(call ParseLogOption, profile-to-log, LOG_PROFILE_TIMES_LOG))
+
+  # If "profile" is present, write shell times in separate log file
+  # IMPORTANT: $(ParseLogOption profile-to-log) should go first. Otherwise
+  # parsing of 'LOG=debug,profile-to-log,nofile' ends up in the following error:
+  # Error: LOG contains unknown option or log level: debug-to-log.
+  $$(eval $$(call ParseLogOption, profile, LOG_PROFILE_TIMES_FILE))
+
+  # Treat LOG=profile-to-log as if it were LOG=profile,profile-to-log
+  LOG_PROFILE_TIMES_FILE := $$(firstword $$(LOG_PROFILE_TIMES_FILE) $$(LOG_PROFILE_TIMES_LOG))
+
+  override LOG_LEVEL := $$(LOG)
+
+  ifeq ($$(LOG_LEVEL),)
+    # Set LOG to "warn" as default if not set
+    override LOG_LEVEL := warn
+  endif
+
+  ifeq ($$(LOG_LEVEL), warn)
+    override MAKE_LOG_FLAGS := -s
+  else ifeq ($$(LOG_LEVEL), info)
+    override MAKE_LOG_FLAGS := -s
+  else ifeq ($$(LOG_LEVEL), debug)
+    override MAKE_LOG_FLAGS :=
+  else ifeq ($$(LOG_LEVEL), trace)
+    override MAKE_LOG_FLAGS :=
+  else
+    $$(info Error: LOG contains unknown option or log level: $$(LOG).)
+    $$(info LOG can be <level>[,<opt>[...]] where <opt> is nofile | cmdlines | profile | profile-to-log)
+    $$(info and <level> is warn | info | debug | trace)
+    $$(error Cannot continue)
+  endif
+endef
+
 MAKE_LOG_VARS = $(foreach v, \
-    LOG_LEVEL LOG_NOFILE LOG_CMDLINES LOG_PROFILE_TIMES_LOG LOG_PROFILE_TIMES_FILE, \
+    LOG_LEVEL LOG_NOFILE LOG_CMDLINES LOG_REPORT LOG_PROFILE_TIMES_LOG \
+    LOG_PROFILE_TIMES_FILE, \
     $v=$($v) \
 )
 
--- a/make/autoconf/basics.m4	Thu Apr 12 14:11:42 2018 +0100
+++ b/make/autoconf/basics.m4	Thu Apr 12 16:25:29 2018 -0700
@@ -23,6 +23,7 @@
 # questions.
 #
 
+###############################################################################
 # Create a function/macro that takes a series of named arguments. The call is
 # similar to AC_DEFUN, but the setup of the function looks like this:
 # BASIC_DEFUN_NAMED([MYFUNC], [FOO *BAR], [$@], [
@@ -91,6 +92,48 @@
   ])
 ])
 
+###############################################################################
+# Check if a list of space-separated words are selected only from a list of
+# space-separated legal words. Typical use is to see if a user-specified
+# set of words is selected from a set of legal words.
+#
+# Sets the specified variable to list of non-matching (offending) words, or to
+# the empty string if all words are matching the legal set.
+#
+# $1: result variable name
+# $2: list of values to check
+# $3: list of legal values
+AC_DEFUN([BASIC_GET_NON_MATCHING_VALUES],
+[
+  # grep filter function inspired by a comment to http://stackoverflow.com/a/1617326
+  # Notice that the original variant fails on SLES 10 and 11
+  # Some grep versions (at least bsd) behaves strangely on the base case with
+  # no legal_values, so make it explicit.
+  values_to_check=`$ECHO $2 | $TR ' ' '\n'`
+  legal_values=`$ECHO $3 | $TR ' ' '\n'`
+  if test -z "$legal_values"; then
+    $1="$2"
+  else
+    result=`$GREP -Fvx "$legal_values" <<< "$values_to_check" | $GREP -v '^$'`
+    $1=${result//$'\n'/ }
+  fi
+])
+
+###############################################################################
+# Sort a space-separated list, and remove duplicates.
+#
+# Sets the specified variable to the resulting list.
+#
+# $1: result variable name
+# $2: list of values to sort
+AC_DEFUN([BASIC_SORT_LIST],
+[
+  values_to_sort=`$ECHO $2 | $TR ' ' '\n'`
+  result=`$SORT -u <<< "$values_to_sort" | $GREP -v '^$'`
+  $1=${result//$'\n'/ }
+])
+
+###############################################################################
 # Test if $1 is a valid argument to $3 (often is $JAVA passed as $3)
 # If so, then append $1 to $2 \
 # Also set JVM_ARG_OK to true/false depending on outcome.
@@ -135,6 +178,7 @@
   fi
 ])
 
+###############################################################################
 # This will make sure the given variable points to a full and proper
 # path. This means:
 # 1) There will be no spaces in the path. On unix platforms,
@@ -178,6 +222,7 @@
   fi
 ])
 
+###############################################################################
 # This will make sure the given variable points to a executable
 # with a full and proper path. This means:
 # 1) There will be no spaces in the path. On unix platforms,
@@ -249,6 +294,7 @@
   fi
 ])
 
+###############################################################################
 AC_DEFUN([BASIC_REMOVE_SYMBOLIC_LINKS],
 [
   if test "x$OPENJDK_BUILD_OS" != xwindows; then
@@ -295,6 +341,7 @@
   fi
 ])
 
+###############################################################################
 # Register a --with argument but mark it as deprecated
 # $1: The name of the with argument to deprecate, not including --with-
 AC_DEFUN([BASIC_DEPRECATED_ARG_WITH],
@@ -304,6 +351,7 @@
       [AC_MSG_WARN([Option --with-$1 is deprecated and will be ignored.])])
 ])
 
+###############################################################################
 # Register a --enable argument but mark it as deprecated
 # $1: The name of the with argument to deprecate, not including --enable-
 # $2: The name of the argument to deprecate, in shell variable style (i.e. with _ instead of -)
@@ -322,6 +370,7 @@
   fi
 ])
 
+###############################################################################
 AC_DEFUN_ONCE([BASIC_INIT],
 [
   # Save the original command line. This is passed to us by the wrapper configure script.
@@ -334,6 +383,7 @@
   AC_MSG_NOTICE([Configuration created at $DATE_WHEN_CONFIGURED.])
 ])
 
+###############################################################################
 # Test that variable $1 denoting a program is not empty. If empty, exit with an error.
 # $1: variable to check
 AC_DEFUN([BASIC_CHECK_NONEMPTY],
@@ -343,6 +393,7 @@
   fi
 ])
 
+###############################################################################
 # Check that there are no unprocessed overridden variables left.
 # If so, they are an incorrect argument and we will exit with an error.
 AC_DEFUN([BASIC_CHECK_LEFTOVER_OVERRIDDEN],
@@ -354,6 +405,7 @@
   fi
 ])
 
+###############################################################################
 # Setup a tool for the given variable. If correctly specified by the user,
 # use that value, otherwise search for the tool using the supplied code snippet.
 # $1: variable to set
@@ -420,6 +472,7 @@
   fi
 ])
 
+###############################################################################
 # Call BASIC_SETUP_TOOL with AC_PATH_PROGS to locate the tool
 # $1: variable to set
 # $2: executable name (or list of names) to look for
@@ -429,6 +482,7 @@
   BASIC_SETUP_TOOL($1, [AC_PATH_PROGS($1, $2, , $3)])
 ])
 
+###############################################################################
 # Call BASIC_SETUP_TOOL with AC_CHECK_TOOLS to locate the tool
 # $1: variable to set
 # $2: executable name (or list of names) to look for
@@ -437,6 +491,7 @@
   BASIC_SETUP_TOOL($1, [AC_CHECK_TOOLS($1, $2)])
 ])
 
+###############################################################################
 # Like BASIC_PATH_PROGS but fails if no tool was found.
 # $1: variable to set
 # $2: executable name (or list of names) to look for
@@ -447,6 +502,7 @@
   BASIC_CHECK_NONEMPTY($1)
 ])
 
+###############################################################################
 # Like BASIC_SETUP_TOOL but fails if no tool was found.
 # $1: variable to set
 # $2: autoconf macro to call to look for the special tool
@@ -456,6 +512,7 @@
   BASIC_CHECK_NONEMPTY($1)
 ])
 
+###############################################################################
 # Setup the most fundamental tools that relies on not much else to set up,
 # but is used by much of the early bootstrap code.
 AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS],
@@ -528,6 +585,7 @@
   BASIC_PATH_PROGS(PANDOC, pandoc)
 ])
 
+###############################################################################
 # Setup basic configuration paths, and platform-specific stuff related to PATHs.
 AC_DEFUN_ONCE([BASIC_SETUP_PATHS],
 [
@@ -569,6 +627,7 @@
   AC_SUBST(USERNAME)
 ])
 
+###############################################################################
 # Evaluates platform specific overrides for devkit variables.
 # $1: Name of variable
 AC_DEFUN([BASIC_EVAL_DEVKIT_VARIABLE],
@@ -578,6 +637,7 @@
   fi
 ])
 
+###############################################################################
 AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT],
 [
   AC_ARG_WITH([devkit], [AS_HELP_STRING([--with-devkit],
@@ -756,6 +816,7 @@
   AC_MSG_RESULT([$EXTRA_PATH])
 ])
 
+###############################################################################
 AC_DEFUN_ONCE([BASIC_SETUP_OUTPUT_DIR],
 [
 
@@ -855,6 +916,7 @@
 
 #%%% Simple tools %%%
 
+###############################################################################
 # Check if we have found a usable version of make
 # $1: the path to a potential make binary (or empty)
 # $2: the description on how we found this
@@ -908,6 +970,7 @@
   fi
 ])
 
+###############################################################################
 AC_DEFUN([BASIC_CHECK_MAKE_OUTPUT_SYNC],
 [
   # Check if make supports the output sync option and if so, setup using it.
@@ -934,6 +997,7 @@
   AC_SUBST(OUTPUT_SYNC)
 ])
 
+###############################################################################
 # Goes looking for a usable version of GNU make.
 AC_DEFUN([BASIC_CHECK_GNU_MAKE],
 [
@@ -981,6 +1045,7 @@
   BASIC_CHECK_MAKE_OUTPUT_SYNC
 ])
 
+###############################################################################
 AC_DEFUN([BASIC_CHECK_FIND_DELETE],
 [
   # Test if find supports -delete
@@ -1009,6 +1074,7 @@
   AC_SUBST(FIND_DELETE)
 ])
 
+###############################################################################
 AC_DEFUN([BASIC_CHECK_TAR],
 [
   # Test which kind of tar was found
@@ -1043,6 +1109,7 @@
   AC_SUBST(TAR_SUPPORTS_TRANSFORM)
 ])
 
+###############################################################################
 AC_DEFUN([BASIC_CHECK_GREP],
 [
   # Test that grep supports -Fx with a list of pattern which includes null pattern.
@@ -1066,6 +1133,7 @@
   fi
 ])
 
+###############################################################################
 AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS],
 [
   BASIC_CHECK_GNU_MAKE
@@ -1132,6 +1200,7 @@
   fi
 ])
 
+###############################################################################
 # Check if build directory is on local disk. If not possible to determine,
 # we prefer to claim it's local.
 # Argument 1: directory to test
@@ -1171,6 +1240,7 @@
   fi
 ])
 
+###############################################################################
 # Check that source files have basic read permissions set. This might
 # not be the case in cygwin in certain conditions.
 AC_DEFUN_ONCE([BASIC_CHECK_SRC_PERMS],
@@ -1183,6 +1253,7 @@
   fi
 ])
 
+###############################################################################
 AC_DEFUN_ONCE([BASIC_TEST_USABILITY_ISSUES],
 [
   AC_MSG_CHECKING([if build directory is on local disk])
@@ -1205,6 +1276,7 @@
   fi
 ])
 
+###############################################################################
 # Check for support for specific options in bash
 AC_DEFUN_ONCE([BASIC_CHECK_BASH_OPTIONS],
 [
@@ -1260,6 +1332,26 @@
   AC_SUBST(DEFAULT_MAKE_TARGET)
 ])
 
+###############################################################################
+# Setup the default value for LOG=
+#
+AC_DEFUN_ONCE([BASIC_SETUP_DEFAULT_LOG],
+[
+  AC_ARG_WITH(log, [AS_HELP_STRING([--with-log],
+      [[default vaue for make LOG argument [warn]]])])
+  AC_MSG_CHECKING([for default LOG value])
+  if test "x$with_log" = x; then
+    DEFAULT_LOG=""
+  else
+    # Syntax for valid LOG options is a bit too complex for it to be worth
+    # implementing a test for correctness in configure. Just accept it.
+    DEFAULT_LOG=$with_log
+  fi
+  AC_MSG_RESULT([$DEFAULT_LOG])
+  AC_SUBST(DEFAULT_LOG)
+])
+
+###############################################################################
 # Code to run after AC_OUTPUT
 AC_DEFUN_ONCE([BASIC_POST_CONFIG_OUTPUT],
 [
--- a/make/autoconf/configure.ac	Thu Apr 12 14:11:42 2018 +0100
+++ b/make/autoconf/configure.ac	Thu Apr 12 16:25:29 2018 -0700
@@ -120,6 +120,7 @@
 
 # Misc basic settings
 BASIC_SETUP_DEFAULT_MAKE_TARGET
+BASIC_SETUP_DEFAULT_LOG
 
 ###############################################################################
 #
@@ -272,7 +273,7 @@
 CUSTOM_LATE_HOOK
 
 # This needs to be done after CUSTOM_LATE_HOOK since we can setup custom features.
-HOTSPOT_VALIDATE_JVM_FEATURES
+HOTSPOT_FINALIZE_JVM_FEATURES
 
 # Did user specify any unknown variables?
 BASIC_CHECK_LEFTOVER_OVERRIDDEN
--- a/make/autoconf/help.m4	Thu Apr 12 14:11:42 2018 +0100
+++ b/make/autoconf/help.m4	Thu Apr 12 16:25:29 2018 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -213,8 +213,16 @@
   printf "Configuration summary:\n"
   printf "* Debug level:    $DEBUG_LEVEL\n"
   printf "* HS debug level: $HOTSPOT_DEBUG_LEVEL\n"
-  printf "* JDK variant:    $JDK_VARIANT\n"
   printf "* JVM variants:   $JVM_VARIANTS\n"
+  printf "* JVM features:   "
+
+  for variant in $JVM_VARIANTS; do
+    features_var_name=JVM_FEATURES_$variant
+    JVM_FEATURES_FOR_VARIANT=${!features_var_name}
+    printf "$variant: \'$JVM_FEATURES_FOR_VARIANT\' "
+  done
+  printf "\n"
+
   printf "* OpenJDK target: OS: $OPENJDK_TARGET_OS, CPU architecture: $OPENJDK_TARGET_CPU_ARCH, address length: $OPENJDK_TARGET_CPU_BITS\n"
   printf "* Version string: $VERSION_STRING ($VERSION_SHORT)\n"
 
--- a/make/autoconf/hotspot.m4	Thu Apr 12 14:11:42 2018 +0100
+++ b/make/autoconf/hotspot.m4	Thu Apr 12 16:25:29 2018 -0700
@@ -93,22 +93,16 @@
   AC_MSG_RESULT([$JVM_VARIANTS])
 
   # Check that the selected variants are valid
-
-  # grep filter function inspired by a comment to http://stackoverflow.com/a/1617326
-  # Notice that the original variant failes on SLES 10 and 11
-  NEEDLE=${VALID_JVM_VARIANTS// /$'\n'}
-  STACK=${JVM_VARIANTS// /$'\n'}
-  INVALID_VARIANTS=`$GREP -Fvx "${NEEDLE}" <<< "${STACK}"`
+  BASIC_GET_NON_MATCHING_VALUES(INVALID_VARIANTS, $JVM_VARIANTS, $VALID_JVM_VARIANTS)
   if test "x$INVALID_VARIANTS" != x; then
-    AC_MSG_NOTICE([Unknown variant(s) specified: $INVALID_VARIANTS])
-    AC_MSG_ERROR([The available JVM variants are: $VALID_JVM_VARIANTS])
+    AC_MSG_NOTICE([Unknown variant(s) specified: "$INVALID_VARIANTS"])
+    AC_MSG_NOTICE([The available JVM variants are: "$VALID_JVM_VARIANTS"])
+    AC_MSG_ERROR([Cannot continue])
   fi
 
   # All "special" variants share the same output directory ("server")
   VALID_MULTIPLE_JVM_VARIANTS="server client minimal"
-  NEEDLE=${VALID_MULTIPLE_JVM_VARIANTS// /$'\n'}
-  STACK=${JVM_VARIANTS// /$'\n'}
-  INVALID_MULTIPLE_VARIANTS=`$GREP -Fvx "${NEEDLE}" <<< "${STACK}"`
+  BASIC_GET_NON_MATCHING_VALUES(INVALID_MULTIPLE_VARIANTS, $JVM_VARIANTS, $VALID_MULTIPLE_JVM_VARIANTS)
   if  test "x$INVALID_MULTIPLE_VARIANTS" != x && test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = xtrue; then
     AC_MSG_ERROR([You cannot build multiple variants with anything else than $VALID_MULTIPLE_JVM_VARIANTS.])
   fi
@@ -263,14 +257,30 @@
 #
 AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_FEATURES],
 [
+  # Prettify the VALID_JVM_FEATURES string
+  BASIC_SORT_LIST(VALID_JVM_FEATURES, $VALID_JVM_FEATURES)
+
   # The user can in some cases supply additional jvm features. For the custom
   # variant, this defines the entire variant.
   AC_ARG_WITH([jvm-features], [AS_HELP_STRING([--with-jvm-features],
-      [additional JVM features to enable (separated by comma),  use '--help' to show possible values @<:@none@:>@])])
+      [JVM features to enable (foo) or disable (-foo), separated by comma. Use '--help' to show possible values @<:@none@:>@])])
   if test "x$with_jvm_features" != x; then
-    AC_MSG_CHECKING([additional JVM features])
-    JVM_FEATURES=`$ECHO $with_jvm_features | $SED -e 's/,/ /g'`
-    AC_MSG_RESULT([$JVM_FEATURES])
+    AC_MSG_CHECKING([user specified JVM feature list])
+    USER_JVM_FEATURE_LIST=`$ECHO $with_jvm_features | $SED -e 's/,/ /g'`
+    AC_MSG_RESULT([$user_jvm_feature_list])
+    # These features will be added to all variant defaults
+    JVM_FEATURES=`$ECHO $USER_JVM_FEATURE_LIST | $AWK '{ for (i=1; i<=NF; i++) if (!match($i, /-.*/)) print $i }'`
+    # These features will be removed from all variant defaults
+    DISABLED_JVM_FEATURES=`$ECHO $USER_JVM_FEATURE_LIST | $AWK '{ for (i=1; i<=NF; i++) if (match($i, /-.*/)) print substr($i, 2) }'`
+
+    # Verify that the user has provided valid features
+    BASIC_GET_NON_MATCHING_VALUES(INVALID_FEATURES, $JVM_FEATURES $DISABLED_JVM_FEATURES, $VALID_JVM_FEATURES)
+    if test "x$INVALID_FEATURES" != x; then
+      AC_MSG_NOTICE([Unknown JVM features specified: "$INVALID_FEATURES"])
+      AC_MSG_NOTICE([The available JVM features are: "$VALID_JVM_FEATURES"])
+      AC_MSG_ERROR([Cannot continue])
+    fi
+
   fi
 
   # Override hotspot cpu definitions for ARM platforms
@@ -390,7 +400,7 @@
     NON_MINIMAL_FEATURES="$NON_MINIMAL_FEATURES cds"
   fi
 
-  # Enable features depending on variant.
+  # Enable default features depending on variant.
   JVM_FEATURES_server="compiler1 compiler2 $NON_MINIMAL_FEATURES $JVM_FEATURES $JVM_FEATURES_jvmci $JVM_FEATURES_aot $JVM_FEATURES_graal"
   JVM_FEATURES_client="compiler1 $NON_MINIMAL_FEATURES $JVM_FEATURES $JVM_FEATURES_jvmci"
   JVM_FEATURES_core="$NON_MINIMAL_FEATURES $JVM_FEATURES"
@@ -413,29 +423,29 @@
 ])
 
 ###############################################################################
-# Validate JVM features once all setup is complete, including custom setup.
+# Finalize JVM features once all setup is complete, including custom setup.
 #
-AC_DEFUN_ONCE([HOTSPOT_VALIDATE_JVM_FEATURES],
+AC_DEFUN_ONCE([HOTSPOT_FINALIZE_JVM_FEATURES],
 [
-  # Keep feature lists sorted and free of duplicates
-  JVM_FEATURES_server="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_server | $SORT -u))"
-  JVM_FEATURES_client="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_client | $SORT -u))"
-  JVM_FEATURES_core="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_core | $SORT -u))"
-  JVM_FEATURES_minimal="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_minimal | $SORT -u))"
-  JVM_FEATURES_zero="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_zero | $SORT -u))"
-  JVM_FEATURES_custom="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_custom | $SORT -u))"
-
-  # Validate features
   for variant in $JVM_VARIANTS; do
     AC_MSG_CHECKING([JVM features for JVM variant '$variant'])
     features_var_name=JVM_FEATURES_$variant
-    JVM_FEATURES_TO_TEST=${!features_var_name}
-    AC_MSG_RESULT([$JVM_FEATURES_TO_TEST])
-    NEEDLE=${VALID_JVM_FEATURES// /$'\n'}
-    STACK=${JVM_FEATURES_TO_TEST// /$'\n'}
-    INVALID_FEATURES=`$GREP -Fvx "${NEEDLE}" <<< "${STACK}"`
+    JVM_FEATURES_FOR_VARIANT=${!features_var_name}
+
+    # Filter out user-requested disabled features
+    BASIC_GET_NON_MATCHING_VALUES(JVM_FEATURES_FOR_VARIANT, $JVM_FEATURES_FOR_VARIANT, $DISABLED_JVM_FEATURES)
+
+    # Keep feature lists sorted and free of duplicates
+    BASIC_SORT_LIST(JVM_FEATURES_FOR_VARIANT, $JVM_FEATURES_FOR_VARIANT)
+
+    # Update real feature set variable
+    eval $features_var_name='"'$JVM_FEATURES_FOR_VARIANT'"'
+    AC_MSG_RESULT(["$JVM_FEATURES_FOR_VARIANT"])
+
+    # Validate features (for configure script errors, not user errors)
+    INVALID_FEATURES=`$GREP -Fvx "${VALID_JVM_FEATURES// /$'\n'}" <<< "${JVM_FEATURES_FOR_VARIANT// /$'\n'}"`
     if test "x$INVALID_FEATURES" != x; then
-      AC_MSG_ERROR([Invalid JVM feature(s): $INVALID_FEATURES])
+      AC_MSG_ERROR([Internal configure script error. Invalid JVM feature(s): $INVALID_FEATURES])
     fi
   done
 ])
--- a/make/autoconf/spec.gmk.in	Thu Apr 12 14:11:42 2018 +0100
+++ b/make/autoconf/spec.gmk.in	Thu Apr 12 16:25:29 2018 -0700
@@ -332,6 +332,7 @@
 
 # Default make target
 DEFAULT_MAKE_TARGET:=@DEFAULT_MAKE_TARGET@
+DEFAULT_LOG:=@DEFAULT_LOG@
 
 FREETYPE_TO_USE:=@FREETYPE_TO_USE@
 FREETYPE_LIBS:=@FREETYPE_LIBS@
--- a/make/conf/jib-profiles.js	Thu Apr 12 14:11:42 2018 +0100
+++ b/make/conf/jib-profiles.js	Thu Apr 12 16:25:29 2018 -0700
@@ -497,8 +497,10 @@
             configure_args: [
                 "--with-jvm-variants=minimal1,client",
                 "--with-x=" + input.get("devkit", "install_path") + "/arm-linux-gnueabihf/libc/usr/X11R6-PI",
+                "--with-fontconfig=" + input.get("devkit", "install_path") + "/arm-linux-gnueabihf/libc/usr/X11R6-PI",
                 "--openjdk-target=arm-linux-gnueabihf",
-                "--with-abi-profile=arm-vfp-hflt"
+                "--with-abi-profile=arm-vfp-hflt",
+                "--with-freetype=bundled"
             ],
         },
 
--- a/make/gensrc/GensrcCLDR.gmk	Thu Apr 12 14:11:42 2018 +0100
+++ b/make/gensrc/GensrcCLDR.gmk	Thu Apr 12 16:25:29 2018 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 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
@@ -34,19 +34,28 @@
 
 CLDR_BASE_LOCALES := "en-US"
 
+ZONENAME_TEMPLATE := $(TOPDIR)/src/java.base/share/classes/java/time/format/ZoneName.java.template
+
 $(CLDR_BASEMETAINFO_FILE): $(wildcard $(CLDRSRCDIR)/common/dtd/*.dtd) \
     $(wildcard $(CLDRSRCDIR)/common/main/en*.xml) \
     $(wildcard $(CLDRSRCDIR)/common/supplemental/*.xml) \
+    $(ZONENAME_TEMPLATE) \
     $(BUILD_TOOLS_JDK)
 	$(MKDIR) -p $(GENSRC_BASEDIR)
-	$(TOOL_CLDRCONVERTER) -base $(CLDRSRCDIR) -baselocales $(CLDR_BASE_LOCALES) -basemodule -o $(GENSRC_BASEDIR)
+	$(TOOL_CLDRCONVERTER) -base $(CLDRSRCDIR) \
+	    -baselocales $(CLDR_BASE_LOCALES) \
+	    -o $(GENSRC_BASEDIR) \
+	    -basemodule \
+	    -zntempfile $(ZONENAME_TEMPLATE)
 
 $(CLDR_METAINFO_FILE): $(wildcard $(CLDRSRCDIR)/common/dtd/*.dtd) \
     $(wildcard $(CLDRSRCDIR)/common/main/*.xml) \
     $(wildcard $(CLDRSRCDIR)/common/supplemental/*.xml) \
     $(BUILD_TOOLS_JDK)
 	$(MKDIR) -p $(GENSRC_DIR)
-	$(TOOL_CLDRCONVERTER) -base $(CLDRSRCDIR) -baselocales $(CLDR_BASE_LOCALES) -o $(GENSRC_DIR)
+	$(TOOL_CLDRCONVERTER) -base $(CLDRSRCDIR) \
+	    -baselocales $(CLDR_BASE_LOCALES) \
+	    -o $(GENSRC_DIR)
 
 GENSRC_JAVA_BASE += $(CLDR_BASEMETAINFO_FILE)
 GENSRC_JDK_LOCALEDATA += $(CLDR_METAINFO_FILE)
--- a/make/jdk/src/classes/build/tools/cldrconverter/CLDRConverter.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/make/jdk/src/classes/build/tools/cldrconverter/CLDRConverter.java	Thu Apr 12 16:25:29 2018 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -28,16 +28,15 @@
 import static build.tools.cldrconverter.Bundle.jreTimeZoneNames;
 import build.tools.cldrconverter.BundleGenerator.BundleType;
 import java.io.File;
-import java.nio.file.DirectoryStream;
-import java.nio.file.FileSystems;
-import java.nio.file.Files;
-import java.nio.file.Path;
+import java.nio.file.*;
+import java.time.*;
 import java.util.*;
 import java.util.ResourceBundle.Control;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
+import java.util.stream.Stream;
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 import org.xml.sax.SAXNotRecognizedException;
@@ -56,12 +55,13 @@
     static final String BCP47_LDML_DTD_SYSTEM_ID = "http://www.unicode.org/cldr/dtd/2.0/ldmlBCP47.dtd";
 
 
-    private static String CLDR_BASE = "../CLDR/21.0.1/";
+    private static String CLDR_BASE;
     static String LOCAL_LDML_DTD;
     static String LOCAL_SPPL_LDML_DTD;
     static String LOCAL_BCP47_LDML_DTD;
     private static String SOURCE_FILE_DIR;
     private static String SPPL_SOURCE_FILE;
+    private static String SPPL_META_SOURCE_FILE;
     private static String NUMBERING_SOURCE_FILE;
     private static String METAZONES_SOURCE_FILE;
     private static String LIKELYSUBTAGS_SOURCE_FILE;
@@ -85,6 +85,7 @@
     static final String PARENT_LOCALE_PREFIX = "parentLocale.";
 
     private static SupplementDataParseHandler handlerSuppl;
+    private static SupplementalMetadataParseHandler handlerSupplMeta;
     private static LikelySubtagsParseHandler handlerLikelySubtags;
     static NumberingSystemsParseHandler handlerNumbering;
     static MetaZonesParseHandler handlerMetaZones;
@@ -100,6 +101,9 @@
     private static final ResourceBundle.Control defCon =
         ResourceBundle.Control.getControl(ResourceBundle.Control.FORMAT_DEFAULT);
 
+    private static final String[] AVAILABLE_TZIDS = TimeZone.getAvailableIDs();
+    private static String zoneNameTempFile;
+
     static enum DraftType {
         UNCONFIRMED,
         PROVISIONAL,
@@ -195,6 +199,10 @@
                         verbose = true;
                         break;
 
+                    case "-zntempfile":
+                        zoneNameTempFile = args[++i];
+                        break;
+
                     case "-help":
                         usage();
                         System.exit(0);
@@ -221,6 +229,7 @@
         NUMBERING_SOURCE_FILE = CLDR_BASE + "/supplemental/numberingSystems.xml";
         METAZONES_SOURCE_FILE = CLDR_BASE + "/supplemental/metaZones.xml";
         TIMEZONE_SOURCE_FILE = CLDR_BASE + "/bcp47/timezone.xml";
+        SPPL_META_SOURCE_FILE = CLDR_BASE + "/supplemental/supplementalMetadata.xml";
 
         if (BASE_LOCALES.isEmpty()) {
             setupBaseLocales("en-US");
@@ -234,6 +243,11 @@
 
         List<Bundle> bundles = readBundleList();
         convertBundles(bundles);
+
+        // Generate java.time.format.ZoneName.java
+        if (isBaseModule) {
+            generateZoneName();
+        }
     }
 
     private static void usage() {
@@ -246,7 +260,7 @@
                 + "\t-basemodule    generates bundles that go into java.base module%n"
                 + "\t-baselocales loc(,loc)*      locales that go into the base module%n"
                 + "\t-o dir         output directory (default: ./build/gensrc)%n"
-                + "\t-o dir         output directory (defaut: ./build/gensrc)%n"
+                + "\t-zntempfile    template file for java.time.format.ZoneName.java%n"
                 + "\t-utf8          use UTF-8 rather than \\uxxxx (for debug)%n");
     }
 
@@ -401,6 +415,11 @@
         // Parse likelySubtags
         handlerLikelySubtags = new LikelySubtagsParseHandler();
         parseLDMLFile(new File(LIKELYSUBTAGS_SOURCE_FILE), handlerLikelySubtags);
+
+        // Parse supplementalMetadata
+        // Currently only interested in deprecated time zone ids.
+        handlerSupplMeta = new SupplementalMetadataParseHandler();
+        parseLDMLFile(new File(SPPL_META_SOURCE_FILE), handlerSupplMeta);
     }
 
     // Parsers for data in "bcp47" directory
@@ -656,13 +675,16 @@
             });
         }
 
-        for (String tzid : handlerMetaZones.keySet()) {
-            String tzKey = TIMEZONE_ID_PREFIX + tzid;
-            Object data = map.get(tzKey);
+        Arrays.stream(AVAILABLE_TZIDS).forEach(tzid -> {
+            // If the tzid is deprecated, get the data for the replacement id
+            String tzKey = Optional.ofNullable((String)handlerSupplMeta.get(tzid))
+                                   .orElse(tzid);
+            Object data = map.get(TIMEZONE_ID_PREFIX + tzKey);
+
             if (data instanceof String[]) {
                 names.put(tzid, data);
             } else {
-                String meta = handlerMetaZones.get(tzid);
+                String meta = handlerMetaZones.get(tzKey);
                 if (meta != null) {
                     String metaKey = METAZONE_ID_PREFIX + meta;
                     data = map.get(metaKey);
@@ -673,7 +695,8 @@
                     }
                 }
             }
-        }
+        });
+
         return names;
     }
 
@@ -948,4 +971,44 @@
 
         return candidates;
     }
+
+    private static void generateZoneName() throws Exception {
+        Files.createDirectories(Paths.get(DESTINATION_DIR, "java", "time", "format"));
+        Files.write(Paths.get(DESTINATION_DIR, "java", "time", "format", "ZoneName.java"),
+            Files.lines(Paths.get(zoneNameTempFile))
+                .flatMap(l -> {
+                    if (l.equals("%%%%ZIDMAP%%%%")) {
+                        return zidMapEntry();
+                    } else if (l.equals("%%%%MZONEMAP%%%%")) {
+                        return handlerMetaZones.mzoneMapEntry();
+                    } else if (l.equals("%%%%DEPRECATED%%%%")) {
+                        return handlerSupplMeta.deprecatedMap();
+                    } else {
+                        return Stream.of(l);
+                    }
+                })
+                .collect(Collectors.toList()),
+            StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
+    }
+
+    private static Stream<String> zidMapEntry() {
+        Map<String, String> canonMap = new HashMap<>();
+        handlerTimeZone.getData().entrySet().stream()
+            .forEach(e -> {
+                String[] ids = ((String)e.getValue()).split("\\s");
+                for (int i = 1; i < ids.length; i++) {
+                    canonMap.put(ids[i], ids[0]);
+                }});
+        return ZoneId.getAvailableZoneIds().stream()
+                .map(id -> {
+                    String canonId = canonMap.getOrDefault(id, id);
+                    String meta = handlerMetaZones.get(canonId);
+                    String zone001 = handlerMetaZones.zidMap().get(meta);
+                    return zone001 == null ? "" :
+                            String.format("        \"%s\", \"%s\", \"%s\",",
+                                            id, meta, zone001);
+                })
+                .filter(s -> !s.isEmpty())
+                .sorted();
+    }
 }
--- a/make/jdk/src/classes/build/tools/cldrconverter/MetaZonesParseHandler.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/make/jdk/src/classes/build/tools/cldrconverter/MetaZonesParseHandler.java	Thu Apr 12 16:25:29 2018 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -27,6 +27,9 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.util.*;
+import java.util.stream.*;
+
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -34,6 +37,10 @@
 class MetaZonesParseHandler extends AbstractLDMLHandler<String> {
     private String tzid, metazone;
 
+    // for java.time.format.ZoneNames.java
+    private List<String> mzoneMapEntryList = new ArrayList<>();
+    private Map<String, String> zones = new HashMap<>();
+
     MetaZonesParseHandler() {
     }
 
@@ -64,6 +71,19 @@
             pushIgnoredContainer(qName);
             break;
 
+        case "mapZone":
+            String territory = attributes.getValue("territory");
+            if (territory.equals("001")) {
+                zones.put(attributes.getValue("other"), attributes.getValue("type"));
+            } else {
+                mzoneMapEntryList.add(String.format("        \"%s\", \"%s\", \"%s\",",
+                    attributes.getValue("other"),
+                    territory,
+                    attributes.getValue("type")));
+            }
+            pushIgnoredContainer(qName);
+            break;
+
         case "version":
         case "generation":
             pushIgnoredContainer(qName);
@@ -89,4 +109,12 @@
         }
         currentContainer = currentContainer.getParent();
     }
+
+    public Map<String, String> zidMap() {
+        return zones;
+    }
+
+    public Stream<String> mzoneMapEntry() {
+        return mzoneMapEntryList.stream();
+    }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/jdk/src/classes/build/tools/cldrconverter/SupplementalMetadataParseHandler.java	Thu Apr 12 16:25:29 2018 -0700
@@ -0,0 +1,72 @@
+/*
+ * 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.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package build.tools.cldrconverter;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.stream.Stream;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+/**
+ * Handles parsing of files in Locale Data Markup Language for
+ * SupplementalMetadata.xml
+ */
+
+class SupplementalMetadataParseHandler extends AbstractLDMLHandler<Object> {
+    @Override
+    public InputSource resolveEntity(String publicID, String systemID) throws IOException, SAXException {
+        // avoid HTTP traffic to unicode.org
+        if (systemID.startsWith(CLDRConverter.SPPL_LDML_DTD_SYSTEM_ID)) {
+            return new InputSource((new File(CLDRConverter.LOCAL_SPPL_LDML_DTD)).toURI().toString());
+        }
+        return null;
+    }
+
+    @Override
+    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+        switch (qName) {
+        case "zoneAlias":
+            String reason = attributes.getValue("reason");
+            if ("deprecated".equals(reason)) {
+                put(attributes.getValue("type"), attributes.getValue("replacement"));
+            }
+            pushIgnoredContainer(qName);
+            break;
+        default:
+            // treat anything else as a container
+            pushContainer(qName, attributes);
+            break;
+        }
+    }
+
+    public Stream<String> deprecatedMap() {
+        return keySet().stream()
+                .map(k -> String.format("        \"%s\", \"%s\",", k, get(k)))
+                .sorted();
+    }
+}
--- a/src/java.base/linux/classes/sun/nio/fs/LinuxFileStore.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/java.base/linux/classes/sun/nio/fs/LinuxFileStore.java	Thu Apr 12 16:25:29 2018 -0700
@@ -140,10 +140,12 @@
             if ((entry().hasOption("user_xattr")))
                 return true;
 
-            // user_xattr option not present but we special-case ext3/4 as we
-            // know that extended attributes are not enabled by default.
-            if (entry().fstype().equals("ext3") || entry().fstype().equals("ext4"))
-                return false;
+            // for ext3 and ext4 user_xattr option is enabled by default so
+            // check for explicit disabling of this option
+            if (entry().fstype().equals("ext3") ||
+                entry().fstype().equals("ext4")) {
+                return !entry().hasOption("nouser_xattr");
+            }
 
             // not ext3/4 so probe mount point
             if (!xattrChecked) {
--- a/src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java	Thu Apr 12 16:25:29 2018 -0700
@@ -49,6 +49,18 @@
                                Object info,
                                // Caller information:
                                Class<?> callerClass) {
+        // Restrict bootstrap methods to those whose first parameter is Lookup
+        // The motivation here is, in the future, to possibly support BSMs
+        // that do not accept the meta-data of lookup/name/type, thereby
+        // allowing the co-opting of existing methods to be used as BSMs as
+        // long as the static arguments can be passed as method arguments
+        MethodType mt = bootstrapMethod.type();
+        if (mt.parameterCount() < 2 ||
+            !MethodHandles.Lookup.class.isAssignableFrom(mt.parameterType(0))) {
+            throw new BootstrapMethodError(
+                    "Invalid bootstrap method declared for resolving a dynamic constant: " + bootstrapMethod);
+        }
+
         // BSMI.invoke handles all type checking and exception translation.
         // If type is not a reference type, the JVM is expecting a boxed
         // version, and will manage unboxing on the other side.
--- a/src/java.base/share/classes/java/lang/invoke/package-info.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/java.base/share/classes/java/lang/invoke/package-info.java	Thu Apr 12 16:25:29 2018 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 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
@@ -122,8 +122,11 @@
  * On success the call site then becomes permanently linked to the {@code invokedynamic}
  * instruction.
  * <p>
- * For a dynamically-computed constant, the result of the bootstrap method is cached
- * as the resolved constant value.
+ * For a dynamically-computed constant, the first parameter of the bootstrap
+ * method must be assignable to {@code MethodHandles.Lookup}. If this condition
+ * is not met, a {@code BootstrapMethodError} is thrown.
+ * On success the result of the bootstrap method is cached as the resolved
+ * constant value.
  * <p>
  * If an exception, {@code E} say, occurs during execution of the bootstrap method, then
  * resolution fails and terminates abnormally. {@code E} is rethrown if the type of
@@ -171,16 +174,25 @@
  * <h2>Types of bootstrap methods</h2>
  * For a dynamically-computed call site, the bootstrap method is invoked with parameter
  * types {@code MethodHandles.Lookup}, {@code String}, {@code MethodType}, and the types
- * of any static arguments; the return type is {@code CallSite}. For a
- * dynamically-computed constant, the bootstrap method is invoked with parameter types
+ * of any static arguments; the return type is {@code CallSite}.
+ * <p>
+ * For a dynamically-computed constant, the bootstrap method is invoked with parameter types
  * {@code MethodHandles.Lookup}, {@code String}, {@code Class}, and the types of any
  * static arguments; the return type is the type represented by the {@code Class}.
- *
+ * <p>
  * Because {@link java.lang.invoke.MethodHandle#invoke MethodHandle.invoke} allows for
- * adaptations between the invoked method type and the method handle's method type,
+ * adaptations between the invoked method type and the bootstrap method handle's method type,
  * there is flexibility in the declaration of the bootstrap method.
- * For example, the first argument could be {@code Object}
- * instead of {@code MethodHandles.Lookup}, and the return type
+ * For a dynamically-computed constant the first parameter type of the bootstrap method handle
+ * must be assignable to {@code MethodHandles.Lookup}, other than that constraint the same degree
+ * of flexibility applies to bootstrap methods of dynamically-computed call sites and
+ * dynamically-computed constants.
+ * Note: this constraint allows for the future possibility where the bootstrap method is
+ * invoked with just the parameter types of static arguments, thereby supporting a wider
+ * range of methods compatible with the static arguments (such as methods that don't declare
+ * or require the lookup, name, and type meta-data parameters).
+ * <p> For example, for dynamically-computed call site, a the first argument
+ * could be {@code Object} instead of {@code MethodHandles.Lookup}, and the return type
  * could also be {@code Object} instead of {@code CallSite}.
  * (Note that the types and number of the stacked arguments limit
  * the legal kinds of bootstrap methods to appropriately typed
@@ -227,7 +239,10 @@
  * {@code String} and {@code Integer} (or {@code int}), respectively.
  * The second-to-last example assumes that all extra arguments are of type
  * {@code String}.
- * The other examples work with all types of extra arguments.
+ * The other examples work with all types of extra arguments.  Note that all
+ * the examples except the second and third also work with dynamically-computed
+ * constants if the return type is changed to be compatible with the
+ * constant's declared type (such as {@code Object}, which is always compatible).
  * <p>
  * Since dynamically-computed constants can be provided as static arguments to bootstrap
  * methods, there are no limitations on the types of bootstrap arguments.
--- a/src/java.base/share/classes/java/nio/Bits.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/java.base/share/classes/java/nio/Bits.java	Thu Apr 12 16:25:29 2018 -0700
@@ -65,25 +65,13 @@
 
     private static final Unsafe UNSAFE = Unsafe.getUnsafe();
 
-    static Unsafe unsafe() {
-        return UNSAFE;
-    }
-
-
     // -- Processor and memory-system properties --
 
-    private static final ByteOrder BYTE_ORDER
-        = UNSAFE.isBigEndian() ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
-
-    static ByteOrder byteOrder() {
-        return BYTE_ORDER;
-    }
-
     private static int PAGE_SIZE = -1;
 
     static int pageSize() {
         if (PAGE_SIZE == -1)
-            PAGE_SIZE = unsafe().pageSize();
+            PAGE_SIZE = UNSAFE.pageSize();
         return PAGE_SIZE;
     }
 
--- a/src/java.base/share/classes/java/nio/Buffer.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/java.base/share/classes/java/nio/Buffer.java	Thu Apr 12 16:25:29 2018 -0700
@@ -183,7 +183,7 @@
 
 public abstract class Buffer {
     // Cached unsafe-access object
-    static final Unsafe UNSAFE = Bits.unsafe();
+    static final Unsafe UNSAFE = Unsafe.getUnsafe();
 
     /**
      * The characteristics of Spliterators that traverse and split elements
--- a/src/java.base/share/classes/java/nio/ByteOrder.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/java.base/share/classes/java/nio/ByteOrder.java	Thu Apr 12 16:25:29 2018 -0700
@@ -25,6 +25,7 @@
 
 package java.nio;
 
+import jdk.internal.misc.Unsafe;
 
 /**
  * A typesafe enumeration for byte orders.
@@ -57,6 +58,12 @@
     public static final ByteOrder LITTLE_ENDIAN
         = new ByteOrder("LITTLE_ENDIAN");
 
+    // Retrieve the native byte order. It's used early during bootstrap, and
+    // must be initialized after BIG_ENDIAN and LITTLE_ENDIAN.
+    private static final ByteOrder NATIVE_ORDER
+        = Unsafe.getUnsafe().isBigEndian()
+            ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
+
     /**
      * Retrieves the native byte order of the underlying platform.
      *
@@ -69,7 +76,7 @@
      *          virtual machine is running
      */
     public static ByteOrder nativeOrder() {
-        return Bits.byteOrder();
+        return NATIVE_ORDER;
     }
 
     /**
--- a/src/java.base/share/classes/java/nio/X-Buffer.java.template	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/java.base/share/classes/java/nio/X-Buffer.java.template	Thu Apr 12 16:25:29 2018 -0700
@@ -1579,7 +1579,7 @@
     boolean bigEndian                                   // package-private
         = true;
     boolean nativeByteOrder                             // package-private
-        = (Bits.byteOrder() == ByteOrder.BIG_ENDIAN);
+        = (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN);
 
     /**
      * Retrieves this buffer's byte order.
@@ -1608,7 +1608,7 @@
     public final $Type$Buffer order(ByteOrder bo) {
         bigEndian = (bo == ByteOrder.BIG_ENDIAN);
         nativeByteOrder =
-            (bigEndian == (Bits.byteOrder() == ByteOrder.BIG_ENDIAN));
+            (bigEndian == (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN));
         return this;
     }
 
--- a/src/java.base/share/classes/java/security/ProtectionDomain.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/java.base/share/classes/java/security/ProtectionDomain.java	Thu Apr 12 16:25:29 2018 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 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
@@ -33,8 +33,6 @@
 import java.util.Objects;
 import java.util.WeakHashMap;
 import jdk.internal.misc.JavaSecurityAccess;
-import jdk.internal.misc.JavaSecurityProtectionDomainAccess;
-import static jdk.internal.misc.JavaSecurityProtectionDomainAccess.ProtectionDomainCache;
 import jdk.internal.misc.SharedSecrets;
 import sun.security.action.GetPropertyAction;
 import sun.security.provider.PolicyFile;
@@ -110,6 +108,21 @@
 
             return new AccessControlContext(stack.getContext(), acc).optimize();
         }
+
+        @Override
+        public ProtectionDomainCache getProtectionDomainCache() {
+            return new ProtectionDomainCache() {
+                private final Map<Key, PermissionCollection> map =
+                        Collections.synchronizedMap(new WeakHashMap<>());
+                public void put(ProtectionDomain pd,
+                                PermissionCollection pc) {
+                    map.put((pd == null ? null : pd.key), pc);
+                }
+                public PermissionCollection get(ProtectionDomain pd) {
+                    return pd == null ? map.get(null) : map.get(pd.key);
+                }
+            };
+        }
     }
 
     static {
@@ -560,23 +573,4 @@
      */
     final class Key {}
 
-    static {
-        SharedSecrets.setJavaSecurityProtectionDomainAccess(
-            new JavaSecurityProtectionDomainAccess() {
-                public ProtectionDomainCache getProtectionDomainCache() {
-                    return new ProtectionDomainCache() {
-                        private final Map<Key, PermissionCollection> map =
-                            Collections.synchronizedMap
-                                (new WeakHashMap<Key, PermissionCollection>());
-                        public void put(ProtectionDomain pd,
-                            PermissionCollection pc) {
-                            map.put((pd == null ? null : pd.key), pc);
-                        }
-                        public PermissionCollection get(ProtectionDomain pd) {
-                            return pd == null ? map.get(null) : map.get(pd.key);
-                        }
-                    };
-                }
-            });
-    }
 }
--- a/src/java.base/share/classes/java/time/format/ZoneName.java	Thu Apr 12 14:11:42 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,798 +0,0 @@
-/*
- * Copyright (c) 2013, 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.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package java.time.format;
-
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-/**
- * A helper class to map a zone name to metazone and back to the
- * appropriate zone id for the particular locale.
- * <p>
- * The zid<->metazone mappings are based on CLDR metaZones.xml.
- * The alias mappings are based on Link entries in tzdb data files.
- */
-class ZoneName {
-
-    public static String toZid(String zid, Locale locale) {
-        String mzone = zidToMzone.get(zid);
-        if (mzone == null && aliases.containsKey(zid)) {
-            zid = aliases.get(zid);
-            mzone = zidToMzone.get(zid);
-        }
-        if (mzone != null) {
-            Map<String, String> map = mzoneToZidL.get(mzone);
-            if (map != null && map.containsKey(locale.getCountry())) {
-                zid = map.get(locale.getCountry());
-            } else {
-                zid = mzoneToZid.get(mzone);
-            }
-        }
-        return toZid(zid);
-    }
-
-    public static String toZid(String zid) {
-        if (aliases.containsKey(zid)) {
-            return aliases.get(zid);
-        }
-        return zid;
-    }
-
-    private static final String[] zidMap = new String[] {
-        "Pacific/Rarotonga", "Cook", "Pacific/Rarotonga",
-        "Europe/Tirane", "Europe_Central", "Europe/Paris",
-        "America/Recife", "Brasilia", "America/Sao_Paulo",
-        "America/Argentina/San_Juan", "Argentina", "America/Buenos_Aires",
-        "Asia/Kolkata", "India", "Asia/Calcutta",
-        "America/Guayaquil", "Ecuador", "America/Guayaquil",
-        "Europe/Samara", "Moscow", "Europe/Moscow",
-        "Indian/Antananarivo", "Africa_Eastern", "Africa/Nairobi",
-        "America/Santa_Isabel", "America_Pacific", "America/Los_Angeles",
-        "America/Montserrat", "Atlantic", "America/Halifax",
-        "Pacific/Port_Moresby", "Papua_New_Guinea", "Pacific/Port_Moresby",
-        "Europe/Paris", "Europe_Central", "Europe/Paris",
-        "America/Argentina/Salta", "Argentina", "America/Buenos_Aires",
-        "Asia/Omsk", "Omsk", "Asia/Omsk",
-        "Africa/Ceuta", "Europe_Central", "Europe/Paris",
-        "America/Argentina/San_Luis", "Argentina_Western", "America/Argentina/San_Luis",
-        "America/Atikokan", "America_Eastern", "America/New_York",
-        "Asia/Vladivostok", "Vladivostok", "Asia/Vladivostok",
-        "America/Argentina/Jujuy", "Argentina", "America/Buenos_Aires",
-        "Asia/Almaty", "Kazakhstan_Eastern", "Asia/Almaty",
-        "Atlantic/Canary", "Europe_Western", "Atlantic/Canary",
-        "Asia/Bangkok", "Indochina", "Asia/Saigon",
-        "America/Caracas", "Venezuela", "America/Caracas",
-        "Australia/Hobart", "Australia_Eastern", "Australia/Sydney",
-        "America/Havana", "Cuba", "America/Havana",
-        "Africa/Malabo", "Africa_Western", "Africa/Lagos",
-        "Australia/Lord_Howe", "Lord_Howe", "Australia/Lord_Howe",
-        "Pacific/Fakaofo", "Tokelau", "Pacific/Fakaofo",
-        "America/Matamoros", "America_Central", "America/Chicago",
-        "America/Guadeloupe", "Atlantic", "America/Halifax",
-        "Europe/Helsinki", "Europe_Eastern", "Europe/Bucharest",
-        "Asia/Calcutta", "India", "Asia/Calcutta",
-        "Africa/Kinshasa", "Africa_Western", "Africa/Lagos",
-        "America/Miquelon", "Pierre_Miquelon", "America/Miquelon",
-        "Europe/Athens", "Europe_Eastern", "Europe/Bucharest",
-        "Asia/Novosibirsk", "Novosibirsk", "Asia/Novosibirsk",
-        "Indian/Cocos", "Cocos", "Indian/Cocos",
-        "Africa/Bujumbura", "Africa_Central", "Africa/Maputo",
-        "Europe/Mariehamn", "Europe_Eastern", "Europe/Bucharest",
-        "America/Winnipeg", "America_Central", "America/Chicago",
-        "America/Buenos_Aires", "Argentina", "America/Buenos_Aires",
-        "America/Yellowknife", "America_Mountain", "America/Denver",
-        "Pacific/Midway", "Samoa", "Pacific/Apia",
-        "Africa/Dar_es_Salaam", "Africa_Eastern", "Africa/Nairobi",
-        "Pacific/Tahiti", "Tahiti", "Pacific/Tahiti",
-        "Asia/Gaza", "Europe_Eastern", "Europe/Bucharest",
-        "Australia/Lindeman", "Australia_Eastern", "Australia/Sydney",
-        "Europe/Kaliningrad", "Europe_Eastern", "Europe/Bucharest",
-        "Europe/Bucharest", "Europe_Eastern", "Europe/Bucharest",
-        "America/Lower_Princes", "Atlantic", "America/Halifax",
-        "Pacific/Chuuk", "Truk", "Pacific/Truk",
-        "America/Anchorage", "Alaska", "America/Juneau",
-        "America/Rankin_Inlet", "America_Central", "America/Chicago",
-        "America/Marigot", "Atlantic", "America/Halifax",
-        "Africa/Juba", "Africa_Eastern", "Africa/Nairobi",
-        "Africa/Algiers", "Europe_Central", "Europe/Paris",
-        "Europe/Kiev", "Europe_Eastern", "Europe/Bucharest",
-        "America/Santarem", "Brasilia", "America/Sao_Paulo",
-        "Africa/Brazzaville", "Africa_Western", "Africa/Lagos",
-        "Asia/Choibalsan", "Choibalsan", "Asia/Choibalsan",
-        "Indian/Christmas", "Christmas", "Indian/Christmas",
-        "America/Nassau", "America_Eastern", "America/New_York",
-        "Africa/Tunis", "Europe_Central", "Europe/Paris",
-        "Pacific/Noumea", "New_Caledonia", "Pacific/Noumea",
-        "Africa/El_Aaiun", "Europe_Western", "Atlantic/Canary",
-        "Europe/Sarajevo", "Europe_Central", "Europe/Paris",
-        "America/Campo_Grande", "Amazon", "America/Manaus",
-        "America/Puerto_Rico", "Atlantic", "America/Halifax",
-        "Antarctica/Mawson", "Mawson", "Antarctica/Mawson",
-        "Pacific/Galapagos", "Galapagos", "Pacific/Galapagos",
-        "Asia/Tehran", "Iran", "Asia/Tehran",
-        "America/Port-au-Prince", "America_Eastern", "America/New_York",
-        "America/Scoresbysund", "Greenland_Eastern", "America/Scoresbysund",
-        "Africa/Harare", "Africa_Central", "Africa/Maputo",
-        "America/Dominica", "Atlantic", "America/Halifax",
-        "Europe/Chisinau", "Europe_Eastern", "Europe/Bucharest",
-        "America/Chihuahua", "America_Mountain", "America/Denver",
-        "America/La_Paz", "Bolivia", "America/La_Paz",
-        "Indian/Chagos", "Indian_Ocean", "Indian/Chagos",
-        "Australia/Broken_Hill", "Australia_Central", "Australia/Adelaide",
-        "America/Grenada", "Atlantic", "America/Halifax",
-        "America/North_Dakota/New_Salem", "America_Central", "America/Chicago",
-        "Pacific/Majuro", "Marshall_Islands", "Pacific/Majuro",
-        "Australia/Adelaide", "Australia_Central", "Australia/Adelaide",
-        "Europe/Warsaw", "Europe_Central", "Europe/Paris",
-        "Europe/Vienna", "Europe_Central", "Europe/Paris",
-        "Atlantic/Cape_Verde", "Cape_Verde", "Atlantic/Cape_Verde",
-        "America/Mendoza", "Argentina", "America/Buenos_Aires",
-        "Pacific/Gambier", "Gambier", "Pacific/Gambier",
-        "Europe/Istanbul", "Europe_Eastern", "Europe/Bucharest",
-        "America/Kentucky/Monticello", "America_Eastern", "America/New_York",
-        "America/Chicago", "America_Central", "America/Chicago",
-        "Asia/Ulaanbaatar", "Mongolia", "Asia/Ulaanbaatar",
-        "Indian/Maldives", "Maldives", "Indian/Maldives",
-        "America/Mexico_City", "America_Central", "America/Chicago",
-        "Africa/Asmara", "Africa_Eastern", "Africa/Nairobi",
-        "Asia/Chongqing", "China", "Asia/Shanghai",
-        "America/Argentina/La_Rioja", "Argentina", "America/Buenos_Aires",
-        "America/Tijuana", "America_Pacific", "America/Los_Angeles",
-        "Asia/Harbin", "China", "Asia/Shanghai",
-        "Pacific/Honolulu", "Hawaii_Aleutian", "Pacific/Honolulu",
-        "Atlantic/Azores", "Azores", "Atlantic/Azores",
-        "Indian/Mayotte", "Africa_Eastern", "Africa/Nairobi",
-        "America/Guatemala", "America_Central", "America/Chicago",
-        "America/Indianapolis", "America_Eastern", "America/New_York",
-        "America/Halifax", "Atlantic", "America/Halifax",
-        "America/Resolute", "America_Central", "America/Chicago",
-        "Europe/London", "GMT", "Atlantic/Reykjavik",
-        "America/Hermosillo", "America_Mountain", "America/Denver",
-        "Atlantic/Madeira", "Europe_Western", "Atlantic/Canary",
-        "Europe/Zagreb", "Europe_Central", "Europe/Paris",
-        "America/Boa_Vista", "Amazon", "America/Manaus",
-        "America/Regina", "America_Central", "America/Chicago",
-        "America/Cordoba", "Argentina", "America/Buenos_Aires",
-        "America/Shiprock", "America_Mountain", "America/Denver",
-        "Europe/Luxembourg", "Europe_Central", "Europe/Paris",
-        "America/Cancun", "America_Central", "America/Chicago",
-        "Pacific/Enderbury", "Phoenix_Islands", "Pacific/Enderbury",
-        "Africa/Bissau", "GMT", "Atlantic/Reykjavik",
-        "Antarctica/Vostok", "Vostok", "Antarctica/Vostok",
-        "Pacific/Apia", "Samoa", "Pacific/Apia",
-        "Australia/Perth", "Australia_Western", "Australia/Perth",
-        "America/Juneau", "Alaska", "America/Juneau",
-        "Africa/Mbabane", "Africa_Southern", "Africa/Johannesburg",
-        "Pacific/Niue", "Niue", "Pacific/Niue",
-        "Europe/Zurich", "Europe_Central", "Europe/Paris",
-        "America/Rio_Branco", "Amazon", "America/Manaus",
-        "Africa/Ndjamena", "Africa_Western", "Africa/Lagos",
-        "Asia/Macau", "China", "Asia/Shanghai",
-        "America/Lima", "Peru", "America/Lima",
-        "Africa/Windhoek", "Africa_Central", "Africa/Maputo",
-        "America/Sitka", "Alaska", "America/Juneau",
-        "America/Mazatlan", "America_Mountain", "America/Denver",
-        "Asia/Saigon", "Indochina", "Asia/Saigon",
-        "Asia/Kamchatka", "Magadan", "Asia/Magadan",
-        "America/Menominee", "America_Central", "America/Chicago",
-        "America/Belize", "America_Central", "America/Chicago",
-        "America/Sao_Paulo", "Brasilia", "America/Sao_Paulo",
-        "America/Barbados", "Atlantic", "America/Halifax",
-        "America/Porto_Velho", "Amazon", "America/Manaus",
-        "America/Costa_Rica", "America_Central", "America/Chicago",
-        "Europe/Monaco", "Europe_Central", "Europe/Paris",
-        "Europe/Riga", "Europe_Eastern", "Europe/Bucharest",
-        "Europe/Vatican", "Europe_Central", "Europe/Paris",
-        "Europe/Madrid", "Europe_Central", "Europe/Paris",
-        "Africa/Dakar", "GMT", "Atlantic/Reykjavik",
-        "Asia/Damascus", "Europe_Eastern", "Europe/Bucharest",
-        "Asia/Hong_Kong", "Hong_Kong", "Asia/Hong_Kong",
-        "America/Adak", "Hawaii_Aleutian", "Pacific/Honolulu",
-        "Europe/Vilnius", "Europe_Eastern", "Europe/Bucharest",
-        "America/Indiana/Indianapolis", "America_Eastern", "America/New_York",
-        "Africa/Freetown", "GMT", "Atlantic/Reykjavik",
-        "Atlantic/Reykjavik", "GMT", "Atlantic/Reykjavik",
-        "Asia/Ho_Chi_Minh", "Indochina", "Asia/Saigon",
-        "America/St_Kitts", "Atlantic", "America/Halifax",
-        "America/Martinique", "Atlantic", "America/Halifax",
-        "America/Thule", "Atlantic", "America/Halifax",
-        "America/Asuncion", "Paraguay", "America/Asuncion",
-        "Africa/Luanda", "Africa_Western", "Africa/Lagos",
-        "America/Monterrey", "America_Central", "America/Chicago",
-        "Pacific/Fiji", "Fiji", "Pacific/Fiji",
-        "Africa/Banjul", "GMT", "Atlantic/Reykjavik",
-        "America/Grand_Turk", "America_Eastern", "America/New_York",
-        "Pacific/Pitcairn", "Pitcairn", "Pacific/Pitcairn",
-        "America/Montevideo", "Uruguay", "America/Montevideo",
-        "America/Bahia_Banderas", "America_Central", "America/Chicago",
-        "America/Cayman", "America_Eastern", "America/New_York",
-        "Pacific/Norfolk", "Norfolk", "Pacific/Norfolk",
-        "Africa/Ouagadougou", "GMT", "Atlantic/Reykjavik",
-        "America/Maceio", "Brasilia", "America/Sao_Paulo",
-        "Pacific/Guam", "Chamorro", "Pacific/Saipan",
-        "Africa/Monrovia", "GMT", "Atlantic/Reykjavik",
-        "Africa/Bamako", "GMT", "Atlantic/Reykjavik",
-        "Asia/Colombo", "India", "Asia/Calcutta",
-        "Asia/Urumqi", "China", "Asia/Shanghai",
-        "Asia/Kabul", "Afghanistan", "Asia/Kabul",
-        "America/Yakutat", "Alaska", "America/Juneau",
-        "America/Phoenix", "America_Mountain", "America/Denver",
-        "Asia/Nicosia", "Europe_Eastern", "Europe/Bucharest",
-        "Asia/Phnom_Penh", "Indochina", "Asia/Saigon",
-        "America/Rainy_River", "America_Central", "America/Chicago",
-        "Europe/Uzhgorod", "Europe_Eastern", "Europe/Bucharest",
-        "Pacific/Saipan", "Chamorro", "Pacific/Saipan",
-        "America/St_Vincent", "Atlantic", "America/Halifax",
-        "Europe/Rome", "Europe_Central", "Europe/Paris",
-        "America/Nome", "Alaska", "America/Juneau",
-        "Africa/Mogadishu", "Africa_Eastern", "Africa/Nairobi",
-        "Europe/Zaporozhye", "Europe_Eastern", "Europe/Bucharest",
-        "Pacific/Funafuti", "Tuvalu", "Pacific/Funafuti",
-        "Atlantic/South_Georgia", "South_Georgia", "Atlantic/South_Georgia",
-        "Europe/Skopje", "Europe_Central", "Europe/Paris",
-        "Asia/Yekaterinburg", "Yekaterinburg", "Asia/Yekaterinburg",
-        "Australia/Melbourne", "Australia_Eastern", "Australia/Sydney",
-        "America/Argentina/Cordoba", "Argentina", "America/Buenos_Aires",
-        "Africa/Kigali", "Africa_Central", "Africa/Maputo",
-        "Africa/Blantyre", "Africa_Central", "Africa/Maputo",
-        "Africa/Tripoli", "Europe_Eastern", "Europe/Bucharest",
-        "Africa/Gaborone", "Africa_Central", "Africa/Maputo",
-        "Asia/Kuching", "Malaysia", "Asia/Kuching",
-        "Pacific/Nauru", "Nauru", "Pacific/Nauru",
-        "America/Aruba", "Atlantic", "America/Halifax",
-        "America/Antigua", "Atlantic", "America/Halifax",
-        "Europe/Volgograd", "Volgograd", "Europe/Volgograd",
-        "Africa/Djibouti", "Africa_Eastern", "Africa/Nairobi",
-        "America/Catamarca", "Argentina", "America/Buenos_Aires",
-        "Asia/Manila", "Philippines", "Asia/Manila",
-        "Pacific/Kiritimati", "Line_Islands", "Pacific/Kiritimati",
-        "Asia/Shanghai", "China", "Asia/Shanghai",
-        "Pacific/Truk", "Truk", "Pacific/Truk",
-        "Pacific/Tarawa", "Gilbert_Islands", "Pacific/Tarawa",
-        "Africa/Conakry", "GMT", "Atlantic/Reykjavik",
-        "Asia/Bishkek", "Kyrgystan", "Asia/Bishkek",
-        "Europe/Gibraltar", "Europe_Central", "Europe/Paris",
-        "Asia/Rangoon", "Myanmar", "Asia/Rangoon",
-        "Asia/Baku", "Azerbaijan", "Asia/Baku",
-        "America/Santiago", "Chile", "America/Santiago",
-        "America/El_Salvador", "America_Central", "America/Chicago",
-        "America/Noronha", "Noronha", "America/Noronha",
-        "America/St_Thomas", "Atlantic", "America/Halifax",
-        "Atlantic/St_Helena", "GMT", "Atlantic/Reykjavik",
-        "Asia/Krasnoyarsk", "Krasnoyarsk", "Asia/Krasnoyarsk",
-        "America/Vancouver", "America_Pacific", "America/Los_Angeles",
-        "Europe/Belgrade", "Europe_Central", "Europe/Paris",
-        "America/St_Barthelemy", "Atlantic", "America/Halifax",
-        "Asia/Pontianak", "Indonesia_Western", "Asia/Jakarta",
-        "Africa/Lusaka", "Africa_Central", "Africa/Maputo",
-        "America/Godthab", "Greenland_Western", "America/Godthab",
-        "Asia/Dhaka", "Bangladesh", "Asia/Dhaka",
-        "Asia/Dubai", "Gulf", "Asia/Dubai",
-        "Europe/Moscow", "Moscow", "Europe/Moscow",
-        "America/Louisville", "America_Eastern", "America/New_York",
-        "Australia/Darwin", "Australia_Central", "Australia/Adelaide",
-        "America/Santo_Domingo", "Atlantic", "America/Halifax",
-        "America/Argentina/Ushuaia", "Argentina", "America/Buenos_Aires",
-        "America/Tegucigalpa", "America_Central", "America/Chicago",
-        "Asia/Aden", "Arabian", "Asia/Riyadh",
-        "America/Inuvik", "America_Mountain", "America/Denver",
-        "Asia/Beirut", "Europe_Eastern", "Europe/Bucharest",
-        "Asia/Qatar", "Arabian", "Asia/Riyadh",
-        "Europe/Oslo", "Europe_Central", "Europe/Paris",
-        "Asia/Anadyr", "Magadan", "Asia/Magadan",
-        "Pacific/Palau", "Palau", "Pacific/Palau",
-        "Arctic/Longyearbyen", "Europe_Central", "Europe/Paris",
-        "America/Anguilla", "Atlantic", "America/Halifax",
-        "Asia/Aqtau", "Kazakhstan_Western", "Asia/Aqtobe",
-        "Asia/Yerevan", "Armenia", "Asia/Yerevan",
-        "Africa/Lagos", "Africa_Western", "Africa/Lagos",
-        "America/Denver", "America_Mountain", "America/Denver",
-        "Antarctica/Palmer", "Chile", "America/Santiago",
-        "Europe/Stockholm", "Europe_Central", "Europe/Paris",
-        "America/Bahia", "Brasilia", "America/Sao_Paulo",
-        "America/Danmarkshavn", "GMT", "Atlantic/Reykjavik",
-        "Indian/Mauritius", "Mauritius", "Indian/Mauritius",
-        "Pacific/Chatham", "Chatham", "Pacific/Chatham",
-        "Europe/Prague", "Europe_Central", "Europe/Paris",
-        "America/Blanc-Sablon", "Atlantic", "America/Halifax",
-        "America/Bogota", "Colombia", "America/Bogota",
-        "America/Managua", "America_Central", "America/Chicago",
-        "Pacific/Auckland", "New_Zealand", "Pacific/Auckland",
-        "Atlantic/Faroe", "Europe_Western", "Atlantic/Canary",
-        "America/Cambridge_Bay", "America_Mountain", "America/Denver",
-        "America/Los_Angeles", "America_Pacific", "America/Los_Angeles",
-        "Africa/Khartoum", "Africa_Central", "Africa/Maputo",
-        "Europe/Simferopol", "Europe_Eastern", "Europe/Bucharest",
-        "Australia/Currie", "Australia_Eastern", "Australia/Sydney",
-        "Europe/Guernsey", "GMT", "Atlantic/Reykjavik",
-        "Asia/Thimphu", "Bhutan", "Asia/Thimphu",
-        "America/Eirunepe", "Amazon", "America/Manaus",
-        "Africa/Nairobi", "Africa_Eastern", "Africa/Nairobi",
-        "Asia/Yakutsk", "Yakutsk", "Asia/Yakutsk",
-        "Asia/Yangon", "Myanmar", "Asia/Rangoon",
-        "America/Goose_Bay", "Atlantic", "America/Halifax",
-        "Africa/Maseru", "Africa_Southern", "Africa/Johannesburg",
-        "America/Swift_Current", "America_Central", "America/Chicago",
-        "America/Guyana", "Guyana", "America/Guyana",
-        "Asia/Tokyo", "Japan", "Asia/Tokyo",
-        "Indian/Kerguelen", "French_Southern", "Indian/Kerguelen",
-        "America/Belem", "Brasilia", "America/Sao_Paulo",
-        "Pacific/Wallis", "Wallis", "Pacific/Wallis",
-        "America/Whitehorse", "America_Pacific", "America/Los_Angeles",
-        "America/North_Dakota/Beulah", "America_Central", "America/Chicago",
-        "Asia/Jerusalem", "Israel", "Asia/Jerusalem",
-        "Antarctica/Syowa", "Syowa", "Antarctica/Syowa",
-        "America/Thunder_Bay", "America_Eastern", "America/New_York",
-        "Asia/Brunei", "Brunei", "Asia/Brunei",
-        "America/Metlakatla", "America_Pacific", "America/Los_Angeles",
-        "Asia/Dushanbe", "Tajikistan", "Asia/Dushanbe",
-        "Pacific/Kosrae", "Kosrae", "Pacific/Kosrae",
-        "America/Coral_Harbour", "America_Eastern", "America/New_York",
-        "America/Tortola", "Atlantic", "America/Halifax",
-        "Asia/Karachi", "Pakistan", "Asia/Karachi",
-        "Indian/Reunion", "Reunion", "Indian/Reunion",
-        "America/Detroit", "America_Eastern", "America/New_York",
-        "Australia/Eucla", "Australia_CentralWestern", "Australia/Eucla",
-        "Asia/Seoul", "Korea", "Asia/Seoul",
-        "Asia/Singapore", "Singapore", "Asia/Singapore",
-        "Africa/Casablanca", "Europe_Western", "Atlantic/Canary",
-        "Asia/Dili", "East_Timor", "Asia/Dili",
-        "America/Indiana/Vincennes", "America_Eastern", "America/New_York",
-        "Europe/Dublin", "GMT", "Atlantic/Reykjavik",
-        "America/St_Johns", "Newfoundland", "America/St_Johns",
-        "Antarctica/Macquarie", "Macquarie", "Antarctica/Macquarie",
-        "America/Port_of_Spain", "Atlantic", "America/Halifax",
-        "Europe/Budapest", "Europe_Central", "Europe/Paris",
-        "America/Fortaleza", "Brasilia", "America/Sao_Paulo",
-        "Australia/Brisbane", "Australia_Eastern", "Australia/Sydney",
-        "Atlantic/Bermuda", "Atlantic", "America/Halifax",
-        "Asia/Amman", "Europe_Eastern", "Europe/Bucharest",
-        "Asia/Tashkent", "Uzbekistan", "Asia/Tashkent",
-        "Antarctica/DumontDUrville", "DumontDUrville", "Antarctica/DumontDUrville",
-        "Antarctica/Casey", "Australia_Western", "Australia/Perth",
-        "Asia/Vientiane", "Indochina", "Asia/Saigon",
-        "Pacific/Johnston", "Hawaii_Aleutian", "Pacific/Honolulu",
-        "America/Jamaica", "America_Eastern", "America/New_York",
-        "Africa/Addis_Ababa", "Africa_Eastern", "Africa/Nairobi",
-        "Pacific/Ponape", "Ponape", "Pacific/Ponape",
-        "Europe/Jersey", "GMT", "Atlantic/Reykjavik",
-        "Africa/Lome", "GMT", "Atlantic/Reykjavik",
-        "America/Manaus", "Amazon", "America/Manaus",
-        "Africa/Niamey", "Africa_Western", "Africa/Lagos",
-        "Asia/Kashgar", "China", "Asia/Shanghai",
-        "Pacific/Tongatapu", "Tonga", "Pacific/Tongatapu",
-        "Europe/Minsk", "Europe_Eastern", "Europe/Bucharest",
-        "America/Edmonton", "America_Mountain", "America/Denver",
-        "Asia/Baghdad", "Arabian", "Asia/Riyadh",
-        "Asia/Kathmandu", "Nepal", "Asia/Katmandu",
-        "America/Ojinaga", "America_Mountain", "America/Denver",
-        "Africa/Abidjan", "GMT", "Atlantic/Reykjavik",
-        "America/Indiana/Winamac", "America_Eastern", "America/New_York",
-        "Asia/Qyzylorda", "Kazakhstan_Eastern", "Asia/Almaty",
-        "Australia/Sydney", "Australia_Eastern", "Australia/Sydney",
-        "Asia/Ashgabat", "Turkmenistan", "Asia/Ashgabat",
-        "Europe/Amsterdam", "Europe_Central", "Europe/Paris",
-        "America/Dawson_Creek", "America_Mountain", "America/Denver",
-        "Africa/Cairo", "Europe_Eastern", "Europe/Bucharest",
-        "Asia/Pyongyang", "Korea", "Asia/Seoul",
-        "Africa/Kampala", "Africa_Eastern", "Africa/Nairobi",
-        "America/Araguaina", "Brasilia", "America/Sao_Paulo",
-        "Asia/Novokuznetsk", "Novosibirsk", "Asia/Novosibirsk",
-        "Pacific/Kwajalein", "Marshall_Islands", "Pacific/Majuro",
-        "Africa/Lubumbashi", "Africa_Central", "Africa/Maputo",
-        "Asia/Sakhalin", "Sakhalin", "Asia/Sakhalin",
-        "America/Indiana/Vevay", "America_Eastern", "America/New_York",
-        "Africa/Maputo", "Africa_Central", "Africa/Maputo",
-        "Atlantic/Faeroe", "Europe_Western", "Atlantic/Canary",
-        "America/North_Dakota/Center", "America_Central", "America/Chicago",
-        "Pacific/Wake", "Wake", "Pacific/Wake",
-        "Pacific/Pago_Pago", "Samoa", "Pacific/Apia",
-        "America/Moncton", "Atlantic", "America/Halifax",
-        "Africa/Sao_Tome", "Africa_Western", "Africa/Lagos",
-        "America/Glace_Bay", "Atlantic", "America/Halifax",
-        "Asia/Jakarta", "Indonesia_Western", "Asia/Jakarta",
-        "Africa/Asmera", "Africa_Eastern", "Africa/Nairobi",
-        "Europe/Lisbon", "Europe_Western", "Atlantic/Canary",
-        "America/Dawson", "America_Pacific", "America/Los_Angeles",
-        "America/Cayenne", "French_Guiana", "America/Cayenne",
-        "Asia/Bahrain", "Arabian", "Asia/Riyadh",
-        "Europe/Malta", "Europe_Central", "Europe/Paris",
-        "America/Indiana/Tell_City", "America_Central", "America/Chicago",
-        "America/Indiana/Petersburg", "America_Eastern", "America/New_York",
-        "Antarctica/Rothera", "Rothera", "Antarctica/Rothera",
-        "Asia/Aqtobe", "Kazakhstan_Western", "Asia/Aqtobe",
-        "Europe/Vaduz", "Europe_Central", "Europe/Paris",
-        "America/Indiana/Marengo", "America_Eastern", "America/New_York",
-        "Europe/Brussels", "Europe_Central", "Europe/Paris",
-        "Europe/Andorra", "Europe_Central", "Europe/Paris",
-        "America/Indiana/Knox", "America_Central", "America/Chicago",
-        "Pacific/Easter", "Easter", "Pacific/Easter",
-        "America/Argentina/Rio_Gallegos", "Argentina", "America/Buenos_Aires",
-        "Asia/Oral", "Kazakhstan_Western", "Asia/Aqtobe",
-        "Europe/Copenhagen", "Europe_Central", "Europe/Paris",
-        "Africa/Johannesburg", "Africa_Southern", "Africa/Johannesburg",
-        "Pacific/Pohnpei", "Ponape", "Pacific/Ponape",
-        "America/Argentina/Tucuman", "Argentina", "America/Buenos_Aires",
-        "America/Toronto", "America_Eastern", "America/New_York",
-        "Asia/Makassar", "Indonesia_Central", "Asia/Makassar",
-        "Europe/Berlin", "Europe_Central", "Europe/Paris",
-        "America/Argentina/Mendoza", "Argentina", "America/Buenos_Aires",
-        "America/Cuiaba", "Amazon", "America/Manaus",
-        "America/Creston", "America_Mountain", "America/Denver",
-        "Asia/Samarkand", "Uzbekistan", "Asia/Tashkent",
-        "Asia/Hovd", "Hovd", "Asia/Hovd",
-        "Europe/Bratislava", "Europe_Central", "Europe/Paris",
-        "Africa/Accra", "GMT", "Atlantic/Reykjavik",
-        "Africa/Douala", "Africa_Western", "Africa/Lagos",
-        "Africa/Nouakchott", "GMT", "Atlantic/Reykjavik",
-        "Europe/Sofia", "Europe_Eastern", "Europe/Bucharest",
-        "Antarctica/Davis", "Davis", "Antarctica/Davis",
-        "Antarctica/McMurdo", "New_Zealand", "Pacific/Auckland",
-        "Europe/San_Marino", "Europe_Central", "Europe/Paris",
-        "Africa/Porto-Novo", "Africa_Western", "Africa/Lagos",
-        "Asia/Jayapura", "Indonesia_Eastern", "Asia/Jayapura",
-        "America/St_Lucia", "Atlantic", "America/Halifax",
-        "America/Nipigon", "America_Eastern", "America/New_York",
-        "America/Argentina/Catamarca", "Argentina", "America/Buenos_Aires",
-        "Europe/Isle_of_Man", "GMT", "Atlantic/Reykjavik",
-        "America/Kentucky/Louisville", "America_Eastern", "America/New_York",
-        "America/Merida", "America_Central", "America/Chicago",
-        "Pacific/Marquesas", "Marquesas", "Pacific/Marquesas",
-        "Asia/Magadan", "Magadan", "Asia/Magadan",
-        "Africa/Libreville", "Africa_Western", "Africa/Lagos",
-        "Pacific/Efate", "Vanuatu", "Pacific/Efate",
-        "Asia/Kuala_Lumpur", "Malaysia", "Asia/Kuching",
-        "America/Iqaluit", "America_Eastern", "America/New_York",
-        "Indian/Comoro", "Africa_Eastern", "Africa/Nairobi",
-        "America/Panama", "America_Eastern", "America/New_York",
-        "Asia/Hebron", "Europe_Eastern", "Europe/Bucharest",
-        "America/Jujuy", "Argentina", "America/Buenos_Aires",
-        "America/Pangnirtung", "America_Eastern", "America/New_York",
-        "Asia/Tbilisi", "Georgia", "Asia/Tbilisi",
-        "Europe/Podgorica", "Europe_Central", "Europe/Paris",
-        "America/Boise", "America_Mountain", "America/Denver",
-        "Asia/Muscat", "Gulf", "Asia/Dubai",
-        "Indian/Mahe", "Seychelles", "Indian/Mahe",
-        "America/Montreal", "America_Eastern", "America/New_York",
-        "Africa/Bangui", "Africa_Western", "Africa/Lagos",
-        "America/Curacao", "Atlantic", "America/Halifax",
-        "Asia/Taipei", "Taipei", "Asia/Taipei",
-        "Europe/Ljubljana", "Europe_Central", "Europe/Paris",
-        "Atlantic/Stanley", "Falkland", "Atlantic/Stanley",
-        "Pacific/Guadalcanal", "Solomon", "Pacific/Guadalcanal",
-        "Asia/Kuwait", "Arabian", "Asia/Riyadh",
-        "Asia/Riyadh", "Arabian", "Asia/Riyadh",
-        "Europe/Tallinn", "Europe_Eastern", "Europe/Bucharest",
-        "America/New_York", "America_Eastern", "America/New_York",
-        "America/Paramaribo", "Suriname", "America/Paramaribo",
-        "America/Argentina/Buenos_Aires", "Argentina", "America/Buenos_Aires",
-        "Asia/Irkutsk", "Irkutsk", "Asia/Irkutsk",
-        "Asia/Katmandu", "Nepal", "Asia/Katmandu",
-        "America/Kralendijk", "Atlantic", "America/Halifax",
-    };
-    private static final String[] mzoneMap = new String[] {
-        "GMT", "ML", "Africa/Bamako",
-        "GMT", "IE", "Europe/Dublin",
-        "GMT", "SN", "Africa/Dakar",
-        "GMT", "GH", "Africa/Accra",
-        "GMT", "CI", "Africa/Abidjan",
-        "GMT", "BF", "Africa/Ouagadougou",
-        "GMT", "MR", "Africa/Nouakchott",
-        "GMT", "GM", "Africa/Banjul",
-        "GMT", "SL", "Africa/Freetown",
-        "GMT", "GN", "Africa/Conakry",
-        "GMT", "SH", "Atlantic/St_Helena",
-        "GMT", "GB", "Europe/London",
-        "GMT", "LR", "Africa/Monrovia",
-        "GMT", "TG", "Africa/Lome",
-        "Africa_Western", "ST", "Africa/Sao_Tome",
-        "Africa_Western", "CF", "Africa/Bangui",
-        "Africa_Western", "NE", "Africa/Niamey",
-        "Africa_Western", "CM", "Africa/Douala",
-        "Africa_Western", "CD", "Africa/Kinshasa",
-        "Africa_Western", "CG", "Africa/Brazzaville",
-        "Africa_Western", "GA", "Africa/Libreville",
-        "Africa_Western", "TD", "Africa/Ndjamena",
-        "Africa_Western", "AO", "Africa/Luanda",
-        "Africa_Western", "GQ", "Africa/Malabo",
-        "Africa_Eastern", "YT", "Indian/Mayotte",
-        "Africa_Eastern", "UG", "Africa/Kampala",
-        "Africa_Eastern", "ET", "Africa/Addis_Ababa",
-        "Africa_Eastern", "MG", "Indian/Antananarivo",
-        "Africa_Eastern", "TZ", "Africa/Dar_es_Salaam",
-        "Africa_Eastern", "SO", "Africa/Mogadishu",
-        "Africa_Eastern", "ER", "Africa/Asmera",
-        "Africa_Eastern", "KM", "Indian/Comoro",
-        "Africa_Eastern", "DJ", "Africa/Djibouti",
-        "Europe_Central", "GI", "Europe/Gibraltar",
-        "Europe_Central", "DK", "Europe/Copenhagen",
-        "Europe_Central", "SE", "Europe/Stockholm",
-        "Europe_Central", "CH", "Europe/Zurich",
-        "Europe_Central", "AL", "Europe/Tirane",
-        "Europe_Central", "RS", "Europe/Belgrade",
-        "Europe_Central", "HU", "Europe/Budapest",
-        "Europe_Central", "MT", "Europe/Malta",
-        "Europe_Central", "PL", "Europe/Warsaw",
-        "Europe_Central", "ME", "Europe/Podgorica",
-        "Europe_Central", "ES", "Europe/Madrid",
-        "Europe_Central", "CZ", "Europe/Prague",
-        "Europe_Central", "IT", "Europe/Rome",
-        "Europe_Central", "SI", "Europe/Ljubljana",
-        "Europe_Central", "LI", "Europe/Vaduz",
-        "Europe_Central", "AT", "Europe/Vienna",
-        "Europe_Central", "VA", "Europe/Vatican",
-        "Europe_Central", "DE", "Europe/Berlin",
-        "Europe_Central", "NO", "Europe/Oslo",
-        "Europe_Central", "SK", "Europe/Bratislava",
-        "Europe_Central", "AD", "Europe/Andorra",
-        "Europe_Central", "SM", "Europe/San_Marino",
-        "Europe_Central", "MK", "Europe/Skopje",
-        "Europe_Central", "TN", "Africa/Tunis",
-        "Europe_Central", "HR", "Europe/Zagreb",
-        "Europe_Central", "NL", "Europe/Amsterdam",
-        "Europe_Central", "BE", "Europe/Brussels",
-        "Europe_Central", "MC", "Europe/Monaco",
-        "Europe_Central", "LU", "Europe/Luxembourg",
-        "Europe_Central", "BA", "Europe/Sarajevo",
-        "China", "MO", "Asia/Macau",
-        "America_Pacific", "MX", "America/Tijuana",
-        "America_Pacific", "CA", "America/Vancouver",
-        "Indochina", "LA", "Asia/Vientiane",
-        "Indochina", "KH", "Asia/Phnom_Penh",
-        "Indochina", "TH", "Asia/Bangkok",
-        "Korea", "KP", "Asia/Pyongyang",
-        "America_Mountain", "MX", "America/Hermosillo",
-        "America_Mountain", "CA", "America/Edmonton",
-        "Africa_Southern", "LS", "Africa/Maseru",
-        "Africa_Southern", "SZ", "Africa/Mbabane",
-        "Chile", "AQ", "Antarctica/Palmer",
-        "New_Zealand", "AQ", "Antarctica/McMurdo",
-        "Gulf", "OM", "Asia/Muscat",
-        "Europe_Western", "FO", "Atlantic/Faeroe",
-        "America_Eastern", "TC", "America/Grand_Turk",
-        "America_Eastern", "CA", "America/Toronto",
-        "America_Eastern", "BS", "America/Nassau",
-        "America_Eastern", "PA", "America/Panama",
-        "America_Eastern", "JM", "America/Jamaica",
-        "America_Eastern", "KY", "America/Cayman",
-        "Africa_Central", "BI", "Africa/Bujumbura",
-        "Africa_Central", "ZM", "Africa/Lusaka",
-        "Africa_Central", "ZW", "Africa/Harare",
-        "Africa_Central", "CD", "Africa/Lubumbashi",
-        "Africa_Central", "BW", "Africa/Gaborone",
-        "Africa_Central", "RW", "Africa/Kigali",
-        "Africa_Central", "MW", "Africa/Blantyre",
-        "America_Central", "MX", "America/Mexico_City",
-        "America_Central", "HN", "America/Tegucigalpa",
-        "America_Central", "CA", "America/Winnipeg",
-        "America_Central", "GT", "America/Guatemala",
-        "America_Central", "SV", "America/El_Salvador",
-        "America_Central", "CR", "America/Costa_Rica",
-        "America_Central", "BZ", "America/Belize",
-        "Atlantic", "MS", "America/Montserrat",
-        "Atlantic", "AG", "America/Antigua",
-        "Atlantic", "TT", "America/Port_of_Spain",
-        "Atlantic", "MQ", "America/Martinique",
-        "Atlantic", "DM", "America/Dominica",
-        "Atlantic", "KN", "America/St_Kitts",
-        "Atlantic", "BM", "Atlantic/Bermuda",
-        "Atlantic", "PR", "America/Puerto_Rico",
-        "Atlantic", "AW", "America/Aruba",
-        "Atlantic", "VG", "America/Tortola",
-        "Atlantic", "GD", "America/Grenada",
-        "Atlantic", "GL", "America/Thule",
-        "Atlantic", "BB", "America/Barbados",
-        "Atlantic", "BQ", "America/Kralendijk",
-        "Atlantic", "SX", "America/Lower_Princes",
-        "Atlantic", "VI", "America/St_Thomas",
-        "Atlantic", "MF", "America/Marigot",
-        "Atlantic", "AI", "America/Anguilla",
-        "Atlantic", "AN", "America/Curacao",
-        "Atlantic", "LC", "America/St_Lucia",
-        "Atlantic", "GP", "America/Guadeloupe",
-        "Atlantic", "VC", "America/St_Vincent",
-        "Arabian", "QA", "Asia/Qatar",
-        "Arabian", "YE", "Asia/Aden",
-        "Arabian", "KW", "Asia/Kuwait",
-        "Arabian", "BH", "Asia/Bahrain",
-        "Arabian", "IQ", "Asia/Baghdad",
-        "India", "LK", "Asia/Colombo",
-        "Europe_Eastern", "SY", "Asia/Damascus",
-        "Europe_Eastern", "BG", "Europe/Sofia",
-        "Europe_Eastern", "GR", "Europe/Athens",
-        "Europe_Eastern", "JO", "Asia/Amman",
-        "Europe_Eastern", "CY", "Asia/Nicosia",
-        "Europe_Eastern", "AX", "Europe/Mariehamn",
-        "Europe_Eastern", "LB", "Asia/Beirut",
-        "Europe_Eastern", "FI", "Europe/Helsinki",
-        "Europe_Eastern", "EG", "Africa/Cairo",
-        "Chamorro", "GU", "Pacific/Guam",
-    };
-    private static final String[] aliasMap = new String[] {
-        "Brazil/Acre", "America/Rio_Branco",
-        "US/Indiana-Starke", "America/Indiana/Knox",
-        "America/Atka", "America/Adak",
-        "America/St_Barthelemy", "America/Guadeloupe",
-        "Australia/North", "Australia/Darwin",
-        "Europe/Zagreb", "Europe/Belgrade",
-        "Etc/Universal", "Etc/UTC",
-        "NZ-CHAT", "Pacific/Chatham",
-        "Asia/Macao", "Asia/Macau",
-        "Pacific/Yap", "Pacific/Chuuk",
-        "Egypt", "Africa/Cairo",
-        "US/Central", "America/Chicago",
-        "Canada/Atlantic", "America/Halifax",
-        "Brazil/East", "America/Sao_Paulo",
-        "America/Cordoba", "America/Argentina/Cordoba",
-        "US/Hawaii", "Pacific/Honolulu",
-        "America/Louisville", "America/Kentucky/Louisville",
-        "America/Shiprock", "America/Denver",
-        "Australia/Canberra", "Australia/Sydney",
-        "Asia/Chungking", "Asia/Chongqing",
-        "Universal", "Etc/UTC",
-        "US/Alaska", "America/Anchorage",
-        "Asia/Ujung_Pandang", "Asia/Makassar",
-        "Japan", "Asia/Tokyo",
-        "Atlantic/Faeroe", "Atlantic/Faroe",
-        "Asia/Istanbul", "Europe/Istanbul",
-        "US/Pacific", "America/Los_Angeles",
-        "Mexico/General", "America/Mexico_City",
-        "Poland", "Europe/Warsaw",
-        "Africa/Asmera", "Africa/Asmara",
-        "Asia/Saigon", "Asia/Ho_Chi_Minh",
-        "US/Michigan", "America/Detroit",
-        "America/Argentina/ComodRivadavia", "America/Argentina/Catamarca",
-        "W-SU", "Europe/Moscow",
-        "Australia/ACT", "Australia/Sydney",
-        "Asia/Calcutta", "Asia/Kolkata",
-        "Arctic/Longyearbyen", "Europe/Oslo",
-        "America/Knox_IN", "America/Indiana/Knox",
-        "ROC", "Asia/Taipei",
-        "Zulu", "Etc/UTC",
-        "Australia/Yancowinna", "Australia/Broken_Hill",
-        "Australia/West", "Australia/Perth",
-        "Singapore", "Asia/Singapore",
-        "Europe/Mariehamn", "Europe/Helsinki",
-        "ROK", "Asia/Seoul",
-        "America/Porto_Acre", "America/Rio_Branco",
-        "Etc/Zulu", "Etc/UTC",
-        "Canada/Yukon", "America/Whitehorse",
-        "Europe/Vatican", "Europe/Rome",
-        "Africa/Timbuktu", "Africa/Bamako",
-        "America/Buenos_Aires", "America/Argentina/Buenos_Aires",
-        "Canada/Pacific", "America/Vancouver",
-        "US/Pacific-New", "America/Los_Angeles",
-        "Mexico/BajaNorte", "America/Tijuana",
-        "Europe/Guernsey", "Europe/London",
-        "Asia/Tel_Aviv", "Asia/Jerusalem",
-        "Chile/Continental", "America/Santiago",
-        "Jamaica", "America/Jamaica",
-        "Mexico/BajaSur", "America/Mazatlan",
-        "Canada/Eastern", "America/Toronto",
-        "Australia/Tasmania", "Australia/Hobart",
-        "NZ", "Pacific/Auckland",
-        "America/Lower_Princes", "America/Curacao",
-        "GMT-", "Etc/GMT",
-        "America/Rosario", "America/Argentina/Cordoba",
-        "Libya", "Africa/Tripoli",
-        "Asia/Ashkhabad", "Asia/Ashgabat",
-        "Australia/NSW", "Australia/Sydney",
-        "America/Marigot", "America/Guadeloupe",
-        "Europe/Bratislava", "Europe/Prague",
-        "Portugal", "Europe/Lisbon",
-        "Etc/GMT-", "Etc/GMT",
-        "Europe/San_Marino", "Europe/Rome",
-        "Europe/Sarajevo", "Europe/Belgrade",
-        "Antarctica/South_Pole", "Antarctica/McMurdo",
-        "Canada/Central", "America/Winnipeg",
-        "Etc/GMT", "Etc/GMT",
-        "Europe/Isle_of_Man", "Europe/London",
-        "America/Fort_Wayne", "America/Indiana/Indianapolis",
-        "Eire", "Europe/Dublin",
-        "America/Coral_Harbour", "America/Atikokan",
-        "Europe/Nicosia", "Asia/Nicosia",
-        "US/Samoa", "Pacific/Pago_Pago",
-        "Hongkong", "Asia/Hong_Kong",
-        "Canada/Saskatchewan", "America/Regina",
-        "Asia/Thimbu", "Asia/Thimphu",
-        "Kwajalein", "Pacific/Kwajalein",
-        "GB", "Europe/London",
-        "Chile/EasterIsland", "Pacific/Easter",
-        "US/East-Indiana", "America/Indiana/Indianapolis",
-        "Australia/LHI", "Australia/Lord_Howe",
-        "Cuba", "America/Havana",
-        "America/Jujuy", "America/Argentina/Jujuy",
-        "US/Mountain", "America/Denver",
-        "Atlantic/Jan_Mayen", "Europe/Oslo",
-        "Europe/Tiraspol", "Europe/Chisinau",
-        "Europe/Podgorica", "Europe/Belgrade",
-        "US/Arizona", "America/Phoenix",
-        "Navajo", "America/Denver",
-        "Etc/Greenwich", "Etc/GMT",
-        "Canada/Mountain", "America/Edmonton",
-        "Iceland", "Atlantic/Reykjavik",
-        "Australia/Victoria", "Australia/Melbourne",
-        "Australia/South", "Australia/Adelaide",
-        "Brazil/West", "America/Manaus",
-        "Pacific/Ponape", "Pacific/Pohnpei",
-        "Europe/Ljubljana", "Europe/Belgrade",
-        "Europe/Jersey", "Europe/London",
-        "Australia/Queensland", "Australia/Brisbane",
-        "UTC", "Etc/UTC",
-        "Canada/Newfoundland", "America/St_Johns",
-        "Europe/Skopje", "Europe/Belgrade",
-        "PRC", "Asia/Shanghai",
-        "UCT", "Etc/UCT",
-        "America/Mendoza", "America/Argentina/Mendoza",
-        "Israel", "Asia/Jerusalem",
-        "US/Eastern", "America/New_York",
-        "Asia/Ulan_Bator", "Asia/Ulaanbaatar",
-        "Turkey", "Europe/Istanbul",
-        "GMT", "Etc/GMT",
-        "US/Aleutian", "America/Adak",
-        "Brazil/DeNoronha", "America/Noronha",
-        "GB-Eire", "Europe/London",
-        "Asia/Dacca", "Asia/Dhaka",
-        "America/Ensenada", "America/Tijuana",
-        "America/Catamarca", "America/Argentina/Catamarca",
-        "Iran", "Asia/Tehran",
-        "Greenwich", "Etc/GMT",
-        "Pacific/Truk", "Pacific/Chuuk",
-        "Pacific/Samoa", "Pacific/Pago_Pago",
-        "America/Virgin", "America/St_Thomas",
-        "Asia/Katmandu", "Asia/Kathmandu",
-        "America/Indianapolis", "America/Indiana/Indianapolis",
-        "Europe/Belfast", "Europe/London",
-        "America/Kralendijk", "America/Curacao",
-        "Asia/Rangoon", "Asia/Yangon",
-    };
-
-    private static final Map<String, String> zidToMzone = new HashMap<>();
-    private static final Map<String, String> mzoneToZid = new HashMap<>();
-    private static final Map<String, Map<String, String>> mzoneToZidL = new HashMap<>();
-    private static final Map<String, String> aliases = new HashMap<>();
-
-    static {
-        for (int i = 0; i < zidMap.length; i += 3) {
-            zidToMzone.put(zidMap[i], zidMap[i + 1]);
-            mzoneToZid.put(zidMap[i + 1], zidMap[i + 2]);
-        }
-
-        for (int i = 0; i < mzoneMap.length; i += 3) {
-            String mzone = mzoneMap[i];
-            Map<String, String> map = mzoneToZidL.get(mzone);
-            if (map == null) {
-                map = new HashMap<>();
-                mzoneToZidL.put(mzone, map);
-            }
-            map.put(mzoneMap[i + 1], mzoneMap[i + 2]);
-        }
-
-        for (int i = 0; i < aliasMap.length; i += 2) {
-            aliases.put(aliasMap[i], aliasMap[i + 1]);
-        }
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.base/share/classes/java/time/format/ZoneName.java.template	Thu Apr 12 16:25:29 2018 -0700
@@ -0,0 +1,249 @@
+/*
+ * Copyright (c) 2013, 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.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package java.time.format;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+/**
+ * A helper class to map a zone name to metazone and back to the
+ * appropriate zone id for the particular locale.
+ * <p>
+ * The zid<->metazone mappings are based on CLDR metaZones.xml.
+ * The alias mappings are based on Link entries in tzdb data files and
+ * CLDR's supplementalMetadata.xml.
+ */
+class ZoneName {
+
+    public static String toZid(String zid, Locale locale) {
+        String mzone = zidToMzone.get(zid);
+        if (mzone == null && aliases.containsKey(zid)) {
+            zid = aliases.get(zid);
+            mzone = zidToMzone.get(zid);
+        }
+        if (mzone != null) {
+            Map<String, String> map = mzoneToZidL.get(mzone);
+            if (map != null && map.containsKey(locale.getCountry())) {
+                zid = map.get(locale.getCountry());
+            } else {
+                zid = mzoneToZid.get(mzone);
+            }
+        }
+        return toZid(zid);
+    }
+
+    public static String toZid(String zid) {
+        if (aliases.containsKey(zid)) {
+            return aliases.get(zid);
+        }
+        return zid;
+    }
+
+    private static final String[] zidMap = new String[] {
+        // From metaZones.xml
+%%%%ZIDMAP%%%%
+
+        // From tzdb
+        "Africa/Khartoum", "Africa_Central", "Africa/Maputo", // tzdata2017c
+        "Africa/Windhoek", "Africa_Central", "Africa/Maputo", // tzdata2017c
+        "Africa/Sao_Tome", "Africa_Western", "Africa/Lagos",  // tzdata2018c
+    };
+    private static final String[] mzoneMap = new String[] {
+        // From metaZones.xml
+%%%%MZONEMAP%%%%
+
+        // From tzdb
+        "Africa_Western", "ST", "Africa/Sao_Tome", // tzdata2018c
+    };
+    private static final String[] aliasMap = new String[] {
+        // From supplementalMetadata.xml
+%%%%DEPRECATED%%%%
+
+        // From tzdb
+        "Brazil/Acre", "America/Rio_Branco",
+        "US/Indiana-Starke", "America/Indiana/Knox",
+        "America/Atka", "America/Adak",
+        "America/St_Barthelemy", "America/Guadeloupe",
+        "Australia/North", "Australia/Darwin",
+        "Europe/Zagreb", "Europe/Belgrade",
+        "Etc/Universal", "Etc/UTC",
+        "NZ-CHAT", "Pacific/Chatham",
+        "Asia/Macao", "Asia/Macau",
+        "Pacific/Yap", "Pacific/Chuuk",
+        "Egypt", "Africa/Cairo",
+        "US/Central", "America/Chicago",
+        "Canada/Atlantic", "America/Halifax",
+        "Brazil/East", "America/Sao_Paulo",
+        "America/Cordoba", "America/Argentina/Cordoba",
+        "US/Hawaii", "Pacific/Honolulu",
+        "America/Louisville", "America/Kentucky/Louisville",
+        "America/Shiprock", "America/Denver",
+        "Australia/Canberra", "Australia/Sydney",
+        "Asia/Chungking", "Asia/Chongqing",
+        "Universal", "Etc/UTC",
+        "US/Alaska", "America/Anchorage",
+        "Asia/Ujung_Pandang", "Asia/Makassar",
+        "Japan", "Asia/Tokyo",
+        "Atlantic/Faeroe", "Atlantic/Faroe",
+        "Asia/Istanbul", "Europe/Istanbul",
+        "US/Pacific", "America/Los_Angeles",
+        "Mexico/General", "America/Mexico_City",
+        "Poland", "Europe/Warsaw",
+        "Africa/Asmera", "Africa/Asmara",
+        "Asia/Saigon", "Asia/Ho_Chi_Minh",
+        "US/Michigan", "America/Detroit",
+        "America/Argentina/ComodRivadavia", "America/Argentina/Catamarca",
+        "W-SU", "Europe/Moscow",
+        "Australia/ACT", "Australia/Sydney",
+        "Asia/Calcutta", "Asia/Kolkata",
+        "Arctic/Longyearbyen", "Europe/Oslo",
+        "America/Knox_IN", "America/Indiana/Knox",
+        "ROC", "Asia/Taipei",
+        "Zulu", "Etc/UTC",
+        "Australia/Yancowinna", "Australia/Broken_Hill",
+        "Australia/West", "Australia/Perth",
+        "Singapore", "Asia/Singapore",
+        "Europe/Mariehamn", "Europe/Helsinki",
+        "ROK", "Asia/Seoul",
+        "America/Porto_Acre", "America/Rio_Branco",
+        "Etc/Zulu", "Etc/UTC",
+        "Canada/Yukon", "America/Whitehorse",
+        "Europe/Vatican", "Europe/Rome",
+        "Africa/Timbuktu", "Africa/Bamako",
+        "America/Buenos_Aires", "America/Argentina/Buenos_Aires",
+        "Canada/Pacific", "America/Vancouver",
+        "US/Pacific-New", "America/Los_Angeles",
+        "Mexico/BajaNorte", "America/Tijuana",
+        "Europe/Guernsey", "Europe/London",
+        "Asia/Tel_Aviv", "Asia/Jerusalem",
+        "Chile/Continental", "America/Santiago",
+        "Jamaica", "America/Jamaica",
+        "Mexico/BajaSur", "America/Mazatlan",
+        "Canada/Eastern", "America/Toronto",
+        "Australia/Tasmania", "Australia/Hobart",
+        "NZ", "Pacific/Auckland",
+        "America/Lower_Princes", "America/Curacao",
+        "GMT-", "Etc/GMT",
+        "America/Rosario", "America/Argentina/Cordoba",
+        "Libya", "Africa/Tripoli",
+        "Asia/Ashkhabad", "Asia/Ashgabat",
+        "Australia/NSW", "Australia/Sydney",
+        "America/Marigot", "America/Guadeloupe",
+        "Europe/Bratislava", "Europe/Prague",
+        "Portugal", "Europe/Lisbon",
+        "Etc/GMT-", "Etc/GMT",
+        "Europe/San_Marino", "Europe/Rome",
+        "Europe/Sarajevo", "Europe/Belgrade",
+        "Antarctica/South_Pole", "Antarctica/McMurdo",
+        "Canada/Central", "America/Winnipeg",
+        "Etc/GMT", "Etc/GMT",
+        "Europe/Isle_of_Man", "Europe/London",
+        "America/Fort_Wayne", "America/Indiana/Indianapolis",
+        "Eire", "Europe/Dublin",
+        "America/Coral_Harbour", "America/Atikokan",
+        "Europe/Nicosia", "Asia/Nicosia",
+        "US/Samoa", "Pacific/Pago_Pago",
+        "Hongkong", "Asia/Hong_Kong",
+        "Canada/Saskatchewan", "America/Regina",
+        "Asia/Thimbu", "Asia/Thimphu",
+        "Kwajalein", "Pacific/Kwajalein",
+        "GB", "Europe/London",
+        "Chile/EasterIsland", "Pacific/Easter",
+        "US/East-Indiana", "America/Indiana/Indianapolis",
+        "Australia/LHI", "Australia/Lord_Howe",
+        "Cuba", "America/Havana",
+        "America/Jujuy", "America/Argentina/Jujuy",
+        "US/Mountain", "America/Denver",
+        "Atlantic/Jan_Mayen", "Europe/Oslo",
+        "Europe/Tiraspol", "Europe/Chisinau",
+        "Europe/Podgorica", "Europe/Belgrade",
+        "US/Arizona", "America/Phoenix",
+        "Navajo", "America/Denver",
+        "Etc/Greenwich", "Etc/GMT",
+        "Canada/Mountain", "America/Edmonton",
+        "Iceland", "Atlantic/Reykjavik",
+        "Australia/Victoria", "Australia/Melbourne",
+        "Australia/South", "Australia/Adelaide",
+        "Brazil/West", "America/Manaus",
+        "Pacific/Ponape", "Pacific/Pohnpei",
+        "Europe/Ljubljana", "Europe/Belgrade",
+        "Europe/Jersey", "Europe/London",
+        "Australia/Queensland", "Australia/Brisbane",
+        "UTC", "Etc/UTC",
+        "Canada/Newfoundland", "America/St_Johns",
+        "Europe/Skopje", "Europe/Belgrade",
+        "PRC", "Asia/Shanghai",
+        "UCT", "Etc/UCT",
+        "America/Mendoza", "America/Argentina/Mendoza",
+        "Israel", "Asia/Jerusalem",
+        "US/Eastern", "America/New_York",
+        "Asia/Ulan_Bator", "Asia/Ulaanbaatar",
+        "Turkey", "Europe/Istanbul",
+        "GMT", "Etc/GMT",
+        "US/Aleutian", "America/Adak",
+        "Brazil/DeNoronha", "America/Noronha",
+        "GB-Eire", "Europe/London",
+        "Asia/Dacca", "Asia/Dhaka",
+        "America/Ensenada", "America/Tijuana",
+        "America/Catamarca", "America/Argentina/Catamarca",
+        "Iran", "Asia/Tehran",
+        "Greenwich", "Etc/GMT",
+        "Pacific/Truk", "Pacific/Chuuk",
+        "Pacific/Samoa", "Pacific/Pago_Pago",
+        "America/Virgin", "America/St_Thomas",
+        "Asia/Katmandu", "Asia/Kathmandu",
+        "America/Indianapolis", "America/Indiana/Indianapolis",
+        "Europe/Belfast", "Europe/London",
+        "America/Kralendijk", "America/Curacao",
+        "Asia/Rangoon", "Asia/Yangon",
+    };
+
+    private static final Map<String, String> zidToMzone = new HashMap<>();
+    private static final Map<String, String> mzoneToZid = new HashMap<>();
+    private static final Map<String, Map<String, String>> mzoneToZidL = new HashMap<>();
+    private static final Map<String, String> aliases = new HashMap<>();
+
+    static {
+        for (int i = 0; i < zidMap.length; i += 3) {
+            zidToMzone.put(zidMap[i], zidMap[i + 1]);
+            mzoneToZid.put(zidMap[i + 1], zidMap[i + 2]);
+        }
+
+        for (int i = 0; i < mzoneMap.length; i += 3) {
+            String mzone = mzoneMap[i];
+            Map<String, String> map = mzoneToZidL.get(mzone);
+            if (map == null) {
+                map = new HashMap<>();
+                mzoneToZidL.put(mzone, map);
+            }
+            map.put(mzoneMap[i + 1], mzoneMap[i + 2]);
+        }
+
+        for (int i = 0; i < aliasMap.length; i += 2) {
+            aliases.put(aliasMap[i], aliasMap[i + 1]);
+        }
+    }
+}
--- a/src/java.base/share/classes/java/util/zip/ZipFile.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/java.base/share/classes/java/util/zip/ZipFile.java	Thu Apr 12 16:25:29 2018 -0700
@@ -37,7 +37,6 @@
 import java.nio.charset.StandardCharsets;
 import java.nio.file.attribute.BasicFileAttributes;
 import java.nio.file.Files;
-
 import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -52,13 +51,14 @@
 import java.util.Spliterator;
 import java.util.Spliterators;
 import java.util.WeakHashMap;
-
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.IntFunction;
 import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
+import jdk.internal.misc.JavaLangAccess;
 import jdk.internal.misc.JavaUtilZipFileAccess;
 import jdk.internal.misc.SharedSecrets;
 import jdk.internal.misc.VM;
@@ -834,11 +834,10 @@
         static CleanableResource get(ZipFile zf, File file, int mode)
             throws IOException {
             Class<?> clz = zf.getClass();
-            while (clz != ZipFile.class) {
-                try {
-                    clz.getDeclaredMethod("close");
+            while (clz != ZipFile.class && clz != JarFile.class) {
+                if (JLA.getDeclaredPublicMethods(clz, "close").size() != 0) {
                     return new FinalizableResource(zf, file, mode);
-                } catch (NoSuchMethodException nsme) {}
+                }
                 clz = clz.getSuperclass();
             }
             return new CleanableResource(zf, file, mode);
@@ -1101,6 +1100,8 @@
     }
 
     private static boolean isWindows;
+    private static final JavaLangAccess JLA;
+
     static {
         SharedSecrets.setJavaUtilZipFileAccess(
             new JavaUtilZipFileAccess() {
@@ -1133,6 +1134,7 @@
                 }
              }
         );
+        JLA = jdk.internal.misc.SharedSecrets.getJavaLangAccess();
         isWindows = VM.getSavedProperty("os.name").contains("Windows");
     }
 
--- a/src/java.base/share/classes/jdk/internal/misc/JavaSecurityAccess.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/java.base/share/classes/jdk/internal/misc/JavaSecurityAccess.java	Thu Apr 12 16:25:29 2018 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 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
@@ -26,6 +26,7 @@
 package jdk.internal.misc;
 
 import java.security.AccessControlContext;
+import java.security.PermissionCollection;
 import java.security.PrivilegedAction;
 import java.security.ProtectionDomain;
 
@@ -39,4 +40,14 @@
                                   AccessControlContext context);
 
     ProtectionDomain[] getProtectDomains(AccessControlContext context);
+
+    interface ProtectionDomainCache {
+        void put(ProtectionDomain pd, PermissionCollection pc);
+        PermissionCollection get(ProtectionDomain pd);
+    }
+
+    /**
+     * Returns the ProtectionDomainCache.
+     */
+    ProtectionDomainCache getProtectionDomainCache();
 }
--- a/src/java.base/share/classes/jdk/internal/misc/JavaSecurityProtectionDomainAccess.java	Thu Apr 12 14:11:42 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package jdk.internal.misc;
-
-import java.security.PermissionCollection;
-import java.security.ProtectionDomain;
-
-public interface JavaSecurityProtectionDomainAccess {
-    interface ProtectionDomainCache {
-        void put(ProtectionDomain pd, PermissionCollection pc);
-        PermissionCollection get(ProtectionDomain pd);
-    }
-    /**
-     * Returns the ProtectionDomainCache.
-     */
-    ProtectionDomainCache getProtectionDomainCache();
-}
--- a/src/java.base/share/classes/jdk/internal/misc/SharedSecrets.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/java.base/share/classes/jdk/internal/misc/SharedSecrets.java	Thu Apr 12 16:25:29 2018 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -35,7 +35,6 @@
 import java.io.ObjectInputStream;
 import java.io.RandomAccessFile;
 import java.security.ProtectionDomain;
-import java.security.AccessController;
 
 /** A repository of "shared secrets", which are a mechanism for
     calling implementation-private methods in another package without
@@ -63,7 +62,6 @@
     private static JavaNioAccess javaNioAccess;
     private static JavaIOFileDescriptorAccess javaIOFileDescriptorAccess;
     private static JavaIOFilePermissionAccess javaIOFilePermissionAccess;
-    private static JavaSecurityProtectionDomainAccess javaSecurityProtectionDomainAccess;
     private static JavaSecurityAccess javaSecurityAccess;
     private static JavaUtilZipFileAccess javaUtilZipFileAccess;
     private static JavaUtilResourceBundleAccess javaUtilResourceBundleAccess;
@@ -235,25 +233,13 @@
         return javaIOFileDescriptorAccess;
     }
 
-    public static void setJavaSecurityProtectionDomainAccess
-        (JavaSecurityProtectionDomainAccess jspda) {
-            javaSecurityProtectionDomainAccess = jspda;
-    }
-
-    public static JavaSecurityProtectionDomainAccess
-        getJavaSecurityProtectionDomainAccess() {
-            if (javaSecurityProtectionDomainAccess == null)
-                unsafe.ensureClassInitialized(ProtectionDomain.class);
-            return javaSecurityProtectionDomainAccess;
-    }
-
     public static void setJavaSecurityAccess(JavaSecurityAccess jsa) {
         javaSecurityAccess = jsa;
     }
 
     public static JavaSecurityAccess getJavaSecurityAccess() {
         if (javaSecurityAccess == null) {
-            unsafe.ensureClassInitialized(AccessController.class);
+            unsafe.ensureClassInitialized(ProtectionDomain.class);
         }
         return javaSecurityAccess;
     }
--- a/src/java.base/share/classes/sun/security/provider/PolicyFile.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/java.base/share/classes/sun/security/provider/PolicyFile.java	Thu Apr 12 16:25:29 2018 -0700
@@ -41,8 +41,8 @@
 import java.net.SocketPermission;
 import java.net.NetPermission;
 import java.util.concurrent.atomic.AtomicReference;
-import jdk.internal.misc.JavaSecurityProtectionDomainAccess;
-import static jdk.internal.misc.JavaSecurityProtectionDomainAccess.ProtectionDomainCache;
+import jdk.internal.misc.JavaSecurityAccess;
+import static jdk.internal.misc.JavaSecurityAccess.ProtectionDomainCache;
 import jdk.internal.misc.SharedSecrets;
 import sun.security.util.*;
 import sun.net.www.ParseUtil;
@@ -2202,8 +2202,8 @@
             aliasMapping = Collections.synchronizedMap(new HashMap<>(11));
 
             pdMapping = new ProtectionDomainCache[numCaches];
-            JavaSecurityProtectionDomainAccess jspda
-                = SharedSecrets.getJavaSecurityProtectionDomainAccess();
+            JavaSecurityAccess jspda
+                = SharedSecrets.getJavaSecurityAccess();
             for (int i = 0; i < numCaches; i++) {
                 pdMapping[i] = jspda.getProtectionDomainCache();
             }
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java	Thu Apr 12 16:25:29 2018 -0700
@@ -287,7 +287,12 @@
         /**
          * Warn about potentially unsafe vararg methods
          */
-        VARARGS("varargs");
+        VARARGS("varargs"),
+
+        /**
+         * Warn about use of preview features.
+         */
+        PREVIEW("preview");
 
         LintCategory(String option) {
             this(option, false);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Preview.java	Thu Apr 12 16:25:29 2018 -0700
@@ -0,0 +1,204 @@
+/*
+ * 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.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.tools.javac.code;
+
+import com.sun.tools.javac.code.Lint.LintCategory;
+import com.sun.tools.javac.code.Source.Feature;
+import com.sun.tools.javac.comp.Infer;
+import com.sun.tools.javac.jvm.Target;
+import com.sun.tools.javac.resources.CompilerProperties.Errors;
+import com.sun.tools.javac.resources.CompilerProperties.Warnings;
+import com.sun.tools.javac.util.Assert;
+import com.sun.tools.javac.util.Context;
+import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
+import com.sun.tools.javac.util.JCDiagnostic.Error;
+import com.sun.tools.javac.util.JCDiagnostic.SimpleDiagnosticPosition;
+import com.sun.tools.javac.util.Log;
+import com.sun.tools.javac.util.MandatoryWarningHandler;
+import com.sun.tools.javac.util.Name;
+import com.sun.tools.javac.util.Options;
+
+import javax.tools.JavaFileObject;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+
+import static com.sun.tools.javac.main.Option.PREVIEW;
+
+/**
+ * Helper class to handle preview language features. This class maps certain language features
+ * (see {@link Feature} into 'preview' features; the mapping is completely ad-hoc, so as to allow
+ * for maximum flexibility, which allows to migrate preview feature into supported features with ease.
+ *
+ * This class acts as a centralized point against which usages of preview features are reported by
+ * clients (e.g. other javac classes). Internally, this class collects all such usages and generates
+ * diagnostics to inform the user of such usages. Such diagnostics can be enabled using the
+ * {@link LintCategory#PREVIEW} lint category, and are suppressible by usual means.
+ */
+public class Preview {
+
+    /** flag: are preview featutres enabled */
+    private final boolean enabled;
+
+    /** the diag handler to manage preview feature usage diagnostics */
+    private final MandatoryWarningHandler previewHandler;
+
+    /** test flag: should all features be considered as preview features? */
+    private final boolean forcePreview;
+
+    /** a mapping from classfile numbers to Java SE versions */
+    private final Map<Integer, Source> majorVersionToSource;
+
+
+    private final Lint lint;
+    private final Log log;
+
+    private static final Context.Key<Preview> previewKey = new Context.Key<>();
+
+    public static Preview instance(Context context) {
+        Preview instance = context.get(previewKey);
+        if (instance == null) {
+            instance = new Preview(context);
+        }
+        return instance;
+    }
+
+    Preview(Context context) {
+        context.put(previewKey, this);
+        Options options = Options.instance(context);
+        enabled = options.isSet(PREVIEW);
+        log = Log.instance(context);
+        lint = Lint.instance(context);
+        this.previewHandler =
+                new MandatoryWarningHandler(log, lint.isEnabled(LintCategory.PREVIEW), true, "preview", LintCategory.PREVIEW);
+        forcePreview = options.isSet("forcePreview");
+        majorVersionToSource = initMajorVersionToSourceMap();
+    }
+
+    private Map<Integer, Source> initMajorVersionToSourceMap() {
+        Map<Integer, Source> majorVersionToSource = new HashMap<>();
+        for (Target t : Target.values()) {
+            int major = t.majorVersion;
+            Source source = Source.lookup(t.name);
+            if (source != null) {
+                majorVersionToSource.put(major, source);
+            }
+        }
+        return majorVersionToSource;
+   }
+
+    /**
+     * Report usage of a preview feature. Usages reported through this method will affect the
+     * set of sourcefiles with dependencies on preview features.
+     * @param pos the position at which the preview feature was used.
+     * @param feature the preview feature used.
+     */
+    public void warnPreview(int pos, Feature feature) {
+        warnPreview(new SimpleDiagnosticPosition(pos), feature);
+    }
+
+    /**
+     * Report usage of a preview feature. Usages reported through this method will affect the
+     * set of sourcefiles with dependencies on preview features.
+     * @param pos the position at which the preview feature was used.
+     * @param feature the preview feature used.
+     */
+    public void warnPreview(DiagnosticPosition pos, Feature feature) {
+        Assert.check(isEnabled());
+        Assert.check(isPreview(feature));
+        if (!lint.isSuppressed(LintCategory.PREVIEW)) {
+            previewHandler.report(pos, feature.isPlural() ?
+                    Warnings.PreviewFeatureUsePlural(feature.nameFragment()) :
+                    Warnings.PreviewFeatureUse(feature.nameFragment()));
+        }
+    }
+
+    /**
+     * Report usage of a preview feature in classfile.
+     * @param classfile the name of the classfile with preview features enabled
+     * @param majorVersion the major version found in the classfile.
+     */
+    public void warnPreview(JavaFileObject classfile, int majorVersion) {
+        Assert.check(isEnabled());
+        if (!lint.isSuppressed(LintCategory.PREVIEW)) {
+            previewHandler.report(null,
+                    Warnings.PreviewFeatureUseClassfile(classfile, majorVersionToSource.get(majorVersion).name));
+        }
+    }
+
+    /**
+     * Are preview features enabled?
+     * @return true, if preview features are enabled.
+     */
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    /**
+     * Is given feature a preview feature?
+     * @param feature the feature to be tested.
+     * @return true, if given feature is a preview feature.
+     */
+    public boolean isPreview(Feature feature) {
+        //Note: this is a backdoor which allows to optionally treat all features as 'preview' (for testing).
+        //When real preview features will be added, this method can be implemented to return 'true'
+        //for those selected features, and 'false' for all the others.
+        return forcePreview;
+    }
+
+    /**
+     * Generate an error key which captures the fact that a given preview feature could not be used
+     * due to the preview feature support being disabled.
+     * @param feature the feature for which the diagnostic has to be generated.
+     * @return the diagnostic.
+     */
+    public Error disabledError(Feature feature) {
+        Assert.check(!isEnabled());
+        return feature.isPlural() ?
+                Errors.PreviewFeatureDisabledPlural(feature.nameFragment()) :
+                Errors.PreviewFeatureDisabled(feature.nameFragment());
+    }
+
+    /**
+     * Generate an error key which captures the fact that a preview classfile cannot be loaded
+     * due to the preview feature support being disabled.
+     * @param classfile the name of the classfile with preview features enabled
+     * @param majorVersion the major version found in the classfile.
+     */
+    public Error disabledError(JavaFileObject classfile, int majorVersion) {
+        Assert.check(!isEnabled());
+        return Errors.PreviewFeatureDisabledClassfile(classfile, majorVersionToSource.get(majorVersion).name);
+    }
+
+    /**
+     * Report any deferred diagnostics.
+     */
+    public void reportDeferredDiagnostics() {
+        previewHandler.reportDeferredDiagnostic();
+    }
+}
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java	Thu Apr 12 16:25:29 2018 -0700
@@ -217,6 +217,16 @@
                     source.compareTo(maxLevel) <= 0;
         }
 
+        public boolean isPlural() {
+            Assert.checkNonNull(optKind);
+            return optKind == DiagKind.PLURAL;
+        }
+
+        public Fragment nameFragment() {
+            Assert.checkNonNull(optFragment);
+            return optFragment;
+        }
+
         public Fragment fragment(String sourceName) {
             Assert.checkNonNull(optFragment);
             return optKind == DiagKind.NORMAL ?
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java	Thu Apr 12 16:25:29 2018 -0700
@@ -67,6 +67,7 @@
 import static com.sun.tools.javac.code.Kinds.Kind.*;
 import static com.sun.tools.javac.code.TypeTag.*;
 import static com.sun.tools.javac.tree.JCTree.Tag.*;
+import static com.sun.tools.javac.jvm.Pool.DynamicMethod;
 
 import javax.lang.model.element.ElementKind;
 import javax.lang.model.type.TypeKind;
@@ -208,6 +209,8 @@
 
         private Map<DedupedLambda, DedupedLambda> dedupedLambdas;
 
+        private Map<DynamicMethod, DynamicMethodSymbol> dynMethSyms = new HashMap<>();
+
         /**
          * list of deserialization cases
          */
@@ -1200,9 +1203,10 @@
                                             (MethodSymbol)bsm,
                                             indyType,
                                             staticArgs.toArray());
-
             JCFieldAccess qualifier = make.Select(make.QualIdent(site.tsym), bsmName);
-            qualifier.sym = dynSym;
+            DynamicMethodSymbol existing = kInfo.dynMethSyms.putIfAbsent(
+                    new DynamicMethod(dynSym, types), dynSym);
+            qualifier.sym = existing != null ? existing : dynSym;
             qualifier.type = indyType.getReturnType();
 
             JCMethodInvocation proxyCall = make.Apply(List.nil(), qualifier, indyArgs);
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java	Thu Apr 12 16:25:29 2018 -0700
@@ -2120,6 +2120,7 @@
 
         Set<ModuleSymbol> recoverableModules = new HashSet<>(syms.getAllModules());
 
+        recoverableModules.add(syms.unnamedModule);
         recoverableModules.remove(env.toplevel.modle);
 
         for (ModuleSymbol ms : recoverableModules) {
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java	Thu Apr 12 16:25:29 2018 -0700
@@ -105,6 +105,8 @@
     public final static int MAX_LOCALS = 0xffff;
     public final static int MAX_STACK = 0xffff;
 
+    public final static int PREVIEW_MINOR_VERSION = 0xffff;
+
     public enum Version {
         V45_3(45, 3), // base level for all attributes
         V49(49, 0),   // JDK 1.5: enum, generics, annotations
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java	Thu Apr 12 16:25:29 2018 -0700
@@ -148,6 +148,11 @@
 
     DeferredCompletionFailureHandler dcfh;
 
+    /**
+     * Support for preview language features.
+     */
+    Preview preview;
+
     /** The current scope where type variables are entered.
      */
     protected WriteableScope typevars;
@@ -270,6 +275,7 @@
         verbose         = options.isSet(Option.VERBOSE);
 
         Source source = Source.instance(context);
+        preview = Preview.instance(context);
         allowSimplifiedVarargs = Feature.SIMPLIFIED_VARARGS.allowedInSource(source);
         allowModules     = Feature.MODULES.allowedInSource(source);
 
@@ -2786,6 +2792,14 @@
                                    Integer.toString(maxMinor));
         }
 
+        if (minorVersion == ClassFile.PREVIEW_MINOR_VERSION) {
+            if (!preview.isEnabled()) {
+                log.error(preview.disabledError(currentClassFile, majorVersion));
+            } else {
+                preview.warnPreview(c.classfile, majorVersion);
+            }
+        }
+
         indexPool();
         if (signatureBuffer.length < bp) {
             int ns = Integer.highestOneBit(bp) << 1;
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java	Thu Apr 12 16:25:29 2018 -0700
@@ -49,7 +49,6 @@
 import com.sun.tools.javac.jvm.Pool.Method;
 import com.sun.tools.javac.jvm.Pool.MethodHandle;
 import com.sun.tools.javac.jvm.Pool.Variable;
-import com.sun.tools.javac.main.Option;
 import com.sun.tools.javac.util.*;
 
 import static com.sun.tools.javac.code.Flags.*;
@@ -89,6 +88,10 @@
      */
     private boolean debugstackmap;
 
+    /** Preview language level.
+     */
+    private Preview preview;
+
     /**
      * Target class version.
      */
@@ -178,6 +181,7 @@
         log = Log.instance(context);
         names = Names.instance(context);
         options = Options.instance(context);
+        preview = Preview.instance(context);
         target = Target.instance(context);
         source = Source.instance(context);
         types = Types.instance(context);
@@ -1819,7 +1823,11 @@
         acount += writeExtraClassAttributes(c);
 
         poolbuf.appendInt(JAVA_MAGIC);
-        poolbuf.appendChar(target.minorVersion);
+        if (preview.isEnabled()) {
+            poolbuf.appendChar(ClassFile.PREVIEW_MINOR_VERSION);
+        } else {
+            poolbuf.appendChar(target.minorVersion);
+        }
         poolbuf.appendChar(target.majorVersion);
 
         writePool(c.pool);
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Pool.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Pool.java	Thu Apr 12 16:25:29 2018 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -180,10 +180,10 @@
         }
     }
 
-    static class DynamicMethod extends Method {
+    public static class DynamicMethod extends Method {
         public Object[] uniqueStaticArgs;
 
-        DynamicMethod(DynamicMethodSymbol m, Types types) {
+        public DynamicMethod(DynamicMethodSymbol m, Types types) {
             super(m, types);
             uniqueStaticArgs = getUniqueTypeArray(m.staticArgs, types);
         }
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java	Thu Apr 12 16:25:29 2018 -0700
@@ -536,6 +536,20 @@
             }
         }
 
+        if (options.isSet(Option.PREVIEW)) {
+            if (sourceString == null) {
+                //enable-preview must be used with explicit -source or --release
+                error("err.preview.without.source.or.release");
+                return false;
+            } else if (source != Source.DEFAULT) {
+                //enable-preview must be used with latest source version
+                error("err.preview.not.latest",
+                        sourceString,
+                        Source.DEFAULT.name);
+                return false;
+            }
+        }
+
         String profileString = options.get(Option.PROFILE);
         if (profileString != null) {
             Profile profile = Profile.lookup(profileString);
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java	Thu Apr 12 16:25:29 2018 -0700
@@ -275,6 +275,10 @@
      */
     protected Source source;
 
+    /** The preview language version.
+     */
+    protected Preview preview;
+
     /** The module for code generation.
      */
     protected Gen gen;
@@ -405,6 +409,7 @@
             log.error(Errors.CantAccess(ex.sym, ex.getDetailValue()));
         }
         source = Source.instance(context);
+        preview = Preview.instance(context);
         attr = Attr.instance(context);
         analyzer = Analyzer.instance(context);
         chk = Check.instance(context);
@@ -1725,6 +1730,7 @@
                 log.warning(Warnings.ProcUseProcOrImplicit);
         }
         chk.reportDeferredDiagnostics();
+        preview.reportDeferredDiagnostics();
         if (log.compressedOutput) {
             log.mandatoryNote(null, Notes.CompressedDiags);
         }
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Option.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Option.java	Thu Apr 12 16:25:29 2018 -0700
@@ -330,6 +330,8 @@
         }
     },
 
+    PREVIEW("--enable-preview", "opt.preview", STANDARD, BASIC),
+
     PROFILE("-profile", "opt.arg.profile", "opt.profile", STANDARD, BASIC) {
         @Override
         public void process(OptionHelper helper, String option, String operand) throws InvalidValueException {
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java	Thu Apr 12 16:25:29 2018 -0700
@@ -25,6 +25,7 @@
 
 package com.sun.tools.javac.parser;
 
+import com.sun.tools.javac.code.Preview;
 import com.sun.tools.javac.code.Source;
 import com.sun.tools.javac.code.Source.Feature;
 import com.sun.tools.javac.parser.Tokens.Comment.CommentStyle;
@@ -53,6 +54,9 @@
      */
     private Source source;
 
+    /** The preview language setting. */
+    private Preview preview;
+
     /** The log to be used for error reporting.
      */
     private final Log log;
@@ -115,12 +119,20 @@
         this.log = fac.log;
         this.tokens = fac.tokens;
         this.source = fac.source;
+        this.preview = fac.preview;
         this.reader = reader;
     }
 
-    private void checkSourceLevel(int pos, Feature feature) {
-        if (!feature.allowedInSource(source)) {
+    protected void checkSourceLevel(int pos, Feature feature) {
+        if (preview.isPreview(feature) && !preview.isEnabled()) {
+            //preview feature without --preview flag, error
+            lexError(DiagnosticFlag.SOURCE_LEVEL, pos, preview.disabledError(feature));
+        } else if (!feature.allowedInSource(source)) {
+            //incompatible source level, error
             lexError(DiagnosticFlag.SOURCE_LEVEL, pos, feature.error(source.name));
+        } else if (preview.isPreview(feature)) {
+            //use of preview feature, warn
+            preview.warnPreview(pos, feature);
         }
     }
 
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java	Thu Apr 12 16:25:29 2018 -0700
@@ -95,6 +95,9 @@
     /** The Source language setting. */
     private Source source;
 
+    /** The Preview language setting. */
+    private Preview preview;
+
     /** The name table. */
     private Names names;
 
@@ -169,6 +172,7 @@
         this.log = fac.log;
         this.names = fac.names;
         this.source = fac.source;
+        this.preview = fac.preview;
         this.allowStringFolding = fac.options.getBoolean("allowStringFolding", true);
         this.keepDocComments = keepDocComments;
         this.parseModuleInfo = parseModuleInfo;
@@ -4219,8 +4223,15 @@
     }
 
     protected void checkSourceLevel(int pos, Feature feature) {
-        if (!feature.allowedInSource(source)) {
+        if (preview.isPreview(feature) && !preview.isEnabled()) {
+            //preview feature without --preview flag, error
+            log.error(DiagnosticFlag.SOURCE_LEVEL, pos, preview.disabledError(feature));
+        } else if (!feature.allowedInSource(source)) {
+            //incompatible source level, error
             log.error(DiagnosticFlag.SOURCE_LEVEL, pos, feature.error(source.name));
+        } else if (preview.isPreview(feature)) {
+            //use of preview feature, warn
+            preview.warnPreview(pos, feature);
         }
     }
 
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ParserFactory.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ParserFactory.java	Thu Apr 12 16:25:29 2018 -0700
@@ -27,6 +27,7 @@
 
 import java.util.Locale;
 
+import com.sun.tools.javac.code.Preview;
 import com.sun.tools.javac.code.Source;
 import com.sun.tools.javac.tree.DocTreeMaker;
 import com.sun.tools.javac.tree.TreeMaker;
@@ -62,6 +63,7 @@
     final Log log;
     final Tokens tokens;
     final Source source;
+    final Preview preview;
     final Names names;
     final Options options;
     final ScannerFactory scannerFactory;
@@ -76,6 +78,7 @@
         this.names = Names.instance(context);
         this.tokens = Tokens.instance(context);
         this.source = Source.instance(context);
+        this.preview = Preview.instance(context);
         this.options = Options.instance(context);
         this.scannerFactory = ScannerFactory.instance(context);
         this.locale = context.get(Locale.class);
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ScannerFactory.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ScannerFactory.java	Thu Apr 12 16:25:29 2018 -0700
@@ -27,6 +27,7 @@
 
 import java.nio.CharBuffer;
 
+import com.sun.tools.javac.code.Preview;
 import com.sun.tools.javac.code.Source;
 import com.sun.tools.javac.util.Context;
 import com.sun.tools.javac.util.Log;
@@ -56,6 +57,7 @@
     final Log log;
     final Names names;
     final Source source;
+    final Preview preview;
     final Tokens tokens;
 
     /** Create a new scanner factory. */
@@ -64,6 +66,7 @@
         this.log = Log.instance(context);
         this.names = Names.instance(context);
         this.source = Source.instance(context);
+        this.preview = Preview.instance(context);
         this.tokens = Tokens.instance(context);
     }
 
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties	Thu Apr 12 16:25:29 2018 -0700
@@ -1547,6 +1547,25 @@
 compiler.note.unchecked.plural.additional=\
     Some input files additionally use unchecked or unsafe operations.
 
+# 0: file name
+compiler.note.preview.filename=\
+    {0} uses preview language features.
+
+compiler.note.preview.plural=\
+    Some input files use preview language features.
+
+# The following string may appear after one of the above deprecation
+# messages.
+compiler.note.preview.recompile=\
+    Recompile with -Xlint:preview for details.
+
+# 0: file name
+compiler.note.preview.filename.additional=\
+    {0} has additional uses of preview language features.
+
+compiler.note.preview.plural.additional=\
+    Some input files additionally use preview language features.
+
 # Notes related to annotation processing
 
 # Print a client-generated note; assumed to be localized, no translation required
@@ -2665,6 +2684,34 @@
    {0} are not supported in -source {1}\n\
     (use -source {2} or higher to enable {0})
 
+# 0: message segment (feature)
+compiler.err.preview.feature.disabled=\
+   {0} is a preview feature and is disabled by default.\n\
+   (use --enable-preview to enable {0})
+
+# 0: message segment (feature)
+compiler.err.preview.feature.disabled.plural=\
+   {0} are a preview feature and are disabled by default.\n\
+   (use --enable-preview to enable {0})
+
+# 0: file object (classfile), 1: string (expected version)
+compiler.err.preview.feature.disabled.classfile=\
+   classfile for {0} uses preview features of Java SE {1}.\n\
+   (use --enable-preview to allow loading of classfiles which contain preview features)
+
+# 0: message segment (feature)
+compiler.warn.preview.feature.use=\
+   {0} is a preview feature and may be removed in a future release.
+
+# 0: message segment (feature)
+compiler.warn.preview.feature.use.plural=\
+   {0} are a preview feature and may be removed in a future release.
+
+# 0: file object (classfile), 1: string (expected version)
+compiler.warn.preview.feature.use.classfile=\
+   classfile for {0} uses preview features of Java SE {1}.
+
+
 compiler.misc.feature.modules=\
     modules
 
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties	Thu Apr 12 16:25:29 2018 -0700
@@ -252,6 +252,9 @@
 javac.opt.Xlint.desc.varargs=\
     Warn about potentially unsafe vararg methods
 
+javac.opt.Xlint.desc.preview=\
+    Warn about use of preview language features
+
 javac.opt.Xdoclint=\
     Enable recommended checks for problems in javadoc comments
 # L10N: do not localize: all none
@@ -293,6 +296,8 @@
     Search classpath and sourcepath for classes before the bootclasspath instead of after
 javac.opt.prefer=\
     Specify which file to read when both a source file and class file are found for an implicitly compiled class
+javac.opt.preview=\
+    Enable preview language features. To be used in conjunction with either -source or --release.
 javac.opt.AT=\
     Read options and filenames from file
 javac.opt.diags=\
@@ -368,6 +373,11 @@
     target release {0} conflicts with default source release {1}
 javac.warn.profile.target.conflict=\
     profile {0} is not valid for target release {1}
+javac.err.preview.not.latest=\
+    invalid source release {0} with --enable-preview\n\
+    (preview language features are only supported for release {1})
+javac.err.preview.without.source.or.release=\
+    --enable-preview must be used with either -source or --release
 javac.err.file.not.found=\
     file not found: {0}
 javac.err.file.not.directory=\
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleFrameWriter.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleFrameWriter.java	Thu Apr 12 16:25:29 2018 -0700
@@ -40,6 +40,7 @@
 import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
 import jdk.javadoc.internal.doclets.toolkit.Content;
 import jdk.javadoc.internal.doclets.toolkit.util.DocFileIOException;
+import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
 import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
 
 /**
@@ -100,8 +101,11 @@
         HtmlTree htmlTree = (configuration.allowTag(HtmlTag.MAIN))
                 ? HtmlTree.MAIN()
                 : body;
+        DocPath moduleSummary = configuration.useModuleDirectories
+                ? DocPaths.DOT_DOT.resolve(configuration.docPaths.moduleSummary(moduleElement))
+                : configuration.docPaths.moduleSummary(moduleElement);
         Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, HtmlStyle.bar,
-                mdlgen.links.createLink(configuration.docPaths.moduleSummary(moduleElement), mdlLabel, "", "classFrame"));
+                mdlgen.links.createLink(moduleSummary, mdlLabel, "", "classFrame"));
         htmlTree.addContent(heading);
         HtmlTree div = new HtmlTree(HtmlTag.DIV);
         div.setStyle(HtmlStyle.indexContainer);
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleIndexFrameWriter.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleIndexFrameWriter.java	Thu Apr 12 16:25:29 2018 -0700
@@ -36,7 +36,6 @@
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
-import jdk.javadoc.internal.doclets.formats.html.markup.Links;
 import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
 import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
 import jdk.javadoc.internal.doclets.toolkit.Content;
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModulePackageIndexFrameWriter.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModulePackageIndexFrameWriter.java	Thu Apr 12 16:25:29 2018 -0700
@@ -37,7 +37,6 @@
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
-import jdk.javadoc.internal.doclets.formats.html.markup.Links;
 import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
 import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
 import jdk.javadoc.internal.doclets.toolkit.Content;
@@ -189,7 +188,10 @@
      * @param ul the Content object to which the all classes link should be added
      */
     protected void addAllClassesLink(Content ul) {
-        Content linkContent = links.createLink(DocPaths.ALLCLASSES_FRAME,
+        DocPath allClassesFrame = configuration.useModuleDirectories
+                ? DocPaths.DOT_DOT.resolve(DocPaths.ALLCLASSES_FRAME)
+                : DocPaths.ALLCLASSES_FRAME;
+        Content linkContent = links.createLink(allClassesFrame,
                 contents.allClassesLabel, "", "packageFrame");
         Content li = HtmlTree.LI(linkContent);
         ul.addContent(li);
@@ -202,7 +204,10 @@
      * @param ul the Content object to which the all packages link should be added
      */
     protected void addAllPackagesLink(Content ul) {
-        Content linkContent = links.createLink(DocPaths.OVERVIEW_FRAME,
+        DocPath overviewFrame = configuration.useModuleDirectories
+                ? DocPaths.DOT_DOT.resolve(DocPaths.OVERVIEW_FRAME)
+                : DocPaths.OVERVIEW_FRAME;
+        Content linkContent = links.createLink(overviewFrame,
                 contents.allPackagesLabel, "", "packageListFrame");
         Content li = HtmlTree.LI(linkContent);
         ul.addContent(li);
@@ -215,7 +220,10 @@
      * @param ul the Content object to which the all modules link should be added
      */
     protected void addAllModulesLink(Content ul) {
-        Content linkContent = links.createLink(DocPaths.MODULE_OVERVIEW_FRAME,
+        DocPath moduleOverviewFrame = configuration.useModuleDirectories
+                ? DocPaths.DOT_DOT.resolve(DocPaths.MODULE_OVERVIEW_FRAME)
+                : DocPaths.MODULE_OVERVIEW_FRAME;
+        Content linkContent = links.createLink(moduleOverviewFrame,
                 contents.allModulesLabel, "", "packageListFrame");
         Content li = HtmlTree.LI(linkContent);
         ul.addContent(li);
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPath.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPath.java	Thu Apr 12 16:25:29 2018 -0700
@@ -30,10 +30,6 @@
 import java.util.Collections;
 import java.util.List;
 
-import javax.lang.model.element.ModuleElement;
-import javax.lang.model.element.PackageElement;
-import javax.lang.model.element.TypeElement;
-
 /**
  * Abstraction for immutable relative paths.
  * Paths always use '/' as a separator, and never begin or end with '/'.
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPaths.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPaths.java	Thu Apr 12 16:25:29 2018 -0700
@@ -49,6 +49,8 @@
         moduleSeparator = useModuleDirectories ? "/module-" : "-";
     }
 
+    public static final DocPath DOT_DOT = DocPath.create("..");
+
     /** The name of the file for all classes, without using frames, when --no-frames is specified. */
     public static final DocPath ALLCLASSES = DocPath.create("allclasses.html");
 
--- a/test/jdk/ProblemList.txt	Thu Apr 12 14:11:42 2018 +0100
+++ b/test/jdk/ProblemList.txt	Thu Apr 12 16:25:29 2018 -0700
@@ -589,7 +589,6 @@
 
 sun/security/krb5/auto/UnboundSSL.java                          8180265 windows-all
 sun/security/provider/KeyStore/DKSTest.sh                       8180266 windows-all
-sun/security/ssl/X509KeyManager/PreferredKey.java               8190333 generic-all
 
 ############################################################################
 
@@ -777,7 +776,7 @@
 
 com/sun/jndi/ldap/LdapTimeoutTest.java                          8151678 linux-all
 
-javax/rmi/ssl/SSLSocketParametersTest.sh                        8194663 generic-all
+javax/rmi/ssl/SSLSocketParametersTest.sh                        8162906 generic-all
 
 ############################################################################
 
--- a/test/jdk/java/lang/invoke/condy/CondyBSMInvocation.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/test/jdk/java/lang/invoke/condy/CondyBSMInvocation.java	Thu Apr 12 16:25:29 2018 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 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
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8186046
+ * @bug 8186046 8199875
  * @summary Test basic invocation of bootstrap methods
  * @library /lib/testlibrary/bytecode /java/lang/invoke/common
  * @build jdk.experimental.bytecode.BasicClassBuilder test.java.lang.invoke.lib.InstructionHelper
@@ -40,8 +40,10 @@
 import java.lang.invoke.MethodHandles;
 import java.lang.invoke.MethodType;
 import java.lang.invoke.WrongMethodTypeException;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.stream.IntStream;
+import java.util.stream.Stream;
 
 import static java.lang.invoke.MethodType.methodType;
 
@@ -63,85 +65,85 @@
         }
     }
 
+    static MethodHandle[] bsms(String bsmName) {
+        return Stream.of(CondyBSMInvocation.class.getDeclaredMethods()).
+                filter(m -> m.getName().equals(bsmName)).
+                map(m -> {
+                    try {
+                        return MethodHandles.lookup().unreflect(m);
+                    } catch (IllegalAccessException e) {
+                        throw new RuntimeException();
+                    }
+                }).toArray(MethodHandle[]::new);
+    }
 
-    public static Object _bsm() {
+    public static Object shape_bsm() {
         return "0";
     }
 
-    public static Object _bsm(Object a1) {
+    public static Object shape_bsm(Object a1) {
+        return "0";
+    }
+
+    public static Object shape_bsm(Object... args) {
         return "0";
     }
 
-    // Note: when pull mode is supported for a BSM this test case
-    //       will fail and must be removed
-    public static Object _bsm(Object a1, Object a2) {
+    public static Object shape_bsm(Object a1, Object a2) {
+        return "0";
+    }
+
+    public static Object shape_bsm(Object a1, Object... args) {
+        return "0";
+    }
+
+    public static Object shape_bsm(Object a1, Object a2, Object a3) {
+        return "0";
+    }
+
+    public static Object shape_bsm(MethodHandles.Lookup a1) {
         return "0";
     }
 
     @Test
-    public void testWrongArity() throws Throwable {
-        for (int i = 0; i < 3; i++) {
-            final int n = i;
-            MethodType mt = methodType(Object.class)
-                    .appendParameterTypes(Collections.nCopies(n, Object.class));
+    public void testWrongShape() throws Throwable {
+        for (MethodHandle bsm : bsms("shape_bsm")) {
             MethodHandle mh = InstructionHelper.ldcDynamicConstant(
                     L, "name", Object.class,
-                    "_bsm", mt,
-                    S -> IntStream.range(0, n).forEach(S::add)
+                    "shape_bsm", bsm.type(),
+                    S -> {}
             );
 
             try {
                 Object r = mh.invoke();
-                Assert.fail("BootstrapMethodError expected to be thrown for arrity " + n);
+                Assert.fail("BootstrapMethodError expected to be thrown for " + bsm);
             } catch (BootstrapMethodError e) {
-                Throwable t = e.getCause();
-                Assert.assertTrue(WrongMethodTypeException.class.isAssignableFrom(t.getClass()));
             }
         }
     }
 
 
-    public static Object _bsm(String[] ss) {
+    public static Object sig_bsm(MethodHandles.Lookup a1, String[] a2) {
         return "0";
     }
 
-    public static Object _bsm(String a1, String a2, String a3) {
+    public static Object sig_bsm(MethodHandles.Lookup a1, String a2, String a3) {
         return "0";
     }
 
     @Test
     public void testWrongSignature() throws Throwable {
-        {
+        for (MethodHandle bsm : bsms("sig_bsm")) {
             MethodHandle mh = InstructionHelper.ldcDynamicConstant(
                     L, "name", Object.class,
-                    "_bsm", methodType(Object.class, String[].class),
+                    "sig_bsm", bsm.type(),
                     S -> {}
             );
 
             try {
                 Object r = mh.invoke();
-                Assert.fail("BootstrapMethodError expected to be thrown");
-            }
-            catch (BootstrapMethodError e) {
-                Throwable t = e.getCause();
-                Assert.assertTrue(WrongMethodTypeException.class.isAssignableFrom(t.getClass()));
-            }
-        }
-
-        {
-            MethodHandle mh = InstructionHelper.ldcDynamicConstant(
-                    L, "name", Object.class,
-                    "_bsm", methodType(Object.class, String.class, String.class, String.class),
-                    S -> {}
-            );
-
-            try {
-                Object r = mh.invoke();
-                Assert.fail("BootstrapMethodError expected to be thrown");
-            }
-            catch (BootstrapMethodError e) {
-                Throwable t = e.getCause();
-                Assert.assertTrue(ClassCastException.class.isAssignableFrom(t.getClass()));
+                Assert.fail("BootstrapMethodError expected to be thrown for " + bsm);
+            } catch (BootstrapMethodError e) {
             }
         }
     }
@@ -193,6 +195,12 @@
         return "7";
     }
 
+    public static Object bsm(MethodHandles.Lookup l, Object... args) {
+        Object[] staticArgs = Arrays.copyOfRange(args, 2, args.length);
+        assertAll(staticArgs);
+        return Integer.toString(staticArgs.length);
+    }
+
     static void assertAll(Object... as) {
         for (int i = 0; i < as.length; i++) {
             Assert.assertEquals(as[i], i);
@@ -214,6 +222,19 @@
             Object r = mh.invoke();
             Assert.assertEquals(r, Integer.toString(n));
         }
+
+        {
+            MethodType mt = methodType(Object.class, MethodHandles.Lookup.class, Object[].class);
+            MethodHandle mh = InstructionHelper.ldcDynamicConstant(
+                    L, "name", Object.class,
+                    "bsm", mt,
+                    S -> IntStream.range(0, 9).forEach(S::add)
+            );
+
+            Object r = mh.invoke();
+            Assert.assertEquals(r, Integer.toString(9));
+
+        }
     }
 
     @Test
--- a/test/jdk/java/net/Socket/asyncClose/Race.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/test/jdk/java/net/Socket/asyncClose/Race.java	Thu Apr 12 16:25:29 2018 -0700
@@ -30,6 +30,7 @@
 import java.io.InputStream;
 import java.net.ServerSocket;
 import java.net.Socket;
+import java.net.ConnectException;
 import java.net.SocketException;
 import java.util.concurrent.Phaser;
 
@@ -43,33 +44,37 @@
             final int port = ss.getLocalPort();
             final Phaser phaser = new Phaser(THREADS + 1);
             for (int i=0; i<100; i++) {
-                final Socket s = new Socket("localhost", port);
-                s.setSoLinger(false, 0);
-                try (Socket sa = ss.accept()) {
-                    sa.setSoLinger(false, 0);
-                    final InputStream is = s.getInputStream();
-                    Thread[] threads = new Thread[THREADS];
-                    for (int j=0; j<THREADS; j++) {
-                        threads[j] = new Thread() {
-                        public void run() {
-                            try {
-                                phaser.arriveAndAwaitAdvance();
-                                while (is.read() != -1)
-                                    Thread.sleep(50);
-                            } catch (Exception x) {
-                                if (!(x instanceof SocketException
-                                      && x.getMessage().equalsIgnoreCase("socket closed")))
-                                    x.printStackTrace();
-                                // ok, expect Socket closed
-                            }
-                        }};
+                try {
+                    final Socket s = new Socket("localhost", port);
+                    s.setSoLinger(false, 0);
+                    try (Socket sa = ss.accept()) {
+                        sa.setSoLinger(false, 0);
+                        final InputStream is = s.getInputStream();
+                        Thread[] threads = new Thread[THREADS];
+                        for (int j=0; j<THREADS; j++) {
+                            threads[j] = new Thread() {
+                            public void run() {
+                                try {
+                                    phaser.arriveAndAwaitAdvance();
+                                    while (is.read() != -1)
+                                        Thread.sleep(50);
+                                } catch (Exception x) {
+                                    if (!(x instanceof SocketException
+                                          && x.getMessage().equalsIgnoreCase("socket closed")))
+                                        x.printStackTrace();
+                                    // ok, expect Socket closed
+                                }
+                            }};
+                        }
+                        for (int j=0; j<100; j++)
+                            threads[j].start();
+                        phaser.arriveAndAwaitAdvance();
+                        s.close();
+                        for (int j=0; j<100; j++)
+                            threads[j].join();
                     }
-                    for (int j=0; j<100; j++)
-                        threads[j].start();
-                    phaser.arriveAndAwaitAdvance();
-                    s.close();
-                    for (int j=0; j<100; j++)
-                        threads[j].join();
+                } catch (ConnectException e) {
+                    System.err.println("Exception " + e + " Port: " + port);
                 }
             }
         }
--- a/test/jdk/java/rmi/registry/reexport/Reexport.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/test/jdk/java/rmi/registry/reexport/Reexport.java	Thu Apr 12 16:25:29 2018 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -29,79 +29,70 @@
  *          java.rmi/sun.rmi.server
  *          java.rmi/sun.rmi.transport
  *          java.rmi/sun.rmi.transport.tcp
- * @build TestLibrary RegistryVM RegistryRunner
+ * @build TestLibrary
  * @run main/othervm Reexport
  */
 
 /*
- * If a VM could not create an RMI registry because another registry
- * usually in another process, was using the registry port, the next
+ * If a VM could not create an RMI registry because the registry port
+ * was already occupied by this or other processes, the next
  * time the VM tried to create a registry (after the other registry
  * was brought down) the attempt would fail.  The second try to create
  * a registry would fail because the registry ObjID would still be in
  * use when it should never have been allocated.
  *
- * The test creates this conflict using Runtime.exec and ensures that
- * a registry can still be created after the conflict is resolved.
+ * The test creates this conflict starting a dummy tcp server and ensures
+ * that a registry can still be created after the conflict is resolved.
  */
 
-import java.io.*;
-import java.rmi.*;
-import java.rmi.registry.*;
-import java.rmi.server.*;
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.nio.channels.ServerSocketChannel;
+import java.rmi.registry.LocateRegistry;
+import java.rmi.registry.Registry;
 
 public class Reexport {
-    static public void main(String[] argv) {
-
-        Registry reg = null;
-        try {
-            System.err.println("\nregression test for 4120329\n");
-
-            // establish the registry (we hope)
-            makeRegistry();
+    static public void main(String[] argv) throws IOException {
 
-            // Get a handle to the registry
-            System.err.println("Creating duplicate registry, this should fail...");
-            reg = createReg(true);
-
-            // Kill the first registry.
-            System.err.println("Bringing down the first registry");
-            try {
-                killRegistry();
-            } catch (Exception foo) {
-            }
+        for (int loop = 0; loop < 10; loop++) {
+            System.err.println("\nat loop: " + loop);
+            int port = -1;
+            try (ServerSocketChannel server = ServerSocketChannel.open();) {
+                server.bind(null);
+                InetSocketAddress addr = (InetSocketAddress)server.getLocalAddress();
+                port = addr.getPort();
 
-            // start another registry now that the first is gone; this should work
-            System.err.println("Trying again to start our own " +
-                               "registry... this should work");
-
-            reg = createReg(false);
-
-            if (reg == null) {
-                TestLibrary.bomb("Could not create registry on second try");
+                System.err.println("Creating duplicate registry, this should fail...");
+                createReg(port, true);
             }
-
-            System.err.println("Test passed");
-
-        } catch (Exception e) {
-            TestLibrary.bomb(e);
-        } finally {
-            // dont leave the registry around to affect other tests.
-            killRegistry();
-            reg = null;
+            try {
+                if (createReg(port, false) == null) {
+                    TestLibrary.bomb("Could not create registry on second try");
+                }
+                System.err.println("Test passed");
+                return;
+            } catch (Exception e) {
+                String err = e.getMessage();
+                if (err.contains("Address already in use")
+                        || err.contains("Port already in use")) {
+                    continue;
+                }
+                TestLibrary.bomb(e);
+            }
         }
+        TestLibrary.bomb("Test failed");
     }
 
-    static Registry createReg(boolean remoteOk) {
+    static Registry createReg(int port, boolean expectException) {
         Registry reg = null;
 
         try {
             reg = LocateRegistry.createRegistry(port);
-            if (remoteOk) {
-                TestLibrary.bomb("Remote registry is up, an Exception is expected!");
+            if (expectException) {
+                TestLibrary.bomb("Registry is up, an Exception is expected!");
             }
         } catch (Throwable e) {
-            if (remoteOk) {
+            if (expectException) {
                 System.err.println("EXPECTING PORT IN USE EXCEPTION:");
                 System.err.println(e.getMessage());
                 e.printStackTrace();
@@ -111,27 +102,4 @@
         }
         return reg;
     }
-
-    public static void makeRegistry() {
-        try {
-            subreg = RegistryVM.createRegistryVM();
-            subreg.start();
-            port = subreg.getPort();
-            System.out.println("Starting registry on port " + port);
-        } catch (IOException e) {
-            // one of these is summarily dropped, can't remember which one
-            System.out.println ("Test setup failed - cannot run rmiregistry");
-            TestLibrary.bomb("Test setup failed - cannot run test", e);
-        }
-    }
-
-    private static RegistryVM subreg = null;
-    private static int port = -1;
-
-    public static void killRegistry() {
-        if (subreg != null) {
-            subreg.cleanup();
-            subreg = null;
-        }
-    }
 }
--- a/test/jdk/java/time/test/java/time/format/TestZoneTextPrinterParser.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/test/jdk/java/time/test/java/time/format/TestZoneTextPrinterParser.java	Thu Apr 12 16:25:29 2018 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -49,7 +49,7 @@
 
 /*
  * @test
- * @bug 8081022 8151876 8166875
+ * @bug 8081022 8151876 8166875 8189784
  * @key randomness
  */
 
@@ -158,6 +158,10 @@
             {"Australia/South",  "ACST",                  preferred_s, Locale.ENGLISH, TextStyle.SHORT},
             {"America/Chicago",  "CDT",                   none,        Locale.ENGLISH, TextStyle.SHORT},
             {"Asia/Shanghai",    "CDT",                   preferred_s, Locale.ENGLISH, TextStyle.SHORT},
+            {"America/Juneau",   "AKST",                  none,        Locale.ENGLISH, TextStyle.SHORT},
+            {"America/Juneau",   "AKDT",                  none,        Locale.ENGLISH, TextStyle.SHORT},
+            {"Pacific/Honolulu", "HST",                   none,        Locale.ENGLISH, TextStyle.SHORT},
+            {"America/Halifax",  "AST",                   none,        Locale.ENGLISH, TextStyle.SHORT},
        };
     }
 
--- a/test/jdk/java/time/test/java/time/format/ZoneName.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/test/jdk/java/time/test/java/time/format/ZoneName.java	Thu Apr 12 16:25:29 2018 -0700
@@ -20,13 +20,20 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
-
 package test.java.time.format;
 
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
 
+/**
+ * A helper class to map a zone name to metazone and back to the
+ * appropriate zone id for the particular locale.
+ * <p>
+ * The zid<->metazone mappings are based on CLDR metaZones.xml.
+ * The alias mappings are based on Link entries in tzdb data files and
+ * CLDR's supplementalMetadata.xml.
+ */
 class ZoneName {
 
     public static String toZid(String zid, Locale locale) {
@@ -54,699 +61,850 @@
     }
 
     private static final String[] zidMap = new String[] {
-        "Asia/Bangkok", "Indochina", "Asia/Saigon",
-        "Pacific/Pago_Pago", "Samoa", "Pacific/Apia",
-        "Africa/Blantyre", "Africa_Central", "Africa/Maputo",
-        "America/Argentina/San_Juan", "Argentina", "America/Buenos_Aires",
-        "America/Cancun", "America_Central", "America/Chicago",
-        "Pacific/Nauru", "Nauru", "Pacific/Nauru",
-        "America/Atikokan", "America_Eastern", "America/New_York",
+        // From metaZones.xml
+        "Africa/Abidjan", "GMT", "Atlantic/Reykjavik",
+        "Africa/Accra", "GMT", "Atlantic/Reykjavik",
+        "Africa/Addis_Ababa", "Africa_Eastern", "Africa/Nairobi",
+        "Africa/Algiers", "Europe_Central", "Europe/Paris",
         "Africa/Asmara", "Africa_Eastern", "Africa/Nairobi",
-        "Europe/Berlin", "Europe_Central", "Europe/Paris",
-        "Asia/Kolkata", "India", "Asia/Calcutta",
-        "Australia/Darwin", "Australia_Central", "Australia/Adelaide",
-        "America/Guayaquil", "Ecuador", "America/Guayaquil",
-        "Europe/Vienna", "Europe_Central", "Europe/Paris",
-        "Atlantic/St_Helena", "GMT", "Atlantic/Reykjavik",
-        "Europe/London", "GMT", "Atlantic/Reykjavik",
-        "Europe/Moscow", "Moscow", "Europe/Moscow",
-        "America/St_Vincent", "Atlantic", "America/Halifax",
-        "America/Bogota", "Colombia", "America/Bogota",
-        "America/Marigot", "Atlantic", "America/Halifax",
-        "Europe/Sarajevo", "Europe_Central", "Europe/Paris",
-        "America/Hermosillo", "America_Mountain", "America/Denver",
-        "America/Winnipeg", "America_Central", "America/Chicago",
-        "America/Rainy_River", "America_Central", "America/Chicago",
-        "Indian/Mahe", "Seychelles", "Indian/Mahe",
+        "Africa/Asmera", "Africa_Eastern", "Africa/Nairobi",
+        "Africa/Bamako", "GMT", "Atlantic/Reykjavik",
+        "Africa/Bangui", "Africa_Western", "Africa/Lagos",
+        "Africa/Banjul", "GMT", "Atlantic/Reykjavik",
+        "Africa/Bissau", "GMT", "Atlantic/Reykjavik",
+        "Africa/Blantyre", "Africa_Central", "Africa/Maputo",
+        "Africa/Brazzaville", "Africa_Western", "Africa/Lagos",
+        "Africa/Bujumbura", "Africa_Central", "Africa/Maputo",
+        "Africa/Cairo", "Europe_Eastern", "Europe/Bucharest",
+        "Africa/Casablanca", "Europe_Western", "Atlantic/Canary",
+        "Africa/Ceuta", "Europe_Central", "Europe/Paris",
+        "Africa/Conakry", "GMT", "Atlantic/Reykjavik",
+        "Africa/Dakar", "GMT", "Atlantic/Reykjavik",
+        "Africa/Dar_es_Salaam", "Africa_Eastern", "Africa/Nairobi",
+        "Africa/Djibouti", "Africa_Eastern", "Africa/Nairobi",
+        "Africa/Douala", "Africa_Western", "Africa/Lagos",
+        "Africa/El_Aaiun", "Europe_Western", "Atlantic/Canary",
         "Africa/Freetown", "GMT", "Atlantic/Reykjavik",
-        "America/Grand_Turk", "America_Eastern", "America/New_York",
-        "America/Argentina/Ushuaia", "Argentina", "America/Buenos_Aires",
-        "Atlantic/Azores", "Azores", "Atlantic/Azores",
-        "Asia/Harbin", "China", "Asia/Shanghai",
-        "America/Cuiaba", "Amazon", "America/Manaus",
-        "Asia/Bahrain", "Arabian", "Asia/Riyadh",
-        "Asia/Katmandu", "Nepal", "Asia/Katmandu",
-        "Pacific/Galapagos", "Galapagos", "Pacific/Galapagos",
-        "Asia/Brunei", "Brunei", "Asia/Brunei",
+        "Africa/Gaborone", "Africa_Central", "Africa/Maputo",
+        "Africa/Harare", "Africa_Central", "Africa/Maputo",
+        "Africa/Johannesburg", "Africa_Southern", "Africa/Johannesburg",
+        "Africa/Juba", "Africa_Eastern", "Africa/Nairobi",
+        "Africa/Kampala", "Africa_Eastern", "Africa/Nairobi",
+        "Africa/Khartoum", "Africa_Eastern", "Africa/Nairobi",
         "Africa/Kigali", "Africa_Central", "Africa/Maputo",
-        "Asia/Makassar", "Indonesia_Central", "Asia/Makassar",
+        "Africa/Kinshasa", "Africa_Western", "Africa/Lagos",
+        "Africa/Lagos", "Africa_Western", "Africa/Lagos",
+        "Africa/Libreville", "Africa_Western", "Africa/Lagos",
+        "Africa/Lome", "GMT", "Atlantic/Reykjavik",
+        "Africa/Luanda", "Africa_Western", "Africa/Lagos",
+        "Africa/Lubumbashi", "Africa_Central", "Africa/Maputo",
+        "Africa/Lusaka", "Africa_Central", "Africa/Maputo",
+        "Africa/Malabo", "Africa_Western", "Africa/Lagos",
         "Africa/Maputo", "Africa_Central", "Africa/Maputo",
-        "Asia/Kamchatka", "Magadan", "Asia/Magadan",
-        "Atlantic/Faroe", "Europe_Western", "Atlantic/Canary",
-        "America/El_Salvador", "America_Central", "America/Chicago",
-        "Asia/Saigon", "Indochina", "Asia/Saigon",
-        "Africa/Kinshasa", "Africa_Western", "Africa/Lagos",
-        "Europe/Oslo", "Europe_Central", "Europe/Paris",
-        "Asia/Hong_Kong", "Hong_Kong", "Asia/Hong_Kong",
-        "Pacific/Midway", "Samoa", "Pacific/Apia",
-        "Africa/Douala", "Africa_Western", "Africa/Lagos",
-        "Europe/San_Marino", "Europe_Central", "Europe/Paris",
-        "Pacific/Chuuk", "Truk", "Pacific/Truk",
-        "Africa/Gaborone", "Africa_Central", "Africa/Maputo",
+        "Africa/Maseru", "Africa_Southern", "Africa/Johannesburg",
+        "Africa/Mbabane", "Africa_Southern", "Africa/Johannesburg",
+        "Africa/Mogadishu", "Africa_Eastern", "Africa/Nairobi",
+        "Africa/Monrovia", "GMT", "Atlantic/Reykjavik",
+        "Africa/Nairobi", "Africa_Eastern", "Africa/Nairobi",
+        "Africa/Ndjamena", "Africa_Western", "Africa/Lagos",
+        "Africa/Niamey", "Africa_Western", "Africa/Lagos",
+        "Africa/Nouakchott", "GMT", "Atlantic/Reykjavik",
+        "Africa/Ouagadougou", "GMT", "Atlantic/Reykjavik",
+        "Africa/Porto-Novo", "Africa_Western", "Africa/Lagos",
+        "Africa/Sao_Tome", "GMT", "Atlantic/Reykjavik",
+        "Africa/Timbuktu", "GMT", "Atlantic/Reykjavik",
+        "Africa/Tripoli", "Europe_Eastern", "Europe/Bucharest",
         "Africa/Tunis", "Europe_Central", "Europe/Paris",
-        "Africa/Khartoum", "Africa_Central", "Africa/Maputo",
-        "Europe/Isle_of_Man", "GMT", "Atlantic/Reykjavik",
-        "Europe/Skopje", "Europe_Central", "Europe/Paris",
-        "America/Merida", "America_Central", "America/Chicago",
-        "Antarctica/DumontDUrville", "DumontDUrville", "Antarctica/DumontDUrville",
-        "Atlantic/Reykjavik", "GMT", "Atlantic/Reykjavik",
-        "Indian/Mauritius", "Mauritius", "Indian/Mauritius",
-        "Africa/Malabo", "Africa_Western", "Africa/Lagos",
-        "Africa/Juba", "Africa_Eastern", "Africa/Nairobi",
-        "America/Resolute", "America_Central", "America/Chicago",
-        "Africa/Abidjan", "GMT", "Atlantic/Reykjavik",
-        "Antarctica/McMurdo", "New_Zealand", "Pacific/Auckland",
-        "Asia/Thimphu", "Bhutan", "Asia/Thimphu",
-        "Europe/Zaporozhye", "Europe_Eastern", "Europe/Bucharest",
-        "Antarctica/Davis", "Davis", "Antarctica/Davis",
-        "Indian/Antananarivo", "Africa_Eastern", "Africa/Nairobi",
-        "Africa/Harare", "Africa_Central", "Africa/Maputo",
-        "Pacific/Marquesas", "Marquesas", "Pacific/Marquesas",
-        "Africa/Tripoli", "Europe_Eastern", "Europe/Bucharest",
-        "America/North_Dakota/Beulah", "America_Central", "America/Chicago",
+        "Africa/Windhoek", "Africa_Western", "Africa/Lagos",
+        "America/Adak", "Hawaii_Aleutian", "Pacific/Honolulu",
+        "America/Anchorage", "Alaska", "America/Juneau",
+        "America/Anguilla", "Atlantic", "America/Halifax",
+        "America/Antigua", "Atlantic", "America/Halifax",
+        "America/Araguaina", "Brasilia", "America/Sao_Paulo",
+        "America/Argentina/Buenos_Aires", "Argentina", "America/Buenos_Aires",
+        "America/Argentina/Catamarca", "Argentina", "America/Buenos_Aires",
+        "America/Argentina/ComodRivadavia", "Argentina", "America/Buenos_Aires",
+        "America/Argentina/Cordoba", "Argentina", "America/Buenos_Aires",
+        "America/Argentina/Jujuy", "Argentina", "America/Buenos_Aires",
+        "America/Argentina/La_Rioja", "Argentina", "America/Buenos_Aires",
+        "America/Argentina/Mendoza", "Argentina", "America/Buenos_Aires",
+        "America/Argentina/Rio_Gallegos", "Argentina", "America/Buenos_Aires",
+        "America/Argentina/Salta", "Argentina", "America/Buenos_Aires",
+        "America/Argentina/San_Juan", "Argentina", "America/Buenos_Aires",
+        "America/Argentina/San_Luis", "Argentina_Western", "America/Argentina/San_Luis",
+        "America/Argentina/Tucuman", "Argentina", "America/Buenos_Aires",
+        "America/Argentina/Ushuaia", "Argentina", "America/Buenos_Aires",
+        "America/Aruba", "Atlantic", "America/Halifax",
+        "America/Asuncion", "Paraguay", "America/Asuncion",
+        "America/Atikokan", "America_Eastern", "America/New_York",
+        "America/Atka", "Hawaii_Aleutian", "Pacific/Honolulu",
+        "America/Bahia", "Brasilia", "America/Sao_Paulo",
+        "America/Bahia_Banderas", "America_Central", "America/Chicago",
+        "America/Barbados", "Atlantic", "America/Halifax",
+        "America/Belem", "Brasilia", "America/Sao_Paulo",
+        "America/Belize", "America_Central", "America/Chicago",
+        "America/Blanc-Sablon", "Atlantic", "America/Halifax",
+        "America/Boa_Vista", "Amazon", "America/Manaus",
+        "America/Bogota", "Colombia", "America/Bogota",
+        "America/Boise", "America_Mountain", "America/Denver",
         "America/Buenos_Aires", "Argentina", "America/Buenos_Aires",
-        "America/Tortola", "Atlantic", "America/Halifax",
-        "Asia/Kuwait", "Arabian", "Asia/Riyadh",
-        "Europe/Rome", "Europe_Central", "Europe/Paris",
-        "America/Eirunepe", "Amazon", "America/Manaus",
-        "Australia/Hobart", "Australia_Eastern", "Australia/Sydney",
-        "America/Thule", "Atlantic", "America/Halifax",
-        "Asia/Beirut", "Europe_Eastern", "Europe/Bucharest",
-        "America/Bahia_Banderas", "America_Central", "America/Chicago",
-        "Africa/Dar_es_Salaam", "Africa_Eastern", "Africa/Nairobi",
-        "America/Argentina/Tucuman", "Argentina", "America/Buenos_Aires",
-        "America/Paramaribo", "Suriname", "America/Paramaribo",
-        "Africa/Kampala", "Africa_Eastern", "Africa/Nairobi",
-        "Pacific/Port_Moresby", "Papua_New_Guinea", "Pacific/Port_Moresby",
-        "America/Mendoza", "Argentina", "America/Buenos_Aires",
-        "Asia/Dushanbe", "Tajikistan", "Asia/Dushanbe",
-        "Asia/Qyzylorda", "Kazakhstan_Eastern", "Asia/Almaty",
-        "Antarctica/Vostok", "Vostok", "Antarctica/Vostok",
-        "Pacific/Majuro", "Marshall_Islands", "Pacific/Majuro",
-        "Asia/Tehran", "Iran", "Asia/Tehran",
-        "Asia/Hovd", "Hovd", "Asia/Hovd",
-        "Antarctica/Rothera", "Rothera", "Antarctica/Rothera",
-        "Africa/Brazzaville", "Africa_Western", "Africa/Lagos",
-        "Europe/Tirane", "Europe_Central", "Europe/Paris",
-        "Asia/Urumqi", "China", "Asia/Shanghai",
-        "Asia/Krasnoyarsk", "Krasnoyarsk", "Asia/Krasnoyarsk",
-        "America/Tegucigalpa", "America_Central", "America/Chicago",
-        "Asia/Vientiane", "Indochina", "Asia/Saigon",
-        "Asia/Pontianak", "Indonesia_Western", "Asia/Jakarta",
-        "America/Bahia", "Brasilia", "America/Sao_Paulo",
-        "Asia/Choibalsan", "Choibalsan", "Asia/Choibalsan",
-        "America/Regina", "America_Central", "America/Chicago",
-        "Africa/Cairo", "Europe_Eastern", "Europe/Bucharest",
-        "Asia/Irkutsk", "Irkutsk", "Asia/Irkutsk",
-        "Europe/Luxembourg", "Europe_Central", "Europe/Paris",
-        "America/St_Kitts", "Atlantic", "America/Halifax",
+        "America/Cambridge_Bay", "America_Mountain", "America/Denver",
+        "America/Campo_Grande", "Amazon", "America/Manaus",
+        "America/Cancun", "America_Eastern", "America/New_York",
+        "America/Caracas", "Venezuela", "America/Caracas",
+        "America/Catamarca", "Argentina", "America/Buenos_Aires",
+        "America/Cayenne", "French_Guiana", "America/Cayenne",
+        "America/Cayman", "America_Eastern", "America/New_York",
+        "America/Chicago", "America_Central", "America/Chicago",
+        "America/Chihuahua", "Mexico_Pacific", "America/Mazatlan",
+        "America/Coral_Harbour", "America_Eastern", "America/New_York",
+        "America/Cordoba", "Argentina", "America/Buenos_Aires",
+        "America/Costa_Rica", "America_Central", "America/Chicago",
+        "America/Creston", "America_Mountain", "America/Denver",
+        "America/Cuiaba", "Amazon", "America/Manaus",
+        "America/Curacao", "Atlantic", "America/Halifax",
+        "America/Danmarkshavn", "GMT", "Atlantic/Reykjavik",
+        "America/Dawson", "America_Pacific", "America/Los_Angeles",
+        "America/Dawson_Creek", "America_Mountain", "America/Denver",
+        "America/Denver", "America_Mountain", "America/Denver",
+        "America/Detroit", "America_Eastern", "America/New_York",
+        "America/Dominica", "Atlantic", "America/Halifax",
+        "America/Edmonton", "America_Mountain", "America/Denver",
+        "America/Eirunepe", "Acre", "America/Rio_Branco",
+        "America/El_Salvador", "America_Central", "America/Chicago",
+        "America/Ensenada", "America_Pacific", "America/Los_Angeles",
+        "America/Fort_Nelson", "America_Mountain", "America/Denver",
+        "America/Fort_Wayne", "America_Eastern", "America/New_York",
+        "America/Fortaleza", "Brasilia", "America/Sao_Paulo",
+        "America/Glace_Bay", "Atlantic", "America/Halifax",
+        "America/Godthab", "Greenland_Western", "America/Godthab",
+        "America/Goose_Bay", "Atlantic", "America/Halifax",
+        "America/Grand_Turk", "Atlantic", "America/Halifax",
+        "America/Grenada", "Atlantic", "America/Halifax",
+        "America/Guadeloupe", "Atlantic", "America/Halifax",
+        "America/Guatemala", "America_Central", "America/Chicago",
+        "America/Guayaquil", "Ecuador", "America/Guayaquil",
+        "America/Guyana", "Guyana", "America/Guyana",
+        "America/Halifax", "Atlantic", "America/Halifax",
+        "America/Havana", "Cuba", "America/Havana",
+        "America/Hermosillo", "Mexico_Pacific", "America/Mazatlan",
+        "America/Indiana/Indianapolis", "America_Eastern", "America/New_York",
+        "America/Indiana/Knox", "America_Central", "America/Chicago",
+        "America/Indiana/Marengo", "America_Eastern", "America/New_York",
+        "America/Indiana/Petersburg", "America_Eastern", "America/New_York",
+        "America/Indiana/Tell_City", "America_Central", "America/Chicago",
+        "America/Indiana/Vevay", "America_Eastern", "America/New_York",
+        "America/Indiana/Vincennes", "America_Eastern", "America/New_York",
+        "America/Indiana/Winamac", "America_Eastern", "America/New_York",
+        "America/Indianapolis", "America_Eastern", "America/New_York",
+        "America/Inuvik", "America_Mountain", "America/Denver",
+        "America/Iqaluit", "America_Eastern", "America/New_York",
+        "America/Jamaica", "America_Eastern", "America/New_York",
+        "America/Jujuy", "Argentina", "America/Buenos_Aires",
+        "America/Juneau", "Alaska", "America/Juneau",
+        "America/Kentucky/Louisville", "America_Eastern", "America/New_York",
+        "America/Kentucky/Monticello", "America_Eastern", "America/New_York",
+        "America/Knox_IN", "America_Central", "America/Chicago",
+        "America/Kralendijk", "Atlantic", "America/Halifax",
+        "America/La_Paz", "Bolivia", "America/La_Paz",
+        "America/Lima", "Peru", "America/Lima",
+        "America/Los_Angeles", "America_Pacific", "America/Los_Angeles",
+        "America/Louisville", "America_Eastern", "America/New_York",
+        "America/Lower_Princes", "Atlantic", "America/Halifax",
+        "America/Maceio", "Brasilia", "America/Sao_Paulo",
+        "America/Managua", "America_Central", "America/Chicago",
         "America/Manaus", "Amazon", "America/Manaus",
-        "America/Noronha", "Noronha", "America/Noronha",
-        "Pacific/Gambier", "Gambier", "Pacific/Gambier",
-        "America/Edmonton", "America_Mountain", "America/Denver",
-        "Pacific/Palau", "Palau", "Pacific/Palau",
-        "America/Lower_Princes", "Atlantic", "America/Halifax",
-        "Africa/Ouagadougou", "GMT", "Atlantic/Reykjavik",
-        "Asia/Yerevan", "Armenia", "Asia/Yerevan",
-        "America/Montevideo", "Uruguay", "America/Montevideo",
-        "Europe/Minsk", "Europe_Eastern", "Europe/Bucharest",
-        "Europe/Amsterdam", "Europe_Central", "Europe/Paris",
-        "Pacific/Efate", "Vanuatu", "Pacific/Efate",
-        "Asia/Manila", "Philippines", "Asia/Manila",
-        "America/Dawson", "America_Pacific", "America/Los_Angeles",
-        "America/Argentina/Cordoba", "Argentina", "America/Buenos_Aires",
-        "Australia/Melbourne", "Australia_Eastern", "Australia/Sydney",
-        "Asia/Rangoon", "Myanmar", "Asia/Rangoon",
-        "America/Los_Angeles", "America_Pacific", "America/Los_Angeles",
-        "Africa/Casablanca", "Europe_Western", "Atlantic/Canary",
-        "Africa/Porto-Novo", "Africa_Western", "Africa/Lagos",
-        "Asia/Macau", "China", "Asia/Shanghai",
-        "America/Boa_Vista", "Amazon", "America/Manaus",
-        "Europe/Guernsey", "GMT", "Atlantic/Reykjavik",
-        "Africa/Monrovia", "GMT", "Atlantic/Reykjavik",
-        "America/Godthab", "Greenland_Western", "America/Godthab",
-        "Africa/Ceuta", "Europe_Central", "Europe/Paris",
-        "Asia/Oral", "Kazakhstan_Western", "Asia/Aqtobe",
-        "America/Yakutat", "Alaska", "America/Juneau",
-        "Indian/Mayotte", "Africa_Eastern", "Africa/Nairobi",
-        "America/Denver", "America_Mountain", "America/Denver",
-        "America/New_York", "America_Eastern", "America/New_York",
-        "Pacific/Rarotonga", "Cook", "Pacific/Rarotonga",
-        "America/Louisville", "America_Eastern", "America/New_York",
-        "Africa/El_Aaiun", "Europe_Western", "Atlantic/Canary",
-        "Africa/Sao_Tome", "Africa_Western", "Africa/Lagos",
-        "Pacific/Fiji", "Fiji", "Pacific/Fiji",
-        "Asia/Damascus", "Europe_Eastern", "Europe/Bucharest",
-        "Asia/Ulaanbaatar", "Mongolia", "Asia/Ulaanbaatar",
-        "America/Cayman", "America_Eastern", "America/New_York",
-        "America/Tijuana", "America_Pacific", "America/Los_Angeles",
-        "Atlantic/Bermuda", "Atlantic", "America/Halifax",
-        "Australia/Sydney", "Australia_Eastern", "Australia/Sydney",
-        "Asia/Aden", "Arabian", "Asia/Riyadh",
-        "Australia/Eucla", "Australia_CentralWestern", "Australia/Eucla",
-        "America/Indiana/Petersburg", "America_Eastern", "America/New_York",
-        "America/Panama", "America_Eastern", "America/New_York",
-        "Europe/Istanbul", "Europe_Eastern", "Europe/Bucharest",
-        "America/Kralendijk", "Atlantic", "America/Halifax",
-        "America/Catamarca", "Argentina", "America/Buenos_Aires",
-        "America/Nassau", "America_Eastern", "America/New_York",
-        "Europe/Paris", "Europe_Central", "Europe/Paris",
-        "Asia/Jakarta", "Indonesia_Western", "Asia/Jakarta",
-        "Australia/Lindeman", "Australia_Eastern", "Australia/Sydney",
-        "America/Sao_Paulo", "Brasilia", "America/Sao_Paulo",
-        "America/Juneau", "Alaska", "America/Juneau",
-        "America/Grenada", "Atlantic", "America/Halifax",
-        "America/Cayenne", "French_Guiana", "America/Cayenne",
-        "Antarctica/Casey", "Australia_Western", "Australia/Perth",
-        "Africa/Algiers", "Europe_Central", "Europe/Paris",
+        "America/Marigot", "Atlantic", "America/Halifax",
+        "America/Martinique", "Atlantic", "America/Halifax",
+        "America/Matamoros", "America_Central", "America/Chicago",
+        "America/Mazatlan", "Mexico_Pacific", "America/Mazatlan",
+        "America/Mendoza", "Argentina", "America/Buenos_Aires",
+        "America/Menominee", "America_Central", "America/Chicago",
+        "America/Merida", "America_Central", "America/Chicago",
+        "America/Metlakatla", "Alaska", "America/Juneau",
+        "America/Mexico_City", "America_Central", "America/Chicago",
         "America/Miquelon", "Pierre_Miquelon", "America/Miquelon",
-        "Asia/Tokyo", "Japan", "Asia/Tokyo",
-        "Africa/Windhoek", "Africa_Central", "Africa/Maputo",
-        "Africa/Bujumbura", "Africa_Central", "Africa/Maputo",
-        "America/Guatemala", "America_Central", "America/Chicago",
-        "Africa/Dakar", "GMT", "Atlantic/Reykjavik",
-        "Asia/Bishkek", "Kyrgystan", "Asia/Bishkek",
-        "America/Guadeloupe", "Atlantic", "America/Halifax",
-        "Africa/Ndjamena", "Africa_Western", "Africa/Lagos",
-        "Europe/Simferopol", "Europe_Eastern", "Europe/Bucharest",
-        "America/Santa_Isabel", "America_Pacific", "America/Los_Angeles",
-        "Asia/Dubai", "Gulf", "Asia/Dubai",
-        "America/Maceio", "Brasilia", "America/Sao_Paulo",
-        "America/Anchorage", "Alaska", "America/Juneau",
-        "Australia/Currie", "Australia_Eastern", "Australia/Sydney",
-        "Africa/Djibouti", "Africa_Eastern", "Africa/Nairobi",
-        "Europe/Budapest", "Europe_Central", "Europe/Paris",
-        "America/Argentina/Salta", "Argentina", "America/Buenos_Aires",
-        "Asia/Calcutta", "India", "Asia/Calcutta",
-        "America/Indiana/Winamac", "America_Eastern", "America/New_York",
-        "Asia/Yekaterinburg", "Yekaterinburg", "Asia/Yekaterinburg",
-        "America/Santiago", "Chile", "America/Santiago",
-        "Asia/Aqtobe", "Kazakhstan_Western", "Asia/Aqtobe",
-        "Asia/Dili", "East_Timor", "Asia/Dili",
-        "America/Detroit", "America_Eastern", "America/New_York",
-        "Africa/Libreville", "Africa_Western", "Africa/Lagos",
-        "Pacific/Ponape", "Ponape", "Pacific/Ponape",
-        "Pacific/Wallis", "Wallis", "Pacific/Wallis",
-        "Asia/Vladivostok", "Vladivostok", "Asia/Vladivostok",
-        "Africa/Lubumbashi", "Africa_Central", "Africa/Maputo",
-        "Africa/Asmera", "Africa_Eastern", "Africa/Nairobi",
-        "Pacific/Guam", "Chamorro", "Pacific/Saipan",
-        "America/Chicago", "America_Central", "America/Chicago",
-        "America/Swift_Current", "America_Central", "America/Chicago",
-        "America/Coral_Harbour", "America_Eastern", "America/New_York",
-        "America/Cambridge_Bay", "America_Mountain", "America/Denver",
-        "America/Costa_Rica", "America_Central", "America/Chicago",
-        "America/Curacao", "Atlantic", "America/Halifax",
-        "America/Recife", "Brasilia", "America/Sao_Paulo",
-        "Africa/Bangui", "Africa_Western", "Africa/Lagos",
-        "America/Cordoba", "Argentina", "America/Buenos_Aires",
-        "Asia/Baghdad", "Arabian", "Asia/Riyadh",
-        "America/Shiprock", "America_Mountain", "America/Denver",
-        "America/Glace_Bay", "Atlantic", "America/Halifax",
-        "America/North_Dakota/Center", "America_Central", "America/Chicago",
-        "Europe/Stockholm", "Europe_Central", "Europe/Paris",
-        "America/Halifax", "Atlantic", "America/Halifax",
-        "Atlantic/Canary", "Europe_Western", "Atlantic/Canary",
-        "Europe/Volgograd", "Volgograd", "Europe/Volgograd",
         "America/Moncton", "Atlantic", "America/Halifax",
-        "Pacific/Tongatapu", "Tonga", "Pacific/Tongatapu",
-        "America/Argentina/Buenos_Aires", "Argentina", "America/Buenos_Aires",
-        "Asia/Samarkand", "Uzbekistan", "Asia/Tashkent",
-        "Pacific/Apia", "Samoa", "Pacific/Apia",
-        "America/Sitka", "Alaska", "America/Juneau",
-        "Europe/Warsaw", "Europe_Central", "Europe/Paris",
-        "Africa/Accra", "GMT", "Atlantic/Reykjavik",
-        "Europe/Bratislava", "Europe_Central", "Europe/Paris",
-        "Europe/Zurich", "Europe_Central", "Europe/Paris",
-        "Indian/Reunion", "Reunion", "Indian/Reunion",
-        "America/Mazatlan", "America_Mountain", "America/Denver",
-        "Pacific/Tarawa", "Gilbert_Islands", "Pacific/Tarawa",
-        "America/Indiana/Knox", "America_Central", "America/Chicago",
-        "Asia/Tbilisi", "Georgia", "Asia/Tbilisi",
-        "Asia/Novosibirsk", "Novosibirsk", "Asia/Novosibirsk",
-        "Atlantic/Faeroe", "Europe_Western", "Atlantic/Canary",
-        "Africa/Bissau", "GMT", "Atlantic/Reykjavik",
-        "Asia/Amman", "Europe_Eastern", "Europe/Bucharest",
-        "Africa/Lagos", "Africa_Western", "Africa/Lagos",
-        "Africa/Banjul", "GMT", "Atlantic/Reykjavik",
-        "America/Araguaina", "Brasilia", "America/Sao_Paulo",
-        "America/Nipigon", "America_Eastern", "America/New_York",
-        "Europe/Vilnius", "Europe_Eastern", "Europe/Bucharest",
+        "America/Monterrey", "America_Central", "America/Chicago",
+        "America/Montevideo", "Uruguay", "America/Montevideo",
         "America/Montserrat", "Atlantic", "America/Halifax",
-        "Asia/Baku", "Azerbaijan", "Asia/Baku",
-        "Africa/Lusaka", "Africa_Central", "Africa/Maputo",
-        "Europe/Uzhgorod", "Europe_Eastern", "Europe/Bucharest",
-        "America/Argentina/Rio_Gallegos", "Argentina", "America/Buenos_Aires",
-        "America/Blanc-Sablon", "Atlantic", "America/Halifax",
-        "Asia/Kabul", "Afghanistan", "Asia/Kabul",
-        "America/Jamaica", "America_Eastern", "America/New_York",
-        "Europe/Vatican", "Europe_Central", "Europe/Paris",
-        "Africa/Nouakchott", "GMT", "Atlantic/Reykjavik",
-        "Africa/Addis_Ababa", "Africa_Eastern", "Africa/Nairobi",
-        "Europe/Athens", "Europe_Eastern", "Europe/Bucharest",
-        "Atlantic/Madeira", "Europe_Western", "Atlantic/Canary",
-        "America/Thunder_Bay", "America_Eastern", "America/New_York",
-        "Europe/Brussels", "Europe_Central", "Europe/Paris",
-        "Africa/Luanda", "Africa_Western", "Africa/Lagos",
-        "Africa/Mogadishu", "Africa_Eastern", "Africa/Nairobi",
-        "America/Matamoros", "America_Central", "America/Chicago",
-        "Pacific/Norfolk", "Norfolk", "Pacific/Norfolk",
-        "America/Scoresbysund", "Greenland_Eastern", "America/Scoresbysund",
-        "America/Indianapolis", "America_Eastern", "America/New_York",
-        "Pacific/Pitcairn", "Pitcairn", "Pacific/Pitcairn",
-        "Asia/Singapore", "Singapore", "Asia/Singapore",
-        "America/Port-au-Prince", "America_Eastern", "America/New_York",
-        "Pacific/Honolulu", "Hawaii_Aleutian", "Pacific/Honolulu",
-        "Antarctica/Syowa", "Syowa", "Antarctica/Syowa",
-        "Atlantic/Cape_Verde", "Cape_Verde", "Atlantic/Cape_Verde",
-        "America/Asuncion", "Paraguay", "America/Asuncion",
-        "America/Martinique", "Atlantic", "America/Halifax",
-        "Europe/Gibraltar", "Europe_Central", "Europe/Paris",
-        "Africa/Lome", "GMT", "Atlantic/Reykjavik",
-        "Australia/Lord_Howe", "Lord_Howe", "Australia/Lord_Howe",
-        "America/Argentina/La_Rioja", "Argentina", "America/Buenos_Aires",
-        "Europe/Jersey", "GMT", "Atlantic/Reykjavik",
-        "America/Kentucky/Louisville", "America_Eastern", "America/New_York",
-        "America/Monterrey", "America_Central", "America/Chicago",
-        "Europe/Belgrade", "Europe_Central", "Europe/Paris",
-        "Asia/Gaza", "Europe_Eastern", "Europe/Bucharest",
-        "Asia/Ho_Chi_Minh", "Indochina", "Asia/Saigon",
-        "Europe/Prague", "Europe_Central", "Europe/Paris",
-        "Indian/Christmas", "Christmas", "Indian/Christmas",
-        "Pacific/Fakaofo", "Tokelau", "Pacific/Fakaofo",
-        "America/Dominica", "Atlantic", "America/Halifax",
-        "America/Ojinaga", "America_Mountain", "America/Denver",
-        "Asia/Colombo", "India", "Asia/Calcutta",
-        "Asia/Nicosia", "Europe_Eastern", "Europe/Bucharest",
-        "Europe/Copenhagen", "Europe_Central", "Europe/Paris",
-        "America/Creston", "America_Mountain", "America/Denver",
-        "Asia/Ashgabat", "Turkmenistan", "Asia/Ashgabat",
-        "Asia/Shanghai", "China", "Asia/Shanghai",
-        "Pacific/Easter", "Easter", "Pacific/Easter",
-        "Africa/Maseru", "Africa_Southern", "Africa/Johannesburg",
-        "America/La_Paz", "Bolivia", "America/La_Paz",
-        "Pacific/Truk", "Truk", "Pacific/Truk",
-        "America/Inuvik", "America_Mountain", "America/Denver",
-        "America/Belem", "Brasilia", "America/Sao_Paulo",
-        "Asia/Hebron", "Europe_Eastern", "Europe/Bucharest",
-        "Asia/Jerusalem", "Israel", "Asia/Jerusalem",
-        "America/Belize", "America_Central", "America/Chicago",
-        "America/Rio_Branco", "Amazon", "America/Manaus",
-        "America/Dawson_Creek", "America_Mountain", "America/Denver",
-        "America/Anguilla", "Atlantic", "America/Halifax",
-        "America/Port_of_Spain", "Atlantic", "America/Halifax",
-        "America/St_Barthelemy", "Atlantic", "America/Halifax",
-        "America/Indiana/Marengo", "America_Eastern", "America/New_York",
-        "America/St_Johns", "Newfoundland", "America/St_Johns",
-        "Asia/Jayapura", "Indonesia_Eastern", "Asia/Jayapura",
-        "Europe/Riga", "Europe_Eastern", "Europe/Bucharest",
-        "America/Phoenix", "America_Mountain", "America/Denver",
-        "America/Boise", "America_Mountain", "America/Denver",
-        "Pacific/Kiritimati", "Line_Islands", "Pacific/Kiritimati",
-        "Africa/Johannesburg", "Africa_Southern", "Africa/Johannesburg",
-        "America/Pangnirtung", "America_Eastern", "America/New_York",
-        "America/Toronto", "America_Eastern", "America/New_York",
-        "Australia/Brisbane", "Australia_Eastern", "Australia/Sydney",
-        "Asia/Aqtau", "Kazakhstan_Western", "Asia/Aqtobe",
-        "America/Vancouver", "America_Pacific", "America/Los_Angeles",
-        "Africa/Mbabane", "Africa_Southern", "Africa/Johannesburg",
-        "Europe/Vaduz", "Europe_Central", "Europe/Paris",
-        "Asia/Karachi", "Pakistan", "Asia/Karachi",
-        "Asia/Riyadh", "Arabian", "Asia/Riyadh",
-        "Indian/Maldives", "Maldives", "Indian/Maldives",
-        "Asia/Anadyr", "Magadan", "Asia/Magadan",
-        "Europe/Helsinki", "Europe_Eastern", "Europe/Bucharest",
+        "America/Nassau", "America_Eastern", "America/New_York",
+        "America/New_York", "America_Eastern", "America/New_York",
+        "America/Nipigon", "America_Eastern", "America/New_York",
         "America/Nome", "Alaska", "America/Juneau",
-        "Asia/Yakutsk", "Yakutsk", "Asia/Yakutsk",
-        "Asia/Yangon", "Myanmar", "Asia/Rangoon",
-        "Africa/Conakry", "GMT", "Atlantic/Reykjavik",
-        "Asia/Seoul", "Korea", "Asia/Seoul",
-        "America/Antigua", "Atlantic", "America/Halifax",
-        "Asia/Almaty", "Kazakhstan_Eastern", "Asia/Almaty",
-        "America/Fortaleza", "Brasilia", "America/Sao_Paulo",
-        "Pacific/Tahiti", "Tahiti", "Pacific/Tahiti",
-        "Asia/Kashgar", "China", "Asia/Shanghai",
-        "America/Whitehorse", "America_Pacific", "America/Los_Angeles",
-        "Europe/Kaliningrad", "Europe_Eastern", "Europe/Bucharest",
-        "Pacific/Enderbury", "Phoenix_Islands", "Pacific/Enderbury",
+        "America/Noronha", "Noronha", "America/Noronha",
+        "America/North_Dakota/Beulah", "America_Central", "America/Chicago",
+        "America/North_Dakota/Center", "America_Central", "America/Chicago",
+        "America/North_Dakota/New_Salem", "America_Central", "America/Chicago",
+        "America/Ojinaga", "America_Mountain", "America/Denver",
+        "America/Panama", "America_Eastern", "America/New_York",
+        "America/Pangnirtung", "America_Eastern", "America/New_York",
+        "America/Paramaribo", "Suriname", "America/Paramaribo",
+        "America/Phoenix", "America_Mountain", "America/Denver",
+        "America/Port-au-Prince", "America_Eastern", "America/New_York",
+        "America/Port_of_Spain", "Atlantic", "America/Halifax",
+        "America/Porto_Acre", "Acre", "America/Rio_Branco",
+        "America/Porto_Velho", "Amazon", "America/Manaus",
+        "America/Puerto_Rico", "Atlantic", "America/Halifax",
+        "America/Rainy_River", "America_Central", "America/Chicago",
+        "America/Rankin_Inlet", "America_Central", "America/Chicago",
+        "America/Recife", "Brasilia", "America/Sao_Paulo",
+        "America/Regina", "America_Central", "America/Chicago",
+        "America/Resolute", "America_Central", "America/Chicago",
+        "America/Rio_Branco", "Acre", "America/Rio_Branco",
+        "America/Rosario", "Argentina", "America/Buenos_Aires",
+        "America/Santa_Isabel", "Mexico_Northwest", "America/Santa_Isabel",
+        "America/Santarem", "Brasilia", "America/Sao_Paulo",
+        "America/Santiago", "Chile", "America/Santiago",
+        "America/Santo_Domingo", "Atlantic", "America/Halifax",
+        "America/Sao_Paulo", "Brasilia", "America/Sao_Paulo",
+        "America/Scoresbysund", "Greenland_Eastern", "America/Scoresbysund",
+        "America/Shiprock", "America_Mountain", "America/Denver",
+        "America/Sitka", "Alaska", "America/Juneau",
+        "America/St_Barthelemy", "Atlantic", "America/Halifax",
+        "America/St_Johns", "Newfoundland", "America/St_Johns",
+        "America/St_Kitts", "Atlantic", "America/Halifax",
         "America/St_Lucia", "Atlantic", "America/Halifax",
-        "Atlantic/Stanley", "Falkland", "Atlantic/Stanley",
-        "Asia/Omsk", "Omsk", "Asia/Omsk",
-        "America/Menominee", "America_Central", "America/Chicago",
-        "Asia/Novokuznetsk", "Novosibirsk", "Asia/Novosibirsk",
-        "Asia/Sakhalin", "Sakhalin", "Asia/Sakhalin",
+        "America/St_Thomas", "Atlantic", "America/Halifax",
+        "America/St_Vincent", "Atlantic", "America/Halifax",
+        "America/Swift_Current", "America_Central", "America/Chicago",
+        "America/Tegucigalpa", "America_Central", "America/Chicago",
+        "America/Thule", "Atlantic", "America/Halifax",
+        "America/Thunder_Bay", "America_Eastern", "America/New_York",
+        "America/Tijuana", "America_Pacific", "America/Los_Angeles",
+        "America/Toronto", "America_Eastern", "America/New_York",
+        "America/Tortola", "Atlantic", "America/Halifax",
+        "America/Vancouver", "America_Pacific", "America/Los_Angeles",
+        "America/Virgin", "Atlantic", "America/Halifax",
+        "America/Whitehorse", "America_Pacific", "America/Los_Angeles",
+        "America/Winnipeg", "America_Central", "America/Chicago",
+        "America/Yakutat", "Alaska", "America/Juneau",
+        "America/Yellowknife", "America_Mountain", "America/Denver",
+        "Antarctica/Casey", "Australia_Western", "Australia/Perth",
+        "Antarctica/Davis", "Davis", "Antarctica/Davis",
+        "Antarctica/DumontDUrville", "DumontDUrville", "Antarctica/DumontDUrville",
+        "Antarctica/Macquarie", "Macquarie", "Antarctica/Macquarie",
+        "Antarctica/Mawson", "Mawson", "Antarctica/Mawson",
+        "Antarctica/McMurdo", "New_Zealand", "Pacific/Auckland",
+        "Antarctica/Palmer", "Chile", "America/Santiago",
+        "Antarctica/Rothera", "Rothera", "Antarctica/Rothera",
+        "Antarctica/South_Pole", "New_Zealand", "Pacific/Auckland",
+        "Antarctica/Syowa", "Syowa", "Antarctica/Syowa",
+        "Antarctica/Troll", "GMT", "Atlantic/Reykjavik",
+        "Antarctica/Vostok", "Vostok", "Antarctica/Vostok",
+        "Arctic/Longyearbyen", "Europe_Central", "Europe/Paris",
+        "Asia/Aden", "Arabian", "Asia/Riyadh",
+        "Asia/Almaty", "Kazakhstan_Eastern", "Asia/Almaty",
+        "Asia/Amman", "Europe_Eastern", "Europe/Bucharest",
+        "Asia/Anadyr", "Magadan", "Asia/Magadan",
+        "Asia/Aqtau", "Kazakhstan_Western", "Asia/Aqtobe",
+        "Asia/Aqtobe", "Kazakhstan_Western", "Asia/Aqtobe",
+        "Asia/Ashgabat", "Turkmenistan", "Asia/Ashgabat",
+        "Asia/Ashkhabad", "Turkmenistan", "Asia/Ashgabat",
+        "Asia/Baghdad", "Arabian", "Asia/Riyadh",
+        "Asia/Bahrain", "Arabian", "Asia/Riyadh",
+        "Asia/Baku", "Azerbaijan", "Asia/Baku",
+        "Asia/Bangkok", "Indochina", "Asia/Bangkok",
+        "Asia/Beirut", "Europe_Eastern", "Europe/Bucharest",
+        "Asia/Bishkek", "Kyrgystan", "Asia/Bishkek",
+        "Asia/Brunei", "Brunei", "Asia/Brunei",
+        "Asia/Calcutta", "India", "Asia/Calcutta",
+        "Asia/Chita", "Yakutsk", "Asia/Yakutsk",
+        "Asia/Choibalsan", "Choibalsan", "Asia/Choibalsan",
+        "Asia/Chongqing", "China", "Asia/Shanghai",
+        "Asia/Chungking", "China", "Asia/Shanghai",
+        "Asia/Colombo", "India", "Asia/Calcutta",
+        "Asia/Dacca", "Bangladesh", "Asia/Dhaka",
+        "Asia/Damascus", "Europe_Eastern", "Europe/Bucharest",
+        "Asia/Dhaka", "Bangladesh", "Asia/Dhaka",
+        "Asia/Dili", "East_Timor", "Asia/Dili",
+        "Asia/Dubai", "Gulf", "Asia/Dubai",
+        "Asia/Dushanbe", "Tajikistan", "Asia/Dushanbe",
+        "Asia/Gaza", "Europe_Eastern", "Europe/Bucharest",
+        "Asia/Harbin", "China", "Asia/Shanghai",
+        "Asia/Hebron", "Europe_Eastern", "Europe/Bucharest",
+        "Asia/Ho_Chi_Minh", "Indochina", "Asia/Bangkok",
+        "Asia/Hong_Kong", "Hong_Kong", "Asia/Hong_Kong",
+        "Asia/Hovd", "Hovd", "Asia/Hovd",
+        "Asia/Irkutsk", "Irkutsk", "Asia/Irkutsk",
+        "Asia/Istanbul", "Europe_Eastern", "Europe/Bucharest",
+        "Asia/Jakarta", "Indonesia_Western", "Asia/Jakarta",
+        "Asia/Jayapura", "Indonesia_Eastern", "Asia/Jayapura",
+        "Asia/Jerusalem", "Israel", "Asia/Jerusalem",
+        "Asia/Kabul", "Afghanistan", "Asia/Kabul",
+        "Asia/Kamchatka", "Kamchatka", "Asia/Kamchatka",
+        "Asia/Karachi", "Pakistan", "Asia/Karachi",
+        "Asia/Kashgar", "Urumqi", "Asia/Urumqi",
+        "Asia/Kathmandu", "Nepal", "Asia/Katmandu",
+        "Asia/Katmandu", "Nepal", "Asia/Katmandu",
+        "Asia/Khandyga", "Yakutsk", "Asia/Yakutsk",
+        "Asia/Kolkata", "India", "Asia/Calcutta",
+        "Asia/Krasnoyarsk", "Krasnoyarsk", "Asia/Krasnoyarsk",
+        "Asia/Kuala_Lumpur", "Malaysia", "Asia/Kuching",
+        "Asia/Kuching", "Malaysia", "Asia/Kuching",
+        "Asia/Kuwait", "Arabian", "Asia/Riyadh",
+        "Asia/Macao", "China", "Asia/Shanghai",
+        "Asia/Macau", "China", "Asia/Shanghai",
+        "Asia/Magadan", "Magadan", "Asia/Magadan",
+        "Asia/Makassar", "Indonesia_Central", "Asia/Makassar",
+        "Asia/Manila", "Philippines", "Asia/Manila",
         "Asia/Muscat", "Gulf", "Asia/Dubai",
-        "Pacific/Noumea", "New_Caledonia", "Pacific/Noumea",
-        "Asia/Phnom_Penh", "Indochina", "Asia/Saigon",
-        "Antarctica/Mawson", "Mawson", "Antarctica/Mawson",
-        "Indian/Cocos", "Cocos", "Indian/Cocos",
-        "Europe/Tallinn", "Europe_Eastern", "Europe/Bucharest",
-        "Africa/Nairobi", "Africa_Eastern", "Africa/Nairobi",
+        "Asia/Nicosia", "Europe_Eastern", "Europe/Bucharest",
+        "Asia/Novokuznetsk", "Krasnoyarsk", "Asia/Krasnoyarsk",
+        "Asia/Novosibirsk", "Novosibirsk", "Asia/Novosibirsk",
+        "Asia/Omsk", "Omsk", "Asia/Omsk",
+        "Asia/Oral", "Kazakhstan_Western", "Asia/Aqtobe",
+        "Asia/Phnom_Penh", "Indochina", "Asia/Bangkok",
+        "Asia/Pontianak", "Indonesia_Western", "Asia/Jakarta",
+        "Asia/Pyongyang", "Pyongyang", "Asia/Pyongyang",
+        "Asia/Qatar", "Arabian", "Asia/Riyadh",
+        "Asia/Qyzylorda", "Kazakhstan_Eastern", "Asia/Almaty",
+        "Asia/Rangoon", "Myanmar", "Asia/Rangoon",
+        "Asia/Riyadh", "Arabian", "Asia/Riyadh",
+        "Asia/Saigon", "Indochina", "Asia/Bangkok",
+        "Asia/Sakhalin", "Sakhalin", "Asia/Sakhalin",
+        "Asia/Samarkand", "Uzbekistan", "Asia/Tashkent",
+        "Asia/Seoul", "Korea", "Asia/Seoul",
+        "Asia/Shanghai", "China", "Asia/Shanghai",
+        "Asia/Singapore", "Singapore", "Asia/Singapore",
+        "Asia/Srednekolymsk", "Singapore", "Asia/Singapore",
+        "Asia/Taipei", "Taipei", "Asia/Taipei",
+        "Asia/Tashkent", "Uzbekistan", "Asia/Tashkent",
+        "Asia/Tbilisi", "Georgia", "Asia/Tbilisi",
+        "Asia/Tehran", "Iran", "Asia/Tehran",
+        "Asia/Tel_Aviv", "Israel", "Asia/Jerusalem",
+        "Asia/Thimbu", "Bhutan", "Asia/Thimphu",
+        "Asia/Thimphu", "Bhutan", "Asia/Thimphu",
+        "Asia/Tokyo", "Japan", "Asia/Tokyo",
+        "Asia/Ujung_Pandang", "Indonesia_Central", "Asia/Makassar",
+        "Asia/Ulaanbaatar", "Mongolia", "Asia/Ulaanbaatar",
+        "Asia/Ulan_Bator", "Mongolia", "Asia/Ulaanbaatar",
+        "Asia/Urumqi", "Urumqi", "Asia/Urumqi",
+        "Asia/Ust-Nera", "Vladivostok", "Asia/Vladivostok",
+        "Asia/Vientiane", "Indochina", "Asia/Bangkok",
+        "Asia/Vladivostok", "Vladivostok", "Asia/Vladivostok",
+        "Asia/Yakutsk", "Yakutsk", "Asia/Yakutsk",
+        "Asia/Yekaterinburg", "Yekaterinburg", "Asia/Yekaterinburg",
+        "Asia/Yerevan", "Armenia", "Asia/Yerevan",
+        "Atlantic/Azores", "Azores", "Atlantic/Azores",
+        "Atlantic/Bermuda", "Atlantic", "America/Halifax",
+        "Atlantic/Canary", "Europe_Western", "Atlantic/Canary",
+        "Atlantic/Cape_Verde", "Cape_Verde", "Atlantic/Cape_Verde",
+        "Atlantic/Faeroe", "Europe_Western", "Atlantic/Canary",
+        "Atlantic/Faroe", "Europe_Western", "Atlantic/Canary",
+        "Atlantic/Jan_Mayen", "Europe_Central", "Europe/Paris",
+        "Atlantic/Madeira", "Europe_Western", "Atlantic/Canary",
+        "Atlantic/Reykjavik", "GMT", "Atlantic/Reykjavik",
+        "Atlantic/South_Georgia", "South_Georgia", "Atlantic/South_Georgia",
+        "Atlantic/St_Helena", "GMT", "Atlantic/Reykjavik",
+        "Atlantic/Stanley", "Falkland", "Atlantic/Stanley",
+        "Australia/ACT", "Australia_Eastern", "Australia/Sydney",
+        "Australia/Adelaide", "Australia_Central", "Australia/Adelaide",
+        "Australia/Brisbane", "Australia_Eastern", "Australia/Sydney",
+        "Australia/Broken_Hill", "Australia_Central", "Australia/Adelaide",
+        "Australia/Canberra", "Australia_Eastern", "Australia/Sydney",
+        "Australia/Currie", "Australia_Eastern", "Australia/Sydney",
+        "Australia/Darwin", "Australia_Central", "Australia/Adelaide",
+        "Australia/Eucla", "Australia_CentralWestern", "Australia/Eucla",
+        "Australia/Hobart", "Australia_Eastern", "Australia/Sydney",
+        "Australia/LHI", "Lord_Howe", "Australia/Lord_Howe",
+        "Australia/Lindeman", "Australia_Eastern", "Australia/Sydney",
+        "Australia/Lord_Howe", "Lord_Howe", "Australia/Lord_Howe",
+        "Australia/Melbourne", "Australia_Eastern", "Australia/Sydney",
+        "Australia/NSW", "Australia_Eastern", "Australia/Sydney",
+        "Australia/North", "Australia_Central", "Australia/Adelaide",
+        "Australia/Perth", "Australia_Western", "Australia/Perth",
+        "Australia/Queensland", "Australia_Eastern", "Australia/Sydney",
+        "Australia/South", "Australia_Central", "Australia/Adelaide",
+        "Australia/Sydney", "Australia_Eastern", "Australia/Sydney",
+        "Australia/Tasmania", "Australia_Eastern", "Australia/Sydney",
+        "Australia/Victoria", "Australia_Eastern", "Australia/Sydney",
+        "Australia/West", "Australia_Western", "Australia/Perth",
+        "Australia/Yancowinna", "Australia_Central", "Australia/Adelaide",
+        "Brazil/Acre", "Acre", "America/Rio_Branco",
+        "Brazil/DeNoronha", "Noronha", "America/Noronha",
+        "Brazil/East", "Brasilia", "America/Sao_Paulo",
+        "Brazil/West", "Amazon", "America/Manaus",
+        "CST6CDT", "America_Central", "America/Chicago",
+        "Canada/Atlantic", "Atlantic", "America/Halifax",
+        "Canada/Central", "America_Central", "America/Chicago",
+        "Canada/East-Saskatchewan", "America_Central", "America/Chicago",
+        "Canada/Eastern", "America_Eastern", "America/New_York",
+        "Canada/Mountain", "America_Mountain", "America/Denver",
+        "Canada/Newfoundland", "Newfoundland", "America/St_Johns",
+        "Canada/Pacific", "America_Pacific", "America/Los_Angeles",
+        "Canada/Saskatchewan", "America_Central", "America/Chicago",
+        "Canada/Yukon", "America_Pacific", "America/Los_Angeles",
+        "Chile/Continental", "Chile", "America/Santiago",
+        "Chile/EasterIsland", "Easter", "Pacific/Easter",
+        "Cuba", "Cuba", "America/Havana",
+        "EST5EDT", "America_Eastern", "America/New_York",
+        "Egypt", "Europe_Eastern", "Europe/Bucharest",
+        "Eire", "GMT", "Atlantic/Reykjavik",
+        "Europe/Amsterdam", "Europe_Central", "Europe/Paris",
+        "Europe/Andorra", "Europe_Central", "Europe/Paris",
+        "Europe/Athens", "Europe_Eastern", "Europe/Bucharest",
+        "Europe/Belfast", "GMT", "Atlantic/Reykjavik",
+        "Europe/Belgrade", "Europe_Central", "Europe/Paris",
+        "Europe/Berlin", "Europe_Central", "Europe/Paris",
+        "Europe/Bratislava", "Europe_Central", "Europe/Paris",
+        "Europe/Brussels", "Europe_Central", "Europe/Paris",
+        "Europe/Bucharest", "Europe_Eastern", "Europe/Bucharest",
+        "Europe/Budapest", "Europe_Central", "Europe/Paris",
+        "Europe/Busingen", "Europe_Central", "Europe/Paris",
+        "Europe/Chisinau", "Europe_Eastern", "Europe/Bucharest",
+        "Europe/Copenhagen", "Europe_Central", "Europe/Paris",
+        "Europe/Dublin", "GMT", "Atlantic/Reykjavik",
+        "Europe/Gibraltar", "Europe_Central", "Europe/Paris",
+        "Europe/Guernsey", "GMT", "Atlantic/Reykjavik",
+        "Europe/Helsinki", "Europe_Eastern", "Europe/Bucharest",
+        "Europe/Isle_of_Man", "GMT", "Atlantic/Reykjavik",
+        "Europe/Istanbul", "Europe_Eastern", "Europe/Bucharest",
+        "Europe/Jersey", "GMT", "Atlantic/Reykjavik",
+        "Europe/Kaliningrad", "Europe_Eastern", "Europe/Bucharest",
+        "Europe/Kiev", "Europe_Eastern", "Europe/Bucharest",
+        "Europe/Lisbon", "Europe_Western", "Atlantic/Canary",
         "Europe/Ljubljana", "Europe_Central", "Europe/Paris",
-        "America/Montreal", "America_Eastern", "America/New_York",
-        "Asia/Kuala_Lumpur", "Malaysia", "Asia/Kuching",
-        "Asia/Magadan", "Magadan", "Asia/Magadan",
-        "Africa/Bamako", "GMT", "Atlantic/Reykjavik",
-        "Australia/Broken_Hill", "Australia_Central", "Australia/Adelaide",
-        "America/Indiana/Indianapolis", "America_Eastern", "America/New_York",
-        "Asia/Taipei", "Taipei", "Asia/Taipei",
-        "Europe/Samara", "Moscow", "Europe/Moscow",
-        "America/Indiana/Vevay", "America_Eastern", "America/New_York",
-        "Atlantic/South_Georgia", "South_Georgia", "Atlantic/South_Georgia",
-        "Pacific/Wake", "Wake", "Pacific/Wake",
-        "Asia/Tashkent", "Uzbekistan", "Asia/Tashkent",
-        "America/St_Thomas", "Atlantic", "America/Halifax",
-        "America/Argentina/San_Luis", "Argentina_Western", "America/Argentina/San_Luis",
-        "Arctic/Longyearbyen", "Europe_Central", "Europe/Paris",
-        "Asia/Chongqing", "China", "Asia/Shanghai",
+        "Europe/London", "GMT", "Atlantic/Reykjavik",
+        "Europe/Luxembourg", "Europe_Central", "Europe/Paris",
+        "Europe/Madrid", "Europe_Central", "Europe/Paris",
+        "Europe/Malta", "Europe_Central", "Europe/Paris",
+        "Europe/Mariehamn", "Europe_Eastern", "Europe/Bucharest",
+        "Europe/Minsk", "Europe_Further_Eastern", "Europe/Minsk",
         "Europe/Monaco", "Europe_Central", "Europe/Paris",
-        "Asia/Qatar", "Arabian", "Asia/Riyadh",
-        "America/Chihuahua", "America_Mountain", "America/Denver",
-        "America/Havana", "Cuba", "America/Havana",
-        "Pacific/Auckland", "New_Zealand", "Pacific/Auckland",
-        "America/Jujuy", "Argentina", "America/Buenos_Aires",
-        "America/Goose_Bay", "Atlantic", "America/Halifax",
-        "Africa/Niamey", "Africa_Western", "Africa/Lagos",
-        "Asia/Kathmandu", "Nepal", "Asia/Katmandu",
-        "America/Caracas", "Venezuela", "America/Caracas",
+        "Europe/Moscow", "Moscow", "Europe/Moscow",
+        "Europe/Nicosia", "Europe_Eastern", "Europe/Bucharest",
+        "Europe/Oslo", "Europe_Central", "Europe/Paris",
+        "Europe/Paris", "Europe_Central", "Europe/Paris",
+        "Europe/Podgorica", "Europe_Central", "Europe/Paris",
+        "Europe/Prague", "Europe_Central", "Europe/Paris",
+        "Europe/Riga", "Europe_Eastern", "Europe/Bucharest",
+        "Europe/Rome", "Europe_Central", "Europe/Paris",
+        "Europe/Samara", "Samara", "Europe/Samara",
+        "Europe/San_Marino", "Europe_Central", "Europe/Paris",
+        "Europe/Sarajevo", "Europe_Central", "Europe/Paris",
+        "Europe/Simferopol", "Moscow", "Europe/Moscow",
+        "Europe/Skopje", "Europe_Central", "Europe/Paris",
+        "Europe/Sofia", "Europe_Eastern", "Europe/Bucharest",
+        "Europe/Stockholm", "Europe_Central", "Europe/Paris",
+        "Europe/Tallinn", "Europe_Eastern", "Europe/Bucharest",
+        "Europe/Tirane", "Europe_Central", "Europe/Paris",
+        "Europe/Tiraspol", "Europe_Eastern", "Europe/Bucharest",
+        "Europe/Uzhgorod", "Europe_Eastern", "Europe/Bucharest",
+        "Europe/Vaduz", "Europe_Central", "Europe/Paris",
+        "Europe/Vatican", "Europe_Central", "Europe/Paris",
+        "Europe/Vienna", "Europe_Central", "Europe/Paris",
+        "Europe/Vilnius", "Europe_Eastern", "Europe/Bucharest",
+        "Europe/Volgograd", "Moscow", "Europe/Moscow",
+        "Europe/Warsaw", "Europe_Central", "Europe/Paris",
+        "Europe/Zagreb", "Europe_Central", "Europe/Paris",
+        "Europe/Zaporozhye", "Europe_Eastern", "Europe/Bucharest",
+        "Europe/Zurich", "Europe_Central", "Europe/Paris",
+        "GB", "GMT", "Atlantic/Reykjavik",
+        "GB-Eire", "GMT", "Atlantic/Reykjavik",
+        "Hongkong", "Hong_Kong", "Asia/Hong_Kong",
+        "Iceland", "GMT", "Atlantic/Reykjavik",
+        "Indian/Antananarivo", "Africa_Eastern", "Africa/Nairobi",
+        "Indian/Chagos", "Indian_Ocean", "Indian/Chagos",
+        "Indian/Christmas", "Christmas", "Indian/Christmas",
+        "Indian/Cocos", "Cocos", "Indian/Cocos",
         "Indian/Comoro", "Africa_Eastern", "Africa/Nairobi",
-        "America/Argentina/Jujuy", "Argentina", "America/Buenos_Aires",
-        "America/Guyana", "Guyana", "America/Guyana",
-        "America/Indiana/Tell_City", "America_Central", "America/Chicago",
-        "America/Metlakatla", "America_Pacific", "America/Los_Angeles",
-        "Europe/Mariehamn", "Europe_Eastern", "Europe/Bucharest",
-        "Europe/Dublin", "GMT", "Atlantic/Reykjavik",
-        "Europe/Lisbon", "Europe_Western", "Atlantic/Canary",
-        "America/Puerto_Rico", "Atlantic", "America/Halifax",
-        "Asia/Pyongyang", "Korea", "Asia/Seoul",
-        "America/North_Dakota/New_Salem", "America_Central", "America/Chicago",
-        "Asia/Dhaka", "Bangladesh", "Asia/Dhaka",
-        "America/Rankin_Inlet", "America_Central", "America/Chicago",
-        "America/Adak", "Hawaii_Aleutian", "Pacific/Honolulu",
-        "America/Campo_Grande", "Amazon", "America/Manaus",
-        "Europe/Chisinau", "Europe_Eastern", "Europe/Bucharest",
-        "Pacific/Saipan", "Chamorro", "Pacific/Saipan",
-        "Pacific/Niue", "Niue", "Pacific/Niue",
-        "Europe/Madrid", "Europe_Central", "Europe/Paris",
+        "Indian/Kerguelen", "French_Southern", "Indian/Kerguelen",
+        "Indian/Mahe", "Seychelles", "Indian/Mahe",
+        "Indian/Maldives", "Maldives", "Indian/Maldives",
+        "Indian/Mauritius", "Mauritius", "Indian/Mauritius",
+        "Indian/Mayotte", "Africa_Eastern", "Africa/Nairobi",
+        "Indian/Reunion", "Reunion", "Indian/Reunion",
+        "Iran", "Iran", "Asia/Tehran",
+        "Israel", "Israel", "Asia/Jerusalem",
+        "Jamaica", "America_Eastern", "America/New_York",
+        "Japan", "Japan", "Asia/Tokyo",
+        "Kwajalein", "Marshall_Islands", "Pacific/Majuro",
+        "Libya", "Europe_Eastern", "Europe/Bucharest",
+        "MST7MDT", "America_Mountain", "America/Denver",
+        "Mexico/BajaNorte", "America_Pacific", "America/Los_Angeles",
+        "Mexico/BajaSur", "Mexico_Pacific", "America/Mazatlan",
+        "Mexico/General", "America_Central", "America/Chicago",
+        "NZ", "New_Zealand", "Pacific/Auckland",
+        "NZ-CHAT", "Chatham", "Pacific/Chatham",
+        "Navajo", "America_Mountain", "America/Denver",
+        "PRC", "China", "Asia/Shanghai",
+        "PST8PDT", "America_Pacific", "America/Los_Angeles",
+        "Pacific/Apia", "Apia", "Pacific/Apia",
+        "Pacific/Auckland", "New_Zealand", "Pacific/Auckland",
+        "Pacific/Bougainville", "New_Zealand", "Pacific/Auckland",
+        "Pacific/Chatham", "Chatham", "Pacific/Chatham",
+        "Pacific/Chuuk", "Truk", "Pacific/Truk",
+        "Pacific/Easter", "Easter", "Pacific/Easter",
+        "Pacific/Efate", "Vanuatu", "Pacific/Efate",
+        "Pacific/Enderbury", "Phoenix_Islands", "Pacific/Enderbury",
+        "Pacific/Fakaofo", "Tokelau", "Pacific/Fakaofo",
+        "Pacific/Fiji", "Fiji", "Pacific/Fiji",
+        "Pacific/Funafuti", "Tuvalu", "Pacific/Funafuti",
+        "Pacific/Galapagos", "Galapagos", "Pacific/Galapagos",
+        "Pacific/Gambier", "Gambier", "Pacific/Gambier",
+        "Pacific/Guadalcanal", "Solomon", "Pacific/Guadalcanal",
+        "Pacific/Guam", "Chamorro", "Pacific/Saipan",
+        "Pacific/Honolulu", "Hawaii_Aleutian", "Pacific/Honolulu",
+        "Pacific/Johnston", "Hawaii_Aleutian", "Pacific/Honolulu",
+        "Pacific/Kiritimati", "Line_Islands", "Pacific/Kiritimati",
+        "Pacific/Kosrae", "Kosrae", "Pacific/Kosrae",
         "Pacific/Kwajalein", "Marshall_Islands", "Pacific/Majuro",
-        "America/Porto_Velho", "Amazon", "America/Manaus",
-        "Indian/Kerguelen", "French_Southern", "Indian/Kerguelen",
-        "America/Santarem", "Brasilia", "America/Sao_Paulo",
-        "Asia/Kuching", "Malaysia", "Asia/Kuching",
-        "Australia/Adelaide", "Australia_Central", "Australia/Adelaide",
-        "Europe/Bucharest", "Europe_Eastern", "Europe/Bucharest",
-        "Australia/Perth", "Australia_Western", "Australia/Perth",
-        "Europe/Sofia", "Europe_Eastern", "Europe/Bucharest",
-        "Indian/Chagos", "Indian_Ocean", "Indian/Chagos",
-        "America/Yellowknife", "America_Mountain", "America/Denver",
-        "America/Managua", "America_Central", "America/Chicago",
-        "America/Iqaluit", "America_Eastern", "America/New_York",
-        "Pacific/Kosrae", "Kosrae", "Pacific/Kosrae",
-        "Pacific/Guadalcanal", "Solomon", "Pacific/Guadalcanal",
-        "America/Barbados", "Atlantic", "America/Halifax",
-        "America/Aruba", "Atlantic", "America/Halifax",
-        "Europe/Andorra", "Europe_Central", "Europe/Paris",
-        "Pacific/Chatham", "Chatham", "Pacific/Chatham",
-        "America/Santo_Domingo", "Atlantic", "America/Halifax",
-        "America/Indiana/Vincennes", "America_Eastern", "America/New_York",
-        "Europe/Kiev", "Europe_Eastern", "Europe/Bucharest",
-        "Pacific/Funafuti", "Tuvalu", "Pacific/Funafuti",
-        "America/Mexico_City", "America_Central", "America/Chicago",
-        "America/Kentucky/Monticello", "America_Eastern", "America/New_York",
-        "America/Argentina/Catamarca", "Argentina", "America/Buenos_Aires",
-        "Pacific/Johnston", "Hawaii_Aleutian", "Pacific/Honolulu",
-        "Europe/Podgorica", "Europe_Central", "Europe/Paris",
-        "Europe/Zagreb", "Europe_Central", "Europe/Paris",
+        "Pacific/Majuro", "Marshall_Islands", "Pacific/Majuro",
+        "Pacific/Marquesas", "Marquesas", "Pacific/Marquesas",
+        "Pacific/Midway", "Samoa", "Pacific/Pago_Pago",
+        "Pacific/Nauru", "Nauru", "Pacific/Nauru",
+        "Pacific/Niue", "Niue", "Pacific/Niue",
+        "Pacific/Norfolk", "Norfolk", "Pacific/Norfolk",
+        "Pacific/Noumea", "New_Caledonia", "Pacific/Noumea",
+        "Pacific/Pago_Pago", "Samoa", "Pacific/Pago_Pago",
+        "Pacific/Palau", "Palau", "Pacific/Palau",
+        "Pacific/Pitcairn", "Pitcairn", "Pacific/Pitcairn",
         "Pacific/Pohnpei", "Ponape", "Pacific/Ponape",
-        "Antarctica/Palmer", "Chile", "America/Santiago",
-        "America/Argentina/Mendoza", "Argentina", "America/Buenos_Aires",
-        "America/Lima", "Peru", "America/Lima",
-        "Antarctica/Macquarie", "Macquarie", "Antarctica/Macquarie",
-        "Europe/Malta", "Europe_Central", "Europe/Paris",
-        "America/Danmarkshavn", "GMT", "Atlantic/Reykjavik",
+        "Pacific/Ponape", "Ponape", "Pacific/Ponape",
+        "Pacific/Port_Moresby", "Papua_New_Guinea", "Pacific/Port_Moresby",
+        "Pacific/Rarotonga", "Cook", "Pacific/Rarotonga",
+        "Pacific/Saipan", "Chamorro", "Pacific/Saipan",
+        "Pacific/Samoa", "Samoa", "Pacific/Pago_Pago",
+        "Pacific/Tahiti", "Tahiti", "Pacific/Tahiti",
+        "Pacific/Tarawa", "Gilbert_Islands", "Pacific/Tarawa",
+        "Pacific/Tongatapu", "Tonga", "Pacific/Tongatapu",
+        "Pacific/Truk", "Truk", "Pacific/Truk",
+        "Pacific/Wake", "Wake", "Pacific/Wake",
+        "Pacific/Wallis", "Wallis", "Pacific/Wallis",
+        "Pacific/Yap", "Truk", "Pacific/Truk",
+        "Poland", "Europe_Central", "Europe/Paris",
+        "Portugal", "Europe_Western", "Atlantic/Canary",
+        "ROK", "Korea", "Asia/Seoul",
+        "Singapore", "Singapore", "Asia/Singapore",
+        "Turkey", "Europe_Eastern", "Europe/Bucharest",
+        "US/Alaska", "Alaska", "America/Juneau",
+        "US/Aleutian", "Hawaii_Aleutian", "Pacific/Honolulu",
+        "US/Arizona", "America_Mountain", "America/Denver",
+        "US/Central", "America_Central", "America/Chicago",
+        "US/East-Indiana", "America_Eastern", "America/New_York",
+        "US/Eastern", "America_Eastern", "America/New_York",
+        "US/Hawaii", "Hawaii_Aleutian", "Pacific/Honolulu",
+        "US/Indiana-Starke", "America_Central", "America/Chicago",
+        "US/Michigan", "America_Eastern", "America/New_York",
+        "US/Mountain", "America_Mountain", "America/Denver",
+        "US/Pacific", "America_Pacific", "America/Los_Angeles",
+        "US/Pacific-New", "America_Pacific", "America/Los_Angeles",
+        "US/Samoa", "Samoa", "Pacific/Pago_Pago",
+        "W-SU", "Moscow", "Europe/Moscow",
+
+        // From tzdb
+        "Africa/Khartoum", "Africa_Central", "Africa/Maputo", // tzdata2017c
+        "Africa/Windhoek", "Africa_Central", "Africa/Maputo", // tzdata2017c
+        "Africa/Sao_Tome", "Africa_Western", "Africa/Lagos",  // tzdata2018c
     };
     private static final String[] mzoneMap = new String[] {
-        "America_Eastern", "TC", "America/Grand_Turk",
-        "America_Eastern", "BS", "America/Nassau",
-        "America_Eastern", "CA", "America/Toronto",
-        "America_Eastern", "KY", "America/Cayman",
-        "America_Eastern", "PA", "America/Panama",
-        "America_Eastern", "JM", "America/Jamaica",
-        "America_Pacific", "CA", "America/Vancouver",
-        "America_Pacific", "MX", "America/Tijuana",
-        "Europe_Western", "FO", "Atlantic/Faeroe",
-        "Arabian", "YE", "Asia/Aden",
-        "Arabian", "BH", "Asia/Bahrain",
-        "Arabian", "KW", "Asia/Kuwait",
-        "Arabian", "QA", "Asia/Qatar",
-        "Arabian", "IQ", "Asia/Baghdad",
-        "Korea", "KP", "Asia/Pyongyang",
-        "Africa_Central", "ZW", "Africa/Harare",
-        "Africa_Central", "ZM", "Africa/Lusaka",
-        "Africa_Central", "MW", "Africa/Blantyre",
+        // From metaZones.xml
+        "Africa_Central", "BI", "Africa/Bujumbura",
         "Africa_Central", "BW", "Africa/Gaborone",
         "Africa_Central", "CD", "Africa/Lubumbashi",
-        "Africa_Central", "BI", "Africa/Bujumbura",
+        "Africa_Central", "MW", "Africa/Blantyre",
         "Africa_Central", "RW", "Africa/Kigali",
-        "Africa_Western", "ST", "Africa/Sao_Tome",
-        "Africa_Western", "CF", "Africa/Bangui",
+        "Africa_Central", "ZM", "Africa/Lusaka",
+        "Africa_Central", "ZW", "Africa/Harare",
+        "Africa_Eastern", "DJ", "Africa/Djibouti",
+        "Africa_Eastern", "ER", "Africa/Asmera",
+        "Africa_Eastern", "ET", "Africa/Addis_Ababa",
+        "Africa_Eastern", "KM", "Indian/Comoro",
+        "Africa_Eastern", "MG", "Indian/Antananarivo",
+        "Africa_Eastern", "SO", "Africa/Mogadishu",
+        "Africa_Eastern", "TZ", "Africa/Dar_es_Salaam",
+        "Africa_Eastern", "UG", "Africa/Kampala",
+        "Africa_Eastern", "YT", "Indian/Mayotte",
+        "Africa_Southern", "LS", "Africa/Maseru",
+        "Africa_Southern", "SZ", "Africa/Mbabane",
         "Africa_Western", "AO", "Africa/Luanda",
-        "Africa_Western", "NE", "Africa/Niamey",
+        "Africa_Western", "BJ", "Africa/Porto-Novo",
         "Africa_Western", "CD", "Africa/Kinshasa",
+        "Africa_Western", "CF", "Africa/Bangui",
+        "Africa_Western", "CG", "Africa/Brazzaville",
         "Africa_Western", "CM", "Africa/Douala",
-        "Africa_Western", "CG", "Africa/Brazzaville",
-        "Africa_Western", "GQ", "Africa/Malabo",
-        "Africa_Western", "TD", "Africa/Ndjamena",
         "Africa_Western", "GA", "Africa/Libreville",
-        "Atlantic", "PR", "America/Puerto_Rico",
-        "Atlantic", "AN", "America/Curacao",
-        "Atlantic", "VI", "America/St_Thomas",
-        "Atlantic", "GP", "America/Guadeloupe",
-        "Atlantic", "TT", "America/Port_of_Spain",
+        "Africa_Western", "GQ", "Africa/Malabo",
+        "Africa_Western", "NE", "Africa/Niamey",
+        "Africa_Western", "TD", "Africa/Ndjamena",
+        "America_Central", "BZ", "America/Belize",
+        "America_Central", "CA", "America/Winnipeg",
+        "America_Central", "CR", "America/Costa_Rica",
+        "America_Central", "GT", "America/Guatemala",
+        "America_Central", "HN", "America/Tegucigalpa",
+        "America_Central", "MX", "America/Mexico_City",
+        "America_Central", "SV", "America/El_Salvador",
+        "America_Eastern", "BS", "America/Nassau",
+        "America_Eastern", "CA", "America/Toronto",
+        "America_Eastern", "HT", "America/Port-au-Prince",
+        "America_Eastern", "JM", "America/Jamaica",
+        "America_Eastern", "KY", "America/Cayman",
+        "America_Eastern", "PA", "America/Panama",
+        "America_Mountain", "CA", "America/Edmonton",
+        "America_Mountain", "MX", "America/Hermosillo",
+        "America_Pacific", "CA", "America/Vancouver",
+        "America_Pacific", "MX", "America/Tijuana",
+        "Arabian", "BH", "Asia/Bahrain",
+        "Arabian", "IQ", "Asia/Baghdad",
+        "Arabian", "KW", "Asia/Kuwait",
+        "Arabian", "QA", "Asia/Qatar",
+        "Arabian", "YE", "Asia/Aden",
         "Atlantic", "AG", "America/Antigua",
-        "Atlantic", "MF", "America/Marigot",
-        "Atlantic", "DM", "America/Dominica",
-        "Atlantic", "VG", "America/Tortola",
-        "Atlantic", "MQ", "America/Martinique",
-        "Atlantic", "GL", "America/Thule",
         "Atlantic", "AI", "America/Anguilla",
+        "Atlantic", "AN", "America/Curacao",
+        "Atlantic", "AW", "America/Aruba",
         "Atlantic", "BB", "America/Barbados",
         "Atlantic", "BM", "Atlantic/Bermuda",
         "Atlantic", "BQ", "America/Kralendijk",
-        "Atlantic", "LC", "America/St_Lucia",
-        "Atlantic", "MS", "America/Montserrat",
-        "Atlantic", "SX", "America/Lower_Princes",
+        "Atlantic", "DM", "America/Dominica",
         "Atlantic", "GD", "America/Grenada",
-        "Atlantic", "VC", "America/St_Vincent",
+        "Atlantic", "GL", "America/Thule",
+        "Atlantic", "GP", "America/Guadeloupe",
         "Atlantic", "KN", "America/St_Kitts",
-        "Atlantic", "AW", "America/Aruba",
-        "GMT", "GM", "Africa/Banjul",
-        "GMT", "LR", "Africa/Monrovia",
-        "GMT", "ML", "Africa/Bamako",
-        "GMT", "SH", "Atlantic/St_Helena",
-        "GMT", "TG", "Africa/Lome",
-        "GMT", "GB", "Europe/London",
-        "GMT", "MR", "Africa/Nouakchott",
-        "GMT", "GN", "Africa/Conakry",
-        "GMT", "SL", "Africa/Freetown",
-        "GMT", "BF", "Africa/Ouagadougou",
-        "GMT", "SN", "Africa/Dakar",
-        "GMT", "CI", "Africa/Abidjan",
-        "GMT", "IE", "Europe/Dublin",
-        "GMT", "GH", "Africa/Accra",
+        "Atlantic", "LC", "America/St_Lucia",
+        "Atlantic", "MF", "America/Marigot",
+        "Atlantic", "MQ", "America/Martinique",
+        "Atlantic", "MS", "America/Montserrat",
+        "Atlantic", "PR", "America/Puerto_Rico",
+        "Atlantic", "SX", "America/Lower_Princes",
+        "Atlantic", "TT", "America/Port_of_Spain",
+        "Atlantic", "VC", "America/St_Vincent",
+        "Atlantic", "VG", "America/Tortola",
+        "Atlantic", "VI", "America/St_Thomas",
+        "Chamorro", "GU", "Pacific/Guam",
         "Chile", "AQ", "Antarctica/Palmer",
-        "America_Central", "CR", "America/Costa_Rica",
-        "America_Central", "HN", "America/Tegucigalpa",
-        "America_Central", "CA", "America/Winnipeg",
-        "America_Central", "SV", "America/El_Salvador",
-        "America_Central", "MX", "America/Mexico_City",
-        "America_Central", "BZ", "America/Belize",
-        "America_Central", "GT", "America/Guatemala",
-        "America_Mountain", "CA", "America/Edmonton",
-        "America_Mountain", "MX", "America/Hermosillo",
-        "New_Zealand", "AQ", "Antarctica/McMurdo",
-        "India", "LK", "Asia/Colombo",
-        "Gulf", "OM", "Asia/Muscat",
-        "China", "MO", "Asia/Macau",
-        "Africa_Eastern", "ER", "Africa/Asmera",
-        "Africa_Eastern", "TZ", "Africa/Dar_es_Salaam",
-        "Africa_Eastern", "SO", "Africa/Mogadishu",
-        "Africa_Eastern", "DJ", "Africa/Djibouti",
-        "Africa_Eastern", "MG", "Indian/Antananarivo",
-        "Africa_Eastern", "KM", "Indian/Comoro",
-        "Africa_Eastern", "UG", "Africa/Kampala",
-        "Africa_Eastern", "YT", "Indian/Mayotte",
-        "Africa_Eastern", "ET", "Africa/Addis_Ababa",
-        "Chamorro", "GU", "Pacific/Guam",
-        "Africa_Southern", "LS", "Africa/Maseru",
-        "Africa_Southern", "SZ", "Africa/Mbabane",
-        "Indochina", "KH", "Asia/Phnom_Penh",
-        "Indochina", "TH", "Asia/Bangkok",
-        "Indochina", "LA", "Asia/Vientiane",
+        "Europe_Central", "AD", "Europe/Andorra",
+        "Europe_Central", "AL", "Europe/Tirane",
         "Europe_Central", "AT", "Europe/Vienna",
-        "Europe_Central", "SK", "Europe/Bratislava",
         "Europe_Central", "BA", "Europe/Sarajevo",
+        "Europe_Central", "BE", "Europe/Brussels",
+        "Europe_Central", "CH", "Europe/Zurich",
         "Europe_Central", "CZ", "Europe/Prague",
-        "Europe_Central", "BE", "Europe/Brussels",
+        "Europe_Central", "DE", "Europe/Berlin",
+        "Europe_Central", "DK", "Europe/Copenhagen",
+        "Europe_Central", "ES", "Europe/Madrid",
+        "Europe_Central", "GI", "Europe/Gibraltar",
+        "Europe_Central", "HR", "Europe/Zagreb",
+        "Europe_Central", "HU", "Europe/Budapest",
+        "Europe_Central", "IT", "Europe/Rome",
+        "Europe_Central", "LI", "Europe/Vaduz",
+        "Europe_Central", "LU", "Europe/Luxembourg",
+        "Europe_Central", "MC", "Europe/Monaco",
+        "Europe_Central", "ME", "Europe/Podgorica",
+        "Europe_Central", "MK", "Europe/Skopje",
+        "Europe_Central", "MT", "Europe/Malta",
+        "Europe_Central", "NL", "Europe/Amsterdam",
+        "Europe_Central", "NO", "Europe/Oslo",
+        "Europe_Central", "PL", "Europe/Warsaw",
         "Europe_Central", "RS", "Europe/Belgrade",
         "Europe_Central", "SE", "Europe/Stockholm",
-        "Europe_Central", "MT", "Europe/Malta",
-        "Europe_Central", "IT", "Europe/Rome",
-        "Europe_Central", "LU", "Europe/Luxembourg",
-        "Europe_Central", "HU", "Europe/Budapest",
-        "Europe_Central", "NO", "Europe/Oslo",
-        "Europe_Central", "ME", "Europe/Podgorica",
-        "Europe_Central", "MK", "Europe/Skopje",
-        "Europe_Central", "NL", "Europe/Amsterdam",
-        "Europe_Central", "LI", "Europe/Vaduz",
-        "Europe_Central", "PL", "Europe/Warsaw",
-        "Europe_Central", "ES", "Europe/Madrid",
+        "Europe_Central", "SI", "Europe/Ljubljana",
+        "Europe_Central", "SK", "Europe/Bratislava",
+        "Europe_Central", "SM", "Europe/San_Marino",
         "Europe_Central", "TN", "Africa/Tunis",
-        "Europe_Central", "SI", "Europe/Ljubljana",
-        "Europe_Central", "DE", "Europe/Berlin",
-        "Europe_Central", "GI", "Europe/Gibraltar",
-        "Europe_Central", "CH", "Europe/Zurich",
-        "Europe_Central", "MC", "Europe/Monaco",
         "Europe_Central", "VA", "Europe/Vatican",
-        "Europe_Central", "HR", "Europe/Zagreb",
-        "Europe_Central", "AL", "Europe/Tirane",
-        "Europe_Central", "AD", "Europe/Andorra",
-        "Europe_Central", "DK", "Europe/Copenhagen",
-        "Europe_Central", "SM", "Europe/San_Marino",
-        "Europe_Eastern", "SY", "Asia/Damascus",
-        "Europe_Eastern", "FI", "Europe/Helsinki",
+        "Europe_Central", "XK", "Europe/Belgrade",
         "Europe_Eastern", "AX", "Europe/Mariehamn",
         "Europe_Eastern", "BG", "Europe/Sofia",
+        "Europe_Eastern", "CY", "Asia/Nicosia",
         "Europe_Eastern", "EG", "Africa/Cairo",
-        "Europe_Eastern", "LB", "Asia/Beirut",
+        "Europe_Eastern", "FI", "Europe/Helsinki",
         "Europe_Eastern", "GR", "Europe/Athens",
         "Europe_Eastern", "JO", "Asia/Amman",
-        "Europe_Eastern", "CY", "Asia/Nicosia",
+        "Europe_Eastern", "LB", "Asia/Beirut",
+        "Europe_Eastern", "SY", "Asia/Damascus",
+        "Europe_Further_Eastern", "RU", "Europe/Kaliningrad",
+        "Europe_Western", "FO", "Atlantic/Faeroe",
+        "GMT", "BF", "Africa/Ouagadougou",
+        "GMT", "CI", "Africa/Abidjan",
+        "GMT", "GB", "Europe/London",
+        "GMT", "GH", "Africa/Accra",
+        "GMT", "GM", "Africa/Banjul",
+        "GMT", "GN", "Africa/Conakry",
+        "GMT", "IE", "Europe/Dublin",
+        "GMT", "ML", "Africa/Bamako",
+        "GMT", "MR", "Africa/Nouakchott",
+        "GMT", "SH", "Atlantic/St_Helena",
+        "GMT", "SL", "Africa/Freetown",
+        "GMT", "SN", "Africa/Dakar",
+        "GMT", "ST", "Africa/Sao_Tome",
+        "GMT", "TG", "Africa/Lome",
+        "Gulf", "OM", "Asia/Muscat",
+        "India", "LK", "Asia/Colombo",
+        "Indochina", "KH", "Asia/Phnom_Penh",
+        "Indochina", "LA", "Asia/Vientiane",
+        "Korea", "KP", "Asia/Pyongyang",
+        "New_Zealand", "AQ", "Antarctica/McMurdo",
+
+        // From tzdb
+        "Africa_Western", "ST", "Africa/Sao_Tome", // tzdata2018c
     };
     private static final String[] aliasMap = new String[] {
-        "Mexico/BajaNorte", "America/Tijuana",
-        "Antarctica/South_Pole", "Antarctica/McMurdo",
-        "US/Michigan", "America/Detroit",
-        "America/Porto_Acre", "America/Rio_Branco",
+        // From supplementalMetadata.xml
+        "Africa/Timbuktu", "Africa/Bamako",
+        "America/Montreal", "America/Toronto",
+        "America/Shiprock", "America/Denver",
+        "Antarctica/South_Pole", "Pacific/Auckland",
+        "Asia/Chongqing", "Asia/Shanghai",
+        "Asia/Harbin", "Asia/Shanghai",
+        "Asia/Kashgar", "Asia/Urumqi",
+        "Atlantic/Jan_Mayen", "Europe/Oslo",
+        "EST", "America/Indianapolis",
+        "Europe/Belfast", "Europe/London",
+        "HST", "Pacific/Honolulu",
+        "MST", "America/Phoenix",
+        "Pacific/Yap", "Pacific/Truk",
+        "SystemV/AST4", "America/Puerto_Rico",
+        "SystemV/AST4ADT", "America/Halifax",
+        "SystemV/CST6", "America/Regina",
+        "SystemV/CST6CDT", "America/Chicago",
+        "SystemV/EST5", "America/Indianapolis",
+        "SystemV/EST5EDT", "America/New_York",
+        "SystemV/HST10", "Pacific/Honolulu",
+        "SystemV/MST7", "America/Phoenix",
+        "SystemV/MST7MDT", "America/Denver",
+        "SystemV/PST8", "Pacific/Pitcairn",
+        "SystemV/PST8PDT", "America/Los_Angeles",
+        "SystemV/YST9", "Pacific/Gambier",
+        "SystemV/YST9YDT", "America/Anchorage",
+
+        // From tzdb
+        "Brazil/Acre", "America/Rio_Branco",
+        "US/Indiana-Starke", "America/Indiana/Knox",
+        "America/Atka", "America/Adak",
+        "America/St_Barthelemy", "America/Guadeloupe",
+        "Australia/North", "Australia/Darwin",
+        "Europe/Zagreb", "Europe/Belgrade",
+        "Etc/Universal", "Etc/UTC",
+        "NZ-CHAT", "Pacific/Chatham",
+        "Asia/Macao", "Asia/Macau",
+        "Pacific/Yap", "Pacific/Chuuk",
+        "Egypt", "Africa/Cairo",
+        "US/Central", "America/Chicago",
+        "Canada/Atlantic", "America/Halifax",
+        "Brazil/East", "America/Sao_Paulo",
+        "America/Cordoba", "America/Argentina/Cordoba",
+        "US/Hawaii", "Pacific/Honolulu",
+        "America/Louisville", "America/Kentucky/Louisville",
+        "America/Shiprock", "America/Denver",
+        "Australia/Canberra", "Australia/Sydney",
+        "Asia/Chungking", "Asia/Chongqing",
+        "Universal", "Etc/UTC",
         "US/Alaska", "America/Anchorage",
         "Asia/Ujung_Pandang", "Asia/Makassar",
-        "Canada/Atlantic", "America/Halifax",
+        "Japan", "Asia/Tokyo",
+        "Atlantic/Faeroe", "Atlantic/Faroe",
+        "Asia/Istanbul", "Europe/Istanbul",
+        "US/Pacific", "America/Los_Angeles",
+        "Mexico/General", "America/Mexico_City",
+        "Poland", "Europe/Warsaw",
+        "Africa/Asmera", "Africa/Asmara",
+        "Asia/Saigon", "Asia/Ho_Chi_Minh",
+        "US/Michigan", "America/Detroit",
+        "America/Argentina/ComodRivadavia", "America/Argentina/Catamarca",
         "W-SU", "Europe/Moscow",
+        "Australia/ACT", "Australia/Sydney",
+        "Asia/Calcutta", "Asia/Kolkata",
+        "Arctic/Longyearbyen", "Europe/Oslo",
+        "America/Knox_IN", "America/Indiana/Knox",
+        "ROC", "Asia/Taipei",
+        "Zulu", "Etc/UTC",
+        "Australia/Yancowinna", "Australia/Broken_Hill",
+        "Australia/West", "Australia/Perth",
+        "Singapore", "Asia/Singapore",
+        "Europe/Mariehamn", "Europe/Helsinki",
+        "ROK", "Asia/Seoul",
+        "America/Porto_Acre", "America/Rio_Branco",
+        "Etc/Zulu", "Etc/UTC",
+        "Canada/Yukon", "America/Whitehorse",
+        "Europe/Vatican", "Europe/Rome",
+        "Africa/Timbuktu", "Africa/Bamako",
+        "America/Buenos_Aires", "America/Argentina/Buenos_Aires",
+        "Canada/Pacific", "America/Vancouver",
+        "US/Pacific-New", "America/Los_Angeles",
+        "Mexico/BajaNorte", "America/Tijuana",
+        "Europe/Guernsey", "Europe/London",
+        "Asia/Tel_Aviv", "Asia/Jerusalem",
+        "Chile/Continental", "America/Santiago",
+        "Jamaica", "America/Jamaica",
+        "Mexico/BajaSur", "America/Mazatlan",
+        "Canada/Eastern", "America/Toronto",
+        "Australia/Tasmania", "Australia/Hobart",
+        "NZ", "Pacific/Auckland",
+        "America/Lower_Princes", "America/Curacao",
+        "GMT-", "Etc/GMT",
+        "America/Rosario", "America/Argentina/Cordoba",
+        "Libya", "Africa/Tripoli",
+        "Asia/Ashkhabad", "Asia/Ashgabat",
+        "Australia/NSW", "Australia/Sydney",
+        "America/Marigot", "America/Guadeloupe",
+        "Europe/Bratislava", "Europe/Prague",
+        "Portugal", "Europe/Lisbon",
+        "Etc/GMT-", "Etc/GMT",
+        "Europe/San_Marino", "Europe/Rome",
+        "Europe/Sarajevo", "Europe/Belgrade",
+        "Antarctica/South_Pole", "Antarctica/McMurdo",
+        "Canada/Central", "America/Winnipeg",
+        "Etc/GMT", "Etc/GMT",
+        "Europe/Isle_of_Man", "Europe/London",
+        "America/Fort_Wayne", "America/Indiana/Indianapolis",
+        "Eire", "Europe/Dublin",
+        "America/Coral_Harbour", "America/Atikokan",
+        "Europe/Nicosia", "Asia/Nicosia",
+        "US/Samoa", "Pacific/Pago_Pago",
+        "Hongkong", "Asia/Hong_Kong",
+        "Canada/Saskatchewan", "America/Regina",
+        "Asia/Thimbu", "Asia/Thimphu",
         "Kwajalein", "Pacific/Kwajalein",
-        "Europe/Bratislava", "Europe/Prague",
-        "Canada/Central", "America/Winnipeg",
+        "GB", "Europe/London",
+        "Chile/EasterIsland", "Pacific/Easter",
+        "US/East-Indiana", "America/Indiana/Indianapolis",
+        "Australia/LHI", "Australia/Lord_Howe",
+        "Cuba", "America/Havana",
+        "America/Jujuy", "America/Argentina/Jujuy",
+        "US/Mountain", "America/Denver",
+        "Atlantic/Jan_Mayen", "Europe/Oslo",
+        "Europe/Tiraspol", "Europe/Chisinau",
+        "Europe/Podgorica", "Europe/Belgrade",
+        "US/Arizona", "America/Phoenix",
+        "Navajo", "America/Denver",
+        "Etc/Greenwich", "Etc/GMT",
         "Canada/Mountain", "America/Edmonton",
         "Iceland", "Atlantic/Reykjavik",
-        "Asia/Ulan_Bator", "Asia/Ulaanbaatar",
+        "Australia/Victoria", "Australia/Melbourne",
+        "Australia/South", "Australia/Adelaide",
+        "Brazil/West", "America/Manaus",
+        "Pacific/Ponape", "Pacific/Pohnpei",
+        "Europe/Ljubljana", "Europe/Belgrade",
+        "Europe/Jersey", "Europe/London",
+        "Australia/Queensland", "Australia/Brisbane",
         "UTC", "Etc/UTC",
-        "Europe/Guernsey", "Europe/London",
-        "Singapore", "Asia/Singapore",
-        "Atlantic/Faeroe", "Atlantic/Faroe",
-        "Greenwich", "Etc/GMT",
-        "America/Fort_Wayne", "America/Indiana/Indianapolis",
-        "Etc/Universal", "Etc/UTC",
-        "Chile/EasterIsland", "Pacific/Easter",
-        "Pacific/Samoa", "Pacific/Pago_Pago",
-        "Europe/Nicosia", "Asia/Nicosia",
-        "Etc/Zulu", "Etc/UTC",
-        "Asia/Ashkhabad", "Asia/Ashgabat",
-        "America/Louisville", "America/Kentucky/Louisville",
-        "Australia/North", "Australia/Darwin",
-        "America/Atka", "America/Adak",
-        "America/Marigot", "America/Guadeloupe",
-        "Brazil/DeNoronha", "America/Noronha",
-        "Turkey", "Europe/Istanbul",
-        "Zulu", "Etc/UTC",
-        "Europe/Vatican", "Europe/Rome",
+        "Canada/Newfoundland", "America/St_Johns",
+        "Europe/Skopje", "Europe/Belgrade",
+        "PRC", "Asia/Shanghai",
+        "UCT", "Etc/UCT",
+        "America/Mendoza", "America/Argentina/Mendoza",
         "Israel", "Asia/Jerusalem",
-        "America/Rosario", "America/Argentina/Cordoba",
-        "Jamaica", "America/Jamaica",
-        "Asia/Katmandu", "Asia/Kathmandu",
-        "ROK", "Asia/Seoul",
-        "Asia/Macao", "Asia/Macau",
-        "Australia/South", "Australia/Adelaide",
-        "US/Arizona", "America/Phoenix",
-        "Australia/Yancowinna", "Australia/Broken_Hill",
-        "Canada/Pacific", "America/Vancouver",
-        "Libya", "Africa/Tripoli",
-        "Japan", "Asia/Tokyo",
-        "Arctic/Longyearbyen", "Europe/Oslo",
-        "Africa/Timbuktu", "Africa/Bamako",
-        "America/Indianapolis", "America/Indiana/Indianapolis",
-        "Etc/Greenwich", "Etc/GMT",
-        "Australia/ACT", "Australia/Sydney",
+        "US/Eastern", "America/New_York",
+        "Asia/Ulan_Bator", "Asia/Ulaanbaatar",
+        "Turkey", "Europe/Istanbul",
         "GMT", "Etc/GMT",
-        "Mexico/BajaSur", "America/Mazatlan",
-        "Cuba", "America/Havana",
-        "Brazil/West", "America/Manaus",
-        "Asia/Saigon", "Asia/Ho_Chi_Minh",
-        "America/Jujuy", "America/Argentina/Jujuy",
-        "Australia/Victoria", "Australia/Melbourne",
-        "America/Catamarca", "America/Argentina/Catamarca",
+        "US/Aleutian", "America/Adak",
+        "Brazil/DeNoronha", "America/Noronha",
+        "GB-Eire", "Europe/London",
+        "Asia/Dacca", "Asia/Dhaka",
         "America/Ensenada", "America/Tijuana",
-        "Europe/San_Marino", "Europe/Rome",
-        "Europe/Isle_of_Man", "Europe/London",
-        "Mexico/General", "America/Mexico_City",
-        "US/Hawaii", "Pacific/Honolulu",
-        "Europe/Mariehamn", "Europe/Helsinki",
-        "US/Indiana-Starke", "America/Indiana/Knox",
-        "Australia/NSW", "Australia/Sydney",
-        "Australia/West", "Australia/Perth",
-        "Brazil/Acre", "America/Rio_Branco",
-        "Australia/Tasmania", "Australia/Hobart",
-        "Atlantic/Jan_Mayen", "Europe/Oslo",
-        "America/Buenos_Aires", "America/Argentina/Buenos_Aires",
-        "Europe/Jersey", "Europe/London",
-        "Brazil/East", "America/Sao_Paulo",
-        "America/Virgin", "America/St_Thomas",
-        "Navajo", "America/Denver",
-        "GB", "Europe/London",
-        "Poland", "Europe/Warsaw",
-        "Pacific/Yap", "Pacific/Chuuk",
-        "America/Argentina/ComodRivadavia", "America/Argentina/Catamarca",
-        "Asia/Calcutta", "Asia/Kolkata",
-        "America/Mendoza", "America/Argentina/Mendoza",
-        "Universal", "Etc/UTC",
-        "Australia/Queensland", "Australia/Brisbane",
-        "Asia/Dacca", "Asia/Dhaka",
-        "US/Pacific", "America/Los_Angeles",
-        "Asia/Chungking", "Asia/Chongqing",
+        "America/Catamarca", "America/Argentina/Catamarca",
+        "Iran", "Asia/Tehran",
+        "Greenwich", "Etc/GMT",
         "Pacific/Truk", "Pacific/Chuuk",
-        "ROC", "Asia/Taipei",
-        "US/Aleutian", "America/Adak",
-        "Pacific/Ponape", "Pacific/Pohnpei",
-        "Canada/Yukon", "America/Whitehorse",
-        "PRC", "Asia/Shanghai",
-        "Africa/Asmera", "Africa/Asmara",
-        "GB-Eire", "Europe/London",
-        "America/St_Barthelemy", "America/Guadeloupe",
-        "US/Central", "America/Chicago",
-        "Egypt", "Africa/Cairo",
-        "Chile/Continental", "America/Santiago",
-        "Portugal", "Europe/Lisbon",
-        "Europe/Tiraspol", "Europe/Chisinau",
-        "America/Coral_Harbour", "America/Atikokan",
+        "Pacific/Samoa", "Pacific/Pago_Pago",
+        "America/Virgin", "America/St_Thomas",
+        "Asia/Katmandu", "Asia/Kathmandu",
+        "America/Indianapolis", "America/Indiana/Indianapolis",
         "Europe/Belfast", "Europe/London",
-        "America/Cordoba", "America/Argentina/Cordoba",
-        "America/Shiprock", "America/Denver",
-        "NZ-CHAT", "Pacific/Chatham",
-        "Eire", "Europe/Dublin",
-        "US/East-Indiana", "America/Indiana/Indianapolis",
-        "Australia/Canberra", "Australia/Sydney",
-        "Canada/Newfoundland", "America/St_Johns",
-        "UCT", "Etc/UCT",
-        "Australia/LHI", "Australia/Lord_Howe",
-        "Iran", "Asia/Tehran",
-        "US/Eastern", "America/New_York",
-        "Canada/Eastern", "America/Toronto",
-        "US/Samoa", "Pacific/Pago_Pago",
-        "America/Knox_IN", "America/Indiana/Knox",
-        "Canada/Saskatchewan", "America/Regina",
-        "Asia/Thimbu", "Asia/Thimphu",
-        "US/Mountain", "America/Denver",
-        "NZ", "Pacific/Auckland",
-        "Asia/Tel_Aviv", "Asia/Jerusalem",
-        "Hongkong", "Asia/Hong_Kong",
+        "America/Kralendijk", "America/Curacao",
         "Asia/Rangoon", "Asia/Yangon",
     };
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/RandomAccess/Basic.java	Thu Apr 12 16:25:29 2018 -0700
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2000, 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
+ * @bug 4327164
+ * @summary Basic test for new RandomAccess interface
+ */
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Random;
+import java.util.RandomAccess;
+import java.util.Vector;
+
+public class Basic {
+    public static void main(String[] args) throws Exception {
+        List a0 = Arrays.asList(new String[] { "a", "b", "c" });
+        List a[] = { a0, new ArrayList(a0), new LinkedList(a0),
+                new Vector(a0) };
+
+        if (!(a[0] instanceof RandomAccess))
+            throw new Exception("Arrays.asList doesn't implement RandomAccess");
+        if (!(a[1] instanceof RandomAccess))
+            throw new Exception("ArrayList doesn't implement RandomAccess");
+        if (a[2] instanceof RandomAccess)
+            throw new Exception("LinkedList implements RandomAccess");
+        if (!(a[3] instanceof RandomAccess))
+            throw new Exception("Vector doesn't implement RandomAccess");
+
+        for (int i = 0; i < a.length; i++) {
+            List t = a[i];
+            List ut = Collections.unmodifiableList(t);
+            List st = Collections.synchronizedList(t);
+
+            boolean random = t instanceof RandomAccess;
+            if ((ut instanceof RandomAccess) != random)
+                throw new Exception(
+                        "Unmodifiable fails to preserve RandomAccess: " + i);
+            if ((st instanceof RandomAccess) != random)
+                throw new Exception(
+                        "Synchronized fails to preserve RandomAccess: " + i);
+
+            while (t.size() > 0) {
+                t = t.subList(0, t.size() - 1);
+                if ((t instanceof RandomAccess) != random)
+                    throw new Exception(
+                            "SubList fails to preserve RandomAccess: " + i
+                                    + ", " + t.size());
+
+                ut = ut.subList(0, ut.size() - 1);
+                if ((ut instanceof RandomAccess) != random)
+                    throw new Exception(
+                            "SubList(unmodifiable) fails to preserve RandomAccess: "
+                                    + i + ", " + ut.size());
+
+                st = st.subList(0, st.size() - 1);
+                if ((st instanceof RandomAccess) != random)
+                    throw new Exception(
+                            "SubList(synchronized) fails to preserve RandomAccess: "
+                                    + i + ", " + st.size());
+            }
+        }
+
+        // Test that shuffle works the same on random and sequential access
+        List al = new ArrayList();
+        for (int j = 0; j < 100; j++)
+            al.add(Integer.valueOf(2 * j));
+        List ll = new LinkedList(al);
+        Random r1 = new Random(666), r2 = new Random(666);
+        for (int i = 0; i < 100; i++) {
+            Collections.shuffle(al, r1);
+            Collections.shuffle(ll, r2);
+            if (!al.equals(ll))
+                throw new Exception("Shuffle failed: " + i);
+        }
+
+        // Test that fill works on random & sequential access
+        List gumbyParade = Collections.nCopies(100, "gumby");
+        Collections.fill(al, "gumby");
+        if (!al.equals(gumbyParade))
+            throw new Exception("ArrayList fill failed");
+        Collections.fill(ll, "gumby");
+        if (!ll.equals(gumbyParade))
+            throw new Exception("LinkedList fill failed");
+
+        // Test that copy works on random & sequential access
+        List pokeyParade = Collections.nCopies(100, "pokey");
+        Collections.copy(al, pokeyParade);
+        if (!al.equals(pokeyParade))
+            throw new Exception("ArrayList copy failed");
+        Collections.copy(ll, pokeyParade);
+        if (!ll.equals(pokeyParade))
+            throw new Exception("LinkedList copy failed");
+
+        // Test that binarySearch works the same on random & sequential access
+        al = new ArrayList();
+        for (int i = 0; i < 10000; i++)
+            al.add(Integer.valueOf(2 * i));
+        ll = new LinkedList(al);
+        for (int i = 0; i < 500; i++) {
+            Integer key = Integer.valueOf(r1.nextInt(20000));
+            if (Collections.binarySearch(al, key) != Collections
+                    .binarySearch(ll, key))
+                throw new Exception("Binary search failed: " + i);
+        }
+    }
+}
--- a/test/jdk/javax/net/ssl/etc/README	Thu Apr 12 14:11:42 2018 +0100
+++ b/test/jdk/javax/net/ssl/etc/README	Thu Apr 12 16:25:29 2018 -0700
@@ -62,22 +62,21 @@
 
 Alias name: dummydsa
 --------------------
-Creation date: Mar 11, 2007
+Creation date: Mar 29, 2018
 Entry type: PrivateKeyEntry
 Certificate chain length: 1
 Certificate[1]:
 Owner: CN=dummy.example.com, OU=Dummy, O=Dummy, L=Cupertino, ST=CA, C=US
 Issuer: CN=dummy.example.com, OU=Dummy, O=Dummy, L=Cupertino, ST=CA, C=US
-Serial number: 45f3a314
-Valid from: Sun Mar 11 06:35:00 UTC 2007 until: Wed Mar 08 06:35:00 UTC 2017
-Certificate fingerprints:
-Signature algorithm name: SHA1withDSA
-Version: 1
+Serial number: 324d85f0
+Valid from: Thu Mar 29 16:06:34 PDT 2018 until: Tue Mar 28 16:06:34 PDT 2028
+Signature algorithm name: SHA256withDSA
+Version: 3
 
 This can be generated using hacked (update the keytool source code so that
 it can be used for version 1 X.509 certificate) keytool command:
-% keytool -genkeypair -alias dummy -keyalg DSA -keysize 1024 \
-  -sigalg SHA1withDSA \
+% keytool -genkeypair -alias dummydsa -keyalg DSA -keysize 1024 \
+  -sigalg SHA256withDSA \
   -dname "CN=dummy.example.com, OU=Dummy, O=Dummy, L=Cupertino, ST=CA, C=US" \
   -validity 3652 -keypass passphrase -keystore keystore -storepass passphrase
 
Binary file test/jdk/javax/net/ssl/etc/keystore has changed
Binary file test/jdk/javax/net/ssl/etc/truststore has changed
--- a/test/jdk/tools/jlink/multireleasejar/JLinkMultiReleaseJarTest.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/test/jdk/tools/jlink/multireleasejar/JLinkMultiReleaseJarTest.java	Thu Apr 12 16:25:29 2018 -0700
@@ -52,7 +52,9 @@
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.nio.file.StandardCopyOption;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 import java.util.Set;
 import java.util.jar.JarFile;
 import java.util.spi.ToolProvider;
@@ -134,14 +136,15 @@
     }
 
     private void javac(Path source, Path destination, String srcpath) throws IOException {
-        String[] args = Stream.concat(
-                Stream.of("-d", destination.toString(), "--module-source-path", srcpath),
-                Files.walk(source)
-                        .map(Path::toString)
-                        .filter(s -> s.endsWith(".java"))
-        ).toArray(String[]::new);
-        int rc = JAVAC_TOOL.run(System.out, System.err, args);
-        Assert.assertEquals(rc, 0);
+        var args = Stream.of("-d", destination.toString(), "--module-source-path", srcpath);
+        try (Stream<Path> pathStream = Files.walk(source)) {
+            args = Stream.concat(args,
+                    pathStream.map(Path::toString)
+                              .filter(s -> s.endsWith(".java")));
+
+            int rc = JAVAC_TOOL.run(System.out, System.err, args.toArray(String[]::new));
+            Assert.assertEquals(rc, 0);
+        }
     }
 
     @Test
@@ -149,7 +152,7 @@
         if (ignoreTest()) return;
 
         // use jlink to build image from multi-release jar
-       jlink("m1.jar", "myimage");
+        jlink("m1.jar", "myimage");
 
         // validate image
         Path jimage = userdir.resolve("myimage").resolve("lib").resolve("modules");
--- a/test/langtools/jdk/javadoc/doclet/testModuleDirs/TestModuleDirs.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testModuleDirs/TestModuleDirs.java	Thu Apr 12 16:25:29 2018 -0700
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8195795
+ * @bug 8195795 8201396
  * @summary test the use of module directories in output,
  *          and the --no-module-directories option
  * @modules jdk.javadoc/jdk.javadoc.internal.api
@@ -71,46 +71,85 @@
     @Test
     public void testNoModuleDirs(Path base) throws IOException {
         Path src = base.resolve("src");
-        new ModuleBuilder(tb, "m")
-                .classes("package p; public class A {}")
-                .exports("p")
+        new ModuleBuilder(tb, "ma")
+                .classes("package pa; public class A {}")
+                .exports("pa")
+                .write(src);
+        new ModuleBuilder(tb, "mb")
+                .classes("package pb; public class B {}")
+                .exports("pb")
                 .write(src);
 
         javadoc("-d", base.resolve("api").toString(),
                 "-quiet",
                 "--module-source-path", src.toString(),
                 "--no-module-directories",
-                "--module", "m");
+                "--module", "ma,mb");
 
         checkExit(Exit.OK);
         checkFiles(true,
-                "m-summary.html",
-                "p/package-summary.html");
+                "ma-frame.html",
+                "ma-summary.html",
+                "pa/package-summary.html");
         checkFiles(false,
-                "m/module-summary.html",
-                "m/p/package-summary.html");
+                "ma/module-frame.html",
+                "ma/module-summary.html",
+                "ma/pa/package-summary.html");
+        checkOutput("ma-frame.html", true,
+                "<ul>\n"
+                + "<li><a href=\"allclasses-frame.html\" target=\"packageFrame\">All&nbsp;Classes</a></li>\n"
+                + "<li><a href=\"overview-frame.html\" target=\"packageListFrame\">All&nbsp;Packages</a></li>\n"
+                + "<li><a href=\"module-overview-frame.html\" target=\"packageListFrame\">All&nbsp;Modules</a></li>\n"
+                + "</ul>\n");
+        checkOutput("ma-summary.html", true,
+                "<ul class=\"navList\" id=\"allclasses_navbar_top\">\n"
+                + "<li><a href=\"allclasses-noframe.html\">All&nbsp;Classes</a></li>\n"
+                + "</ul>\n");
+        checkOutput("pa/package-summary.html", true,
+                "<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n"
+                + "<li><a href=\"../index-all.html\">Index</a></li>");
+
     }
 
     @Test
     public void testModuleDirs(Path base) throws IOException {
         Path src = base.resolve("src");
-        new ModuleBuilder(tb, "m")
-                .classes("package p; public class A {}")
-                .exports("p")
+        new ModuleBuilder(tb, "ma")
+                .classes("package pa; public class A {}")
+                .exports("pa")
+                .write(src);
+        new ModuleBuilder(tb, "mb")
+                .classes("package pb; public class B {}")
+                .exports("pb")
                 .write(src);
 
         javadoc("-d", base.resolve("api").toString(),
                 "-quiet",
                 "--module-source-path", src.toString(),
-                "--module", "m");
+                "--module", "ma,mb");
 
         checkExit(Exit.OK);
         checkFiles(false,
-                "m-summary.html",
-                "p/package-summary.html");
+                "ma-frame.html",
+                "ma-summary.html",
+                "pa/package-summary.html");
         checkFiles(true,
-                "m/module-summary.html",
-                "m/p/package-summary.html");
+                "ma/module-frame.html",
+                "ma/module-summary.html",
+                "ma/pa/package-summary.html");
+        checkOutput("ma/module-frame.html", true,
+                "<ul>\n"
+                + "<li><a href=\"../allclasses-frame.html\" target=\"packageFrame\">All&nbsp;Classes</a></li>\n"
+                + "<li><a href=\"../overview-frame.html\" target=\"packageListFrame\">All&nbsp;Packages</a></li>\n"
+                + "<li><a href=\"../module-overview-frame.html\" target=\"packageListFrame\">All&nbsp;Modules</a></li>\n"
+                + "</ul>\n");
+        checkOutput("ma/module-summary.html", true,
+                "<ul class=\"navList\" id=\"allclasses_navbar_top\">\n"
+                + "<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n"
+                + "</ul>\n");
+        checkOutput("ma/pa/package-summary.html", true,
+                "<li><a href=\"../../deprecated-list.html\">Deprecated</a></li>\n"
+                + "<li><a href=\"../../index-all.html\">Index</a></li>");
     }
 }
 
--- a/test/langtools/tools/javac/diags/examples.not-yet.txt	Thu Apr 12 14:11:42 2018 +0100
+++ b/test/langtools/tools/javac/diags/examples.not-yet.txt	Thu Apr 12 16:25:29 2018 -0700
@@ -127,6 +127,8 @@
 compiler.warn.access.to.member.from.serializable.lambda # in order to generate it we need to modify a restricted package
 compiler.warn.invalid.path                              # this warning is generated only in Windows systems
 compiler.note.multiple.elements                         # needs user code
+compiler.err.preview.feature.disabled.classfile         # preview feature support: needs compilation against classfile
+compiler.warn.preview.feature.use.classfile             # preview feature support: needs compilation against classfile
 
 # The following module-related messages will have to stay on the not-yet list for various reasons:
 compiler.warn.locn.unknown.file.on.module.path                # Never issued ATM (short circuited with an if (false))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/diags/examples/PreviewFeatureDisabled.java	Thu Apr 12 16:25:29 2018 -0700
@@ -0,0 +1,36 @@
+/*
+ * 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.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+// key: compiler.err.preview.feature.disabled
+// key: compiler.misc.feature.diamond
+// options: -XDforcePreview
+
+import java.util.ArrayList;
+
+class PreviewFeatureDisabled {
+    void m() {
+        new ArrayList<>();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/diags/examples/PreviewFeatureDisabledPlural.java	Thu Apr 12 16:25:29 2018 -0700
@@ -0,0 +1,34 @@
+/*
+ * 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.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+// key: compiler.err.preview.feature.disabled.plural
+// key: compiler.misc.feature.lambda
+// options: -XDforcePreview
+
+class PreviewFeatureDisabledPlural {
+    void m() {
+        Runnable r = () -> {};
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/diags/examples/PreviewFeatureUse.java	Thu Apr 12 16:25:29 2018 -0700
@@ -0,0 +1,39 @@
+/*
+ * 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.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+//key: compiler.warn.preview.feature.use
+//key: compiler.warn.preview.feature.use.plural
+//key: compiler.misc.feature.diamond
+//key: compiler.misc.feature.lambda
+//options: -Xlint:preview -XDforcePreview -source 11 --enable-preview
+
+import java.util.ArrayList;
+
+class PreviewFeatureUse {
+    void test() {
+        new ArrayList<>();
+        Runnable r = () -> {};
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/diags/examples/PreviewFilename.java	Thu Apr 12 16:25:29 2018 -0700
@@ -0,0 +1,35 @@
+/*
+ * 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.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+// key: compiler.note.preview.filename
+// key: compiler.note.preview.recompile
+// options: -XDforcePreview  -source 11 --enable-preview
+
+import java.util.ArrayList;
+import java.util.List;
+
+class PreviewFilename {
+    List<String> ls = new ArrayList<>();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/diags/examples/PreviewFilenameAdditional.java	Thu Apr 12 16:25:29 2018 -0700
@@ -0,0 +1,38 @@
+/*
+ * 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.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+// key: compiler.note.preview.filename.additional
+// key: compiler.warn.preview.feature.use
+// key: compiler.misc.feature.diamond
+// options: -Xlint:preview -Xmaxwarns 1 -XDforcePreview  -source 11 --enable-preview
+
+import java.util.ArrayList;
+
+class PreviewFilenameAdditional {
+    void test() {
+        new ArrayList<>();
+        new ArrayList<>();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/diags/examples/PreviewPlural/Bar.java	Thu Apr 12 16:25:29 2018 -0700
@@ -0,0 +1,28 @@
+/*
+ * 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.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+class Bar {
+    Runnable r = () -> {};
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/diags/examples/PreviewPlural/PreviewPlural.java	Thu Apr 12 16:25:29 2018 -0700
@@ -0,0 +1,37 @@
+/*
+ * 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.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+// key: compiler.note.preview.plural
+// key: compiler.note.preview.recompile
+// options: -XDforcePreview  -source 11 --enable-preview
+
+import java.util.ArrayList;
+
+class PreviewPlural {
+    void test() {
+        new Bar();
+        new ArrayList<>();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/diags/examples/PreviewPluralAdditional/Bar.java	Thu Apr 12 16:25:29 2018 -0700
@@ -0,0 +1,33 @@
+/*
+ * 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.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please 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.ArrayList;
+
+class Bar {
+    Runnable r = () -> {};
+    void test() {
+        new ArrayList<>();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/diags/examples/PreviewPluralAdditional/PreviewPluralAdditional.java	Thu Apr 12 16:25:29 2018 -0700
@@ -0,0 +1,38 @@
+/*
+ * 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.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+// key: compiler.note.preview.plural.additional
+// key: compiler.warn.preview.feature.use.plural
+// key: compiler.misc.feature.lambda
+// options: -Xlint:preview -Xmaxwarns 1 -XDforcePreview  -source 11 --enable-preview
+
+import java.util.ArrayList;
+
+class PreviewPlural {
+    void test() {
+        new Bar();
+        new ArrayList<>();
+    }
+}
--- a/test/langtools/tools/javac/lambda/deduplication/Deduplication.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/test/langtools/tools/javac/lambda/deduplication/Deduplication.java	Thu Apr 12 16:25:29 2018 -0700
@@ -32,6 +32,12 @@
     void group(Object... xs) {}
 
     void test() {
+
+        group(
+                (Runnable) () -> { ( (Runnable) () -> {} ).run(); },
+                (Runnable) () -> { ( (Runnable) () -> {} ).run(); }
+        );
+
         group((Function<String, Integer>) x -> x.hashCode());
         group((Function<Object, Integer>) x -> x.hashCode());
 
--- a/test/langtools/tools/javac/modules/CompileModulePatchTest.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/test/langtools/tools/javac/modules/CompileModulePatchTest.java	Thu Apr 12 16:25:29 2018 -0700
@@ -252,7 +252,7 @@
                 .getOutputLines(Task.OutputKind.DIRECT);
 
         List<String> expectedOut = Arrays.asList(
-                "Extra.java:1:76: compiler.err.doesnt.exist: p",
+                "Extra.java:1:75: compiler.err.package.not.visible: p, (compiler.misc.not.def.access.does.not.read.unnamed: p, java.compiler)",
                 "1 error"
         );
 
--- a/test/langtools/tools/javac/modules/ConvenientAccessErrorsTest.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/test/langtools/tools/javac/modules/ConvenientAccessErrorsTest.java	Thu Apr 12 16:25:29 2018 -0700
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8169197 8172668 8173117 8175007
+ * @bug 8169197 8172668 8173117 8175007 8189765
  * @summary Check convenient errors are produced for inaccessible classes.
  * @library /tools/lib
  * @modules jdk.compiler/com.sun.tools.javac.api
@@ -199,7 +199,7 @@
             throw new Exception("expected output not found; actual: " + log);
     }
 
-//    @Test
+    @Test
     public void testInaccessibleUnnamedModule(Path base) throws Exception {
         Path jar = prepareTestJar(base, "package api; class Api { public static class Foo {} }");
 
@@ -224,8 +224,8 @@
                 .getOutputLines(Task.OutputKind.DIRECT);
 
         List<String> expected = Arrays.asList(
-                "Test.java:1:38: compiler.err.not.def.access.package.cant.access: api.Api, api, (compiler.misc.not.def.access.does.not.read.unnamed: api, m1x)",
-                "Test.java:1:51: compiler.err.not.def.access.package.cant.access: api.Api, api, (compiler.misc.not.def.access.does.not.read.unnamed: api, m1x)",
+                "Test.java:1:35: compiler.err.package.not.visible: api, (compiler.misc.not.def.access.does.not.read.unnamed: api, m1x)",
+                "Test.java:1:48: compiler.err.package.not.visible: api, (compiler.misc.not.def.access.does.not.read.unnamed: api, m1x)",
                 "2 errors");
 
         if (!expected.equals(log))
--- a/test/langtools/tools/javac/modules/ModulesAndClassPathTest.java	Thu Apr 12 14:11:42 2018 +0100
+++ b/test/langtools/tools/javac/modules/ModulesAndClassPathTest.java	Thu Apr 12 16:25:29 2018 -0700
@@ -77,7 +77,7 @@
                                 .writeAll()
                                 .getOutputLines(Task.OutputKind.DIRECT);
 
-        List<String> expected = Arrays.asList("Impl.java:1:38: compiler.err.doesnt.exist: api",
+        List<String> expected = Arrays.asList("Impl.java:1:35: compiler.err.package.not.visible: api, (compiler.misc.not.def.access.does.not.read.unnamed: api, m)",
                                               "1 error");
 
         if (!expected.equals(modLog)) {
@@ -129,7 +129,7 @@
                                 .writeAll()
                                 .getOutputLines(Task.OutputKind.DIRECT);
 
-        List<String> expected = Arrays.asList("Impl.java:1:38: compiler.err.doesnt.exist: api",
+        List<String> expected = Arrays.asList("Impl.java:1:35: compiler.err.package.not.visible: api, (compiler.misc.not.def.access.does.not.read.unnamed: api, m)",
                                               "1 error");
 
         if (!expected.equals(modLog)) {
@@ -170,7 +170,7 @@
                                 .writeAll()
                                 .getOutputLines(Task.OutputKind.DIRECT);
 
-        List<String> expected = Arrays.asList("Impl.java:1:38: compiler.err.doesnt.exist: api",
+        List<String> expected = Arrays.asList("Impl.java:1:35: compiler.err.package.not.visible: api, (compiler.misc.not.def.access.does.not.read.unnamed: api, m)",
                                               "1 error");
 
         if (!expected.equals(modLog)) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/preview/PreviewOptionTest.java	Thu Apr 12 16:25:29 2018 -0700
@@ -0,0 +1,113 @@
+/*
+ * 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.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please 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 8199194
+ * @summary smoke test for enable-preview command line flag
+ * @modules jdk.compiler/com.sun.tools.javac.code
+ */
+
+import java.io.*;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import com.sun.tools.javac.code.Source;
+
+public class PreviewOptionTest {
+    public static void main(String... args) throws Exception {
+        PreviewOptionTest t = new PreviewOptionTest();
+        t.run();
+    }
+
+    public void run() throws Exception {
+        try (FileWriter out = new FileWriter("Test.java")) {
+            out.write("class Test { }");
+        }
+
+        testWithNoFlags();
+
+        List<Source> versionsToTest = Stream.of(Source.values())
+                .filter(s -> s.compareTo(Source.MIN) >= 0)
+                .collect(Collectors.toList());
+
+        versionsToTest.stream().forEach(this::testWithSourceFlag);
+        versionsToTest.stream().forEach(this::testWithReleaseFlag);
+
+        if (errors > 0)
+            throw new Exception(errors + " errors occurred");
+    }
+
+    void testWithNoFlags() {
+        testInternal(null, null, true);
+    }
+
+    void testWithSourceFlag(Source source) {
+        testInternal(source, null, source != Source.DEFAULT);
+    }
+
+    void testWithReleaseFlag(Source release) {
+        //Todo: the condition below should say "release != Source.DEFAULT", but we can't do that
+        //since --release 11 is not supported yet.
+        testInternal(null, release, true);
+    }
+
+    void testInternal(Source source, Source release, boolean shouldFail) {
+        System.err.println("Test: source:" + source + ", release:" + release + " " + shouldFail + " " + shouldFail);
+        List<String> args = new ArrayList<>();
+        args.add("--enable-preview");
+        if (source != null) {
+            args.add("-source");
+            args.add(source.name);
+        }
+        if (release != null) {
+            args.add("--release");
+            args.add(release.name);
+        }
+        args.add("Test.java");
+
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter(sw);
+        int rc = com.sun.tools.javac.Main.compile(args.toArray(new String[args.size()]), pw);
+        pw.close();
+        boolean hasErrors = rc != 0;
+        if (hasErrors != shouldFail) {
+            if (hasErrors) {
+                String out = sw.toString();
+                error("error not expected but found:\n" + out);
+            } else {
+                error("error expected but not found");
+            }
+        }
+    }
+
+    void error(String msg) {
+        System.err.println("error: " + msg);
+        errors++;
+    }
+
+    int errors;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/preview/classReaderTest/Bar.java	Thu Apr 12 16:25:29 2018 -0700
@@ -0,0 +1,28 @@
+/*
+ * 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.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please 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 Bar {
+    Runnable r = () -> {};
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/preview/classReaderTest/Client.java	Thu Apr 12 16:25:29 2018 -0700
@@ -0,0 +1,14 @@
+/*
+ * @test /nodynamioccopyright/
+ * @bug 8199194
+ * @summary smoke test for --enabled-preview classreader support
+ * @compile -XDforcePreview --enable-preview -source 11 Bar.java
+ * @compile/fail/ref=Client.nopreview.out -Xlint:preview -XDrawDiagnostics Client.java
+ * @compile/fail/ref=Client.preview.out -Werror -Xlint:preview -XDrawDiagnostics --enable-preview -source 11 Client.java
+ */
+
+public class Client {
+    void test() {
+        new Bar();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/preview/classReaderTest/Client.nopreview.out	Thu Apr 12 16:25:29 2018 -0700
@@ -0,0 +1,2 @@
+- compiler.err.preview.feature.disabled.classfile: Bar.class, 11
+1 error
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/preview/classReaderTest/Client.preview.out	Thu Apr 12 16:25:29 2018 -0700
@@ -0,0 +1,4 @@
+- compiler.warn.preview.feature.use.classfile: Bar.class, 11
+- compiler.err.warnings.and.werror
+1 error
+1 warning