merge JDK-8200758-branch
authorherrick
Fri, 26 Jul 2019 19:11:34 -0400
branchJDK-8200758-branch
changeset 57555 02d3f1d03abb
parent 57554 cb6733b3ed62 (current diff)
parent 57549 bfe9696bf57f (diff)
child 57556 2f46b16d0659
merge
make/jdk/src/classes/build/tools/tzdb/ZoneRules.java
test/jdk/sun/util/calendar/zi/tzdata/VERSION
test/jdk/sun/util/calendar/zi/tzdata/africa
test/jdk/sun/util/calendar/zi/tzdata/antarctica
test/jdk/sun/util/calendar/zi/tzdata/asia
test/jdk/sun/util/calendar/zi/tzdata/australasia
test/jdk/sun/util/calendar/zi/tzdata/backward
test/jdk/sun/util/calendar/zi/tzdata/etcetera
test/jdk/sun/util/calendar/zi/tzdata/europe
test/jdk/sun/util/calendar/zi/tzdata/factory
test/jdk/sun/util/calendar/zi/tzdata/gmt
test/jdk/sun/util/calendar/zi/tzdata/iso3166.tab
test/jdk/sun/util/calendar/zi/tzdata/jdk11_backward
test/jdk/sun/util/calendar/zi/tzdata/leapseconds
test/jdk/sun/util/calendar/zi/tzdata/northamerica
test/jdk/sun/util/calendar/zi/tzdata/pacificnew
test/jdk/sun/util/calendar/zi/tzdata/solar87
test/jdk/sun/util/calendar/zi/tzdata/solar88
test/jdk/sun/util/calendar/zi/tzdata/solar89
test/jdk/sun/util/calendar/zi/tzdata/southamerica
test/jdk/sun/util/calendar/zi/tzdata/systemv
test/jdk/sun/util/calendar/zi/tzdata/zone.tab
test/jdk/sun/util/calendar/zi/tzdata_jdk/gmt
test/jdk/sun/util/calendar/zi/tzdata_jdk/jdk11_full_backward
--- a/make/CompileToolsJdk.gmk	Thu Jul 25 17:27:53 2019 -0400
+++ b/make/CompileToolsJdk.gmk	Fri Jul 26 19:11:34 2019 -0400
@@ -41,6 +41,7 @@
 BUILD_TOOLS_SRC_DIRS += \
     $(TOPDIR)/make/jdk/src/classes \
     $(BUILDTOOLS_OUTPUTDIR)/interim_cldrconverter_classes \
+    $(BUILDTOOLS_OUTPUTDIR)/interim_tzdb_classes \
     #
 
 $(eval $(call SetupJavaCompilation,BUILD_TOOLS_JDK, \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/CopyInterimTZDB.gmk	Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,50 @@
+#
+# Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.  Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+default: all
+
+include $(SPEC)
+include MakeBase.gmk
+
+##########################################################################################
+
+### TZDB tool needs files from java.time.zone package
+
+define tzdb_copyfiles
+	$(call MakeTargetDir)
+	$(RM) '$@'
+	$(SED) -e "s/package java.time.zone/package build.tools.tzdb/" \
+        < $(<) > $@
+endef
+
+$(eval $(call SetupCopyFiles,COPY_INTERIM_TZDB, \
+    SRC := $(TOPDIR)/src/java.base/share/classes/java/time/zone, \
+    DEST := $(BUILDTOOLS_OUTPUTDIR)/interim_tzdb_classes/build/tools/tzdb, \
+    FILES := ZoneRules.java ZoneOffsetTransition.java ZoneOffsetTransitionRule.java Ser.java, \
+    MACRO := tzdb_copyfiles))
+
+##########################################################################################
+
+all: $(COPY_INTERIM_TZDB)
--- a/make/Main.gmk	Thu Jul 25 17:27:53 2019 -0400
+++ b/make/Main.gmk	Fri Jul 26 19:11:34 2019 -0400
@@ -77,6 +77,10 @@
 
 interim-cldrconverter:
 	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CopyInterimCLDRConverter.gmk)
+ 
+interim-tzdb:
+	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CopyInterimTZDB.gmk)
+
 
 buildtools-jdk:
 	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileToolsJdk.gmk)
@@ -88,7 +92,7 @@
 	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileToolsHotspot.gmk)
 
 ALL_TARGETS += buildtools-langtools interim-langtools \
-    interim-rmic interim-cldrconverter buildtools-jdk buildtools-modules \
+    interim-rmic interim-cldrconverter interim-tzdb buildtools-jdk buildtools-modules \
     buildtools-hotspot
 
 ################################################################################
@@ -648,7 +652,7 @@
 
   interim-langtools: $(INTERIM_LANGTOOLS_GENSRC_TARGETS)
 
-  buildtools-jdk: interim-langtools interim-cldrconverter
+  buildtools-jdk: interim-langtools interim-cldrconverter interim-tzdb
 
   buildtools-hotspot: interim-langtools
 
--- a/make/data/tzdata/africa	Thu Jul 25 17:27:53 2019 -0400
+++ b/make/data/tzdata/africa	Fri Jul 26 19:11:34 2019 -0400
@@ -941,7 +941,7 @@
 Rule	Morocco	2012	only	-	Sep	30	 3:00	0	-
 Rule	Morocco	2013	only	-	Jul	 7	 3:00	0	-
 Rule	Morocco	2013	only	-	Aug	10	 2:00	1:00	-
-Rule	Morocco	2013	2017	-	Oct	lastSun	 3:00	0	-
+Rule	Morocco	2013	2018	-	Oct	lastSun	 3:00	0	-
 Rule	Morocco	2014	2018	-	Mar	lastSun	 2:00	1:00	-
 Rule	Morocco	2014	only	-	Jun	28	 3:00	0	-
 Rule	Morocco	2014	only	-	Aug	 2	 2:00	1:00	-
@@ -953,53 +953,53 @@
 Rule	Morocco	2017	only	-	Jul	 2	 2:00	1:00	-
 Rule	Morocco	2018	only	-	May	13	 3:00	0	-
 Rule	Morocco	2018	only	-	Jun	17	 2:00	1:00	-
-Rule	Morocco	2019	only	-	May	 5	 3:00	0	-
-Rule	Morocco	2019	only	-	Jun	 9	 2:00	1:00	-
-Rule	Morocco	2020	only	-	Apr	19	 3:00	0	-
-Rule	Morocco	2020	only	-	May	24	 2:00	1:00	-
-Rule	Morocco	2021	only	-	Apr	11	 3:00	0	-
-Rule	Morocco	2021	only	-	May	16	 2:00	1:00	-
-Rule	Morocco	2022	only	-	Mar	27	 3:00	0	-
-Rule	Morocco	2022	only	-	May	 8	 2:00	1:00	-
-Rule	Morocco	2023	only	-	Mar	19	 3:00	0	-
-Rule	Morocco	2023	only	-	Apr	23	 2:00	1:00	-
-Rule	Morocco	2024	only	-	Mar	10	 3:00	0	-
-Rule	Morocco	2024	only	-	Apr	14	 2:00	1:00	-
-Rule	Morocco	2025	only	-	Feb	23	 3:00	0	-
-Rule	Morocco	2025	only	-	Apr	 6	 2:00	1:00	-
-Rule	Morocco	2026	only	-	Feb	15	 3:00	0	-
-Rule	Morocco	2026	only	-	Mar	22	 2:00	1:00	-
-Rule	Morocco	2027	only	-	Feb	 7	 3:00	0	-
-Rule	Morocco	2027	only	-	Mar	14	 2:00	1:00	-
-Rule	Morocco	2028	only	-	Jan	23	 3:00	0	-
-Rule	Morocco	2028	only	-	Feb	27	 2:00	1:00	-
-Rule	Morocco	2029	only	-	Jan	14	 3:00	0	-
-Rule	Morocco	2029	only	-	Feb	18	 2:00	1:00	-
-Rule	Morocco	2029	only	-	Dec	30	 3:00	0	-
-Rule	Morocco	2030	only	-	Feb	10	 2:00	1:00	-
-Rule	Morocco	2030	only	-	Dec	22	 3:00	0	-
-Rule	Morocco	2031	only	-	Jan	26	 2:00	1:00	-
-Rule	Morocco	2031	only	-	Dec	14	 3:00	0	-
-Rule	Morocco	2032	only	-	Jan	18	 2:00	1:00	-
-Rule	Morocco	2032	only	-	Nov	28	 3:00	0	-
-Rule	Morocco	2033	only	-	Jan	 9	 2:00	1:00	-
-Rule	Morocco	2033	only	-	Nov	20	 3:00	0	-
-Rule	Morocco	2033	only	-	Dec	25	 2:00	1:00	-
-Rule	Morocco	2034	only	-	Nov	 5	 3:00	0	-
-Rule	Morocco	2034	only	-	Dec	17	 2:00	1:00	-
-Rule	Morocco	2035	only	-	Oct	28	 3:00	0	-
-Rule	Morocco	2035	only	-	Dec	 2	 2:00	1:00	-
-Rule	Morocco	2036	only	-	Oct	19	 3:00	0	-
-Rule	Morocco	2036	only	-	Nov	23	 2:00	1:00	-
-Rule	Morocco	2037	only	-	Oct	 4	 3:00	0	-
-Rule	Morocco	2037	only	-	Nov	15	 2:00	1:00	-
+Rule	Morocco	2019	only	-	May	 5	 3:00	-1:00	-
+Rule	Morocco	2019	only	-	Jun	 9	 2:00	0	-
+Rule	Morocco	2020	only	-	Apr	19	 3:00	-1:00	-
+Rule	Morocco	2020	only	-	May	24	 2:00	0	-
+Rule	Morocco	2021	only	-	Apr	11	 3:00	-1:00	-
+Rule	Morocco	2021	only	-	May	16	 2:00	0	-
+Rule	Morocco	2022	only	-	Mar	27	 3:00	-1:00	-
+Rule	Morocco	2022	only	-	May	 8	 2:00	0	-
+Rule	Morocco	2023	only	-	Mar	19	 3:00	-1:00	-
+Rule	Morocco	2023	only	-	Apr	23	 2:00	0	-
+Rule	Morocco	2024	only	-	Mar	10	 3:00	-1:00	-
+Rule	Morocco	2024	only	-	Apr	14	 2:00	0	-
+Rule	Morocco	2025	only	-	Feb	23	 3:00	-1:00	-
+Rule	Morocco	2025	only	-	Apr	 6	 2:00	0	-
+Rule	Morocco	2026	only	-	Feb	15	 3:00	-1:00	-
+Rule	Morocco	2026	only	-	Mar	22	 2:00	0	-
+Rule	Morocco	2027	only	-	Feb	 7	 3:00	-1:00	-
+Rule	Morocco	2027	only	-	Mar	14	 2:00	0	-
+Rule	Morocco	2028	only	-	Jan	23	 3:00	-1:00	-
+Rule	Morocco	2028	only	-	Feb	27	 2:00	0	-
+Rule	Morocco	2029	only	-	Jan	14	 3:00	-1:00	-
+Rule	Morocco	2029	only	-	Feb	18	 2:00	0	-
+Rule	Morocco	2029	only	-	Dec	30	 3:00	-1:00	-
+Rule	Morocco	2030	only	-	Feb	10	 2:00	0	-
+Rule	Morocco	2030	only	-	Dec	22	 3:00	-1:00	-
+Rule	Morocco	2031	only	-	Jan	26	 2:00	0	-
+Rule	Morocco	2031	only	-	Dec	14	 3:00	-1:00	-
+Rule	Morocco	2032	only	-	Jan	18	 2:00	0	-
+Rule	Morocco	2032	only	-	Nov	28	 3:00	-1:00	-
+Rule	Morocco	2033	only	-	Jan	 9	 2:00	0	-
+Rule	Morocco	2033	only	-	Nov	20	 3:00	-1:00	-
+Rule	Morocco	2033	only	-	Dec	25	 2:00	0	-
+Rule	Morocco	2034	only	-	Nov	 5	 3:00	-1:00	-
+Rule	Morocco	2034	only	-	Dec	17	 2:00	0	-
+Rule	Morocco	2035	only	-	Oct	28	 3:00	-1:00	-
+Rule	Morocco	2035	only	-	Dec	 2	 2:00	0	-
+Rule	Morocco	2036	only	-	Oct	19	 3:00	-1:00	-
+Rule	Morocco	2036	only	-	Nov	23	 2:00	0	-
+Rule	Morocco	2037	only	-	Oct	 4	 3:00	-1:00	-
+Rule	Morocco	2037	only	-	Nov	15	 2:00	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Africa/Casablanca	-0:30:20 -	LMT	1913 Oct 26
 			 0:00	Morocco	+00/+01	1984 Mar 16
 			 1:00	-	+01	1986
 			 0:00	Morocco	+00/+01	2018 Oct 28  3:00
-			 0:00	Morocco	+00/+01
+			 1:00	Morocco	+01/+00
 
 # Western Sahara
 #
@@ -1015,7 +1015,7 @@
 Zone Africa/El_Aaiun	-0:52:48 -	LMT	1934 Jan # El AaiĂșn
 			-1:00	-	-01	1976 Apr 14
 			 0:00	Morocco	+00/+01	2018 Oct 28  3:00
-			 0:00	Morocco	+00/+01
+			 1:00	Morocco	+01/+00
 
 # Mozambique
 #
@@ -1087,13 +1087,13 @@
 
 # RULE	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 # Vanguard section, for zic and other parsers that support negative DST.
-#Rule	Namibia	1994	only	-	Mar	21	0:00	-1:00	WAT
-#Rule	Namibia	1994	2017	-	Sep	Sun>=1	2:00	0	CAT
-#Rule	Namibia	1995	2017	-	Apr	Sun>=1	2:00	-1:00	WAT
+Rule	Namibia	1994	only	-	Mar	21	0:00	-1:00	WAT
+Rule	Namibia	1994	2017	-	Sep	Sun>=1	2:00	0	CAT
+Rule	Namibia	1995	2017	-	Apr	Sun>=1	2:00	-1:00	WAT
 # Rearguard section, for parsers that do not support negative DST.
-Rule	Namibia	1994	only	-	Mar	21	0:00	0	WAT
-Rule	Namibia	1994	2017	-	Sep	Sun>=1	2:00	1:00	CAT
-Rule	Namibia	1995	2017	-	Apr	Sun>=1	2:00	0	WAT
+#Rule	Namibia	1994	only	-	Mar	21	0:00	0	WAT
+#Rule	Namibia	1994	2017	-	Sep	Sun>=1	2:00	1:00	CAT
+#Rule	Namibia	1995	2017	-	Apr	Sun>=1	2:00	0	WAT
 # End of rearguard section.
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -1103,14 +1103,14 @@
 			2:00	1:00	SAST	1943 Mar 21  2:00
 			2:00	-	SAST	1990 Mar 21 # independence
 # Vanguard section, for zic and other parsers that support negative DST.
-#			2:00	Namibia	%s
+			2:00	Namibia	%s
 # Rearguard section, for parsers that do not support negative DST.
-			2:00	-	CAT	1994 Mar 21  0:00
+#			2:00	-	CAT	1994 Mar 21  0:00
 # From Paul Eggert (2017-04-07):
 # The official date of the 2017 rule change was 2017-10-24.  See:
 # http://www.lac.org.na/laws/annoSTAT/Namibian%20Time%20Act%209%20of%202017.pdf
-			1:00	Namibia	%s	2017 Oct 24
-			2:00	-	CAT
+#			1:00	Namibia	%s	2017 Oct 24
+#			2:00	-	CAT
 # End of rearguard section.
 
 # Niger
--- a/make/data/tzdata/asia	Thu Jul 25 17:27:53 2019 -0400
+++ b/make/data/tzdata/asia	Fri Jul 26 19:11:34 2019 -0400
@@ -1881,7 +1881,7 @@
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Japan	1948	only	-	May	Sat>=1	24:00	1:00	D
-Rule	Japan	1948	1951	-	Sep	Sun>=9	 1:00	0	S
+Rule	Japan	1948	1951	-	Sep	Sat>=8	25:00	0	S
 Rule	Japan	1949	only	-	Apr	Sat>=1	24:00	1:00	D
 Rule	Japan	1950	1951	-	May	Sat>=1	24:00	1:00	D
 
--- a/make/data/tzdata/europe	Thu Jul 25 17:27:53 2019 -0400
+++ b/make/data/tzdata/europe	Fri Jul 26 19:11:34 2019 -0400
@@ -553,13 +553,13 @@
 # summer and negative daylight saving time in winter.  It is for when
 # negative SAVE values are used.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-#Rule	Eire	1971	only	-	Oct	31	 2:00u	-1:00	-
-#Rule	Eire	1972	1980	-	Mar	Sun>=16	 2:00u	0	-
-#Rule	Eire	1972	1980	-	Oct	Sun>=23	 2:00u	-1:00	-
-#Rule	Eire	1981	max	-	Mar	lastSun	 1:00u	0	-
-#Rule	Eire	1981	1989	-	Oct	Sun>=23	 1:00u	-1:00	-
-#Rule	Eire	1990	1995	-	Oct	Sun>=22	 1:00u	-1:00	-
-#Rule	Eire	1996	max	-	Oct	lastSun	 1:00u	-1:00	-
+Rule	Eire	1971	only	-	Oct	31	 2:00u	-1:00	-
+Rule	Eire	1972	1980	-	Mar	Sun>=16	 2:00u	0	-
+Rule	Eire	1972	1980	-	Oct	Sun>=23	 2:00u	-1:00	-
+Rule	Eire	1981	max	-	Mar	lastSun	 1:00u	0	-
+Rule	Eire	1981	1989	-	Oct	Sun>=23	 1:00u	-1:00	-
+Rule	Eire	1990	1995	-	Oct	Sun>=22	 1:00u	-1:00	-
+Rule	Eire	1996	max	-	Oct	lastSun	 1:00u	-1:00	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Dublin	-0:25:00 -	LMT	1880 Aug  2
@@ -573,11 +573,11 @@
 			 0:00	-	GMT	1948 Apr 18  2:00s
 			 0:00	GB-Eire	GMT/IST	1968 Oct 27
 # The next line is for when negative SAVE values are used.
-#			 1:00	Eire	IST/GMT
+			 1:00	Eire	IST/GMT
 # These three lines are for when SAVE values are always nonnegative.
-			 1:00	-	IST	1971 Oct 31  2:00u
-			 0:00	GB-Eire	GMT/IST	1996
-			 0:00	EU	GMT/IST
+#			 1:00	-	IST	1971 Oct 31  2:00u
+#			 0:00	GB-Eire	GMT/IST	1996
+#			 0:00	EU	GMT/IST
 
 
 ###############################################################################
@@ -1015,9 +1015,9 @@
 			1:00	C-Eur	CE%sT	1945 May  9
 			1:00	Czech	CE%sT	1946 Dec  1  3:00
 # Vanguard section, for zic and other parsers that support negative DST.
-#			1:00	-1:00	GMT	1947 Feb 23  2:00
+			1:00	-1:00	GMT	1947 Feb 23  2:00
 # Rearguard section, for parsers that do not support negative DST.
-			0:00	-	GMT	1947 Feb 23  2:00
+#			0:00	-	GMT	1947 Feb 23  2:00
 # End of rearguard section.
 			1:00	Czech	CE%sT	1979
 			1:00	EU	CE%sT
--- a/make/jdk/src/classes/build/tools/tzdb/TzdbZoneRulesCompiler.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/make/jdk/src/classes/build/tools/tzdb/TzdbZoneRulesCompiler.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -264,7 +264,7 @@
             for (ZoneRules rules : rulesList) {
                 baos.reset();
                 DataOutputStream dataos = new DataOutputStream(baos);
-                rules.writeExternal(dataos);
+                Ser.write(rules, dataos);
                 dataos.close();
                 byte[] bytes = baos.toByteArray();
                 out.writeShort(bytes.length);
--- a/make/jdk/src/classes/build/tools/tzdb/TzdbZoneRulesProvider.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/make/jdk/src/classes/build/tools/tzdb/TzdbZoneRulesProvider.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,24 +31,14 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.Map.Entry;
-import java.util.NavigableMap;
-import java.util.Objects;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
 import java.util.concurrent.ConcurrentSkipListMap;
 import java.time.*;
 import java.time.Year;
 import java.time.chrono.IsoChronology;
 import java.time.temporal.TemporalAdjusters;
-import java.time.zone.ZoneOffsetTransition;
-import java.time.zone.ZoneOffsetTransitionRule;
-import java.time.zone.ZoneOffsetTransitionRule.TimeDefinition;
+import build.tools.tzdb.ZoneOffsetTransitionRule.TimeDefinition;
 import java.time.zone.ZoneRulesException;
 
 /**
@@ -272,8 +262,8 @@
 
         /** Whether this is midnight end of day. */
         boolean endOfDay;
-        /** The time of the cutover. */
 
+        /** The time definition of the cutover. */
         TimeDefinition timeDefinition = TimeDefinition.WALL;
 
         void adjustToForwards(int year) {
@@ -343,6 +333,20 @@
                         // time must be midnight when end of day flag is true
                         endOfDay = true;
                         secsOfDay = 0;
+                    } else if (secsOfDay < 0 || secsOfDay > 86400) {
+                        // beyond 0:00-24:00 range. Adjust the cutover date.
+                        int beyondDays = secsOfDay / 86400;
+                        secsOfDay %= 86400;
+                        if (secsOfDay < 0) {
+                            secsOfDay = 86400 + secsOfDay;
+                            beyondDays -= 1;
+                        }
+                        LocalDate date = LocalDate.of(2004, month, dayOfMonth).plusDays(beyondDays);  // leap-year
+                        month = date.getMonth();
+                        dayOfMonth = date.getDayOfMonth();
+                        if (dayOfWeek != null) {
+                            dayOfWeek = dayOfWeek.plus(beyondDays);
+                        }
                     }
                     timeDefinition = parseTimeDefinition(timeStr.charAt(timeStr.length() - 1));
                 }
@@ -497,9 +501,11 @@
          *
          * @param standardOffset  the active standard offset, not null
          * @param savingsBeforeSecs  the active savings before the transition in seconds
+         * @param negativeSavings minimum savings in the rule, usually zero, but negative if negative DST is
+         *                   in effect.
          * @return the transition, not null
         */
-        ZoneOffsetTransitionRule toTransitionRule(ZoneOffset stdOffset, int savingsBefore) {
+        ZoneOffsetTransitionRule toTransitionRule(ZoneOffset stdOffset, int savingsBefore, int negativeSavings) {
             // rule shared by different zones, so don't change it
             Month month = this.month;
             int dayOfMonth = this.dayOfMonth;
@@ -522,6 +528,7 @@
                 }
                 endOfDay = false;
             }
+
             // build rule
             return ZoneOffsetTransitionRule.of(
                     //month, dayOfMonth, dayOfWeek, time, endOfDay, timeDefinition,
@@ -529,7 +536,7 @@
                     LocalTime.ofSecondOfDay(secsOfDay), endOfDay, timeDefinition,
                     stdOffset,
                     ZoneOffset.ofTotalSeconds(stdOffset.getTotalSeconds() + savingsBefore),
-                    ZoneOffset.ofTotalSeconds(stdOffset.getTotalSeconds() + savingsAmount));
+                    ZoneOffset.ofTotalSeconds(stdOffset.getTotalSeconds() + savingsAmount - negativeSavings));
         }
 
         RuleLine parse(String[] tokens) {
@@ -643,12 +650,12 @@
             this.ldtSecs = ldt.toEpochSecond(ZoneOffset.UTC);
         }
 
-        ZoneOffsetTransition toTransition(ZoneOffset standardOffset, int savingsBeforeSecs) {
+        ZoneOffsetTransition toTransition(ZoneOffset standardOffset, int savingsBeforeSecs, int negativeSavings) {
             // copy of code in ZoneOffsetTransitionRule to avoid infinite loop
             ZoneOffset wallOffset = ZoneOffset.ofTotalSeconds(
                 standardOffset.getTotalSeconds() + savingsBeforeSecs);
             ZoneOffset offsetAfter = ZoneOffset.ofTotalSeconds(
-                standardOffset.getTotalSeconds() + rule.savingsAmount);
+                standardOffset.getTotalSeconds() + rule.savingsAmount - negativeSavings);
             LocalDateTime dt = rule.timeDefinition
                                    .createDateTime(ldt, standardOffset, wallOffset);
             return ZoneOffsetTransition.of(dt, wallOffset, offsetAfter);
@@ -666,10 +673,12 @@
          * Tests if this a real transition with the active savings in seconds
          *
          * @param savingsBefore the active savings in seconds
+         * @param negativeSavings minimum savings in the rule, usually zero, but negative if negative DST is
+         *                   in effect.
          * @return true, if savings changes
          */
-        boolean isTransition(int savingsBefore) {
-            return rule.savingsAmount != savingsBefore;
+        boolean isTransition(int savingsBefore, int negativeSavings) {
+            return rule.savingsAmount - negativeSavings != savingsBefore;
         }
 
         public int compareTo(TransRule other) {
@@ -697,12 +706,22 @@
         // start ldt of each zone window
         LocalDateTime zoneStart = LocalDateTime.MIN;
 
-        // first stanard offset
+        // first standard offset
         ZoneOffset firstStdOffset = stdOffset;
         // first wall offset
         ZoneOffset firstWallOffset = wallOffset;
 
         for (ZoneLine zone : zones) {
+            // Adjust stdOffset, if negative DST is observed. It should be either
+            // fixed amount, or expressed in the named Rules.
+            int negativeSavings = Math.min(zone.fixedSavingsSecs, findNegativeSavings(zoneStart, zone));
+            if (negativeSavings < 0) {
+                zone.stdOffsetSecs += negativeSavings;
+                if (zone.fixedSavingsSecs < 0) {
+                    zone.fixedSavingsSecs = 0;
+                }
+            }
+
             // check if standard offset changed, update it if yes
             ZoneOffset stdOffsetPrev = stdOffset;  // for effectiveSavings check
             if (zone.stdOffsetSecs != stdOffset.getTotalSeconds()) {
@@ -791,7 +810,7 @@
                 // sort the merged rules
                 Collections.sort(trules);
 
-                effectiveSavings = 0;
+                effectiveSavings = -negativeSavings;
                 for (TransRule rule : trules) {
                     if (rule.toEpochSecond(stdOffsetPrev, savings) >
                         zoneStart.toEpochSecond(wallOffset)) {
@@ -800,7 +819,7 @@
                         // (hence isAfter)
                         break;
                     }
-                    effectiveSavings = rule.rule.savingsAmount;
+                    effectiveSavings = rule.rule.savingsAmount - negativeSavings;
                 }
             }
             // check if the start of the window represents a transition
@@ -817,21 +836,21 @@
             if (trules != null) {
                 long zoneStartEpochSecs = zoneStart.toEpochSecond(wallOffset);
                 for (TransRule trule : trules) {
-                    if (trule.isTransition(savings)) {
+                    if (trule.isTransition(savings, negativeSavings)) {
                         long epochSecs = trule.toEpochSecond(stdOffset, savings);
                         if (epochSecs < zoneStartEpochSecs ||
                             epochSecs >= zone.toDateTimeEpochSecond(savings)) {
                             continue;
                         }
-                        transitionList.add(trule.toTransition(stdOffset, savings));
-                        savings = trule.rule.savingsAmount;
+                        transitionList.add(trule.toTransition(stdOffset, savings, negativeSavings));
+                        savings = trule.rule.savingsAmount - negativeSavings;
                     }
                 }
             }
             if (lastRules != null) {
                 for (TransRule trule : lastRules) {
-                    lastTransitionRuleList.add(trule.rule.toTransitionRule(stdOffset, savings));
-                    savings = trule.rule.savingsAmount;
+                    lastTransitionRuleList.add(trule.rule.toTransitionRule(stdOffset, savings, negativeSavings));
+                    savings = trule.rule.savingsAmount - negativeSavings;
                 }
             }
 
@@ -848,4 +867,38 @@
                              lastTransitionRuleList);
     }
 
+    /**
+     * Find the minimum negative savings in named Rules for a Zone. Savings are only
+     * looked at for the period of the subject Zone.
+     *
+     * @param zoneStart start LDT of the zone
+     * @param zl ZoneLine to look at
+     */
+    private int findNegativeSavings(LocalDateTime zoneStart, ZoneLine zl) {
+        int negativeSavings = 0;
+        LocalDateTime zoneEnd = zl.toDateTime();
+
+        if (zl.savingsRule != null) {
+            List<RuleLine> rlines = rules.get(zl.savingsRule);
+            if (rlines == null) {
+                throw new IllegalArgumentException("<Rule> not found: " +
+                        zl.savingsRule);
+            }
+
+            negativeSavings = Math.min(0, rlines.stream()
+                    .filter(l -> windowOverlap(l, zoneStart.getYear(), zoneEnd.getYear()))
+                    .map(l -> l.savingsAmount)
+                    .min(Comparator.naturalOrder())
+                    .orElse(0));
+        }
+
+        return negativeSavings;
+    }
+
+    private boolean windowOverlap(RuleLine ruleLine, int zoneStartYear, int zoneEndYear) {
+        boolean overlap = zoneStartYear <= ruleLine.startYear && zoneEndYear >= ruleLine.startYear ||
+                          zoneStartYear <= ruleLine.endYear && zoneEndYear >= ruleLine.endYear;
+
+        return overlap;
+    }
 }
--- a/make/jdk/src/classes/build/tools/tzdb/ZoneRules.java	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,317 +0,0 @@
-/*
- * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * This file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Copyright (c) 2011-2012, Stephen Colebourne & Michael Nascimento Santos
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *  * Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- *
- *  * Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- *
- *  * Neither the name of JSR-310 nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package build.tools.tzdb;
-
-import java.io.DataOutput;
-import java.io.IOException;
-import java.io.ObjectOutput;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.ZoneOffset;
-import java.time.zone.ZoneOffsetTransition;
-import java.time.zone.ZoneOffsetTransitionRule;
-import java.time.zone.ZoneOffsetTransitionRule.TimeDefinition;
-import java.util.Arrays;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Duplicated code of javax.time.zone.ZoneRules, ZoneOffsetTransitionRule
- * and Ser to generate the serialization form output of ZoneRules for
- * tzdb.jar.
- *
- * Implementation here is the copy/paste of ZoneRules, ZoneOffsetTransitionRule
- * and Ser in javax.time.zone package. Make sure the code here is synchrionozed
- * with the serialization implementation there.
- *
- * @since 1.8
- */
-
-final class ZoneRules {
-
-    /**
-     * The transitions between standard offsets (epoch seconds), sorted.
-     */
-    private final long[] standardTransitions;
-    /**
-     * The standard offsets.
-     */
-    private final ZoneOffset[] standardOffsets;
-    /**
-     * The transitions between instants (epoch seconds), sorted.
-     */
-    private final long[] savingsInstantTransitions;
-
-    /**
-     * The wall offsets.
-     */
-    private final ZoneOffset[] wallOffsets;
-    /**
-     * The last rule.
-     */
-    private final ZoneOffsetTransitionRule[] lastRules;
-
-    /**
-     * Creates an instance.
-     *
-     * @param baseStandardOffset  the standard offset to use before legal rules were set, not null
-     * @param baseWallOffset  the wall offset to use before legal rules were set, not null
-     * @param standardOffsetTransitionList  the list of changes to the standard offset, not null
-     * @param transitionList  the list of transitions, not null
-     * @param lastRules  the recurring last rules, size 16 or less, not null
-     */
-    ZoneRules(ZoneOffset baseStandardOffset,
-              ZoneOffset baseWallOffset,
-              List<ZoneOffsetTransition> standardOffsetTransitionList,
-              List<ZoneOffsetTransition> transitionList,
-              List<ZoneOffsetTransitionRule> lastRules) {
-
-        this.standardTransitions = new long[standardOffsetTransitionList.size()];
-
-        this.standardOffsets = new ZoneOffset[standardOffsetTransitionList.size() + 1];
-        this.standardOffsets[0] = baseStandardOffset;
-        for (int i = 0; i < standardOffsetTransitionList.size(); i++) {
-            this.standardTransitions[i] = standardOffsetTransitionList.get(i).toEpochSecond();
-            this.standardOffsets[i + 1] = standardOffsetTransitionList.get(i).getOffsetAfter();
-        }
-
-        // convert savings transitions to locals
-        List<ZoneOffset> localTransitionOffsetList = new ArrayList<>();
-        localTransitionOffsetList.add(baseWallOffset);
-        for (ZoneOffsetTransition trans : transitionList) {
-            localTransitionOffsetList.add(trans.getOffsetAfter());
-        }
-
-        this.wallOffsets = localTransitionOffsetList.toArray(new ZoneOffset[localTransitionOffsetList.size()]);
-
-        // convert savings transitions to instants
-        this.savingsInstantTransitions = new long[transitionList.size()];
-        for (int i = 0; i < transitionList.size(); i++) {
-            this.savingsInstantTransitions[i] = transitionList.get(i).toEpochSecond();
-        }
-
-        // last rules
-        if (lastRules.size() > 16) {
-            throw new IllegalArgumentException("Too many transition rules");
-        }
-        this.lastRules = lastRules.toArray(new ZoneOffsetTransitionRule[lastRules.size()]);
-    }
-
-    /** Type for ZoneRules. */
-    static final byte ZRULES = 1;
-
-    /**
-     * Writes the state to the stream.
-     *
-     * @param out  the output stream, not null
-     * @throws IOException if an error occurs
-     */
-    void writeExternal(DataOutput out) throws IOException {
-        out.writeByte(ZRULES);
-        out.writeInt(standardTransitions.length);
-        for (long trans : standardTransitions) {
-            writeEpochSec(trans, out);
-        }
-        for (ZoneOffset offset : standardOffsets) {
-            writeOffset(offset, out);
-        }
-        out.writeInt(savingsInstantTransitions.length);
-        for (long trans : savingsInstantTransitions) {
-            writeEpochSec(trans, out);
-        }
-        for (ZoneOffset offset : wallOffsets) {
-            writeOffset(offset, out);
-        }
-        out.writeByte(lastRules.length);
-        for (ZoneOffsetTransitionRule rule : lastRules) {
-            writeRule(rule, out);
-        }
-    }
-
-    /**
-     * Writes the state the ZoneOffset to the stream.
-     *
-     * @param offset  the offset, not null
-     * @param out  the output stream, not null
-     * @throws IOException if an error occurs
-     */
-    static void writeOffset(ZoneOffset offset, DataOutput out) throws IOException {
-        final int offsetSecs = offset.getTotalSeconds();
-        int offsetByte = offsetSecs % 900 == 0 ? offsetSecs / 900 : 127;  // compress to -72 to +72
-        out.writeByte(offsetByte);
-        if (offsetByte == 127) {
-            out.writeInt(offsetSecs);
-        }
-    }
-
-    /**
-     * Writes the epoch seconds to the stream.
-     *
-     * @param epochSec  the epoch seconds, not null
-     * @param out  the output stream, not null
-     * @throws IOException if an error occurs
-     */
-    static void writeEpochSec(long epochSec, DataOutput out) throws IOException {
-        if (epochSec >= -4575744000L && epochSec < 10413792000L && epochSec % 900 == 0) {  // quarter hours between 1825 and 2300
-            int store = (int) ((epochSec + 4575744000L) / 900);
-            out.writeByte((store >>> 16) & 255);
-            out.writeByte((store >>> 8) & 255);
-            out.writeByte(store & 255);
-        } else {
-            out.writeByte(255);
-            out.writeLong(epochSec);
-        }
-    }
-
-    /**
-     * Writes the state of the transition rule to the stream.
-     *
-     * @param rule  the transition rule, not null
-     * @param out  the output stream, not null
-     * @throws IOException if an error occurs
-     */
-    static void writeRule(ZoneOffsetTransitionRule rule, DataOutput out) throws IOException {
-        int month = rule.getMonth().getValue();
-        byte dom = (byte)rule.getDayOfMonthIndicator();
-        int dow = (rule.getDayOfWeek() == null ? -1 : rule.getDayOfWeek().getValue());
-        LocalTime time = rule.getLocalTime();
-        boolean timeEndOfDay = rule.isMidnightEndOfDay();
-        TimeDefinition timeDefinition = rule.getTimeDefinition();
-        ZoneOffset standardOffset = rule.getStandardOffset();
-        ZoneOffset offsetBefore = rule.getOffsetBefore();
-        ZoneOffset offsetAfter = rule.getOffsetAfter();
-
-        int timeSecs = (timeEndOfDay ? 86400 : time.toSecondOfDay());
-        int stdOffset = standardOffset.getTotalSeconds();
-        int beforeDiff = offsetBefore.getTotalSeconds() - stdOffset;
-        int afterDiff = offsetAfter.getTotalSeconds() - stdOffset;
-        int timeByte = (timeSecs % 3600 == 0 ? (timeEndOfDay ? 24 : time.getHour()) : 31);
-        int stdOffsetByte = (stdOffset % 900 == 0 ? stdOffset / 900 + 128 : 255);
-        int beforeByte = (beforeDiff == 0 || beforeDiff == 1800 || beforeDiff == 3600 ? beforeDiff / 1800 : 3);
-        int afterByte = (afterDiff == 0 || afterDiff == 1800 || afterDiff == 3600 ? afterDiff / 1800 : 3);
-        int dowByte = (dow == -1 ? 0 : dow);
-        int b = (month << 28) +                     // 4 bytes
-                ((dom + 32) << 22) +                // 6 bytes
-                (dowByte << 19) +                   // 3 bytes
-                (timeByte << 14) +                  // 5 bytes
-                (timeDefinition.ordinal() << 12) +  // 2 bytes
-                (stdOffsetByte << 4) +              // 8 bytes
-                (beforeByte << 2) +                 // 2 bytes
-                afterByte;                          // 2 bytes
-        out.writeInt(b);
-        if (timeByte == 31) {
-            out.writeInt(timeSecs);
-        }
-        if (stdOffsetByte == 255) {
-            out.writeInt(stdOffset);
-        }
-        if (beforeByte == 3) {
-            out.writeInt(offsetBefore.getTotalSeconds());
-        }
-        if (afterByte == 3) {
-            out.writeInt(offsetAfter.getTotalSeconds());
-        }
-    }
-
-    /**
-     * Checks if this set of rules equals another.
-     * <p>
-     * Two rule sets are equal if they will always result in the same output
-     * for any given input instant or local date-time.
-     * Rules from two different groups may return false even if they are in fact the same.
-     * <p>
-     * This definition should result in implementations comparing their entire state.
-     *
-     * @param otherRules  the other rules, null returns false
-     * @return true if this rules is the same as that specified
-     */
-    @Override
-    public boolean equals(Object otherRules) {
-        if (this == otherRules) {
-           return true;
-        }
-        if (otherRules instanceof ZoneRules) {
-            ZoneRules other = (ZoneRules) otherRules;
-            return Arrays.equals(standardTransitions, other.standardTransitions) &&
-                    Arrays.equals(standardOffsets, other.standardOffsets) &&
-                    Arrays.equals(savingsInstantTransitions, other.savingsInstantTransitions) &&
-                    Arrays.equals(wallOffsets, other.wallOffsets) &&
-                    Arrays.equals(lastRules, other.lastRules);
-        }
-        return false;
-    }
-
-    /**
-     * Returns a suitable hash code given the definition of {@code #equals}.
-     *
-     * @return the hash code
-     */
-    @Override
-    public int hashCode() {
-        return Arrays.hashCode(standardTransitions) ^
-                Arrays.hashCode(standardOffsets) ^
-                Arrays.hashCode(savingsInstantTransitions) ^
-                Arrays.hashCode(wallOffsets) ^
-                Arrays.hashCode(lastRules);
-    }
-
-}
--- a/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp	Fri Jul 26 19:11:34 2019 -0400
@@ -415,6 +415,26 @@
 
 }
 
+void ShenandoahBarrierSetAssembler::try_resolve_jobject_in_native(MacroAssembler* masm, Register jni_env,
+                                                                  Register obj, Register tmp, Label& slowpath) {
+  Label done;
+  // Resolve jobject
+  BarrierSetAssembler::try_resolve_jobject_in_native(masm, jni_env, obj, tmp, slowpath);
+
+  // Check for null.
+  __ cbz(obj, done);
+
+  assert(obj != rscratch2, "need rscratch2");
+  Address gc_state(rthread, in_bytes(ShenandoahThreadLocalData::gc_state_offset()));
+  __ ldrb(rscratch2, gc_state);
+
+  // Check for heap in evacuation phase
+  __ tbnz(rscratch2, ShenandoahHeap::EVACUATION_BITPOS, slowpath);
+
+  __ bind(done);
+}
+
+
 void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm, Register addr, Register expected, Register new_val,
                                                 bool acquire, bool release, bool weak, bool is_cae,
                                                 Register result) {
--- a/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.hpp	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.hpp	Fri Jul 26 19:11:34 2019 -0400
@@ -81,6 +81,8 @@
                        Register dst, Address src, Register tmp1, Register tmp_thread);
   virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
                         Address dst, Register val, Register tmp1, Register tmp2);
+  virtual void try_resolve_jobject_in_native(MacroAssembler* masm, Register jni_env,
+                                             Register obj, Register tmp, Label& slowpath);
   void cmpxchg_oop(MacroAssembler* masm, Register addr, Register expected, Register new_val,
                    bool acquire, bool release, bool weak, bool is_cae, Register result);
 
--- a/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp	Fri Jul 26 19:11:34 2019 -0400
@@ -621,6 +621,22 @@
   }
 }
 
+void ShenandoahBarrierSetAssembler::try_resolve_jobject_in_native(MacroAssembler* masm, Register jni_env,
+                                                                  Register obj, Register tmp, Label& slowpath) {
+  Label done;
+  // Resolve jobject
+  BarrierSetAssembler::try_resolve_jobject_in_native(masm, jni_env, obj, tmp, slowpath);
+
+  // Check for null.
+  __ testptr(obj, obj);
+  __ jcc(Assembler::zero, done);
+
+  Address gc_state(jni_env, ShenandoahThreadLocalData::gc_state_offset() - JavaThread::jni_environment_offset());
+  __ testb(gc_state, ShenandoahHeap::EVACUATION);
+  __ jccb(Assembler::notZero, slowpath);
+  __ bind(done);
+}
+
 // Special Shenandoah CAS implementation that handles false negatives
 // due to concurrent evacuation.
 void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm,
--- a/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.hpp	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.hpp	Fri Jul 26 19:11:34 2019 -0400
@@ -91,6 +91,8 @@
                        Register dst, Address src, Register tmp1, Register tmp_thread);
   virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
                         Address dst, Register val, Register tmp1, Register tmp2);
+  virtual void try_resolve_jobject_in_native(MacroAssembler* masm, Register jni_env,
+                                             Register obj, Register tmp, Label& slowpath);
 
   virtual void barrier_stubs_init();
 
--- a/src/java.base/macosx/native/libosxsecurity/KeystoreImpl.m	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/java.base/macosx/native/libosxsecurity/KeystoreImpl.m	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -562,6 +562,9 @@
 
     err = SecKeychainItemImport(cfDataToImport, NULL, &dataFormat, NULL,
                                 0, &paramBlock, defaultKeychain, &createdItems);
+    if (cfDataToImport != NULL) {
+        CFRelease(cfDataToImport);
+    }
 
     if (err == noErr) {
         SecKeychainItemRef anItem = (SecKeychainItemRef)CFArrayGetValueAtIndex(createdItems, 0);
--- a/src/java.base/share/classes/com/sun/crypto/provider/CipherCore.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/java.base/share/classes/com/sun/crypto/provider/CipherCore.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -271,7 +271,9 @@
             padding = null;
         } else if (paddingScheme.equalsIgnoreCase("ISO10126Padding")) {
             padding = new ISO10126Padding(blockSize);
-        } else if (!paddingScheme.equalsIgnoreCase("PKCS5Padding")) {
+        } else if (paddingScheme.equalsIgnoreCase("PKCS5Padding")) {
+            padding = new PKCS5Padding(blockSize);
+        } else {
             throw new NoSuchPaddingException("Padding: " + paddingScheme
                                              + " not implemented");
         }
--- a/src/java.base/share/classes/java/time/zone/Ser.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/java.base/share/classes/java/time/zone/Ser.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -91,7 +91,7 @@
     static final byte ZRULES = 1;
     /** Type for ZoneOffsetTransition. */
     static final byte ZOT = 2;
-    /** Type for ZoneOffsetTransition. */
+    /** Type for ZoneOffsetTransitionRule. */
     static final byte ZOTRULE = 3;
 
     /** The type being serialized. */
--- a/src/java.base/share/classes/java/time/zone/ZoneOffsetTransitionRule.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/java.base/share/classes/java/time/zone/ZoneOffsetTransitionRule.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -256,7 +256,7 @@
      * for the encoding of epoch seconds and offsets.
      * <pre style="font-size:1.0em">{@code
      *
-     *      out.writeByte(3);                // identifies a ZoneOffsetTransition
+     *      out.writeByte(3);                // identifies a ZoneOffsetTransitionRule
      *      final int timeSecs = (timeEndOfDay ? 86400 : time.toSecondOfDay());
      *      final int stdOffset = standardOffset.getTotalSeconds();
      *      final int beforeDiff = offsetBefore.getTotalSeconds() - stdOffset;
--- a/src/java.base/share/classes/java/util/Calendar.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/java.base/share/classes/java/util/Calendar.java	Fri Jul 26 19:11:34 2019 -0400
@@ -2205,7 +2205,8 @@
         }
 
         String calendarType = getCalendarType();
-        if (style == ALL_STYLES || isStandaloneStyle(style) || isNarrowFormatStyle(style)) {
+        if (style == ALL_STYLES || isStandaloneStyle(style) || isNarrowFormatStyle(style) ||
+            field == ERA && (style & SHORT) == SHORT) {
             Map<String, Integer> map;
             map = CalendarDataUtility.retrieveFieldValueNames(calendarType, field, style, locale);
 
--- a/src/java.base/share/classes/javax/crypto/Cipher.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/java.base/share/classes/javax/crypto/Cipher.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -559,16 +559,16 @@
                 // does not support mode or padding we need, ignore
                 continue;
             }
-            if (canuse == S_YES) {
+            // S_YES, S_MAYBE
+            // even when mode and padding are both supported, they
+            // may not be used together, try out and see if it works
+            try {
+                CipherSpi spi = (CipherSpi)s.newInstance(null);
+                tr.setModePadding(spi);
+                // specify null instead of spi for delayed provider selection
                 return new Cipher(null, s, t, transformation, transforms);
-            } else { // S_MAYBE, try out if it works
-                try {
-                    CipherSpi spi = (CipherSpi)s.newInstance(null);
-                    tr.setModePadding(spi);
-                    return new Cipher(spi, s, t, transformation, transforms);
-                } catch (Exception e) {
-                    failure = e;
-                }
+            } catch (Exception e) {
+                failure = e;
             }
         }
         throw new NoSuchAlgorithmException
--- a/src/java.base/share/classes/sun/util/calendar/ZoneInfo.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/java.base/share/classes/sun/util/calendar/ZoneInfo.java	Fri Jul 26 19:11:34 2019 -0400
@@ -273,7 +273,7 @@
         }
 
         // beyond the transitions, delegate to SimpleTimeZone if there
-        // is a rule; otherwise, return rawOffset.
+        // is a rule; otherwise, return the offset of the last transition.
         SimpleTimeZone tz = getLastRule();
         if (tz != null) {
             int rawoffset = tz.getRawOffset();
@@ -293,13 +293,18 @@
                 offsets[1] = dstoffset;
             }
             return rawoffset + dstoffset;
+        } else {
+            // use the last transition
+            long val = transitions[transitions.length - 1];
+            int offset = this.offsets[(int)(val & OFFSET_MASK)] + rawOffsetDiff;
+            if (offsets != null) {
+                int dst = (int)((val >>> DST_NSHIFT) & 0xfL);
+                int save = (dst == 0) ? 0 : this.offsets[dst];
+                offsets[0] = offset - save;
+                offsets[1] = save;
+            }
+            return offset;
         }
-        int offset = getLastRawOffset();
-        if (offsets != null) {
-            offsets[0] = offset;
-            offsets[1] = 0;
-        }
-        return offset;
     }
 
     private int getTransitionIndex(long date, int type) {
@@ -502,8 +507,10 @@
         SimpleTimeZone tz = getLastRule();
         if (tz != null) {
             return tz.inDaylightTime(date);
-       }
-        return false;
+        } else {
+            // use the last transition
+            return (transitions[transitions.length - 1] & DST_MASK) != 0;
+        }
     }
 
     /**
--- a/src/java.sql/share/classes/java/sql/PreparedStatement.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/java.sql/share/classes/java/sql/PreparedStatement.java	Fri Jul 26 19:11:34 2019 -0400
@@ -47,12 +47,13 @@
  * <P>
  * In the following example of setting a parameter, <code>con</code> represents
  * an active connection:
- * <PRE>
+ * <pre>{@code
+ *   BigDecimal sal = new BigDecimal("153833.00");
  *   PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
  *                                     SET SALARY = ? WHERE ID = ?");
- *   pstmt.setBigDecimal(1, 153833.00)
- *   pstmt.setInt(2, 110592)
- * </PRE>
+ *   pstmt.setBigDecimal(1, sal);
+ *   pstmt.setInt(2, 110592);
+ * }</pre>
  *
  * @see Connection#prepareStatement
  * @see ResultSet
--- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/SubstitutionGroupHandler.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/SubstitutionGroupHandler.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -30,6 +30,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * To store and validate information about substitutionGroup
@@ -38,7 +39,7 @@
  *
  * @author Sandy Gao, IBM
  *
- * @LastModified: Nov 2017
+ * @LastModified: July 2019
  */
 public class SubstitutionGroupHandler {
 
@@ -57,8 +58,8 @@
     // 3.9.4 Element Sequence Locally Valid (Particle) 2.3.3
     // check whether one element decl matches an element with the given qname
     public XSElementDecl getMatchingElemDecl(QName element, XSElementDecl exemplar) {
-        if (element.localpart == exemplar.fName &&
-            element.uri == exemplar.fTargetNamespace) {
+        if (Objects.equals(element.localpart, exemplar.fName) &&
+            Objects.equals(element.uri, exemplar.fTargetNamespace)) {
             return exemplar;
         }
 
--- a/src/jdk.internal.vm.compiler.management/share/classes/org.graalvm.compiler.hotspot.management/src/org/graalvm/compiler/hotspot/management/HotSpotGraalManagement.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler.management/share/classes/org.graalvm.compiler.hotspot.management/src/org/graalvm/compiler/hotspot/management/HotSpotGraalManagement.java	Fri Jul 26 19:11:34 2019 -0400
@@ -156,9 +156,10 @@
                         platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
                         process();
                     }
-                } catch (SecurityException e) {
+                } catch (SecurityException | UnsatisfiedLinkError | NoClassDefFoundError | UnsupportedOperationException e) {
                     // Without permission to find or create the MBeanServer,
                     // we cannot process any Graal mbeans.
+                    // Various other errors can occur in the ManagementFactory (JDK-8076557)
                     deferred = null;
                 }
             } else {
--- a/src/jdk.internal.vm.compiler/share/classes/jdk.internal.vm.compiler.libgraal/src/jdk/internal/vm/compiler/libgraal/OptionsEncoder.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/jdk.internal.vm.compiler.libgraal/src/jdk/internal/vm/compiler/libgraal/OptionsEncoder.java	Fri Jul 26 19:11:34 2019 -0400
@@ -171,4 +171,3 @@
         return res;
     }
 }
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.api.directives.test/src/org/graalvm/compiler/api/directives/test/ConstantProbablityBranchFoldingTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+
+package org.graalvm.compiler.api.directives.test;
+
+import org.graalvm.compiler.api.directives.GraalDirectives;
+import org.graalvm.compiler.core.test.GraalCompilerTest;
+import org.graalvm.compiler.graph.iterators.NodeIterable;
+import org.graalvm.compiler.nodes.IfNode;
+import org.graalvm.compiler.nodes.StructuredGraph;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class ConstantProbablityBranchFoldingTest extends GraalCompilerTest {
+
+    public static int branchFoldingSnippet1() {
+        if (GraalDirectives.injectBranchProbability(0.5, true)) {
+            return 1;
+        } else {
+            return 2;
+        }
+    }
+
+    public static int branchFoldingSnippet2() {
+        if (GraalDirectives.injectBranchProbability(0.5, false)) {
+            return 1;
+        } else {
+            return 2;
+        }
+    }
+
+    @Test
+    public void testEarlyFolding1() {
+        test("branchFoldingSnippet1");
+    }
+
+    @Test
+    public void testEarlyFolding2() {
+        test("branchFoldingSnippet2");
+    }
+
+    @Override
+    protected void checkLowTierGraph(StructuredGraph graph) {
+        NodeIterable<IfNode> ifNodes = graph.getNodes(IfNode.TYPE);
+        Assert.assertEquals("IfNode count", 0, ifNodes.count());
+    }
+}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.aarch64.test/src/org/graalvm/compiler/asm/aarch64/test/AArch64BitCountAssemblerTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.aarch64.test/src/org/graalvm/compiler/asm/aarch64/test/AArch64BitCountAssemblerTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -75,6 +75,9 @@
                 AArch64MacroAssembler masm = new AArch64MacroAssembler(target);
                 Register dst = registerConfig.getReturnRegister(JavaKind.Int);
                 Register src = asRegister(cc.getArgument(0));
+                // Generate a nop first as AArch64 Hotspot requires instruction at nmethod verified
+                // entry to be a jump or nop. (See https://github.com/oracle/graal/issues/1439)
+                masm.nop();
                 RegisterArray registers = registerConfig.filterAllocatableRegisters(AArch64Kind.V64_BYTE, registerConfig.getAllocatableRegisters());
                 masm.popcnt(size, dst, src, registers.get(registers.size() - 1));
                 masm.ret(AArch64.lr);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.aarch64/src/org/graalvm/compiler/core/aarch64/AArch64LoweringProviderMixin.java	Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+
+package org.graalvm.compiler.core.aarch64;
+
+import org.graalvm.compiler.nodes.spi.LoweringProvider;
+
+public interface AArch64LoweringProviderMixin extends LoweringProvider {
+
+    @Override
+    default Integer smallestCompareWidth() {
+        return 32;
+    }
+
+    @Override
+    default boolean supportBulkZeroing() {
+        return false;
+    }
+}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.aarch64/src/org/graalvm/compiler/core/aarch64/AArch64ReadNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.aarch64/src/org/graalvm/compiler/core/aarch64/AArch64ReadNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -80,9 +80,9 @@
      */
     public static void replace(ReadNode readNode) {
         assert readNode.getUsageCount() == 1;
-        assert readNode.getUsageAt(0) instanceof ZeroExtendNode || readNode.getUsageAt(0) instanceof SignExtendNode;
+        assert readNode.usages().first() instanceof ZeroExtendNode || readNode.usages().first() instanceof SignExtendNode;
 
-        ValueNode usage = (ValueNode) readNode.getUsageAt(0);
+        ValueNode usage = (ValueNode) readNode.usages().first();
         boolean isSigned = usage instanceof SignExtendNode;
         IntegerStamp accessStamp = ((IntegerStamp) readNode.getAccessStamp());
 
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.aarch64/src/org/graalvm/compiler/core/aarch64/AArch64ReadReplacementPhase.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.aarch64/src/org/graalvm/compiler/core/aarch64/AArch64ReadReplacementPhase.java	Fri Jul 26 19:11:34 2019 -0400
@@ -49,7 +49,7 @@
             if (node instanceof ReadNode) {
                 ReadNode readNode = (ReadNode) node;
                 if (readNode.hasExactlyOneUsage()) {
-                    Node usage = readNode.getUsageAt(0);
+                    Node usage = readNode.usages().first();
                     if (usage instanceof ZeroExtendNode || usage instanceof SignExtendNode) {
                         AArch64ReadNode.replace(readNode);
                     }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.aarch64/src/org/graalvm/compiler/core/aarch64/AArch64SuitesCreator.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.aarch64/src/org/graalvm/compiler/core/aarch64/AArch64SuitesCreator.java	Fri Jul 26 19:11:34 2019 -0400
@@ -24,8 +24,10 @@
 
 package org.graalvm.compiler.core.aarch64;
 
+import java.util.List;
 import java.util.ListIterator;
 
+import org.graalvm.compiler.debug.GraalError;
 import org.graalvm.compiler.java.DefaultSuitesCreator;
 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
 import org.graalvm.compiler.options.OptionValues;
@@ -37,24 +39,33 @@
 import org.graalvm.compiler.phases.tiers.Suites;
 
 public class AArch64SuitesCreator extends DefaultSuitesCreator {
-    private final Class<? extends Phase> insertReadReplacementBefore;
+    private final List<Class<? extends Phase>> insertReadReplacementBeforePositions;
 
-    public AArch64SuitesCreator(CompilerConfiguration compilerConfiguration, Plugins plugins, Class<? extends Phase> insertReadReplacementBefore) {
+    public AArch64SuitesCreator(CompilerConfiguration compilerConfiguration, Plugins plugins, List<Class<? extends Phase>> insertReadReplacementBeforePositions) {
         super(compilerConfiguration, plugins);
-        this.insertReadReplacementBefore = insertReadReplacementBefore;
+        this.insertReadReplacementBeforePositions = insertReadReplacementBeforePositions;
     }
 
     @Override
     public Suites createSuites(OptionValues options) {
         Suites suites = super.createSuites(options);
-
-        ListIterator<BasePhase<? super LowTierContext>> findPhase = suites.getLowTier().findPhase(insertReadReplacementBefore);
-        // Put AArch64ReadReplacementPhase right before the SchedulePhase
-        while (PhaseSuite.findNextPhase(findPhase, insertReadReplacementBefore)) {
-            // Search for last occurrence of SchedulePhase
+        ListIterator<BasePhase<? super LowTierContext>> findPhase = null;
+        for (Class<? extends Phase> phase : insertReadReplacementBeforePositions) {
+            findPhase = suites.getLowTier().findPhase(phase);
+            if (findPhase != null) {
+                // Put AArch64ReadReplacementPhase right before the requested phase
+                while (PhaseSuite.findNextPhase(findPhase, phase)) {
+                    // Search for last occurrence of SchedulePhase
+                }
+                findPhase.previous();
+                break;
+            }
         }
-        findPhase.previous();
-        findPhase.add(new AArch64ReadReplacementPhase());
+        if (findPhase != null) {
+            findPhase.add(new AArch64ReadReplacementPhase());
+        } else {
+            throw GraalError.shouldNotReachHere("Cannot find phase to insert AArch64ReadReplacementPhase");
+        }
         return suites;
     }
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64.test/src/org/graalvm/compiler/core/amd64/test/ConstantStackMoveTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64.test/src/org/graalvm/compiler/core/amd64/test/ConstantStackMoveTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -143,7 +143,7 @@
     }
 
     @Test
-    public void runByte() throws Throwable {
+    public void runByte() {
         runTest("testByte");
     }
 
@@ -157,7 +157,7 @@
     }
 
     @Test
-    public void runShort() throws Throwable {
+    public void runShort() {
         runTest("testShort");
     }
 
@@ -171,7 +171,7 @@
     }
 
     @Test
-    public void runInt() throws Throwable {
+    public void runInt() {
         runTest("testInt");
     }
 
@@ -185,7 +185,7 @@
     }
 
     @Test
-    public void runLong() throws Throwable {
+    public void runLong() {
         runTest("testLong");
     }
 
@@ -199,7 +199,7 @@
     }
 
     @Test
-    public void runFloat() throws Throwable {
+    public void runFloat() {
         runTest("testFloat");
     }
 
@@ -213,7 +213,7 @@
     }
 
     @Test
-    public void runDouble() throws Throwable {
+    public void runDouble() {
         runTest("testDouble");
     }
 
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64.test/src/org/graalvm/compiler/core/amd64/test/StackStoreTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64.test/src/org/graalvm/compiler/core/amd64/test/StackStoreTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -113,7 +113,7 @@
     }
 
     @Test
-    public void run0() throws Throwable {
+    public void run0() {
         runTest("test0", 0xDEADDEAD);
     }
 
@@ -122,7 +122,7 @@
     }
 
     @Test
-    public void run1() throws Throwable {
+    public void run1() {
         runTest("test1", 0xDEADDEAD);
     }
 
@@ -131,7 +131,7 @@
     }
 
     @Test
-    public void run2() throws Throwable {
+    public void run2() {
         runTest("test2", 0xDEADDEAD);
     }
 
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64/src/org/graalvm/compiler/core/amd64/AMD64ArithmeticLIRGenerator.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64/src/org/graalvm/compiler/core/amd64/AMD64ArithmeticLIRGenerator.java	Fri Jul 26 19:11:34 2019 -0400
@@ -126,6 +126,7 @@
 import org.graalvm.compiler.lir.amd64.AMD64Unary;
 import org.graalvm.compiler.lir.amd64.AMD64ZeroMemoryOp;
 import org.graalvm.compiler.lir.amd64.vector.AMD64VectorBinary;
+import org.graalvm.compiler.lir.amd64.vector.AMD64VectorBinary.AVXBinaryConstFloatOp;
 import org.graalvm.compiler.lir.amd64.vector.AMD64VectorBinary.AVXBinaryOp;
 import org.graalvm.compiler.lir.amd64.vector.AMD64VectorUnary;
 import org.graalvm.compiler.lir.gen.ArithmeticLIRGenerator;
@@ -1360,9 +1361,13 @@
         }
     }
 
-    private Variable emitBinary(LIRKind resultKind, VexRVMOp op, Value a, Value b) {
+    protected Variable emitBinary(LIRKind resultKind, VexRVMOp op, Value a, Value b) {
         Variable result = getLIRGen().newVariable(resultKind);
-        getLIRGen().append(new AVXBinaryOp(op, getRegisterSize(result), result, asAllocatable(a), asAllocatable(b)));
+        if (b instanceof ConstantValue && (b.getPlatformKind() == AMD64Kind.SINGLE || b.getPlatformKind() == AMD64Kind.DOUBLE)) {
+            getLIRGen().append(new AVXBinaryConstFloatOp(op, getRegisterSize(result), result, asAllocatable(a), (ConstantValue) b));
+        } else {
+            getLIRGen().append(new AVXBinaryOp(op, getRegisterSize(result), result, asAllocatable(a), asAllocatable(b)));
+        }
         return result;
     }
 
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64/src/org/graalvm/compiler/core/amd64/AMD64LIRGenerator.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64/src/org/graalvm/compiler/core/amd64/AMD64LIRGenerator.java	Fri Jul 26 19:11:34 2019 -0400
@@ -47,8 +47,8 @@
 import org.graalvm.compiler.asm.amd64.AMD64Assembler.AMD64MIOp;
 import org.graalvm.compiler.asm.amd64.AMD64Assembler.AMD64RMOp;
 import org.graalvm.compiler.asm.amd64.AMD64Assembler.ConditionFlag;
+import org.graalvm.compiler.asm.amd64.AMD64Assembler.SSEOp;
 import org.graalvm.compiler.asm.amd64.AMD64BaseAssembler.OperandSize;
-import org.graalvm.compiler.asm.amd64.AMD64Assembler.SSEOp;
 import org.graalvm.compiler.core.common.LIRKind;
 import org.graalvm.compiler.core.common.NumUtil;
 import org.graalvm.compiler.core.common.calc.Condition;
@@ -80,10 +80,10 @@
 import org.graalvm.compiler.lir.amd64.AMD64ControlFlow.FloatBranchOp;
 import org.graalvm.compiler.lir.amd64.AMD64ControlFlow.FloatCondMoveOp;
 import org.graalvm.compiler.lir.amd64.AMD64ControlFlow.FloatCondSetOp;
+import org.graalvm.compiler.lir.amd64.AMD64ControlFlow.HashTableSwitchOp;
 import org.graalvm.compiler.lir.amd64.AMD64ControlFlow.ReturnOp;
 import org.graalvm.compiler.lir.amd64.AMD64ControlFlow.StrategySwitchOp;
 import org.graalvm.compiler.lir.amd64.AMD64ControlFlow.TableSwitchOp;
-import org.graalvm.compiler.lir.amd64.AMD64ControlFlow.HashTableSwitchOp;
 import org.graalvm.compiler.lir.amd64.AMD64LFenceOp;
 import org.graalvm.compiler.lir.amd64.AMD64Move;
 import org.graalvm.compiler.lir.amd64.AMD64Move.CompareAndSwapOp;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64/src/org/graalvm/compiler/core/amd64/AMD64LoweringProviderMixin.java	Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+
+package org.graalvm.compiler.core.amd64;
+
+import org.graalvm.compiler.nodes.spi.LoweringProvider;
+
+public interface AMD64LoweringProviderMixin extends LoweringProvider {
+
+    @Override
+    default Integer smallestCompareWidth() {
+        return 8;
+    }
+
+    @Override
+    default boolean supportBulkZeroing() {
+        return true;
+    }
+}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64/src/org/graalvm/compiler/core/amd64/AMD64MoveFactory.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64/src/org/graalvm/compiler/core/amd64/AMD64MoveFactory.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -50,6 +50,7 @@
 import jdk.vm.ci.meta.AllocatableValue;
 import jdk.vm.ci.meta.Constant;
 import jdk.vm.ci.meta.JavaConstant;
+import jdk.vm.ci.meta.PrimitiveConstant;
 import jdk.vm.ci.meta.Value;
 
 public abstract class AMD64MoveFactory extends AMD64MoveFactoryBase {
@@ -65,6 +66,9 @@
             switch (c.getJavaKind()) {
                 case Long:
                     return NumUtil.isInt(c.asLong());
+                case Float:
+                case Double:
+                    return false;
                 case Object:
                     return c.isNull();
                 default:
@@ -75,6 +79,12 @@
     }
 
     @Override
+    public boolean mayEmbedConstantLoad(Constant constant) {
+        // Only consider not inlineable constants here.
+        return constant instanceof PrimitiveConstant && ((PrimitiveConstant) constant).getJavaKind().isNumericFloat();
+    }
+
+    @Override
     public boolean allowConstantToStackMove(Constant constant) {
         if (constant instanceof DataPointerConstant) {
             return false;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/GraalOptions.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/GraalOptions.java	Fri Jul 26 19:11:34 2019 -0400
@@ -289,4 +289,6 @@
     @Option(help = "If applicable, use bulk zeroing instructions when the zeroing size in bytes exceeds this threshold.", type = OptionType.Expert)
     public static final OptionKey<Integer> MinimalBulkZeroingSize = new OptionKey<>(2048);
 
+    @Option(help = "Alignment in bytes for loop header blocks.", type = OptionType.Expert)
+    public static final OptionKey<Integer> LoopHeaderAlignment = new OptionKey<>(16);
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/util/UnsafeArrayTypeWriter.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/util/UnsafeArrayTypeWriter.java	Fri Jul 26 19:11:34 2019 -0400
@@ -32,6 +32,8 @@
 import static org.graalvm.compiler.core.common.util.TypeConversion.asU4;
 import static org.graalvm.compiler.serviceprovider.GraalUnsafeAccess.getUnsafe;
 
+import java.nio.ByteBuffer;
+
 import org.graalvm.compiler.core.common.calc.UnsignedMath;
 
 import sun.misc.Unsafe;
@@ -103,6 +105,17 @@
         return result;
     }
 
+    /** Copies the buffer into the provided ByteBuffer at its current position. */
+    public final ByteBuffer toByteBuffer(ByteBuffer buffer) {
+        assert buffer.remaining() <= totalSize;
+        int initialPos = buffer.position();
+        for (Chunk cur = firstChunk; cur != null; cur = cur.next) {
+            buffer.put(cur.data, 0, cur.size);
+        }
+        assert buffer.position() - initialPos == totalSize;
+        return buffer;
+    }
+
     @Override
     public final void putS1(long value) {
         long offset = writeOffset(Byte.BYTES);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.sparc/src/org/graalvm/compiler/core/sparc/SPARCArithmeticLIRGenerator.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.sparc/src/org/graalvm/compiler/core/sparc/SPARCArithmeticLIRGenerator.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.sparc/src/org/graalvm/compiler/core/sparc/SparcLoweringProviderMixin.java	Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+
+package org.graalvm.compiler.core.sparc;
+
+import org.graalvm.compiler.nodes.spi.LoweringProvider;
+
+public interface SparcLoweringProviderMixin extends LoweringProvider {
+
+    @Override
+    default Integer smallestCompareWidth() {
+        return 32;
+    }
+
+    @Override
+    default boolean supportBulkZeroing() {
+        return false;
+    }
+}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/ConditionalEliminationPiTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/ConditionalEliminationPiTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -63,4 +63,3 @@
         test("testSnippet1", 1);
     }
 }
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/ConditionalNodeTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/ConditionalNodeTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -24,6 +24,7 @@
 
 package org.graalvm.compiler.core.test;
 
+import org.graalvm.compiler.nodes.CallTargetNode.InvokeKind;
 import org.junit.Test;
 
 public class ConditionalNodeTest extends GraalCompilerTest {
@@ -106,4 +107,23 @@
         sink0 = 1;
         return Math.min(-1, value);
     }
+
+    @Test
+    public void test4() {
+        test("conditionalTest4", this, 0);
+        test("conditionalTest4", this, 1);
+    }
+
+    int a;
+    InvokeKind b;
+
+    public static int conditionalTest4(ConditionalNodeTest node, int a) {
+        if (a == 1) {
+            node.b = InvokeKind.Virtual;
+        } else {
+            node.b = InvokeKind.Special;
+        }
+        node.a = a;
+        return a;
+    }
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/DumpPathTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/DumpPathTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -53,17 +53,18 @@
         String[] extensions = new String[]{".cfg", ".bgv", ".graph-strings"};
         EconomicMap<OptionKey<?>, Object> overrides = OptionValues.newOptionMap();
         overrides.put(DebugOptions.DumpPath, dumpDirectoryPath.toString());
+        overrides.put(DebugOptions.PrintCFG, true);
         overrides.put(DebugOptions.PrintGraph, PrintGraphTarget.File);
         overrides.put(DebugOptions.PrintCanonicalGraphStrings, true);
         overrides.put(DebugOptions.Dump, "*");
 
         // Generate dump files.
         test(new OptionValues(getInitialOptions(), overrides), "snippet");
-        // Check that Ideal files got created, in the right place.
+        // Check that IGV files got created, in the right place.
         checkForFiles(dumpDirectoryPath, extensions);
 
         // Clean up the generated files.
-        scrubDirectory(dumpDirectoryPath);
+        removeDirectory(dumpDirectoryPath);
     }
 
     /**
@@ -92,24 +93,4 @@
             assertTrue(paths[0].equals(paths[i]), paths[0] + " != " + paths[i]);
         }
     }
-
-    /**
-     * Remove the temporary directory.
-     */
-    private static void scrubDirectory(Path directoryPath) {
-        try {
-            try (DirectoryStream<Path> stream = Files.newDirectoryStream(directoryPath)) {
-                for (Path filePath : stream) {
-                    if (Files.isRegularFile(filePath)) {
-                        Files.delete(filePath);
-                    } else if (Files.isDirectory(filePath)) {
-                        scrubDirectory(filePath);
-                    }
-                }
-            }
-            Files.delete(directoryPath);
-        } catch (IOException ioe) {
-            ioe.printStackTrace();
-        }
-    }
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/FindUniqueConcreteMethodBugTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/FindUniqueConcreteMethodBugTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -29,7 +29,6 @@
 import jdk.vm.ci.meta.ResolvedJavaType;
 
 import org.junit.Assert;
-import org.junit.Ignore;
 import org.junit.Test;
 
 public class FindUniqueConcreteMethodBugTest extends GraalCompilerTest {
@@ -44,7 +43,6 @@
      * {@link PersonImpl#getName()} and {@link Tenant#getName()}).
      */
     @Test
-    @Ignore("fix HotSpotResolvedObjectTypeImpl.findUniqueConcreteMethod")
     public void test() throws NoSuchMethodException {
         ResolvedJavaMethod ifaceMethod = getMetaAccess().lookupJavaMethod(Person.class.getDeclaredMethod("getName"));
 
@@ -64,9 +62,8 @@
         // this causes a VM crash as getLabelLength() directly invokes PersonImpl.getName().
         test("getLabelLength", tenant);
 
-        ResolvedJavaMethod expected = null;
         AssumptionResult<ResolvedJavaMethod> actual = getMetaAccess().lookupJavaType(AbstractPerson.class).findUniqueConcreteMethod(ifaceMethod);
-        Assert.assertEquals(expected, actual.getResult());
+        Assert.assertNull(String.valueOf(actual), actual);
 
     }
 
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/GraalCompilerTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/GraalCompilerTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1116,8 +1116,14 @@
         return graph;
     }
 
+    @SuppressWarnings("try")
     protected void applyFrontEnd(StructuredGraph graph) {
-        GraalCompiler.emitFrontEnd(getProviders(), getBackend(), graph, getDefaultGraphBuilderSuite(), getOptimisticOptimizations(), graph.getProfilingInfo(), createSuites(graph.getOptions()));
+        DebugContext debug = graph.getDebug();
+        try (DebugContext.Scope s = debug.scope("FrontEnd", graph)) {
+            GraalCompiler.emitFrontEnd(getProviders(), getBackend(), graph, getDefaultGraphBuilderSuite(), getOptimisticOptimizations(), graph.getProfilingInfo(), createSuites(graph.getOptions()));
+        } catch (Throwable e) {
+            throw debug.handle(e);
+        }
     }
 
     protected StructuredGraph lastCompiledGraph;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/SwitchFoldingTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,491 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+
+package org.graalvm.compiler.core.test;
+
+import org.graalvm.compiler.debug.DebugContext;
+import org.graalvm.compiler.nodes.StructuredGraph;
+import org.graalvm.compiler.phases.common.CanonicalizerPhase;
+import org.junit.Test;
+
+public class SwitchFoldingTest extends GraalCompilerTest {
+
+    private static final String REFERENCE_SNIPPET = "referenceSnippet";
+    private static final String REFERENCE_SNIPPET_2 = "reference2Snippet";
+    private static final String REFERENCE_SNIPPET_3 = "reference3Snippet";
+    private static final String REFERENCE_SNIPPET_4 = "reference4Snippet";
+    private static final String REFERENCE_SNIPPET_5 = "reference5Snippet";
+
+    public static int referenceSnippet(int a) {
+        switch (a) {
+            case 0:
+                return 10;
+            case 1:
+                return 5;
+            case 2:
+                return 3;
+            case 3:
+                return 11;
+            case 4:
+                return 14;
+            case 5:
+                return 2;
+            case 6:
+                return 1;
+            case 7:
+                return 0;
+            case 8:
+                return 7;
+            default:
+                return 6;
+        }
+    }
+
+    public static int reference2Snippet(int a) {
+        switch (a) {
+            case 0:
+                return 4;
+            case 1:
+            case 2:
+                return 1;
+            case 3:
+                return 6;
+            default:
+                return 7;
+        }
+    }
+
+    public static int reference3Snippet(int a) {
+        switch (a) {
+            case 0:
+                return 4;
+            case 1:
+            case 2:
+            case 4:
+                return 6;
+            case 6:
+            case 7:
+            default:
+                return 7;
+        }
+    }
+
+    public static int test1Snippet(int a) {
+        if (a == 0) {
+            return 10;
+        } else if (a == 1) {
+            return 5;
+        } else if (a == 2) {
+            return 3;
+        } else if (a == 3) {
+            return 11;
+        } else if (a == 4) {
+            return 14;
+        } else if (a == 5) {
+            return 2;
+        } else if (a == 6) {
+            return 1;
+        } else if (a == 7) {
+            return 0;
+        } else if (a == 8) {
+            return 7;
+        } else {
+            return 6;
+        }
+    }
+
+    @Test
+    public void test1() {
+        test1("test1Snippet");
+    }
+
+    public static int test2Snippet(int a) {
+        switch (a) {
+            case 0:
+                return 10;
+            case 1:
+                return 5;
+            case 2:
+                return 3;
+            case 3:
+                return 11;
+            case 4:
+                return 14;
+            default:
+                switch (a) {
+                    case 5:
+                        return 2;
+                    case 6:
+                        return 1;
+                    case 7:
+                        return 0;
+                    case 8:
+                        return 7;
+                    default:
+                        return 6;
+                }
+        }
+    }
+
+    @Test
+    public void test2() {
+        test1("test2Snippet");
+    }
+
+    public static int test3Snippet(int a) {
+        switch (a) {
+            case 0:
+                return 10;
+            default:
+                switch (a) {
+                    case 1:
+                        return 5;
+                    default:
+                        switch (a) {
+                            case 2:
+                                return 3;
+                            default:
+                                switch (a) {
+                                    case 3:
+                                        return 11;
+                                    default:
+                                        switch (a) {
+                                            case 4:
+                                                return 14;
+                                            default:
+                                                switch (a) {
+                                                    case 5:
+                                                        return 2;
+                                                    default:
+                                                        switch (a) {
+                                                            case 6:
+                                                                return 1;
+                                                            default:
+                                                                switch (a) {
+                                                                    case 7:
+                                                                        return 0;
+                                                                    default:
+                                                                        switch (a) {
+                                                                            case 8:
+                                                                                return 7;
+                                                                            default:
+                                                                                return 6;
+                                                                        }
+                                                                }
+                                                        }
+                                                }
+                                        }
+                                }
+                        }
+                }
+        }
+    }
+
+    @Test
+    public void test3() {
+        test1("test3Snippet");
+    }
+
+    public static int test4Snippet(int a) {
+        switch (a) {
+            case 0:
+                return 10;
+            case 1:
+                return 5;
+            case 2:
+                return 3;
+            case 3:
+                return 11;
+            case 4:
+                return 14;
+            case 5:
+                return 2;
+            case 6:
+                return 1;
+            default:
+                if (a == 7) {
+                    return 0;
+                } else if (a == 8) {
+                    return 7;
+                } else {
+                    return 6;
+                }
+        }
+    }
+
+    @Test
+    public void test4() {
+        test1("test4Snippet");
+    }
+
+    public static int test5Snippet(int a) {
+        switch (a) {
+            case 0:
+                return 10;
+            default:
+                switch (a) {
+                    case 1:
+                        return 5;
+                    default:
+                        switch (a) {
+                            case 2:
+                                return 3;
+                            default:
+                                switch (a) {
+                                    case 3:
+                                        return 11;
+                                    default:
+                                        switch (a) {
+                                            case 4:
+                                                return 14;
+                                            default:
+                                                switch (a) {
+                                                    case 5:
+                                                        return 2;
+                                                    default:
+                                                        switch (a) {
+                                                            case 6:
+                                                                return 1;
+                                                            default:
+                                                                if (a == 7) {
+                                                                    return 0;
+                                                                } else if (a == 8) {
+                                                                    return 7;
+                                                                } else {
+                                                                    return 6;
+                                                                }
+                                                        }
+                                                }
+                                        }
+                                }
+                        }
+                }
+        }
+    }
+
+    @Test
+    public void test5() {
+        test1("test5Snippet");
+    }
+
+    public static int test6Snippet(int a) {
+        if (a == 0) {
+            return 10;
+        } else {
+            switch (a) {
+                case 1:
+                    return 5;
+                default:
+                    if (a == 2) {
+                        return 3;
+                    } else if (a == 3) {
+                        return 11;
+                    } else {
+                        switch (a) {
+                            case 4:
+                                return 14;
+                            case 5:
+                                return 2;
+                            case 6:
+                                return 1;
+                            default:
+                                if (a == 7) {
+                                    return 0;
+                                } else if (a == 8) {
+                                    return 7;
+                                } else {
+                                    return 6;
+                                }
+                        }
+                    }
+
+            }
+        }
+    }
+
+    @Test
+    public void test6() {
+        test1("test6Snippet");
+    }
+
+    public static int test7Snippet(int a) {
+        if (a == 0) {
+            return 4;
+        } else {
+            switch (a) {
+                case 1:
+                case 2:
+                    return 1;
+                case 3:
+                    return 6;
+                default:
+                    return 7;
+            }
+        }
+    }
+
+    @Test
+    public void test7() {
+        test2("test7Snippet");
+    }
+
+    public static int test8Snippet(int a) {
+        switch (a) {
+            case 0:
+                return 4;
+            case 1:
+            case 2:
+            case 7:
+            default:
+                switch (a) {
+                    case 2:
+                    case 6:
+                    default:
+                        switch (a) {
+                            case 1:
+                            case 2:
+                            case 4:
+                                return 6;
+                            default:
+                                return 7;
+                        }
+                }
+        }
+    }
+
+    @Test
+    public void test8() {
+        test3("test8Snippet");
+    }
+
+    public static int reference4Snippet(int a) {
+        switch (a) {
+            case 0:
+                return 4;
+            case 1:
+            case 2:
+            case 4:
+                return 6;
+            case 6:
+                return 7;
+            case 7:
+                return 7;
+            default:
+                return 7;
+        }
+    }
+
+    public static int test9Snippet(int a) {
+        switch (a) {
+            case 0:
+                return 4;
+            case 1:
+            case 2:
+            case 4:
+                return 6;
+            case 6:
+            case 7:
+            default:
+                if (a == 6) {
+                    return 7;
+                } else if (a == 7) {
+                    return 7;
+                } else {
+                    return 7;
+                }
+        }
+    }
+
+    @Test
+    public void test9() {
+        test4("test9Snippet");
+    }
+
+    public static int reference5Snippet(int a) {
+        switch (a) {
+            case 0:
+                return 4;
+            case 1:
+                return 1;
+            case 2:
+                return 1;
+            case 3:
+                return 6;
+            default:
+                return 7;
+        }
+    }
+
+    public static int test10Snippet(int a) {
+        if (a == 0) {
+            return 4;
+        } else {
+            if (a == 1 || a == 2) {
+                return 1;
+            } else {
+                switch (a) {
+                    case 3:
+                        return 6;
+                    default:
+                        return 7;
+                }
+            }
+        }
+    }
+
+    @Test
+    public void test10() {
+        test5("test10Snippet");
+    }
+
+    private void test1(String snippet) {
+        test(snippet, REFERENCE_SNIPPET);
+    }
+
+    private void test2(String snippet) {
+        test(snippet, REFERENCE_SNIPPET_2);
+    }
+
+    private void test3(String snippet) {
+        test(snippet, REFERENCE_SNIPPET_3);
+    }
+
+    private void test4(String snippet) {
+        test(snippet, REFERENCE_SNIPPET_4);
+    }
+
+    private void test5(String snippet) {
+        test(snippet, REFERENCE_SNIPPET_5);
+    }
+
+    private void test(String snippet, String ref) {
+        StructuredGraph graph = parseEager(snippet, StructuredGraph.AllowAssumptions.YES);
+        DebugContext debug = graph.getDebug();
+        debug.dump(DebugContext.BASIC_LEVEL, graph, "Graph");
+        new CanonicalizerPhase().apply(graph, getProviders());
+        StructuredGraph referenceGraph = parseEager(ref, StructuredGraph.AllowAssumptions.YES);
+        assertEquals(referenceGraph, graph);
+    }
+}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/backend/BackendTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/backend/BackendTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -45,10 +45,10 @@
     }
 
     @SuppressWarnings("try")
-    protected LIRGenerationResult getLIRGenerationResult(final StructuredGraph graph) {
+    protected LIRGenerationResult getLIRGenerationResult(final StructuredGraph graph, OptimisticOptimizations optimizations) {
         DebugContext debug = graph.getDebug();
         try (DebugContext.Scope s = debug.scope("FrontEnd")) {
-            GraalCompiler.emitFrontEnd(getProviders(), getBackend(), graph, getDefaultGraphBuilderSuite(), OptimisticOptimizations.NONE, graph.getProfilingInfo(), createSuites(graph.getOptions()));
+            GraalCompiler.emitFrontEnd(getProviders(), getBackend(), graph, getDefaultGraphBuilderSuite(), optimizations, graph.getProfilingInfo(), createSuites(graph.getOptions()));
         } catch (Throwable e) {
             throw debug.handle(e);
         }
@@ -57,4 +57,7 @@
         return lirGen;
     }
 
+    protected LIRGenerationResult getLIRGenerationResult(final StructuredGraph graph) {
+        return getLIRGenerationResult(graph, OptimisticOptimizations.NONE);
+    }
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/CompilationWrapper.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/CompilationWrapper.java	Fri Jul 26 19:11:34 2019 -0400
@@ -302,10 +302,16 @@
         }
     }
 
+    /**
+     * Calls {@link System#exit(int)} in the runtime embedding the Graal compiler. This will be a
+     * different runtime than Graal's runtime in the case of libgraal.
+     */
+    protected abstract void exitHostVM(int status);
+
     private void maybeExitVM(ExceptionAction action) {
         if (action == ExitVM) {
             TTY.println("Exiting VM after retry compilation of " + this);
-            System.exit(-1);
+            exitHostVM(-1);
         }
     }
 
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/gen/DebugInfoBuilder.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/gen/DebugInfoBuilder.java	Fri Jul 26 19:11:34 2019 -0400
@@ -156,10 +156,6 @@
                 }
                 assert checkValues(vobjValue.getType(), values, slotKinds);
                 vobjValue.setValues(values, slotKinds);
-
-                if (vobjNode instanceof VirtualBoxingNode) {
-                    GraalServices.markVirtualObjectAsAutoBox(vobjValue);
-                }
             }
 
             virtualObjectsArray = new VirtualObject[virtualObjects.size()];
@@ -323,7 +319,8 @@
                     assert obj.entryCount() == 0 || state instanceof VirtualObjectState;
                     VirtualObject vobject = virtualObjects.get(obj);
                     if (vobject == null) {
-                        vobject = VirtualObject.get(obj.type(), virtualObjects.size());
+                        boolean isAutoBox = obj instanceof VirtualBoxingNode;
+                        vobject = GraalServices.createVirtualObject(obj.type(), virtualObjects.size(), isAutoBox);
                         virtualObjects.put(obj, vobject);
                         pendingVirtualObjects.add(obj);
                     }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/gen/NodeLIRBuilder.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/gen/NodeLIRBuilder.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/target/Backend.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/target/Backend.java	Fri Jul 26 19:11:34 2019 -0400
@@ -257,7 +257,6 @@
      * @throws BailoutException if the code installation failed
      */
     public InstalledCode createDefaultInstalledCode(DebugContext debug, ResolvedJavaMethod method, CompilationResult compilationResult) {
-        System.out.println(compilationResult.getSpeculationLog());
         return createInstalledCode(debug, method, compilationResult, null, true);
     }
 
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/Node.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/Node.java	Fri Jul 26 19:11:34 2019 -0400
@@ -818,22 +818,24 @@
 
     private void replaceAtMatchingUsages(Node other, Predicate<Node> filter, Node toBeDeleted) {
         if (filter == null) {
-            fail("filter cannot be null");
+            throw fail("filter cannot be null");
         }
         checkReplaceWith(other);
         int i = 0;
-        while (i < this.getUsageCount()) {
+        int usageCount = this.getUsageCount();
+        while (i < usageCount) {
             Node usage = this.getUsageAt(i);
             if (filter.test(usage)) {
                 replaceAtUsage(other, toBeDeleted, usage);
                 this.movUsageFromEndTo(i);
+                usageCount--;
             } else {
                 ++i;
             }
         }
     }
 
-    public Node getUsageAt(int index) {
+    private Node getUsageAt(int index) {
         if (index == 0) {
             return this.usage0;
         } else if (index == 1) {
@@ -848,14 +850,35 @@
         replaceAtMatchingUsages(other, usagePredicate, null);
     }
 
+    private void replaceAtUsagePos(Node other, Node usage, Position pos) {
+        pos.initialize(usage, other);
+        maybeNotifyInputChanged(usage);
+        if (other != null) {
+            other.addUsage(usage);
+        }
+    }
+
     public void replaceAtUsages(InputType type, Node other) {
         checkReplaceWith(other);
-        for (Node usage : usages().snapshot()) {
+        int i = 0;
+        int usageCount = this.getUsageCount();
+        if (usageCount == 0) {
+            return;
+        }
+        usages: while (i < usageCount) {
+            Node usage = this.getUsageAt(i);
             for (Position pos : usage.inputPositions()) {
                 if (pos.getInputType() == type && pos.get(usage) == this) {
-                    pos.set(usage, other);
+                    replaceAtUsagePos(other, usage, pos);
+                    this.movUsageFromEndTo(i);
+                    usageCount--;
+                    continue usages;
                 }
             }
+            i++;
+        }
+        if (hasNoUsages()) {
+            maybeNotifyZeroUsages(this);
         }
     }
 
@@ -913,6 +936,14 @@
         }
     }
 
+    public void replaceFirstInput(Node oldInput, Node newInput, InputType type) {
+        for (Position pos : inputPositions()) {
+            if (pos.getInputType() == type && pos.get(this) == oldInput) {
+                pos.set(this, newInput);
+            }
+        }
+    }
+
     public void clearInputs() {
         assert assertFalse(isDeleted(), "cannot clear inputs of deleted node");
         getNodeClass().unregisterAtInputsAsUsage(this);
@@ -1059,6 +1090,8 @@
                 assertFalse(input.isDeleted(), "input was deleted %s", input);
                 assertTrue(input.isAlive(), "input is not alive yet, i.e., it was not yet added to the graph");
                 assertTrue(pos.getInputType() == InputType.Unchecked || input.isAllowedUsageType(pos.getInputType()), "invalid usage type %s %s", input, pos.getInputType());
+                Class<?> expectedType = pos.getType();
+                assertTrue(expectedType.isAssignableFrom(input.getClass()), "Invalid input type for %s: expected a %s but was a %s", pos, expectedType, input.getClass());
             }
         }
         return true;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/NodeClass.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/NodeClass.java	Fri Jul 26 19:11:34 2019 -0400
@@ -126,7 +126,7 @@
             field.setAccessible(true);
             return (NodeClass<T>) field.get(null);
         } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) {
-            throw new RuntimeException(e);
+            throw new RuntimeException("Could not load Graal NodeClass TYPE field for " + clazz, e);
         }
     }
 
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/NodeMap.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/NodeMap.java	Fri Jul 26 19:11:34 2019 -0400
@@ -127,6 +127,7 @@
     private boolean check(Node node) {
         assert node.graph() == graph : String.format("%s is not part of the graph", node);
         assert !isNew(node) : "this node was added to the graph after creating the node map : " + node;
+        assert node.isAlive() : "this node is not alive: " + node;
         return true;
     }
 
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/Position.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/Position.java	Fri Jul 26 19:11:34 2019 -0400
@@ -146,4 +146,12 @@
     public int getIndex() {
         return index;
     }
+
+    public Class<?> getType() {
+        if (index < edges.getDirectCount()) {
+            return edges.getType(index);
+        } else {
+            return Node.class;
+        }
+    }
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotBackend.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotBackend.java	Fri Jul 26 19:11:34 2019 -0400
@@ -49,6 +49,7 @@
 import org.graalvm.compiler.core.common.alloc.RegisterAllocationConfig;
 import org.graalvm.compiler.core.common.spi.ForeignCallLinkage;
 import org.graalvm.compiler.core.gen.LIRGenerationProvider;
+import org.graalvm.compiler.debug.DebugContext;
 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
 import org.graalvm.compiler.hotspot.HotSpotDataBuilder;
 import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider;
@@ -72,12 +73,16 @@
 import org.graalvm.compiler.lir.gen.LIRGeneratorTool;
 import org.graalvm.compiler.nodes.StructuredGraph;
 import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
+import org.graalvm.compiler.serviceprovider.GraalUnsafeAccess;
 
 import jdk.vm.ci.aarch64.AArch64Kind;
 import jdk.vm.ci.code.CallingConvention;
+import jdk.vm.ci.code.CompilationRequest;
+import jdk.vm.ci.code.InstalledCode;
 import jdk.vm.ci.code.Register;
 import jdk.vm.ci.code.RegisterConfig;
 import jdk.vm.ci.code.StackSlot;
+import jdk.vm.ci.code.site.Mark;
 import jdk.vm.ci.hotspot.HotSpotCallingConventionType;
 import jdk.vm.ci.hotspot.HotSpotSentinelConstant;
 import jdk.vm.ci.hotspot.aarch64.AArch64HotSpotRegisterConfig;
@@ -85,6 +90,8 @@
 import jdk.vm.ci.meta.JavaType;
 import jdk.vm.ci.meta.ResolvedJavaMethod;
 
+import sun.misc.Unsafe;
+
 /**
  * HotSpot AArch64 specific backend.
  */
@@ -126,6 +133,46 @@
         }
     }
 
+    @Override
+    public InstalledCode createInstalledCode(DebugContext debug,
+                    ResolvedJavaMethod method,
+                    CompilationRequest compilationRequest,
+                    CompilationResult compilationResult,
+                    InstalledCode predefinedInstalledCode,
+                    boolean isDefault,
+                    Object[] context) {
+        boolean isStub = (method == null);
+        boolean isAOT = compilationResult.isImmutablePIC();
+        if (!isStub && !isAOT) {
+            // Non-stub compilation results are installed into HotSpot as nmethods. As AArch64 has
+            // a constraint that the instruction at nmethod verified entry point should be a nop or
+            // jump, AArch64HotSpotBackend always generate a nop placeholder before the code body
+            // for non-AOT compilations. See AArch64HotSpotBackend.emitInvalidatePlaceholder(). This
+            // assert checks if the nop placeholder is generated at all required places, including
+            // in manually assembled code in CodeGenTest cases.
+            assert hasInvalidatePlaceholder(compilationResult);
+        }
+        return super.createInstalledCode(debug, method, compilationRequest, compilationResult, predefinedInstalledCode, isDefault, context);
+    }
+
+    private boolean hasInvalidatePlaceholder(CompilationResult compilationResult) {
+        byte[] targetCode = compilationResult.getTargetCode();
+        int verifiedEntryOffset = 0;
+        for (Mark mark : compilationResult.getMarks()) {
+            Object markId = mark.id;
+            if (markId instanceof Integer && (int) markId == config.MARKID_VERIFIED_ENTRY) {
+                // The nmethod verified entry is located at some pc offset.
+                verifiedEntryOffset = mark.pcOffset;
+                break;
+            }
+        }
+        Unsafe unsafe = GraalUnsafeAccess.getUnsafe();
+        int instruction = unsafe.getIntVolatile(targetCode, unsafe.arrayBaseOffset(byte[].class) + verifiedEntryOffset);
+        AArch64MacroAssembler masm = new AArch64MacroAssembler(getTarget());
+        masm.nop();
+        return instruction == masm.getInt(0);
+    }
+
     private class HotSpotFrameContext implements FrameContext {
         final boolean isStub;
 
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotBackendFactory.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotBackendFactory.java	Fri Jul 26 19:11:34 2019 -0400
@@ -29,6 +29,7 @@
 import static jdk.vm.ci.common.InitTimer.timer;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import org.graalvm.compiler.bytecode.BytecodeProvider;
@@ -193,7 +194,7 @@
 
     protected HotSpotSuitesProvider createSuites(GraalHotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, CompilerConfiguration compilerConfiguration, Plugins plugins,
                     @SuppressWarnings("unused") Replacements replacements) {
-        AArch64SuitesCreator suitesCreator = new AArch64SuitesCreator(compilerConfiguration, plugins, SchedulePhase.class);
+        AArch64SuitesCreator suitesCreator = new AArch64SuitesCreator(compilerConfiguration, plugins, Arrays.asList(SchedulePhase.class));
         Phase addressLoweringPhase = new AddressLoweringByUsePhase(new AArch64AddressLoweringByUse(new AArch64LIRKindTool()));
         return new AddressLoweringHotSpotSuitesProvider(suitesCreator, config, runtime, addressLoweringPhase);
     }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotLoweringProvider.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotLoweringProvider.java	Fri Jul 26 19:11:34 2019 -0400
@@ -25,6 +25,7 @@
 
 package org.graalvm.compiler.hotspot.aarch64;
 
+import org.graalvm.compiler.core.aarch64.AArch64LoweringProviderMixin;
 import org.graalvm.compiler.core.common.spi.ForeignCallsProvider;
 import org.graalvm.compiler.debug.DebugHandlersFactory;
 import org.graalvm.compiler.graph.Node;
@@ -45,7 +46,7 @@
 import jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider;
 import jdk.vm.ci.meta.MetaAccessProvider;
 
-public class AArch64HotSpotLoweringProvider extends DefaultHotSpotLoweringProvider {
+public class AArch64HotSpotLoweringProvider extends DefaultHotSpotLoweringProvider implements AArch64LoweringProviderMixin {
 
     private AArch64IntegerArithmeticSnippets integerArithmeticSnippets;
     private AArch64FloatArithmeticSnippets floatArithmeticSnippets;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotLoweringProvider.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotLoweringProvider.java	Fri Jul 26 19:11:34 2019 -0400
@@ -27,6 +27,7 @@
 import static org.graalvm.compiler.hotspot.HotSpotBackend.Options.GraalArithmeticStubs;
 
 import org.graalvm.compiler.api.replacements.Snippet;
+import org.graalvm.compiler.core.amd64.AMD64LoweringProviderMixin;
 import org.graalvm.compiler.core.common.spi.ForeignCallsProvider;
 import org.graalvm.compiler.debug.DebugHandlersFactory;
 import org.graalvm.compiler.graph.Node;
@@ -53,7 +54,7 @@
 import jdk.vm.ci.meta.MetaAccessProvider;
 import jdk.vm.ci.meta.ResolvedJavaMethod;
 
-public class AMD64HotSpotLoweringProvider extends DefaultHotSpotLoweringProvider {
+public class AMD64HotSpotLoweringProvider extends DefaultHotSpotLoweringProvider implements AMD64LoweringProviderMixin {
 
     private AMD64ConvertSnippets.Templates convertSnippets;
     private ProbabilisticProfileSnippets.Templates profileSnippets;
@@ -135,14 +136,4 @@
         ForeignCallNode call = graph.add(new ForeignCallNode(foreignCalls, dispatchNode.getStubCallDescriptor(), dispatchNode.getStubCallArgs()));
         graph.replaceFixed(dispatchNode, call);
     }
-
-    @Override
-    public Integer smallestCompareWidth() {
-        return 8;
-    }
-
-    @Override
-    public boolean supportBulkZeroing() {
-        return true;
-    }
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotStrategySwitchOp.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotStrategySwitchOp.java	Fri Jul 26 19:11:34 2019 -0400
@@ -34,7 +34,7 @@
 
 import jdk.vm.ci.code.Register;
 import jdk.vm.ci.code.ValueUtil;
-import jdk.vm.ci.hotspot.HotSpotMetaspaceConstant;
+import jdk.vm.ci.hotspot.HotSpotConstant;
 import jdk.vm.ci.meta.Constant;
 import jdk.vm.ci.meta.Value;
 
@@ -58,8 +58,8 @@
 
         @Override
         protected void emitComparison(Constant c) {
-            if (c instanceof HotSpotMetaspaceConstant) {
-                HotSpotMetaspaceConstant meta = (HotSpotMetaspaceConstant) c;
+            if (c instanceof HotSpotConstant) {
+                HotSpotConstant meta = (HotSpotConstant) c;
                 if (meta.isCompressed()) {
                     crb.recordInlineDataInCode(meta);
                     masm.cmpl(keyRegister, 0xDEADDEAD);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.lir.test/src/org/graalvm/compiler/hotspot/lir/test/BenchmarkCounterOverflowTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.lir.test/src/org/graalvm/compiler/hotspot/lir/test/BenchmarkCounterOverflowTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -28,6 +28,7 @@
 import static org.graalvm.compiler.test.SubprocessUtil.withoutDebuggerArguments;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -100,7 +101,7 @@
     }
 
     @Test
-    public void spawnSubprocess() throws Throwable {
+    public void spawnSubprocess() throws IOException, InterruptedException {
         Assume.assumeFalse("subprocess already spawned -> skip", Boolean.getBoolean(SUBPROCESS_PROPERTY));
         List<String> vmArgs = withoutDebuggerArguments(getVMCommandLine());
         vmArgs.add("-XX:JVMCICounterSize=1");
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.lir.test/src/org/graalvm/compiler/hotspot/lir/test/ExceedMaxOopMapStackOffset.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.lir.test/src/org/graalvm/compiler/hotspot/lir/test/ExceedMaxOopMapStackOffset.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -120,7 +120,7 @@
     }
 
     @Test
-    public void runStackObjects() throws Throwable {
+    public void runStackObjects() {
         int max = ((HotSpotBackend) getBackend()).getRuntime().getVMConfig().maxOopMapStackOffset;
         if (max == Integer.MAX_VALUE) {
             max = 16 * 1024 - 64;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.lir.test/src/org/graalvm/compiler/hotspot/lir/test/MitigateExceedingMaxOopMapStackOffsetTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.lir.test/src/org/graalvm/compiler/hotspot/lir/test/MitigateExceedingMaxOopMapStackOffsetTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -153,7 +153,7 @@
     }
 
     @Test
-    public void runStackObjects() throws Throwable {
+    public void runStackObjects() {
         int max = ((HotSpotBackend) getBackend()).getRuntime().getVMConfig().maxOopMapStackOffset;
         Assume.assumeFalse("no limit on oop map size", max == Integer.MAX_VALUE);
         numPrimitiveSlots = (max / 8) * 2;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.sparc/src/org/graalvm/compiler/hotspot/sparc/SPARCHotSpotLoweringProvider.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.sparc/src/org/graalvm/compiler/hotspot/sparc/SPARCHotSpotLoweringProvider.java	Fri Jul 26 19:11:34 2019 -0400
@@ -25,6 +25,7 @@
 package org.graalvm.compiler.hotspot.sparc;
 
 import org.graalvm.compiler.core.common.spi.ForeignCallsProvider;
+import org.graalvm.compiler.core.sparc.SparcLoweringProviderMixin;
 import org.graalvm.compiler.graph.Node;
 import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider;
 import org.graalvm.compiler.hotspot.meta.DefaultHotSpotLoweringProvider;
@@ -36,7 +37,7 @@
 import jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider;
 import jdk.vm.ci.meta.MetaAccessProvider;
 
-public class SPARCHotSpotLoweringProvider extends DefaultHotSpotLoweringProvider {
+public class SPARCHotSpotLoweringProvider extends DefaultHotSpotLoweringProvider implements SparcLoweringProviderMixin {
 
     public SPARCHotSpotLoweringProvider(HotSpotGraalRuntimeProvider runtime, MetaAccessProvider metaAccess, ForeignCallsProvider foreignCalls, HotSpotRegistersProvider registers,
                     HotSpotConstantReflectionProvider constantReflection, TargetDescription target) {
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/BoxDeoptimizationTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/BoxDeoptimizationTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -24,85 +24,97 @@
 
 package org.graalvm.compiler.hotspot.test;
 
+import static org.graalvm.compiler.serviceprovider.JavaVersionUtil.JAVA_SPEC;
+
 import org.graalvm.compiler.api.directives.GraalDirectives;
 import org.graalvm.compiler.core.test.GraalCompilerTest;
-import org.graalvm.compiler.serviceprovider.JavaVersionUtil;
 import org.junit.Assert;
 import org.junit.Assume;
 import org.junit.Test;
 
 public class BoxDeoptimizationTest extends GraalCompilerTest {
-    private static boolean isJDK13OrLater = JavaVersionUtil.JAVA_SPEC >= 13;
 
-    public static void testInteger() {
-        Object[] values = {42, new Exception()};
+    private static void checkJDK() {
+        Assume.assumeTrue(JAVA_SPEC == 8 || JAVA_SPEC >= 13);
+    }
+
+    public static void testIntegerSnippet() {
+        Object[] values = {42, -42, new Exception()};
         GraalDirectives.deoptimize();
         Assert.assertSame(values[0], Integer.valueOf(42));
+        Assert.assertSame(values[1], Integer.valueOf(-42));
     }
 
     @Test
-    public void test1() {
-        Assume.assumeTrue(isJDK13OrLater);
-        test("testInteger");
+    public void testInteger() {
+        checkJDK();
+        test("testIntegerSnippet");
     }
 
-    public static void testLong() {
-        Object[] values = {42L, new Exception()};
+    public static void testLongSnippet() {
+        long highBitsOnly = 2L << 40;
+        Object[] values = {42L, -42L, highBitsOnly, new Exception()};
         GraalDirectives.deoptimize();
         Assert.assertSame(values[0], Long.valueOf(42));
+        Assert.assertSame(values[1], Long.valueOf(-42));
+        Assert.assertNotSame(values[2], highBitsOnly);
     }
 
     @Test
-    public void test2() {
-        Assume.assumeTrue(isJDK13OrLater);
-        test("testLong");
+    public void testLong() {
+        checkJDK();
+        test("testLongSnippet");
     }
 
-    public static void testChar() {
-        Object[] values = {'a', new Exception()};
+    public static void testCharSnippet() {
+        Object[] values = {'a', 'Z', new Exception()};
         GraalDirectives.deoptimize();
         Assert.assertSame(values[0], Character.valueOf('a'));
+        Assert.assertSame(values[1], Character.valueOf('Z'));
     }
 
     @Test
-    public void test3() {
-        Assume.assumeTrue(isJDK13OrLater);
-        test("testChar");
+    public void testChar() {
+        checkJDK();
+        test("testCharSnippet");
     }
 
-    public static void testShort() {
-        Object[] values = {(short) 42, new Exception()};
+    public static void testShortSnippet() {
+        Object[] values = {(short) 42, (short) -42, new Exception()};
         GraalDirectives.deoptimize();
         Assert.assertSame(values[0], Short.valueOf((short) 42));
+        Assert.assertSame(values[1], Short.valueOf((short) -42));
     }
 
     @Test
-    public void test4() {
-        Assume.assumeTrue(isJDK13OrLater);
-        test("testShort");
+    public void testShort() {
+        checkJDK();
+        test("testShortSnippet");
     }
 
-    public static void testByte() {
-        Object[] values = {(byte) 42, new Exception()};
+    public static void testByteSnippet() {
+        Object[] values = {(byte) 42, (byte) -42, new Exception()};
         GraalDirectives.deoptimize();
         Assert.assertSame(values[0], Byte.valueOf((byte) 42));
+        Assert.assertSame(values[1], Byte.valueOf((byte) -42));
     }
 
     @Test
-    public void test5() {
-        Assume.assumeTrue(isJDK13OrLater);
-        test("testByte");
+    public void testByte() {
+        checkJDK();
+        test("testByteSnippet");
     }
 
-    public static void testBoolean() {
-        Object[] values = {true, new Exception()};
+    public static void testBooleanSnippet() {
+        Object[] values = {true, false, new Exception()};
         GraalDirectives.deoptimize();
         Assert.assertSame(values[0], Boolean.valueOf(true));
+        Assert.assertSame(values[1], Boolean.valueOf(false));
     }
 
     @Test
-    public void test6() {
-        Assume.assumeTrue(isJDK13OrLater);
-        test("testBoolean");
+    public void testBoolean() {
+        checkJDK();
+        test("testBooleanSnippet");
     }
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CheckGraalIntrinsics.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CheckGraalIntrinsics.java	Fri Jul 26 19:11:34 2019 -0400
@@ -24,6 +24,9 @@
 
 package org.graalvm.compiler.hotspot.test;
 
+import static org.graalvm.compiler.hotspot.meta.HotSpotGraphBuilderPlugins.aesDecryptName;
+import static org.graalvm.compiler.hotspot.meta.HotSpotGraphBuilderPlugins.aesEncryptName;
+
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -41,6 +44,7 @@
 import org.graalvm.compiler.api.test.Graal;
 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
 import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider;
+import org.graalvm.compiler.hotspot.meta.HotSpotGraphBuilderPlugins;
 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin;
@@ -501,21 +505,17 @@
                             "java/util/zip/CRC32C.updateDirectByteBuffer(IJII)I");
         }
 
+        boolean implNames = HotSpotGraphBuilderPlugins.cbcUsesImplNames(config);
+        String cbcEncryptName = implNames ? "implEncrypt" : "encrypt";
+        String cbcDecryptName = implNames ? "implDecrypt" : "decrypt";
+
         // AES intrinsics
         if (!config.useAESIntrinsics) {
-            if (isJDK9OrHigher()) {
-                add(ignore,
-                                "com/sun/crypto/provider/AESCrypt.implDecryptBlock([BI[BI)V",
-                                "com/sun/crypto/provider/AESCrypt.implEncryptBlock([BI[BI)V",
-                                "com/sun/crypto/provider/CipherBlockChaining.implDecrypt([BII[BI)I",
-                                "com/sun/crypto/provider/CipherBlockChaining.implEncrypt([BII[BI)I");
-            } else {
-                add(ignore,
-                                "com/sun/crypto/provider/AESCrypt.decryptBlock([BI[BI)V",
-                                "com/sun/crypto/provider/AESCrypt.encryptBlock([BI[BI)V",
-                                "com/sun/crypto/provider/CipherBlockChaining.decrypt([BII[BI)I",
-                                "com/sun/crypto/provider/CipherBlockChaining.encrypt([BII[BI)I");
-            }
+            add(ignore,
+                            "com/sun/crypto/provider/AESCrypt." + aesDecryptName + "([BI[BI)V",
+                            "com/sun/crypto/provider/AESCrypt." + aesEncryptName + "([BI[BI)V",
+                            "com/sun/crypto/provider/CipherBlockChaining." + cbcDecryptName + "([BII[BI)I",
+                            "com/sun/crypto/provider/CipherBlockChaining." + cbcEncryptName + "([BII[BI)I");
         }
 
         // BigInteger intrinsics
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CompilationWrapperTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CompilationWrapperTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -29,6 +29,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -209,10 +210,9 @@
             System.out.println(proc);
         }
 
-        List<Probe> probes = new ArrayList<>(initialProbes);
-        Probe diagnosticProbe = null;
-        if (!extraVmArgs.contains("-Dgraal.TruffleCompilationExceptionsAreFatal=true")) {
-            diagnosticProbe = new Probe("Graal diagnostic output saved in ", 1);
+        try {
+            List<Probe> probes = new ArrayList<>(initialProbes);
+            Probe diagnosticProbe = new Probe("Graal diagnostic output saved in ", 1);
             probes.add(diagnosticProbe);
             probes.add(new Probe("Forced crash after compiling", Integer.MAX_VALUE) {
                 @Override
@@ -220,22 +220,20 @@
                     return actualOccurrences > 0 ? null : "expected at least 1 occurrence";
                 }
             });
-        }
 
-        for (String line : proc.output) {
-            for (Probe probe : probes) {
-                if (probe.matches(line)) {
-                    break;
+            for (String line : proc.output) {
+                for (Probe probe : probes) {
+                    if (probe.matches(line)) {
+                        break;
+                    }
                 }
             }
-        }
-        for (Probe probe : probes) {
-            String error = probe.test();
-            if (error != null) {
-                Assert.fail(String.format("Did not find expected occurences of '%s' in output of command: %s%n%s", probe.substring, error, proc));
+            for (Probe probe : probes) {
+                String error = probe.test();
+                if (error != null) {
+                    Assert.fail(String.format("Did not find expected occurences of '%s' in output of command: %s%n%s", probe.substring, error, proc));
+                }
             }
-        }
-        if (diagnosticProbe != null) {
             String line = diagnosticProbe.lastMatchingLine;
             int substringStart = line.indexOf(diagnosticProbe.substring);
             int substringLength = diagnosticProbe.substring.length();
@@ -263,8 +261,10 @@
                 }
             } finally {
                 zip.delete();
-                dumpPath.delete();
             }
+        } finally {
+            Path directory = dumpPath.toPath();
+            removeDirectory(directory);
         }
     }
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CompressedOopTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CompressedOopTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -313,8 +313,8 @@
         Assert.assertTrue(buffer.length() == 28);
         String a = new String("TestTestTestTestTestTestTest");
         installedBenchmarkCode.executeVarargs(buffer, a.toCharArray());
-        Assert.assertTrue(buffer.length() == 56);
-        Assert.assertTrue(buffer.toString().equals("TestTestTestTestTestTestTestTestTestTestTestTestTestTest"));
+        Assert.assertEquals(56, buffer.length());
+        Assert.assertEquals("TestTestTestTestTestTestTestTestTestTestTestTestTestTest", buffer.toString());
     }
 
     public static void stringBuilderTest(Object c1, Object c2) {
@@ -339,8 +339,8 @@
         for (int i = 0; i < add.length; i++) {
             buffer.append(add[i]);
         }
-        Assert.assertTrue(buffer.length() == 56);
-        Assert.assertTrue(buffer.toString().equals("TestTestTestTestTestTestTestTestTestTestTestTestTestTest"));
+        Assert.assertEquals(56, buffer.length());
+        Assert.assertEquals("TestTestTestTestTestTestTestTestTestTestTestTestTestTest", buffer.toString());
     }
 
     @Test
@@ -356,8 +356,8 @@
         char[] dst = new char[buffer.length() * 2];
         System.arraycopy(buffer.toString().toCharArray(), 0, dst, 0, buffer.length());
         System.arraycopy(a.toCharArray(), 0, dst, buffer.length(), buffer.length());
-        Assert.assertTrue(dst.length == 56);
-        Assert.assertTrue(new String(dst).equals("TestTestTestTestTestTestTestTestTestTestTestTestTestTest"));
+        Assert.assertEquals(56, dst.length);
+        Assert.assertEquals("TestTestTestTestTestTestTestTestTestTestTestTestTestTest", new String(dst));
     }
 
     @Test
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/HotSpotCryptoSubstitutionTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/HotSpotCryptoSubstitutionTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -35,12 +35,11 @@
 import javax.crypto.KeyGenerator;
 import javax.crypto.SecretKey;
 
-import org.junit.Assert;
-import org.junit.Test;
-
 import org.graalvm.compiler.code.CompilationResult;
 import org.graalvm.compiler.debug.DebugContext;
 import org.graalvm.compiler.hotspot.meta.HotSpotGraphBuilderPlugins;
+import org.junit.Assert;
+import org.junit.Test;
 
 import jdk.vm.ci.code.InstalledCode;
 import jdk.vm.ci.meta.ResolvedJavaMethod;
@@ -91,7 +90,10 @@
 
     @Test
     public void testCipherBlockChainingIntrinsics() throws Exception {
-        if (compileAndInstall("com.sun.crypto.provider.CipherBlockChaining", HotSpotGraphBuilderPlugins.cbcEncryptName, HotSpotGraphBuilderPlugins.cbcDecryptName)) {
+        boolean implNames = HotSpotGraphBuilderPlugins.cbcUsesImplNames(runtime().getVMConfig());
+        String cbcEncryptName = implNames ? "implEncrypt" : "encrypt";
+        String cbcDecryptName = implNames ? "implDecrypt" : "decrypt";
+        if (compileAndInstall("com.sun.crypto.provider.CipherBlockChaining", cbcEncryptName, cbcDecryptName)) {
             ByteArrayOutputStream actual = new ByteArrayOutputStream();
             actual.write(runEncryptDecrypt(aesKey, "AES/CBC/NoPadding"));
             actual.write(runEncryptDecrypt(aesKey, "AES/CBC/PKCS5Padding"));
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/HotSpotGraalManagementTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/HotSpotGraalManagementTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -378,12 +378,15 @@
         MBeanAttributeInfo dumpPath = findAttributeInfo("DumpPath", info);
         MBeanAttributeInfo printGraphFile = findAttributeInfo("PrintGraphFile", info);
         MBeanAttributeInfo showDumpFiles = findAttributeInfo("ShowDumpFiles", info);
+        MBeanAttributeInfo methodFilter = findAttributeInfo("MethodFilter", info);
         Object originalDumpPath = server.getAttribute(mbeanName, dumpPath.getName());
         Object originalPrintGraphFile = server.getAttribute(mbeanName, printGraphFile.getName());
         Object originalShowDumpFiles = server.getAttribute(mbeanName, showDumpFiles.getName());
+        Object originalMethodFilter = server.getAttribute(mbeanName, methodFilter.getName());
         final File tmpDir = new File(HotSpotGraalManagementTest.class.getSimpleName() + "_" + System.currentTimeMillis()).getAbsoluteFile();
 
         server.setAttribute(mbeanName, new Attribute(dumpPath.getName(), quoted(tmpDir)));
+        server.setAttribute(mbeanName, new Attribute(methodFilter.getName(), ""));
         // Force output to a file even if there's a running IGV instance available.
         server.setAttribute(mbeanName, new Attribute(printGraphFile.getName(), true));
         server.setAttribute(mbeanName, new Attribute(showDumpFiles.getName(), false));
@@ -392,6 +395,7 @@
             server.invoke(mbeanName, "dumpMethod", params, null);
             boolean found = false;
             String expectedIgvDumpSuffix = "[Arrays.asList(Object[])List].bgv";
+            Assert.assertTrue(tmpDir.toString() + " was not created or is not a directory", tmpDir.isDirectory());
             List<String> dumpPathEntries = Arrays.asList(tmpDir.list());
             for (String entry : dumpPathEntries) {
                 if (entry.endsWith(expectedIgvDumpSuffix)) {
@@ -403,8 +407,11 @@
                                 dumpPathEntries.stream().collect(Collectors.joining(System.lineSeparator()))));
             }
         } finally {
-            deleteDirectory(tmpDir.toPath());
+            if (tmpDir.isDirectory()) {
+                deleteDirectory(tmpDir.toPath());
+            }
             server.setAttribute(mbeanName, new Attribute(dumpPath.getName(), originalDumpPath));
+            server.setAttribute(mbeanName, new Attribute(methodFilter.getName(), originalMethodFilter));
             server.setAttribute(mbeanName, new Attribute(printGraphFile.getName(), originalPrintGraphFile));
             server.setAttribute(mbeanName, new Attribute(showDumpFiles.getName(), originalShowDumpFiles));
         }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/JVMCIVersionCheckTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/JVMCIVersionCheckTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -27,9 +27,13 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Random;
 
 import org.graalvm.compiler.core.test.GraalCompilerTest;
 import org.graalvm.compiler.hotspot.JVMCIVersionCheck;
+import org.graalvm.compiler.hotspot.JVMCIVersionCheck.Version;
+import org.graalvm.compiler.hotspot.JVMCIVersionCheck.Version2;
+import org.graalvm.compiler.hotspot.JVMCIVersionCheck.Version3;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -43,24 +47,37 @@
             props.put(name, sprops.getProperty(name));
         }
 
-        for (int i = 0; i < 100; i++) {
+        long seed = Long.getLong("test.seed", System.nanoTime());
+        Random random = new Random(seed);
+
+        for (int i = 0; i < 50; i++) {
             int minMajor = i;
-            int minMinor = 100 - i;
-            for (int j = 0; j < 100; j++) {
+            int minMinor = 50 - i;
+            for (int j = 0; j < 50; j++) {
                 int major = j;
-                int minor = 100 - j;
+                int minor = 50 - j;
+
+                for (int k = 0; k < 30; k++) {
+                    int minBuild = random.nextInt(100);
+                    int build = random.nextInt(100);
 
-                boolean ok = (major > minMajor) || (major == minMajor && minor >= minMinor);
-                for (String sep : new String[]{".", "-b"}) {
-                    String javaVmVersion = String.format("prefix-jvmci-%03d%s%03d-suffix", major, sep, minor);
-                    if (ok) {
-                        JVMCIVersionCheck.check(props, minMajor, minMinor, "1.8", javaVmVersion, false);
-                    } else {
-                        try {
-                            JVMCIVersionCheck.check(props, minMajor, minMinor, "1.8", javaVmVersion, false);
-                            Assert.fail("expected to fail checking " + javaVmVersion + " against " + minMajor + "." + minMinor);
-                        } catch (InternalError e) {
-                            // pass
+                    for (Version version : new Version[]{new Version2(major, minor), new Version3(major, minor, build)}) {
+                        for (Version minVersion : new Version[]{new Version2(minMajor, minMinor), new Version3(minMajor, minMinor, minBuild)}) {
+                            String javaVmVersion = String.format("prefix-jvmci-%s-suffix", version);
+                            if (!version.isLessThan(minVersion)) {
+                                try {
+                                    JVMCIVersionCheck.check(props, minVersion, "1.8", javaVmVersion, false);
+                                } catch (InternalError e) {
+                                    throw new AssertionError("Failed " + JVMCIVersionCheckTest.class.getSimpleName() + " with -Dtest.seed=" + seed, e);
+                                }
+                            } else {
+                                try {
+                                    JVMCIVersionCheck.check(props, minVersion, "1.8", javaVmVersion, false);
+                                    Assert.fail("expected to fail checking " + javaVmVersion + " against " + minVersion + " (-Dtest.seed=" + seed + ")");
+                                } catch (InternalError e) {
+                                    // pass
+                                }
+                            }
                         }
                     }
                 }
@@ -72,8 +89,9 @@
             for (String version : new String[]{"0" + sep + Long.MAX_VALUE, Long.MAX_VALUE + sep + 0}) {
                 String javaVmVersion = String.format("prefix-jvmci-%s-suffix", version);
                 try {
-                    JVMCIVersionCheck.check(props, 0, 59, "1.8", javaVmVersion, false);
-                    Assert.fail("expected to fail checking " + javaVmVersion + " against 0.59");
+                    Version2 minVersion = new Version2(0, 59);
+                    JVMCIVersionCheck.check(props, minVersion, "1.8", javaVmVersion, false);
+                    Assert.fail("expected to fail checking " + javaVmVersion + " against " + minVersion);
                 } catch (InternalError e) {
                     // pass
                 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/NodeCostDumpUtil.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/NodeCostDumpUtil.java	Fri Jul 26 19:11:34 2019 -0400
@@ -234,4 +234,3 @@
     }
 
 }
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompilationContext.java	Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+package org.graalvm.compiler.hotspot;
+
+import org.graalvm.compiler.debug.GraalError;
+
+import jdk.vm.ci.meta.JavaConstant;
+
+/**
+ * A context for scoping the lifetime of foreign objects.
+ *
+ * The need for this mechanism is best explained with an example. When folding a GETFIELD bytecode
+ * denoting a {@code final static} non-primitive field, libgraal can create a {@link JavaConstant}
+ * wrapping a handle to the field's value in the HotSpot heap. This handle must be released before
+ * HotSpot can reclaim the object it references. Performing a compilation in the scope of a
+ * {@linkplain HotSpotGraalServices#openLocalCompilationContext local} context ensures the handle is
+ * released once the compilation completes, allowing the HotSpot GC to subsequently reclaim the
+ * HotSpot object. When libgraal creates data structures that outlive a single compilation and may
+ * contain foreign object references (e.g. snippet graphs), it must enter the
+ * {@linkplain HotSpotGraalServices#enterGlobalCompilationContext global} context. Foreign object
+ * handles created in the global context are only released once their {@link JavaConstant} wrappers
+ * are reclaimed by the libgraal GC.
+ *
+ * {@link CompilationContext}s have no impact on {@link JavaConstant}s that do not encapsulate a
+ * foreign object reference.
+ *
+ * The object returned by {@link HotSpotGraalServices#enterGlobalCompilationContext} or
+ * {@link HotSpotGraalServices#openLocalCompilationContext} should be used in a try-with-resources
+ * statement. Failure to close a context will almost certainly result in foreign objects being
+ * leaked.
+ */
+public class CompilationContext implements AutoCloseable {
+    private final AutoCloseable impl;
+
+    CompilationContext(AutoCloseable impl) {
+        this.impl = impl;
+    }
+
+    @Override
+    public void close() {
+        try {
+            impl.close();
+        } catch (Exception e) {
+            GraalError.shouldNotReachHere(e);
+        }
+    }
+}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompilationCounters.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompilationCounters.java	Fri Jul 26 19:11:34 2019 -0400
@@ -26,6 +26,7 @@
 
 import static org.graalvm.compiler.hotspot.HotSpotGraalCompiler.fmt;
 import static org.graalvm.compiler.hotspot.HotSpotGraalCompiler.str;
+
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Map;
@@ -35,9 +36,10 @@
 
 import org.graalvm.compiler.debug.TTY;
 import org.graalvm.compiler.options.Option;
+import org.graalvm.compiler.options.OptionKey;
 import org.graalvm.compiler.options.OptionType;
 import org.graalvm.compiler.options.OptionValues;
-import org.graalvm.compiler.options.OptionKey;
+
 import jdk.vm.ci.code.CompilationRequest;
 import jdk.vm.ci.meta.ResolvedJavaMethod;
 
@@ -85,7 +87,7 @@
                 }
             }
             TTY.flush();
-            System.exit(-1);
+            HotSpotGraalServices.exit(-1);
         }
     }
 
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompilationTask.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompilationTask.java	Fri Jul 26 19:11:34 2019 -0400
@@ -97,8 +97,13 @@
         }
 
         @Override
+        protected void exitHostVM(int status) {
+            HotSpotGraalServices.exit(status);
+        }
+
+        @Override
         public String toString() {
-            return getMethod().format("%H.%n(%p)");
+            return getMethod().format("%H.%n(%p) @ " + getEntryBCI());
         }
 
         @Override
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompilationWatchDog.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompilationWatchDog.java	Fri Jul 26 19:11:34 2019 -0400
@@ -238,7 +238,7 @@
                                             TTY.printf("======================= WATCH DOG THREAD =======================%n" +
                                                             "%s took %d identical stack traces, which indicates a stuck compilation (id=%d) of %s%n%sExiting VM%n", this,
                                                             numberOfIdenticalStackTraces, currentId, fmt(currentMethod), fmt(lastStackTrace));
-                                            System.exit(-1);
+                                            HotSpotGraalServices.exit(-1);
                                         }
                                     } else if (newStackTrace) {
                                         synchronized (CompilationWatchDog.class) {
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompilerConfigurationFactory.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompilerConfigurationFactory.java	Fri Jul 26 19:11:34 2019 -0400
@@ -200,7 +200,7 @@
                 for (CompilerConfigurationFactory candidate : getAllCandidates()) {
                     System.out.println("    " + candidate.name);
                 }
-                System.exit(0);
+                HotSpotGraalServices.exit(0);
             } else if (value != null) {
                 for (CompilerConfigurationFactory candidate : GraalServices.load(CompilerConfigurationFactory.class)) {
                     if (candidate.name.equals(value)) {
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalCompiler.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalCompiler.java	Fri Jul 26 19:11:34 2019 -0400
@@ -111,39 +111,41 @@
 
     @SuppressWarnings("try")
     CompilationRequestResult compileMethod(CompilationRequest request, boolean installAsDefault, OptionValues initialOptions) {
-        if (graalRuntime.isShutdown()) {
-            return HotSpotCompilationRequestResult.failure(String.format("Shutdown entered"), true);
-        }
+        try (CompilationContext scope = HotSpotGraalServices.openLocalCompilationContext(request)) {
+            if (graalRuntime.isShutdown()) {
+                return HotSpotCompilationRequestResult.failure(String.format("Shutdown entered"), true);
+            }
 
-        ResolvedJavaMethod method = request.getMethod();
+            ResolvedJavaMethod method = request.getMethod();
 
-        if (graalRuntime.isBootstrapping()) {
-            if (DebugOptions.BootstrapInitializeOnly.getValue(initialOptions)) {
-                return HotSpotCompilationRequestResult.failure(String.format("Skip compilation because %s is enabled", DebugOptions.BootstrapInitializeOnly.getName()), true);
-            }
-            if (bootstrapWatchDog != null) {
-                if (bootstrapWatchDog.hitCriticalCompilationRateOrTimeout()) {
-                    // Drain the compilation queue to expedite completion of the bootstrap
-                    return HotSpotCompilationRequestResult.failure("hit critical bootstrap compilation rate or timeout", true);
+            if (graalRuntime.isBootstrapping()) {
+                if (DebugOptions.BootstrapInitializeOnly.getValue(initialOptions)) {
+                    return HotSpotCompilationRequestResult.failure(String.format("Skip compilation because %s is enabled", DebugOptions.BootstrapInitializeOnly.getName()), true);
+                }
+                if (bootstrapWatchDog != null) {
+                    if (bootstrapWatchDog.hitCriticalCompilationRateOrTimeout()) {
+                        // Drain the compilation queue to expedite completion of the bootstrap
+                        return HotSpotCompilationRequestResult.failure("hit critical bootstrap compilation rate or timeout", true);
+                    }
                 }
             }
-        }
-        HotSpotCompilationRequest hsRequest = (HotSpotCompilationRequest) request;
-        CompilationTask task = new CompilationTask(jvmciRuntime, this, hsRequest, true, shouldRetainLocalVariables(hsRequest.getJvmciEnv()), installAsDefault);
-        OptionValues options = task.filterOptions(initialOptions);
-        try (CompilationWatchDog w1 = CompilationWatchDog.watch(method, hsRequest.getId(), options);
-                        BootstrapWatchDog.Watch w2 = bootstrapWatchDog == null ? null : bootstrapWatchDog.watch(request);
-                        CompilationAlarm alarm = CompilationAlarm.trackCompilationPeriod(options);) {
-            if (compilationCounters != null) {
-                compilationCounters.countCompilation(method);
+            HotSpotCompilationRequest hsRequest = (HotSpotCompilationRequest) request;
+            CompilationTask task = new CompilationTask(jvmciRuntime, this, hsRequest, true, shouldRetainLocalVariables(hsRequest.getJvmciEnv()), installAsDefault);
+            OptionValues options = task.filterOptions(initialOptions);
+            try (CompilationWatchDog w1 = CompilationWatchDog.watch(method, hsRequest.getId(), options);
+                            BootstrapWatchDog.Watch w2 = bootstrapWatchDog == null ? null : bootstrapWatchDog.watch(request);
+                            CompilationAlarm alarm = CompilationAlarm.trackCompilationPeriod(options);) {
+                if (compilationCounters != null) {
+                    compilationCounters.countCompilation(method);
+                }
+                CompilationRequestResult r = null;
+                try (DebugContext debug = graalRuntime.openDebugContext(options, task.getCompilationIdentifier(), method, getDebugHandlersFactories(), DebugContext.DEFAULT_LOG_STREAM);
+                                Activation a = debug.activate()) {
+                    r = task.runCompilation(debug);
+                }
+                assert r != null;
+                return r;
             }
-            CompilationRequestResult r = null;
-            try (DebugContext debug = graalRuntime.openDebugContext(options, task.getCompilationIdentifier(), method, getDebugHandlersFactories(), DebugContext.DEFAULT_LOG_STREAM);
-                            Activation a = debug.activate()) {
-                r = task.runCompilation(debug);
-            }
-            assert r != null;
-            return r;
         }
     }
 
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalServices.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalServices.java	Fri Jul 26 19:11:34 2019 -0400
@@ -26,6 +26,9 @@
 
 import jdk.vm.ci.hotspot.HotSpotMetaData;
 
+/**
+ * JDK 13 version of {@code HotSpotGraalServices}.
+ */
 public class HotSpotGraalServices {
 
     /**
@@ -35,4 +38,17 @@
     public static byte[] getImplicitExceptionBytes(HotSpotMetaData metaData) {
         return metaData.implicitExceptionBytes();
     }
+
+    public static CompilationContext enterGlobalCompilationContext() {
+        return null;
+    }
+
+    @SuppressWarnings("unused")
+    public static CompilationContext openLocalCompilationContext(Object description) {
+        return null;
+    }
+
+    public static void exit(int status) {
+        System.exit(status);
+    }
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotReplacementsImpl.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotReplacementsImpl.java	Fri Jul 26 19:11:34 2019 -0400
@@ -208,6 +208,7 @@
         return super.getSnippet(method, recursiveEntry, args, trackNodeSourcePosition, replaceePosition, options);
     }
 
+    @SuppressWarnings("try")
     private StructuredGraph getEncodedSnippet(ResolvedJavaMethod method, Object[] args, StructuredGraph.AllowAssumptions allowAssumptions, OptionValues options) {
         boolean useEncodedGraphs = UseEncodedGraphs.getValue(options);
         if (IS_IN_NATIVE_IMAGE || useEncodedGraphs) {
@@ -219,11 +220,15 @@
                 if (getEncodedSnippets() == null) {
                     throw GraalError.shouldNotReachHere("encoded snippets not found");
                 }
-                StructuredGraph graph = getEncodedSnippets().getEncodedSnippet(method, this, args, allowAssumptions, options);
-                if (graph == null) {
-                    throw GraalError.shouldNotReachHere("snippet not found: " + method.format("%H.%n(%p)"));
+                // Snippets graphs can contain foreign object reference and
+                // outlive a single compilation.
+                try (CompilationContext scope = HotSpotGraalServices.enterGlobalCompilationContext()) {
+                    StructuredGraph graph = getEncodedSnippets().getEncodedSnippet(method, this, args, allowAssumptions, options);
+                    if (graph == null) {
+                        throw GraalError.shouldNotReachHere("snippet not found: " + method.format("%H.%n(%p)"));
+                    }
+                    return graph;
                 }
-                return graph;
             }
         } else {
             assert registeredSnippets == null || registeredSnippets.contains(method) : "Asking for snippet method that was never registered: " + method.format("%H.%n(%p)");
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotTTYStreamProvider.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotTTYStreamProvider.java	Fri Jul 26 19:11:34 2019 -0400
@@ -42,6 +42,7 @@
 import org.graalvm.compiler.serviceprovider.GraalServices;
 import org.graalvm.compiler.serviceprovider.ServiceProvider;
 
+import jdk.vm.ci.common.NativeImageReinitialize;
 import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime;
 import jdk.vm.ci.services.Services;
 
@@ -96,7 +97,7 @@
          * initialization.
          */
         class DelayedOutputStream extends OutputStream {
-            private volatile OutputStream lazy;
+            @NativeImageReinitialize private volatile OutputStream lazy;
 
             private OutputStream lazy() {
                 if (lazy == null) {
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/IsGraalPredicateBase.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/IsGraalPredicateBase.java	Fri Jul 26 19:11:34 2019 -0400
@@ -43,4 +43,3 @@
         return HotSpotJVMCICompilerFactory.CompilationLevelAdjustment.ByHolder;
     }
 }
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/JVMCIVersionCheck.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/JVMCIVersionCheck.java	Fri Jul 26 19:11:34 2019 -0400
@@ -28,6 +28,8 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * Mechanism for checking that the current Java runtime environment supports the minimum JVMCI API
@@ -41,8 +43,107 @@
  */
 public final class JVMCIVersionCheck {
 
-    private static final int JVMCI8_MIN_MAJOR_VERSION = 19;
-    private static final int JVMCI8_MIN_MINOR_VERSION = 1;
+    private static final Version JVMCI8_MIN_VERSION = new Version3(19, 2, 1);
+
+    public interface Version {
+        boolean isLessThan(Version other);
+
+        static Version parse(String vmVersion) {
+            Matcher m = Pattern.compile(".*-jvmci-(\\d+)\\.(\\d+)-b(\\d+).*").matcher(vmVersion);
+            if (m.matches()) {
+                try {
+                    int major = Integer.parseInt(m.group(1));
+                    int minor = Integer.parseInt(m.group(2));
+                    int build = Integer.parseInt(m.group(3));
+                    return new Version3(major, minor, build);
+                } catch (NumberFormatException e) {
+                    // ignore
+                }
+            }
+            m = Pattern.compile(".*-jvmci-(\\d+)(?:\\.|-b)(\\d+).*").matcher(vmVersion);
+            if (m.matches()) {
+                try {
+                    int major = Integer.parseInt(m.group(1));
+                    int minor = Integer.parseInt(m.group(2));
+                    return new Version2(major, minor);
+                } catch (NumberFormatException e) {
+                    // ignore
+                }
+            }
+            return null;
+        }
+    }
+
+    public static class Version2 implements Version {
+        private final int major;
+        private final int minor;
+
+        public Version2(int major, int minor) {
+            this.major = major;
+            this.minor = minor;
+        }
+
+        @Override
+        public boolean isLessThan(Version other) {
+            if (other.getClass() == Version3.class) {
+                return true;
+            }
+            Version2 o = (Version2) other;
+            if (this.major < o.major) {
+                return true;
+            }
+            if (this.major == o.major && this.minor < o.minor) {
+                return true;
+            }
+            return false;
+        }
+
+        @Override
+        public String toString() {
+            if (major >= 19) {
+                return String.format("%d-b%02d", major, minor);
+            } else {
+                return String.format("%d.%d", major, minor);
+            }
+        }
+    }
+
+    public static class Version3 implements Version {
+        private final int major;
+        private final int minor;
+        private final int build;
+
+        public Version3(int major, int minor, int build) {
+            this.major = major;
+            this.minor = minor;
+            this.build = build;
+        }
+
+        @Override
+        public boolean isLessThan(Version other) {
+            if (other.getClass() == Version2.class) {
+                return false;
+            }
+            Version3 o = (Version3) other;
+            if (this.major < o.major) {
+                return true;
+            }
+            if (this.major == o.major) {
+                if (this.minor < o.minor) {
+                    return true;
+                }
+                if (this.minor == o.minor && this.build < o.build) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        @Override
+        public String toString() {
+            return String.format("%d.%d-b%02d", major, minor, build);
+        }
+    }
 
     private static void failVersionCheck(Map<String, String> props, boolean exit, String reason, Object... args) {
         Formatter errorMessage = new Formatter().format(reason, args);
@@ -53,9 +154,7 @@
         errorMessage.format("Currently used Java home directory is %s.%n", javaHome);
         errorMessage.format("Currently used VM configuration is: %s%n", vmName);
         if (props.get("java.specification.version").compareTo("1.9") < 0) {
-            errorMessage.format("Download the latest JVMCI JDK 8 from " +
-                            "https://www.oracle.com/technetwork/graalvm/downloads/index.html or " +
-                            "https://github.com/graalvm/openjdk8-jvmci-builder/releases");
+            errorMessage.format("Download the latest JVMCI JDK 8 from https://github.com/graalvm/openjdk8-jvmci-builder/releases");
         } else {
             errorMessage.format("Download JDK 11 or later.");
         }
@@ -74,7 +173,6 @@
 
     private final String javaSpecVersion;
     private final String vmVersion;
-    private int cursor;
     private final Map<String, String> props;
 
     private JVMCIVersionCheck(Map<String, String> props, String javaSpecVersion, String vmVersion) {
@@ -85,112 +183,28 @@
 
     static void check(Map<String, String> props, boolean exitOnFailure) {
         JVMCIVersionCheck checker = new JVMCIVersionCheck(props, props.get("java.specification.version"), props.get("java.vm.version"));
-        checker.run(exitOnFailure, JVMCI8_MIN_MAJOR_VERSION, JVMCI8_MIN_MINOR_VERSION);
+        checker.run(exitOnFailure, JVMCI8_MIN_VERSION);
     }
 
     /**
      * Entry point for testing.
      */
     public static void check(Map<String, String> props,
-                    int jvmci8MinMajorVersion,
-                    int jvmci8MinMinorVersion,
+                    Version minVersion,
                     String javaSpecVersion,
-                    String javaVmVersion,
-                    boolean exitOnFailure) {
+                    String javaVmVersion, boolean exitOnFailure) {
         JVMCIVersionCheck checker = new JVMCIVersionCheck(props, javaSpecVersion, javaVmVersion);
-        checker.run(exitOnFailure, jvmci8MinMajorVersion, jvmci8MinMinorVersion);
-    }
-
-    /**
-     * Parses a positive decimal number at {@link #cursor}.
-     *
-     * @return -1 if there is no positive decimal number at {@link #cursor}
-     */
-    private int parseNumber() {
-        int result = -1;
-        while (cursor < vmVersion.length()) {
-            int digit = vmVersion.charAt(cursor) - '0';
-            if (digit >= 0 && digit <= 9) {
-                if (result == -1) {
-                    result = digit;
-                } else {
-                    long r = (long) result * (long) 10;
-                    if ((int) r != r) {
-                        // Overflow
-                        return -1;
-                    }
-                    result = (int) r + digit;
-                }
-                cursor++;
-            } else {
-                break;
-            }
-        }
-        return result;
+        checker.run(exitOnFailure, minVersion);
     }
 
-    /**
-     * Parse {@code "."} or {@code "-b"} at {@link #cursor}.
-     *
-     * @return {@code true} iff there was an expected separator at {@link #cursor}
-     */
-    private boolean parseSeparator() {
-        if (cursor < vmVersion.length()) {
-            char ch = vmVersion.charAt(cursor);
-            if (ch == '.') {
-                cursor++;
-                return true;
-            }
-            if (ch == '-') {
-                cursor++;
-                if (cursor < vmVersion.length()) {
-                    if (vmVersion.charAt(cursor) == 'b') {
-                        cursor++;
-                        return true;
-                    }
+    private void run(boolean exitOnFailure, Version minVersion) {
+        if (javaSpecVersion.compareTo("1.9") < 0) {
+            Version v = Version.parse(vmVersion);
+            if (v != null) {
+                if (v.isLessThan(minVersion)) {
+                    failVersionCheck(props, exitOnFailure, "The VM does not support the minimum JVMCI API version required by Graal: %s < %s.%n", v, minVersion);
                 }
-                return false;
-            }
-        }
-        return false;
-    }
-
-    private static String getJVMCIVersionString(int major, int minor) {
-        if (major >= 19) {
-            return String.format("%d-b%02d", major, minor);
-        } else {
-            return String.format("%d.%d", major, minor);
-        }
-    }
-
-    private void run(boolean exitOnFailure, int jvmci8MinMajorVersion, int jvmci8MinMinorVersion) {
-        // Don't use regular expressions to minimize Graal startup time
-        if (javaSpecVersion.compareTo("1.9") < 0) {
-            cursor = vmVersion.indexOf("-jvmci-");
-            if (cursor >= 0) {
-                cursor += "-jvmci-".length();
-                int major = parseNumber();
-                if (major == -1) {
-                    failVersionCheck(props, exitOnFailure, "The VM does not support the minimum JVMCI API version required by Graal.%n" +
-                                    "Cannot read JVMCI major version from java.vm.version property: %s.%n", vmVersion);
-                    return;
-                }
-
-                if (parseSeparator()) {
-                    int minor = parseNumber();
-                    if (minor == -1) {
-                        failVersionCheck(props, exitOnFailure, "The VM does not support the minimum JVMCI API version required by Graal.%n" +
-                                        "Cannot read JVMCI minor version from java.vm.version property: %s.%n", vmVersion);
-                        return;
-                    }
-
-                    if (major > jvmci8MinMajorVersion || (major >= jvmci8MinMajorVersion && minor >= jvmci8MinMinorVersion)) {
-                        return;
-                    }
-                    failVersionCheck(props, exitOnFailure, "The VM does not support the minimum JVMCI API version required by Graal: %s < %s.%n",
-                                    getJVMCIVersionString(major, minor), getJVMCIVersionString(jvmci8MinMajorVersion, jvmci8MinMinorVersion));
-                    return;
-                }
+                return;
             }
             failVersionCheck(props, exitOnFailure, "The VM does not support the minimum JVMCI API version required by Graal.%n" +
                             "Cannot read JVMCI version from java.vm.version property: %s.%n", vmVersion);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/DefaultHotSpotLoweringProvider.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/DefaultHotSpotLoweringProvider.java	Fri Jul 26 19:11:34 2019 -0400
@@ -182,7 +182,7 @@
 /**
  * HotSpot implementation of {@link LoweringProvider}.
  */
-public class DefaultHotSpotLoweringProvider extends DefaultJavaLoweringProvider implements HotSpotLoweringProvider {
+public abstract class DefaultHotSpotLoweringProvider extends DefaultJavaLoweringProvider implements HotSpotLoweringProvider {
 
     protected final HotSpotGraalRuntimeProvider runtime;
     protected final HotSpotRegistersProvider registers;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java	Fri Jul 26 19:11:34 2019 -0400
@@ -44,6 +44,7 @@
 import org.graalvm.compiler.core.common.type.ObjectStamp;
 import org.graalvm.compiler.core.common.type.StampFactory;
 import org.graalvm.compiler.core.common.type.TypeReference;
+import org.graalvm.compiler.debug.GraalError;
 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
 import org.graalvm.compiler.hotspot.nodes.CurrentJavaThreadNode;
 import org.graalvm.compiler.hotspot.replacements.AESCryptSubstitutions;
@@ -106,6 +107,7 @@
 import jdk.internal.vm.compiler.word.LocationIdentity;
 
 import jdk.vm.ci.code.CodeUtil;
+import jdk.vm.ci.hotspot.VMIntrinsicMethod;
 import jdk.vm.ci.meta.ConstantReflectionProvider;
 import jdk.vm.ci.meta.DeoptimizationAction;
 import jdk.vm.ci.meta.JavaKind;
@@ -429,8 +431,6 @@
         r.registerMethodSubstitution(ThreadSubstitutions.class, "isInterrupted", Receiver.class, boolean.class);
     }
 
-    public static final String cbcEncryptName;
-    public static final String cbcDecryptName;
     public static final String aesEncryptName;
     public static final String aesDecryptName;
 
@@ -439,15 +439,11 @@
 
     static {
         if (JavaVersionUtil.JAVA_SPEC <= 8) {
-            cbcEncryptName = "encrypt";
-            cbcDecryptName = "decrypt";
             aesEncryptName = "encryptBlock";
             aesDecryptName = "decryptBlock";
             reflectionClass = "sun.reflect.Reflection";
             constantPoolClass = "sun.reflect.ConstantPool";
         } else {
-            cbcEncryptName = "implEncrypt";
-            cbcDecryptName = "implDecrypt";
             aesEncryptName = "implEncryptBlock";
             aesDecryptName = "implDecryptBlock";
             reflectionClass = "jdk.internal.reflect.Reflection";
@@ -455,6 +451,19 @@
         }
     }
 
+    public static boolean cbcUsesImplNames(GraalHotSpotVMConfig config) {
+        for (VMIntrinsicMethod intrinsic : config.getStore().getIntrinsics()) {
+            if ("com/sun/crypto/provider/CipherBlockChaining".equals(intrinsic.declaringClass)) {
+                if ("encrypt".equals(intrinsic.name)) {
+                    return false;
+                } else if ("implEncrypt".equals(intrinsic.name)) {
+                    return true;
+                }
+            }
+        }
+        throw GraalError.shouldNotReachHere();
+    }
+
     private static void registerAESPlugins(InvocationPlugins plugins, GraalHotSpotVMConfig config, BytecodeProvider bytecodeProvider) {
         if (config.useAESIntrinsics) {
             assert config.aescryptEncryptBlockStub != 0L;
@@ -464,9 +473,15 @@
             String arch = config.osArch;
             String decryptSuffix = arch.equals("sparc") ? "WithOriginalKey" : "";
             Registration r = new Registration(plugins, "com.sun.crypto.provider.CipherBlockChaining", bytecodeProvider);
+
+            boolean implNames = cbcUsesImplNames(config);
+            String cbcEncryptName = implNames ? "implEncrypt" : "encrypt";
+            String cbcDecryptName = implNames ? "implDecrypt" : "decrypt";
+
             r.registerMethodSubstitution(CipherBlockChainingSubstitutions.class, cbcEncryptName, Receiver.class, byte[].class, int.class, int.class, byte[].class, int.class);
             r.registerMethodSubstitution(CipherBlockChainingSubstitutions.class, cbcDecryptName, cbcDecryptName + decryptSuffix, Receiver.class, byte[].class, int.class, int.class, byte[].class,
                             int.class);
+
             r = new Registration(plugins, "com.sun.crypto.provider.AESCrypt", bytecodeProvider);
             r.registerMethodSubstitution(AESCryptSubstitutions.class, aesEncryptName, Receiver.class, byte[].class, int.class, byte[].class, int.class);
             r.registerMethodSubstitution(AESCryptSubstitutions.class, aesDecryptName, aesDecryptName + decryptSuffix, Receiver.class, byte[].class, int.class, byte[].class, int.class);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotNodePlugin.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotNodePlugin.java	Fri Jul 26 19:11:34 2019 -0400
@@ -244,4 +244,3 @@
 
     private static final LocationIdentity JAVA_THREAD_SHOULD_POST_ON_EXCEPTIONS_FLAG_LOCATION = NamedLocationIdentity.mutable("JavaThread::_should_post_on_exceptions_flag");
 }
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/nodes/VMErrorNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/nodes/VMErrorNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/phases/OnStackReplacementPhase.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/phases/OnStackReplacementPhase.java	Fri Jul 26 19:11:34 2019 -0400
@@ -41,7 +41,6 @@
 import org.graalvm.compiler.loop.phases.LoopTransformations;
 import org.graalvm.compiler.nodeinfo.InputType;
 import org.graalvm.compiler.nodeinfo.Verbosity;
-import org.graalvm.compiler.nodes.AbstractBeginNode;
 import org.graalvm.compiler.nodes.EntryMarkerNode;
 import org.graalvm.compiler.nodes.EntryProxyNode;
 import org.graalvm.compiler.nodes.FixedGuardNode;
@@ -159,11 +158,8 @@
             LoopEx loop = loops.loop(l);
             loop.loopBegin().markOsrLoop();
             LoopTransformations.peel(loop);
-            osr.replaceAtUsages(InputType.Guard, AbstractBeginNode.prevBegin((FixedNode) osr.predecessor()));
-            for (Node usage : osr.usages().snapshot()) {
-                EntryProxyNode proxy = (EntryProxyNode) usage;
-                proxy.replaceAndDelete(proxy.value());
-            }
+
+            osr.prepareDelete();
             GraphUtil.removeFixedWithUnusedInputs(osr);
             debug.dump(DebugContext.DETAILED_LEVEL, graph, "OnStackReplacement loop peeling result");
         } while (true);
@@ -228,6 +224,7 @@
             }
 
             osr.replaceAtUsages(InputType.Guard, osrStart);
+            osr.replaceAtUsages(InputType.Anchor, osrStart);
         }
         debug.dump(DebugContext.DETAILED_LEVEL, graph, "OnStackReplacement after replacing entry proxies");
         GraphUtil.killCFG(start);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/Log.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/Log.java	Fri Jul 26 19:11:34 2019 -0400
@@ -191,4 +191,3 @@
         println("");
     }
 }
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/NewObjectSnippets.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/NewObjectSnippets.java	Fri Jul 26 19:11:34 2019 -0400
@@ -212,14 +212,27 @@
     }
 
     @Snippet
-    public static Object allocateInstance(@ConstantParameter long size, KlassPointer hub, Word prototypeMarkWord, @ConstantParameter boolean fillContents,
-                    @ConstantParameter Register threadRegister, @ConstantParameter boolean constantSize, @ConstantParameter String typeContext,
+    public static Object allocateInstance(@ConstantParameter long size,
+                    KlassPointer hub,
+                    Word prototypeMarkWord,
+                    @ConstantParameter boolean fillContents,
+                    @ConstantParameter boolean emitMemoryBarrier,
+                    @ConstantParameter Register threadRegister,
+                    @ConstantParameter boolean constantSize,
+                    @ConstantParameter String typeContext,
                     @ConstantParameter Counters counters) {
-        return piCastToSnippetReplaceeStamp(allocateInstanceHelper(size, hub, prototypeMarkWord, fillContents, threadRegister, constantSize, typeContext, counters));
+        return piCastToSnippetReplaceeStamp(allocateInstanceHelper(size, hub, prototypeMarkWord, fillContents, emitMemoryBarrier, threadRegister, constantSize, typeContext, counters));
     }
 
-    public static Object allocateInstanceHelper(long size, KlassPointer hub, Word prototypeMarkWord, boolean fillContents,
-                    Register threadRegister, boolean constantSize, String typeContext, Counters counters) {
+    public static Object allocateInstanceHelper(long size,
+                    KlassPointer hub,
+                    Word prototypeMarkWord,
+                    boolean fillContents,
+                    boolean emitMemoryBarrier,
+                    Register threadRegister,
+                    boolean constantSize,
+                    String typeContext,
+                    Counters counters) {
         Object result;
         Word thread = registerAsWord(threadRegister);
         Word top = readTlabTop(thread);
@@ -228,7 +241,7 @@
         if (useTLAB(INJECTED_VMCONFIG) && probability(FAST_PATH_PROBABILITY, newTop.belowOrEqual(end))) {
             writeTlabTop(thread, newTop);
             emitPrefetchAllocate(newTop, false);
-            result = formatObject(hub, size, top, prototypeMarkWord, fillContents, constantSize, counters);
+            result = formatObject(hub, size, top, prototypeMarkWord, fillContents, emitMemoryBarrier, constantSize, counters);
         } else {
             Counters theCounters = counters;
             if (theCounters != null && theCounters.stub != null) {
@@ -255,18 +268,27 @@
     private static native Object newInstanceOrNull(@ConstantNodeParameter ForeignCallDescriptor descriptor, KlassPointer hub);
 
     @Snippet
-    public static Object allocateInstancePIC(@ConstantParameter long size, KlassPointer hub, Word prototypeMarkWord, @ConstantParameter boolean fillContents,
-                    @ConstantParameter Register threadRegister, @ConstantParameter boolean constantSize, @ConstantParameter String typeContext,
+    public static Object allocateInstancePIC(@ConstantParameter long size,
+                    KlassPointer hub,
+                    Word prototypeMarkWord,
+                    @ConstantParameter boolean fillContents,
+                    @ConstantParameter boolean emitMemoryBarrier,
+                    @ConstantParameter Register threadRegister,
+                    @ConstantParameter boolean constantSize,
+                    @ConstantParameter String typeContext,
                     @ConstantParameter Counters counters) {
         // Klass must be initialized by the time the first instance is allocated, therefore we can
         // just load it from the corresponding cell and avoid the resolution check. We have to use a
         // fixed load though, to prevent it from floating above the initialization.
         KlassPointer picHub = LoadConstantIndirectlyFixedNode.loadKlass(hub);
-        return piCastToSnippetReplaceeStamp(allocateInstanceHelper(size, picHub, prototypeMarkWord, fillContents, threadRegister, constantSize, typeContext, counters));
+        return piCastToSnippetReplaceeStamp(allocateInstanceHelper(size, picHub, prototypeMarkWord, fillContents, emitMemoryBarrier, threadRegister, constantSize, typeContext, counters));
     }
 
     @Snippet
-    public static Object allocateInstanceDynamic(Class<?> type, Class<?> classClass, @ConstantParameter boolean fillContents, @ConstantParameter Register threadRegister,
+    public static Object allocateInstanceDynamic(Class<?> type, Class<?> classClass,
+                    @ConstantParameter boolean fillContents,
+                    @ConstantParameter boolean emitMemoryBarrier,
+                    @ConstantParameter Register threadRegister,
                     @ConstantParameter Counters counters) {
         if (probability(SLOW_PATH_PROBABILITY, type == null)) {
             DeoptimizeNode.deopt(None, RuntimeConstraint);
@@ -277,10 +299,15 @@
             DeoptimizeNode.deopt(None, RuntimeConstraint);
         }
 
-        return PiNode.piCastToSnippetReplaceeStamp(allocateInstanceDynamicHelper(type, fillContents, threadRegister, counters, nonNullType));
+        return PiNode.piCastToSnippetReplaceeStamp(allocateInstanceDynamicHelper(type, fillContents, emitMemoryBarrier, threadRegister, counters, nonNullType));
     }
 
-    private static Object allocateInstanceDynamicHelper(Class<?> type, boolean fillContents, Register threadRegister, Counters counters, Class<?> nonNullType) {
+    private static Object allocateInstanceDynamicHelper(Class<?> type,
+                    boolean fillContents,
+                    boolean emitMemoryBarrier,
+                    Register threadRegister,
+                    Counters counters,
+                    Class<?> nonNullType) {
         KlassPointer hub = ClassGetHubNode.readClass(nonNullType);
         if (probability(FAST_PATH_PROBABILITY, !hub.isNull())) {
             KlassPointer nonNullHub = ClassGetHubNode.piCastNonNull(hub, SnippetAnchorNode.anchor());
@@ -299,7 +326,7 @@
                      * FIXME(je,ds): we should actually pass typeContext instead of "" but late
                      * binding of parameters is not yet supported by the GraphBuilderPlugin system.
                      */
-                    return allocateInstanceHelper(layoutHelper, nonNullHub, prototypeMarkWord, fillContents, threadRegister, false, "", counters);
+                    return allocateInstanceHelper(layoutHelper, nonNullHub, prototypeMarkWord, fillContents, emitMemoryBarrier, threadRegister, false, "", counters);
                 }
             } else {
                 DeoptimizeNode.deopt(None, RuntimeConstraint);
@@ -320,6 +347,7 @@
                     @ConstantParameter int headerSize,
                     @ConstantParameter int log2ElementSize,
                     @ConstantParameter boolean fillContents,
+                    @ConstantParameter boolean emitMemoryBarrier,
                     @ConstantParameter Register threadRegister,
                     @ConstantParameter boolean maybeUnroll,
                     @ConstantParameter String typeContext,
@@ -328,7 +356,7 @@
         // Primitive array types are eagerly pre-resolved. We can use a floating load.
         KlassPointer picHub = LoadConstantIndirectlyNode.loadKlass(hub);
         return allocateArrayImpl(picHub, length, prototypeMarkWord, headerSize, log2ElementSize, fillContents,
-                        threadRegister, maybeUnroll, typeContext, useBulkZeroing, counters);
+                        emitMemoryBarrier, threadRegister, maybeUnroll, typeContext, useBulkZeroing, counters);
     }
 
     @Snippet
@@ -338,6 +366,7 @@
                     @ConstantParameter int headerSize,
                     @ConstantParameter int log2ElementSize,
                     @ConstantParameter boolean fillContents,
+                    @ConstantParameter boolean emitMemoryBarrier,
                     @ConstantParameter Register threadRegister,
                     @ConstantParameter boolean maybeUnroll,
                     @ConstantParameter String typeContext,
@@ -346,7 +375,7 @@
         // Array type would be resolved by dominating resolution.
         KlassPointer picHub = LoadConstantIndirectlyFixedNode.loadKlass(hub);
         return allocateArrayImpl(picHub, length, prototypeMarkWord, headerSize, log2ElementSize, fillContents,
-                        threadRegister, maybeUnroll, typeContext, useBulkZeroing, counters);
+                        emitMemoryBarrier, threadRegister, maybeUnroll, typeContext, useBulkZeroing, counters);
     }
 
     @Snippet
@@ -356,6 +385,7 @@
                     @ConstantParameter int headerSize,
                     @ConstantParameter int log2ElementSize,
                     @ConstantParameter boolean fillContents,
+                    @ConstantParameter boolean emitMemoryBarrier,
                     @ConstantParameter Register threadRegister,
                     @ConstantParameter boolean maybeUnroll,
                     @ConstantParameter String typeContext,
@@ -367,7 +397,7 @@
                         headerSize,
                         log2ElementSize,
                         fillContents,
-                        threadRegister,
+                        emitMemoryBarrier, threadRegister,
                         maybeUnroll,
                         typeContext,
                         useBulkZeroing,
@@ -384,8 +414,18 @@
         return config.areNullAllocationStubsAvailable();
     }
 
-    private static Object allocateArrayImpl(KlassPointer hub, int length, Word prototypeMarkWord, int headerSize, int log2ElementSize, boolean fillContents, Register threadRegister,
-                    boolean maybeUnroll, String typeContext, boolean useBulkZeroing, Counters counters) {
+    private static Object allocateArrayImpl(KlassPointer hub,
+                    int length,
+                    Word prototypeMarkWord,
+                    int headerSize,
+                    int log2ElementSize,
+                    boolean fillContents,
+                    boolean emitMemoryBarrier,
+                    Register threadRegister,
+                    boolean maybeUnroll,
+                    String typeContext,
+                    boolean useBulkZeroing,
+                    Counters counters) {
         Object result;
         long allocationSize = arrayAllocationSize(length, headerSize, log2ElementSize);
         Word thread = registerAsWord(threadRegister);
@@ -400,7 +440,7 @@
             if (theCounters != null && theCounters.arrayLoopInit != null) {
                 theCounters.arrayLoopInit.inc();
             }
-            result = formatArray(hub, allocationSize, length, headerSize, top, prototypeMarkWord, fillContents, maybeUnroll, useBulkZeroing, counters);
+            result = formatArray(hub, allocationSize, length, headerSize, top, prototypeMarkWord, fillContents, emitMemoryBarrier, maybeUnroll, useBulkZeroing, counters);
         } else {
             result = newArrayStub(hub, length);
         }
@@ -461,19 +501,29 @@
                     Class<?> voidClass,
                     int length,
                     @ConstantParameter boolean fillContents,
+                    @ConstantParameter boolean emitMemoryBarrier,
                     @ConstantParameter Register threadRegister,
                     @ConstantParameter JavaKind knownElementKind,
                     @ConstantParameter int knownLayoutHelper,
                     @ConstantParameter boolean useBulkZeroing,
                     Word prototypeMarkWord,
                     @ConstantParameter Counters counters) {
-        Object result = allocateArrayDynamicImpl(elementType, voidClass, length, fillContents, threadRegister, knownElementKind,
+        Object result = allocateArrayDynamicImpl(elementType, voidClass, length, fillContents, emitMemoryBarrier, threadRegister, knownElementKind,
                         knownLayoutHelper, useBulkZeroing, prototypeMarkWord, counters);
         return result;
     }
 
-    private static Object allocateArrayDynamicImpl(Class<?> elementType, Class<?> voidClass, int length, boolean fillContents, Register threadRegister, JavaKind knownElementKind,
-                    int knownLayoutHelper, boolean useBulkZeroing, Word prototypeMarkWord, Counters counters) {
+    private static Object allocateArrayDynamicImpl(Class<?> elementType,
+                    Class<?> voidClass,
+                    int length,
+                    boolean fillContents,
+                    boolean emitMemoryBarrier,
+                    Register threadRegister,
+                    JavaKind knownElementKind,
+                    int knownLayoutHelper,
+                    boolean useBulkZeroing,
+                    Word prototypeMarkWord,
+                    Counters counters) {
         /*
          * We only need the dynamic check for void when we have no static information from
          * knownElementKind.
@@ -516,7 +566,7 @@
         int log2ElementSize = (layoutHelper >> layoutHelperLog2ElementSizeShift(INJECTED_VMCONFIG)) & layoutHelperLog2ElementSizeMask(INJECTED_VMCONFIG);
 
         Object result = allocateArrayImpl(nonNullKlass, length, prototypeMarkWord, headerSize, log2ElementSize, fillContents,
-                        threadRegister, false, "dynamic type", useBulkZeroing, counters);
+                        emitMemoryBarrier, threadRegister, false, "dynamic type", useBulkZeroing, counters);
         return piArrayCastToSnippetReplaceeStamp(verifyOop(result), length);
     }
 
@@ -650,7 +700,14 @@
     /**
      * Formats some allocated memory with an object header and zeroes out the rest.
      */
-    private static Object formatObject(KlassPointer hub, long size, Word memory, Word compileTimePrototypeMarkWord, boolean fillContents, boolean constantSize, Counters counters) {
+    private static Object formatObject(KlassPointer hub,
+                    long size,
+                    Word memory,
+                    Word compileTimePrototypeMarkWord,
+                    boolean fillContents,
+                    boolean emitMemoryBarrier,
+                    boolean constantSize,
+                    Counters counters) {
         Word prototypeMarkWord = useBiasedLocking(INJECTED_VMCONFIG) ? hub.readWord(prototypeMarkWordOffset(INJECTED_VMCONFIG), PROTOTYPE_MARK_WORD_LOCATION) : compileTimePrototypeMarkWord;
         initializeObjectHeader(memory, prototypeMarkWord, hub);
         if (fillContents) {
@@ -658,7 +715,9 @@
         } else if (REPLACEMENTS_ASSERTIONS_ENABLED) {
             fillWithGarbage(size, memory, constantSize, instanceHeaderSize(INJECTED_VMCONFIG), false, counters);
         }
-        MembarNode.memoryBarrier(MemoryBarriers.STORE_STORE, LocationIdentity.init());
+        if (emitMemoryBarrier) {
+            MembarNode.memoryBarrier(MemoryBarriers.STORE_STORE, LocationIdentity.init());
+        }
         return memory.toObjectNonNull();
     }
 
@@ -677,8 +736,17 @@
     /**
      * Formats some allocated memory with an object header and zeroes out the rest.
      */
-    private static Object formatArray(KlassPointer hub, long allocationSize, int length, int headerSize, Word memory, Word prototypeMarkWord, boolean fillContents, boolean maybeUnroll,
-                    boolean useBulkZeroing, Counters counters) {
+    private static Object formatArray(KlassPointer hub,
+                    long allocationSize,
+                    int length,
+                    int headerSize,
+                    Word memory,
+                    Word prototypeMarkWord,
+                    boolean fillContents,
+                    boolean emitMemoryBarrier,
+                    boolean maybeUnroll,
+                    boolean useBulkZeroing,
+                    Counters counters) {
         memory.writeInt(arrayLengthOffset(INJECTED_VMCONFIG), length, LocationIdentity.init());
         /*
          * store hub last as the concurrent garbage collectors assume length is valid if hub field
@@ -690,7 +758,9 @@
         } else if (REPLACEMENTS_ASSERTIONS_ENABLED) {
             fillWithGarbage(allocationSize, memory, false, headerSize, maybeUnroll, counters);
         }
-        MembarNode.memoryBarrier(MemoryBarriers.STORE_STORE, LocationIdentity.init());
+        if (emitMemoryBarrier) {
+            MembarNode.memoryBarrier(MemoryBarriers.STORE_STORE, LocationIdentity.init());
+        }
         return memory.toObjectNonNull();
     }
 
@@ -756,6 +826,7 @@
             args.add("hub", hub);
             args.add("prototypeMarkWord", type.prototypeMarkWord());
             args.addConst("fillContents", newInstanceNode.fillContents());
+            args.addConst("emitMemoryBarrier", newInstanceNode.emitMemoryBarrier());
             args.addConst("threadRegister", registers.getThreadRegister());
             args.addConst("constantSize", true);
             args.addConst("typeContext", ProfileAllocations.getValue(localOptions) ? type.toJavaName(false) : "");
@@ -799,6 +870,7 @@
             args.addConst("headerSize", headerSize);
             args.addConst("log2ElementSize", log2ElementSize);
             args.addConst("fillContents", newArrayNode.fillContents());
+            args.addConst("emitMemoryBarrier", newArrayNode.emitMemoryBarrier());
             args.addConst("threadRegister", registers.getThreadRegister());
             args.addConst("maybeUnroll", length.isConstant());
             args.addConst("typeContext", ProfileAllocations.getValue(localOptions) ? arrayType.toJavaName(false) : "");
@@ -816,6 +888,7 @@
             assert classClass != null;
             args.add("classClass", classClass);
             args.addConst("fillContents", newInstanceNode.fillContents());
+            args.addConst("emitMemoryBarrier", newInstanceNode.emitMemoryBarrier());
             args.addConst("threadRegister", registers.getThreadRegister());
             args.addConst("counters", counters);
 
@@ -833,6 +906,7 @@
             ValueNode length = newArrayNode.length();
             args.add("length", length.isAlive() ? length : graph.addOrUniqueWithInputs(length));
             args.addConst("fillContents", newArrayNode.fillContents());
+            args.addConst("emitMemoryBarrier", newArrayNode.emitMemoryBarrier());
             args.addConst("threadRegister", registers.getThreadRegister());
             /*
              * We use Kind.Illegal as a marker value instead of null because constant snippet
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java	Fri Jul 26 19:11:34 2019 -0400
@@ -391,7 +391,6 @@
 import org.graalvm.compiler.nodes.extended.LoadHubNode;
 import org.graalvm.compiler.nodes.extended.MembarNode;
 import org.graalvm.compiler.nodes.extended.StateSplitProxyNode;
-import org.graalvm.compiler.nodes.extended.ValueAnchorNode;
 import org.graalvm.compiler.nodes.graphbuilderconf.ClassInitializationPlugin;
 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration;
 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.BytecodeExceptionMode;
@@ -624,7 +623,6 @@
     }
 
     static class IntrinsicScope extends InliningScope {
-        StateSplit returnStateSplit;
         ArrayList<StateSplit> invalidStateUsers;
 
         IntrinsicScope(BytecodeParser parser) {
@@ -635,6 +633,7 @@
             super(parser, callee, args);
         }
 
+        @SuppressWarnings("unlikely-arg-type")
         @Override
         public void close() {
             IntrinsicContext intrinsic = parser.intrinsicContext;
@@ -1405,7 +1404,7 @@
         if (profile == null || profile.getNotRecordedProbability() > 0.0) {
             return null;
         } else {
-            return append(new ValueAnchorNode(null));
+            return BeginNode.prevBegin(lastInstr);
         }
     }
 
@@ -4794,6 +4793,9 @@
         }
     }
 
+    private static final int SWITCH_DEOPT_UNSEEN = -2;
+    private static final int SWITCH_DEOPT_SEEN = -1;
+
     private void genSwitch(BytecodeSwitch bs) {
         int bci = bci();
         ValueNode value = frameState.pop(JavaKind.Int);
@@ -4811,20 +4813,16 @@
         ArrayList<BciBlock> actualSuccessors = new ArrayList<>();
         int[] keys = new int[nofCases];
         int[] keySuccessors = new int[nofCasesPlusDefault];
-        int deoptSuccessorIndex = -1;
+        int deoptSuccessorIndex = SWITCH_DEOPT_UNSEEN;
         int nextSuccessorIndex = 0;
         boolean constantValue = value.isConstant();
         for (int i = 0; i < nofCasesPlusDefault; i++) {
             if (i < nofCases) {
                 keys[i] = bs.keyAt(i);
             }
-
             if (!constantValue && isNeverExecutedCode(keyProbabilities[i])) {
-                if (deoptSuccessorIndex < 0) {
-                    deoptSuccessorIndex = nextSuccessorIndex++;
-                    actualSuccessors.add(null);
-                }
-                keySuccessors[i] = deoptSuccessorIndex;
+                deoptSuccessorIndex = SWITCH_DEOPT_SEEN;
+                keySuccessors[i] = SWITCH_DEOPT_SEEN;
             } else {
                 int targetBci = i < nofCases ? bs.targetAt(i) : bs.defaultTarget();
                 SuccessorInfo info = bciToBlockSuccessorIndex.get(targetBci);
@@ -4859,20 +4857,31 @@
          *
          * The following code rewires deoptimization stub to existing resolved branch target if
          * the target is connected by more than 1 cases.
+         *
+         * If this operation rewires every deoptimization seen to an existing branch, care is
+         * taken that we do not spawn a branch that will never be taken.
          */
-        if (deoptSuccessorIndex >= 0) {
-            int[] connectedCases = new int[nextSuccessorIndex];
+        if (deoptSuccessorIndex == SWITCH_DEOPT_SEEN) {
+            int[] connectedCases = new int[nextSuccessorIndex + 1];
             for (int i = 0; i < nofCasesPlusDefault; i++) {
-                connectedCases[keySuccessors[i]]++;
+                connectedCases[keySuccessors[i] + 1]++;
             }
 
             for (int i = 0; i < nofCasesPlusDefault; i++) {
-                if (keySuccessors[i] == deoptSuccessorIndex) {
+                if (keySuccessors[i] == SWITCH_DEOPT_SEEN) {
                     int targetBci = i < nofCases ? bs.targetAt(i) : bs.defaultTarget();
                     SuccessorInfo info = bciToBlockSuccessorIndex.get(targetBci);
                     int rewiredIndex = info.actualIndex;
-                    if (rewiredIndex >= 0 && connectedCases[rewiredIndex] > 1) {
+                    if (rewiredIndex >= 0 && connectedCases[rewiredIndex + 1] > 1) {
+                        // Rewire
                         keySuccessors[i] = info.actualIndex;
+                    } else {
+                        if (deoptSuccessorIndex == SWITCH_DEOPT_SEEN) {
+                            // Spawn deopt successor if needed.
+                            deoptSuccessorIndex = nextSuccessorIndex++;
+                            actualSuccessors.add(null);
+                        }
+                        keySuccessors[i] = deoptSuccessorIndex;
                     }
                 }
             }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.aarch64/src/org/graalvm/compiler/lir/aarch64/AArch64Move.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.aarch64/src/org/graalvm/compiler/lir/aarch64/AArch64Move.java	Fri Jul 26 19:11:34 2019 -0400
@@ -528,8 +528,8 @@
                 break;
             case Object:
                 if (input.isNull()) {
-                    if (crb.mustReplaceWithNullRegister(input)) {
-                        masm.mov(64, dst, crb.nullRegister);
+                    if (crb.mustReplaceWithUncompressedNullRegister(input)) {
+                        masm.mov(64, dst, crb.uncompressedNullRegister);
                     } else {
                         masm.mov(dst, 0);
                     }
@@ -725,7 +725,7 @@
 
         @Override
         public void emitCode(CompilationResultBuilder crb, AArch64MacroAssembler masm) {
-            Register nullRegister = crb.nullRegister;
+            Register nullRegister = crb.uncompressedNullRegister;
             if (!nullRegister.equals(Register.None)) {
                 emitConversion(asRegister(result), asRegister(input), nullRegister, masm);
             }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64ArrayIndexOfOp.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64ArrayIndexOfOp.java	Fri Jul 26 19:11:34 2019 -0400
@@ -645,4 +645,3 @@
         return ((AMD64) tool.target().arch).getFeatures().contains(cpuFeature);
     }
 }
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64ControlFlow.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64ControlFlow.java	Fri Jul 26 19:11:34 2019 -0400
@@ -213,7 +213,7 @@
                         masm.cmpq(keyRegister, (AMD64Address) crb.asLongConstRef(jc));
                         break;
                     case Object:
-                        AMD64Move.const2reg(crb, masm, asRegister(scratch), jc);
+                        AMD64Move.const2reg(crb, masm, asRegister(scratch), jc, AMD64Kind.QWORD);
                         masm.cmpptr(keyRegister, asRegister(scratch));
                         break;
                     default:
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64Move.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64Move.java	Fri Jul 26 19:11:34 2019 -0400
@@ -156,7 +156,7 @@
         @Override
         public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
             if (isRegister(result)) {
-                const2reg(crb, masm, asRegister(result), input);
+                const2reg(crb, masm, asRegister(result), input, (AMD64Kind) result.getPlatformKind());
             } else {
                 assert isStackSlot(result);
                 const2stack(crb, masm, result, input);
@@ -557,7 +557,7 @@
             }
         } else if (isJavaConstant(input)) {
             if (isRegister(result)) {
-                const2reg(crb, masm, asRegister(result), asJavaConstant(input));
+                const2reg(crb, masm, asRegister(result), asJavaConstant(input), moveKind);
             } else if (isStackSlot(result)) {
                 const2stack(crb, masm, result, asJavaConstant(input));
             } else {
@@ -645,7 +645,7 @@
         }
     }
 
-    public static void const2reg(CompilationResultBuilder crb, AMD64MacroAssembler masm, Register result, JavaConstant input) {
+    public static void const2reg(CompilationResultBuilder crb, AMD64MacroAssembler masm, Register result, JavaConstant input, AMD64Kind moveKind) {
         /*
          * Note: we use the kind of the input operand (and not the kind of the result operand)
          * because they don't match in all cases. For example, an object constant can be loaded to a
@@ -691,20 +691,34 @@
                 }
                 break;
             case Object:
+                assert moveKind != null : "a nun-null moveKind is required for loading an object constant";
                 // Do not optimize with an XOR as this instruction may be between
                 // a CMP and a Jcc in which case the XOR will modify the condition
                 // flags and interfere with the Jcc.
                 if (input.isNull()) {
-                    if (crb.mustReplaceWithNullRegister(input)) {
-                        masm.movq(result, crb.nullRegister);
+                    if (moveKind == AMD64Kind.QWORD && crb.mustReplaceWithUncompressedNullRegister(input)) {
+                        masm.movq(result, crb.uncompressedNullRegister);
                     } else {
+                        // Upper bits will be zeroed so this also works for narrow oops
                         masm.movslq(result, 0);
                     }
-                } else if (crb.target.inlineObjects) {
-                    crb.recordInlineDataInCode(input);
-                    masm.movq(result, 0xDEADDEADDEADDEADL, true);
                 } else {
-                    masm.movq(result, (AMD64Address) crb.recordDataReferenceInCode(input, 0));
+                    if (crb.target.inlineObjects) {
+                        crb.recordInlineDataInCode(input);
+                        if (moveKind == AMD64Kind.DWORD) {
+                            // Support for narrow oops
+                            masm.movl(result, 0xDEADDEAD, true);
+                        } else {
+                            masm.movq(result, 0xDEADDEADDEADDEADL, true);
+                        }
+                    } else {
+                        if (moveKind == AMD64Kind.DWORD) {
+                            // Support for narrow oops
+                            masm.movl(result, (AMD64Address) crb.recordDataReferenceInCode(input, 0));
+                        } else {
+                            masm.movq(result, (AMD64Address) crb.recordDataReferenceInCode(input, 0));
+                        }
+                    }
                 }
                 break;
             default:
@@ -752,13 +766,13 @@
                 break;
             case Object:
                 if (input.isNull()) {
-                    if (crb.mustReplaceWithNullRegister(input)) {
-                        masm.movq(dest, crb.nullRegister);
+                    if (crb.mustReplaceWithUncompressedNullRegister(input)) {
+                        masm.movq(dest, crb.uncompressedNullRegister);
                         return;
                     }
                     imm = 0;
                 } else {
-                    throw GraalError.shouldNotReachHere("Non-null object constants must be in register");
+                    throw GraalError.shouldNotReachHere("Non-null object constants must be in a register");
                 }
                 break;
             default:
@@ -941,7 +955,7 @@
 
         @Override
         public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
-            Register nullRegister = crb.nullRegister;
+            Register nullRegister = crb.uncompressedNullRegister;
             if (!nullRegister.equals(Register.None)) {
                 emitConversion(asRegister(result), asRegister(input), nullRegister, masm);
             }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64ZapRegistersOp.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64ZapRegistersOp.java	Fri Jul 26 19:11:34 2019 -0400
@@ -34,6 +34,7 @@
 import org.graalvm.compiler.lir.asm.CompilationResultBuilder;
 import org.graalvm.compiler.lir.framemap.FrameMap;
 
+import jdk.vm.ci.amd64.AMD64Kind;
 import jdk.vm.ci.code.Register;
 import jdk.vm.ci.code.RegisterSaveLayout;
 import jdk.vm.ci.meta.JavaConstant;
@@ -66,7 +67,7 @@
         for (int i = 0; i < zappedRegisters.length; i++) {
             Register reg = zappedRegisters[i];
             if (reg != null) {
-                AMD64Move.const2reg(crb, masm, reg, zapValues[i]);
+                AMD64Move.const2reg(crb, masm, reg, zapValues[i], AMD64Kind.QWORD);
             }
         }
     }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/vector/AMD64VectorBinary.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/vector/AMD64VectorBinary.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,6 +35,7 @@
 import org.graalvm.compiler.asm.amd64.AMD64Assembler.VexRVMOp;
 import org.graalvm.compiler.asm.amd64.AMD64MacroAssembler;
 import org.graalvm.compiler.asm.amd64.AVXKind;
+import org.graalvm.compiler.lir.ConstantValue;
 import org.graalvm.compiler.lir.LIRFrameState;
 import org.graalvm.compiler.lir.LIRInstructionClass;
 import org.graalvm.compiler.lir.Opcode;
@@ -42,6 +43,7 @@
 import org.graalvm.compiler.lir.amd64.AMD64LIRInstruction;
 import org.graalvm.compiler.lir.asm.CompilationResultBuilder;
 
+import jdk.vm.ci.amd64.AMD64Kind;
 import jdk.vm.ci.meta.AllocatableValue;
 
 public class AMD64VectorBinary {
@@ -102,6 +104,38 @@
         }
     }
 
+    public static final class AVXBinaryConstFloatOp extends AMD64LIRInstruction {
+
+        public static final LIRInstructionClass<AVXBinaryConstFloatOp> TYPE = LIRInstructionClass.create(AVXBinaryConstFloatOp.class);
+
+        @Opcode private final VexRVMOp opcode;
+        private final AVXKind.AVXSize size;
+
+        @Def({REG}) protected AllocatableValue result;
+        @Use({REG}) protected AllocatableValue x;
+        protected ConstantValue y;
+
+        public AVXBinaryConstFloatOp(VexRVMOp opcode, AVXKind.AVXSize size, AllocatableValue result, AllocatableValue x, ConstantValue y) {
+            super(TYPE);
+            assert y.getPlatformKind() == AMD64Kind.SINGLE || y.getPlatformKind() == AMD64Kind.DOUBLE;
+            this.opcode = opcode;
+            this.size = size;
+            this.result = result;
+            this.x = x;
+            this.y = y;
+        }
+
+        @Override
+        public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
+            if (y.getPlatformKind() == AMD64Kind.SINGLE) {
+                opcode.emit(masm, size, asRegister(result), asRegister(x), (AMD64Address) crb.asFloatConstRef(y.getJavaConstant()));
+            } else {
+                assert y.getPlatformKind() == AMD64Kind.DOUBLE;
+                opcode.emit(masm, size, asRegister(result), asRegister(x), (AMD64Address) crb.asDoubleConstRef(y.getJavaConstant()));
+            }
+        }
+    }
+
     public static final class AVXBinaryMemoryOp extends AMD64LIRInstruction {
         public static final LIRInstructionClass<AVXBinaryMemoryOp> TYPE = LIRInstructionClass.create(AVXBinaryMemoryOp.class);
 
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/ConstantStackCastTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/ConstantStackCastTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -99,7 +99,7 @@
     }
 
     @Test
-    public void runByte() throws Throwable {
+    public void runByte() {
         runTest("testByte", (byte) 0);
     }
 
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/LIRTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/LIRTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -254,7 +254,7 @@
 
     @java.lang.annotation.Retention(RetentionPolicy.RUNTIME)
     @java.lang.annotation.Target(ElementType.METHOD)
-    public static @interface LIRIntrinsic {
+    public @interface LIRIntrinsic {
     }
 
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/LIRTestTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/LIRTestTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -54,7 +54,7 @@
     }
 
     @Test
-    public void runInt() throws Throwable {
+    public void runInt() {
         runTest("testGetOutput", Integer.MIN_VALUE, 0, supply(() -> new int[3]));
         runTest("testGetOutput", -1, Integer.MAX_VALUE, supply(() -> new int[3]));
         runTest("testGetOutput", 0, 42, supply(() -> new int[3]));
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/StackMoveTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/StackMoveTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -98,7 +98,7 @@
     }
 
     @Test
-    public void runInt() throws Throwable {
+    public void runInt() {
         runTest("testInt", Integer.MIN_VALUE, supply(() -> new int[4]));
         runTest("testInt", -1, supply(() -> new int[4]));
         runTest("testInt", 0, supply(() -> new int[4]));
@@ -125,7 +125,7 @@
     }
 
     @Test
-    public void runLong() throws Throwable {
+    public void runLong() {
         runTest("testLong", Long.MIN_VALUE, supply(() -> new long[3]));
         runTest("testLong", -1L, supply(() -> new long[3]));
         runTest("testLong", 0L, supply(() -> new long[3]));
@@ -152,7 +152,7 @@
     }
 
     @Test
-    public void runFloat() throws Throwable {
+    public void runFloat() {
         runTest("testFloat", Float.MIN_VALUE, supply(() -> new float[3]));
         runTest("testFloat", -1f, supply(() -> new float[3]));
         runTest("testFloat", -0.1f, supply(() -> new float[3]));
@@ -217,7 +217,7 @@
     }
 
     @Test
-    public void runShort() throws Throwable {
+    public void runShort() {
         runTest("testShort", Short.MIN_VALUE, supply(() -> new short[3]));
         runTest("testShort", (short) -1, supply(() -> new short[3]));
         runTest("testShort", (short) 0, supply(() -> new short[3]));
@@ -251,7 +251,7 @@
     }
 
     @Test
-    public void runByte() throws Throwable {
+    public void runByte() {
         runTest("testByte", Byte.MIN_VALUE, supply(() -> new byte[3]));
         runTest("testByte", (byte) -1, supply(() -> new byte[3]));
         runTest("testByte", (byte) 0, supply(() -> new byte[3]));
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/StackStoreLoadTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/StackStoreLoadTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2017, Red Hat Inc. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
@@ -139,7 +139,7 @@
     }
 
     @Test
-    public void runByte() throws Throwable {
+    public void runByte() {
         runTest("testByte", Byte.MIN_VALUE, supply(() -> new byte[3]));
         runTest("testByte", (byte) -1, supply(() -> new byte[3]));
         runTest("testByte", (byte) 0, supply(() -> new byte[3]));
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/LIRVerifier.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/LIRVerifier.java	Fri Jul 26 19:11:34 2019 -0400
@@ -25,7 +25,7 @@
 package org.graalvm.compiler.lir;
 
 import static org.graalvm.compiler.lir.LIRValueUtil.asVariable;
-import static org.graalvm.compiler.lir.LIRValueUtil.isJavaConstant;
+import static org.graalvm.compiler.lir.LIRValueUtil.isConstantValue;
 import static org.graalvm.compiler.lir.LIRValueUtil.isStackSlotValue;
 import static org.graalvm.compiler.lir.LIRValueUtil.isVariable;
 import static jdk.vm.ci.code.ValueUtil.asRegister;
@@ -242,7 +242,7 @@
         if ((isVariable(value) && flags.contains(OperandFlag.REG)) ||
             (isRegister(value) && flags.contains(OperandFlag.REG)) ||
             (isStackSlotValue(value) && flags.contains(OperandFlag.STACK)) ||
-            (isJavaConstant(value) && flags.contains(OperandFlag.CONST) && mode != OperandMode.DEF) ||
+            (isConstantValue(value) && flags.contains(OperandFlag.CONST) && mode != OperandMode.DEF) ||
             (isIllegal(value) && flags.contains(OperandFlag.ILLEGAL))) {
             return;
         }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/StandardOp.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/StandardOp.java	Fri Jul 26 19:11:34 2019 -0400
@@ -35,6 +35,7 @@
 
 import jdk.internal.vm.compiler.collections.EconomicSet;
 import org.graalvm.compiler.asm.Label;
+import org.graalvm.compiler.core.common.GraalOptions;
 import org.graalvm.compiler.core.common.cfg.AbstractBlockBase;
 import org.graalvm.compiler.debug.GraalError;
 import org.graalvm.compiler.lir.asm.CompilationResultBuilder;
@@ -154,7 +155,7 @@
         @Override
         public void emitCode(CompilationResultBuilder crb) {
             if (align) {
-                crb.asm.align(crb.target.wordSize * 2);
+                crb.asm.align(GraalOptions.LoopHeaderAlignment.getValue(crb.getOptions()));
             }
             crb.asm.bind(label);
         }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/asm/CompilationResultBuilder.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/asm/CompilationResultBuilder.java	Fri Jul 26 19:11:34 2019 -0400
@@ -127,7 +127,7 @@
     public final Assembler asm;
     public final DataBuilder dataBuilder;
     public final CompilationResult compilationResult;
-    public final Register nullRegister;
+    public final Register uncompressedNullRegister;
     public final TargetDescription target;
     public final CodeCacheProvider codeCache;
     public final ForeignCallsProvider foreignCalls;
@@ -171,17 +171,44 @@
      */
     private boolean conservativeLabelOffsets = false;
 
-    public final boolean mustReplaceWithNullRegister(JavaConstant nullConstant) {
-        return !nullRegister.equals(Register.None) && JavaConstant.NULL_POINTER.equals(nullConstant);
+    public final boolean mustReplaceWithUncompressedNullRegister(JavaConstant nullConstant) {
+        return !uncompressedNullRegister.equals(Register.None) && JavaConstant.NULL_POINTER.equals(nullConstant);
     }
 
-    public CompilationResultBuilder(CodeCacheProvider codeCache, ForeignCallsProvider foreignCalls, FrameMap frameMap, Assembler asm, DataBuilder dataBuilder, FrameContext frameContext,
-                    OptionValues options, DebugContext debug, CompilationResult compilationResult, Register nullRegister) {
-        this(codeCache, foreignCalls, frameMap, asm, dataBuilder, frameContext, options, debug, compilationResult, nullRegister, EconomicMap.create(Equivalence.DEFAULT));
+    public CompilationResultBuilder(CodeCacheProvider codeCache,
+                    ForeignCallsProvider foreignCalls,
+                    FrameMap frameMap,
+                    Assembler asm,
+                    DataBuilder dataBuilder,
+                    FrameContext frameContext,
+                    OptionValues options,
+                    DebugContext debug,
+                    CompilationResult compilationResult,
+                    Register uncompressedNullRegister) {
+        this(codeCache,
+                        foreignCalls,
+                        frameMap,
+                        asm,
+                        dataBuilder,
+                        frameContext,
+                        options,
+                        debug,
+                        compilationResult,
+                        uncompressedNullRegister,
+                        EconomicMap.create(Equivalence.DEFAULT));
     }
 
-    public CompilationResultBuilder(CodeCacheProvider codeCache, ForeignCallsProvider foreignCalls, FrameMap frameMap, Assembler asm, DataBuilder dataBuilder, FrameContext frameContext,
-                    OptionValues options, DebugContext debug, CompilationResult compilationResult, Register nullRegister, EconomicMap<Constant, Data> dataCache) {
+    public CompilationResultBuilder(CodeCacheProvider codeCache,
+                    ForeignCallsProvider foreignCalls,
+                    FrameMap frameMap,
+                    Assembler asm,
+                    DataBuilder dataBuilder,
+                    FrameContext frameContext,
+                    OptionValues options,
+                    DebugContext debug,
+                    CompilationResult compilationResult,
+                    Register uncompressedNullRegister,
+                    EconomicMap<Constant, Data> dataCache) {
         this.target = codeCache.getTarget();
         this.codeCache = codeCache;
         this.foreignCalls = foreignCalls;
@@ -189,7 +216,7 @@
         this.asm = asm;
         this.dataBuilder = dataBuilder;
         this.compilationResult = compilationResult;
-        this.nullRegister = nullRegister;
+        this.uncompressedNullRegister = uncompressedNullRegister;
         this.frameContext = frameContext;
         this.options = options;
         this.debug = debug;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/asm/CompilationResultBuilderFactory.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/asm/CompilationResultBuilderFactory.java	Fri Jul 26 19:11:34 2019 -0400
@@ -52,8 +52,8 @@
 
         @Override
         public CompilationResultBuilder createBuilder(CodeCacheProvider codeCache, ForeignCallsProvider foreignCalls, FrameMap frameMap, Assembler asm, DataBuilder dataBuilder,
-                        FrameContext frameContext, OptionValues options, DebugContext debug, CompilationResult compilationResult, Register nullRegister) {
-            return new CompilationResultBuilder(codeCache, foreignCalls, frameMap, asm, dataBuilder, frameContext, options, debug, compilationResult, nullRegister);
+                        FrameContext frameContext, OptionValues options, DebugContext debug, CompilationResult compilationResult, Register uncompressedNullRegister) {
+            return new CompilationResultBuilder(codeCache, foreignCalls, frameMap, asm, dataBuilder, frameContext, options, debug, compilationResult, uncompressedNullRegister);
         }
     };
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/gen/LIRGenerator.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/gen/LIRGenerator.java	Fri Jul 26 19:11:34 2019 -0400
@@ -60,9 +60,9 @@
 import org.graalvm.compiler.lir.StandardOp.BlockEndOp;
 import org.graalvm.compiler.lir.StandardOp.LabelOp;
 import org.graalvm.compiler.lir.StandardOp.SaveRegistersOp;
-import org.graalvm.compiler.lir.hashing.Hasher;
 import org.graalvm.compiler.lir.SwitchStrategy;
 import org.graalvm.compiler.lir.Variable;
+import org.graalvm.compiler.lir.hashing.Hasher;
 import org.graalvm.compiler.options.Option;
 import org.graalvm.compiler.options.OptionKey;
 import org.graalvm.compiler.options.OptionType;
@@ -230,11 +230,31 @@
     }
 
     @Override
+    public Variable emitReadRegister(Register register, ValueKind<?> kind) {
+        return emitMove(register.asValue(kind));
+    }
+
+    @Override
+    public void emitWriteRegister(Register dst, Value src, ValueKind<?> kind) {
+        emitMove(dst.asValue(kind), src);
+    }
+
+    @Override
     public void emitMoveConstant(AllocatableValue dst, Constant src) {
         append(moveFactory.createLoad(dst, src));
     }
 
     @Override
+    public boolean canInlineConstant(Constant constant) {
+        return moveFactory.canInlineConstant(constant);
+    }
+
+    @Override
+    public boolean mayEmbedConstantLoad(Constant constant) {
+        return moveFactory.mayEmbedConstantLoad(constant);
+    }
+
+    @Override
     public Value emitConstant(LIRKind kind, Constant constant) {
         if (moveFactory.canInlineConstant(constant)) {
             return new ConstantValue(toRegisterKind(kind), constant);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/gen/LIRGeneratorTool.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/gen/LIRGeneratorTool.java	Fri Jul 26 19:11:34 2019 -0400
@@ -65,14 +65,22 @@
     interface MoveFactory {
 
         /**
+         * Checks whether the loading of the supplied constant can be deferred until usage.
+         */
+        @SuppressWarnings("unused")
+        default boolean mayEmbedConstantLoad(Constant constant) {
+            return false;
+        }
+
+        /**
          * Checks whether the supplied constant can be used without loading it into a register for
          * most operations, i.e., for commonly used arithmetic, logical, and comparison operations.
          *
-         * @param c The constant to check.
+         * @param constant The constant to check.
          * @return True if the constant can be used directly, false if the constant needs to be in a
          *         register.
          */
-        boolean canInlineConstant(Constant c);
+        boolean canInlineConstant(Constant constant);
 
         /**
          * @param constant The constant that might be moved to a stack slot.
@@ -130,6 +138,10 @@
 
     BlockScope getBlockScope(AbstractBlockBase<?> block);
 
+    boolean canInlineConstant(Constant constant);
+
+    boolean mayEmbedConstantLoad(Constant constant);
+
     Value emitConstant(LIRKind kind, Constant constant);
 
     Value emitJavaConstant(JavaConstant constant);
@@ -192,6 +204,10 @@
 
     void emitMove(AllocatableValue dst, Value src);
 
+    Variable emitReadRegister(Register register, ValueKind<?> kind);
+
+    void emitWriteRegister(Register dst, Value src, ValueKind<?> wordStamp);
+
     void emitMoveConstant(AllocatableValue dst, Constant src);
 
     Variable emitAddress(AllocatableValue stackslot);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/ssa/SSAVerifier.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/ssa/SSAVerifier.java	Fri Jul 26 19:11:34 2019 -0400
@@ -26,7 +26,7 @@
 package org.graalvm.compiler.lir.ssa;
 
 import static jdk.vm.ci.code.ValueUtil.isRegister;
-import static org.graalvm.compiler.lir.LIRValueUtil.isJavaConstant;
+import static org.graalvm.compiler.lir.LIRValueUtil.isConstantValue;
 import static org.graalvm.compiler.lir.LIRValueUtil.isStackSlotValue;
 
 import java.util.BitSet;
@@ -137,7 +137,7 @@
     }
 
     private static boolean shouldProcess(Value value) {
-        return !value.equals(Value.ILLEGAL) && !isJavaConstant(value) && !isRegister(value) && !isStackSlotValue(value);
+        return !value.equals(Value.ILLEGAL) && !isConstantValue(value) && !isRegister(value) && !isStackSlotValue(value);
     }
 
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop.test/src/org/graalvm/compiler/loop/test/LoopPartialUnrollTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop.test/src/org/graalvm/compiler/loop/test/LoopPartialUnrollTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -26,7 +26,9 @@
 
 import java.util.ListIterator;
 
+import org.graalvm.compiler.api.directives.GraalDirectives;
 import org.graalvm.compiler.core.common.CompilationIdentifier;
+import org.graalvm.compiler.core.common.GraalOptions;
 import org.graalvm.compiler.core.test.GraalCompilerTest;
 import org.graalvm.compiler.debug.DebugContext;
 import org.graalvm.compiler.graph.iterators.NodeIterable;
@@ -216,6 +218,25 @@
         test("testSignExtensionSnippet", 9L);
     }
 
+    public static Object objectPhi(int n) {
+        Integer v = Integer.valueOf(200);
+        GraalDirectives.blackhole(v); // Prevents PEA
+        Integer r = 1;
+
+        for (int i = 0; iterationCount(100, i < n); i++) {
+            GraalDirectives.blackhole(r); // Create a phi of two loop invariants
+            r = v;
+        }
+
+        return r;
+    }
+
+    @Test
+    public void testObjectPhi() {
+        OptionValues options = new OptionValues(getInitialOptions(), GraalOptions.LoopPeeling, false);
+        test(options, "objectPhi", 1);
+    }
+
     @Override
     protected Suites createSuites(OptionValues opts) {
         Suites suites = super.createSuites(opts).copy();
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopEx.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopEx.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -344,7 +344,7 @@
                 }
             }
         }
-        LoopFragment.computeNodes(branchNodes, branch.graph(), blocks, exits);
+        LoopFragment.computeNodes(branchNodes, branch.graph(), this, blocks, exits);
     }
 
     public EconomicMap<Node, InductionVariable> getInductionVariables() {
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopFragment.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopFragment.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,12 +25,11 @@
 package org.graalvm.compiler.loop;
 
 import java.util.ArrayDeque;
-import java.util.Collections;
 import java.util.Deque;
 import java.util.Iterator;
 
 import jdk.internal.vm.compiler.collections.EconomicMap;
-import org.graalvm.compiler.debug.GraalError;
+import org.graalvm.compiler.core.common.cfg.AbstractControlFlowGraph;
 import org.graalvm.compiler.graph.Graph;
 import org.graalvm.compiler.graph.Graph.DuplicationReplacement;
 import org.graalvm.compiler.graph.Node;
@@ -42,18 +41,15 @@
 import org.graalvm.compiler.nodes.FixedNode;
 import org.graalvm.compiler.nodes.FrameState;
 import org.graalvm.compiler.nodes.GuardNode;
-import org.graalvm.compiler.nodes.GuardPhiNode;
 import org.graalvm.compiler.nodes.GuardProxyNode;
 import org.graalvm.compiler.nodes.Invoke;
+import org.graalvm.compiler.nodes.LoopBeginNode;
 import org.graalvm.compiler.nodes.LoopExitNode;
 import org.graalvm.compiler.nodes.MergeNode;
-import org.graalvm.compiler.nodes.NodeView;
 import org.graalvm.compiler.nodes.PhiNode;
 import org.graalvm.compiler.nodes.ProxyNode;
 import org.graalvm.compiler.nodes.StructuredGraph;
 import org.graalvm.compiler.nodes.ValueNode;
-import org.graalvm.compiler.nodes.ValuePhiNode;
-import org.graalvm.compiler.nodes.ValueProxyNode;
 import org.graalvm.compiler.nodes.VirtualState;
 import org.graalvm.compiler.nodes.cfg.Block;
 import org.graalvm.compiler.nodes.cfg.ControlFlowGraph;
@@ -199,17 +195,7 @@
         }
     }
 
-    protected static NodeBitMap computeNodes(Graph graph, Iterable<AbstractBeginNode> blocks) {
-        return computeNodes(graph, blocks, Collections.emptyList());
-    }
-
-    protected static NodeBitMap computeNodes(Graph graph, Iterable<AbstractBeginNode> blocks, Iterable<AbstractBeginNode> earlyExits) {
-        final NodeBitMap nodes = graph.createNodeBitMap();
-        computeNodes(nodes, graph, blocks, earlyExits);
-        return nodes;
-    }
-
-    protected static void computeNodes(NodeBitMap nodes, Graph graph, Iterable<AbstractBeginNode> blocks, Iterable<AbstractBeginNode> earlyExits) {
+    protected static void computeNodes(NodeBitMap nodes, Graph graph, LoopEx loop, Iterable<AbstractBeginNode> blocks, Iterable<AbstractBeginNode> earlyExits) {
         for (AbstractBeginNode b : blocks) {
             if (b.isDeleted()) {
                 continue;
@@ -261,11 +247,11 @@
             for (Node n : b.getBlockNodes()) {
                 if (n instanceof CommitAllocationNode) {
                     for (VirtualObjectNode obj : ((CommitAllocationNode) n).getVirtualObjects()) {
-                        markFloating(worklist, obj, nodes, nonLoopNodes);
+                        markFloating(worklist, loop, obj, nodes, nonLoopNodes);
                     }
                 }
                 if (n instanceof MonitorEnterNode) {
-                    markFloating(worklist, ((MonitorEnterNode) n).getMonitorId(), nodes, nonLoopNodes);
+                    markFloating(worklist, loop, ((MonitorEnterNode) n).getMonitorId(), nodes, nonLoopNodes);
                 }
                 if (n instanceof AbstractMergeNode) {
                     /*
@@ -274,12 +260,12 @@
                      */
                     for (PhiNode phi : ((AbstractMergeNode) n).phis()) {
                         for (Node usage : phi.usages()) {
-                            markFloating(worklist, usage, nodes, nonLoopNodes);
+                            markFloating(worklist, loop, usage, nodes, nonLoopNodes);
                         }
                     }
                 }
                 for (Node usage : n.usages()) {
-                    markFloating(worklist, usage, nodes, nonLoopNodes);
+                    markFloating(worklist, loop, usage, nodes, nonLoopNodes);
                 }
             }
         }
@@ -331,10 +317,14 @@
         workList.push(entry);
     }
 
-    private static void markFloating(Deque<WorkListEntry> workList, Node start, NodeBitMap loopNodes, NodeBitMap nonLoopNodes) {
+    private static void markFloating(Deque<WorkListEntry> workList, LoopEx loop, Node start, NodeBitMap loopNodes, NodeBitMap nonLoopNodes) {
         if (isLoopNode(start, loopNodes, nonLoopNodes).isKnown()) {
             return;
         }
+
+        LoopBeginNode loopBeginNode = loop.loopBegin();
+        ControlFlowGraph cfg = loop.loopsData().getCFG();
+
         pushWorkList(workList, start, loopNodes);
         while (!workList.isEmpty()) {
             WorkListEntry currentEntry = workList.peek();
@@ -352,13 +342,27 @@
                 workList.pop();
                 boolean isLoopNode = currentEntry.isLoopNode;
                 Node current = currentEntry.n;
-                if (!isLoopNode && current instanceof GuardNode) {
-                    /*
-                     * (gd) this is only OK if we are not going to make loop transforms based on
-                     * this
-                     */
-                    assert !((GuardNode) current).graph().hasValueProxies();
-                    isLoopNode = true;
+                if (!isLoopNode && current instanceof GuardNode && !current.hasUsages()) {
+                    GuardNode guard = (GuardNode) current;
+                    if (isLoopNode(guard.getCondition(), loopNodes, nonLoopNodes) != TriState.FALSE) {
+                        ValueNode anchor = guard.getAnchor().asNode();
+                        TriState isAnchorInLoop = isLoopNode(anchor, loopNodes, nonLoopNodes);
+                        if (isAnchorInLoop != TriState.FALSE) {
+                            if (!(anchor instanceof LoopExitNode && ((LoopExitNode) anchor).loopBegin() == loopBeginNode)) {
+                                /*
+                                 * (gd) this is wrong in general, it's completely avoidable while we
+                                 * are doing loop transforms using ValueProxies. If it happens after
+                                 * it could still cause problem.
+                                 */
+                                assert !((GuardNode) current).graph().hasValueProxies();
+                                isLoopNode = true;
+                            }
+                        } else if (AbstractControlFlowGraph.strictlyDominates(cfg.blockFor(anchor), cfg.blockFor(loopBeginNode))) {
+                            // The anchor is above the loop. The no-usage guard can potentially be
+                            // scheduled inside the loop.
+                            isLoopNode = true;
+                        }
+                    }
                 }
                 if (isLoopNode) {
                     loopNodes.mark(current);
@@ -467,14 +471,7 @@
                     final ValueNode replaceWith;
                     ValueNode newVpn = prim(newEarlyExitIsLoopExit ? vpn : vpn.value());
                     if (newVpn != null) {
-                        PhiNode phi;
-                        if (vpn instanceof ValueProxyNode) {
-                            phi = graph.addWithoutUnique(new ValuePhiNode(vpn.stamp(NodeView.DEFAULT), merge));
-                        } else if (vpn instanceof GuardProxyNode) {
-                            phi = graph.addWithoutUnique(new GuardPhiNode(merge));
-                        } else {
-                            throw GraalError.shouldNotReachHere();
-                        }
+                        PhiNode phi = vpn.createPhi(merge);
                         phi.addInput(vpn);
                         phi.addInput(newVpn);
                         replaceWith = phi;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopFragmentInside.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopFragmentInside.java	Fri Jul 26 19:11:34 2019 -0400
@@ -169,12 +169,13 @@
         LoopBeginNode mainLoopBegin = loop.loopBegin();
         ArrayList<ValueNode> backedgeValues = new ArrayList<>();
         for (PhiNode mainPhiNode : mainLoopBegin.phis()) {
-            ValueNode duplicatedNode = getDuplicatedNode(mainPhiNode.valueAt(1));
+            ValueNode originalNode = mainPhiNode.valueAt(1);
+            ValueNode duplicatedNode = getDuplicatedNode(originalNode);
             if (duplicatedNode == null) {
-                if (mainLoopBegin.isPhiAtMerge(mainPhiNode.valueAt(1))) {
-                    duplicatedNode = ((PhiNode) (mainPhiNode.valueAt(1))).valueAt(1);
+                if (mainLoopBegin.isPhiAtMerge(originalNode)) {
+                    duplicatedNode = ((PhiNode) (originalNode)).valueAt(1);
                 } else {
-                    assert mainPhiNode.valueAt(1).isConstant() : mainPhiNode.valueAt(1);
+                    assert originalNode.isConstant() || loop.isOutsideLoop(originalNode) : "Not duplicated node " + originalNode;
                 }
             }
             backedgeValues.add(duplicatedNode);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopFragmentWhole.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopFragmentWhole.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -64,7 +64,9 @@
     public NodeBitMap nodes() {
         if (nodes == null) {
             Loop<Block> loop = loop().loop();
-            nodes = LoopFragment.computeNodes(graph(), LoopFragment.toHirBlocks(loop.getBlocks()), LoopFragment.toHirBlocks(loop.getLoopExits()));
+            NodeBitMap loopNodes = graph().createNodeBitMap();
+            LoopFragment.computeNodes(loopNodes, graph(), loop(), LoopFragment.toHirBlocks(loop.getBlocks()), LoopFragment.toHirBlocks(loop.getLoopExits()));
+            nodes = loopNodes;
         }
         return nodes;
     }
@@ -110,7 +112,6 @@
 
     @Override
     public void insertBefore(LoopEx loop) {
-        // TODO Auto-generated method stub
-
+        // nothing to do
     }
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/AbstractBeginNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/AbstractBeginNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -59,21 +59,20 @@
         Node next = from;
         while (next != null) {
             if (next instanceof AbstractBeginNode) {
-                AbstractBeginNode begin = (AbstractBeginNode) next;
-                return begin;
+                return (AbstractBeginNode) next;
             }
             next = next.predecessor();
         }
         return null;
     }
 
-    private void evacuateGuards(FixedNode evacuateFrom) {
+    private void evacuateAnchored(FixedNode evacuateFrom) {
         if (!hasNoUsages()) {
             AbstractBeginNode prevBegin = prevBegin(evacuateFrom);
             assert prevBegin != null;
-            for (Node anchored : anchored().snapshot()) {
-                anchored.replaceFirstInput(this, prevBegin);
-            }
+            replaceAtUsages(InputType.Anchor, prevBegin);
+            replaceAtUsages(InputType.Guard, prevBegin);
+            assert anchored().isEmpty() : anchored().snapshot();
         }
     }
 
@@ -82,7 +81,7 @@
     }
 
     public void prepareDelete(FixedNode evacuateFrom) {
-        evacuateGuards(evacuateFrom);
+        evacuateAnchored(evacuateFrom);
     }
 
     @Override
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/ConstantNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/ConstantNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,11 +38,14 @@
 import org.graalvm.compiler.debug.GraalError;
 import org.graalvm.compiler.graph.Node;
 import org.graalvm.compiler.graph.NodeClass;
+import org.graalvm.compiler.graph.NodeMap;
 import org.graalvm.compiler.graph.iterators.NodeIterable;
 import org.graalvm.compiler.lir.ConstantValue;
+import org.graalvm.compiler.lir.gen.LIRGeneratorTool;
 import org.graalvm.compiler.nodeinfo.NodeInfo;
 import org.graalvm.compiler.nodeinfo.Verbosity;
 import org.graalvm.compiler.nodes.calc.FloatingNode;
+import org.graalvm.compiler.nodes.cfg.Block;
 import org.graalvm.compiler.nodes.spi.ArrayLengthProvider;
 import org.graalvm.compiler.nodes.spi.LIRLowerable;
 import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
@@ -143,14 +146,32 @@
 
     @Override
     public void generate(NodeLIRBuilderTool gen) {
-        LIRKind kind = gen.getLIRGeneratorTool().getLIRKind(stamp(NodeView.DEFAULT));
+        LIRGeneratorTool lirTool = gen.getLIRGeneratorTool();
+        LIRKind kind = lirTool.getLIRKind(stamp(NodeView.DEFAULT));
         if (onlyUsedInVirtualState()) {
             gen.setResult(this, new ConstantValue(kind, value));
+        } else if (lirTool.canInlineConstant(value) || (lirTool.mayEmbedConstantLoad(value) && hasExactlyOneUsage() && onlyUsedInCurrentBlock())) {
+            gen.setResult(this, new ConstantValue(lirTool.toRegisterKind(kind), value));
         } else {
             gen.setResult(this, gen.getLIRGeneratorTool().emitConstant(kind, value));
         }
     }
 
+    /**
+     * Expecting false for loop invariant.
+     */
+    private boolean onlyUsedInCurrentBlock() {
+        assert graph().getLastSchedule() != null;
+        NodeMap<Block> nodeBlockMap = graph().getLastSchedule().getNodeToBlockMap();
+        Block currentBlock = nodeBlockMap.get(this);
+        for (Node usage : usages()) {
+            if (currentBlock != nodeBlockMap.get(usage)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
     private boolean onlyUsedInVirtualState() {
         for (Node n : this.usages()) {
             if (n instanceof VirtualState) {
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/EntryMarkerNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/EntryMarkerNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -30,7 +30,9 @@
 
 import org.graalvm.compiler.debug.GraalError;
 import org.graalvm.compiler.graph.IterableNodeType;
+import org.graalvm.compiler.graph.Node;
 import org.graalvm.compiler.graph.NodeClass;
+import org.graalvm.compiler.graph.iterators.NodeIterable;
 import org.graalvm.compiler.nodeinfo.NodeInfo;
 import org.graalvm.compiler.nodes.spi.LIRLowerable;
 import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
@@ -51,4 +53,24 @@
     public void generate(NodeLIRBuilderTool gen) {
         throw new GraalError("OnStackReplacementNode should not survive");
     }
+
+    @Override
+    public NodeIterable<Node> anchored() {
+        return super.anchored().filter(n -> {
+            if (n instanceof EntryProxyNode) {
+                EntryProxyNode proxyNode = (EntryProxyNode) n;
+                return proxyNode.proxyPoint != this;
+            }
+            return true;
+        });
+    }
+
+    @Override
+    public void prepareDelete(FixedNode evacuateFrom) {
+        for (Node usage : usages().filter(EntryProxyNode.class).snapshot()) {
+            EntryProxyNode proxy = (EntryProxyNode) usage;
+            proxy.replaceAndDelete(proxy.value());
+        }
+        super.prepareDelete(evacuateFrom);
+    }
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/FixedGuardNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/FixedGuardNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -30,19 +30,22 @@
 
 import org.graalvm.compiler.debug.DebugCloseable;
 import org.graalvm.compiler.graph.IterableNodeType;
+import org.graalvm.compiler.graph.Node;
 import org.graalvm.compiler.graph.NodeClass;
 import org.graalvm.compiler.graph.NodeSourcePosition;
 import org.graalvm.compiler.graph.spi.SimplifierTool;
 import org.graalvm.compiler.nodeinfo.NodeInfo;
+import org.graalvm.compiler.nodes.calc.IntegerEqualsNode;
 import org.graalvm.compiler.nodes.spi.Lowerable;
 import org.graalvm.compiler.nodes.spi.LoweringTool;
+import org.graalvm.compiler.nodes.spi.SwitchFoldable;
 
 import jdk.vm.ci.meta.DeoptimizationAction;
 import jdk.vm.ci.meta.DeoptimizationReason;
 import jdk.vm.ci.meta.SpeculationLog;
 
 @NodeInfo(nameTemplate = "FixedGuard(!={p#negated}) {p#reason/s}", allowedUsageTypes = Guard, size = SIZE_2, cycles = CYCLES_2)
-public final class FixedGuardNode extends AbstractFixedGuardNode implements Lowerable, IterableNodeType {
+public final class FixedGuardNode extends AbstractFixedGuardNode implements Lowerable, IterableNodeType, SwitchFoldable {
     public static final NodeClass<FixedGuardNode> TYPE = NodeClass.create(FixedGuardNode.class);
 
     public FixedGuardNode(LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action) {
@@ -115,4 +118,92 @@
     public boolean canDeoptimize() {
         return true;
     }
+
+    @Override
+    public Node getNextSwitchFoldableBranch() {
+        return next();
+    }
+
+    @Override
+    public boolean isInSwitch(ValueNode switchValue) {
+        return hasNoUsages() && isNegated() && SwitchFoldable.maybeIsInSwitch(condition()) && SwitchFoldable.sameSwitchValue(condition(), switchValue);
+    }
+
+    @Override
+    public void cutOffCascadeNode() {
+        /* nop */
+    }
+
+    @Override
+    public void cutOffLowestCascadeNode() {
+        setNext(null);
+    }
+
+    @Override
+    public boolean isDefaultSuccessor(AbstractBeginNode beginNode) {
+        return beginNode.next() == next();
+    }
+
+    @Override
+    public AbstractBeginNode getDefault() {
+        FixedNode defaultNode = next();
+        setNext(null);
+        return BeginNode.begin(defaultNode);
+    }
+
+    @Override
+    public ValueNode switchValue() {
+        if (SwitchFoldable.maybeIsInSwitch(condition())) {
+            return ((IntegerEqualsNode) condition()).getX();
+        }
+        return null;
+    }
+
+    @Override
+    public boolean isNonInitializedProfile() {
+        // @formatter:off
+        // Checkstyle: stop
+        /*
+         * These nodes can appear in non initialized cascades. Though they are technically profiled
+         * nodes, their presence does not really prevent us from constructing a uniform distribution
+         * for the new switch, while keeping these to probability 0. Furthermore, these can be the
+         * result of the pattern:
+         * if (c) {
+         *     CompilerDirectives.transferToInterpreter();
+         * }
+         * Since we cannot differentiate this case from, say, a guard created because profiling
+         * determined that the branch was never taken, and given what we saw before, we will
+         * consider all fixedGuards as nodes with no profiles for switch folding purposes.
+         */
+        // Checkstyle: resume
+        // @formatter:on
+        return true;
+    }
+
+    @Override
+    public int intKeyAt(int i) {
+        assert i == 0;
+        return ((IntegerEqualsNode) condition()).getY().asJavaConstant().asInt();
+    }
+
+    @Override
+    public double keyProbability(int i) {
+        return 0;
+    }
+
+    @Override
+    public AbstractBeginNode keySuccessor(int i) {
+        DeoptimizeNode deopt = new DeoptimizeNode(getAction(), getReason(), getSpeculation());
+        deopt.setNodeSourcePosition(getNodeSourcePosition());
+        AbstractBeginNode begin = new BeginNode();
+        // Link the two nodes, but do not add them to the graph yet, so we do not need to remove
+        // them on an abort.
+        begin.next = deopt;
+        return begin;
+    }
+
+    @Override
+    public double defaultProbability() {
+        return 1.0d;
+    }
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/GraphDecoder.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/GraphDecoder.java	Fri Jul 26 19:11:34 2019 -0400
@@ -319,7 +319,7 @@
         public static final NodeClass<ProxyPlaceholder> TYPE = NodeClass.create(ProxyPlaceholder.class);
 
         @Input ValueNode value;
-        @Input(InputType.Unchecked) Node proxyPoint;
+        @Input(InputType.Association) Node proxyPoint;
 
         public ProxyPlaceholder(ValueNode value, MergeNode proxyPoint) {
             super(TYPE, value.stamp(NodeView.DEFAULT));
@@ -884,14 +884,7 @@
 
                 if (!merge.isPhiAtMerge(existing)) {
                     /* Now we have two different values, so we need to create a phi node. */
-                    PhiNode phi;
-                    if (proxy instanceof ValueProxyNode) {
-                        phi = graph.addWithoutUnique(new ValuePhiNode(proxy.stamp(NodeView.DEFAULT), merge));
-                    } else if (proxy instanceof GuardProxyNode) {
-                        phi = graph.addWithoutUnique(new GuardPhiNode(merge));
-                    } else {
-                        throw GraalError.shouldNotReachHere();
-                    }
+                    PhiNode phi = proxy.createPhi(merge);
                     /* Add the inputs from all previous exits. */
                     for (int j = 0; j < merge.phiPredecessorCount() - 1; j++) {
                         phi.addInput(existing);
@@ -1336,6 +1329,11 @@
      * @param methodScope The current method.
      */
     protected void cleanupGraph(MethodScope methodScope) {
+        for (MergeNode merge : graph.getNodes(MergeNode.TYPE)) {
+            for (ProxyPlaceholder placeholder : merge.usages().filter(ProxyPlaceholder.class).snapshot()) {
+                placeholder.replaceAndDelete(placeholder.value);
+            }
+        }
         assert verifyEdges();
     }
 
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/GuardProxyNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/GuardProxyNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -62,6 +62,11 @@
     }
 
     @Override
+    public PhiNode createPhi(AbstractMergeNode merge) {
+        return graph().addWithoutUnique(new GuardPhiNode(merge));
+    }
+
+    @Override
     public Node getOriginalNode() {
         return (value == null ? null : value.asNode());
     }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/IfNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/IfNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -42,6 +42,7 @@
 import org.graalvm.compiler.core.common.calc.Condition;
 import org.graalvm.compiler.core.common.type.FloatStamp;
 import org.graalvm.compiler.core.common.type.IntegerStamp;
+import org.graalvm.compiler.core.common.type.PrimitiveStamp;
 import org.graalvm.compiler.core.common.type.Stamp;
 import org.graalvm.compiler.core.common.type.StampFactory;
 import org.graalvm.compiler.debug.CounterKey;
@@ -71,8 +72,10 @@
 import org.graalvm.compiler.nodes.java.LoadFieldNode;
 import org.graalvm.compiler.nodes.spi.LIRLowerable;
 import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
+import org.graalvm.compiler.nodes.spi.SwitchFoldable;
 import org.graalvm.compiler.nodes.util.GraphUtil;
 
+import jdk.vm.ci.code.CodeUtil;
 import jdk.vm.ci.meta.Constant;
 import jdk.vm.ci.meta.JavaConstant;
 import jdk.vm.ci.meta.JavaKind;
@@ -87,7 +90,7 @@
  * of a comparison.
  */
 @NodeInfo(cycles = CYCLES_1, size = SIZE_2, sizeRationale = "2 jmps")
-public final class IfNode extends ControlSplitNode implements Simplifiable, LIRLowerable {
+public final class IfNode extends ControlSplitNode implements Simplifiable, LIRLowerable, SwitchFoldable {
     public static final NodeClass<IfNode> TYPE = NodeClass.create(IfNode.class);
 
     private static final CounterKey CORRECTED_PROBABILITIES = DebugContext.counter("CorrectedProbabilities");
@@ -297,6 +300,10 @@
             return;
         }
 
+        if (switchTransformationOptimization(tool)) {
+            return;
+        }
+
         if (falseSuccessor().hasNoUsages() && (!(falseSuccessor() instanceof LoopExitNode)) && falseSuccessor().next() instanceof IfNode &&
                         !(((IfNode) falseSuccessor().next()).falseSuccessor() instanceof LoopExitNode)) {
             AbstractBeginNode intermediateBegin = falseSuccessor();
@@ -454,6 +461,70 @@
         return true;
     }
 
+    // SwitchFoldable implementation.
+
+    @Override
+    public Node getNextSwitchFoldableBranch() {
+        return falseSuccessor();
+    }
+
+    @Override
+    public boolean isInSwitch(ValueNode switchValue) {
+        return SwitchFoldable.maybeIsInSwitch(condition()) && SwitchFoldable.sameSwitchValue(condition(), switchValue);
+    }
+
+    @Override
+    public void cutOffCascadeNode() {
+        setTrueSuccessor(null);
+    }
+
+    @Override
+    public void cutOffLowestCascadeNode() {
+        setFalseSuccessor(null);
+        setTrueSuccessor(null);
+    }
+
+    @Override
+    public AbstractBeginNode getDefault() {
+        return falseSuccessor();
+    }
+
+    @Override
+    public ValueNode switchValue() {
+        if (SwitchFoldable.maybeIsInSwitch(condition())) {
+            return ((IntegerEqualsNode) condition()).getX();
+        }
+        return null;
+    }
+
+    @Override
+    public boolean isNonInitializedProfile() {
+        return getTrueSuccessorProbability() == 0.5d;
+    }
+
+    @Override
+    public int intKeyAt(int i) {
+        assert i == 0;
+        return ((IntegerEqualsNode) condition()).getY().asJavaConstant().asInt();
+    }
+
+    @Override
+    public double keyProbability(int i) {
+        assert i == 0;
+        return getTrueSuccessorProbability();
+    }
+
+    @Override
+    public AbstractBeginNode keySuccessor(int i) {
+        assert i == 0;
+        return trueSuccessor();
+    }
+
+    @Override
+    public double defaultProbability() {
+        return 1.0d - getTrueSuccessorProbability();
+    }
+
     /**
      * Try to optimize this as if it were a {@link ConditionalNode}.
      */
@@ -606,6 +677,50 @@
                         }
                     }
                 }
+            } else if (y instanceof PrimitiveConstant && ((PrimitiveConstant) y).asLong() < 0 && falseSuccessor().next() instanceof IfNode) {
+                IfNode ifNode2 = (IfNode) falseSuccessor().next();
+                AbstractBeginNode falseSucc = ifNode2.falseSuccessor();
+                AbstractBeginNode trueSucc = ifNode2.trueSuccessor();
+                IntegerBelowNode below = null;
+                if (ifNode2.condition() instanceof IntegerLessThanNode) {
+                    ValueNode x = lessThan.getX();
+                    IntegerLessThanNode lessThan2 = (IntegerLessThanNode) ifNode2.condition();
+                    /*
+                     * Convert x >= -C1 && x < C2, represented as !(x < -C1) && x < C2, into an
+                     * unsigned compare. This condition is equivalent to x + C1 |<| C1 + C2 if C1 +
+                     * C2 does not overflow.
+                     */
+                    Constant c2 = lessThan2.getY().stamp(view).asConstant();
+                    if (lessThan2.getX() == x && c2 instanceof PrimitiveConstant && ((PrimitiveConstant) c2).asLong() > 0 &&
+                                    x.stamp(view).isCompatible(lessThan.getY().stamp(view)) &&
+                                    x.stamp(view).isCompatible(lessThan2.getY().stamp(view)) &&
+                                    sameDestination(trueSuccessor(), ifNode2.falseSuccessor)) {
+                        long newLimitValue = -((PrimitiveConstant) y).asLong() + ((PrimitiveConstant) c2).asLong();
+                        // Make sure the limit fits into the target type without overflow.
+                        if (newLimitValue > 0 && newLimitValue <= CodeUtil.maxValue(PrimitiveStamp.getBits(x.stamp(view)))) {
+                            ConstantNode newLimit = ConstantNode.forIntegerStamp(x.stamp(view), newLimitValue, graph());
+                            ConstantNode c1 = ConstantNode.forIntegerStamp(x.stamp(view), -((PrimitiveConstant) y).asLong(), graph());
+                            ValueNode addNode = graph().addOrUniqueWithInputs(AddNode.create(x, c1, view));
+                            below = graph().unique(new IntegerBelowNode(addNode, newLimit));
+                        }
+                    }
+                }
+                if (below != null) {
+                    try (DebugCloseable position = ifNode2.withNodeSourcePosition()) {
+                        ifNode2.setTrueSuccessor(null);
+                        ifNode2.setFalseSuccessor(null);
+
+                        IfNode newIfNode = graph().add(new IfNode(below, trueSucc, falseSucc, trueSuccessorProbability));
+                        // Remove the < -C1 test.
+                        tool.deleteBranch(trueSuccessor);
+                        graph().removeSplit(this, falseSuccessor);
+
+                        // Replace the second test with the new one.
+                        ifNode2.predecessor().replaceFirstSuccessor(ifNode2, newIfNode);
+                        ifNode2.safeDelete();
+                        return true;
+                    }
+                }
             }
         }
         return false;
@@ -1268,8 +1383,7 @@
     private MergeNode insertMerge(AbstractBeginNode begin, FrameState stateAfter) {
         MergeNode merge = graph().add(new MergeNode());
         if (!begin.anchored().isEmpty()) {
-            Object before = null;
-            before = begin.anchored().snapshot();
+            Object before = begin.anchored().snapshot();
             begin.replaceAtUsages(InputType.Guard, merge);
             begin.replaceAtUsages(InputType.Anchor, merge);
             assert begin.anchored().isEmpty() : before + " " + begin.anchored().snapshot();
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/ProxyNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/ProxyNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -75,4 +75,6 @@
     public static GuardProxyNode forGuard(GuardingNode value, LoopExitNode exit, StructuredGraph graph) {
         return graph.unique(new GuardProxyNode(value, exit));
     }
+
+    public abstract PhiNode createPhi(AbstractMergeNode merge);
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/ValueProxyNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/ValueProxyNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -54,6 +54,11 @@
     }
 
     @Override
+    public PhiNode createPhi(AbstractMergeNode merge) {
+        return graph().addWithoutUnique(new ValuePhiNode(stamp(NodeView.DEFAULT), merge));
+    }
+
+    @Override
     public boolean inferStamp() {
         return updateStamp(value.stamp(NodeView.DEFAULT));
     }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/SignedRemNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/SignedRemNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -117,10 +117,7 @@
             return false;
         }
 
-        int compareAgainstZero = 0;
-        int usageCount = self.getUsageCount();
-        for (int i = 0; i < usageCount; i++) {
-            Node usage = self.getUsageAt(i);
+        for (Node usage : self.usages()) {
             if (usage instanceof IntegerEqualsNode) {
                 IntegerEqualsNode equalsNode = (IntegerEqualsNode) usage;
                 ValueNode node = equalsNode.getY();
@@ -131,12 +128,13 @@
                     ConstantNode constantNode = (ConstantNode) node;
                     Constant constant = constantNode.asConstant();
                     if (constant instanceof PrimitiveConstant && ((PrimitiveConstant) constant).asLong() == 0) {
-                        compareAgainstZero++;
+                        continue;
                     }
                 }
             }
+            return false;
         }
-        return compareAgainstZero == usageCount;
+        return true;
     }
 
     @Override
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/BranchProbabilityNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/BranchProbabilityNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -32,8 +32,11 @@
 import org.graalvm.compiler.core.common.type.IntegerStamp;
 import org.graalvm.compiler.core.common.type.StampFactory;
 import org.graalvm.compiler.debug.GraalError;
+import org.graalvm.compiler.graph.Node;
 import org.graalvm.compiler.graph.NodeClass;
 import org.graalvm.compiler.graph.iterators.NodePredicates;
+import org.graalvm.compiler.graph.spi.Canonicalizable;
+import org.graalvm.compiler.graph.spi.CanonicalizerTool;
 import org.graalvm.compiler.graph.spi.Simplifiable;
 import org.graalvm.compiler.graph.spi.SimplifierTool;
 import org.graalvm.compiler.nodeinfo.NodeInfo;
@@ -56,7 +59,7 @@
  * intended primarily for snippets, so that they can define their fast and slow paths.
  */
 @NodeInfo(cycles = CYCLES_0, cyclesRationale = "Artificial Node", size = SIZE_0)
-public final class BranchProbabilityNode extends FloatingNode implements Simplifiable, Lowerable {
+public final class BranchProbabilityNode extends FloatingNode implements Simplifiable, Lowerable, Canonicalizable {
 
     public static final NodeClass<BranchProbabilityNode> TYPE = NodeClass.create(BranchProbabilityNode.class);
     public static final double LIKELY_PROBABILITY = 0.6;
@@ -98,6 +101,15 @@
     }
 
     @Override
+    public Node canonical(CanonicalizerTool tool) {
+        if (condition.isConstant()) {
+            // fold constant conditions early during PE
+            return condition;
+        }
+        return this;
+    }
+
+    @Override
     public void simplify(SimplifierTool tool) {
         if (!hasUsages()) {
             return;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/IntegerSwitchNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/IntegerSwitchNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -36,6 +36,7 @@
 import org.graalvm.compiler.core.common.type.PrimitiveStamp;
 import org.graalvm.compiler.core.common.type.Stamp;
 import org.graalvm.compiler.core.common.type.StampFactory;
+import org.graalvm.compiler.graph.Node;
 import org.graalvm.compiler.graph.NodeClass;
 import org.graalvm.compiler.graph.spi.Simplifiable;
 import org.graalvm.compiler.graph.spi.SimplifierTool;
@@ -51,6 +52,7 @@
 import org.graalvm.compiler.nodes.java.LoadIndexedNode;
 import org.graalvm.compiler.nodes.spi.LIRLowerable;
 import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
+import org.graalvm.compiler.nodes.spi.SwitchFoldable;
 import org.graalvm.compiler.nodes.util.GraphUtil;
 
 import jdk.vm.ci.meta.DeoptimizationAction;
@@ -63,7 +65,7 @@
  * values. The actual implementation of the switch will be decided by the backend.
  */
 @NodeInfo
-public final class IntegerSwitchNode extends SwitchNode implements LIRLowerable, Simplifiable {
+public final class IntegerSwitchNode extends SwitchNode implements LIRLowerable, Simplifiable, SwitchFoldable {
     public static final NodeClass<IntegerSwitchNode> TYPE = NodeClass.create(IntegerSwitchNode.class);
 
     protected final int[] keys;
@@ -75,6 +77,7 @@
         this.keys = keys;
         assert value.stamp(NodeView.DEFAULT) instanceof PrimitiveStamp && value.stamp(NodeView.DEFAULT).getStackKind().isNumericInteger();
         assert assertSorted();
+        assert assertNoUntargettedSuccessor();
     }
 
     private boolean assertSorted() {
@@ -84,6 +87,18 @@
         return true;
     }
 
+    private boolean assertNoUntargettedSuccessor() {
+        boolean[] checker = new boolean[successors.size()];
+        for (int successorIndex : keySuccessors) {
+            checker[successorIndex] = true;
+        }
+        checker[defaultSuccessorIndex()] = true;
+        for (boolean b : checker) {
+            assert b;
+        }
+        return true;
+    }
+
     public IntegerSwitchNode(ValueNode value, int successorCount, int[] keys, double[] keyProbabilities, int[] keySuccessors) {
         this(value, new AbstractBeginNode[successorCount], keys, keyProbabilities, keySuccessors);
     }
@@ -104,6 +119,14 @@
         return JavaConstant.forInt(keys[i]);
     }
 
+    /**
+     * Gets the key at the specified index, as a java int.
+     */
+    @Override
+    public int intKeyAt(int i) {
+        return keys[i];
+    }
+
     @Override
     public int keyCount() {
         return keys.length;
@@ -148,9 +171,63 @@
             return;
         } else if (tryRemoveUnreachableKeys(tool, value().stamp(view))) {
             return;
+        } else if (switchTransformationOptimization(tool)) {
+            return;
         }
     }
 
+    private void addSuccessorForDeletion(AbstractBeginNode defaultNode) {
+        successors.add(defaultNode);
+    }
+
+    @Override
+    public Node getNextSwitchFoldableBranch() {
+        return defaultSuccessor();
+    }
+
+    @Override
+    public boolean isInSwitch(ValueNode switchValue) {
+        return value == switchValue;
+    }
+
+    @Override
+    public void cutOffCascadeNode() {
+        AbstractBeginNode toKill = defaultSuccessor();
+        clearSuccessors();
+        addSuccessorForDeletion(toKill);
+    }
+
+    @Override
+    public void cutOffLowestCascadeNode() {
+        clearSuccessors();
+    }
+
+    @Override
+    public AbstractBeginNode getDefault() {
+        return defaultSuccessor();
+    }
+
+    @Override
+    public ValueNode switchValue() {
+        return value();
+    }
+
+    @Override
+    public boolean isNonInitializedProfile() {
+        int nbSuccessors = getSuccessorCount();
+        double prob = 0.0d;
+        for (int i = 0; i < nbSuccessors; i++) {
+            if (keyProbabilities[i] > 0.0d) {
+                if (prob == 0.0d) {
+                    prob = keyProbabilities[i];
+                } else if (keyProbabilities[i] != prob) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
     static final class KeyData {
         final int key;
         final double keyProbability;
@@ -208,7 +285,7 @@
      * because {@link Enum#ordinal()} can change when recompiling an enum, it cannot be used
      * directly as the value that is switched on. An intermediate int[] array, which is initialized
      * once at run time based on the actual {@link Enum#ordinal()} values, is used.
-     *
+     * <p>
      * The {@link ConstantFieldProvider} of Graal already detects the int[] arrays and marks them as
      * {@link ConstantNode#isDefaultStable() stable}, i.e., the array elements are constant. The
      * code in this method detects array loads from such a stable array and re-wires the switch to
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/SwitchNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/SwitchNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -198,6 +198,13 @@
     }
 
     /**
+     * Returns the probability of taking the default branch.
+     */
+    public double defaultProbability() {
+        return keyProbabilities[keyProbabilities.length - 1];
+    }
+
+    /**
      * Returns the index of the default (fall through) successor of this switch.
      */
     public int defaultSuccessorIndex() {
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/gc/ObjectWriteBarrier.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/gc/ObjectWriteBarrier.java	Fri Jul 26 19:11:34 2019 -0400
@@ -50,4 +50,3 @@
         return precise;
     }
 }
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/gc/SerialArrayRangeWriteBarrier.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/gc/SerialArrayRangeWriteBarrier.java	Fri Jul 26 19:11:34 2019 -0400
@@ -41,4 +41,3 @@
     }
 
 }
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/gc/SerialWriteBarrier.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/gc/SerialWriteBarrier.java	Fri Jul 26 19:11:34 2019 -0400
@@ -53,4 +53,3 @@
         return verifyOnly;
     }
 }
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/gc/WriteBarrier.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/gc/WriteBarrier.java	Fri Jul 26 19:11:34 2019 -0400
@@ -54,4 +54,3 @@
         return address;
     }
 }
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/graphbuilderconf/NodePlugin.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/graphbuilderconf/NodePlugin.java	Fri Jul 26 19:11:34 2019 -0400
@@ -243,4 +243,3 @@
         return false;
     }
 }
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/AbstractNewObjectNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/AbstractNewObjectNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -32,9 +32,12 @@
 import org.graalvm.compiler.nodeinfo.NodeInfo;
 import org.graalvm.compiler.nodes.DeoptimizingFixedWithNextNode;
 import org.graalvm.compiler.nodes.FrameState;
+import org.graalvm.compiler.nodes.extended.MembarNode;
 import org.graalvm.compiler.nodes.spi.Lowerable;
 import org.graalvm.compiler.nodes.spi.LoweringTool;
 
+import jdk.vm.ci.code.MemoryBarriers;
+
 /**
  * The {@code AbstractNewObjectNode} is the base class for the new instance and new array nodes.
  */
@@ -44,6 +47,12 @@
     public static final NodeClass<AbstractNewObjectNode> TYPE = NodeClass.create(AbstractNewObjectNode.class);
     protected final boolean fillContents;
 
+    /**
+     * Controls whether this allocation emits a {@link MembarNode} with
+     * {@link MemoryBarriers#STORE_STORE} as part of the object initialization.
+     */
+    protected boolean emitMemoryBarrier = true;
+
     protected AbstractNewObjectNode(NodeClass<? extends AbstractNewObjectNode> c, Stamp stamp, boolean fillContents, FrameState stateBefore) {
         super(c, stamp, stateBefore);
         this.fillContents = fillContents;
@@ -65,4 +74,12 @@
     public boolean canDeoptimize() {
         return true;
     }
+
+    public boolean emitMemoryBarrier() {
+        return emitMemoryBarrier;
+    }
+
+    public void clearEmitMemoryBarrier() {
+        this.emitMemoryBarrier = false;
+    }
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/LogicCompareAndSwapNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/LogicCompareAndSwapNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/MethodCallTargetNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/MethodCallTargetNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -35,6 +35,7 @@
 import org.graalvm.compiler.graph.spi.SimplifierTool;
 import org.graalvm.compiler.nodeinfo.NodeInfo;
 import org.graalvm.compiler.nodeinfo.Verbosity;
+import org.graalvm.compiler.nodes.BeginNode;
 import org.graalvm.compiler.nodes.CallTargetNode;
 import org.graalvm.compiler.nodes.FixedGuardNode;
 import org.graalvm.compiler.nodes.Invoke;
@@ -43,7 +44,7 @@
 import org.graalvm.compiler.nodes.PiNode;
 import org.graalvm.compiler.nodes.StructuredGraph;
 import org.graalvm.compiler.nodes.ValueNode;
-import org.graalvm.compiler.nodes.extended.ValueAnchorNode;
+import org.graalvm.compiler.nodes.extended.AnchoringNode;
 import org.graalvm.compiler.nodes.spi.UncheckedInterfaceProvider;
 import org.graalvm.compiler.nodes.type.StampTool;
 
@@ -232,11 +233,7 @@
                  * an assumption but as we need an instanceof check anyway we can verify both
                  * properties by checking of the receiver is an instance of the single implementor.
                  */
-                ValueAnchorNode anchor = new ValueAnchorNode(null);
-                if (anchor != null) {
-                    graph().add(anchor);
-                    graph().addBeforeFixed(invoke().asNode(), anchor);
-                }
+                AnchoringNode anchor = BeginNode.prevBegin(invoke().asNode());
                 LogicNode condition = graph().addOrUniqueWithInputs(InstanceOfNode.create(speculatedType, receiver, getProfile(), anchor));
                 FixedGuardNode guard = graph().add(new FixedGuardNode(condition, DeoptimizationReason.OptimizedTypeCheckViolated, DeoptimizationAction.InvalidateRecompile, false));
                 graph().addBeforeFixed(invoke().asNode(), guard);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/spi/LoweringProvider.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/spi/LoweringProvider.java	Fri Jul 26 19:11:34 2019 -0400
@@ -50,15 +50,10 @@
     /**
      * Indicates the smallest width for comparing an integer value on the target platform.
      */
-    default Integer smallestCompareWidth() {
-        // most platforms only support 32 and 64 bit compares
-        return 32;
-    }
+    Integer smallestCompareWidth();
 
     /**
      * Indicates whether the target platform supports bulk zeroing instruction.
      */
-    default boolean supportBulkZeroing() {
-        return false;
-    }
+    boolean supportBulkZeroing();
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/spi/SwitchFoldable.java	Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,507 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+
+package org.graalvm.compiler.nodes.spi;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+
+import jdk.internal.vm.compiler.collections.EconomicMap;
+import jdk.internal.vm.compiler.collections.Equivalence;
+import org.graalvm.compiler.core.common.SuppressFBWarnings;
+import org.graalvm.compiler.core.common.type.IntegerStamp;
+import org.graalvm.compiler.core.common.type.PrimitiveStamp;
+import org.graalvm.compiler.core.common.type.Stamp;
+import org.graalvm.compiler.graph.Node;
+import org.graalvm.compiler.graph.spi.SimplifierTool;
+import org.graalvm.compiler.nodes.AbstractBeginNode;
+import org.graalvm.compiler.nodes.BeginNode;
+import org.graalvm.compiler.nodes.FixedNode;
+import org.graalvm.compiler.nodes.LogicNode;
+import org.graalvm.compiler.nodes.NodeView;
+import org.graalvm.compiler.nodes.StructuredGraph;
+import org.graalvm.compiler.nodes.ValueNode;
+import org.graalvm.compiler.nodes.ValueNodeInterface;
+import org.graalvm.compiler.nodes.calc.IntegerEqualsNode;
+import org.graalvm.compiler.nodes.calc.SignExtendNode;
+import org.graalvm.compiler.nodes.extended.IntegerSwitchNode;
+import org.graalvm.compiler.nodes.util.GraphUtil;
+
+/**
+ * Nodes that implement this interface can be collapsed to a single IntegerSwitch when they are seen
+ * in a cascade.
+ */
+@SuppressFBWarnings(value = {"UCF"}, justification = "javac spawns useless control flow in static initializer when using assert(asNode().isAlive())")
+public interface SwitchFoldable extends ValueNodeInterface {
+    Comparator<KeyData> SORTER = Comparator.comparingInt((KeyData k) -> k.key);
+
+    /**
+     * Returns the direct successor in the branch to check for SwitchFoldability.
+     */
+    Node getNextSwitchFoldableBranch();
+
+    /**
+     * Returns the value that will be used as the switch input. This value should be an int.
+     */
+    ValueNode switchValue();
+
+    /**
+     * Returns the branch that will close this switch folding, assuming this is called on the lowest
+     * node of the cascade.
+     */
+    AbstractBeginNode getDefault();
+
+    /**
+     * Determines whether the node should be folded in the current folding attempt.
+     *
+     * @param switchValue the value of the switch that will spawn through this folding attempt.
+     * @return true if this node should be folded in the current folding attempt, false otherwise.
+     * @see SwitchFoldable#maybeIsInSwitch(LogicNode)
+     * @see SwitchFoldable#sameSwitchValue(LogicNode, ValueNode)
+     */
+    boolean isInSwitch(ValueNode switchValue);
+
+    /**
+     * Removes the successors of this node, while keeping it linked to the rest of the cascade.
+     */
+    void cutOffCascadeNode();
+
+    /**
+     * Completely removes all successors from this node.
+     */
+    void cutOffLowestCascadeNode();
+
+    /**
+     * Returns the value of the i-th key of this node.
+     */
+    int intKeyAt(int i);
+
+    /**
+     * Returns the probability of seeing the i-th key of this node.
+     */
+    double keyProbability(int i);
+
+    /**
+     * Returns the branch to follow when seeing the i-th key of this node.
+     */
+    AbstractBeginNode keySuccessor(int i);
+
+    /**
+     * Returns the probability of going to the default branch.
+     */
+    double defaultProbability();
+
+    /**
+     * @return The number of keys the SwitchFoldable node will try to add.
+     */
+    default int keyCount() {
+        return 1;
+    }
+
+    /**
+     * Should be overridden if getDefault() has side effects.
+     */
+    default boolean isDefaultSuccessor(AbstractBeginNode successor) {
+        return successor == getDefault();
+    }
+
+    /**
+     * Heuristics that tries to determine whether or not a foldable node was profiled.
+     */
+    default boolean isNonInitializedProfile() {
+        return false;
+    }
+
+    static boolean maybeIsInSwitch(LogicNode condition) {
+        return condition instanceof IntegerEqualsNode && ((IntegerEqualsNode) condition).getY().isJavaConstant();
+    }
+
+    static boolean sameSwitchValue(LogicNode condition, ValueNode switchValue) {
+        return ((IntegerEqualsNode) condition).getX() == switchValue;
+    }
+
+    // Helper data structures
+
+    class Helper {
+        private Helper() {
+        }
+
+        private static boolean isDuplicateKey(int key, QuickQueryKeyData keyData) {
+            return keyData.contains(key);
+        }
+
+        private static int duplicateIndex(AbstractBeginNode begin, QuickQueryList<AbstractBeginNode> successors) {
+            return successors.indexOf(begin);
+        }
+
+        private static Node skipUpBegins(Node node) {
+            Node result = node;
+            while (result instanceof BeginNode && result.hasNoUsages()) {
+                result = result.predecessor();
+            }
+            return result;
+        }
+
+        private static Node skipDownBegins(Node node) {
+            Node result = node;
+            while (result instanceof BeginNode && result.hasNoUsages()) {
+                result = ((BeginNode) result).next();
+            }
+            return result;
+        }
+
+        private static SwitchFoldable getParentSwitchNode(SwitchFoldable node, ValueNode switchValue) {
+            Node result = skipUpBegins(node.asNode().predecessor());
+            if (result instanceof SwitchFoldable && ((SwitchFoldable) result).isInSwitch(switchValue)) {
+                return (SwitchFoldable) result;
+            }
+            return null;
+        }
+
+        private static SwitchFoldable getChildSwitchNode(SwitchFoldable node, ValueNode switchValue) {
+            Node result = skipDownBegins(node.getNextSwitchFoldableBranch());
+            if (result instanceof SwitchFoldable && ((SwitchFoldable) result).isInSwitch(switchValue)) {
+                return (SwitchFoldable) result;
+            }
+            return null;
+        }
+
+        private static int addDefault(SwitchFoldable node, QuickQueryList<AbstractBeginNode> successors) {
+            AbstractBeginNode defaultBranch = node.getDefault();
+            int index = successors.indexOf(defaultBranch);
+            if (index == -1) {
+                index = successors.size();
+                successors.add(defaultBranch);
+            }
+            return index;
+        }
+
+        private static int countNonDeoptSuccessors(QuickQueryKeyData keyData) {
+            int result = 0;
+            for (KeyData key : keyData.list) {
+                if (key.keyProbability > 0.0d) {
+                    result++;
+                }
+            }
+            return result;
+        }
+
+        /**
+         * Updates the current state of the IntegerSwitch that will be spawned. That means:
+         * <p>
+         * - Checking for duplicate keys: add the duplicate key's branch to duplicates
+         * <p>
+         * - For branches of non-duplicate keys: add them to successors and update the keyData
+         * accordingly
+         * <p>
+         * - Update the value of the cumulative probability, ie, multiply it by the probability of
+         * taking the next branch (according to {@link SwitchFoldable#getNextSwitchFoldableBranch})
+         * <p>
+         * </p>
+         *
+         * @see QuickQueryList
+         * @see QuickQueryKeyData
+         */
+        private static void updateSwitchData(SwitchFoldable node, QuickQueryKeyData keyData, QuickQueryList<AbstractBeginNode> newSuccessors, double[] cumulative, double[] totalProbabilities,
+                        QuickQueryList<AbstractBeginNode> duplicates) {
+            for (int i = 0; i < node.keyCount(); i++) {
+                int key = node.intKeyAt(i);
+                double keyProbability = cumulative[0] * node.keyProbability(i);
+                KeyData data;
+                AbstractBeginNode keySuccessor = node.keySuccessor(i);
+                if (isDuplicateKey(key, keyData)) {
+                    // Key was already seen
+                    data = keyData.fromKey(key);
+                    if (data.keySuccessor != KeyData.KEY_UNKNOWN) {
+                        // Unreachable key: kill it manually at the end
+                        if (!newSuccessors.contains(keySuccessor) && !duplicates.contains(keySuccessor) && keySuccessor.isAlive()) {
+                            // This might be a false alert, if one of the next keys points to it.
+                            duplicates.add(keySuccessor);
+                        }
+                        continue;
+                    }
+                    /*
+                     * A key might not be able to immediately link to its target, if it is shared
+                     * with the default target. In that case, we will need to resolve the target at
+                     * a later time, either by seeing this key going to a known target in later
+                     * cascade nodes, or by linking it to the overall default target at the very end
+                     * of the folding.
+                     */
+                } else {
+                    data = new KeyData(key, keyProbability, KeyData.KEY_UNKNOWN);
+                    totalProbabilities[0] += keyProbability;
+                    keyData.add(data);
+                }
+                if (keySuccessor.isUnregistered()) {
+                    // Shortcut map check if uninitialized node.
+                    data.keySuccessor = newSuccessors.size();
+                    newSuccessors.addUnique(keySuccessor);
+                } else {
+                    int pos = duplicateIndex(keySuccessor, newSuccessors);
+                    if (pos != -1) {
+                        // Target is already known
+                        data.keySuccessor = pos;
+                    } else if (!node.isDefaultSuccessor(keySuccessor)) {
+                        data.keySuccessor = newSuccessors.size();
+                        newSuccessors.add(keySuccessor);
+                    }
+                }
+            }
+            cumulative[0] *= node.defaultProbability();
+        }
+    }
+
+    final class KeyData {
+        private static final int KEY_UNKNOWN = -2;
+
+        private final int key;
+        private final double keyProbability;
+        private int keySuccessor;
+
+        KeyData(int key, double keyProbability, int keySuccessor) {
+            this.key = key;
+            this.keyProbability = keyProbability;
+            this.keySuccessor = keySuccessor;
+        }
+    }
+
+    /**
+     * Supports O(1) addition to the list, fast {@code contains} and {@code indexOf} queries
+     * (usually O(1), worst case O(n)), and O(1) random access.
+     */
+    final class QuickQueryList<T> {
+        private final List<T> list = new ArrayList<>();
+        private final EconomicMap<T, Integer> map = EconomicMap.create(Equivalence.IDENTITY);
+
+        private int indexOf(T begin) {
+            return map.get(begin, -1);
+        }
+
+        private boolean contains(T o) {
+            return map.containsKey(o);
+        }
+
+        @SuppressWarnings("unused")
+        private T get(int index) {
+            return list.get(index);
+        }
+
+        private boolean add(T item) {
+            map.put(item, list.size());
+            return list.add(item);
+        }
+
+        /**
+         * Adds an object, known to be unique beforehand.
+         */
+        private void addUnique(T item) {
+            list.add(item);
+        }
+
+        private int size() {
+            return list.size();
+        }
+    }
+
+    final class QuickQueryKeyData {
+        private final List<KeyData> list = new ArrayList<>();
+        private final EconomicMap<Integer, KeyData> map = EconomicMap.create();
+
+        private void add(KeyData key) {
+            assert !map.containsKey(key.key);
+            list.add(key);
+            map.put(key.key, key);
+        }
+
+        private boolean contains(int key) {
+            return map.containsKey(key);
+        }
+
+        private KeyData get(int index) {
+            return list.get(index);
+        }
+
+        private int size() {
+            return list.size();
+        }
+
+        private KeyData fromKey(int key) {
+            assert contains(key);
+            return map.get(key);
+        }
+
+        private void sort() {
+            list.sort(SORTER);
+        }
+
+    }
+
+    /**
+     * Collapses a cascade of foldables (IfNode, FixedGuard and IntegerSwitch) into a single switch.
+     */
+    default boolean switchTransformationOptimization(SimplifierTool tool) {
+        ValueNode switchValue = switchValue();
+        assert asNode().isAlive();
+        if (switchValue == null || !isInSwitch(switchValue) || (Helper.getParentSwitchNode(this, switchValue) == null && Helper.getChildSwitchNode(this, switchValue) == null)) {
+            // Don't bother trying if there is nothing to do.
+            return false;
+        }
+        Stamp switchStamp = switchValue.stamp(NodeView.DEFAULT);
+
+        // Abort if we do not have an int
+        if (!(switchStamp instanceof IntegerStamp)) {
+            return false;
+        }
+        if (PrimitiveStamp.getBits(switchStamp) > 32) {
+            return false;
+        }
+
+        // PlaceHolder for cascade traversal.
+        SwitchFoldable iteratingNode = this;
+        SwitchFoldable topMostSwitchNode = this;
+
+        // Find top-most foldable.
+        while (iteratingNode != null) {
+            topMostSwitchNode = iteratingNode;
+            iteratingNode = Helper.getParentSwitchNode(iteratingNode, switchValue);
+        }
+        QuickQueryKeyData keyData = new QuickQueryKeyData();
+        QuickQueryList<AbstractBeginNode> successors = new QuickQueryList<>();
+        QuickQueryList<AbstractBeginNode> potentiallyUnreachable = new QuickQueryList<>();
+        double[] cumulative = {1.0d};
+        double[] totalProbability = {0.0d};
+
+        iteratingNode = topMostSwitchNode;
+        SwitchFoldable lowestSwitchNode = topMostSwitchNode;
+
+        // If this stays true, we will need to spawn an uniform distribution.
+        boolean uninitializedProfiles = true;
+
+        // Go down the if cascade, collecting necessary data
+        while (iteratingNode != null) {
+            lowestSwitchNode = iteratingNode;
+            Helper.updateSwitchData(iteratingNode, keyData, successors, cumulative, totalProbability, potentiallyUnreachable);
+            if (!iteratingNode.isNonInitializedProfile()) {
+                uninitializedProfiles = false;
+            }
+            iteratingNode = Helper.getChildSwitchNode(iteratingNode, switchValue);
+        }
+
+        if (keyData.size() < 4 || lowestSwitchNode == topMostSwitchNode) {
+            // Abort if it's not worth the hassle
+            return false;
+        }
+
+        // At that point, we will commit the optimization.
+        StructuredGraph graph = asNode().graph();
+
+        // Sort the keys
+        keyData.sort();
+
+        /*
+         * The total probability might be different than 1 if there was a duplicate key which was
+         * erased by another branch whose probability was different (/ex: in the case where a method
+         * constituted of only a switch is inlined after a guard for a particular value of that
+         * switch). In that case, we need to re-normalize the probabilities. A more "correct" way
+         * would be to only re-normalize the probabilities of the switch after the guard, but this
+         * cannot be done without an additional overhead.
+         */
+        totalProbability[0] += cumulative[0];
+        assert totalProbability[0] > 0.0d;
+        double normalizationFactor = 1 / totalProbability[0];
+
+        // Spawn the required data structures
+        int newKeyCount = keyData.list.size();
+        int[] keys = new int[newKeyCount];
+        double[] keyProbabilities = new double[newKeyCount + 1];
+        int[] keySuccessors = new int[newKeyCount + 1];
+        int nonDeoptSuccessorCount = Helper.countNonDeoptSuccessors(keyData) + (cumulative[0] > 0.0d ? 1 : 0);
+        double uniform = (uninitializedProfiles && nonDeoptSuccessorCount > 0 ? 1 / (double) nonDeoptSuccessorCount : 1.0d);
+
+        // Add default
+        keyProbabilities[newKeyCount] = uninitializedProfiles && cumulative[0] > 0.0d ? uniform : normalizationFactor * cumulative[0];
+        keySuccessors[newKeyCount] = Helper.addDefault(lowestSwitchNode, successors);
+
+        // Add branches.
+        for (int i = 0; i < newKeyCount; i++) {
+            SwitchFoldable.KeyData data = keyData.get(i);
+            keys[i] = data.key;
+            keyProbabilities[i] = uninitializedProfiles && data.keyProbability > 0.0d ? uniform : normalizationFactor * data.keyProbability;
+            keySuccessors[i] = data.keySuccessor != KeyData.KEY_UNKNOWN ? data.keySuccessor : keySuccessors[newKeyCount];
+        }
+
+        // Spin an adapter if the value is narrower than an int
+        ValueNode adapter = null;
+        if (((IntegerStamp) switchStamp).getBits() < 32) {
+            adapter = graph.addOrUnique(new SignExtendNode(switchValue, 32));
+        } else {
+            adapter = switchValue;
+        }
+
+        // Spawn the switch node
+        IntegerSwitchNode toInsert = new IntegerSwitchNode(adapter, successors.size(), keys, keyProbabilities, keySuccessors);
+        graph.add(toInsert);
+
+        // Detach the cascade from the graph
+        lowestSwitchNode.cutOffLowestCascadeNode();
+        iteratingNode = lowestSwitchNode;
+        while (iteratingNode != null) {
+            if (iteratingNode != lowestSwitchNode) {
+                iteratingNode.cutOffCascadeNode();
+            }
+            iteratingNode = Helper.getParentSwitchNode(iteratingNode, switchValue);
+        }
+
+        // Place the new Switch node
+        topMostSwitchNode.asNode().replaceAtPredecessor(toInsert);
+        topMostSwitchNode.asNode().replaceAtUsages(toInsert);
+
+        // Attach the branches to the switch.
+        int pos = 0;
+        for (AbstractBeginNode begin : successors.list) {
+            if (begin.isUnregistered()) {
+                graph.add(begin.next());
+                graph.add(begin);
+                begin.setNext(begin.next());
+            }
+            toInsert.setBlockSuccessor(pos++, begin);
+        }
+
+        // Remove the cascade and unreachable code
+        GraphUtil.killCFG((FixedNode) topMostSwitchNode);
+        for (AbstractBeginNode duplicate : potentiallyUnreachable.list) {
+            if (duplicate.predecessor() == null) {
+                // Make sure the duplicate is not reachable.
+                assert duplicate.isAlive();
+                GraphUtil.killCFG(duplicate);
+            }
+        }
+
+        tool.addToWorkList(toInsert);
+
+        return true;
+    }
+}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.options.processor/src/org/graalvm/compiler/options/processor/OptionProcessor.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.options.processor/src/org/graalvm/compiler/options/processor/OptionProcessor.java	Fri Jul 26 19:11:34 2019 -0400
@@ -224,6 +224,14 @@
             }
         }
 
+        String optionStabilityName = getAnnotationValue(annotation, "stability", VariableElement.class).getSimpleName().toString();
+        if (optionStabilityName.equals("STABLE")) {
+            if (help.length() == 0) {
+                processingEnv.getMessager().printMessage(Kind.ERROR, "A stable option must have non-empty help text", element);
+                return;
+            }
+        }
+
         String optionTypeName = getAnnotationValue(annotation, "type", VariableElement.class).getSimpleName().toString();
         info.options.add(new OptionInfo(optionName, optionTypeName, help, extraHelp, optionType, declaringClass, field.getSimpleName().toString()));
     }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/ConditionalEliminationPhase.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/ConditionalEliminationPhase.java	Fri Jul 26 19:11:34 2019 -0400
@@ -175,14 +175,9 @@
             AbstractBeginNode beginNode = b.getBeginNode();
             if (beginNode instanceof AbstractMergeNode && anchorBlock != b) {
                 AbstractMergeNode mergeNode = (AbstractMergeNode) beginNode;
-                for (GuardNode guard : mergeNode.guards().snapshot()) {
-                    try (DebugCloseable closeable = guard.withNodeSourcePosition()) {
-                        GuardNode newlyCreatedGuard = new GuardNode(guard.getCondition(), anchorBlock.getBeginNode(), guard.getReason(), guard.getAction(), guard.isNegated(), guard.getSpeculation(),
-                                        guard.getNoDeoptSuccessorPosition());
-                        GuardNode newGuard = mergeNode.graph().unique(newlyCreatedGuard);
-                        guard.replaceAndDelete(newGuard);
-                    }
-                }
+                mergeNode.replaceAtUsages(InputType.Anchor, anchorBlock.getBeginNode());
+                mergeNode.replaceAtUsages(InputType.Guard, anchorBlock.getBeginNode());
+                assert mergeNode.anchored().isEmpty();
             }
 
             FixedNode endNode = b.getEndNode();
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/WriteBarrierAdditionPhase.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/WriteBarrierAdditionPhase.java	Fri Jul 26 19:11:34 2019 -0400
@@ -48,4 +48,3 @@
         return false;
     }
 }
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.printer/src/org/graalvm/compiler/printer/BinaryGraphPrinter.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.printer/src/org/graalvm/compiler/printer/BinaryGraphPrinter.java	Fri Jul 26 19:11:34 2019 -0400
@@ -42,7 +42,6 @@
 import org.graalvm.compiler.bytecode.Bytecode;
 import org.graalvm.compiler.core.common.cfg.BlockMap;
 import org.graalvm.compiler.debug.DebugContext;
-import org.graalvm.compiler.debug.DebugOptions;
 import org.graalvm.compiler.graph.CachedGraph;
 import org.graalvm.compiler.graph.Edges;
 import org.graalvm.compiler.graph.Graph;
@@ -66,7 +65,6 @@
 import org.graalvm.compiler.nodes.cfg.Block;
 import org.graalvm.compiler.nodes.cfg.ControlFlowGraph;
 import org.graalvm.compiler.nodes.util.JavaConstantFormattable;
-import org.graalvm.compiler.phases.schedule.SchedulePhase;
 import org.graalvm.graphio.GraphBlocks;
 import org.graalvm.graphio.GraphElements;
 import org.graalvm.graphio.GraphLocations;
@@ -591,22 +589,8 @@
             this.graph = graph;
             StructuredGraph.ScheduleResult scheduleResult = null;
             if (graph instanceof StructuredGraph) {
-
                 StructuredGraph structuredGraph = (StructuredGraph) graph;
-                scheduleResult = structuredGraph.getLastSchedule();
-                if (scheduleResult == null) {
-
-                    // Also provide a schedule when an error occurs
-                    if (DebugOptions.PrintGraphWithSchedule.getValue(graph.getOptions()) || debug.contextLookup(Throwable.class) != null) {
-                        try {
-                            SchedulePhase schedule = new SchedulePhase(graph.getOptions());
-                            schedule.apply(structuredGraph);
-                            scheduleResult = structuredGraph.getLastSchedule();
-                        } catch (Throwable t) {
-                        }
-                    }
-
-                }
+                scheduleResult = GraalDebugHandlersFactory.tryGetSchedule(debug, structuredGraph);
             }
             cfg = scheduleResult == null ? debug.contextLookup(ControlFlowGraph.class) : scheduleResult.getCFG();
             blockToNodes = scheduleResult == null ? null : scheduleResult.getBlockToNodesMap();
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.printer/src/org/graalvm/compiler/printer/CFGPrinterObserver.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.printer/src/org/graalvm/compiler/printer/CFGPrinterObserver.java	Fri Jul 26 19:11:34 2019 -0400
@@ -211,12 +211,14 @@
             } else if (object instanceof StructuredGraph) {
                 if (cfgPrinter.cfg == null) {
                     StructuredGraph graph = (StructuredGraph) object;
-                    cfgPrinter.cfg = ControlFlowGraph.compute(graph, true, true, true, false);
-                    cfgPrinter.printCFG(message, cfgPrinter.cfg.getBlocks(), true);
-                } else {
+                    ScheduleResult scheduleResult = GraalDebugHandlersFactory.tryGetSchedule(debug, graph);
+                    if (scheduleResult != null) {
+                        cfgPrinter.cfg = scheduleResult.getCFG();
+                    }
+                }
+                if (cfgPrinter.cfg != null) {
                     cfgPrinter.printCFG(message, cfgPrinter.cfg.getBlocks(), true);
                 }
-
             } else if (object instanceof CompilationResult) {
                 final CompilationResult compResult = (CompilationResult) object;
                 cfgPrinter.printMachineCode(disassemble(codeCache, compResult, null), message);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.printer/src/org/graalvm/compiler/printer/GraalDebugHandlersFactory.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.printer/src/org/graalvm/compiler/printer/GraalDebugHandlersFactory.java	Fri Jul 26 19:11:34 2019 -0400
@@ -28,16 +28,19 @@
 import java.util.List;
 
 import org.graalvm.compiler.api.replacements.SnippetReflectionProvider;
+import org.graalvm.compiler.debug.DebugCloseable;
 import org.graalvm.compiler.debug.DebugContext;
 import org.graalvm.compiler.debug.DebugDumpHandler;
 import org.graalvm.compiler.debug.DebugHandler;
 import org.graalvm.compiler.debug.DebugHandlersFactory;
 import org.graalvm.compiler.debug.DebugOptions;
-import org.graalvm.compiler.debug.TTY;
 import org.graalvm.compiler.graph.Node;
 import org.graalvm.compiler.nodeinfo.Verbosity;
+import org.graalvm.compiler.nodes.StructuredGraph;
+import org.graalvm.compiler.nodes.StructuredGraph.ScheduleResult;
 import org.graalvm.compiler.nodes.util.GraphUtil;
 import org.graalvm.compiler.options.OptionValues;
+import org.graalvm.compiler.phases.schedule.SchedulePhase;
 import org.graalvm.compiler.serviceprovider.ServiceProvider;
 
 @ServiceProvider(DebugHandlersFactory.class)
@@ -62,9 +65,6 @@
         }
         handlers.add(new NodeDumper());
         if (DebugOptions.PrintCFG.getValue(options) || DebugOptions.PrintBackendCFG.getValue(options)) {
-            if (DebugOptions.PrintCFG.getValue(options)) {
-                TTY.out.println("Complete C1Visualizer dumping slows down PrintBinaryGraphs: use -Dgraal.PrintCFG=false to disable it");
-            }
             handlers.add(new CFGPrinterObserver());
         }
         handlers.add(new NoDeadCodeVerifyHandler());
@@ -91,4 +91,20 @@
         return new CanonicalStringGraphPrinter(snippetReflection);
     }
 
+    @SuppressWarnings("try")
+    static ScheduleResult tryGetSchedule(DebugContext debug, StructuredGraph graph) {
+        ScheduleResult scheduleResult = graph.getLastSchedule();
+        if (scheduleResult == null) {
+            // Also provide a schedule when an error occurs
+            if (DebugOptions.PrintGraphWithSchedule.getValue(graph.getOptions()) || debug.contextLookup(Throwable.class) != null) {
+                try (DebugCloseable noIntercept = debug.disableIntercept()) {
+                    SchedulePhase schedule = new SchedulePhase(graph.getOptions());
+                    schedule.apply(graph);
+                    scheduleResult = graph.getLastSchedule();
+                } catch (Throwable t) {
+                }
+            }
+        }
+        return scheduleResult;
+    }
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.printer/src/org/graalvm/compiler/printer/GraphPrinterDumpHandler.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.printer/src/org/graalvm/compiler/printer/GraphPrinterDumpHandler.java	Fri Jul 26 19:11:34 2019 -0400
@@ -136,36 +136,26 @@
             // Get all current JavaMethod instances in the context.
             List<String> inlineContext = getInlineContext(graph);
 
-            if (inlineContext != previousInlineContext) {
+            if (!inlineContext.equals(previousInlineContext)) {
                 Map<Object, Object> properties = new HashMap<>();
                 properties.put("graph", graph.toString());
                 addCompilationId(properties, graph);
-                if (inlineContext.equals(previousInlineContext)) {
-                    /*
-                     * two different graphs have the same inline context, so make sure they appear
-                     * in different folders by closing and reopening the top scope.
-                     */
-                    int inlineDepth = previousInlineContext.size() - 1;
-                    closeScope(debug, inlineDepth);
-                    openScope(debug, inlineContext.get(inlineDepth), inlineDepth, properties);
-                } else {
-                    // Check for method scopes that must be closed since the previous dump.
-                    for (int i = 0; i < previousInlineContext.size(); ++i) {
-                        if (i >= inlineContext.size() || !inlineContext.get(i).equals(previousInlineContext.get(i))) {
-                            for (int inlineDepth = previousInlineContext.size() - 1; inlineDepth >= i; --inlineDepth) {
-                                closeScope(debug, inlineDepth);
-                            }
-                            break;
+                // Check for method scopes that must be closed since the previous dump.
+                for (int i = 0; i < previousInlineContext.size(); ++i) {
+                    if (i >= inlineContext.size() || !inlineContext.get(i).equals(previousInlineContext.get(i))) {
+                        for (int inlineDepth = previousInlineContext.size() - 1; inlineDepth >= i; --inlineDepth) {
+                            closeScope(debug, inlineDepth);
                         }
+                        break;
                     }
-                    // Check for method scopes that must be opened since the previous dump.
-                    for (int i = 0; i < inlineContext.size(); ++i) {
-                        if (i >= previousInlineContext.size() || !inlineContext.get(i).equals(previousInlineContext.get(i))) {
-                            for (int inlineDepth = i; inlineDepth < inlineContext.size(); ++inlineDepth) {
-                                openScope(debug, inlineContext.get(inlineDepth), inlineDepth, inlineDepth == inlineContext.size() - 1 ? properties : null);
-                            }
-                            break;
+                }
+                // Check for method scopes that must be opened since the previous dump.
+                for (int i = 0; i < inlineContext.size(); ++i) {
+                    if (i >= previousInlineContext.size() || !inlineContext.get(i).equals(previousInlineContext.get(i))) {
+                        for (int inlineDepth = i; inlineDepth < inlineContext.size(); ++inlineDepth) {
+                            openScope(debug, inlineContext.get(inlineDepth), inlineDepth, inlineDepth == inlineContext.size() - 1 ? properties : null);
                         }
+                        break;
                     }
                 }
             }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements.amd64/src/org/graalvm/compiler/replacements/amd64/AMD64ArrayIndexOfDispatchNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements.amd64/src/org/graalvm/compiler/replacements/amd64/AMD64ArrayIndexOfDispatchNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -307,4 +307,3 @@
         return optimizedArrayIndexOf(descriptor, JavaKind.Char, JavaKind.Char, true, array, arrayLength, fromIndex, values);
     }
 }
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/DefaultJavaLoweringProvider.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/DefaultJavaLoweringProvider.java	Fri Jul 26 19:11:34 2019 -0400
@@ -766,6 +766,8 @@
                     } else {
                         newObject = graph.add(createNewArrayFromVirtual(virtual, ConstantNode.forInt(entryCount, graph)));
                     }
+                    // The final STORE_STORE barrier will be emitted by finishAllocatedObjects
+                    newObject.clearEmitMemoryBarrier();
 
                     recursiveLowerings.add(newObject);
                     graph.addBeforeFixed(commit, newObject);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/arraycopy/ArrayCopyWithDelayedLoweringNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/arraycopy/ArrayCopyWithDelayedLoweringNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -60,4 +60,3 @@
         this.bci = bci;
     }
 }
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/nodes/ReadRegisterNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/nodes/ReadRegisterNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -91,7 +91,7 @@
             generator.getLIRGeneratorTool().emitIncomingValues(new Value[]{result});
         }
         if (!directUse) {
-            result = generator.getLIRGeneratorTool().emitMove(result);
+            result = generator.getLIRGeneratorTool().emitReadRegister(register, kind);
         }
         generator.setResult(this, result);
     }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/nodes/WriteRegisterNode.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/nodes/WriteRegisterNode.java	Fri Jul 26 19:11:34 2019 -0400
@@ -65,7 +65,7 @@
     @Override
     public void generate(NodeLIRBuilderTool generator) {
         Value val = generator.operand(value);
-        generator.getLIRGeneratorTool().emitMove(register.asValue(val.getValueKind()), val);
+        generator.getLIRGeneratorTool().emitWriteRegister(register, val, val.getValueKind());
     }
 
     @Override
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.serviceprovider/src/org/graalvm/compiler/serviceprovider/GraalServices.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.serviceprovider/src/org/graalvm/compiler/serviceprovider/GraalServices.java	Fri Jul 26 19:11:34 2019 -0400
@@ -531,11 +531,7 @@
         return Math.fma(a, b, c);
     }
 
-    /**
-     * Set the flag in the {@link VirtualObject} that indicates that it is a boxed primitive that
-     * was produced as a result of a call to a {@code valueOf} method.
-     */
-    public static void markVirtualObjectAsAutoBox(VirtualObject virtualObject) {
-        virtualObject.setIsAutoBox(true);
+    public static VirtualObject createVirtualObject(ResolvedJavaType type, int id, boolean isAutoBox) {
+        return VirtualObject.get(type, id, isAutoBox);
     }
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.serviceprovider/src/org/graalvm/compiler/serviceprovider/GraalUnsafeAccess.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.serviceprovider/src/org/graalvm/compiler/serviceprovider/GraalUnsafeAccess.java	Fri Jul 26 19:11:34 2019 -0400
@@ -67,4 +67,3 @@
         return UNSAFE;
     }
 }
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.test/src/org/graalvm/compiler/test/GraalTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.test/src/org/graalvm/compiler/test/GraalTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -27,10 +27,16 @@
 import static org.graalvm.compiler.debug.DebugContext.DEFAULT_LOG_STREAM;
 import static org.graalvm.compiler.debug.DebugContext.NO_DESCRIPTION;
 
+import java.io.IOException;
 import java.io.PrintStream;
 import java.io.PrintWriter;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -499,4 +505,31 @@
     public static TestRule createTimeoutMillis(long milliseconds) {
         return createTimeout(milliseconds, TimeUnit.MILLISECONDS);
     }
+
+    /**
+     * Tries to recursively remove {@code directory}. If it fails with an {@link IOException}, the
+     * exception's {@code toString()} is printed to {@link System#err} and the exception is
+     * returned.
+     */
+    public static IOException removeDirectory(Path directory) {
+        try {
+            Files.walkFileTree(directory, new SimpleFileVisitor<Path>() {
+                @Override
+                public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+                    Files.delete(file);
+                    return FileVisitResult.CONTINUE;
+                }
+
+                @Override
+                public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
+                    Files.delete(dir);
+                    return FileVisitResult.CONTINUE;
+                }
+            });
+        } catch (IOException e) {
+            System.err.println(e);
+            return e;
+        }
+        return null;
+    }
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.virtual/src/org/graalvm/compiler/virtual/phases/ea/PEReadEliminationClosure.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.virtual/src/org/graalvm/compiler/virtual/phases/ea/PEReadEliminationClosure.java	Fri Jul 26 19:11:34 2019 -0400
@@ -217,7 +217,11 @@
                 long offset = store.offset().asJavaConstant().asLong();
                 boolean overflowAccess = isOverflowAccess(accessKind, componentKind);
                 int index = overflowAccess ? -1 : VirtualArrayNode.entryIndexForOffset(tool.getMetaAccess(), offset, accessKind, type.getComponentType(), Integer.MAX_VALUE);
-                return processStore(store, store.object(), location, index, accessKind, overflowAccess, store.value(), state, effects);
+                if (index != -1) {
+                    return processStore(store, store.object(), location, index, accessKind, overflowAccess, store.value(), state, effects);
+                } else {
+                    state.killReadCache(location, index);
+                }
             } else {
                 processIdentity(state, location);
             }
--- a/test/jaxp/javax/xml/jaxp/unittest/validation/ValidationTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/test/jaxp/javax/xml/jaxp/unittest/validation/ValidationTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -25,19 +25,27 @@
 
 
 import java.io.File;
-import java.net.URL;
-
+import java.io.FileInputStream;
 import javax.xml.XMLConstants;
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.events.XMLEvent;
+import javax.xml.transform.Source;
+import javax.xml.transform.sax.SAXSource;
 import javax.xml.transform.stream.StreamSource;
 import javax.xml.validation.Schema;
 import javax.xml.validation.SchemaFactory;
 import javax.xml.validation.Validator;
 import org.testng.annotations.DataProvider;
-
 import org.testng.annotations.Listeners;
 import org.testng.annotations.Test;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
+import org.xml.sax.XMLFilter;
+import org.xml.sax.helpers.XMLFilterImpl;
 
 /*
  * @test
@@ -106,6 +114,50 @@
         validate(xsd, xml);
     }
 
+    /**
+     * @bug 8068376
+     * Verifies that validation performs normally with externally provided string
+     * parameters.
+     * @throws Exception if the test fails
+     */
+    @Test
+    public void testJDK8068376() throws Exception {
+
+        String xsdFile = getClass().getResource(FILE_PATH + "JDK8068376.xsd").getFile();
+        String xmlFile = getClass().getResource(FILE_PATH + "JDK8068376.xml").getFile();
+        String targetNamespace = getTargetNamespace(xsdFile);
+
+        XMLFilter namespaceFilter = new XMLFilterImpl(SAXParserFactory.newDefaultNSInstance().newSAXParser().getXMLReader()) {
+        @Override
+        public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
+            uri = targetNamespace; // overwriting the uri with our own choice
+            super.startElement(uri, localName, qName, atts);
+        }
+        };
+
+        Source xmlSource = new SAXSource(namespaceFilter, new InputSource(xmlFile));
+        Source schemaSource = new StreamSource(xsdFile);
+        validate(schemaSource, xmlSource);
+
+    }
+
+    private static String getTargetNamespace(String xsdFile) throws Exception {
+        XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(new FileInputStream(xsdFile));
+        while (reader.hasNext()) {
+            int event = reader.next();
+
+            // Get the root element's "targetNamespace" attribute
+            if (event == XMLEvent.START_ELEMENT) {
+                // validation fails before patch
+                String value = reader.getAttributeValue(null, "targetNamespace"); // fails validation
+                // validation passes due to a reference comparison in the original code
+                // String value = "mynamespace";
+                return value;
+            }
+        }
+        return null;
+    }
+
     private void validate(String xsd, String xml) throws Exception {
         final SchemaFactory schemaFactory = SchemaFactory.newInstance(
                 XMLConstants.W3C_XML_SCHEMA_NS_URI);
@@ -116,4 +168,12 @@
                 new File(getClass().getResource(FILE_PATH + xml).getFile())));
     }
 
+    private void validate(Source xsd, Source xml) throws Exception {
+        final SchemaFactory schemaFactory = SchemaFactory.newInstance(
+                XMLConstants.W3C_XML_SCHEMA_NS_URI);
+        final Schema schema = schemaFactory.newSchema(xsd);
+        final Validator validator = schema.newValidator();
+        validator.validate(xml);
+    }
+
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jaxp/javax/xml/jaxp/unittest/validation/files/JDK8068376.xml	Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,1 @@
+<root><childtag></childtag></root>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jaxp/javax/xml/jaxp/unittest/validation/files/JDK8068376.xsd	Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,11 @@
+<xs:schema xmlns="mynamespace" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="mynamespace" elementFormDefault="qualified">
+    <xs:element name="root">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="childtag" minOccurs="0" maxOccurs="1">
+                    <xs:complexType></xs:complexType>
+                </xs:element>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+</xs:schema> 
\ No newline at end of file
--- a/test/jdk/com/sun/crypto/provider/Cipher/AES/Padding.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/test/jdk/com/sun/crypto/provider/Cipher/AES/Padding.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -48,19 +48,24 @@
 
     private static final String ALGORITHM = "AES";
     private static final String PROVIDER = "SunJCE";
-    private static final String[] MODES = { "ECb", "CbC", "PCBC", "OFB",
+    private static final String[] MODES_PKCS5PAD = {
+        "ECb", "CbC", "PCBC", "OFB",
         "OFB150", "cFB", "CFB7", "cFB8", "cFB16", "cFB24", "cFB32",
         "Cfb40", "cfB48", "cfB56", "cfB64", "cfB72", "cfB80", "cfB88",
         "cfB96", "cfb104", "cfB112", "cfB120", "OFB8", "OFB16", "OFB24",
         "OFB32", "OFB40", "OFB48", "OFB56", "OFB64", "OFB72", "OFB80",
-        "OFB88", "OFB96", "OFB104", "OFB112", "OFB120", "GCM" };
-    private static final String PADDING = "PKCS5Padding";
+        "OFB88", "OFB96", "OFB104", "OFB112", "OFB120" };
+    private static final String[] MODES_NOPAD = { "CTR", "CTS", "GCM" };
+
     private static final int KEY_LENGTH = 128;
 
     public static void main(String argv[]) throws Exception {
         Padding test = new Padding();
-        for (String mode : MODES) {
-            test.runTest(ALGORITHM, mode, PADDING);
+        for (String mode : MODES_PKCS5PAD) {
+            test.runTest(ALGORITHM, mode, "PKCS5Padding");
+        }
+        for (String mode : MODES_NOPAD) {
+            test.runTest(ALGORITHM, mode, "NoPadding");
         }
     }
 
@@ -92,7 +97,6 @@
                 int offset = ci.update(plainText, 0, plainText.length,
                         cipherText, 0);
                 ci.doFinal(cipherText, offset);
-
                 if (!mo.equalsIgnoreCase("ECB")) {
                     iv = ci.getIV();
                     aps = new IvParameterSpec(iv);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/com/sun/crypto/provider/Cipher/AES/TestNoPaddingModes.java	Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8180392
+ * @summary Ensure SunJCE provider throws exception for unsupported modes
+ *          and padding combinations
+ */
+import java.security.*;
+import java.security.spec.AlgorithmParameterSpec;
+import javax.crypto.*;
+
+public class TestNoPaddingModes {
+
+    // SunJCE only supports NoPadding with following modes
+    private static final String[] MODES = {
+        "CTR", "CTS", "GCM"
+    };
+    private static final String[] PADDINGS = {
+        "PKCS5Padding", "ISO10126Padding"
+    };
+
+    public static void main(String[] args) throws Exception {
+        Provider p = Security.getProvider("SunJCE");
+        String transformation;
+        for (String mode : MODES) {
+            for (String padding : PADDINGS) {
+                transformation = "AES/" + mode + "/" + padding;
+
+                System.out.println("Test using " + transformation);
+                try {
+                    Cipher c = Cipher.getInstance(transformation, "SunJCE");
+                    throw new RuntimeException("=> Fail, no exception thrown");
+                } catch (NoSuchAlgorithmException | NoSuchPaddingException ex) {
+                    System.out.println("=> Expected ex: " + ex);
+                }
+                try {
+                    Cipher c = Cipher.getInstance(transformation, p);
+                    throw new RuntimeException("=> Fail, no exception thrown");
+                } catch (NoSuchAlgorithmException | NoSuchPaddingException ex) {
+                    System.out.println("=> Expected ex: " + ex);
+                }
+            }
+        }
+        System.out.println("Test Passed");
+    }
+
+    public static class MyCipImpl extends CipherSpi {
+        public MyCipImpl() {
+            super();
+            System.out.println("MyCipImpl is created");
+        }
+        protected void engineSetMode(String mode)
+            throws NoSuchAlgorithmException {};
+        protected void engineSetPadding(String padding)
+            throws NoSuchPaddingException {};
+        protected int engineGetBlockSize() { return 16; }
+        protected int engineGetOutputSize(int inputLen) { return 0; }
+        protected byte[] engineGetIV() { return null; }
+        protected AlgorithmParameters engineGetParameters() { return null; }
+        protected void engineInit(int opmode, Key key, SecureRandom random)
+            throws InvalidKeyException {};
+        protected void engineInit(int opmode, Key key,
+                                  AlgorithmParameterSpec params,
+                                  SecureRandom random)
+            throws InvalidKeyException, InvalidAlgorithmParameterException {};
+        protected void engineInit(int opmode, Key key,
+                                  AlgorithmParameters params,
+                                  SecureRandom random)
+            throws InvalidKeyException, InvalidAlgorithmParameterException {};
+        protected byte[] engineUpdate(byte[] input, int inputOffset,
+                                      int inputLen) { return null; }
+        protected int engineUpdate(byte[] input, int inputOffset,
+                                   int inputLen, byte[] output,
+                                   int outputOffset)
+            throws ShortBufferException { return 0; };
+        protected byte[] engineDoFinal(byte[] input, int inputOffset,
+                                       int inputLen)
+            throws IllegalBlockSizeException, BadPaddingException {
+            return null;
+        }
+        protected int engineDoFinal(byte[] input, int inputOffset,
+                                    int inputLen, byte[] output,
+                                    int outputOffset)
+            throws ShortBufferException, IllegalBlockSizeException,
+                   BadPaddingException  { return 0; }
+    }
+}
--- a/test/jdk/com/sun/crypto/provider/Cipher/Blowfish/TestCipherBlowfish.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/test/jdk/com/sun/crypto/provider/Cipher/Blowfish/TestCipherBlowfish.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,20 +32,20 @@
 
 public class TestCipherBlowfish extends TestCipher {
 
-    TestCipherBlowfish() throws NoSuchAlgorithmException {
-        super("Blowfish",
-                new String[]{"CBC", "CTR", "CTS", "ECB", "PCBC",
-                    //CFBx
-                    "CFB", "CFB8", "CFB16", "CFB24", "CFB32", "CFB40", "CFB48", "CFB56",
-                    "CFB64",
-                    //OFBx
-                    "OFB", "OFB8", "OFB16", "OFB24", "OFB32", "OFB40", "OFB48", "OFB56",
-                    "OFB64"},
-                new String[]{"NoPaDDing", "PKCS5Padding"},
-                32, 448);
+    TestCipherBlowfish(String[] modes, String[] paddings) throws NoSuchAlgorithmException {
+        super("Blowfish", modes, paddings, 32, 448);
     }
 
     public static void main(String[] args) throws Exception {
-        new TestCipherBlowfish().runAll();
+        new TestCipherBlowfish(new String[]{ "CBC", "ECB", "PCBC",
+            //CFBx
+            "CFB", "CFB8", "CFB16", "CFB24", "CFB32", "CFB40",
+            "CFB48", "CFB56", "CFB64",
+            //OFBx
+            "OFB", "OFB8", "OFB16", "OFB24", "OFB32", "OFB40",
+            "OFB48", "OFB56", "OFB64"},
+        new String[]{ "NoPaDDing", "PKCS5Padding"}).runAll();
+        new TestCipherBlowfish(new String[]{ "CTR", "CTS" },
+            new String[]{ "NoPaDDing" }).runAll();
     }
 }
--- a/test/jdk/com/sun/crypto/provider/Cipher/DES/TestCipherDES.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/test/jdk/com/sun/crypto/provider/Cipher/DES/TestCipherDES.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,19 +30,20 @@
 
 public class TestCipherDES extends TestCipher {
 
-    TestCipherDES() {
-        super("DES",
-                new String[]{"CBC", "CTR", "CTS", "ECB", "PCBC",
-                    //CFBx
-                    "CFB", "CFB8", "CFB16", "CFB24", "CFB32", "CFB40", "CFB48", "CFB56",
-                    "CFB64",
-                    //OFBx
-                    "OFB", "OFB8", "OFB16", "OFB24", "OFB32", "OFB40", "OFB48", "OFB56",
-                    "OFB64"},
-                new String[]{"NoPaDDing", "PKCS5Padding"});
+    TestCipherDES(String[] modes, String[] paddings) {
+        super("DES", modes, paddings);
     }
 
     public static void main(String[] args) throws Exception {
-        new TestCipherDES().runAll();
+        new TestCipherDES(new String[]{ "CBC", "ECB", "PCBC",
+            //CFBx
+            "CFB", "CFB8", "CFB16", "CFB24", "CFB32", "CFB40",
+            "CFB48", "CFB56", "CFB64",
+            //OFBx
+            "OFB", "OFB8", "OFB16", "OFB24", "OFB32", "OFB40",
+            "OFB48", "OFB56", "OFB64" },
+            new String[]{ "NoPaDDing", "PKCS5Padding" }).runAll();
+        new TestCipherDES(new String[]{ "CTR", "CTS" },
+            new String[]{ "NoPaDDing" }).runAll();
     }
 }
--- a/test/jdk/com/sun/crypto/provider/Cipher/DES/TestCipherDESede.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/test/jdk/com/sun/crypto/provider/Cipher/DES/TestCipherDESede.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,19 +30,22 @@
 
 public class TestCipherDESede extends TestCipher {
 
-    TestCipherDESede() {
-        super("DESede",
-                new String[]{"CBC", "CTR", "CTS", "ECB", "PCBC",
-                    //CFBx
-                    "CFB", "CFB8", "CFB16", "CFB24", "CFB32", "CFB40", "CFB48", "CFB56",
-                    "CFB64",
-                    //OFBx
-                    "OFB", "OFB8", "OFB16", "OFB24", "OFB32", "OFB40", "OFB48", "OFB56",
-                    "OFB64"},
-                new String[]{"NoPaDDing", "PKCS5Padding"});
+    TestCipherDESede(String[] modes, String[] paddings) {
+        super("DESede", modes, paddings);
     }
 
     public static void main(String[] args) throws Exception {
-        new TestCipherDESede().runAll();
+        new TestCipherDESede(
+            new String[]{ "CBC", "ECB", "PCBC",
+                //CFBx
+                "CFB", "CFB8", "CFB16", "CFB24", "CFB32", "CFB40",
+                "CFB48", "CFB56", "CFB64",
+                //OFBx
+                "OFB", "OFB8", "OFB16", "OFB24", "OFB32", "OFB40",
+                "OFB48", "OFB56", "OFB64"},
+                new String[]{ "NoPaDDing", "PKCS5Padding" }).runAll();
+        new TestCipherDESede(
+            new String[]{ "CTR", "CTS" },
+            new String[]{ "NoPaDDing" }).runAll();
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/time/test/java/time/zone/TestZoneRules.java	Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package test.java.time.zone;
+
+import static org.testng.Assert.assertEquals;
+
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZonedDateTime;
+import java.time.ZoneId;
+import java.time.ZoneOffset;
+import java.time.zone.ZoneOffsetTransition;
+import java.time.zone.ZoneRules;
+
+import org.testng.annotations.Test;
+import org.testng.annotations.DataProvider;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+/**
+ * @summary Test ZoneRules whether the savings are positive in time zones that have
+ *      negative savings in the source TZ files. Also, check the transition cutover
+ *      time beyond 24:00, which should translate into the next day.
+ *
+ * @bug 8212970
+ */
+@Test
+public class TestZoneRules {
+
+    private static final ZoneId DUBLIN = ZoneId.of("Europe/Dublin");
+    private static final ZoneId PRAGUE = ZoneId.of("Europe/Prague");
+    private static final ZoneId WINDHOEK = ZoneId.of("Africa/Windhoek");
+    private static final ZoneId CASABLANCA = ZoneId.of("Africa/Casablanca");
+
+    private static final ZoneId TOKYO = ZoneId.of("Asia/Tokyo");
+    private static final LocalTime ONE_AM = LocalTime.of(1, 0);
+
+    @DataProvider
+    private Object[][] negativeDST () {
+        return new Object[][] {
+            // ZoneId, localDate, offset, standard offset, isDaylightSavings
+            // Europe/Dublin for the Rule "Eire"
+            {DUBLIN, LocalDate.of(1970, 6, 23), ZoneOffset.ofHours(1), ZoneOffset.ofHours(0), true},
+            {DUBLIN, LocalDate.of(1971, 6, 23), ZoneOffset.ofHours(1), ZoneOffset.ofHours(0), true},
+            {DUBLIN, LocalDate.of(1971, 11, 1), ZoneOffset.ofHours(0), ZoneOffset.ofHours(0), false},
+            {DUBLIN, LocalDate.of(2019, 6, 23), ZoneOffset.ofHours(1), ZoneOffset.ofHours(0), true},
+            {DUBLIN, LocalDate.of(2019, 12, 23), ZoneOffset.ofHours(0), ZoneOffset.ofHours(0), false},
+
+            // Europe/Prague which contains fixed negative savings (not a named Rule)
+            {PRAGUE, LocalDate.of(1946, 9, 30), ZoneOffset.ofHours(2), ZoneOffset.ofHours(1), true},
+            {PRAGUE, LocalDate.of(1946, 10, 10), ZoneOffset.ofHours(1), ZoneOffset.ofHours(1), false},
+            {PRAGUE, LocalDate.of(1946, 12, 3), ZoneOffset.ofHours(0), ZoneOffset.ofHours(0), false},
+            {PRAGUE, LocalDate.of(1947, 2, 25), ZoneOffset.ofHours(1), ZoneOffset.ofHours(1), false},
+            {PRAGUE, LocalDate.of(1947, 4, 30), ZoneOffset.ofHours(2), ZoneOffset.ofHours(1), true},
+
+            // Africa/Windhoek for the Rule "Namibia"
+            {WINDHOEK, LocalDate.of(1994, 3, 23), ZoneOffset.ofHours(1), ZoneOffset.ofHours(1), false},
+            {WINDHOEK, LocalDate.of(2016, 9, 23), ZoneOffset.ofHours(2), ZoneOffset.ofHours(1), true},
+
+            // Africa/Casablanca for the Rule "Morocco" Defines negative DST till 2037 as of 2019a.
+            {CASABLANCA, LocalDate.of(1939, 9, 13), ZoneOffset.ofHours(1), ZoneOffset.ofHours(0), true},
+            {CASABLANCA, LocalDate.of(1939, 11, 20), ZoneOffset.ofHours(0), ZoneOffset.ofHours(0), false},
+            {CASABLANCA, LocalDate.of(2018, 6, 18), ZoneOffset.ofHours(1), ZoneOffset.ofHours(0), true},
+            {CASABLANCA, LocalDate.of(2019, 1, 1), ZoneOffset.ofHours(1), ZoneOffset.ofHours(0), true},
+            {CASABLANCA, LocalDate.of(2019, 5, 6), ZoneOffset.ofHours(0), ZoneOffset.ofHours(0), false},
+            {CASABLANCA, LocalDate.of(2037, 10, 5), ZoneOffset.ofHours(0), ZoneOffset.ofHours(0), false},
+            {CASABLANCA, LocalDate.of(2037, 11, 16), ZoneOffset.ofHours(1), ZoneOffset.ofHours(0), true},
+            {CASABLANCA, LocalDate.of(2038, 11, 1), ZoneOffset.ofHours(1), ZoneOffset.ofHours(0), true},
+        };
+    }
+
+    @DataProvider
+    private Object[][] transitionBeyondDay() {
+        return new Object[][] {
+            // ZoneId, LocalDateTime, beforeOffset, afterOffset
+
+            // Asserts that the rule:
+            // Rule Japan   1948    1951    -   Sep Sat>=8  25:00   0   S
+            // translates to the next day.
+            {TOKYO, LocalDateTime.of(LocalDate.of(1948, 9, 12), ONE_AM), ZoneOffset.ofHours(10), ZoneOffset.ofHours(9)},
+            {TOKYO, LocalDateTime.of(LocalDate.of(1949, 9, 11), ONE_AM), ZoneOffset.ofHours(10), ZoneOffset.ofHours(9)},
+            {TOKYO, LocalDateTime.of(LocalDate.of(1950, 9, 10), ONE_AM), ZoneOffset.ofHours(10), ZoneOffset.ofHours(9)},
+            {TOKYO, LocalDateTime.of(LocalDate.of(1951, 9, 9), ONE_AM), ZoneOffset.ofHours(10), ZoneOffset.ofHours(9)},
+        };
+    }
+
+    @Test(dataProvider="negativeDST")
+    public void test_NegativeDST(ZoneId zid, LocalDate ld, ZoneOffset offset, ZoneOffset stdOffset, boolean isDST) {
+        Instant i = Instant.from(ZonedDateTime.of(ld, LocalTime.MIN, zid));
+        ZoneRules zr = zid.getRules();
+        assertEquals(zr.getOffset(i), offset);
+        assertEquals(zr.getStandardOffset(i), stdOffset);
+        assertEquals(zr.isDaylightSavings(i), isDST);
+    }
+
+    @Test(dataProvider="transitionBeyondDay")
+    public void test_TransitionBeyondDay(ZoneId zid, LocalDateTime ldt, ZoneOffset before, ZoneOffset after) {
+        ZoneOffsetTransition zot = ZoneOffsetTransition.of(ldt, before, after);
+        ZoneRules zr = zid.getRules();
+        assertTrue(zr.getTransitions().contains(zot));
+    }
+}
--- a/test/jdk/java/util/Locale/LocaleProviders.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/test/jdk/java/util/Locale/LocaleProviders.java	Fri Jul 26 19:11:34 2019 -0400
@@ -28,6 +28,8 @@
 
 public class LocaleProviders {
 
+    private static final boolean IS_WINDOWS = System.getProperty("os.name").startsWith("Windows");
+
     public static void main(String[] args) {
         String methodName = args[0];
 
@@ -76,6 +78,10 @@
                 bug8220227Test();
                 break;
 
+            case "bug8228465Test":
+                bug8228465Test();
+                break;
+
             default:
                 throw new RuntimeException("Test method '"+methodName+"' not found.");
         }
@@ -106,7 +112,7 @@
     static void bug7198834Test() {
         LocaleProviderAdapter lda = LocaleProviderAdapter.getAdapter(DateFormatProvider.class, Locale.US);
         LocaleProviderAdapter.Type type = lda.getAdapterType();
-        if (type == LocaleProviderAdapter.Type.HOST && System.getProperty("os.name").startsWith("Windows")) {
+        if (type == LocaleProviderAdapter.Type.HOST && IS_WINDOWS) {
             DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, Locale.US);
             String date = df.format(new Date());
             if (date.charAt(date.length()-1) == ' ') {
@@ -133,7 +139,7 @@
 
     // This test assumes Windows localized language/country display names.
     static void bug8010666Test() {
-        if (System.getProperty("os.name").startsWith("Windows")) {
+        if (IS_WINDOWS) {
             NumberFormat nf = NumberFormat.getInstance(Locale.US);
             try {
                 double ver = nf.parse(System.getProperty("os.version"))
@@ -215,7 +221,7 @@
     }
 
     static void bug8013903Test() {
-        if (System.getProperty("os.name").startsWith("Windows")) {
+        if (IS_WINDOWS) {
             Date sampleDate = new Date(0x10000000000L);
             String hostResult = "\u5e73\u6210 16.11.03 (Wed) AM 11:53:47";
             String jreResult = "\u5e73\u6210 16.11.03 (\u6c34) \u5348\u524d 11:53:47";
@@ -241,7 +247,7 @@
     }
 
     static void bug8027289Test(String expectedCodePoint) {
-        if (System.getProperty("os.name").startsWith("Windows")) {
+        if (IS_WINDOWS) {
             char[] expectedSymbol = Character.toChars(Integer.valueOf(expectedCodePoint, 16));
             NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.CHINA);
             char formatted = nf.format(7000).charAt(0);
@@ -255,7 +261,7 @@
     }
 
     static void bug8220227Test() {
-        if (System.getProperty("os.name").startsWith("Windows")) {
+        if (IS_WINDOWS) {
             Locale l = new Locale("xx","XX");
             String country = l.getDisplayCountry();
             if (country.endsWith("(XX)")) {
@@ -264,4 +270,20 @@
             }
         }
     }
+
+    static void bug8228465Test() {
+        LocaleProviderAdapter lda = LocaleProviderAdapter.getAdapter(CalendarNameProvider.class, Locale.US);
+        LocaleProviderAdapter.Type type = lda.getAdapterType();
+        if (type == LocaleProviderAdapter.Type.HOST && IS_WINDOWS) {
+            var names =  new GregorianCalendar()
+                .getDisplayNames(Calendar.ERA, Calendar.SHORT_FORMAT, Locale.US);
+            if (!names.keySet().contains("AD") ||
+                names.get("AD").intValue() != 1) {
+                    throw new RuntimeException(
+                            "Short Era name for 'AD' is missing or incorrect");
+            } else {
+                System.out.println("bug8228465Test succeeded.");
+            }
+        }
+    }
 }
--- a/test/jdk/java/util/Locale/LocaleProvidersRun.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/test/jdk/java/util/Locale/LocaleProvidersRun.java	Fri Jul 26 19:11:34 2019 -0400
@@ -25,7 +25,7 @@
  * @test
  * @bug 6336885 7196799 7197573 7198834 8000245 8000615 8001440 8008577
  *      8010666 8013086 8013233 8013903 8015960 8028771 8054482 8062006
- *      8150432 8215913 8220227
+ *      8150432 8215913 8220227 8228465
  * @summary tests for "java.locale.providers" system property
  * @library /test/lib
  * @build LocaleProviders
@@ -154,6 +154,8 @@
             testRun("HOST", "bug8220227Test", "", "", "");
         }
 
+        //testing 8228465 fix. (Windows only)
+        testRun("HOST", "bug8228465Test", "", "", "");
     }
 
     private static void testRun(String prefList, String methodName,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/TimeZone/NegativeDSTTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import static org.testng.Assert.assertEquals;
+
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalTime;
+import java.time.ZonedDateTime;
+import java.time.ZoneId;
+import java.util.Date;
+import java.util.TimeZone;
+
+import org.testng.annotations.Test;
+import org.testng.annotations.DataProvider;
+import static org.testng.Assert.assertEquals;
+
+/**
+ * @test
+ * @bug 8212970
+ * @summary Test whether the savings are positive in time zones that have
+ *      negative savings in the source TZ files.
+ * @run testng NegativeDSTTest
+ */
+@Test
+public class NegativeDSTTest {
+
+    private static final TimeZone DUBLIN = TimeZone.getTimeZone("Europe/Dublin");
+    private static final TimeZone PRAGUE = TimeZone.getTimeZone("Europe/Prague");
+    private static final TimeZone WINDHOEK = TimeZone.getTimeZone("Africa/Windhoek");
+    private static final TimeZone CASABLANCA = TimeZone.getTimeZone("Africa/Casablanca");
+    private static final int ONE_HOUR = 3600_000;
+
+    @DataProvider
+    private Object[][] negativeDST () {
+        return new Object[][] {
+            // TimeZone, localDate, offset, isDaylightSavings
+            // Europe/Dublin for the Rule "Eire"
+            {DUBLIN, LocalDate.of(1970, 6, 23), ONE_HOUR, true},
+            {DUBLIN, LocalDate.of(1971, 6, 23), ONE_HOUR, true},
+            {DUBLIN, LocalDate.of(1971, 11, 1), 0, false},
+            {DUBLIN, LocalDate.of(2019, 6, 23), ONE_HOUR, true},
+            {DUBLIN, LocalDate.of(2019, 12, 23), 0, false},
+
+            // Europe/Prague which contains fixed negative savings (not a named Rule)
+            {PRAGUE, LocalDate.of(1946, 9, 30), 2 * ONE_HOUR, true},
+            {PRAGUE, LocalDate.of(1946, 10, 10), ONE_HOUR, false},
+            {PRAGUE, LocalDate.of(1946, 12, 3), 0, false},
+            {PRAGUE, LocalDate.of(1947, 2, 25), ONE_HOUR, false},
+            {PRAGUE, LocalDate.of(1947, 4, 30), 2 * ONE_HOUR, true},
+
+            // Africa/Windhoek for the Rule "Namibia"
+            {WINDHOEK, LocalDate.of(1994, 3, 23), ONE_HOUR, false},
+            {WINDHOEK, LocalDate.of(2016, 9, 23), 2 * ONE_HOUR, true},
+
+            // Africa/Casablanca for the Rule "Morocco" Defines negative DST till 2037 as of 2019a.
+            {CASABLANCA, LocalDate.of(1939, 9, 13), ONE_HOUR, true},
+            {CASABLANCA, LocalDate.of(1939, 11, 20), 0, false},
+            {CASABLANCA, LocalDate.of(2018, 6, 18), ONE_HOUR, true},
+            {CASABLANCA, LocalDate.of(2019, 1, 1), ONE_HOUR, true},
+            {CASABLANCA, LocalDate.of(2019, 5, 6), 0, false},
+            {CASABLANCA, LocalDate.of(2037, 10, 5), 0, false},
+            {CASABLANCA, LocalDate.of(2037, 11, 16), ONE_HOUR, true},
+            {CASABLANCA, LocalDate.of(2038, 11, 1), ONE_HOUR, true},
+        };
+    }
+
+    @Test(dataProvider="negativeDST")
+    public void test_NegativeDST(TimeZone tz, LocalDate ld, int offset, boolean isDST) {
+        Date d = Date.from(Instant.from(ZonedDateTime.of(ld, LocalTime.MIN, tz.toZoneId())));
+        assertEquals(tz.getOffset(d.getTime()), offset);
+        assertEquals(tz.inDaylightTime(d), isDST);
+    }
+}
--- a/test/jdk/javax/crypto/Cipher/CipherInputStreamExceptions.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/test/jdk/javax/crypto/Cipher/CipherInputStreamExceptions.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -55,7 +55,7 @@
 
     /* Full read stream, check that getMoreData() is throwing an exception
      * This test
-     *   1) Encrypt 100 bytes with AES/GCM/PKCS5Padding
+     *   1) Encrypt 100 bytes with AES/GCM/NoPadding
      *   2) Changes the last byte to invalidate the authetication tag.
      *   3) Fully reads CipherInputStream to decrypt the message and closes
      */
@@ -66,7 +66,7 @@
 
         System.out.println("Running gcm_AEADBadTag");
 
-        // Encrypt 100 bytes with AES/GCM/PKCS5Padding
+        // Encrypt 100 bytes with AES/GCM/NoPadding
         byte[] ct = encryptedText("GCM", 100);
         // Corrupt the encrypted message
         ct = corruptGCM(ct);
@@ -92,7 +92,7 @@
 
     /* Short read stream,
      * This test
-     *   1) Encrypt 100 bytes with AES/GCM/PKCS5Padding
+     *   1) Encrypt 100 bytes with AES/GCM/NoPadding
      *   2) Reads 100 bytes from stream to decrypt the message and closes
      *   3) Make sure no value is returned by read()
      *   4) Make sure no exception is thrown
@@ -106,7 +106,7 @@
 
         byte[] pt = new byte[600];
         pt[0] = 1;
-        // Encrypt provided 600 bytes with AES/GCM/PKCS5Padding
+        // Encrypt provided 600 bytes with AES/GCM/NoPadding
         byte[] ct = encryptedText("GCM", pt);
         // Create stream for decryption
         CipherInputStream in = getStream("GCM", ct);
@@ -134,7 +134,7 @@
      * Verify doFinal() exception is suppressed when input stream is not
      * read before it is closed.
      * This test:
-     *   1) Encrypt 100 bytes with AES/GCM/PKCS5Padding
+     *   1) Encrypt 100 bytes with AES/GCM/NoPadding
      *   2) Changes the last byte to invalidate the authetication tag.
      *   3) Opens a CipherInputStream and the closes it. Never reads from it.
      *
@@ -146,7 +146,7 @@
 
         System.out.println("Running supressUnreadCorrupt test");
 
-        // Encrypt 100 bytes with AES/GCM/PKCS5Padding
+        // Encrypt 100 bytes with AES/GCM/NoPadding
         byte[] ct = encryptedText("GCM", 100);
         // Corrupt the encrypted message
         ct = corruptGCM(ct);
@@ -166,7 +166,7 @@
      * Verify noexception thrown when 1 byte is read from a GCM stream
      * and then closed
      * This test:
-     *   1) Encrypt 100 bytes with AES/GCM/PKCS5Padding
+     *   1) Encrypt 100 bytes with AES/GCM/NoPadding
      *   2) Read one byte from the stream, expect no exception thrown.
      *   4) Close stream,expect no exception thrown.
      */
@@ -174,7 +174,7 @@
 
         System.out.println("Running gcm_oneReadByte test");
 
-        // Encrypt 100 bytes with AES/GCM/PKCS5Padding
+        // Encrypt 100 bytes with AES/GCM/NoPadding
         byte[] ct = encryptedText("GCM", 100);
         // Create stream for decryption
         CipherInputStream in = getStream("GCM", ct);
@@ -192,7 +192,7 @@
      * Verify exception thrown when 1 byte is read from a corrupted GCM stream
      * and then closed
      * This test:
-     *   1) Encrypt 100 bytes with AES/GCM/PKCS5Padding
+     *   1) Encrypt 100 bytes with AES/GCM/NoPadding
      *   2) Changes the last byte to invalidate the authetication tag.
      *   3) Read one byte from the stream, expect exception thrown.
      *   4) Close stream,expect no exception thrown.
@@ -201,7 +201,7 @@
 
         System.out.println("Running gcm_oneReadByteCorrupt test");
 
-        // Encrypt 100 bytes with AES/GCM/PKCS5Padding
+        // Encrypt 100 bytes with AES/GCM/NoPadding
         byte[] ct = encryptedText("GCM", 100);
         // Corrupt the encrypted message
         ct = corruptGCM(ct);
@@ -357,7 +357,7 @@
     static byte[] encryptedText(String mode, byte[] pt) throws Exception{
         Cipher c;
         if (mode.compareTo("GCM") == 0) {
-            c = Cipher.getInstance("AES/GCM/PKCS5Padding", "SunJCE");
+            c = Cipher.getInstance("AES/GCM/NoPadding", "SunJCE");
             c.init(Cipher.ENCRYPT_MODE, key, gcmspec);
         } else if (mode.compareTo("CBC") == 0) {
             c = Cipher.getInstance("AES/CBC/PKCS5Padding", "SunJCE");
@@ -380,7 +380,7 @@
         Cipher c;
 
         if (mode.compareTo("GCM") == 0) {
-            c = Cipher.getInstance("AES/GCM/PKCS5Padding", "SunJCE");
+            c = Cipher.getInstance("AES/GCM/NoPadding", "SunJCE");
             c.init(Cipher.DECRYPT_MODE, key, gcmspec);
         } else if (mode.compareTo("CBC") == 0) {
             c = Cipher.getInstance("AES/CBC/PKCS5Padding", "SunJCE");
--- a/test/jdk/sun/util/calendar/zi/TestZoneInfo310.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/test/jdk/sun/util/calendar/zi/TestZoneInfo310.java	Fri Jul 26 19:11:34 2019 -0400
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8007572 8008161 8157792 8224560
+ * @bug 8007572 8008161 8157792 8212970 8224560
  * @summary Test whether the TimeZone generated from JSR310 tzdb is the same
  * as the one from the tz data from javazic
  * @modules java.base/sun.util.calendar:+open
@@ -46,18 +46,18 @@
     public static void main(String[] args) throws Throwable {
 
         String TESTDIR = System.getProperty("test.dir", ".");
-        String SRCDIR = System.getProperty("test.src", ".");
-        String tzdir = SRCDIR + File.separator + "tzdata";
-        String tzfiles = "africa antarctica asia australasia europe northamerica pacificnew southamerica backward etcetera systemv";
-        String jdk_tzdir = SRCDIR + File.separator + "tzdata_jdk";
-        String jdk_tzfiles = "gmt jdk11_backward";
+        Path tzdir = Paths.get(System.getProperty("test.root"),
+            "..", "..", "make", "data", "tzdata");
+        String tzfiles = "africa antarctica asia australasia europe northamerica pacificnew southamerica backward etcetera systemv gmt";
+        Path jdk_tzdir = Paths.get(System.getProperty("test.src"), "tzdata_jdk");
+        String jdk_tzfiles = "jdk11_backward";
         String zidir = TESTDIR + File.separator + "zi";
         File fZidir = new File(zidir);
         if (!fZidir.exists()) {
             fZidir.mkdirs();
         }
         Matcher m = Pattern.compile("tzdata(?<ver>[0-9]{4}[A-z])")
-                           .matcher(new String(Files.readAllBytes(Paths.get(tzdir, "VERSION")), "ascii"));
+                           .matcher(new String(Files.readAllBytes(tzdir.resolve("VERSION")), "ascii"));
         String ver = m.find() ? m.group("ver") : "NULL";
 
         ArrayList<String> alist = new ArrayList<>();
@@ -66,10 +66,10 @@
         alist.add("-d");
         alist.add(zidir);
         for (String f : tzfiles.split(" ")) {
-            alist.add(tzdir + File.separator + f);
+            alist.add(tzdir.resolve(f).toString());
         }
         for (String f : jdk_tzfiles.split(" ")) {
-            alist.add(jdk_tzdir + File.separator + f);
+            alist.add(jdk_tzdir.resolve(f).toString());
         }
         System.out.println("Compiling tz files!");
         Main.main(alist.toArray(new String[alist.size()]));
@@ -174,10 +174,30 @@
              * Temporary ignoring the failing TimeZones which are having zone
              * rules defined till year 2037 and/or above and have negative DST
              * save time in IANA tzdata. This bug is tracked via JDK-8223388.
+             *
+             * These are the zones/rules that employ negative DST in vanguard
+             * format (as of 2019a):
+             *
+             *  - Rule "Eire"
+             *  - Rule "Morocco"
+             *  - Rule "Namibia"
+             *  - Zone "Europe/Prague"
+             *
+             * Tehran/Iran rule has rules beyond 2037, in which javazic assumes
+             * to be the last year. Thus javazic's rule is based on year 2037
+             * (Mar 20th/Sep 20th are the cutover dates), while the real rule
+             * has year 2087 where Mar 21st/Sep 21st are the cutover dates.
              */
-            if (zid.equals("Africa/Casablanca") || zid.equals("Africa/El_Aaiun")
-                || zid.equals("Asia/Tehran") || zid.equals("Iran")) {
-                continue;
+            if (zid.equals("Africa/Casablanca") || // uses "Morocco" rule
+                zid.equals("Africa/El_Aaiun") || // uses "Morocco" rule
+                zid.equals("Africa/Windhoek") || // uses "Namibia" rule
+                zid.equals("Eire") ||
+                zid.equals("Europe/Bratislava") || // link to "Europe/Prague"
+                zid.equals("Europe/Dublin") || // uses "Eire" rule
+                zid.equals("Europe/Prague") ||
+                zid.equals("Asia/Tehran") || // last rule mismatch
+                zid.equals("Iran")) { // last rule mismatch
+                    continue;
             }
             if (! zi.equalsTo(ziOLD)) {
                 System.out.println(zi.diffsTo(ziOLD));
--- a/test/jdk/sun/util/calendar/zi/tzdata/VERSION	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-tzdata2019a
--- a/test/jdk/sun/util/calendar/zi/tzdata/africa	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1370 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# tzdb data for Africa and environs
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# This file is by no means authoritative; if you think you know better,
-# go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).  For more, please see
-# the file CONTRIBUTING in the tz distribution.
-
-# From Paul Eggert (2018-05-27):
-#
-# Unless otherwise specified, the source for data through 1990 is:
-# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
-# San Diego: ACS Publications, Inc. (2003).
-# Unfortunately this book contains many errors and cites no sources.
-#
-# Many years ago Gwillim Law wrote that a good source
-# for time zone data was the International Air Transport
-# Association's Standard Schedules Information Manual (IATA SSIM),
-# published semiannually.  Law sent in several helpful summaries
-# of the IATA's data after 1990.  Except where otherwise noted,
-# IATA SSIM is the source for entries after 1990.
-#
-# Another source occasionally used is Edward W. Whitman, World Time Differences,
-# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
-# I found in the UCLA library.
-#
-# For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
-# https://www.jstor.org/stable/1774359
-#
-# A reliable and entertaining source about time zones is
-# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
-#
-# European-style abbreviations are commonly used along the Mediterranean.
-# For sub-Saharan Africa abbreviations were less standardized.
-# Previous editions of this database used WAT, CAT, SAT, and EAT
-# for UT +00 through +03, respectively,
-# but in 1997 Mark R V Murray reported that
-# 'SAST' is the official abbreviation for +02 in the country of South Africa,
-# 'CAT' is commonly used for +02 in countries north of South Africa, and
-# 'WAT' is probably the best name for +01, as the common phrase for
-# the area that includes Nigeria is "West Africa".
-#
-# To summarize, the following abbreviations seemed to have some currency:
-#	 +00	GMT	Greenwich Mean Time
-#	 +02	CAT	Central Africa Time
-#	 +02	SAST	South Africa Standard Time
-# and Murray suggested the following abbreviation:
-#	 +01	WAT	West Africa Time
-# Murray's suggestion seems to have caught on in news reports and the like.
-# I vaguely recall 'WAT' also being used for -01 in the past but
-# cannot now come up with solid citations.
-#
-# I invented the following abbreviations in the 1990s:
-#	 +02	WAST	West Africa Summer Time
-#	 +03	CAST	Central Africa Summer Time
-#	 +03	SAST	South Africa Summer Time
-#	 +03	EAT	East Africa Time
-# 'EAT' seems to have caught on and is in current timestamps, and though
-# the other abbreviations are rarer and are only in past timestamps,
-# they are paired with better-attested non-DST abbreviations.
-# Corrections are welcome.
-
-# Algeria
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Algeria	1916	only	-	Jun	14	23:00s	1:00	S
-Rule	Algeria	1916	1919	-	Oct	Sun>=1	23:00s	0	-
-Rule	Algeria	1917	only	-	Mar	24	23:00s	1:00	S
-Rule	Algeria	1918	only	-	Mar	 9	23:00s	1:00	S
-Rule	Algeria	1919	only	-	Mar	 1	23:00s	1:00	S
-Rule	Algeria	1920	only	-	Feb	14	23:00s	1:00	S
-Rule	Algeria	1920	only	-	Oct	23	23:00s	0	-
-Rule	Algeria	1921	only	-	Mar	14	23:00s	1:00	S
-Rule	Algeria	1921	only	-	Jun	21	23:00s	0	-
-Rule	Algeria	1939	only	-	Sep	11	23:00s	1:00	S
-Rule	Algeria	1939	only	-	Nov	19	 1:00	0	-
-Rule	Algeria	1944	1945	-	Apr	Mon>=1	 2:00	1:00	S
-Rule	Algeria	1944	only	-	Oct	 8	 2:00	0	-
-Rule	Algeria	1945	only	-	Sep	16	 1:00	0	-
-Rule	Algeria	1971	only	-	Apr	25	23:00s	1:00	S
-Rule	Algeria	1971	only	-	Sep	26	23:00s	0	-
-Rule	Algeria	1977	only	-	May	 6	 0:00	1:00	S
-Rule	Algeria	1977	only	-	Oct	21	 0:00	0	-
-Rule	Algeria	1978	only	-	Mar	24	 1:00	1:00	S
-Rule	Algeria	1978	only	-	Sep	22	 3:00	0	-
-Rule	Algeria	1980	only	-	Apr	25	 0:00	1:00	S
-Rule	Algeria	1980	only	-	Oct	31	 2:00	0	-
-# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
-# more precise 0:09:21.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Algiers	0:12:12 -	LMT	1891 Mar 15  0:01
-			0:09:21	-	PMT	1911 Mar 11 # Paris Mean Time
-			0:00	Algeria	WE%sT	1940 Feb 25  2:00
-			1:00	Algeria	CE%sT	1946 Oct  7
-			0:00	-	WET	1956 Jan 29
-			1:00	-	CET	1963 Apr 14
-			0:00	Algeria	WE%sT	1977 Oct 21
-			1:00	Algeria	CE%sT	1979 Oct 26
-			0:00	Algeria	WE%sT	1981 May
-			1:00	-	CET
-
-# Angola
-# Benin
-# See Africa/Lagos.
-
-# Botswana
-# See Africa/Maputo.
-
-# Burkina Faso
-# See Africa/Abidjan.
-
-# Burundi
-# See Africa/Maputo.
-
-# Cameroon
-# See Africa/Lagos.
-
-# Cape Verde / Cabo Verde
-#
-# From Paul Eggert (2018-02-16):
-# Shanks gives 1907 for the transition to +02.
-# For now, ignore that and follow the 1911-05-26 Portuguese decree
-# (see Europe/Lisbon).
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Atlantic/Cape_Verde -1:34:04 -	LMT	1912 Jan 01  2:00u # Praia
-			-2:00	-	-02	1942 Sep
-			-2:00	1:00	-01	1945 Oct 15
-			-2:00	-	-02	1975 Nov 25  2:00
-			-1:00	-	-01
-
-# Central African Republic
-# See Africa/Lagos.
-
-# Chad
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Ndjamena	1:00:12 -	LMT	1912        # N'Djamena
-			1:00	-	WAT	1979 Oct 14
-			1:00	1:00	WAST	1980 Mar  8
-			1:00	-	WAT
-
-# Comoros
-# See Africa/Nairobi.
-
-# Democratic Republic of the Congo
-# See Africa/Lagos for the western part and Africa/Maputo for the eastern.
-
-# Republic of the Congo
-# See Africa/Lagos.
-
-# CĂŽte d'Ivoire / Ivory Coast
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Abidjan	-0:16:08 -	LMT	1912
-			 0:00	-	GMT
-Link Africa/Abidjan Africa/Bamako	# Mali
-Link Africa/Abidjan Africa/Banjul	# Gambia
-Link Africa/Abidjan Africa/Conakry	# Guinea
-Link Africa/Abidjan Africa/Dakar	# Senegal
-Link Africa/Abidjan Africa/Freetown	# Sierra Leone
-Link Africa/Abidjan Africa/Lome		# Togo
-Link Africa/Abidjan Africa/Nouakchott	# Mauritania
-Link Africa/Abidjan Africa/Ouagadougou	# Burkina Faso
-Link Africa/Abidjan Atlantic/St_Helena	# St Helena
-
-# Djibouti
-# See Africa/Nairobi.
-
-###############################################################################
-
-# Egypt
-
-# Milne says Cairo used 2:05:08.9, the local mean time of the Abbasizeh
-# observatory; round to nearest.  Milne also says that the official time for
-# Egypt was mean noon at the Great Pyramid, 2:04:30.5, but apparently this
-# did not apply to Cairo, Alexandria, or Port Said.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Egypt	1940	only	-	Jul	15	0:00	1:00	S
-Rule	Egypt	1940	only	-	Oct	 1	0:00	0	-
-Rule	Egypt	1941	only	-	Apr	15	0:00	1:00	S
-Rule	Egypt	1941	only	-	Sep	16	0:00	0	-
-Rule	Egypt	1942	1944	-	Apr	 1	0:00	1:00	S
-Rule	Egypt	1942	only	-	Oct	27	0:00	0	-
-Rule	Egypt	1943	1945	-	Nov	 1	0:00	0	-
-Rule	Egypt	1945	only	-	Apr	16	0:00	1:00	S
-Rule	Egypt	1957	only	-	May	10	0:00	1:00	S
-Rule	Egypt	1957	1958	-	Oct	 1	0:00	0	-
-Rule	Egypt	1958	only	-	May	 1	0:00	1:00	S
-Rule	Egypt	1959	1981	-	May	 1	1:00	1:00	S
-Rule	Egypt	1959	1965	-	Sep	30	3:00	0	-
-Rule	Egypt	1966	1994	-	Oct	 1	3:00	0	-
-Rule	Egypt	1982	only	-	Jul	25	1:00	1:00	S
-Rule	Egypt	1983	only	-	Jul	12	1:00	1:00	S
-Rule	Egypt	1984	1988	-	May	 1	1:00	1:00	S
-Rule	Egypt	1989	only	-	May	 6	1:00	1:00	S
-Rule	Egypt	1990	1994	-	May	 1	1:00	1:00	S
-# IATA (after 1990) says transitions are at 0:00.
-# Go with IATA starting in 1995, except correct 1995 entry from 09-30 to 09-29.
-
-# From Alexander Krivenyshev (2011-04-20):
-# "...Egypt's interim cabinet decided on Wednesday to cancel daylight
-# saving time after a poll posted on its website showed the majority of
-# Egyptians would approve the cancellation."
-#
-# Egypt to cancel daylight saving time
-# http://www.almasryalyoum.com/en/node/407168
-# or
-# http://www.worldtimezone.com/dst_news/dst_news_egypt04.html
-Rule	Egypt	1995	2010	-	Apr	lastFri	 0:00s	1:00	S
-Rule	Egypt	1995	2005	-	Sep	lastThu	24:00	0	-
-# From Steffen Thorsen (2006-09-19):
-# The Egyptian Gazette, issue 41,090 (2006-09-18), page 1, reports:
-# Egypt will turn back clocks by one hour at the midnight of Thursday
-# after observing the daylight saving time since May.
-# http://news.gom.com.eg/gazette/pdf/2006/09/18/01.pdf
-Rule	Egypt	2006	only	-	Sep	21	24:00	0	-
-# From Dirk Losch (2007-08-14):
-# I received a mail from an airline which says that the daylight
-# saving time in Egypt will end in the night of 2007-09-06 to 2007-09-07.
-# From Jesper NĂžrgaard Welen (2007-08-15): [The following agree:]
-# http://www.nentjes.info/Bill/bill5.htm
-# https://www.timeanddate.com/worldclock/city.html?n=53
-# From Steffen Thorsen (2007-09-04): The official information...:
-# http://www.sis.gov.eg/En/EgyptOnline/Miscellaneous/000002/0207000000000000001580.htm
-Rule	Egypt	2007	only	-	Sep	Thu>=1	24:00	0	-
-# From Abdelrahman Hassan (2007-09-06):
-# Due to the Hijri (lunar Islamic calendar) year being 11 days shorter
-# than the year of the Gregorian calendar, Ramadan shifts earlier each
-# year. This year it will be observed September 13 (September is quite
-# hot in Egypt), and the idea is to make fasting easier for workers by
-# shifting business hours one hour out of daytime heat. Consequently,
-# unless discontinued, next DST may end Thursday 28 August 2008.
-# From Paul Eggert (2007-08-17):
-# For lack of better info, assume the new rule is last Thursday in August.
-
-# From Petr Machata (2009-04-06):
-# The following appeared in Red Hat bugzilla[1] (edited):
-#
-# > $ zdump -v /usr/share/zoneinfo/Africa/Cairo | grep 2009
-# > /usr/share/zoneinfo/Africa/Cairo  Thu Apr 23 21:59:59 2009 UTC = Thu =
-# Apr 23
-# > 23:59:59 2009 EET isdst=0 gmtoff=7200
-# > /usr/share/zoneinfo/Africa/Cairo  Thu Apr 23 22:00:00 2009 UTC = Fri =
-# Apr 24
-# > 01:00:00 2009 EEST isdst=1 gmtoff=10800
-# > /usr/share/zoneinfo/Africa/Cairo  Thu Aug 27 20:59:59 2009 UTC = Thu =
-# Aug 27
-# > 23:59:59 2009 EEST isdst=1 gmtoff=10800
-# > /usr/share/zoneinfo/Africa/Cairo  Thu Aug 27 21:00:00 2009 UTC = Thu =
-# Aug 27
-# > 23:00:00 2009 EET isdst=0 gmtoff=7200
-#
-# > end date should be Thu Sep 24 2009 (Last Thursday in September at 23:59=
-# :59)
-# > http://support.microsoft.com/kb/958729/
-#
-# timeanddate[2] and another site I've found[3] also support that.
-#
-# [1] https://bugzilla.redhat.com/show_bug.cgi?id=492263
-# [2] https://www.timeanddate.com/worldclock/clockchange.html?n=53
-# [3] https://wwp.greenwichmeantime.com/time-zone/africa/egypt/
-
-# From Arthur David Olson (2009-04-20):
-# In 2009 (and for the next several years), Ramadan ends before the fourth
-# Thursday in September; Egypt is expected to revert to the last Thursday
-# in September.
-
-# From Steffen Thorsen (2009-08-11):
-# We have been able to confirm the August change with the Egyptian Cabinet
-# Information and Decision Support Center:
-# https://www.timeanddate.com/news/time/egypt-dst-ends-2009.html
-#
-# The Middle East News Agency
-# https://www.mena.org.eg/index.aspx
-# also reports "Egypt starts winter time on August 21"
-# today in article numbered "71, 11/08/2009 12:25 GMT."
-# Only the title above is available without a subscription to their service,
-# and can be found by searching for "winter" in their search engine
-# (at least today).
-
-# From Alexander Krivenyshev (2010-07-20):
-# According to News from Egypt - Al-Masry Al-Youm Egypt's cabinet has
-# decided that Daylight Saving Time will not be used in Egypt during
-# Ramadan.
-#
-# Arabic translation:
-# "Clocks to go back during Ramadan - and then forward again"
-# http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again
-# http://www.worldtimezone.com/dst_news/dst_news_egypt02.html
-
-# From Ahmad El-Dardiry (2014-05-07):
-# Egypt is to change back to Daylight system on May 15
-# http://english.ahram.org.eg/NewsContent/1/64/100735/Egypt/Politics-/Egypts-government-to-reapply-daylight-saving-time-.aspx
-
-# From Gunther Vermier (2014-05-13):
-# our Egypt office confirms that the change will be at 15 May "midnight" (24:00)
-
-# From Imed Chihi (2014-06-04):
-# We have finally "located" a precise official reference about the DST changes
-# in Egypt.  The Ministers Cabinet decision is explained at
-# http://www.cabinet.gov.eg/Media/CabinetMeetingsDetails.aspx?id=347 ...
-# [T]his (Arabic) site is not accessible outside Egypt, but the page ...
-# translates into: "With regard to daylight saving time, it is scheduled to
-# take effect at exactly twelve o'clock this evening, Thursday, 15 MAY 2014,
-# to be suspended by twelve o'clock on the evening of Thursday, 26 JUN 2014,
-# and re-established again at the end of the month of Ramadan, at twelve
-# o'clock on the evening of Thursday, 31 JUL 2014."  This statement has been
-# reproduced by other (more accessible) sites[, e.g.,]...
-# http://elgornal.net/news/news.aspx?id=4699258
-
-# From Paul Eggert (2014-06-04):
-# Sarah El Deeb and Lee Keath of AP report that the Egyptian government says
-# the change is because of blackouts in Cairo, even though Ahram Online (cited
-# above) says DST had no affect on electricity consumption.  There is
-# no information about when DST will end this fall.  See:
-# http://abcnews.go.com/International/wireStory/el-sissi-pushes-egyptians-line-23614833
-
-# From Steffen Thorsen (2015-04-08):
-# Egypt will start DST on midnight after Thursday, April 30, 2015.
-# This is based on a law (no 35) from May 15, 2014 saying it starts the last
-# Thursday of April....  Clocks will still be turned back for Ramadan, but
-# dates not yet announced....
-# http://almogaz.com/news/weird-news/2015/04/05/1947105 ...
-# https://www.timeanddate.com/news/time/egypt-starts-dst-2015.html
-
-# From Ahmed Nazmy (2015-04-20):
-# Egypt's ministers cabinet just announced ... that it will cancel DST at
-# least for 2015.
-#
-# From Tim Parenti (2015-04-20):
-# http://english.ahram.org.eg/WriterArticles/NewsContentP/1/128195/Egypt/No-daylight-saving-this-summer-Egypts-prime-minist.aspx
-# "Egypt's cabinet agreed on Monday not to switch clocks for daylight saving
-# time this summer, and carry out studies on the possibility of canceling the
-# practice altogether in future years."
-#
-# From Paul Eggert (2015-04-24):
-# Yesterday the office of Egyptian President El-Sisi announced his
-# decision to abandon DST permanently.  See Ahram Online 2015-04-24.
-# http://english.ahram.org.eg/NewsContent/1/64/128509/Egypt/Politics-/Sisi-cancels-daylight-saving-time-in-Egypt.aspx
-
-# From Steffen Thorsen (2016-04-29):
-# Egypt will have DST from July 7 until the end of October....
-# http://english.ahram.org.eg/NewsContentP/1/204655/Egypt/Daylight-savings-time-returning-to-Egypt-on--July.aspx
-# From Mina Samuel (2016-07-04):
-# Egyptian government took the decision to cancel the DST,
-
-Rule	Egypt	2008	only	-	Aug	lastThu	24:00	0	-
-Rule	Egypt	2009	only	-	Aug	20	24:00	0	-
-Rule	Egypt	2010	only	-	Aug	10	24:00	0	-
-Rule	Egypt	2010	only	-	Sep	 9	24:00	1:00	S
-Rule	Egypt	2010	only	-	Sep	lastThu	24:00	0	-
-Rule	Egypt	2014	only	-	May	15	24:00	1:00	S
-Rule	Egypt	2014	only	-	Jun	26	24:00	0	-
-Rule	Egypt	2014	only	-	Jul	31	24:00	1:00	S
-Rule	Egypt	2014	only	-	Sep	lastThu	24:00	0	-
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Cairo	2:05:09 -	LMT	1900 Oct
-			2:00	Egypt	EE%sT
-
-# Equatorial Guinea
-# See Africa/Lagos.
-
-# Eritrea
-# See Africa/Nairobi.
-
-# Eswatini (formerly Swaziland)
-# See Africa/Johannesburg.
-
-# Ethiopia
-# See Africa/Nairobi.
-#
-# Unfortunately tzdb records only Western clock time in use in Ethiopia,
-# as the tzdb format is not up to properly recording a common Ethiopian
-# timekeeping practice that is based on solar time.  See:
-# Mortada D. If you have a meeting in Ethiopia, you'd better double
-# check the time. PRI's The World. 2015-01-30 15:15 -05.
-# https://www.pri.org/stories/2015-01-30/if-you-have-meeting-ethiopia-you-better-double-check-time
-
-# Gabon
-# See Africa/Lagos.
-
-# Gambia
-# See Africa/Abidjan.
-
-# Ghana
-
-# From Paul Eggert (2018-01-30):
-# Whitman says DST was observed from 1931 to "the present";
-# Shanks & Pottenger say 1936 to 1942 with 20 minutes of DST,
-# with transitions on 09-01 and 12-31 at 00:00.
-# Page 33 of Parish GCB, Colonial Reports - Annual. No. 1066. Gold
-# Coast. Report for 1919. (March 1921), OCLC 784024077
-# http://libsysdigi.library.illinois.edu/ilharvest/africana/books2011-05/5530214/5530214_1919/5530214_1919_opt.pdf
-# lists the Determination of the Time Ordinance, 1919, No. 18,
-# "to advance the time observed locally by the space of twenty minutes
-# during the last four months of each year; the object in view being
-# to extend during those months the period of daylight-time available
-# for evening recreation after office hours."
-# Vanessa Ogle, The Global Transformation of Time, 1870-1950 (2015), p 33,
-# writes "In 1919, the Gold Coast (Ghana as of 1957) made Greenwich
-# time its legal time and simultaneously legalized a summer time of
-# UTC - 00:20 minutes from March to October."; a footnote lists
-# the ordinance as being dated 1919-11-24.
-# The Crown Colonist, Volume 12 (1942), p 176, says "the Government
-# intend advancing Gold Coast time half an hour ahead of G.M.T.
-# The actual date of the alteration has not yet been announced."
-# These sources are incomplete and contradictory.  Possibly what is
-# now Ghana observed different DST regimes in different years.  For
-# lack of better info, use Shanks except treat the minus sign as a
-# typo, and assume DST started in 1920 not 1936.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Ghana	1920	1942	-	Sep	 1	0:00	0:20	-
-Rule	Ghana	1920	1942	-	Dec	31	0:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Accra	-0:00:52 -	LMT	1918
-			 0:00	Ghana	GMT/+0020
-
-# Guinea
-# See Africa/Abidjan.
-
-# Guinea-Bissau
-#
-# From Paul Eggert (2018-02-16):
-# Shanks gives 1911-05-26 for the transition to WAT,
-# evidently confusing the date of the Portuguese decree
-# (see Europe/Lisbon) with the date that it took effect.
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Bissau	-1:02:20 -	LMT	1912 Jan  1  1:00u
-			-1:00	-	-01	1975
-			 0:00	-	GMT
-
-# Kenya
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Nairobi	2:27:16	-	LMT	1928 Jul
-			3:00	-	EAT	1930
-			2:30	-	+0230	1940
-			2:45	-	+0245	1960
-			3:00	-	EAT
-Link Africa/Nairobi Africa/Addis_Ababa	 # Ethiopia
-Link Africa/Nairobi Africa/Asmara	 # Eritrea
-Link Africa/Nairobi Africa/Dar_es_Salaam # Tanzania
-Link Africa/Nairobi Africa/Djibouti
-Link Africa/Nairobi Africa/Kampala	 # Uganda
-Link Africa/Nairobi Africa/Mogadishu	 # Somalia
-Link Africa/Nairobi Indian/Antananarivo	 # Madagascar
-Link Africa/Nairobi Indian/Comoro
-Link Africa/Nairobi Indian/Mayotte
-
-# Lesotho
-# See Africa/Johannesburg.
-
-# Liberia
-#
-# From Paul Eggert (2017-03-02):
-#
-# The Nautical Almanac for the Year 1970, p 264, is the source for -0:44:30.
-#
-# In 1972 Liberia was the last country to switch from a UT offset
-# that was not a multiple of 15 or 20 minutes.  The 1972 change was on
-# 1972-01-07, according to an entry dated 1972-01-04 on p 330 of:
-# Presidential Papers: First year of the administration of
-# President William R. Tolbert, Jr., July 23, 1971-July 31, 1972.
-# Monrovia: Executive Mansion.
-#
-# Use the abbreviation "MMT" before 1972, as the more-accurate numeric
-# abbreviation "-004430" would be one byte over the POSIX limit.
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Monrovia	-0:43:08 -	LMT	1882
-			-0:43:08 -	MMT	1919 Mar # Monrovia Mean Time
-			-0:44:30 -	MMT	1972 Jan 7 # approximately MMT
-			 0:00	-	GMT
-
-###############################################################################
-
-# Libya
-
-# From Even Scharning (2012-11-10):
-# Libya set their time one hour back at 02:00 on Saturday November 10.
-# https://www.libyaherald.com/2012/11/04/clocks-to-go-back-an-hour-on-saturday/
-# Here is an official source [in Arabic]: http://ls.ly/fb6Yc
-#
-# Steffen Thorsen forwarded a translation (2012-11-10) in
-# https://mm.icann.org/pipermail/tz/2012-November/018451.html
-#
-# From Tim Parenti (2012-11-11):
-# Treat the 2012-11-10 change as a zone change from UTC+2 to UTC+1.
-# The DST rules planned for 2013 and onward roughly mirror those of Europe
-# (either two days before them or five days after them, so as to fall on
-# lastFri instead of lastSun).
-
-# From Even Scharning (2013-10-25):
-# The scheduled end of DST in Libya on Friday, October 25, 2013 was
-# cancelled yesterday....
-# https://www.libyaherald.com/2013/10/24/correction-no-time-change-tomorrow/
-#
-# From Paul Eggert (2013-10-25):
-# For now, assume they're reverting to the pre-2012 rules of permanent UT +02.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Libya	1951	only	-	Oct	14	2:00	1:00	S
-Rule	Libya	1952	only	-	Jan	 1	0:00	0	-
-Rule	Libya	1953	only	-	Oct	 9	2:00	1:00	S
-Rule	Libya	1954	only	-	Jan	 1	0:00	0	-
-Rule	Libya	1955	only	-	Sep	30	0:00	1:00	S
-Rule	Libya	1956	only	-	Jan	 1	0:00	0	-
-Rule	Libya	1982	1984	-	Apr	 1	0:00	1:00	S
-Rule	Libya	1982	1985	-	Oct	 1	0:00	0	-
-Rule	Libya	1985	only	-	Apr	 6	0:00	1:00	S
-Rule	Libya	1986	only	-	Apr	 4	0:00	1:00	S
-Rule	Libya	1986	only	-	Oct	 3	0:00	0	-
-Rule	Libya	1987	1989	-	Apr	 1	0:00	1:00	S
-Rule	Libya	1987	1989	-	Oct	 1	0:00	0	-
-Rule	Libya	1997	only	-	Apr	 4	0:00	1:00	S
-Rule	Libya	1997	only	-	Oct	 4	0:00	0	-
-Rule	Libya	2013	only	-	Mar	lastFri	1:00	1:00	S
-Rule	Libya	2013	only	-	Oct	lastFri	2:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Tripoli	0:52:44 -	LMT	1920
-			1:00	Libya	CE%sT	1959
-			2:00	-	EET	1982
-			1:00	Libya	CE%sT	1990 May  4
-# The 1996 and 1997 entries are from Shanks & Pottenger;
-# the IATA SSIM data entries contain some obvious errors.
-			2:00	-	EET	1996 Sep 30
-			1:00	Libya	CE%sT	1997 Oct  4
-			2:00	-	EET	2012 Nov 10  2:00
-			1:00	Libya	CE%sT	2013 Oct 25  2:00
-			2:00	-	EET
-
-# Madagascar
-# See Africa/Nairobi.
-
-# Malawi
-# See Africa/Maputo.
-
-# Mali
-# Mauritania
-# See Africa/Abidjan.
-
-# Mauritius
-
-# From Steffen Thorsen (2008-06-25):
-# Mauritius plans to observe DST from 2008-11-01 to 2009-03-31 on a trial
-# basis....
-# It seems that Mauritius observed daylight saving time from 1982-10-10 to
-# 1983-03-20 as well, but that was not successful....
-# https://www.timeanddate.com/news/time/mauritius-daylight-saving-time.html
-
-# From Alex Krivenyshev (2008-06-25):
-# http://economicdevelopment.gov.mu/portal/site/Mainhomepage/menuitem.a42b24128104d9845dabddd154508a0c/?content_id=0a7cee8b5d69a110VgnVCM1000000a04a8c0RCRD
-
-# From Arthur David Olson (2008-06-30):
-# The www.timeanddate.com article cited by Steffen Thorsen notes that "A
-# final decision has yet to be made on the times that daylight saving
-# would begin and end on these dates." As a place holder, use midnight.
-
-# From Paul Eggert (2008-06-30):
-# Follow Thorsen on DST in 1982/1983, instead of Shanks & Pottenger.
-
-# From Steffen Thorsen (2008-07-10):
-# According to
-# http://www.lexpress.mu/display_article.php?news_id=111216
-# (in French), Mauritius will start and end their DST a few days earlier
-# than previously announced (2008-11-01 to 2009-03-31).  The new start
-# date is 2008-10-26 at 02:00 and the new end date is 2009-03-27 (no time
-# given, but it is probably at either 2 or 3 wall clock time).
-#
-# A little strange though, since the article says that they moved the date
-# to align itself with Europe and USA which also change time on that date,
-# but that means they have not paid attention to what happened in
-# USA/Canada last year (DST ends first Sunday in November). I also wonder
-# why that they end on a Friday, instead of aligning with Europe which
-# changes two days later.
-
-# From Alex Krivenyshev (2008-07-11):
-# Seems that English language article "The revival of daylight saving
-# time: Energy conservation?"- No. 16578 (07/11/2008) was originally
-# published on Monday, June 30, 2008...
-#
-# I guess that article in French "Le gouvernement avance l'introduction
-# de l'heure d'été" stating that DST in Mauritius starting on October 26
-# and ending on March 27, 2009 is the most recent one....
-# http://www.worldtimezone.com/dst_news/dst_news_mauritius02.html
-
-# From Riad M. Hossen Ally (2008-08-03):
-# The Government of Mauritius weblink
-# http://www.gov.mu/portal/site/pmosite/menuitem.4ca0efdee47462e7440a600248a521ca/?content_id=4728ca68b2a5b110VgnVCM1000000a04a8c0RCRD
-# Cabinet Decision of July 18th, 2008 states as follows:
-#
-# 4. ...Cabinet has agreed to the introduction into the National Assembly
-# of the Time Bill which provides for the introduction of summer time in
-# Mauritius. The summer time period which will be of one hour ahead of
-# the standard time, will be aligned with that in Europe and the United
-# States of America. It will start at two o'clock in the morning on the
-# last Sunday of October and will end at two o'clock in the morning on
-# the last Sunday of March the following year. The summer time for the
-# year 2008-2009 will, therefore, be effective as from 26 October 2008
-# and end on 29 March 2009.
-
-# From Ed Maste (2008-10-07):
-# THE TIME BILL (No. XXVII of 2008) Explanatory Memorandum states the
-# beginning / ending of summer time is 2 o'clock standard time in the
-# morning of the last Sunday of October / last Sunday of March.
-# http://www.gov.mu/portal/goc/assemblysite/file/bill2708.pdf
-
-# From Steffen Thorsen (2009-06-05):
-# According to several sources, Mauritius will not continue to observe
-# DST the coming summer...
-#
-# Some sources, in French:
-# http://www.defimedia.info/news/946/Rashid-Beebeejaun-:-%C2%AB-L%E2%80%99heure-d%E2%80%99%C3%A9t%C3%A9-ne-sera-pas-appliqu%C3%A9e-cette-ann%C3%A9e-%C2%BB
-# http://lexpress.mu/Story/3398~Beebeejaun---Les-objectifs-d-%C3%A9conomie-d-%C3%A9nergie-de-l-heure-d-%C3%A9t%C3%A9-ont-%C3%A9t%C3%A9-atteints-
-#
-# Our wrap-up:
-# https://www.timeanddate.com/news/time/mauritius-dst-will-not-repeat.html
-
-# From Arthur David Olson (2009-07-11):
-# The "mauritius-dst-will-not-repeat" wrapup includes this:
-# "The trial ended on March 29, 2009, when the clocks moved back by one hour
-# at 2am (or 02:00) local time..."
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule Mauritius	1982	only	-	Oct	10	0:00	1:00	-
-Rule Mauritius	1983	only	-	Mar	21	0:00	0	-
-Rule Mauritius	2008	only	-	Oct	lastSun	2:00	1:00	-
-Rule Mauritius	2009	only	-	Mar	lastSun	2:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Indian/Mauritius	3:50:00 -	LMT	1907 # Port Louis
-			4:00 Mauritius	+04/+05
-# Agalega Is, Rodriguez
-# no information; probably like Indian/Mauritius
-
-# Mayotte
-# See Africa/Nairobi.
-
-# Morocco
-# See the 'europe' file for Spanish Morocco (Africa/Ceuta).
-
-# From Alex Krivenyshev (2008-05-09):
-# Here is an article that Morocco plan to introduce Daylight Saving Time between
-# 1 June, 2008 and 27 September, 2008.
-#
-# "... Morocco is to save energy by adjusting its clock during summer so it will
-# be one hour ahead of GMT between 1 June and 27 September, according to
-# Communication Minister and Government Spokesman, Khalid Naciri...."
-#
-# http://www.worldtimezone.com/dst_news/dst_news_morocco01.html
-# http://en.afrik.com/news11892.html
-
-# From Alex Krivenyshev (2008-05-09):
-# The Morocco time change can be confirmed on Morocco web site Maghreb Arabe
-# Presse:
-# http://www.map.ma/eng/sections/box3/morocco_shifts_to_da/view
-#
-# Morocco shifts to daylight time on June 1st through September 27, Govt.
-# spokesman.
-
-# From Patrice Scattolin (2008-05-09):
-# According to this article:
-# https://www.avmaroc.com/actualite/heure-dete-comment-a127896.html
-# (and republished here: <http://www.actu.ma/heure-dete-comment_i127896_0.html>)
-# the changes occur at midnight:
-#
-# Saturday night May 31st at midnight (which in French is to be
-# interpreted as the night between Saturday and Sunday)
-# Sunday night the 28th at midnight
-#
-# Seeing that the 28th is Monday, I am guessing that she intends to say
-# the midnight of the 28th which is the midnight between Sunday and
-# Monday, which jives with other sources that say that it's inclusive
-# June 1st to Sept 27th.
-#
-# The decision was taken by decree *2-08-224 *but I can't find the decree
-# published on the web.
-#
-# It's also confirmed here:
-# http://www.maroc.ma/NR/exeres/FACF141F-D910-44B0-B7FA-6E03733425D1.htm
-# on a government portal as being between June 1st and Sept 27th (not yet
-# posted in English).
-#
-# The following Google query will generate many relevant hits:
-# https://www.google.com/search?hl=en&q=Conseil+de+gouvernement+maroc+heure+avance&btnG=Search
-
-# From Steffen Thorsen (2008-08-27):
-# Morocco will change the clocks back on the midnight between August 31
-# and September 1. They originally planned to observe DST to near the end
-# of September:
-#
-# One article about it (in French):
-# http://www.menara.ma/fr/Actualites/Maroc/Societe/ci.retour_a_l_heure_gmt_a_partir_du_dimanche_31_aout_a_minuit_officiel_.default
-#
-# We have some further details posted here:
-# https://www.timeanddate.com/news/time/morocco-ends-dst-early-2008.html
-
-# From Steffen Thorsen (2009-03-17):
-# Morocco will observe DST from 2009-06-01 00:00 to 2009-08-21 00:00 according
-# to many sources, such as
-# http://news.marweb.com/morocco/entertainment/morocco-daylight-saving.html
-# http://www.medi1sat.ma/fr/depeche.aspx?idp=2312
-# (French)
-#
-# Our summary:
-# https://www.timeanddate.com/news/time/morocco-starts-dst-2009.html
-
-# From Alexander Krivenyshev (2009-03-17):
-# Here is a link to official document from Royaume du Maroc Premier Ministre,
-# MinistĂšre de la Modernisation des Secteurs Publics
-#
-# Under Article 1 of Royal Decree No. 455-67 of Act 23 safar 1387 (2 June 1967)
-# concerning the amendment of the legal time, the Ministry of Modernization of
-# Public Sectors announced that the official time in the Kingdom will be
-# advanced 60 minutes from Sunday 31 May 2009 at midnight.
-#
-# http://www.mmsp.gov.ma/francais/Actualites_fr/PDF_Actualites_Fr/HeureEte_FR.pdf
-# http://www.worldtimezone.com/dst_news/dst_news_morocco03.html
-
-# From Steffen Thorsen (2010-04-13):
-# Several news media in Morocco report that the Ministry of Modernization
-# of Public Sectors has announced that Morocco will have DST from
-# 2010-05-02 to 2010-08-08.
-#
-# Example:
-# http://www.lavieeco.com/actualites/4099-le-maroc-passera-a-l-heure-d-ete-gmt1-le-2-mai.html
-# (French)
-# Our page:
-# https://www.timeanddate.com/news/time/morocco-starts-dst-2010.html
-
-# From Dan Abitol (2011-03-30):
-# ...Rules for Africa/Casablanca are the following (24h format)
-# The 3rd April 2011 at 00:00:00, [it] will be 3rd April 01:00:00
-# The 31st July 2011 at 00:59:59, [it] will be 31st July 00:00:00
-# ...Official links of change in morocco
-# The change was broadcast on the FM Radio
-# I ve called ANRT (telecom regulations in Morocco) at
-# +212.537.71.84.00
-# http://www.anrt.net.ma/fr/
-# They said that
-# http://www.map.ma/fr/sections/accueil/l_heure_legale_au_ma/view
-# is the official publication to look at.
-# They said that the decision was already taken.
-#
-# More articles in the press
-# https://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-leve.html
-# http://www.lematin.ma/Actualite/Express/Article.asp?id=148923
-# http://www.lavieeco.com/actualite/Le-Maroc-passe-sur-GMT%2B1-a-partir-de-dim
-
-# From Petr Machata (2011-03-30):
-# They have it written in English here:
-# http://www.map.ma/eng/sections/home/morocco_to_spring_fo/view
-#
-# It says there that "Morocco will resume its standard time on July 31,
-# 2011 at midnight." Now they don't say whether they mean midnight of
-# wall clock time (i.e. 11pm UTC), but that's what I would assume. It has
-# also been like that in the past.
-
-# From Alexander Krivenyshev (2012-03-09):
-# According to Infomédiaire web site from Morocco (infomediaire.ma),
-# on March 9, 2012, (in French) Heure légale:
-# Le Maroc adopte officiellement l'heure d'été
-# http://www.infomediaire.ma/news/maroc/heure-l%C3%A9gale-le-maroc-adopte-officiellement-lheure-d%C3%A9t%C3%A9
-# Governing Council adopted draft decree, that Morocco DST starts on
-# the last Sunday of March (March 25, 2012) and ends on
-# last Sunday of September (September 30, 2012)
-# except the month of Ramadan.
-# or (brief)
-# http://www.worldtimezone.com/dst_news/dst_news_morocco06.html
-
-# From Arthur David Olson (2012-03-10):
-# The infomediaire.ma source indicates that the system is to be in
-# effect every year. It gives 03H00 as the "fall back" time of day;
-# it lacks a "spring forward" time of day; assume 2:00 XXX.
-# Wait on specifying the Ramadan exception for details about
-# start date, start time of day, end date, and end time of day XXX.
-
-# From Christophe Tropamer (2012-03-16):
-# Seen Morocco change again:
-# http://www.le2uminutes.com/actualite.php
-# "...Ă  partir du dernier dimanche d'avril et non fins mars,
-# comme annoncé précédemment."
-
-# From Milamber Space Network (2012-07-17):
-# The official return to GMT is announced by the Moroccan government:
-# http://www.mmsp.gov.ma/fr/actualites.aspx?id=288 [in French]
-#
-# Google translation, lightly edited:
-# Back to the standard time of the Kingdom (GMT)
-# Pursuant to Decree No. 2-12-126 issued on 26 Jumada (I) 1433 (April 18,
-# 2012) and in accordance with the order of Mr. President of the
-# Government No. 3-47-12 issued on 24 Sha'ban (11 July 2012), the Ministry
-# of Public Service and Administration Modernization announces the return
-# of the legal time of the Kingdom (GMT) from Friday, July 20, 2012 until
-# Monday, August 20, 2012.  So the time will be delayed by 60 minutes from
-# 3:00 am Friday, July 20, 2012 and will again be advanced by 60 minutes
-# August 20, 2012 from 2:00 am.
-
-# From Paul Eggert (2013-03-06):
-# Morocco's daylight-saving transitions due to Ramadan seem to be
-# announced a bit in advance.  On 2012-07-11 the Moroccan government
-# announced that year's Ramadan daylight-saving transitions would be
-# 2012-07-20 and 2012-08-20; see
-# http://www.mmsp.gov.ma/fr/actualites.aspx?id=288
-
-# From Andrew Paprocki (2013-07-02):
-# Morocco announced that the year's Ramadan daylight-savings
-# transitions would be 2013-07-07 and 2013-08-10; see:
-# http://www.maroc.ma/en/news/morocco-suspends-daylight-saving-time-july-7-aug10
-
-# From Steffen Thorsen (2013-09-28):
-# Morocco extends DST by one month, on very short notice, just 1 day
-# before it was going to end.  There is a new decree (2.13.781) for
-# this, where DST from now on goes from last Sunday of March at 02:00
-# to last Sunday of October at 03:00, similar to EU rules.  Official
-# source (French):
-# http://www.maroc.gov.ma/fr/actualites/lhoraire-dete-gmt1-maintenu-jusquau-27-octobre-2013
-# Another source (specifying the time for start and end in the decree):
-# http://www.lemag.ma/Heure-d-ete-au-Maroc-jusqu-au-27-octobre_a75620.html
-
-# From Sebastien Willemijns (2014-03-18):
-# http://www.afriquinfos.com/articles/2014/3/18/maroc-heure-dete-avancez-tous-horloges-247891.asp
-
-# From Milamber Space Network (2014-06-05):
-# The Moroccan government has recently announced that the country will return
-# to standard time at 03:00 on Saturday, June 28, 2014 local time....  DST
-# will resume again at 02:00 on Saturday, August 2, 2014....
-# http://www.mmsp.gov.ma/fr/actualites.aspx?id=586
-
-# From Milamber (2015-06-08):
-# (Google Translation) The hour will thus be delayed 60 minutes
-# Sunday, June 14 at 3:00, the ministry said in a statement, adding
-# that the time will be advanced again 60 minutes Sunday, July 19,
-# 2015 at 2:00.  The move comes under 2.12.126 Decree of 26 Jumada I
-# 1433 (18 April 2012) and the decision of the Head of Government of
-# 16 N. 3-29-15 Chaaban 1435 (4 June 2015).
-# Source (french):
-# https://lnt.ma/le-maroc-reculera-dune-heure-le-dimanche-14-juin/
-#
-# From Milamber (2015-06-09):
-# http://www.mmsp.gov.ma/fr/actualites.aspx?id=863
-#
-# From Michael Deckers (2015-06-09):
-# [The gov.ma announcement] would (probably) make the switch on 2015-07-19 go
-# from 03:00 to 04:00 rather than from 02:00 to 03:00, as in the patch....
-# I think the patch is correct and the quoted text is wrong; the text in
-# <https://lnt.ma/le-maroc-reculera-dune-heure-le-dimanche-14-juin/> agrees
-# with the patch.
-
-# From Mohamed Essedik Najd (2018-10-26):
-# Today, a Moroccan government council approved the perpetual addition
-# of 60 minutes to the regular Moroccan timezone.
-# From Matt Johnson (2018-10-28):
-# http://www.sgg.gov.ma/Portals/1/BO/2018/BO_6720-bis_Ar.pdf
-#
-# From Maamar Abdelkader (2018-11-01):
-# We usually move clocks back the previous week end and come back to the +1
-# the week end after....  The government does not announce yet the decision
-# about this temporary change.  But it s 99% sure that it will be the case,
-# as in previous years.  An unofficial survey was done these days, showing
-# that 64% of asked peopke are ok for moving from +1 to +0 during Ramadan.
-# https://leconomiste.com/article/1035870-enquete-l-economiste-sunergia-64-des-marocains-plebiscitent-le-gmt-pendant-ramadan
-#
-# From Paul Eggert (2018-11-01):
-# For now, guess that Morocco will fall back at 03:00 the last Sunday
-# before Ramadan, and spring forward at 02:00 the first Sunday after
-# Ramadan, as this has been the practice since 2012.  To implement this,
-# transition dates for 2019 through 2037 were determined by running the
-# following program under GNU Emacs 26.1.
-# (let ((islamic-year 1440))
-#   (require 'cal-islam)
-#   (while (< islamic-year 1460)
-#     (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
-#           (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
-#           (sunday 0))
-#       (while (/= sunday (mod (setq a (1- a)) 7)))
-#       (while (/= sunday (mod b 7))
-#         (setq b (1+ b)))
-#       (setq a (calendar-gregorian-from-absolute a))
-#       (setq b (calendar-gregorian-from-absolute b))
-#       (insert
-#        (format
-#         (concat "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 3:00\t-1:00\t-\n"
-#                 "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 2:00\t0\t-\n")
-#         (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
-#         (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
-#     (setq islamic-year (+ 1 islamic-year))))
-
-# RULE	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Morocco	1939	only	-	Sep	12	 0:00	1:00	-
-Rule	Morocco	1939	only	-	Nov	19	 0:00	0	-
-Rule	Morocco	1940	only	-	Feb	25	 0:00	1:00	-
-Rule	Morocco	1945	only	-	Nov	18	 0:00	0	-
-Rule	Morocco	1950	only	-	Jun	11	 0:00	1:00	-
-Rule	Morocco	1950	only	-	Oct	29	 0:00	0	-
-Rule	Morocco	1967	only	-	Jun	 3	12:00	1:00	-
-Rule	Morocco	1967	only	-	Oct	 1	 0:00	0	-
-Rule	Morocco	1974	only	-	Jun	24	 0:00	1:00	-
-Rule	Morocco	1974	only	-	Sep	 1	 0:00	0	-
-Rule	Morocco	1976	1977	-	May	 1	 0:00	1:00	-
-Rule	Morocco	1976	only	-	Aug	 1	 0:00	0	-
-Rule	Morocco	1977	only	-	Sep	28	 0:00	0	-
-Rule	Morocco	1978	only	-	Jun	 1	 0:00	1:00	-
-Rule	Morocco	1978	only	-	Aug	 4	 0:00	0	-
-Rule	Morocco	2008	only	-	Jun	 1	 0:00	1:00	-
-Rule	Morocco	2008	only	-	Sep	 1	 0:00	0	-
-Rule	Morocco	2009	only	-	Jun	 1	 0:00	1:00	-
-Rule	Morocco	2009	only	-	Aug	21	 0:00	0	-
-Rule	Morocco	2010	only	-	May	 2	 0:00	1:00	-
-Rule	Morocco	2010	only	-	Aug	 8	 0:00	0	-
-Rule	Morocco	2011	only	-	Apr	 3	 0:00	1:00	-
-Rule	Morocco	2011	only	-	Jul	31	 0:00	0	-
-Rule	Morocco	2012	2013	-	Apr	lastSun	 2:00	1:00	-
-Rule	Morocco	2012	only	-	Jul	20	 3:00	0	-
-Rule	Morocco	2012	only	-	Aug	20	 2:00	1:00	-
-Rule	Morocco	2012	only	-	Sep	30	 3:00	0	-
-Rule	Morocco	2013	only	-	Jul	 7	 3:00	0	-
-Rule	Morocco	2013	only	-	Aug	10	 2:00	1:00	-
-Rule	Morocco	2013	2017	-	Oct	lastSun	 3:00	0	-
-Rule	Morocco	2014	2018	-	Mar	lastSun	 2:00	1:00	-
-Rule	Morocco	2014	only	-	Jun	28	 3:00	0	-
-Rule	Morocco	2014	only	-	Aug	 2	 2:00	1:00	-
-Rule	Morocco	2015	only	-	Jun	14	 3:00	0	-
-Rule	Morocco	2015	only	-	Jul	19	 2:00	1:00	-
-Rule	Morocco	2016	only	-	Jun	 5	 3:00	0	-
-Rule	Morocco	2016	only	-	Jul	10	 2:00	1:00	-
-Rule	Morocco	2017	only	-	May	21	 3:00	0	-
-Rule	Morocco	2017	only	-	Jul	 2	 2:00	1:00	-
-Rule	Morocco	2018	only	-	May	13	 3:00	0	-
-Rule	Morocco	2018	only	-	Jun	17	 2:00	1:00	-
-Rule	Morocco	2019	only	-	May	 5	 3:00	0	-
-Rule	Morocco	2019	only	-	Jun	 9	 2:00	1:00	-
-Rule	Morocco	2020	only	-	Apr	19	 3:00	0	-
-Rule	Morocco	2020	only	-	May	24	 2:00	1:00	-
-Rule	Morocco	2021	only	-	Apr	11	 3:00	0	-
-Rule	Morocco	2021	only	-	May	16	 2:00	1:00	-
-Rule	Morocco	2022	only	-	Mar	27	 3:00	0	-
-Rule	Morocco	2022	only	-	May	 8	 2:00	1:00	-
-Rule	Morocco	2023	only	-	Mar	19	 3:00	0	-
-Rule	Morocco	2023	only	-	Apr	23	 2:00	1:00	-
-Rule	Morocco	2024	only	-	Mar	10	 3:00	0	-
-Rule	Morocco	2024	only	-	Apr	14	 2:00	1:00	-
-Rule	Morocco	2025	only	-	Feb	23	 3:00	0	-
-Rule	Morocco	2025	only	-	Apr	 6	 2:00	1:00	-
-Rule	Morocco	2026	only	-	Feb	15	 3:00	0	-
-Rule	Morocco	2026	only	-	Mar	22	 2:00	1:00	-
-Rule	Morocco	2027	only	-	Feb	 7	 3:00	0	-
-Rule	Morocco	2027	only	-	Mar	14	 2:00	1:00	-
-Rule	Morocco	2028	only	-	Jan	23	 3:00	0	-
-Rule	Morocco	2028	only	-	Feb	27	 2:00	1:00	-
-Rule	Morocco	2029	only	-	Jan	14	 3:00	0	-
-Rule	Morocco	2029	only	-	Feb	18	 2:00	1:00	-
-Rule	Morocco	2029	only	-	Dec	30	 3:00	0	-
-Rule	Morocco	2030	only	-	Feb	10	 2:00	1:00	-
-Rule	Morocco	2030	only	-	Dec	22	 3:00	0	-
-Rule	Morocco	2031	only	-	Jan	26	 2:00	1:00	-
-Rule	Morocco	2031	only	-	Dec	14	 3:00	0	-
-Rule	Morocco	2032	only	-	Jan	18	 2:00	1:00	-
-Rule	Morocco	2032	only	-	Nov	28	 3:00	0	-
-Rule	Morocco	2033	only	-	Jan	 9	 2:00	1:00	-
-Rule	Morocco	2033	only	-	Nov	20	 3:00	0	-
-Rule	Morocco	2033	only	-	Dec	25	 2:00	1:00	-
-Rule	Morocco	2034	only	-	Nov	 5	 3:00	0	-
-Rule	Morocco	2034	only	-	Dec	17	 2:00	1:00	-
-Rule	Morocco	2035	only	-	Oct	28	 3:00	0	-
-Rule	Morocco	2035	only	-	Dec	 2	 2:00	1:00	-
-Rule	Morocco	2036	only	-	Oct	19	 3:00	0	-
-Rule	Morocco	2036	only	-	Nov	23	 2:00	1:00	-
-Rule	Morocco	2037	only	-	Oct	 4	 3:00	0	-
-Rule	Morocco	2037	only	-	Nov	15	 2:00	1:00	-
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Africa/Casablanca	-0:30:20 -	LMT	1913 Oct 26
-			 0:00	Morocco	+00/+01	1984 Mar 16
-			 1:00	-	+01	1986
-			 0:00	Morocco	+00/+01	2018 Oct 28  3:00
-			 0:00	Morocco	+00/+01
-
-# Western Sahara
-#
-# From Gwillim Law (2013-10-22):
-# A correspondent who is usually well informed about time zone matters
-# ... says that Western Sahara observes daylight saving time, just as
-# Morocco does.
-#
-# From Paul Eggert (2013-10-23):
-# Assume that this has been true since Western Sahara switched to GMT,
-# since most of it was then controlled by Morocco.
-
-Zone Africa/El_Aaiun	-0:52:48 -	LMT	1934 Jan # El AaiĂșn
-			-1:00	-	-01	1976 Apr 14
-			 0:00	Morocco	+00/+01	2018 Oct 28  3:00
-			 0:00	Morocco	+00/+01
-
-# Mozambique
-#
-# Shanks gives 1903-03-01 for the transition to CAT.
-# Perhaps the 1911-05-26 Portuguese decree
-# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
-# merely made it official?
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Maputo	2:10:20 -	LMT	1903 Mar
-			2:00	-	CAT
-Link Africa/Maputo Africa/Blantyre	# Malawi
-Link Africa/Maputo Africa/Bujumbura	# Burundi
-Link Africa/Maputo Africa/Gaborone	# Botswana
-Link Africa/Maputo Africa/Harare	# Zimbabwe
-Link Africa/Maputo Africa/Kigali	# Rwanda
-Link Africa/Maputo Africa/Lubumbashi	# E Dem. Rep. of Congo
-Link Africa/Maputo Africa/Lusaka	# Zambia
-
-
-# Namibia
-
-# From Arthur David Olson (2017-08-09):
-# The text of the "Namibia Time Act, 1994" is available online at
-# www.lac.org.na/laws/1994/811.pdf
-# and includes this nugget:
-# Notwithstanding the provisions of subsection (2) of section 1, the
-# first winter period after the commencement of this Act shall
-# commence at OOhOO on Monday 21 March 1994 and shall end at 02h00 on
-# Sunday 4 September 1994.
-
-# From Michael Deckers (2017-04-06):
-# ... both summer and winter time are called "standard"
-# (which differs from the use in Ireland) ...
-
-# From Petronella Sibeene (2007-03-30):
-# http://allafrica.com/stories/200703300178.html
-# While the entire country changes its time, Katima Mulilo and other
-# settlements in Caprivi unofficially will not because the sun there
-# rises and sets earlier compared to other regions.  Chief of
-# Forecasting Riaan van Zyl explained that the far eastern parts of
-# the country are close to 40 minutes earlier in sunrise than the rest
-# of the country.
-#
-# From Paul Eggert (2017-02-22):
-# Although the Zambezi Region (formerly known as Caprivi) informally
-# observes Botswana time, we have no details about historical practice.
-# In the meantime people there can use Africa/Gaborone.
-# See: Immanuel S. The Namibian. 2017-02-23.
-# https://www.namibian.com.na/51480/read/Time-change-divides-lawmakers
-
-# From Steffen Thorsen (2017-08-09):
-# Namibia is going to change their time zone to what is now their DST:
-# https://www.newera.com.na/2017/02/23/namibias-winter-time-might-be-repealed/
-# This video is from the government decision:
-# https://www.nbc.na/news/na-passes-namibia-time-bill-repealing-1994-namibia-time-act.8665
-# We have made the assumption so far that they will change their time zone at
-# the same time they would normally start DST, the first Sunday in September:
-# https://www.timeanddate.com/news/time/namibia-new-time-zone.html
-
-# From Paul Eggert (2017-04-09):
-# Before the change, summer and winter time were both standard time legally.
-# However in common parlance, winter time was considered to be DST.  See, e.g.:
-# http://www.nbc.na/news/namibias-winter-time-could-be-scrapped.2706
-# https://zone.my.na/news/times-are-changing-in-namibia
-# https://www.newera.com.na/2017/02/23/namibias-winter-time-might-be-repealed/
-# Use plain "WAT" and "CAT" for the time zone abbreviations, to be compatible
-# with Namibia's neighbors.
-
-# RULE	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-# Vanguard section, for zic and other parsers that support negative DST.
-#Rule	Namibia	1994	only	-	Mar	21	0:00	-1:00	WAT
-#Rule	Namibia	1994	2017	-	Sep	Sun>=1	2:00	0	CAT
-#Rule	Namibia	1995	2017	-	Apr	Sun>=1	2:00	-1:00	WAT
-# Rearguard section, for parsers that do not support negative DST.
-Rule	Namibia	1994	only	-	Mar	21	0:00	0	WAT
-Rule	Namibia	1994	2017	-	Sep	Sun>=1	2:00	1:00	CAT
-Rule	Namibia	1995	2017	-	Apr	Sun>=1	2:00	0	WAT
-# End of rearguard section.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Windhoek	1:08:24 -	LMT	1892 Feb 8
-			1:30	-	+0130	1903 Mar
-			2:00	-	SAST	1942 Sep 20  2:00
-			2:00	1:00	SAST	1943 Mar 21  2:00
-			2:00	-	SAST	1990 Mar 21 # independence
-# Vanguard section, for zic and other parsers that support negative DST.
-#			2:00	Namibia	%s
-# Rearguard section, for parsers that do not support negative DST.
-			2:00	-	CAT	1994 Mar 21  0:00
-# From Paul Eggert (2017-04-07):
-# The official date of the 2017 rule change was 2017-10-24.  See:
-# http://www.lac.org.na/laws/annoSTAT/Namibian%20Time%20Act%209%20of%202017.pdf
-			1:00	Namibia	%s	2017 Oct 24
-			2:00	-	CAT
-# End of rearguard section.
-
-# Niger
-# See Africa/Lagos.
-
-# Nigeria
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Lagos	0:13:36 -	LMT	1919 Sep
-			1:00	-	WAT
-Link Africa/Lagos Africa/Bangui	     # Central African Republic
-Link Africa/Lagos Africa/Brazzaville # Rep. of the Congo
-Link Africa/Lagos Africa/Douala	     # Cameroon
-Link Africa/Lagos Africa/Kinshasa    # Dem. Rep. of the Congo (west)
-Link Africa/Lagos Africa/Libreville  # Gabon
-Link Africa/Lagos Africa/Luanda	     # Angola
-Link Africa/Lagos Africa/Malabo	     # Equatorial Guinea
-Link Africa/Lagos Africa/Niamey	     # Niger
-Link Africa/Lagos Africa/Porto-Novo  # Benin
-
-# RĂ©union
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Reunion	3:41:52 -	LMT	1911 Jun # Saint-Denis
-			4:00	-	+04
-#
-# Crozet Islands also observes RĂ©union time; see the 'antarctica' file.
-#
-# Scattered Islands (Îles Éparses) administered from RĂ©union are as follows.
-# The following information about them is taken from
-# Îles Éparses (<http://www.outre-mer.gouv.fr/domtom/ile.htm>, 1997-07-22,
-# in French; no longer available as of 1999-08-17).
-# We have no info about their time zone histories.
-#
-# Bassas da India - uninhabited
-# Europa Island - inhabited from 1905 to 1910 by two families
-# Glorioso Is - inhabited until at least 1958
-# Juan de Nova - uninhabited
-# Tromelin - inhabited until at least 1958
-
-# Rwanda
-# See Africa/Maputo.
-
-# St Helena
-# See Africa/Abidjan.
-# The other parts of the St Helena territory are similar:
-#	Tristan da Cunha: on GMT, say Whitman and the CIA
-#	Ascension: on GMT, say the USNO (1995-12-21) and the CIA
-#	Gough (scientific station since 1955; sealers wintered previously):
-#		on GMT, says the CIA
-#	Inaccessible, Nightingale: uninhabited
-
-# São Tomé and Príncipe
-
-# See Europe/Lisbon for info about the 1912 transition.
-
-# From Steffen Thorsen (2018-01-08):
-# Multiple sources tell that São Tomé changed from UTC to UTC+1 as
-# they entered the year 2018.
-# From Michael Deckers (2018-01-08):
-# the switch is from 01:00 to 02:00 ... [Decree No. 25/2017]
-# http://www.mnec.gov.st/index.php/publicacoes/documentos/file/90-decreto-lei-n-25-2017
-
-# From Vadim Nasardinov (2018-12-29):
-# São Tomé and Príncipe is about to do the following on Jan 1, 2019:
-# https://www.stp-press.st/2018/12/05/governo-jesus-ja-decidiu-repor-hora-legal-sao-tomense/
-#
-# From Michael Deckers (2018-12-30):
-# https://www.legis-palop.org/download.jsp?idFile=102818
-# ... [The legal time of the country, which coincides with universal
-# coordinated time, will be restituted at 2 o'clock on day 1 of January, 2019.]
-
-Zone	Africa/Sao_Tome	 0:26:56 -	LMT	1884
-			-0:36:45 -	LMT	1912 Jan  1 00:00u # Lisbon MT
-			 0:00	-	GMT	2018 Jan  1 01:00
-			 1:00	-	WAT	2019 Jan  1 02:00
-			 0:00	-	GMT
-
-# Senegal
-# See Africa/Abidjan.
-
-# Seychelles
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Mahe	3:41:48 -	LMT	1906 Jun # Victoria
-			4:00	-	+04
-# From Paul Eggert (2001-05-30):
-# Aldabra, Farquhar, and Desroches, originally dependencies of the
-# Seychelles, were transferred to the British Indian Ocean Territory
-# in 1965 and returned to Seychelles control in 1976.  We don't know
-# whether this affected their time zone, so omit this for now.
-# Possibly the islands were uninhabited.
-
-# Sierra Leone
-# See Africa/Abidjan.
-
-# Somalia
-# See Africa/Nairobi.
-
-# South Africa
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	SA	1942	1943	-	Sep	Sun>=15	2:00	1:00	-
-Rule	SA	1943	1944	-	Mar	Sun>=15	2:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Africa/Johannesburg 1:52:00 -	LMT	1892 Feb 8
-			1:30	-	SAST	1903 Mar
-			2:00	SA	SAST
-Link Africa/Johannesburg Africa/Maseru	   # Lesotho
-Link Africa/Johannesburg Africa/Mbabane    # Eswatini
-#
-# Marion and Prince Edward Is
-# scientific station since 1947
-# no information
-
-# Sudan
-
-# From <http://www.sunanews.net/sn13jane.html>
-# Sudan News Agency (2000-01-13),
-# also reported by Michaël De Beukelaer-Dossche via Steffen Thorsen:
-# Clocks will be moved ahead for 60 minutes all over the Sudan as of noon
-# Saturday....  This was announced Thursday by Caretaker State Minister for
-# Manpower Abdul-Rahman Nur-Eddin.
-
-# From Ahmed Atyya, National Telecommunications Corp. (NTC), Sudan (2017-10-17):
-# ... the Republic of Sudan is going to change the time zone from (GMT+3:00)
-# to (GMT+ 2:00) starting from Wednesday 1 November 2017.
-#
-# From Paul Eggert (2017-10-18):
-# A scanned copy (in Arabic) of Cabinet Resolution No. 352 for the
-# year 2017 can be found as an attachment in email today from Yahia
-# Abdalla of NTC, archived at:
-# https://mm.icann.org/pipermail/tz/2017-October/025333.html
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Sudan	1970	only	-	May	 1	0:00	1:00	S
-Rule	Sudan	1970	1985	-	Oct	15	0:00	0	-
-Rule	Sudan	1971	only	-	Apr	30	0:00	1:00	S
-Rule	Sudan	1972	1985	-	Apr	lastSun	0:00	1:00	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Khartoum	2:10:08 -	LMT	1931
-			2:00	Sudan	CA%sT	2000 Jan 15 12:00
-			3:00	-	EAT	2017 Nov  1
-			2:00	-	CAT
-
-# South Sudan
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Juba	2:06:28 -	LMT	1931
-			2:00	Sudan	CA%sT	2000 Jan 15 12:00
-			3:00	-	EAT
-
-# Tanzania
-# See Africa/Nairobi.
-
-# Togo
-# See Africa/Abidjan.
-
-# Tunisia
-
-# From Gwillim Law (2005-04-30):
-# My correspondent, Risto NykÀnen, has alerted me to another adoption of DST,
-# this time in Tunisia.  According to Yahoo France News
-# <http://fr.news.yahoo.com/050426/5/4dumk.html>, in a story attributed to AP
-# and dated 2005-04-26, "Tunisia has decided to advance its official time by
-# one hour, starting on Sunday, May 1.  Henceforth, Tunisian time will be
-# UTC+2 instead of UTC+1.  The change will take place at 23:00 UTC next
-# Saturday."  (My translation)
-#
-# From Oscar van Vlijmen (2005-05-02):
-# La Presse, the first national daily newspaper ...
-# http://www.lapresse.tn/archives/archives280405/actualites/lheure.html
-# ... DST for 2005: on: Sun May 1 0h standard time, off: Fri Sept. 30,
-# 1h standard time.
-#
-# From Atef Loukil (2006-03-28):
-# The daylight saving time will be the same each year:
-# Beginning      : the last Sunday of March at 02:00
-# Ending         : the last Sunday of October at 03:00 ...
-# http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=1188&Itemid=50
-
-# From Steffen Thorsen (2009-03-16):
-# According to several news sources, Tunisia will not observe DST this year.
-# (Arabic)
-# http://www.elbashayer.com/?page=viewn&nid=42546
-# https://www.babnet.net/kiwidetail-15295.asp
-#
-# We have also confirmed this with the US embassy in Tunisia.
-# We have a wrap-up about this on the following page:
-# https://www.timeanddate.com/news/time/tunisia-cancels-dst-2009.html
-
-# From Alexander Krivenyshev (2009-03-17):
-# Here is a link to Tunis Afrique Presse News Agency
-#
-# Standard time to be kept the whole year long (tap.info.tn):
-#
-# (in English)
-# http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=26813&Itemid=157
-#
-# (in Arabic)
-# http://www.tap.info.tn/ar/index.php?option=com_content&task=view&id=61240&Itemid=1
-
-# From Arthur David Olson (2009-03-18):
-# The Tunis Afrique Presse News Agency notice contains this: "This measure is
-# due to the fact that the fasting month of Ramadan coincides with the period
-# concerned by summer time.  Therefore, the standard time will be kept
-# unchanged the whole year long."  So foregoing DST seems to be an exception
-# (albeit one that may be repeated in the future).
-
-# From Alexander Krivenyshev (2010-03-27):
-# According to some news reports Tunis confirmed not to use DST in 2010
-#
-# (translation):
-# "The Tunisian government has decided to abandon DST, which was scheduled on
-# Sunday...
-# Tunisian authorities had suspended the DST for the first time last year also
-# coincided with the month of Ramadan..."
-#
-# (in Arabic)
-# http://www.moheet.com/show_news.aspx?nid=358861&pg=1
-# http://www.almadenahnews.com/newss/news.php?c=118&id=38036
-# http://www.worldtimezone.com/dst_news/dst_news_tunis02.html
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Tunisia	1939	only	-	Apr	15	23:00s	1:00	S
-Rule	Tunisia	1939	only	-	Nov	18	23:00s	0	-
-Rule	Tunisia	1940	only	-	Feb	25	23:00s	1:00	S
-Rule	Tunisia	1941	only	-	Oct	 6	 0:00	0	-
-Rule	Tunisia	1942	only	-	Mar	 9	 0:00	1:00	S
-Rule	Tunisia	1942	only	-	Nov	 2	 3:00	0	-
-Rule	Tunisia	1943	only	-	Mar	29	 2:00	1:00	S
-Rule	Tunisia	1943	only	-	Apr	17	 2:00	0	-
-Rule	Tunisia	1943	only	-	Apr	25	 2:00	1:00	S
-Rule	Tunisia	1943	only	-	Oct	 4	 2:00	0	-
-Rule	Tunisia	1944	1945	-	Apr	Mon>=1	 2:00	1:00	S
-Rule	Tunisia	1944	only	-	Oct	 8	 0:00	0	-
-Rule	Tunisia	1945	only	-	Sep	16	 0:00	0	-
-Rule	Tunisia	1977	only	-	Apr	30	 0:00s	1:00	S
-Rule	Tunisia	1977	only	-	Sep	24	 0:00s	0	-
-Rule	Tunisia	1978	only	-	May	 1	 0:00s	1:00	S
-Rule	Tunisia	1978	only	-	Oct	 1	 0:00s	0	-
-Rule	Tunisia	1988	only	-	Jun	 1	 0:00s	1:00	S
-Rule	Tunisia	1988	1990	-	Sep	lastSun	 0:00s	0	-
-Rule	Tunisia	1989	only	-	Mar	26	 0:00s	1:00	S
-Rule	Tunisia	1990	only	-	May	 1	 0:00s	1:00	S
-Rule	Tunisia	2005	only	-	May	 1	 0:00s	1:00	S
-Rule	Tunisia	2005	only	-	Sep	30	 1:00s	0	-
-Rule	Tunisia	2006	2008	-	Mar	lastSun	 2:00s	1:00	S
-Rule	Tunisia	2006	2008	-	Oct	lastSun	 2:00s	0	-
-
-# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
-# more precise 0:09:21.
-# Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Tunis	0:40:44 -	LMT	1881 May 12
-			0:09:21	-	PMT	1911 Mar 11 # Paris Mean Time
-			1:00	Tunisia	CE%sT
-
-# Uganda
-# See Africa/Nairobi.
-
-# Zambia
-# Zimbabwe
-# See Africa/Maputo.
--- a/test/jdk/sun/util/calendar/zi/tzdata/antarctica	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,364 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# tzdb data for Antarctica and environs
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# From Paul Eggert (1999-11-15):
-# To keep things manageable, we list only locations occupied year-round; see
-# COMNAP - Stations and Bases
-# http://www.comnap.aq/comnap/comnap.nsf/P/Stations/
-# and
-# Summary of the Peri-Antarctic Islands (1998-07-23)
-# http://www.spri.cam.ac.uk/bob/periant.htm
-# for information.
-# Unless otherwise specified, we have no time zone information.
-
-# FORMAT is '-00' and GMTOFF is 0 for locations while uninhabited.
-
-# Argentina - year-round bases
-# Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
-# Carlini, Potter Cove, King George Island, -6414-0602320, since 1982-01
-# Esperanza, Hope Bay, -6323-05659, since 1952-12-17
-# Marambio, -6414-05637, since 1969-10-29
-# Orcadas, Laurie I, -6016-04444, since 1904-02-22
-# San MartĂ­n, Barry I, -6808-06706, since 1951-03-21
-#	(except 1960-03 / 1976-03-21)
-
-# Australia - territories
-# Heard Island, McDonald Islands (uninhabited)
-#	previously sealers and scientific personnel wintered
-#	Margaret Turner reports
-#	https://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html
-#	(1999-09-30) that they're UT +05, with no DST;
-#	presumably this is when they have visitors.
-#
-# year-round bases
-# Casey, Bailey Peninsula, -6617+11032, since 1969
-# Davis, Vestfold Hills, -6835+07759, since 1957-01-13
-#	(except 1964-11 - 1969-02)
-# Mawson, Holme Bay, -6736+06253, since 1954-02-13
-
-# From Steffen Thorsen (2009-03-11):
-# Three Australian stations in Antarctica have changed their time zone:
-# Casey moved from UTC+8 to UTC+11
-# Davis moved from UTC+7 to UTC+5
-# Mawson moved from UTC+6 to UTC+5
-# The changes occurred on 2009-10-18 at 02:00 (local times).
-#
-# Government source: (Australian Antarctic Division)
-# http://www.aad.gov.au/default.asp?casid=37079
-#
-# We have more background information here:
-# https://www.timeanddate.com/news/time/antarctica-new-times.html
-
-# From Steffen Thorsen (2010-03-10):
-# We got these changes from the Australian Antarctic Division: ...
-#
-# - Casey station reverted to its normal time of UTC+8 on 5 March 2010.
-# The change to UTC+11 is being considered as a regular summer thing but
-# has not been decided yet.
-#
-# - Davis station will revert to its normal time of UTC+7 at 10 March 2010
-# 20:00 UTC.
-#
-# - Mawson station stays on UTC+5.
-#
-# Background:
-# https://www.timeanddate.com/news/time/antartica-time-changes-2010.html
-
-# From Steffen Thorsen (2016-10-28):
-# Australian Antarctica Division informed us that Casey changed time
-# zone to UTC+11 in "the morning of 22nd October 2016".
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Antarctica/Casey	0	-	-00	1969
-			8:00	-	+08	2009 Oct 18  2:00
-			11:00	-	+11	2010 Mar  5  2:00
-			8:00	-	+08	2011 Oct 28  2:00
-			11:00	-	+11	2012 Feb 21 17:00u
-			8:00	-	+08	2016 Oct 22
-			11:00	-	+11	2018 Mar 11  4:00
-			8:00	-	+08
-Zone Antarctica/Davis	0	-	-00	1957 Jan 13
-			7:00	-	+07	1964 Nov
-			0	-	-00	1969 Feb
-			7:00	-	+07	2009 Oct 18  2:00
-			5:00	-	+05	2010 Mar 10 20:00u
-			7:00	-	+07	2011 Oct 28  2:00
-			5:00	-	+05	2012 Feb 21 20:00u
-			7:00	-	+07
-Zone Antarctica/Mawson	0	-	-00	1954 Feb 13
-			6:00	-	+06	2009 Oct 18  2:00
-			5:00	-	+05
-# References:
-# Casey Weather (1998-02-26)
-# http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html
-# Davis Station, Antarctica (1998-02-26)
-# http://www.antdiv.gov.au/aad/exop/sfo/davis/video.html
-# Mawson Station, Antarctica (1998-02-25)
-# http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html
-
-# Belgium - year-round base
-# Princess Elisabeth, Queen Maud Land, -713412+0231200, since 2007
-
-# Brazil - year-round base
-# Ferraz, King George Island, -6205+05824, since 1983/4
-
-# Bulgaria - year-round base
-# St. Kliment Ohridski, Livingston Island, -623829-0602153, since 1988
-
-# Chile - year-round bases and towns
-# Escudero, South Shetland Is, -621157-0585735, since 1994
-# Frei Montalva, King George Island, -6214-05848, since 1969-03-07
-# O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
-# Prat, -6230-05941
-# Villa Las Estrellas (a town), around the Frei base, since 1984-04-09
-# These locations employ Region of Magallanes time; use
-# TZ='America/Punta_Arenas'.
-
-# China - year-round bases
-# Great Wall, King George Island, -6213-05858, since 1985-02-20
-# Zhongshan, Larsemann Hills, Prydz Bay, -6922+07623, since 1989-02-26
-
-# France - year-round bases (also see "France & Italy")
-#
-# From Antoine Leca (1997-01-20):
-# Time data entries are from Nicole Pailleau at the IFRTP
-# (French Institute for Polar Research and Technology).
-# She confirms that French Southern Territories and Terre Adélie bases
-# don't observe daylight saving time, even if Terre Adélie supplies came
-# from Tasmania.
-#
-# French Southern Territories with year-round inhabitants
-#
-# Alfred Faure, Possession Island, Crozet Islands, -462551+0515152, since 1964;
-#	sealing & whaling stations operated variously 1802/1911+;
-#	see Indian/Reunion.
-#
-# Martin-de-ViviĂšs, Amsterdam Island, -374105+0773155, since 1950
-# Port-aux-Français, Kerguelen Islands, -492110+0701303, since 1951;
-#	whaling & sealing station operated 1908/1914, 1920/1929, and 1951/1956
-#
-# St Paul Island - near Amsterdam, uninhabited
-#	fishing stations operated variously 1819/1931
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Indian/Kerguelen	0	-	-00	1950 # Port-aux-Français
-			5:00	-	+05
-#
-# year-round base in the main continent
-# Dumont d'Urville, Île des PĂ©trels, -6640+14001, since 1956-11
-# <https://en.wikipedia.org/wiki/Dumont_d'Urville_Station> (2005-12-05)
-#
-# Another base at Port-Martin, 50km east, began operation in 1947.
-# It was destroyed by fire on 1952-01-14.
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Antarctica/DumontDUrville 0 -	-00	1947
-			10:00	-	+10	1952 Jan 14
-			0	-	-00	1956 Nov
-			10:00	-	+10
-
-# France & Italy - year-round base
-# Concordia, -750600+1232000, since 2005
-
-# Germany - year-round base
-# Neumayer III, -704080-0081602, since 2009
-
-# India - year-round bases
-# Bharati, -692428+0761114, since 2012
-# Maitri, -704558+0114356, since 1989
-
-# Italy - year-round base (also see "France & Italy")
-# Zuchelli, Terra Nova Bay, -744140+1640647, since 1986
-
-# Japan - year-round bases
-# Syowa (also known as Showa), -690022+0393524, since 1957
-#
-# From Hideyuki Suzuki (1999-02-06):
-# In all Japanese stations, +0300 is used as the standard time.
-#
-# Syowa station, which is the first antarctic station of Japan,
-# was established on 1957-01-29.  Since Syowa station is still the main
-# station of Japan, it's appropriate for the principal location.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Antarctica/Syowa	0	-	-00	1957 Jan 29
-			3:00	-	+03
-# See:
-# NIPR Antarctic Research Activities (1999-08-17)
-# http://www.nipr.ac.jp/english/ara01.html
-
-# S Korea - year-round base
-# Jang Bogo, Terra Nova Bay, -743700+1641205 since 2014
-# King Sejong, King George Island, -6213-05847, since 1988
-
-# New Zealand - claims
-# Balleny Islands (never inhabited)
-# Scott Island (never inhabited)
-#
-# year-round base
-# Scott Base, Ross Island, since 1957-01.
-# See Pacific/Auckland.
-
-# Norway - territories
-# Bouvet (never inhabited)
-#
-# claims
-# Peter I Island (never inhabited)
-#
-# year-round base
-# Troll, Queen Maud Land, -720041+0023206, since 2005-02-12
-#
-# From Paul-Inge Flakstad (2014-03-10):
-# I recently had a long dialog about this with the developer of timegenie.com.
-# In the absence of specific dates, he decided to choose some likely ones:
-#   GMT +1 - From March 1 to the last Sunday in March
-#   GMT +2 - From the last Sunday in March until the last Sunday in October
-#   GMT +1 - From the last Sunday in October until November 7
-#   GMT +0 - From November 7 until March 1
-# The dates for switching to and from UTC+0 will probably not be absolutely
-# correct, but they should be quite close to the actual dates.
-#
-# From Paul Eggert (2014-03-21):
-# The CET-switching Troll rules require zic from tz 2014b or later, so as
-# suggested by Bengt-Inge Larsson comment them out for now, and approximate
-# with only UTC and CEST.  Uncomment them when 2014b is more prevalent.
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-#Rule	Troll	2005	max	-	Mar	 1	1:00u	1:00	+01
-Rule	Troll	2005	max	-	Mar	lastSun	1:00u	2:00	+02
-#Rule	Troll	2005	max	-	Oct	lastSun	1:00u	1:00	+01
-#Rule	Troll	2004	max	-	Nov	 7	1:00u	0:00	+00
-# Remove the following line when uncommenting the above '#Rule' lines.
-Rule	Troll	2004	max	-	Oct	lastSun	1:00u	0:00	+00
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Antarctica/Troll	0	-	-00	2005 Feb 12
-			0:00	Troll	%s
-
-# Poland - year-round base
-# Arctowski, King George Island, -620945-0582745, since 1977
-
-# Romania - year-bound base
-# Law-Racoviță, Larsemann Hills, -692319+0762251, since 1986
-
-# Russia - year-round bases
-# Bellingshausen, King George Island, -621159-0585337, since 1968-02-22
-# Mirny, Davis coast, -6633+09301, since 1956-02
-# Molodezhnaya, Alasheyev Bay, -6740+04551,
-#	year-round from 1962-02 to 1999-07-01
-# Novolazarevskaya, Queen Maud Land, -7046+01150,
-#	year-round from 1960/61 to 1992
-
-# Vostok, since 1957-12-16, temporarily closed 1994-02/1994-11
-# From Craig Mundell (1994-12-15):
-# http://quest.arc.nasa.gov/antarctica/QA/computers/Directions,Time,ZIP
-# Vostok, which is one of the Russian stations, is set on the same
-# time as Moscow, Russia.
-#
-# From Lee Hotz (2001-03-08):
-# I queried the folks at Columbia who spent the summer at Vostok and this is
-# what they had to say about time there:
-# "in the US Camp (East Camp) we have been on New Zealand (McMurdo)
-# time, which is 12 hours ahead of GMT. The Russian Station Vostok was
-# 6 hours behind that (although only 2 miles away, i.e. 6 hours ahead
-# of GMT). This is a time zone I think two hours east of Moscow. The
-# natural time zone is in between the two: 8 hours ahead of GMT."
-#
-# From Paul Eggert (2001-05-04):
-# This seems to be hopelessly confusing, so I asked Lee Hotz about it
-# in person.  He said that some Antarctic locations set their local
-# time so that noon is the warmest part of the day, and that this
-# changes during the year and does not necessarily correspond to mean
-# solar noon.  So the Vostok time might have been whatever the clocks
-# happened to be during their visit.  So we still don't really know what time
-# it is at Vostok.  But we'll guess +06.
-#
-Zone Antarctica/Vostok	0	-	-00	1957 Dec 16
-			6:00	-	+06
-
-# S Africa - year-round bases
-# Marion Island, -4653+03752
-# SANAE IV, Vesleskarvet, Queen Maud Land, -714022-0025026, since 1997
-
-# Ukraine - year-round base
-# Vernadsky (formerly Faraday), Galindez Island, -651445-0641526, since 1954
-
-# United Kingdom
-#
-# British Antarctic Territories (BAT) claims
-# South Orkney Islands
-#	scientific station from 1903
-#	whaling station at Signy I 1920/1926
-# South Shetland Islands
-#
-# year-round bases
-# Bird Island, South Georgia, -5400-03803, since 1983
-# Deception Island, -6259-06034, whaling station 1912/1931,
-#	scientific station 1943/1967,
-#	previously sealers and a scientific expedition wintered by accident,
-#	and a garrison was deployed briefly
-# Halley, Coates Land, -7535-02604, since 1956-01-06
-#	Halley is on a moving ice shelf and is periodically relocated
-#	so that it is never more than 10km from its nominal location.
-# Rothera, Adelaide Island, -6734-6808, since 1976-12-01
-#
-# From Paul Eggert (2002-10-22)
-# <http://webexhibits.org/daylightsaving/g.html> says Rothera is -03 all year.
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Antarctica/Rothera	0	-	-00	1976 Dec  1
-			-3:00	-	-03
-
-# Uruguay - year round base
-# Artigas, King George Island, -621104-0585107
-
-# USA - year-round bases
-#
-# Palmer, Anvers Island, since 1965 (moved 2 miles in 1968)
-# See 'southamerica' for Antarctica/Palmer, since it uses South American DST.
-#
-# McMurdo Station, Ross Island, since 1955-12
-# Amundsen-Scott South Pole Station, continuously occupied since 1956-11-20
-#
-# From Chris Carrier (1996-06-27):
-# Siple, the first commander of the South Pole station,
-# stated that he would have liked to have kept GMT at the station,
-# but that he found it more convenient to keep GMT+12
-# as supplies for the station were coming from McMurdo Sound,
-# which was on GMT+12 because New Zealand was on GMT+12 all year
-# at that time (1957).  (Source: Siple's book 90 Degrees South.)
-#
-# From Susan Smith
-# http://www.cybertours.com/whs/pole10.html
-# (1995-11-13 16:24:56 +1300, no longer available):
-# We use the same time as McMurdo does.
-# And they use the same time as Christchurch, NZ does....
-# One last quirk about South Pole time.
-# All the electric clocks are usually wrong.
-# Something about the generators running at 60.1hertz or something
-# makes all of the clocks run fast.  So every couple of days,
-# we have to go around and set them back 5 minutes or so.
-# Maybe if we let them run fast all of the time, we'd get to leave here sooner!!
-#
-# See 'australasia' for Antarctica/McMurdo.
--- a/test/jdk/sun/util/calendar/zi/tzdata/asia	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3657 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# tzdb data for Asia and environs
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# This file is by no means authoritative; if you think you know better,
-# go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).  For more, please see
-# the file CONTRIBUTING in the tz distribution.
-
-# From Paul Eggert (2018-06-19):
-#
-# Unless otherwise specified, the source for data through 1990 is:
-# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
-# San Diego: ACS Publications, Inc. (2003).
-# Unfortunately this book contains many errors and cites no sources.
-#
-# Many years ago Gwillim Law wrote that a good source
-# for time zone data was the International Air Transport
-# Association's Standard Schedules Information Manual (IATA SSIM),
-# published semiannually.  Law sent in several helpful summaries
-# of the IATA's data after 1990.  Except where otherwise noted,
-# IATA SSIM is the source for entries after 1990.
-#
-# Another source occasionally used is Edward W. Whitman, World Time Differences,
-# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
-# I found in the UCLA library.
-#
-# For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
-# https://www.jstor.org/stable/1774359
-#
-# For Russian data circa 1919, a source is:
-# Byalokoz EL. New Counting of Time in Russia since July 1, 1919.
-# (See the 'europe' file for a fuller citation.)
-#
-# A reliable and entertaining source about time zones is
-# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
-#
-# The following alphabetic abbreviations appear in these tables
-# (corrections are welcome):
-#	     std  dst
-#	     LMT	Local Mean Time
-#	2:00 EET  EEST	Eastern European Time
-#	2:00 IST  IDT	Israel
-#	5:30 IST	India
-#	7:00 WIB	west Indonesia (Waktu Indonesia Barat)
-#	8:00 WITA	central Indonesia (Waktu Indonesia Tengah)
-#	8:00 CST	China
-#	8:00 PST  PDT*	Philippine Standard Time
-#	8:30 KST  KDT	Korea when at +0830
-#	9:00 WIT	east Indonesia (Waktu Indonesia Timur)
-#	9:00 JST  JDT	Japan
-#	9:00 KST  KDT	Korea when at +09
-#	9:30 ACST	Australian Central Standard Time
-# *I invented the abbreviation PDT; see "Philippines" below.
-# Otherwise, these tables typically use numeric abbreviations like +03
-# and +0330 for integer hour and minute UT offsets.  Although earlier
-# editions invented alphabetic time zone abbreviations for every
-# offset, this did not reflect common practice.
-#
-# See the 'europe' file for Russia and Turkey in Asia.
-
-# From Guy Harris:
-# Incorporates data for Singapore from Robert Elz' asia 1.1, as well as
-# additional information from Tom Yap, Sun Microsystems Intercontinental
-# Technical Support (including a page from the Official Airline Guide -
-# Worldwide Edition).
-
-###############################################################################
-
-# These rules are stolen from the 'europe' file.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	EUAsia	1981	max	-	Mar	lastSun	 1:00u	1:00	S
-Rule	EUAsia	1979	1995	-	Sep	lastSun	 1:00u	0	-
-Rule	EUAsia	1996	max	-	Oct	lastSun	 1:00u	0	-
-Rule E-EurAsia	1981	max	-	Mar	lastSun	 0:00	1:00	-
-Rule E-EurAsia	1979	1995	-	Sep	lastSun	 0:00	0	-
-Rule E-EurAsia	1996	max	-	Oct	lastSun	 0:00	0	-
-Rule RussiaAsia	1981	1984	-	Apr	1	 0:00	1:00	-
-Rule RussiaAsia	1981	1983	-	Oct	1	 0:00	0	-
-Rule RussiaAsia	1984	1995	-	Sep	lastSun	 2:00s	0	-
-Rule RussiaAsia	1985	2010	-	Mar	lastSun	 2:00s	1:00	-
-Rule RussiaAsia	1996	2010	-	Oct	lastSun	 2:00s	0	-
-
-# Afghanistan
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Kabul	4:36:48 -	LMT	1890
-			4:00	-	+04	1945
-			4:30	-	+0430
-
-# Armenia
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger have Yerevan switching to 3:00 (with Russian DST)
-# in spring 1991, then to 4:00 with no DST in fall 1995, then
-# readopting Russian DST in 1997.  Go with Shanks & Pottenger, even
-# when they disagree with others.  Edgar Der-Danieliantz
-# reported (1996-05-04) that Yerevan probably wouldn't use DST
-# in 1996, though it did use DST in 1995.  IATA SSIM (1991/1998) reports that
-# Armenia switched from 3:00 to 4:00 in 1998 and observed DST after 1991,
-# but started switching at 3:00s in 1998.
-
-# From Arthur David Olson (2011-06-15):
-# While Russia abandoned DST in 2011, Armenia may choose to
-# follow Russia's "old" rules.
-
-# From Alexander Krivenyshev (2012-02-10):
-# According to News Armenia, on Feb 9, 2012,
-# http://newsarmenia.ru/society/20120209/42609695.html
-#
-# The Armenia National Assembly adopted final reading of Amendments to the
-# Law "On procedure of calculation time on the territory of the Republic of
-# Armenia" according to which Armenia [is] abolishing Daylight Saving Time.
-# or
-# (brief)
-# http://www.worldtimezone.com/dst_news/dst_news_armenia03.html
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule Armenia	2011	only	-	Mar	lastSun	 2:00s	1:00	-
-Rule Armenia	2011	only	-	Oct	lastSun	 2:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Yerevan	2:58:00 -	LMT	1924 May  2
-			3:00	-	+03	1957 Mar
-			4:00 RussiaAsia +04/+05	1991 Mar 31  2:00s
-			3:00 RussiaAsia	+03/+04	1995 Sep 24  2:00s
-			4:00	-	+04	1997
-			4:00 RussiaAsia	+04/+05	2011
-			4:00	Armenia	+04/+05
-
-# Azerbaijan
-
-# From Rustam Aliyev of the Azerbaijan Internet Forum (2005-10-23):
-# According to the resolution of Cabinet of Ministers, 1997
-# From Paul Eggert (2015-09-17): It was Resolution No. 21 (1997-03-17).
-# http://code.az/files/daylight_res.pdf
-
-# From Steffen Thorsen (2016-03-17):
-# ... the Azerbaijani Cabinet of Ministers has cancelled switching to
-# daylight saving time....
-# https://www.azernews.az/azerbaijan/94137.html
-# http://vestnikkavkaza.net/news/Azerbaijani-Cabinet-of-Ministers-cancels-daylight-saving-time.html
-# http://en.apa.az/xeber_azerbaijan_abolishes_daylight_savings_ti_240862.html
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Azer	1997	2015	-	Mar	lastSun	 4:00	1:00	-
-Rule	Azer	1997	2015	-	Oct	lastSun	 5:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Baku	3:19:24 -	LMT	1924 May  2
-			3:00	-	+03	1957 Mar
-			4:00 RussiaAsia +04/+05	1991 Mar 31  2:00s
-			3:00 RussiaAsia	+03/+04	1992 Sep lastSun  2:00s
-			4:00	-	+04	1996
-			4:00	EUAsia	+04/+05	1997
-			4:00	Azer	+04/+05
-
-# Bahrain
-# See Asia/Qatar.
-
-# Bangladesh
-# From Alexander Krivenyshev (2009-05-13):
-# According to newspaper Asian Tribune (May 6, 2009) Bangladesh may introduce
-# Daylight Saving Time from June 16 to Sept 30
-#
-# Bangladesh to introduce daylight saving time likely from June 16
-# http://www.asiantribune.com/?q=node/17288
-# http://www.worldtimezone.com/dst_news/dst_news_bangladesh02.html
-#
-# "... Bangladesh government has decided to switch daylight saving time from
-# June
-# 16 till September 30 in a bid to ensure maximum use of daylight to cope with
-# crippling power crisis. "
-#
-# The switch will remain in effect from June 16 to Sept 30 (2009) but if
-# implemented the next year, it will come in force from April 1, 2010
-
-# From Steffen Thorsen (2009-06-02):
-# They have finally decided now, but changed the start date to midnight between
-# the 19th and 20th, and they have not set the end date yet.
-#
-# Some sources:
-# https://in.reuters.com/article/southAsiaNews/idINIndia-40017620090601
-# http://bdnews24.com/details.php?id=85889&cid=2
-#
-# Our wrap-up:
-# https://www.timeanddate.com/news/time/bangladesh-daylight-saving-2009.html
-
-# From A. N. M. Kamrus Saadat (2009-06-15):
-# Finally we've got the official mail regarding DST start time where DST start
-# time is mentioned as Jun 19 2009, 23:00 from BTRC (Bangladesh
-# Telecommunication Regulatory Commission).
-#
-# No DST end date has been announced yet.
-
-# From Alexander Krivenyshev (2009-09-25):
-# Bangladesh won't go back to Standard Time from October 1, 2009,
-# instead it will continue DST measure till the cabinet makes a fresh decision.
-#
-# Following report by same newspaper-"The Daily Star Friday":
-# "DST change awaits cabinet decision-Clock won't go back by 1-hr from Oct 1"
-# http://www.thedailystar.net/newDesign/news-details.php?nid=107021
-# http://www.worldtimezone.com/dst_news/dst_news_bangladesh04.html
-
-# From Steffen Thorsen (2009-10-13):
-# IANS (Indo-Asian News Service) now reports:
-# Bangladesh has decided that the clock advanced by an hour to make
-# maximum use of daylight hours as an energy saving measure would
-# "continue for an indefinite period."
-#
-# One of many places where it is published:
-# http://www.thaindian.com/newsportal/business/bangladesh-to-continue-indefinitely-with-advanced-time_100259987.html
-
-# From Alexander Krivenyshev (2009-12-24):
-# According to Bangladesh newspaper "The Daily Star,"
-# Bangladesh will change its clock back to Standard Time on Dec 31, 2009.
-#
-# Clock goes back 1-hr on Dec 31 night.
-# http://www.thedailystar.net/newDesign/news-details.php?nid=119228
-# http://www.worldtimezone.com/dst_news/dst_news_bangladesh05.html
-#
-# "...The government yesterday decided to put the clock back by one hour
-# on December 31 midnight and the new time will continue until March 31,
-# 2010 midnight. The decision came at a cabinet meeting at the Prime
-# Minister's Office last night..."
-
-# From Alexander Krivenyshev (2010-03-22):
-# According to Bangladesh newspaper "The Daily Star,"
-# Cabinet cancels Daylight Saving Time
-# http://www.thedailystar.net/newDesign/latest_news.php?nid=22817
-# http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Dhaka	2009	only	-	Jun	19	23:00	1:00	-
-Rule	Dhaka	2009	only	-	Dec	31	24:00	0	-
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Dhaka	6:01:40 -	LMT	1890
-			5:53:20	-	HMT	1941 Oct    # Howrah Mean Time?
-			6:30	-	+0630	1942 May 15
-			5:30	-	+0530	1942 Sep
-			6:30	-	+0630	1951 Sep 30
-			6:00	-	+06	2009
-			6:00	Dhaka	+06/+07
-
-# Bhutan
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Thimphu	5:58:36 -	LMT	1947 Aug 15 # or Thimbu
-			5:30	-	+0530	1987 Oct
-			6:00	-	+06
-
-# British Indian Ocean Territory
-# Whitman and the 1995 CIA time zone map say 5:00, but the
-# 1997 and later maps say 6:00.  Assume the switch occurred in 1996.
-# We have no information as to when standard time was introduced;
-# assume it occurred in 1907, the same year as Mauritius (which
-# then contained the Chagos Archipelago).
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Chagos	4:49:40	-	LMT	1907
-			5:00	-	+05	1996
-			6:00	-	+06
-
-# Brunei
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Brunei	7:39:40 -	LMT	1926 Mar # Bandar Seri Begawan
-			7:30	-	+0730	1933
-			8:00	-	+08
-
-# Burma / Myanmar
-
-# Milne says 6:24:40 was the meridian of the time ball observatory at Rangoon.
-
-# From Paul Eggert (2017-04-20):
-# Page 27 of Reed & Low (cited for Asia/Kolkata) says "Rangoon local time is
-# used upon the railways and telegraphs of Burma, and is 6h. 24m. 47s. ahead
-# of Greenwich."  This refers to the period before Burma's transition to +0630,
-# a transition for which Shanks is the only source.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Yangon	6:24:47 -	LMT	1880        # or Rangoon
-			6:24:47	-	RMT	1920        # Rangoon local time
-			6:30	-	+0630	1942 May
-			9:00	-	+09	1945 May  3
-			6:30	-	+0630
-
-# Cambodia
-# See Asia/Bangkok.
-
-
-# China
-
-# From Paul Eggert (2018-10-02):
-# The following comes from Table 1 of:
-# Li Yu. Research on the daylight saving movement in 1940s Shanghai.
-# Nanjing Journal of Social Sciences. 2014;(2):144-50.
-# http://oversea.cnki.net/kns55/detail.aspx?dbname=CJFD2014&filename=NJSH201402020
-# The table lists dates only; I am guessing 00:00 and 24:00 transition times.
-# Also, the table lists the planned end of DST in 1949, but the corresponding
-# zone line cuts this off on May 28, when the Communists took power.
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Shang	1940	only	-	Jun	 1	 0:00	1:00	D
-Rule	Shang	1940	only	-	Oct	12	24:00	0	S
-Rule	Shang	1941	only	-	Mar	15	 0:00	1:00	D
-Rule	Shang	1941	only	-	Nov	 1	24:00	0	S
-Rule	Shang	1942	only	-	Jan	31	 0:00	1:00	D
-Rule	Shang	1945	only	-	Sep	 1	24:00	0	S
-Rule	Shang	1946	only	-	May	15	 0:00	1:00	D
-Rule	Shang	1946	only	-	Sep	30	24:00	0	S
-Rule	Shang	1947	only	-	Apr	15	 0:00	1:00	D
-Rule	Shang	1947	only	-	Oct	31	24:00	0	S
-Rule	Shang	1948	1949	-	May	 1	 0:00	1:00	D
-Rule	Shang	1948	1949	-	Sep	30	24:00	0	S #plan
-
-# From Guy Harris:
-# People's Republic of China.  Yes, they really have only one time zone.
-
-# From Bob Devine (1988-01-28):
-# No they don't.  See TIME mag, 1986-02-17 p.52.  Even though
-# China is across 4 physical time zones, before Feb 1, 1986 only the
-# Peking (Beijing) time zone was recognized.  Since that date, China
-# has two of 'em - Peking's and ÜrĂŒmqi (named after the capital of
-# the Xinjiang Uyghur Autonomous Region).  I don't know about DST for it.
-#
-# . . .I just deleted the DST table and this editor makes it too
-# painful to suck in another copy.  So, here is what I have for
-# DST start/end dates for Peking's time zone (info from AP):
-#
-#     1986 May 4 - Sept 14
-#     1987 mid-April - ??
-
-# From U. S. Naval Observatory (1989-01-19):
-# CHINA               8 H  AHEAD OF UTC  ALL OF CHINA, INCL TAIWAN
-# CHINA               9 H  AHEAD OF UTC  APR 17 - SEP 10
-
-# From Paul Eggert (2008-02-11):
-# Jim Mann, "A clumsy embrace for another western custom: China on daylight
-# time - sort of", Los Angeles Times, 1986-05-05 ... [says] that China began
-# observing daylight saving time in 1986.
-
-# From P Chan (2018-05-07):
-# The start and end time of DST in China [from 1986 on] should be 2:00
-# (i.e. 2:00 to 3:00 at the start and 2:00 to 1:00 at the end)....
-# Government notices about summer time:
-#
-# 1986-04-12 http://www.zj.gov.cn/attach/zfgb/198608.pdf p.21-22
-# (To establish summer time from 1986. On 4 May, set the clocks ahead one hour
-# at 2 am. On 14 September, set the clocks backward one hour at 2 am.)
-#
-# 1987-02-15 http://www.gov.cn/gongbao/shuju/1987/gwyb198703.pdf p.114
-# (Summer time in 1987 to start from 12 April until 13 September)
-#
-# 1987-09-09 http://www.gov.cn/gongbao/shuju/1987/gwyb198721.pdf p.709
-# (From 1988, summer time to start from 2 am of the first Sunday of mid-April
-# until 2 am of the first Sunday of mid-September)
-#
-# 1992-03-03 http://www.gov.cn/gongbao/shuju/1992/gwyb199205.pdf p.152
-# (To suspend summer time from 1992)
-#
-# The first page of People's Daily on 12 April 1988 stating that summer time
-# to begin on 17 April.
-# http://data.people.com.cn/pic/101p/1988/04/1988041201.jpg
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	PRC	1986	only	-	May	 4	 2:00	1:00	D
-Rule	PRC	1986	1991	-	Sep	Sun>=11	 2:00	0	S
-Rule	PRC	1987	1991	-	Apr	Sun>=11	 2:00	1:00	D
-
-# From Anthony Fok (2001-12-20):
-# BTW, I did some research on-line and found some info regarding these five
-# historic timezones from some Taiwan websites.  And yes, there are official
-# Chinese names for these locales (before 1949).
-#
-# From Jesper NĂžrgaard Welen (2006-07-14):
-# I have investigated the timezones around 1970 on the
-# https://www.astro.com/atlas site [with provinces and county
-# boundaries summarized below]....  A few other exceptions were two
-# counties on the Sichuan side of the Xizang-Sichuan border,
-# counties Dege and Baiyu which lies on the Sichuan side and are
-# therefore supposed to be GMT+7, Xizang region being GMT+6, but Dege
-# county is GMT+8 according to astro.com while Baiyu county is GMT+6
-# (could be true), for the moment I am assuming that those two
-# counties are mistakes in the astro.com data.
-
-# From Paul Eggert (2017-01-05):
-# Alois Treindl kindly sent me translations of the following two sources:
-#
-# (1)
-# Guo Qing-sheng (National Time-Service Center, CAS, Xi'an 710600, China)
-# Beijing Time at the Beginning of the PRC
-# China Historical Materials of Science and Technology
-# (Zhongguo ke ji shi liao, äž­ć›œç§‘æŠ€ćČ料). 2003;24(1):5-9.
-# http://oversea.cnki.net/kcms/detail/detail.aspx?filename=ZGKS200301000&dbname=CJFD2003
-# It gives evidence that at the beginning of the PRC, Beijing time was
-# officially apparent solar time!  However, Guo also says that the
-# evidence is dubious, as the relevant institute of astronomy had not
-# been taken over by the PRC yet.  It's plausible that apparent solar
-# time was announced but never implemented, and that people continued
-# to use UT+8.  As the Shanghai radio station (and I presume the
-# observatory) was still under control of French missionaries, it
-# could well have ignored any such mandate.
-#
-# (2)
-# Guo Qing-sheng (Shaanxi Astronomical Observatory, CAS, Xi'an 710600, China)
-# A Study on the Standard Time Changes for the Past 100 Years in China
-# [undated and unknown publication location]
-# It says several things:
-#   * The Qing dynasty used local apparent solar time throughout China.
-#   * The Republic of China instituted Beijing mean solar time effective
-#     the official calendar book of 1914.
-#   * The French Concession in Shanghai set up signal stations in
-#     French docks in the 1890s, controlled by Xujiahui (Zikawei)
-#     Observatory and set to local mean time.
-#   * "From the end of the 19th century" it changed to UT+8.
-#   * Chinese Customs (by then reduced to a tool of foreign powers)
-#     eventually standardized on this time for all ports, and it
-#     became used by railways as well.
-#   * In 1918 the Central Observatory proposed dividing China into
-#     five time zones (see below for details).  This caught on
-#     at first only in coastal areas observing UT+8.
-#   * During WWII all of China was in theory was at UT+7.  In practice
-#     this was ignored in the west, and I presume was ignored in
-#     Japanese-occupied territory.
-#   * Japanese-occupied Manchuria was at UT+9, i.e., Japan time.
-#   * The five-zone plan was resurrected after WWII and officially put into
-#     place (with some modifications) in March 1948.  It's not clear
-#     how well it was observed in areas under Nationalist control.
-#   * The People's Liberation Army used UT+8 during the civil war.
-#
-# An AP article "Shanghai Internat'l Area Little Changed" in the
-# Lewiston (ME) Daily Sun (1939-05-29), p 17, said "Even the time is
-# different - the occupied districts going by Tokyo time, an hour
-# ahead of that prevailing in the rest of Shanghai."  Guess that the
-# Xujiahui Observatory was under French control and stuck with UT +08.
-#
-# In earlier versions of this file, China had many separate Zone entries, but
-# this was based on what were apparently incorrect data in Shanks & Pottenger.
-# This has now been simplified to the two entries Asia/Shanghai and
-# Asia/Urumqi, with the others being links for backward compatibility.
-# Proposed in 1918 and theoretically in effect until 1949 (although in practice
-# mainly observed in coastal areas), the five zones were:
-#
-# Changbai Time ("Long-white Time", Long-white = Heilongjiang area) UT +08:30
-# Now part of Asia/Shanghai; its pre-1970 times are not recorded here.
-# Heilongjiang (except Mohe county), Jilin
-#
-# Zhongyuan Time ("Central plain Time") UT +08
-# Now part of Asia/Shanghai.
-# most of China
-# Milne gives 8:05:43.2 for Xujiahui Observatory time; round to nearest.
-# Guo says Shanghai switched to UT +08 "from the end of the 19th century".
-#
-# Long-shu Time (probably as Long and Shu were two names of the area) UT +07
-# Now part of Asia/Shanghai; its pre-1970 times are not recorded here.
-# Guangxi, Guizhou, Hainan, Ningxia, Sichuan, Shaanxi, and Yunnan;
-# most of Gansu; west Inner Mongolia; east Qinghai; and the Guangdong
-# counties Deqing, Enping, Kaiping, Luoding, Taishan, Xinxing,
-# Yangchun, Yangjiang, Yu'nan, and Yunfu.
-#
-# Xin-zang Time ("Xinjiang-Tibet Time") UT +06
-# This region is now part of either Asia/Urumqi or Asia/Shanghai with
-# current boundaries uncertain; times before 1970 for areas that
-# disagree with ÜrĂŒmqi or Shanghai are not recorded here.
-# The Gansu counties Aksay, Anxi, Dunhuang, Subei; west Qinghai;
-# the Guangdong counties  Xuwen, Haikang, Suixi, Lianjiang,
-# Zhanjiang, Wuchuan, Huazhou, Gaozhou, Maoming, Dianbai, and Xinyi;
-# east Tibet, including Lhasa, Chamdo, Shigaise, Jimsar, Shawan and Hutubi;
-# east Xinjiang, including ÜrĂŒmqi, Turpan, Karamay, Korla, Minfeng, Jinghe,
-# Wusu, Qiemo, Xinyan, Wulanwusu, Jinghe, Yumin, Tacheng, Tuoli, Emin,
-# Shihezi, Changji, Yanqi, Heshuo, Tuokexun, Tulufan, Shanshan, Hami,
-# Fukang, Kuitun, Kumukuli, Miquan, Qitai, and Turfan.
-#
-# Kunlun Time UT +05:30
-# This region is now in the same status as Xin-zang Time (see above).
-# West Tibet, including Pulan, Aheqi, Shufu, Shule;
-# West Xinjiang, including Aksu, Atushi, Yining, Hetian, Cele, Luopu, Nileke,
-# Zhaosu, Tekesi, Gongliu, Chabuchaer, Huocheng, Bole, Pishan, Suiding,
-# and Yarkand.
-
-# From Luther Ma (2009-10-17):
-# Almost all (>99.9%) ethnic Chinese (properly ethnic Han) living in
-# Xinjiang use Chinese Standard Time. Some are aware of Xinjiang time,
-# but have no need of it. All planes, trains, and schools function on
-# what is called "Beijing time." When Han make an appointment in Chinese
-# they implicitly use Beijing time.
-#
-# On the other hand, ethnic Uyghurs, who make up about half the
-# population of Xinjiang, typically use "Xinjiang time" which is two
-# hours behind Beijing time, or UT +06. The government of the Xinjiang
-# Uyghur Autonomous Region, (XAUR, or just Xinjiang for short) as well as
-# local governments such as the ÜrĂŒmqi city government use both times in
-# publications, referring to what is popularly called Xinjiang time as
-# "ÜrĂŒmqi time." When Uyghurs make an appointment in the Uyghur language
-# they almost invariably use Xinjiang time.
-#
-# (Their ethnic Han compatriots would typically have no clue of its
-# widespread use, however, because so extremely few of them are fluent in
-# Uyghur, comparable to the number of Anglo-Americans fluent in Navajo.)
-#
-# (...As with the rest of China there was a brief interval ending in 1990
-# or 1991 when summer time was in use.  The confusion was severe, with
-# the province not having dual times but four times in use at the same
-# time. Some areas remained on standard Xinjiang time or Beijing time and
-# others moving their clocks ahead.)
-
-# From Luther Ma (2009-11-19):
-# With the risk of being redundant to previous answers these are the most common
-# English "transliterations" (w/o using non-English symbols):
-#
-# 1. Wulumuqi...
-# 2. Kashi...
-# 3. Urumqi...
-# 4. Kashgar...
-# ...
-# 5. It seems that Uyghurs in ÜrĂŒmqi has been using Xinjiang since at least the
-# 1960's. I know of one Han, now over 50, who grew up in the surrounding
-# countryside and used Xinjiang time as a child.
-#
-# 6. Likewise for Kashgar and the rest of south Xinjiang I don't know of any
-# start date for Xinjiang time.
-#
-# Without having access to local historical records, nor the ability to legally
-# publish them, I would go with October 1, 1949, when Xinjiang became the Uyghur
-# Autonomous Region under the PRC. (Before that Uyghurs, of course, would also
-# not be using Beijing time, but some local time.)
-
-# From David Cochrane (2014-03-26):
-# Just a confirmation that ÜrĂŒmqi time was implemented in ÜrĂŒmqi on 1 Feb 1986:
-# https://content.time.com/time/magazine/article/0,9171,960684,00.html
-
-# From Luther Ma (2014-04-22):
-# I have interviewed numerous people of various nationalities and from
-# different localities in Xinjiang and can confirm the information in Guo's
-# report regarding Xinjiang, as well as the Time article reference by David
-# Cochrane.  Whether officially recognized or not (and both are officially
-# recognized), two separate times have been in use in Xinjiang since at least
-# the Cultural Revolution: Xinjiang Time (XJT), aka ÜrĂŒmqi Time or local time;
-# and Beijing Time.  There is no confusion in Xinjiang as to which name refers
-# to which time. Both are widely used in the province, although in some
-# population groups might be use one to the exclusion of the other.  The only
-# problem is that computers and smart phones list ÜrĂŒmqi (or Kashgar) as
-# having the same time as Beijing.
-
-# From Paul Eggert (2014-06-30):
-# In the early days of the PRC, Tibet was given its own time zone (UT +06)
-# but this was withdrawn in 1959 and never reinstated; see Tubten Khétsun,
-# Memories of life in Lhasa under Chinese Rule, Columbia U Press, ISBN
-# 978-0231142861 (2008), translator's introduction by Matthew Akester, p x.
-# As this is before our 1970 cutoff, Tibet doesn't need a separate zone.
-#
-# Xinjiang Time is well-documented as being officially recognized.  E.g., see
-# "The Working-Calendar for The Xinjiang Uygur Autonomous Region Government"
-# <http://www.sinkiang.gov.cn/service/ourworking/> (2014-04-22).
-# Unfortunately, we have no good records of time in Xinjiang before 1986.
-# During the 20th century parts of Xinjiang were ruled by the Qing dynasty,
-# the Republic of China, various warlords, the First and Second East Turkestan
-# Republics, the Soviet Union, the Kuomintang, and the People's Republic of
-# China, and tracking down all these organizations' timekeeping rules would be
-# quite a trick.  Approximate this lost history by a transition from LMT to
-# UT +06 at the start of 1928, the year of accession of the warlord Jin Shuren,
-# which happens to be the date given by Shanks & Pottenger (no doubt as a
-# guess) as the transition from LMT.  Ignore the usage of +08 before
-# 1986-02-01 under the theory that the transition date to +08 is unknown and
-# that the sort of users who prefer Asia/Urumqi now typically ignored the
-# +08 mandate back then.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-# Beijing time, used throughout China; represented by Shanghai.
-Zone	Asia/Shanghai	8:05:43	-	LMT	1901
-			8:00	Shang	C%sT	1949 May 28
-			8:00	PRC	C%sT
-# Xinjiang time, used by many in western China; represented by ÜrĂŒmqi / ÜrĂŒmchi
-# / Wulumuqi.  (Please use Asia/Shanghai if you prefer Beijing time.)
-Zone	Asia/Urumqi	5:50:20	-	LMT	1928
-			6:00	-	+06
-
-
-# Hong Kong (Xianggang)
-
-# Milne gives 7:36:41.7; round this.
-
-# From Lee Yiu Chung (2009-10-24):
-# I found there are some mistakes for the...DST rule for Hong
-# Kong. [According] to the DST record from Hong Kong Observatory (actually,
-# it is not [an] observatory, but the official meteorological agency of HK,
-# and also serves as the official timing agency), there are some missing
-# and incorrect rules. Although the exact switch over time is missing, I
-# think 3:30 is correct. The official DST record for Hong Kong can be
-# obtained from
-# http://www.hko.gov.hk/gts/time/Summertime.htm
-
-# From Phake Nick (2018-10-27):
-# According to Singaporean newspaper
-# http://eresources.nlb.gov.sg/newspapers/Digitised/Article/singfreepresswk19041102-1.2.37
-# the day that Hong Kong start using GMT+8 should be Oct 30, 1904.
-#
-# From Paul Eggert (2018-11-17):
-# Hong Kong had a time ball near the Marine Police Station, Tsim Sha Tsui.
-# "The ball was raised manually each day and dropped at exactly 1pm
-# (except on Sundays and Government holidays)."
-# Dyson AD. From Time Ball to Atomic Clock. Hong Kong Government. 1983.
-# <https://www.hko.gov.hk/publica/gen_pub/timeball_atomic_clock.pdf>
-# "From 1904 October 30 the time-ball at Hong Kong has been dropped by order
-# of the Governor of the Colony at 17h 0m 0s G.M.T., which is 23m 18s.14 in
-# advance of 1h 0m 0s of Hong Kong mean time."
-# Hollis HP. Universal Time, Longitudes, and Geodesy. Mon Not R Astron Soc.
-# 1905-02-10;65(4):405-6. https://doi.org/10.1093/mnras/65.4.382
-#
-# From Joseph Myers (2018-11-18):
-# An astronomer before 1925 referring to GMT would have been using the old
-# astronomical convention where the day started at noon, not midnight.
-#
-# From Steve Allen (2018-11-17):
-# Meteorological Observations made at the Hongkong Observatory in the year 1904
-# page 4 <https://books.google.com/books?id=kgw5AQAAMAAJ&pg=RA4-PA4>
-# ... the log of drop times in Table II shows that on Sunday 1904-10-30 the
-# ball was dropped.  So that looks like a special case drop for the sake
-# of broadcasting the new local time.
-#
-# From Phake Nick (2018-11-18):
-# According to The Hong Kong Weekly Press, 1904-10-29, p.324, the
-# governor of Hong Kong at the time stated that "We are further desired to
-# make it known that the change will be effected by firing the gun and by the
-# dropping of the Ball at 23min. 18sec. before one."
-# From Paul Eggert (2018-11-18):
-# See <https://mmis.hkpl.gov.hk> for this; unfortunately Flash is required.
-
-# From Phake Nick (2018-10-26):
-# I went to check microfilm records stored at Hong Kong Public Library....
-# on September 30 1941, according to Ta Kung Pao (Hong Kong edition), it was
-# stated that fallback would occur on the next day (the 1st)'s "03:00 am (Hong
-# Kong Time 04:00 am)" and the clock will fall back for a half hour. (03:00
-# probably refer to the time commonly used in mainland China at the time given
-# the paper's background) ... the sunrise/sunset time given by South China
-# Morning Post for October 1st was indeed moved by half an hour compares to
-# before.  After that, in December, the battle to capture Hong Kong started and
-# the library doesn't seems to have any record stored about press during that
-# period of time.  Some media resumed publication soon after that within the
-# same month, but there were not much information about time there.  Later they
-# started including a radio program guide when they restored radio service,
-# explicitly mentioning it use Tokyo standard time, and later added a note
-# saying it's half an hour ahead of the old Hong Kong standard time, and it
-# also seems to indicate that Hong Kong was not using GMT+8 when it was
-# captured by Japan.
-#
-# Image of related sections on newspaper:
-# * 1941-09-30, Ta Kung Pao (Hong Kong), "Winter Time start tomorrow".
-#   https://i.imgur.com/6waY51Z.jpg (Chinese)
-# * 1941-09-29, South China Morning Post, Information on sunrise/sunset
-#   time and other things for September 30 and October 1.
-#   https://i.imgur.com/kCiUR78.jpg
-# * 1942-02-05. The Hong Kong News, Radio Program Guide.
-#   https://i.imgur.com/eVvDMzS.jpg
-# * 1941-06-14. Hong Kong Daily Press, Daylight Saving from 3am Tomorrow.
-#   https://i.imgur.com/05KkvtC.png
-# * 1941-09-30, Hong Kong Daily Press, Winter Time Warning.
-#   https://i.imgur.com/dge4kFJ.png
-# Also, the Liberation day of Hong Kong after WWII which British rule
-# over the territory resumed was August 30, 1945, which I think should
-# be the termination date for the use of JST in the territory....
-
-# From Paul Eggert (2018-11-17):
-# Here are the dates given at
-# https://www.hko.gov.hk/gts/time/Summertime.htm
-# as of 2014-06-19:
-# Year        Period
-# 1941        15 Jun to 30 Sep
-# 1942        Whole year
-# 1943        Whole year
-# 1944        Whole year
-# 1945        Whole year
-# 1946        20 Apr to 1 Dec
-# 1947        13 Apr to 30 Dec
-# 1948        2 May to 31 Oct
-# 1949        3 Apr to 30 Oct
-# 1950        2 Apr to 29 Oct
-# 1951        1 Apr to 28 Oct
-# 1952        6 Apr to 2 Nov
-# 1953        5 Apr to 1 Nov
-# 1954        21 Mar to 31 Oct
-# 1955        20 Mar to 6 Nov
-# 1956        18 Mar to 4 Nov
-# 1957        24 Mar to 3 Nov
-# 1958        23 Mar to 2 Nov
-# 1959        22 Mar to 1 Nov
-# 1960        20 Mar to 6 Nov
-# 1961        19 Mar to 5 Nov
-# 1962        18 Mar to 4 Nov
-# 1963        24 Mar to 3 Nov
-# 1964        22 Mar to 1 Nov
-# 1965        18 Apr to 17 Oct
-# 1966        17 Apr to 16 Oct
-# 1967        16 Apr to 22 Oct
-# 1968        21 Apr to 20 Oct
-# 1969        20 Apr to 19 Oct
-# 1970        19 Apr to 18 Oct
-# 1971        18 Apr to 17 Oct
-# 1972        16 Apr to 22 Oct
-# 1973        22 Apr to 21 Oct
-# 1973/74     30 Dec 73 to 20 Oct 74
-# 1975        20 Apr to 19 Oct
-# 1976        18 Apr to 17 Oct
-# 1977        Nil
-# 1978        Nil
-# 1979        13 May to 21 Oct
-# 1980 to Now Nil
-# The page does not give times of day for transitions,
-# or dates for the 1942 and 1945 transitions.
-# The Japanese occupation of Hong Kong began 1941-12-25.
-# The Japanese surrender of Hong Kong was signed 1945-09-16; see:
-# Heaver S. The days after the Pacific war ended: unsettling times
-# in Hong Kong. Post Magazine. 2016-06-13.
-# https://www.scmp.com/magazines/post-magazine/article/1852990/days-after-pacific-war-ended-unsettling-times-hong-kong
-# For lack of anything better, use start of those days as the
-# transition times.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	HK	1946	only	-	Apr	20	3:30	1:00	S
-Rule	HK	1946	only	-	Dec	1	3:30	0	-
-Rule	HK	1947	only	-	Apr	13	3:30	1:00	S
-Rule	HK	1947	only	-	Dec	30	3:30	0	-
-Rule	HK	1948	only	-	May	2	3:30	1:00	S
-Rule	HK	1948	1951	-	Oct	lastSun	3:30	0	-
-Rule	HK	1952	1953	-	Nov	Sun>=1	3:30	0	-
-Rule	HK	1949	1953	-	Apr	Sun>=1	3:30	1:00	S
-Rule	HK	1954	1964	-	Mar	Sun>=18	3:30	1:00	S
-Rule	HK	1954	only	-	Oct	31	3:30	0	-
-Rule	HK	1955	1964	-	Nov	Sun>=1	3:30	0	-
-Rule	HK	1965	1976	-	Apr	Sun>=16	3:30	1:00	S
-Rule	HK	1965	1976	-	Oct	Sun>=16	3:30	0	-
-Rule	HK	1973	only	-	Dec	30	3:30	1:00	S
-Rule	HK	1979	only	-	May	Sun>=8	3:30	1:00	S
-Rule	HK	1979	only	-	Oct	Sun>=16	3:30	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Hong_Kong	7:36:42 -	LMT	1904 Oct 30  0:36:42
-			8:00	-	HKT	1941 Jun 15  3:30
-			8:00	1:00	HKST	1941 Oct  1  4:00
-			8:30	-	HKT	1941 Dec 25
-			9:00	-	JST	1945 Sep 16
-			8:00	HK	HK%sT
-
-###############################################################################
-
-# Taiwan
-
-# From smallufo (2010-04-03):
-# According to Taiwan's CWB [Central Weather Bureau],
-# http://www.cwb.gov.tw/V6/astronomy/cdata/summert.htm
-# Taipei has DST in 1979 between July 1st and Sep 30.
-
-# From Yu-Cheng Chuang (2013-07-12):
-# On Dec 28, 1895, the Meiji Emperor announced Ordinance No. 167 of
-# Meiji Year 28 "The clause about standard time", mentioned that
-# Taiwan and Penghu Islands, as well as Yaeyama and Miyako Islands
-# (both in Okinawa) adopt the Western Standard Time which is based on
-# 120E. The adoption began from Jan 1, 1896. The original text can be
-# found on Wikisource:
-# https://ja.wikisource.org/wiki/æš™æș–æ™‚ăƒ‹é—œă‚čル件_(ć…Źćžƒæ™‚)
-# ... This could be the first adoption of time zone in Taiwan, because
-# during the Qing Dynasty, it seems that there was no time zone
-# declared officially.
-#
-# Later, in the beginning of World War II, on Sep 25, 1937, the Showa
-# Emperor announced Ordinance No. 529 of Showa Year 12 "The clause of
-# revision in the ordinance No. 167 of Meiji year 28 about standard
-# time", in which abolished the adoption of Western Standard Time in
-# western islands (listed above), which means the whole Japan
-# territory, including later occupations, adopt Japan Central Time
-# (UT+9). The adoption began on Oct 1, 1937. The original text can
-# be found on Wikisource:
-# https://ja.wikisource.org/wiki/明æČ»äșŒćć…«ćčŽć‹…ä»€çŹŹç™Ÿć…­ćäžƒè™Ÿæš™æș–æ™‚ăƒ‹é—œă‚čル件䞭æ”čæ­ŁăƒŽä»¶
-#
-# That is, the time zone of Taipei switched to UT+9 on Oct 1, 1937.
-
-# From Yu-Cheng Chuang (2014-07-02):
-# I've found more evidence about when the time zone was switched from UT+9
-# back to UT+8 after WW2.  I believe it was on Sep 21, 1945.  In a document
-# during Japanese era [1] in which the officer told the staff to change time
-# zone back to Western Standard Time (UT+8) on Sep 21.  And in another
-# history page of National Cheng Kung University [2], on Sep 21 there is a
-# note "from today, switch back to Western Standard Time".  From these two
-# materials, I believe that the time zone change happened on Sep 21.  And
-# today I have found another monthly journal called "The Astronomical Herald"
-# from The Astronomical Society of Japan [3] in which it mentioned the fact
-# that:
-#
-# 1. Standard Time of the Country (Japan) was adopted on Jan 1, 1888, using
-# the time at 135E (GMT+9)
-#
-# 2. Standard Time of the Country was renamed to Central Standard Time, on Jan
-# 1, 1898, and on the same day, the new territories Taiwan and Penghu islands,
-# as well as Yaeyama and Miyako islands, adopted a new time zone called
-# Western Standard Time, which is in GMT+8.
-#
-# 3. Western Standard Time was deprecated on Sep 30, 1937. From then all the
-# territories of Japan adopted the same time zone, which is Central Standard
-# Time.
-#
-# [1] Academica Historica, Taiwan:
-# http://163.29.208.22:8080/govsaleShowImage/connect_img.php?s=00101738900090036&e=00101738900090037
-# [2] Nat'l Cheng Kung University 70th Anniversary Special Site:
-# http://www.ncku.edu.tw/~ncku70/menu/001/01_01.htm
-# [3] Yukio Niimi, The Standard Time in Japan (1997), p.475:
-# http://www.asj.or.jp/geppou/archive_open/1997/pdf/19971001c.pdf
-
-# Yu-Cheng Chuang (2014-07-03):
-# I finally have found the real official gazette about changing back to
-# Western Standard Time on Sep 21 in Taiwan.  It's Taiwan Governor-General
-# Bulletin No. 386 in Showa 20 years (1945), published on Sep 19, 1945. [1] ...
-# [It] abolishes Bulletin No. 207 in Showa 12 years (1937), which is a local
-# bulletin in Taiwan for that Ordinance No. 529. It also mentioned that 1am on
-# Sep 21, 1945 will be 12am on Sep 21.  I think this bulletin is much more
-# official than the one I mentioned in my first mail, because it's from the
-# top-level government in Taiwan. If you're going to quote any resource, this
-# would be a good one.
-# [1] Taiwan Governor-General Gazette, No. 1018, Sep 19, 1945:
-# http://db2.th.gov.tw/db2/view/viewImg.php?imgcode=0072031018a&num=19&bgn=019&end=019&otherImg=&type=gener
-
-# From Yu-Cheng Chuang (2014-07-02):
-# In 1946, DST in Taiwan was from May 15 and ended on Sep 30. The info from
-# Central Weather Bureau website was not correct.
-#
-# Original Bulletin:
-# http://subtpg.tpg.gov.tw/og/image2.asp?f=03502F0AKM1AF
-# http://subtpg.tpg.gov.tw/og/image2.asp?f=0350300AKM1B0 (cont.)
-#
-# In 1947, DST in Taiwan was expanded to Oct 31. There is a backup of that
-# telegram announcement from Taiwan Province Government:
-#
-# http://subtpg.tpg.gov.tw/og/image2.asp?f=0360310AKZ431
-#
-# Here is a brief translation:
-#
-#   The Summer Time this year is adopted from midnight Apr 15 until Sep 20
-#   midnight. To save (energy?) consumption, we're expanding Summer Time
-#   adoption till Oct 31 midnight.
-#
-# The Central Weather Bureau website didn't mention that, however it can
-# be found from historical government announcement database.
-
-# From Paul Eggert (2014-07-03):
-# As per Yu-Cheng Chuang, say that Taiwan was at UT +09 from 1937-10-01
-# until 1945-09-21 at 01:00, overriding Shanks & Pottenger.
-# Likewise, use Yu-Cheng Chuang's data for DST in Taiwan.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Taiwan	1946	only	-	May	15	0:00	1:00	D
-Rule	Taiwan	1946	only	-	Oct	1	0:00	0	S
-Rule	Taiwan	1947	only	-	Apr	15	0:00	1:00	D
-Rule	Taiwan	1947	only	-	Nov	1	0:00	0	S
-Rule	Taiwan	1948	1951	-	May	1	0:00	1:00	D
-Rule	Taiwan	1948	1951	-	Oct	1	0:00	0	S
-Rule	Taiwan	1952	only	-	Mar	1	0:00	1:00	D
-Rule	Taiwan	1952	1954	-	Nov	1	0:00	0	S
-Rule	Taiwan	1953	1959	-	Apr	1	0:00	1:00	D
-Rule	Taiwan	1955	1961	-	Oct	1	0:00	0	S
-Rule	Taiwan	1960	1961	-	Jun	1	0:00	1:00	D
-Rule	Taiwan	1974	1975	-	Apr	1	0:00	1:00	D
-Rule	Taiwan	1974	1975	-	Oct	1	0:00	0	S
-Rule	Taiwan	1979	only	-	Jul	1	0:00	1:00	D
-Rule	Taiwan	1979	only	-	Oct	1	0:00	0	S
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-# Taipei or Taibei or T'ai-pei
-Zone	Asia/Taipei	8:06:00 -	LMT	1896 Jan  1
-			8:00	-	CST	1937 Oct  1
-			9:00	-	JST	1945 Sep 21  1:00
-			8:00	Taiwan	C%sT
-
-# Macau (Macao, Aomen)
-#
-# From P Chan (2018-05-10):
-# * LegisMac
-#   http://legismac.safp.gov.mo/legismac/descqry/Descqry.jsf?lang=pt
-#   A database for searching titles of legal documents of Macau in
-#   Chinese and Portuguese.  The term "HORÁRIO DE VERÃO" can be used for
-#   searching decrees about summer time.
-# * Archives of Macao
-#   http://www.archives.gov.mo/en/bo/
-#   It contains images of old official gazettes.
-# * The Macao Meteorological and Geophysical Bureau have a page listing the
-#   summer time history.  But it is not complete and has some mistakes.
-#   http://www.smg.gov.mo/smg/geophysics/e_t_Summer%20Time.htm
-# Macau adopted GMT+8 on 30 Oct 1904 to follow Hong Kong.  Clocks were
-# advanced by 25 minutes and 50 seconds.  Which means the LMT used was
-# +7:34:10.  As stated in the "Portaria No. 204" dated 21 October 1904
-# and published in the Official Gazette on 29 October 1904.
-# http://igallery.icm.gov.mo/Images/Archives/BO/MO_AH_PUB_BO_1904_10/MO_AH_PUB_BO_1904_10_00025_Grey.JPG
-#
-# Therefore the 1911 decree of Portugal did not change time in Macau.
-#
-# From LegisMac, here is a list of decrees that changed the time ...
-# [Decree Gazette-no. date; titles omitted in this quotation]
-#	DIL 732 BOCM 51 1941.12.20
-#	DIL 764 BOCM 9S 1942.04.30
-#	DIL 781 BOCM 21 1942.10.10
-#	PT 3434 BOCM 8S 1943.04.17
-#	PT 3504 BOCM 20 1943.09.25
-#	PT 3843 BOCM 39 1945.09.29
-#	PT 3961 BOCM 17 1946.04.27
-#	PT 4026 BOCM 39 1946.09.28
-#	PT 4153 BOCM 16 1947.04.10
-#	PT 4271 BOCM 48 1947.11.29
-#	PT 4374 BOCM 18 1948.05.01
-#	PT 4465 BOCM 44 1948.10.30
-#	PT 4590 BOCM 14 1949.04.02
-#	PT 4666 BOCM 44 1949.10.29
-#	PT 4771 BOCM 12 1950.03.25
-#	PT 4838 BOCM 43 1950.10.28
-#	PT 4946 BOCM 12 1951.03.24
-#	PT 5025 BO 43 1951.10.27
-#	PT 5149 BO 14 1952.04.05
-#	PT 5251 BO 43 1952.10.25
-#	PT 5366 BO 13 1953.03.28
-#	PT 5444 BO 44 1953.10.31
-#	PT 5540 BO 12 1954.03.20
-#	PT 5589 BO 44 1954.10.30
-#	PT 5676 BO 12 1955.03.19
-#	PT 5739 BO 45 1955.11.05
-#	PT 5823 BO 11 1956.03.17
-#	PT 5891 BO 44 1956.11.03
-#	PT 5981 BO 12 1957.03.23
-#	PT 6064 BO 43 1957.10.26
-#	PT 6172 BO 12 1958.03.22
-#	PT 6243 BO 43 1958.10.25
-#	PT 6341 BO 12 1959.03.21
-#	PT 6411 BO 43 1959.10.24
-#	PT 6514 BO 11 1960.03.12
-#	PT 6584 BO 44 1960.10.29
-#	PT 6721 BO 10 1961.03.11
-#	PT 6815 BO 43 1961.10.28
-#	PT 6947 BO 10 1962.03.10
-#	PT 7080 BO 43 1962.10.27
-#	PT 7218 BO 12 1963.03.23
-#	PT 7340 BO 43 1963.10.26
-#	PT 7491 BO 11 1964.03.14
-#	PT 7664 BO 43 1964.10.24
-#	PT 7846 BO 15 1965.04.10
-#	PT 7979 BO 42 1965.10.16
-#	PT 8146 BO 15 1966.04.09
-#	PT 8252 BO 41 1966.10.08
-#	PT 8429 BO 15 1967.04.15
-#	PT 8540 BO 41 1967.10.14
-#	PT 8735 BO 15 1968.04.13
-#	PT 8860 BO 41 1968.10.12
-#	PT 9035 BO 16 1969.04.19
-#	PT 9156 BO 42 1969.10.18
-#	PT 9328 BO 15 1970.04.11
-#	PT 9418 BO 41 1970.10.10
-#	PT 9587 BO 14 1971.04.03
-#	PT 9702 BO 41 1971.10.09
-#	PT 38-A/72 BO 14 1972.04.01
-#	PT 126-A/72 BO 41 1972.10.07
-#	PT 61/73 BO 14 1973.04.07
-#	PT 182/73 BO 40 1973.10.06
-#	PT 282/73 BO 51 1973.12.22
-#	PT 177/74 BO 41 1974.10.12
-#	PT 51/75 BO 15 1975.04.12
-#	PT 173/75 BO 41 1975.10.11
-#	PT 67/76/M BO 14 1976.04.03
-#	PT 169/76/M BO 41 1976.10.09
-#	PT 78/79/M BO 19 1979.05.12
-#	PT 166/79/M BO 42 1979.10.20
-# Note that DIL 732 does not belong to "HORÁRIO DE VERÃO" according to
-# LegisMac.... Note that between 1942 and 1945, the time switched
-# between GMT+9 and GMT+10.  Also in 1965 and 1965 the DST ended at 2:30am.
-
-# From Paul Eggert (2018-05-10):
-# The 1904 decree says that Macau changed from the meridian of
-# Fortaleza do Monte, presumably the basis for the 7:34:10 for LMT.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Macau	1942	1943	-	Apr	30	23:00	1:00	-
-Rule	Macau	1942	only	-	Nov	17	23:00	0	-
-Rule	Macau	1943	only	-	Sep	30	23:00	0	S
-Rule	Macau	1946	only	-	Apr	30	23:00s	1:00	D
-Rule	Macau	1946	only	-	Sep	30	23:00s	0	S
-Rule	Macau	1947	only	-	Apr	19	23:00s	1:00	D
-Rule	Macau	1947	only	-	Nov	30	23:00s	0	S
-Rule	Macau	1948	only	-	May	 2	23:00s	1:00	D
-Rule	Macau	1948	only	-	Oct	31	23:00s	0	S
-Rule	Macau	1949	1950	-	Apr	Sat>=1	23:00s	1:00	D
-Rule	Macau	1949	1950	-	Oct	lastSat	23:00s	0	S
-Rule	Macau	1951	only	-	Mar	31	23:00s	1:00	D
-Rule	Macau	1951	only	-	Oct	28	23:00s	0	S
-Rule	Macau	1952	1953	-	Apr	Sat>=1	23:00s	1:00	D
-Rule	Macau	1952	only	-	Nov	 1	23:00s	0	S
-Rule	Macau	1953	1954	-	Oct	lastSat	23:00s	0	S
-Rule	Macau	1954	1956	-	Mar	Sat>=17	23:00s	1:00	D
-Rule	Macau	1955	only	-	Nov	 5	23:00s	0	S
-Rule	Macau	1956	1964	-	Nov	Sun>=1	03:30	0	S
-Rule	Macau	1957	1964	-	Mar	Sun>=18	03:30	1:00	D
-Rule	Macau	1965	1973	-	Apr	Sun>=16	03:30	1:00	D
-Rule	Macau	1965	1966	-	Oct	Sun>=16	02:30	0	S
-Rule	Macau	1967	1976	-	Oct	Sun>=16	03:30	0	S
-Rule	Macau	1973	only	-	Dec	30	03:30	1:00	D
-Rule	Macau	1975	1976	-	Apr	Sun>=16	03:30	1:00	D
-Rule	Macau	1979	only	-	May	13	03:30	1:00	D
-Rule	Macau	1979	only	-	Oct	Sun>=16	03:30	0	S
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Macau	7:34:10 -	LMT	1904 Oct 30
-			8:00	-	CST	1941 Dec 21 23:00
-			9:00	Macau	+09/+10	1945 Sep 30 24:00
-			8:00	Macau	C%sT
-
-
-###############################################################################
-
-# Cyprus
-
-# Milne says the Eastern Telegraph Company used 2:14:00.  Stick with LMT.
-# IATA SSIM (1998-09) has Cyprus using EU rules for the first time.
-
-# From Paul Eggert (2016-09-09):
-# Yesterday's Cyprus Mail reports that Northern Cyprus followed Turkey's
-# lead and switched from +02/+03 to +03 year-round.
-# http://cyprus-mail.com/2016/09/08/two-time-zones-cyprus-turkey-will-not-turn-clocks-back-next-month/
-#
-# From Even Scharning (2016-10-31):
-# Looks like the time zone split in Cyprus went through last night.
-# http://cyprus-mail.com/2016/10/30/cyprus-new-division-two-time-zones-now-reality/
-
-# From Paul Eggert (2017-10-18):
-# Northern Cyprus will reinstate winter time on October 29, thus
-# staying in sync with the rest of Cyprus.  See: Anastasiou A.
-# Cyprus to remain united in time.  Cyprus Mail 2017-10-17.
-# https://cyprus-mail.com/2017/10/17/cyprus-remain-united-time/
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Cyprus	1975	only	-	Apr	13	0:00	1:00	S
-Rule	Cyprus	1975	only	-	Oct	12	0:00	0	-
-Rule	Cyprus	1976	only	-	May	15	0:00	1:00	S
-Rule	Cyprus	1976	only	-	Oct	11	0:00	0	-
-Rule	Cyprus	1977	1980	-	Apr	Sun>=1	0:00	1:00	S
-Rule	Cyprus	1977	only	-	Sep	25	0:00	0	-
-Rule	Cyprus	1978	only	-	Oct	2	0:00	0	-
-Rule	Cyprus	1979	1997	-	Sep	lastSun	0:00	0	-
-Rule	Cyprus	1981	1998	-	Mar	lastSun	0:00	1:00	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Nicosia	2:13:28 -	LMT	1921 Nov 14
-			2:00	Cyprus	EE%sT	1998 Sep
-			2:00	EUAsia	EE%sT
-Zone	Asia/Famagusta	2:15:48	-	LMT	1921 Nov 14
-			2:00	Cyprus	EE%sT	1998 Sep
-			2:00	EUAsia	EE%sT	2016 Sep  8
-			3:00	-	+03	2017 Oct 29 1:00u
-			2:00	EUAsia	EE%sT
-
-# Classically, Cyprus belongs to Asia; e.g. see Herodotus, Histories, I.72.
-# However, for various reasons many users expect to find it under Europe.
-Link	Asia/Nicosia	Europe/Nicosia
-
-# Georgia
-# From Paul Eggert (1994-11-19):
-# Today's _Economist_ (p 60) reports that Georgia moved its clocks forward
-# an hour recently, due to a law proposed by Zurab Murvanidze,
-# an MP who went on a hunger strike for 11 days to force discussion about it!
-# We have no details, but we'll guess they didn't move the clocks back in fall.
-#
-# From Mathew Englander, quoting AP (1996-10-23 13:05-04):
-# Instead of putting back clocks at the end of October, Georgia
-# will stay on daylight savings time this winter to save energy,
-# President Eduard Shevardnadze decreed Wednesday.
-#
-# From the BBC via Joseph S. Myers (2004-06-27):
-#
-# Georgia moved closer to Western Europe on Sunday...  The former Soviet
-# republic has changed its time zone back to that of Moscow.  As a result it
-# is now just four hours ahead of Greenwich Mean Time, rather than five hours
-# ahead.  The switch was decreed by the pro-Western president of Georgia,
-# Mikheil Saakashvili, who said the change was partly prompted by the process
-# of integration into Europe.
-
-# From Teimuraz Abashidze (2005-11-07):
-# Government of Georgia ... decided to NOT CHANGE daylight savings time on
-# [Oct.] 30, as it was done before during last more than 10 years.
-# Currently, we are in fact GMT +4:00, as before 30 October it was GMT
-# +3:00.... The problem is, there is NO FORMAL LAW or governmental document
-# about it.  As far as I can find, I was told, that there is no document,
-# because we just DIDN'T ISSUE document about switching to winter time....
-# I don't know what can be done, especially knowing that some years ago our
-# DST rules where changed THREE TIMES during one month.
-
-# Milne 1899 says Tbilisi (Tiflis) time was 2:59:05.7.
-# Byalokoz 1919 says Georgia was 2:59:11.
-# Go with Byalokoz.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Tbilisi	2:59:11 -	LMT	1880
-			2:59:11	-	TBMT	1924 May  2 # Tbilisi Mean Time
-			3:00	-	+03	1957 Mar
-			4:00 RussiaAsia +04/+05	1991 Mar 31  2:00s
-			3:00 RussiaAsia +03/+04	1992
-			3:00 E-EurAsia	+03/+04	1994 Sep lastSun
-			4:00 E-EurAsia	+04/+05	1996 Oct lastSun
-			4:00	1:00	+05	1997 Mar lastSun
-			4:00 E-EurAsia	+04/+05	2004 Jun 27
-			3:00 RussiaAsia	+03/+04	2005 Mar lastSun  2:00
-			4:00	-	+04
-
-# East Timor
-
-# See Indonesia for the 1945 transition.
-
-# From JoĂŁo CarrascalĂŁo, brother of the former governor of East Timor, in
-# East Timor may be late for its millennium
-# <https://etan.org/et99c/december/26-31/30ETMAY.htm> (1999-12-26/31):
-# Portugal tried to change the time forward in 1974 because the sun
-# rises too early but the suggestion raised a lot of problems with the
-# Timorese and I still don't think it would work today because it
-# conflicts with their way of life.
-
-# From Paul Eggert (2000-12-04):
-# We don't have any record of the above attempt.
-# Most likely our records are incomplete, but we have no better data.
-
-# From Manoel de Almeida e Silva, Deputy Spokesman for the UN Secretary-General
-# http://www.hri.org/news/world/undh/2000/00-08-16.undh.html
-# (2000-08-16):
-# The Cabinet of the East Timor Transition Administration decided
-# today to advance East Timor's time by one hour.  The time change,
-# which will be permanent, with no seasonal adjustment, will happen at
-# midnight on Saturday, September 16.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Dili	8:22:20 -	LMT	1912 Jan  1
-			8:00	-	+08	1942 Feb 21 23:00
-			9:00	-	+09	1976 May  3
-			8:00	-	+08	2000 Sep 17  0:00
-			9:00	-	+09
-
-# India
-
-# British astronomer Henry Park Hollis disliked India Standard Time's offset:
-# "A new time system has been proposed for India, Further India, and Burmah.
-# The scheme suggested is that the times of the meridians 5œ and 6œ hours
-# east of Greenwich should be adopted in these territories.  No reason is
-# given why hourly meridians five hours and six hours east should not be
-# chosen; a plan which would bring the time of India into harmony with
-# that of almost the whole of the civilised world."
-# Hollis HP. Universal Time, Longitudes, and Geodesy. Mon Not R Astron Soc.
-# 1905-02-10;65(4):405-6. https://doi.org/10.1093/mnras/65.4.382
-
-# From Ian P. Beacock, in "A brief history of (modern) time", The Atlantic
-# https://www.theatlantic.com/technology/archive/2015/12/the-creation-of-modern-time/421419/
-# (2015-12-22):
-# In January 1906, several thousand cotton-mill workers rioted on the
-# outskirts of Bombay....  They were protesting the proposed abolition of
-# local time in favor of Indian Standard Time....  Journalists called this
-# dispute the "Battle of the Clocks."  It lasted nearly half a century.
-
-# From Paul Eggert (2017-04-20):
-# Good luck trying to nail down old timekeeping records in India.
-# "... in the nineteenth century ... Madras Observatory took its magnetic
-# measurements on Göttingen time, its meteorological measurements on Madras
-# (local) time, dropped its time ball on Greenwich (ocean navigator's) time,
-# and distributed civil (local time)." -- Bartky IR. Selling the true time:
-# 19th-century timekeeping in america. Stanford U Press (2000), 247 note 19.
-# "A more potent cause of resistance to the general adoption of the present
-# standard time lies in the fact that it is Madras time.  The citizen of
-# Bombay, proud of being 'primus in Indis' and of Calcutta, equally proud of
-# his city being the Capital of India, and - for a part of the year - the Seat
-# of the Supreme Government, alike look down on Madras, and refuse to change
-# the time they are using, for that of what they regard as a benighted
-# Presidency; while Madras, having for long given the standard time to the
-# rest of India, would resist the adoption of any other Indian standard in its
-# place." -- Oldham RD. On Time in India: a suggestion for its improvement.
-# Proceedings of the Asiatic Society of Bengal (April 1899), 49-55.
-#
-# "In 1870 ... Madras time - 'now used by the telegraph and regulated from the
-# only government observatory' - was suggested as a standard railway time,
-# first to be adopted on the Great Indian Peninsular Railway (GIPR)....
-# Calcutta, Bombay, and Karachi, were to be allowed to continue with their
-# local time for civil purposes." - Prasad R. Tracks of Change: Railways and
-# Everyday Life in Colonial India. Cambridge University Press (2016), 145.
-#
-# Reed S, Low F. The Indian Year Book 1936-37. Bennett, Coleman, pp 27-8.
-# https://archive.org/details/in.ernet.dli.2015.282212
-# This lists +052110 as Madras local time used in railways, and says that on
-# 1906-01-01 railways and telegraphs in India switched to +0530.  Some
-# municipalities retained their former time, and the time in Calcutta
-# continued to depend on whether you were at the railway station or at
-# government offices.  Government time was at +055320 (according to Shanks) or
-# at +0554 (according to the Indian Year Book).  Railway time is more
-# appropriate for our purposes, as it was better documented, it is what we do
-# elsewhere (e.g., Europe/London before 1880), and after 1906 it was
-# consistent in the region now identified by Asia/Kolkata.  So, use railway
-# time for 1870-1941.  Shanks is our only (and dubious) source for the
-# 1941-1945 data.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Kolkata	5:53:28 -	LMT	1854 Jun 28 # Kolkata
-			5:53:20	-	HMT	1870	    # Howrah Mean Time?
-			5:21:10	-	MMT	1906 Jan  1 # Madras local time
-			5:30	-	IST	1941 Oct
-			5:30	1:00	+0630	1942 May 15
-			5:30	-	IST	1942 Sep
-			5:30	1:00	+0630	1945 Oct 15
-			5:30	-	IST
-# Since 1970 the following are like Asia/Kolkata:
-#	Andaman Is
-#	Lakshadweep (Laccadive, Minicoy and Amindivi Is)
-#	Nicobar Is
-
-# Indonesia
-#
-# From Paul Eggert (2014-09-06):
-# The 1876 Report of the Secretary of the [US] Navy, p 306 says that Batavia
-# civil time was 7:07:12.5; round to even for Jakarta.
-#
-# From Gwillim Law (2001-05-28), overriding Shanks & Pottenger:
-# http://www.sumatera-inc.com/go_to_invest/about_indonesia.asp#standtime
-# says that Indonesia's time zones changed on 1988-01-01.  Looking at some
-# time zone maps, I think that must refer to Western Borneo (Kalimantan Barat
-# and Kalimantan Tengah) switching from UTC+8 to UTC+7.
-#
-# From Paul Eggert (2007-03-10):
-# Here is another correction to Shanks & Pottenger.
-# JohnTWB writes that Japanese forces did not surrender control in
-# Indonesia until 1945-09-01 00:00 at the earliest (in Jakarta) and
-# other formal surrender ceremonies were September 9, 11, and 13, plus
-# September 12 for the regional surrender to Mountbatten in Singapore.
-# These would be the earliest possible times for a change.
-# RĂ©gimes horaires pour le monde entier, by Henri Le Corre, (Éditions
-# Traditionnelles, 1987, Paris) says that Java and Madura switched
-# from UT +09 to +07:30 on 1945-09-23, and gives 1944-09-01 for Jayapura
-# (Hollandia).  For now, assume all Indonesian locations other than Jayapura
-# switched on 1945-09-23.
-#
-# From Paul Eggert (2013-08-11):
-# Normally the tz database uses English-language abbreviations, but in
-# Indonesia it's typical to use Indonesian-language abbreviations even
-# when writing in English.  For example, see the English-language
-# summary published by the Time and Frequency Laboratory of the
-# Research Center for Calibration, Instrumentation and Metrology,
-# Indonesia, <http://time.kim.lipi.go.id/time-eng.php> (2006-09-29).
-# The time zone abbreviations and UT offsets are:
-#
-# WIB  - +07 - Waktu Indonesia Barat (Indonesia western time)
-# WITA - +08 - Waktu Indonesia Tengah (Indonesia central time)
-# WIT  - +09 - Waktu Indonesia Timur (Indonesia eastern time)
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-# Java, Sumatra
-Zone Asia/Jakarta	7:07:12 -	LMT	1867 Aug 10
-# Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
-# but this must be a typo.
-			7:07:12	-	BMT	1923 Dec 31 23:47:12 # Batavia
-			7:20	-	+0720	1932 Nov
-			7:30	-	+0730	1942 Mar 23
-			9:00	-	+09	1945 Sep 23
-			7:30	-	+0730	1948 May
-			8:00	-	+08	1950 May
-			7:30	-	+0730	1964
-			7:00	-	WIB
-# west and central Borneo
-Zone Asia/Pontianak	7:17:20	-	LMT	1908 May
-			7:17:20	-	PMT	1932 Nov    # Pontianak MT
-			7:30	-	+0730	1942 Jan 29
-			9:00	-	+09	1945 Sep 23
-			7:30	-	+0730	1948 May
-			8:00	-	+08	1950 May
-			7:30	-	+0730	1964
-			8:00	-	WITA	1988 Jan  1
-			7:00	-	WIB
-# Sulawesi, Lesser Sundas, east and south Borneo
-Zone Asia/Makassar	7:57:36 -	LMT	1920
-			7:57:36	-	MMT	1932 Nov    # Macassar MT
-			8:00	-	+08	1942 Feb  9
-			9:00	-	+09	1945 Sep 23
-			8:00	-	WITA
-# Maluku Islands, West Papua, Papua
-Zone Asia/Jayapura	9:22:48 -	LMT	1932 Nov
-			9:00	-	+09	1944 Sep  1
-			9:30	-	+0930	1964
-			9:00	-	WIT
-
-# Iran
-
-# From Roozbeh Pournader (2003-03-15):
-# This is an English translation of what I just found (originally in Persian).
-# The Gregorian dates in brackets are mine:
-#
-#	Official Newspaper No. 13548-1370/6/25 [1991-09-16]
-#	No. 16760/T233 H				1370/6/10 [1991-09-01]
-#
-#	The Rule About Change of the Official Time of the Country
-#
-#	The Board of Ministers, in the meeting dated 1370/5/23 [1991-08-14],
-#	based on the suggestion number 2221/D dated 1370/4/22 [1991-07-13]
-#	of the Country's Organization for Official and Employment Affairs,
-#	and referring to the law for equating the working hours of workers
-#	and officers in the whole country dated 1359/4/23 [1980-07-14], and
-#	for synchronizing the official times of the country, agreed that:
-#
-#	The official time of the country will should move forward one hour
-#	at the 24[:00] hours of the first day of Farvardin and should return
-#	to its previous state at the 24[:00] hours of the 30th day of
-#	Shahrivar.
-#
-#	First Deputy to the President - Hassan Habibi
-#
-# From personal experience, that agrees with what has been followed
-# for at least the last 5 years.  Before that, for a few years, the
-# date used was the first Thursday night of Farvardin and the last
-# Thursday night of Shahrivar, but I can't give exact dates....
-#
-# From Roozbeh Pournader (2005-04-05):
-# The text of the Iranian law, in effect since 1925, clearly mentions
-# that the true solar year is the measure, and there is no arithmetic
-# leap year calculation involved.  There has never been any serious
-# plan to change that law....
-#
-# From Paul Eggert (2018-11-30):
-# Go with Shanks & Pottenger before Sept. 1991, and with Pournader thereafter.
-# I used the following code in GNU Emacs 26.1 to generate the "Rule Iran"
-# lines from 2008 through 2087.  Emacs 26.1 uses Ed Reingold's
-# cal-persia implementation of Birashk's approximation, which in the
-# 2008-2087 range disagrees with the the astronomical Persian calendar
-# for Persian years 1404 (Gregorian 2025) and 1437 (Gregorian 2058),
-# so the following code special-case those years.  See Table 15.1, page 264, of:
-# Edward M. Reingold and Nachum Dershowitz, Calendrical Calculations:
-# The Ultimate Edition, Cambridge University Press (2018).
-# https://www.cambridge.org/fr/academic/subjects/computer-science/computing-general-interest/calendrical-calculations-ultimate-edition-4th-edition
-# Page 258, footnote 2, of this book says there is some dispute over what will
-# happen in 2091 (and some other years after that), so this code
-# stops in 2087, as 2088 and 2089 agree with the "max" rule below.
-# (cl-loop
-#  initially (require 'cal-persia)
-#  with first-persian-year = 1387
-#  with last-persian-year = 1466
-#  ;; Exceptional years in the above range,
-#  ;; from Reingold & Dershowitz Table 15.1, page 264:
-#  with exceptional-persian-years = '(1404 1437)
-#  with range-start = nil
-#  for persian-year from first-persian-year to last-persian-year
-#  do
-#  (let*
-#      ((exceptional-year-offset
-#        (if (member persian-year exceptional-persian-years) 1 0))
-#       (beg-dst-absolute
-#        (+ (calendar-persian-to-absolute (list 1 1 persian-year))
-#           exceptional-year-offset))
-#       (end-dst-absolute
-#        (+ (calendar-persian-to-absolute (list 6 30 persian-year))
-#           exceptional-year-offset))
-#       (next-year-beg-dst-absolute
-#        (+ (calendar-persian-to-absolute (list 1 1 (1+ persian-year)))
-#           (if (member (1+ persian-year) exceptional-persian-years) 1 0)))
-#       (beg-dst (calendar-gregorian-from-absolute beg-dst-absolute))
-#       (end-dst (calendar-gregorian-from-absolute end-dst-absolute))
-#       (next-year-beg-dst (calendar-gregorian-from-absolute
-#                           next-year-beg-dst-absolute))
-#       (year (calendar-extract-year beg-dst))
-#       (range-end (if range-start year "only")))
-#    (setq range-start (or range-start year))
-#    (when (or (/= (calendar-extract-day beg-dst)
-#                  (calendar-extract-day next-year-beg-dst))
-#              (= persian-year last-persian-year))
-#      (insert
-#       (format
-#        "Rule\tIran\t%d\t%s\t-\t%s\t%2d\t24:00\t1:00\t-\n"
-#        range-start range-end
-#        (calendar-month-name (calendar-extract-month beg-dst) t)
-#        (calendar-extract-day beg-dst)))
-#      (insert
-#       (format
-#        "Rule\tIran\t%d\t%s\t-\t%s\t%2d\t24:00\t0\t-\n"
-#        range-start range-end
-#        (calendar-month-name (calendar-extract-month end-dst) t)
-#        (calendar-extract-day end-dst)))
-#      (setq range-start nil))))
-#
-# From Oscar van Vlijmen (2005-03-30), writing about future
-# discrepancies between cal-persia and the Iranian calendar:
-# For 2091 solar-longitude-after yields 2091-03-20 08:40:07.7 UT for
-# the vernal equinox and that gets so close to 12:00 some local
-# Iranian time that the definition of the correct location needs to be
-# known exactly, amongst other factors.  2157 is even closer:
-# 2157-03-20 08:37:15.5 UT.  But the Gregorian year 2025 should give
-# no interpretation problem whatsoever.  By the way, another instant
-# in the near future where there will be a discrepancy between
-# arithmetical and astronomical Iranian calendars will be in 2058:
-# vernal equinox on 2058-03-20 09:03:05.9 UT.  The Java version of
-# Reingold's/Dershowitz' calculator gives correctly the Gregorian date
-# 2058-03-21 for 1 Farvardin 1437 (astronomical).
-#
-# From Steffen Thorsen (2006-03-22):
-# Several of my users have reported that Iran will not observe DST anymore:
-# http://www.irna.ir/en/news/view/line-17/0603193812164948.htm
-#
-# From Reuters (2007-09-16), with a heads-up from Jesper NĂžrgaard Welen:
-# ... the Guardian Council ... approved a law on Sunday to re-introduce
-# daylight saving time ...
-# https://uk.reuters.com/article/oilRpt/idUKBLA65048420070916
-#
-# From Roozbeh Pournader (2007-11-05):
-# This is quoted from Official Gazette of the Islamic Republic of
-# Iran, Volume 63, No. 18242, dated Tuesday 1386/6/24
-# [2007-10-16]. I am doing the best translation I can:...
-# The official time of the country will be moved forward for one hour
-# on the 24 hours of the first day of the month of Farvardin and will
-# be changed back to its previous state on the 24 hours of the
-# thirtieth day of Shahrivar.
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Iran	1978	1980	-	Mar	20	24:00	1:00	-
-Rule	Iran	1978	only	-	Oct	20	24:00	0	-
-Rule	Iran	1979	only	-	Sep	18	24:00	0	-
-Rule	Iran	1980	only	-	Sep	22	24:00	0	-
-Rule	Iran	1991	only	-	May	 2	24:00	1:00	-
-Rule	Iran	1992	1995	-	Mar	21	24:00	1:00	-
-Rule	Iran	1991	1995	-	Sep	21	24:00	0	-
-Rule	Iran	1996	only	-	Mar	20	24:00	1:00	-
-Rule	Iran	1996	only	-	Sep	20	24:00	0	-
-Rule	Iran	1997	1999	-	Mar	21	24:00	1:00	-
-Rule	Iran	1997	1999	-	Sep	21	24:00	0	-
-Rule	Iran	2000	only	-	Mar	20	24:00	1:00	-
-Rule	Iran	2000	only	-	Sep	20	24:00	0	-
-Rule	Iran	2001	2003	-	Mar	21	24:00	1:00	-
-Rule	Iran	2001	2003	-	Sep	21	24:00	0	-
-Rule	Iran	2004	only	-	Mar	20	24:00	1:00	-
-Rule	Iran	2004	only	-	Sep	20	24:00	0	-
-Rule	Iran	2005	only	-	Mar	21	24:00	1:00	-
-Rule	Iran	2005	only	-	Sep	21	24:00	0	-
-Rule	Iran	2008	only	-	Mar	20	24:00	1:00	-
-Rule	Iran	2008	only	-	Sep	20	24:00	0	-
-Rule	Iran	2009	2011	-	Mar	21	24:00	1:00	-
-Rule	Iran	2009	2011	-	Sep	21	24:00	0	-
-Rule	Iran	2012	only	-	Mar	20	24:00	1:00	-
-Rule	Iran	2012	only	-	Sep	20	24:00	0	-
-Rule	Iran	2013	2015	-	Mar	21	24:00	1:00	-
-Rule	Iran	2013	2015	-	Sep	21	24:00	0	-
-Rule	Iran	2016	only	-	Mar	20	24:00	1:00	-
-Rule	Iran	2016	only	-	Sep	20	24:00	0	-
-Rule	Iran	2017	2019	-	Mar	21	24:00	1:00	-
-Rule	Iran	2017	2019	-	Sep	21	24:00	0	-
-Rule	Iran	2020	only	-	Mar	20	24:00	1:00	-
-Rule	Iran	2020	only	-	Sep	20	24:00	0	-
-Rule	Iran	2021	2023	-	Mar	21	24:00	1:00	-
-Rule	Iran	2021	2023	-	Sep	21	24:00	0	-
-Rule	Iran	2024	only	-	Mar	20	24:00	1:00	-
-Rule	Iran	2024	only	-	Sep	20	24:00	0	-
-Rule	Iran	2025	2027	-	Mar	21	24:00	1:00	-
-Rule	Iran	2025	2027	-	Sep	21	24:00	0	-
-Rule	Iran	2028	2029	-	Mar	20	24:00	1:00	-
-Rule	Iran	2028	2029	-	Sep	20	24:00	0	-
-Rule	Iran	2030	2031	-	Mar	21	24:00	1:00	-
-Rule	Iran	2030	2031	-	Sep	21	24:00	0	-
-Rule	Iran	2032	2033	-	Mar	20	24:00	1:00	-
-Rule	Iran	2032	2033	-	Sep	20	24:00	0	-
-Rule	Iran	2034	2035	-	Mar	21	24:00	1:00	-
-Rule	Iran	2034	2035	-	Sep	21	24:00	0	-
-Rule	Iran	2036	2037	-	Mar	20	24:00	1:00	-
-Rule	Iran	2036	2037	-	Sep	20	24:00	0	-
-Rule	Iran	2038	2039	-	Mar	21	24:00	1:00	-
-Rule	Iran	2038	2039	-	Sep	21	24:00	0	-
-Rule	Iran	2040	2041	-	Mar	20	24:00	1:00	-
-Rule	Iran	2040	2041	-	Sep	20	24:00	0	-
-Rule	Iran	2042	2043	-	Mar	21	24:00	1:00	-
-Rule	Iran	2042	2043	-	Sep	21	24:00	0	-
-Rule	Iran	2044	2045	-	Mar	20	24:00	1:00	-
-Rule	Iran	2044	2045	-	Sep	20	24:00	0	-
-Rule	Iran	2046	2047	-	Mar	21	24:00	1:00	-
-Rule	Iran	2046	2047	-	Sep	21	24:00	0	-
-Rule	Iran	2048	2049	-	Mar	20	24:00	1:00	-
-Rule	Iran	2048	2049	-	Sep	20	24:00	0	-
-Rule	Iran	2050	2051	-	Mar	21	24:00	1:00	-
-Rule	Iran	2050	2051	-	Sep	21	24:00	0	-
-Rule	Iran	2052	2053	-	Mar	20	24:00	1:00	-
-Rule	Iran	2052	2053	-	Sep	20	24:00	0	-
-Rule	Iran	2054	2055	-	Mar	21	24:00	1:00	-
-Rule	Iran	2054	2055	-	Sep	21	24:00	0	-
-Rule	Iran	2056	2057	-	Mar	20	24:00	1:00	-
-Rule	Iran	2056	2057	-	Sep	20	24:00	0	-
-Rule	Iran	2058	2059	-	Mar	21	24:00	1:00	-
-Rule	Iran	2058	2059	-	Sep	21	24:00	0	-
-Rule	Iran	2060	2062	-	Mar	20	24:00	1:00	-
-Rule	Iran	2060	2062	-	Sep	20	24:00	0	-
-Rule	Iran	2063	only	-	Mar	21	24:00	1:00	-
-Rule	Iran	2063	only	-	Sep	21	24:00	0	-
-Rule	Iran	2064	2066	-	Mar	20	24:00	1:00	-
-Rule	Iran	2064	2066	-	Sep	20	24:00	0	-
-Rule	Iran	2067	only	-	Mar	21	24:00	1:00	-
-Rule	Iran	2067	only	-	Sep	21	24:00	0	-
-Rule	Iran	2068	2070	-	Mar	20	24:00	1:00	-
-Rule	Iran	2068	2070	-	Sep	20	24:00	0	-
-Rule	Iran	2071	only	-	Mar	21	24:00	1:00	-
-Rule	Iran	2071	only	-	Sep	21	24:00	0	-
-Rule	Iran	2072	2074	-	Mar	20	24:00	1:00	-
-Rule	Iran	2072	2074	-	Sep	20	24:00	0	-
-Rule	Iran	2075	only	-	Mar	21	24:00	1:00	-
-Rule	Iran	2075	only	-	Sep	21	24:00	0	-
-Rule	Iran	2076	2078	-	Mar	20	24:00	1:00	-
-Rule	Iran	2076	2078	-	Sep	20	24:00	0	-
-Rule	Iran	2079	only	-	Mar	21	24:00	1:00	-
-Rule	Iran	2079	only	-	Sep	21	24:00	0	-
-Rule	Iran	2080	2082	-	Mar	20	24:00	1:00	-
-Rule	Iran	2080	2082	-	Sep	20	24:00	0	-
-Rule	Iran	2083	only	-	Mar	21	24:00	1:00	-
-Rule	Iran	2083	only	-	Sep	21	24:00	0	-
-Rule	Iran	2084	2086	-	Mar	20	24:00	1:00	-
-Rule	Iran	2084	2086	-	Sep	20	24:00	0	-
-Rule	Iran	2087	only	-	Mar	21	24:00	1:00	-
-Rule	Iran	2087	only	-	Sep	21	24:00	0	-
-#
-# The following rules are approximations starting in the year 2088.
-# These are the best post-2088 approximations available, given the
-# restrictions of a single rule using ordinary Gregorian dates.
-# At some point this table will need to be extended, though quite
-# possibly Iran will change the rules first.
-Rule	Iran	2088	max	-	Mar	20	24:00	1:00	-
-Rule	Iran	2088	max	-	Sep	20	24:00	0	-
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Tehran	3:25:44	-	LMT	1916
-			3:25:44	-	TMT	1946     # Tehran Mean Time
-			3:30	-	+0330	1977 Nov
-			4:00	Iran	+04/+05	1979
-			3:30	Iran	+0330/+0430
-
-
-# Iraq
-#
-# From Jonathan Lennox (2000-06-12):
-# An article in this week's Economist ("Inside the Saddam-free zone", p. 50 in
-# the U.S. edition) on the Iraqi Kurds contains a paragraph:
-# "The three northern provinces ... switched their clocks this spring and
-# are an hour ahead of Baghdad."
-#
-# But Rives McDow (2000-06-18) quotes a contact in Iraqi-Kurdistan as follows:
-# In the past, some Kurdish nationalists, as a protest to the Iraqi
-# Government, did not adhere to daylight saving time.  They referred
-# to daylight saving as Saddam time.  But, as of today, the time zone
-# in Iraqi-Kurdistan is on standard time with Baghdad, Iraq.
-#
-# So we'll ignore the Economist's claim.
-
-# From Steffen Thorsen (2008-03-10):
-# The cabinet in Iraq abolished DST last week, according to the following
-# news sources (in Arabic):
-# http://www.aljeeran.net/wesima_articles/news-20080305-98602.html
-# http://www.aswataliraq.info/look/article.tpl?id=2047&IdLanguage=17&IdPublication=4&NrArticle=71743&NrIssue=1&NrSection=10
-#
-# We have published a short article in English about the change:
-# https://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Iraq	1982	only	-	May	1	0:00	1:00	-
-Rule	Iraq	1982	1984	-	Oct	1	0:00	0	-
-Rule	Iraq	1983	only	-	Mar	31	0:00	1:00	-
-Rule	Iraq	1984	1985	-	Apr	1	0:00	1:00	-
-Rule	Iraq	1985	1990	-	Sep	lastSun	1:00s	0	-
-Rule	Iraq	1986	1990	-	Mar	lastSun	1:00s	1:00	-
-# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the ':01' is a typo.
-# Shanks & Pottenger say Iraq did not observe DST 1992/1997; ignore this.
-#
-Rule	Iraq	1991	2007	-	Apr	 1	3:00s	1:00	-
-Rule	Iraq	1991	2007	-	Oct	 1	3:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Baghdad	2:57:40	-	LMT	1890
-			2:57:36	-	BMT	1918     # Baghdad Mean Time?
-			3:00	-	+03	1982 May
-			3:00	Iraq	+03/+04
-
-
-###############################################################################
-
-# Israel
-
-# From Ephraim Silverberg (2001-01-11):
-#
-# I coined "IST/IDT" circa 1988.  Until then there were three
-# different abbreviations in use:
-#
-# JST  Jerusalem Standard Time [Danny Braniss, Hebrew University]
-# IZT  Israel Zonal (sic) Time [Prof. Haim Papo, Technion]
-# EEST Eastern Europe Standard Time [used by almost everyone else]
-#
-# Since timezones should be called by country and not capital cities,
-# I ruled out JST.  As Israel is in Asia Minor and not Eastern Europe,
-# EEST was equally unacceptable.  Since "zonal" was not compatible with
-# any other timezone abbreviation, I felt that 'IST' was the way to go
-# and, indeed, it has received almost universal acceptance in timezone
-# settings in Israeli computers.
-#
-# In any case, I am happy to share timezone abbreviations with India,
-# high on my favorite-country list (and not only because my wife's
-# family is from India).
-
-# From Shanks & Pottenger:
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Zion	1940	only	-	Jun	 1	0:00	1:00	D
-Rule	Zion	1942	1944	-	Nov	 1	0:00	0	S
-Rule	Zion	1943	only	-	Apr	 1	2:00	1:00	D
-Rule	Zion	1944	only	-	Apr	 1	0:00	1:00	D
-Rule	Zion	1945	only	-	Apr	16	0:00	1:00	D
-Rule	Zion	1945	only	-	Nov	 1	2:00	0	S
-Rule	Zion	1946	only	-	Apr	16	2:00	1:00	D
-Rule	Zion	1946	only	-	Nov	 1	0:00	0	S
-Rule	Zion	1948	only	-	May	23	0:00	2:00	DD
-Rule	Zion	1948	only	-	Sep	 1	0:00	1:00	D
-Rule	Zion	1948	1949	-	Nov	 1	2:00	0	S
-Rule	Zion	1949	only	-	May	 1	0:00	1:00	D
-Rule	Zion	1950	only	-	Apr	16	0:00	1:00	D
-Rule	Zion	1950	only	-	Sep	15	3:00	0	S
-Rule	Zion	1951	only	-	Apr	 1	0:00	1:00	D
-Rule	Zion	1951	only	-	Nov	11	3:00	0	S
-Rule	Zion	1952	only	-	Apr	20	2:00	1:00	D
-Rule	Zion	1952	only	-	Oct	19	3:00	0	S
-Rule	Zion	1953	only	-	Apr	12	2:00	1:00	D
-Rule	Zion	1953	only	-	Sep	13	3:00	0	S
-Rule	Zion	1954	only	-	Jun	13	0:00	1:00	D
-Rule	Zion	1954	only	-	Sep	12	0:00	0	S
-Rule	Zion	1955	only	-	Jun	11	2:00	1:00	D
-Rule	Zion	1955	only	-	Sep	11	0:00	0	S
-Rule	Zion	1956	only	-	Jun	 3	0:00	1:00	D
-Rule	Zion	1956	only	-	Sep	30	3:00	0	S
-Rule	Zion	1957	only	-	Apr	29	2:00	1:00	D
-Rule	Zion	1957	only	-	Sep	22	0:00	0	S
-Rule	Zion	1974	only	-	Jul	 7	0:00	1:00	D
-Rule	Zion	1974	only	-	Oct	13	0:00	0	S
-Rule	Zion	1975	only	-	Apr	20	0:00	1:00	D
-Rule	Zion	1975	only	-	Aug	31	0:00	0	S
-
-# From Alois Treindl (2019-03-06):
-# http://www.moin.gov.il/Documents/Ś©ŚąŚ•ŚŸ Ś§Ś™Ś„/clock-50-years-7-2014.pdf
-# From Isaac Starkman (2019-03-06):
-# Summer time was in that period in 1980 and 1984, see
-# https://www.ynet.co.il/articles/0,7340,L-3951073,00.html
-# You can of course read it in translation.
-# I checked the local newspapers for that years.
-# It started on midnight and end at 01.00 am.
-# From Paul Eggert (2019-03-06):
-# Also see this thread about the moin.gov.il URL:
-# https://mm.icann.org/pipermail/tz/2018-November/027194.html
-Rule	Zion	1980	only	-	Aug	 2	0:00	1:00	D
-Rule	Zion	1980	only	-	Sep	13	1:00	0	S
-Rule	Zion	1984	only	-	May	 5	0:00	1:00	D
-Rule	Zion	1984	only	-	Aug	25	1:00	0	S
-
-# From Shanks & Pottenger:
-Rule	Zion	1985	only	-	Apr	14	0:00	1:00	D
-Rule	Zion	1985	only	-	Sep	15	0:00	0	S
-Rule	Zion	1986	only	-	May	18	0:00	1:00	D
-Rule	Zion	1986	only	-	Sep	 7	0:00	0	S
-Rule	Zion	1987	only	-	Apr	15	0:00	1:00	D
-Rule	Zion	1987	only	-	Sep	13	0:00	0	S
-
-# From Avigdor Finkelstein (2014-03-05):
-# I check the Parliament (Knesset) records and there it's stated that the
-# [1988] transition should take place on Saturday night, when the Sabbath
-# ends and changes to Sunday.
-Rule	Zion	1988	only	-	Apr	10	0:00	1:00	D
-Rule	Zion	1988	only	-	Sep	 4	0:00	0	S
-
-# From Ephraim Silverberg
-# (1997-03-04, 1998-03-16, 1998-12-28, 2000-01-17, 2000-07-25, 2004-12-22,
-# and 2005-02-17):
-
-# According to the Office of the Secretary General of the Ministry of
-# Interior, there is NO set rule for Daylight-Savings/Standard time changes.
-# One thing is entrenched in law, however: that there must be at least 150
-# days of daylight savings time annually.  From 1993-1998, the change to
-# daylight savings time was on a Friday morning from midnight IST to
-# 1 a.m IDT; up until 1998, the change back to standard time was on a
-# Saturday night from midnight daylight savings time to 11 p.m. standard
-# time.  1996 is an exception to this rule where the change back to standard
-# time took place on Sunday night instead of Saturday night to avoid
-# conflicts with the Jewish New Year.  In 1999, the change to
-# daylight savings time was still on a Friday morning but from
-# 2 a.m. IST to 3 a.m. IDT; furthermore, the change back to standard time
-# was also on a Friday morning from 2 a.m. IDT to 1 a.m. IST for
-# 1999 only.  In the year 2000, the change to daylight savings time was
-# similar to 1999, but although the change back will be on a Friday, it
-# will take place from 1 a.m. IDT to midnight IST.  Starting in 2001, all
-# changes to/from will take place at 1 a.m. old time, but now there is no
-# rule as to what day of the week it will take place in as the start date
-# (except in 2003) is the night after the Passover Seder (i.e. the eve
-# of the 16th of Nisan in the lunar Hebrew calendar) and the end date
-# (except in 2002) is three nights before Yom Kippur [Day of Atonement]
-# (the eve of the 7th of Tishrei in the lunar Hebrew calendar).
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Zion	1989	only	-	Apr	30	0:00	1:00	D
-Rule	Zion	1989	only	-	Sep	 3	0:00	0	S
-Rule	Zion	1990	only	-	Mar	25	0:00	1:00	D
-Rule	Zion	1990	only	-	Aug	26	0:00	0	S
-Rule	Zion	1991	only	-	Mar	24	0:00	1:00	D
-Rule	Zion	1991	only	-	Sep	 1	0:00	0	S
-Rule	Zion	1992	only	-	Mar	29	0:00	1:00	D
-Rule	Zion	1992	only	-	Sep	 6	0:00	0	S
-Rule	Zion	1993	only	-	Apr	 2	0:00	1:00	D
-Rule	Zion	1993	only	-	Sep	 5	0:00	0	S
-
-# The dates for 1994-1995 were obtained from Office of the Spokeswoman for the
-# Ministry of Interior, Jerusalem, Israel.  The spokeswoman can be reached by
-# calling the office directly at 972-2-6701447 or 972-2-6701448.
-
-# Rule	NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
-Rule	Zion	1994	only	-	Apr	 1	0:00	1:00	D
-Rule	Zion	1994	only	-	Aug	28	0:00	0	S
-Rule	Zion	1995	only	-	Mar	31	0:00	1:00	D
-Rule	Zion	1995	only	-	Sep	 3	0:00	0	S
-
-# The dates for 1996 were determined by the Minister of Interior of the
-# time, Haim Ramon.  The official announcement regarding 1996-1998
-# (with the dates for 1997-1998 no longer being relevant) can be viewed at:
-#
-#   ftp://ftp.cs.huji.ac.il/pub/tz/announcements/1996-1998.ramon.ps.gz
-#
-# The dates for 1997-1998 were altered by his successor, Rabbi Eli Suissa.
-#
-# The official announcements for the years 1997-1999 can be viewed at:
-#
-#   ftp://ftp.cs.huji.ac.il/pub/tz/announcements/YYYY.ps.gz
-#
-#       where YYYY is the relevant year.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Zion	1996	only	-	Mar	15	0:00	1:00	D
-Rule	Zion	1996	only	-	Sep	16	0:00	0	S
-Rule	Zion	1997	only	-	Mar	21	0:00	1:00	D
-Rule	Zion	1997	only	-	Sep	14	0:00	0	S
-Rule	Zion	1998	only	-	Mar	20	0:00	1:00	D
-Rule	Zion	1998	only	-	Sep	 6	0:00	0	S
-Rule	Zion	1999	only	-	Apr	 2	2:00	1:00	D
-Rule	Zion	1999	only	-	Sep	 3	2:00	0	S
-
-# The Knesset Interior Committee has changed the dates for 2000 for
-# the third time in just over a year and have set new dates for the
-# years 2001-2004 as well.
-#
-# The official announcement for the start date of 2000 can be viewed at:
-#
-#	ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2000-start.ps.gz
-#
-# The official announcement for the end date of 2000 and the dates
-# for the years 2001-2004 can be viewed at:
-#
-#	ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2000-2004.ps.gz
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Zion	2000	only	-	Apr	14	2:00	1:00	D
-Rule	Zion	2000	only	-	Oct	 6	1:00	0	S
-Rule	Zion	2001	only	-	Apr	 9	1:00	1:00	D
-Rule	Zion	2001	only	-	Sep	24	1:00	0	S
-Rule	Zion	2002	only	-	Mar	29	1:00	1:00	D
-Rule	Zion	2002	only	-	Oct	 7	1:00	0	S
-Rule	Zion	2003	only	-	Mar	28	1:00	1:00	D
-Rule	Zion	2003	only	-	Oct	 3	1:00	0	S
-Rule	Zion	2004	only	-	Apr	 7	1:00	1:00	D
-Rule	Zion	2004	only	-	Sep	22	1:00	0	S
-
-# The proposed law agreed upon by the Knesset Interior Committee on
-# 2005-02-14 is that, for 2005 and beyond, DST starts at 02:00 the
-# last Friday before April 2nd (i.e. the last Friday in March or April
-# 1st itself if it falls on a Friday) and ends at 02:00 on the Saturday
-# night _before_ the fast of Yom Kippur.
-#
-# Those who can read Hebrew can view the announcement at:
-#
-#	ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2005+beyond.ps
-
-# From Paul Eggert (2012-10-26):
-# I used Ephraim Silverberg's dst-israel.el program
-# <ftp://ftp.cs.huji.ac.il/pub/tz/software/dst-israel.el> (2005-02-20)
-# along with Ed Reingold's cal-hebrew in GNU Emacs 21.4,
-# to generate the transitions from 2005 through 2012.
-# (I replaced "lastFri" with "Fri>=26" by hand.)
-# The spring transitions all correspond to the following Rule:
-#
-# Rule	Zion	2005	2012	-	Mar	Fri>=26	2:00	1:00	D
-#
-# but older zic implementations (e.g., Solaris 8) do not support
-# "Fri>=26" to mean April 1 in years like 2005, so for now we list the
-# springtime transitions explicitly.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Zion	2005	only	-	Apr	 1	2:00	1:00	D
-Rule	Zion	2005	only	-	Oct	 9	2:00	0	S
-Rule	Zion	2006	2010	-	Mar	Fri>=26	2:00	1:00	D
-Rule	Zion	2006	only	-	Oct	 1	2:00	0	S
-Rule	Zion	2007	only	-	Sep	16	2:00	0	S
-Rule	Zion	2008	only	-	Oct	 5	2:00	0	S
-Rule	Zion	2009	only	-	Sep	27	2:00	0	S
-Rule	Zion	2010	only	-	Sep	12	2:00	0	S
-Rule	Zion	2011	only	-	Apr	 1	2:00	1:00	D
-Rule	Zion	2011	only	-	Oct	 2	2:00	0	S
-Rule	Zion	2012	only	-	Mar	Fri>=26	2:00	1:00	D
-Rule	Zion	2012	only	-	Sep	23	2:00	0	S
-
-# From Ephraim Silverberg (2013-06-27):
-# On June 23, 2013, the Israeli government approved changes to the
-# Time Decree Law.  The next day, the changes passed the First Reading
-# in the Knesset.  The law is expected to pass the Second and Third
-# (final) Readings by the beginning of September 2013.
-#
-# As of 2013, DST starts at 02:00 on the Friday before the last Sunday
-# in March.  DST ends at 02:00 on the last Sunday of October.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Zion	2013	max	-	Mar	Fri>=23	2:00	1:00	D
-Rule	Zion	2013	max	-	Oct	lastSun	2:00	0	S
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Jerusalem	2:20:54 -	LMT	1880
-			2:20:40	-	JMT	1918 # Jerusalem Mean Time?
-			2:00	Zion	I%sT
-
-
-
-###############################################################################
-
-# Japan
-
-# '9:00' and 'JST' is from Guy Harris.
-
-# From Paul Eggert (1995-03-06):
-# Today's _Asahi Evening News_ (page 4) reports that Japan had
-# daylight saving between 1948 and 1951, but "the system was discontinued
-# because the public believed it would lead to longer working hours."
-
-# From Mayumi Negishi in the 2005-08-10 Japan Times:
-# http://www.japantimes.co.jp/cgi-bin/getarticle.pl5?nn20050810f2.htm
-# Occupation authorities imposed daylight-saving time on Japan on
-# [1948-05-01]....  But lack of prior debate and the execution of
-# daylight-saving time just three days after the bill was passed generated
-# deep hatred of the concept....  The Diet unceremoniously passed a bill to
-# dump the unpopular system in October 1951, less than a month after the San
-# Francisco Peace Treaty was signed.  (A government poll in 1951 showed 53%
-# of the Japanese wanted to scrap daylight-saving time, as opposed to 30% who
-# wanted to keep it.)
-
-# From Takayuki Nikai (2018-01-19):
-# The source of information is Japanese law.
-# http://www.shugiin.go.jp/internet/itdb_housei.nsf/html/houritsu/00219480428029.htm
-# http://www.shugiin.go.jp/internet/itdb_housei.nsf/html/houritsu/00719500331039.htm
-# ... In summary, it is written as follows.  From 24:00 on the first Saturday
-# in May, until 0:00 on the day after the second Saturday in September.
-
-# From Phake Nick (2018-09-27):
-# [T]he webpage authored by National Astronomical Observatory of Japan
-# https://eco.mtk.nao.ac.jp/koyomi/wiki/BBFEB9EF2FB2C6BBFEB9EF.html
-# ... mentioned that using Showa 23 (year 1948) as example, 13pm of September
-# 11 in summer time will equal to 0am of September 12 in standard time.
-# It cited a document issued by the Liaison Office which briefly existed
-# during the postwar period of Japan, where the detail on implementation
-# of the summer time is described in the document.
-# https://eco.mtk.nao.ac.jp/koyomi/wiki/BBFEB9EF2FB2C6BBFEB9EFB2C6BBFEB9EFA4CEBCC2BBDCA4CBA4C4A4A4A4C6.pdf
-# The text in the document do instruct a fall back to occur at
-# September 11, 13pm in summer time, while ordinary citizens can
-# change the clock before they sleep.
-#
-# From Paul Eggert (2018-09-27):
-# This instruction is equivalent to "Sat>=8 25:00", so use that.  zic treats
-# it like "Sun>=9 01:00", which is not quite the same but is the best we can
-# do in any POSIX or C platform.  The "25:00" assumes zic from 2007 or later,
-# which should be safe now.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Japan	1948	only	-	May	Sat>=1	24:00	1:00	D
-Rule	Japan	1948	1951	-	Sep	Sun>=9	 1:00	0	S
-Rule	Japan	1949	only	-	Apr	Sat>=1	24:00	1:00	D
-Rule	Japan	1950	1951	-	May	Sat>=1	24:00	1:00	D
-
-# From Hideyuki Suzuki (1998-11-09):
-# 'Tokyo' usually stands for the former location of Tokyo Astronomical
-# Observatory: 139° 44' 40.90" E (9h 18m 58.727s), 35° 39' 16.0" N.
-# This data is from 'Rika Nenpyou (Chronological Scientific Tables) 1996'
-# edited by National Astronomical Observatory of Japan....
-# JST (Japan Standard Time) has been used since 1888-01-01 00:00 (JST).
-# The law is enacted on 1886-07-07.
-
-# From Hideyuki Suzuki (1998-11-16):
-# The ordinance No. 51 (1886) established "standard time" in Japan,
-# which stands for the time on 135° E.
-# In the ordinance No. 167 (1895), "standard time" was renamed to "central
-# standard time".  And the same ordinance also established "western standard
-# time", which stands for the time on 120° E....  But "western standard
-# time" was abolished in the ordinance No. 529 (1937).  In the ordinance No.
-# 167, there is no mention regarding for what place western standard time is
-# standard....
-#
-# I wrote "ordinance" above, but I don't know how to translate.
-# In Japanese it's "chokurei", which means ordinance from emperor.
-
-# From Yu-Cheng Chuang (2013-07-12):
-# ...the Meiji Emperor announced Ordinance No. 167 of Meiji Year 28 "The clause
-# about standard time" ... The adoption began from Jan 1, 1896.
-# https://ja.wikisource.org/wiki/æš™æș–æ™‚ăƒ‹é—œă‚čル件_(ć…Źćžƒæ™‚)
-#
-# ...the Showa Emperor announced Ordinance No. 529 of Showa Year 12 ... which
-# means the whole Japan territory, including later occupations, adopt Japan
-# Central Time (UT+9). The adoption began on Oct 1, 1937.
-# https://ja.wikisource.org/wiki/明æČ»äșŒćć…«ćčŽć‹…ä»€çŹŹç™Ÿć…­ćäžƒè™Ÿæš™æș–æ™‚ăƒ‹é—œă‚čル件䞭æ”čæ­ŁăƒŽä»¶
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Tokyo	9:18:59	-	LMT	1887 Dec 31 15:00u
-			9:00	Japan	J%sT
-# Since 1938, all Japanese possessions have been like Asia/Tokyo,
-# except that Truk (Chuuk), Ponape (Pohnpei), and Jaluit (Kosrae) did not
-# switch from +10 to +09 until 1941-04-01; see the 'australasia' file.
-
-# Jordan
-#
-# From <http://star.arabia.com/990701/JO9.html>
-# Jordan Week (1999-07-01) via Steffen Thorsen (1999-09-09):
-# Clocks in Jordan were forwarded one hour on Wednesday at midnight,
-# in accordance with the government's decision to implement summer time
-# all year round.
-#
-# From <http://star.arabia.com/990930/JO9.html>
-# Jordan Week (1999-09-30) via Steffen Thorsen (1999-11-09):
-# Winter time starts today Thursday, 30 September. Clocks will be turned back
-# by one hour.  This is the latest government decision and it's final!
-# The decision was taken because of the increase in working hours in
-# government's departments from six to seven hours.
-#
-# From Paul Eggert (2005-11-22):
-# Starting 2003 transitions are from Steffen Thorsen's web site timeanddate.com.
-#
-# From Steffen Thorsen (2005-11-23):
-# For Jordan I have received multiple independent user reports every year
-# about DST end dates, as the end-rule is different every year.
-#
-# From Steffen Thorsen (2006-10-01), after a heads-up from Hilal Malawi:
-# http://www.petranews.gov.jo/nepras/2006/Sep/05/4000.htm
-# "Jordan will switch to winter time on Friday, October 27".
-#
-
-# From Steffen Thorsen (2009-04-02):
-# This single one might be good enough, (2009-03-24, Arabic):
-# http://petra.gov.jo/Artical.aspx?Lng=2&Section=8&Artical=95279
-#
-# Google's translation:
-#
-# > The Council of Ministers decided in 2002 to adopt the principle of timely
-# > submission of the summer at 60 minutes as of midnight on the last Thursday
-# > of the month of March of each year.
-#
-# So - this means the midnight between Thursday and Friday since 2002.
-
-# From Arthur David Olson (2009-04-06):
-# We still have Jordan switching to DST on Thursdays in 2000 and 2001.
-
-# From Steffen Thorsen (2012-10-25):
-# Yesterday the government in Jordan announced that they will not
-# switch back to standard time this winter, so the will stay on DST
-# until about the same time next year (at least).
-# http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?NewsID=88950
-
-# From Steffen Thorsen (2013-12-11):
-# Jordan Times and other sources say that Jordan is going back to
-# UTC+2 on 2013-12-19 at midnight:
-# http://jordantimes.com/govt-decides-to-switch-back-to-wintertime
-# Official, in Arabic:
-# http://www.petra.gov.jo/public_news/Nws_NewsDetails.aspx?Menu_ID=&Site_Id=2&lang=1&NewsID=133230&CatID=14
-# ... Our background/permalink about it
-# https://www.timeanddate.com/news/time/jordan-reverses-dst-decision.html
-# ...
-# http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?lang=2&site_id=1&NewsID=133313&Type=P
-# ... says midnight for the coming one and 1:00 for the ones in the future
-# (and they will use DST again next year, using the normal schedule).
-
-# From Paul Eggert (2013-12-11):
-# As Steffen suggested, consider the past 21-month experiment to be DST.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Jordan	1973	only	-	Jun	6	0:00	1:00	S
-Rule	Jordan	1973	1975	-	Oct	1	0:00	0	-
-Rule	Jordan	1974	1977	-	May	1	0:00	1:00	S
-Rule	Jordan	1976	only	-	Nov	1	0:00	0	-
-Rule	Jordan	1977	only	-	Oct	1	0:00	0	-
-Rule	Jordan	1978	only	-	Apr	30	0:00	1:00	S
-Rule	Jordan	1978	only	-	Sep	30	0:00	0	-
-Rule	Jordan	1985	only	-	Apr	1	0:00	1:00	S
-Rule	Jordan	1985	only	-	Oct	1	0:00	0	-
-Rule	Jordan	1986	1988	-	Apr	Fri>=1	0:00	1:00	S
-Rule	Jordan	1986	1990	-	Oct	Fri>=1	0:00	0	-
-Rule	Jordan	1989	only	-	May	8	0:00	1:00	S
-Rule	Jordan	1990	only	-	Apr	27	0:00	1:00	S
-Rule	Jordan	1991	only	-	Apr	17	0:00	1:00	S
-Rule	Jordan	1991	only	-	Sep	27	0:00	0	-
-Rule	Jordan	1992	only	-	Apr	10	0:00	1:00	S
-Rule	Jordan	1992	1993	-	Oct	Fri>=1	0:00	0	-
-Rule	Jordan	1993	1998	-	Apr	Fri>=1	0:00	1:00	S
-Rule	Jordan	1994	only	-	Sep	Fri>=15	0:00	0	-
-Rule	Jordan	1995	1998	-	Sep	Fri>=15	0:00s	0	-
-Rule	Jordan	1999	only	-	Jul	 1	0:00s	1:00	S
-Rule	Jordan	1999	2002	-	Sep	lastFri	0:00s	0	-
-Rule	Jordan	2000	2001	-	Mar	lastThu	0:00s	1:00	S
-Rule	Jordan	2002	2012	-	Mar	lastThu	24:00	1:00	S
-Rule	Jordan	2003	only	-	Oct	24	0:00s	0	-
-Rule	Jordan	2004	only	-	Oct	15	0:00s	0	-
-Rule	Jordan	2005	only	-	Sep	lastFri	0:00s	0	-
-Rule	Jordan	2006	2011	-	Oct	lastFri	0:00s	0	-
-Rule	Jordan	2013	only	-	Dec	20	0:00	0	-
-Rule	Jordan	2014	max	-	Mar	lastThu	24:00	1:00	S
-Rule	Jordan	2014	max	-	Oct	lastFri	0:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Amman	2:23:44 -	LMT	1931
-			2:00	Jordan	EE%sT
-
-
-# Kazakhstan
-
-# From Kazakhstan Embassy's News Bulletin No. 11
-# <http://www.kazsociety.org.uk/news/2005/03/30.htm> (2005-03-21):
-# The Government of Kazakhstan passed a resolution March 15 abolishing
-# daylight saving time citing lack of economic benefits and health
-# complications coupled with a decrease in productivity.
-#
-# From Branislav Kojic (in Astana) via Gwillim Law (2005-06-28):
-# ... what happened was that the former Kazakhstan Eastern time zone
-# was "blended" with the Central zone.  Therefore, Kazakhstan now has
-# two time zones, and difference between them is one hour.  The zone
-# closer to UTC is the former Western zone (probably still called the
-# same), encompassing four provinces in the west: Aqtöbe, Atyraƫ,
-# Mangghystaƫ, and West Kazakhstan.  The other zone encompasses
-# everything else....  I guess that would make Kazakhstan time zones
-# de jure UTC+5 and UTC+6 respectively.
-
-# From Stepan Golosunov (2016-03-27):
-# Review of the linked documents from http://adilet.zan.kz/
-# produced the following data for post-1991 Kazakhstan:
-#
-# 0. Act of the Cabinet of Ministers of the USSR
-# from 1991-02-04 No. 20
-# http://pravo.gov.ru/proxy/ips/?docbody=&nd=102010545
-# removed the extra hour ("decree time") on the territory of the USSR
-# starting with the last Sunday of March 1991.
-# It also allowed (but not mandated) Kazakh SSR, Kirghiz SSR, Tajik SSR,
-# Turkmen SSR and Uzbek SSR to not have "summer" time.
-#
-# The 1992-01-13 act also refers to the act of the Cabinet of Ministers
-# of the Kazakh SSR from 1991-03-20 No. 170 "About the act of the Cabinet
-# of Ministers of the USSR from 1991-02-04 No. 20" but I didn't found its
-# text.
-#
-# According to Izvestia newspaper No. 68 (23334) from 1991-03-20
-# (page 6; available at http://libinfo.org/newsr/newsr2574.djvu via
-# http://libinfo.org/index.php?id=58564) on 1991-03-31 at 2:00 during
-# transition to "summer" time:
-# Republic of Georgia, Latvian SSR, Lithuanian SSR, SSR Moldova,
-# Estonian SSR; Komi ASSR; Kaliningrad oblast; Nenets autonomous okrug
-# were to move clocks 1 hour forward.
-# Kazakh SSR (excluding Uralsk oblast); Republic of Kyrgyzstan, Tajik
-# SSR; Andijan, Jizzakh, Namangan, Sirdarya, Tashkent, Fergana oblasts
-# of the Uzbek SSR were to move clocks 1 hour backwards.
-# Other territories were to not move clocks.
-# When the "summer" time would end on 1991-09-29, clocks were to be
-# moved 1 hour backwards on the territory of the USSR excluding
-# Kazakhstan, Kirghizia, Uzbekistan, Turkmenia, Tajikistan.
-#
-# Apparently there were last minute changes. Apparently Kazakh act No. 170
-# was one of such changes.
-#
-# https://ru.wikipedia.org/wiki/ДДĐșŃ€Đ”Ń‚ĐœĐŸĐ” ĐČŃ€Đ”ĐŒŃ
-# claims that Sovetskaya Rossiya newspaper on 1991-03-29 published that
-# Nenets autonomous okrug, Komi and Kazakhstan (excluding Uralsk oblast)
-# were to not move clocks and Uralsk oblast was to move clocks
-# forward; on 1991-09-29 Kazakhstan was to move clocks backwards.
-# (Probably there were changes even after that publication. There is an
-# article claiming that Kaliningrad oblast decided on 1991-03-29 to not
-# move clocks.)
-#
-# This implies that on 1991-03-31 Asia/Oral remained on +04/+05 while
-# the rest of Kazakhstan switched from +06/+07 to +05/06 or from +05/06
-# to +04/+05. It's unclear how Qyzylorda oblast moved into the fifth
-# time belt. (By switching from +04/+05 to +05/+06 on 1991-09-29?) ...
-#
-# 1. Act of the Cabinet of Ministers of the Republic of Kazakhstan
-# from 1992-01-13 No. 28
-# http://adilet.zan.kz/rus/docs/P920000028_
-# (text includes modification from the 1996 act)
-# introduced new rules for calculation of time, mirroring Russian
-# 1992-01-08 act.  It specified that time would be calculated
-# according to time belts plus extra hour ("decree time"), moved clocks
-# on the whole territory of Kazakhstan 1 hour forward on 1992-01-19 at
-# 2:00, specified DST rules.  It acknowledged that Kazakhstan was
-# located in the fourth and the fifth time belts and specified the
-# border between them to be located east of Qostanay and Aktyubinsk
-# oblasts (notably including Turgai and Qyzylorda oblasts into the fifth
-# time belt).
-#
-# This means switch on 1992-01-19 at 2:00 from +04/+05 to +05/+06 for
-# Asia/Aqtau, Asia/Aqtobe, Asia/Oral, Atyraƫ and Qostanay oblasts; from
-# +05/+06 to +06/+07 for Asia/Almaty and Asia/Qyzylorda (and Arkalyk)....
-#
-# 2. Act of the Cabinet of Ministers of the Republic of Kazakhstan
-# from 1992-03-27 No. 284
-# http://adilet.zan.kz/rus/docs/P920000284_
-# cancels extra hour ("decree time") for Uralsk and Qyzylorda oblasts
-# since the last Sunday of March 1992, while keeping them in the fourth
-# and the fifth time belts respectively.
-#
-# 3. Order of the Prime Minister of the Republic of Kazakhstan
-# from 1994-09-23 No. 384
-# http://adilet.zan.kz/rus/docs/R940000384_
-# cancels the extra hour ("decree time") on the territory of Mangghystaƫ
-# oblast since the last Sunday of September 1994 (saying that time on
-# the territory would correspond to the third time belt as a
-# result)....
-#
-# 4. Act of the Government of the Republic of Kazakhstan
-# from 1996-05-08 No. 575
-# http://adilet.zan.kz/rus/docs/P960000575_
-# amends the 1992-01-13 act to end summer time in October instead
-# of September, mirroring identical Russian change from 1996-04-23 act.
-#
-# 5. Act of the Government of the Republic of Kazakhstan
-# from 1999-03-26 No. 305
-# http://adilet.zan.kz/rus/docs/P990000305_
-# cancels the extra hour ("decree time") for Atyraƫ oblast since the
-# last Sunday of March 1999 while retaining the oblast in the fourth
-# time belt.
-#
-# This means change from +05/+06 to +04/+05....
-#
-# 6. Act of the Government of the Republic of Kazakhstan
-# from 2000-11-23 No. 1749
-# http://adilet.zan.kz/rus/archive/docs/P000001749_/23.11.2000
-# replaces the previous five documents.
-#
-# The only changes I noticed are in definition of the border between the
-# fourth and the fifth time belts.  They account for changes in spelling
-# and administrative division (splitting of Turgai oblast in 1997
-# probably changed time in territories incorporated into Qostanay oblast
-# (including Arkalyk) from +06/+07 to +05/+06) and move Qyzylorda oblast
-# from being in the fifth time belt and not using decree time into the
-# fourth time belt (no change in practice).
-#
-# 7. Act of the Government of the Republic of Kazakhstan
-# from 2003-12-29 No. 1342
-# http://adilet.zan.kz/rus/docs/P030001342_
-# modified the 2000-11-23 act.  No relevant changes, apparently.
-#
-# 8. Act of the Government of the Republic of Kazakhstan
-# from 2004-07-20 No. 775
-# http://adilet.zan.kz/rus/archive/docs/P040000775_/20.07.2004
-# modified the 2000-11-23 act to move Qostanay and Qyzylorda oblasts into
-# the fifth time belt and add Aktobe oblast to the list of regions not
-# using extra hour ("decree time"), leaving Kazakhstan with only 2 time
-# zones (+04/+05 and +06/+07).  The changes were to be implemented
-# during DST transitions in 2004 and 2005 but the acts got radically
-# amended before implementation happened.
-#
-# 9. Act of the Government of the Republic of Kazakhstan
-# from 2004-09-15 No. 1059
-# http://adilet.zan.kz/rus/docs/P040001059_
-# modified the 2000-11-23 act to remove exceptions from the "decree time"
-# (leaving Kazakhstan in +05/+06 and +06/+07 zones), amended the
-# 2004-07-20 act to implement changes for Atyraƫ, West Kazakhstan,
-# Qostanay, Qyzylorda and Mangghystaƫ oblasts by not moving clocks
-# during the 2004 transition to "winter" time.
-#
-# This means transition from +04/+05 to +05/+06 for Atyraƫ oblast (no
-# zone currently), Asia/Oral, Asia/Aqtau and transition from +05/+06 to
-# +06/+07 for Qostanay oblast (Qostanay and Arkalyk, no zones currently)
-# and Asia/Qyzylorda on 2004-10-31 at 3:00....
-#
-# 10. Act of the Government of the Republic of Kazakhstan
-# from 2005-03-15 No. 231
-# http://adilet.zan.kz/rus/docs/P050000231_
-# removes DST provisions from the 2000-11-23 act, removes most of the
-# (already implemented) provisions from the 2004-07-20 and 2004-09-15
-# acts, comes into effect 10 days after official publication.
-# The only practical effect seems to be the abolition of the summer
-# time.
-#
-# Unamended version of the act of the Government of the Russian Federation
-# No. 23 from 1992-01-08 [See 'europe' file for details].
-# Kazakh 1992-01-13 act appears to provide the same rules and 1992-03-27
-# act was to be enacted on the last Sunday of March 1992.
-
-# From Stepan Golosunov (2016-11-08):
-# Turgai reorganization should affect only southern part of Qostanay
-# oblast.  Which should probably be separated into Asia/Arkalyk zone.
-# (There were also 1970, 1988 and 1990 Turgai oblast reorganizations
-# according to wikipedia.)
-#
-# [For Qostanay] http://www.ng.kz/gazeta/195/hranit/
-# suggests that clocks were to be moved 40 minutes backwards on
-# 1920-01-01 to the fourth time belt.  But I do not understand
-# how that could happen....
-#
-# [For Atyrau and Oral] 1919 decree
-# (http://www.worldtimezone.com/dst_news/dst_news_russia-1919-02-08.html
-# and in Byalokoz) lists Ural river (plus 10 versts on its left bank) in
-# the third time belt (before 1930 this means +03).
-
-# From Alexander Konzurovski (2018-12-20):
-# Qyzyolrda Region (Asia/Qyzylorda) is changing its time zone from
-# UTC+6 to UTC+5 effective December 21st, 2018. The legal document is
-# located here: http://adilet.zan.kz/rus/docs/P1800000817 (russian language).
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-#
-# Almaty (formerly Alma-Ata), representing most locations in Kazakhstan
-# This includes KZ-AKM, KZ-ALA, KZ-ALM, KZ-AST, KZ-BAY, KZ-VOS, KZ-ZHA,
-# KZ-KAR, KZ-SEV, KZ-PAV, and KZ-YUZ.
-Zone	Asia/Almaty	5:07:48 -	LMT	1924 May  2 # or Alma-Ata
-			5:00	-	+05	1930 Jun 21
-			6:00 RussiaAsia +06/+07	1991 Mar 31  2:00s
-			5:00 RussiaAsia	+05/+06	1992 Jan 19  2:00s
-			6:00 RussiaAsia	+06/+07	2004 Oct 31  2:00s
-			6:00	-	+06
-# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) (KZ-KZY)
-Zone	Asia/Qyzylorda	4:21:52 -	LMT	1924 May  2
-			4:00	-	+04	1930 Jun 21
-			5:00	-	+05	1981 Apr  1
-			5:00	1:00	+06	1981 Oct  1
-			6:00	-	+06	1982 Apr  1
-			5:00 RussiaAsia	+05/+06	1991 Mar 31  2:00s
-			4:00 RussiaAsia	+04/+05	1991 Sep 29  2:00s
-			5:00 RussiaAsia	+05/+06	1992 Jan 19  2:00s
-			6:00 RussiaAsia	+06/+07	1992 Mar 29  2:00s
-			5:00 RussiaAsia	+05/+06	2004 Oct 31  2:00s
-			6:00	-	+06	2018 Dec 21  0:00
-			5:00	-	+05
-#
-# Qostanay (aka Kostanay, Kustanay) (KZ-KUS)
-# The 1991/2 rules are unclear partly because of the 1997 Turgai
-# reorganization.
-Zone	Asia/Qostanay	4:14:28 -	LMT	1924 May  2
-			4:00	-	+04	1930 Jun 21
-			5:00	-	+05	1981 Apr  1
-			5:00	1:00	+06	1981 Oct  1
-			6:00	-	+06	1982 Apr  1
-			5:00 RussiaAsia	+05/+06	1991 Mar 31  2:00s
-			4:00 RussiaAsia	+04/+05	1992 Jan 19  2:00s
-			5:00 RussiaAsia	+05/+06	2004 Oct 31  2:00s
-			6:00	-	+06
-
-# Aqtöbe (aka Aktobe, formerly Aktyubinsk) (KZ-AKT)
-Zone	Asia/Aqtobe	3:48:40	-	LMT	1924 May  2
-			4:00	-	+04	1930 Jun 21
-			5:00	-	+05	1981 Apr  1
-			5:00	1:00	+06	1981 Oct  1
-			6:00	-	+06	1982 Apr  1
-			5:00 RussiaAsia	+05/+06	1991 Mar 31  2:00s
-			4:00 RussiaAsia	+04/+05	1992 Jan 19  2:00s
-			5:00 RussiaAsia	+05/+06	2004 Oct 31  2:00s
-			5:00	-	+05
-# Mangghystaƫ (KZ-MAN)
-# Aqtau was not founded until 1963, but it represents an inhabited region,
-# so include timestamps before 1963.
-Zone	Asia/Aqtau	3:21:04	-	LMT	1924 May  2
-			4:00	-	+04	1930 Jun 21
-			5:00	-	+05	1981 Oct  1
-			6:00	-	+06	1982 Apr  1
-			5:00 RussiaAsia	+05/+06	1991 Mar 31  2:00s
-			4:00 RussiaAsia	+04/+05	1992 Jan 19  2:00s
-			5:00 RussiaAsia	+05/+06	1994 Sep 25  2:00s
-			4:00 RussiaAsia	+04/+05	2004 Oct 31  2:00s
-			5:00	-	+05
-# Atyraƫ (KZ-ATY) is like Mangghystaƫ except it switched from
-# +04/+05 to +05/+06 in spring 1999, not fall 1994.
-Zone	Asia/Atyrau	3:27:44	-	LMT	1924 May  2
-			3:00	-	+03	1930 Jun 21
-			5:00	-	+05	1981 Oct  1
-			6:00	-	+06	1982 Apr  1
-			5:00 RussiaAsia	+05/+06	1991 Mar 31  2:00s
-			4:00 RussiaAsia	+04/+05	1992 Jan 19  2:00s
-			5:00 RussiaAsia	+05/+06	1999 Mar 28  2:00s
-			4:00 RussiaAsia	+04/+05	2004 Oct 31  2:00s
-			5:00	-	+05
-# West Kazakhstan (KZ-ZAP)
-# From Paul Eggert (2016-03-18):
-# The 1989 transition is from USSR act No. 227 (1989-03-14).
-Zone	Asia/Oral	3:25:24	-	LMT	1924 May  2 # or Ural'sk
-			3:00	-	+03	1930 Jun 21
-			5:00	-	+05	1981 Apr  1
-			5:00	1:00	+06	1981 Oct  1
-			6:00	-	+06	1982 Apr  1
-			5:00 RussiaAsia	+05/+06	1989 Mar 26  2:00s
-			4:00 RussiaAsia	+04/+05	1992 Jan 19  2:00s
-			5:00 RussiaAsia	+05/+06	1992 Mar 29  2:00s
-			4:00 RussiaAsia	+04/+05	2004 Oct 31  2:00s
-			5:00	-	+05
-
-# Kyrgyzstan (Kirgizstan)
-# Transitions through 1991 are from Shanks & Pottenger.
-
-# From Paul Eggert (2005-08-15):
-# According to an article dated today in the Kyrgyzstan Development Gateway
-# http://eng.gateway.kg/cgi-bin/page.pl?id=1&story_name=doc9979.shtml
-# Kyrgyzstan is canceling the daylight saving time system.  I take the article
-# to mean that they will leave their clocks at 6 hours ahead of UTC.
-# From Malik Abdugaliev (2005-09-21):
-# Our government cancels daylight saving time 6th of August 2005.
-# From 2005-08-12 our GMT-offset is +6, w/o any daylight saving.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Kyrgyz	1992	1996	-	Apr	Sun>=7	0:00s	1:00	-
-Rule	Kyrgyz	1992	1996	-	Sep	lastSun	0:00	0	-
-Rule	Kyrgyz	1997	2005	-	Mar	lastSun	2:30	1:00	-
-Rule	Kyrgyz	1997	2004	-	Oct	lastSun	2:30	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Bishkek	4:58:24 -	LMT	1924 May  2
-			5:00	-	+05	1930 Jun 21
-			6:00 RussiaAsia +06/+07	1991 Mar 31  2:00s
-			5:00 RussiaAsia	+05/+06	1991 Aug 31  2:00
-			5:00	Kyrgyz	+05/+06	2005 Aug 12
-			6:00	-	+06
-
-###############################################################################
-
-# Korea (North and South)
-
-# From Annie I. Bang (2006-07-10):
-# http://www.koreaherald.com/view.php?ud=200607100012
-# Korea ran a daylight saving program from 1949-61 but stopped it
-# during the 1950-53 Korean War.  The system was temporarily enforced
-# between 1987 and 1988 ...
-
-# From Sanghyuk Jung (2014-10-29):
-# https://mm.icann.org/pipermail/tz/2014-October/021830.html
-# According to the Korean Wikipedia
-# https://ko.wikipedia.org/wiki/한ꔭ_표쀀시
-# [oldid=12896437 2014-09-04 08:03 UTC]
-# DST in Republic of Korea was as follows....  And I checked old
-# newspapers in Korean, all articles correspond with data in Wikipedia.
-# For example, the article in 1948 (Korean Language) proved that DST
-# started at June 1 in that year.  For another example, the article in
-# 1988 said that DST started at 2:00 AM in that year.
-
-# From Phake Nick (2018-10-27):
-# 1. According to official announcement from Korean government, the DST end
-# date in South Korea should be
-# 1955-09-08 without specifying time
-# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027977557
-# 1956-09-29 without specifying time
-# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027978341
-# 1957-09-21 24 o'clock
-# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027979690#3
-# 1958-09-20 24 o'clock
-# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027981189
-# 1959-09-19 24 o'clock
-# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027982974#2
-# 1960-09-17 24 o'clock
-# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0028044104
-# ...
-# 2.... https://namu.wiki/w/ëŒ€í•œëŻŒê”­%20표쀀시 ... [says]
-# when Korea was using GMT+8:30 as standard time, the international
-# aviation/marine/meteorological industry in the country refused to
-# follow and continued to use GMT+9:00 for interoperability.
-
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	ROK	1948	only	-	Jun	 1	 0:00	1:00	D
-Rule	ROK	1948	only	-	Sep	12	24:00	0	S
-Rule	ROK	1949	only	-	Apr	 3	 0:00	1:00	D
-Rule	ROK	1949	1951	-	Sep	Sat>=7	24:00	0	S
-Rule	ROK	1950	only	-	Apr	 1	 0:00	1:00	D
-Rule	ROK	1951	only	-	May	 6	 0:00	1:00	D
-Rule	ROK	1955	only	-	May	 5	 0:00	1:00	D
-Rule	ROK	1955	only	-	Sep	 8	24:00	0	S
-Rule	ROK	1956	only	-	May	20	 0:00	1:00	D
-Rule	ROK	1956	only	-	Sep	29	24:00	0	S
-Rule	ROK	1957	1960	-	May	Sun>=1	 0:00	1:00	D
-Rule	ROK	1957	1960	-	Sep	Sat>=17	24:00	0	S
-Rule	ROK	1987	1988	-	May	Sun>=8	 2:00	1:00	D
-Rule	ROK	1987	1988	-	Oct	Sun>=8	 3:00	0	S
-
-# From Paul Eggert (2016-08-23):
-# The Korean Wikipedia entry gives the following sources for UT offsets:
-#
-# 1908: Official Journal Article No. 3994 (decree No. 5)
-# 1912: Governor-General of Korea Official Gazette Issue No. 367
-#       (Announcement No. 338)
-# 1954: Presidential Decree No. 876 (1954-03-17)
-# 1961: Law No. 676 (1961-08-07)
-#
-# (Another source "1987: Law No. 3919 (1986-12-31)" was in the 2014-10-30
-# edition of the Korean Wikipedia entry.)
-#
-# I guessed that time zone abbreviations through 1945 followed the same
-# rules as discussed under Taiwan, with nominal switches from JST to KST
-# when the respective cities were taken over by the Allies after WWII.
-#
-# For Pyongyang, guess no changes from World War II until 2015, as we
-# have no information otherwise.
-
-# From Steffen Thorsen (2015-08-07):
-# According to many news sources, North Korea is going to change to
-# the 8:30 time zone on August 15, one example:
-# http://www.bbc.com/news/world-asia-33815049
-#
-# From Paul Eggert (2015-08-15):
-# Bells rang out midnight (00:00) Friday as part of the celebrations.  See:
-# Talmadge E. North Korea celebrates new time zone, 'Pyongyang Time'
-# http://news.yahoo.com/north-korea-celebrates-time-zone-pyongyang-time-164038128.html
-# There is no common English-language abbreviation for this time zone.
-# Use KST, as that's what we already use for 1954-1961 in ROK.
-
-# From Kang Seonghoon (2018-04-29):
-# North Korea will revert its time zone from UTC+8:30 (PYT; Pyongyang
-# Time) back to UTC+9 (KST; Korea Standard Time).
-#
-# From Seo Sanghyeon (2018-04-30):
-# Rodong Sinmun 2018-04-30 announced Pyongyang Time transition plan.
-# https://www.nknews.org/kcna/wp-content/uploads/sites/5/2018/04/rodong-2018-04-30.pdf
-# ... the transition date is 2018-05-05 ...  Citation should be Decree
-# No. 2232 of April 30, 2018, of the Presidium of the Supreme People's
-# Assembly, as published in Rodong Sinmun.
-# From Tim Parenti (2018-04-29):
-# It appears to be the front page story at the top in the right-most column.
-#
-# From Paul Eggert (2018-05-04):
-# The BBC reported that the transition was from 23:30 to 24:00 today.
-# https://www.bbc.com/news/world-asia-44010705
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Seoul	8:27:52	-	LMT	1908 Apr  1
-			8:30	-	KST	1912 Jan  1
-			9:00	-	JST	1945 Sep  8
-			9:00	-	KST	1954 Mar 21
-			8:30	ROK	K%sT	1961 Aug 10
-			9:00	ROK	K%sT
-Zone	Asia/Pyongyang	8:23:00 -	LMT	1908 Apr  1
-			8:30	-	KST	1912 Jan  1
-			9:00	-	JST	1945 Aug 24
-			9:00	-	KST	2015 Aug 15 00:00
-			8:30	-	KST	2018 May  4 23:30
-			9:00	-	KST
-
-###############################################################################
-
-# Kuwait
-# See Asia/Riyadh.
-
-# Laos
-# See Asia/Bangkok.
-
-
-# Lebanon
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Lebanon	1920	only	-	Mar	28	0:00	1:00	S
-Rule	Lebanon	1920	only	-	Oct	25	0:00	0	-
-Rule	Lebanon	1921	only	-	Apr	3	0:00	1:00	S
-Rule	Lebanon	1921	only	-	Oct	3	0:00	0	-
-Rule	Lebanon	1922	only	-	Mar	26	0:00	1:00	S
-Rule	Lebanon	1922	only	-	Oct	8	0:00	0	-
-Rule	Lebanon	1923	only	-	Apr	22	0:00	1:00	S
-Rule	Lebanon	1923	only	-	Sep	16	0:00	0	-
-Rule	Lebanon	1957	1961	-	May	1	0:00	1:00	S
-Rule	Lebanon	1957	1961	-	Oct	1	0:00	0	-
-Rule	Lebanon	1972	only	-	Jun	22	0:00	1:00	S
-Rule	Lebanon	1972	1977	-	Oct	1	0:00	0	-
-Rule	Lebanon	1973	1977	-	May	1	0:00	1:00	S
-Rule	Lebanon	1978	only	-	Apr	30	0:00	1:00	S
-Rule	Lebanon	1978	only	-	Sep	30	0:00	0	-
-Rule	Lebanon	1984	1987	-	May	1	0:00	1:00	S
-Rule	Lebanon	1984	1991	-	Oct	16	0:00	0	-
-Rule	Lebanon	1988	only	-	Jun	1	0:00	1:00	S
-Rule	Lebanon	1989	only	-	May	10	0:00	1:00	S
-Rule	Lebanon	1990	1992	-	May	1	0:00	1:00	S
-Rule	Lebanon	1992	only	-	Oct	4	0:00	0	-
-Rule	Lebanon	1993	max	-	Mar	lastSun	0:00	1:00	S
-Rule	Lebanon	1993	1998	-	Sep	lastSun	0:00	0	-
-Rule	Lebanon	1999	max	-	Oct	lastSun	0:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Beirut	2:22:00 -	LMT	1880
-			2:00	Lebanon	EE%sT
-
-# Malaysia
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	NBorneo	1935	1941	-	Sep	14	0:00	0:20	-
-Rule	NBorneo	1935	1941	-	Dec	14	0:00	0	-
-#
-# peninsular Malaysia
-# taken from Mok Ly Yng (2003-10-30)
-# http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Asia/Kuala_Lumpur	6:46:46 -	LMT	1901 Jan  1
-			6:55:25	-	SMT	1905 Jun  1 # Singapore M.T.
-			7:00	-	+07	1933 Jan  1
-			7:00	0:20	+0720	1936 Jan  1
-			7:20	-	+0720	1941 Sep  1
-			7:30	-	+0730	1942 Feb 16
-			9:00	-	+09	1945 Sep 12
-			7:30	-	+0730	1982 Jan  1
-			8:00	-	+08
-# Sabah & Sarawak
-# From Paul Eggert (2014-08-12):
-# The data entries here are mostly from Shanks & Pottenger, but the 1942, 1945
-# and 1982 transition dates are from Mok Ly Yng.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Asia/Kuching	7:21:20	-	LMT	1926 Mar
-			7:30	-	+0730	1933
-			8:00 NBorneo  +08/+0820	1942 Feb 16
-			9:00	-	+09	1945 Sep 12
-			8:00	-	+08
-
-# Maldives
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Maldives	4:54:00 -	LMT	1880 # Malé
-			4:54:00	-	MMT	1960 # Malé Mean Time
-			5:00	-	+05
-
-# Mongolia
-
-# Shanks & Pottenger say that Mongolia has three time zones, but
-# The USNO (1995-12-21) and the CIA map Standard Time Zones of the World
-# (2005-03) both say that it has just one.
-
-# From Oscar van Vlijmen (1999-12-11):
-# General Information Mongolia
-# <http://www.mongoliatourism.gov.mn/general.htm> (1999-09)
-# "Time: Mongolia has two time zones. Three westernmost provinces of
-# Bayan-Ölgii, Uvs, and Hovd are one hour earlier than the capital city, and
-# the rest of the country follows the Ulaanbaatar time, which is UTC/GMT plus
-# eight hours."
-
-# From Rives McDow (1999-12-13):
-# Mongolia discontinued the use of daylight savings time in 1999; 1998
-# being the last year it was implemented.  The dates of implementation I am
-# unsure of, but most probably it was similar to Russia, except for the time
-# of implementation may have been different....
-# Some maps in the past have indicated that there was an additional time
-# zone in the eastern part of Mongolia, including the provinces of Dornod,
-# SĂŒkhbaatar, and possibly Khentii.
-
-# From Paul Eggert (1999-12-15):
-# Naming and spelling is tricky in Mongolia.
-# We'll use Hovd (also spelled Chovd and Khovd) to represent the west zone;
-# the capital of the Hovd province is sometimes called Hovd, sometimes Dund-Us,
-# and sometimes Jirgalanta (with variant spellings), but the name Hovd
-# is good enough for our purposes.
-
-# From Rives McDow (2001-05-13):
-# In addition to Mongolia starting daylight savings as reported earlier
-# (adopted DST on 2001-04-27 02:00 local time, ending 2001-09-28),
-# there are three time zones.
-#
-# Provinces [at 7:00]: Bayan-Ölgii, Uvs, Khovd, Zavkhan, Govi-Altai
-# Provinces [at 8:00]: Khövsgöl, Bulgan, Arkhangai, Khentii, Töv,
-#	Bayankhongor, Övörkhangai, Dundgovi, Dornogovi, Ömnögovi
-# Provinces [at 9:00]: Dornod, SĂŒkhbaatar
-#
-# [The province of Selenge is omitted from the above lists.]
-
-# From Ganbold Ts., Ulaanbaatar (2004-04-17):
-# Daylight saving occurs at 02:00 local time last Saturday of March.
-# It will change back to normal at 02:00 local time last Saturday of
-# September.... As I remember this rule was changed in 2001.
-#
-# From Paul Eggert (2004-04-17):
-# For now, assume Rives McDow's informant got confused about Friday vs
-# Saturday, and that his 2001 dates should have 1 added to them.
-
-# From Paul Eggert (2005-07-26):
-# We have wildly conflicting information about Mongolia's time zones.
-# Bill Bonnet (2005-05-19) reports that the US Embassy in Ulaanbaatar says
-# there is only one time zone and that DST is observed, citing Microsoft
-# Windows XP as the source.  Risto NykÀnen (2005-05-16) reports that
-# travelmongolia.org says there are two time zones (UT +07, +08) with no DST.
-# Oscar van Vlijmen (2005-05-20) reports that the Mongolian Embassy in
-# Washington, DC says there are two time zones, with DST observed.
-# He also found
-# http://ubpost.mongolnews.mn/index.php?subaction=showcomments&id=1111634894&archive=&start_from=&ucat=1&
-# which also says that there is DST, and which has a comment by "Toddius"
-# (2005-03-31 06:05 +0700) saying "Mongolia actually has 3.5 time zones.
-# The West (OLGII) is +7 GMT, most of the country is ULAT is +8 GMT
-# and some Eastern provinces are +9 GMT but SĂŒkhbaatar Aimag is SUHK +8.5 GMT.
-# The SUKH timezone is new this year, it is one of the few things the
-# parliament passed during the tumultuous winter session."
-# For now, let's ignore this information, until we have more confirmation.
-
-# From Ganbold Ts. (2007-02-26):
-# Parliament of Mongolia has just changed the daylight-saving rule in February.
-# They decided not to adopt daylight-saving time....
-# http://www.mongolnews.mn/index.php?module=unuudur&sec=view&id=15742
-
-# From Deborah Goldsmith (2008-03-30):
-# We received a bug report claiming that the tz database UTC offset for
-# Asia/Choibalsan (GMT+09:00) is incorrect, and that it should be GMT
-# +08:00 instead. Different sources appear to disagree with the tz
-# database on this, e.g.:
-#
-# https://www.timeanddate.com/worldclock/city.html?n=1026
-# http://www.worldtimeserver.com/current_time_in_MN.aspx
-#
-# both say GMT+08:00.
-
-# From Steffen Thorsen (2008-03-31):
-# eznis airways, which operates several domestic flights, has a flight
-# schedule here:
-# http://www.eznis.com/Container.jsp?id=112
-# (click the English flag for English)
-#
-# There it appears that flights between Choibalsan and Ulaanbaatar arrive
-# about 1:35 - 1:50 hours later in local clock time, no matter the
-# direction, while Ulaanbaatar-Khovd takes 2 hours in the Eastern
-# direction and 3:35 back, which indicates that Ulaanbaatar and Khovd are
-# in different time zones (like we know about), while Choibalsan and
-# Ulaanbaatar are in the same time zone (correction needed).
-
-# From Arthur David Olson (2008-05-19):
-# Assume that Choibalsan is indeed offset by 8:00.
-# XXX--in the absence of better information, assume that transition
-# was at the start of 2008-03-31 (the day of Steffen Thorsen's report);
-# this is almost surely wrong.
-
-# From Ganbold Tsagaankhuu (2015-03-10):
-# It seems like yesterday Mongolian Government meeting has concluded to use
-# daylight saving time in Mongolia....  Starting at 2:00AM of last Saturday of
-# March 2015, daylight saving time starts.  And 00:00AM of last Saturday of
-# September daylight saving time ends.  Source:
-# http://zasag.mn/news/view/8969
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Mongol	1983	1984	-	Apr	1	0:00	1:00	-
-Rule	Mongol	1983	only	-	Oct	1	0:00	0	-
-# Shanks & Pottenger and IATA SSIM say 1990s switches occurred at 00:00,
-# but McDow says the 2001 switches occurred at 02:00.  Also, IATA SSIM
-# (1996-09) says 1996-10-25.  Go with Shanks & Pottenger through 1998.
-#
-# Shanks & Pottenger say that the Sept. 1984 through Sept. 1990 switches
-# in Choibalsan (more precisely, in Dornod and SĂŒkhbaatar) took place
-# at 02:00 standard time, not at 00:00 local time as in the rest of
-# the country.  That would be odd, and possibly is a result of their
-# correction of 02:00 (in the previous edition) not being done correctly
-# in the latest edition; so ignore it for now.
-
-# From Ganbold Tsagaankhuu (2017-02-09):
-# Mongolian Government meeting has concluded today to cancel daylight
-# saving time adoption in Mongolia.  Source: http://zasag.mn/news/view/16192
-
-Rule	Mongol	1985	1998	-	Mar	lastSun	0:00	1:00	-
-Rule	Mongol	1984	1998	-	Sep	lastSun	0:00	0	-
-# IATA SSIM (1999-09) says Mongolia no longer observes DST.
-Rule	Mongol	2001	only	-	Apr	lastSat	2:00	1:00	-
-Rule	Mongol	2001	2006	-	Sep	lastSat	2:00	0	-
-Rule	Mongol	2002	2006	-	Mar	lastSat	2:00	1:00	-
-Rule	Mongol	2015	2016	-	Mar	lastSat	2:00	1:00	-
-Rule	Mongol	2015	2016	-	Sep	lastSat	0:00	0	-
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-# Hovd, a.k.a. Chovd, Dund-Us, Dzhargalant, Khovd, Jirgalanta
-Zone	Asia/Hovd	6:06:36 -	LMT	1905 Aug
-			6:00	-	+06	1978
-			7:00	Mongol	+07/+08
-# Ulaanbaatar, a.k.a. Ulan Bataar, Ulan Bator, Urga
-Zone	Asia/Ulaanbaatar 7:07:32 -	LMT	1905 Aug
-			7:00	-	+07	1978
-			8:00	Mongol	+08/+09
-# Choibalsan, a.k.a. Bajan TĂŒmen, Bajan Tumen, Chojbalsan,
-# Choybalsan, Sanbejse, Tchoibalsan
-Zone	Asia/Choibalsan	7:38:00 -	LMT	1905 Aug
-			7:00	-	+07	1978
-			8:00	-	+08	1983 Apr
-			9:00	Mongol	+09/+10	2008 Mar 31
-			8:00	Mongol	+08/+09
-
-# Nepal
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Kathmandu	5:41:16 -	LMT	1920
-			5:30	-	+0530	1986
-			5:45	-	+0545
-
-# Oman
-# See Asia/Dubai.
-
-# Pakistan
-
-# From Rives McDow (2002-03-13):
-# I have been advised that Pakistan has decided to adopt dst on a
-# TRIAL basis for one year, starting 00:01 local time on April 7, 2002
-# and ending at 00:01 local time October 6, 2002.  This is what I was
-# told, but I believe that the actual time of change may be 00:00; the
-# 00:01 was to make it clear which day it was on.
-
-# From Paul Eggert (2002-03-15):
-# Jesper NĂžrgaard found this URL:
-# http://www.pak.gov.pk/public/news/app/app06_dec.htm
-# (dated 2001-12-06) which says that the Cabinet adopted a scheme "to
-# advance the clocks by one hour on the night between the first
-# Saturday and Sunday of April and revert to the original position on
-# 15th October each year".  This agrees with McDow's 04-07 at 00:00,
-# but disagrees about the October transition, and makes it sound like
-# it's not on a trial basis.  Also, the "between the first Saturday
-# and Sunday of April" phrase, if taken literally, means that the
-# transition takes place at 00:00 on the first Sunday on or after 04-02.
-
-# From Paul Eggert (2003-02-09):
-# DAWN <http://www.dawn.com/2002/10/06/top13.htm> reported on 2002-10-05
-# that 2002 DST ended that day at midnight.  Go with McDow for now.
-
-# From Steffen Thorsen (2003-03-14):
-# According to http://www.dawn.com/2003/03/07/top15.htm
-# there will be no DST in Pakistan this year:
-#
-# ISLAMABAD, March 6: Information and Media Development Minister Sheikh
-# Rashid Ahmed on Thursday said the cabinet had reversed a previous
-# decision to advance clocks by one hour in summer and put them back by
-# one hour in winter with the aim of saving light hours and energy.
-#
-# The minister told a news conference that the experiment had rather
-# shown 8 per cent higher consumption of electricity.
-
-# From Alex Krivenyshev (2008-05-15):
-#
-# Here is an article that Pakistan plan to introduce Daylight Saving Time
-# on June 1, 2008 for 3 months.
-#
-# "... The federal cabinet on Wednesday announced a new conservation plan to
-# help reduce load shedding by approving the closure of commercial centres at
-# 9pm and moving clocks forward by one hour for the next three months. ...."
-#
-# http://www.worldtimezone.com/dst_news/dst_news_pakistan01.html
-# http://www.dailytimes.com.pk/default.asp?page=2008%5C05%5C15%5Cstory_15-5-2008_pg1_4
-
-# From Arthur David Olson (2008-05-19):
-# XXX--midnight transitions is a guess; 2008 only is a guess.
-
-# From Alexander Krivenyshev (2008-08-28):
-# Pakistan government has decided to keep the watches one-hour advanced
-# for another 2 months - plan to return to Standard Time on October 31
-# instead of August 31.
-#
-# http://www.worldtimezone.com/dst_news/dst_news_pakistan02.html
-# http://dailymailnews.com/200808/28/news/dmbrn03.html
-
-# From Alexander Krivenyshev (2009-04-08):
-# Based on previous media reports that "... proposed plan to
-# advance clocks by one hour from May 1 will cause disturbance
-# to the working schedules rather than bringing discipline in
-# official working."
-# http://www.thenews.com.pk/daily_detail.asp?id=171280
-#
-# recent news that instead of May 2009 - Pakistan plan to
-# introduce DST from April 15, 2009
-#
-# FYI: Associated Press Of Pakistan
-# April 08, 2009
-# Cabinet okays proposal to advance clocks by one hour from April 15
-# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=73043&Itemid=1
-# http://www.worldtimezone.com/dst_news/dst_news_pakistan05.html
-#
-# ....
-# The Federal Cabinet on Wednesday approved the proposal to
-# advance clocks in the country by one hour from April 15 to
-# conserve energy"
-
-# From Steffen Thorsen (2009-09-17):
-# "The News International," Pakistan reports that: "The Federal
-# Government has decided to restore the previous time by moving the
-# clocks backward by one hour from October 1. A formal announcement to
-# this effect will be made after the Prime Minister grants approval in
-# this regard."
-# http://www.thenews.com.pk/updates.asp?id=87168
-
-# From Alexander Krivenyshev (2009-09-28):
-# According to Associated Press Of Pakistan, it is confirmed that
-# Pakistan clocks across the country would be turned back by an hour from
-# October 1, 2009.
-#
-# "Clocks to go back one hour from 1 Oct"
-# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=86715&Itemid=2
-# http://www.worldtimezone.com/dst_news/dst_news_pakistan07.htm
-#
-# From Steffen Thorsen (2009-09-29):
-# Now they seem to have changed their mind, November 1 is the new date:
-# http://www.thenews.com.pk/top_story_detail.asp?Id=24742
-# "The country's clocks will be reversed by one hour on November 1.
-# Officials of Federal Ministry for Interior told this to Geo News on
-# Monday."
-#
-# And more importantly, it seems that these dates will be kept every year:
-# "It has now been decided that clocks will be wound forward by one hour
-# on April 15 and reversed by an hour on November 1 every year without
-# obtaining prior approval, the officials added."
-#
-# We have confirmed this year's end date with both with the Ministry of
-# Water and Power and the Pakistan Electric Power Company:
-# https://www.timeanddate.com/news/time/pakistan-ends-dst09.html
-
-# From Christoph Göhre (2009-10-01):
-# [T]he German Consulate General in Karachi reported me today that Pakistan
-# will go back to standard time on 1st of November.
-
-# From Steffen Thorsen (2010-03-26):
-# Steffen Thorsen wrote:
-# > On Thursday (2010-03-25) it was announced that DST would start in
-# > Pakistan on 2010-04-01.
-# >
-# > Then today, the president said that they might have to revert the
-# > decision if it is not supported by the parliament. So at the time
-# > being, it seems unclear if DST will be actually observed or not - but
-# > April 1 could be a more likely date than April 15.
-# Now, it seems that the decision to not observe DST in final:
-#
-# "Govt Withdraws Plan To Advance Clocks"
-# http://www.apakistannews.com/govt-withdraws-plan-to-advance-clocks-172041
-#
-# "People laud PM's announcement to end DST"
-# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule Pakistan	2002	only	-	Apr	Sun>=2	0:00	1:00	S
-Rule Pakistan	2002	only	-	Oct	Sun>=2	0:00	0	-
-Rule Pakistan	2008	only	-	Jun	1	0:00	1:00	S
-Rule Pakistan	2008	2009	-	Nov	1	0:00	0	-
-Rule Pakistan	2009	only	-	Apr	15	0:00	1:00	S
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Karachi	4:28:12 -	LMT	1907
-			5:30	-	+0530	1942 Sep
-			5:30	1:00	+0630	1945 Oct 15
-			5:30	-	+0530	1951 Sep 30
-			5:00	-	+05	1971 Mar 26
-			5:00 Pakistan	PK%sT	# Pakistan Time
-
-# Palestine
-
-# From Amos Shapir (1998-02-15):
-#
-# From 1917 until 1948-05-15, all of Palestine, including the parts now
-# known as the Gaza Strip and the West Bank, was under British rule.
-# Therefore the rules given for Israel for that period, apply there too...
-#
-# The Gaza Strip was under Egyptian rule between 1948-05-15 until 1967-06-05
-# (except a short occupation by Israel from 1956-11 till 1957-03, but no
-# time zone was affected then).  It was never formally annexed to Egypt,
-# though.
-#
-# The rest of Palestine was under Jordanian rule at that time, formally
-# annexed in 1950 as the West Bank (and the word "Trans" was dropped from
-# the country's previous name of "the Hashemite Kingdom of the
-# Trans-Jordan").  So the rules for Jordan for that time apply.  Major
-# towns in that area are Nablus (Shchem), El-Halil (Hebron), Ramallah, and
-# East Jerusalem.
-#
-# Both areas were occupied by Israel in June 1967, but not annexed (except
-# for East Jerusalem).  They were on Israel time since then; there might
-# have been a Military Governor's order about time zones, but I'm not aware
-# of any (such orders may have been issued semi-annually whenever summer
-# time was in effect, but maybe the legal aspect of time was just neglected).
-#
-# The Palestinian Authority was established in 1993, and got hold of most
-# towns in the West Bank and Gaza by 1995.  I know that in order to
-# demonstrate...independence, they have been switching to
-# summer time and back on a different schedule than Israel's, but I don't
-# know when this was started, or what algorithm is used (most likely the
-# Jordanian one).
-#
-# To summarize, the table should probably look something like that:
-#
-# Area \ when | 1918-1947 | 1948-1967 | 1967-1995 | 1996-
-# ------------+-----------+-----------+-----------+-----------
-# Israel      | Zion      | Zion      | Zion      | Zion
-# West bank   | Zion      | Jordan    | Zion      | Jordan
-# Gaza        | Zion      | Egypt     | Zion      | Jordan
-#
-# I guess more info may be available from the PA's web page (if/when they
-# have one).
-
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger write that Gaza did not observe DST until 1957, but go
-# with Shapir and assume that it observed DST from 1940 through 1947,
-# and that it used Jordanian rules starting in 1996.
-# We don't yet need a separate entry for the West Bank, since
-# the only differences between it and Gaza that we know about
-# occurred before our cutoff date of 1970.
-# However, as we get more information, we may need to add entries
-# for parts of the West Bank as they transitioned from Israel's rules
-# to Palestine's rules.
-
-# From IINS News Service - Israel - 1998-03-23 10:38:07 Israel time,
-# forwarded by Ephraim Silverberg:
-#
-# Despite the fact that Israel changed over to daylight savings time
-# last week, the PLO Authority (PA) has decided not to turn its clocks
-# one-hour forward at this time.  As a sign of independence from Israeli rule,
-# the PA has decided to implement DST in April.
-
-# From Paul Eggert (1999-09-20):
-# Daoud Kuttab writes in Holiday havoc
-# http://www.jpost.com/com/Archive/22.Apr.1999/Opinion/Article-2.html
-# (Jerusalem Post, 1999-04-22) that
-# the Palestinian National Authority changed to DST on 1999-04-15.
-# I vaguely recall that they switch back in October (sorry, forgot the source).
-# For now, let's assume that the spring switch was at 24:00,
-# and that they switch at 0:00 on the 3rd Fridays of April and October.
-
-# From Paul Eggert (2005-11-22):
-# Starting 2004 transitions are from Steffen Thorsen's web site timeanddate.com.
-
-# From Steffen Thorsen (2005-11-23):
-# A user from Gaza reported that Gaza made the change early because of
-# the Ramadan.  Next year Ramadan will be even earlier, so I think
-# there is a good chance next year's end date will be around two weeks
-# earlier - the same goes for Jordan.
-
-# From Steffen Thorsen (2006-08-17):
-# I was informed by a user in Bethlehem that in Bethlehem it started the
-# same day as Israel, and after checking with other users in the area, I
-# was informed that they started DST one day after Israel.  I was not
-# able to find any authoritative sources at the time, nor details if
-# Gaza changed as well, but presumed Gaza to follow the same rules as
-# the West Bank.
-
-# From Steffen Thorsen (2006-09-26):
-# according to the Palestine News Network (2006-09-19):
-# http://english.pnn.ps/index.php?option=com_content&task=view&id=596&Itemid=5
-# > The Council of Ministers announced that this year its winter schedule
-# > will begin early, as of midnight Thursday.  It is also time to turn
-# > back the clocks for winter.  Friday will begin an hour late this week.
-# I guess it is likely that next year's date will be moved as well,
-# because of the Ramadan.
-
-# From Jesper NĂžrgaard Welen (2007-09-18):
-# According to Steffen Thorsen's web site the Gaza Strip and the rest of the
-# Palestinian territories left DST early on 13.th. of September at 2:00.
-
-# From Paul Eggert (2007-09-20):
-# My understanding is that Gaza and the West Bank disagree even over when
-# the weekend is (Thursday+Friday versus Friday+Saturday), so I'd be a bit
-# surprised if they agreed about DST.  But for now, assume they agree.
-# For lack of better information, predict that future changes will be
-# the 2nd Thursday of September at 02:00.
-
-# From Alexander Krivenyshev (2008-08-28):
-# Here is an article, that Mideast running on different clocks at Ramadan.
-#
-# Gaza Strip (as Egypt) ended DST at midnight Thursday (Aug 28, 2008), while
-# the West Bank will end Daylight Saving Time at midnight Sunday (Aug 31, 2008).
-#
-# http://www.guardian.co.uk/world/feedarticle/7759001
-# http://www.abcnews.go.com/International/wireStory?id=5676087
-# http://www.worldtimezone.com/dst_news/dst_news_gazastrip01.html
-
-# From Alexander Krivenyshev (2009-03-26):
-# According to the Palestine News Network (arabic.pnn.ps), Palestinian
-# government decided to start Daylight Time on Thursday night March
-# 26 and continue until the night of 27 September 2009.
-#
-# (in Arabic)
-# http://arabic.pnn.ps/index.php?option=com_content&task=view&id=50850
-#
-# (English translation)
-# http://www.worldtimezone.com/dst_news/dst_news_westbank01.html
-
-# From Steffen Thorsen (2009-08-31):
-# Palestine's Council of Ministers announced that they will revert back to
-# winter time on Friday, 2009-09-04.
-#
-# One news source:
-# http://www.safa.ps/ara/?action=showdetail&seid=4158
-# (Palestinian press agency, Arabic),
-# Google translate: "Decided that the Palestinian government in Ramallah
-# headed by Salam Fayyad, the start of work in time for the winter of
-# 2009, starting on Friday approved the fourth delay Sept. clock sixty
-# minutes per hour as of Friday morning."
-#
-# We are not sure if Gaza will do the same, last year they had a different
-# end date, we will keep this page updated:
-# https://www.timeanddate.com/news/time/westbank-gaza-dst-2009.html
-
-# From Alexander Krivenyshev (2009-09-02):
-# Seems that Gaza Strip will go back to Winter Time same date as West Bank.
-#
-# According to Palestinian Ministry Of Interior, West Bank and Gaza Strip plan
-# to change time back to Standard time on September 4, 2009.
-#
-# "Winter time unite the West Bank and Gaza"
-# (from Palestinian National Authority):
-# http://www.moi.gov.ps/en/?page=633167343250594025&nid=11505
-# http://www.worldtimezone.com/dst_news/dst_news_gazastrip02.html
-
-# From Alexander Krivenyshev (2010-03-19):
-# According to Voice of Palestine DST will last for 191 days, from March
-# 26, 2010 till "the last Sunday before the tenth day of Tishri
-# (October), each year" (October 03, 2010?)
-#
-# http://palvoice.org/forums/showthread.php?t=245697
-# (in Arabic)
-# http://www.worldtimezone.com/dst_news/dst_news_westbank03.html
-
-# From Steffen Thorsen (2010-03-24):
-# ...Ma'an News Agency reports that Hamas cabinet has decided it will
-# start one day later, at 12:01am. Not sure if they really mean 12:01am or
-# noon though:
-#
-# http://www.maannews.net/eng/ViewDetails.aspx?ID=271178
-# (Ma'an News Agency)
-# "At 12:01am Friday, clocks in Israel and the West Bank will change to
-# 1:01am, while Gaza clocks will change at 12:01am Saturday morning."
-
-# From Steffen Thorsen (2010-08-11):
-# According to several sources, including
-# http://www.maannews.net/eng/ViewDetails.aspx?ID=306795
-# the clocks were set back one hour at 2010-08-11 00:00:00 local time in
-# Gaza and the West Bank.
-# Some more background info:
-# https://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html
-
-# From Steffen Thorsen (2011-08-26):
-# Gaza and the West Bank did go back to standard time in the beginning of
-# August, and will now enter daylight saving time again on 2011-08-30
-# 00:00 (so two periods of DST in 2011). The pause was because of
-# Ramadan.
-#
-# http://www.maannews.net/eng/ViewDetails.aspx?ID=416217
-# Additional info:
-# https://www.timeanddate.com/news/time/palestine-dst-2011.html
-
-# From Alexander Krivenyshev (2011-08-27):
-# According to the article in The Jerusalem Post:
-# "...Earlier this month, the Palestinian government in the West Bank decided to
-# move to standard time for 30 days, during Ramadan. The Palestinians in the
-# Gaza Strip accepted the change and also moved their clocks one hour back.
-# The Hamas government said on Saturday that it won't observe summertime after
-# the Muslim feast of Id al-Fitr, which begins on Tuesday..."
-# ...
-# https://www.jpost.com/MiddleEast/Article.aspx?id=235650
-# http://www.worldtimezone.com/dst_news/dst_news_gazastrip05.html
-# The rules for Egypt are stolen from the 'africa' file.
-
-# From Steffen Thorsen (2011-09-30):
-# West Bank did end Daylight Saving Time this morning/midnight (2011-09-30
-# 00:00).
-# So West Bank and Gaza now have the same time again.
-#
-# Many sources, including:
-# http://www.maannews.net/eng/ViewDetails.aspx?ID=424808
-
-# From Steffen Thorsen (2012-03-26):
-# Palestinian news sources tell that both Gaza and West Bank will start DST
-# on Friday (Thursday midnight, 2012-03-29 24:00).
-# Some of many sources in Arabic:
-# http://www.samanews.com/index.php?act=Show&id=122638
-#
-# http://safa.ps/details/news/74352/%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-%D8%A8%D8%A7%D9%84%D8%B6%D9%81%D8%A9-%D9%88%D8%BA%D8%B2%D8%A9-%D9%84%D9%8A%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D8%B9%D8%A9.html
-#
-# Our brief summary:
-# https://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html
-
-# From Steffen Thorsen (2013-03-26):
-# The following news sources tells that Palestine will "start daylight saving
-# time from midnight on Friday, March 29, 2013" (translated).
-# [These are in Arabic and are for Gaza and for Ramallah, respectively.]
-# http://www.samanews.com/index.php?act=Show&id=154120
-# http://safa.ps/details/news/99844/%D8%B1%D8%A7%D9%85-%D8%A7%D9%84%D9%84%D9%87-%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-29-%D8%A7%D9%84%D8%AC%D8%A7%D8%B1%D9%8A.html
-
-# From Steffen Thorsen (2013-09-24):
-# The Gaza and West Bank are ending DST Thursday at midnight
-# (2013-09-27 00:00:00) (one hour earlier than last year...).
-# This source in English, says "that winter time will go into effect
-# at midnight on Thursday in the West Bank and Gaza Strip":
-# http://english.wafa.ps/index.php?action=detail&id=23246
-# official source...:
-# http://www.palestinecabinet.gov.ps/ar/Views/ViewDetails.aspx?pid=1252
-
-# From Steffen Thorsen (2015-03-03):
-# Sources such as http://www.alquds.com/news/article/view/id/548257
-# and https://www.raya.ps/ar/news/890705.html say Palestine areas will
-# start DST on 2015-03-28 00:00 which is one day later than expected.
-#
-# From Paul Eggert (2015-03-03):
-# https://www.timeanddate.com/time/change/west-bank/ramallah?year=2014
-# says that the fall 2014 transition was Oct 23 at 24:00.
-
-# From Hannah Kreitem (2016-03-09):
-# http://www.palestinecabinet.gov.ps/WebSite/ar/ViewDetails?ID=31728
-# [Google translation]: "The Council also decided to start daylight
-# saving in Palestine as of one o'clock on Saturday morning,
-# 2016-03-26, to provide the clock 60 minutes ahead."
-
-# From Sharef Mustafa (2016-10-19):
-# [T]he Palestinian cabinet decision (Mar 8th 2016) published on
-# http://www.palestinecabinet.gov.ps/WebSite/Upload/Decree/GOV_17/16032016134830.pdf
-# states that summer time will end on Oct 29th at 01:00.
-#
-# From Tim Parenti (2016-10-19):
-# Predict fall transitions on October's last Saturday at 01:00 from now on.
-# This is consistent with the 2016 transition as well as our spring
-# predictions.
-#
-# From Paul Eggert (2016-10-19):
-# It's also consistent with predictions in the following URLs today:
-# https://www.timeanddate.com/time/change/gaza-strip/gaza
-# https://www.timeanddate.com/time/change/west-bank/hebron
-
-# From Sharef Mustafa (2018-03-16):
-# Palestine summer time will start on Mar 24th 2018 by advancing the
-# clock by 60 minutes as per Palestinian cabinet decision published on
-# the official website, though the decree did not specify the exact
-# time of the time shift.
-# http://www.palestinecabinet.gov.ps/Website/AR/NDecrees/ViewFile.ashx?ID=e7a42ab7-ee23-435a-b9c8-a4f7e81f3817
-
-# From Even Scharning (2019-03-23):
-# DST in Palestine will start on 30 March this year, not 23 March as the time
-# zone database predicted.
-# https://ramallah.news/post/123610
-#
-# From Tim Parenti (2019-03-23):
-# Combining this with the rules observed since 2016, adjust our spring
-# transition guess to Mar Sat>=24.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule EgyptAsia	1957	only	-	May	10	0:00	1:00	S
-Rule EgyptAsia	1957	1958	-	Oct	 1	0:00	0	-
-Rule EgyptAsia	1958	only	-	May	 1	0:00	1:00	S
-Rule EgyptAsia	1959	1967	-	May	 1	1:00	1:00	S
-Rule EgyptAsia	1959	1965	-	Sep	30	3:00	0	-
-Rule EgyptAsia	1966	only	-	Oct	 1	3:00	0	-
-
-Rule Palestine	1999	2005	-	Apr	Fri>=15	0:00	1:00	S
-Rule Palestine	1999	2003	-	Oct	Fri>=15	0:00	0	-
-Rule Palestine	2004	only	-	Oct	 1	1:00	0	-
-Rule Palestine	2005	only	-	Oct	 4	2:00	0	-
-Rule Palestine	2006	2007	-	Apr	 1	0:00	1:00	S
-Rule Palestine	2006	only	-	Sep	22	0:00	0	-
-Rule Palestine	2007	only	-	Sep	Thu>=8	2:00	0	-
-Rule Palestine	2008	2009	-	Mar	lastFri	0:00	1:00	S
-Rule Palestine	2008	only	-	Sep	 1	0:00	0	-
-Rule Palestine	2009	only	-	Sep	Fri>=1	1:00	0	-
-Rule Palestine	2010	only	-	Mar	26	0:00	1:00	S
-Rule Palestine	2010	only	-	Aug	11	0:00	0	-
-Rule Palestine	2011	only	-	Apr	 1	0:01	1:00	S
-Rule Palestine	2011	only	-	Aug	 1	0:00	0	-
-Rule Palestine	2011	only	-	Aug	30	0:00	1:00	S
-Rule Palestine	2011	only	-	Sep	30	0:00	0	-
-Rule Palestine	2012	2014	-	Mar	lastThu	24:00	1:00	S
-Rule Palestine	2012	only	-	Sep	21	1:00	0	-
-Rule Palestine	2013	only	-	Sep	Fri>=21	0:00	0	-
-Rule Palestine	2014	2015	-	Oct	Fri>=21	0:00	0	-
-Rule Palestine	2015	only	-	Mar	lastFri	24:00	1:00	S
-Rule Palestine	2016	max	-	Mar	Sat>=24	1:00	1:00	S
-Rule Palestine	2016	max	-	Oct	lastSat	1:00	0	-
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
-			2:00	Zion	EET/EEST 1948 May 15
-			2:00 EgyptAsia	EE%sT	1967 Jun  5
-			2:00	Zion	I%sT	1996
-			2:00	Jordan	EE%sT	1999
-			2:00 Palestine	EE%sT	2008 Aug 29  0:00
-			2:00	-	EET	2008 Sep
-			2:00 Palestine	EE%sT	2010
-			2:00	-	EET	2010 Mar 27  0:01
-			2:00 Palestine	EE%sT	2011 Aug  1
-			2:00	-	EET	2012
-			2:00 Palestine	EE%sT
-
-Zone	Asia/Hebron	2:20:23	-	LMT	1900 Oct
-			2:00	Zion	EET/EEST 1948 May 15
-			2:00 EgyptAsia	EE%sT	1967 Jun  5
-			2:00	Zion	I%sT	1996
-			2:00	Jordan	EE%sT	1999
-			2:00 Palestine	EE%sT
-
-# Paracel Is
-# no information
-
-# Philippines
-
-# From Paul Eggert (2018-11-18):
-# The Spanish initially used American (west-of-Greenwich) time.
-# It is unknown what time Manila kept when the British occupied it from
-# 1762-10-06 through 1764-04; for now assume it kept American time.
-# On 1844-08-16, Narciso ClaverĂ­a, governor-general of the
-# Philippines, issued a proclamation announcing that 1844-12-30 was to
-# be immediately followed by 1845-01-01; see R.H. van Gent's
-# History of the International Date Line
-# https://www.staff.science.uu.nl/~gent0113/idl/idl_philippines.htm
-# The rest of the data entries are from Shanks & Pottenger.
-
-# From Jesper NĂžrgaard Welen (2006-04-26):
-# ... claims that Philippines had DST last time in 1990:
-# http://story.philippinetimes.com/p.x/ct/9/id/145be20cc6b121c0/cid/3e5bbccc730d258c/
-# [a story dated 2006-04-25 by Cris Larano of Dow Jones Newswires,
-# but no details]
-
-# From Paul Eggert (2014-08-14):
-# The following source says DST may be instituted November-January and again
-# March-June, but this is not definite.  It also says DST was last proclaimed
-# during the Ramos administration (1992-1998); but again, no details.
-# Carcamo D. PNoy urged to declare use of daylight saving time.
-# Philippine Star 2014-08-05
-# http://www.philstar.com/headlines/2014/08/05/1354152/pnoy-urged-declare-use-daylight-saving-time
-
-# From Paul Goyette (2018-06-15):
-# In the Philippines, there is a national law, Republic Act No. 10535
-# which declares the official time here as "Philippine Standard Time".
-# The act [1] even specifies use of PST as the abbreviation, although
-# the FAQ provided by PAGASA [2] uses the "acronym PhST to distinguish
-# it from the Pacific Standard Time (PST)."
-# [1] http://www.officialgazette.gov.ph/2013/05/15/republic-act-no-10535/
-# [2] https://www1.pagasa.dost.gov.ph/index.php/astronomy/philippine-standard-time#republic-act-10535
-#
-# From Paul Eggert (2018-06-19):
-# I surveyed recent news reports, and my impression is that "PST" is
-# more popular among reliable English-language news sources.  This is
-# not just a measure of Google hit counts: it's also the sizes and
-# influence of the sources.  There is no current abbreviation for DST,
-# so use "PDT", the usual American style.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Phil	1936	only	-	Nov	1	0:00	1:00	D
-Rule	Phil	1937	only	-	Feb	1	0:00	0	S
-Rule	Phil	1954	only	-	Apr	12	0:00	1:00	D
-Rule	Phil	1954	only	-	Jul	1	0:00	0	S
-Rule	Phil	1978	only	-	Mar	22	0:00	1:00	D
-Rule	Phil	1978	only	-	Sep	21	0:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Manila	-15:56:00 -	LMT	1844 Dec 31
-			8:04:00 -	LMT	1899 May 11
-			8:00	Phil	P%sT	1942 May
-			9:00	-	JST	1944 Nov
-			8:00	Phil	P%sT
-
-# Qatar
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Qatar	3:26:08 -	LMT	1920     # Al Dawhah / Doha
-			4:00	-	+04	1972 Jun
-			3:00	-	+03
-Link Asia/Qatar Asia/Bahrain
-
-# Saudi Arabia
-#
-# From Paul Eggert (2018-08-29):
-# Time in Saudi Arabia and other countries in the Arabian peninsula was not
-# standardized until 1968 or so; we don't know exactly when, and possibly it
-# has never been made official.  Richard P Hunt, in "Islam city yielding to
-# modern times", New York Times (1961-04-09), p 20, wrote that only airlines
-# observed standard time, and that people in Jeddah mostly observed quasi-solar
-# time, doing so by setting their watches at sunrise to 6 o'clock (or to 12
-# o'clock for "Arab" time).
-#
-# Timekeeping differed depending on who you were and which part of Saudi
-# Arabia you were in.  In 1969, Elias Antar wrote that although a common
-# practice had been to set one's watch to 12:00 (i.e., midnight) at sunset -
-# which meant that the time on one side of a mountain could differ greatly from
-# the time on the other side - many foreigners set their watches to 6pm
-# instead, while airlines instead used UTC +03 (except in Dhahran, where they
-# used UTC +04), Aramco used UTC +03 with DST, and the Trans-Arabian Pipe Line
-# Company used Aramco time in eastern Saudi Arabia and airline time in western.
-# (The American Military Aid Advisory Group used plain UTC.)  Antar writes,
-# "A man named Higgins, so the story goes, used to run a local power
-# station. One day, the whole thing became too much for Higgins and he
-# assembled his staff and laid down the law. 'I've had enough of this,' he
-# shrieked. 'It is now 12 o'clock Higgins Time, and from now on this station is
-# going to run on Higgins Time.' And so, until last year, it did."  See:
-# Antar E. Dinner at When? Saudi Aramco World, 1969 March/April. 2-3.
-# http://archive.aramcoworld.com/issue/196902/dinner.at.when.htm
-# Also see: Antar EN. Arabian flying is confusing.
-# Port Angeles (WA) Evening News. 1965-03-10. page 3.
-#
-# The TZ database cannot represent quasi-solar time; airline time is the best
-# we can do.  The 1946 foreign air news digest of the U.S. Civil Aeronautics
-# Board (OCLC 42299995) reported that the "... Arabian Government, inaugurated
-# a weekly Dhahran-Cairo service, via the Saudi Arabian cities of Riyadh and
-# Jidda, on March 14, 1947".  Shanks & Pottenger guessed 1950; go with the
-# earlier date.
-#
-# Shanks & Pottenger also state that until 1968-05-01 Saudi Arabia had two
-# time zones; the other zone, at UT +04, was in the far eastern part of
-# the country.  Presumably this is documenting airline time.  Ignore this,
-# as it's before our 1970 cutoff.
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Riyadh	3:06:52 -	LMT	1947 Mar 14
-			3:00	-	+03
-Link Asia/Riyadh Asia/Aden	# Yemen
-Link Asia/Riyadh Asia/Kuwait
-
-# Singapore
-# taken from Mok Ly Yng (2003-10-30)
-# http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Singapore	6:55:25 -	LMT	1901 Jan  1
-			6:55:25	-	SMT	1905 Jun  1 # Singapore M.T.
-			7:00	-	+07	1933 Jan  1
-			7:00	0:20	+0720	1936 Jan  1
-			7:20	-	+0720	1941 Sep  1
-			7:30	-	+0730	1942 Feb 16
-			9:00	-	+09	1945 Sep 12
-			7:30	-	+0730	1982 Jan  1
-			8:00	-	+08
-
-# Spratly Is
-# no information
-
-# Sri Lanka
-
-# From Paul Eggert (2013-02-21):
-# Milne says "Madras mean time use from May 1, 1898.  Prior to this Colombo
-# mean time, 5h. 4m. 21.9s. F., was used."  But 5:04:21.9 differs considerably
-# from Colombo's meridian 5:19:24, so for now ignore Milne and stick with
-# Shanks and Pottenger.
-
-# From Paul Eggert (1996-09-03):
-# "Sri Lanka advances clock by an hour to avoid blackout"
-# (<http://www.virtual-pc.com/lankaweb/news/items/240596-2.html>, 1996-05-24,
-# no longer available as of 1999-08-17)
-# reported "the country's standard time will be put forward by one hour at
-# midnight Friday (1830 GMT) 'in the light of the present power crisis'."
-#
-# From Dharmasiri Senanayake, Sri Lanka Media Minister (1996-10-24), as quoted
-# by Shamindra in Daily News - Hot News Section
-# <news:54rka5$m5h@mtinsc01-mgt.ops.worldnet.att.net> (1996-10-26):
-# With effect from 12.30 a.m. on 26th October 1996
-# Sri Lanka will be six (06) hours ahead of GMT.
-
-# From Jesper NĂžrgaard Welen (2006-04-14), quoting Sri Lanka News Online
-# <http://news.sinhalaya.com/wmview.php?ArtID=11002> (2006-04-13):
-# 0030 hrs on April 15, 2006 (midnight of April 14, 2006 +30 minutes)
-# at present, become 2400 hours of April 14, 2006 (midnight of April 14, 2006).
-
-# From Peter Apps and Ranga Sirila of Reuters (2006-04-12) in:
-# http://today.reuters.co.uk/news/newsArticle.aspx?type=scienceNews&storyID=2006-04-12T172228Z_01_COL295762_RTRIDST_0_SCIENCE-SRILANKA-TIME-DC.XML
-# [The Tamil Tigers] never accepted the original 1996 time change and simply
-# kept their clocks set five and a half hours ahead of Greenwich Mean
-# Time (GMT), in line with neighbor India.
-# From Paul Eggert (2006-04-18):
-# People who live in regions under Tamil control can use [TZ='Asia/Kolkata'],
-# as that zone has agreed with the Tamil areas since our cutoff date of 1970.
-
-# From Sadika Sumanapala (2016-10-19):
-# According to http://www.sltime.org (maintained by Measurement Units,
-# Standards & Services Department, Sri Lanka) abbreviation for Sri Lanka
-# standard time is SLST.
-#
-# From Paul Eggert (2016-10-18):
-# "SLST" seems to be reasonably recent and rarely-used outside time
-# zone nerd sources.  I searched Google News and found three uses of
-# it in the International Business Times of India in February and
-# March of this year when discussing cricket match times, but nothing
-# since then (though there has been a lot of cricket) and nothing in
-# other English-language news sources.  Our old abbreviation "LKT" is
-# even worse.  For now, let's use a numeric abbreviation; we can
-# switch to "SLST" if it catches on.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Colombo	5:19:24 -	LMT	1880
-			5:19:32	-	MMT	1906        # Moratuwa Mean Time
-			5:30	-	+0530	1942 Jan  5
-			5:30	0:30	+06	1942 Sep
-			5:30	1:00	+0630	1945 Oct 16  2:00
-			5:30	-	+0530	1996 May 25  0:00
-			6:30	-	+0630	1996 Oct 26  0:30
-			6:00	-	+06	2006 Apr 15  0:30
-			5:30	-	+0530
-
-# Syria
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Syria	1920	1923	-	Apr	Sun>=15	2:00	1:00	S
-Rule	Syria	1920	1923	-	Oct	Sun>=1	2:00	0	-
-Rule	Syria	1962	only	-	Apr	29	2:00	1:00	S
-Rule	Syria	1962	only	-	Oct	1	2:00	0	-
-Rule	Syria	1963	1965	-	May	1	2:00	1:00	S
-Rule	Syria	1963	only	-	Sep	30	2:00	0	-
-Rule	Syria	1964	only	-	Oct	1	2:00	0	-
-Rule	Syria	1965	only	-	Sep	30	2:00	0	-
-Rule	Syria	1966	only	-	Apr	24	2:00	1:00	S
-Rule	Syria	1966	1976	-	Oct	1	2:00	0	-
-Rule	Syria	1967	1978	-	May	1	2:00	1:00	S
-Rule	Syria	1977	1978	-	Sep	1	2:00	0	-
-Rule	Syria	1983	1984	-	Apr	9	2:00	1:00	S
-Rule	Syria	1983	1984	-	Oct	1	2:00	0	-
-Rule	Syria	1986	only	-	Feb	16	2:00	1:00	S
-Rule	Syria	1986	only	-	Oct	9	2:00	0	-
-Rule	Syria	1987	only	-	Mar	1	2:00	1:00	S
-Rule	Syria	1987	1988	-	Oct	31	2:00	0	-
-Rule	Syria	1988	only	-	Mar	15	2:00	1:00	S
-Rule	Syria	1989	only	-	Mar	31	2:00	1:00	S
-Rule	Syria	1989	only	-	Oct	1	2:00	0	-
-Rule	Syria	1990	only	-	Apr	1	2:00	1:00	S
-Rule	Syria	1990	only	-	Sep	30	2:00	0	-
-Rule	Syria	1991	only	-	Apr	 1	0:00	1:00	S
-Rule	Syria	1991	1992	-	Oct	 1	0:00	0	-
-Rule	Syria	1992	only	-	Apr	 8	0:00	1:00	S
-Rule	Syria	1993	only	-	Mar	26	0:00	1:00	S
-Rule	Syria	1993	only	-	Sep	25	0:00	0	-
-# IATA SSIM (1998-02) says 1998-04-02;
-# (1998-09) says 1999-03-29 and 1999-09-29; (1999-02) says 1999-04-02,
-# 2000-04-02, and 2001-04-02; (1999-09) says 2000-03-31 and 2001-03-31;
-# (2006) says 2006-03-31 and 2006-09-22;
-# for now ignore all these claims and go with Shanks & Pottenger,
-# except for the 2006-09-22 claim (which seems right for Ramadan).
-Rule	Syria	1994	1996	-	Apr	 1	0:00	1:00	S
-Rule	Syria	1994	2005	-	Oct	 1	0:00	0	-
-Rule	Syria	1997	1998	-	Mar	lastMon	0:00	1:00	S
-Rule	Syria	1999	2006	-	Apr	 1	0:00	1:00	S
-# From Stephen Colebourne (2006-09-18):
-# According to IATA data, Syria will change DST on 21st September [21:00 UTC]
-# this year [only]....  This is probably related to Ramadan, like Egypt.
-Rule	Syria	2006	only	-	Sep	22	0:00	0	-
-# From Paul Eggert (2007-03-29):
-# Today the AP reported "Syria will switch to summertime at midnight Thursday."
-# http://www.iht.com/articles/ap/2007/03/29/africa/ME-GEN-Syria-Time-Change.php
-Rule	Syria	2007	only	-	Mar	lastFri	0:00	1:00	S
-# From Jesper NĂžrgaard (2007-10-27):
-# The sister center ICARDA of my work CIMMYT is confirming that Syria DST will
-# not take place 1st November at 0:00 o'clock but 1st November at 24:00 or
-# rather Midnight between Thursday and Friday. This does make more sense than
-# having it between Wednesday and Thursday (two workdays in Syria) since the
-# weekend in Syria is not Saturday and Sunday, but Friday and Saturday. So now
-# it is implemented at midnight of the last workday before weekend...
-#
-# From Steffen Thorsen (2007-10-27):
-# Jesper NĂžrgaard Welen wrote:
-#
-# > "Winter local time in Syria will be observed at midnight of Thursday 1
-# > November 2007, and the clock will be put back 1 hour."
-#
-# I found confirmation on this in this gov.sy-article (Arabic):
-# http://wehda.alwehda.gov.sy/_print_veiw.asp?FileName=12521710520070926111247
-#
-# which using Google's translate tools says:
-# Council of Ministers also approved the commencement of work on
-# identifying the winter time as of Friday, 2/11/2007 where the 60th
-# minute delay at midnight Thursday 1/11/2007.
-Rule	Syria	2007	only	-	Nov	 Fri>=1	0:00	0	-
-
-# From Stephen Colebourne (2008-03-17):
-# For everyone's info, I saw an IATA time zone change for [Syria] for
-# this month (March 2008) in the last day or so....
-# Country     Time Standard   --- DST Start ---   --- DST End ---  DST
-# Name        Zone Variation   Time    Date        Time    Date
-# Variation
-# Syrian Arab
-# Republic    SY    +0200      2200  03APR08       2100  30SEP08   +0300
-#                              2200  02APR09       2100  30SEP09   +0300
-#                              2200  01APR10       2100  30SEP10   +0300
-
-# From Arthur David Olson (2008-03-17):
-# Here's a link to English-language coverage by the Syrian Arab News
-# Agency (SANA)...
-# http://www.sana.sy/eng/21/2008/03/11/165173.htm
-# ...which reads (in part) "The Cabinet approved the suggestion of the
-# Ministry of Electricity to begin daylight savings time on Friday April
-# 4th, advancing clocks one hour ahead on midnight of Thursday April 3rd."
-# Since Syria is two hours east of UTC, the 2200 and 2100 transition times
-# shown above match up with midnight in Syria.
-
-# From Arthur David Olson (2008-03-18):
-# My best guess at a Syrian rule is "the Friday nearest April 1";
-# coding that involves either using a "Mar Fri>=29" construct that old time zone
-# compilers can't handle  or having multiple Rules (a la Israel).
-# For now, use "Apr Fri>=1", and go with IATA on a uniform Sep 30 end.
-
-# From Steffen Thorsen (2008-10-07):
-# Syria has now officially decided to end DST on 2008-11-01 this year,
-# according to the following article in the Syrian Arab News Agency (SANA).
-#
-# The article is in Arabic, and seems to tell that they will go back to
-# winter time on 2008-11-01 at 00:00 local daylight time (delaying/setting
-# clocks back 60 minutes).
-#
-# http://sana.sy/ara/2/2008/10/07/195459.htm
-
-# From Steffen Thorsen (2009-03-19):
-# Syria will start DST on 2009-03-27 00:00 this year according to many sources,
-# two examples:
-#
-# http://www.sana.sy/eng/21/2009/03/17/217563.htm
-# (English, Syrian Arab News # Agency)
-# http://thawra.alwehda.gov.sy/_View_news2.asp?FileName=94459258720090318012209
-# (Arabic, gov-site)
-#
-# We have not found any sources saying anything about when DST ends this year.
-#
-# Our summary
-# https://www.timeanddate.com/news/time/syria-dst-starts-march-27-2009.html
-
-# From Steffen Thorsen (2009-10-27):
-# The Syrian Arab News Network on 2009-09-29 reported that Syria will
-# revert back to winter (standard) time on midnight between Thursday
-# 2009-10-29 and Friday 2009-10-30:
-# http://www.sana.sy/ara/2/2009/09/29/247012.htm (Arabic)
-
-# From Arthur David Olson (2009-10-28):
-# We'll see if future DST switching times turn out to be end of the last
-# Thursday of the month or the start of the last Friday of the month or
-# something else. For now, use the start of the last Friday.
-
-# From Steffen Thorsen (2010-03-17):
-# The "Syrian News Station" reported on 2010-03-16 that the Council of
-# Ministers has decided that Syria will start DST on midnight Thursday
-# 2010-04-01: (midnight between Thursday and Friday):
-# http://sns.sy/sns/?path=news/read/11421 (Arabic)
-
-# From Steffen Thorsen (2012-03-26):
-# Today, Syria's government announced that they will start DST early on Friday
-# (00:00). This is a bit earlier than the past two years.
-#
-# From Syrian Arab News Agency, in Arabic:
-# http://www.sana.sy/ara/2/2012/03/26/408215.htm
-#
-# Our brief summary:
-# https://www.timeanddate.com/news/time/syria-dst-2012.html
-
-# From Arthur David Olson (2012-03-27):
-# Assume last Friday in March going forward XXX.
-
-Rule	Syria	2008	only	-	Apr	Fri>=1	0:00	1:00	S
-Rule	Syria	2008	only	-	Nov	1	0:00	0	-
-Rule	Syria	2009	only	-	Mar	lastFri	0:00	1:00	S
-Rule	Syria	2010	2011	-	Apr	Fri>=1	0:00	1:00	S
-Rule	Syria	2012	max	-	Mar	lastFri	0:00	1:00	S
-Rule	Syria	2009	max	-	Oct	lastFri	0:00	0	-
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Damascus	2:25:12 -	LMT	1920 # Dimashq
-			2:00	Syria	EE%sT
-
-# Tajikistan
-# From Shanks & Pottenger.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Dushanbe	4:35:12 -	LMT	1924 May  2
-			5:00	-	+05	1930 Jun 21
-			6:00 RussiaAsia +06/+07	1991 Mar 31  2:00s
-			5:00	1:00	+05/+06	1991 Sep  9  2:00s
-			5:00	-	+05
-
-# Thailand
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Bangkok	6:42:04	-	LMT	1880
-			6:42:04	-	BMT	1920 Apr # Bangkok Mean Time
-			7:00	-	+07
-Link Asia/Bangkok Asia/Phnom_Penh	# Cambodia
-Link Asia/Bangkok Asia/Vientiane	# Laos
-
-# Turkmenistan
-# From Shanks & Pottenger.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Ashgabat	3:53:32 -	LMT	1924 May  2 # or Ashkhabad
-			4:00	-	+04	1930 Jun 21
-			5:00 RussiaAsia	+05/+06	1991 Mar 31  2:00
-			4:00 RussiaAsia	+04/+05	1992 Jan 19  2:00
-			5:00	-	+05
-
-# United Arab Emirates
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Dubai	3:41:12 -	LMT	1920
-			4:00	-	+04
-Link Asia/Dubai Asia/Muscat	# Oman
-
-# Uzbekistan
-# Byalokoz 1919 says Uzbekistan was 4:27:53.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Samarkand	4:27:53 -	LMT	1924 May  2
-			4:00	-	+04	1930 Jun 21
-			5:00	-	+05	1981 Apr  1
-			5:00	1:00	+06	1981 Oct  1
-			6:00	-	+06	1982 Apr  1
-			5:00 RussiaAsia	+05/+06	1992
-			5:00	-	+05
-# Milne says Tashkent was 4:37:10.8; round to nearest.
-Zone	Asia/Tashkent	4:37:11 -	LMT	1924 May  2
-			5:00	-	+05	1930 Jun 21
-			6:00 RussiaAsia	+06/+07	1991 Mar 31  2:00
-			5:00 RussiaAsia	+05/+06	1992
-			5:00	-	+05
-
-# Vietnam
-
-# From Paul Eggert (2014-10-04):
-# Milne gives 7:16:56 for the meridian of Saigon in 1899, as being
-# used in Lower Laos, Cambodia, and Annam.  But this is quite a ways
-# from Saigon's location.  For now, ignore this and stick with Shanks
-# and Pottenger for LMT before 1906.
-
-# From Arthur David Olson (2008-03-18):
-# The English-language name of Vietnam's most populous city is "Ho Chi Minh
-# City"; use Ho_Chi_Minh below to avoid a name of more than 14 characters.
-
-# From Paul Eggert (2014-10-21) after a heads-up from Tráș§n Ngọc QuĂąn:
-# Tráș§n Tiáșżn BĂŹnh's authoritative book "Lịch Việt Nam: tháșż ká»· XX-XXI (1901-2100)"
-# (NhĂ  xuáș„t báșŁn Văn HoĂĄ - ThĂŽng Tin, Hanoi, 2005), pp 49-50,
-# is quoted verbatim in:
-# http://www.thoigian.com.vn/?mPage=P80D01
-# is translated by Brian Inglis in:
-# https://mm.icann.org/pipermail/tz/2014-October/021654.html
-# and is the basis for the information below.
-#
-# The 1906 transition was effective July 1 and standardized Indochina to
-# PhĂč Liễn Observatory, legally 104° 17' 17" east of Paris.
-# It's unclear whether this meant legal Paris Mean Time (00:09:21) or
-# the Paris Meridian (2° 20' 14.03" E); the former yields 07:06:30.1333...
-# and the latter 07:06:29.333... so either way it rounds to 07:06:30,
-# which is used below even though the modern-day PhĂč Liễn Observatory
-# is closer to 07:06:31.  Abbreviate PhĂč Liễn Mean Time as PLMT.
-#
-# The following transitions occurred in Indochina in general (before 1954)
-# and in South Vietnam in particular (after 1954):
-# To 07:00 on 1911-05-01.
-# To 08:00 on 1942-12-31 at 23:00.
-# To 09:00 in 1945-03-14 at 23:00.
-# To 07:00 on 1945-09-02 in Vietnam.
-# To 08:00 on 1947-04-01 in French-controlled Indochina.
-# To 07:00 on 1955-07-01 in South Vietnam.
-# To 08:00 on 1959-12-31 at 23:00 in South Vietnam.
-# To 07:00 on 1975-06-13 in South Vietnam.
-#
-# Tráș§n cites the following sources; it's unclear which supplied the info above.
-#
-# HoĂ ng XuĂąn HĂŁn: "Lịch vĂ  lịch Việt Nam". Táș­p san Khoa học XĂŁ hội,
-# No. 9, Paris, February 1982.
-#
-# LĂȘ ThĂ nh LĂąn: "Lịch vĂ  niĂȘn biểu lịch sá»­ hai mÆ°ÆĄi tháșż ká»· (0001-2010)",
-# NXB Thống kĂȘ, Hanoi, 2000.
-#
-# LĂȘ ThĂ nh LĂąn: "Lịch hai tháșż ká»· (1802-2010) vĂ  cĂĄc lịch vÄ©nh cá»­u",
-# NXB Thuáș­n HoĂĄ, Huáșż, 1995.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Asia/Ho_Chi_Minh	7:06:40 -	LMT	1906 Jul  1
-			7:06:30	-	PLMT	1911 May  1 # PhĂč Liễn MT
-			7:00	-	+07	1942 Dec 31 23:00
-			8:00	-	+08	1945 Mar 14 23:00
-			9:00	-	+09	1945 Sep  2
-			7:00	-	+07	1947 Apr  1
-			8:00	-	+08	1955 Jul  1
-			7:00	-	+07	1959 Dec 31 23:00
-			8:00	-	+08	1975 Jun 13
-			7:00	-	+07
-
-# From Paul Eggert (2019-02-19):
-#
-# The Ho Chi Minh entry suffices for most purposes as it agrees with all of
-# Vietnam since 1975-06-13.  Presumably clocks often changed in south Vietnam
-# in the early 1970s as locations changed hands during the war; however the
-# details are unknown and would likely be too voluminous for this database.
-#
-# For timestamps in north Vietnam back to 1970 (the tzdb cutoff),
-# use Asia/Bangkok; see the VN entries in the file zone1970.tab.
-# For timestamps before 1970, see Asia/Hanoi in the file 'backzone'.
-
-
-# Yemen
-# See Asia/Riyadh.
--- a/test/jdk/sun/util/calendar/zi/tzdata/australasia	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2067 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# tzdb data for Australasia and environs, and for much of the Pacific
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# This file also includes Pacific islands.
-
-# Notes are at the end of this file
-
-###############################################################################
-
-# Australia
-
-# Please see the notes below for the controversy about "EST" versus "AEST" etc.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Aus	1917	only	-	Jan	 1	0:01	1:00	D
-Rule	Aus	1917	only	-	Mar	25	2:00	0	S
-Rule	Aus	1942	only	-	Jan	 1	2:00	1:00	D
-Rule	Aus	1942	only	-	Mar	29	2:00	0	S
-Rule	Aus	1942	only	-	Sep	27	2:00	1:00	D
-Rule	Aus	1943	1944	-	Mar	lastSun	2:00	0	S
-Rule	Aus	1943	only	-	Oct	 3	2:00	1:00	D
-# Go with Whitman and the Australian National Standards Commission, which
-# says W Australia didn't use DST in 1943/1944.  Ignore Whitman's claim that
-# 1944/1945 was just like 1943/1944.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-# Northern Territory
-Zone Australia/Darwin	 8:43:20 -	LMT	1895 Feb
-			 9:00	-	ACST	1899 May
-			 9:30	Aus	AC%sT
-# Western Australia
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	AW	1974	only	-	Oct	lastSun	2:00s	1:00	D
-Rule	AW	1975	only	-	Mar	Sun>=1	2:00s	0	S
-Rule	AW	1983	only	-	Oct	lastSun	2:00s	1:00	D
-Rule	AW	1984	only	-	Mar	Sun>=1	2:00s	0	S
-Rule	AW	1991	only	-	Nov	17	2:00s	1:00	D
-Rule	AW	1992	only	-	Mar	Sun>=1	2:00s	0	S
-Rule	AW	2006	only	-	Dec	 3	2:00s	1:00	D
-Rule	AW	2007	2009	-	Mar	lastSun	2:00s	0	S
-Rule	AW	2007	2008	-	Oct	lastSun	2:00s	1:00	D
-Zone Australia/Perth	 7:43:24 -	LMT	1895 Dec
-			 8:00	Aus	AW%sT	1943 Jul
-			 8:00	AW	AW%sT
-Zone Australia/Eucla	 8:35:28 -	LMT	1895 Dec
-			 8:45	Aus +0845/+0945	1943 Jul
-			 8:45	AW  +0845/+0945
-
-# Queensland
-#
-# From Alex Livingston (1996-11-01):
-# I have heard or read more than once that some resort islands off the coast
-# of Queensland chose to keep observing daylight-saving time even after
-# Queensland ceased to.
-#
-# From Paul Eggert (1996-11-22):
-# IATA SSIM (1993-02/1994-09) say that the Holiday Islands (Hayman, Lindeman,
-# Hamilton) observed DST for two years after the rest of Queensland stopped.
-# Hamilton is the largest, but there is also a Hamilton in Victoria,
-# so use Lindeman.
-#
-# From J William Piggott (2016-02-20):
-# There is no location named Holiday Islands in Queensland Australia; holiday
-# islands is a colloquial term used globally.  Hayman and Lindeman are at the
-# north and south extremes of the Whitsunday Islands archipelago, and
-# Hamilton is in between; it is reasonable to believe that this time zone
-# applies to all of the Whitsundays.
-# http://www.australia.gov.au/about-australia/australian-story/austn-islands
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	AQ	1971	only	-	Oct	lastSun	2:00s	1:00	D
-Rule	AQ	1972	only	-	Feb	lastSun	2:00s	0	S
-Rule	AQ	1989	1991	-	Oct	lastSun	2:00s	1:00	D
-Rule	AQ	1990	1992	-	Mar	Sun>=1	2:00s	0	S
-Rule	Holiday	1992	1993	-	Oct	lastSun	2:00s	1:00	D
-Rule	Holiday	1993	1994	-	Mar	Sun>=1	2:00s	0	S
-Zone Australia/Brisbane	10:12:08 -	LMT	1895
-			10:00	Aus	AE%sT	1971
-			10:00	AQ	AE%sT
-Zone Australia/Lindeman  9:55:56 -	LMT	1895
-			10:00	Aus	AE%sT	1971
-			10:00	AQ	AE%sT	1992 Jul
-			10:00	Holiday	AE%sT
-
-# South Australia
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	AS	1971	1985	-	Oct	lastSun	2:00s	1:00	D
-Rule	AS	1986	only	-	Oct	19	2:00s	1:00	D
-Rule	AS	1987	2007	-	Oct	lastSun	2:00s	1:00	D
-Rule	AS	1972	only	-	Feb	27	2:00s	0	S
-Rule	AS	1973	1985	-	Mar	Sun>=1	2:00s	0	S
-Rule	AS	1986	1990	-	Mar	Sun>=15	2:00s	0	S
-Rule	AS	1991	only	-	Mar	3	2:00s	0	S
-Rule	AS	1992	only	-	Mar	22	2:00s	0	S
-Rule	AS	1993	only	-	Mar	7	2:00s	0	S
-Rule	AS	1994	only	-	Mar	20	2:00s	0	S
-Rule	AS	1995	2005	-	Mar	lastSun	2:00s	0	S
-Rule	AS	2006	only	-	Apr	2	2:00s	0	S
-Rule	AS	2007	only	-	Mar	lastSun	2:00s	0	S
-Rule	AS	2008	max	-	Apr	Sun>=1	2:00s	0	S
-Rule	AS	2008	max	-	Oct	Sun>=1	2:00s	1:00	D
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Australia/Adelaide	9:14:20 -	LMT	1895 Feb
-			9:00	-	ACST	1899 May
-			9:30	Aus	AC%sT	1971
-			9:30	AS	AC%sT
-
-# Tasmania
-#
-# From Paul Eggert (2005-08-16):
-# http://www.bom.gov.au/climate/averages/tables/dst_times.shtml
-# says King Island didn't observe DST from WWII until late 1971.
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	AT	1967	only	-	Oct	Sun>=1	2:00s	1:00	D
-Rule	AT	1968	only	-	Mar	lastSun	2:00s	0	S
-Rule	AT	1968	1985	-	Oct	lastSun	2:00s	1:00	D
-Rule	AT	1969	1971	-	Mar	Sun>=8	2:00s	0	S
-Rule	AT	1972	only	-	Feb	lastSun	2:00s	0	S
-Rule	AT	1973	1981	-	Mar	Sun>=1	2:00s	0	S
-Rule	AT	1982	1983	-	Mar	lastSun	2:00s	0	S
-Rule	AT	1984	1986	-	Mar	Sun>=1	2:00s	0	S
-Rule	AT	1986	only	-	Oct	Sun>=15	2:00s	1:00	D
-Rule	AT	1987	1990	-	Mar	Sun>=15	2:00s	0	S
-Rule	AT	1987	only	-	Oct	Sun>=22	2:00s	1:00	D
-Rule	AT	1988	1990	-	Oct	lastSun	2:00s	1:00	D
-Rule	AT	1991	1999	-	Oct	Sun>=1	2:00s	1:00	D
-Rule	AT	1991	2005	-	Mar	lastSun	2:00s	0	S
-Rule	AT	2000	only	-	Aug	lastSun	2:00s	1:00	D
-Rule	AT	2001	max	-	Oct	Sun>=1	2:00s	1:00	D
-Rule	AT	2006	only	-	Apr	Sun>=1	2:00s	0	S
-Rule	AT	2007	only	-	Mar	lastSun	2:00s	0	S
-Rule	AT	2008	max	-	Apr	Sun>=1	2:00s	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Australia/Hobart	9:49:16	-	LMT	1895 Sep
-			10:00	-	AEST	1916 Oct  1  2:00
-			10:00	1:00	AEDT	1917 Feb
-			10:00	Aus	AE%sT	1967
-			10:00	AT	AE%sT
-Zone Australia/Currie	9:35:28	-	LMT	1895 Sep
-			10:00	-	AEST	1916 Oct  1  2:00
-			10:00	1:00	AEDT	1917 Feb
-			10:00	Aus	AE%sT	1971 Jul
-			10:00	AT	AE%sT
-
-# Victoria
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	AV	1971	1985	-	Oct	lastSun	2:00s	1:00	D
-Rule	AV	1972	only	-	Feb	lastSun	2:00s	0	S
-Rule	AV	1973	1985	-	Mar	Sun>=1	2:00s	0	S
-Rule	AV	1986	1990	-	Mar	Sun>=15	2:00s	0	S
-Rule	AV	1986	1987	-	Oct	Sun>=15	2:00s	1:00	D
-Rule	AV	1988	1999	-	Oct	lastSun	2:00s	1:00	D
-Rule	AV	1991	1994	-	Mar	Sun>=1	2:00s	0	S
-Rule	AV	1995	2005	-	Mar	lastSun	2:00s	0	S
-Rule	AV	2000	only	-	Aug	lastSun	2:00s	1:00	D
-Rule	AV	2001	2007	-	Oct	lastSun	2:00s	1:00	D
-Rule	AV	2006	only	-	Apr	Sun>=1	2:00s	0	S
-Rule	AV	2007	only	-	Mar	lastSun	2:00s	0	S
-Rule	AV	2008	max	-	Apr	Sun>=1	2:00s	0	S
-Rule	AV	2008	max	-	Oct	Sun>=1	2:00s	1:00	D
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Australia/Melbourne 9:39:52 -	LMT	1895 Feb
-			10:00	Aus	AE%sT	1971
-			10:00	AV	AE%sT
-
-# New South Wales
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	AN	1971	1985	-	Oct	lastSun	2:00s	1:00	D
-Rule	AN	1972	only	-	Feb	27	2:00s	0	S
-Rule	AN	1973	1981	-	Mar	Sun>=1	2:00s	0	S
-Rule	AN	1982	only	-	Apr	Sun>=1	2:00s	0	S
-Rule	AN	1983	1985	-	Mar	Sun>=1	2:00s	0	S
-Rule	AN	1986	1989	-	Mar	Sun>=15	2:00s	0	S
-Rule	AN	1986	only	-	Oct	19	2:00s	1:00	D
-Rule	AN	1987	1999	-	Oct	lastSun	2:00s	1:00	D
-Rule	AN	1990	1995	-	Mar	Sun>=1	2:00s	0	S
-Rule	AN	1996	2005	-	Mar	lastSun	2:00s	0	S
-Rule	AN	2000	only	-	Aug	lastSun	2:00s	1:00	D
-Rule	AN	2001	2007	-	Oct	lastSun	2:00s	1:00	D
-Rule	AN	2006	only	-	Apr	Sun>=1	2:00s	0	S
-Rule	AN	2007	only	-	Mar	lastSun	2:00s	0	S
-Rule	AN	2008	max	-	Apr	Sun>=1	2:00s	0	S
-Rule	AN	2008	max	-	Oct	Sun>=1	2:00s	1:00	D
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Australia/Sydney	10:04:52 -	LMT	1895 Feb
-			10:00	Aus	AE%sT	1971
-			10:00	AN	AE%sT
-Zone Australia/Broken_Hill 9:25:48 -	LMT	1895 Feb
-			10:00	-	AEST	1896 Aug 23
-			9:00	-	ACST	1899 May
-			9:30	Aus	AC%sT	1971
-			9:30	AN	AC%sT	2000
-			9:30	AS	AC%sT
-
-# Lord Howe Island
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	LH	1981	1984	-	Oct	lastSun	2:00	1:00	-
-Rule	LH	1982	1985	-	Mar	Sun>=1	2:00	0	-
-Rule	LH	1985	only	-	Oct	lastSun	2:00	0:30	-
-Rule	LH	1986	1989	-	Mar	Sun>=15	2:00	0	-
-Rule	LH	1986	only	-	Oct	19	2:00	0:30	-
-Rule	LH	1987	1999	-	Oct	lastSun	2:00	0:30	-
-Rule	LH	1990	1995	-	Mar	Sun>=1	2:00	0	-
-Rule	LH	1996	2005	-	Mar	lastSun	2:00	0	-
-Rule	LH	2000	only	-	Aug	lastSun	2:00	0:30	-
-Rule	LH	2001	2007	-	Oct	lastSun	2:00	0:30	-
-Rule	LH	2006	only	-	Apr	Sun>=1	2:00	0	-
-Rule	LH	2007	only	-	Mar	lastSun	2:00	0	-
-Rule	LH	2008	max	-	Apr	Sun>=1	2:00	0	-
-Rule	LH	2008	max	-	Oct	Sun>=1	2:00	0:30	-
-Zone Australia/Lord_Howe 10:36:20 -	LMT	1895 Feb
-			10:00	-	AEST	1981 Mar
-			10:30	LH	+1030/+1130 1985 Jul
-			10:30	LH	+1030/+11
-
-# Australian miscellany
-#
-# Ashmore Is, Cartier
-# no indigenous inhabitants; only seasonal caretakers
-# no times are set
-#
-# Coral Sea Is
-# no indigenous inhabitants; only meteorologists
-# no times are set
-#
-# Macquarie
-# Permanent occupation (scientific station) 1911-1915 and since 25 March 1948;
-# sealing and penguin oil station operated Nov 1899 to Apr 1919.  See the
-# Tasmania Parks & Wildlife Service history of sealing at Macquarie Island
-# http://www.parks.tas.gov.au/index.aspx?base=1828
-# http://www.parks.tas.gov.au/index.aspx?base=1831
-# Guess that it was like Australia/Hobart while inhabited before 2010.
-#
-# From Steffen Thorsen (2010-03-10):
-# We got these changes from the Australian Antarctic Division:
-# - Macquarie Island will stay on UTC+11 for winter and therefore not
-# switch back from daylight savings time when other parts of Australia do
-# on 4 April.
-#
-# From Arthur David Olson (2013-05-23):
-# The 1919 transition is overspecified below so pre-2013 zics
-# will produce a binary file with an [A]EST-type as the first 32-bit type;
-# this is required for correct handling of times before 1916 by
-# pre-2013 versions of localtime.
-Zone Antarctica/Macquarie 0	-	-00	1899 Nov
-			10:00	-	AEST	1916 Oct  1  2:00
-			10:00	1:00	AEDT	1917 Feb
-			10:00	Aus	AE%sT	1919 Apr  1  0:00s
-			0	-	-00	1948 Mar 25
-			10:00	Aus	AE%sT	1967
-			10:00	AT	AE%sT	2010 Apr  4  3:00
-			11:00	-	+11
-
-# Christmas
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Indian/Christmas	7:02:52 -	LMT	1895 Feb
-			7:00	-	+07
-
-# Cocos (Keeling) Is
-# These islands were ruled by the Ross family from about 1830 to 1978.
-# We don't know when standard time was introduced; for now, we guess 1900.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Cocos	6:27:40	-	LMT	1900
-			6:30	-	+0630
-
-
-# Fiji
-
-# Milne gives 11:55:44 for Suva.
-
-# From Alexander Krivenyshev (2009-11-10):
-# According to Fiji Broadcasting Corporation,  Fiji plans to re-introduce DST
-# from November 29th 2009  to April 25th 2010.
-#
-# "Daylight savings to commence this month"
-# http://www.radiofiji.com.fj/fullstory.php?id=23719
-# http://www.worldtimezone.com/dst_news/dst_news_fiji01.html
-
-# From Steffen Thorsen (2009-11-10):
-# The Fiji Government has posted some more details about the approved
-# amendments:
-# http://www.fiji.gov.fj/publish/page_16198.shtml
-
-# From Steffen Thorsen (2010-03-03):
-# The Cabinet in Fiji has decided to end DST about a month early, on
-# 2010-03-28 at 03:00.
-# The plan is to observe DST again, from 2010-10-24 to sometime in March
-# 2011 (last Sunday a good guess?).
-#
-# Official source:
-# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=1096:3310-cabinet-approves-change-in-daylight-savings-dates&catid=49:cabinet-releases&Itemid=166
-#
-# A bit more background info here:
-# https://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html
-
-# From Alexander Krivenyshev (2010-10-24):
-# According to Radio Fiji and Fiji Times online, Fiji will end DST 3
-# weeks earlier than expected - on March 6, 2011, not March 27, 2011...
-# Here is confirmation from Government of the Republic of the Fiji Islands,
-# Ministry of Information (fiji.gov.fj) web site:
-# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=2608:daylight-savings&catid=71:press-releases&Itemid=155
-# http://www.worldtimezone.com/dst_news/dst_news_fiji04.html
-
-# From Steffen Thorsen (2011-10-03):
-# Now the dates have been confirmed, and at least our start date
-# assumption was correct (end date was one week wrong).
-#
-# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155
-# which says
-# Members of the public are reminded to change their time to one hour in
-# advance at 2am to 3am on October 23, 2011 and one hour back at 3am to
-# 2am on February 26 next year.
-
-# From Ken Rylander (2011-10-24)
-# Another change to the Fiji DST end date. In the TZ database the end date for
-# Fiji DST 2012, is currently Feb 26. This has been changed to Jan 22.
-#
-# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=5017:amendments-to-daylight-savings&catid=71:press-releases&Itemid=155
-# states:
-#
-# The end of daylight saving scheduled initially for the 26th of February 2012
-# has been brought forward to the 22nd of January 2012.
-# The commencement of daylight saving will remain unchanged and start
-# on the  23rd of October, 2011.
-
-# From the Fiji Government Online Portal (2012-08-21) via Steffen Thorsen:
-# The Minister for Labour, Industrial Relations and Employment Mr Jone Usamate
-# today confirmed that Fiji will start daylight savings at 2 am on Sunday 21st
-# October 2012 and end at 3 am on Sunday 20th January 2013.
-# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=6702&catid=71&Itemid=155
-
-# From the Fijian Government Media Center (2013-08-30) via David Wheeler:
-# Fiji will start daylight savings on Sunday 27th October, 2013 ...
-# move clocks forward by one hour from 2am
-# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVING-STARTS-ON-SUNDAY,-27th-OCTOBER-201.aspx
-
-# From Steffen Thorsen (2013-01-10):
-# Fiji will end DST on 2014-01-19 02:00:
-# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVINGS-TO-END-THIS-MONTH-%281%29.aspx
-
-# From Ken Rylander (2014-10-20):
-# DST will start Nov. 2 this year.
-# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVING-STARTS-ON-SUNDAY,-NOVEMBER-2ND.aspx
-
-# From a government order dated 2015-08-26 and published as Legal Notice No. 77
-# in the Government of Fiji Gazette Supplement No. 24 (2015-08-28),
-# via Ken Rylander (2015-09-02):
-# the daylight saving period is 1 hour in advance of the standard time
-# commencing at 2.00 am on Sunday 1st November, 2015 and ending at
-# 3.00 am on Sunday 17th January, 2016.
-
-# From Raymond Kumar (2016-10-04):
-# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVING-STARTS-ON-6th-NOVEMBER,-2016.aspx
-# "Fiji's daylight savings will begin on Sunday, 6 November 2016, when
-# clocks go forward an hour at 2am to 3am....  Daylight Saving will
-# end at 3.00am on Sunday 15th January 2017."
-
-# From Paul Eggert (2017-08-21):
-# Dominic Fok writes (2017-08-20) that DST ends 2018-01-14, citing
-# Extraordinary Government of Fiji Gazette Supplement No. 21 (2017-08-27),
-# [Legal Notice No. 41] of an order of the previous day by J Usamate.
-
-# From Raymond Kumar (2018-07-13):
-# http://www.fijitimes.com/government-approves-2018-daylight-saving/
-# ... The daylight saving period will end at 3am on Sunday January 13, 2019.
-#
-# From Paul Eggert (2018-07-15):
-# For now, guess DST from 02:00 the first Sunday in November to 03:00
-# the first Sunday on or after January 13.  January transitions reportedly
-# depend on when school terms start.  Although the guess is ad hoc, it matches
-# transitions since late 2014 and seems more likely to match future
-# practice than guessing no DST.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Fiji	1998	1999	-	Nov	Sun>=1	2:00	1:00	-
-Rule	Fiji	1999	2000	-	Feb	lastSun	3:00	0	-
-Rule	Fiji	2009	only	-	Nov	29	2:00	1:00	-
-Rule	Fiji	2010	only	-	Mar	lastSun	3:00	0	-
-Rule	Fiji	2010	2013	-	Oct	Sun>=21	2:00	1:00	-
-Rule	Fiji	2011	only	-	Mar	Sun>=1	3:00	0	-
-Rule	Fiji	2012	2013	-	Jan	Sun>=18	3:00	0	-
-Rule	Fiji	2014	only	-	Jan	Sun>=18	2:00	0	-
-Rule	Fiji	2014	max	-	Nov	Sun>=1	2:00	1:00	-
-Rule	Fiji	2015	max	-	Jan	Sun>=13	3:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Fiji	11:55:44 -	LMT	1915 Oct 26 # Suva
-			12:00	Fiji	+12/+13
-
-# French Polynesia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Gambier	 -8:59:48 -	LMT	1912 Oct # Rikitea
-			 -9:00	-	-09
-Zone	Pacific/Marquesas -9:18:00 -	LMT	1912 Oct
-			 -9:30	-	-0930
-Zone	Pacific/Tahiti	 -9:58:16 -	LMT	1912 Oct # Papeete
-			-10:00	-	-10
-# Clipperton (near North America) is administered from French Polynesia;
-# it is uninhabited.
-
-# Guam
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-# http://guamlegislature.com/Public_Laws_5th/PL05-025.pdf
-# http://documents.guam.gov/wp-content/uploads/E.O.-59-7-Guam-Daylight-Savings-Time-May-6-1959.pdf
-Rule	Guam	1959	only	-	Jun	27	2:00	1:00	D
-# http://documents.guam.gov/wp-content/uploads/E.O.-61-5-Revocation-of-Daylight-Saving-Time-and-Restoratio.pdf
-Rule	Guam	1961	only	-	Jan	29	2:00	0	S
-# http://documents.guam.gov/wp-content/uploads/E.O.-67-13-Guam-Daylight-Savings-Time.pdf
-Rule	Guam	1967	only	-	Sep	 1	2:00	1:00	D
-# http://documents.guam.gov/wp-content/uploads/E.O.-69-2-Repeal-of-Guam-Daylight-Saving-Time.pdf
-Rule	Guam	1969	only	-	Jan	26	0:01	0	S
-# http://documents.guam.gov/wp-content/uploads/E.O.-69-10-Guam-Daylight-Saving-Time.pdf
-Rule	Guam	1969	only	-	Jun	22	2:00	1:00	D
-Rule	Guam	1969	only	-	Aug	31	2:00	0	S
-# http://documents.guam.gov/wp-content/uploads/E.O.-70-10-Guam-Daylight-Saving-Time.pdf
-# http://documents.guam.gov/wp-content/uploads/E.O.-70-30-End-of-Guam-Daylight-Saving-Time.pdf
-# http://documents.guam.gov/wp-content/uploads/E.O.-71-5-Guam-Daylight-Savings-Time.pdf
-Rule	Guam	1970	1971	-	Apr	lastSun	2:00	1:00	D
-Rule	Guam	1970	1971	-	Sep	Sun>=1	2:00	0	S
-# http://documents.guam.gov/wp-content/uploads/E.O.-73-28.-Guam-Day-light-Saving-Time.pdf
-Rule	Guam	1973	only	-	Dec	16	2:00	1:00	D
-# http://documents.guam.gov/wp-content/uploads/E.O.-74-7-Guam-Daylight-Savings-Time-Rescinded.pdf
-Rule	Guam	1974	only	-	Feb	24	2:00	0	S
-# http://documents.guam.gov/wp-content/uploads/E.O.-76-13-Daylight-Savings-Time.pdf
-Rule	Guam	1976	only	-	May	26	2:00	1:00	D
-# http://documents.guam.gov/wp-content/uploads/E.O.-76-25-Revocation-of-E.O.-76-13.pdf
-Rule	Guam	1976	only	-	Aug	22	2:01	0	S
-# http://documents.guam.gov/wp-content/uploads/E.O.-77-4-Daylight-Savings-Time.pdf
-Rule	Guam	1977	only	-	Apr	24	2:00	1:00	D
-# http://documents.guam.gov/wp-content/uploads/E.O.-77-18-Guam-Standard-Time.pdf
-Rule	Guam	1977	only	-	Aug	28	2:00	0	S
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Guam	-14:21:00 -	LMT	1844 Dec 31
-			 9:39:00 -	LMT	1901        # Agana
-			10:00	-	GST	1941 Dec 10 # Guam
-			 9:00	-	+09	1944 Jul 31
-			10:00	Guam	G%sT	2000 Dec 23
-			10:00	-	ChST	# Chamorro Standard Time
-Link Pacific/Guam Pacific/Saipan # N Mariana Is
-
-# Kiribati
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Tarawa	 11:32:04 -	LMT	1901 # Bairiki
-			 12:00	-	+12
-Zone Pacific/Enderbury	-11:24:20 -	LMT	1901
-			-12:00	-	-12	1979 Oct
-			-11:00	-	-11	1994 Dec 31
-			 13:00	-	+13
-Zone Pacific/Kiritimati	-10:29:20 -	LMT	1901
-			-10:40	-	-1040	1979 Oct
-			-10:00	-	-10	1994 Dec 31
-			 14:00	-	+14
-
-# N Mariana Is
-# See Pacific/Guam.
-
-# Marshall Is
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Majuro	 11:24:48 -	LMT	1901
-			 11:00	-	+11	1914 Oct
-			  9:00	-	+09	1919 Feb  1
-			 11:00	-	+11	1937
-			 10:00	-	+10	1941 Apr  1
-			  9:00	-	+09	1944 Jan 30
-			 11:00	-	+11	1969 Oct
-			 12:00	-	+12
-Zone Pacific/Kwajalein	 11:09:20 -	LMT	1901
-			 11:00	-	+11	1937
-			 10:00	-	+10	1941 Apr  1
-			  9:00	-	+09	1944 Feb  6
-			 11:00	-	+11	1969 Oct
-			-12:00	-	-12	1993 Aug 20 24:00
-			 12:00	-	+12
-
-# Micronesia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Chuuk	-13:52:52 -	LMT	1844 Dec 31
-			 10:07:08 -	LMT	1901
-			 10:00	-	+10	1914 Oct
-			  9:00	-	+09	1919 Feb  1
-			 10:00	-	+10	1941 Apr  1
-			  9:00	-	+09	1945 Aug
-			 10:00	-	+10
-Zone Pacific/Pohnpei	-13:27:08 -	LMT	1844 Dec 31	# Kolonia
-			 10:32:52 -	LMT	1901
-			 11:00	-	+11	1914 Oct
-			  9:00	-	+09	1919 Feb  1
-			 11:00	-	+11	1937
-			 10:00	-	+10	1941 Apr  1
-			  9:00	-	+09	1945 Aug
-			 11:00	-	+11
-Zone Pacific/Kosrae	-13:08:04 -	LMT	1844 Dec 31
-			 10:51:56 -	LMT	1901
-			 11:00	-	+11	1914 Oct
-			  9:00	-	+09	1919 Feb  1
-			 11:00	-	+11	1937
-			 10:00	-	+10	1941 Apr  1
-			  9:00	-	+09	1945 Aug
-			 11:00	-	+11	1969 Oct
-			 12:00	-	+12	1999
-			 11:00	-	+11
-
-# Nauru
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Nauru	11:07:40 -	LMT	1921 Jan 15 # Uaobe
-			11:30	-	+1130	1942 Aug 29
-			 9:00	-	+09	1945 Sep  8
-			11:30	-	+1130	1979 Feb 10  2:00
-			12:00	-	+12
-
-# New Caledonia
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	NC	1977	1978	-	Dec	Sun>=1	0:00	1:00	-
-Rule	NC	1978	1979	-	Feb	27	0:00	0	-
-Rule	NC	1996	only	-	Dec	 1	2:00s	1:00	-
-# Shanks & Pottenger say the following was at 2:00; go with IATA.
-Rule	NC	1997	only	-	Mar	 2	2:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Noumea	11:05:48 -	LMT	1912 Jan 13 # Nouméa
-			11:00	NC	+11/+12
-
-
-###############################################################################
-
-# New Zealand
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	NZ	1927	only	-	Nov	 6	2:00	1:00	S
-Rule	NZ	1928	only	-	Mar	 4	2:00	0	M
-Rule	NZ	1928	1933	-	Oct	Sun>=8	2:00	0:30	S
-Rule	NZ	1929	1933	-	Mar	Sun>=15	2:00	0	M
-Rule	NZ	1934	1940	-	Apr	lastSun	2:00	0	M
-Rule	NZ	1934	1940	-	Sep	lastSun	2:00	0:30	S
-Rule	NZ	1946	only	-	Jan	 1	0:00	0	S
-# Since 1957 Chatham has been 45 minutes ahead of NZ, but until 2018a
-# there was no documented single notation for the date and time of this
-# transition.  Duplicate the Rule lines for now, to give the 2018a change
-# time to percolate out.
-Rule	NZ	1974	only	-	Nov	Sun>=1	2:00s	1:00	D
-Rule	Chatham	1974	only	-	Nov	Sun>=1	2:45s	1:00	-
-Rule	NZ	1975	only	-	Feb	lastSun	2:00s	0	S
-Rule	Chatham	1975	only	-	Feb	lastSun	2:45s	0	-
-Rule	NZ	1975	1988	-	Oct	lastSun	2:00s	1:00	D
-Rule	Chatham	1975	1988	-	Oct	lastSun	2:45s	1:00	-
-Rule	NZ	1976	1989	-	Mar	Sun>=1	2:00s	0	S
-Rule	Chatham	1976	1989	-	Mar	Sun>=1	2:45s	0	-
-Rule	NZ	1989	only	-	Oct	Sun>=8	2:00s	1:00	D
-Rule	Chatham	1989	only	-	Oct	Sun>=8	2:45s	1:00	-
-Rule	NZ	1990	2006	-	Oct	Sun>=1	2:00s	1:00	D
-Rule	Chatham	1990	2006	-	Oct	Sun>=1	2:45s	1:00	-
-Rule	NZ	1990	2007	-	Mar	Sun>=15	2:00s	0	S
-Rule	Chatham	1990	2007	-	Mar	Sun>=15	2:45s	0	-
-Rule	NZ	2007	max	-	Sep	lastSun	2:00s	1:00	D
-Rule	Chatham	2007	max	-	Sep	lastSun	2:45s	1:00	-
-Rule	NZ	2008	max	-	Apr	Sun>=1	2:00s	0	S
-Rule	Chatham	2008	max	-	Apr	Sun>=1	2:45s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Auckland	11:39:04 -	LMT	1868 Nov  2
-			11:30	NZ	NZ%sT	1946 Jan  1
-			12:00	NZ	NZ%sT
-Zone Pacific/Chatham	12:13:48 -	LMT	1868 Nov  2
-			12:15	-	+1215	1946 Jan  1
-			12:45	Chatham	+1245/+1345
-
-Link Pacific/Auckland Antarctica/McMurdo
-
-# Auckland Is
-# uninhabited; Māori and Moriori, colonial settlers, pastoralists, sealers,
-# and scientific personnel have wintered
-
-# Campbell I
-# minor whaling stations operated 1909/1914
-# scientific station operated 1941/1995;
-# previously whalers, sealers, pastoralists, and scientific personnel wintered
-# was probably like Pacific/Auckland
-
-# Cook Is
-# From Shanks & Pottenger:
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Cook	1978	only	-	Nov	12	0:00	0:30	-
-Rule	Cook	1979	1991	-	Mar	Sun>=1	0:00	0	-
-Rule	Cook	1979	1990	-	Oct	lastSun	0:00	0:30	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Rarotonga	-10:39:04 -	LMT	1901        # Avarua
-			-10:30	-	-1030	1978 Nov 12
-			-10:00	Cook	-10/-0930
-
-###############################################################################
-
-
-# Niue
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Niue	-11:19:40 -	LMT	1901        # Alofi
-			-11:20	-	-1120	1951
-			-11:30	-	-1130	1978 Oct  1
-			-11:00	-	-11
-
-# Norfolk
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Norfolk	11:11:52 -	LMT	1901 # Kingston
-			11:12	-	+1112	1951
-			11:30	-	+1130	1974 Oct 27 02:00
-			11:30	1:00	+1230	1975 Mar  2 02:00
-			11:30	-	+1130	2015 Oct  4 02:00
-			11:00	-	+11
-
-# Palau (Belau)
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Palau	-15:02:04 -	LMT	1844 Dec 31	# Koror
-			  8:57:56 -	LMT	1901
-			  9:00	-	+09
-
-# Papua New Guinea
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Port_Moresby 9:48:40 -	LMT	1880
-			9:48:32	-	PMMT	1895 # Port Moresby Mean Time
-			10:00	-	+10
-#
-# From Paul Eggert (2014-10-13):
-# Base the Bougainville entry on the Arawa-Kieta region, which appears to have
-# the most people even though it was devastated in the Bougainville Civil War.
-#
-# Although Shanks gives 1942-03-15 / 1943-11-01 for UT +09, these dates
-# are apparently rough guesswork from the starts of military campaigns.
-# The World War II entries below are instead based on Arawa-Kieta.
-# The Japanese occupied Kieta in July 1942,
-# according to the Pacific War Online Encyclopedia
-# https://pwencycl.kgbudge.com/B/o/Bougainville.htm
-# and seem to have controlled it until their 1945-08-21 surrender.
-#
-# The Autonomous Region of Bougainville switched from UT +10 to +11
-# on 2014-12-28 at 02:00.  They call +11 "Bougainville Standard Time".
-# See:
-# http://www.bougainville24.com/bougainville-issues/bougainville-gets-own-timezone/
-#
-Zone Pacific/Bougainville 10:22:16 -	LMT	1880
-			 9:48:32 -	PMMT	1895
-			10:00	-	+10	1942 Jul
-			 9:00	-	+09	1945 Aug 21
-			10:00	-	+10	2014 Dec 28  2:00
-			11:00	-	+11
-
-# Pitcairn
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Pitcairn	-8:40:20 -	LMT	1901        # Adamstown
-			-8:30	-	-0830	1998 Apr 27  0:00
-			-8:00	-	-08
-
-# American Samoa
-Zone Pacific/Pago_Pago	 12:37:12 -	LMT	1892 Jul  5
-			-11:22:48 -	LMT	1911
-			-11:00	-	SST	            # S=Samoa
-Link Pacific/Pago_Pago Pacific/Midway # in US minor outlying islands
-
-# Samoa (formerly and also known as Western Samoa)
-
-# From Steffen Thorsen (2009-10-16):
-# We have been in contact with the government of Samoa again, and received
-# the following info:
-#
-# "Cabinet has now approved Daylight Saving to be effected next year
-# commencing from the last Sunday of September 2010 and conclude first
-# Sunday of April 2011."
-#
-# Background info:
-# https://www.timeanddate.com/news/time/samoa-dst-plan-2009.html
-#
-# Samoa's Daylight Saving Time Act 2009 is available here, but does not
-# contain any dates:
-# http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf
-
-# From Laupue Raymond Hughes (2010-10-07):
-# Please see
-# http://www.mcil.gov.ws
-# the Ministry of Commerce, Industry and Labour (sideframe) "Last Sunday
-# September 2010 (26/09/10) - adjust clocks forward from 12:00 midnight
-# to 01:00am and First Sunday April 2011 (03/04/11) - adjust clocks
-# backwards from 1:00am to 12:00am"
-
-# From Laupue Raymond Hughes (2011-03-07):
-# [http://www.mcil.gov.ws/ftcd/daylight_saving_2011.pdf]
-#
-# ... when the standard time strikes the hour of four o'clock (4.00am
-# or 0400 Hours) on the 2nd April 2011, then all instruments used to
-# measure standard time are to be adjusted/changed to three o'clock
-# (3:00am or 0300Hrs).
-
-# From David ZĂŒlke (2011-05-09):
-# Subject: Samoa to move timezone from east to west of international date line
-#
-# http://www.morningstar.co.uk/uk/markets/newsfeeditem.aspx?id=138501958347963
-
-# From Paul Eggert (2014-06-27):
-# The International Date Line Act 2011
-# http://www.parliament.gov.ws/images/ACTS/International_Date_Line_Act__2011_-_Eng.pdf
-# changed Samoa from UT -11 to +13, effective "12 o'clock midnight, on
-# Thursday 29th December 2011".  The International Date Line was adjusted
-# accordingly.
-
-# From Laupue Raymond Hughes (2011-09-02):
-# http://www.mcil.gov.ws/mcil_publications.html
-#
-# here is the official website publication for Samoa DST and dateline change
-#
-# DST
-# Year  End      Time              Start        Time
-# 2011  - - -    - - -             24 September 3:00am to 4:00am
-# 2012  01 April 4:00am to 3:00am  - - -        - - -
-#
-# Dateline Change skip Friday 30th Dec 2011
-# Thursday 29th December 2011	23:59:59 Hours
-# Saturday 31st December 2011	00:00:00 Hours
-#
-# From Nicholas Pereira (2012-09-10):
-# Daylight Saving Time commences on Sunday 30th September 2012 and
-# ends on Sunday 7th of April 2013....
-# http://www.mcil.gov.ws/mcil_publications.html
-#
-# From Paul Eggert (2014-07-08):
-# That web page currently lists transitions for 2012/3 and 2013/4.
-# Assume the pattern instituted in 2012 will continue indefinitely.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	WS	2010	only	-	Sep	lastSun	0:00	1	-
-Rule	WS	2011	only	-	Apr	Sat>=1	4:00	0	-
-Rule	WS	2011	only	-	Sep	lastSat	3:00	1	-
-Rule	WS	2012	max	-	Apr	Sun>=1	4:00	0	-
-Rule	WS	2012	max	-	Sep	lastSun	3:00	1	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Apia	 12:33:04 -	LMT	1892 Jul  5
-			-11:26:56 -	LMT	1911
-			-11:30	-	-1130	1950
-			-11:00	WS	-11/-10	2011 Dec 29 24:00
-			 13:00	WS	+13/+14
-
-# Solomon Is
-# excludes Bougainville, for which see Papua New Guinea
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Guadalcanal 10:39:48 -	LMT	1912 Oct # Honiara
-			11:00	-	+11
-
-# Tokelau
-#
-# From Gwillim Law (2011-12-29)
-# A correspondent informed me that Tokelau, like Samoa, will be skipping
-# December 31 this year ...
-#
-# From Steffen Thorsen (2012-07-25)
-# ... we double checked by calling hotels and offices based in Tokelau asking
-# about the time there, and they all told a time that agrees with UTC+13....
-# Shanks says UT-10 from 1901 [but] ... there is a good chance the change
-# actually was to UT-11 back then.
-#
-# From Paul Eggert (2012-07-25)
-# A Google Books snippet of Appendix to the Journals of the House of
-# Representatives of New Zealand, Session 1948,
-# <https://books.google.com/books?id=ZaVCAQAAIAAJ>, page 65, says Tokelau
-# was "11 hours slow on G.M.T."  Go with Thorsen and assume Shanks & Pottenger
-# are off by an hour starting in 1901.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Fakaofo	-11:24:56 -	LMT	1901
-			-11:00	-	-11	2011 Dec 30
-			13:00	-	+13
-
-# Tonga
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Tonga	1999	only	-	Oct	 7	2:00s	1:00	-
-Rule	Tonga	2000	only	-	Mar	19	2:00s	0	-
-Rule	Tonga	2000	2001	-	Nov	Sun>=1	2:00	1:00	-
-Rule	Tonga	2001	2002	-	Jan	lastSun	2:00	0	-
-Rule	Tonga	2016	only	-	Nov	Sun>=1	2:00	1:00	-
-Rule	Tonga	2017	only	-	Jan	Sun>=15	3:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Tongatapu	12:19:20 -	LMT	1901
-			12:20	-	+1220	1941
-			13:00	-	+13	1999
-			13:00	Tonga	+13/+14
-
-# Tuvalu
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Funafuti	11:56:52 -	LMT	1901
-			12:00	-	+12
-
-
-# US minor outlying islands
-
-# Howland, Baker
-# Howland was mined for guano by American companies 1857-1878 and British
-# 1886-1891; Baker was similar but exact dates are not known.
-# Inhabited by civilians 1935-1942; U.S. military bases 1943-1944;
-# uninhabited thereafter.
-# Howland observed Hawaii Standard Time (UT -10:30) in 1937;
-# see page 206 of Elgen M. Long and Marie K. Long,
-# Amelia Earhart: the Mystery Solved, Simon & Schuster (2000).
-# So most likely Howland and Baker observed Hawaii Time from 1935
-# until they were abandoned after the war.
-
-# Jarvis
-# Mined for guano by American companies 1857-1879 and British 1883?-1891?.
-# Inhabited by civilians 1935-1942; IGY scientific base 1957-1958;
-# uninhabited thereafter.
-# no information; was probably like Pacific/Kiritimati
-
-# Johnston
-#
-# From Paul Eggert (2017-02-10):
-# Sometimes Johnston kept Hawaii time, and sometimes it was an hour behind.
-# Details are uncertain.  We have no data for Johnston after 1970, so
-# treat it like Hawaii for now.  Since Johnston is now uninhabited,
-# its link to Pacific/Honolulu is in the 'backward' file.
-#
-# In his memoirs of June 6th to October 4, 1945
-# <http://www.315bw.org/Herb_Bach.htm> (2005), Herbert C. Bach writes,
-# "We started our letdown to Kwajalein Atoll and landed there at 5:00 AM
-# Johnston time, 1:30 AM Kwajalein time."  This was in June 1945, and
-# confirms that Johnston kept the same time as Honolulu in summer 1945.
-#
-# From Lyle McElhaney (2014-03-11):
-# [W]hen JI was being used for that [atomic bomb] testing, the time being used
-# was not Hawaiian time but rather the same time being used on the ships,
-# which had a GMT offset of -11 hours.  This apparently applied to at least the
-# time from Operation Newsreel (Hardtack I/Teak shot, 1958-08-01) to the last
-# Operation Fishbowl shot (Tightrope, 1962-11-04).... [See] Herman Hoerlin,
-# "The United States High-Altitude Test Experience: A Review Emphasizing the
-# Impact on the Environment", Los Alamos LA-6405, Oct 1976.
-# https://www.fas.org/sgp/othergov/doe/lanl/docs1/00322994.pdf
-# See the table on page 4 where he lists GMT and local times for the tests; a
-# footnote for the JI tests reads that local time is "JI time = Hawaii Time
-# Minus One Hour".
-
-# Kingman
-# uninhabited
-
-# Midway
-# See Pacific/Pago_Pago.
-
-# Palmyra
-# uninhabited since World War II; was probably like Pacific/Kiritimati
-
-# Wake
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Wake	11:06:28 -	LMT	1901
-			12:00	-	+12
-
-
-# Vanuatu
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Vanuatu	1983	only	-	Sep	25	0:00	1:00	-
-Rule	Vanuatu	1984	1991	-	Mar	Sun>=23	0:00	0	-
-Rule	Vanuatu	1984	only	-	Oct	23	0:00	1:00	-
-Rule	Vanuatu	1985	1991	-	Sep	Sun>=23	0:00	1:00	-
-Rule	Vanuatu	1992	1993	-	Jan	Sun>=23	0:00	0	-
-Rule	Vanuatu	1992	only	-	Oct	Sun>=23	0:00	1:00	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Efate	11:13:16 -	LMT	1912 Jan 13 # Vila
-			11:00	Vanuatu	+11/+12
-
-# Wallis and Futuna
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Wallis	12:15:20 -	LMT	1901
-			12:00	-	+12
-
-###############################################################################
-
-# NOTES
-
-# This file is by no means authoritative; if you think you know better,
-# go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).  For more, please see
-# the file CONTRIBUTING in the tz distribution.
-
-# From Paul Eggert (2018-11-18):
-#
-# Unless otherwise specified, the source for data through 1990 is:
-# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
-# San Diego: ACS Publications, Inc. (2003).
-# Unfortunately this book contains many errors and cites no sources.
-#
-# Many years ago Gwillim Law wrote that a good source
-# for time zone data was the International Air Transport
-# Association's Standard Schedules Information Manual (IATA SSIM),
-# published semiannually.  Law sent in several helpful summaries
-# of the IATA's data after 1990.  Except where otherwise noted,
-# IATA SSIM is the source for entries after 1990.
-#
-# Another source occasionally used is Edward W. Whitman, World Time Differences,
-# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
-# I found in the UCLA library.
-#
-# For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
-# https://www.jstor.org/stable/1774359
-#
-# A reliable and entertaining source about time zones is
-# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
-#
-# I invented the abbreviation marked "*".
-# The following abbreviations are from other sources.
-# Corrections are welcome!
-#		std	dst
-#		LMT		Local Mean Time
-#	  8:00	AWST	AWDT	Western Australia
-#	  9:30	ACST	ACDT	Central Australia
-#	 10:00	AEST	AEDT	Eastern Australia
-#	 10:00	GST	GDT*	Guam through 2000
-#	 10:00	ChST		Chamorro
-#	 11:30	NZMT	NZST	New Zealand through 1945
-#	 12:00	NZST	NZDT	New Zealand 1946-present
-#	-11:00	SST		Samoa
-#	-10:00	HST		Hawaii
-#
-# See the 'northamerica' file for Hawaii.
-# See the 'southamerica' file for Easter I and the GalĂĄpagos Is.
-
-###############################################################################
-
-# Australia
-
-# From Paul Eggert (2014-06-30):
-# Daylight saving time has long been controversial in Australia, pitting
-# region against region, rural against urban, and local against global.
-# For example, in her review of Graeme Davison's _The Unforgiving
-# Minute: how Australians learned to tell the time_ (1993), Perth native
-# Phillipa J Martyr wrote, "The section entitled 'Saving Daylight' was
-# very informative, but was (as can, sadly, only be expected from a
-# Melbourne-based study) replete with the usual chuckleheaded
-# Queenslanders and straw-chewing yokels from the West prattling fables
-# about fading curtains and crazed farm animals."
-# Electronic Journal of Australian and New Zealand History (1997-03-03)
-# http://www.jcu.edu.au/aff/history/reviews/davison.htm
-
-# From Paul Eggert (2005-12-08):
-# Implementation Dates of Daylight Saving Time within Australia
-# http://www.bom.gov.au/climate/averages/tables/dst_times.shtml
-# summarizes daylight saving issues in Australia.
-
-# From Arthur David Olson (2005-12-12):
-# Lawlink NSW:Daylight Saving in New South Wales
-# http://www.lawlink.nsw.gov.au/lawlink/Corporate/ll_agdinfo.nsf/pages/community_relations_daylight_saving
-# covers New South Wales in particular.
-
-# From John Mackin (1991-03-06):
-# We in Australia have _never_ referred to DST as 'daylight' time.
-# It is called 'summer' time.  Now by a happy coincidence, 'summer'
-# and 'standard' happen to start with the same letter; hence, the
-# abbreviation does _not_ change...
-# The legislation does not actually define abbreviations, at least
-# in this State, but the abbreviation is just commonly taken to be the
-# initials of the phrase, and the legislation here uniformly uses
-# the phrase 'summer time' and does not use the phrase 'daylight
-# time'.
-# Announcers on the Commonwealth radio network, the ABC (for Australian
-# Broadcasting Commission), use the phrases 'Eastern Standard Time'
-# or 'Eastern Summer Time'.  (Note, though, that as I say in the
-# current australasia file, there is really no such thing.)  Announcers
-# on its overseas service, Radio Australia, use the same phrases
-# prefixed by the word 'Australian' when referring to local times;
-# time announcements on that service, naturally enough, are made in UTC.
-
-# From Paul Eggert (2014-06-30):
-#
-# Inspired by Mackin's remarks quoted above, earlier versions of this
-# file used "EST" for both Eastern Standard Time and Eastern Summer
-# Time in Australia, and similarly for "CST", "CWST", and "WST".
-# However, these abbreviations were confusing and were not common
-# practice among Australians, and there were justifiable complaints
-# about them, so I attempted to survey current Australian usage.
-# For the tz database, the full English phrase is not that important;
-# what matters is the abbreviation.  It's difficult to survey the web
-# directly for abbreviation usage, as there are so many false hits for
-# strings like "EST" and "EDT", so I looked for pages that defined an
-# abbreviation for eastern or central DST in Australia, and got the
-# following numbers of unique hits for the listed Google queries:
-#
-#   10 "Eastern Daylight Time AEST" site:au [some are false hits]
-#   10 "Eastern Summer Time AEST" site:au
-#   10 "Summer Time AEDT" site:au
-#   13 "EDST Eastern Daylight Saving Time" site:au
-#   18 "Summer Time ESST" site:au
-#   28 "Eastern Daylight Saving Time EDST" site:au
-#   39 "EDT Eastern Daylight Time" site:au [some are false hits]
-#   53 "Eastern Daylight Time EDT" site:au [some are false hits]
-#   54 "AEDT Australian Eastern Daylight Time" site:au
-#  182 "Eastern Daylight Time AEDT" site:au
-#
-#   17 "Central Daylight Time CDT" site:au [some are false hits]
-#   46 "Central Daylight Time ACDT" site:au
-#
-# I tried several other variants (e.g., "Eastern Summer Time EST") but
-# they all returned fewer than 10 unique hits.  I also looked for pages
-# mentioning both "western standard time" and an abbreviation, since
-# there is no WST in the US to generate false hits, and found:
-#
-#  156 "western standard time" AWST site:au
-#  226 "western standard time" WST site:au
-#
-# I then surveyed the top ten newspapers in Australia by circulation as
-# listed in Wikipedia, using Google queries like "AEDT site:heraldsun.com.au"
-# and obtaining estimated counts from the initial page of search results.
-# All ten papers greatly preferred "AEDT" to "EDT".  The papers
-# surveyed were the Herald Sun, The Daily Telegraph, The Courier-Mail,
-# The Sydney Morning Herald, The West Australian, The Age, The Advertiser,
-# The Australian, The Financial Review, and The Herald (Newcastle).
-#
-# I also searched for historical usage, to see whether abbreviations
-# like "AEDT" are new.  A Trove search <http://trove.nla.gov.au/>
-# found only one newspaper (The Canberra Times) with a house style
-# dating back to the 1970s, I expect because other newspapers weren't
-# fully indexed.  The Canberra Times strongly preferred abbreviations
-# like "AEDT".  The first occurrence of "AEDT" was a World Weather
-# column (1971-11-17, page 24), and of "ACDT" was a Scoreboard column
-# (1993-01-24, p 16).  The style was the typical usage but was not
-# strictly enforced; for example, "Welcome to the twilight zones ..."
-# (1994-10-29, p 1) uses the abbreviations AEST/AEDT, CST/CDT, and
-# WST, and goes on to say, "The confusion and frustration some feel
-# about the lack of uniformity among Australia's six states and two
-# territories has prompted one group to form its very own political
-# party -- the Sydney-based Daylight Saving Extension Party."
-#
-# I also surveyed federal government sources.  They did not agree:
-#
-#   The Australian Government (2014-03-26)
-#   http://australia.gov.au/about-australia/our-country/time
-#   (This document was produced by the Department of Finance.)
-#   AEST ACST AWST AEDT ACDT
-#
-#   Bureau of Meteorology (2012-11-08)
-#   http://www.bom.gov.au/climate/averages/tables/daysavtm.shtml
-#   EST CST WST EDT CDT
-#
-#   Civil Aviation Safety Authority (undated)
-#   http://services.casa.gov.au/outnback/inc/pages/episode3/episode-3_time_zones.shtml
-#   EST CST WST (no abbreviations given for DST)
-#
-#   Geoscience Australia (2011-11-24)
-#   http://www.ga.gov.au/geodesy/astro/sunrise.jsp
-#   AEST ACST AWST AEDT ACDT
-#
-#   Parliamentary Library (2008-11-10)
-#   https://www.aph.gov.au/binaries/library/pubs/rp/2008-09/09rp14.pdf
-#   EST CST WST preferred for standard time; AEST AEDT ACST ACDT also used
-#
-#   The Transport Safety Bureau has an extensive series of accident reports,
-#   and investigators seem to use whatever abbreviation they like.
-#   Googling site:atsb.gov.au found the following number of unique hits:
-#   311 "ESuT", 195 "EDT", 26 "AEDT", 83 "CSuT", 46 "CDT".
-#   "_SuT" tended to appear in older reports, and "A_DT" tended to
-#   appear in reports of events with international implications.
-#
-# From the above it appears that there is a working consensus in
-# Australia to use trailing "DT" for daylight saving time; although
-# some sources use trailing "SST" or "ST" or "SuT" they are by far in
-# the minority.  The case for leading "A" is weaker, but since it
-# seems to be preferred in the overall web and is preferred in all
-# the leading newspaper websites and in many government departments,
-# it has a stronger case than omitting the leading "A".  The current
-# version of the database therefore uses abbreviations like "AEST" and
-# "AEDT" for Australian time zones.
-
-# From Paul Eggert (1995-12-19):
-# Shanks & Pottenger report 2:00 for all autumn changes in Australia and NZ.
-# Mark Prior writes that his newspaper
-# reports that NSW's fall 1995 change will occur at 2:00,
-# but Robert Elz says it's been 3:00 in Victoria since 1970
-# and perhaps the newspaper's '2:00' is referring to standard time.
-# For now we'll continue to assume 2:00s for changes since 1960.
-
-# From Eric Ulevik (1998-01-05):
-#
-# Here are some URLs to Australian time legislation. These URLs are stable,
-# and should probably be included in the data file. There are probably more
-# relevant entries in this database.
-#
-# NSW (including LHI and Broken Hill):
-# Standard Time Act 1987 (updated 1995-04-04)
-# https://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html
-# ACT
-# Standard Time and Summer Time Act 1972
-# https://www.austlii.edu.au/au/legis/act/consol_act/stasta1972279/index.html
-# SA
-# Standard Time Act, 1898
-# https://www.austlii.edu.au/au/legis/sa/consol_act/sta1898137/index.html
-
-# From David Grosz (2005-06-13):
-# It was announced last week that Daylight Saving would be extended by
-# one week next year to allow for the 2006 Commonwealth Games.
-# Daylight Saving is now to end for next year only on the first Sunday
-# in April instead of the last Sunday in March.
-#
-# From Gwillim Law (2005-06-14):
-# I did some Googling and found that all of those states (and territory) plan
-# to extend DST together in 2006.
-# ACT: http://www.cmd.act.gov.au/mediareleases/fileread.cfm?file=86.txt
-# New South Wales: http://www.thecouriermail.news.com.au/common/story_page/0,5936,15538869%255E1702,00.html
-# South Australia: http://www.news.com.au/story/0,10117,15555031-1246,00.html
-# Tasmania: http://www.media.tas.gov.au/release.php?id=14772
-# Victoria: I wasn't able to find anything separate, but the other articles
-# allude to it.
-# But not Queensland
-# http://www.news.com.au/story/0,10117,15564030-1248,00.html
-
-# Northern Territory
-
-# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
-# # The NORTHERN TERRITORY..  [ Courtesy N.T. Dept of the Chief Minister ]
-# #					[ Nov 1990 ]
-# #	N.T. have never utilised any DST due to sub-tropical/tropical location.
-# ...
-# Zone        Australia/North         9:30    -       CST
-
-# From Bradley White (1991-03-04):
-# A recent excerpt from an Australian newspaper...
-# the Northern Territory do[es] not have daylight saving.
-
-# Western Australia
-
-# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
-# #  The state of WESTERN AUSTRALIA..  [ Courtesy W.A. dept Premier+Cabinet ]
-# #						[ Nov 1990 ]
-# #	W.A. suffers from a great deal of public and political opposition to
-# #	DST in principle. A bill is brought before parliament in most years, but
-# #	usually defeated either in the upper house, or in party caucus
-# #	before reaching parliament.
-# ...
-# Zone	Australia/West		8:00	AW	%sST
-# ...
-# Rule	AW	1974	only	-	Oct	lastSun	2:00	1:00	D
-# Rule	AW	1975	only	-	Mar	Sun>=1	3:00	0	W
-# Rule	AW	1983	only	-	Oct	lastSun	2:00	1:00	D
-# Rule	AW	1984	only	-	Mar	Sun>=1	3:00	0	W
-
-# From Bradley White (1991-03-04):
-# A recent excerpt from an Australian newspaper...
-# Western Australia...do[es] not have daylight saving.
-
-# From John D. Newman via Bradley White (1991-11-02):
-# Western Australia is still on "winter time". Some DH in Sydney
-# rang me at home a few days ago at 6.00am. (He had just arrived at
-# work at 9.00am.)
-# W.A. is switching to Summer Time on Nov 17th just to confuse
-# everybody again.
-
-# From Arthur David Olson (1992-03-08):
-# The 1992 ending date used in the rules is a best guess;
-# it matches what was used in the past.
-
-# The Australian Bureau of Meteorology FAQ
-# http://www.bom.gov.au/faq/faqgen.htm
-# (1999-09-27) writes that Giles Meteorological Station uses
-# South Australian time even though it's located in Western Australia.
-
-# From Paul Eggert (2018-04-01):
-# The Guardian Express of Perth, Australia reported today that the
-# government decided to advance the clocks permanently on January 1,
-# 2019, from UT +08 to UT +09.  The article noted that an exemption
-# would be made for people aged 61 and over, who "can apply in writing
-# to have the extra hour of sunshine removed from their area."  See:
-# Daylight saving coming to WA in 2019. Guardian Express. 2018-04-01.
-# https://www.communitynews.com.au/guardian-express/news/exclusive-daylight-savings-coming-wa-summer-2018/
-
-# Queensland
-
-# From Paul Eggert (2018-02-26):
-# I lack access to the following source for Queensland DST:
-# Pearce C. History of daylight saving time in Queensland.
-# Queensland Hist J. 2017 Aug;23(6):389-403
-# https://search.informit.com.au/documentSummary;dn=994682348436426;res=IELHSS
-
-# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
-# #   The state of QUEENSLAND.. [ Courtesy Qld. Dept Premier Econ&Trade Devel ]
-# #						[ Dec 1990 ]
-# ...
-# Zone	Australia/Queensland	10:00	AQ	%sST
-# ...
-# Rule	AQ	1971	only	-	Oct	lastSun	2:00	1:00	D
-# Rule	AQ	1972	only	-	Feb	lastSun	3:00	0	E
-# Rule	AQ	1989	max	-	Oct	lastSun	2:00	1:00	D
-# Rule	AQ	1990	max	-	Mar	Sun>=1	3:00	0	E
-
-# From Bradley White (1989-12-24):
-# "Australia/Queensland" now observes daylight time (i.e. from
-# October 1989).
-
-# From Bradley White (1991-03-04):
-# A recent excerpt from an Australian newspaper...
-# ...Queensland...[has] agreed to end daylight saving
-# at 3am tomorrow (March 3)...
-
-# From John Mackin (1991-03-06):
-# I can certainly confirm for my part that Daylight Saving in NSW did in fact
-# end on Sunday, 3 March.  I don't know at what hour, though.  (It surprised
-# me.)
-
-# From Bradley White (1992-03-08):
-# ...there was recently a referendum in Queensland which resulted
-# in the experimental daylight saving system being abandoned. So, ...
-# ...
-# Rule	QLD	1989	1991	-	Oct	lastSun	2:00	1:00	D
-# Rule	QLD	1990	1992	-	Mar	Sun>=1	3:00	0	S
-# ...
-
-# From Arthur David Olson (1992-03-08):
-# The chosen rules the union of the 1971/1972 change and the 1989-1992 changes.
-
-# From Christopher Hunt (2006-11-21), after an advance warning
-# from Jesper NĂžrgaard Welen (2006-11-01):
-# WA are trialing DST for three years.
-# http://www.parliament.wa.gov.au/parliament/bills.nsf/9A1B183144403DA54825721200088DF1/$File/Bill175-1B.pdf
-
-# From Rives McDow (2002-04-09):
-# The most interesting region I have found consists of three towns on the
-# southern coast....  South Australia observes daylight saving time; Western
-# Australia does not.  The two states are one and a half hours apart.  The
-# residents decided to forget about this nonsense of changing the clock so
-# much and set the local time 20 hours and 45 minutes from the
-# international date line, or right in the middle of the time of South
-# Australia and Western Australia....
-#
-# From Paul Eggert (2002-04-09):
-# This is confirmed by the section entitled
-# "What's the deal with time zones???" in
-# http://www.earthsci.unimelb.edu.au/~awatkins/null.html
-#
-# From Alex Livingston (2006-12-07):
-# ... it was just on four years ago that I drove along the Eyre Highway,
-# which passes through eastern Western Australia close to the southern
-# coast of the continent.
-#
-# I paid particular attention to the time kept there. There can be no
-# dispute that UTC+08:45 was considered "the time" from the border
-# village just inside the border with South Australia to as far west
-# as just east of Caiguna. There can also be no dispute that Eucla is
-# the largest population centre in this zone....
-#
-# Now that Western Australia is observing daylight saving, the
-# question arose whether this part of the state would follow suit. I
-# just called the border village and confirmed that indeed they have,
-# meaning that they are now observing UTC+09:45.
-#
-# (2006-12-09):
-# I personally doubt that either experimentation with daylight saving
-# in WA or its introduction in SA had anything to do with the genesis
-# of this time zone.  My hunch is that it's been around since well
-# before 1975.  I remember seeing it noted on road maps decades ago.
-
-# From Paul Eggert (2006-12-15):
-# For lack of better info, assume the tradition dates back to the
-# introduction of standard time in 1895.
-
-
-# southeast Australia
-#
-# From Paul Eggert (2007-07-23):
-# Starting autumn 2008 Victoria, NSW, South Australia, Tasmania and the ACT
-# end DST the first Sunday in April and start DST the first Sunday in October.
-# http://www.theage.com.au/news/national/daylight-savings-to-span-six-months/2007/06/27/1182623966703.html
-
-
-# South Australia
-
-# From Bradley White (1991-03-04):
-# A recent excerpt from an Australian newspaper...
-# ...South Australia...[has] agreed to end daylight saving
-# at 3am tomorrow (March 3)...
-
-# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
-# #   The state of SOUTH AUSTRALIA....[ Courtesy of S.A. Dept of Labour ]
-# #						[ Nov 1990 ]
-# ...
-# Zone	Australia/South		9:30	AS	%sST
-# ...
-# Rule	 AS	1971	max	-	Oct	lastSun	2:00	1:00	D
-# Rule	 AS	1972	1985	-	Mar	Sun>=1	3:00	0	C
-# Rule	 AS	1986	1990	-	Mar	Sun>=15	3:00	0	C
-# Rule	 AS	1991	max	-	Mar	Sun>=1	3:00	0	C
-
-# From Bradley White (1992-03-11):
-# Recent correspondence with a friend in Adelaide
-# contained the following exchange:  "Due to the Adelaide Festival,
-# South Australia delays setting back our clocks for a few weeks."
-
-# From Robert Elz (1992-03-13):
-# I heard that apparently (or at least, it appears that)
-# South Aus will have an extra 3 weeks daylight saving every even
-# numbered year (from 1990).  That's when the Adelaide Festival
-# is on...
-
-# From Robert Elz (1992-03-16, 00:57:07 +1000):
-# DST didn't end in Adelaide today (yesterday)....
-# But whether it's "4th Sunday" or "2nd last Sunday" I have no idea whatever...
-# (it's just as likely to be "the Sunday we pick for this year"...).
-
-# From Bradley White (1994-04-11):
-# If Sun, 15 March, 1992 was at +1030 as kre asserts, but yet Sun, 20 March,
-# 1994 was at +0930 as John Connolly's customer seems to assert, then I can
-# only conclude that the actual rule is more complicated....
-
-# From John Warburton (1994-10-07):
-# The new Daylight Savings dates for South Australia ...
-# was gazetted in the Government Hansard on Sep 26 1994....
-# start on last Sunday in October and end in last sunday in March.
-
-# From Paul Eggert (2007-07-23):
-# See "southeast Australia" above for 2008 and later.
-
-# Tasmania
-
-# The rules for 1967 through 1991 were reported by George Shepherd
-# via Simon Woodhead via Robert Elz (1991-03-06):
-# #  The state of TASMANIA.. [Courtesy Tasmanian Dept of Premier + Cabinet ]
-# #					[ Nov 1990 ]
-
-# From Bill Hart via Guy Harris (1991-10-10):
-# Oh yes, the new daylight savings rules are uniquely tasmanian, we have
-# 6 weeks a year now when we are out of sync with the rest of Australia
-# (but nothing new about that).
-
-# From Alex Livingston (1999-10-04):
-# I heard on the ABC (Australian Broadcasting Corporation) radio news on the
-# (long) weekend that Tasmania, which usually goes its own way in this regard,
-# has decided to join with most of NSW, the ACT, and most of Victoria
-# (Australia) and start daylight saving on the last Sunday in August in 2000
-# instead of the first Sunday in October.
-
-# Sim Alam (2000-07-03) reported a legal citation for the 2000/2001 rules:
-# http://www.thelaw.tas.gov.au/fragview/42++1968+GS3A@EN+2000070300
-
-# From Paul Eggert (2007-07-23):
-# See "southeast Australia" above for 2008 and later.
-
-# Victoria
-
-# The rules for 1971 through 1991 were reported by George Shepherd
-# via Simon Woodhead via Robert Elz (1991-03-06):
-# #   The state of VICTORIA.. [ Courtesy of Vic. Dept of Premier + Cabinet ]
-# #						[ Nov 1990 ]
-
-# From Scott Harrington (2001-08-29):
-# On KQED's "City Arts and Lectures" program last night I heard an
-# interesting story about daylight savings time.  Dr. John Heilbron was
-# discussing his book "The Sun in the Church: Cathedrals as Solar
-# Observatories"[1], and in particular the Shrine of Remembrance[2] located
-# in Melbourne, Australia.
-#
-# Apparently the shrine's main purpose is a beam of sunlight which
-# illuminates a special spot on the floor at the 11th hour of the 11th day
-# of the 11th month (Remembrance Day) every year in memory of Australia's
-# fallen WWI soldiers.  And if you go there on Nov. 11, at 11am local time,
-# you will indeed see the sunbeam illuminate the special spot at the
-# expected time.
-#
-# However, that is only because of some special mirror contraption that had
-# to be employed, since due to daylight savings time, the true solar time of
-# the remembrance moment occurs one hour later (or earlier?).  Perhaps
-# someone with more information on this jury-rig can tell us more.
-#
-# [1] http://www.hup.harvard.edu/catalog/HEISUN.html
-# [2] http://www.shrine.org.au
-
-# From Paul Eggert (2007-07-23):
-# See "southeast Australia" above for 2008 and later.
-
-# New South Wales
-
-# From Arthur David Olson:
-# New South Wales and subjurisdictions have their own ideas of a fun time.
-# Based on law library research by John Mackin,
-# who notes:
-#	In Australia, time is not legislated federally, but rather by the
-#	individual states.  Thus, while such terms as "Eastern Standard Time"
-#	[I mean, of course, Australian EST, not any other kind] are in common
-#	use, _they have NO REAL MEANING_, as they are not defined in the
-#	legislation.  This is very important to understand.
-#	I have researched New South Wales time only...
-
-# From Eric Ulevik (1999-05-26):
-# DST will start in NSW on the last Sunday of August, rather than the usual
-# October in 2000.  See: Matthew Moore,
-# Two months more daylight saving, Sydney Morning Herald (1999-05-26).
-# http://www.smh.com.au/news/9905/26/pageone/pageone4.html
-
-# From Paul Eggert (1999-09-27):
-# See the following official NSW source:
-# Daylight Saving in New South Wales.
-# http://dir.gis.nsw.gov.au/cgi-bin/genobject/document/other/daylightsaving/tigGmZ
-#
-# Narrabri Shire (NSW) council has announced it will ignore the extension of
-# daylight saving next year.  See:
-# Narrabri Council to ignore daylight saving
-# http://abc.net.au/news/regionals/neweng/monthly/regeng-22jul1999-1.htm
-# (1999-07-22).  For now, we'll wait to see if this really happens.
-#
-# Victoria will follow NSW.  See:
-# Vic to extend daylight saving (1999-07-28)
-# http://abc.net.au/local/news/olympics/1999/07/item19990728112314_1.htm
-#
-# However, South Australia rejected the DST request.  See:
-# South Australia rejects Olympics daylight savings request (1999-07-19)
-# http://abc.net.au/news/olympics/1999/07/item19990719151754_1.htm
-#
-# Queensland also will not observe DST for the Olympics.  See:
-# Qld says no to daylight savings for Olympics
-# http://abc.net.au/news/olympics/1999/06/item19990601114608_1.htm
-# (1999-06-01), which quotes Queensland Premier Peter Beattie as saying
-# "Look you've got to remember in my family when this came up last time
-# I voted for it, my wife voted against it and she said to me it's all very
-# well for you, you don't have to worry about getting the children out of
-# bed, getting them to school, getting them to sleep at night.
-# I've been through all this argument domestically...my wife rules."
-#
-# Broken Hill will stick with South Australian time in 2000.  See:
-# Broken Hill to be behind the times (1999-07-21)
-# http://abc.net.au/news/regionals/brokenh/monthly/regbrok-21jul1999-6.htm
-
-# IATA SSIM (1998-09) says that the spring 2000 change for Australian
-# Capital Territory, New South Wales except Lord Howe Island and Broken
-# Hill, and Victoria will be August 27, presumably due to the Sydney Olympics.
-
-# From Eric Ulevik, referring to Sydney's Sun Herald (2000-08-13), page 29:
-# The Queensland Premier Peter Beattie is encouraging northern NSW
-# towns to use Queensland time.
-
-# From Paul Eggert (2007-07-23):
-# See "southeast Australia" above for 2008 and later.
-
-# Yancowinna
-
-# From John Mackin (1989-01-04):
-# 'Broken Hill' means the County of Yancowinna.
-
-# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
-# # YANCOWINNA..  [ Confirmation courtesy of Broken Hill Postmaster ]
-# #					[ Dec 1990 ]
-# ...
-# # Yancowinna uses Central Standard Time, despite [its] location on the
-# # New South Wales side of the S.A. border. Most business and social dealings
-# # are with CST zones, therefore CST is legislated by local government
-# # although the switch to Summer Time occurs in line with N.S.W. There have
-# # been years when this did not apply, but the historical data is not
-# # presently available.
-# Zone	Australia/Yancowinna	9:30	 AY	%sST
-# ...
-# Rule	 AY	1971	1985	-	Oct	lastSun	2:00	1:00	D
-# Rule	 AY	1972	only	-	Feb	lastSun	3:00	0	C
-# [followed by other Rules]
-
-# Lord Howe Island
-
-# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
-# LHI...		[ Courtesy of Pauline Van Winsen ]
-#					[ Dec 1990 ]
-# Lord Howe Island is located off the New South Wales coast, and is half an
-# hour ahead of NSW time.
-
-# From James Lonergan, Secretary, Lord Howe Island Board (2000-01-27):
-# Lord Howe Island summer time in 2000/2001 will commence on the same
-# date as the rest of NSW (i.e. 2000-08-27).  For your information the
-# Lord Howe Island Board (controlling authority for the Island) is
-# seeking the community's views on various options for summer time
-# arrangements on the Island, e.g. advance clocks by 1 full hour
-# instead of only 30 minutes.  [Dependent] on the wishes of residents
-# the Board may approach the NSW government to change the existing
-# arrangements.  The starting date for summer time on the Island will
-# however always coincide with the rest of NSW.
-
-# From James Lonergan, Secretary, Lord Howe Island Board (2000-10-25):
-# Lord Howe Island advances clocks by 30 minutes during DST in NSW and retards
-# clocks by 30 minutes when DST finishes. Since DST was most recently
-# introduced in NSW, the "changeover" time on the Island has been 02:00 as
-# shown on clocks on LHI. I guess this means that for 30 minutes at the start
-# of DST, LHI is actually 1 hour ahead of the rest of NSW.
-
-# From Paul Eggert (2006-03-22):
-# For Lord Howe dates we use Shanks & Pottenger through 1989, and
-# Lonergan thereafter.  For times we use Lonergan.
-
-# From Paul Eggert (2007-07-23):
-# See "southeast Australia" above for 2008 and later.
-
-# From Steffen Thorsen (2009-04-28):
-# According to the official press release, South Australia's extended daylight
-# saving period will continue with the same rules as used during the 2008-2009
-# summer (southern hemisphere).
-#
-# From
-# http://www.safework.sa.gov.au/uploaded_files/DaylightDatesSet.pdf
-# The extended daylight saving period that South Australia has been trialling
-# for over the last year is now set to be ongoing.
-# Daylight saving will continue to start on the first Sunday in October each
-# year and finish on the first Sunday in April the following year.
-# Industrial Relations Minister, Paul Caica, says this provides South Australia
-# with a consistent half hour time difference with NSW, Victoria, Tasmania and
-# the ACT for all 52 weeks of the year...
-#
-# We have a wrap-up here:
-# https://www.timeanddate.com/news/time/south-australia-extends-dst.html
-###############################################################################
-
-# New Zealand
-
-# From Mark Davies (1990-10-03):
-# the 1989/90 year was a trial of an extended "daylight saving" period.
-# This trial was deemed successful and the extended period adopted for
-# subsequent years (with the addition of a further week at the start).
-# source - phone call to Ministry of Internal Affairs Head Office.
-
-# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
-# # The Country of New Zealand   (Australia's east island -) Gee they hate that!
-# #				   or is Australia the west island of N.Z.
-# #	[ courtesy of Geoff Tribble.. Auckland N.Z. ]
-# #				[ Nov 1990 ]
-# ...
-# Rule	NZ      1974    1988	-	Oct	lastSun	2:00	1:00	D
-# Rule	NZ	1989	max	-	Oct	Sun>=1	2:00	1:00	D
-# Rule	NZ      1975    1989	-	Mar	Sun>=1	3:00	0	S
-# Rule	NZ	1990	max	-	Mar	lastSun	3:00	0	S
-# ...
-# Zone	NZ			12:00	NZ		NZ%sT	# New Zealand
-# Zone	NZ-CHAT			12:45	-		NZ-CHAT # Chatham Island
-
-# From Arthur David Olson (1992-03-08):
-# The chosen rules use the Davies October 8 values for the start of DST in 1989
-# rather than the October 1 value.
-
-# From Paul Eggert (1995-12-19);
-# Shank & Pottenger report 2:00 for all autumn changes in Australia and NZ.
-# Robert Uzgalis writes that the New Zealand Daylight
-# Savings Time Order in Council dated 1990-06-18 specifies 2:00 standard
-# time on both the first Sunday in October and the third Sunday in March.
-# As with Australia, we'll assume the tradition is 2:00s, not 2:00.
-#
-# From Paul Eggert (2006-03-22):
-# The Department of Internal Affairs (DIA) maintains a brief history,
-# as does Carol Squires; see tz-link.html for the full references.
-# Use these sources in preference to Shanks & Pottenger.
-#
-# For Chatham, IATA SSIM (1991/1999) gives the NZ rules but with
-# transitions at 2:45 local standard time; this confirms that Chatham
-# is always exactly 45 minutes ahead of Auckland.
-
-# From Colin Sharples (2007-04-30):
-# DST will now start on the last Sunday in September, and end on the
-# first Sunday in April.  The changes take effect this year, meaning
-# that DST will begin on 2007-09-30 2008-04-06.
-# http://www.dia.govt.nz/diawebsite.nsf/wpg_URL/Services-Daylight-Saving-Daylight-saving-to-be-extended
-
-# From Paul Eggert (2014-07-14):
-# Chatham Island time was formally standardized on 1957-01-01 by
-# New Zealand's Standard Time Amendment Act 1956 (1956-10-26).
-# https://www.austlii.edu.au/nz/legis/hist_act/staa19561956n100244.pdf
-# According to Google Books snippet view, a speaker in the New Zealand
-# parliamentary debates in 1956 said "Clause 78 makes provision for standard
-# time in the Chatham Islands.  The time there is 45 minutes in advance of New
-# Zealand time.  I understand that is the time they keep locally, anyhow."
-# For now, assume this practice goes back to the introduction of standard time
-# in New Zealand, as this would make Chatham Islands time almost exactly match
-# LMT back when New Zealand was at UT +11:30; also, assume Chatham Islands did
-# not observe New Zealand's prewar DST.
-
-###############################################################################
-
-
-# Fiji
-
-# Howse writes (p 153) that in 1879 the British governor of Fiji
-# enacted an ordinance standardizing the islands on Antipodean Time
-# instead of the American system (which was one day behind).
-
-# From Rives McDow (1998-10-08):
-# Fiji will introduce DST effective 0200 local time, 1998-11-01
-# until 0300 local time 1999-02-28.  Each year the DST period will
-# be from the first Sunday in November until the last Sunday in February.
-
-# From Paul Eggert (2000-01-08):
-# IATA SSIM (1999-09) says DST ends 0100 local time.  Go with McDow.
-
-# From the BBC World Service in
-# http://news.bbc.co.uk/2/hi/asia-pacific/205226.stm (1998-10-31 16:03 UTC):
-# The Fijian government says the main reasons for the time change is to
-# improve productivity and reduce road accidents.... [T]he move is also
-# intended to boost Fiji's ability to attract tourists to witness the dawning
-# of the new millennium.
-
-# http://www.fiji.gov.fj/press/2000_09/2000_09_13-05.shtml (2000-09-13)
-# reports that Fiji has discontinued DST.
-
-
-# Kiribati
-
-# From Paul Eggert (1996-01-22):
-# Today's _Wall Street Journal_ (page 1) reports that Kiribati
-# "declared it the same day [throughout] the country as of Jan. 1, 1995"
-# as part of the competition to be first into the 21st century.
-
-# From Kerry Shetline (2018-02-03):
-# December 31 was the day that was skipped, so that the transition
-# would be from Friday December 30, 1994 to Sunday January 1, 1995.
-# From Paul Eggert (2018-02-04):
-# One source for this is page 202 of: Bartky IR. One Time Fits All:
-# The Campaigns for Global Uniformity (2007).
-
-# Kwajalein
-
-# From an AP article (1993-08-22):
-# "The nearly 3,000 Americans living on this remote Pacific atoll have a good
-# excuse for not remembering Saturday night: there wasn't one.  Residents were
-# going to bed Friday night and waking up Sunday morning because at midnight
-# -- 8 A.M. Eastern daylight time on Saturday -- Kwajalein was jumping from
-# one side of the international date line to the other."
-# "In Marshall Islands, Friday is followed by Sunday", NY Times. 1993-08-22.
-# https://www.nytimes.com/1993/08/22/world/in-marshall-islands-friday-is-followed-by-sunday.html
-
-# From Phake Nick (2018-10-27):
-# <https://wiki.suikawiki.org/n/ć—æŽ‹çŸ€ćł¶ăźæš™æș–時> ... pointed out that
-# currently tzdata say Pacific/Kwajalein switched from GMT+11 to GMT-12 in
-# 1969 October without explanation, however an 1993 article from NYT say it
-# synchorized its day with US mainland about 40 years ago and thus the switch
-# should occur at around 1950s instead.
-#
-# From Paul Eggert (2018-11-18):
-# The NYT (actually, AP) article is vague and possibly wrong about this.
-# The article says the earlier switch was "40 years ago when the United States
-# Army established a missile test range here".  However, the Kwajalein Test
-# Center was established on 1960-10-01 and was run by the US Navy.  It was
-# transferred to the US Army on 1964-07-01.  See "Seize the High Ground"
-# <https://history.army.mil/html/books/070/70-88-1/cmhPub_70-88-1.pdf>.
-# Given that Shanks was right on the money about the 1993 change, I'm inclined
-# to take Shanks's word for the 1969 change unless we find better evidence.
-
-
-# N Mariana Is, Guam
-
-# From Phake Nick (2018-10-27):
-# Guam Island was briefly annexed by Japan during ... year 1941-1944 ...
-# however there are no detailed information about what time it use during that
-# period.  It would probably be reasonable to assume Guam use GMT+9 during
-# that period of time like the surrounding area.
-
-# From Paul Eggert (2018-11-18):
-# Howse writes (p 153) "The Spaniards, on the other hand, reached the
-# Philippines and the Ladrones from America," and implies that the Ladrones
-# (now called the Marianas) kept American date for quite some time.
-# For now, we assume the Ladrones switched at the same time as the Philippines;
-# see Asia/Manila.
-#
-# Use 1941-12-10 and 1944-07-31 for Guam WWII transitions, as the rough start
-# and end of Japanese control of Agana.  We don't know whether the Northern
-# Marianas followed Guam's DST rules from 1959 through 1977; for now, assume
-# they did as that avoids the need for a separate zone due to our 1970 cutoff.
-#
-# US Public Law 106-564 (2000-12-23) made UT +10 the official standard time,
-# under the name "Chamorro Standard Time".  There is no official abbreviation,
-# but Congressman Robert A. Underwood, author of the bill that became law,
-# wrote in a press release (2000-12-27) that he will seek the use of "ChST".
-
-# See also the commentary for Micronesia.
-
-
-# Marshall Is
-# See the commentary for Micronesia.
-
-
-# Micronesia (and nearby)
-
-# From Paul Eggert (2018-11-18):
-# Like the Ladrones (see Guam commentary), assume the Spanish East Indies
-# kept American time until the Philippines switched at the end of 1844.
-
-# Alan Eugene Davis writes (1996-03-16),
-# "I am certain, having lived there for the past decade, that 'Truk'
-# (now properly known as Chuuk) ... is in the time zone GMT+10."
-#
-# Shanks & Pottenger write that Truk switched from UT +10 to +11
-# on 1978-10-01; ignore this for now.
-
-# From Paul Eggert (1999-10-29):
-# The Federated States of Micronesia Visitors Board writes in
-# The Federated States of Micronesia - Visitor Information (1999-01-26)
-# http://www.fsmgov.org/info/clocks.html
-# that Truk and Yap are UT +10, and Ponape and Kosrae are +11.
-# We don't know when Kosrae switched from +12; assume January 1 for now.
-
-# From Phake Nick (2018-10-27):
-#
-# From a Japanese wiki site https://wiki.suikawiki.org/n/ć—æŽ‹çŸ€ćł¶ăźæš™æș–時
-# ...
-# For "Southern Islands" (modern region of Mariana + Palau + Federation of
-# Micronesia + Marshall Islands):
-#
-# A 1906 Japanese magazine shown the Caroline Islands and Mariana Islands
-# who was occupied by Germany at the time as GMT+10, together with the like
-# of German New Guinea.  However there is a marking saying it have not been
-# implemented (yet).  No further information after that were found.
-#
-# Japan invaded those islands in 1914, and records shows that they were
-# instructed to use JST at the time.
-#
-# 1915 January telecommunication record on the Jaluit Atoll shows they use
-# the meridian of 170E as standard time (GMT+11:20), which is similar to the
-# longitude of the atoll.
-# 1915 February record say the 170E standard time is to be used until
-# February 9 noon, and after February 9 noon they are to use JST.
-# However these are time used within the Japanese Military at the time and
-# probably does not reflect the time used by local resident at the time (that
-# is if they keep their own time back then)
-#
-# In January 1919 the occupying force issued a command that split the area
-# into three different timezone with meridian of 135E, 150E, 165E (JST+0, +1,
-# +2), and the command was to become effective from February 1 of the same
-# year.  Despite the target of the command is still only for the occupying
-# force itself, further publication have described the time as the standard
-# time for the occupied area and thus it can probably be seen as such.
-#  * Area that use meridian of 135E: Palau and Yap civil administration area
-#    (Southern Islands Western Standard Time)
-#  * Area that use meridian of 150E: Truk (Chuuk) and Saipan civil
-#    administration area (Southern Islands Central Standard Time)
-#  * Area that use meridian of 165E: Ponape (Pohnpei) and Jaluit civil
-#    administration area (Southern Islands Eastern Standard Time).
-#  * In the next few years Japanese occupation of those islands have been
-#    formalized via League of Nation Mandate (South Pacific Mandate) and formal
-#    governance structure have been established, these district [become
-#    subprefectures] and timezone classification have been inherited as standard
-#    time of the area.
-#  * Saipan subprefecture include Mariana islands (exclude Guam which was
-#    occupied by America at the time), Palau and Yap subprefecture rule the
-#    Western Caroline Islands with 137E longitude as border, Truk and Ponape
-#    subprefecture rule the Eastern Caroline Islands with 154E as border, Ponape
-#    subprefecture also rule part of Marshall Islands to the west of 164E
-#    starting from (1918?) and Jaluit subprefecture rule the rest of the
-#    Marshall Islands.
-#
-# And then in year 1937, an announcement was made to change the time in the
-# area into 2 timezones:
-#  * Area that use meridian of 135E: area administered by Palau, Yap and
-#    Saipan subprefecture (Southern Islands Western Standard Time)
-#  * Area that use meridian of 150E: area administered by Truk (Chuuk),
-#    Ponape (Pohnpei) and Jaluit subprefecture (Southern Islands Eastern
-#    Standard Time)
-#
-# Another announcement issued in 1941 say that on April 1 that year,
-# standard time of the Southern Islands would be changed to use the meridian
-# of 135E (GMT+9), and thus abolishing timezone different within the area.
-#
-# Then Pacific theater of WWII started and Japan slowly lose control on the
-# island.  The webpage I linked above contain no information during this
-# period of time....
-#
-# After the end of WWII, in 1946 February, a document written by the
-# (former?) Japanese military personnel describe there are 3 hours time
-# different between Caroline islands time/Wake island time and the Chungking
-# time, which would mean the time being used there at the time was GMT+10.
-#
-# After that, the area become Trust Territories of the Pacific Islands
-# under American administration from year 1947.  The site listed some
-# American/International books/maps/publications about time used in those
-# area during this period of time but they doesn't seems to be reliable
-# information so it would be the best if someone know where can more reliable
-# information can be found.
-#
-#
-# From Paul Eggert (2018-11-18):
-#
-# For the above, use vague dates like "1914" and "1945" for transitions that
-# plausibly exist but for which the details are not known.  The information
-# for Wake is too sketchy to act on.
-#
-# The 1906 GMT+10 info about German-controlled islands might not have been
-# done, so omit it from the data for now.
-#
-# The Jaluit info governs Kwajalein.
-
-
-# Midway
-
-# From Charles T O'Connor, KMTH DJ (1956),
-# quoted in the KTMH section of the Radio Heritage Collection
-# <http://radiodx.com/spdxr/KMTH.htm> (2002-12-31):
-# For the past two months we've been on what is known as Daylight
-# Saving Time.  This time has put us on air at 5am in the morning,
-# your time down there in New Zealand.  Starting September 2, 1956
-# we'll again go back to Standard Time.  This'll mean that we'll go to
-# air at 6am your time.
-#
-# From Paul Eggert (2003-03-23):
-# We don't know the date of that quote, but we'll guess they
-# started DST on June 3.  Possibly DST was observed other years
-# in Midway, but we have no record of it.
-
-# Nauru
-
-# From Phake Nick (2018-10-31):
-# Currently, the tz database say Nauru use LMT until 1921, and then
-# switched to GMT+11:30 for the next two decades.
-# However, a number of timezone map published in America/Japan back then
-# showed its timezone as GMT+11 per https://wiki.suikawiki.org/n/ăƒŠă‚Šăƒ«ăźæš™æș–時
-# And it would also be nice if the 1921 transition date could be sourced.
-# ...
-# The "Nauru Standard Time Act 1978 Time Change"
-# http://ronlaw.gov.nr/nauru_lpms/files/gazettes/4b23a17d2030150404db7a5fa5872f52.pdf#page=3
-# based on "Nauru Standard Time Act 1978 Time Change"
-# http://www.paclii.org/nr/legis/num_act/nsta1978207/ defined that "Nauru
-# Alternative Time" (GMT+12) should be in effect from 1979 Feb.
-#
-# From Paul Eggert (2018-11-19):
-# The 1921-01-15 introduction of standard time is in Shanks; it is also in
-# "Standard Time Throughout the World", US National Bureau of Standards (1935),
-# page 3, which does not give the UT offset.  In response to a comment by
-# Phake Nick I set the Nauru time of occupation by Japan to
-# 1942-08-29/1945-09-08 by using dates from:
-# https://en.wikipedia.org/wiki/Japanese_occupation_of_Nauru
-
-# Norfolk
-
-# From Alexander Krivenyshev (2015-09-23):
-# Norfolk Island will change ... from +1130 to +1100:
-# https://www.comlaw.gov.au/Details/F2015L01483/Explanatory%20Statement/Text
-# ... at 12.30 am (by legal time in New South Wales) on 4 October 2015.
-# http://www.norfolkisland.gov.nf/nia/MediaRelease/Media%20Release%20Norfolk%20Island%20Standard%20Time%20Change.pdf
-
-# From Paul Eggert (2015-09-23):
-# Transitions before 2015 are from timeanddate.com, which consulted
-# the Norfolk Island Museum and the Australian Bureau of Meteorology's
-# Norfolk Island station, and found no record of Norfolk observing DST
-# other than in 1974/5.  See:
-# https://www.timeanddate.com/time/australia/norfolk-island.html
-
-# Palau
-# See commentary for Micronesia.
-
-# Pitcairn
-
-# From Rives McDow (1999-11-08):
-# A Proclamation was signed by the Governor of Pitcairn on the 27th March 1998
-# with regard to Pitcairn Standard Time.  The Proclamation is as follows.
-#
-#	The local time for general purposes in the Islands shall be
-#	Co-ordinated Universal time minus 8 hours and shall be known
-#	as Pitcairn Standard Time.
-#
-# ... I have also seen Pitcairn listed as UTC minus 9 hours in several
-# references, and can only assume that this was an error in interpretation
-# somehow in light of this proclamation.
-
-# From Rives McDow (1999-11-09):
-# The Proclamation regarding Pitcairn time came into effect on 27 April 1998
-# ... at midnight.
-
-# From Howie Phelps (1999-11-10), who talked to a Pitcairner via shortwave:
-# Betty Christian told me yesterday that their local time is the same as
-# Pacific Standard Time. They used to be œ hour different from us here in
-# Sacramento but it was changed a couple of years ago.
-
-
-# (Western) Samoa and American Samoa
-
-# Howse writes (p 153) that after the 1879 standardization on Antipodean
-# time by the British governor of Fiji, the King of Samoa decided to change
-# "the date in his kingdom from the Antipodean to the American system,
-# ordaining - by a masterpiece of diplomatic flattery - that
-# the Fourth of July should be celebrated twice in that year."
-# This happened in 1892, according to the Evening News (Sydney) of 1892-07-20.
-# https://www.staff.science.uu.nl/~gent0113/idl/idl.htm
-
-# Although Shanks & Pottenger says they both switched to UT -11:30
-# in 1911, and to -11 in 1950. many earlier sources give -11
-# for American Samoa, e.g., the US National Bureau of Standards
-# circular "Standard Time Throughout the World", 1932.
-# Assume American Samoa switched to -11 in 1911, not 1950,
-# and that after 1950 they agreed until (western) Samoa skipped a
-# day in 2011.  Assume also that the Samoas follow the US and New
-# Zealand's "ST"/"DT" style of daylight-saving abbreviations.
-
-
-# Tonga
-
-# From Paul Eggert (1996-01-22):
-# Today's _Wall Street Journal_ (p 1) reports that "Tonga has been plotting
-# to sneak ahead of [New Zealanders] by introducing daylight-saving time."
-# Since Kiribati has moved the Date Line it's not clear what Tonga will do.
-
-# Don Mundell writes in the 1997-02-20 Tonga Chronicle
-# How Tonga became 'The Land where Time Begins':
-# http://www.tongatapu.net.to/tonga/homeland/timebegins.htm
-#
-# Until 1941 Tonga maintained a standard time 50 minutes ahead of NZST
-# 12 hours and 20 minutes ahead of GMT.  When New Zealand adjusted its
-# standard time in 1940s, Tonga had the choice of subtracting from its
-# local time to come on the same standard time as New Zealand or of
-# advancing its time to maintain the differential of 13°
-# (approximately 50 minutes ahead of New Zealand time).
-#
-# Because His Majesty King Tāufaʻāhau Tupou IV, then Crown Prince
-# Tungī, preferred to ensure Tonga's title as the land where time
-# begins, the Legislative Assembly approved the latter change.
-#
-# But some of the older, more conservative members from the outer
-# islands objected. "If at midnight on Dec. 31, we move ahead 40
-# minutes, as your Royal Highness wishes, what becomes of the 40
-# minutes we have lost?"
-#
-# The Crown Prince, presented an unanswerable argument: "Remember that
-# on the World Day of Prayer, you would be the first people on Earth
-# to say your prayers in the morning."
-
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger say the transition was on 1968-10-01; go with Mundell.
-
-# From Eric Ulevik (1999-05-03):
-# Tonga's director of tourism, who is also secretary of the National Millennium
-# Committee, has a plan to get Tonga back in front.
-# He has proposed a one-off move to tropical daylight saving for Tonga from
-# October to March, which has won approval in principle from the Tongan
-# Government.
-
-# From Steffen Thorsen (1999-09-09):
-# * Tonga will introduce DST in November
-#
-# I was given this link by John Letts:
-# http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm
-#
-# I have not been able to find exact dates for the transition in November
-# yet. By reading this article it seems like Fiji will be 14 hours ahead
-# of UTC as well, but as far as I know Fiji will only be 13 hours ahead
-# (12 + 1 hour DST).
-
-# From Arthur David Olson (1999-09-20):
-# According to <http://www.tongaonline.com/news/sept1799.html>:
-# "Daylight Savings Time will take effect on Oct. 2 through April 15, 2000
-# and annually thereafter from the first Saturday in October through the
-# third Saturday of April.  Under the system approved by Privy Council on
-# Sept. 10, clocks must be turned ahead one hour on the opening day and
-# set back an hour on the closing date."
-# Alas, no indication of the time of day.
-
-# From Rives McDow (1999-10-06):
-# Tonga started its Daylight Saving on Saturday morning October 2nd at 0200am.
-# Daylight Saving ends on April 16 at 0300am which is Sunday morning.
-
-# From Steffen Thorsen (2000-10-31):
-# Back in March I found a notice on the website http://www.tongaonline.com
-# that Tonga changed back to standard time one month early, on March 19
-# instead of the original reported date April 16. Unfortunately, the article
-# is no longer available on the site, and I did not make a copy of the
-# text, and I have forgotten to report it here.
-# (Original URL was <http://www.tongaonline.com/news/march162000.htm>)
-
-# From Rives McDow (2000-12-01):
-# Tonga is observing DST as of 2000-11-04 and will stop on 2001-01-27.
-
-# From Sione Moala-Mafi (2001-09-20) via Rives McDow:
-# At 2:00am on the first Sunday of November, the standard time in the Kingdom
-# shall be moved forward by one hour to 3:00am.  At 2:00am on the last Sunday
-# of January the standard time in the Kingdom shall be moved backward by one
-# hour to 1:00am.
-
-# From Pulu ʻAnau (2002-11-05):
-# The law was for 3 years, supposedly to get renewed.  It wasn't.
-
-# From Pulu ʻAnau (2016-10-27):
-# http://mic.gov.to/news-today/press-releases/6375-daylight-saving-set-to-run-from-6-november-2016-to-15-january-2017
-# Cannot find anyone who knows the rules, has seen the duration or has seen
-# the cabinet decision, but it appears we are following Fiji's rule set.
-#
-# From Tim Parenti (2016-10-26):
-# Assume Tonga will observe DST from the first Sunday in November at 02:00
-# through the third Sunday in January at 03:00, like Fiji, for now.
-
-# From David Wade (2017-10-18):
-# In August government was disolved by the King.  The current prime minister
-# continued in office in care taker mode.  It is easy to see that few
-# decisions will be made until elections 16th November.
-#
-# From Paul Eggert (2017-10-18):
-# For now, guess that DST is discontinued.  That's what the IATA is guessing.
-
-
-# Wake
-
-# From Vernice Anderson, Personal Secretary to Philip Jessup,
-# US Ambassador At Large (oral history interview, 1971-02-02):
-#
-# Saturday, the 14th [of October, 1950] - ...  The time was all the
-# more confusing at that point, because we had crossed the
-# International Date Line, thus getting two Sundays.  Furthermore, we
-# discovered that Wake Island had two hours of daylight saving time
-# making calculation of time in Washington difficult if not almost
-# impossible.
-#
-# https://www.trumanlibrary.org/oralhist/andrsonv.htm
-
-# From Paul Eggert (2003-03-23):
-# We have no other report of DST in Wake Island, so omit this info for now.
-
-# See also the commentary for Micronesia.
-
-
-###############################################################################
-
-# The International Date Line
-
-# From Gwillim Law (2000-01-03):
-#
-# The International Date Line is not defined by any international standard,
-# convention, or treaty.  Mapmakers are free to draw it as they please.
-# Reputable mapmakers will simply ensure that every point of land appears on
-# the correct side of the IDL, according to the date legally observed there.
-#
-# When Kiribati adopted a uniform date in 1995, thereby moving the Phoenix and
-# Line Islands to the west side of the IDL (or, if you prefer, moving the IDL
-# to the east side of the Phoenix and Line Islands), I suppose that most
-# mapmakers redrew the IDL following the boundary of Kiribati.  Even that line
-# has a rather arbitrary nature.  The straight-line boundaries between Pacific
-# island nations that are shown on many maps are based on an international
-# convention, but are not legally binding national borders.... The date is
-# governed by the IDL; therefore, even on the high seas, there may be some
-# places as late as fourteen hours later than UTC.  And, since the IDL is not
-# an international standard, there are some places on the high seas where the
-# correct date is ambiguous.
-
-# From Wikipedia <https://en.wikipedia.org/wiki/Time_zone> (2005-08-31):
-# Before 1920, all ships kept local apparent time on the high seas by setting
-# their clocks at night or at the morning sight so that, given the ship's
-# speed and direction, it would be 12 o'clock when the Sun crossed the ship's
-# meridian (12 o'clock = local apparent noon).  During 1917, at the
-# Anglo-French Conference on Time-keeping at Sea, it was recommended that all
-# ships, both military and civilian, should adopt hourly standard time zones
-# on the high seas.  Whenever a ship was within the territorial waters of any
-# nation it would use that nation's standard time.  The captain was permitted
-# to change his ship's clocks at a time of his choice following his ship's
-# entry into another zone time - he often chose midnight.  These zones were
-# adopted by all major fleets between 1920 and 1925 but not by many
-# independent merchant ships until World War II.
-
-# From Paul Eggert, using references suggested by Oscar van Vlijmen
-# (2005-03-20):
-#
-# The American Practical Navigator (2002)
-# http://pollux.nss.nima.mil/pubs/pubs_j_apn_sections.html?rid=187
-# talks only about the 180-degree meridian with respect to ships in
-# international waters; it ignores the international date line.
--- a/test/jdk/sun/util/calendar/zi/tzdata/backward	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,152 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# tzdb links for backward compatibility
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# This file provides links between current names for timezones
-# and their old names.  Many names changed in late 1993.
-
-# Link	TARGET			LINK-NAME
-Link	Africa/Nairobi		Africa/Asmera
-Link	Africa/Abidjan		Africa/Timbuktu
-Link	America/Argentina/Catamarca	America/Argentina/ComodRivadavia
-Link	America/Adak		America/Atka
-Link	America/Argentina/Buenos_Aires	America/Buenos_Aires
-Link	America/Argentina/Catamarca	America/Catamarca
-Link	America/Atikokan	America/Coral_Harbour
-Link	America/Argentina/Cordoba	America/Cordoba
-Link	America/Tijuana		America/Ensenada
-Link	America/Indiana/Indianapolis	America/Fort_Wayne
-Link	America/Indiana/Indianapolis	America/Indianapolis
-Link	America/Argentina/Jujuy	America/Jujuy
-Link	America/Indiana/Knox	America/Knox_IN
-Link	America/Kentucky/Louisville	America/Louisville
-Link	America/Argentina/Mendoza	America/Mendoza
-Link	America/Toronto		America/Montreal
-Link	America/Rio_Branco	America/Porto_Acre
-Link	America/Argentina/Cordoba	America/Rosario
-Link	America/Tijuana		America/Santa_Isabel
-Link	America/Denver		America/Shiprock
-Link	America/Port_of_Spain	America/Virgin
-Link	Pacific/Auckland	Antarctica/South_Pole
-Link	Asia/Ashgabat		Asia/Ashkhabad
-Link	Asia/Kolkata		Asia/Calcutta
-Link	Asia/Shanghai		Asia/Chongqing
-Link	Asia/Shanghai		Asia/Chungking
-Link	Asia/Dhaka		Asia/Dacca
-Link	Asia/Shanghai		Asia/Harbin
-Link	Asia/Urumqi		Asia/Kashgar
-Link	Asia/Kathmandu		Asia/Katmandu
-Link	Asia/Macau		Asia/Macao
-Link	Asia/Yangon		Asia/Rangoon
-Link	Asia/Ho_Chi_Minh	Asia/Saigon
-Link	Asia/Jerusalem		Asia/Tel_Aviv
-Link	Asia/Thimphu		Asia/Thimbu
-Link	Asia/Makassar		Asia/Ujung_Pandang
-Link	Asia/Ulaanbaatar	Asia/Ulan_Bator
-Link	Atlantic/Faroe		Atlantic/Faeroe
-Link	Europe/Oslo		Atlantic/Jan_Mayen
-Link	Australia/Sydney	Australia/ACT
-Link	Australia/Sydney	Australia/Canberra
-Link	Australia/Lord_Howe	Australia/LHI
-Link	Australia/Sydney	Australia/NSW
-Link	Australia/Darwin	Australia/North
-Link	Australia/Brisbane	Australia/Queensland
-Link	Australia/Adelaide	Australia/South
-Link	Australia/Hobart	Australia/Tasmania
-Link	Australia/Melbourne	Australia/Victoria
-Link	Australia/Perth		Australia/West
-Link	Australia/Broken_Hill	Australia/Yancowinna
-Link	America/Rio_Branco	Brazil/Acre
-Link	America/Noronha		Brazil/DeNoronha
-Link	America/Sao_Paulo	Brazil/East
-Link	America/Manaus		Brazil/West
-Link	America/Halifax		Canada/Atlantic
-Link	America/Winnipeg	Canada/Central
-# This line is commented out, as the name exceeded the 14-character limit
-# and was an unused misnomer.
-#Link	America/Regina		Canada/East-Saskatchewan
-Link	America/Toronto		Canada/Eastern
-Link	America/Edmonton	Canada/Mountain
-Link	America/St_Johns	Canada/Newfoundland
-Link	America/Vancouver	Canada/Pacific
-Link	America/Regina		Canada/Saskatchewan
-Link	America/Whitehorse	Canada/Yukon
-Link	America/Santiago	Chile/Continental
-Link	Pacific/Easter		Chile/EasterIsland
-Link	America/Havana		Cuba
-Link	Africa/Cairo		Egypt
-Link	Europe/Dublin		Eire
-Link	Etc/UTC			Etc/UCT
-Link	Europe/London		Europe/Belfast
-Link	Europe/Chisinau		Europe/Tiraspol
-Link	Europe/London		GB
-Link	Europe/London		GB-Eire
-Link	Etc/GMT			GMT+0
-Link	Etc/GMT			GMT-0
-Link	Etc/GMT			GMT0
-Link	Etc/GMT			Greenwich
-Link	Asia/Hong_Kong		Hongkong
-Link	Atlantic/Reykjavik	Iceland
-Link	Asia/Tehran		Iran
-Link	Asia/Jerusalem		Israel
-Link	America/Jamaica		Jamaica
-Link	Asia/Tokyo		Japan
-Link	Pacific/Kwajalein	Kwajalein
-Link	Africa/Tripoli		Libya
-Link	America/Tijuana		Mexico/BajaNorte
-Link	America/Mazatlan	Mexico/BajaSur
-Link	America/Mexico_City	Mexico/General
-Link	Pacific/Auckland	NZ
-Link	Pacific/Chatham		NZ-CHAT
-Link	America/Denver		Navajo
-Link	Asia/Shanghai		PRC
-Link	Pacific/Honolulu	Pacific/Johnston
-Link	Pacific/Pohnpei		Pacific/Ponape
-Link	Pacific/Pago_Pago	Pacific/Samoa
-Link	Pacific/Chuuk		Pacific/Truk
-Link	Pacific/Chuuk		Pacific/Yap
-Link	Europe/Warsaw		Poland
-Link	Europe/Lisbon		Portugal
-Link	Asia/Taipei		ROC
-Link	Asia/Seoul		ROK
-Link	Asia/Singapore		Singapore
-Link	Europe/Istanbul		Turkey
-Link	Etc/UTC			UCT
-Link	America/Anchorage	US/Alaska
-Link	America/Adak		US/Aleutian
-Link	America/Phoenix		US/Arizona
-Link	America/Chicago		US/Central
-Link	America/Indiana/Indianapolis	US/East-Indiana
-Link	America/New_York	US/Eastern
-Link	Pacific/Honolulu	US/Hawaii
-Link	America/Indiana/Knox	US/Indiana-Starke
-Link	America/Detroit		US/Michigan
-Link	America/Denver		US/Mountain
-Link	America/Los_Angeles	US/Pacific
-Link	Pacific/Pago_Pago	US/Samoa
-Link	Etc/UTC			UTC
-Link	Etc/UTC			Universal
-Link	Europe/Moscow		W-SU
-Link	Etc/UTC			Zulu
--- a/test/jdk/sun/util/calendar/zi/tzdata/etcetera	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# tzdb data for ships at sea and other miscellany
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# These entries are mostly present for historical reasons, so that
-# people in areas not otherwise covered by the tz files could "zic -l"
-# to a timezone that was right for their area.  These days, the
-# tz files cover almost all the inhabited world, and the only practical
-# need now for the entries that are not on UTC are for ships at sea
-# that cannot use POSIX TZ settings.
-
-# Starting with POSIX 1003.1-2001, the entries below are all
-# unnecessary as settings for the TZ environment variable.  E.g.,
-# instead of TZ='Etc/GMT+4' one can use the POSIX setting TZ='<-04>+4'.
-#
-# Do not use a POSIX TZ setting like TZ='GMT+4', which is four hours
-# behind GMT but uses the completely misleading abbreviation "GMT".
-
-Zone	Etc/GMT		0	-	GMT
-Zone	Etc/UTC		0	-	UTC
-
-# The following link uses older naming conventions,
-# but it belongs here, not in the file 'backward',
-# as functions like gmtime load the "GMT" file to handle leap seconds properly.
-# We want this to work even on installations that omit the other older names.
-Link	Etc/GMT				GMT
-
-Link	Etc/UTC				Etc/Universal
-Link	Etc/UTC				Etc/Zulu
-
-Link	Etc/GMT				Etc/Greenwich
-Link	Etc/GMT				Etc/GMT-0
-Link	Etc/GMT				Etc/GMT+0
-Link	Etc/GMT				Etc/GMT0
-
-# Be consistent with POSIX TZ settings in the Zone names,
-# even though this is the opposite of what many people expect.
-# POSIX has positive signs west of Greenwich, but many people expect
-# positive signs east of Greenwich.  For example, TZ='Etc/GMT+4' uses
-# the abbreviation "-04" and corresponds to 4 hours behind UT
-# (i.e. west of Greenwich) even though many people would expect it to
-# mean 4 hours ahead of UT (i.e. east of Greenwich).
-
-# Earlier incarnations of this package were not POSIX-compliant,
-# and had lines such as
-#		Zone	GMT-12		-12	-	GMT-1200
-# We did not want things to change quietly if someone accustomed to the old
-# way does a
-#		zic -l GMT-12
-# so we moved the names into the Etc subdirectory.
-# Also, the time zone abbreviations are now compatible with %z.
-
-Zone	Etc/GMT-14	14	-	+14
-Zone	Etc/GMT-13	13	-	+13
-Zone	Etc/GMT-12	12	-	+12
-Zone	Etc/GMT-11	11	-	+11
-Zone	Etc/GMT-10	10	-	+10
-Zone	Etc/GMT-9	9	-	+09
-Zone	Etc/GMT-8	8	-	+08
-Zone	Etc/GMT-7	7	-	+07
-Zone	Etc/GMT-6	6	-	+06
-Zone	Etc/GMT-5	5	-	+05
-Zone	Etc/GMT-4	4	-	+04
-Zone	Etc/GMT-3	3	-	+03
-Zone	Etc/GMT-2	2	-	+02
-Zone	Etc/GMT-1	1	-	+01
-Zone	Etc/GMT+1	-1	-	-01
-Zone	Etc/GMT+2	-2	-	-02
-Zone	Etc/GMT+3	-3	-	-03
-Zone	Etc/GMT+4	-4	-	-04
-Zone	Etc/GMT+5	-5	-	-05
-Zone	Etc/GMT+6	-6	-	-06
-Zone	Etc/GMT+7	-7	-	-07
-Zone	Etc/GMT+8	-8	-	-08
-Zone	Etc/GMT+9	-9	-	-09
-Zone	Etc/GMT+10	-10	-	-10
-Zone	Etc/GMT+11	-11	-	-11
-Zone	Etc/GMT+12	-12	-	-12
--- a/test/jdk/sun/util/calendar/zi/tzdata/europe	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4016 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# tzdb data for Europe and environs
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# This file is by no means authoritative; if you think you know better,
-# go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).  For more, please see
-# the file CONTRIBUTING in the tz distribution.
-
-# From Paul Eggert (2017-02-10):
-#
-# Unless otherwise specified, the source for data through 1990 is:
-# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
-# San Diego: ACS Publications, Inc. (2003).
-# Unfortunately this book contains many errors and cites no sources.
-#
-# Many years ago Gwillim Law wrote that a good source
-# for time zone data was the International Air Transport
-# Association's Standard Schedules Information Manual (IATA SSIM),
-# published semiannually.  Law sent in several helpful summaries
-# of the IATA's data after 1990.  Except where otherwise noted,
-# IATA SSIM is the source for entries after 1990.
-#
-# A reliable and entertaining source about time zones is
-# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
-#
-# Except where otherwise noted, Shanks & Pottenger is the source for
-# entries through 1991, and IATA SSIM is the source for entries afterwards.
-#
-# Other sources occasionally used include:
-#
-#	Edward W. Whitman, World Time Differences,
-#	Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated),
-#	which I found in the UCLA library.
-#
-#	William Willett, The Waste of Daylight, 19th edition
-#	<http://cs.ucla.edu/~eggert/The-Waste-of-Daylight-19th.pdf>
-#	[PDF] (1914-03)
-#
-#	Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
-#	<https://www.jstor.org/stable/1774359>.  He writes:
-#	"It is requested that corrections and additions to these tables
-#	may be sent to Mr. John Milne, Royal Geographical Society,
-#	Savile Row, London."  Nowadays please email them to tz@iana.org.
-#
-#	Byalokoz EL. New Counting of Time in Russia since July 1, 1919.
-#	This Russian-language source was consulted by Vladimir Karpinsky; see
-#	https://mm.icann.org/pipermail/tz/2014-August/021320.html
-#	The full Russian citation is:
-#	Đ‘ŃĐ»ĐŸĐșĐŸĐ·, ЕĐČĐłĐ”ĐœĐžĐč ЛюЮĐČĐžĐłĐŸĐČоч. ĐĐŸĐČыĐč счДт ĐČŃ€Đ”ĐŒĐ”ĐœĐž ĐČ Ń‚Đ”Ń‡Đ”ĐœĐžĐž ŃŃƒŃ‚ĐŸĐș
-#	ĐČĐČĐ”ĐŽĐ”ĐœĐœŃ‹Đč ĐŽĐ”ĐșŃ€Đ”Ń‚ĐŸĐŒ ĐĄĐŸĐČДта ĐœĐ°Ń€ĐŸĐŽĐœŃ‹Ń… ĐșĐŸĐŒĐžŃŃĐ°Ń€ĐŸĐČ ĐŽĐ»Ń ĐČсДĐč Đ ĐŸŃŃĐžĐž с 1-ĐłĐŸ
-#	ĐžŃŽĐ»Ń 1919 Đł. / ИзЎ. 2-Đ” ĐœĐ”Đ¶ĐŽŃƒĐČĐ”ĐŽĐŸĐŒŃŃ‚ĐČĐ”ĐœĐœĐŸĐč ĐșĐŸĐŒĐžŃŃĐžĐž. - ĐŸĐ”Ń‚Ń€ĐŸĐłŃ€Đ°ĐŽ:
-#	Đ”Đ”ŃŃŃ‚Đ°Ń ĐłĐŸŃ. топ., 1919.
-#	http://resolver.gpntb.ru/purl?docushare/dsweb/Get/Resource-2011/Byalokoz__E.L.__Novyy__schet__vremeni__v__techenie__sutok__izd__2(1).pdf
-#
-#	Brazil's Divisão Serviço da Hora (DSHO),
-#	History of Summer Time
-#	<http://pcdsh01.on.br/HISTHV.htm>
-#	(1998-09-21, in Portuguese)
-#
-# I invented the abbreviations marked '*' in the following table;
-# the rest are variants of the "xMT" pattern for a city's mean time,
-# or are from other sources.  Corrections are welcome!
-#                   std  dst  2dst
-#                   LMT             Local Mean Time
-#       -4:00       AST  ADT        Atlantic
-#        0:00       GMT  BST  BDST  Greenwich, British Summer
-#        0:00       GMT  IST        Greenwich, Irish Summer
-#        0:00       WET  WEST WEMT  Western Europe
-#        0:19:32.13 AMT* NST*       Amsterdam, Netherlands Summer (1835-1937)
-#        1:00       BST             British Standard (1968-1971)
-#        1:00       IST  GMT        Irish Standard (1968-) with winter DST
-#        1:00       CET  CEST CEMT  Central Europe
-#        1:00:14    SET             Swedish (1879-1899)
-#        1:36:34    RMT* LST*       Riga, Latvian Summer (1880-1926)*
-#        2:00       EET  EEST       Eastern Europe
-#        3:00       MSK  MSD  MDST* Moscow
-
-# From Peter Ilieve (1994-12-04), re EEC/EC/EU members:
-# The original six: Belgium, France, (West) Germany, Italy,
-# Luxembourg, the Netherlands.
-# Plus, from 1 Jan 73: Denmark, Ireland, United Kingdom.
-# Plus, from 1 Jan 81: Greece.
-# Plus, from 1 Jan 86: Spain, Portugal.
-# Plus, from 1 Jan 95: Austria, Finland, Sweden. (Norway negotiated terms for
-# entry but in a referendum on 28 Nov 94 the people voted No by 52.2% to 47.8%
-# on a turnout of 88.6%. This was almost the same result as Norway's previous
-# referendum in 1972, they are the only country to have said No twice.
-# Referendums in the other three countries voted Yes.)
-# ...
-# Estonia ... uses EU dates but not at 01:00 GMT, they use midnight GMT.
-# I don't think they know yet what they will do from 1996 onwards.
-# ...
-# There shouldn't be any [current members who are not using EU rules].
-# A Directive has the force of law, member states are obliged to enact
-# national law to implement it. The only contentious issue was the
-# different end date for the UK and Ireland, and this was always allowed
-# in the Directive.
-
-
-###############################################################################
-
-# Britain (United Kingdom) and Ireland (Eire)
-
-# From Peter Ilieve (1994-07-06):
-#
-# On 17 Jan 1994 the Independent, a UK quality newspaper, had a piece about
-# historical vistas along the Thames in west London. There was a photo
-# and a sketch map showing some of the sightlines involved. One paragraph
-# of the text said:
-#
-# 'An old stone obelisk marking a forgotten terrestrial meridian stands
-# beside the river at Kew. In the 18th century, before time and longitude
-# was standardised by the Royal Observatory in Greenwich, scholars observed
-# this stone and the movement of stars from Kew Observatory nearby. They
-# made their calculations and set the time for the Horse Guards and Parliament,
-# but now the stone is obscured by scrubwood and can only be seen by walking
-# along the towpath within a few yards of it.'
-#
-# I have a one inch to one mile map of London and my estimate of the stone's
-# position is 51° 28' 30" N, 0° 18' 45" W. The longitude should
-# be within about ±2". The Ordnance Survey grid reference is TQ172761.
-#
-# [This yields GMTOFF = -0:01:15 for London LMT in the 18th century.]
-
-# From Paul Eggert (1993-11-18):
-#
-# Howse writes that Britain was the first country to use standard time.
-# The railways cared most about the inconsistencies of local mean time,
-# and it was they who forced a uniform time on the country.
-# The original idea was credited to Dr. William Hyde Wollaston (1766-1828)
-# and was popularized by Abraham Follett Osler (1808-1903).
-# The first railway to adopt London time was the Great Western Railway
-# in November 1840; other railways followed suit, and by 1847 most
-# (though not all) railways used London time.  On 1847-09-22 the
-# Railway Clearing House, an industry standards body, recommended that GMT be
-# adopted at all stations as soon as the General Post Office permitted it.
-# The transition occurred on 12-01 for the L&NW, the Caledonian,
-# and presumably other railways; the January 1848 Bradshaw's lists many
-# railways as using GMT.  By 1855 the vast majority of public
-# clocks in Britain were set to GMT (though some, like the great clock
-# on Tom Tower at Christ Church, Oxford, were fitted with two minute hands,
-# one for local time and one for GMT).  The last major holdout was the legal
-# system, which stubbornly stuck to local time for many years, leading
-# to oddities like polls opening at 08:13 and closing at 16:13.
-# The legal system finally switched to GMT when the Statutes (Definition
-# of Time) Act took effect; it received the Royal Assent on 1880-08-02.
-#
-# In the tables below, we condense this complicated story into a single
-# transition date for London, namely 1847-12-01.  We don't know as much
-# about Dublin, so we use 1880-08-02, the legal transition time.
-
-# From Paul Eggert (2014-07-19):
-# The ancients had no need for daylight saving, as they kept time
-# informally or via hours whose length depended on the time of year.
-# Daylight saving time in its modern sense was invented by the
-# New Zealand entomologist George Vernon Hudson (1867-1946),
-# whose day job as a postal clerk led him to value
-# after-hours daylight in which to pursue his research.
-# In 1895 he presented a paper to the Wellington Philosophical Society
-# that proposed a two-hour daylight-saving shift.  See:
-# Hudson GV. On seasonal time-adjustment in countries south of lat. 30°.
-# Transactions and Proceedings of the New Zealand Institute. 1895;28:734
-# http://rsnz.natlib.govt.nz/volume/rsnz_28/rsnz_28_00_006110.html
-# Although some interest was expressed in New Zealand, his proposal
-# did not find its way into law and eventually it was almost forgotten.
-#
-# In England, DST was independently reinvented by William Willett (1857-1915),
-# a London builder and member of the Royal Astronomical Society
-# who circulated a pamphlet "The Waste of Daylight" (1907)
-# that proposed advancing clocks 20 minutes on each of four Sundays in April,
-# and retarding them by the same amount on four Sundays in September.
-# A bill was drafted in 1909 and introduced in Parliament several times,
-# but it met with ridicule and opposition, especially from farming interests.
-# Later editions of the pamphlet proposed one-hour summer time, and
-# it was eventually adopted as a wartime measure in 1916.
-# See: Summer Time Arrives Early, The Times (2000-05-18).
-# A monument to Willett was unveiled on 1927-05-21, in an open space in
-# a 45-acre wood near Chislehurst, Kent that was purchased by popular
-# subscription and open to the public.  On the south face of the monolith,
-# designed by G. W. Miller, is the William Willett Memorial Sundial,
-# which is permanently set to Summer Time.
-
-# From Winston Churchill (1934-04-28):
-# It is one of the paradoxes of history that we should owe the boon of
-# summer time, which gives every year to the people of this country
-# between 160 and 170 hours more daylight leisure, to a war which
-# plunged Europe into darkness for four years, and shook the
-# foundations of civilization throughout the world.
-#	-- "A Silent Toast to William Willett", Pictorial Weekly;
-#	republished in Finest Hour (Spring 2002) 1(114):26
-#	https://www.winstonchurchill.org/publications/finest-hour/finest-hour-114/a-silent-toast-to-william-willett-by-winston-s-churchill
-
-# From Paul Eggert (2015-08-08):
-# The OED Supplement says that the English originally said "Daylight Saving"
-# when they were debating the adoption of DST in 1908; but by 1916 this
-# term appears only in quotes taken from DST's opponents, whereas the
-# proponents (who eventually won the argument) are quoted as using "Summer".
-# The term "Summer Time" was introduced by Herbert Samuel, Home Secretary; see:
-# Viscount Samuel. Leisure in a Democracy. Cambridge University Press
-# ISBN 978-1-107-49471-8 (1949, reissued 2015), p 8.
-
-# From Arthur David Olson (1989-01-19):
-# A source at the British Information Office in New York avers that it's
-# known as "British" Summer Time in all parts of the United Kingdom.
-
-# Date: 4 Jan 89 08:57:25 GMT (Wed)
-# From: Jonathan Leffler
-# [British Summer Time] is fixed annually by Act of Parliament.
-# If you can predict what Parliament will do, you should be in
-# politics making a fortune, not computing.
-
-# From Chris Carrier (1996-06-14):
-# I remember reading in various wartime issues of the London Times the
-# acronym BDST for British Double Summer Time.  Look for the published
-# time of sunrise and sunset in The Times, when BDST was in effect, and
-# if you find a zone reference it will say, "All times B.D.S.T."
-
-# From Joseph S. Myers (1999-09-02):
-# ... some military cables (WO 219/4100 - this is a copy from the
-# main SHAEF archives held in the US National Archives, SHAEF/5252/8/516)
-# agree that the usage is BDST (this appears in a message dated 17 Feb 1945).
-
-# From Joseph S. Myers (2000-10-03):
-# On 18th April 1941, Sir Stephen Tallents of the BBC wrote to Sir
-# Alexander Maxwell of the Home Office asking whether there was any
-# official designation; the reply of the 21st was that there wasn't
-# but he couldn't think of anything better than the "Double British
-# Summer Time" that the BBC had been using informally.
-# https://www.polyomino.org.uk/british-time/bbc-19410418.png
-# https://www.polyomino.org.uk/british-time/ho-19410421.png
-
-# From Sir Alexander Maxwell in the above-mentioned letter (1941-04-21):
-# [N]o official designation has as far as I know been adopted for the time
-# which is to be introduced in May....
-# I cannot think of anything better than "Double British Summer Time"
-# which could not be said to run counter to any official description.
-
-# From Paul Eggert (2000-10-02):
-# Howse writes (p 157) 'DBST' too, but 'BDST' seems to have been common
-# and follows the more usual convention of putting the location name first,
-# so we use 'BDST'.
-
-# Peter Ilieve (1998-04-19) described at length
-# the history of summer time legislation in the United Kingdom.
-# Since 1998 Joseph S. Myers has been updating
-# and extending this list, which can be found in
-# https://www.polyomino.org.uk/british-time/
-
-# From Joseph S. Myers (1998-01-06):
-#
-# The legal time in the UK outside of summer time is definitely GMT, not UTC;
-# see Lord Tanlaw's speech
-# https://www.publications.parliament.uk/pa/ld199798/ldhansrd/vo970611/text/70611-10.htm#70611-10_head0
-# (Lords Hansard 11 June 1997 columns 964 to 976).
-
-# From Paul Eggert (2006-03-22):
-#
-# For lack of other data, follow Shanks & Pottenger for Eire in 1940-1948.
-#
-# Given Ilieve and Myers's data, the following claims by Shanks & Pottenger
-# are incorrect:
-#     * Wales did not switch from GMT to daylight saving time until
-#	1921 Apr 3, when they began to conform with the rest of Great Britain.
-# Actually, Wales was identical after 1880.
-#     * Eire had two transitions on 1916 Oct 1.
-# It actually just had one transition.
-#     * Northern Ireland used single daylight saving time throughout WW II.
-# Actually, it conformed to Britain.
-#     * GB-Eire changed standard time to 1 hour ahead of GMT on 1968-02-18.
-# Actually, that date saw the usual switch to summer time.
-# Standard time was not changed until 1968-10-27 (the clocks didn't change).
-#
-# Here is another incorrect claim by Shanks & Pottenger:
-#     * Jersey, Guernsey, and the Isle of Man did not switch from GMT
-#	to daylight saving time until 1921 Apr 3, when they began to
-#	conform with Great Britain.
-# S.R.&O. 1916, No. 382 and HO 45/10811/312364 (quoted above) say otherwise.
-#
-# The following claim by Shanks & Pottenger is possible though doubtful;
-# we'll ignore it for now.
-#     * Dublin's 1971-10-31 switch was at 02:00, even though London's was 03:00.
-
-# From Paul Eggert (2017-12-04):
-#
-# Dunsink Observatory (8 km NW of Dublin's center) was to Dublin as
-# Greenwich was to London.  For example:
-#
-#   "Timeball on the ballast office is down.  Dunsink time."
-#   -- James Joyce, Ulysses
-#
-# The abbreviation DMT stood for "Dublin Mean Time" or "Dunsink Mean Time";
-# this being Ireland, opinions differed.
-#
-# Whitman says Dublin/Dunsink Mean Time was UT-00:25:21, which agrees
-# with measurements of recent visitors to the Meridian Room of Dunsink
-# Observatory; see Malone D. Dunsink and timekeeping. 2016-01-24.
-# <https://www.maths.tcd.ie/~dwmalone/time/dunsink.html>.  Malone
-# writes that the Nautical Almanac listed UT-00:25:22 until 1896, when
-# it moved to UT-00:25:21.1 (I confirmed that the 1893 edition used
-# the former and the 1896 edition used the latter).  Evidently the
-# news of this change propagated slowly, as Milne 1899 still lists
-# UT-00:25:22 and cites the International Telegraph Bureau.  As it is
-# not clear that there was any practical significance to the change
-# from UT-00:25:22 to UT-00:25:21.1 in civil timekeeping, omit this
-# transition for now and just use the latter value, omitting its
-# fraction since our format cannot represent fractions.
-
-# "Countess Markievicz ... claimed that the [1916] abolition of Dublin Mean Time
-# was among various actions undertaken by the 'English' government that
-# would 'put the whole country into the SF (Sinn FĂ©in) camp'.  She claimed
-# Irish 'public feeling (was) outraged by forcing of English time on us'."
-# -- Parsons M. Dublin lost its time zone - and 25 minutes - after 1916 Rising.
-# Irish Times 2014-10-27.
-# https://www.irishtimes.com/news/politics/dublin-lost-its-time-zone-and-25-minutes-after-1916-rising-1.1977411
-
-# From Joseph S. Myers (2005-01-26):
-# Irish laws are available online at <http://www.irishstatutebook.ie>.
-# These include various relating to legal time, for example:
-#
-# ZZA13Y1923.html ZZA12Y1924.html ZZA8Y1925.html ZZSIV20PG1267.html
-#
-# ZZSI71Y1947.html ZZSI128Y1948.html ZZSI23Y1949.html ZZSI41Y1950.html
-# ZZSI27Y1951.html ZZSI73Y1952.html
-#
-# ZZSI11Y1961.html ZZSI232Y1961.html ZZSI182Y1962.html
-# ZZSI167Y1963.html ZZSI257Y1964.html ZZSI198Y1967.html
-# ZZA23Y1968.html ZZA17Y1971.html
-#
-# ZZSI67Y1981.html ZZSI212Y1982.html ZZSI45Y1986.html
-# ZZSI264Y1988.html ZZSI52Y1990.html ZZSI371Y1992.html
-# ZZSI395Y1994.html ZZSI484Y1997.html ZZSI506Y2001.html
-#
-# [These are all relative to the root, e.g., the first is
-# <http://www.irishstatutebook.ie/ZZA13Y1923.html>.]
-#
-# (These are those I found, but there could be more.  In any case these
-# should allow various updates to the comments in the europe file to cover
-# the laws applicable in Ireland.)
-#
-# (Note that the time in the Republic of Ireland since 1968 has been defined
-# in terms of standard time being GMT+1 with a period of winter time when it
-# is GMT, rather than standard time being GMT with a period of summer time
-# being GMT+1.)
-
-# From Paul Eggert (1999-03-28):
-# Clive Feather (<news:859845706.26043.0@office.demon.net>, 1997-03-31)
-# reports that Folkestone (Cheriton) Shuttle Terminal uses Concession Time
-# (CT), equivalent to French civil time.
-# Julian Hill (<news:36118128.5A14@virgin.net>, 1998-09-30) reports that
-# trains between Dollands Moor (the freight facility next door)
-# and Frethun run in CT.
-# My admittedly uninformed guess is that the terminal has two authorities,
-# the French concession operators and the British civil authorities,
-# and that the time depends on who you're talking to.
-# If, say, the British police were called to the station for some reason,
-# I would expect the official police report to use GMT/BST and not CET/CEST.
-# This is a borderline case, but for now let's stick to GMT/BST.
-
-# From an anonymous contributor (1996-06-02):
-# The law governing time in Ireland is under Statutory Instrument SI 395/94,
-# which gives force to European Union 7th Council Directive No. 94/21/EC.
-# Under this directive, the Minister for Justice in Ireland makes appropriate
-# regulations. I spoke this morning with the Secretary of the Department of
-# Justice (tel +353 1 678 9711) who confirmed to me that the correct name is
-# "Irish Summer Time", abbreviated to "IST".
-#
-# From Paul Eggert (2017-12-07):
-# The 1996 anonymous contributor's goal was to determine the correct
-# abbreviation for summer time in Dublin and so the contributor
-# focused on the "IST", not on the "Irish Summer Time".  Though the
-# "IST" was correct, the "Irish Summer Time" appears to have been an
-# error, as Ireland's Standard Time (Amendment) Act, 1971 states that
-# standard time in Ireland remains at UT +01 and is observed in
-# summer, and that Greenwich mean time is observed in winter.  (Thanks
-# to Derick Rethans for pointing out the error.)  That is, when
-# Ireland amended the 1968 act that established UT +01 as Irish
-# Standard Time, it left standard time unchanged and established GMT
-# as a negative daylight saving time in winter.  So, in this database
-# IST stands for Irish Summer Time for timestamps before 1968, and for
-# Irish Standard Time after that.  See:
-# http://www.irishstatutebook.ie/eli/1971/act/17/enacted/en/print
-
-# Michael Deckers (2017-06-01) gave the following URLs for Ireland's
-# Summer Time Act, 1925 and Summer Time Orders, 1926 and 1947:
-# http://www.irishstatutebook.ie/eli/1925/act/8/enacted/en/print
-# http://www.irishstatutebook.ie/eli/1926/sro/919/made/en/print
-# http://www.irishstatutebook.ie/eli/1947/sro/71/made/en/print
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-# Summer Time Act, 1916
-Rule	GB-Eire	1916	only	-	May	21	2:00s	1:00	BST
-Rule	GB-Eire	1916	only	-	Oct	 1	2:00s	0	GMT
-# S.R.&O. 1917, No. 358
-Rule	GB-Eire	1917	only	-	Apr	 8	2:00s	1:00	BST
-Rule	GB-Eire	1917	only	-	Sep	17	2:00s	0	GMT
-# S.R.&O. 1918, No. 274
-Rule	GB-Eire	1918	only	-	Mar	24	2:00s	1:00	BST
-Rule	GB-Eire	1918	only	-	Sep	30	2:00s	0	GMT
-# S.R.&O. 1919, No. 297
-Rule	GB-Eire	1919	only	-	Mar	30	2:00s	1:00	BST
-Rule	GB-Eire	1919	only	-	Sep	29	2:00s	0	GMT
-# S.R.&O. 1920, No. 458
-Rule	GB-Eire	1920	only	-	Mar	28	2:00s	1:00	BST
-# S.R.&O. 1920, No. 1844
-Rule	GB-Eire	1920	only	-	Oct	25	2:00s	0	GMT
-# S.R.&O. 1921, No. 363
-Rule	GB-Eire	1921	only	-	Apr	 3	2:00s	1:00	BST
-Rule	GB-Eire	1921	only	-	Oct	 3	2:00s	0	GMT
-# S.R.&O. 1922, No. 264
-Rule	GB-Eire	1922	only	-	Mar	26	2:00s	1:00	BST
-Rule	GB-Eire	1922	only	-	Oct	 8	2:00s	0	GMT
-# The Summer Time Act, 1922
-Rule	GB-Eire	1923	only	-	Apr	Sun>=16	2:00s	1:00	BST
-Rule	GB-Eire	1923	1924	-	Sep	Sun>=16	2:00s	0	GMT
-Rule	GB-Eire	1924	only	-	Apr	Sun>=9	2:00s	1:00	BST
-Rule	GB-Eire	1925	1926	-	Apr	Sun>=16	2:00s	1:00	BST
-# The Summer Time Act, 1925
-Rule	GB-Eire	1925	1938	-	Oct	Sun>=2	2:00s	0	GMT
-Rule	GB-Eire	1927	only	-	Apr	Sun>=9	2:00s	1:00	BST
-Rule	GB-Eire	1928	1929	-	Apr	Sun>=16	2:00s	1:00	BST
-Rule	GB-Eire	1930	only	-	Apr	Sun>=9	2:00s	1:00	BST
-Rule	GB-Eire	1931	1932	-	Apr	Sun>=16	2:00s	1:00	BST
-Rule	GB-Eire	1933	only	-	Apr	Sun>=9	2:00s	1:00	BST
-Rule	GB-Eire	1934	only	-	Apr	Sun>=16	2:00s	1:00	BST
-Rule	GB-Eire	1935	only	-	Apr	Sun>=9	2:00s	1:00	BST
-Rule	GB-Eire	1936	1937	-	Apr	Sun>=16	2:00s	1:00	BST
-Rule	GB-Eire	1938	only	-	Apr	Sun>=9	2:00s	1:00	BST
-Rule	GB-Eire	1939	only	-	Apr	Sun>=16	2:00s	1:00	BST
-# S.R.&O. 1939, No. 1379
-Rule	GB-Eire	1939	only	-	Nov	Sun>=16	2:00s	0	GMT
-# S.R.&O. 1940, No. 172 and No. 1883
-Rule	GB-Eire	1940	only	-	Feb	Sun>=23	2:00s	1:00	BST
-# S.R.&O. 1941, No. 476
-Rule	GB-Eire	1941	only	-	May	Sun>=2	1:00s	2:00	BDST
-Rule	GB-Eire	1941	1943	-	Aug	Sun>=9	1:00s	1:00	BST
-# S.R.&O. 1942, No. 506
-Rule	GB-Eire	1942	1944	-	Apr	Sun>=2	1:00s	2:00	BDST
-# S.R.&O. 1944, No. 932
-Rule	GB-Eire	1944	only	-	Sep	Sun>=16	1:00s	1:00	BST
-# S.R.&O. 1945, No. 312
-Rule	GB-Eire	1945	only	-	Apr	Mon>=2	1:00s	2:00	BDST
-Rule	GB-Eire	1945	only	-	Jul	Sun>=9	1:00s	1:00	BST
-# S.R.&O. 1945, No. 1208
-Rule	GB-Eire	1945	1946	-	Oct	Sun>=2	2:00s	0	GMT
-Rule	GB-Eire	1946	only	-	Apr	Sun>=9	2:00s	1:00	BST
-# The Summer Time Act, 1947
-Rule	GB-Eire	1947	only	-	Mar	16	2:00s	1:00	BST
-Rule	GB-Eire	1947	only	-	Apr	13	1:00s	2:00	BDST
-Rule	GB-Eire	1947	only	-	Aug	10	1:00s	1:00	BST
-Rule	GB-Eire	1947	only	-	Nov	 2	2:00s	0	GMT
-# Summer Time Order, 1948 (S.I. 1948/495)
-Rule	GB-Eire	1948	only	-	Mar	14	2:00s	1:00	BST
-Rule	GB-Eire	1948	only	-	Oct	31	2:00s	0	GMT
-# Summer Time Order, 1949 (S.I. 1949/373)
-Rule	GB-Eire	1949	only	-	Apr	 3	2:00s	1:00	BST
-Rule	GB-Eire	1949	only	-	Oct	30	2:00s	0	GMT
-# Summer Time Order, 1950 (S.I. 1950/518)
-# Summer Time Order, 1951 (S.I. 1951/430)
-# Summer Time Order, 1952 (S.I. 1952/451)
-Rule	GB-Eire	1950	1952	-	Apr	Sun>=14	2:00s	1:00	BST
-Rule	GB-Eire	1950	1952	-	Oct	Sun>=21	2:00s	0	GMT
-# revert to the rules of the Summer Time Act, 1925
-Rule	GB-Eire	1953	only	-	Apr	Sun>=16	2:00s	1:00	BST
-Rule	GB-Eire	1953	1960	-	Oct	Sun>=2	2:00s	0	GMT
-Rule	GB-Eire	1954	only	-	Apr	Sun>=9	2:00s	1:00	BST
-Rule	GB-Eire	1955	1956	-	Apr	Sun>=16	2:00s	1:00	BST
-Rule	GB-Eire	1957	only	-	Apr	Sun>=9	2:00s	1:00	BST
-Rule	GB-Eire	1958	1959	-	Apr	Sun>=16	2:00s	1:00	BST
-Rule	GB-Eire	1960	only	-	Apr	Sun>=9	2:00s	1:00	BST
-# Summer Time Order, 1961 (S.I. 1961/71)
-# Summer Time (1962) Order, 1961 (S.I. 1961/2465)
-# Summer Time Order, 1963 (S.I. 1963/81)
-Rule	GB-Eire	1961	1963	-	Mar	lastSun	2:00s	1:00	BST
-Rule	GB-Eire	1961	1968	-	Oct	Sun>=23	2:00s	0	GMT
-# Summer Time (1964) Order, 1963 (S.I. 1963/2101)
-# Summer Time Order, 1964 (S.I. 1964/1201)
-# Summer Time Order, 1967 (S.I. 1967/1148)
-Rule	GB-Eire	1964	1967	-	Mar	Sun>=19	2:00s	1:00	BST
-# Summer Time Order, 1968 (S.I. 1968/117)
-Rule	GB-Eire	1968	only	-	Feb	18	2:00s	1:00	BST
-# The British Standard Time Act, 1968
-#	(no summer time)
-# The Summer Time Act, 1972
-Rule	GB-Eire	1972	1980	-	Mar	Sun>=16	2:00s	1:00	BST
-Rule	GB-Eire	1972	1980	-	Oct	Sun>=23	2:00s	0	GMT
-# Summer Time Order, 1980 (S.I. 1980/1089)
-# Summer Time Order, 1982 (S.I. 1982/1673)
-# Summer Time Order, 1986 (S.I. 1986/223)
-# Summer Time Order, 1988 (S.I. 1988/931)
-Rule	GB-Eire	1981	1995	-	Mar	lastSun	1:00u	1:00	BST
-Rule	GB-Eire 1981	1989	-	Oct	Sun>=23	1:00u	0	GMT
-# Summer Time Order, 1989 (S.I. 1989/985)
-# Summer Time Order, 1992 (S.I. 1992/1729)
-# Summer Time Order 1994 (S.I. 1994/2798)
-Rule	GB-Eire 1990	1995	-	Oct	Sun>=22	1:00u	0	GMT
-# Summer Time Order 1997 (S.I. 1997/2982)
-# See EU for rules starting in 1996.
-#
-# Use Europe/London for Jersey, Guernsey, and the Isle of Man.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/London	-0:01:15 -	LMT	1847 Dec  1  0:00s
-			 0:00	GB-Eire	%s	1968 Oct 27
-			 1:00	-	BST	1971 Oct 31  2:00u
-			 0:00	GB-Eire	%s	1996
-			 0:00	EU	GMT/BST
-Link	Europe/London	Europe/Jersey
-Link	Europe/London	Europe/Guernsey
-Link	Europe/London	Europe/Isle_of_Man
-
-# From Paul Eggert (2018-02-15):
-# In January 2018 we discovered that the negative SAVE values in the
-# Eire rules cause problems with tests for ICU:
-# https://mm.icann.org/pipermail/tz/2018-January/025825.html
-# and with tests for OpenJDK:
-# https://mm.icann.org/pipermail/tz/2018-January/025822.html
-#
-# To work around this problem, the build procedure can translate the
-# following data into two forms, one with negative SAVE values and the
-# other form with a traditional approximation for Irish timestamps
-# after 1971-10-31 02:00 UTC; although this approximation has tm_isdst
-# flags that are reversed, its UTC offsets are correct and this often
-# suffices.  This source file currently uses only nonnegative SAVE
-# values, but this is intended to change and downstream code should
-# not rely on it.
-#
-# The following is like GB-Eire and EU, except with standard time in
-# summer and negative daylight saving time in winter.  It is for when
-# negative SAVE values are used.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-#Rule	Eire	1971	only	-	Oct	31	 2:00u	-1:00	-
-#Rule	Eire	1972	1980	-	Mar	Sun>=16	 2:00u	0	-
-#Rule	Eire	1972	1980	-	Oct	Sun>=23	 2:00u	-1:00	-
-#Rule	Eire	1981	max	-	Mar	lastSun	 1:00u	0	-
-#Rule	Eire	1981	1989	-	Oct	Sun>=23	 1:00u	-1:00	-
-#Rule	Eire	1990	1995	-	Oct	Sun>=22	 1:00u	-1:00	-
-#Rule	Eire	1996	max	-	Oct	lastSun	 1:00u	-1:00	-
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Dublin	-0:25:00 -	LMT	1880 Aug  2
-			-0:25:21 -	DMT	1916 May 21  2:00s
-			-0:25:21 1:00	IST	1916 Oct  1  2:00s
-			 0:00	GB-Eire	%s	1921 Dec  6 # independence
-			 0:00	GB-Eire	GMT/IST	1940 Feb 25  2:00s
-			 0:00	1:00	IST	1946 Oct  6  2:00s
-			 0:00	-	GMT	1947 Mar 16  2:00s
-			 0:00	1:00	IST	1947 Nov  2  2:00s
-			 0:00	-	GMT	1948 Apr 18  2:00s
-			 0:00	GB-Eire	GMT/IST	1968 Oct 27
-# The next line is for when negative SAVE values are used.
-#			 1:00	Eire	IST/GMT
-# These three lines are for when SAVE values are always nonnegative.
-			 1:00	-	IST	1971 Oct 31  2:00u
-			 0:00	GB-Eire	GMT/IST	1996
-			 0:00	EU	GMT/IST
-
-
-###############################################################################
-
-# Europe
-
-# The following rules are for the European Union and for its
-# predecessor organization, the European Communities.
-# For brevity they are called "EU rules" elsewhere in this file.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	EU	1977	1980	-	Apr	Sun>=1	 1:00u	1:00	S
-Rule	EU	1977	only	-	Sep	lastSun	 1:00u	0	-
-Rule	EU	1978	only	-	Oct	 1	 1:00u	0	-
-Rule	EU	1979	1995	-	Sep	lastSun	 1:00u	0	-
-Rule	EU	1981	max	-	Mar	lastSun	 1:00u	1:00	S
-Rule	EU	1996	max	-	Oct	lastSun	 1:00u	0	-
-# The most recent directive covers the years starting in 2002.  See:
-# Directive 2000/84/EC of the European Parliament and of the Council
-# of 19 January 2001 on summer-time arrangements.
-# http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:32000L0084:EN:NOT
-
-# W-Eur differs from EU only in that W-Eur uses standard time.
-Rule	W-Eur	1977	1980	-	Apr	Sun>=1	 1:00s	1:00	S
-Rule	W-Eur	1977	only	-	Sep	lastSun	 1:00s	0	-
-Rule	W-Eur	1978	only	-	Oct	 1	 1:00s	0	-
-Rule	W-Eur	1979	1995	-	Sep	lastSun	 1:00s	0	-
-Rule	W-Eur	1981	max	-	Mar	lastSun	 1:00s	1:00	S
-Rule	W-Eur	1996	max	-	Oct	lastSun	 1:00s	0	-
-
-# Older C-Eur rules are for convenience in the tables.
-# From 1977 on, C-Eur differs from EU only in that C-Eur uses standard time.
-Rule	C-Eur	1916	only	-	Apr	30	23:00	1:00	S
-Rule	C-Eur	1916	only	-	Oct	 1	 1:00	0	-
-Rule	C-Eur	1917	1918	-	Apr	Mon>=15	 2:00s	1:00	S
-Rule	C-Eur	1917	1918	-	Sep	Mon>=15	 2:00s	0	-
-Rule	C-Eur	1940	only	-	Apr	 1	 2:00s	1:00	S
-Rule	C-Eur	1942	only	-	Nov	 2	 2:00s	0	-
-Rule	C-Eur	1943	only	-	Mar	29	 2:00s	1:00	S
-Rule	C-Eur	1943	only	-	Oct	 4	 2:00s	0	-
-Rule	C-Eur	1944	1945	-	Apr	Mon>=1	 2:00s	1:00	S
-# Whitman gives 1944 Oct 7; go with Shanks & Pottenger.
-Rule	C-Eur	1944	only	-	Oct	 2	 2:00s	0	-
-# From Jesper NĂžrgaard Welen (2008-07-13):
-#
-# I found what is probably a typo of 2:00 which should perhaps be 2:00s
-# in the C-Eur rule from tz database version 2008d (this part was
-# corrected in version 2008d). The circumstantial evidence is simply the
-# tz database itself, as seen below:
-#
-# Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15  0:01
-#    0:00 France WE%sT 1945 Sep 16  3:00
-#
-# Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
-#    0:00 France WE%sT 1945 Sep 16  3:00
-#
-# Zone Europe/Belgrade 1:22:00 - LMT 1884
-#    1:00 1:00 CEST 1945 Sep 16  2:00s
-#
-# Rule France 1945 only - Sep 16  3:00 0 -
-# Rule Belgium 1945 only - Sep 16  2:00s 0 -
-# Rule Neth 1945 only - Sep 16 2:00s 0 -
-#
-# The rule line to be changed is:
-#
-# Rule C-Eur 1945 only - Sep 16  2:00 0 -
-#
-# It seems that Paris, Monaco, Rule France, Rule Belgium all agree on
-# 2:00 standard time, e.g. 3:00 local time.  However there are no
-# countries that use C-Eur rules in September 1945, so the only items
-# affected are apparently these fictitious zones that translate acronyms
-# CET and MET:
-#
-# Zone CET  1:00 C-Eur CE%sT
-# Zone MET  1:00 C-Eur ME%sT
-#
-# It this is right then the corrected version would look like:
-#
-# Rule C-Eur 1945 only - Sep 16  2:00s 0 -
-#
-# A small step for mankind though 8-)
-Rule	C-Eur	1945	only	-	Sep	16	 2:00s	0	-
-Rule	C-Eur	1977	1980	-	Apr	Sun>=1	 2:00s	1:00	S
-Rule	C-Eur	1977	only	-	Sep	lastSun	 2:00s	0	-
-Rule	C-Eur	1978	only	-	Oct	 1	 2:00s	0	-
-Rule	C-Eur	1979	1995	-	Sep	lastSun	 2:00s	0	-
-Rule	C-Eur	1981	max	-	Mar	lastSun	 2:00s	1:00	S
-Rule	C-Eur	1996	max	-	Oct	lastSun	 2:00s	0	-
-
-# E-Eur differs from EU only in that E-Eur switches at midnight local time.
-Rule	E-Eur	1977	1980	-	Apr	Sun>=1	 0:00	1:00	S
-Rule	E-Eur	1977	only	-	Sep	lastSun	 0:00	0	-
-Rule	E-Eur	1978	only	-	Oct	 1	 0:00	0	-
-Rule	E-Eur	1979	1995	-	Sep	lastSun	 0:00	0	-
-Rule	E-Eur	1981	max	-	Mar	lastSun	 0:00	1:00	S
-Rule	E-Eur	1996	max	-	Oct	lastSun	 0:00	0	-
-
-
-# Daylight saving time for Russia and the Soviet Union
-#
-# The 1917-1921 decree URLs are from Alexander Belopolsky (2016-08-23).
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Russia	1917	only	-	Jul	 1	23:00	1:00	MST  # Moscow Summer Time
-#
-# Decree No. 142 (1917-12-22) http://istmat.info/node/28137
-Rule	Russia	1917	only	-	Dec	28	 0:00	0	MMT  # Moscow Mean Time
-#
-# Decree No. 497 (1918-05-30) http://istmat.info/node/30001
-Rule	Russia	1918	only	-	May	31	22:00	2:00	MDST # Moscow Double Summer Time
-Rule	Russia	1918	only	-	Sep	16	 1:00	1:00	MST
-#
-# Decree No. 258 (1919-05-29) http://istmat.info/node/37949
-Rule	Russia	1919	only	-	May	31	23:00	2:00	MDST
-#
-Rule	Russia	1919	only	-	Jul	 1	 0:00u	1:00	MSD
-Rule	Russia	1919	only	-	Aug	16	 0:00	0	MSK
-#
-# Decree No. 63 (1921-02-03) http://istmat.info/node/45840
-Rule	Russia	1921	only	-	Feb	14	23:00	1:00	MSD
-#
-# Decree No. 121 (1921-03-07) http://istmat.info/node/45949
-Rule	Russia	1921	only	-	Mar	20	23:00	2:00	+05
-#
-Rule	Russia	1921	only	-	Sep	 1	 0:00	1:00	MSD
-Rule	Russia	1921	only	-	Oct	 1	 0:00	0	-
-# Act No. 925 of the Council of Ministers of the USSR (1980-10-24):
-Rule	Russia	1981	1984	-	Apr	 1	 0:00	1:00	S
-Rule	Russia	1981	1983	-	Oct	 1	 0:00	0	-
-# Act No. 967 of the Council of Ministers of the USSR (1984-09-13), repeated in
-# Act No. 227 of the Council of Ministers of the USSR (1989-03-14):
-Rule	Russia	1984	1995	-	Sep	lastSun	 2:00s	0	-
-Rule	Russia	1985	2010	-	Mar	lastSun	 2:00s	1:00	S
-#
-Rule	Russia	1996	2010	-	Oct	lastSun	 2:00s	0	-
-# As described below, Russia's 2014 change affects Zone data, not Rule data.
-
-# From Stepan Golosunov (2016-03-07):
-# Wikipedia and other sources refer to the Act of the Council of
-# Ministers of the USSR from 1988-01-04 No. 5 and the Act of the
-# Council of Ministers of the USSR from 1989-03-14 No. 227.
-#
-# I did not find full texts of these acts.  For the 1989 one we have
-# title at https://base.garant.ru/70754136/ :
-# "About change in calculation of time on the territories of
-# Lithuanian SSR, Latvian SSR and Estonian SSR, Astrakhan,
-# Kaliningrad, Kirov, Kuybyshev, Ulyanovsk and Uralsk oblasts".
-# And http://astrozet.net/files/Zones/DOC/RU/1980-925.txt appears to
-# contain quotes from both acts: Since last Sunday of March 1988 rules
-# of the second time belt are installed in Volgograd and Saratov
-# oblasts.  Since last Sunday of March 1989:
-# a) Lithuanian SSR, Latvian SSR, Estonian SSR, Kaliningrad oblast:
-# second time belt rules without extra hour (Moscow-1);
-# b) Astrakhan, Kirov, Kuybyshev, Ulyanovsk oblasts: second time belt
-# rules (Moscow time)
-# c) Uralsk oblast: third time belt rules (Moscow+1).
-
-# From Stepan Golosunov (2016-03-27):
-# Unamended version of the act of the
-# Government of the Russian Federation No. 23 from 08.01.1992
-# http://pravo.gov.ru/proxy/ips/?docbody=&nd=102014034&rdk=0
-# says that every year clocks were to be moved forward on last Sunday
-# of March at 2 hours and moved backwards on last Sunday of September
-# at 3 hours.  It was amended in 1996 to replace September with October.
-
-# From Alexander Krivenyshev (2011-06-14):
-# According to Kremlin press service, Russian President Dmitry Medvedev
-# signed a federal law "On calculation of time" on June 9, 2011.
-# According to the law Russia is abolishing daylight saving time.
-#
-# Medvedev signed a law "On the Calculation of Time" (in russian):
-# http://bmockbe.ru/events/?ID=7583
-#
-# Medvedev signed a law on the calculation of the time (in russian):
-# https://www.regnum.ru/news/polit/1413906.html
-
-# From Arthur David Olson (2011-06-15):
-# Take "abolishing daylight saving time" to mean that time is now considered
-# to be standard.
-
-# These are for backward compatibility with older versions.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	WET		0:00	EU	WE%sT
-Zone	CET		1:00	C-Eur	CE%sT
-Zone	MET		1:00	C-Eur	ME%sT
-Zone	EET		2:00	EU	EE%sT
-
-# Previous editions of this database used abbreviations like MET DST
-# for Central European Summer Time, but this didn't agree with common usage.
-
-# From Markus Kuhn (1996-07-12):
-# The official German names ... are
-#
-#	MitteleuropÀische Zeit (MEZ)         = UTC+01:00
-#	MitteleuropÀische Sommerzeit (MESZ)  = UTC+02:00
-#
-# as defined in the German Time Act (Gesetz ĂŒber die Zeitbestimmung (ZeitG),
-# 1978-07-25, Bundesgesetzblatt, Jahrgang 1978, Teil I, S. 1110-1111)....
-# I wrote ... to the German Federal Physical-Technical Institution
-#
-#	Physikalisch-Technische Bundesanstalt (PTB)
-#	Laboratorium 4.41 "Zeiteinheit"
-#	Postfach 3345
-#	D-38023 Braunschweig
-#	phone: +49 531 592-0
-#
-# ... I received today an answer letter from Dr. Peter Hetzel, head of the PTB
-# department for time and frequency transmission.  He explained that the
-# PTB translates MEZ and MESZ into English as
-#
-#	Central European Time (CET)         = UTC+01:00
-#	Central European Summer Time (CEST) = UTC+02:00
-
-
-# Albania
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Albania	1940	only	-	Jun	16	0:00	1:00	S
-Rule	Albania	1942	only	-	Nov	 2	3:00	0	-
-Rule	Albania	1943	only	-	Mar	29	2:00	1:00	S
-Rule	Albania	1943	only	-	Apr	10	3:00	0	-
-Rule	Albania	1974	only	-	May	 4	0:00	1:00	S
-Rule	Albania	1974	only	-	Oct	 2	0:00	0	-
-Rule	Albania	1975	only	-	May	 1	0:00	1:00	S
-Rule	Albania	1975	only	-	Oct	 2	0:00	0	-
-Rule	Albania	1976	only	-	May	 2	0:00	1:00	S
-Rule	Albania	1976	only	-	Oct	 3	0:00	0	-
-Rule	Albania	1977	only	-	May	 8	0:00	1:00	S
-Rule	Albania	1977	only	-	Oct	 2	0:00	0	-
-Rule	Albania	1978	only	-	May	 6	0:00	1:00	S
-Rule	Albania	1978	only	-	Oct	 1	0:00	0	-
-Rule	Albania	1979	only	-	May	 5	0:00	1:00	S
-Rule	Albania	1979	only	-	Sep	30	0:00	0	-
-Rule	Albania	1980	only	-	May	 3	0:00	1:00	S
-Rule	Albania	1980	only	-	Oct	 4	0:00	0	-
-Rule	Albania	1981	only	-	Apr	26	0:00	1:00	S
-Rule	Albania	1981	only	-	Sep	27	0:00	0	-
-Rule	Albania	1982	only	-	May	 2	0:00	1:00	S
-Rule	Albania	1982	only	-	Oct	 3	0:00	0	-
-Rule	Albania	1983	only	-	Apr	18	0:00	1:00	S
-Rule	Albania	1983	only	-	Oct	 1	0:00	0	-
-Rule	Albania	1984	only	-	Apr	 1	0:00	1:00	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Tirane	1:19:20 -	LMT	1914
-			1:00	-	CET	1940 Jun 16
-			1:00	Albania	CE%sT	1984 Jul
-			1:00	EU	CE%sT
-
-# Andorra
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Andorra	0:06:04 -	LMT	1901
-			0:00	-	WET	1946 Sep 30
-			1:00	-	CET	1985 Mar 31  2:00
-			1:00	EU	CE%sT
-
-# Austria
-
-# Milne says Vienna time was 1:05:21.
-
-# From Paul Eggert (2006-03-22): Shanks & Pottenger give 1918-06-16 and
-# 1945-11-18, but the Austrian Federal Office of Metrology and
-# Surveying (BEV) gives 1918-09-16 and for Vienna gives the "alleged"
-# date of 1945-04-12 with no time.  For the 1980-04-06 transition
-# Shanks & Pottenger give 02:00, the BEV 00:00.  Go with the BEV,
-# and guess 02:00 for 1945-04-12.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Austria	1920	only	-	Apr	 5	2:00s	1:00	S
-Rule	Austria	1920	only	-	Sep	13	2:00s	0	-
-Rule	Austria	1946	only	-	Apr	14	2:00s	1:00	S
-Rule	Austria	1946	1948	-	Oct	Sun>=1	2:00s	0	-
-Rule	Austria	1947	only	-	Apr	 6	2:00s	1:00	S
-Rule	Austria	1948	only	-	Apr	18	2:00s	1:00	S
-Rule	Austria	1980	only	-	Apr	 6	0:00	1:00	S
-Rule	Austria	1980	only	-	Sep	28	0:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Vienna	1:05:21 -	LMT	1893 Apr
-			1:00	C-Eur	CE%sT	1920
-			1:00	Austria	CE%sT	1940 Apr  1  2:00s
-			1:00	C-Eur	CE%sT	1945 Apr  2  2:00s
-			1:00	1:00	CEST	1945 Apr 12  2:00s
-			1:00	-	CET	1946
-			1:00	Austria	CE%sT	1981
-			1:00	EU	CE%sT
-
-# Belarus
-#
-# From Stepan Golosunov (2016-07-02):
-# http://www.lawbelarus.com/repub/sub30/texf9611.htm
-# (Act of the Cabinet of Ministers of the Republic of Belarus from
-# 1992-03-25 No. 157) ... says clocks were to be moved forward at 2:00
-# on last Sunday of March and backward at 3:00 on last Sunday of September
-# (the same as previous USSR and contemporary Russian regulations).
-#
-# From Yauhen Kharuzhy (2011-09-16):
-# By latest Belarus government act Europe/Minsk timezone was changed to
-# GMT+3 without DST (was GMT+2 with DST).
-#
-# Sources (Russian language):
-# http://www.belta.by/ru/all_news/society/V-Belarusi-otmenjaetsja-perexod-na-sezonnoe-vremja_i_572952.html
-# http://naviny.by/rubrics/society/2011/09/16/ic_articles_116_175144/
-# https://news.tut.by/society/250578.html
-#
-# From Alexander Bokovoy (2014-10-09):
-# Belarussian government decided against changing to winter time....
-# http://eng.belta.by/all_news/society/Belarus-decides-against-adjusting-time-in-Russias-wake_i_76335.html
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Minsk	1:50:16 -	LMT	1880
-			1:50	-	MMT	1924 May  2 # Minsk Mean Time
-			2:00	-	EET	1930 Jun 21
-			3:00	-	MSK	1941 Jun 28
-			1:00	C-Eur	CE%sT	1944 Jul  3
-			3:00	Russia	MSK/MSD	1990
-			3:00	-	MSK	1991 Mar 31  2:00s
-			2:00	Russia	EE%sT	2011 Mar 27  2:00s
-			3:00	-	+03
-
-# Belgium
-#
-# From Paul Eggert (1997-07-02):
-# Entries from 1918 through 1991 are taken from:
-#	Annuaire de L'Observatoire Royal de Belgique,
-#	Avenue Circulaire, 3, B-1180 BRUXELLES, CLVIIe année, 1991
-#	(Imprimerie HAYEZ, s.p.r.l., Rue Fin, 4, 1080 BRUXELLES, MCMXC),
-#	pp 8-9.
-# LMT before 1892 was 0:17:30, according to the official journal of Belgium:
-#	Moniteur Belge, Samedi 30 Avril 1892, N.121.
-# Thanks to Pascal Delmoitie for these references.
-# The 1918 rules are listed for completeness; they apply to unoccupied Belgium.
-# Assume Brussels switched to WET in 1918 when the armistice took effect.
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Belgium	1918	only	-	Mar	 9	 0:00s	1:00	S
-Rule	Belgium	1918	1919	-	Oct	Sat>=1	23:00s	0	-
-Rule	Belgium	1919	only	-	Mar	 1	23:00s	1:00	S
-Rule	Belgium	1920	only	-	Feb	14	23:00s	1:00	S
-Rule	Belgium	1920	only	-	Oct	23	23:00s	0	-
-Rule	Belgium	1921	only	-	Mar	14	23:00s	1:00	S
-Rule	Belgium	1921	only	-	Oct	25	23:00s	0	-
-Rule	Belgium	1922	only	-	Mar	25	23:00s	1:00	S
-Rule	Belgium	1922	1927	-	Oct	Sat>=1	23:00s	0	-
-Rule	Belgium	1923	only	-	Apr	21	23:00s	1:00	S
-Rule	Belgium	1924	only	-	Mar	29	23:00s	1:00	S
-Rule	Belgium	1925	only	-	Apr	 4	23:00s	1:00	S
-# DSH writes that a royal decree of 1926-02-22 specified the Sun following 3rd
-# Sat in Apr (except if it's Easter, in which case it's one Sunday earlier),
-# to Sun following 1st Sat in Oct, and that a royal decree of 1928-09-15
-# changed the transition times to 02:00 GMT.
-Rule	Belgium	1926	only	-	Apr	17	23:00s	1:00	S
-Rule	Belgium	1927	only	-	Apr	 9	23:00s	1:00	S
-Rule	Belgium	1928	only	-	Apr	14	23:00s	1:00	S
-Rule	Belgium	1928	1938	-	Oct	Sun>=2	 2:00s	0	-
-Rule	Belgium	1929	only	-	Apr	21	 2:00s	1:00	S
-Rule	Belgium	1930	only	-	Apr	13	 2:00s	1:00	S
-Rule	Belgium	1931	only	-	Apr	19	 2:00s	1:00	S
-Rule	Belgium	1932	only	-	Apr	 3	 2:00s	1:00	S
-Rule	Belgium	1933	only	-	Mar	26	 2:00s	1:00	S
-Rule	Belgium	1934	only	-	Apr	 8	 2:00s	1:00	S
-Rule	Belgium	1935	only	-	Mar	31	 2:00s	1:00	S
-Rule	Belgium	1936	only	-	Apr	19	 2:00s	1:00	S
-Rule	Belgium	1937	only	-	Apr	 4	 2:00s	1:00	S
-Rule	Belgium	1938	only	-	Mar	27	 2:00s	1:00	S
-Rule	Belgium	1939	only	-	Apr	16	 2:00s	1:00	S
-Rule	Belgium	1939	only	-	Nov	19	 2:00s	0	-
-Rule	Belgium	1940	only	-	Feb	25	 2:00s	1:00	S
-Rule	Belgium	1944	only	-	Sep	17	 2:00s	0	-
-Rule	Belgium	1945	only	-	Apr	 2	 2:00s	1:00	S
-Rule	Belgium	1945	only	-	Sep	16	 2:00s	0	-
-Rule	Belgium	1946	only	-	May	19	 2:00s	1:00	S
-Rule	Belgium	1946	only	-	Oct	 7	 2:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Brussels	0:17:30 -	LMT	1880
-			0:17:30	-	BMT	1892 May  1 12:00  # Brussels MT
-			0:00	-	WET	1914 Nov  8
-			1:00	-	CET	1916 May  1  0:00
-			1:00	C-Eur	CE%sT	1918 Nov 11 11:00u
-			0:00	Belgium	WE%sT	1940 May 20  2:00s
-			1:00	C-Eur	CE%sT	1944 Sep  3
-			1:00	Belgium	CE%sT	1977
-			1:00	EU	CE%sT
-
-# Bosnia and Herzegovina
-# See Europe/Belgrade.
-
-# Bulgaria
-#
-# From Plamen Simenov via Steffen Thorsen (1999-09-09):
-# A document of Government of Bulgaria (No. 94/1997) says:
-# EET -> EETDST is in 03:00 Local time in last Sunday of March ...
-# EETDST -> EET is in 04:00 Local time in last Sunday of October
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Bulg	1979	only	-	Mar	31	23:00	1:00	S
-Rule	Bulg	1979	only	-	Oct	 1	 1:00	0	-
-Rule	Bulg	1980	1982	-	Apr	Sat>=1	23:00	1:00	S
-Rule	Bulg	1980	only	-	Sep	29	 1:00	0	-
-Rule	Bulg	1981	only	-	Sep	27	 2:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Sofia	1:33:16 -	LMT	1880
-			1:56:56	-	IMT	1894 Nov 30 # Istanbul MT?
-			2:00	-	EET	1942 Nov  2  3:00
-			1:00	C-Eur	CE%sT	1945
-			1:00	-	CET	1945 Apr  2  3:00
-			2:00	-	EET	1979 Mar 31 23:00
-			2:00	Bulg	EE%sT	1982 Sep 26  3:00
-			2:00	C-Eur	EE%sT	1991
-			2:00	E-Eur	EE%sT	1997
-			2:00	EU	EE%sT
-
-# Croatia
-# See Europe/Belgrade.
-
-# Cyprus
-# Please see the 'asia' file for Asia/Nicosia.
-
-# Czech Republic / Czechia
-#
-# From Paul Eggert (2018-04-15):
-# The source for Czech data is: Kdy začíná a končí letní čas. 2018-04-15.
-# https://kalendar.beda.cz/kdy-zacina-a-konci-letni-cas
-# We know of no English-language name for historical Czech winter time;
-# abbreviate it as "GMT", as it happened to be GMT.
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Czech	1945	only	-	Apr	Mon>=1	2:00s	1:00	S
-Rule	Czech	1945	only	-	Oct	 1	2:00s	0	-
-Rule	Czech	1946	only	-	May	 6	2:00s	1:00	S
-Rule	Czech	1946	1949	-	Oct	Sun>=1	2:00s	0	-
-Rule	Czech	1947	1948	-	Apr	Sun>=15	2:00s	1:00	S
-Rule	Czech	1949	only	-	Apr	 9	2:00s	1:00	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Prague	0:57:44 -	LMT	1850
-			0:57:44	-	PMT	1891 Oct    # Prague Mean Time
-			1:00	C-Eur	CE%sT	1945 May  9
-			1:00	Czech	CE%sT	1946 Dec  1  3:00
-# Vanguard section, for zic and other parsers that support negative DST.
-#			1:00	-1:00	GMT	1947 Feb 23  2:00
-# Rearguard section, for parsers that do not support negative DST.
-			0:00	-	GMT	1947 Feb 23  2:00
-# End of rearguard section.
-			1:00	Czech	CE%sT	1979
-			1:00	EU	CE%sT
-# Use Europe/Prague also for Slovakia.
-
-# Denmark, Faroe Islands, and Greenland
-
-# From Jesper NĂžrgaard Welen (2005-04-26):
-# http://www.hum.aau.dk/~poe/tid/tine/DanskTid.htm says that the law
-# [introducing standard time] was in effect from 1894-01-01....
-# The page http://www.retsinfo.dk/_GETDOCI_/ACCN/A18930008330-REGL
-# confirms this, and states that the law was put forth 1893-03-29.
-#
-# The EU [actually, EEC and Euratom] treaty with effect from 1973:
-# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19722110030-REGL
-#
-# This provoked a new law from 1974 to make possible summer time changes
-# in subsequent decrees with the law
-# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19740022330-REGL
-#
-# It seems however that no decree was set forward until 1980.  I have
-# not found any decree, but in another related law, the effecting DST
-# changes are stated explicitly to be from 1980-04-06 at 02:00 to
-# 1980-09-28 at 02:00.  If this is true, this differs slightly from
-# the EU rule in that DST runs to 02:00, not 03:00.  We don't know
-# when Denmark began using the EU rule correctly, but we have only
-# confirmation of the 1980-time, so I presume it was correct in 1981:
-# The law is about the management of the extra hour, concerning
-# working hours reported and effect on obligatory-rest rules (which
-# was suspended on that night):
-# http://www.retsinfo.dk/_GETDOCI_/ACCN/C19801120554-REGL
-
-# From Jesper NĂžrgaard Welen (2005-06-11):
-# The Herning Folkeblad (1980-09-26) reported that the night between
-# Saturday and Sunday the clock is set back from three to two.
-
-# From Paul Eggert (2005-06-11):
-# Hence the "02:00" of the 1980 law refers to standard time, not
-# wall-clock time, and so the EU rules were in effect in 1980.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Denmark	1916	only	-	May	14	23:00	1:00	S
-Rule	Denmark	1916	only	-	Sep	30	23:00	0	-
-Rule	Denmark	1940	only	-	May	15	 0:00	1:00	S
-Rule	Denmark	1945	only	-	Apr	 2	 2:00s	1:00	S
-Rule	Denmark	1945	only	-	Aug	15	 2:00s	0	-
-Rule	Denmark	1946	only	-	May	 1	 2:00s	1:00	S
-Rule	Denmark	1946	only	-	Sep	 1	 2:00s	0	-
-Rule	Denmark	1947	only	-	May	 4	 2:00s	1:00	S
-Rule	Denmark	1947	only	-	Aug	10	 2:00s	0	-
-Rule	Denmark	1948	only	-	May	 9	 2:00s	1:00	S
-Rule	Denmark	1948	only	-	Aug	 8	 2:00s	0	-
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Europe/Copenhagen	 0:50:20 -	LMT	1890
-			 0:50:20 -	CMT	1894 Jan  1 # Copenhagen MT
-			 1:00	Denmark	CE%sT	1942 Nov  2  2:00s
-			 1:00	C-Eur	CE%sT	1945 Apr  2  2:00
-			 1:00	Denmark	CE%sT	1980
-			 1:00	EU	CE%sT
-Zone Atlantic/Faroe	-0:27:04 -	LMT	1908 Jan 11 # TĂłrshavn
-			 0:00	-	WET	1981
-			 0:00	EU	WE%sT
-#
-# From Paul Eggert (2004-10-31):
-# During World War II, Germany maintained secret manned weather stations in
-# East Greenland and Franz Josef Land, but we don't know their time zones.
-# My source for this is Wilhelm Dege's book mentioned under Svalbard.
-#
-# From Paul Eggert (2017-12-10):
-# Greenland joined the European Communities as part of Denmark,
-# obtained home rule on 1979-05-01, and left the European Communities
-# on 1985-02-01.  It therefore should have been using EU
-# rules at least through 1984.  Shanks & Pottenger say Scoresbysund and GodthÄb
-# used C-Eur rules after 1980, but IATA SSIM (1991/1996) says they use EU
-# rules since at least 1991.  Assume EU rules since 1980.
-
-# From Gwillim Law (2001-06-06), citing
-# <http://www.statkart.no/efs/efshefter/2001/efs5-2001.pdf> (2001-03-15),
-# and with translations corrected by Steffen Thorsen:
-#
-# Greenland has four local times, and the relation to UTC
-# is according to the following time line:
-#
-# The military zone near Thule	UTC-4
-# Standard Greenland time	UTC-3
-# Scoresbysund			UTC-1
-# Danmarkshavn			UTC
-#
-# In the military area near Thule and in Danmarkshavn DST will not be
-# introduced.
-
-# From Rives McDow (2001-11-01):
-#
-# I correspond regularly with the Dansk Polarcenter, and wrote them at
-# the time to clarify the situation in Thule.  Unfortunately, I have
-# not heard back from them regarding my recent letter.  [But I have
-# info from earlier correspondence.]
-#
-# According to the center, a very small local time zone around Thule
-# Air Base keeps the time according to UTC-4, implementing daylight
-# savings using North America rules, changing the time at 02:00 local time....
-#
-# The east coast of Greenland north of the community of Scoresbysund
-# uses UTC in the same way as in Iceland, year round, with no dst.
-# There are just a few stations on this coast, including the
-# Danmarkshavn ICAO weather station mentioned in your September 29th
-# email.  The other stations are two sledge patrol stations in
-# Mestersvig and Daneborg, the air force base at Station Nord, and the
-# DPC research station at Zackenberg.
-#
-# Scoresbysund and two small villages nearby keep time UTC-1 and use
-# the same daylight savings time period as in West Greenland (GodthÄb).
-#
-# The rest of Greenland, including GodthÄb (this area, although it
-# includes central Greenland, is known as west Greenland), keeps time
-# UTC-3, with daylight savings methods according to European rules.
-#
-# It is common procedure to use UTC 0 in the wilderness of East and
-# North Greenland, because it is mainly Icelandic aircraft operators
-# maintaining traffic in these areas.  However, the official status of
-# this area is that it sticks with GodthÄb time.  This area might be
-# considered a dual time zone in some respects because of this.
-
-# From Rives McDow (2001-11-19):
-# I heard back from someone stationed at Thule; the time change took place
-# there at 2:00 AM.
-
-# From Paul Eggert (2006-03-22):
-# From 1997 on the CIA map shows Danmarkshavn on GMT;
-# the 1995 map as like GodthÄb.
-# For lack of better info, assume they were like GodthÄb before 1996.
-# startkart.no says Thule does not observe DST, but this is clearly an error,
-# so go with Shanks & Pottenger for Thule transitions until this year.
-# For 2007 on assume Thule will stay in sync with US DST rules.
-
-# From J William Piggott (2016-02-20):
-# "Greenland north of the community of Scoresbysund" is officially named
-# "National Park" by Executive Order:
-# http://naalakkersuisut.gl/~/media/Nanoq/Files/Attached%20Files/Engelske-tekster/Legislation/Executive%20Order%20National%20Park.rtf
-# It is their only National Park.
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Thule	1991	1992	-	Mar	lastSun	2:00	1:00	D
-Rule	Thule	1991	1992	-	Sep	lastSun	2:00	0	S
-Rule	Thule	1993	2006	-	Apr	Sun>=1	2:00	1:00	D
-Rule	Thule	1993	2006	-	Oct	lastSun	2:00	0	S
-Rule	Thule	2007	max	-	Mar	Sun>=8	2:00	1:00	D
-Rule	Thule	2007	max	-	Nov	Sun>=1	2:00	0	S
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Danmarkshavn -1:14:40 -	LMT	1916 Jul 28
-			-3:00	-	-03	1980 Apr  6  2:00
-			-3:00	EU	-03/-02	1996
-			0:00	-	GMT
-Zone America/Scoresbysund -1:27:52 -	LMT	1916 Jul 28 # Ittoqqortoormiit
-			-2:00	-	-02	1980 Apr  6  2:00
-			-2:00	C-Eur	-02/-01	1981 Mar 29
-			-1:00	EU	-01/+00
-Zone America/Godthab	-3:26:56 -	LMT	1916 Jul 28 # Nuuk
-			-3:00	-	-03	1980 Apr  6  2:00
-			-3:00	EU	-03/-02
-Zone America/Thule	-4:35:08 -	LMT	1916 Jul 28 # Pituffik air base
-			-4:00	Thule	A%sT
-
-# Estonia
-#
-# From Paul Eggert (2016-03-18):
-# The 1989 transition is from USSR act No. 227 (1989-03-14).
-#
-# From Peter Ilieve (1994-10-15):
-# A relative in Tallinn confirms the accuracy of the data for 1989 onwards
-# [through 1994] and gives the legal authority for it,
-# a regulation of the Government of Estonia, No. 111 of 1989....
-#
-# From Peter Ilieve (1996-10-28):
-# [IATA SSIM (1992/1996) claims that the Baltic republics switch at 01:00s,
-# but a relative confirms that Estonia still switches at 02:00s, writing:]
-# "I do not [know] exactly but there are some little different
-# (confusing) rules for International Air and Railway Transport Schedules
-# conversion in Sunday connected with end of summer time in Estonia....
-# A discussion is running about the summer time efficiency and effect on
-# human physiology.  It seems that Estonia maybe will not change to
-# summer time next spring."
-
-# From Peter Ilieve (1998-11-04), heavily edited:
-# The 1998-09-22 Estonian time law
-# http://trip.rk.ee/cgi-bin/thw?${BASE}=akt&${OOHTML}=rtd&TA=1998&TO=1&AN=1390
-# refers to the Eighth Directive and cites the association agreement between
-# the EU and Estonia, ratified by the Estonian law (RT II 1995, 22-27, 120).
-#
-# I also asked [my relative] whether they use any standard abbreviation
-# for their standard and summer times. He says no, they use "suveaeg"
-# (summer time) and "talveaeg" (winter time).
-
-# From The Baltic Times <https://www.baltictimes.com/> (1999-09-09)
-# via Steffen Thorsen:
-# This year will mark the last time Estonia shifts to summer time,
-# a council of the ruling coalition announced Sept. 6....
-# But what this could mean for Estonia's chances of joining the European
-# Union are still unclear.  In 1994, the EU declared summer time compulsory
-# for all member states until 2001.  Brussels has yet to decide what to do
-# after that.
-
-# From Mart Oruaas (2000-01-29):
-# Regulation No. 301 (1999-10-12) obsoletes previous regulation
-# No. 206 (1998-09-22) and thus sticks Estonia to +02:00 GMT for all
-# the year round.  The regulation is effective 1999-11-01.
-
-# From Toomas Soome (2002-02-21):
-# The Estonian government has changed once again timezone politics.
-# Now we are using again EU rules.
-#
-# From Urmet JĂ€nes (2002-03-28):
-# The legislative reference is Government decree No. 84 on 2002-02-21.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Tallinn	1:39:00	-	LMT	1880
-			1:39:00	-	TMT	1918 Feb    # Tallinn Mean Time
-			1:00	C-Eur	CE%sT	1919 Jul
-			1:39:00	-	TMT	1921 May
-			2:00	-	EET	1940 Aug  6
-			3:00	-	MSK	1941 Sep 15
-			1:00	C-Eur	CE%sT	1944 Sep 22
-			3:00	Russia	MSK/MSD	1989 Mar 26  2:00s
-			2:00	1:00	EEST	1989 Sep 24  2:00s
-			2:00	C-Eur	EE%sT	1998 Sep 22
-			2:00	EU	EE%sT	1999 Oct 31  4:00
-			2:00	-	EET	2002 Feb 21
-			2:00	EU	EE%sT
-
-# Finland
-
-# From Hannu Strang (1994-09-25 06:03:37 UTC):
-# Well, here in Helsinki we're just changing from summer time to regular one,
-# and it's supposed to change at 4am...
-
-# From Janne Snabb (2010-07-15):
-#
-# I noticed that the Finland data is not accurate for years 1981 and 1982.
-# During these two first trial years the DST adjustment was made one hour
-# earlier than in forthcoming years. Starting 1983 the adjustment was made
-# according to the central European standards.
-#
-# This is documented in Heikki Oja: Aikakirja 2007, published by The Almanac
-# Office of University of Helsinki, ISBN 952-10-3221-9, available online (in
-# Finnish) at
-# https://almanakka.helsinki.fi/aikakirja/Aikakirja2007kokonaan.pdf
-#
-# Page 105 (56 in PDF version) has a handy table of all past daylight savings
-# transitions. It is easy enough to interpret without Finnish skills.
-#
-# This is also confirmed by Finnish Broadcasting Company's archive at:
-# http://www.yle.fi/elavaarkisto/?s=s&g=1&ag=5&t=&a=3401
-#
-# The news clip from 1981 says that "the time between 2 and 3 o'clock does not
-# exist tonight."
-
-# From Konstantin Hyppönen (2014-06-13):
-# [Heikki Oja's book Aikakirja 2013]
-# https://almanakka.helsinki.fi/images/aikakirja/Aikakirja2013kokonaan.pdf
-# pages 104-105, including a scan from a newspaper published on Apr 2 1942
-# say that ... [o]n Apr 2 1942, 24 o'clock (which means Apr 3 1942,
-# 00:00), clocks were moved one hour forward. The newspaper
-# mentions "on the night from Thursday to Friday"....
-# On Oct 4 1942, clocks were moved at 1:00 one hour backwards.
-#
-# From Paul Eggert (2014-06-14):
-# Go with Oja over Shanks.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Finland	1942	only	-	Apr	2	24:00	1:00	S
-Rule	Finland	1942	only	-	Oct	4	1:00	0	-
-Rule	Finland	1981	1982	-	Mar	lastSun	2:00	1:00	S
-Rule	Finland	1981	1982	-	Sep	lastSun	3:00	0	-
-
-# Milne says Helsinki (Helsingfors) time was 1:39:49.2 (official document);
-# round to nearest.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Helsinki	1:39:49 -	LMT	1878 May 31
-			1:39:49	-	HMT	1921 May    # Helsinki Mean Time
-			2:00	Finland	EE%sT	1983
-			2:00	EU	EE%sT
-
-# Åland Is
-Link	Europe/Helsinki	Europe/Mariehamn
-
-
-# France
-
-# From Ciro Discepolo (2000-12-20):
-#
-# Henri Le Corre, RĂ©gimes horaires pour le monde entier, Éditions
-# Traditionnelles - Paris 2 books, 1993
-#
-# Gabriel, Traité de l'heure dans le monde, Guy Trédaniel,
-# Paris, 1991
-#
-# Françoise Gauquelin, ProblÚmes de l'heure résolus en astrologie,
-# Guy Trédaniel, Paris 1987
-
-
-#
-# Shank & Pottenger seem to use '24:00' ambiguously; resolve it with Whitman.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	France	1916	only	-	Jun	14	23:00s	1:00	S
-Rule	France	1916	1919	-	Oct	Sun>=1	23:00s	0	-
-Rule	France	1917	only	-	Mar	24	23:00s	1:00	S
-Rule	France	1918	only	-	Mar	 9	23:00s	1:00	S
-Rule	France	1919	only	-	Mar	 1	23:00s	1:00	S
-Rule	France	1920	only	-	Feb	14	23:00s	1:00	S
-Rule	France	1920	only	-	Oct	23	23:00s	0	-
-Rule	France	1921	only	-	Mar	14	23:00s	1:00	S
-Rule	France	1921	only	-	Oct	25	23:00s	0	-
-Rule	France	1922	only	-	Mar	25	23:00s	1:00	S
-# DSH writes that a law of 1923-05-24 specified 3rd Sat in Apr at 23:00 to 1st
-# Sat in Oct at 24:00; and that in 1930, because of Easter, the transitions
-# were Apr 12 and Oct 5.  Go with Shanks & Pottenger.
-Rule	France	1922	1938	-	Oct	Sat>=1	23:00s	0	-
-Rule	France	1923	only	-	May	26	23:00s	1:00	S
-Rule	France	1924	only	-	Mar	29	23:00s	1:00	S
-Rule	France	1925	only	-	Apr	 4	23:00s	1:00	S
-Rule	France	1926	only	-	Apr	17	23:00s	1:00	S
-Rule	France	1927	only	-	Apr	 9	23:00s	1:00	S
-Rule	France	1928	only	-	Apr	14	23:00s	1:00	S
-Rule	France	1929	only	-	Apr	20	23:00s	1:00	S
-Rule	France	1930	only	-	Apr	12	23:00s	1:00	S
-Rule	France	1931	only	-	Apr	18	23:00s	1:00	S
-Rule	France	1932	only	-	Apr	 2	23:00s	1:00	S
-Rule	France	1933	only	-	Mar	25	23:00s	1:00	S
-Rule	France	1934	only	-	Apr	 7	23:00s	1:00	S
-Rule	France	1935	only	-	Mar	30	23:00s	1:00	S
-Rule	France	1936	only	-	Apr	18	23:00s	1:00	S
-Rule	France	1937	only	-	Apr	 3	23:00s	1:00	S
-Rule	France	1938	only	-	Mar	26	23:00s	1:00	S
-Rule	France	1939	only	-	Apr	15	23:00s	1:00	S
-Rule	France	1939	only	-	Nov	18	23:00s	0	-
-Rule	France	1940	only	-	Feb	25	 2:00	1:00	S
-# The French rules for 1941-1944 were not used in Paris, but Shanks & Pottenger
-# write that they were used in Monaco and in many French locations.
-# Le Corre writes that the upper limit of the free zone was Arnéguy, Orthez,
-# Mont-de-Marsan, Bazas, Langon, Lamothe-Montravel, MarƓuil, La
-# Rochefoucauld, Champagne-Mouton, La Roche-Posay, La Haye-Descartes,
-# Loches, Montrichard, Vierzon, Bourges, Moulins, Digoin,
-# Paray-le-Monial, Montceau-les-Mines, Chalon-sur-SaĂŽne, Arbois,
-# Dole, Morez, St-Claude, and Collonges (Haute-Savoie).
-Rule	France	1941	only	-	May	 5	 0:00	2:00	M # Midsummer
-# Shanks & Pottenger say this transition occurred at Oct 6 1:00,
-# but go with Denis Excoffier (1997-12-12),
-# who quotes the Ephémérides astronomiques for 1998 from Bureau des Longitudes
-# as saying 5/10/41 22hUT.
-Rule	France	1941	only	-	Oct	 6	 0:00	1:00	S
-Rule	France	1942	only	-	Mar	 9	 0:00	2:00	M
-Rule	France	1942	only	-	Nov	 2	 3:00	1:00	S
-Rule	France	1943	only	-	Mar	29	 2:00	2:00	M
-Rule	France	1943	only	-	Oct	 4	 3:00	1:00	S
-Rule	France	1944	only	-	Apr	 3	 2:00	2:00	M
-Rule	France	1944	only	-	Oct	 8	 1:00	1:00	S
-Rule	France	1945	only	-	Apr	 2	 2:00	2:00	M
-Rule	France	1945	only	-	Sep	16	 3:00	0	-
-# Shanks & Pottenger give Mar 28 2:00 and Sep 26 3:00;
-# go with Excoffier's 28/3/76 0hUT and 25/9/76 23hUT.
-Rule	France	1976	only	-	Mar	28	 1:00	1:00	S
-Rule	France	1976	only	-	Sep	26	 1:00	0	-
-# Shanks & Pottenger give 0:09:20 for Paris Mean Time, and Whitman 0:09:05,
-# but Howse quotes the actual French legislation as saying 0:09:21.
-# Go with Howse.  Howse writes that the time in France was officially based
-# on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Paris	0:09:21 -	LMT	1891 Mar 15  0:01
-			0:09:21	-	PMT	1911 Mar 11  0:01 # Paris MT
-# Shanks & Pottenger give 1940 Jun 14 0:00; go with Excoffier and Le Corre.
-			0:00	France	WE%sT	1940 Jun 14 23:00
-# Le Corre says Paris stuck with occupied-France time after the liberation;
-# go with Shanks & Pottenger.
-			1:00	C-Eur	CE%sT	1944 Aug 25
-			0:00	France	WE%sT	1945 Sep 16  3:00
-			1:00	France	CE%sT	1977
-			1:00	EU	CE%sT
-
-# Germany
-
-# From Markus Kuhn (1998-09-29):
-# The German time zone web site by the Physikalisch-Technische
-# Bundesanstalt contains DST information back to 1916.
-# [See tz-link.html for the URL.]
-
-# From Jörg Schilling (2002-10-23):
-# In 1945, Berlin was switched to Moscow Summer time (GMT+4) by
-# https://www.dhm.de/lemo/html/biografien/BersarinNikolai/
-# General [Nikolai] Bersarin.
-
-# From Paul Eggert (2003-03-08):
-# http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf
-# says that Bersarin issued an order to use Moscow time on May 20.
-# However, Moscow did not observe daylight saving in 1945, so
-# this was equivalent to UT +03, not +04.
-
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Germany	1946	only	-	Apr	14	2:00s	1:00	S
-Rule	Germany	1946	only	-	Oct	 7	2:00s	0	-
-Rule	Germany	1947	1949	-	Oct	Sun>=1	2:00s	0	-
-# http://www.ptb.de/de/org/4/44/441/salt.htm says the following transition
-# occurred at 3:00 MEZ, not the 2:00 MEZ given in Shanks & Pottenger.
-# Go with the PTB.
-Rule	Germany	1947	only	-	Apr	 6	3:00s	1:00	S
-Rule	Germany	1947	only	-	May	11	2:00s	2:00	M
-Rule	Germany	1947	only	-	Jun	29	3:00	1:00	S
-Rule	Germany	1948	only	-	Apr	18	2:00s	1:00	S
-Rule	Germany	1949	only	-	Apr	10	2:00s	1:00	S
-
-Rule SovietZone	1945	only	-	May	24	2:00	2:00	M # Midsummer
-Rule SovietZone	1945	only	-	Sep	24	3:00	1:00	S
-Rule SovietZone	1945	only	-	Nov	18	2:00s	0	-
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Berlin	0:53:28 -	LMT	1893 Apr
-			1:00	C-Eur	CE%sT	1945 May 24  2:00
-			1:00 SovietZone	CE%sT	1946
-			1:00	Germany	CE%sT	1980
-			1:00	EU	CE%sT
-
-# From Tobias Conradi (2011-09-12):
-# BĂŒsingen <http://www.buesingen.de>, surrounded by the Swiss canton
-# Schaffhausen, did not start observing DST in 1980 as the rest of DE
-# (West Germany at that time) and DD (East Germany at that time) did.
-# DD merged into DE, the area is currently covered by code DE in ISO 3166-1,
-# which in turn is covered by the zone Europe/Berlin.
-#
-# Source for the time in BĂŒsingen 1980:
-# http://www.srf.ch/player/video?id=c012c029-03b7-4c2b-9164-aa5902cd58d3
-
-# From Arthur David Olson (2012-03-03):
-# BĂŒsingen and Zurich have shared clocks since 1970.
-
-Link	Europe/Zurich	Europe/Busingen
-
-# Georgia
-# Please see the "asia" file for Asia/Tbilisi.
-# Herodotus (Histories, IV.45) says Georgia north of the Phasis (now Rioni)
-# is in Europe.  Our reference location Tbilisi is in the Asian part.
-
-# Gibraltar
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Europe/Gibraltar	-0:21:24 -	LMT	1880 Aug  2  0:00s
-			0:00	GB-Eire	%s	1957 Apr 14  2:00
-			1:00	-	CET	1982
-			1:00	EU	CE%sT
-
-# Greece
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-# Whitman gives 1932 Jul 5 - Nov 1; go with Shanks & Pottenger.
-Rule	Greece	1932	only	-	Jul	 7	0:00	1:00	S
-Rule	Greece	1932	only	-	Sep	 1	0:00	0	-
-# Whitman gives 1941 Apr 25 - ?; go with Shanks & Pottenger.
-Rule	Greece	1941	only	-	Apr	 7	0:00	1:00	S
-# Whitman gives 1942 Feb 2 - ?; go with Shanks & Pottenger.
-Rule	Greece	1942	only	-	Nov	 2	3:00	0	-
-Rule	Greece	1943	only	-	Mar	30	0:00	1:00	S
-Rule	Greece	1943	only	-	Oct	 4	0:00	0	-
-# Whitman gives 1944 Oct 3 - Oct 31; go with Shanks & Pottenger.
-Rule	Greece	1952	only	-	Jul	 1	0:00	1:00	S
-Rule	Greece	1952	only	-	Nov	 2	0:00	0	-
-Rule	Greece	1975	only	-	Apr	12	0:00s	1:00	S
-Rule	Greece	1975	only	-	Nov	26	0:00s	0	-
-Rule	Greece	1976	only	-	Apr	11	2:00s	1:00	S
-Rule	Greece	1976	only	-	Oct	10	2:00s	0	-
-Rule	Greece	1977	1978	-	Apr	Sun>=1	2:00s	1:00	S
-Rule	Greece	1977	only	-	Sep	26	2:00s	0	-
-Rule	Greece	1978	only	-	Sep	24	4:00	0	-
-Rule	Greece	1979	only	-	Apr	 1	9:00	1:00	S
-Rule	Greece	1979	only	-	Sep	29	2:00	0	-
-Rule	Greece	1980	only	-	Apr	 1	0:00	1:00	S
-Rule	Greece	1980	only	-	Sep	28	0:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Athens	1:34:52 -	LMT	1895 Sep 14
-			1:34:52	-	AMT	1916 Jul 28  0:01 # Athens MT
-			2:00	Greece	EE%sT	1941 Apr 30
-			1:00	Greece	CE%sT	1944 Apr  4
-			2:00	Greece	EE%sT	1981
-			# Shanks & Pottenger say it switched to C-Eur in 1981;
-			# go with EU rules instead, since Greece joined Jan 1.
-			2:00	EU	EE%sT
-
-# Hungary
-# From Paul Eggert (2014-07-15):
-# Dates for 1916-1945 are taken from:
-# Oross A. Jelen a mĂșlt jövƑje: a nyĂĄri idƑszĂĄmĂ­tĂĄs MagyarorszĂĄgon 1916-1945.
-# National Archives of Hungary (2012-10-29).
-# http://mnl.gov.hu/a_het_dokumentuma/a_nyari_idoszamitas_magyarorszagon_19161945.html
-# This source does not always give times, which are taken from Shanks
-# & Pottenger (which disagree about the dates).
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Hungary	1918	only	-	Apr	 1	 3:00	1:00	S
-Rule	Hungary	1918	only	-	Sep	16	 3:00	0	-
-Rule	Hungary	1919	only	-	Apr	15	 3:00	1:00	S
-Rule	Hungary	1919	only	-	Nov	24	 3:00	0	-
-Rule	Hungary	1945	only	-	May	 1	23:00	1:00	S
-Rule	Hungary	1945	only	-	Nov	 1	 0:00	0	-
-Rule	Hungary	1946	only	-	Mar	31	 2:00s	1:00	S
-Rule	Hungary	1946	1949	-	Oct	Sun>=1	 2:00s	0	-
-Rule	Hungary	1947	1949	-	Apr	Sun>=4	 2:00s	1:00	S
-Rule	Hungary	1950	only	-	Apr	17	 2:00s	1:00	S
-Rule	Hungary	1950	only	-	Oct	23	 2:00s	0	-
-Rule	Hungary	1954	1955	-	May	23	 0:00	1:00	S
-Rule	Hungary	1954	1955	-	Oct	 3	 0:00	0	-
-Rule	Hungary	1956	only	-	Jun	Sun>=1	 0:00	1:00	S
-Rule	Hungary	1956	only	-	Sep	lastSun	 0:00	0	-
-Rule	Hungary	1957	only	-	Jun	Sun>=1	 1:00	1:00	S
-Rule	Hungary	1957	only	-	Sep	lastSun	 3:00	0	-
-Rule	Hungary	1980	only	-	Apr	 6	 1:00	1:00	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Budapest	1:16:20 -	LMT	1890 Oct
-			1:00	C-Eur	CE%sT	1918
-			1:00	Hungary	CE%sT	1941 Apr  8
-			1:00	C-Eur	CE%sT	1945
-			1:00	Hungary	CE%sT	1980 Sep 28  2:00s
-			1:00	EU	CE%sT
-
-# Iceland
-#
-# From Adam David (1993-11-06):
-# The name of the timezone in Iceland for system / mail / news purposes is GMT.
-#
-# (1993-12-05):
-# This material is paraphrased from the 1988 edition of the University of
-# Iceland Almanak.
-#
-# From January 1st, 1908 the whole of Iceland was standardised at 1 hour
-# behind GMT. Previously, local mean solar time was used in different parts
-# of Iceland, the almanak had been based on Reykjavik mean solar time which
-# was 1 hour and 28 minutes behind GMT.
-#
-# "first day of winter" referred to [below] means the first day of the 26 weeks
-# of winter, according to the old icelandic calendar that dates back to the
-# time the norsemen first settled Iceland.  The first day of winter is always
-# Saturday, but is not dependent on the Julian or Gregorian calendars.
-#
-# (1993-12-10):
-# I have a reference from the Oxford Icelandic-English dictionary for the
-# beginning of winter, which ties it to the ecclesiastical calendar (and thus
-# to the julian/gregorian calendar) over the period in question.
-#	the winter begins on the Saturday next before St. Luke's day
-#	(old style), or on St. Luke's day, if a Saturday.
-# St. Luke's day ought to be traceable from ecclesiastical sources. "old style"
-# might be a reference to the Julian calendar as opposed to Gregorian, or it
-# might mean something else (???).
-#
-# From Paul Eggert (2014-11-22):
-# The information below is taken from the 1988 Almanak; see
-# http://www.almanak.hi.is/klukkan.html
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Iceland	1917	1919	-	Feb	19	23:00	1:00	-
-Rule	Iceland	1917	only	-	Oct	21	 1:00	0	-
-Rule	Iceland	1918	1919	-	Nov	16	 1:00	0	-
-Rule	Iceland	1921	only	-	Mar	19	23:00	1:00	-
-Rule	Iceland	1921	only	-	Jun	23	 1:00	0	-
-Rule	Iceland	1939	only	-	Apr	29	23:00	1:00	-
-Rule	Iceland	1939	only	-	Oct	29	 2:00	0	-
-Rule	Iceland	1940	only	-	Feb	25	 2:00	1:00	-
-Rule	Iceland	1940	1941	-	Nov	Sun>=2	 1:00s	0	-
-Rule	Iceland	1941	1942	-	Mar	Sun>=2	 1:00s	1:00	-
-# 1943-1946 - first Sunday in March until first Sunday in winter
-Rule	Iceland	1943	1946	-	Mar	Sun>=1	 1:00s	1:00	-
-Rule	Iceland	1942	1948	-	Oct	Sun>=22	 1:00s	0	-
-# 1947-1967 - first Sunday in April until first Sunday in winter
-Rule	Iceland	1947	1967	-	Apr	Sun>=1	 1:00s	1:00	-
-# 1949 and 1967 Oct transitions delayed by 1 week
-Rule	Iceland	1949	only	-	Oct	30	 1:00s	0	-
-Rule	Iceland	1950	1966	-	Oct	Sun>=22	 1:00s	0	-
-Rule	Iceland	1967	only	-	Oct	29	 1:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Atlantic/Reykjavik	-1:28	-	LMT	1908
-			-1:00	Iceland	-01/+00	1968 Apr  7  1:00s
-			 0:00	-	GMT
-
-# Italy
-#
-# From Paul Eggert (2001-03-06):
-# Sicily and Sardinia each had their own time zones from 1866 to 1893,
-# called Palermo Time (+00:53:28) and Cagliari Time (+00:36:32).
-# During World War II, German-controlled Italy used German time.
-# But these events all occurred before the 1970 cutoff,
-# so record only the time in Rome.
-#
-# From Michael Deckers (2016-10-24):
-# http://www.ac-ilsestante.it/MERIDIANE/ora_legale quotes a law of 1893-08-10
-# ... [translated as] "The preceding dispositions will enter into
-# force at the instant at which, according to the time specified in
-# the 1st article, the 1st of November 1893 will begin...."
-#
-# From Pierpaolo Bernardi (2016-10-20):
-# The authoritative source for time in Italy is the national metrological
-# institute, which has a summary page of historical DST data at
-# http://www.inrim.it/res/tf/ora_legale_i.shtml
-# (2016-10-24):
-# http://www.renzobaldini.it/le-ore-legali-in-italia/
-# has still different data for 1944.  It divides Italy in two, as
-# there were effectively two governments at the time, north of Gothic
-# Line German controlled territory, official government RSI, and south
-# of the Gothic Line, controlled by allied armies.
-#
-# From Brian Inglis (2016-10-23):
-# Viceregal LEGISLATIVE DECREE. 14 September 1944, no. 219.
-# Restoration of Standard Time. (044U0219) (OJ 62 of 30.9.1944) ...
-# Given the R. law decreed on 1944-03-29, no. 92, by which standard time is
-# advanced to sixty minutes later starting at hour two on 1944-04-02; ...
-# Starting at hour three on the date 1944-09-17 standard time will be resumed.
-#
-# From Paul Eggert (2016-10-27):
-# Go with INRiM for DST rules, except as corrected by Inglis for 1944
-# for the Kingdom of Italy.  This is consistent with Renzo Baldini.
-# Model Rome's occupation by using C-Eur rules from 1943-09-10
-# to 1944-06-04; although Rome was an open city during this period, it
-# was effectively controlled by Germany.
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Italy	1916	only	-	Jun	 3	24:00	1:00	S
-Rule	Italy	1916	1917	-	Sep	30	24:00	0	-
-Rule	Italy	1917	only	-	Mar	31	24:00	1:00	S
-Rule	Italy	1918	only	-	Mar	 9	24:00	1:00	S
-Rule	Italy	1918	only	-	Oct	 6	24:00	0	-
-Rule	Italy	1919	only	-	Mar	 1	24:00	1:00	S
-Rule	Italy	1919	only	-	Oct	 4	24:00	0	-
-Rule	Italy	1920	only	-	Mar	20	24:00	1:00	S
-Rule	Italy	1920	only	-	Sep	18	24:00	0	-
-Rule	Italy	1940	only	-	Jun	14	24:00	1:00	S
-Rule	Italy	1942	only	-	Nov	 2	 2:00s	0	-
-Rule	Italy	1943	only	-	Mar	29	 2:00s	1:00	S
-Rule	Italy	1943	only	-	Oct	 4	 2:00s	0	-
-Rule	Italy	1944	only	-	Apr	 2	 2:00s	1:00	S
-Rule	Italy	1944	only	-	Sep	17	 2:00s	0	-
-Rule	Italy	1945	only	-	Apr	 2	 2:00	1:00	S
-Rule	Italy	1945	only	-	Sep	15	 1:00	0	-
-Rule	Italy	1946	only	-	Mar	17	 2:00s	1:00	S
-Rule	Italy	1946	only	-	Oct	 6	 2:00s	0	-
-Rule	Italy	1947	only	-	Mar	16	 0:00s	1:00	S
-Rule	Italy	1947	only	-	Oct	 5	 0:00s	0	-
-Rule	Italy	1948	only	-	Feb	29	 2:00s	1:00	S
-Rule	Italy	1948	only	-	Oct	 3	 2:00s	0	-
-Rule	Italy	1966	1968	-	May	Sun>=22	 0:00s	1:00	S
-Rule	Italy	1966	only	-	Sep	24	24:00	0	-
-Rule	Italy	1967	1969	-	Sep	Sun>=22	 0:00s	0	-
-Rule	Italy	1969	only	-	Jun	 1	 0:00s	1:00	S
-Rule	Italy	1970	only	-	May	31	 0:00s	1:00	S
-Rule	Italy	1970	only	-	Sep	lastSun	 0:00s	0	-
-Rule	Italy	1971	1972	-	May	Sun>=22	 0:00s	1:00	S
-Rule	Italy	1971	only	-	Sep	lastSun	 0:00s	0	-
-Rule	Italy	1972	only	-	Oct	 1	 0:00s	0	-
-Rule	Italy	1973	only	-	Jun	 3	 0:00s	1:00	S
-Rule	Italy	1973	1974	-	Sep	lastSun	 0:00s	0	-
-Rule	Italy	1974	only	-	May	26	 0:00s	1:00	S
-Rule	Italy	1975	only	-	Jun	 1	 0:00s	1:00	S
-Rule	Italy	1975	1977	-	Sep	lastSun	 0:00s	0	-
-Rule	Italy	1976	only	-	May	30	 0:00s	1:00	S
-Rule	Italy	1977	1979	-	May	Sun>=22	 0:00s	1:00	S
-Rule	Italy	1978	only	-	Oct	 1	 0:00s	0	-
-Rule	Italy	1979	only	-	Sep	30	 0:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Rome	0:49:56 -	LMT	1866 Sep 22
-			0:49:56	-	RMT	1893 Oct 31 23:49:56 # Rome Mean
-			1:00	Italy	CE%sT	1943 Sep 10
-			1:00	C-Eur	CE%sT	1944 Jun  4
-			1:00	Italy	CE%sT	1980
-			1:00	EU	CE%sT
-
-Link	Europe/Rome	Europe/Vatican
-Link	Europe/Rome	Europe/San_Marino
-
-# Latvia
-
-# From Liene Kanepe (1998-09-17):
-
-# I asked about this matter Scientific Secretary of the Institute of Astronomy
-# of The University of Latvia Dr. paed Mr. Ilgonis Vilks. I also searched the
-# correct data in juridical acts and I found some juridical documents about
-# changes in the counting of time in Latvia from 1981....
-#
-# Act No. 35 of the Council of Ministers of Latvian SSR of 1981-01-22 ...
-# according to the Act No. 925 of the Council of Ministers of USSR of 1980-10-24
-# ...: all year round the time of 2nd time zone + 1 hour, in addition turning
-# the hands of the clock 1 hour forward on 1 April at 00:00 (GMT 31 March 21:00)
-# and 1 hour backward on the 1 October at 00:00 (GMT 30 September 20:00).
-#
-# Act No. 592 of the Council of Ministers of Latvian SSR of 1984-09-24 ...
-# according to the Act No. 967 of the Council of Ministers of USSR of 1984-09-13
-# ...: all year round the time of 2nd time zone + 1 hour, in addition turning
-# the hands of the clock 1 hour forward on the last Sunday of March at 02:00
-# (GMT 23:00 on the previous day) and 1 hour backward on the last Sunday of
-# September at 03:00 (GMT 23:00 on the previous day).
-#
-# Act No. 81 of the Council of Ministers of Latvian SSR of 1989-03-22 ...
-# according to the Act No. 227 of the Council of Ministers of USSR of 1989-03-14
-# ...: since the last Sunday of March 1989 in Lithuanian SSR, Latvian SSR,
-# Estonian SSR and Kaliningrad region of Russian Federation all year round the
-# time of 2nd time zone (Moscow time minus one hour). On the territory of Latvia
-# transition to summer time is performed on the last Sunday of March at 02:00
-# (GMT 00:00), turning the hands of the clock 1 hour forward.  The end of
-# daylight saving time is performed on the last Sunday of September at 03:00
-# (GMT 00:00), turning the hands of the clock 1 hour backward. Exception is
-# 1989-03-26, when we must not turn the hands of the clock....
-#
-# The Regulations of the Cabinet of Ministers of the Republic of Latvia of
-# 1997-01-21 on transition to Summer time ... established the same order of
-# daylight savings time settings as in the States of the European Union.
-
-# From Andrei Ivanov (2000-03-06):
-# This year Latvia will not switch to Daylight Savings Time (as specified in
-# The Regulations of the Cabinet of Ministers of the Rep. of Latvia of
-# 29-Feb-2000 (No. 79) <http://www.lv-laiks.lv/wwwraksti/2000/071072/vd4.htm>,
-# in Latvian for subscribers only).
-
-# From RFE/RL Newsline
-# http://www.rferl.org/newsline/2001/01/3-CEE/cee-030101.html
-# (2001-01-03), noted after a heads-up by Rives McDow:
-# The Latvian government on 2 January decided that the country will
-# institute daylight-saving time this spring, LETA reported.
-# Last February the three Baltic states decided not to turn back their
-# clocks one hour in the spring....
-# Minister of Economy Aigars Kalvītis noted that Latvia had too few
-# daylight hours and thus decided to comply with a draft European
-# Commission directive that provides for instituting daylight-saving
-# time in EU countries between 2002 and 2006. The Latvian government
-# urged Lithuania and Estonia to adopt a similar time policy, but it
-# appears that they will not do so....
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Latvia	1989	1996	-	Mar	lastSun	 2:00s	1:00	S
-Rule	Latvia	1989	1996	-	Sep	lastSun	 2:00s	0	-
-
-# Milne 1899 says Riga was 1:36:28 (Polytechnique House time).
-# Byalokoz 1919 says Latvia was 1:36:34.
-# Go with Byalokoz.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Riga	1:36:34	-	LMT	1880
-			1:36:34	-	RMT	1918 Apr 15  2:00 # Riga MT
-			1:36:34	1:00	LST	1918 Sep 16  3:00 # Latvian ST
-			1:36:34	-	RMT	1919 Apr  1  2:00
-			1:36:34	1:00	LST	1919 May 22  3:00
-			1:36:34	-	RMT	1926 May 11
-			2:00	-	EET	1940 Aug  5
-			3:00	-	MSK	1941 Jul
-			1:00	C-Eur	CE%sT	1944 Oct 13
-			3:00	Russia	MSK/MSD	1989 Mar lastSun  2:00s
-			2:00	1:00	EEST	1989 Sep lastSun  2:00s
-			2:00	Latvia	EE%sT	1997 Jan 21
-			2:00	EU	EE%sT	2000 Feb 29
-			2:00	-	EET	2001 Jan  2
-			2:00	EU	EE%sT
-
-# Liechtenstein
-
-# From Paul Eggert (2013-09-09):
-# Shanks & Pottenger say Vaduz is like Zurich.
-
-# From Alois Treindl (2013-09-18):
-# http://www.eliechtensteinensia.li/LIJ/1978/1938-1978/1941.pdf
-# ... confirms on p. 6 that Liechtenstein followed Switzerland in 1941 and 1942.
-# I ... translate only the last two paragraphs:
-#    ... during second world war, in the years 1941 and 1942, Liechtenstein
-#    introduced daylight saving time, adapting to Switzerland.  From 1943 on
-#    central European time was in force throughout the year.
-#    From a report of the duke's government to the high council,
-#    regarding the introduction of a time law, of 31 May 1977.
-
-Link Europe/Zurich Europe/Vaduz
-
-
-# Lithuania
-
-# From Paul Eggert (2016-03-18):
-# The 1989 transition is from USSR act No. 227 (1989-03-14).
-
-# From Paul Eggert (1996-11-22):
-# IATA SSIM (1992/1996) says Lithuania uses W-Eur rules, but since it is
-# known to be wrong about Estonia and Latvia, assume it's wrong here too.
-
-# From Marius Gedminas (1998-08-07):
-# I would like to inform that in this year Lithuanian time zone
-# (Europe/Vilnius) was changed.
-
-# From ELTA No. 972 (2582) (1999-09-29) <http://www.elta.lt/>,
-# via Steffen Thorsen:
-# Lithuania has shifted back to the second time zone (GMT plus two hours)
-# to be valid here starting from October 31,
-# as decided by the national government on Wednesday....
-# The Lithuanian government also announced plans to consider a
-# motion to give up shifting to summer time in spring, as it was
-# already done by Estonia.
-
-# From the Fact File, Lithuanian State Department of Tourism
-# <http://www.tourism.lt/informa/ff.htm> (2000-03-27):
-# Local time is GMT+2 hours ..., no daylight saving.
-
-# From a user via Klaus Marten (2003-02-07):
-# As a candidate for membership of the European Union, Lithuania will
-# observe Summer Time in 2003, changing its clocks at the times laid
-# down in EU Directive 2000/84 of 19.I.01 (i.e. at the same times as its
-# neighbour Latvia). The text of the Lithuanian government Order of
-# 7.XI.02 to this effect can be found at
-# http://www.lrvk.lt/nut/11/n1749.htm
-
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Vilnius	1:41:16	-	LMT	1880
-			1:24:00	-	WMT	1917        # Warsaw Mean Time
-			1:35:36	-	KMT	1919 Oct 10 # Kaunas Mean Time
-			1:00	-	CET	1920 Jul 12
-			2:00	-	EET	1920 Oct  9
-			1:00	-	CET	1940 Aug  3
-			3:00	-	MSK	1941 Jun 24
-			1:00	C-Eur	CE%sT	1944 Aug
-			3:00	Russia	MSK/MSD	1989 Mar 26  2:00s
-			2:00	Russia	EE%sT	1991 Sep 29  2:00s
-			2:00	C-Eur	EE%sT	1998
-			2:00	-	EET	1998 Mar 29  1:00u
-			1:00	EU	CE%sT	1999 Oct 31  1:00u
-			2:00	-	EET	2003 Jan  1
-			2:00	EU	EE%sT
-
-# Luxembourg
-# Whitman disagrees with most of these dates in minor ways;
-# go with Shanks & Pottenger.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Lux	1916	only	-	May	14	23:00	1:00	S
-Rule	Lux	1916	only	-	Oct	 1	 1:00	0	-
-Rule	Lux	1917	only	-	Apr	28	23:00	1:00	S
-Rule	Lux	1917	only	-	Sep	17	 1:00	0	-
-Rule	Lux	1918	only	-	Apr	Mon>=15	 2:00s	1:00	S
-Rule	Lux	1918	only	-	Sep	Mon>=15	 2:00s	0	-
-Rule	Lux	1919	only	-	Mar	 1	23:00	1:00	S
-Rule	Lux	1919	only	-	Oct	 5	 3:00	0	-
-Rule	Lux	1920	only	-	Feb	14	23:00	1:00	S
-Rule	Lux	1920	only	-	Oct	24	 2:00	0	-
-Rule	Lux	1921	only	-	Mar	14	23:00	1:00	S
-Rule	Lux	1921	only	-	Oct	26	 2:00	0	-
-Rule	Lux	1922	only	-	Mar	25	23:00	1:00	S
-Rule	Lux	1922	only	-	Oct	Sun>=2	 1:00	0	-
-Rule	Lux	1923	only	-	Apr	21	23:00	1:00	S
-Rule	Lux	1923	only	-	Oct	Sun>=2	 2:00	0	-
-Rule	Lux	1924	only	-	Mar	29	23:00	1:00	S
-Rule	Lux	1924	1928	-	Oct	Sun>=2	 1:00	0	-
-Rule	Lux	1925	only	-	Apr	 5	23:00	1:00	S
-Rule	Lux	1926	only	-	Apr	17	23:00	1:00	S
-Rule	Lux	1927	only	-	Apr	 9	23:00	1:00	S
-Rule	Lux	1928	only	-	Apr	14	23:00	1:00	S
-Rule	Lux	1929	only	-	Apr	20	23:00	1:00	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Europe/Luxembourg	0:24:36 -	LMT	1904 Jun
-			1:00	Lux	CE%sT	1918 Nov 25
-			0:00	Lux	WE%sT	1929 Oct  6  2:00s
-			0:00	Belgium	WE%sT	1940 May 14  3:00
-			1:00	C-Eur	WE%sT	1944 Sep 18  3:00
-			1:00	Belgium	CE%sT	1977
-			1:00	EU	CE%sT
-
-# North Macedonia
-# See Europe/Belgrade.
-
-# Malta
-#
-# From Paul Eggert (2016-10-21):
-# Assume 1900-1972 was like Rome, overriding Shanks.
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Malta	1973	only	-	Mar	31	0:00s	1:00	S
-Rule	Malta	1973	only	-	Sep	29	0:00s	0	-
-Rule	Malta	1974	only	-	Apr	21	0:00s	1:00	S
-Rule	Malta	1974	only	-	Sep	16	0:00s	0	-
-Rule	Malta	1975	1979	-	Apr	Sun>=15	2:00	1:00	S
-Rule	Malta	1975	1980	-	Sep	Sun>=15	2:00	0	-
-Rule	Malta	1980	only	-	Mar	31	2:00	1:00	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Malta	0:58:04 -	LMT	1893 Nov  2  0:00s # Valletta
-			1:00	Italy	CE%sT	1973 Mar 31
-			1:00	Malta	CE%sT	1981
-			1:00	EU	CE%sT
-
-# Moldova
-
-# From Stepan Golosunov (2016-03-07):
-# the act of the government of the Republic of Moldova Nr. 132 from 1990-05-04
-# http://lex.justice.md/viewdoc.php?action=view&view=doc&id=298782&lang=2
-# ... says that since 1990-05-06 on the territory of the Moldavian SSR
-# time would be calculated as the standard time of the second time belt
-# plus one hour of the "summer" time. To implement that clocks would be
-# adjusted one hour backwards at 1990-05-06 2:00. After that "summer"
-# time would be cancelled last Sunday of September at 3:00 and
-# reintroduced last Sunday of March at 2:00.
-
-# From Paul Eggert (2006-03-22):
-# A previous version of this database followed Shanks & Pottenger, who write
-# that Tiraspol switched to Moscow time on 1992-01-19 at 02:00.
-# However, this is most likely an error, as Moldova declared independence
-# on 1991-08-27 (the 1992-01-19 date is that of a Russian decree).
-# In early 1992 there was large-scale interethnic violence in the area
-# and it's possible that some Russophones continued to observe Moscow time.
-# But [two people] separately reported via
-# Jesper NĂžrgaard that as of 2001-01-24 Tiraspol was like Chisinau.
-# The Tiraspol entry has therefore been removed for now.
-#
-# From Alexander Krivenyshev (2011-10-17):
-# Pridnestrovian Moldavian Republic (PMR, also known as
-# "Pridnestrovie") has abolished seasonal clock change (no transition
-# to the Winter Time).
-#
-# News (in Russian):
-# http://www.kyivpost.ua/russia/news/pridnestrove-otkazalos-ot-perehoda-na-zimnee-vremya-30954.html
-# http://www.allmoldova.com/moldova-news/1249064116.html
-#
-# The substance of this change (reinstatement of the Tiraspol entry)
-# is from a patch from Petr Machata (2011-10-17)
-#
-# From Tim Parenti (2011-10-19)
-# In addition, being situated at +4651+2938 would give Tiraspol
-# a pre-1880 LMT offset of 1:58:32.
-#
-# (which agrees with the earlier entry that had been removed)
-#
-# From Alexander Krivenyshev (2011-10-26)
-# NO need to divide Moldova into two timezones at this point.
-# As of today, Transnistria (Pridnestrovie)- Tiraspol reversed its own
-# decision to abolish DST this winter.
-# Following Moldova and neighboring Ukraine- Transnistria (Pridnestrovie)-
-# Tiraspol will go back to winter time on October 30, 2011.
-# News from Moldova (in russian):
-# https://ru.publika.md/link_317061.html
-
-# From Roman Tudos (2015-07-02):
-# http://lex.justice.md/index.php?action=view&view=doc&lang=1&id=355077
-# From Paul Eggert (2015-07-01):
-# The abovementioned official link to IGO1445-868/2014 states that
-# 2014-10-26's fallback transition occurred at 03:00 local time.  Also,
-# https://www.trm.md/en/social/la-30-martie-vom-trece-la-ora-de-vara
-# says the 2014-03-30 spring-forward transition was at 02:00 local time.
-# Guess that since 1997 Moldova has switched one hour before the EU.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Moldova	1997	max	-	Mar	lastSun	 2:00	1:00	S
-Rule	Moldova	1997	max	-	Oct	lastSun	 3:00	0	-
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Chisinau	1:55:20 -	LMT	1880
-			1:55	-	CMT	1918 Feb 15 # Chisinau MT
-			1:44:24	-	BMT	1931 Jul 24 # Bucharest MT
-			2:00	Romania	EE%sT	1940 Aug 15
-			2:00	1:00	EEST	1941 Jul 17
-			1:00	C-Eur	CE%sT	1944 Aug 24
-			3:00	Russia	MSK/MSD	1990 May  6  2:00
-			2:00	Russia	EE%sT	1992
-			2:00	E-Eur	EE%sT	1997
-# See Romania commentary for the guessed 1997 transition to EU rules.
-			2:00	Moldova	EE%sT
-
-# Monaco
-# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
-# more precise 0:09:21.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Monaco	0:29:32 -	LMT	1891 Mar 15
-			0:09:21	-	PMT	1911 Mar 11 # Paris Mean Time
-			0:00	France	WE%sT	1945 Sep 16  3:00
-			1:00	France	CE%sT	1977
-			1:00	EU	CE%sT
-
-# Montenegro
-# See Europe/Belgrade.
-
-# Netherlands
-
-# Howse writes that the Netherlands' railways used GMT between 1892 and 1940,
-# but for other purposes the Netherlands used Amsterdam mean time.
-
-# However, Robert H. van Gent writes (2001-04-01):
-# Howse's statement is only correct up to 1909. From 1909-05-01 (00:00:00
-# Amsterdam mean time) onwards, the whole of the Netherlands (including
-# the Dutch railways) was required by law to observe Amsterdam mean time
-# (19 minutes 32.13 seconds ahead of GMT). This had already been the
-# common practice (except for the railways) for many decades but it was
-# not until 1909 when the Dutch government finally defined this by law.
-# On 1937-07-01 this was changed to 20 minutes (exactly) ahead of GMT and
-# was generally known as Dutch Time ("Nederlandse Tijd").
-#
-# (2001-04-08):
-# 1892-05-01 was the date when the Dutch railways were by law required to
-# observe GMT while the remainder of the Netherlands adhered to the common
-# practice of following Amsterdam mean time.
-#
-# (2001-04-09):
-# In 1835 the authorities of the province of North Holland requested the
-# municipal authorities of the towns and cities in the province to observe
-# Amsterdam mean time but I do not know in how many cases this request was
-# actually followed.
-#
-# From 1852 onwards the Dutch telegraph offices were by law required to
-# observe Amsterdam mean time. As the time signals from the observatory of
-# Leiden were also distributed by the telegraph system, I assume that most
-# places linked up with the telegraph (and railway) system automatically
-# adopted Amsterdam mean time.
-#
-# Although the early Dutch railway companies initially observed a variety
-# of times, most of them had adopted Amsterdam mean time by 1858 but it
-# was not until 1866 when they were all required by law to observe
-# Amsterdam mean time.
-
-# The data entries before 1945 are taken from
-# https://www.staff.science.uu.nl/~gent0113/wettijd/wettijd.htm
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Neth	1916	only	-	May	 1	0:00	1:00	NST	# Netherlands Summer Time
-Rule	Neth	1916	only	-	Oct	 1	0:00	0	AMT	# Amsterdam Mean Time
-Rule	Neth	1917	only	-	Apr	16	2:00s	1:00	NST
-Rule	Neth	1917	only	-	Sep	17	2:00s	0	AMT
-Rule	Neth	1918	1921	-	Apr	Mon>=1	2:00s	1:00	NST
-Rule	Neth	1918	1921	-	Sep	lastMon	2:00s	0	AMT
-Rule	Neth	1922	only	-	Mar	lastSun	2:00s	1:00	NST
-Rule	Neth	1922	1936	-	Oct	Sun>=2	2:00s	0	AMT
-Rule	Neth	1923	only	-	Jun	Fri>=1	2:00s	1:00	NST
-Rule	Neth	1924	only	-	Mar	lastSun	2:00s	1:00	NST
-Rule	Neth	1925	only	-	Jun	Fri>=1	2:00s	1:00	NST
-# From 1926 through 1939 DST began 05-15, except that it was delayed by a week
-# in years when 05-15 fell in the Pentecost weekend.
-Rule	Neth	1926	1931	-	May	15	2:00s	1:00	NST
-Rule	Neth	1932	only	-	May	22	2:00s	1:00	NST
-Rule	Neth	1933	1936	-	May	15	2:00s	1:00	NST
-Rule	Neth	1937	only	-	May	22	2:00s	1:00	NST
-Rule	Neth	1937	only	-	Jul	 1	0:00	1:00	S
-Rule	Neth	1937	1939	-	Oct	Sun>=2	2:00s	0	-
-Rule	Neth	1938	1939	-	May	15	2:00s	1:00	S
-Rule	Neth	1945	only	-	Apr	 2	2:00s	1:00	S
-Rule	Neth	1945	only	-	Sep	16	2:00s	0	-
-#
-# Amsterdam Mean Time was +00:19:32.13, but the .13 is omitted
-# below because the current format requires GMTOFF to be an integer.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Europe/Amsterdam	0:19:32 -	LMT	1835
-			0:19:32	Neth	%s	1937 Jul  1
-			0:20	Neth +0020/+0120 1940 May 16  0:00
-			1:00	C-Eur	CE%sT	1945 Apr  2  2:00
-			1:00	Neth	CE%sT	1977
-			1:00	EU	CE%sT
-
-# Norway
-# http://met.no/met/met_lex/q_u/sommertid.html (2004-01) agrees with Shanks &
-# Pottenger.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Norway	1916	only	-	May	22	1:00	1:00	S
-Rule	Norway	1916	only	-	Sep	30	0:00	0	-
-Rule	Norway	1945	only	-	Apr	 2	2:00s	1:00	S
-Rule	Norway	1945	only	-	Oct	 1	2:00s	0	-
-Rule	Norway	1959	1964	-	Mar	Sun>=15	2:00s	1:00	S
-Rule	Norway	1959	1965	-	Sep	Sun>=15	2:00s	0	-
-Rule	Norway	1965	only	-	Apr	25	2:00s	1:00	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Oslo	0:43:00 -	LMT	1895 Jan  1
-			1:00	Norway	CE%sT	1940 Aug 10 23:00
-			1:00	C-Eur	CE%sT	1945 Apr  2  2:00
-			1:00	Norway	CE%sT	1980
-			1:00	EU	CE%sT
-
-# Svalbard & Jan Mayen
-
-# From Steffen Thorsen (2001-05-01):
-# Although I could not find it explicitly, it seems that Jan Mayen and
-# Svalbard have been using the same time as Norway at least since the
-# time they were declared as parts of Norway.  Svalbard was declared
-# as a part of Norway by law of 1925-07-17 no 11, section 4 and Jan
-# Mayen by law of 1930-02-27 no 2, section 2. (From
-# <http://www.lovdata.no/all/nl-19250717-011.html> and
-# <http://www.lovdata.no/all/nl-19300227-002.html>).  The law/regulation
-# for normal/standard time in Norway is from 1894-06-29 no 1 (came
-# into operation on 1895-01-01) and Svalbard/Jan Mayen seem to be a
-# part of this law since 1925/1930. (From
-# <http://www.lovdata.no/all/nl-18940629-001.html>) I have not been
-# able to find if Jan Mayen used a different time zone (e.g. -0100)
-# before 1930. Jan Mayen has only been "inhabited" since 1921 by
-# Norwegian meteorologists and maybe used the same time as Norway ever
-# since 1921.  Svalbard (Arctic/Longyearbyen) has been inhabited since
-# before 1895, and therefore probably changed the local time somewhere
-# between 1895 and 1925 (inclusive).
-
-# From Paul Eggert (2013-09-04):
-#
-# Actually, Jan Mayen was never occupied by Germany during World War II,
-# so it must have diverged from Oslo time during the war, as Oslo was
-# keeping Berlin time.
-#
-# <https://www.jan-mayen.no/history.htm> says that the meteorologists
-# burned down their station in 1940 and left the island, but returned in
-# 1941 with a small Norwegian garrison and continued operations despite
-# frequent air attacks from Germans.  In 1943 the Americans established a
-# radiolocating station on the island, called "Atlantic City".  Possibly
-# the UT offset changed during the war, but I think it unlikely that
-# Jan Mayen used German daylight-saving rules.
-#
-# Svalbard is more complicated, as it was raided in August 1941 by an
-# Allied party that evacuated the civilian population to England (says
-# <http://www.bartleby.com/65/sv/Svalbard.html>).  The Svalbard FAQ
-# <http://www.svalbard.com/SvalbardFAQ.html> says that the Germans were
-# expelled on 1942-05-14.  However, small parties of Germans did return,
-# and according to Wilhelm Dege's book "War North of 80" (1954)
-# http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html
-# the German armed forces at the Svalbard weather station code-named
-# Haudegen did not surrender to the Allies until September 1945.
-#
-# All these events predate our cutoff date of 1970, so use Europe/Oslo
-# for these regions.
-Link	Europe/Oslo	Arctic/Longyearbyen
-
-# Poland
-
-# The 1919 dates and times can be found in Tygodnik Urzędowy nr 1 (1919-03-20),
-# <http://www.wbc.poznan.pl/publication/32156> pp 1-2.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Poland	1918	1919	-	Sep	16	2:00s	0	-
-Rule	Poland	1919	only	-	Apr	15	2:00s	1:00	S
-Rule	Poland	1944	only	-	Apr	 3	2:00s	1:00	S
-# Whitman gives 1944 Nov 30; go with Shanks & Pottenger.
-Rule	Poland	1944	only	-	Oct	 4	2:00	0	-
-# For 1944-1948 Whitman gives the previous day; go with Shanks & Pottenger.
-Rule	Poland	1945	only	-	Apr	29	0:00	1:00	S
-Rule	Poland	1945	only	-	Nov	 1	0:00	0	-
-# For 1946 on the source is Kazimierz Borkowski,
-# ToruƄ Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U.,
-# https://www.astro.uni.torun.pl/~kb/Artykuly/U-PA/Czas2.htm#tth_tAb1
-# Thanks to PrzemysƂaw Augustyniak (2005-05-28) for this reference.
-# He also gives these further references:
-# Mon Pol nr 13, poz 162 (1995) <http://www.abc.com.pl/serwis/mp/1995/0162.htm>
-# Druk nr 2180 (2003) <http://www.senat.gov.pl/k5/dok/sejm/053/2180.pdf>
-Rule	Poland	1946	only	-	Apr	14	0:00s	1:00	S
-Rule	Poland	1946	only	-	Oct	 7	2:00s	0	-
-Rule	Poland	1947	only	-	May	 4	2:00s	1:00	S
-Rule	Poland	1947	1949	-	Oct	Sun>=1	2:00s	0	-
-Rule	Poland	1948	only	-	Apr	18	2:00s	1:00	S
-Rule	Poland	1949	only	-	Apr	10	2:00s	1:00	S
-Rule	Poland	1957	only	-	Jun	 2	1:00s	1:00	S
-Rule	Poland	1957	1958	-	Sep	lastSun	1:00s	0	-
-Rule	Poland	1958	only	-	Mar	30	1:00s	1:00	S
-Rule	Poland	1959	only	-	May	31	1:00s	1:00	S
-Rule	Poland	1959	1961	-	Oct	Sun>=1	1:00s	0	-
-Rule	Poland	1960	only	-	Apr	 3	1:00s	1:00	S
-Rule	Poland	1961	1964	-	May	lastSun	1:00s	1:00	S
-Rule	Poland	1962	1964	-	Sep	lastSun	1:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Warsaw	1:24:00 -	LMT	1880
-			1:24:00	-	WMT	1915 Aug  5 # Warsaw Mean Time
-			1:00	C-Eur	CE%sT	1918 Sep 16  3:00
-			2:00	Poland	EE%sT	1922 Jun
-			1:00	Poland	CE%sT	1940 Jun 23  2:00
-			1:00	C-Eur	CE%sT	1944 Oct
-			1:00	Poland	CE%sT	1977
-			1:00	W-Eur	CE%sT	1988
-			1:00	EU	CE%sT
-
-# Portugal
-
-# From Paul Eggert (2014-08-11), after a heads-up from Stephen Colebourne:
-# According to a Portuguese decree (1911-05-26)
-# https://dre.pt/application/dir/pdf1sdip/1911/05/12500/23132313.pdf
-# Lisbon was at -0:36:44.68, but switched to GMT on 1912-01-01 at 00:00.
-# Round the old offset to -0:36:45.  This agrees with Willett....
-#
-# From Michael Deckers (2018-02-15):
-# article 5 [of the 1911 decree; Deckers's translation] ...:
-# These dispositions shall enter into force at the instant at which,
-# according to the 2nd article, the civil day January 1, 1912 begins,
-# all clocks therefore having to be advanced or set back correspondingly ...
-
-# From Rui Pedro Salgueiro (1992-11-12):
-# Portugal has recently (September, 27) changed timezone
-# (from WET to MET or CET) to harmonize with EEC.
-#
-# Martin Bruckmann (1996-02-29) reports via Peter Ilieve
-# that Portugal is reverting to 0:00 by not moving its clocks this spring.
-# The new Prime Minister was fed up with getting up in the dark in the winter.
-#
-# From Paul Eggert (1996-11-12):
-# IATA SSIM (1991-09) reports several 1991-09 and 1992-09 transitions
-# at 02:00u, not 01:00u.  Assume that these are typos.
-# IATA SSIM (1991/1992) reports that the Azores were at -1:00.
-# IATA SSIM (1993-02) says +0:00; later issues (through 1996-09) say -1:00.
-# Guess that the Azores changed to EU rules in 1992 (since that's when Portugal
-# harmonized with EU rules), and that they stayed +0:00 that winter.
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-# DSH writes that despite Decree 1,469 (1915), the change to the clocks was not
-# done every year, depending on what Spain did, because of railroad schedules.
-# Go with Shanks & Pottenger.
-Rule	Port	1916	only	-	Jun	17	23:00	1:00	S
-# Whitman gives 1916 Oct 31; go with Shanks & Pottenger.
-Rule	Port	1916	only	-	Nov	 1	 1:00	0	-
-Rule	Port	1917	only	-	Feb	28	23:00s	1:00	S
-Rule	Port	1917	1921	-	Oct	14	23:00s	0	-
-Rule	Port	1918	only	-	Mar	 1	23:00s	1:00	S
-Rule	Port	1919	only	-	Feb	28	23:00s	1:00	S
-Rule	Port	1920	only	-	Feb	29	23:00s	1:00	S
-Rule	Port	1921	only	-	Feb	28	23:00s	1:00	S
-Rule	Port	1924	only	-	Apr	16	23:00s	1:00	S
-Rule	Port	1924	only	-	Oct	14	23:00s	0	-
-Rule	Port	1926	only	-	Apr	17	23:00s	1:00	S
-Rule	Port	1926	1929	-	Oct	Sat>=1	23:00s	0	-
-Rule	Port	1927	only	-	Apr	 9	23:00s	1:00	S
-Rule	Port	1928	only	-	Apr	14	23:00s	1:00	S
-Rule	Port	1929	only	-	Apr	20	23:00s	1:00	S
-Rule	Port	1931	only	-	Apr	18	23:00s	1:00	S
-# Whitman gives 1931 Oct 8; go with Shanks & Pottenger.
-Rule	Port	1931	1932	-	Oct	Sat>=1	23:00s	0	-
-Rule	Port	1932	only	-	Apr	 2	23:00s	1:00	S
-Rule	Port	1934	only	-	Apr	 7	23:00s	1:00	S
-# Whitman gives 1934 Oct 5; go with Shanks & Pottenger.
-Rule	Port	1934	1938	-	Oct	Sat>=1	23:00s	0	-
-# Shanks & Pottenger give 1935 Apr 30; go with Whitman.
-Rule	Port	1935	only	-	Mar	30	23:00s	1:00	S
-Rule	Port	1936	only	-	Apr	18	23:00s	1:00	S
-# Whitman gives 1937 Apr 2; go with Shanks & Pottenger.
-Rule	Port	1937	only	-	Apr	 3	23:00s	1:00	S
-Rule	Port	1938	only	-	Mar	26	23:00s	1:00	S
-Rule	Port	1939	only	-	Apr	15	23:00s	1:00	S
-# Whitman gives 1939 Oct 7; go with Shanks & Pottenger.
-Rule	Port	1939	only	-	Nov	18	23:00s	0	-
-Rule	Port	1940	only	-	Feb	24	23:00s	1:00	S
-# Shanks & Pottenger give 1940 Oct 7; go with Whitman.
-Rule	Port	1940	1941	-	Oct	 5	23:00s	0	-
-Rule	Port	1941	only	-	Apr	 5	23:00s	1:00	S
-Rule	Port	1942	1945	-	Mar	Sat>=8	23:00s	1:00	S
-Rule	Port	1942	only	-	Apr	25	22:00s	2:00	M # Midsummer
-Rule	Port	1942	only	-	Aug	15	22:00s	1:00	S
-Rule	Port	1942	1945	-	Oct	Sat>=24	23:00s	0	-
-Rule	Port	1943	only	-	Apr	17	22:00s	2:00	M
-Rule	Port	1943	1945	-	Aug	Sat>=25	22:00s	1:00	S
-Rule	Port	1944	1945	-	Apr	Sat>=21	22:00s	2:00	M
-Rule	Port	1946	only	-	Apr	Sat>=1	23:00s	1:00	S
-Rule	Port	1946	only	-	Oct	Sat>=1	23:00s	0	-
-Rule	Port	1947	1949	-	Apr	Sun>=1	 2:00s	1:00	S
-Rule	Port	1947	1949	-	Oct	Sun>=1	 2:00s	0	-
-# Shanks & Pottenger say DST was observed in 1950; go with Whitman.
-# Whitman gives Oct lastSun for 1952 on; go with Shanks & Pottenger.
-Rule	Port	1951	1965	-	Apr	Sun>=1	 2:00s	1:00	S
-Rule	Port	1951	1965	-	Oct	Sun>=1	 2:00s	0	-
-Rule	Port	1977	only	-	Mar	27	 0:00s	1:00	S
-Rule	Port	1977	only	-	Sep	25	 0:00s	0	-
-Rule	Port	1978	1979	-	Apr	Sun>=1	 0:00s	1:00	S
-Rule	Port	1978	only	-	Oct	 1	 0:00s	0	-
-Rule	Port	1979	1982	-	Sep	lastSun	 1:00s	0	-
-Rule	Port	1980	only	-	Mar	lastSun	 0:00s	1:00	S
-Rule	Port	1981	1982	-	Mar	lastSun	 1:00s	1:00	S
-Rule	Port	1983	only	-	Mar	lastSun	 2:00s	1:00	S
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Lisbon	-0:36:45 -	LMT	1884
-			-0:36:45 -	LMT	1912 Jan  1  0:00u # Lisbon MT
-			 0:00	Port	WE%sT	1966 Apr  3  2:00
-			 1:00	-	CET	1976 Sep 26  1:00
-			 0:00	Port	WE%sT	1983 Sep 25  1:00s
-			 0:00	W-Eur	WE%sT	1992 Sep 27  1:00s
-			 1:00	EU	CE%sT	1996 Mar 31  1:00u
-			 0:00	EU	WE%sT
-# This Zone can be simplified once we assume zic %z.
-Zone Atlantic/Azores	-1:42:40 -	LMT	1884        # Ponta Delgada
-			-1:54:32 -	HMT	1912 Jan  1  2:00u # Horta MT
-			-2:00	Port	-02/-01	1942 Apr 25 22:00s
-			-2:00	Port	+00	1942 Aug 15 22:00s
-			-2:00	Port	-02/-01	1943 Apr 17 22:00s
-			-2:00	Port	+00	1943 Aug 28 22:00s
-			-2:00	Port	-02/-01	1944 Apr 22 22:00s
-			-2:00	Port	+00	1944 Aug 26 22:00s
-			-2:00	Port	-02/-01	1945 Apr 21 22:00s
-			-2:00	Port	+00	1945 Aug 25 22:00s
-			-2:00	Port	-02/-01	1966 Apr  3  2:00
-			-1:00	Port	-01/+00	1983 Sep 25  1:00s
-			-1:00	W-Eur	-01/+00	1992 Sep 27  1:00s
-			 0:00	EU	WE%sT	1993 Mar 28  1:00u
-			-1:00	EU	-01/+00
-# This Zone can be simplified once we assume zic %z.
-Zone Atlantic/Madeira	-1:07:36 -	LMT	1884        # Funchal
-			-1:07:36 -	FMT	1912 Jan  1  1:00u # Funchal MT
-			-1:00	Port	-01/+00	1942 Apr 25 22:00s
-			-1:00	Port	+01	1942 Aug 15 22:00s
-			-1:00	Port	-01/+00	1943 Apr 17 22:00s
-			-1:00	Port	+01	1943 Aug 28 22:00s
-			-1:00	Port	-01/+00	1944 Apr 22 22:00s
-			-1:00	Port	+01	1944 Aug 26 22:00s
-			-1:00	Port	-01/+00	1945 Apr 21 22:00s
-			-1:00	Port	+01	1945 Aug 25 22:00s
-			-1:00	Port	-01/+00	1966 Apr  3  2:00
-			 0:00	Port	WE%sT	1983 Sep 25  1:00s
-			 0:00	EU	WE%sT
-
-# Romania
-#
-# From Paul Eggert (1999-10-07):
-# Nine O'clock <http://www.nineoclock.ro/POL/1778pol.html>
-# (1998-10-23) reports that the switch occurred at
-# 04:00 local time in fall 1998.  For lack of better info,
-# assume that Romania and Moldova switched to EU rules in 1997,
-# the same year as Bulgaria.
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Romania	1932	only	-	May	21	 0:00s	1:00	S
-Rule	Romania	1932	1939	-	Oct	Sun>=1	 0:00s	0	-
-Rule	Romania	1933	1939	-	Apr	Sun>=2	 0:00s	1:00	S
-Rule	Romania	1979	only	-	May	27	 0:00	1:00	S
-Rule	Romania	1979	only	-	Sep	lastSun	 0:00	0	-
-Rule	Romania	1980	only	-	Apr	 5	23:00	1:00	S
-Rule	Romania	1980	only	-	Sep	lastSun	 1:00	0	-
-Rule	Romania	1991	1993	-	Mar	lastSun	 0:00s	1:00	S
-Rule	Romania	1991	1993	-	Sep	lastSun	 0:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Europe/Bucharest	1:44:24 -	LMT	1891 Oct
-			1:44:24	-	BMT	1931 Jul 24 # Bucharest MT
-			2:00	Romania	EE%sT	1981 Mar 29  2:00s
-			2:00	C-Eur	EE%sT	1991
-			2:00	Romania	EE%sT	1994
-			2:00	E-Eur	EE%sT	1997
-			2:00	EU	EE%sT
-
-
-# Russia
-
-# From Alexander Krivenyshev (2011-09-15):
-# Based on last Russian Government Decree No. 725 on August 31, 2011
-# (Government document
-# http://www.government.ru/gov/results/16355/print/
-# in Russian)
-# there are few corrections have to be made for some Russian time zones...
-# All updated Russian Time Zones were placed in table and translated to English
-# by WorldTimeZone.com at the link below:
-# http://www.worldtimezone.com/dst_news/dst_news_russia36.htm
-
-# From Sanjeev Gupta (2011-09-27):
-# Scans of [Decree No. 23 of January 8, 1992] are available at:
-# http://government.consultant.ru/page.aspx?1223966
-# They are in Cyrillic letters (presumably Russian).
-
-# From Arthur David Olson (2012-05-09):
-# Regarding the instant when clocks in time-zone-shifting parts of Russia
-# changed in September 2011:
-#
-# One source is
-# http://government.ru/gov/results/16355/
-# which, according to translate.google.com, begins "Decree of August 31,
-# 2011 No. 725" and contains no other dates or "effective date" information.
-#
-# Another source is
-# https://rg.ru/2011/09/06/chas-zona-dok.html
-# which, according to translate.google.com, begins "Resolution of the
-# Government of the Russian Federation on August 31, 2011 N 725" and also
-# contains "Date first official publication: September 6, 2011 Posted on:
-# in the 'RG' - Federal Issue No. 5573 September 6, 2011" but which
-# does not contain any "effective date" information.
-#
-# Another source is
-# https://en.wikipedia.org/wiki/Oymyakonsky_District#cite_note-RuTime-7
-# which, in note 8, contains "Resolution No. 725 of August 31, 2011...
-# Effective as of after 7 days following the day of the official publication"
-# but which does not contain any reference to September 6, 2011.
-#
-# The Wikipedia article refers to
-# http://base.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=118896
-# which seems to copy the text of the government.ru page.
-#
-# Tobias Conradi combines Wikipedia's
-# "as of after 7 days following the day of the official publication"
-# with www.rg.ru's "Date of first official publication: September 6, 2011" to
-# get September 13, 2011 as the cutover date (unusually, a Tuesday, as Tobias
-# Conradi notes).
-#
-# None of the sources indicates a time of day for changing clocks.
-#
-# Go with 2011-09-13 0:00s.
-
-# From Alexander Krivenyshev (2014-07-01):
-# According to the Russian news (ITAR-TASS News Agency)
-# http://en.itar-tass.com/russia/738562
-# the State Duma has approved ... the draft bill on returning to
-# winter time standard and return Russia 11 time zones.  The new
-# regulations will come into effect on October 26, 2014 at 02:00 ...
-# http://asozd2.duma.gov.ru/main.nsf/%28Spravka%29?OpenAgent&RN=431985-6&02
-# Here is a link where we put together table (based on approved Bill N
-# 431985-6) with proposed 11 Russian time zones and corresponding
-# areas/cities/administrative centers in the Russian Federation (in English):
-# http://www.worldtimezone.com/dst_news/dst_news_russia65.html
-#
-# From Alexander Krivenyshev (2014-07-22):
-# Putin signed the Federal Law 431985-6 ... (in Russian)
-# http://itar-tass.com/obschestvo/1333711
-# http://www.pravo.gov.ru:8080/page.aspx?111660
-# http://www.kremlin.ru/acts/46279
-# From October 26, 2014 the new Russian time zone map will look like this:
-# http://www.worldtimezone.com/dst_news/dst_news_russia-map-2014-07.html
-
-# From Paul Eggert (2006-03-22):
-# Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991,
-# are from Andrey A. Chernov.  The rest is from Shanks & Pottenger,
-# except we follow Chernov's report that 1992 DST transitions were Sat
-# 23:00, not Sun 02:00s.
-#
-# From Stanislaw A. Kuzikowski (1994-06-29):
-# But now it is some months since Novosibirsk is 3 hours ahead of Moscow!
-# I do not know why they have decided to make this change;
-# as far as I remember it was done exactly during winter->summer switching
-# so we (Novosibirsk) simply did not switch.
-#
-# From Andrey A. Chernov (1996-10-04):
-# 'MSK' and 'MSD' were born and used initially on Moscow computers with
-# UNIX-like OSes by several developer groups (e.g. Demos group, Kiae group)....
-# The next step was the UUCP network, the Relcom predecessor
-# (used mainly for mail), and MSK/MSD was actively used there.
-#
-# From Chris Carrier (1996-10-30):
-# According to a friend of mine who rode the Trans-Siberian Railroad from
-# Moscow to Irkutsk in 1995, public air and rail transport in Russia ...
-# still follows Moscow time, no matter where in Russia it is located.
-#
-# For Grozny, Chechnya, we have the following story from
-# John Daniszewski, "Scavengers in the Rubble", Los Angeles Times (2001-02-07):
-# News - often false - is spread by word of mouth.  A rumor that it was
-# time to move the clocks back put this whole city out of sync with
-# the rest of Russia for two weeks - even soldiers stationed here began
-# enforcing curfew at the wrong time.
-#
-# From Gwillim Law (2001-06-05):
-# There's considerable evidence that Sakhalin Island used to be in
-# UTC+11, and has changed to UTC+10, in this decade.  I start with the
-# SSIM, which listed Yuzhno-Sakhalinsk in zone RU10 along with Magadan
-# until February 1997, and then in RU9 with Khabarovsk and Vladivostok
-# since September 1997....  Although the Kuril Islands are
-# administratively part of Sakhalin oblast', they appear to have
-# remained on UTC+11 along with Magadan.
-
-# From Marat Nigametzianov (2018-07-16):
-# this is link to order from 1956 about timezone in USSR
-# http://astro.uni-altai.ru/~orion/blog/2011/11/novyie-granitsyi-chasovyih-poyasov-v-sssr/
-#
-# From Paul Eggert (2018-07-16):
-# Perhaps someone could translate the above-mentioned link and use it
-# to correct our data for the ex-Soviet Union.  It cites the following:
-# Â«ĐŸĐŸŃŃĐœĐŸĐ” ĐČŃ€Đ”ĐŒŃ Đž ĐœĐŸĐČŃ‹Đ” ĐłŃ€Đ°ĐœĐžŃ†Ń‹ Ń‡Đ°ŃĐŸĐČых ĐżĐŸŃŃĐŸĐČ» / ŃĐŸŃŃ‚. П.Н. Đ”ĐŸĐ»ĐłĐŸĐČ,
-# ĐŸŃ‚ĐČ. рДЎ. Г.Д. Đ‘ŃƒŃ€ĐŽŃƒĐœ - М: ĐšĐŸĐŒĐžŃ‚Đ”Ń‚ ŃŃ‚Đ°ĐœĐŽĐ°Ń€Ń‚ĐŸĐČ, ĐŒĐ”Ń€ Đž ĐžĐ·ĐŒĐ”Ń€ĐžŃ‚Đ”Đ»ŃŒĐœŃ‹Ń…
-# ĐżŃ€ĐžĐ±ĐŸŃ€ĐŸĐČ ĐżŃ€Đž ĐĄĐŸĐČДтД ĐœĐžĐœĐžŃŃ‚Ń€ĐŸĐČ ĐĄĐĄĐĄĐ , ĐœĐ”Đ¶ĐŽŃƒĐČĐ”ĐŽĐŸĐŒŃŃ‚ĐČĐ”ĐœĐœĐ°Ń ĐșĐŸĐŒĐžŃŃĐžŃ
-# Đ”ĐŽĐžĐœĐŸĐč ŃĐ»ŃƒĐ¶Đ±Ń‹ ĐČŃ€Đ”ĐŒĐ”ĐœĐž, 1956 Đł.
-# This book looks like it would be a helpful resource for the Soviet
-# Union through 1956.  Although a copy was in the Scientific Library
-# of Tomsk State University, I have not been able to track down a copy nearby.
-#
-# From Stepan Golosunov (2018-07-21):
-# http://astro.uni-altai.ru/~orion/blog/2015/05/center-reforma-ischisleniya-vremeni-br-na-territorii-sssr-v-1957-godu-center/
-# says that the 1956 decision to change time belts' borders was not
-# implemented as planned in 1956 and the change happened in 1957.
-# There is also the problem that actual time zones were different from
-# the official time belts (and from many time belts' maps) as there were
-# numerous exceptions to application of time belt rules.  For example,
-# https://ru.wikipedia.org/wiki/ĐœĐŸŃĐșĐŸĐČсĐșĐŸĐ”_ĐČŃ€Đ”ĐŒŃ#ĐŸĐ”Ń€Đ”ĐŒĐ”Ń‰Đ”ĐœĐžĐ”_ĐłŃ€Đ°ĐœĐžŃ†Ń‹_ĐżŃ€ĐžĐŒĐ”ĐœĐ”ĐœĐžŃ_ĐŒĐŸŃĐșĐŸĐČсĐșĐŸĐłĐŸ_ĐČŃ€Đ”ĐŒĐ”ĐœĐž_ĐœĐ°_ĐČĐŸŃŃ‚ĐŸĐș
-# says that by 1962 there were many regions in the 3rd time belt that
-# were on Moscow time, referring to a 1962 map.  By 1989 number of such
-# exceptions grew considerably.
-
-# From Tim Parenti (2014-07-06):
-# The comments detailing the coverage of each Russian zone are meant to assist
-# with maintenance only and represent our best guesses as to which regions
-# are covered by each zone.  They are not meant to be taken as an authoritative
-# listing.  The region codes listed come from
-# https://en.wikipedia.org/w/?title=Federal_subjects_of_Russia&oldid=611810498
-# and are used for convenience only; no guarantees are made regarding their
-# future stability.  ISO 3166-2:RU codes are also listed for first-level
-# divisions where available.
-
-# From Tim Parenti (2014-07-03):
-# Europe/Kaliningrad covers...
-# 39	RU-KGD	Kaliningrad Oblast
-
-# From Paul Eggert (2016-03-18):
-# The 1989 transition is from USSR act No. 227 (1989-03-14).
-
-# From Stepan Golosunov (2016-03-07):
-# http://www.rgo.ru/ru/kaliningradskoe-oblastnoe-otdelenie/ob-otdelenii/publikacii/kak-nam-zhilos-bez-letnego-vremeni
-# confirms that the 1989 change to Moscow-1 was implemented.
-# (The article, though, is misattributed to 1990 while saying that
-# summer->winter transition would be done on the 24 of September. But
-# 1990-09-24 was Monday, while 1989-09-24 was Sunday as expected.)
-# ...
-# http://www.kaliningradka.ru/site_pc/cherez/index.php?ELEMENT_ID=40091
-# says that Kaliningrad switched to Moscow-1 on 1989-03-26, avoided
-# at the last moment switch to Moscow-1 on 1991-03-31, switched to
-# Moscow on 1991-11-03, switched to Moscow-1 on 1992-01-19.
-
-Zone Europe/Kaliningrad	 1:22:00 -	LMT	1893 Apr
-			 1:00	C-Eur	CE%sT	1945
-			 2:00	Poland	CE%sT	1946
-			 3:00	Russia	MSK/MSD	1989 Mar 26  2:00s
-			 2:00	Russia	EE%sT	2011 Mar 27  2:00s
-			 3:00	-	+03	2014 Oct 26  2:00s
-			 2:00	-	EET
-
-
-# From Paul Eggert (2016-02-21), per Tim Parenti (2014-07-03) and
-# Oscar van Vlijmen (2001-08-25):
-# Europe/Moscow covers...
-# 01	RU-AD	Adygea, Republic of
-# 05	RU-DA	Dagestan, Republic of
-# 06	RU-IN	Ingushetia, Republic of
-# 07	RU-KB	Kabardino-Balkar Republic
-# 08	RU-KL	Kalmykia, Republic of
-# 09	RU-KC	Karachay-Cherkess Republic
-# 10	RU-KR	Karelia, Republic of
-# 11	RU-KO	Komi Republic
-# 12	RU-ME	Mari El Republic
-# 13	RU-MO	Mordovia, Republic of
-# 15	RU-SE	North Ossetia-Alania, Republic of
-# 16	RU-TA	Tatarstan, Republic of
-# 20	RU-CE	Chechen Republic
-# 21	RU-CU	Chuvash Republic
-# 23	RU-KDA	Krasnodar Krai
-# 26	RU-STA	Stavropol Krai
-# 29	RU-ARK	Arkhangelsk Oblast
-# 31	RU-BEL	Belgorod Oblast
-# 32	RU-BRY	Bryansk Oblast
-# 33	RU-VLA	Vladimir Oblast
-# 35	RU-VLG	Vologda Oblast
-# 36	RU-VOR	Voronezh Oblast
-# 37	RU-IVA	Ivanovo Oblast
-# 40	RU-KLU	Kaluga Oblast
-# 44	RU-KOS	Kostroma Oblast
-# 46	RU-KRS	Kursk Oblast
-# 47	RU-LEN	Leningrad Oblast
-# 48	RU-LIP	Lipetsk Oblast
-# 50	RU-MOS	Moscow Oblast
-# 51	RU-MUR	Murmansk Oblast
-# 52	RU-NIZ	Nizhny Novgorod Oblast
-# 53	RU-NGR	Novgorod Oblast
-# 57	RU-ORL	Oryol Oblast
-# 58	RU-PNZ	Penza Oblast
-# 60	RU-PSK	Pskov Oblast
-# 61	RU-ROS	Rostov Oblast
-# 62	RU-RYA	Ryazan Oblast
-# 67	RU-SMO	Smolensk Oblast
-# 68	RU-TAM	Tambov Oblast
-# 69	RU-TVE	Tver Oblast
-# 71	RU-TUL	Tula Oblast
-# 76	RU-YAR	Yaroslavl Oblast
-# 77	RU-MOW	Moscow
-# 78	RU-SPE	Saint Petersburg
-# 83	RU-NEN	Nenets Autonomous Okrug
-
-# From Paul Eggert (2016-08-23):
-# The Soviets switched to UT-based time in 1919.  Decree No. 59
-# (1919-02-08) http://istmat.info/node/35567 established UT-based time
-# zones, and Decree No. 147 (1919-03-29) http://istmat.info/node/35854
-# specified a transition date of 1919-07-01, apparently at 00:00 UT.
-# No doubt only the Soviet-controlled regions switched on that date;
-# later transitions to UT-based time in other parts of Russia are
-# taken from what appear to be guesses by Shanks.
-# (Thanks to Alexander Belopolsky for pointers to the decrees.)
-
-# From Stepan Golosunov (2016-03-07):
-# 11. Regions-violators, 1981-1982.
-# Wikipedia refers to
-# http://maps.monetonos.ru/maps/raznoe/Old_Maps/Old_Maps/Articles/022/3_1981.html
-# http://besp.narod.ru/nauka_1981_3.htm
-#
-# The second link provides two articles scanned from the Nauka i Zhizn
-# magazine No. 3, 1981 and a scan of the short article attributed to
-# the Trud newspaper from February 1982.  The first link provides the
-# same Nauka i Zhizn articles converted to the text form (but misses
-# time belt changes map).
-#
-# The second Nauka i Zhizn article says that in addition to
-# introduction of summer time on 1981-04-01 there are some time belt
-# border changes on 1981-10-01, mostly affecting Nenets Autonomous
-# Okrug, Krasnoyarsk Krai, Yakutia, Magadan Oblast and Chukotka
-# according to the provided map (colored one).  In addition to that
-# "time violators" (regions which were not using rules of the time
-# belts in which they were located) would not be moving off the DST on
-# 1981-10-01 to restore the decree time usage.  (Komi ASSR was
-# supposed to repeat that move in October 1982 to account for the 2
-# hour difference.)  Map depicting "time violators" before 1981-10-01
-# is also provided.
-#
-# The article from Trud says that 1981-10-01 changes caused problems
-# and some territories would be moved to pre-1981-10-01 time by not
-# moving to summer time on 1982-04-01.  Namely: Dagestan,
-# Kabardino-Balkar, Kalmyk, Komi, Mari, Mordovian, North Ossetian,
-# Tatar, Chechen-Ingush and Chuvash ASSR, Krasnodar and Stavropol
-# krais, Arkhangelsk, Vladimir, Vologda, Voronezh, Gorky, Ivanovo,
-# Kostroma, Lipetsk, Penza, Rostov, Ryazan, Tambov, Tyumen and
-# Yaroslavl oblasts, Nenets and Evenk autonomous okrugs, Khatangsky
-# district of Taymyr Autonomous Okrug.  As a result Evenk Autonomous
-# Okrug and Khatangsky district of Taymyr Autonomous Okrug would end
-# up on Moscow+4, Tyumen Oblast on Moscow+2 and the rest on Moscow
-# time.
-#
-# http://astrozet.net/files/Zones/DOC/RU/1980-925.txt
-# attributes the 1982 changes to the Act of the Council of Ministers
-# of the USSR No. 126 from 18.02.1982.  1980-925.txt also adds
-# Udmurtia to the list of affected territories and lists Khatangsky
-# district separately from Taymyr Autonomous Okrug.  Probably erroneously.
-#
-# The affected territories are currently listed under Europe/Moscow,
-# Asia/Yekaterinburg and Asia/Krasnoyarsk.
-#
-# 12. Udmurtia
-# The fact that Udmurtia is depicted as a violator in the Nauka i
-# Zhizn article hints at Izhevsk being on different time from
-# Kuybyshev before 1981-10-01. Udmurtia is not mentioned in the 1989 act.
-# http://astrozet.net/files/Zones/DOC/RU/1980-925.txt
-# implies Udmurtia was on Moscow time after 1982-04-01.
-# Wikipedia implies Udmurtia being on Moscow+1 until 1991.
-#
-# ...
-#
-# All Russian zones are supposed to have by default a -1 change at
-# 1991-03-31 2:00 (cancellation of the decree time in the USSR) and a +1
-# change at 1992-01-19 2:00 (restoration of the decree time in Russia).
-#
-# There were some exceptions, though.
-# Wikipedia says newspapers listed Astrakhan, Saratov, Kirov, Volgograd,
-# Izhevsk, Grozny, Kazan and Samara as such exceptions for the 1992
-# change. (Different newspapers providing different lists. And some
-# lists found in the internet are quite wild.)
-#
-# And apparently some exceptions were reverted in the last moment.
-# http://www.kaliningradka.ru/site_pc/cherez/index.php?ELEMENT_ID=40091
-# says that Kaliningrad decided not to be an exception 2 days before the
-# 1991-03-31 switch and one person at
-# https://izhevsk.ru/forum_light_message/50/682597-m8369040.html
-# says he remembers that Samara opted out of the 1992-01-19 exception
-# 2 days before the switch.
-#
-#
-# From Paul Eggert (2016-03-18):
-# Given the above, we appear to be missing some Zone entries for the
-# chaotic early 1980s in Russia.  It's not clear what these entries
-# should be.  For now, sweep this under the rug and just document the
-# time in Moscow.
-
-# From Vladimir Karpinsky (2014-07-08):
-# LMT in Moscow (before Jul 3, 1916) is 2:30:17, that was defined by Moscow
-# Observatory (coordinates: 55° 45' 29.70", 37° 34' 05.30")....
-# LMT in Moscow since Jul 3, 1916 is 2:31:01 as a result of new standard.
-# (The info is from the book by Byalokoz ... p. 18.)
-# The time in St. Petersburg as capital of Russia was defined by
-# Pulkov observatory, near St. Petersburg.  In 1916 LMT Moscow
-# was synchronized with LMT St. Petersburg (+30 minutes), (Pulkov observatory
-# coordinates: 59° 46' 18.70", 30° 19' 40.70") so 30° 19' 40.70" >
-# 2h01m18.7s = 2:01:19.  LMT Moscow = LMT St.Petersburg + 30m 2:01:19 + 0:30 =
-# 2:31:19 ...
-#
-# From Paul Eggert (2014-07-08):
-# Milne does not list Moscow, but suggests that its time might be listed in
-# Résumés mensuels et annuels des observations météorologiques (1895).
-# Presumably this is OCLC 85825704, a journal published with parallel text in
-# Russian and French.  This source has not been located; go with Karpinsky.
-
-Zone Europe/Moscow	 2:30:17 -	LMT	1880
-			 2:30:17 -	MMT	1916 Jul  3 # Moscow Mean Time
-			 2:31:19 Russia	%s	1919 Jul  1  0:00u
-			 3:00	Russia	%s	1921 Oct
-			 3:00	Russia	MSK/MSD	1922 Oct
-			 2:00	-	EET	1930 Jun 21
-			 3:00	Russia	MSK/MSD	1991 Mar 31  2:00s
-			 2:00	Russia	EE%sT	1992 Jan 19  2:00s
-			 3:00	Russia	MSK/MSD	2011 Mar 27  2:00s
-			 4:00	-	MSK	2014 Oct 26  2:00s
-			 3:00	-	MSK
-
-
-# From Paul Eggert (2016-12-06):
-# Europe/Simferopol covers Crimea.
-
-Zone Europe/Simferopol	 2:16:24 -	LMT	1880
-			 2:16	-	SMT	1924 May  2 # Simferopol Mean T
-			 2:00	-	EET	1930 Jun 21
-			 3:00	-	MSK	1941 Nov
-			 1:00	C-Eur	CE%sT	1944 Apr 13
-			 3:00	Russia	MSK/MSD	1990
-			 3:00	-	MSK	1990 Jul  1  2:00
-			 2:00	-	EET	1992
-# Central Crimea used Moscow time 1994/1997.
-#
-# From Paul Eggert (2006-03-22):
-# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
-# from Kiev to Moscow time sometime after the January 1994 elections.
-# Shanks (1999) says "date of change uncertain", but implies that it happened
-# sometime between the 1994 DST switches.  Shanks & Pottenger simply say
-# 1994-09-25 03:00, but that can't be right.  For now, guess it
-# changed in May.
-			 2:00	E-Eur	EE%sT	1994 May
-# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev.
-			 3:00	E-Eur	MSK/MSD	1996 Mar 31  0:00s
-			 3:00	1:00	MSD	1996 Oct 27  3:00s
-# IATA SSIM (1997-09) says Crimea switched to EET/EEST.
-# Assume it happened in March by not changing the clocks.
-			 3:00	Russia	MSK/MSD	1997
-			 3:00	-	MSK	1997 Mar lastSun  1:00u
-# From Alexander Krivenyshev (2014-03-17):
-# time change at 2:00 (2am) on March 30, 2014
-# https://vz.ru/news/2014/3/17/677464.html
-# From Paul Eggert (2014-03-30):
-# Simferopol and Sevastopol reportedly changed their central town clocks
-# late the previous day, but this appears to have been ceremonial
-# and the discrepancies are small enough to not worry about.
-			 2:00	EU	EE%sT	2014 Mar 30  2:00
-			 4:00	-	MSK	2014 Oct 26  2:00s
-			 3:00	-	MSK
-
-
-# From Paul Eggert (2016-03-18):
-# Europe/Astrakhan covers:
-# 30	RU-AST	Astrakhan Oblast
-#
-# The 1989 transition is from USSR act No. 227 (1989-03-14).
-
-# From Alexander Krivenyshev (2016-01-12):
-# On February 10, 2016 Astrakhan Oblast got approval by the Federation
-# Council to change its time zone to UTC+4 (from current UTC+3 Moscow time)....
-# This Federal Law shall enter into force on 27 March 2016 at 02:00.
-# From Matt Johnson (2016-03-09):
-# http://publication.pravo.gov.ru/Document/View/0001201602150056
-
-Zone Europe/Astrakhan	 3:12:12 -	LMT	1924 May
-			 3:00	-	+03	1930 Jun 21
-			 4:00	Russia	+04/+05	1989 Mar 26  2:00s
-			 3:00	Russia	+03/+04	1991 Mar 31  2:00s
-			 4:00	-	+04	1992 Mar 29  2:00s
-			 3:00	Russia	+03/+04	2011 Mar 27  2:00s
-			 4:00	-	+04	2014 Oct 26  2:00s
-			 3:00	-	+03	2016 Mar 27  2:00s
-			 4:00	-	+04
-
-# From Paul Eggert (2016-11-11):
-# Europe/Volgograd covers:
-# 34	RU-VGG	Volgograd Oblast
-# The 1988 transition is from USSR act No. 5 (1988-01-04).
-
-# From Alexander Fetisov (2018-09-20):
-# Volgograd region in southern Russia (Europe/Volgograd) change
-# timezone from UTC+3 to UTC+4 from 28oct2018.
-# http://sozd.parliament.gov.ru/bill/452878-7
-#
-# From Stepan Golosunov (2018-10-11):
-# The law has been published today on
-# http://publication.pravo.gov.ru/Document/View/0001201810110037
-
-Zone Europe/Volgograd	 2:57:40 -	LMT	1920 Jan  3
-			 3:00	-	+03	1930 Jun 21
-			 4:00	-	+04	1961 Nov 11
-			 4:00	Russia	+04/+05	1988 Mar 27  2:00s
-			 3:00	Russia	+03/+04	1991 Mar 31  2:00s
-			 4:00	-	+04	1992 Mar 29  2:00s
-			 3:00	Russia	+03/+04	2011 Mar 27  2:00s
-			 4:00	-	+04	2014 Oct 26  2:00s
-			 3:00	-	+03	2018 Oct 28  2:00s
-			 4:00	-	+04
-
-# From Paul Eggert (2016-11-11):
-# Europe/Saratov covers:
-# 64	RU-SAR	Saratov Oblast
-
-# From Yuri Konotopov (2016-11-11):
-# Dec 4, 2016 02:00 UTC+3....  Saratov Region's local time will be ... UTC+4.
-# From Stepan Golosunov (2016-11-11):
-# ... Byalokoz listed Saratov on 03:04:18.
-# From Stepan Golosunov (2016-11-22):
-# http://publication.pravo.gov.ru/Document/View/0001201611220031
-
-Zone Europe/Saratov	 3:04:18 -	LMT	1919 Jul  1  0:00u
-			 3:00	-	+03	1930 Jun 21
-			 4:00	Russia	+04/+05	1988 Mar 27  2:00s
-			 3:00	Russia	+03/+04	1991 Mar 31  2:00s
-			 4:00	-	+04	1992 Mar 29  2:00s
-			 3:00	Russia	+03/+04	2011 Mar 27  2:00s
-			 4:00	-	+04	2014 Oct 26  2:00s
-			 3:00	-	+03	2016 Dec  4  2:00s
-			 4:00	-	+04
-
-# From Paul Eggert (2016-03-18):
-# Europe/Kirov covers:
-# 43	RU-KIR	Kirov Oblast
-# The 1989 transition is from USSR act No. 227 (1989-03-14).
-#
-Zone Europe/Kirov	 3:18:48 -	LMT	1919 Jul  1  0:00u
-			 3:00	-	+03	1930 Jun 21
-			 4:00	Russia	+04/+05	1989 Mar 26  2:00s
-			 3:00	Russia	+03/+04	1991 Mar 31  2:00s
-			 4:00	-	+04	1992 Mar 29  2:00s
-			 3:00	Russia	+03/+04	2011 Mar 27  2:00s
-			 4:00	-	+04	2014 Oct 26  2:00s
-			 3:00	-	+03
-
-# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
-# Europe/Samara covers...
-# 18	RU-UD	Udmurt Republic
-# 63	RU-SAM	Samara Oblast
-
-# From Paul Eggert (2016-03-18):
-# Byalokoz 1919 says Samara was 3:20:20.
-# The 1989 transition is from USSR act No. 227 (1989-03-14).
-
-Zone Europe/Samara	 3:20:20 -	LMT	1919 Jul  1  0:00u
-			 3:00	-	+03	1930 Jun 21
-			 4:00	-	+04	1935 Jan 27
-			 4:00	Russia	+04/+05	1989 Mar 26  2:00s
-			 3:00	Russia	+03/+04	1991 Mar 31  2:00s
-			 2:00	Russia	+02/+03	1991 Sep 29  2:00s
-			 3:00	-	+03	1991 Oct 20  3:00
-			 4:00	Russia	+04/+05	2010 Mar 28  2:00s
-			 3:00	Russia	+03/+04	2011 Mar 27  2:00s
-			 4:00	-	+04
-
-# From Paul Eggert (2016-03-18):
-# Europe/Ulyanovsk covers:
-# 73	RU-ULY	Ulyanovsk Oblast
-
-# The 1989 transition is from USSR act No. 227 (1989-03-14).
-
-# From Alexander Krivenyshev (2016-02-17):
-# Ulyanovsk ... on their way to change time zones by March 27, 2016 at 2am.
-# Ulyanovsk Oblast ... from MSK to MSK+1 (UTC+3 to UTC+4) ...
-# 920582-6 ... 02/17/2016 The State Duma passed the bill in the first reading.
-# From Matt Johnson (2016-03-09):
-# http://publication.pravo.gov.ru/Document/View/0001201603090051
-
-Zone Europe/Ulyanovsk	 3:13:36 -	LMT	1919 Jul  1  0:00u
-			 3:00	-	+03	1930 Jun 21
-			 4:00	Russia	+04/+05	1989 Mar 26  2:00s
-			 3:00	Russia	+03/+04	1991 Mar 31  2:00s
-			 2:00	Russia	+02/+03	1992 Jan 19  2:00s
-			 3:00	Russia	+03/+04	2011 Mar 27  2:00s
-			 4:00	-	+04	2014 Oct 26  2:00s
-			 3:00	-	+03	2016 Mar 27  2:00s
-			 4:00	-	+04
-
-# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
-# Asia/Yekaterinburg covers...
-# 02	RU-BA	Bashkortostan, Republic of
-# 90	RU-PER	Perm Krai
-# 45	RU-KGN	Kurgan Oblast
-# 56	RU-ORE	Orenburg Oblast
-# 66	RU-SVE	Sverdlovsk Oblast
-# 72	RU-TYU	Tyumen Oblast
-# 74	RU-CHE	Chelyabinsk Oblast
-# 86	RU-KHM	Khanty-Mansi Autonomous Okrug - Yugra
-# 89	RU-YAN	Yamalo-Nenets Autonomous Okrug
-#
-# Note: Effective 2005-12-01, (59) Perm Oblast and (81) Komi-Permyak
-# Autonomous Okrug merged to form (90, RU-PER) Perm Krai.
-
-# Milne says Yekaterinburg was 4:02:32.9; round to nearest.
-# Byalokoz 1919 says its provincial time was based on Perm, at 3:45:05.
-# Assume it switched on 1916-07-03, the time of the new standard.
-# The 1919 and 1930 transitions are from Shanks.
-
-Zone Asia/Yekaterinburg	 4:02:33 -	LMT	1916 Jul  3
-			 3:45:05 -	PMT	1919 Jul 15  4:00
-			 4:00	-	+04	1930 Jun 21
-			 5:00	Russia	+05/+06	1991 Mar 31  2:00s
-			 4:00	Russia	+04/+05	1992 Jan 19  2:00s
-			 5:00	Russia	+05/+06	2011 Mar 27  2:00s
-			 6:00	-	+06	2014 Oct 26  2:00s
-			 5:00	-	+05
-
-
-# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
-# Asia/Omsk covers...
-# 55	RU-OMS	Omsk Oblast
-
-# Byalokoz 1919 says Omsk was 4:53:30.
-
-Zone Asia/Omsk		 4:53:30 -	LMT	1919 Nov 14
-			 5:00	-	+05	1930 Jun 21
-			 6:00	Russia	+06/+07	1991 Mar 31  2:00s
-			 5:00	Russia	+05/+06	1992 Jan 19  2:00s
-			 6:00	Russia	+06/+07	2011 Mar 27  2:00s
-			 7:00	-	+07	2014 Oct 26  2:00s
-			 6:00	-	+06
-
-# From Paul Eggert (2016-02-22):
-# Asia/Barnaul covers:
-# 04	RU-AL	Altai Republic
-# 22	RU-ALT	Altai Krai
-
-# Data before 1991 are from Shanks & Pottenger.
-
-# From Stepan Golosunov (2016-03-07):
-# Letter of Bank of Russia from 1995-05-25
-# http://www.bestpravo.ru/rossijskoje/lj-akty/y3a.htm
-# suggests that Altai Republic transitioned to Moscow+3 on
-# 1995-05-28.
-#
-# https://regnum.ru/news/society/1957270.html
-# has some historical data for Altai Krai:
-# before 1957: west part on UT+6, east on UT+7
-# after 1957: UT+7
-# since 1995: UT+6
-# http://barnaul.rusplt.ru/index/pochemu_altajskij_kraj_okazalsja_v_neprivychnom_chasovom_pojase-17648.html
-# confirms that and provides more details including 1995-05-28 transition date.
-
-# From Alexander Krivenyshev (2016-02-17):
-# Altai Krai and Altai Republic on their way to change time zones
-# by March 27, 2016 at 2am....
-# Altai Republic / Gorno-Altaysk MSK+3 to MSK+4 (UTC+6 to UTC+7) ...
-# Altai Krai / Barnaul MSK+3 to MSK+4 (UTC+6 to UTC+7)
-# From Matt Johnson (2016-03-09):
-# http://publication.pravo.gov.ru/Document/View/0001201603090043
-# http://publication.pravo.gov.ru/Document/View/0001201603090038
-
-Zone Asia/Barnaul	 5:35:00 -	LMT	1919 Dec 10
-			 6:00	-	+06	1930 Jun 21
-			 7:00	Russia	+07/+08	1991 Mar 31  2:00s
-			 6:00	Russia	+06/+07	1992 Jan 19  2:00s
-			 7:00	Russia	+07/+08	1995 May 28
-			 6:00	Russia	+06/+07	2011 Mar 27  2:00s
-			 7:00	-	+07	2014 Oct 26  2:00s
-			 6:00	-	+06	2016 Mar 27  2:00s
-			 7:00	-	+07
-
-# From Paul Eggert (2016-03-18):
-# Asia/Novosibirsk covers:
-# 54	RU-NVS	Novosibirsk Oblast
-
-# From Stepan Golosunov (2016-05-30):
-# http://asozd2.duma.gov.ru/main.nsf/(Spravka)?OpenAgent&RN=1085784-6
-# moves Novosibirsk oblast from UTC+6 to UTC+7.
-# From Stepan Golosunov (2016-07-04):
-# The law was signed yesterday and published today on
-# http://publication.pravo.gov.ru/Document/View/0001201607040064
-
-Zone Asia/Novosibirsk	 5:31:40 -	LMT	1919 Dec 14  6:00
-			 6:00	-	+06	1930 Jun 21
-			 7:00	Russia	+07/+08	1991 Mar 31  2:00s
-			 6:00	Russia	+06/+07	1992 Jan 19  2:00s
-			 7:00	Russia	+07/+08	1993 May 23 # say Shanks & P.
-			 6:00	Russia	+06/+07	2011 Mar 27  2:00s
-			 7:00	-	+07	2014 Oct 26  2:00s
-			 6:00	-	+06	2016 Jul 24  2:00s
-			 7:00	-	+07
-
-# From Paul Eggert (2016-03-18):
-# Asia/Tomsk covers:
-# 70	RU-TOM	Tomsk Oblast
-
-# From Stepan Golosunov (2016-03-24):
-# Byalokoz listed Tomsk at 5:39:51.
-
-# From Stanislaw A. Kuzikowski (1994-06-29):
-# Tomsk is still 4 hours ahead of Moscow.
-
-# From Stepan Golosunov (2016-03-19):
-# http://pravo.gov.ru/proxy/ips/?docbody=&nd=102075743
-# (fifth time belt being UTC+5+1(decree time)
-# / UTC+5+1(decree time)+1(summer time)) ...
-# Note that time belts (numbered from 2 (Moscow) to 12 according to their
-# GMT/UTC offset and having too many exceptions like regions formally
-# belonging to one belt but using time from another) were replaced
-# with time zones in 2011 with different numbering (there was a
-# 2-hour gap between second and third zones in 2011-2014).
-
-# From Stepan Golosunov (2016-04-12):
-# http://asozd2.duma.gov.ru/main.nsf/(SpravkaNew)?OpenAgent&RN=1006865-6
-# This bill was approved in the first reading today.  It moves Tomsk oblast
-# from UTC+6 to UTC+7 and is supposed to come into effect on 2016-05-29 at
-# 2:00.  The bill needs to be approved in the second and the third readings by
-# the State Duma, approved by the Federation Council, signed by the President
-# and published to become a law.  Minor changes in the text are to be expected
-# before the second reading (references need to be updated to account for the
-# recent changes).
-#
-# Judging by the ultra-short one-day amendments period, recent similar laws,
-# the State Duma schedule and the Federation Council schedule
-# http://www.duma.gov.ru/legislative/planning/day-shedule/por_vesna_2016/
-# http://council.gov.ru/activity/meetings/schedule/63303
-# I speculate that the final text of the bill will be proposed tomorrow, the
-# bill will be approved in the second and the third readings on Friday,
-# approved by the Federation Council on 2016-04-20, signed by the President and
-# published as a law around 2016-04-26.
-
-# From Matt Johnson (2016-04-26):
-# http://publication.pravo.gov.ru/Document/View/0001201604260048
-
-Zone	Asia/Tomsk	 5:39:51 -	LMT	1919 Dec 22
-			 6:00	-	+06	1930 Jun 21
-			 7:00	Russia	+07/+08	1991 Mar 31  2:00s
-			 6:00	Russia	+06/+07	1992 Jan 19  2:00s
-			 7:00	Russia	+07/+08	2002 May  1  3:00
-			 6:00	Russia	+06/+07	2011 Mar 27  2:00s
-			 7:00	-	+07	2014 Oct 26  2:00s
-			 6:00	-	+06	2016 May 29  2:00s
-			 7:00	-	+07
-
-
-# From Tim Parenti (2014-07-03):
-# Asia/Novokuznetsk covers...
-# 42	RU-KEM	Kemerovo Oblast
-
-# From Alexander Krivenyshev (2009-10-13):
-# Kemerovo oblast' (Kemerovo region) in Russia will change current time zone on
-# March 28, 2010:
-# from current Russia Zone 6 - Krasnoyarsk Time Zone (KRA) UTC +0700
-# to Russia Zone 5 - Novosibirsk Time Zone (NOV) UTC +0600
-#
-# This is according to Government of Russia decree No. 740, on September
-# 14, 2009 "Application in the territory of the Kemerovo region the Fifth
-# time zone." ("Russia Zone 5" or old "USSR Zone 5" is GMT +0600)
-#
-# Russian Government web site (Russian language)
-# http://www.government.ru/content/governmentactivity/rfgovernmentdecisions/archive/2009/09/14/991633.htm
-# or Russian-English translation by WorldTimeZone.com with reference
-# map to local region and new Russia Time Zone map after March 28, 2010
-# http://www.worldtimezone.com/dst_news/dst_news_russia03.html
-#
-# Thus, when Russia will switch to DST on the night of March 28, 2010
-# Kemerovo region (Kemerovo oblast') will not change the clock.
-
-# From Tim Parenti (2014-07-02), per Alexander Krivenyshev (2014-07-02):
-# The Kemerovo region will remain at UTC+7 through the 2014-10-26 change, thus
-# realigning itself with KRAT.
-
-Zone Asia/Novokuznetsk	 5:48:48 -	LMT	1924 May  1
-			 6:00	-	+06	1930 Jun 21
-			 7:00	Russia	+07/+08	1991 Mar 31  2:00s
-			 6:00	Russia	+06/+07	1992 Jan 19  2:00s
-			 7:00	Russia	+07/+08	2010 Mar 28  2:00s
-			 6:00	Russia	+06/+07	2011 Mar 27  2:00s
-			 7:00	-	+07
-
-# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
-# Asia/Krasnoyarsk covers...
-# 17	RU-TY	Tuva Republic
-# 19	RU-KK	Khakassia, Republic of
-# 24	RU-KYA	Krasnoyarsk Krai
-#
-# Note: Effective 2007-01-01, (88) Evenk Autonomous Okrug and (84) Taymyr
-# Autonomous Okrug were merged into (24, RU-KYA) Krasnoyarsk Krai.
-
-# Byalokoz 1919 says Krasnoyarsk was 6:11:26.
-
-Zone Asia/Krasnoyarsk	 6:11:26 -	LMT	1920 Jan  6
-			 6:00	-	+06	1930 Jun 21
-			 7:00	Russia	+07/+08	1991 Mar 31  2:00s
-			 6:00	Russia	+06/+07	1992 Jan 19  2:00s
-			 7:00	Russia	+07/+08	2011 Mar 27  2:00s
-			 8:00	-	+08	2014 Oct 26  2:00s
-			 7:00	-	+07
-
-
-# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
-# Asia/Irkutsk covers...
-# 03	RU-BU	Buryatia, Republic of
-# 38	RU-IRK	Irkutsk Oblast
-#
-# Note: Effective 2008-01-01, (85) Ust-Orda Buryat Autonomous Okrug was
-# merged into (38, RU-IRK) Irkutsk Oblast.
-
-# Milne 1899 says Irkutsk was 6:57:15.
-# Byalokoz 1919 says Irkutsk was 6:57:05.
-# Go with Byalokoz.
-
-Zone Asia/Irkutsk	 6:57:05 -	LMT	1880
-			 6:57:05 -	IMT	1920 Jan 25 # Irkutsk Mean Time
-			 7:00	-	+07	1930 Jun 21
-			 8:00	Russia	+08/+09	1991 Mar 31  2:00s
-			 7:00	Russia	+07/+08	1992 Jan 19  2:00s
-			 8:00	Russia	+08/+09	2011 Mar 27  2:00s
-			 9:00	-	+09	2014 Oct 26  2:00s
-			 8:00	-	+08
-
-
-# From Tim Parenti (2014-07-06):
-# Asia/Chita covers...
-# 92	RU-ZAB	Zabaykalsky Krai
-#
-# Note: Effective 2008-03-01, (75) Chita Oblast and (80) Agin-Buryat
-# Autonomous Okrug merged to form (92, RU-ZAB) Zabaykalsky Krai.
-
-# From Alexander Krivenyshev (2016-01-02):
-# [The] time zone in the Trans-Baikal Territory (Zabaykalsky Krai) -
-# Asia/Chita [is changing] from UTC+8 to UTC+9.  Effective date will
-# be March 27, 2016 at 2:00am....
-# http://publication.pravo.gov.ru/Document/View/0001201512300107
-
-Zone Asia/Chita	 7:33:52 -	LMT	1919 Dec 15
-			 8:00	-	+08	1930 Jun 21
-			 9:00	Russia	+09/+10	1991 Mar 31  2:00s
-			 8:00	Russia	+08/+09	1992 Jan 19  2:00s
-			 9:00	Russia	+09/+10	2011 Mar 27  2:00s
-			10:00	-	+10	2014 Oct 26  2:00s
-			 8:00	-	+08	2016 Mar 27  2:00
-			 9:00	-	+09
-
-
-# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
-# Asia/Yakutsk covers...
-# 28	RU-AMU	Amur Oblast
-#
-# ...and parts of (14, RU-SA) Sakha (Yakutia) Republic:
-# 14-02	****	Aldansky District
-# 14-04	****	Amginsky District
-# 14-05	****	Anabarsky District
-# 14-06	****	Bulunsky District
-# 14-07	****	Verkhnevilyuysky District
-# 14-10	****	Vilyuysky District
-# 14-11	****	Gorny District
-# 14-12	****	Zhigansky District
-# 14-13	****	Kobyaysky District
-# 14-14	****	Lensky District
-# 14-15	****	Megino-Kangalassky District
-# 14-16	****	Mirninsky District
-# 14-18	****	Namsky District
-# 14-19	****	Neryungrinsky District
-# 14-21	****	Nyurbinsky District
-# 14-23	****	Olenyoksky District
-# 14-24	****	Olyokminsky District
-# 14-26	****	Suntarsky District
-# 14-27	****	Tattinsky District
-# 14-29	****	Ust-Aldansky District
-# 14-32	****	Khangalassky District
-# 14-33	****	Churapchinsky District
-# 14-34	****	Eveno-Bytantaysky National District
-
-# From Tim Parenti (2014-07-03):
-# Our commentary seems to have lost mention of (14-19) Neryungrinsky District.
-# Since the surrounding districts of Sakha are all YAKT, assume this is, too.
-# Also assume its history has been the same as the rest of Asia/Yakutsk.
-
-# Byalokoz 1919 says Yakutsk was 8:38:58.
-
-Zone Asia/Yakutsk	 8:38:58 -	LMT	1919 Dec 15
-			 8:00	-	+08	1930 Jun 21
-			 9:00	Russia	+09/+10	1991 Mar 31  2:00s
-			 8:00	Russia	+08/+09	1992 Jan 19  2:00s
-			 9:00	Russia	+09/+10	2011 Mar 27  2:00s
-			10:00	-	+10	2014 Oct 26  2:00s
-			 9:00	-	+09
-
-
-# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
-# Asia/Vladivostok covers...
-# 25	RU-PRI	Primorsky Krai
-# 27	RU-KHA	Khabarovsk Krai
-# 79	RU-YEV	Jewish Autonomous Oblast
-#
-# ...and parts of (14, RU-SA) Sakha (Yakutia) Republic:
-# 14-09	****	Verkhoyansky District
-# 14-31	****	Ust-Yansky District
-
-# Milne 1899 says Vladivostok was 8:47:33.5.
-# Byalokoz 1919 says Vladivostok was 8:47:31.
-# Go with Byalokoz.
-
-Zone Asia/Vladivostok	 8:47:31 -	LMT	1922 Nov 15
-			 9:00	-	+09	1930 Jun 21
-			10:00	Russia	+10/+11	1991 Mar 31  2:00s
-			 9:00	Russia	+09/+10	1992 Jan 19  2:00s
-			10:00	Russia	+10/+11	2011 Mar 27  2:00s
-			11:00	-	+11	2014 Oct 26  2:00s
-			10:00	-	+10
-
-
-# From Tim Parenti (2014-07-03):
-# Asia/Khandyga covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
-# 14-28	****	Tomponsky District
-# 14-30	****	Ust-Maysky District
-
-# From Arthur David Olson (2012-05-09):
-# Tomponskij and Ust'-Majskij switched from Vladivostok time to Yakutsk time
-# in 2011.
-
-# From Paul Eggert (2012-11-25):
-# Shanks and Pottenger (2003) has Khandyga on Yakutsk time.
-# Make a wild guess that it switched to Vladivostok time in 2004.
-# This transition is no doubt wrong, but we have no better info.
-
-Zone Asia/Khandyga	 9:02:13 -	LMT	1919 Dec 15
-			 8:00	-	+08	1930 Jun 21
-			 9:00	Russia	+09/+10	1991 Mar 31  2:00s
-			 8:00	Russia	+08/+09	1992 Jan 19  2:00s
-			 9:00	Russia	+09/+10	2004
-			10:00	Russia	+10/+11	2011 Mar 27  2:00s
-			11:00	-	+11	2011 Sep 13  0:00s # Decree 725?
-			10:00	-	+10	2014 Oct 26  2:00s
-			 9:00	-	+09
-
-
-# From Tim Parenti (2014-07-03):
-# Asia/Sakhalin covers...
-# 65	RU-SAK	Sakhalin Oblast
-# ...with the exception of:
-# 65-11	****	Severo-Kurilsky District (North Kuril Islands)
-
-# From Matt Johnson (2016-02-22):
-# Asia/Sakhalin is moving (in entirety) from UTC+10 to UTC+11 ...
-# (2016-03-09):
-# http://publication.pravo.gov.ru/Document/View/0001201603090044
-
-# The Zone name should be Asia/Yuzhno-Sakhalinsk, but that's too long.
-Zone Asia/Sakhalin	 9:30:48 -	LMT	1905 Aug 23
-			 9:00	-	+09	1945 Aug 25
-			11:00	Russia	+11/+12	1991 Mar 31  2:00s # Sakhalin T
-			10:00	Russia	+10/+11	1992 Jan 19  2:00s
-			11:00	Russia	+11/+12	1997 Mar lastSun  2:00s
-			10:00	Russia	+10/+11	2011 Mar 27  2:00s
-			11:00	-	+11	2014 Oct 26  2:00s
-			10:00	-	+10	2016 Mar 27  2:00s
-			11:00	-	+11
-
-
-# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
-# Asia/Magadan covers...
-# 49	RU-MAG	Magadan Oblast
-
-# From Tim Parenti (2014-07-06), per Alexander Krivenyshev (2014-07-02):
-# Magadan Oblast is moving from UTC+12 to UTC+10 on 2014-10-26; however,
-# several districts of Sakha Republic as well as Severo-Kurilsky District of
-# the Sakhalin Oblast (also known as the North Kuril Islands), represented
-# until now by Asia/Magadan, will instead move to UTC+11.  These regions will
-# need their own zone.
-
-# From Alexander Krivenyshev (2016-03-27):
-# ... draft bill 948300-6 to change its time zone from UTC+10 to UTC+11 ...
-# will take ... effect ... on April 24, 2016 at 2 o'clock
-#
-# From Matt Johnson (2016-04-05):
-# ... signed by the President today ...
-# http://publication.pravo.gov.ru/Document/View/0001201604050038
-
-Zone Asia/Magadan	10:03:12 -	LMT	1924 May  2
-			10:00	-	+10	1930 Jun 21 # Magadan Time
-			11:00	Russia	+11/+12	1991 Mar 31  2:00s
-			10:00	Russia	+10/+11	1992 Jan 19  2:00s
-			11:00	Russia	+11/+12	2011 Mar 27  2:00s
-			12:00	-	+12	2014 Oct 26  2:00s
-			10:00	-	+10	2016 Apr 24  2:00s
-			11:00	-	+11
-
-
-# From Tim Parenti (2014-07-06):
-# Asia/Srednekolymsk covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
-# 14-01	****	Abyysky District
-# 14-03	****	Allaikhovsky District
-# 14-08	****	Verkhnekolymsky District
-# 14-17	****	Momsky District
-# 14-20	****	Nizhnekolymsky District
-# 14-25	****	Srednekolymsky District
-#
-# ...and parts of (65, RU-SAK) Sakhalin Oblast:
-# 65-11	****	Severo-Kurilsky District (North Kuril Islands)
-
-# From Tim Parenti (2014-07-02):
-# Oymyakonsky District of Sakha Republic (represented by Ust-Nera), along with
-# most of Sakhalin Oblast (represented by Sakhalin) will be moving to UTC+10 on
-# 2014-10-26 to stay aligned with VLAT/SAKT; however, Severo-Kurilsky District
-# of the Sakhalin Oblast (also known as the North Kuril Islands, represented by
-# Severo-Kurilsk) will remain on UTC+11.
-
-# From Tim Parenti (2014-07-06):
-# Assume North Kuril Islands have history like Magadan before 2011-03-27.
-# There is a decent chance this is wrong, in which case a new zone
-# Asia/Severo-Kurilsk would become necessary.
-#
-# Srednekolymsk and Zyryanka are the most populous places amongst these
-# districts, but have very similar populations.  In fact, Wikipedia currently
-# lists them both as having 3528 people, exactly 1668 males and 1860 females
-# each!  (Yikes!)
-# https://en.wikipedia.org/w/?title=Srednekolymsky_District&oldid=603435276
-# https://en.wikipedia.org/w/?title=Verkhnekolymsky_District&oldid=594378493
-# Assume this is a mistake, albeit an amusing one.
-#
-# Looking at censuses, the populations of the two municipalities seem to have
-# fluctuated recently.  Zyryanka was more populous than Srednekolymsk in the
-# 1989 and 2002 censuses, but Srednekolymsk was more populous in the most
-# recent (2010) census, 3525 to 3170.  (See pages 195 and 197 of
-# http://www.gks.ru/free_doc/new_site/perepis2010/croc/Documents/Vol1/pub-01-05.pdf
-# in Russian.)  In addition, Srednekolymsk appears to be a much older
-# settlement and the population of Zyryanka seems to be declining.
-# Go with Srednekolymsk.
-
-Zone Asia/Srednekolymsk	10:14:52 -	LMT	1924 May  2
-			10:00	-	+10	1930 Jun 21
-			11:00	Russia	+11/+12	1991 Mar 31  2:00s
-			10:00	Russia	+10/+11	1992 Jan 19  2:00s
-			11:00	Russia	+11/+12	2011 Mar 27  2:00s
-			12:00	-	+12	2014 Oct 26  2:00s
-			11:00	-	+11
-
-
-# From Tim Parenti (2014-07-03):
-# Asia/Ust-Nera covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
-# 14-22	****	Oymyakonsky District
-
-# From Arthur David Olson (2012-05-09):
-# Ojmyakonskij [and the Kuril Islands] switched from
-# Magadan time to Vladivostok time in 2011.
-#
-# From Tim Parenti (2014-07-06), per Alexander Krivenyshev (2014-07-02):
-# It's unlikely that any of the Kuril Islands were involved in such a switch,
-# as the South and Middle Kurils have been on UTC+11 (SAKT) with the rest of
-# Sakhalin Oblast since at least 2011-09, and the North Kurils have been on
-# UTC+12 since at least then, too.
-
-Zone Asia/Ust-Nera	 9:32:54 -	LMT	1919 Dec 15
-			 8:00	-	+08	1930 Jun 21
-			 9:00	Russia	+09/+10	1981 Apr  1
-			11:00	Russia	+11/+12	1991 Mar 31  2:00s
-			10:00	Russia	+10/+11	1992 Jan 19  2:00s
-			11:00	Russia	+11/+12	2011 Mar 27  2:00s
-			12:00	-	+12	2011 Sep 13  0:00s # Decree 725?
-			11:00	-	+11	2014 Oct 26  2:00s
-			10:00	-	+10
-
-
-# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
-# Asia/Kamchatka covers...
-# 91	RU-KAM	Kamchatka Krai
-#
-# Note: Effective 2007-07-01, (41) Kamchatka Oblast and (82) Koryak
-# Autonomous Okrug merged to form (91, RU-KAM) Kamchatka Krai.
-
-# The Zone name should be Asia/Petropavlovsk-Kamchatski or perhaps
-# Asia/Petropavlovsk-Kamchatsky, but these are too long.
-Zone Asia/Kamchatka	10:34:36 -	LMT	1922 Nov 10
-			11:00	-	+11	1930 Jun 21
-			12:00	Russia	+12/+13	1991 Mar 31  2:00s
-			11:00	Russia	+11/+12	1992 Jan 19  2:00s
-			12:00	Russia	+12/+13	2010 Mar 28  2:00s
-			11:00	Russia	+11/+12	2011 Mar 27  2:00s
-			12:00	-	+12
-
-
-# From Tim Parenti (2014-07-03):
-# Asia/Anadyr covers...
-# 87	RU-CHU	Chukotka Autonomous Okrug
-
-Zone Asia/Anadyr	11:49:56 -	LMT	1924 May  2
-			12:00	-	+12	1930 Jun 21
-			13:00	Russia	+13/+14	1982 Apr  1  0:00s
-			12:00	Russia	+12/+13	1991 Mar 31  2:00s
-			11:00	Russia	+11/+12	1992 Jan 19  2:00s
-			12:00	Russia	+12/+13	2010 Mar 28  2:00s
-			11:00	Russia	+11/+12	2011 Mar 27  2:00s
-			12:00	-	+12
-
-
-# San Marino
-# See Europe/Rome.
-
-# Serbia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Belgrade	1:22:00	-	LMT	1884
-			1:00	-	CET	1941 Apr 18 23:00
-			1:00	C-Eur	CE%sT	1945
-			1:00	-	CET	1945 May  8  2:00s
-			1:00	1:00	CEST	1945 Sep 16  2:00s
-# Metod KoĆŸelj reports that the legal date of
-# transition to EU rules was 1982-11-27, for all of Yugoslavia at the time.
-# Shanks & Pottenger don't give as much detail, so go with KoĆŸelj.
-			1:00	-	CET	1982 Nov 27
-			1:00	EU	CE%sT
-Link Europe/Belgrade Europe/Ljubljana	# Slovenia
-Link Europe/Belgrade Europe/Podgorica	# Montenegro
-Link Europe/Belgrade Europe/Sarajevo	# Bosnia and Herzegovina
-Link Europe/Belgrade Europe/Skopje	# North Macedonia
-Link Europe/Belgrade Europe/Zagreb	# Croatia
-
-# Slovakia
-Link Europe/Prague Europe/Bratislava
-
-# Slovenia
-# See Europe/Belgrade.
-
-# Spain
-#
-# From Paul Eggert (2016-12-14):
-#
-# The source for Europe/Madrid before 2013 is:
-# Planesas P. La hora oficial en España y sus cambios.
-# Anuario del Observatorio AstronĂłmico de Madrid (2013, in Spanish).
-# http://astronomia.ign.es/rknowsys-theme/images/webAstro/paginas/documentos/Anuario/lahoraoficialenespana.pdf
-# As this source says that historical time in the Canaries is obscure,
-# and it does not discuss Ceuta, stick with Shanks for now for that data.
-#
-# In the 1918 and 1919 fallback transitions in Spain, the clock for
-# the hour-longer day officially kept going after midnight, so that
-# the repeated instances of that day's 00:00 hour were 24 hours apart,
-# with a fallback transition from the second occurrence of 00:59... to
-# the next day's 00:00.  Our data format cannot represent this
-# directly, and instead repeats the first hour of the next day, with a
-# fallback transition from the next day's 00:59... to 00:00.
-
-# From Michael Deckers (2016-12-15):
-# The Royal Decree of 1900-06-26 quoted by Planesas, online at
-# https://www.boe.es/datos/pdfs/BOE//1900/209/A00383-00384.pdf
-# says in its article 5 (my translation):
-# These dispositions will enter into force beginning with the
-# instant at which, according to the time indicated in article 1,
-# the 1st day of January of 1901 will begin.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Spain	1918	only	-	Apr	15	23:00	1:00	S
-Rule	Spain	1918	1919	-	Oct	 6	24:00s	0	-
-Rule	Spain	1919	only	-	Apr	 6	23:00	1:00	S
-Rule	Spain	1924	only	-	Apr	16	23:00	1:00	S
-Rule	Spain	1924	only	-	Oct	 4	24:00s	0	-
-Rule	Spain	1926	only	-	Apr	17	23:00	1:00	S
-Rule	Spain	1926	1929	-	Oct	Sat>=1	24:00s	0	-
-Rule	Spain	1927	only	-	Apr	 9	23:00	1:00	S
-Rule	Spain	1928	only	-	Apr	15	 0:00	1:00	S
-Rule	Spain	1929	only	-	Apr	20	23:00	1:00	S
-# Republican Spain during the civil war; it controlled Madrid until 1939-03-28.
-Rule	Spain	1937	only	-	Jun	16	23:00	1:00	S
-Rule	Spain	1937	only	-	Oct	 2	24:00s	0	-
-Rule	Spain	1938	only	-	Apr	 2	23:00	1:00	S
-Rule	Spain	1938	only	-	Apr	30	23:00	2:00	M
-Rule	Spain	1938	only	-	Oct	 2	24:00	1:00	S
-# The following rules are for unified Spain again.
-#
-# Planesas does not say what happened in Madrid between its fall on
-# 1939-03-28 and the Nationalist spring-forward transition on
-# 1939-04-15.  For lack of better info, assume Madrid's clocks did not
-# change during that period.
-#
-# The first rule is commented out, as it is redundant for Republican Spain.
-#Rule	Spain	1939	only	-	Apr	15	23:00	1:00	S
-Rule	Spain	1939	only	-	Oct	 7	24:00s	0	-
-Rule	Spain	1942	only	-	May	 2	23:00	1:00	S
-Rule	Spain	1942	only	-	Sep	 1	 1:00	0	-
-Rule	Spain	1943	1946	-	Apr	Sat>=13	23:00	1:00	S
-Rule	Spain	1943	1944	-	Oct	Sun>=1	 1:00	0	-
-Rule	Spain	1945	1946	-	Sep	lastSun	 1:00	0	-
-Rule	Spain	1949	only	-	Apr	30	23:00	1:00	S
-Rule	Spain	1949	only	-	Oct	 2	 1:00	0	-
-Rule	Spain	1974	1975	-	Apr	Sat>=12	23:00	1:00	S
-Rule	Spain	1974	1975	-	Oct	Sun>=1	 1:00	0	-
-Rule	Spain	1976	only	-	Mar	27	23:00	1:00	S
-Rule	Spain	1976	1977	-	Sep	lastSun	 1:00	0	-
-Rule	Spain	1977	only	-	Apr	 2	23:00	1:00	S
-Rule	Spain	1978	only	-	Apr	 2	 2:00s	1:00	S
-Rule	Spain	1978	only	-	Oct	 1	 2:00s	0	-
-# Nationalist Spain during the civil war
-#Rule NatSpain	1937	only	-	May	22	23:00	1:00	S
-#Rule NatSpain	1937	1938	-	Oct	Sat>=1	24:00s	0	-
-#Rule NatSpain	1938	only	-	Mar	26	23:00	1:00	S
-# The following rules are copied from Morocco from 1967 through 1978,
-# except with "S" letters.
-Rule SpainAfrica 1967	only	-	Jun	 3	12:00	1:00	S
-Rule SpainAfrica 1967	only	-	Oct	 1	 0:00	0	-
-Rule SpainAfrica 1974	only	-	Jun	24	 0:00	1:00	S
-Rule SpainAfrica 1974	only	-	Sep	 1	 0:00	0	-
-Rule SpainAfrica 1976	1977	-	May	 1	 0:00	1:00	S
-Rule SpainAfrica 1976	only	-	Aug	 1	 0:00	0	-
-Rule SpainAfrica 1977	only	-	Sep	28	 0:00	0	-
-Rule SpainAfrica 1978	only	-	Jun	 1	 0:00	1:00	S
-Rule SpainAfrica 1978	only	-	Aug	 4	 0:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Madrid	-0:14:44 -	LMT	1900 Dec 31 23:45:16
-			 0:00	Spain	WE%sT	1940 Mar 16 23:00
-			 1:00	Spain	CE%sT	1979
-			 1:00	EU	CE%sT
-Zone	Africa/Ceuta	-0:21:16 -	LMT	1900 Dec 31 23:38:44
-			 0:00	-	WET	1918 May  6 23:00
-			 0:00	1:00	WEST	1918 Oct  7 23:00
-			 0:00	-	WET	1924
-			 0:00	Spain	WE%sT	1929
-			 0:00	-	WET	1967 # Help zishrink.awk.
-			 0:00 SpainAfrica WE%sT	1984 Mar 16
-			 1:00	-	CET	1986
-			 1:00	EU	CE%sT
-Zone	Atlantic/Canary	-1:01:36 -	LMT	1922 Mar # Las Palmas de Gran C.
-			-1:00	-	-01	1946 Sep 30  1:00
-			 0:00	-	WET	1980 Apr  6  0:00s
-			 0:00	1:00	WEST	1980 Sep 28  1:00u
-			 0:00	EU	WE%sT
-# IATA SSIM (1996-09) says the Canaries switch at 2:00u, not 1:00u.
-# Ignore this for now, as the Canaries are part of the EU.
-
-# Sweden
-
-# From Ivan Nilsson (2001-04-13), superseding Shanks & Pottenger:
-#
-# The law "Svensk författningssamling 1878, no 14" about standard time in 1879:
-# From the beginning of 1879 (that is 01-01 00:00) the time for all
-# places in the country is "the mean solar time for the meridian at
-# three degrees, or twelve minutes of time, to the west of the
-# meridian of the Observatory of Stockholm".  The law is dated 1878-05-31.
-#
-# The observatory at that time had the meridian 18° 03' 30"
-# eastern longitude = 01:12:14 in time.  Less 12 minutes gives the
-# national standard time as 01:00:14 ahead of GMT....
-#
-# About the beginning of CET in Sweden. The lawtext ("Svensk
-# författningssamling 1899, no 44") states, that "from the beginning
-# of 1900... ... the same as the mean solar time for the meridian at
-# the distance of one hour of time from the meridian of the English
-# observatory at Greenwich, or at 12 minutes 14 seconds to the west
-# from the meridian of the Observatory of Stockholm". The law is dated
-# 1899-06-16.  In short: At 1900-01-01 00:00:00 the new standard time
-# in Sweden is 01:00:00 ahead of GMT.
-#
-# 1916: The lawtext ("Svensk författningssamling 1916, no 124") states
-# that "1916-05-15 is considered to begin one hour earlier". It is
-# pretty obvious that at 05-14 23:00 the clocks are set to 05-15 00:00....
-# Further the law says, that "1916-09-30 is considered to end one hour later".
-#
-# The laws regulating [DST] are available on the site of the Swedish
-# Parliament beginning with 1985 - the laws regulating 1980/1984 are
-# not available on the site (to my knowledge they are only available
-# in Swedish): <http://www.riksdagen.se/english/work/sfst.asp> (type
-# "sommartid" without the quotes in the field "Fritext" and then click
-# the Sök-button).
-#
-# (2001-05-13):
-#
-# I have now found a newspaper stating that at 1916-10-01 01:00
-# summertime the church-clocks etc were set back one hour to show
-# 1916-10-01 00:00 standard time.  The article also reports that some
-# people thought the switch to standard time would take place already
-# at 1916-10-01 00:00 summer time, but they had to wait for another
-# hour before the event took place.
-#
-# Source: The newspaper "Dagens Nyheter", 1916-10-01, page 7 upper left.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Europe/Stockholm	1:12:12 -	LMT	1879 Jan  1
-			1:00:14	-	SET	1900 Jan  1 # Swedish Time
-			1:00	-	CET	1916 May 14 23:00
-			1:00	1:00	CEST	1916 Oct  1  1:00
-			1:00	-	CET	1980
-			1:00	EU	CE%sT
-
-# Switzerland
-# From Howse:
-# By the end of the 18th century clocks and watches became commonplace
-# and their performance improved enormously.  Communities began to keep
-# mean time in preference to apparent time - Geneva from 1780 ....
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-# From Whitman (who writes "Midnight?"):
-# Rule	Swiss	1940	only	-	Nov	 2	0:00	1:00	S
-# Rule	Swiss	1940	only	-	Dec	31	0:00	0	-
-# From Shanks & Pottenger:
-# Rule	Swiss	1941	1942	-	May	Sun>=1	2:00	1:00	S
-# Rule	Swiss	1941	1942	-	Oct	Sun>=1	0:00	0	-
-
-# From Alois Treindl (2008-12-17):
-# I have researched the DST usage in Switzerland during the 1940ies.
-#
-# As I wrote in an earlier message, I suspected the current tzdata values
-# to be wrong. This is now verified.
-#
-# I have found copies of the original ruling by the Swiss Federal
-# government, in 'Eidgenössische Gesetzessammlung 1941 and 1942' (Swiss
-# federal law collection)...
-#
-# DST began on Monday 5 May 1941, 1:00 am by shifting the clocks to 2:00 am
-# DST ended on Monday 6 Oct 1941, 2:00 am by shifting the clocks to 1:00 am.
-#
-# DST began on Monday, 4 May 1942 at 01:00 am
-# DST ended on Monday, 5 Oct 1942 at 02:00 am
-#
-# There was no DST in 1940, I have checked the law collection carefully.
-# It is also indicated by the fact that the 1942 entry in the law
-# collection points back to 1941 as a reference, but no reference to any
-# other years are made.
-#
-# Newspaper articles I have read in the archives on 6 May 1941 reported
-# about the introduction of DST (Sommerzeit in German) during the previous
-# night as an absolute novelty, because this was the first time that such
-# a thing had happened in Switzerland.
-#
-# I have also checked 1916, because one book source (Gabriel, Traité de
-# l'heure dans le monde) claims that Switzerland had DST in 1916. This is
-# false, no official document could be found. Probably Gabriel got misled
-# by references to Germany, which introduced DST in 1916 for the first time.
-#
-# The tzdata rules for Switzerland must be changed to:
-# Rule  Swiss   1941    1942    -       May     Mon>=1  1:00    1:00    S
-# Rule  Swiss   1941    1942    -       Oct     Mon>=1  2:00    0       -
-#
-# The 1940 rules must be deleted.
-#
-# One further detail for Switzerland, which is probably out of scope for
-# most users of tzdata: The [Europe/Zurich zone] ...
-# describes all of Switzerland correctly, with the exception of
-# the Canton de GenĂšve (Geneva, Genf). Between 1848 and 1894 Geneva did not
-# follow Bern Mean Time but kept its own local mean time.
-# To represent this, an extra zone would be needed.
-#
-# From Alois Treindl (2013-09-11):
-# The Federal regulations say
-# https://www.admin.ch/opc/de/classified-compilation/20071096/index.html
-# ... the meridian for Bern mean time ... is 7° 26' 22.50".
-# Expressed in time, it is 0h29m45.5s.
-
-# From Pierre-Yves Berger (2013-09-11):
-# the "Circulaire du conseil fédéral" (December 11 1893)
-# http://www.amtsdruckschriften.bar.admin.ch/viewOrigDoc.do?id=10071353
-# clearly states that the [1894-06-01] change should be done at midnight
-# but if no one is present after 11 at night, could be postponed until one
-# hour before the beginning of service.
-
-# From Paul Eggert (2013-09-11):
-# Round BMT to the nearest even second, 0:29:46.
-#
-# We can find no reliable source for Shanks's assertion that all of Switzerland
-# except Geneva switched to Bern Mean Time at 00:00 on 1848-09-12.  This book:
-#
-#	Jakob Messerli. GleichmĂ€ssig, pĂŒnktlich, schnell. Zeiteinteilung und
-#	Zeitgebrauch in der Schweiz im 19. Jahrhundert. Chronos, Zurich 1995,
-#	ISBN 3-905311-68-2, OCLC 717570797.
-#
-# suggests that the transition was more gradual, and that the Swiss did not
-# agree about civil time during the transition.  The timekeeping it gives the
-# most detail for is postal and telegraph time: here, federal legislation (the
-# "Bundesgesetz ĂŒber die Erstellung von elektrischen Telegraphen") passed on
-# 1851-11-23, and an official implementation notice was published 1853-07-16
-# (Bundesblatt 1853, Bd. II, S. 859).  On p 72 Messerli writes that in
-# practice since July 1853 Bernese time was used in "all postal and telegraph
-# offices in Switzerland from Geneva to St. Gallen and Basel to Chiasso"
-# (Google translation).  For now, model this transition as occurring on
-# 1853-07-16, though it probably occurred at some other date in Zurich, and
-# legal civil time probably changed at still some other transition date.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Swiss	1941	1942	-	May	Mon>=1	1:00	1:00	S
-Rule	Swiss	1941	1942	-	Oct	Mon>=1	2:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Zurich	0:34:08 -	LMT	1853 Jul 16 # See above comment.
-			0:29:46	-	BMT	1894 Jun    # Bern Mean Time
-			1:00	Swiss	CE%sT	1981
-			1:00	EU	CE%sT
-
-# Turkey
-
-# From Kıvanç Yazan (2016-09-25):
-# 1) For 1986-2006, DST started at 01:00 local and ended at 02:00 local, with
-#    no exceptions.
-# 2) 1994's lastSun was overridden with Mar 20 ...
-# Here are official papers:
-# http://www.resmigazete.gov.tr/arsiv/19032.pdf  - page 2 for 1986
-# http://www.resmigazete.gov.tr/arsiv/19400.pdf  - page 4 for 1987
-# http://www.resmigazete.gov.tr/arsiv/19752.pdf  - page 15 for 1988
-# http://www.resmigazete.gov.tr/arsiv/20102.pdf  - page 6 for 1989
-# http://www.resmigazete.gov.tr/arsiv/20464.pdf  - page 1 for 1990 - 1992
-# http://www.resmigazete.gov.tr/arsiv/21531.pdf  - page 15 for 1993 - 1995
-# http://www.resmigazete.gov.tr/arsiv/21879.pdf  - page 1 for overriding 1994
-# http://www.resmigazete.gov.tr/arsiv/22588.pdf  - page 1 for 1996, 1997
-# http://www.resmigazete.gov.tr/arsiv/23286.pdf  - page 10 for 1998 - 2000
-# http://www.resmigazete.gov.tr/eskiler/2001/03/20010324.htm#2  - for 2001
-# http://www.resmigazete.gov.tr/eskiler/2002/03/20020316.htm#2  - for 2002-2006
-# From Paul Eggert (2016-09-25):
-# Prefer the above sources to Shanks & Pottenger for timestamps after 1985.
-
-# From Steffen Thorsen (2007-03-09):
-# Starting 2007 though, it seems that they are adopting EU's 1:00 UTC
-# start/end time, according to the following page (2007-03-07):
-# http://www.ntvmsnbc.com/news/402029.asp
-# The official document is located here - it is in Turkish...:
-# http://rega.basbakanlik.gov.tr/eskiler/2007/03/20070307-7.htm
-# I was able to locate the following seemingly official document
-# (on a non-government server though) describing dates between 2002 and 2006:
-# http://www.alomaliye.com/bkk_2002_3769.htm
-
-# From Gökdeniz Karadağ (2011-03-10):
-# According to the articles linked below, Turkey will change into summer
-# time zone (GMT+3) on March 28, 2011 at 3:00 a.m. instead of March 27.
-# This change is due to a nationwide exam on 27th.
-# https://www.worldbulletin.net/?aType=haber&ArticleID=70872
-# Turkish:
-# https://www.hurriyet.com.tr/yaz-saati-uygulamasi-bir-gun-ileri-alindi-17230464
-
-# From Faruk Pasin (2014-02-14):
-# The DST for Turkey has been changed for this year because of the
-# Turkish Local election....
-# http://www.sabah.com.tr/Ekonomi/2014/02/12/yaz-saatinde-onemli-degisiklik
-# ... so Turkey will move clocks forward one hour on March 31 at 3:00 a.m.
-# From Randal L. Schwartz (2014-04-15):
-# Having landed on a flight from the states to Istanbul (via AMS) on March 31,
-# I can tell you that NOBODY (even the airlines) respected this timezone DST
-# change delay.  Maybe the word just didn't get out in time.
-# From Paul Eggert (2014-06-15):
-# The press reported massive confusion, as election officials obeyed the rule
-# change but cell phones (and airline baggage systems) did not.  See:
-# Kostidis M. Eventful elections in Turkey. Balkan News Agency
-# http://www.balkaneu.com/eventful-elections-turkey/ 2014-03-30.
-# I guess the best we can do is document the official time.
-
-# From Fatih (2015-09-29):
-# It's officially announced now by the Ministry of Energy.
-# Turkey delays winter time to 8th of November 04:00
-# http://www.aa.com.tr/tr/turkiye/yaz-saati-uygulamasi-8-kasimda-sona-erecek/362217
-#
-# From BBC News (2015-10-25):
-# Confused Turks are asking "what's the time?" after automatic clocks defied a
-# government decision ... "For the next two weeks #Turkey is on EEST... Erdogan
-# Engineered Standard Time," said Twitter user @aysekarahasan.
-# http://www.bbc.com/news/world-europe-34631326
-
-# From Burak AYDIN (2016-09-08):
-# Turkey will stay in Daylight Saving Time even in winter....
-# http://www.resmigazete.gov.tr/eskiler/2016/09/20160908-2.pdf
-#
-# From Paul Eggert (2016-09-07):
-# The change is permanent, so this is the new standard time in Turkey.
-# It takes effect today, which is not much notice.
-
-# From Kıvanç Yazan (2017-10-28):
-# Turkey will go back to Daylight Saving Time starting 2018-10.
-# http://www.resmigazete.gov.tr/eskiler/2017/10/20171028-5.pdf
-#
-# From Even Scharning (2017-11-08):
-# ... today it was announced that the DST will become "continuous":
-# http://www.hurriyet.com.tr/son-dakika-yaz-saati-uygulamasi-surekli-hale-geldi-40637482
-# From Paul Eggert (2017-11-08):
-# Although Google Translate misfires on that source, it looks like
-# Turkey reversed last month's decision, and so will stay at +03.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Turkey	1916	only	-	May	 1	0:00	1:00	S
-Rule	Turkey	1916	only	-	Oct	 1	0:00	0	-
-Rule	Turkey	1920	only	-	Mar	28	0:00	1:00	S
-Rule	Turkey	1920	only	-	Oct	25	0:00	0	-
-Rule	Turkey	1921	only	-	Apr	 3	0:00	1:00	S
-Rule	Turkey	1921	only	-	Oct	 3	0:00	0	-
-Rule	Turkey	1922	only	-	Mar	26	0:00	1:00	S
-Rule	Turkey	1922	only	-	Oct	 8	0:00	0	-
-# Whitman gives 1923 Apr 28 - Sep 16 and no DST in 1924-1925;
-# go with Shanks & Pottenger.
-Rule	Turkey	1924	only	-	May	13	0:00	1:00	S
-Rule	Turkey	1924	1925	-	Oct	 1	0:00	0	-
-Rule	Turkey	1925	only	-	May	 1	0:00	1:00	S
-Rule	Turkey	1940	only	-	Jun	30	0:00	1:00	S
-Rule	Turkey	1940	only	-	Oct	 5	0:00	0	-
-Rule	Turkey	1940	only	-	Dec	 1	0:00	1:00	S
-Rule	Turkey	1941	only	-	Sep	21	0:00	0	-
-Rule	Turkey	1942	only	-	Apr	 1	0:00	1:00	S
-# Whitman omits the next two transition and gives 1945 Oct 1;
-# go with Shanks & Pottenger.
-Rule	Turkey	1942	only	-	Nov	 1	0:00	0	-
-Rule	Turkey	1945	only	-	Apr	 2	0:00	1:00	S
-Rule	Turkey	1945	only	-	Oct	 8	0:00	0	-
-Rule	Turkey	1946	only	-	Jun	 1	0:00	1:00	S
-Rule	Turkey	1946	only	-	Oct	 1	0:00	0	-
-Rule	Turkey	1947	1948	-	Apr	Sun>=16	0:00	1:00	S
-Rule	Turkey	1947	1950	-	Oct	Sun>=2	0:00	0	-
-Rule	Turkey	1949	only	-	Apr	10	0:00	1:00	S
-Rule	Turkey	1950	only	-	Apr	19	0:00	1:00	S
-Rule	Turkey	1951	only	-	Apr	22	0:00	1:00	S
-Rule	Turkey	1951	only	-	Oct	 8	0:00	0	-
-Rule	Turkey	1962	only	-	Jul	15	0:00	1:00	S
-Rule	Turkey	1962	only	-	Oct	 8	0:00	0	-
-Rule	Turkey	1964	only	-	May	15	0:00	1:00	S
-Rule	Turkey	1964	only	-	Oct	 1	0:00	0	-
-Rule	Turkey	1970	1972	-	May	Sun>=2	0:00	1:00	S
-Rule	Turkey	1970	1972	-	Oct	Sun>=2	0:00	0	-
-Rule	Turkey	1973	only	-	Jun	 3	1:00	1:00	S
-Rule	Turkey	1973	only	-	Nov	 4	3:00	0	-
-Rule	Turkey	1974	only	-	Mar	31	2:00	1:00	S
-Rule	Turkey	1974	only	-	Nov	 3	5:00	0	-
-Rule	Turkey	1975	only	-	Mar	30	0:00	1:00	S
-Rule	Turkey	1975	1976	-	Oct	lastSun	0:00	0	-
-Rule	Turkey	1976	only	-	Jun	 1	0:00	1:00	S
-Rule	Turkey	1977	1978	-	Apr	Sun>=1	0:00	1:00	S
-Rule	Turkey	1977	only	-	Oct	16	0:00	0	-
-Rule	Turkey	1979	1980	-	Apr	Sun>=1	3:00	1:00	S
-Rule	Turkey	1979	1982	-	Oct	Mon>=11	0:00	0	-
-Rule	Turkey	1981	1982	-	Mar	lastSun	3:00	1:00	S
-Rule	Turkey	1983	only	-	Jul	31	0:00	1:00	S
-Rule	Turkey	1983	only	-	Oct	 2	0:00	0	-
-Rule	Turkey	1985	only	-	Apr	20	0:00	1:00	S
-Rule	Turkey	1985	only	-	Sep	28	0:00	0	-
-Rule	Turkey	1986	1993	-	Mar	lastSun	1:00s	1:00	S
-Rule	Turkey	1986	1995	-	Sep	lastSun	1:00s	0	-
-Rule	Turkey	1994	only	-	Mar	20	1:00s	1:00	S
-Rule	Turkey	1995	2006	-	Mar	lastSun	1:00s	1:00	S
-Rule	Turkey	1996	2006	-	Oct	lastSun	1:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Istanbul	1:55:52 -	LMT	1880
-			1:56:56	-	IMT	1910 Oct # Istanbul Mean Time?
-			2:00	Turkey	EE%sT	1978 Oct 15
-			3:00	Turkey	+03/+04	1985 Apr 20
-			2:00	Turkey	EE%sT	2007
-			2:00	EU	EE%sT	2011 Mar 27  1:00u
-			2:00	-	EET	2011 Mar 28  1:00u
-			2:00	EU	EE%sT	2014 Mar 30  1:00u
-			2:00	-	EET	2014 Mar 31  1:00u
-			2:00	EU	EE%sT	2015 Oct 25  1:00u
-			2:00	1:00	EEST	2015 Nov  8  1:00u
-			2:00	EU	EE%sT	2016 Sep  7
-			3:00	-	+03
-Link	Europe/Istanbul	Asia/Istanbul	# Istanbul is in both continents.
-
-# Ukraine
-#
-# From Igor Karpov, who works for the Ukrainian Ministry of Justice,
-# via Garrett Wollman (2003-01-27):
-# BTW, I've found the official document on this matter. It's government
-# regulations No. 509, May 13, 1996. In my poor translation it says:
-# "Time in Ukraine is set to second timezone (Kiev time). Each last Sunday
-# of March at 3am the time is changing to 4am and each last Sunday of
-# October the time at 4am is changing to 3am"
-
-# From Alexander Krivenyshev (2011-09-20):
-# On September 20, 2011 the deputies of the Verkhovna Rada agreed to
-# abolish the transfer clock to winter time.
-#
-# Bill No. 8330 of MP from the Party of Regions Oleg Nadoshi got
-# approval from 266 deputies.
-#
-# Ukraine abolishes transfer back to the winter time (in Russian)
-# http://news.mail.ru/politics/6861560/
-#
-# The Ukrainians will no longer change the clock (in Russian)
-# http://www.segodnya.ua/news/14290482.html
-#
-# Deputies cancelled the winter time (in Russian)
-# https://www.pravda.com.ua/rus/news/2011/09/20/6600616/
-#
-# From Philip Pizzey (2011-10-18):
-# Today my Ukrainian colleagues have informed me that the
-# Ukrainian parliament have decided that they will go to winter
-# time this year after all.
-#
-# From Udo Schwedt (2011-10-18):
-# As far as I understand, the recent change to the Ukrainian time zone
-# (Europe/Kiev) to introduce permanent daylight saving time (similar
-# to Russia) was reverted today:
-# http://portal.rada.gov.ua/rada/control/en/publish/article/info_left?art_id=287324&cat_id=105995
-#
-# Also reported by Alexander Bokovoy (2011-10-18) who also noted:
-# The law documents themselves are at
-# http://w1.c1.rada.gov.ua/pls/zweb_n/webproc4_1?id=&pf3511=41484
-
-# From Vladimir in Moscow via Alois Treindl re Kiev time 1991/2 (2014-02-28):
-# First in Ukraine they changed Time zone from UTC+3 to UTC+2 with DST:
-#       03 25 1990 02:00 -03.00 1       Time Zone 3 with DST
-#       07 01 1990 02:00 -02.00 1       Time Zone 2 with DST
-# * Ukrainian Government's Resolution of 18.06.1990, No. 134.
-# http://search.ligazakon.ua/l_doc2.nsf/link1/T001500.html
-#
-# They did not end DST in September, 1990 (according to the law,
-# "summer time" was still in action):
-#       09 30 1990 03:00 -02.00 1       Time Zone 2 with DST
-# * Ukrainian Government's Resolution of 21.09.1990, No. 272.
-# http://search.ligazakon.ua/l_doc2.nsf/link1/KP900272.html
-#
-# Again no change in March, 1991 ("summer time" in action):
-#       03 31 1991 02:00 -02.00 1       Time Zone 2 with DST
-#
-# DST ended in September 1991 ("summer time" ended):
-#       09 29 1991 03:00 -02.00 0       Time Zone 2, no DST
-# * Ukrainian Government's Resolution of 25.09.1991, No. 225.
-# http://www.uazakon.com/documents/date_21/pg_iwgdoc.htm
-# This is an answer.
-#
-# Since 1992 they had normal DST procedure:
-#       03 29 1992 02:00 -02.00 1       DST started
-#       09 27 1992 03:00 -02.00 0       DST ended
-# * Ukrainian Government's Resolution of 20.03.1992, No. 139.
-# http://www.uazakon.com/documents/date_8u/pg_grcasa.htm
-
-# From Paul Eggert (2018-10-03):
-# As is usual in tzdb, Ukrainian zones use the most common English spellings.
-# For example, tzdb uses Europe/Kiev, as "Kiev" is the most common spelling in
-# English for Ukraine's capital, even though it is certainly wrong as a
-# transliteration of the Ukrainian "КоїĐČ".  This is similar to tzdb's use of
-# Europe/Prague, which is certainly wrong as a transliteration of the Czech
-# "Praha".  ("Kiev" came from old Slavic via Russian to English, and "Prague"
-# came from old Slavic via French to English, so the two cases have something
-# in common.)  Admittedly English-language spelling of Ukrainian names is
-# controversial, and some day "Kyiv" may become substantially more popular in
-# English; in the meantime, stick with the traditional English "Kiev" as that
-# means less disruption for our users.
-#
-# Anyway, none of the common English-language spellings (Kiev, Kyiv, Kieff,
-# Kijeff, Kijev, Kiyef, Kiyeff) do justice to the common pronunciation in
-# Ukrainian, namely [ˈkÉȘjiuÌŻ] (IPA).  This pronunciation has nothing like an
-# English "v" or "f", and instead trails off with what an English-speaker
-# would call a demure "oo" sound, and it would would be better anglicized as
-# "Kuiyu".  Here's a sound file, if you would like to do as the Kuiyuvians do:
-# https://commons.wikimedia.org/wiki/File:Uk-КоїĐČ.ogg
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-# This represents most of Ukraine.  See above for the spelling of "Kiev".
-Zone Europe/Kiev	2:02:04 -	LMT	1880
-			2:02:04	-	KMT	1924 May  2 # Kiev Mean Time
-			2:00	-	EET	1930 Jun 21
-			3:00	-	MSK	1941 Sep 20
-			1:00	C-Eur	CE%sT	1943 Nov  6
-			3:00	Russia	MSK/MSD	1990 Jul  1  2:00
-			2:00	1:00	EEST	1991 Sep 29  3:00
-			2:00	E-Eur	EE%sT	1995
-			2:00	EU	EE%sT
-# Ruthenia used CET 1990/1991.
-# "Uzhhorod" is the transliteration of the Rusyn/Ukrainian pronunciation, but
-# "Uzhgorod" is more common in English.
-Zone Europe/Uzhgorod	1:29:12 -	LMT	1890 Oct
-			1:00	-	CET	1940
-			1:00	C-Eur	CE%sT	1944 Oct
-			1:00	1:00	CEST	1944 Oct 26
-			1:00	-	CET	1945 Jun 29
-			3:00	Russia	MSK/MSD	1990
-			3:00	-	MSK	1990 Jul  1  2:00
-			1:00	-	CET	1991 Mar 31  3:00
-			2:00	-	EET	1992
-			2:00	E-Eur	EE%sT	1995
-			2:00	EU	EE%sT
-# Zaporozh'ye and eastern Lugansk oblasts observed DST 1990/1991.
-# "Zaporizhia" is the transliteration of the Ukrainian name, but
-# "Zaporozh'ye" is more common in English.  Use the common English
-# spelling, except omit the apostrophe as it is not allowed in
-# portable Posix file names.
-Zone Europe/Zaporozhye	2:20:40 -	LMT	1880
-			2:20	-	+0220	1924 May  2
-			2:00	-	EET	1930 Jun 21
-			3:00	-	MSK	1941 Aug 25
-			1:00	C-Eur	CE%sT	1943 Oct 25
-			3:00	Russia	MSK/MSD	1991 Mar 31  2:00
-			2:00	E-Eur	EE%sT	1995
-			2:00	EU	EE%sT
-
-# Vatican City
-# See Europe/Rome.
-
-###############################################################################
-
-# One source shows that Bulgaria, Cyprus, Finland, and Greece observe DST from
-# the last Sunday in March to the last Sunday in September in 1986.
-# The source shows Romania changing a day later than everybody else.
-#
-# According to Bernard Sieloff's source, Poland is in the MET time zone but
-# uses the WE DST rules.  The Western USSR uses EET+1 and ME DST rules.
-# Bernard Sieloff's source claims Romania switches on the same day, but at
-# 00:00 standard time (i.e., 01:00 DST).  It also claims that Turkey
-# switches on the same day, but switches on at 01:00 standard time
-# and off at 00:00 standard time (i.e., 01:00 DST)
-
-# ...
-# Date: Wed, 28 Jan 87 16:56:27 -0100
-# From: Tom Hofmann
-# ...
-#
-# ...the European time rules are...standardized since 1981, when
-# most European countries started DST.  Before that year, only
-# a few countries (UK, France, Italy) had DST, each according
-# to own national rules.  In 1981, however, DST started on
-# 'Apr firstSun', and not on 'Mar lastSun' as in the following
-# years...
-# But also since 1981 there are some more national exceptions
-# than listed in 'europe': Switzerland, for example, joined DST
-# one year later, Denmark ended DST on 'Oct 1' instead of 'Sep
-# lastSun' in 1981 - I don't know how they handle now.
-#
-# Finally, DST ist always from 'Apr 1' to 'Oct 1' in the
-# Soviet Union (as far as I know).
-#
-# Tom Hofmann, Scientific Computer Center, CIBA-GEIGY AG,
-# 4002 Basle, Switzerland
-# ...
-
-# ...
-# Date: Wed, 4 Feb 87 22:35:22 +0100
-# From: Dik T. Winter
-# ...
-#
-# The information from Tom Hofmann is (as far as I know) not entirely correct.
-# After a request from chongo at amdahl I tried to retrieve all information
-# about DST in Europe.  I was able to find all from about 1969.
-#
-# ...standardization on DST in Europe started in about 1977 with switches on
-# first Sunday in April and last Sunday in September...
-# In 1981 UK joined Europe insofar that
-# the starting day for both shifted to last Sunday in March.  And from 1982
-# the whole of Europe used DST, with switch dates April 1 and October 1 in
-# the Sov[i]et Union.  In 1985 the SU reverted to standard Europe[a]n switch
-# dates...
-#
-# It should also be remembered that time-zones are not constants; e.g.
-# Portugal switched in 1976 from MET (or CET) to WET with DST...
-# Note also that though there were rules for switch dates not
-# all countries abided to these dates, and many individual deviations
-# occurred, though not since 1982 I believe.  Another note: it is always
-# assumed that DST is 1 hour ahead of normal time, this need not be the
-# case; at least in the Netherlands there have been times when DST was 2 hours
-# in advance of normal time.
-#
-# ...
-# dik t. winter, cwi, amsterdam, nederland
-# ...
-
-# From Bob Devine (1988-01-28):
-# ...
-# Greece: Last Sunday in April to last Sunday in September (iffy on dates).
-# Since 1978.  Change at midnight.
-# ...
-# Monaco: has same DST as France.
-# ...
--- a/test/jdk/sun/util/calendar/zi/tzdata/factory	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# tzdb data for noncommittal factory settings
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# For distributors who don't want to specify a timezone in their
-# installation procedures.  Users who run 'date' will get the
-# time zone abbreviation "-00", indicating that the actual time zone
-# is unknown.
-
-# Zone	NAME	GMTOFF	RULES	FORMAT
-Zone	Factory	0	-	-00
--- a/test/jdk/sun/util/calendar/zi/tzdata/gmt	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	GMT		0:00	-	GMT
--- a/test/jdk/sun/util/calendar/zi/tzdata/iso3166.tab	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,295 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# ISO 3166 alpha-2 country codes
-#
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-#
-# From Paul Eggert (2015-05-02):
-# This file contains a table of two-letter country codes.  Columns are
-# separated by a single tab.  Lines beginning with '#' are comments.
-# All text uses UTF-8 encoding.  The columns of the table are as follows:
-#
-# 1.  ISO 3166-1 alpha-2 country code, current as of
-#     ISO 3166-1 N976 (2018-11-06).  See: Updates on ISO 3166-1
-#     https://isotc.iso.org/livelink/livelink/Open/16944257
-# 2.  The usual English name for the coded region,
-#     chosen so that alphabetic sorting of subsets produces helpful lists.
-#     This is not the same as the English name in the ISO 3166 tables.
-#
-# The table is sorted by country code.
-#
-# This table is intended as an aid for users, to help them select time
-# zone data appropriate for their practical needs.  It is not intended
-# to take or endorse any position on legal or territorial claims.
-#
-#country-
-#code	name of country, territory, area, or subdivision
-AD	Andorra
-AE	United Arab Emirates
-AF	Afghanistan
-AG	Antigua & Barbuda
-AI	Anguilla
-AL	Albania
-AM	Armenia
-AO	Angola
-AQ	Antarctica
-AR	Argentina
-AS	Samoa (American)
-AT	Austria
-AU	Australia
-AW	Aruba
-AX	Åland Islands
-AZ	Azerbaijan
-BA	Bosnia & Herzegovina
-BB	Barbados
-BD	Bangladesh
-BE	Belgium
-BF	Burkina Faso
-BG	Bulgaria
-BH	Bahrain
-BI	Burundi
-BJ	Benin
-BL	St Barthelemy
-BM	Bermuda
-BN	Brunei
-BO	Bolivia
-BQ	Caribbean NL
-BR	Brazil
-BS	Bahamas
-BT	Bhutan
-BV	Bouvet Island
-BW	Botswana
-BY	Belarus
-BZ	Belize
-CA	Canada
-CC	Cocos (Keeling) Islands
-CD	Congo (Dem. Rep.)
-CF	Central African Rep.
-CG	Congo (Rep.)
-CH	Switzerland
-CI	CĂŽte d'Ivoire
-CK	Cook Islands
-CL	Chile
-CM	Cameroon
-CN	China
-CO	Colombia
-CR	Costa Rica
-CU	Cuba
-CV	Cape Verde
-CW	Curaçao
-CX	Christmas Island
-CY	Cyprus
-CZ	Czech Republic
-DE	Germany
-DJ	Djibouti
-DK	Denmark
-DM	Dominica
-DO	Dominican Republic
-DZ	Algeria
-EC	Ecuador
-EE	Estonia
-EG	Egypt
-EH	Western Sahara
-ER	Eritrea
-ES	Spain
-ET	Ethiopia
-FI	Finland
-FJ	Fiji
-FK	Falkland Islands
-FM	Micronesia
-FO	Faroe Islands
-FR	France
-GA	Gabon
-GB	Britain (UK)
-GD	Grenada
-GE	Georgia
-GF	French Guiana
-GG	Guernsey
-GH	Ghana
-GI	Gibraltar
-GL	Greenland
-GM	Gambia
-GN	Guinea
-GP	Guadeloupe
-GQ	Equatorial Guinea
-GR	Greece
-GS	South Georgia & the South Sandwich Islands
-GT	Guatemala
-GU	Guam
-GW	Guinea-Bissau
-GY	Guyana
-HK	Hong Kong
-HM	Heard Island & McDonald Islands
-HN	Honduras
-HR	Croatia
-HT	Haiti
-HU	Hungary
-ID	Indonesia
-IE	Ireland
-IL	Israel
-IM	Isle of Man
-IN	India
-IO	British Indian Ocean Territory
-IQ	Iraq
-IR	Iran
-IS	Iceland
-IT	Italy
-JE	Jersey
-JM	Jamaica
-JO	Jordan
-JP	Japan
-KE	Kenya
-KG	Kyrgyzstan
-KH	Cambodia
-KI	Kiribati
-KM	Comoros
-KN	St Kitts & Nevis
-KP	Korea (North)
-KR	Korea (South)
-KW	Kuwait
-KY	Cayman Islands
-KZ	Kazakhstan
-LA	Laos
-LB	Lebanon
-LC	St Lucia
-LI	Liechtenstein
-LK	Sri Lanka
-LR	Liberia
-LS	Lesotho
-LT	Lithuania
-LU	Luxembourg
-LV	Latvia
-LY	Libya
-MA	Morocco
-MC	Monaco
-MD	Moldova
-ME	Montenegro
-MF	St Martin (French)
-MG	Madagascar
-MH	Marshall Islands
-MK	North Macedonia
-ML	Mali
-MM	Myanmar (Burma)
-MN	Mongolia
-MO	Macau
-MP	Northern Mariana Islands
-MQ	Martinique
-MR	Mauritania
-MS	Montserrat
-MT	Malta
-MU	Mauritius
-MV	Maldives
-MW	Malawi
-MX	Mexico
-MY	Malaysia
-MZ	Mozambique
-NA	Namibia
-NC	New Caledonia
-NE	Niger
-NF	Norfolk Island
-NG	Nigeria
-NI	Nicaragua
-NL	Netherlands
-NO	Norway
-NP	Nepal
-NR	Nauru
-NU	Niue
-NZ	New Zealand
-OM	Oman
-PA	Panama
-PE	Peru
-PF	French Polynesia
-PG	Papua New Guinea
-PH	Philippines
-PK	Pakistan
-PL	Poland
-PM	St Pierre & Miquelon
-PN	Pitcairn
-PR	Puerto Rico
-PS	Palestine
-PT	Portugal
-PW	Palau
-PY	Paraguay
-QA	Qatar
-RE	RĂ©union
-RO	Romania
-RS	Serbia
-RU	Russia
-RW	Rwanda
-SA	Saudi Arabia
-SB	Solomon Islands
-SC	Seychelles
-SD	Sudan
-SE	Sweden
-SG	Singapore
-SH	St Helena
-SI	Slovenia
-SJ	Svalbard & Jan Mayen
-SK	Slovakia
-SL	Sierra Leone
-SM	San Marino
-SN	Senegal
-SO	Somalia
-SR	Suriname
-SS	South Sudan
-ST	Sao Tome & Principe
-SV	El Salvador
-SX	St Maarten (Dutch)
-SY	Syria
-SZ	Eswatini (Swaziland)
-TC	Turks & Caicos Is
-TD	Chad
-TF	French Southern & Antarctic Lands
-TG	Togo
-TH	Thailand
-TJ	Tajikistan
-TK	Tokelau
-TL	East Timor
-TM	Turkmenistan
-TN	Tunisia
-TO	Tonga
-TR	Turkey
-TT	Trinidad & Tobago
-TV	Tuvalu
-TW	Taiwan
-TZ	Tanzania
-UA	Ukraine
-UG	Uganda
-UM	US minor outlying islands
-US	United States
-UY	Uruguay
-UZ	Uzbekistan
-VA	Vatican City
-VC	St Vincent
-VE	Venezuela
-VG	Virgin Islands (UK)
-VI	Virgin Islands (US)
-VN	Vietnam
-VU	Vanuatu
-WF	Wallis & Futuna
-WS	Samoa (western)
-YE	Yemen
-YT	Mayotte
-ZA	South Africa
-ZM	Zambia
-ZW	Zimbabwe
--- a/test/jdk/sun/util/calendar/zi/tzdata/jdk11_backward	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-#
-# 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.
-#
-# JDK 1.1.x compatible time zone IDs
-#
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	SystemV	min	1973	-	Apr	lastSun	2:00	1:00	D
-Rule	SystemV	min	1973	-	Oct	lastSun	2:00	0	S
-Rule	SystemV	1974	only	-	Jan	6	2:00	1:00	D
-Rule	SystemV	1974	only	-	Nov	lastSun	2:00	0	S
-Rule	SystemV	1975	only	-	Feb	23	2:00	1:00	D
-Rule	SystemV	1975	only	-	Oct	lastSun	2:00	0	S
-Rule	SystemV	1976	max	-	Apr	lastSun	2:00	1:00	D
-Rule	SystemV	1976	max	-	Oct	lastSun	2:00	0	S
-
-# Zone	NAME		GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
-Zone	SystemV/AST4ADT	-4:00	SystemV		A%sT
-Zone	SystemV/EST5EDT	-5:00	SystemV		E%sT
-Zone	SystemV/CST6CDT	-6:00	SystemV		C%sT
-Zone	SystemV/MST7MDT	-7:00	SystemV		M%sT
-Zone	SystemV/PST8PDT	-8:00	SystemV		P%sT
-Zone	SystemV/YST9YDT	-9:00	SystemV		Y%sT
-Zone	SystemV/AST4	-4:00	-		AST
-Zone	SystemV/EST5	-5:00	-		EST
-Zone	SystemV/CST6	-6:00	-		CST
-Zone	SystemV/MST7	-7:00	-		MST
-Zone	SystemV/PST8	-8:00	-		PST
-Zone	SystemV/YST9	-9:00	-		YST
-Zone	SystemV/HST10	-10:00	-		HST
--- a/test/jdk/sun/util/calendar/zi/tzdata/leapseconds	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# Allowance for leap seconds added to each time zone file.
-
-# This file is in the public domain.
-
-# This file is generated automatically from the data in the public-domain
-# leap-seconds.list file, which can be copied from
-# <ftp://ftp.nist.gov/pub/time/leap-seconds.list>
-# or <ftp://ftp.boulder.nist.gov/pub/time/leap-seconds.list>
-# or <ftp://tycho.usno.navy.mil/pub/ntp/leap-seconds.list>.
-# For more about leap-seconds.list, please see
-# The NTP Timescale and Leap Seconds
-# <https://www.eecis.udel.edu/~mills/leap.html>.
-
-# The International Earth Rotation and Reference Systems Service
-# periodically uses leap seconds to keep UTC to within 0.9 s of UT1
-# (which measures the true angular orientation of the earth in space)
-# and publishes leap second data in a copyrighted file
-# <https://hpiers.obspm.fr/iers/bul/bulc/Leap_Second.dat>.
-# See: Levine J. Coordinated Universal Time and the leap second.
-# URSI Radio Sci Bull. 2016;89(4):30-6. doi:10.23919/URSIRSB.2016.7909995
-# <https://ieeexplore.ieee.org/document/7909995>.
-
-# There were no leap seconds before 1972, because the official mechanism
-# accounting for the discrepancy between atomic time and the earth's rotation
-# did not exist.  The first ("1 Jan 1972") data line in leap-seconds.list
-# does not denote a leap second; it denotes the start of the current definition
-# of UTC.
-
-# The correction (+ or -) is made at the given time, so lines
-# will typically look like:
-#	Leap	YEAR	MON	DAY	23:59:60	+	R/S
-# or
-#	Leap	YEAR	MON	DAY	23:59:59	-	R/S
-
-# If the leap second is Rolling (R) the given time is local time (unused here).
-Leap	1972	Jun	30	23:59:60	+	S
-Leap	1972	Dec	31	23:59:60	+	S
-Leap	1973	Dec	31	23:59:60	+	S
-Leap	1974	Dec	31	23:59:60	+	S
-Leap	1975	Dec	31	23:59:60	+	S
-Leap	1976	Dec	31	23:59:60	+	S
-Leap	1977	Dec	31	23:59:60	+	S
-Leap	1978	Dec	31	23:59:60	+	S
-Leap	1979	Dec	31	23:59:60	+	S
-Leap	1981	Jun	30	23:59:60	+	S
-Leap	1982	Jun	30	23:59:60	+	S
-Leap	1983	Jun	30	23:59:60	+	S
-Leap	1985	Jun	30	23:59:60	+	S
-Leap	1987	Dec	31	23:59:60	+	S
-Leap	1989	Dec	31	23:59:60	+	S
-Leap	1990	Dec	31	23:59:60	+	S
-Leap	1992	Jun	30	23:59:60	+	S
-Leap	1993	Jun	30	23:59:60	+	S
-Leap	1994	Jun	30	23:59:60	+	S
-Leap	1995	Dec	31	23:59:60	+	S
-Leap	1997	Jun	30	23:59:60	+	S
-Leap	1998	Dec	31	23:59:60	+	S
-Leap	2005	Dec	31	23:59:60	+	S
-Leap	2008	Dec	31	23:59:60	+	S
-Leap	2012	Jun	30	23:59:60	+	S
-Leap	2015	Jun	30	23:59:60	+	S
-Leap	2016	Dec	31	23:59:60	+	S
-
-# POSIX timestamps for the data in this file:
-#updated 1467936000
-#expires 1577491200
-
-#	Updated through IERS Bulletin C57
-#	File expires on:  28 December 2019
--- a/test/jdk/sun/util/calendar/zi/tzdata/northamerica	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3508 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# tzdb data for North and Central America and environs
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# also includes Central America and the Caribbean
-
-# This file is by no means authoritative; if you think you know better,
-# go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).  For more, please see
-# the file CONTRIBUTING in the tz distribution.
-
-# From Paul Eggert (1999-03-22):
-# A reliable and entertaining source about time zones is
-# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
-
-###############################################################################
-
-# United States
-
-# From Paul Eggert (1999-03-31):
-# Howse writes (pp 121-125) that time zones were invented by
-# Professor Charles Ferdinand Dowd (1825-1904),
-# Principal of Temple Grove Ladies' Seminary (Saratoga Springs, NY).
-# His pamphlet "A System of National Time for Railroads" (1870)
-# was the result of his proposals at the Convention of Railroad Trunk Lines
-# in New York City (1869-10).  His 1870 proposal was based on Washington, DC,
-# but in 1872-05 he moved the proposed origin to Greenwich.
-
-# From Paul Eggert (2018-03-20):
-# Dowd's proposal left many details unresolved, such as where to draw
-# lines between time zones.  The key individual who made time zones
-# work in the US was William Frederick Allen - railway engineer,
-# managing editor of the Travelers' Guide, and secretary of the
-# General Time Convention, a railway standardization group.  Allen
-# spent months in dialogs with scientific and railway leaders,
-# developed a workable plan to institute time zones, and presented it
-# to the General Time Convention on 1883-04-11, saying that his plan
-# meant "local time would be practically abolished" - a plus for
-# railway scheduling.  By the next convention on 1883-10-11 nearly all
-# railroads had agreed and it took effect on 1883-11-18.  That Sunday
-# was called the "day of two noons", as some locations observed noon
-# twice.  Allen witnessed the transition in New York City, writing:
-#
-#   I heard the bells of St. Paul's strike on the old time.  Four
-#   minutes later, obedient to the electrical signal from the Naval
-#   Observatory ... the time-ball made its rapid descent, the chimes
-#   of old Trinity rang twelve measured strokes, and local time was
-#   abandoned, probably forever.
-#
-# Most of the US soon followed suit.  See:
-# Bartky IR. The adoption of standard time. Technol Cult 1989 Jan;30(1):25-56.
-# https://dx.doi.org/10.2307/3105430
-
-# From Paul Eggert (2005-04-16):
-# That 1883 transition occurred at 12:00 new time, not at 12:00 old time.
-# See p 46 of David Prerau, Seize the daylight, Thunder's Mouth Press (2005).
-
-# From Paul Eggert (2006-03-22):
-# A good source for time zone historical data in the US is
-# Thomas G. Shanks, The American Atlas (5th edition),
-# San Diego: ACS Publications, Inc. (1991).
-# Make sure you have the errata sheet; the book is somewhat useless without it.
-# It is the source for most of the pre-1991 US entries below.
-
-# From Paul Eggert (2001-03-06):
-# Daylight Saving Time was first suggested as a joke by Benjamin Franklin
-# in his whimsical essay "An Economical Project for Diminishing the Cost
-# of Light" published in the Journal de Paris (1784-04-26).
-# Not everyone is happy with the results:
-#
-#	I don't really care how time is reckoned so long as there is some
-#	agreement about it, but I object to being told that I am saving
-#	daylight when my reason tells me that I am doing nothing of the kind.
-#	I even object to the implication that I am wasting something
-#	valuable if I stay in bed after the sun has risen.  As an admirer
-#	of moonlight I resent the bossy insistence of those who want to
-#	reduce my time for enjoying it.  At the back of the Daylight Saving
-#	scheme I detect the bony, blue-fingered hand of Puritanism, eager
-#	to push people into bed earlier, and get them up earlier, to make
-#	them healthy, wealthy and wise in spite of themselves.
-#
-#	 -- Robertson Davies, The diary of Samuel Marchbanks,
-#	   Clarke, Irwin (1947), XIX, Sunday
-#
-# For more about the first ten years of DST in the United States, see
-# Robert Garland, Ten years of daylight saving from the Pittsburgh standpoint
-# (Carnegie Library of Pittsburgh, 1927).
-# http://www.clpgh.org/exhibit/dst.html
-#
-# Shanks says that DST was called "War Time" in the US in 1918 and 1919.
-# However, DST was imposed by the Standard Time Act of 1918, which
-# was the first nationwide legal time standard, and apparently
-# time was just called "Standard Time" or "Daylight Saving Time".
-
-# From Arthur David Olson:
-# US Daylight Saving Time ended on the last Sunday of *October* in 1974.
-# See, for example, the front page of the Saturday, 1974-10-26
-# and Sunday, 1974-10-27 editions of the Washington Post.
-
-# From Arthur David Olson:
-# Before the Uniform Time Act of 1966 took effect in 1967, observance of
-# Daylight Saving Time in the US was by local option, except during wartime.
-
-# From Arthur David Olson (2000-09-25):
-# Last night I heard part of a rebroadcast of a 1945 Arch Oboler radio drama.
-# In the introduction, Oboler spoke of "Eastern Peace Time."
-# An AltaVista search turned up:
-# https://web.archive.org/web/20000926032210/http://rowayton.org/rhs/hstaug45.html
-# "When the time is announced over the radio now, it is 'Eastern Peace
-# Time' instead of the old familiar 'Eastern War Time.'  Peace is wonderful."
-# (August 1945) by way of confirmation.
-#
-# From Paul Eggert (2017-09-23):
-# This was the V-J Day issue of the Clamdigger, a Rowayton, CT newsletter.
-
-# From Joseph Gallant citing
-# George H. Douglas, _The Early Days of Radio Broadcasting_ (1987):
-# At 7 P.M. (Eastern War Time) [on 1945-08-14], the networks were set
-# to switch to London for Attlee's address, but the American people
-# never got to hear his speech live. According to one press account,
-# CBS' Bob Trout was first to announce the word of Japan's surrender,
-# but a few seconds later, NBC, ABC and Mutual also flashed the word
-# of surrender, all of whom interrupting the bells of Big Ben in
-# London which were to precede Mr. Attlee's speech.
-
-# From Paul Eggert (2003-02-09): It was Robert St John, not Bob Trout.  From
-# Myrna Oliver's obituary of St John on page B16 of today's Los Angeles Times:
-#
-# ... a war-weary U.S. clung to radios, awaiting word of Japan's surrender.
-# Any announcement from Asia would reach St. John's New York newsroom on a
-# wire service teletype machine, which had prescribed signals for major news.
-# Associated Press, for example, would ring five bells before spewing out
-# typed copy of an important story, and 10 bells for news "of transcendental
-# importance."
-#
-# On Aug. 14, stalling while talking steadily into the NBC networks' open
-# microphone, St. John heard five bells and waited only to hear a sixth bell,
-# before announcing confidently: "Ladies and gentlemen, World War II is over.
-# The Japanese have agreed to our surrender terms."
-#
-# He had scored a 20-second scoop on other broadcasters.
-
-# From Arthur David Olson (2005-08-22):
-# Paul has been careful to use the "US" rules only in those locations
-# that are part of the United States; this reflects the real scope of
-# U.S. government action.  So even though the "US" rules have changed
-# in the latest release, other countries won't be affected.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	US	1918	1919	-	Mar	lastSun	2:00	1:00	D
-Rule	US	1918	1919	-	Oct	lastSun	2:00	0	S
-Rule	US	1942	only	-	Feb	9	2:00	1:00	W # War
-Rule	US	1945	only	-	Aug	14	23:00u	1:00	P # Peace
-Rule	US	1945	only	-	Sep	lastSun	2:00	0	S
-Rule	US	1967	2006	-	Oct	lastSun	2:00	0	S
-Rule	US	1967	1973	-	Apr	lastSun	2:00	1:00	D
-Rule	US	1974	only	-	Jan	6	2:00	1:00	D
-Rule	US	1975	only	-	Feb	23	2:00	1:00	D
-Rule	US	1976	1986	-	Apr	lastSun	2:00	1:00	D
-Rule	US	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
-Rule	US	2007	max	-	Mar	Sun>=8	2:00	1:00	D
-Rule	US	2007	max	-	Nov	Sun>=1	2:00	0	S
-
-# From Arthur David Olson, 2005-12-19
-# We generate the files specified below to guard against old files with
-# obsolete information being left in the time zone binary directory.
-# We limit the list to names that have appeared in previous versions of
-# this time zone package.
-# We do these as separate Zones rather than as Links to avoid problems if
-# a particular place changes whether it observes DST.
-# We put these specifications here in the northamerica file both to
-# increase the chances that they'll actually get compiled and to
-# avoid the need to duplicate the US rules in another file.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	EST		 -5:00	-	EST
-Zone	MST		 -7:00	-	MST
-Zone	HST		-10:00	-	HST
-Zone	EST5EDT		 -5:00	US	E%sT
-Zone	CST6CDT		 -6:00	US	C%sT
-Zone	MST7MDT		 -7:00	US	M%sT
-Zone	PST8PDT		 -8:00	US	P%sT
-
-# From U. S. Naval Observatory (1989-01-19):
-# USA  EASTERN       5 H  BEHIND UTC    NEW YORK, WASHINGTON
-# USA  EASTERN       4 H  BEHIND UTC    APR 3 - OCT 30
-# USA  CENTRAL       6 H  BEHIND UTC    CHICAGO, HOUSTON
-# USA  CENTRAL       5 H  BEHIND UTC    APR 3 - OCT 30
-# USA  MOUNTAIN      7 H  BEHIND UTC    DENVER
-# USA  MOUNTAIN      6 H  BEHIND UTC    APR 3 - OCT 30
-# USA  PACIFIC       8 H  BEHIND UTC    L.A., SAN FRANCISCO
-# USA  PACIFIC       7 H  BEHIND UTC    APR 3 - OCT 30
-# USA  ALASKA STD    9 H  BEHIND UTC    MOST OF ALASKA     (AKST)
-# USA  ALASKA STD    8 H  BEHIND UTC    APR 3 - OCT 30 (AKDT)
-# USA  ALEUTIAN     10 H  BEHIND UTC    ISLANDS WEST OF 170W
-# USA    "           9 H  BEHIND UTC    APR 3 - OCT 30
-# USA  HAWAII       10 H  BEHIND UTC
-# USA  BERING       11 H  BEHIND UTC    SAMOA, MIDWAY
-
-# From Arthur David Olson (1989-01-21):
-# The above dates are for 1988.
-# Note the "AKST" and "AKDT" abbreviations, the claim that there's
-# no DST in Samoa, and the claim that there is DST in Alaska and the
-# Aleutians.
-
-# From Arthur David Olson (1988-02-13):
-# Legal standard time zone names, from United States Code (1982 Edition and
-# Supplement III), Title 15, Chapter 6, Section 260 and forward.  First, names
-# up to 1967-04-01 (when most provisions of the Uniform Time Act of 1966
-# took effect), as explained in sections 263 and 261:
-#	(none)
-#	United States standard eastern time
-#	United States standard mountain time
-#	United States standard central time
-#	United States standard Pacific time
-#	(none)
-#	United States standard Alaska time
-#	(none)
-# Next, names from 1967-04-01 until 1983-11-30 (the date for
-# public law 98-181):
-#	Atlantic standard time
-#	eastern standard time
-#	central standard time
-#	mountain standard time
-#	Pacific standard time
-#	Yukon standard time
-#	Alaska-Hawaii standard time
-#	Bering standard time
-# And after 1983-11-30:
-#	Atlantic standard time
-#	eastern standard time
-#	central standard time
-#	mountain standard time
-#	Pacific standard time
-#	Alaska standard time
-#	Hawaii-Aleutian standard time
-#	Samoa standard time
-# The law doesn't give abbreviations.
-#
-# From Paul Eggert (2016-12-19):
-# Here are URLs for the 1918 and 1966 legislation:
-# http://uscode.house.gov/statviewer.htm?volume=40&page=451
-# http://uscode.house.gov/statviewer.htm?volume=80&page=108
-# Although the 1918 names were officially "United States Standard
-# Eastern Time" and similarly for "Central", "Mountain", "Pacific",
-# and "Alaska", in practice "Standard" was placed just before "Time",
-# as codified in 1966.  In practice, Alaska time was abbreviated "AST"
-# before 1968.  Summarizing the 1967 name changes:
-#	1918 names			1967 names
-#  -08	Standard Pacific Time (PST)	Pacific standard time (PST)
-#  -09	(unofficial) Yukon (YST)	Yukon standard time (YST)
-#  -10	Standard Alaska Time (AST)	Alaska-Hawaii standard time (AHST)
-#  -11	(unofficial) Nome (NST)		Bering standard time (BST)
-#
-# From Paul Eggert (2000-01-08), following a heads-up from Rives McDow:
-# Public law 106-564 (2000-12-23) introduced ... "Chamorro Standard Time"
-# for time in Guam and the Northern Marianas.  See the file "australasia".
-#
-# From Paul Eggert (2015-04-17):
-# HST and HDT are standardized abbreviations for Hawaii-Aleutian
-# standard and daylight times.  See section 9.47 (p 234) of the
-# U.S. Government Printing Office Style Manual (2008)
-# https://www.gpo.gov/fdsys/pkg/GPO-STYLEMANUAL-2008/pdf/GPO-STYLEMANUAL-2008.pdf
-
-# From Arthur David Olson, 2005-08-09
-# The following was signed into law on 2005-08-08.
-#
-# H.R. 6, Energy Policy Act of 2005, SEC. 110. DAYLIGHT SAVINGS.
-#   (a) Amendment.--Section 3(a) of the Uniform Time Act of 1966 (15
-#   U.S.C. 260a(a)) is amended--
-#     (1) by striking "first Sunday of April" and inserting "second
-#     Sunday of March"; and
-#     (2) by striking "last Sunday of October" and inserting "first
-#     Sunday of November'.
-#   (b) Effective Date.--Subsection (a) shall take effect 1 year after the
-#   date of enactment of this Act or March 1, 2007, whichever is later.
-#   (c) Report to Congress.--Not later than 9 months after the effective
-#   date stated in subsection (b), the Secretary shall report to Congress
-#   on the impact of this section on energy consumption in the United
-#   States.
-#   (d) Right to Revert.--Congress retains the right to revert the
-#   Daylight Saving Time back to the 2005 time schedules once the
-#   Department study is complete.
-
-# US eastern time, represented by New York
-
-# Connecticut, Delaware, District of Columbia, most of Florida,
-# Georgia, southeast Indiana (Dearborn and Ohio counties), eastern Kentucky
-# (except America/Kentucky/Louisville below), Maine, Maryland, Massachusetts,
-# New Hampshire, New Jersey, New York, North Carolina, Ohio,
-# Pennsylvania, Rhode Island, South Carolina, eastern Tennessee,
-# Vermont, Virginia, West Virginia
-
-# From Dave Cantor (2004-11-02):
-# Early this summer I had the occasion to visit the Mount Washington
-# Observatory weather station atop (of course!) Mount Washington [, NH]....
-# One of the staff members said that the station was on Eastern Standard Time
-# and didn't change their clocks for Daylight Saving ... so that their
-# reports will always have times which are 5 hours behind UTC.
-
-# From Paul Eggert (2005-08-26):
-# According to today's Huntsville Times
-# http://www.al.com/news/huntsvilletimes/index.ssf?/base/news/1125047783228320.xml&coll=1
-# a few towns on Alabama's "eastern border with Georgia, such as Phenix City
-# in Russell County, Lanett in Chambers County and some towns in Lee County,
-# set their watches and clocks on Eastern time."  It quotes H.H. "Bubba"
-# Roberts, city administrator in Phenix City. as saying "We are in the Central
-# time zone, but we do go by the Eastern time zone because so many people work
-# in Columbus."
-#
-# From Paul Eggert (2017-02-22):
-# Four cities are involved.  The two not mentioned above are Smiths Station
-# and Valley.  Barbara Brooks, Valley's assistant treasurer, heard it started
-# because West Point Pepperell textile mills were in Alabama while the
-# corporate office was in Georgia, and residents voted to keep Eastern
-# time even after the mills closed.  See: Kazek K. Did you know which
-# Alabama towns are in a different time zone?  al.com 2017-02-06.
-# http://www.al.com/living/index.ssf/2017/02/do_you_know_which_alabama_town.html
-
-# From Paul Eggert (2014-09-06):
-# Monthly Notices of the Royal Astronomical Society 44, 4 (1884-02-08), 208
-# says that New York City Hall time was 3 minutes 58.4 seconds fast of
-# Eastern time (i.e., -4:56:01.6) just before the 1883 switch.  Round to the
-# nearest second.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
-Rule	NYC	1920	only	-	Mar	lastSun	2:00	1:00	D
-Rule	NYC	1920	only	-	Oct	lastSun	2:00	0	S
-Rule	NYC	1921	1966	-	Apr	lastSun	2:00	1:00	D
-Rule	NYC	1921	1954	-	Sep	lastSun	2:00	0	S
-Rule	NYC	1955	1966	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/New_York	-4:56:02 -	LMT	1883 Nov 18 12:03:58
-			-5:00	US	E%sT	1920
-			-5:00	NYC	E%sT	1942
-			-5:00	US	E%sT	1946
-			-5:00	NYC	E%sT	1967
-			-5:00	US	E%sT
-
-# US central time, represented by Chicago
-
-# Alabama, Arkansas, Florida panhandle (Bay, Calhoun, Escambia,
-# Gulf, Holmes, Jackson, Okaloosa, Santa Rosa, Walton, and
-# Washington counties), Illinois, western Indiana
-# (Gibson, Jasper, Lake, LaPorte, Newton, Porter, Posey, Spencer,
-# Vanderburgh, and Warrick counties), Iowa, most of Kansas, western
-# Kentucky, Louisiana, Minnesota, Mississippi, Missouri, eastern
-# Nebraska, eastern North Dakota, Oklahoma, eastern South Dakota,
-# western Tennessee, most of Texas, Wisconsin
-
-# From Paul Eggert (2018-01-07):
-# In 1869 the Chicago Astronomical Society contracted with the city to keep
-# time.  Though delayed by the Great Fire, by 1880 a wire ran from the
-# Dearborn Observatory (on the University of Chicago campus) to City Hall,
-# which then sent signals to police and fire stations.  However, railroads got
-# their time signals from the Allegheny Observatory, the Madison Observatory,
-# the Ann Arbor Observatory, etc., so their clocks did not agree with each
-# other or with the city's official time.  The confusion took some years to
-# clear up.  See:
-# Moser M. How Chicago gave America its time zones. Chicago. 2018-01-04.
-# http://www.chicagomag.com/city-life/January-2018/How-Chicago-Gave-America-Its-Time-Zones/
-
-# From Larry M. Smith (2006-04-26) re Wisconsin:
-# https://docs.legis.wisconsin.gov/statutes/statutes/175.pdf
-# is currently enforced at the 01:00 time of change.  Because the local
-# "bar time" in the state corresponds to 02:00, a number of citations
-# are issued for the "sale of class 'B' alcohol after prohibited
-# hours" within the deviated hour of this change every year....
-#
-# From Douglas R. Bomberg (2007-03-12):
-# Wisconsin has enacted (nearly eleventh-hour) legislation to get WI
-# Statue 175 closer in synch with the US Congress' intent....
-# https://docs.legis.wisconsin.gov/2007/related/acts/3
-
-# From an email administrator of the City of Fort Pierre, SD (2015-12-21):
-# Fort Pierre is technically located in the Mountain time zone as is
-# the rest of Stanley County.  Most of Stanley County and Fort Pierre
-# uses the Central time zone due to doing most of their business in
-# Pierre so it simplifies schedules.  I have lived in Stanley County
-# all my life and it has been that way since I can remember.  (43 years!)
-#
-# From Paul Eggert (2015-12-25):
-# Assume this practice predates 1970, so Fort Pierre can use America/Chicago.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
-Rule	Chicago	1920	only	-	Jun	13	2:00	1:00	D
-Rule	Chicago	1920	1921	-	Oct	lastSun	2:00	0	S
-Rule	Chicago	1921	only	-	Mar	lastSun	2:00	1:00	D
-Rule	Chicago	1922	1966	-	Apr	lastSun	2:00	1:00	D
-Rule	Chicago	1922	1954	-	Sep	lastSun	2:00	0	S
-Rule	Chicago	1955	1966	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Chicago	-5:50:36 -	LMT	1883 Nov 18 12:09:24
-			-6:00	US	C%sT	1920
-			-6:00	Chicago	C%sT	1936 Mar  1  2:00
-			-5:00	-	EST	1936 Nov 15  2:00
-			-6:00	Chicago	C%sT	1942
-			-6:00	US	C%sT	1946
-			-6:00	Chicago	C%sT	1967
-			-6:00	US	C%sT
-# Oliver County, ND switched from mountain to central time on 1992-10-25.
-Zone America/North_Dakota/Center -6:45:12 - LMT	1883 Nov 18 12:14:48
-			-7:00	US	M%sT	1992 Oct 25  2:00
-			-6:00	US	C%sT
-# Morton County, ND, switched from mountain to central time on
-# 2003-10-26, except for the area around Mandan which was already central time.
-# See <http://dmses.dot.gov/docimages/p63/135818.pdf>.
-# Officially this switch also included part of Sioux County, and
-# Jones, Mellette, and Todd Counties in South Dakota;
-# but in practice these other counties were already observing central time.
-# See <http://www.epa.gov/fedrgstr/EPA-IMPACT/2003/October/Day-28/i27056.htm>.
-Zone America/North_Dakota/New_Salem -6:45:39 - LMT	1883 Nov 18 12:14:21
-			-7:00	US	M%sT	2003 Oct 26  2:00
-			-6:00	US	C%sT
-
-# From Josh Findley (2011-01-21):
-# ...it appears that Mercer County, North Dakota, changed from the
-# mountain time zone to the central time zone at the last transition from
-# daylight-saving to standard time (on Nov. 7, 2010):
-# https://www.gpo.gov/fdsys/pkg/FR-2010-09-29/html/2010-24376.htm
-# http://www.bismarcktribune.com/news/local/article_1eb1b588-c758-11df-b472-001cc4c03286.html
-
-# From Andy Lipscomb (2011-01-24):
-# ...according to the Census Bureau, the largest city is Beulah (although
-# it's commonly referred to as Beulah-Hazen, with Hazen being the next
-# largest city in Mercer County).  Google Maps places Beulah's city hall
-# at 47° 15' 51" N, 101° 46' 40" W, which yields an offset of 6h47'07".
-
-Zone America/North_Dakota/Beulah -6:47:07 - LMT	1883 Nov 18 12:12:53
-			-7:00	US	M%sT	2010 Nov  7  2:00
-			-6:00	US	C%sT
-
-# US mountain time, represented by Denver
-#
-# Colorado, far western Kansas, Montana, western
-# Nebraska, Nevada border (Jackpot, Owyhee, and Mountain City),
-# New Mexico, southwestern North Dakota,
-# western South Dakota, far western Texas (El Paso County, Hudspeth County,
-# and Pine Springs and Nickel Creek in Culberson County), Utah, Wyoming
-#
-# From Paul Eggert (2018-10-25):
-# On 1921-03-04 federal law placed all of Texas into the central time zone.
-# However, El Paso ignored the law for decades and continued to observe
-# mountain time, on the grounds that that's what they had always done
-# and they weren't about to let the federal government tell them what to do.
-# Eventually the federal government gave in and changed the law on
-# 1970-04-10 to match what El Paso was actually doing.  Although
-# that's slightly after our 1970 cutoff, there is no need to create a
-# separate zone for El Paso since they were ignoring the law anyway.  See:
-# Long T. El Pasoans were time rebels, fought to stay in Mountain zone.
-# El Paso Times. 2018-10-24 06:40 -06.
-# https://www.elpasotimes.com/story/news/local/el-paso/2018/10/24/el-pasoans-were-time-rebels-fought-stay-mountain-zone/1744509002/
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
-Rule	Denver	1920	1921	-	Mar	lastSun	2:00	1:00	D
-Rule	Denver	1920	only	-	Oct	lastSun	2:00	0	S
-Rule	Denver	1921	only	-	May	22	2:00	0	S
-Rule	Denver	1965	1966	-	Apr	lastSun	2:00	1:00	D
-Rule	Denver	1965	1966	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Denver	-6:59:56 -	LMT	1883 Nov 18 12:00:04
-			-7:00	US	M%sT	1920
-			-7:00	Denver	M%sT	1942
-			-7:00	US	M%sT	1946
-			-7:00	Denver	M%sT	1967
-			-7:00	US	M%sT
-
-# US Pacific time, represented by Los Angeles
-#
-# California, northern Idaho (Benewah, Bonner, Boundary, Clearwater,
-# Kootenai, Latah, Lewis, Nez Perce, and Shoshone counties, Idaho county
-# north of the Salmon River, and the towns of Burgdorf and Warren),
-# Nevada (except West Wendover), Oregon (except the northern Ÿ of
-# Malheur county), and Washington
-
-# From Paul Eggert (2016-08-20):
-# In early February 1948, in response to California's electricity shortage,
-# PG&E changed power frequency from 60 to 59.5 Hz during daylight hours,
-# causing electric clocks to lose six minutes per day.  (This did not change
-# legal time, and is not part of the data here.)  See:
-# Ross SA. An energy crisis from the past: Northern California in 1948.
-# Working Paper No. 8, Institute of Governmental Studies, UC Berkeley,
-# 1973-11.  https://escholarship.org/uc/item/8x22k30c
-#
-# In another measure to save electricity, DST was instituted from 1948-03-14
-# at 02:01 to 1949-01-16 at 02:00, with the governor having the option to move
-# the fallback transition earlier.  See pages 3-4 of:
-# http://clerk.assembly.ca.gov/sites/clerk.assembly.ca.gov/files/archive/Statutes/1948/48Vol1_Chapters.pdf
-#
-# In response:
-#
-#   Governor Warren received a torrent of objecting mail, and it is not too much
-#   to speculate that the objections to Daylight Saving Time were one important
-#   factor in the defeat of the Dewey-Warren Presidential ticket in California.
-#     -- Ross, p 25
-#
-# On December 8 the governor exercised the option, setting the date to January 1
-# (LA Times 1948-12-09).  The transition time was 02:00 (LA Times 1949-01-01).
-#
-# Despite the controversy, in 1949 California voters approved Proposition 12,
-# which established DST from April's last Sunday at 01:00 until September's
-# last Sunday at 02:00. This was amended by 1962's Proposition 6, which changed
-# the fall-back date to October's last Sunday. See:
-# https://repository.uchastings.edu/cgi/viewcontent.cgi?article=1501&context=ca_ballot_props
-# https://repository.uchastings.edu/cgi/viewcontent.cgi?article=1636&context=ca_ballot_props
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
-Rule	CA	1948	only	-	Mar	14	2:01	1:00	D
-Rule	CA	1949	only	-	Jan	 1	2:00	0	S
-Rule	CA	1950	1966	-	Apr	lastSun	1:00	1:00	D
-Rule	CA	1950	1961	-	Sep	lastSun	2:00	0	S
-Rule	CA	1962	1966	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Los_Angeles -7:52:58 -	LMT	1883 Nov 18 12:07:02
-			-8:00	US	P%sT	1946
-			-8:00	CA	P%sT	1967
-			-8:00	US	P%sT
-
-# Alaska
-# AK%sT is the modern abbreviation for -09 per USNO.
-#
-# From Paul Eggert (2017-06-15):
-# Howse writes that Alaska switched from the Julian to the Gregorian calendar,
-# and from east-of-GMT to west-of-GMT days, when the US bought it from Russia.
-# On Friday, 1867-10-18 (Gregorian), at precisely 15:30 local time, the
-# Russian forts and fleet at Sitka fired salutes to mark the ceremony of
-# formal transfer.  See the Sacramento Daily Union (1867-11-14), p 3, col 2.
-# https://cdnc.ucr.edu/cgi-bin/cdnc?a=d&d=SDU18671114.2.12.1
-# Sitka workers did not change their calendars until Sunday, 1867-10-20,
-# and so celebrated two Sundays that week.  See: Ahllund T (tr Hallamaa P).
-# From the memoirs of a Finnish workman. Alaska History. 2006 Fall;21(2):1-25.
-# http://alaskahistoricalsociety.org/wp-content/uploads/2016/12/Ahllund-2006-Memoirs-of-a-Finnish-Workman.pdf
-# Include only the time zone part of this transition, ignoring the switch
-# from Julian to Gregorian, since we can't represent the Julian calendar.
-#
-# As far as we know, of the locations mentioned below only Sitka was
-# permanently inhabited in 1867 by anyone using either calendar.
-# (Yakutat was colonized by the Russians in 1799, but the settlement was
-# destroyed in 1805 by a Yakutat-kon war party.)  Many of Alaska's inhabitants
-# were unaware of the US acquisition of Alaska, much less of any calendar or
-# time change.  However, the Russian-influenced part of Alaska did observe
-# Russian time, and it is more accurate to model this than to ignore it.
-# The database format requires an exact transition time; use the Russian
-# salute as a somewhat-arbitrary time for the formal transfer of control for
-# all of Alaska.  Sitka's UTC offset is -9:01:13; adjust its 15:30 to the
-# local times of other Alaskan locations so that they change simultaneously.
-
-# From Paul Eggert (2014-07-18):
-# One opinion of the early-1980s turmoil in Alaska over time zones and
-# daylight saving time appeared as graffiti on a Juneau airport wall:
-# "Welcome to Juneau.  Please turn your watch back to the 19th century."
-# See: Turner W. Alaska's four time zones now two. NY Times 1983-11-01.
-# http://www.nytimes.com/1983/11/01/us/alaska-s-four-time-zones-now-two.html
-#
-# Steve Ferguson (2011-01-31) referred to the following source:
-# Norris F. Keeping time in Alaska: national directives, local response.
-# Alaska History 2001;16(1-2).
-# http://alaskahistoricalsociety.org/discover-alaska/glimpses-of-the-past/keeping-time-in-alaska/
-
-# From Arthur David Olson (2011-02-01):
-# Here's database-relevant material from the 2001 "Alaska History" article:
-#
-# On September 20 [1979]...DOT...officials decreed that on April 27,
-# 1980, Juneau and other nearby communities would move to Yukon Time.
-# Sitka, Petersburg, Wrangell, and Ketchikan, however, would remain on
-# Pacific Time.
-#
-# ...on September 22, 1980, DOT Secretary Neil E. Goldschmidt rescinded the
-# Department's September 1979 decision. Juneau and other communities in
-# northern Southeast reverted to Pacific Time on October 26.
-#
-# On October 28 [1983]...the Metlakatla Indian Community Council voted
-# unanimously to keep the reservation on Pacific Time.
-#
-# According to DOT official Joanne Petrie, Indian reservations are not
-# bound to follow time zones imposed by neighboring jurisdictions.
-#
-# (The last is consistent with how the database now handles the Navajo
-# Nation.)
-
-# From Arthur David Olson (2011-02-09):
-# I just spoke by phone with a staff member at the Metlakatla Indian
-# Community office (using contact information available at
-# http://www.commerce.state.ak.us/dca/commdb/CIS.cfm?Comm_Boro_name=Metlakatla
-# It's shortly after 1:00 here on the east coast of the United States;
-# the staffer said it was shortly after 10:00 there. When I asked whether
-# that meant they were on Pacific time, they said no - they were on their
-# own time. I asked about daylight saving; they said it wasn't used. I
-# did not inquire about practices in the past.
-
-# From Arthur David Olson (2011-08-17):
-# For lack of better information, assume that Metlakatla's
-# abandonment of use of daylight saving resulted from the 1983 vote.
-
-# From Steffen Thorsen (2015-11-09):
-# It seems Metlakatla did go off PST on Sunday, November 1, changing
-# their time to AKST and are going to follow Alaska's DST, switching
-# between AKST and AKDT from now on....
-# https://www.krbd.org/2015/10/30/annette-island-times-they-are-a-changing/
-
-# From Ryan Stanley (2018-11-06):
-# The Metlakatla community in Alaska has decided not to change its
-# clock back an hour starting on November 4th, 2018 (day before yesterday).
-# They will be gmtoff=-28800 year-round.
-# https://www.facebook.com/141055983004923/photos/pb.141055983004923.-2207520000.1541465673./569081370202380/
-
-# From Paul Eggert (2018-12-16):
-# In a 2018-12-11 special election, Metlakatla voted to go back to
-# Alaska time (including daylight saving time) starting next year.
-# https://www.krbd.org/2018/12/12/metlakatla-to-follow-alaska-standard-time-allow-liquor-sales/
-#
-# From Ryan Stanley (2019-01-11):
-# The community will be changing back on the 20th of this month...
-# From Tim Parenti (2019-01-11):
-# Per an announcement on the Metlakatla community's official Facebook page, the
-# "fall back" will be on Sunday 2019-01-20 at 02:00:
-# https://www.facebook.com/141055983004923/photos/607150969728753/
-# So they won't be waiting for Alaska to join them on 2019-03-10, but will
-# rather change their clocks twice in seven weeks.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Juneau	 15:02:19 -	LMT	1867 Oct 19 15:33:32
-			 -8:57:41 -	LMT	1900 Aug 20 12:00
-			 -8:00	-	PST	1942
-			 -8:00	US	P%sT	1946
-			 -8:00	-	PST	1969
-			 -8:00	US	P%sT	1980 Apr 27  2:00
-			 -9:00	US	Y%sT	1980 Oct 26  2:00
-			 -8:00	US	P%sT	1983 Oct 30  2:00
-			 -9:00	US	Y%sT	1983 Nov 30
-			 -9:00	US	AK%sT
-Zone America/Sitka	 14:58:47 -	LMT	1867 Oct 19 15:30
-			 -9:01:13 -	LMT	1900 Aug 20 12:00
-			 -8:00	-	PST	1942
-			 -8:00	US	P%sT	1946
-			 -8:00	-	PST	1969
-			 -8:00	US	P%sT	1983 Oct 30  2:00
-			 -9:00	US	Y%sT	1983 Nov 30
-			 -9:00	US	AK%sT
-Zone America/Metlakatla	 15:13:42 -	LMT	1867 Oct 19 15:44:55
-			 -8:46:18 -	LMT	1900 Aug 20 12:00
-			 -8:00	-	PST	1942
-			 -8:00	US	P%sT	1946
-			 -8:00	-	PST	1969
-			 -8:00	US	P%sT	1983 Oct 30  2:00
-			 -8:00	-	PST	2015 Nov  1  2:00
-			 -9:00	US	AK%sT	2018 Nov  4  2:00
-			 -8:00	-	PST	2019 Jan 20  2:00
-			 -9:00	US	AK%sT
-Zone America/Yakutat	 14:41:05 -	LMT	1867 Oct 19 15:12:18
-			 -9:18:55 -	LMT	1900 Aug 20 12:00
-			 -9:00	-	YST	1942
-			 -9:00	US	Y%sT	1946
-			 -9:00	-	YST	1969
-			 -9:00	US	Y%sT	1983 Nov 30
-			 -9:00	US	AK%sT
-Zone America/Anchorage	 14:00:24 -	LMT	1867 Oct 19 14:31:37
-			 -9:59:36 -	LMT	1900 Aug 20 12:00
-			-10:00	-	AST	1942
-			-10:00	US	A%sT	1967 Apr
-			-10:00	-	AHST	1969
-			-10:00	US	AH%sT	1983 Oct 30  2:00
-			 -9:00	US	Y%sT	1983 Nov 30
-			 -9:00	US	AK%sT
-Zone America/Nome	 12:58:22 -	LMT	1867 Oct 19 13:29:35
-			-11:01:38 -	LMT	1900 Aug 20 12:00
-			-11:00	-	NST	1942
-			-11:00	US	N%sT	1946
-			-11:00	-	NST	1967 Apr
-			-11:00	-	BST	1969
-			-11:00	US	B%sT	1983 Oct 30  2:00
-			 -9:00	US	Y%sT	1983 Nov 30
-			 -9:00	US	AK%sT
-Zone America/Adak	 12:13:22 -	LMT	1867 Oct 19 12:44:35
-			-11:46:38 -	LMT	1900 Aug 20 12:00
-			-11:00	-	NST	1942
-			-11:00	US	N%sT	1946
-			-11:00	-	NST	1967 Apr
-			-11:00	-	BST	1969
-			-11:00	US	B%sT	1983 Oct 30  2:00
-			-10:00	US	AH%sT	1983 Nov 30
-			-10:00	US	H%sT
-# The following switches don't quite make our 1970 cutoff.
-#
-# Shanks writes that part of southwest Alaska (e.g. Aniak)
-# switched from -11:00 to -10:00 on 1968-09-22 at 02:00,
-# and another part (e.g. Akiak) made the same switch five weeks later.
-#
-# From David Flater (2004-11-09):
-# In e-mail, 2004-11-02, Ray Hudson, historian/liaison to the Unalaska
-# Historic Preservation Commission, provided this information, which
-# suggests that Unalaska deviated from statutory time from early 1967
-# possibly until 1983:
-#
-#  Minutes of the Unalaska City Council Meeting, January 10, 1967:
-#  "Except for St. Paul and Akutan, Unalaska is the only important
-#  location not on Alaska Standard Time.  The following resolution was
-#  made by William Robinson and seconded by Henry Swanson: Be it
-#  resolved that the City of Unalaska hereby goes to Alaska Standard
-#  Time as of midnight Friday, January 13, 1967 (1 A.M. Saturday,
-#  January 14, Alaska Standard Time.)  This resolution was passed with
-#  three votes for and one against."
-
-# Hawaii
-
-# From Arthur David Olson (2010-12-09):
-# "Hawaiian Time" by Robert C. Schmitt and Doak C. Cox appears on pages 207-225
-# of volume 26 of The Hawaiian Journal of History (1992). As of 2010-12-09,
-# the article is available at
-# https://evols.library.manoa.hawaii.edu/bitstream/10524/239/2/JL26215.pdf
-# and indicates that standard time was adopted effective noon, January
-# 13, 1896 (page 218), that in "1933, the Legislature decreed daylight
-# saving for the period between the last Sunday of each April and the
-# last Sunday of each September, but less than a month later repealed the
-# act," (page 220), that year-round daylight saving time was in effect
-# from 1942-02-09 to 1945-09-30 (page 221, with no time of day given for
-# when clocks changed) and that clocks were changed by 30 minutes
-# effective the second Sunday of June, 1947 (page 219, with no time of
-# day given for when clocks changed). A footnote for the 1933 changes
-# cites Session Laws of Hawaii 1933, "Act. 90 (approved 26 Apr. 1933)
-# and Act 163 (approved 21 May 1933)."
-
-# From Arthur David Olson (2011-01-19):
-# The following is from "Laws of the Territory of Hawaii Passed by the
-# Seventeenth Legislature: Regular Session 1933," available (as of
-# 2011-01-19) at American University's Pence Law Library. Page 85: "Act
-# 90...At 2 o'clock ante meridian of the last Sunday in April of each
-# year, the standard time of this Territory shall be advanced one
-# hour...This Act shall take effect upon its approval. Approved this 26th
-# day of April, A. D. 1933. LAWRENCE M JUDD, Governor of the Territory of
-# Hawaii." Page 172: "Act 163...Act 90 of the Session Laws of 1933 is
-# hereby repealed...This Act shall take effect upon its approval, upon
-# which date the standard time of this Territory shall be restored to
-# that existing immediately prior to the taking effect of said Act 90.
-# Approved this 21st day of May, A. D. 1933. LAWRENCE M. JUDD, Governor
-# of the Territory of Hawaii."
-#
-# Note that 1933-05-21 was a Sunday.
-# We're left to guess the time of day when Act 163 was approved; guess noon.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Honolulu	-10:31:26 -	LMT	1896 Jan 13 12:00
-			-10:30	-	HST	1933 Apr 30  2:00
-			-10:30	1:00	HDT	1933 May 21 12:00
-			-10:30	US	H%sT	1947 Jun  8  2:00
-			-10:00	-	HST
-
-# Now we turn to US areas that have diverged from the consensus since 1970.
-
-# Arizona mostly uses MST.
-
-# From Paul Eggert (2002-10-20):
-#
-# The information in the rest of this paragraph is derived from the
-# Daylight Saving Time web page
-# <http://www.dlapr.lib.az.us/links/daylight.htm> (2002-01-23)
-# maintained by the Arizona State Library, Archives and Public Records.
-# Between 1944-01-01 and 1944-04-01 the State of Arizona used standard
-# time, but by federal law railroads, airlines, bus lines, military
-# personnel, and some engaged in interstate commerce continued to
-# observe war (i.e., daylight saving) time.  The 1944-03-17 Phoenix
-# Gazette says that was the date the law changed, and that 04-01 was
-# the date the state's clocks would change.  In 1945 the State of
-# Arizona used standard time all year, again with exceptions only as
-# mandated by federal law.  Arizona observed DST in 1967, but Arizona
-# Laws 1968, ch. 183 (effective 1968-03-21) repealed DST.
-#
-# Shanks says the 1944 experiment came to an end on 1944-03-17.
-# Go with the Arizona State Library instead.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Phoenix	-7:28:18 -	LMT	1883 Nov 18 11:31:42
-			-7:00	US	M%sT	1944 Jan  1  0:01
-			-7:00	-	MST	1944 Apr  1  0:01
-			-7:00	US	M%sT	1944 Oct  1  0:01
-			-7:00	-	MST	1967
-			-7:00	US	M%sT	1968 Mar 21
-			-7:00	-	MST
-# From Arthur David Olson (1988-02-13):
-# A writer from the Inter Tribal Council of Arizona, Inc.,
-# notes in private correspondence dated 1987-12-28 that "Presently, only the
-# Navajo Nation participates in the Daylight Saving Time policy, due to its
-# large size and location in three states."  (The "only" means that other
-# tribal nations don't use DST.)
-#
-# From Paul Eggert (2013-08-26):
-# See America/Denver for a zone appropriate for the Navajo Nation.
-
-# Southern Idaho (Ada, Adams, Bannock, Bear Lake, Bingham, Blaine,
-# Boise, Bonneville, Butte, Camas, Canyon, Caribou, Cassia, Clark,
-# Custer, Elmore, Franklin, Fremont, Gem, Gooding, Jefferson, Jerome,
-# Lemhi, Lincoln, Madison, Minidoka, Oneida, Owyhee, Payette, Power,
-# Teton, Twin Falls, Valley, Washington counties, and the southern
-# quarter of Idaho county) and eastern Oregon (most of Malheur County)
-# switched four weeks late in 1974.
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Boise	-7:44:49 -	LMT	1883 Nov 18 12:15:11
-			-8:00	US	P%sT	1923 May 13  2:00
-			-7:00	US	M%sT	1974
-			-7:00	-	MST	1974 Feb  3  2:00
-			-7:00	US	M%sT
-
-# Indiana
-#
-# For a map of Indiana's time zone regions, see:
-# https://en.wikipedia.org/wiki/Time_in_Indiana
-#
-# From Paul Eggert (2018-11-30):
-# A brief but entertaining history of time in Indiana describes a 1949 debate
-# in the Indiana House where city legislators (who favored "fast time")
-# tussled with farm legislators (who didn't) over a bill to outlaw DST:
-#  "Lacking enough votes, the city faction tries to filibuster until time runs
-#   out on the session at midnight, but rural champion Rep. Herbert Copeland,
-#   R-Madison, leans over the gallery railing and forces the official clock
-#   back to 9 p.m., breaking it in the process.  The clock sticks on 9 as the
-#   debate rages on into the night.  The filibuster finally dies out and the
-#   bill passes, while outside the chamber, clocks read 3:30 a.m.  In the end,
-#   it doesn't matter which side won.  The law has no enforcement powers and
-#   is simply ignored by fast-time communities."
-# How Indiana went from 'God's time' to split zones and daylight-saving.
-# Indianapolis Star. 2018-11-27 14:58 -05.
-# https://www.indystar.com/story/news/politics/2018/11/27/indianapolis-indiana-time-zone-history-central-eastern-daylight-savings-time/2126300002/
-#
-# From Paul Eggert (2007-08-17):
-# Since 1970, most of Indiana has been like America/Indiana/Indianapolis,
-# with the following exceptions:
-#
-# - Gibson, Jasper, Lake, LaPorte, Newton, Porter, Posey, Spencer,
-#   Vanderburgh, and Warrick counties have been like America/Chicago.
-#
-# - Dearborn and Ohio counties have been like America/New_York.
-#
-# - Clark, Floyd, and Harrison counties have been like
-#   America/Kentucky/Louisville.
-#
-# - Crawford, Daviess, Dubois, Knox, Martin, Perry, Pike, Pulaski, Starke,
-#   and Switzerland counties have their own time zone histories as noted below.
-#
-# Shanks partitioned Indiana into 345 regions, each with its own time history,
-# and wrote "Even newspaper reports present contradictory information."
-# Those Hoosiers!  Such a flighty and changeable people!
-# Fortunately, most of the complexity occurred before our cutoff date of 1970.
-#
-# Other than Indianapolis, the Indiana place names are so nondescript
-# that they would be ambiguous if we left them at the 'America' level.
-# So we reluctantly put them all in a subdirectory 'America/Indiana'.
-
-# From Paul Eggert (2014-06-26):
-# https://www.federalregister.gov/articles/2006/01/20/06-563/standard-time-zone-boundary-in-the-state-of-indiana
-# says "DOT is relocating the time zone boundary in Indiana to move Starke,
-# Pulaski, Knox, Daviess, Martin, Pike, Dubois, and Perry Counties from the
-# Eastern Time Zone to the Central Time Zone.... The effective date of
-# this rule is 2 a.m. EST Sunday, April 2, 2006, which is the
-# changeover date from standard time to Daylight Saving Time."
-# Strictly speaking, this meant the affected counties changed their
-# clocks twice that night, but this obviously was in error.  The intent
-# was that 01:59:59 EST be followed by 02:00:00 CDT.
-
-# From Gwillim Law (2007-02-10):
-# The Associated Press has been reporting that Pulaski County, Indiana is
-# going to switch from Central to Eastern Time on March 11, 2007....
-# http://www.indystar.com/apps/pbcs.dll/article?AID=/20070207/LOCAL190108/702070524/0/LOCAL
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
-Rule Indianapolis 1941	only	-	Jun	22	2:00	1:00	D
-Rule Indianapolis 1941	1954	-	Sep	lastSun	2:00	0	S
-Rule Indianapolis 1946	1954	-	Apr	lastSun	2:00	1:00	D
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Indiana/Indianapolis -5:44:38 - LMT	1883 Nov 18 12:15:22
-			-6:00	US	C%sT	1920
-			-6:00 Indianapolis C%sT	1942
-			-6:00	US	C%sT	1946
-			-6:00 Indianapolis C%sT	1955 Apr 24  2:00
-			-5:00	-	EST	1957 Sep 29  2:00
-			-6:00	-	CST	1958 Apr 27  2:00
-			-5:00	-	EST	1969
-			-5:00	US	E%sT	1971
-			-5:00	-	EST	2006
-			-5:00	US	E%sT
-#
-# Eastern Crawford County, Indiana, left its clocks alone in 1974,
-# as well as from 1976 through 2005.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
-Rule	Marengo	1951	only	-	Apr	lastSun	2:00	1:00	D
-Rule	Marengo	1951	only	-	Sep	lastSun	2:00	0	S
-Rule	Marengo	1954	1960	-	Apr	lastSun	2:00	1:00	D
-Rule	Marengo	1954	1960	-	Sep	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Indiana/Marengo -5:45:23 -	LMT	1883 Nov 18 12:14:37
-			-6:00	US	C%sT	1951
-			-6:00	Marengo	C%sT	1961 Apr 30  2:00
-			-5:00	-	EST	1969
-			-5:00	US	E%sT	1974 Jan  6  2:00
-			-6:00	1:00	CDT	1974 Oct 27  2:00
-			-5:00	US	E%sT	1976
-			-5:00	-	EST	2006
-			-5:00	US	E%sT
-#
-# Daviess, Dubois, Knox, and Martin Counties, Indiana,
-# switched from eastern to central time in April 2006, then switched back
-# in November 2007.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
-Rule Vincennes	1946	only	-	Apr	lastSun	2:00	1:00	D
-Rule Vincennes	1946	only	-	Sep	lastSun	2:00	0	S
-Rule Vincennes	1953	1954	-	Apr	lastSun	2:00	1:00	D
-Rule Vincennes	1953	1959	-	Sep	lastSun	2:00	0	S
-Rule Vincennes	1955	only	-	May	 1	0:00	1:00	D
-Rule Vincennes	1956	1963	-	Apr	lastSun	2:00	1:00	D
-Rule Vincennes	1960	only	-	Oct	lastSun	2:00	0	S
-Rule Vincennes	1961	only	-	Sep	lastSun	2:00	0	S
-Rule Vincennes	1962	1963	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Indiana/Vincennes -5:50:07 - LMT	1883 Nov 18 12:09:53
-			-6:00	US	C%sT	1946
-			-6:00 Vincennes	C%sT	1964 Apr 26  2:00
-			-5:00	-	EST	1969
-			-5:00	US	E%sT	1971
-			-5:00	-	EST	2006 Apr  2  2:00
-			-6:00	US	C%sT	2007 Nov  4  2:00
-			-5:00	US	E%sT
-#
-# Perry County, Indiana, switched from eastern to central time in April 2006.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
-Rule Perry	1946	only	-	Apr	lastSun	2:00	1:00	D
-Rule Perry	1946	only	-	Sep	lastSun	2:00	0	S
-Rule Perry	1953	1954	-	Apr	lastSun	2:00	1:00	D
-Rule Perry	1953	1959	-	Sep	lastSun	2:00	0	S
-Rule Perry	1955	only	-	May	 1	0:00	1:00	D
-Rule Perry	1956	1963	-	Apr	lastSun	2:00	1:00	D
-Rule Perry	1960	only	-	Oct	lastSun	2:00	0	S
-Rule Perry	1961	only	-	Sep	lastSun	2:00	0	S
-Rule Perry	1962	1963	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Indiana/Tell_City -5:47:03 - LMT	1883 Nov 18 12:12:57
-			-6:00	US	C%sT	1946
-			-6:00 Perry	C%sT	1964 Apr 26  2:00
-			-5:00	-	EST	1969
-			-5:00	US	E%sT	1971
-			-5:00	-	EST	2006 Apr  2  2:00
-			-6:00	US	C%sT
-#
-# Pike County, Indiana moved from central to eastern time in 1977,
-# then switched back in 2006, then switched back again in 2007.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
-Rule	Pike	1955	only	-	May	 1	0:00	1:00	D
-Rule	Pike	1955	1960	-	Sep	lastSun	2:00	0	S
-Rule	Pike	1956	1964	-	Apr	lastSun	2:00	1:00	D
-Rule	Pike	1961	1964	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Indiana/Petersburg -5:49:07 - LMT	1883 Nov 18 12:10:53
-			-6:00	US	C%sT	1955
-			-6:00	Pike	C%sT	1965 Apr 25  2:00
-			-5:00	-	EST	1966 Oct 30  2:00
-			-6:00	US	C%sT	1977 Oct 30  2:00
-			-5:00	-	EST	2006 Apr  2  2:00
-			-6:00	US	C%sT	2007 Nov  4  2:00
-			-5:00	US	E%sT
-#
-# Starke County, Indiana moved from central to eastern time in 1991,
-# then switched back in 2006.
-# From Arthur David Olson (1991-10-28):
-# An article on page A3 of the Sunday, 1991-10-27 Washington Post
-# notes that Starke County switched from Central time to Eastern time as of
-# 1991-10-27.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
-Rule	Starke	1947	1961	-	Apr	lastSun	2:00	1:00	D
-Rule	Starke	1947	1954	-	Sep	lastSun	2:00	0	S
-Rule	Starke	1955	1956	-	Oct	lastSun	2:00	0	S
-Rule	Starke	1957	1958	-	Sep	lastSun	2:00	0	S
-Rule	Starke	1959	1961	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Indiana/Knox -5:46:30 -	LMT	1883 Nov 18 12:13:30
-			-6:00	US	C%sT	1947
-			-6:00	Starke	C%sT	1962 Apr 29  2:00
-			-5:00	-	EST	1963 Oct 27  2:00
-			-6:00	US	C%sT	1991 Oct 27  2:00
-			-5:00	-	EST	2006 Apr  2  2:00
-			-6:00	US	C%sT
-#
-# Pulaski County, Indiana, switched from eastern to central time in
-# April 2006 and then switched back in March 2007.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
-Rule	Pulaski	1946	1960	-	Apr	lastSun	2:00	1:00	D
-Rule	Pulaski	1946	1954	-	Sep	lastSun	2:00	0	S
-Rule	Pulaski	1955	1956	-	Oct	lastSun	2:00	0	S
-Rule	Pulaski	1957	1960	-	Sep	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Indiana/Winamac -5:46:25 - LMT	1883 Nov 18 12:13:35
-			-6:00	US	C%sT	1946
-			-6:00	Pulaski	C%sT	1961 Apr 30  2:00
-			-5:00	-	EST	1969
-			-5:00	US	E%sT	1971
-			-5:00	-	EST	2006 Apr  2  2:00
-			-6:00	US	C%sT	2007 Mar 11  2:00
-			-5:00	US	E%sT
-#
-# Switzerland County, Indiana, did not observe DST from 1973 through 2005.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Indiana/Vevay -5:40:16 -	LMT	1883 Nov 18 12:19:44
-			-6:00	US	C%sT	1954 Apr 25  2:00
-			-5:00	-	EST	1969
-			-5:00	US	E%sT	1973
-			-5:00	-	EST	2006
-			-5:00	US	E%sT
-
-# From Paul Eggert (2018-03-20):
-# The Louisville & Nashville Railroad's 1883-11-18 change occurred at
-# 10:00 old local time; train were supposed to come to a standstill
-# for precisely 18 minutes.  See Bartky Fig. 1 (page 50).  It is not
-# clear how this matched civil time in Louisville, so for now continue
-# to assume Louisville switched at noon new local time, like New York.
-#
-# Part of Kentucky left its clocks alone in 1974.
-# This also includes Clark, Floyd, and Harrison counties in Indiana.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
-Rule Louisville	1921	only	-	May	1	2:00	1:00	D
-Rule Louisville	1921	only	-	Sep	1	2:00	0	S
-Rule Louisville	1941	1961	-	Apr	lastSun	2:00	1:00	D
-Rule Louisville	1941	only	-	Sep	lastSun	2:00	0	S
-Rule Louisville	1946	only	-	Jun	2	2:00	0	S
-Rule Louisville	1950	1955	-	Sep	lastSun	2:00	0	S
-Rule Louisville	1956	1960	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Kentucky/Louisville -5:43:02 -	LMT	1883 Nov 18 12:16:58
-			-6:00	US	C%sT	1921
-			-6:00 Louisville C%sT	1942
-			-6:00	US	C%sT	1946
-			-6:00 Louisville C%sT	1961 Jul 23  2:00
-			-5:00	-	EST	1968
-			-5:00	US	E%sT	1974 Jan  6  2:00
-			-6:00	1:00	CDT	1974 Oct 27  2:00
-			-5:00	US	E%sT
-#
-# Wayne County, Kentucky
-#
-# From Lake Cumberland LIFE
-# http://www.lake-cumberland.com/life/archive/news990129time.shtml
-# (1999-01-29) via WKYM-101.7:
-# Clinton County has joined Wayne County in asking the DoT to change from
-# the Central to the Eastern time zone....  The Wayne County government made
-# the same request in December.  And while Russell County officials have not
-# taken action, the majority of respondents to a poll conducted there in
-# August indicated they would like to change to "fast time" also.
-# The three Lake Cumberland counties are the farthest east of any U.S.
-# location in the Central time zone.
-#
-# From Rich Wales (2000-08-29):
-# After prolonged debate, and despite continuing deep differences of opinion,
-# Wayne County (central Kentucky) is switching from Central (-0600) to Eastern
-# (-0500) time.  They won't "fall back" this year.  See Sara Shipley,
-# The difference an hour makes, Nando Times (2000-08-29 15:33 -0400).
-#
-# From Paul Eggert (2001-07-16):
-# The final rule was published in the
-# Federal Register 65, 160 (2000-08-17), pp 50154-50158.
-# https://www.gpo.gov/fdsys/pkg/FR-2000-08-17/html/00-20854.htm
-#
-Zone America/Kentucky/Monticello -5:39:24 - LMT	1883 Nov 18 12:20:36
-			-6:00	US	C%sT	1946
-			-6:00	-	CST	1968
-			-6:00	US	C%sT	2000 Oct 29  2:00
-			-5:00	US	E%sT
-
-
-# From Rives McDow (2000-08-30):
-# Here ... are all the changes in the US since 1985.
-# Kearny County, KS (put all of county on central;
-#	previously split between MST and CST) ... 1990-10
-# Starke County, IN (from CST to EST) ... 1991-10
-# Oliver County, ND (from MST to CST) ... 1992-10
-# West Wendover, NV (from PST TO MST) ... 1999-10
-# Wayne County, KY (from CST to EST) ... 2000-10
-#
-# From Paul Eggert (2001-07-17):
-# We don't know where the line used to be within Kearny County, KS,
-# so omit that change for now.
-# See America/Indiana/Knox for the Starke County, IN change.
-# See America/North_Dakota/Center for the Oliver County, ND change.
-# West Wendover, NV officially switched from Pacific to mountain time on
-# 1999-10-31.  See the
-# Federal Register 64, 203 (1999-10-21), pp 56705-56707.
-# https://www.gpo.gov/fdsys/pkg/FR-1999-10-21/html/99-27240.htm
-# However, the Federal Register says that West Wendover already operated
-# on mountain time, and the rule merely made this official;
-# hence a separate tz entry is not needed.
-
-# Michigan
-#
-# From Bob Devine (1988-01-28):
-# Michigan didn't observe DST from 1968 to 1973.
-#
-# From Paul Eggert (1999-03-31):
-# Shanks writes that Michigan started using standard time on 1885-09-18,
-# but Howse writes (pp 124-125, referring to Popular Astronomy, 1901-01)
-# that Detroit kept
-#
-#	local time until 1900 when the City Council decreed that clocks should
-#	be put back twenty-eight minutes to Central Standard Time.  Half the
-#	city obeyed, half refused.  After considerable debate, the decision
-#	was rescinded and the city reverted to Sun time.  A derisive offer to
-#	erect a sundial in front of the city hall was referred to the
-#	Committee on Sewers.  Then, in 1905, Central time was adopted
-#	by city vote.
-#
-# This story is too entertaining to be false, so go with Howse over Shanks.
-#
-# From Paul Eggert (2001-03-06):
-# Garland (1927) writes "Cleveland and Detroit advanced their clocks
-# one hour in 1914."  This change is not in Shanks.  We have no more
-# info, so omit this for now.
-#
-# From Paul Eggert (2017-07-26):
-# Although Shanks says Detroit observed DST in 1967 from 06-14 00:01
-# until 10-29 00:01, I now see multiple reports that this is incorrect.
-# For example, according to a 50-year anniversary report about the 1967
-# Detroit riots and a major-league doubleheader on 1967-07-23, "By the time
-# the last fly ball of the doubleheader settled into the glove of leftfielder
-# Lenny Green, it was after 7 p.m.  Detroit did not observe daylight saving
-# time, so light was already starting to fail.  Twilight was made even deeper
-# by billowing columns of smoke that ascended in an unbroken wall north of the
-# ballpark."  See: Dow B. Detroit '67: As violence unfolded, Tigers played two
-# at home vs. Yankees. Detroit Free Press 2017-07-23.
-# https://www.freep.com/story/sports/mlb/tigers/2017/07/23/detroit-tigers-1967-riot-new-york-yankees/499951001/
-#
-# Most of Michigan observed DST from 1973 on, but was a bit late in 1975.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
-Rule	Detroit	1948	only	-	Apr	lastSun	2:00	1:00	D
-Rule	Detroit	1948	only	-	Sep	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Detroit	-5:32:11 -	LMT	1905
-			-6:00	-	CST	1915 May 15  2:00
-			-5:00	-	EST	1942
-			-5:00	US	E%sT	1946
-			-5:00	Detroit	E%sT	1973
-			-5:00	US	E%sT	1975
-			-5:00	-	EST	1975 Apr 27  2:00
-			-5:00	US	E%sT
-#
-# Dickinson, Gogebic, Iron, and Menominee Counties, Michigan,
-# switched from EST to CST/CDT in 1973.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
-Rule Menominee	1946	only	-	Apr	lastSun	2:00	1:00	D
-Rule Menominee	1946	only	-	Sep	lastSun	2:00	0	S
-Rule Menominee	1966	only	-	Apr	lastSun	2:00	1:00	D
-Rule Menominee	1966	only	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
-			-6:00	US	C%sT	1946
-			-6:00 Menominee	C%sT	1969 Apr 27  2:00
-			-5:00	-	EST	1973 Apr 29  2:00
-			-6:00	US	C%sT
-
-# Navassa
-# administered by the US Fish and Wildlife Service
-# claimed by US under the provisions of the 1856 Guano Islands Act
-# also claimed by Haiti
-# occupied 1857/1900 by the Navassa Phosphate Co
-# US lighthouse 1917/1996-09
-# currently uninhabited
-# see Mark Fineman, "An Isle Rich in Guano and Discord",
-# _Los Angeles Times_ (1998-11-10), A1, A10; it cites
-# Jimmy Skaggs, _The Great Guano Rush_ (1994).
-
-################################################################################
-
-
-# From Paul Eggert (2017-02-10):
-#
-# Unless otherwise specified, the source for data through 1990 is:
-# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
-# San Diego: ACS Publications, Inc. (2003).
-# Unfortunately this book contains many errors and cites no sources.
-#
-# Many years ago Gwillim Law wrote that a good source
-# for time zone data was the International Air Transport
-# Association's Standard Schedules Information Manual (IATA SSIM),
-# published semiannually.  Law sent in several helpful summaries
-# of the IATA's data after 1990.  Except where otherwise noted,
-# IATA SSIM is the source for entries after 1990.
-#
-# Other sources occasionally used include:
-#
-#	Edward W. Whitman, World Time Differences,
-#	Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated),
-#	which I found in the UCLA library.
-#
-#	William Willett, The Waste of Daylight, 19th edition
-#	<http://cs.ucla.edu/~eggert/The-Waste-of-Daylight-19th.pdf>
-#	[PDF] (1914-03)
-#
-#	Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
-#	<https://www.jstor.org/stable/1774359>.
-#
-# See the 'europe' file for Greenland.
-
-# Canada
-
-# From Alain LaBonté (1994-11-14):
-# I post here the time zone abbreviations standardized in Canada
-# for both English and French in the CAN/CSA-Z234.4-89 standard....
-#
-#	UTC	Standard time	Daylight saving time
-#	offset	French	English	French	English
-#	-2:30	-	-	HAT	NDT
-#	-3	-	-	HAA	ADT
-#	-3:30	HNT	NST	-	-
-#	-4	HNA	AST	HAE	EDT
-#	-5	HNE	EST	HAC	CDT
-#	-6	HNC	CST	HAR	MDT
-#	-7	HNR	MST	HAP	PDT
-#	-8	HNP	PST	HAY	YDT
-#	-9	HNY	YST	-	-
-#
-#	HN: Heure Normale	ST: Standard Time
-#	HA: Heure Avancée	DT: Daylight saving Time
-#
-#	A: de l'Atlantique	Atlantic
-#	C: du Centre		Central
-#	E: de l'Est		Eastern
-#	M:			Mountain
-#	N:			Newfoundland
-#	P: du Pacifique		Pacific
-#	R: des Rocheuses
-#	T: de Terre-Neuve
-#	Y: du Yukon		Yukon
-#
-# From Paul Eggert (1994-11-22):
-# Alas, this sort of thing must be handled by localization software.
-
-# Unless otherwise specified, the data entries for Canada are all from Shanks
-# & Pottenger.
-
-# From Chris Walton (2006-04-01, 2006-04-25, 2006-06-26, 2007-01-31,
-# 2007-03-01):
-# The British Columbia government announced yesterday that it will
-# adjust daylight savings next year to align with changes in the
-# U.S. and the rest of Canada....
-# https://archive.news.gov.bc.ca/releases/news_releases_2005-2009/2006AG0014-000330.htm
-# ...
-# Nova Scotia
-# Daylight saving time will be extended by four weeks starting in 2007....
-# https://www.novascotia.ca/just/regulations/rg2/2006/ma1206.pdf
-#
-# [For New Brunswick] the new legislation dictates that the time change is to
-# be done at 02:00 instead of 00:01.
-# https://www.gnb.ca/0062/acts/BBA-2006/Chap-19.pdf
-# ...
-# Manitoba has traditionally changed the clock every fall at 03:00.
-# As of 2006, the transition is to take place one hour earlier at 02:00.
-# https://web2.gov.mb.ca/laws/statutes/ccsm/o030e.php
-# ...
-# [Alberta, Ontario, Quebec] will follow US rules.
-# http://www.qp.gov.ab.ca/documents/spring/CH03_06.CFM
-# http://www.e-laws.gov.on.ca/DBLaws/Source/Regs/English/2006/R06111_e.htm
-# http://www2.publicationsduquebec.gouv.qc.ca/dynamicSearch/telecharge.php?type=5&file=2006C39A.PDF
-# ...
-# P.E.I. will follow US rules....
-# http://www.assembly.pe.ca/bills/pdf_chapter/62/3/chapter-41.pdf
-# ...
-# Province of Newfoundland and Labrador....
-# http://www.hoa.gov.nl.ca/hoa/bills/Bill0634.htm
-# ...
-# Yukon
-# https://www.gov.yk.ca/legislation/regs/oic2006_127.pdf
-# ...
-# N.W.T. will follow US rules.  Whoever maintains the government web site
-# does not seem to believe in bookmarks.  To see the news release, click the
-# following link and search for "Daylight Savings Time Change".  Press the
-# "Daylight Savings Time Change" link; it will fire off a popup using
-# JavaScript.
-# http://www.exec.gov.nt.ca/currentnews/currentPR.asp?mode=archive
-# ...
-# Nunavut
-# An amendment to the Interpretation Act was registered on February 19/2007....
-# http://action.attavik.ca/home/justice-gn/attach/2007/gaz02part2.pdf
-
-# From Paul Eggert (2014-10-18):
-# H. David Matthews and Mary Vincent's map
-# "It's about TIME", _Canadian Geographic_ (September-October 1998)
-# http://www.canadiangeographic.ca/Magazine/SO98/alacarte.asp
-# contains detailed boundaries for regions observing nonstandard
-# time and daylight saving time arrangements in Canada circa 1998.
-#
-# National Research Council Canada maintains info about time zones and DST.
-# https://www.nrc-cnrc.gc.ca/eng/services/time/time_zones.html
-# https://www.nrc-cnrc.gc.ca/eng/services/time/faq/index.html#Q5
-# Its unofficial information is often taken from Matthews and Vincent.
-
-# From Paul Eggert (2006-06-27):
-# For now, assume all of DST-observing Canada will fall into line with the
-# new US DST rules,
-
-# From Chris Walton (2011-12-01)
-# In the first of Tammy Hardwick's articles
-# http://www.ilovecreston.com/?p=articles&t=spec&ar=260
-# she quotes the Friday November 1/1918 edition of the Creston Review.
-# The quote includes these two statements:
-# 'Sunday the CPR went back to the old system of time...'
-# '... The daylight saving scheme was dropped all over Canada at the same time,'
-# These statements refer to a transition from daylight time to standard time
-# that occurred nationally on Sunday October 27/1918.  This transition was
-# also documented in the Saturday October 26/1918 edition of the Toronto Star.
-
-# In light of that evidence, we alter the date from the earlier believed
-# Oct 31, to Oct 27, 1918 (and Sunday is a more likely transition day
-# than Thursday) in all Canadian rulesets.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Canada	1918	only	-	Apr	14	2:00	1:00	D
-Rule	Canada	1918	only	-	Oct	27	2:00	0	S
-Rule	Canada	1942	only	-	Feb	 9	2:00	1:00	W # War
-Rule	Canada	1945	only	-	Aug	14	23:00u	1:00	P # Peace
-Rule	Canada	1945	only	-	Sep	30	2:00	0	S
-Rule	Canada	1974	1986	-	Apr	lastSun	2:00	1:00	D
-Rule	Canada	1974	2006	-	Oct	lastSun	2:00	0	S
-Rule	Canada	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
-Rule	Canada	2007	max	-	Mar	Sun>=8	2:00	1:00	D
-Rule	Canada	2007	max	-	Nov	Sun>=1	2:00	0	S
-
-
-# Newfoundland and Labrador
-
-# From Paul Eggert (2017-10-14):
-# Legally Labrador should observe Newfoundland time; see:
-# McLeod J. Labrador time - legal or not? St. John's Telegram, 2017-10-07
-# http://www.thetelegram.com/news/local/labrador-time--legal-or-not-154860/
-# Matthews and Vincent (1998) write that the only part of Labrador
-# that follows the rules is the southeast corner, including Port Hope
-# Simpson and Mary's Harbour, but excluding, say, Black Tickle.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	StJohns	1917	only	-	Apr	 8	2:00	1:00	D
-Rule	StJohns	1917	only	-	Sep	17	2:00	0	S
-# Whitman gives 1919 Apr 5 and 1920 Apr 5; go with Shanks & Pottenger.
-Rule	StJohns	1919	only	-	May	 5	23:00	1:00	D
-Rule	StJohns	1919	only	-	Aug	12	23:00	0	S
-# For 1931-1935 Whitman gives Apr same date; go with Shanks & Pottenger.
-Rule	StJohns	1920	1935	-	May	Sun>=1	23:00	1:00	D
-Rule	StJohns	1920	1935	-	Oct	lastSun	23:00	0	S
-# For 1936-1941 Whitman gives May Sun>=8 and Oct Sun>=1; go with Shanks &
-# Pottenger.
-Rule	StJohns	1936	1941	-	May	Mon>=9	0:00	1:00	D
-Rule	StJohns	1936	1941	-	Oct	Mon>=2	0:00	0	S
-# Whitman gives the following transitions:
-# 1942 03-01/12-31, 1943 05-30/09-05, 1944 07-10/09-02, 1945 01-01/10-07
-# but go with Shanks & Pottenger and assume they used Canadian rules.
-# For 1946-9 Whitman gives May 5,4,9,1 - Oct 1,5,3,2, and for 1950 he gives
-# Apr 30 - Sep 24; go with Shanks & Pottenger.
-Rule	StJohns	1946	1950	-	May	Sun>=8	2:00	1:00	D
-Rule	StJohns	1946	1950	-	Oct	Sun>=2	2:00	0	S
-Rule	StJohns	1951	1986	-	Apr	lastSun	2:00	1:00	D
-Rule	StJohns	1951	1959	-	Sep	lastSun	2:00	0	S
-Rule	StJohns	1960	1986	-	Oct	lastSun	2:00	0	S
-# From Paul Eggert (2000-10-02):
-# INMS (2000-09-12) says that, since 1988 at least, Newfoundland switches
-# at 00:01 local time.  For now, assume it started in 1987.
-
-# From Michael Pelley (2011-09-12):
-# We received today, Monday, September 12, 2011, notification that the
-# changes to the Newfoundland Standard Time Act have been proclaimed.
-# The change in the Act stipulates that the change from Daylight Savings
-# Time to Standard Time and from Standard Time to Daylight Savings Time
-# now occurs at 2:00AM.
-# ...
-# http://www.assembly.nl.ca/legislation/sr/annualstatutes/2011/1106.chp.htm
-# ...
-# MICHAEL PELLEY  |  Manager of Enterprise Architecture - Solution Delivery
-# Office of the Chief Information Officer
-# Executive Council
-# Government of Newfoundland & Labrador
-
-Rule	StJohns	1987	only	-	Apr	Sun>=1	0:01	1:00	D
-Rule	StJohns	1987	2006	-	Oct	lastSun	0:01	0	S
-Rule	StJohns	1988	only	-	Apr	Sun>=1	0:01	2:00	DD
-Rule	StJohns	1989	2006	-	Apr	Sun>=1	0:01	1:00	D
-Rule	StJohns	2007	2011	-	Mar	Sun>=8	0:01	1:00	D
-Rule	StJohns	2007	2010	-	Nov	Sun>=1	0:01	0	S
-#
-# St John's has an apostrophe, but Posix file names can't have apostrophes.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/St_Johns	-3:30:52 -	LMT	1884
-			-3:30:52 StJohns N%sT	1918
-			-3:30:52 Canada	N%sT	1919
-			-3:30:52 StJohns N%sT	1935 Mar 30
-			-3:30	StJohns	N%sT	1942 May 11
-			-3:30	Canada	N%sT	1946
-			-3:30	StJohns	N%sT	2011 Nov
-			-3:30	Canada	N%sT
-
-# most of east Labrador
-
-# The name 'Happy Valley-Goose Bay' is too long; use 'Goose Bay'.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Goose_Bay	-4:01:40 -	LMT	1884 # Happy Valley-Goose Bay
-			-3:30:52 -	NST	1918
-			-3:30:52 Canada N%sT	1919
-			-3:30:52 -	NST	1935 Mar 30
-			-3:30	-	NST	1936
-			-3:30	StJohns	N%sT	1942 May 11
-			-3:30	Canada	N%sT	1946
-			-3:30	StJohns	N%sT	1966 Mar 15  2:00
-			-4:00	StJohns	A%sT	2011 Nov
-			-4:00	Canada	A%sT
-
-
-# west Labrador, Nova Scotia, Prince Edward I
-
-# From Brian Inglis (2015-07-20):
-# From the historical weather station records available at:
-# https://weatherspark.com/history/28351/1971/Sydney-Nova-Scotia-Canada
-# Sydney shares the same time history as Glace Bay, so was
-# likely to be the same across the island....
-# Sydney, as the capital and most populous location, or Cape Breton, would
-# have been better names for the zone had we known this in 1996.
-
-# From Paul Eggert (2015-07-20):
-# Shanks & Pottenger write that since 1970 most of this region has been like
-# Halifax.  Many locales did not observe peacetime DST until 1972;
-# the Cape Breton area, represented by Glace Bay, is the largest we know of
-# (Glace Bay was perhaps not the best name choice but no point changing now).
-# Shanks & Pottenger also write that Liverpool, NS was the only town
-# in Canada to observe DST in 1971 but not 1970; for now we'll assume
-# this is a typo.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Halifax	1916	only	-	Apr	 1	0:00	1:00	D
-Rule	Halifax	1916	only	-	Oct	 1	0:00	0	S
-Rule	Halifax	1920	only	-	May	 9	0:00	1:00	D
-Rule	Halifax	1920	only	-	Aug	29	0:00	0	S
-Rule	Halifax	1921	only	-	May	 6	0:00	1:00	D
-Rule	Halifax	1921	1922	-	Sep	 5	0:00	0	S
-Rule	Halifax	1922	only	-	Apr	30	0:00	1:00	D
-Rule	Halifax	1923	1925	-	May	Sun>=1	0:00	1:00	D
-Rule	Halifax	1923	only	-	Sep	 4	0:00	0	S
-Rule	Halifax	1924	only	-	Sep	15	0:00	0	S
-Rule	Halifax	1925	only	-	Sep	28	0:00	0	S
-Rule	Halifax	1926	only	-	May	16	0:00	1:00	D
-Rule	Halifax	1926	only	-	Sep	13	0:00	0	S
-Rule	Halifax	1927	only	-	May	 1	0:00	1:00	D
-Rule	Halifax	1927	only	-	Sep	26	0:00	0	S
-Rule	Halifax	1928	1931	-	May	Sun>=8	0:00	1:00	D
-Rule	Halifax	1928	only	-	Sep	 9	0:00	0	S
-Rule	Halifax	1929	only	-	Sep	 3	0:00	0	S
-Rule	Halifax	1930	only	-	Sep	15	0:00	0	S
-Rule	Halifax	1931	1932	-	Sep	Mon>=24	0:00	0	S
-Rule	Halifax	1932	only	-	May	 1	0:00	1:00	D
-Rule	Halifax	1933	only	-	Apr	30	0:00	1:00	D
-Rule	Halifax	1933	only	-	Oct	 2	0:00	0	S
-Rule	Halifax	1934	only	-	May	20	0:00	1:00	D
-Rule	Halifax	1934	only	-	Sep	16	0:00	0	S
-Rule	Halifax	1935	only	-	Jun	 2	0:00	1:00	D
-Rule	Halifax	1935	only	-	Sep	30	0:00	0	S
-Rule	Halifax	1936	only	-	Jun	 1	0:00	1:00	D
-Rule	Halifax	1936	only	-	Sep	14	0:00	0	S
-Rule	Halifax	1937	1938	-	May	Sun>=1	0:00	1:00	D
-Rule	Halifax	1937	1941	-	Sep	Mon>=24	0:00	0	S
-Rule	Halifax	1939	only	-	May	28	0:00	1:00	D
-Rule	Halifax	1940	1941	-	May	Sun>=1	0:00	1:00	D
-Rule	Halifax	1946	1949	-	Apr	lastSun	2:00	1:00	D
-Rule	Halifax	1946	1949	-	Sep	lastSun	2:00	0	S
-Rule	Halifax	1951	1954	-	Apr	lastSun	2:00	1:00	D
-Rule	Halifax	1951	1954	-	Sep	lastSun	2:00	0	S
-Rule	Halifax	1956	1959	-	Apr	lastSun	2:00	1:00	D
-Rule	Halifax	1956	1959	-	Sep	lastSun	2:00	0	S
-Rule	Halifax	1962	1973	-	Apr	lastSun	2:00	1:00	D
-Rule	Halifax	1962	1973	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Halifax	-4:14:24 -	LMT	1902 Jun 15
-			-4:00	Halifax	A%sT	1918
-			-4:00	Canada	A%sT	1919
-			-4:00	Halifax	A%sT	1942 Feb  9  2:00s
-			-4:00	Canada	A%sT	1946
-			-4:00	Halifax	A%sT	1974
-			-4:00	Canada	A%sT
-Zone America/Glace_Bay	-3:59:48 -	LMT	1902 Jun 15
-			-4:00	Canada	A%sT	1953
-			-4:00	Halifax	A%sT	1954
-			-4:00	-	AST	1972
-			-4:00	Halifax	A%sT	1974
-			-4:00	Canada	A%sT
-
-# New Brunswick
-
-# From Paul Eggert (2007-01-31):
-# The Time Definition Act <http://www.gnb.ca/0062/PDF-acts/t-06.pdf>
-# says they changed at 00:01 through 2006, and
-# <http://www.canlii.org/nb/laws/sta/t-6/20030127/whole.html> makes it
-# clear that this was the case since at least 1993.
-# For now, assume it started in 1993.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Moncton	1933	1935	-	Jun	Sun>=8	1:00	1:00	D
-Rule	Moncton	1933	1935	-	Sep	Sun>=8	1:00	0	S
-Rule	Moncton	1936	1938	-	Jun	Sun>=1	1:00	1:00	D
-Rule	Moncton	1936	1938	-	Sep	Sun>=1	1:00	0	S
-Rule	Moncton	1939	only	-	May	27	1:00	1:00	D
-Rule	Moncton	1939	1941	-	Sep	Sat>=21	1:00	0	S
-Rule	Moncton	1940	only	-	May	19	1:00	1:00	D
-Rule	Moncton	1941	only	-	May	 4	1:00	1:00	D
-Rule	Moncton	1946	1972	-	Apr	lastSun	2:00	1:00	D
-Rule	Moncton	1946	1956	-	Sep	lastSun	2:00	0	S
-Rule	Moncton	1957	1972	-	Oct	lastSun	2:00	0	S
-Rule	Moncton	1993	2006	-	Apr	Sun>=1	0:01	1:00	D
-Rule	Moncton	1993	2006	-	Oct	lastSun	0:01	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Moncton	-4:19:08 -	LMT	1883 Dec  9
-			-5:00	-	EST	1902 Jun 15
-			-4:00	Canada	A%sT	1933
-			-4:00	Moncton	A%sT	1942
-			-4:00	Canada	A%sT	1946
-			-4:00	Moncton	A%sT	1973
-			-4:00	Canada	A%sT	1993
-			-4:00	Moncton	A%sT	2007
-			-4:00	Canada	A%sT
-
-# Quebec
-
-# From Paul Eggert (2015-03-24):
-# See America/Toronto for most of Quebec, including Montreal.
-#
-# Matthews and Vincent (1998) also write that Quebec east of the -63
-# meridian is supposed to observe AST, but residents as far east as
-# Natashquan use EST/EDT, and residents east of Natashquan use AST.
-# The Quebec department of justice writes in
-# "The situation in Minganie and Basse-CĂŽte-Nord"
-# http://www.justice.gouv.qc.ca/english/publications/generale/temps-minganie-a.htm
-# that the coastal strip from just east of Natashquan to Blanc-Sablon
-# observes Atlantic standard time all year round.
-# https://www.assnat.qc.ca/Media/Process.aspx?MediaId=ANQ.Vigie.Bll.DocumentGenerique_8845en
-# says this common practice was codified into law as of 2007.
-# For lack of better info, guess this practice began around 1970, contra to
-# Shanks & Pottenger who have this region observing AST/ADT.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Blanc-Sablon -3:48:28 -	LMT	1884
-			-4:00	Canada	A%sT	1970
-			-4:00	-	AST
-
-# Ontario
-
-# From Paul Eggert (2006-07-09):
-# Shanks & Pottenger write that since 1970 most of Ontario has been like
-# Toronto.
-# Thunder Bay skipped DST in 1973.
-# Many smaller locales did not observe peacetime DST until 1974;
-# Nipigon (EST) and Rainy River (CST) are the largest that we know of.
-# Far west Ontario is like Winnipeg; far east Quebec is like Halifax.
-
-# From Mark Brader (2003-07-26):
-# [According to the Toronto Star] Orillia, Ontario, adopted DST
-# effective Saturday, 1912-06-22, 22:00; the article mentions that
-# Port Arthur (now part of Thunder Bay, Ontario) as well as Moose Jaw
-# have already done so.  In Orillia DST was to run until Saturday,
-# 1912-08-31 (no time mentioned), but it was met with considerable
-# hostility from certain segments of the public, and was revoked after
-# only two weeks - I copied it as Saturday, 1912-07-07, 22:00, but
-# presumably that should be -07-06.  (1912-06-19, -07-12; also letters
-# earlier in June).
-#
-# Kenora, Ontario, was to abandon DST on 1914-06-01 (-05-21).
-#
-# From Paul Eggert (2017-07-08):
-# For more on Orillia, see: Daubs K. Bold attempt at daylight saving
-# time became a comic failure in Orillia. Toronto Star 2017-07-08.
-# https://www.thestar.com/news/insight/2017/07/08/bold-attempt-at-daylight-saving-time-became-a-comic-failure-in-orillia.html
-
-# From Paul Eggert (1997-10-17):
-# Mark Brader writes that an article in the 1997-10-14 Toronto Star
-# says that Atikokan, Ontario currently does not observe DST,
-# but will vote on 11-10 whether to use EST/EDT.
-# He also writes that the Ontario Time Act (1990, Chapter T.9)
-# http://www.gov.on.ca/MBS/english/publications/statregs/conttext.html
-# says that Ontario east of 90W uses EST/EDT, and west of 90W uses CST/CDT.
-# Officially Atikokan is therefore on CST/CDT, and most likely this report
-# concerns a non-official time observed as a matter of local practice.
-#
-# From Paul Eggert (2000-10-02):
-# Matthews and Vincent (1998) write that Atikokan, Pickle Lake, and
-# New Osnaburgh observe CST all year, that Big Trout Lake observes
-# CST/CDT, and that Upsala and Shebandowan observe EST/EDT, all in
-# violation of the official Ontario rules.
-#
-# From Paul Eggert (2006-07-09):
-# Chris Walton (2006-07-06) mentioned an article by Stephanie MacLellan in the
-# 2005-07-21 Chronicle-Journal, which said:
-#
-#	The clocks in Atikokan stay set on standard time year-round.
-#	This means they spend about half the time on central time and
-#	the other half on eastern time.
-#
-#	For the most part, the system works, Mayor Dennis Brown said.
-#
-#	"The majority of businesses in Atikokan deal more with Eastern
-#	Canada, but there are some that deal with Western Canada," he
-#	said.  "I don't see any changes happening here."
-#
-# Walton also writes "Supposedly Pickle Lake and Mishkeegogamang
-# [New Osnaburgh] follow the same practice."
-
-# From Garry McKinnon (2006-07-14) via Chris Walton:
-# I chatted with a member of my board who has an outstanding memory
-# and a long history in Atikokan (and in the telecom industry) and he
-# can say for certain that Atikokan has been practicing the current
-# time keeping since 1952, at least.
-
-# From Paul Eggert (2006-07-17):
-# Shanks & Pottenger say that Atikokan has agreed with Rainy River
-# ever since standard time was introduced, but the information from
-# McKinnon sounds more authoritative.  For now, assume that Atikokan
-# switched to EST immediately after WWII era daylight saving time
-# ended.  This matches the old (less-populous) America/Coral_Harbour
-# entry since our cutoff date of 1970, so we can move
-# America/Coral_Harbour to the 'backward' file.
-
-# From Mark Brader (2010-03-06):
-#
-# Currently the database has:
-#
-# # Ontario
-#
-# # From Paul Eggert (2006-07-09):
-# # Shanks & Pottenger write that since 1970 most of Ontario has been like
-# # Toronto.
-# # Thunder Bay skipped DST in 1973.
-# # Many smaller locales did not observe peacetime DST until 1974;
-# # Nipigon (EST) and Rainy River (CST) are the largest that we know of.
-#
-# In the (Toronto) Globe and Mail for Saturday, 1955-09-24, in the bottom
-# right corner of page 1, it says that Toronto will return to standard
-# time at 2 am Sunday morning (which agrees with the database), and that:
-#
-#     The one-hour setback will go into effect throughout most of Ontario,
-#     except in areas like Windsor which remains on standard time all year.
-#
-# Windsor is, of course, a lot larger than Nipigon.
-#
-# I only came across this incidentally.  I don't know if Windsor began
-# observing DST when Detroit did, or in 1974, or on some other date.
-#
-# By the way, the article continues by noting that:
-#
-#     Some cities in the United States have pushed the deadline back
-#     three weeks and will change over from daylight saving in October.
-
-# From Arthur David Olson (2010-07-17):
-#
-# "Standard Time and Time Zones in Canada" appeared in
-# The Journal of The Royal Astronomical Society of Canada,
-# volume 26, number 2 (February 1932) and, as of 2010-07-17,
-# was available at
-# http://adsabs.harvard.edu/full/1932JRASC..26...49S
-#
-# It includes the text below (starting on page 57):
-#
-#   A list of the places in Canada using daylight saving time would
-# require yearly revision. From information kindly furnished by
-# the provincial governments and by the postmasters in many cities
-# and towns, it is found that the following places used daylight sav-
-# ing in 1930. The information for the province of Quebec is definite,
-# for the other provinces only approximate:
-#
-#	Province	Daylight saving time used
-# Prince Edward Island	Not used.
-# Nova Scotia		In Halifax only.
-# New Brunswick		In St. John only.
-# Quebec		In the following places:
-#			Montreal	Lachine
-#			Quebec		Mont-Royal
-#			LĂ©vis		Iberville
-#			St. Lambert	Cap de la MadelĂšine
-#			Verdun		Loretteville
-#			Westmount	Richmond
-#			Outremont	St. JĂ©rĂŽme
-#			Longueuil	Greenfield Park
-#			Arvida		Waterloo
-#			Chambly-Canton	Beaulieu
-#			Melbourne	La Tuque
-#			St. Théophile	Buckingham
-# Ontario		Used generally in the cities and towns along
-#			the southerly part of the province. Not
-#			used in the northwesterly part.
-# Manitoba		Not used.
-# Saskatchewan		In Regina only.
-# Alberta		Not used.
-# British Columbia	Not used.
-#
-#   With some exceptions, the use of daylight saving may be said to be limited
-# to those cities and towns lying between Quebec city and Windsor, Ont.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Toronto	1919	only	-	Mar	30	23:30	1:00	D
-Rule	Toronto	1919	only	-	Oct	26	0:00	0	S
-Rule	Toronto	1920	only	-	May	 2	2:00	1:00	D
-Rule	Toronto	1920	only	-	Sep	26	0:00	0	S
-Rule	Toronto	1921	only	-	May	15	2:00	1:00	D
-Rule	Toronto	1921	only	-	Sep	15	2:00	0	S
-Rule	Toronto	1922	1923	-	May	Sun>=8	2:00	1:00	D
-# Shanks & Pottenger say 1923-09-19; assume it's a typo and that "-16"
-# was meant.
-Rule	Toronto	1922	1926	-	Sep	Sun>=15	2:00	0	S
-Rule	Toronto	1924	1927	-	May	Sun>=1	2:00	1:00	D
-# The 1927-to-1939 rules can be expressed more simply as
-# Rule	Toronto	1927	1937	-	Sep	Sun>=25	2:00	0	S
-# Rule	Toronto	1928	1937	-	Apr	Sun>=25	2:00	1:00	D
-# Rule	Toronto	1938	1940	-	Apr	lastSun	2:00	1:00	D
-# Rule	Toronto	1938	1939	-	Sep	lastSun	2:00	0	S
-# The rules below avoid use of Sun>=25
-# (which pre-2004 versions of zic cannot handle).
-Rule	Toronto	1927	1932	-	Sep	lastSun	2:00	0	S
-Rule	Toronto	1928	1931	-	Apr	lastSun	2:00	1:00	D
-Rule	Toronto	1932	only	-	May	1	2:00	1:00	D
-Rule	Toronto	1933	1940	-	Apr	lastSun	2:00	1:00	D
-Rule	Toronto	1933	only	-	Oct	1	2:00	0	S
-Rule	Toronto	1934	1939	-	Sep	lastSun	2:00	0	S
-Rule	Toronto	1945	1946	-	Sep	lastSun	2:00	0	S
-Rule	Toronto	1946	only	-	Apr	lastSun	2:00	1:00	D
-Rule	Toronto	1947	1949	-	Apr	lastSun	0:00	1:00	D
-Rule	Toronto	1947	1948	-	Sep	lastSun	0:00	0	S
-Rule	Toronto	1949	only	-	Nov	lastSun	0:00	0	S
-Rule	Toronto	1950	1973	-	Apr	lastSun	2:00	1:00	D
-Rule	Toronto	1950	only	-	Nov	lastSun	2:00	0	S
-Rule	Toronto	1951	1956	-	Sep	lastSun	2:00	0	S
-# Shanks & Pottenger say Toronto ended DST a week early in 1971,
-# namely on 1971-10-24, but Mark Brader wrote (2003-05-31) that this
-# is wrong, and that he had confirmed it by checking the 1971-10-30
-# Toronto Star, which said that DST was ending 1971-10-31 as usual.
-Rule	Toronto	1957	1973	-	Oct	lastSun	2:00	0	S
-
-# From Paul Eggert (2003-07-27):
-# Willett (1914-03) writes (p. 17) "In the Cities of Fort William, and
-# Port Arthur, Ontario, the principle of the Bill has been in
-# operation for the past three years, and in the City of Moose Jaw,
-# Saskatchewan, for one year."
-
-# From David Bryan via Tory Tronrud, Director/Curator,
-# Thunder Bay Museum (2003-11-12):
-# There is some suggestion, however, that, by-law or not, daylight
-# savings time was being practiced in Fort William and Port Arthur
-# before 1909.... [I]n 1910, the line between the Eastern and Central
-# Time Zones was permanently moved about two hundred miles west to
-# include the Thunder Bay area....  When Canada adopted daylight
-# savings time in 1916, Fort William and Port Arthur, having done so
-# already, did not change their clocks....  During the Second World
-# War,... [t]he cities agreed to implement DST during the summer
-# months for the remainder of the war years.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Toronto	-5:17:32 -	LMT	1895
-			-5:00	Canada	E%sT	1919
-			-5:00	Toronto	E%sT	1942 Feb  9  2:00s
-			-5:00	Canada	E%sT	1946
-			-5:00	Toronto	E%sT	1974
-			-5:00	Canada	E%sT
-Zone America/Thunder_Bay -5:57:00 -	LMT	1895
-			-6:00	-	CST	1910
-			-5:00	-	EST	1942
-			-5:00	Canada	E%sT	1970
-			-5:00	Toronto	E%sT	1973
-			-5:00	-	EST	1974
-			-5:00	Canada	E%sT
-Zone America/Nipigon	-5:53:04 -	LMT	1895
-			-5:00	Canada	E%sT	1940 Sep 29
-			-5:00	1:00	EDT	1942 Feb  9  2:00s
-			-5:00	Canada	E%sT
-Zone America/Rainy_River -6:18:16 -	LMT	1895
-			-6:00	Canada	C%sT	1940 Sep 29
-			-6:00	1:00	CDT	1942 Feb  9  2:00s
-			-6:00	Canada	C%sT
-Zone America/Atikokan	-6:06:28 -	LMT	1895
-			-6:00	Canada	C%sT	1940 Sep 29
-			-6:00	1:00	CDT	1942 Feb  9  2:00s
-			-6:00	Canada	C%sT	1945 Sep 30  2:00
-			-5:00	-	EST
-
-
-# Manitoba
-
-# From Rob Douglas (2006-04-06):
-# the old Manitoba Time Act - as amended by Bill 2, assented to
-# March 27, 1987 ... said ...
-# "between two o'clock Central Standard Time in the morning of
-# the first Sunday of April of each year and two o'clock Central
-# Standard Time in the morning of the last Sunday of October next
-# following, one hour in advance of Central Standard Time."...
-# I believe that the English legislation [of the old time act] had
-# been assented to (March 22, 1967)....
-# Also, as far as I can tell, there was no order-in-council varying
-# the time of Daylight Saving Time for 2005 and so the provisions of
-# the 1987 version would apply - the changeover was at 2:00 Central
-# Standard Time (i.e. not until 3:00 Central Daylight Time).
-
-# From Paul Eggert (2006-04-10):
-# Shanks & Pottenger say Manitoba switched at 02:00 (not 02:00s)
-# starting 1966.  Since 02:00s is clearly correct for 1967 on, assume
-# it was also 02:00s in 1966.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Winn	1916	only	-	Apr	23	0:00	1:00	D
-Rule	Winn	1916	only	-	Sep	17	0:00	0	S
-Rule	Winn	1918	only	-	Apr	14	2:00	1:00	D
-Rule	Winn	1918	only	-	Oct	27	2:00	0	S
-Rule	Winn	1937	only	-	May	16	2:00	1:00	D
-Rule	Winn	1937	only	-	Sep	26	2:00	0	S
-Rule	Winn	1942	only	-	Feb	 9	2:00	1:00	W # War
-Rule	Winn	1945	only	-	Aug	14	23:00u	1:00	P # Peace
-Rule	Winn	1945	only	-	Sep	lastSun	2:00	0	S
-Rule	Winn	1946	only	-	May	12	2:00	1:00	D
-Rule	Winn	1946	only	-	Oct	13	2:00	0	S
-Rule	Winn	1947	1949	-	Apr	lastSun	2:00	1:00	D
-Rule	Winn	1947	1949	-	Sep	lastSun	2:00	0	S
-Rule	Winn	1950	only	-	May	 1	2:00	1:00	D
-Rule	Winn	1950	only	-	Sep	30	2:00	0	S
-Rule	Winn	1951	1960	-	Apr	lastSun	2:00	1:00	D
-Rule	Winn	1951	1958	-	Sep	lastSun	2:00	0	S
-Rule	Winn	1959	only	-	Oct	lastSun	2:00	0	S
-Rule	Winn	1960	only	-	Sep	lastSun	2:00	0	S
-Rule	Winn	1963	only	-	Apr	lastSun	2:00	1:00	D
-Rule	Winn	1963	only	-	Sep	22	2:00	0	S
-Rule	Winn	1966	1986	-	Apr	lastSun	2:00s	1:00	D
-Rule	Winn	1966	2005	-	Oct	lastSun	2:00s	0	S
-Rule	Winn	1987	2005	-	Apr	Sun>=1	2:00s	1:00	D
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Winnipeg	-6:28:36 -	LMT	1887 Jul 16
-			-6:00	Winn	C%sT	2006
-			-6:00	Canada	C%sT
-
-
-# Saskatchewan
-
-# From Mark Brader (2003-07-26):
-# The first actual adoption of DST in Canada was at the municipal
-# level.  As the [Toronto] Star put it (1912-06-07), "While people
-# elsewhere have long been talking of legislation to save daylight,
-# the city of Moose Jaw [Saskatchewan] has acted on its own hook."
-# DST in Moose Jaw began on Saturday, 1912-06-01 (no time mentioned:
-# presumably late evening, as below), and would run until "the end of
-# the summer".  The discrepancy between municipal time and railroad
-# time was noted.
-
-# From Paul Eggert (2003-07-27):
-# Willett (1914-03) notes that DST "has been in operation ... in the
-# City of Moose Jaw, Saskatchewan, for one year."
-
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger say that since 1970 this region has mostly been as Regina.
-# Some western towns (e.g. Swift Current) switched from MST/MDT to CST in 1972.
-# Other western towns (e.g. Lloydminster) are like Edmonton.
-# Matthews and Vincent (1998) write that Denare Beach and Creighton
-# are like Winnipeg, in violation of Saskatchewan law.
-
-# From W. Jones (1992-11-06):
-# The. . .below is based on information I got from our law library, the
-# provincial archives, and the provincial Community Services department.
-# A precise history would require digging through newspaper archives, and
-# since you didn't say what you wanted, I didn't bother.
-#
-# Saskatchewan is split by a time zone meridian (105W) and over the years
-# the boundary became pretty ragged as communities near it reevaluated
-# their affiliations in one direction or the other.  In 1965 a provincial
-# referendum favoured legislating common time practices.
-#
-# On 15 April 1966 the Time Act (c. T-14, Revised Statutes of
-# Saskatchewan 1978) was proclaimed, and established that the eastern
-# part of Saskatchewan would use CST year round, that districts in
-# northwest Saskatchewan would by default follow CST but could opt to
-# follow Mountain Time rules (thus 1 hour difference in the winter and
-# zero in the summer), and that districts in southwest Saskatchewan would
-# by default follow MT but could opt to follow CST.
-#
-# It took a few years for the dust to settle (I know one story of a town
-# on one time zone having its school in another, such that a mom had to
-# serve her family lunch in two shifts), but presently it seems that only
-# a few towns on the border with Alberta (e.g. Lloydminster) follow MT
-# rules any more; all other districts appear to have used CST year round
-# since sometime in the 1960s.
-
-# From Chris Walton (2006-06-26):
-# The Saskatchewan time act which was last updated in 1996 is about 30 pages
-# long and rather painful to read.
-# http://www.qp.gov.sk.ca/documents/English/Statutes/Statutes/T14.pdf
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Regina	1918	only	-	Apr	14	2:00	1:00	D
-Rule	Regina	1918	only	-	Oct	27	2:00	0	S
-Rule	Regina	1930	1934	-	May	Sun>=1	0:00	1:00	D
-Rule	Regina	1930	1934	-	Oct	Sun>=1	0:00	0	S
-Rule	Regina	1937	1941	-	Apr	Sun>=8	0:00	1:00	D
-Rule	Regina	1937	only	-	Oct	Sun>=8	0:00	0	S
-Rule	Regina	1938	only	-	Oct	Sun>=1	0:00	0	S
-Rule	Regina	1939	1941	-	Oct	Sun>=8	0:00	0	S
-Rule	Regina	1942	only	-	Feb	 9	2:00	1:00	W # War
-Rule	Regina	1945	only	-	Aug	14	23:00u	1:00	P # Peace
-Rule	Regina	1945	only	-	Sep	lastSun	2:00	0	S
-Rule	Regina	1946	only	-	Apr	Sun>=8	2:00	1:00	D
-Rule	Regina	1946	only	-	Oct	Sun>=8	2:00	0	S
-Rule	Regina	1947	1957	-	Apr	lastSun	2:00	1:00	D
-Rule	Regina	1947	1957	-	Sep	lastSun	2:00	0	S
-Rule	Regina	1959	only	-	Apr	lastSun	2:00	1:00	D
-Rule	Regina	1959	only	-	Oct	lastSun	2:00	0	S
-#
-Rule	Swift	1957	only	-	Apr	lastSun	2:00	1:00	D
-Rule	Swift	1957	only	-	Oct	lastSun	2:00	0	S
-Rule	Swift	1959	1961	-	Apr	lastSun	2:00	1:00	D
-Rule	Swift	1959	only	-	Oct	lastSun	2:00	0	S
-Rule	Swift	1960	1961	-	Sep	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Regina	-6:58:36 -	LMT	1905 Sep
-			-7:00	Regina	M%sT	1960 Apr lastSun  2:00
-			-6:00	-	CST
-Zone America/Swift_Current -7:11:20 -	LMT	1905 Sep
-			-7:00	Canada	M%sT	1946 Apr lastSun  2:00
-			-7:00	Regina	M%sT	1950
-			-7:00	Swift	M%sT	1972 Apr lastSun  2:00
-			-6:00	-	CST
-
-
-# Alberta
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Edm	1918	1919	-	Apr	Sun>=8	2:00	1:00	D
-Rule	Edm	1918	only	-	Oct	27	2:00	0	S
-Rule	Edm	1919	only	-	May	27	2:00	0	S
-Rule	Edm	1920	1923	-	Apr	lastSun	2:00	1:00	D
-Rule	Edm	1920	only	-	Oct	lastSun	2:00	0	S
-Rule	Edm	1921	1923	-	Sep	lastSun	2:00	0	S
-Rule	Edm	1942	only	-	Feb	 9	2:00	1:00	W # War
-Rule	Edm	1945	only	-	Aug	14	23:00u	1:00	P # Peace
-Rule	Edm	1945	only	-	Sep	lastSun	2:00	0	S
-Rule	Edm	1947	only	-	Apr	lastSun	2:00	1:00	D
-Rule	Edm	1947	only	-	Sep	lastSun	2:00	0	S
-Rule	Edm	1967	only	-	Apr	lastSun	2:00	1:00	D
-Rule	Edm	1967	only	-	Oct	lastSun	2:00	0	S
-Rule	Edm	1969	only	-	Apr	lastSun	2:00	1:00	D
-Rule	Edm	1969	only	-	Oct	lastSun	2:00	0	S
-Rule	Edm	1972	1986	-	Apr	lastSun	2:00	1:00	D
-Rule	Edm	1972	2006	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Edmonton	-7:33:52 -	LMT	1906 Sep
-			-7:00	Edm	M%sT	1987
-			-7:00	Canada	M%sT
-
-
-# British Columbia
-
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger write that since 1970 most of this region has
-# been like Vancouver.
-# Dawson Creek uses MST.  Much of east BC is like Edmonton.
-# Matthews and Vincent (1998) write that Creston is like Dawson Creek.
-
-# It seems though that (re: Creston) is not entirely correct:
-
-# From Chris Walton (2011-12-01):
-# There are two areas within the Canadian province of British Columbia
-# that do not currently observe daylight saving:
-# a) The Creston Valley (includes the town of Creston and surrounding area)
-# b) The eastern half of the Peace River Regional District
-# (includes the cities of Dawson Creek and Fort St. John)
-
-# Earlier this year I stumbled across a detailed article about the time
-# keeping history of Creston; it was written by Tammy Hardwick who is the
-# manager of the Creston & District Museum. The article was written in May 2009.
-# http://www.ilovecreston.com/?p=articles&t=spec&ar=260
-# According to the article, Creston has not changed its clocks since June 1918.
-# i.e. Creston has been stuck on UT-7 for 93 years.
-# Dawson Creek, on the other hand, changed its clocks as recently as April 1972.
-
-# Unfortunately the exact date for the time change in June 1918 remains
-# unknown and will be difficult to ascertain.  I e-mailed Tammy a few months
-# ago to ask if Sunday June 2 was a reasonable guess.  She said it was just
-# as plausible as any other date (in June).  She also said that after writing
-# the article she had discovered another time change in 1916; this is the
-# subject of another article which she wrote in October 2010.
-# http://www.creston.museum.bc.ca/index.php?module=comments&uop=view_comment&cm+id=56
-
-# Here is a summary of the three clock change events in Creston's history:
-# 1. 1884 or 1885: adoption of Mountain Standard Time (GMT-7)
-# Exact date unknown
-# 2. Oct 1916: switch to Pacific Standard Time (GMT-8)
-# Exact date in October unknown; Sunday October 1 is a reasonable guess.
-# 3. June 1918: switch to Pacific Daylight Time (GMT-7)
-# Exact date in June unknown; Sunday June 2 is a reasonable guess.
-# note 1:
-# On Oct 27/1918 when daylight saving ended in the rest of Canada,
-# Creston did not change its clocks.
-# note 2:
-# During WWII when the Federal Government legislated a mandatory clock change,
-# Creston did not oblige.
-# note 3:
-# There is no guarantee that Creston will remain on Mountain Standard Time
-# (UTC-7) forever.
-# The subject was debated at least once this year by the town Council.
-# http://www.bclocalnews.com/kootenay_rockies/crestonvalleyadvance/news/116760809.html
-
-# During a period WWII, summer time (Daylight saying) was mandatory in Canada.
-# In Creston, that was handled by shifting the area to PST (-8:00) then applying
-# summer time to cause the offset to be -7:00, the same as it had been before
-# the change.  It can be argued that the timezone abbreviation during this
-# period should be PDT rather than MST, but that doesn't seem important enough
-# (to anyone) to further complicate the rules.
-
-# The transition dates (and times) are guesses.
-
-# From Matt Johnson (2015-09-21):
-# Fort Nelson, BC, Canada will cancel DST this year.  So while previously they
-# were aligned with America/Vancouver, they're now aligned with
-# America/Dawson_Creek.
-# http://www.northernrockies.ca/EN/meta/news/archives/2015/northern-rockies-time-change.html
-#
-# From Tim Parenti (2015-09-23):
-# This requires a new zone for the Northern Rockies Regional Municipality,
-# America/Fort_Nelson.  The resolution of 2014-12-08 was reached following a
-# 2014-11-15 poll with nearly 75% support.  Effectively, the municipality has
-# been on MST (-0700) like Dawson Creek since it advanced its clocks on
-# 2015-03-08.
-#
-# From Paul Eggert (2015-09-23):
-# Shanks says Fort Nelson did not observe DST in 1946, unlike Vancouver.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Vanc	1918	only	-	Apr	14	2:00	1:00	D
-Rule	Vanc	1918	only	-	Oct	27	2:00	0	S
-Rule	Vanc	1942	only	-	Feb	 9	2:00	1:00	W # War
-Rule	Vanc	1945	only	-	Aug	14	23:00u	1:00	P # Peace
-Rule	Vanc	1945	only	-	Sep	30	2:00	0	S
-Rule	Vanc	1946	1986	-	Apr	lastSun	2:00	1:00	D
-Rule	Vanc	1946	only	-	Oct	13	2:00	0	S
-Rule	Vanc	1947	1961	-	Sep	lastSun	2:00	0	S
-Rule	Vanc	1962	2006	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Vancouver	-8:12:28 -	LMT	1884
-			-8:00	Vanc	P%sT	1987
-			-8:00	Canada	P%sT
-Zone America/Dawson_Creek -8:00:56 -	LMT	1884
-			-8:00	Canada	P%sT	1947
-			-8:00	Vanc	P%sT	1972 Aug 30  2:00
-			-7:00	-	MST
-Zone America/Fort_Nelson	-8:10:47 -	LMT	1884
-			-8:00	Vanc	P%sT	1946
-			-8:00	-	PST	1947
-			-8:00	Vanc	P%sT	1987
-			-8:00	Canada	P%sT	2015 Mar  8  2:00
-			-7:00	-	MST
-Zone America/Creston	-7:46:04 -	LMT	1884
-			-7:00	-	MST	1916 Oct 1
-			-8:00	-	PST	1918 Jun 2
-			-7:00	-	MST
-
-# Northwest Territories, Nunavut, Yukon
-
-# From Paul Eggert (2006-03-22):
-# Dawson switched to PST in 1973.  Inuvik switched to MST in 1979.
-# Mathew Englander (1996-10-07) gives the following refs:
-#	* 1967. Paragraph 28(34)(g) of the Interpretation Act, S.C. 1967-68,
-#	c. 7 defines Yukon standard time as UTC-9....
-#	see Interpretation Act, R.S.C. 1985, c. I-21, s. 35(1).
-#	[https://www.canlii.org/en/ca/laws/stat/rsc-1985-c-i-21/latest/rsc-1985-c-i-21.html]
-#	* C.O. 1973/214 switched Yukon to PST on 1973-10-28 00:00.
-#	* O.I.C. 1980/02 established DST.
-#	* O.I.C. 1987/056 changed DST to Apr firstSun 2:00 to Oct lastSun 2:00.
-
-# From Brian Inglis (2015-04-14):
-#
-# I tried to trace the history of Yukon time and found the following
-# regulations, giving the reference title and URL if found, regulation name,
-# and relevant quote if available.  Each regulation specifically revokes its
-# predecessor.  The final reference is to the current Interpretation Act
-# authorizing and resulting from these regulatory changes.
-#
-# Only recent regulations were retrievable via Yukon government site search or
-# index, and only some via Canadian legal sources.  Other sources used include
-# articles titled "Standard Time and Time Zones in Canada" from JRASC via ADS
-# Abstracts, cited by ADO for 1932 ..., and updated versions from 1958 and
-# 1970 quoted below; each article includes current extracts from provincial
-# and territorial ST and DST regulations at the end, summaries and details of
-# standard times and daylight saving time at many locations across Canada,
-# with time zone maps, tables and calculations for Canadian Sunrise, Sunset,
-# and LMST; they also cover many countries and global locations, with a chart
-# and table showing current Universal Time offsets, and may be useful as
-# another source of information for 1970 and earlier.
-#
-# * Standard Time and Time Zones in Canada; Smith, C.C.; JRASC, Vol. 26,
-#   pp.49-77; February 1932; SAO/NASA Astrophysics Data System (ADS)
-#   http://adsabs.harvard.edu/abs/1932JRASC..26...49S from p.75:
-#   Yukon Interpretation Ordinance
-#   Yukon standard time is the local mean time at the one hundred and
-#   thirty-fifth meridian.
-#
-# * Standard Time and Time Zones in Canada; Smith, C.C.; Thomson, Malcolm M.;
-#   JRASC, Vol. 52, pp.193-223; October 1958; SAO/NASA Astrophysics Data System
-#   (ADS) http://adsabs.harvard.edu/abs/1958JRASC..52..193S from pp.220-1:
-#   Yukon Interpretation Ordinance, 1955, Chap. 16.
-#
-#     (1) Subject to this section, standard time shall be reckoned as nine
-#     hours behind Greenwich Time and called Yukon Standard Time.
-#
-#     (2) Notwithstanding subsection (1), the Commissioner may make regulations
-#     varying the manner of reckoning standard time.
-#
-# * Yukon Territory Commissioner's Order 1966-20 Interpretation Ordinance
-#   http://? - no online source found
-#
-# * Standard Time and Time Zones in Canada; Thomson, Malcolm M.; JRASC,
-#   Vol. 64, pp.129-162; June 1970; SAO/NASA Astrophysics Data System (ADS)
-#   http://adsabs.harvard.edu/abs/1970JRASC..64..129T from p.156: Yukon
-#   Territory Commissioner's Order 1967-59 Interpretation Ordinance ...
-#
-#     1. Commissioner's Order 1966-20 dated at Whitehorse in the Yukon
-#     Territory on 27th January, 1966, is hereby revoked.
-#
-#     2. Yukon (East) Standard Time as defined by section 36 of the
-#     Interpretation Ordinance from and after mid-night on the 28th day of May,
-#     1967 shall be reckoned in the same manner as Pacific Standard Time, that
-#     is to say, eight hours behind Greenwich Time in the area of the Yukon
-#     Territory lying east of the 138th degree longitude west.
-#
-#     3. In the remainder of the Territory, lying west of the 138th degree
-#     longitude west, Yukon (West) Standard Time shall be reckoned as nine
-#     hours behind Greenwich Time.
-#
-# * Yukon Standard Time defined as Pacific Standard Time, YCO 1973/214
-#   https://www.canlii.org/en/yk/laws/regu/yco-1973-214/latest/yco-1973-214.html
-#   C.O. 1973/214 INTERPRETATION ACT ...
-#
-#     1. Effective October 28, 1973 Commissioner's Order 1967/59 is hereby
-#     revoked.
-#
-#     2. Yukon Standard Time as defined by section 36 of the Interpretation
-#     Act from and after midnight on the twenty-eighth day of October, 1973
-#     shall be reckoned in the same manner as Pacific Standard Time, that is
-#     to say eight hours behind Greenwich Time.
-#
-# * O.I.C. 1980/02 INTERPRETATION ACT
-#   http://? - no online source found
-#
-# * Yukon Daylight Saving Time, YOIC 1987/56
-#   https://www.canlii.org/en/yk/laws/regu/yoic-1987-56/latest/yoic-1987-56.html
-#   O.I.C. 1987/056 INTERPRETATION ACT ...
-#
-#   In every year between
-#     (a) two o'clock in the morning in the first Sunday in April, and
-#     (b) two o'clock in the morning in the last Sunday in October,
-#   Standard Time shall be reckoned as seven hours behind Greenwich Time and
-#   called Yukon Daylight Saving Time.
-#   ...
-#   Dated ... 9th day of March, A.D., 1987.
-#
-# * Yukon Daylight Saving Time 2006, YOIC 2006/127
-#   https://www.canlii.org/en/yk/laws/regu/yoic-2006-127/latest/yoic-2006-127.html
-#   O.I.C. 2006/127 INTERPRETATION ACT ...
-#
-#     1. In Yukon each year the time for general purposes shall be 7 hours
-#     behind Greenwich mean time during the period commencing at two o'clock
-#     in the forenoon on the second Sunday of March and ending at two o'clock
-#     in the forenoon on the first Sunday of November and shall be called
-#     Yukon Daylight Saving Time.
-#
-#     2. Order-in-Council 1987/56 is revoked.
-#
-#     3. This order comes into force January 1, 2007.
-#
-# * Interpretation Act, RSY 2002, c 125
-# https://www.canlii.org/en/yk/laws/stat/rsy-2002-c-125/latest/rsy-2002-c-125.html
-
-# From Rives McDow (1999-09-04):
-# Nunavut ... moved ... to incorporate the whole territory into one time zone.
-# Nunavut moves to single time zone Oct. 31
-# http://www.nunatsiaq.com/nunavut/nvt90903_13.html
-#
-# From Antoine Leca (1999-09-06):
-# We then need to create a new timezone for the Kitikmeot region of Nunavut
-# to differentiate it from the Yellowknife region.
-
-# From Paul Eggert (1999-09-20):
-# Basic Facts: The New Territory
-# http://www.nunavut.com/basicfacts/english/basicfacts_1territory.html
-# (1999) reports that Pangnirtung operates on eastern time,
-# and that Coral Harbour does not observe DST.  We don't know when
-# Pangnirtung switched to eastern time; we'll guess 1995.
-
-# From Rives McDow (1999-11-08):
-# On October 31, when the rest of Nunavut went to Central time,
-# Pangnirtung wobbled.  Here is the result of their wobble:
-#
-# The following businesses and organizations in Pangnirtung use Central Time:
-#
-#	First Air, Power Corp, Nunavut Construction, Health Center, RCMP,
-#	Eastern Arctic National Parks, A & D Specialist
-#
-# The following businesses and organizations in Pangnirtung use Eastern Time:
-#
-#	Hamlet office, All other businesses, Both schools, Airport operator
-#
-# This has made for an interesting situation there, which warranted the news.
-# No one there that I spoke with seems concerned, or has plans to
-# change the local methods of keeping time, as it evidently does not
-# really interfere with any activities or make things difficult locally.
-# They plan to celebrate New Year's turn-over twice, one hour apart,
-# so it appears that the situation will last at least that long.
-# The Nunavut Intergovernmental Affairs hopes that they will "come to
-# their senses", but the locals evidently don't see any problem with
-# the current state of affairs.
-
-# From Michaela Rodrigue, writing in the
-# Nunatsiaq News (1999-11-19):
-# http://www.nunatsiaqonline.ca/archives/nunavut991130/nvt91119_17.html
-# Clyde River, Pangnirtung and Sanikiluaq now operate with two time zones,
-# central - or Nunavut time - for government offices, and eastern time
-# for municipal offices and schools....  Igloolik [was similar but then]
-# made the switch to central time on Saturday, Nov. 6.
-
-# From Paul Eggert (2000-10-02):
-# Matthews and Vincent (1998) say the following, but we lack histories
-# for these potential new Zones.
-#
-# The Canadian Forces station at Alert uses Eastern Time while the
-# handful of residents at the Eureka weather station [in the Central
-# zone] skip daylight savings.  Baffin Island, which is crossed by the
-# Central, Eastern and Atlantic Time zones only uses Eastern Time.
-# Gjoa Haven, Taloyoak and Pelly Bay all use Mountain instead of
-# Central Time and Southampton Island [in the Central zone] is not
-# required to use daylight savings.
-
-# From <http://www.nunatsiaqonline.ca/archives/nunavut001130/nvt21110_02.html>
-# Nunavut now has two time zones (2000-11-10):
-# The Nunavut government would allow its employees in Kugluktuk and
-# Cambridge Bay to operate on central time year-round, putting them
-# one hour behind the rest of Nunavut for six months during the winter.
-# At the end of October the two communities had rebelled against
-# Nunavut's unified time zone, refusing to shift to eastern time with
-# the rest of the territory for the winter.  Cambridge Bay remained on
-# central time, while Kugluktuk, even farther west, reverted to
-# mountain time, which they had used before the advent of Nunavut's
-# unified time zone in 1999.
-#
-# From Rives McDow (2001-01-20), quoting the Nunavut government:
-# The preceding decision came into effect at midnight, Saturday Nov 4, 2000.
-
-# From Paul Eggert (2000-12-04):
-# Let's just keep track of the official times for now.
-
-# From Rives McDow (2001-03-07):
-# The premier of Nunavut has issued a ministerial statement advising
-# that effective 2001-04-01, the territory of Nunavut will revert
-# back to three time zones (mountain, central, and eastern).  Of the
-# cities in Nunavut, Coral Harbor is the only one that I know of that
-# has said it will not observe dst, staying on EST year round.  I'm
-# checking for more info, and will get back to you if I come up with
-# more.
-# [Also see <http://www.nunatsiaq.com/nunavut/nvt10309_06.html> (2001-03-09).]
-
-# From Gwillim Law (2005-05-21):
-# According to ...
-# http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp
-# (from a 1998 Canadian Geographic article), the de facto and de jure time
-# for Southampton Island (at the north end of Hudson Bay) is UTC-5 all year
-# round.  Using Google, it's easy to find other websites that confirm this.
-# I wasn't able to find how far back this time regimen goes, but since it
-# predates the creation of Nunavut, it probably goes back many years....
-# The Inuktitut name of Coral Harbour is Sallit, but it's rarely used.
-#
-# From Paul Eggert (2014-10-17):
-# For lack of better information, assume that Southampton Island observed
-# daylight saving only during wartime.  Gwillim Law's email also
-# mentioned maps now maintained by National Research Council Canada;
-# see above for an up-to-date link.
-
-# From Chris Walton (2007-03-01):
-# ... the community of Resolute (located on Cornwallis Island in
-# Nunavut) moved from Central Time to Eastern Time last November.
-# Basically the community did not change its clocks at the end of
-# daylight saving....
-# http://www.nnsl.com/frames/newspapers/2006-11/nov13_06none.html
-
-# From Chris Walton (2011-03-21):
-# Back in 2007 I initiated the creation of a new "zone file" for Resolute
-# Bay. Resolute Bay is a small community located about 900km north of
-# the Arctic Circle. The zone file was required because Resolute Bay had
-# decided to use UTC-5 instead of UTC-6 for the winter of 2006-2007.
-#
-# According to new information which I received last week, Resolute Bay
-# went back to using UTC-6 in the winter of 2007-2008...
-#
-# On March 11/2007 most of Canada went onto daylight saving. On March
-# 14/2007 I phoned the Resolute Bay hamlet office to do a "time check." I
-# talked to somebody that was both knowledgeable and helpful. I was able
-# to confirm that Resolute Bay was still operating on UTC-5. It was
-# explained to me that Resolute Bay had been on the Eastern Time zone
-# (EST) in the winter, and was now back on the Central Time zone (CDT).
-# i.e. the time zone had changed twice in the last year but the clocks
-# had not moved. The residents had to know which time zone they were in
-# so they could follow the correct TV schedule...
-#
-# On Nov 02/2008 most of Canada went onto standard time. On Nov 03/2008 I
-# phoned the Resolute Bay hamlet office...[D]ue to the challenging nature
-# of the phone call, I decided to seek out an alternate source of
-# information. I found an e-mail address for somebody by the name of
-# Stephanie Adams whose job was listed as "Inns North Support Officer for
-# Arctic Co-operatives." I was under the impression that Stephanie lived
-# and worked in Resolute Bay...
-#
-# On March 14/2011 I phoned the hamlet office again. I was told that
-# Resolute Bay had been using Central Standard Time over the winter of
-# 2010-2011 and that the clocks had therefore been moved one hour ahead
-# on March 13/2011. The person I talked to was aware that Resolute Bay
-# had previously experimented with Eastern Standard Time but he could not
-# tell me when the practice had stopped.
-#
-# On March 17/2011 I searched the Web to find an e-mail address of
-# somebody that might be able to tell me exactly when Resolute Bay went
-# off Eastern Standard Time. I stumbled on the name "Aziz Kheraj." Aziz
-# used to be the mayor of Resolute Bay and he apparently owns half the
-# businesses including "South Camp Inn." This website has some info on
-# Aziz:
-# http://www.uphere.ca/node/493
-#
-# I sent Aziz an e-mail asking when Resolute Bay had stopped using
-# Eastern Standard Time.
-#
-# Aziz responded quickly with this: "hi, The time was not changed for the
-# 1 year only, the following year, the community went back to the old way
-# of "spring ahead-fall behind" currently we are zulu plus 5 hrs and in
-# the winter Zulu plus 6 hrs"
-#
-# This of course conflicted with everything I had ascertained in November 2008.
-#
-# I sent Aziz a copy of my 2008 e-mail exchange with Stephanie. Aziz
-# responded with this: "Hi, Stephanie lives in Winnipeg. I live here, You
-# may want to check with the weather office in Resolute Bay or do a
-# search on the weather through Env. Canada. web site"
-#
-# If I had realized the Stephanie did not live in Resolute Bay I would
-# never have contacted her.  I now believe that all the information I
-# obtained in November 2008 should be ignored...
-# I apologize for reporting incorrect information in 2008.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	NT_YK	1918	only	-	Apr	14	2:00	1:00	D
-Rule	NT_YK	1918	only	-	Oct	27	2:00	0	S
-Rule	NT_YK	1919	only	-	May	25	2:00	1:00	D
-Rule	NT_YK	1919	only	-	Nov	 1	0:00	0	S
-Rule	NT_YK	1942	only	-	Feb	 9	2:00	1:00	W # War
-Rule	NT_YK	1945	only	-	Aug	14	23:00u	1:00	P # Peace
-Rule	NT_YK	1945	only	-	Sep	30	2:00	0	S
-Rule	NT_YK	1965	only	-	Apr	lastSun	0:00	2:00	DD
-Rule	NT_YK	1965	only	-	Oct	lastSun	2:00	0	S
-Rule	NT_YK	1980	1986	-	Apr	lastSun	2:00	1:00	D
-Rule	NT_YK	1980	2006	-	Oct	lastSun	2:00	0	S
-Rule	NT_YK	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-# aka Panniqtuuq
-Zone America/Pangnirtung 0	-	-00	1921 # trading post est.
-			-4:00	NT_YK	A%sT	1995 Apr Sun>=1  2:00
-			-5:00	Canada	E%sT	1999 Oct 31  2:00
-			-6:00	Canada	C%sT	2000 Oct 29  2:00
-			-5:00	Canada	E%sT
-# formerly Frobisher Bay
-Zone America/Iqaluit	0	-	-00	1942 Aug # Frobisher Bay est.
-			-5:00	NT_YK	E%sT	1999 Oct 31  2:00
-			-6:00	Canada	C%sT	2000 Oct 29  2:00
-			-5:00	Canada	E%sT
-# aka Qausuittuq
-Zone America/Resolute	0	-	-00	1947 Aug 31 # Resolute founded
-			-6:00	NT_YK	C%sT	2000 Oct 29  2:00
-			-5:00	-	EST	2001 Apr  1  3:00
-			-6:00	Canada	C%sT	2006 Oct 29  2:00
-			-5:00	-	EST	2007 Mar 11  3:00
-			-6:00	Canada	C%sT
-# aka Kangiqiniq
-Zone America/Rankin_Inlet 0	-	-00	1957 # Rankin Inlet founded
-			-6:00	NT_YK	C%sT	2000 Oct 29  2:00
-			-5:00	-	EST	2001 Apr  1  3:00
-			-6:00	Canada	C%sT
-# aka Iqaluktuuttiaq
-Zone America/Cambridge_Bay 0	-	-00	1920 # trading post est.?
-			-7:00	NT_YK	M%sT	1999 Oct 31  2:00
-			-6:00	Canada	C%sT	2000 Oct 29  2:00
-			-5:00	-	EST	2000 Nov  5  0:00
-			-6:00	-	CST	2001 Apr  1  3:00
-			-7:00	Canada	M%sT
-Zone America/Yellowknife 0	-	-00	1935 # Yellowknife founded?
-			-7:00	NT_YK	M%sT	1980
-			-7:00	Canada	M%sT
-Zone America/Inuvik	0	-	-00	1953 # Inuvik founded
-			-8:00	NT_YK	P%sT	1979 Apr lastSun  2:00
-			-7:00	NT_YK	M%sT	1980
-			-7:00	Canada	M%sT
-Zone America/Whitehorse	-9:00:12 -	LMT	1900 Aug 20
-			-9:00	NT_YK	Y%sT	1967 May 28  0:00
-			-8:00	NT_YK	P%sT	1980
-			-8:00	Canada	P%sT
-Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
-			-9:00	NT_YK	Y%sT	1973 Oct 28  0:00
-			-8:00	NT_YK	P%sT	1980
-			-8:00	Canada	P%sT
-
-
-###############################################################################
-
-# Mexico
-
-# From Paul Eggert (2014-12-07):
-# The Investigation and Analysis Service of the
-# Mexican Library of Congress (MLoC) has published a
-# history of Mexican local time (in Spanish)
-# http://www.diputados.gob.mx/bibliot/publica/inveyana/polisoc/horver/index.htm
-#
-# Here are the discrepancies between Shanks & Pottenger (S&P) and the MLoC.
-# (In all cases we go with the MLoC.)
-# S&P report that Baja was at -8:00 in 1922/1923.
-# S&P say the 1930 transition in Baja was 1930-11-16.
-# S&P report no DST during summer 1931.
-# S&P report a transition at 1932-03-30 23:00, not 1932-04-01.
-
-# From Gwillim Law (2001-02-20):
-# There are some other discrepancies between the Decrees page and the
-# tz database.  I think they can best be explained by supposing that
-# the researchers who prepared the Decrees page failed to find some of
-# the relevant documents.
-
-# From Alan Perry (1996-02-15):
-# A guy from our Mexico subsidiary finally found the Presidential Decree
-# outlining the timezone changes in Mexico.
-#
-# ------------- Begin Forwarded Message -------------
-#
-# I finally got my hands on the Official Presidential Decree that sets up the
-# rules for the DST changes. The rules are:
-#
-# 1. The country is divided in 3 timezones:
-#    - Baja California Norte (the Mexico/BajaNorte TZ)
-#    - Baja California Sur, Nayarit, Sinaloa and Sonora (the Mexico/BajaSur TZ)
-#    - The rest of the country (the Mexico/General TZ)
-#
-# 2. From the first Sunday in April at 2:00 AM to the last Sunday in October
-#    at 2:00 AM, the times in each zone are as follows:
-#    BajaNorte: GMT+7
-#    BajaSur:   GMT+6
-#    General:   GMT+5
-#
-# 3. The rest of the year, the times are as follows:
-#    BajaNorte: GMT+8
-#    BajaSur:   GMT+7
-#    General:   GMT+6
-#
-# The Decree was published in Mexico's Official Newspaper on January 4th.
-#
-# -------------- End Forwarded Message --------------
-# From Paul Eggert (1996-06-12):
-# For an English translation of the decree, see
-# "Diario Oficial: Time Zone Changeover" (1996-01-04).
-# http://mexico-travel.com/extra/timezone_eng.html
-
-# From Rives McDow (1998-10-08):
-# The State of Quintana Roo has reverted back to central STD and DST times
-# (i.e. UTC -0600 and -0500 as of 1998-08-02).
-
-# From Rives McDow (2000-01-10):
-# Effective April 4, 1999 at 2:00 AM local time, Sonora changed to the time
-# zone 5 hours from the International Date Line, and will not observe daylight
-# savings time so as to stay on the same time zone as the southern part of
-# Arizona year round.
-
-# From Jesper NĂžrgaard, translating
-# <http://www.reforma.com/nacional/articulo/064327/> (2001-01-17):
-# In Oaxaca, the 55.000 teachers from the Section 22 of the National
-# Syndicate of Education Workers, refuse to apply daylight saving each
-# year, so that the more than 10,000 schools work at normal hour the
-# whole year.
-
-# From Gwillim Law (2001-01-19):
-# <http://www.reforma.com/negocios_y_dinero/articulo/064481/> ... says
-# (translated):...
-# January 17, 2000 - The Energy Secretary, Ernesto Martens, announced
-# that Summer Time will be reduced from seven to five months, starting
-# this year....
-# http://www.publico.com.mx/scripts/texto3.asp?action=pagina&pag=21&pos=p&secc=naci&date=01/17/2001
-# [translated], says "summer time will ... take effect on the first Sunday
-# in May, and end on the last Sunday of September.
-
-# From Arthur David Olson (2001-01-25):
-# The 2001-01-24 traditional Washington Post contained the page one
-# story "Timely Issue Divides Mexicans."...
-# http://www.washingtonpost.com/wp-dyn/articles/A37383-2001Jan23.html
-# ... Mexico City Mayor LĂłpez Obrador "...is threatening to keep
-# Mexico City and its 20 million residents on a different time than
-# the rest of the country..." In particular, LĂłpez Obrador would abolish
-# observation of Daylight Saving Time.
-
-# Official statute published by the Energy Department
-# http://www.conae.gob.mx/ahorro/decretohorver2001.html#decre
-# (2001-02-01) shows Baja and Chihauhua as still using US DST rules,
-# and Sonora with no DST.  This was reported by Jesper NĂžrgaard (2001-02-03).
-
-# From Paul Eggert (2001-03-03):
-#
-# http://www.latimes.com/news/nation/20010303/t000018766.html
-# James F. Smith writes in today's LA Times
-# * Sonora will continue to observe standard time.
-# * Last week Mexico City's mayor Andrés Manuel López Obrador decreed that
-#   the Federal District will not adopt DST.
-# * 4 of 16 district leaders announced they'll ignore the decree.
-# * The decree does not affect federal-controlled facilities including
-#   the airport, banks, hospitals, and schools.
-#
-# For now we'll assume that the Federal District will bow to federal rules.
-
-# From Jesper NĂžrgaard (2001-04-01):
-# I found some references to the Mexican application of daylight
-# saving, which modifies what I had already sent you, stating earlier
-# that a number of northern Mexican states would go on daylight
-# saving. The modification reverts this to only cover Baja California
-# (Norte), while all other states (except Sonora, who has no daylight
-# saving all year) will follow the original decree of president
-# Vicente Fox, starting daylight saving May 6, 2001 and ending
-# September 30, 2001.
-# References: "Diario de Monterrey" <http://www.diariodemonterrey.com/index.asp>
-# Palabra <http://palabra.infosel.com/010331/primera/ppri3101.pdf> (2001-03-31)
-
-# From Reuters (2001-09-04):
-# Mexico's Supreme Court on Tuesday declared that daylight savings was
-# unconstitutional in Mexico City, creating the possibility the
-# capital will be in a different time zone from the rest of the nation
-# next year....  The Supreme Court's ruling takes effect at 2:00
-# a.m. (0800 GMT) on Sept. 30, when Mexico is scheduled to revert to
-# standard time. "This is so residents of the Federal District are not
-# subject to unexpected time changes," a statement from the court said.
-
-# From Jesper NĂžrgaard Welen (2002-03-12):
-# ... consulting my local grocery store(!) and my coworkers, they all insisted
-# that a new decision had been made to reinstate US style DST in Mexico....
-# http://www.conae.gob.mx/ahorro/horaver2001_m1_2002.html (2002-02-20)
-# confirms this.  Sonora as usual is the only state where DST is not applied.
-
-# From Steffen Thorsen (2009-12-28):
-#
-# Steffen Thorsen wrote:
-# > Mexico's House of Representatives has approved a proposal for northern
-# > Mexico's border cities to share the same daylight saving schedule as
-# > the United States.
-# Now this has passed both the Congress and the Senate, so starting from
-# 2010, some border regions will be the same:
-# http://www.signonsandiego.com/news/2009/dec/28/clocks-will-match-both-sides-border/
-# http://www.elmananarey.com/diario/noticia/nacional/noticias/empatan_horario_de_frontera_con_eu/621939
-# (Spanish)
-#
-# Could not find the new law text, but the proposed law text changes are here:
-# http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/20091210-V.pdf
-# (Gaceta Parlamentaria)
-#
-# There is also a list of the votes here:
-# http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/V2-101209.html
-#
-# Our page:
-# https://www.timeanddate.com/news/time/north-mexico-dst-change.html
-
-# From Arthur David Olson (2010-01-20):
-# The page
-# http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010
-# includes this text:
-# En los municipios fronterizos de Tijuana y Mexicali en Baja California;
-# Juårez y Ojinaga en Chihuahua; Acuña y Piedras Negras en Coahuila;
-# AnĂĄhuac en Nuevo LeĂłn; y Nuevo Laredo, Reynosa y Matamoros en
-# Tamaulipas, la aplicaciĂłn de este horario estacional surtirĂĄ efecto
-# desde las dos horas del segundo domingo de marzo y concluirĂĄ a las dos
-# horas del primer domingo de noviembre.
-# En los municipios fronterizos que se encuentren ubicados en la franja
-# fronteriza norte en el territorio comprendido entre la lĂ­nea
-# internacional y la lĂ­nea paralela ubicada a una distancia de veinte
-# kilĂłmetros, asĂ­ como la Ciudad de Ensenada, Baja California, hacia el
-# interior del paĂ­s, la aplicaciĂłn de este horario estacional surtirĂĄ
-# efecto desde las dos horas del segundo domingo de marzo y concluirĂĄ a
-# las dos horas del primer domingo de noviembre.
-
-# From Steffen Thorsen (2014-12-08), translated by Gwillim Law:
-# The Mexican state of Quintana Roo will likely change to EST in 2015.
-#
-# http://www.unioncancun.mx/articulo/2014/12/04/medio-ambiente/congreso-aprueba-una-hora-mas-de-sol-en-qroo
-# "With this change, the time conflict that has existed between the municipios
-# of Quintana Roo and the municipio of Felipe Carrillo Puerto may come to an
-# end. The latter declared itself in rebellion 15 years ago when a time change
-# was initiated in Mexico, and since then it has refused to change its time
-# zone along with the rest of the country."
-#
-# From Steffen Thorsen (2015-01-14), translated by Gwillim Law:
-# http://sipse.com/novedades/confirman-aplicacion-de-nueva-zona-horaria-para-quintana-roo-132331.html
-# "...the new time zone will come into effect at two o'clock on the first Sunday
-# of February, when we will have to advance the clock one hour from its current
-# time..."
-# Also, the new zone will not use DST.
-#
-# From Carlos RaĂșl Perasso (2015-02-02):
-# The decree that modifies the Mexican Hour System Law has finally
-# been published at the Diario Oficial de la FederaciĂłn
-# http://www.dof.gob.mx/nota_detalle.php?codigo=5380123&fecha=31/01/2015
-# It establishes 5 zones for Mexico:
-# 1- Zona Centro (Central Zone): Corresponds to longitude 90 W,
-#    includes most of Mexico, excluding what's mentioned below.
-# 2- Zona PacĂ­fico (Pacific Zone): Longitude 105 W, includes the
-#    states of Baja California Sur; Chihuahua; Nayarit (excluding BahĂ­a
-#    de Banderas which lies in Central Zone); Sinaloa and Sonora.
-# 3- Zona Noroeste (Northwest Zone): Longitude 120 W, includes the
-#    state of Baja California.
-# 4- Zona Sureste (Southeast Zone): Longitude 75 W, includes the state
-#    of Quintana Roo.
-# 5- The islands, reefs and keys shall take their timezone from the
-#    longitude they are located at.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Mexico	1939	only	-	Feb	5	0:00	1:00	D
-Rule	Mexico	1939	only	-	Jun	25	0:00	0	S
-Rule	Mexico	1940	only	-	Dec	9	0:00	1:00	D
-Rule	Mexico	1941	only	-	Apr	1	0:00	0	S
-Rule	Mexico	1943	only	-	Dec	16	0:00	1:00	W # War
-Rule	Mexico	1944	only	-	May	1	0:00	0	S
-Rule	Mexico	1950	only	-	Feb	12	0:00	1:00	D
-Rule	Mexico	1950	only	-	Jul	30	0:00	0	S
-Rule	Mexico	1996	2000	-	Apr	Sun>=1	2:00	1:00	D
-Rule	Mexico	1996	2000	-	Oct	lastSun	2:00	0	S
-Rule	Mexico	2001	only	-	May	Sun>=1	2:00	1:00	D
-Rule	Mexico	2001	only	-	Sep	lastSun	2:00	0	S
-Rule	Mexico	2002	max	-	Apr	Sun>=1	2:00	1:00	D
-Rule	Mexico	2002	max	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-# Quintana Roo; represented by CancĂșn
-Zone America/Cancun	-5:47:04 -	LMT	1922 Jan  1  0:12:56
-			-6:00	-	CST	1981 Dec 23
-			-5:00	Mexico	E%sT	1998 Aug  2  2:00
-			-6:00	Mexico	C%sT	2015 Feb  1  2:00
-			-5:00	-	EST
-# Campeche, YucatĂĄn; represented by MĂ©rida
-Zone America/Merida	-5:58:28 -	LMT	1922 Jan  1  0:01:32
-			-6:00	-	CST	1981 Dec 23
-			-5:00	-	EST	1982 Dec  2
-			-6:00	Mexico	C%sT
-# Coahuila, Nuevo LeĂłn, Tamaulipas (near US border)
-# This includes the following municipalities:
-#   in Coahuila: Ocampo, Acuña, Zaragoza, Jiménez, Piedras Negras, Nava,
-#     Guerrero, Hidalgo.
-#   in Nuevo LeĂłn: AnĂĄhuac, Los Aldama.
-#   in Tamaulipas: Nuevo Laredo, Guerrero, Mier, Miguel AlemĂĄn, Camargo,
-#     Gustavo DĂ­az Ordaz, Reynosa, RĂ­o Bravo, Valle Hermoso, Matamoros.
-# See: Inicia mañana Horario de Verano en zona fronteriza, El Universal,
-# 2016-03-12
-# http://www.eluniversal.com.mx/articulo/estados/2016/03/12/inicia-manana-horario-de-verano-en-zona-fronteriza
-Zone America/Matamoros	-6:40:00 -	LMT	1921 Dec 31 23:20:00
-			-6:00	-	CST	1988
-			-6:00	US	C%sT	1989
-			-6:00	Mexico	C%sT	2010
-			-6:00	US	C%sT
-# Durango; Coahuila, Nuevo LeĂłn, Tamaulipas (away from US border)
-Zone America/Monterrey	-6:41:16 -	LMT	1921 Dec 31 23:18:44
-			-6:00	-	CST	1988
-			-6:00	US	C%sT	1989
-			-6:00	Mexico	C%sT
-# Central Mexico
-Zone America/Mexico_City -6:36:36 -	LMT	1922 Jan  1  0:23:24
-			-7:00	-	MST	1927 Jun 10 23:00
-			-6:00	-	CST	1930 Nov 15
-			-7:00	-	MST	1931 May  1 23:00
-			-6:00	-	CST	1931 Oct
-			-7:00	-	MST	1932 Apr  1
-			-6:00	Mexico	C%sT	2001 Sep 30  2:00
-			-6:00	-	CST	2002 Feb 20
-			-6:00	Mexico	C%sT
-# Chihuahua (near US border)
-# This includes the municipalities of Janos, AscensiĂłn, JuĂĄrez, Guadalupe,
-# PrĂĄxedis G Guerrero, Coyame del Sotol, Ojinaga, and Manuel Benavides.
-# (See the 2016-03-12 El Universal source mentioned above.)
-Zone America/Ojinaga	-6:57:40 -	LMT	1922 Jan  1  0:02:20
-			-7:00	-	MST	1927 Jun 10 23:00
-			-6:00	-	CST	1930 Nov 15
-			-7:00	-	MST	1931 May  1 23:00
-			-6:00	-	CST	1931 Oct
-			-7:00	-	MST	1932 Apr  1
-			-6:00	-	CST	1996
-			-6:00	Mexico	C%sT	1998
-			-6:00	-	CST	1998 Apr Sun>=1  3:00
-			-7:00	Mexico	M%sT	2010
-			-7:00	US	M%sT
-# Chihuahua (away from US border)
-Zone America/Chihuahua	-7:04:20 -	LMT	1921 Dec 31 23:55:40
-			-7:00	-	MST	1927 Jun 10 23:00
-			-6:00	-	CST	1930 Nov 15
-			-7:00	-	MST	1931 May  1 23:00
-			-6:00	-	CST	1931 Oct
-			-7:00	-	MST	1932 Apr  1
-			-6:00	-	CST	1996
-			-6:00	Mexico	C%sT	1998
-			-6:00	-	CST	1998 Apr Sun>=1  3:00
-			-7:00	Mexico	M%sT
-# Sonora
-Zone America/Hermosillo	-7:23:52 -	LMT	1921 Dec 31 23:36:08
-			-7:00	-	MST	1927 Jun 10 23:00
-			-6:00	-	CST	1930 Nov 15
-			-7:00	-	MST	1931 May  1 23:00
-			-6:00	-	CST	1931 Oct
-			-7:00	-	MST	1932 Apr  1
-			-6:00	-	CST	1942 Apr 24
-			-7:00	-	MST	1949 Jan 14
-			-8:00	-	PST	1970
-			-7:00	Mexico	M%sT	1999
-			-7:00	-	MST
-
-# From Alexander Krivenyshev (2010-04-21):
-# According to news, BahĂ­a de Banderas (Mexican state of Nayarit)
-# changed time zone UTC-7 to new time zone UTC-6 on April 4, 2010 (to
-# share the same time zone as nearby city Puerto Vallarta, Jalisco).
-#
-# (Spanish)
-# BahĂ­a de Banderas homologa su horario al del centro del
-# paĂ­s, a partir de este domingo
-# http://www.nayarit.gob.mx/notes.asp?id=20748
-#
-# BahĂ­a de Banderas homologa su horario con el del Centro del
-# PaĂ­s
-# http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50
-#
-# (English)
-# Puerto Vallarta and BahĂ­a de Banderas: One Time Zone
-# http://virtualvallarta.com/puertovallarta/puertovallarta/localnews/2009-12-03-Puerto-Vallarta-and-Bahia-de-Banderas-One-Time-Zone.shtml
-# http://www.worldtimezone.com/dst_news/dst_news_mexico08.html
-#
-# "Mexico's Senate approved the amendments to the Mexican Schedule System that
-# will allow BahĂ­a de Banderas and Puerto Vallarta to share the same time
-# zone ..."
-# Baja California Sur, Nayarit, Sinaloa
-
-# From Arthur David Olson (2010-05-01):
-# Use "Bahia_Banderas" to keep the name to fourteen characters.
-
-# MazatlĂĄn
-Zone America/Mazatlan	-7:05:40 -	LMT	1921 Dec 31 23:54:20
-			-7:00	-	MST	1927 Jun 10 23:00
-			-6:00	-	CST	1930 Nov 15
-			-7:00	-	MST	1931 May  1 23:00
-			-6:00	-	CST	1931 Oct
-			-7:00	-	MST	1932 Apr  1
-			-6:00	-	CST	1942 Apr 24
-			-7:00	-	MST	1949 Jan 14
-			-8:00	-	PST	1970
-			-7:00	Mexico	M%sT
-
-# BahĂ­a de Banderas
-Zone America/Bahia_Banderas	-7:01:00 -	LMT	1921 Dec 31 23:59:00
-			-7:00	-	MST	1927 Jun 10 23:00
-			-6:00	-	CST	1930 Nov 15
-			-7:00	-	MST	1931 May  1 23:00
-			-6:00	-	CST	1931 Oct
-			-7:00	-	MST	1932 Apr  1
-			-6:00	-	CST	1942 Apr 24
-			-7:00	-	MST	1949 Jan 14
-			-8:00	-	PST	1970
-			-7:00	Mexico	M%sT	2010 Apr  4  2:00
-			-6:00	Mexico	C%sT
-
-# Baja California
-Zone America/Tijuana	-7:48:04 -	LMT	1922 Jan  1  0:11:56
-			-7:00	-	MST	1924
-			-8:00	-	PST	1927 Jun 10 23:00
-			-7:00	-	MST	1930 Nov 15
-			-8:00	-	PST	1931 Apr  1
-			-8:00	1:00	PDT	1931 Sep 30
-			-8:00	-	PST	1942 Apr 24
-			-8:00	1:00	PWT	1945 Aug 14 23:00u
-			-8:00	1:00	PPT	1945 Nov 12 # Peace
-			-8:00	-	PST	1948 Apr  5
-			-8:00	1:00	PDT	1949 Jan 14
-			-8:00	-	PST	1954
-			-8:00	CA	P%sT	1961
-			-8:00	-	PST	1976
-			-8:00	US	P%sT	1996
-			-8:00	Mexico	P%sT	2001
-			-8:00	US	P%sT	2002 Feb 20
-			-8:00	Mexico	P%sT	2010
-			-8:00	US	P%sT
-# From Paul Eggert (2006-03-22):
-# Formerly there was an America/Ensenada zone, which differed from
-# America/Tijuana only in that it did not observe DST from 1976
-# through 1995.  This was as per Shanks (1999).  But Shanks & Pottenger say
-# Ensenada did not observe DST from 1948 through 1975.  Guy Harris reports
-# that the 1987 OAG says "Only Ensenada, Mexicali, San Felipe and
-# Tijuana observe DST," which agrees with Shanks & Pottenger but implies that
-# DST-observance was a town-by-town matter back then.  This concerns
-# data after 1970 so most likely there should be at least one Zone
-# other than America/Tijuana for Baja, but it's not clear yet what its
-# name or contents should be.
-#
-# From Paul Eggert (2015-10-08):
-# Formerly there was an America/Santa_Isabel zone, but this appears to
-# have come from a misreading of
-# http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010
-# It has been moved to the 'backward' file.
-#
-#
-# Revillagigedo Is
-# no information
-
-###############################################################################
-
-# Anguilla
-# Antigua and Barbuda
-# See America/Port_of_Spain.
-
-# Bahamas
-#
-# For 1899 Milne gives -5:09:29.5; round that.
-#
-# From Sue Williams (2006-12-07):
-# The Bahamas announced about a month ago that they plan to change their DST
-# rules to sync with the U.S. starting in 2007....
-# http://www.jonesbahamas.com/?c=45&a=10412
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Bahamas	1964	1975	-	Oct	lastSun	2:00	0	S
-Rule	Bahamas	1964	1975	-	Apr	lastSun	2:00	1:00	D
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Nassau	-5:09:30 -	LMT	1912 Mar 2
-			-5:00	Bahamas	E%sT	1976
-			-5:00	US	E%sT
-
-# Barbados
-
-# For 1899 Milne gives -3:58:29.2; round that.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Barb	1977	only	-	Jun	12	2:00	1:00	D
-Rule	Barb	1977	1978	-	Oct	Sun>=1	2:00	0	S
-Rule	Barb	1978	1980	-	Apr	Sun>=15	2:00	1:00	D
-Rule	Barb	1979	only	-	Sep	30	2:00	0	S
-Rule	Barb	1980	only	-	Sep	25	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Barbados	-3:58:29 -	LMT	1924 # Bridgetown
-			-3:58:29 -	BMT	1932 # Bridgetown Mean Time
-			-4:00	Barb	A%sT
-
-# Belize
-# Whitman entirely disagrees with Shanks; go with Shanks & Pottenger.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Belize	1918	1942	-	Oct	Sun>=2	0:00	0:30	-0530
-Rule	Belize	1919	1943	-	Feb	Sun>=9	0:00	0	CST
-Rule	Belize	1973	only	-	Dec	 5	0:00	1:00	CDT
-Rule	Belize	1974	only	-	Feb	 9	0:00	0	CST
-Rule	Belize	1982	only	-	Dec	18	0:00	1:00	CDT
-Rule	Belize	1983	only	-	Feb	12	0:00	0	CST
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Belize	-5:52:48 -	LMT	1912 Apr
-			-6:00	Belize	%s
-
-# Bermuda
-
-# For 1899 Milne gives -4:19:18.3 as the meridian of the clock tower,
-# Bermuda dockyard, Ireland I; round that.
-
-# From Dan Jones, reporting in The Royal Gazette (2006-06-26):
-
-# Next year, however, clocks in the US will go forward on the second Sunday
-# in March, until the first Sunday in November.  And, after the Time Zone
-# (Seasonal Variation) Bill 2006 was passed in the House of Assembly on
-# Friday, the same thing will happen in Bermuda.
-# http://www.theroyalgazette.com/apps/pbcs.dll/article?AID=/20060529/NEWS/105290135
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Atlantic/Bermuda	-4:19:18 -	LMT	1930 Jan  1  2:00 # Hamilton
-			-4:00	-	AST	1974 Apr 28  2:00
-			-4:00	Canada	A%sT	1976
-			-4:00	US	A%sT
-
-# Cayman Is
-# See America/Panama.
-
-# Costa Rica
-
-# Milne gives -5:36:13.3 as San José mean time; round to nearest.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	CR	1979	1980	-	Feb	lastSun	0:00	1:00	D
-Rule	CR	1979	1980	-	Jun	Sun>=1	0:00	0	S
-Rule	CR	1991	1992	-	Jan	Sat>=15	0:00	1:00	D
-# IATA SSIM (1991-09) says the following was at 1:00;
-# go with Shanks & Pottenger.
-Rule	CR	1991	only	-	Jul	 1	0:00	0	S
-Rule	CR	1992	only	-	Mar	15	0:00	0	S
-# There are too many San Josés elsewhere, so we'll use 'Costa Rica'.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Costa_Rica	-5:36:13 -	LMT	1890        # San José
-			-5:36:13 -	SJMT	1921 Jan 15 # San José Mean Time
-			-6:00	CR	C%sT
-# Coco
-# no information; probably like America/Costa_Rica
-
-# Cuba
-
-# From Paul Eggert (2013-02-21):
-# Milne gives -5:28:50.45 for the observatory at Havana, -5:29:23.57
-# for the port, and -5:30 for meteorological observations.
-# For now, stick with Shanks & Pottenger.
-
-# From Arthur David Olson (1999-03-29):
-# The 1999-03-28 exhibition baseball game held in Havana, Cuba, between
-# the Cuban National Team and the Baltimore Orioles was carried live on
-# the Orioles Radio Network, including affiliate WTOP in Washington, DC.
-# During the game, play-by-play announcer Jim Hunter noted that
-# "We'll be losing two hours of sleep...Cuba switched to Daylight Saving
-# Time today."  (The "two hour" remark referred to losing one hour of
-# sleep on 1999-03-28 - when the announcers were in Cuba as it switched
-# to DST - and one more hour on 1999-04-04 - when the announcers will have
-# returned to Baltimore, which switches on that date.)
-
-# From Steffen Thorsen (2013-11-11):
-# DST start in Cuba in 2004 ... does not follow the same rules as the
-# years before.  The correct date should be Sunday 2004-03-28 00:00 ...
-# https://web.archive.org/web/20040402060750/http://www.granma.cu/espanol/2004/marzo/sab27/reloj.html
-
-# From Evert van der Veer via Steffen Thorsen (2004-10-28):
-# Cuba is not going back to standard time this year.
-# From Paul Eggert (2006-03-22):
-# http://www.granma.cu/ingles/2004/septiembre/juev30/41medid-i.html
-# says that it's due to a problem at the Antonio Guiteras
-# thermoelectric plant, and says "This October there will be no return
-# to normal hours (after daylight saving time)".
-# For now, let's assume that it's a temporary measure.
-
-# From Carlos A. Carnero Delgado (2005-11-12):
-# This year (just like in 2004-2005) there's no change in time zone
-# adjustment in Cuba.  We will stay in daylight saving time:
-# http://www.granma.cu/espanol/2005/noviembre/mier9/horario.html
-
-# From Jesper NĂžrgaard Welen (2006-10-21):
-# An article in GRANMA INTERNACIONAL claims that Cuba will end
-# the 3 years of permanent DST next weekend, see
-# http://www.granma.cu/ingles/2006/octubre/lun16/43horario.html
-# "On Saturday night, October 28 going into Sunday, October 29, at 01:00,
-# watches should be set back one hour - going back to 00:00 hours - returning
-# to the normal schedule....
-
-# From Paul Eggert (2007-03-02):
-# <http://www.granma.cubaweb.cu/english/news/art89.html>, dated yesterday,
-# says Cuban clocks will advance at midnight on March 10.
-# For lack of better information, assume Cuba will use US rules,
-# except that it switches at midnight standard time as usual.
-#
-# From Steffen Thorsen (2007-10-25):
-# Carlos Alberto Fonseca Arauz informed me that Cuba will end DST one week
-# earlier - on the last Sunday of October, just like in 2006.
-#
-# He supplied these references:
-#
-# http://www.prensalatina.com.mx/article.asp?ID=%7B4CC32C1B-A9F7-42FB-8A07-8631AFC923AF%7D&language=ES
-# http://actualidad.terra.es/sociedad/articulo/cuba_llama_ahorrar_energia_cambio_1957044.htm
-#
-# From Alex Krivenyshev (2007-10-25):
-# Here is also article from Granma (Cuba):
-#
-# RegirĂĄ el Horario Normal desde el prĂłximo domingo 28 de octubre
-# http://www.granma.cubaweb.cu/2007/10/24/nacional/artic07.html
-#
-# http://www.worldtimezone.com/dst_news/dst_news_cuba03.html
-
-# From Arthur David Olson (2008-03-09):
-# I'm in Maryland which is now observing United States Eastern Daylight
-# Time. At 9:44 local time I used RealPlayer to listen to
-# http://media.enet.cu/radioreloj
-# a Cuban information station, and heard
-# the time announced as "ocho cuarenta y cuatro" ("eight forty-four"),
-# indicating that Cuba is still on standard time.
-
-# From Steffen Thorsen (2008-03-12):
-# It seems that Cuba will start DST on Sunday, 2007-03-16...
-# It was announced yesterday, according to this source (in Spanish):
-# http://www.nnc.cubaweb.cu/marzo-2008/cien-1-11-3-08.htm
-#
-# Some more background information is posted here:
-# https://www.timeanddate.com/news/time/cuba-starts-dst-march-16.html
-#
-# The article also says that Cuba has been observing DST since 1963,
-# while Shanks (and tzdata) has 1965 as the first date (except in the
-# 1940's). Many other web pages in Cuba also claim that it has been
-# observed since 1963, but with the exception of 1970 - an exception
-# which is not present in tzdata/Shanks. So there is a chance we need to
-# change some historic records as well.
-#
-# One example:
-# http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm
-
-# From Jesper NĂžrgaard Welen (2008-03-13):
-# The Cuban time change has just been confirmed on the most authoritative
-# web site, the Granma.  Please check out
-# http://www.granma.cubaweb.cu/2008/03/13/nacional/artic10.html
-#
-# Basically as expected after Steffen Thorsen's information, the change
-# will take place midnight between Saturday and Sunday.
-
-# From Arthur David Olson (2008-03-12):
-# Assume Sun>=15 (third Sunday) going forward.
-
-# From Alexander Krivenyshev (2009-03-04)
-# According to the Radio Reloj - Cuba will start Daylight Saving Time on
-# midnight between Saturday, March 07, 2009 and Sunday, March 08, 2009-
-# not on midnight March 14 / March 15 as previously thought.
-#
-# http://www.worldtimezone.com/dst_news/dst_news_cuba05.html
-# (in Spanish)
-
-# From Arthur David Olson (2009-03-09)
-# I listened over the Internet to
-# http://media.enet.cu/readioreloj
-# this morning; when it was 10:05 a. m. here in Bethesda, Maryland the
-# the time was announced as "diez cinco" - the same time as here, indicating
-# that has indeed switched to DST. Assume second Sunday from 2009 forward.
-
-# From Steffen Thorsen (2011-03-08):
-# Granma announced that Cuba is going to start DST on 2011-03-20 00:00:00
-# this year. Nothing about the end date known so far (if that has
-# changed at all).
-#
-# Source:
-# http://granma.co.cu/2011/03/08/nacional/artic01.html
-#
-# Our info:
-# https://www.timeanddate.com/news/time/cuba-starts-dst-2011.html
-#
-# From Steffen Thorsen (2011-10-30)
-# Cuba will end DST two weeks later this year. Instead of going back
-# tonight, it has been delayed to 2011-11-13 at 01:00.
-#
-# One source (Spanish)
-# http://www.radioangulo.cu/noticias/cuba/17105-cuba-restablecera-el-horario-del-meridiano-de-greenwich.html
-#
-# Our page:
-# https://www.timeanddate.com/news/time/cuba-time-changes-2011.html
-#
-# From Steffen Thorsen (2012-03-01)
-# According to Radio Reloj, Cuba will start DST on Midnight between March
-# 31 and April 1.
-#
-# Radio Reloj has the following info (Spanish):
-# http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril
-#
-# Our info on it:
-# https://www.timeanddate.com/news/time/cuba-starts-dst-2012.html
-
-# From Steffen Thorsen (2012-11-03):
-# Radio Reloj and many other sources report that Cuba is changing back
-# to standard time on 2012-11-04:
-# http://www.radioreloj.cu/index.php/noticias-radio-reloj/36-nacionales/9961-regira-horario-normal-en-cuba-desde-el-domingo-cuatro-de-noviembre
-# From Paul Eggert (2012-11-03):
-# For now, assume the future rule is first Sunday in November.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Cuba	1928	only	-	Jun	10	0:00	1:00	D
-Rule	Cuba	1928	only	-	Oct	10	0:00	0	S
-Rule	Cuba	1940	1942	-	Jun	Sun>=1	0:00	1:00	D
-Rule	Cuba	1940	1942	-	Sep	Sun>=1	0:00	0	S
-Rule	Cuba	1945	1946	-	Jun	Sun>=1	0:00	1:00	D
-Rule	Cuba	1945	1946	-	Sep	Sun>=1	0:00	0	S
-Rule	Cuba	1965	only	-	Jun	1	0:00	1:00	D
-Rule	Cuba	1965	only	-	Sep	30	0:00	0	S
-Rule	Cuba	1966	only	-	May	29	0:00	1:00	D
-Rule	Cuba	1966	only	-	Oct	2	0:00	0	S
-Rule	Cuba	1967	only	-	Apr	8	0:00	1:00	D
-Rule	Cuba	1967	1968	-	Sep	Sun>=8	0:00	0	S
-Rule	Cuba	1968	only	-	Apr	14	0:00	1:00	D
-Rule	Cuba	1969	1977	-	Apr	lastSun	0:00	1:00	D
-Rule	Cuba	1969	1971	-	Oct	lastSun	0:00	0	S
-Rule	Cuba	1972	1974	-	Oct	8	0:00	0	S
-Rule	Cuba	1975	1977	-	Oct	lastSun	0:00	0	S
-Rule	Cuba	1978	only	-	May	7	0:00	1:00	D
-Rule	Cuba	1978	1990	-	Oct	Sun>=8	0:00	0	S
-Rule	Cuba	1979	1980	-	Mar	Sun>=15	0:00	1:00	D
-Rule	Cuba	1981	1985	-	May	Sun>=5	0:00	1:00	D
-Rule	Cuba	1986	1989	-	Mar	Sun>=14	0:00	1:00	D
-Rule	Cuba	1990	1997	-	Apr	Sun>=1	0:00	1:00	D
-Rule	Cuba	1991	1995	-	Oct	Sun>=8	0:00s	0	S
-Rule	Cuba	1996	only	-	Oct	 6	0:00s	0	S
-Rule	Cuba	1997	only	-	Oct	12	0:00s	0	S
-Rule	Cuba	1998	1999	-	Mar	lastSun	0:00s	1:00	D
-Rule	Cuba	1998	2003	-	Oct	lastSun	0:00s	0	S
-Rule	Cuba	2000	2003	-	Apr	Sun>=1	0:00s	1:00	D
-Rule	Cuba	2004	only	-	Mar	lastSun	0:00s	1:00	D
-Rule	Cuba	2006	2010	-	Oct	lastSun	0:00s	0	S
-Rule	Cuba	2007	only	-	Mar	Sun>=8	0:00s	1:00	D
-Rule	Cuba	2008	only	-	Mar	Sun>=15	0:00s	1:00	D
-Rule	Cuba	2009	2010	-	Mar	Sun>=8	0:00s	1:00	D
-Rule	Cuba	2011	only	-	Mar	Sun>=15	0:00s	1:00	D
-Rule	Cuba	2011	only	-	Nov	13	0:00s	0	S
-Rule	Cuba	2012	only	-	Apr	1	0:00s	1:00	D
-Rule	Cuba	2012	max	-	Nov	Sun>=1	0:00s	0	S
-Rule	Cuba	2013	max	-	Mar	Sun>=8	0:00s	1:00	D
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Havana	-5:29:28 -	LMT	1890
-			-5:29:36 -	HMT	1925 Jul 19 12:00 # Havana MT
-			-5:00	Cuba	C%sT
-
-# Dominica
-# See America/Port_of_Spain.
-
-# Dominican Republic
-
-# From Steffen Thorsen (2000-10-30):
-# Enrique Morales reported to me that the Dominican Republic has changed the
-# time zone to Eastern Standard Time as of Sunday 29 at 2 am....
-# http://www.listin.com.do/antes/261000/republica/princi.html
-
-# From Paul Eggert (2000-12-04):
-# That URL (2000-10-26, in Spanish) says they planned to use US-style DST.
-
-# From Rives McDow (2000-12-01):
-# Dominican Republic changed its mind and presidential decree on Tuesday,
-# November 28, 2000, with a new decree.  On Sunday, December 3 at 1:00 AM the
-# Dominican Republic will be reverting to 8 hours from the International Date
-# Line, and will not be using DST in the foreseeable future.  The reason they
-# decided to use DST was to be in synch with Puerto Rico, who was also going
-# to implement DST.  When Puerto Rico didn't implement DST, the president
-# decided to revert.
-
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	DR	1966	only	-	Oct	30	0:00	1:00	EDT
-Rule	DR	1967	only	-	Feb	28	0:00	0	EST
-Rule	DR	1969	1973	-	Oct	lastSun	0:00	0:30	-0430
-Rule	DR	1970	only	-	Feb	21	0:00	0	EST
-Rule	DR	1971	only	-	Jan	20	0:00	0	EST
-Rule	DR	1972	1974	-	Jan	21	0:00	0	EST
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Santo_Domingo -4:39:36 -	LMT	1890
-			-4:40	-	SDMT	1933 Apr  1 12:00 # S. Dom. MT
-			-5:00	DR	%s	1974 Oct 27
-			-4:00	-	AST	2000 Oct 29  2:00
-			-5:00	US	E%sT	2000 Dec  3  1:00
-			-4:00	-	AST
-
-# El Salvador
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Salv	1987	1988	-	May	Sun>=1	0:00	1:00	D
-Rule	Salv	1987	1988	-	Sep	lastSun	0:00	0	S
-# There are too many San Salvadors elsewhere, so use America/El_Salvador
-# instead of America/San_Salvador.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/El_Salvador -5:56:48 -	LMT	1921 # San Salvador
-			-6:00	Salv	C%sT
-
-# Grenada
-# Guadeloupe
-# St Barthélemy
-# St Martin (French part)
-# See America/Port_of_Spain.
-
-# Guatemala
-#
-# From Gwillim Law (2006-04-22), after a heads-up from Oscar van Vlijmen:
-# Diario Co Latino, at
-# <http://www.diariocolatino.com/internacionales/detalles.asp?NewsID=8079>,
-# says in an article dated 2006-04-19 that the Guatemalan government had
-# decided on that date to advance official time by 60 minutes, to lessen the
-# impact of the elevated cost of oil....  Daylight saving time will last from
-# 2006-04-29 24:00 (Guatemalan standard time) to 2006-09-30 (time unspecified).
-# From Paul Eggert (2006-06-22):
-# The Ministry of Energy and Mines, press release CP-15/2006
-# (2006-04-19), says DST ends at 24:00.  See
-# http://www.sieca.org.gt/Sitio_publico/Energeticos/Doc/Medidas/Cambio_Horario_Nac_190406.pdf
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Guat	1973	only	-	Nov	25	0:00	1:00	D
-Rule	Guat	1974	only	-	Feb	24	0:00	0	S
-Rule	Guat	1983	only	-	May	21	0:00	1:00	D
-Rule	Guat	1983	only	-	Sep	22	0:00	0	S
-Rule	Guat	1991	only	-	Mar	23	0:00	1:00	D
-Rule	Guat	1991	only	-	Sep	 7	0:00	0	S
-Rule	Guat	2006	only	-	Apr	30	0:00	1:00	D
-Rule	Guat	2006	only	-	Oct	 1	0:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Guatemala	-6:02:04 -	LMT	1918 Oct 5
-			-6:00	Guat	C%sT
-
-# Haiti
-# From Gwillim Law (2005-04-15):
-# Risto O. NykÀnen wrote me that Haiti is now on DST.
-# I searched for confirmation, and I found a press release
-# on the Web page of the Haitian Consulate in Chicago (2005-03-31),
-# <http://www.haitianconsulate.org/time.doc>.  Translated from French, it says:
-#
-#  "The Prime Minister's Communication Office notifies the public in general
-#   and the press in particular that, following a decision of the Interior
-#   Ministry and the Territorial Collectivities [I suppose that means the
-#   provinces], Haiti will move to Eastern Daylight Time in the night from next
-#   Saturday the 2nd to Sunday the 3rd.
-#
-#  "Consequently, the Prime Minister's Communication Office wishes to inform
-#   the population that the country's clocks will be set forward one hour
-#   starting at midnight.  This provision will hold until the last Saturday in
-#   October 2005.
-#
-#  "Port-au-Prince, March 31, 2005"
-#
-# From Steffen Thorsen (2006-04-04):
-# I have been informed by users that Haiti observes DST this year like
-# last year, so the current "only" rule for 2005 might be changed to a
-# "max" rule or to last until 2006. (Who knows if they will observe DST
-# next year or if they will extend their DST like US/Canada next year).
-#
-# I have found this article about it (in French):
-# http://www.haitipressnetwork.com/news.cfm?articleID=7612
-#
-# The reason seems to be an energy crisis.
-
-# From Stephen Colebourne (2007-02-22):
-# Some IATA info: Haiti won't be having DST in 2007.
-
-# From Steffen Thorsen (2012-03-11):
-# According to several news sources, Haiti will observe DST this year,
-# apparently using the same start and end date as USA/Canada.
-# So this means they have already changed their time.
-#
-# http://www.alterpresse.org/spip.php?article12510
-# http://radiovision2000haiti.net/home/?p=13253
-#
-# From Arthur David Olson (2012-03-11):
-# The alterpresse.org source seems to show a US-style leap from 2:00 a.m. to
-# 3:00 a.m. rather than the traditional Haitian jump at midnight.
-# Assume a US-style fall back as well.
-
-# From Steffen Thorsen (2013-03-10):
-# It appears that Haiti is observing DST this year as well, same rules
-# as US/Canada.  They did it last year as well, and it looks like they
-# are going to observe DST every year now...
-#
-# http://radiovision2000haiti.net/public/haiti-avis-changement-dheure-dimanche/
-# http://www.canalplushaiti.net/?p=6714
-
-# From Steffen Thorsen (2016-03-12):
-# Jean Antoine, editor of www.haiti-reference.com informed us that Haiti
-# are not going on DST this year.  Several other resources confirm this: ...
-# https://www.radiotelevisioncaraibes.com/presse/heure_d_t_pas_de_changement_d_heure_pr_vu_pour_cet_ann_e.html
-# https://www.vantbefinfo.com/changement-dheure-pas-pour-haiti/
-# http://news.anmwe.com/haiti-lheure-nationale-ne-sera-ni-avancee-ni-reculee-cette-annee/
-
-# From Steffen Thorsen (2017-03-12):
-# We have received 4 mails from different people telling that Haiti
-# has started DST again today, and this source seems to confirm that,
-# I have not been able to find a more authoritative source:
-# https://www.haitilibre.com/en/news-20319-haiti-notices-time-change-in-haiti.html
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Haiti	1983	only	-	May	8	0:00	1:00	D
-Rule	Haiti	1984	1987	-	Apr	lastSun	0:00	1:00	D
-Rule	Haiti	1983	1987	-	Oct	lastSun	0:00	0	S
-# Shanks & Pottenger say AT is 2:00, but IATA SSIM (1991/1997) says 1:00s.
-# Go with IATA.
-Rule	Haiti	1988	1997	-	Apr	Sun>=1	1:00s	1:00	D
-Rule	Haiti	1988	1997	-	Oct	lastSun	1:00s	0	S
-Rule	Haiti	2005	2006	-	Apr	Sun>=1	0:00	1:00	D
-Rule	Haiti	2005	2006	-	Oct	lastSun	0:00	0	S
-Rule	Haiti	2012	2015	-	Mar	Sun>=8	2:00	1:00	D
-Rule	Haiti	2012	2015	-	Nov	Sun>=1	2:00	0	S
-Rule	Haiti	2017	max	-	Mar	Sun>=8	2:00	1:00	D
-Rule	Haiti	2017	max	-	Nov	Sun>=1	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Port-au-Prince -4:49:20 -	LMT	1890
-			-4:49	-	PPMT	1917 Jan 24 12:00 # P-a-P MT
-			-5:00	Haiti	E%sT
-
-# Honduras
-# Shanks & Pottenger say 1921 Jan 1; go with Whitman's more precise Apr 1.
-
-# From Paul Eggert (2006-05-05):
-# worldtimezone.com reports a 2006-05-02 Spanish-language AP article
-# saying Honduras will start using DST midnight Saturday, effective 4
-# months until September.  La Tribuna reported today
-# <http://www.latribuna.hn/99299.html> that Manuel Zelaya, the president
-# of Honduras, refused to back down on this.
-
-# From Jesper NĂžrgaard Welen (2006-08-08):
-# It seems that Honduras has returned from DST to standard time this Monday at
-# 00:00 hours (prolonging Sunday to 25 hours duration).
-# http://www.worldtimezone.com/dst_news/dst_news_honduras04.html
-
-# From Paul Eggert (2006-08-08):
-# Also see Diario El Heraldo, The country returns to standard time (2006-08-08).
-# http://www.elheraldo.hn/nota.php?nid=54941&sec=12
-# It mentions executive decree 18-2006.
-
-# From Steffen Thorsen (2006-08-17):
-# Honduras will observe DST from 2007 to 2009, exact dates are not
-# published, I have located this authoritative source:
-# http://www.presidencia.gob.hn/noticia.aspx?nId=47
-
-# From Steffen Thorsen (2007-03-30):
-# http://www.laprensahn.com/pais_nota.php?id04962=7386
-# So it seems that Honduras will not enter DST this year....
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Hond	1987	1988	-	May	Sun>=1	0:00	1:00	D
-Rule	Hond	1987	1988	-	Sep	lastSun	0:00	0	S
-Rule	Hond	2006	only	-	May	Sun>=1	0:00	1:00	D
-Rule	Hond	2006	only	-	Aug	Mon>=1	0:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Tegucigalpa -5:48:52 -	LMT	1921 Apr
-			-6:00	Hond	C%sT
-#
-# Great Swan I ceded by US to Honduras in 1972
-
-# Jamaica
-# Shanks & Pottenger give -5:07:12, but Milne records -5:07:10.41 from an
-# unspecified official document, and says "This time is used throughout the
-# island".  Go with Milne.  Round to the nearest second as required by zic.
-#
-# Shanks & Pottenger give April 28 for the 1974 spring-forward transition, but
-# Lance Neita writes that Prime Minister Michael Manley decreed it January 5.
-# Assume Neita meant Jan 6 02:00, the same as the US.  Neita also writes that
-# Manley's supporters associated this act with Manley's nickname "Joshua"
-# (recall that in the Bible the sun stood still at Joshua's request),
-# and with the Rod of Correction which Manley said he had received from
-# Haile Selassie, Emperor of Ethiopia.  See:
-# Neita L. The politician in all of us. Jamaica Observer 2014-09-20
-# http://www.jamaicaobserver.com/columns/The-politician-in-all-of-us_17573647
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Jamaica	-5:07:10 -	LMT	1890        # Kingston
-			-5:07:10 -	KMT	1912 Feb    # Kingston Mean Time
-			-5:00	-	EST	1974
-			-5:00	US	E%sT	1984
-			-5:00	-	EST
-
-# Martinique
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Martinique	-4:04:20 -      LMT	1890        # Fort-de-France
-			-4:04:20 -	FFMT	1911 May    # Fort-de-France MT
-			-4:00	-	AST	1980 Apr  6
-			-4:00	1:00	ADT	1980 Sep 28
-			-4:00	-	AST
-
-# Montserrat
-# See America/Port_of_Spain.
-
-# Nicaragua
-#
-# This uses Shanks & Pottenger for times before 2005.
-#
-# From Steffen Thorsen (2005-04-12):
-# I've got reports from 8 different people that Nicaragua just started
-# DST on Sunday 2005-04-10, in order to save energy because of
-# expensive petroleum.  The exact end date for DST is not yet
-# announced, only "September" but some sites also say "mid-September".
-# Some background information is available on the President's official site:
-# http://www.presidencia.gob.ni/Presidencia/Files_index/Secretaria/Notas%20de%20Prensa/Presidente/2005/ABRIL/Gobierno-de-nicaragua-adelanta-hora-oficial-06abril.htm
-# The Decree, no 23-2005 is available here:
-# http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2005/Decreto%2023-2005%20Se%20adelanta%20en%20una%20hora%20en%20todo%20el%20territorio%20nacional%20apartir%20de%20las%2024horas%20del%2009%20de%20Abril.pdf
-#
-# From Paul Eggert (2005-05-01):
-# The decree doesn't say anything about daylight saving, but for now let's
-# assume that it is daylight saving....
-#
-# From Gwillim Law (2005-04-21):
-# The Associated Press story on the time change, which can be found at
-# http://www.lapalmainteractivo.com/guias/content/gen/ap/America_Latina/AMC_GEN_NICARAGUA_HORA.html
-# and elsewhere, says (fifth paragraph, translated from Spanish): "The last
-# time that a change of clocks was applied to save energy was in the year 2000
-# during the Arnoldo AlemĂĄn administration."...
-# The northamerica file says that Nicaragua has been on UTC-6 continuously
-# since December 1998.  I wasn't able to find any details of Nicaraguan time
-# changes in 2000.  Perhaps a note could be added to the northamerica file, to
-# the effect that we have indirect evidence that DST was observed in 2000.
-#
-# From Jesper NĂžrgaard Welen (2005-11-02):
-# Nicaragua left DST the 2005-10-02 at 00:00 (local time).
-# http://www.presidencia.gob.ni/presidencia/files_index/secretaria/comunicados/2005/septiembre/26septiembre-cambio-hora.htm
-# (2005-09-26)
-#
-# From Jesper NĂžrgaard Welen (2006-05-05):
-# http://www.elnuevodiario.com.ni/2006/05/01/nacionales/18410
-# (my informal translation)
-# By order of the president of the republic, Enrique Bolaños, Nicaragua
-# advanced by sixty minutes their official time, yesterday at 2 in the
-# morning, and will stay that way until 30th of September.
-#
-# From Jesper NĂžrgaard Welen (2006-09-30):
-# http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2006/D-063-2006P-PRN-Cambio-Hora.pdf
-# My informal translation runs:
-# The natural sun time is restored in all the national territory, in that the
-# time is returned one hour at 01:00 am of October 1 of 2006.
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Nic	1979	1980	-	Mar	Sun>=16	0:00	1:00	D
-Rule	Nic	1979	1980	-	Jun	Mon>=23	0:00	0	S
-Rule	Nic	2005	only	-	Apr	10	0:00	1:00	D
-Rule	Nic	2005	only	-	Oct	Sun>=1	0:00	0	S
-Rule	Nic	2006	only	-	Apr	30	2:00	1:00	D
-Rule	Nic	2006	only	-	Oct	Sun>=1	1:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Managua	-5:45:08 -	LMT	1890
-			-5:45:12 -	MMT	1934 Jun 23 # Managua Mean Time?
-			-6:00	-	CST	1973 May
-			-5:00	-	EST	1975 Feb 16
-			-6:00	Nic	C%sT	1992 Jan  1  4:00
-			-5:00	-	EST	1992 Sep 24
-			-6:00	-	CST	1993
-			-5:00	-	EST	1997
-			-6:00	Nic	C%sT
-
-# Panama
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Panama	-5:18:08 -	LMT	1890
-			-5:19:36 -	CMT	1908 Apr 22 # ColĂłn Mean Time
-			-5:00	-	EST
-Link America/Panama America/Cayman
-
-# Puerto Rico
-# There are too many San Juans elsewhere, so we'll use 'Puerto_Rico'.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Puerto_Rico -4:24:25 -	LMT	1899 Mar 28 12:00 # San Juan
-			-4:00	-	AST	1942 May  3
-			-4:00	US	A%sT	1946
-			-4:00	-	AST
-
-# St Kitts-Nevis
-# St Lucia
-# See America/Port_of_Spain.
-
-# St Pierre and Miquelon
-# There are too many St Pierres elsewhere, so we'll use 'Miquelon'.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Miquelon	-3:44:40 -	LMT	1911 May 15 # St Pierre
-			-4:00	-	AST	1980 May
-			-3:00	-	-03	1987
-			-3:00	Canada	-03/-02
-
-# St Vincent and the Grenadines
-# See America/Port_of_Spain.
-
-# Turks and Caicos
-#
-# From Chris Dunn in
-# https://bugs.debian.org/415007
-# (2007-03-15): In the Turks & Caicos Islands (America/Grand_Turk) the
-# daylight saving dates for time changes have been adjusted to match
-# the recent U.S. change of dates.
-#
-# From Brian Inglis (2007-04-28):
-# http://www.turksandcaicos.tc/calendar/index.htm [2007-04-26]
-# there is an entry for Nov 4 "Daylight Savings Time Ends 2007" and three
-# rows before that there is an out of date entry for Oct:
-# "Eastern Standard Times Begins 2007
-# Clocks are set back one hour at 2:00 a.m. local Daylight Saving Time"
-# indicating that the normal ET rules are followed.
-#
-# From Paul Eggert (2014-08-19):
-# The 2014-08-13 Cabinet meeting decided to stay on UT -04 year-round.  See:
-# http://tcweeklynews.com/daylight-savings-time-to-be-maintained-p5353-127.htm
-# Model this as a switch from EST/EDT to AST ...
-# From Chris Walton (2014-11-04):
-# ... the TCI government appears to have delayed the switch to
-# "permanent daylight saving time" by one year....
-# http://tcweeklynews.com/time-change-to-go-ahead-this-november-p5437-127.htm
-#
-# From the Turks & Caicos Cabinet (2017-07-20), heads-up from Steffen Thorsen:
-# ... agreed to the reintroduction in TCI of Daylight Saving Time (DST)
-# during the summer months and Standard Time, also known as Local
-# Time, during the winter months with effect from April 2018 ...
-# https://www.gov.uk/government/news/turks-and-caicos-post-cabinet-meeting-statement--3
-#
-# From Paul Eggert (2017-08-26):
-# The date of effect of the spring 2018 change appears to be March 11,
-# which makes more sense.  See: Hamilton D. Time change back
-# by March 2018 for TCI. Magnetic Media. 2017-08-25.
-# http://magneticmediatv.com/2017/08/time-change-back-by-march-2018-for-tci/
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Grand_Turk	-4:44:32 -	LMT	1890
-			-5:07:10 -	KMT	1912 Feb # Kingston Mean Time
-			-5:00	-	EST	1979
-			-5:00	US	E%sT	2015 Nov Sun>=1 2:00
-			-4:00	-	AST	2018 Mar 11 3:00
-			-5:00	US	E%sT
-
-# British Virgin Is
-# Virgin Is
-# See America/Port_of_Spain.
-
-
-# Local Variables:
-# coding: utf-8
-# End:
--- a/test/jdk/sun/util/calendar/zi/tzdata/pacificnew	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# tzdb data for proposed US election time (this file is obsolete)
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# From Arthur David Olson (1989-04-05):
-# On 1989-04-05, the U. S. House of Representatives passed (238-154) a bill
-# establishing "Pacific Presidential Election Time"; it was not acted on
-# by the Senate or signed into law by the President.
-# You might want to change the "PE" (Presidential Election) below to
-# "Q" (Quadrennial) to maintain three-character zone abbreviations.
-# If you're really conservative, you might want to change it to "D".
-# Avoid "L" (Leap Year), which won't be true in 2100.
-
-# If Presidential Election Time is ever established, replace "XXXX" below
-# with the year the law takes effect and uncomment the "##" lines.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-## Rule	Twilite	XXXX	max	-	Apr	Sun>=1	2:00	1:00	D
-## Rule	Twilite	XXXX	max	uspres	Oct	lastSun	2:00	1:00	PE
-## Rule	Twilite	XXXX	max	uspres	Nov	Sun>=7	2:00	0	S
-## Rule	Twilite	XXXX	max	nonpres	Oct	lastSun	2:00	0	S
-
-# Zone	NAME			GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
-## Zone	America/Los_Angeles-PET	-8:00	US		P%sT	XXXX
-##				-8:00	Twilite		P%sT
-
-# For now...
-Link	America/Los_Angeles	US/Pacific-New	##
--- a/test/jdk/sun/util/calendar/zi/tzdata/solar87	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,411 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# <pre>
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# So much for footnotes about Saudi Arabia.
-# Apparent noon times below are for Riyadh; your mileage will vary.
-# Times were computed using formulas in the U.S. Naval Observatory's
-# Almanac for Computers 1987; the formulas "will give EqT to an accuracy of
-# [plus or minus two] seconds during the current year."
-#
-# Rounding to the nearest five seconds results in fewer than
-# 256 different "time types"--a limit that's faced because time types are
-# stored on disk as unsigned chars.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	sol87	1987	only	-	Jan	1	12:03:20s -0:03:20 -
-Rule	sol87	1987	only	-	Jan	2	12:03:50s -0:03:50 -
-Rule	sol87	1987	only	-	Jan	3	12:04:15s -0:04:15 -
-Rule	sol87	1987	only	-	Jan	4	12:04:45s -0:04:45 -
-Rule	sol87	1987	only	-	Jan	5	12:05:10s -0:05:10 -
-Rule	sol87	1987	only	-	Jan	6	12:05:40s -0:05:40 -
-Rule	sol87	1987	only	-	Jan	7	12:06:05s -0:06:05 -
-Rule	sol87	1987	only	-	Jan	8	12:06:30s -0:06:30 -
-Rule	sol87	1987	only	-	Jan	9	12:06:55s -0:06:55 -
-Rule	sol87	1987	only	-	Jan	10	12:07:20s -0:07:20 -
-Rule	sol87	1987	only	-	Jan	11	12:07:45s -0:07:45 -
-Rule	sol87	1987	only	-	Jan	12	12:08:10s -0:08:10 -
-Rule	sol87	1987	only	-	Jan	13	12:08:30s -0:08:30 -
-Rule	sol87	1987	only	-	Jan	14	12:08:55s -0:08:55 -
-Rule	sol87	1987	only	-	Jan	15	12:09:15s -0:09:15 -
-Rule	sol87	1987	only	-	Jan	16	12:09:35s -0:09:35 -
-Rule	sol87	1987	only	-	Jan	17	12:09:55s -0:09:55 -
-Rule	sol87	1987	only	-	Jan	18	12:10:15s -0:10:15 -
-Rule	sol87	1987	only	-	Jan	19	12:10:35s -0:10:35 -
-Rule	sol87	1987	only	-	Jan	20	12:10:55s -0:10:55 -
-Rule	sol87	1987	only	-	Jan	21	12:11:10s -0:11:10 -
-Rule	sol87	1987	only	-	Jan	22	12:11:30s -0:11:30 -
-Rule	sol87	1987	only	-	Jan	23	12:11:45s -0:11:45 -
-Rule	sol87	1987	only	-	Jan	24	12:12:00s -0:12:00 -
-Rule	sol87	1987	only	-	Jan	25	12:12:15s -0:12:15 -
-Rule	sol87	1987	only	-	Jan	26	12:12:30s -0:12:30 -
-Rule	sol87	1987	only	-	Jan	27	12:12:40s -0:12:40 -
-Rule	sol87	1987	only	-	Jan	28	12:12:55s -0:12:55 -
-Rule	sol87	1987	only	-	Jan	29	12:13:05s -0:13:05 -
-Rule	sol87	1987	only	-	Jan	30	12:13:15s -0:13:15 -
-Rule	sol87	1987	only	-	Jan	31	12:13:25s -0:13:25 -
-Rule	sol87	1987	only	-	Feb	1	12:13:35s -0:13:35 -
-Rule	sol87	1987	only	-	Feb	2	12:13:40s -0:13:40 -
-Rule	sol87	1987	only	-	Feb	3	12:13:50s -0:13:50 -
-Rule	sol87	1987	only	-	Feb	4	12:13:55s -0:13:55 -
-Rule	sol87	1987	only	-	Feb	5	12:14:00s -0:14:00 -
-Rule	sol87	1987	only	-	Feb	6	12:14:05s -0:14:05 -
-Rule	sol87	1987	only	-	Feb	7	12:14:10s -0:14:10 -
-Rule	sol87	1987	only	-	Feb	8	12:14:10s -0:14:10 -
-Rule	sol87	1987	only	-	Feb	9	12:14:15s -0:14:15 -
-Rule	sol87	1987	only	-	Feb	10	12:14:15s -0:14:15 -
-Rule	sol87	1987	only	-	Feb	11	12:14:15s -0:14:15 -
-Rule	sol87	1987	only	-	Feb	12	12:14:15s -0:14:15 -
-Rule	sol87	1987	only	-	Feb	13	12:14:15s -0:14:15 -
-Rule	sol87	1987	only	-	Feb	14	12:14:15s -0:14:15 -
-Rule	sol87	1987	only	-	Feb	15	12:14:10s -0:14:10 -
-Rule	sol87	1987	only	-	Feb	16	12:14:10s -0:14:10 -
-Rule	sol87	1987	only	-	Feb	17	12:14:05s -0:14:05 -
-Rule	sol87	1987	only	-	Feb	18	12:14:00s -0:14:00 -
-Rule	sol87	1987	only	-	Feb	19	12:13:55s -0:13:55 -
-Rule	sol87	1987	only	-	Feb	20	12:13:50s -0:13:50 -
-Rule	sol87	1987	only	-	Feb	21	12:13:45s -0:13:45 -
-Rule	sol87	1987	only	-	Feb	22	12:13:35s -0:13:35 -
-Rule	sol87	1987	only	-	Feb	23	12:13:30s -0:13:30 -
-Rule	sol87	1987	only	-	Feb	24	12:13:20s -0:13:20 -
-Rule	sol87	1987	only	-	Feb	25	12:13:10s -0:13:10 -
-Rule	sol87	1987	only	-	Feb	26	12:13:00s -0:13:00 -
-Rule	sol87	1987	only	-	Feb	27	12:12:50s -0:12:50 -
-Rule	sol87	1987	only	-	Feb	28	12:12:40s -0:12:40 -
-Rule	sol87	1987	only	-	Mar	1	12:12:30s -0:12:30 -
-Rule	sol87	1987	only	-	Mar	2	12:12:20s -0:12:20 -
-Rule	sol87	1987	only	-	Mar	3	12:12:05s -0:12:05 -
-Rule	sol87	1987	only	-	Mar	4	12:11:55s -0:11:55 -
-Rule	sol87	1987	only	-	Mar	5	12:11:40s -0:11:40 -
-Rule	sol87	1987	only	-	Mar	6	12:11:25s -0:11:25 -
-Rule	sol87	1987	only	-	Mar	7	12:11:15s -0:11:15 -
-Rule	sol87	1987	only	-	Mar	8	12:11:00s -0:11:00 -
-Rule	sol87	1987	only	-	Mar	9	12:10:45s -0:10:45 -
-Rule	sol87	1987	only	-	Mar	10	12:10:30s -0:10:30 -
-Rule	sol87	1987	only	-	Mar	11	12:10:15s -0:10:15 -
-Rule	sol87	1987	only	-	Mar	12	12:09:55s -0:09:55 -
-Rule	sol87	1987	only	-	Mar	13	12:09:40s -0:09:40 -
-Rule	sol87	1987	only	-	Mar	14	12:09:25s -0:09:25 -
-Rule	sol87	1987	only	-	Mar	15	12:09:10s -0:09:10 -
-Rule	sol87	1987	only	-	Mar	16	12:08:50s -0:08:50 -
-Rule	sol87	1987	only	-	Mar	17	12:08:35s -0:08:35 -
-Rule	sol87	1987	only	-	Mar	18	12:08:15s -0:08:15 -
-Rule	sol87	1987	only	-	Mar	19	12:08:00s -0:08:00 -
-Rule	sol87	1987	only	-	Mar	20	12:07:40s -0:07:40 -
-Rule	sol87	1987	only	-	Mar	21	12:07:25s -0:07:25 -
-Rule	sol87	1987	only	-	Mar	22	12:07:05s -0:07:05 -
-Rule	sol87	1987	only	-	Mar	23	12:06:50s -0:06:50 -
-Rule	sol87	1987	only	-	Mar	24	12:06:30s -0:06:30 -
-Rule	sol87	1987	only	-	Mar	25	12:06:10s -0:06:10 -
-Rule	sol87	1987	only	-	Mar	26	12:05:55s -0:05:55 -
-Rule	sol87	1987	only	-	Mar	27	12:05:35s -0:05:35 -
-Rule	sol87	1987	only	-	Mar	28	12:05:15s -0:05:15 -
-Rule	sol87	1987	only	-	Mar	29	12:05:00s -0:05:00 -
-Rule	sol87	1987	only	-	Mar	30	12:04:40s -0:04:40 -
-Rule	sol87	1987	only	-	Mar	31	12:04:25s -0:04:25 -
-Rule	sol87	1987	only	-	Apr	1	12:04:05s -0:04:05 -
-Rule	sol87	1987	only	-	Apr	2	12:03:45s -0:03:45 -
-Rule	sol87	1987	only	-	Apr	3	12:03:30s -0:03:30 -
-Rule	sol87	1987	only	-	Apr	4	12:03:10s -0:03:10 -
-Rule	sol87	1987	only	-	Apr	5	12:02:55s -0:02:55 -
-Rule	sol87	1987	only	-	Apr	6	12:02:35s -0:02:35 -
-Rule	sol87	1987	only	-	Apr	7	12:02:20s -0:02:20 -
-Rule	sol87	1987	only	-	Apr	8	12:02:05s -0:02:05 -
-Rule	sol87	1987	only	-	Apr	9	12:01:45s -0:01:45 -
-Rule	sol87	1987	only	-	Apr	10	12:01:30s -0:01:30 -
-Rule	sol87	1987	only	-	Apr	11	12:01:15s -0:01:15 -
-Rule	sol87	1987	only	-	Apr	12	12:00:55s -0:00:55 -
-Rule	sol87	1987	only	-	Apr	13	12:00:40s -0:00:40 -
-Rule	sol87	1987	only	-	Apr	14	12:00:25s -0:00:25 -
-Rule	sol87	1987	only	-	Apr	15	12:00:10s -0:00:10 -
-Rule	sol87	1987	only	-	Apr	16	11:59:55s 0:00:05 -
-Rule	sol87	1987	only	-	Apr	17	11:59:45s 0:00:15 -
-Rule	sol87	1987	only	-	Apr	18	11:59:30s 0:00:30 -
-Rule	sol87	1987	only	-	Apr	19	11:59:15s 0:00:45 -
-Rule	sol87	1987	only	-	Apr	20	11:59:05s 0:00:55 -
-Rule	sol87	1987	only	-	Apr	21	11:58:50s 0:01:10 -
-Rule	sol87	1987	only	-	Apr	22	11:58:40s 0:01:20 -
-Rule	sol87	1987	only	-	Apr	23	11:58:25s 0:01:35 -
-Rule	sol87	1987	only	-	Apr	24	11:58:15s 0:01:45 -
-Rule	sol87	1987	only	-	Apr	25	11:58:05s 0:01:55 -
-Rule	sol87	1987	only	-	Apr	26	11:57:55s 0:02:05 -
-Rule	sol87	1987	only	-	Apr	27	11:57:45s 0:02:15 -
-Rule	sol87	1987	only	-	Apr	28	11:57:35s 0:02:25 -
-Rule	sol87	1987	only	-	Apr	29	11:57:25s 0:02:35 -
-Rule	sol87	1987	only	-	Apr	30	11:57:15s 0:02:45 -
-Rule	sol87	1987	only	-	May	1	11:57:10s 0:02:50 -
-Rule	sol87	1987	only	-	May	2	11:57:00s 0:03:00 -
-Rule	sol87	1987	only	-	May	3	11:56:55s 0:03:05 -
-Rule	sol87	1987	only	-	May	4	11:56:50s 0:03:10 -
-Rule	sol87	1987	only	-	May	5	11:56:45s 0:03:15 -
-Rule	sol87	1987	only	-	May	6	11:56:40s 0:03:20 -
-Rule	sol87	1987	only	-	May	7	11:56:35s 0:03:25 -
-Rule	sol87	1987	only	-	May	8	11:56:30s 0:03:30 -
-Rule	sol87	1987	only	-	May	9	11:56:25s 0:03:35 -
-Rule	sol87	1987	only	-	May	10	11:56:25s 0:03:35 -
-Rule	sol87	1987	only	-	May	11	11:56:20s 0:03:40 -
-Rule	sol87	1987	only	-	May	12	11:56:20s 0:03:40 -
-Rule	sol87	1987	only	-	May	13	11:56:20s 0:03:40 -
-Rule	sol87	1987	only	-	May	14	11:56:20s 0:03:40 -
-Rule	sol87	1987	only	-	May	15	11:56:20s 0:03:40 -
-Rule	sol87	1987	only	-	May	16	11:56:20s 0:03:40 -
-Rule	sol87	1987	only	-	May	17	11:56:20s 0:03:40 -
-Rule	sol87	1987	only	-	May	18	11:56:20s 0:03:40 -
-Rule	sol87	1987	only	-	May	19	11:56:25s 0:03:35 -
-Rule	sol87	1987	only	-	May	20	11:56:25s 0:03:35 -
-Rule	sol87	1987	only	-	May	21	11:56:30s 0:03:30 -
-Rule	sol87	1987	only	-	May	22	11:56:35s 0:03:25 -
-Rule	sol87	1987	only	-	May	23	11:56:40s 0:03:20 -
-Rule	sol87	1987	only	-	May	24	11:56:45s 0:03:15 -
-Rule	sol87	1987	only	-	May	25	11:56:50s 0:03:10 -
-Rule	sol87	1987	only	-	May	26	11:56:55s 0:03:05 -
-Rule	sol87	1987	only	-	May	27	11:57:00s 0:03:00 -
-Rule	sol87	1987	only	-	May	28	11:57:10s 0:02:50 -
-Rule	sol87	1987	only	-	May	29	11:57:15s 0:02:45 -
-Rule	sol87	1987	only	-	May	30	11:57:25s 0:02:35 -
-Rule	sol87	1987	only	-	May	31	11:57:30s 0:02:30 -
-Rule	sol87	1987	only	-	Jun	1	11:57:40s 0:02:20 -
-Rule	sol87	1987	only	-	Jun	2	11:57:50s 0:02:10 -
-Rule	sol87	1987	only	-	Jun	3	11:58:00s 0:02:00 -
-Rule	sol87	1987	only	-	Jun	4	11:58:10s 0:01:50 -
-Rule	sol87	1987	only	-	Jun	5	11:58:20s 0:01:40 -
-Rule	sol87	1987	only	-	Jun	6	11:58:30s 0:01:30 -
-Rule	sol87	1987	only	-	Jun	7	11:58:40s 0:01:20 -
-Rule	sol87	1987	only	-	Jun	8	11:58:50s 0:01:10 -
-Rule	sol87	1987	only	-	Jun	9	11:59:05s 0:00:55 -
-Rule	sol87	1987	only	-	Jun	10	11:59:15s 0:00:45 -
-Rule	sol87	1987	only	-	Jun	11	11:59:30s 0:00:30 -
-Rule	sol87	1987	only	-	Jun	12	11:59:40s 0:00:20 -
-Rule	sol87	1987	only	-	Jun	13	11:59:50s 0:00:10 -
-Rule	sol87	1987	only	-	Jun	14	12:00:05s -0:00:05 -
-Rule	sol87	1987	only	-	Jun	15	12:00:15s -0:00:15 -
-Rule	sol87	1987	only	-	Jun	16	12:00:30s -0:00:30 -
-Rule	sol87	1987	only	-	Jun	17	12:00:45s -0:00:45 -
-Rule	sol87	1987	only	-	Jun	18	12:00:55s -0:00:55 -
-Rule	sol87	1987	only	-	Jun	19	12:01:10s -0:01:10 -
-Rule	sol87	1987	only	-	Jun	20	12:01:20s -0:01:20 -
-Rule	sol87	1987	only	-	Jun	21	12:01:35s -0:01:35 -
-Rule	sol87	1987	only	-	Jun	22	12:01:50s -0:01:50 -
-Rule	sol87	1987	only	-	Jun	23	12:02:00s -0:02:00 -
-Rule	sol87	1987	only	-	Jun	24	12:02:15s -0:02:15 -
-Rule	sol87	1987	only	-	Jun	25	12:02:25s -0:02:25 -
-Rule	sol87	1987	only	-	Jun	26	12:02:40s -0:02:40 -
-Rule	sol87	1987	only	-	Jun	27	12:02:50s -0:02:50 -
-Rule	sol87	1987	only	-	Jun	28	12:03:05s -0:03:05 -
-Rule	sol87	1987	only	-	Jun	29	12:03:15s -0:03:15 -
-Rule	sol87	1987	only	-	Jun	30	12:03:30s -0:03:30 -
-Rule	sol87	1987	only	-	Jul	1	12:03:40s -0:03:40 -
-Rule	sol87	1987	only	-	Jul	2	12:03:50s -0:03:50 -
-Rule	sol87	1987	only	-	Jul	3	12:04:05s -0:04:05 -
-Rule	sol87	1987	only	-	Jul	4	12:04:15s -0:04:15 -
-Rule	sol87	1987	only	-	Jul	5	12:04:25s -0:04:25 -
-Rule	sol87	1987	only	-	Jul	6	12:04:35s -0:04:35 -
-Rule	sol87	1987	only	-	Jul	7	12:04:45s -0:04:45 -
-Rule	sol87	1987	only	-	Jul	8	12:04:55s -0:04:55 -
-Rule	sol87	1987	only	-	Jul	9	12:05:05s -0:05:05 -
-Rule	sol87	1987	only	-	Jul	10	12:05:15s -0:05:15 -
-Rule	sol87	1987	only	-	Jul	11	12:05:20s -0:05:20 -
-Rule	sol87	1987	only	-	Jul	12	12:05:30s -0:05:30 -
-Rule	sol87	1987	only	-	Jul	13	12:05:40s -0:05:40 -
-Rule	sol87	1987	only	-	Jul	14	12:05:45s -0:05:45 -
-Rule	sol87	1987	only	-	Jul	15	12:05:50s -0:05:50 -
-Rule	sol87	1987	only	-	Jul	16	12:06:00s -0:06:00 -
-Rule	sol87	1987	only	-	Jul	17	12:06:05s -0:06:05 -
-Rule	sol87	1987	only	-	Jul	18	12:06:10s -0:06:10 -
-Rule	sol87	1987	only	-	Jul	19	12:06:15s -0:06:15 -
-Rule	sol87	1987	only	-	Jul	20	12:06:15s -0:06:15 -
-Rule	sol87	1987	only	-	Jul	21	12:06:20s -0:06:20 -
-Rule	sol87	1987	only	-	Jul	22	12:06:25s -0:06:25 -
-Rule	sol87	1987	only	-	Jul	23	12:06:25s -0:06:25 -
-Rule	sol87	1987	only	-	Jul	24	12:06:25s -0:06:25 -
-Rule	sol87	1987	only	-	Jul	25	12:06:30s -0:06:30 -
-Rule	sol87	1987	only	-	Jul	26	12:06:30s -0:06:30 -
-Rule	sol87	1987	only	-	Jul	27	12:06:30s -0:06:30 -
-Rule	sol87	1987	only	-	Jul	28	12:06:30s -0:06:30 -
-Rule	sol87	1987	only	-	Jul	29	12:06:25s -0:06:25 -
-Rule	sol87	1987	only	-	Jul	30	12:06:25s -0:06:25 -
-Rule	sol87	1987	only	-	Jul	31	12:06:25s -0:06:25 -
-Rule	sol87	1987	only	-	Aug	1	12:06:20s -0:06:20 -
-Rule	sol87	1987	only	-	Aug	2	12:06:15s -0:06:15 -
-Rule	sol87	1987	only	-	Aug	3	12:06:10s -0:06:10 -
-Rule	sol87	1987	only	-	Aug	4	12:06:05s -0:06:05 -
-Rule	sol87	1987	only	-	Aug	5	12:06:00s -0:06:00 -
-Rule	sol87	1987	only	-	Aug	6	12:05:55s -0:05:55 -
-Rule	sol87	1987	only	-	Aug	7	12:05:50s -0:05:50 -
-Rule	sol87	1987	only	-	Aug	8	12:05:40s -0:05:40 -
-Rule	sol87	1987	only	-	Aug	9	12:05:35s -0:05:35 -
-Rule	sol87	1987	only	-	Aug	10	12:05:25s -0:05:25 -
-Rule	sol87	1987	only	-	Aug	11	12:05:15s -0:05:15 -
-Rule	sol87	1987	only	-	Aug	12	12:05:05s -0:05:05 -
-Rule	sol87	1987	only	-	Aug	13	12:04:55s -0:04:55 -
-Rule	sol87	1987	only	-	Aug	14	12:04:45s -0:04:45 -
-Rule	sol87	1987	only	-	Aug	15	12:04:35s -0:04:35 -
-Rule	sol87	1987	only	-	Aug	16	12:04:25s -0:04:25 -
-Rule	sol87	1987	only	-	Aug	17	12:04:10s -0:04:10 -
-Rule	sol87	1987	only	-	Aug	18	12:04:00s -0:04:00 -
-Rule	sol87	1987	only	-	Aug	19	12:03:45s -0:03:45 -
-Rule	sol87	1987	only	-	Aug	20	12:03:30s -0:03:30 -
-Rule	sol87	1987	only	-	Aug	21	12:03:15s -0:03:15 -
-Rule	sol87	1987	only	-	Aug	22	12:03:00s -0:03:00 -
-Rule	sol87	1987	only	-	Aug	23	12:02:45s -0:02:45 -
-Rule	sol87	1987	only	-	Aug	24	12:02:30s -0:02:30 -
-Rule	sol87	1987	only	-	Aug	25	12:02:15s -0:02:15 -
-Rule	sol87	1987	only	-	Aug	26	12:02:00s -0:02:00 -
-Rule	sol87	1987	only	-	Aug	27	12:01:40s -0:01:40 -
-Rule	sol87	1987	only	-	Aug	28	12:01:25s -0:01:25 -
-Rule	sol87	1987	only	-	Aug	29	12:01:05s -0:01:05 -
-Rule	sol87	1987	only	-	Aug	30	12:00:50s -0:00:50 -
-Rule	sol87	1987	only	-	Aug	31	12:00:30s -0:00:30 -
-Rule	sol87	1987	only	-	Sep	1	12:00:10s -0:00:10 -
-Rule	sol87	1987	only	-	Sep	2	11:59:50s 0:00:10 -
-Rule	sol87	1987	only	-	Sep	3	11:59:35s 0:00:25 -
-Rule	sol87	1987	only	-	Sep	4	11:59:15s 0:00:45 -
-Rule	sol87	1987	only	-	Sep	5	11:58:55s 0:01:05 -
-Rule	sol87	1987	only	-	Sep	6	11:58:35s 0:01:25 -
-Rule	sol87	1987	only	-	Sep	7	11:58:15s 0:01:45 -
-Rule	sol87	1987	only	-	Sep	8	11:57:55s 0:02:05 -
-Rule	sol87	1987	only	-	Sep	9	11:57:30s 0:02:30 -
-Rule	sol87	1987	only	-	Sep	10	11:57:10s 0:02:50 -
-Rule	sol87	1987	only	-	Sep	11	11:56:50s 0:03:10 -
-Rule	sol87	1987	only	-	Sep	12	11:56:30s 0:03:30 -
-Rule	sol87	1987	only	-	Sep	13	11:56:10s 0:03:50 -
-Rule	sol87	1987	only	-	Sep	14	11:55:45s 0:04:15 -
-Rule	sol87	1987	only	-	Sep	15	11:55:25s 0:04:35 -
-Rule	sol87	1987	only	-	Sep	16	11:55:05s 0:04:55 -
-Rule	sol87	1987	only	-	Sep	17	11:54:45s 0:05:15 -
-Rule	sol87	1987	only	-	Sep	18	11:54:20s 0:05:40 -
-Rule	sol87	1987	only	-	Sep	19	11:54:00s 0:06:00 -
-Rule	sol87	1987	only	-	Sep	20	11:53:40s 0:06:20 -
-Rule	sol87	1987	only	-	Sep	21	11:53:15s 0:06:45 -
-Rule	sol87	1987	only	-	Sep	22	11:52:55s 0:07:05 -
-Rule	sol87	1987	only	-	Sep	23	11:52:35s 0:07:25 -
-Rule	sol87	1987	only	-	Sep	24	11:52:15s 0:07:45 -
-Rule	sol87	1987	only	-	Sep	25	11:51:55s 0:08:05 -
-Rule	sol87	1987	only	-	Sep	26	11:51:35s 0:08:25 -
-Rule	sol87	1987	only	-	Sep	27	11:51:10s 0:08:50 -
-Rule	sol87	1987	only	-	Sep	28	11:50:50s 0:09:10 -
-Rule	sol87	1987	only	-	Sep	29	11:50:30s 0:09:30 -
-Rule	sol87	1987	only	-	Sep	30	11:50:10s 0:09:50 -
-Rule	sol87	1987	only	-	Oct	1	11:49:50s 0:10:10 -
-Rule	sol87	1987	only	-	Oct	2	11:49:35s 0:10:25 -
-Rule	sol87	1987	only	-	Oct	3	11:49:15s 0:10:45 -
-Rule	sol87	1987	only	-	Oct	4	11:48:55s 0:11:05 -
-Rule	sol87	1987	only	-	Oct	5	11:48:35s 0:11:25 -
-Rule	sol87	1987	only	-	Oct	6	11:48:20s 0:11:40 -
-Rule	sol87	1987	only	-	Oct	7	11:48:00s 0:12:00 -
-Rule	sol87	1987	only	-	Oct	8	11:47:45s 0:12:15 -
-Rule	sol87	1987	only	-	Oct	9	11:47:25s 0:12:35 -
-Rule	sol87	1987	only	-	Oct	10	11:47:10s 0:12:50 -
-Rule	sol87	1987	only	-	Oct	11	11:46:55s 0:13:05 -
-Rule	sol87	1987	only	-	Oct	12	11:46:40s 0:13:20 -
-Rule	sol87	1987	only	-	Oct	13	11:46:25s 0:13:35 -
-Rule	sol87	1987	only	-	Oct	14	11:46:10s 0:13:50 -
-Rule	sol87	1987	only	-	Oct	15	11:45:55s 0:14:05 -
-Rule	sol87	1987	only	-	Oct	16	11:45:45s 0:14:15 -
-Rule	sol87	1987	only	-	Oct	17	11:45:30s 0:14:30 -
-Rule	sol87	1987	only	-	Oct	18	11:45:20s 0:14:40 -
-Rule	sol87	1987	only	-	Oct	19	11:45:05s 0:14:55 -
-Rule	sol87	1987	only	-	Oct	20	11:44:55s 0:15:05 -
-Rule	sol87	1987	only	-	Oct	21	11:44:45s 0:15:15 -
-Rule	sol87	1987	only	-	Oct	22	11:44:35s 0:15:25 -
-Rule	sol87	1987	only	-	Oct	23	11:44:25s 0:15:35 -
-Rule	sol87	1987	only	-	Oct	24	11:44:20s 0:15:40 -
-Rule	sol87	1987	only	-	Oct	25	11:44:10s 0:15:50 -
-Rule	sol87	1987	only	-	Oct	26	11:44:05s 0:15:55 -
-Rule	sol87	1987	only	-	Oct	27	11:43:55s 0:16:05 -
-Rule	sol87	1987	only	-	Oct	28	11:43:50s 0:16:10 -
-Rule	sol87	1987	only	-	Oct	29	11:43:45s 0:16:15 -
-Rule	sol87	1987	only	-	Oct	30	11:43:45s 0:16:15 -
-Rule	sol87	1987	only	-	Oct	31	11:43:40s 0:16:20 -
-Rule	sol87	1987	only	-	Nov	1	11:43:40s 0:16:20 -
-Rule	sol87	1987	only	-	Nov	2	11:43:35s 0:16:25 -
-Rule	sol87	1987	only	-	Nov	3	11:43:35s 0:16:25 -
-Rule	sol87	1987	only	-	Nov	4	11:43:35s 0:16:25 -
-Rule	sol87	1987	only	-	Nov	5	11:43:35s 0:16:25 -
-Rule	sol87	1987	only	-	Nov	6	11:43:40s 0:16:20 -
-Rule	sol87	1987	only	-	Nov	7	11:43:40s 0:16:20 -
-Rule	sol87	1987	only	-	Nov	8	11:43:45s 0:16:15 -
-Rule	sol87	1987	only	-	Nov	9	11:43:50s 0:16:10 -
-Rule	sol87	1987	only	-	Nov	10	11:43:55s 0:16:05 -
-Rule	sol87	1987	only	-	Nov	11	11:44:00s 0:16:00 -
-Rule	sol87	1987	only	-	Nov	12	11:44:05s 0:15:55 -
-Rule	sol87	1987	only	-	Nov	13	11:44:15s 0:15:45 -
-Rule	sol87	1987	only	-	Nov	14	11:44:20s 0:15:40 -
-Rule	sol87	1987	only	-	Nov	15	11:44:30s 0:15:30 -
-Rule	sol87	1987	only	-	Nov	16	11:44:40s 0:15:20 -
-Rule	sol87	1987	only	-	Nov	17	11:44:50s 0:15:10 -
-Rule	sol87	1987	only	-	Nov	18	11:45:05s 0:14:55 -
-Rule	sol87	1987	only	-	Nov	19	11:45:15s 0:14:45 -
-Rule	sol87	1987	only	-	Nov	20	11:45:30s 0:14:30 -
-Rule	sol87	1987	only	-	Nov	21	11:45:45s 0:14:15 -
-Rule	sol87	1987	only	-	Nov	22	11:46:00s 0:14:00 -
-Rule	sol87	1987	only	-	Nov	23	11:46:15s 0:13:45 -
-Rule	sol87	1987	only	-	Nov	24	11:46:30s 0:13:30 -
-Rule	sol87	1987	only	-	Nov	25	11:46:50s 0:13:10 -
-Rule	sol87	1987	only	-	Nov	26	11:47:10s 0:12:50 -
-Rule	sol87	1987	only	-	Nov	27	11:47:25s 0:12:35 -
-Rule	sol87	1987	only	-	Nov	28	11:47:45s 0:12:15 -
-Rule	sol87	1987	only	-	Nov	29	11:48:05s 0:11:55 -
-Rule	sol87	1987	only	-	Nov	30	11:48:30s 0:11:30 -
-Rule	sol87	1987	only	-	Dec	1	11:48:50s 0:11:10 -
-Rule	sol87	1987	only	-	Dec	2	11:49:10s 0:10:50 -
-Rule	sol87	1987	only	-	Dec	3	11:49:35s 0:10:25 -
-Rule	sol87	1987	only	-	Dec	4	11:50:00s 0:10:00 -
-Rule	sol87	1987	only	-	Dec	5	11:50:25s 0:09:35 -
-Rule	sol87	1987	only	-	Dec	6	11:50:50s 0:09:10 -
-Rule	sol87	1987	only	-	Dec	7	11:51:15s 0:08:45 -
-Rule	sol87	1987	only	-	Dec	8	11:51:40s 0:08:20 -
-Rule	sol87	1987	only	-	Dec	9	11:52:05s 0:07:55 -
-Rule	sol87	1987	only	-	Dec	10	11:52:30s 0:07:30 -
-Rule	sol87	1987	only	-	Dec	11	11:53:00s 0:07:00 -
-Rule	sol87	1987	only	-	Dec	12	11:53:25s 0:06:35 -
-Rule	sol87	1987	only	-	Dec	13	11:53:55s 0:06:05 -
-Rule	sol87	1987	only	-	Dec	14	11:54:25s 0:05:35 -
-Rule	sol87	1987	only	-	Dec	15	11:54:50s 0:05:10 -
-Rule	sol87	1987	only	-	Dec	16	11:55:20s 0:04:40 -
-Rule	sol87	1987	only	-	Dec	17	11:55:50s 0:04:10 -
-Rule	sol87	1987	only	-	Dec	18	11:56:20s 0:03:40 -
-Rule	sol87	1987	only	-	Dec	19	11:56:50s 0:03:10 -
-Rule	sol87	1987	only	-	Dec	20	11:57:20s 0:02:40 -
-Rule	sol87	1987	only	-	Dec	21	11:57:50s 0:02:10 -
-Rule	sol87	1987	only	-	Dec	22	11:58:20s 0:01:40 -
-Rule	sol87	1987	only	-	Dec	23	11:58:50s 0:01:10 -
-Rule	sol87	1987	only	-	Dec	24	11:59:20s 0:00:40 -
-Rule	sol87	1987	only	-	Dec	25	11:59:50s 0:00:10 -
-Rule	sol87	1987	only	-	Dec	26	12:00:20s -0:00:20 -
-Rule	sol87	1987	only	-	Dec	27	12:00:45s -0:00:45 -
-Rule	sol87	1987	only	-	Dec	28	12:01:15s -0:01:15 -
-Rule	sol87	1987	only	-	Dec	29	12:01:45s -0:01:45 -
-Rule	sol87	1987	only	-	Dec	30	12:02:15s -0:02:15 -
-Rule	sol87	1987	only	-	Dec	31	12:02:45s -0:02:45 -
-
-# Riyadh is at about 46 degrees 46 minutes East:  3 hrs, 7 mins, 4 secs
-# Before and after 1987, we'll operate on local mean solar time.
-
-# Zone	NAME		GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
-Zone	Asia/Riyadh87	3:07:04	-		zzz	1987
-			3:07:04	sol87		zzz	1988
-			3:07:04	-		zzz
-# For backward compatibility...
-Link	Asia/Riyadh87	Mideast/Riyadh87
--- a/test/jdk/sun/util/calendar/zi/tzdata/solar88	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,411 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# <pre>
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# Apparent noon times below are for Riyadh; they're a bit off for other places.
-# Times were computed using formulas in the U.S. Naval Observatory's
-# Almanac for Computers 1988; the formulas "will give EqT to an accuracy of
-# [plus or minus two] seconds during the current year."
-#
-# Rounding to the nearest five seconds results in fewer than
-# 256 different "time types"--a limit that's faced because time types are
-# stored on disk as unsigned chars.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	sol88	1988	only	-	Jan	1	12:03:15s -0:03:15 -
-Rule	sol88	1988	only	-	Jan	2	12:03:40s -0:03:40 -
-Rule	sol88	1988	only	-	Jan	3	12:04:10s -0:04:10 -
-Rule	sol88	1988	only	-	Jan	4	12:04:40s -0:04:40 -
-Rule	sol88	1988	only	-	Jan	5	12:05:05s -0:05:05 -
-Rule	sol88	1988	only	-	Jan	6	12:05:30s -0:05:30 -
-Rule	sol88	1988	only	-	Jan	7	12:06:00s -0:06:00 -
-Rule	sol88	1988	only	-	Jan	8	12:06:25s -0:06:25 -
-Rule	sol88	1988	only	-	Jan	9	12:06:50s -0:06:50 -
-Rule	sol88	1988	only	-	Jan	10	12:07:15s -0:07:15 -
-Rule	sol88	1988	only	-	Jan	11	12:07:40s -0:07:40 -
-Rule	sol88	1988	only	-	Jan	12	12:08:05s -0:08:05 -
-Rule	sol88	1988	only	-	Jan	13	12:08:25s -0:08:25 -
-Rule	sol88	1988	only	-	Jan	14	12:08:50s -0:08:50 -
-Rule	sol88	1988	only	-	Jan	15	12:09:10s -0:09:10 -
-Rule	sol88	1988	only	-	Jan	16	12:09:30s -0:09:30 -
-Rule	sol88	1988	only	-	Jan	17	12:09:50s -0:09:50 -
-Rule	sol88	1988	only	-	Jan	18	12:10:10s -0:10:10 -
-Rule	sol88	1988	only	-	Jan	19	12:10:30s -0:10:30 -
-Rule	sol88	1988	only	-	Jan	20	12:10:50s -0:10:50 -
-Rule	sol88	1988	only	-	Jan	21	12:11:05s -0:11:05 -
-Rule	sol88	1988	only	-	Jan	22	12:11:25s -0:11:25 -
-Rule	sol88	1988	only	-	Jan	23	12:11:40s -0:11:40 -
-Rule	sol88	1988	only	-	Jan	24	12:11:55s -0:11:55 -
-Rule	sol88	1988	only	-	Jan	25	12:12:10s -0:12:10 -
-Rule	sol88	1988	only	-	Jan	26	12:12:25s -0:12:25 -
-Rule	sol88	1988	only	-	Jan	27	12:12:40s -0:12:40 -
-Rule	sol88	1988	only	-	Jan	28	12:12:50s -0:12:50 -
-Rule	sol88	1988	only	-	Jan	29	12:13:00s -0:13:00 -
-Rule	sol88	1988	only	-	Jan	30	12:13:10s -0:13:10 -
-Rule	sol88	1988	only	-	Jan	31	12:13:20s -0:13:20 -
-Rule	sol88	1988	only	-	Feb	1	12:13:30s -0:13:30 -
-Rule	sol88	1988	only	-	Feb	2	12:13:40s -0:13:40 -
-Rule	sol88	1988	only	-	Feb	3	12:13:45s -0:13:45 -
-Rule	sol88	1988	only	-	Feb	4	12:13:55s -0:13:55 -
-Rule	sol88	1988	only	-	Feb	5	12:14:00s -0:14:00 -
-Rule	sol88	1988	only	-	Feb	6	12:14:05s -0:14:05 -
-Rule	sol88	1988	only	-	Feb	7	12:14:10s -0:14:10 -
-Rule	sol88	1988	only	-	Feb	8	12:14:10s -0:14:10 -
-Rule	sol88	1988	only	-	Feb	9	12:14:15s -0:14:15 -
-Rule	sol88	1988	only	-	Feb	10	12:14:15s -0:14:15 -
-Rule	sol88	1988	only	-	Feb	11	12:14:15s -0:14:15 -
-Rule	sol88	1988	only	-	Feb	12	12:14:15s -0:14:15 -
-Rule	sol88	1988	only	-	Feb	13	12:14:15s -0:14:15 -
-Rule	sol88	1988	only	-	Feb	14	12:14:15s -0:14:15 -
-Rule	sol88	1988	only	-	Feb	15	12:14:10s -0:14:10 -
-Rule	sol88	1988	only	-	Feb	16	12:14:10s -0:14:10 -
-Rule	sol88	1988	only	-	Feb	17	12:14:05s -0:14:05 -
-Rule	sol88	1988	only	-	Feb	18	12:14:00s -0:14:00 -
-Rule	sol88	1988	only	-	Feb	19	12:13:55s -0:13:55 -
-Rule	sol88	1988	only	-	Feb	20	12:13:50s -0:13:50 -
-Rule	sol88	1988	only	-	Feb	21	12:13:45s -0:13:45 -
-Rule	sol88	1988	only	-	Feb	22	12:13:40s -0:13:40 -
-Rule	sol88	1988	only	-	Feb	23	12:13:30s -0:13:30 -
-Rule	sol88	1988	only	-	Feb	24	12:13:20s -0:13:20 -
-Rule	sol88	1988	only	-	Feb	25	12:13:15s -0:13:15 -
-Rule	sol88	1988	only	-	Feb	26	12:13:05s -0:13:05 -
-Rule	sol88	1988	only	-	Feb	27	12:12:55s -0:12:55 -
-Rule	sol88	1988	only	-	Feb	28	12:12:45s -0:12:45 -
-Rule	sol88	1988	only	-	Feb	29	12:12:30s -0:12:30 -
-Rule	sol88	1988	only	-	Mar	1	12:12:20s -0:12:20 -
-Rule	sol88	1988	only	-	Mar	2	12:12:10s -0:12:10 -
-Rule	sol88	1988	only	-	Mar	3	12:11:55s -0:11:55 -
-Rule	sol88	1988	only	-	Mar	4	12:11:45s -0:11:45 -
-Rule	sol88	1988	only	-	Mar	5	12:11:30s -0:11:30 -
-Rule	sol88	1988	only	-	Mar	6	12:11:15s -0:11:15 -
-Rule	sol88	1988	only	-	Mar	7	12:11:00s -0:11:00 -
-Rule	sol88	1988	only	-	Mar	8	12:10:45s -0:10:45 -
-Rule	sol88	1988	only	-	Mar	9	12:10:30s -0:10:30 -
-Rule	sol88	1988	only	-	Mar	10	12:10:15s -0:10:15 -
-Rule	sol88	1988	only	-	Mar	11	12:10:00s -0:10:00 -
-Rule	sol88	1988	only	-	Mar	12	12:09:45s -0:09:45 -
-Rule	sol88	1988	only	-	Mar	13	12:09:30s -0:09:30 -
-Rule	sol88	1988	only	-	Mar	14	12:09:10s -0:09:10 -
-Rule	sol88	1988	only	-	Mar	15	12:08:55s -0:08:55 -
-Rule	sol88	1988	only	-	Mar	16	12:08:40s -0:08:40 -
-Rule	sol88	1988	only	-	Mar	17	12:08:20s -0:08:20 -
-Rule	sol88	1988	only	-	Mar	18	12:08:05s -0:08:05 -
-Rule	sol88	1988	only	-	Mar	19	12:07:45s -0:07:45 -
-Rule	sol88	1988	only	-	Mar	20	12:07:30s -0:07:30 -
-Rule	sol88	1988	only	-	Mar	21	12:07:10s -0:07:10 -
-Rule	sol88	1988	only	-	Mar	22	12:06:50s -0:06:50 -
-Rule	sol88	1988	only	-	Mar	23	12:06:35s -0:06:35 -
-Rule	sol88	1988	only	-	Mar	24	12:06:15s -0:06:15 -
-Rule	sol88	1988	only	-	Mar	25	12:06:00s -0:06:00 -
-Rule	sol88	1988	only	-	Mar	26	12:05:40s -0:05:40 -
-Rule	sol88	1988	only	-	Mar	27	12:05:20s -0:05:20 -
-Rule	sol88	1988	only	-	Mar	28	12:05:05s -0:05:05 -
-Rule	sol88	1988	only	-	Mar	29	12:04:45s -0:04:45 -
-Rule	sol88	1988	only	-	Mar	30	12:04:25s -0:04:25 -
-Rule	sol88	1988	only	-	Mar	31	12:04:10s -0:04:10 -
-Rule	sol88	1988	only	-	Apr	1	12:03:50s -0:03:50 -
-Rule	sol88	1988	only	-	Apr	2	12:03:35s -0:03:35 -
-Rule	sol88	1988	only	-	Apr	3	12:03:15s -0:03:15 -
-Rule	sol88	1988	only	-	Apr	4	12:03:00s -0:03:00 -
-Rule	sol88	1988	only	-	Apr	5	12:02:40s -0:02:40 -
-Rule	sol88	1988	only	-	Apr	6	12:02:25s -0:02:25 -
-Rule	sol88	1988	only	-	Apr	7	12:02:05s -0:02:05 -
-Rule	sol88	1988	only	-	Apr	8	12:01:50s -0:01:50 -
-Rule	sol88	1988	only	-	Apr	9	12:01:35s -0:01:35 -
-Rule	sol88	1988	only	-	Apr	10	12:01:15s -0:01:15 -
-Rule	sol88	1988	only	-	Apr	11	12:01:00s -0:01:00 -
-Rule	sol88	1988	only	-	Apr	12	12:00:45s -0:00:45 -
-Rule	sol88	1988	only	-	Apr	13	12:00:30s -0:00:30 -
-Rule	sol88	1988	only	-	Apr	14	12:00:15s -0:00:15 -
-Rule	sol88	1988	only	-	Apr	15	12:00:00s 0:00:00 -
-Rule	sol88	1988	only	-	Apr	16	11:59:45s 0:00:15 -
-Rule	sol88	1988	only	-	Apr	17	11:59:30s 0:00:30 -
-Rule	sol88	1988	only	-	Apr	18	11:59:20s 0:00:40 -
-Rule	sol88	1988	only	-	Apr	19	11:59:05s 0:00:55 -
-Rule	sol88	1988	only	-	Apr	20	11:58:55s 0:01:05 -
-Rule	sol88	1988	only	-	Apr	21	11:58:40s 0:01:20 -
-Rule	sol88	1988	only	-	Apr	22	11:58:30s 0:01:30 -
-Rule	sol88	1988	only	-	Apr	23	11:58:15s 0:01:45 -
-Rule	sol88	1988	only	-	Apr	24	11:58:05s 0:01:55 -
-Rule	sol88	1988	only	-	Apr	25	11:57:55s 0:02:05 -
-Rule	sol88	1988	only	-	Apr	26	11:57:45s 0:02:15 -
-Rule	sol88	1988	only	-	Apr	27	11:57:35s 0:02:25 -
-Rule	sol88	1988	only	-	Apr	28	11:57:30s 0:02:30 -
-Rule	sol88	1988	only	-	Apr	29	11:57:20s 0:02:40 -
-Rule	sol88	1988	only	-	Apr	30	11:57:10s 0:02:50 -
-Rule	sol88	1988	only	-	May	1	11:57:05s 0:02:55 -
-Rule	sol88	1988	only	-	May	2	11:56:55s 0:03:05 -
-Rule	sol88	1988	only	-	May	3	11:56:50s 0:03:10 -
-Rule	sol88	1988	only	-	May	4	11:56:45s 0:03:15 -
-Rule	sol88	1988	only	-	May	5	11:56:40s 0:03:20 -
-Rule	sol88	1988	only	-	May	6	11:56:35s 0:03:25 -
-Rule	sol88	1988	only	-	May	7	11:56:30s 0:03:30 -
-Rule	sol88	1988	only	-	May	8	11:56:25s 0:03:35 -
-Rule	sol88	1988	only	-	May	9	11:56:25s 0:03:35 -
-Rule	sol88	1988	only	-	May	10	11:56:20s 0:03:40 -
-Rule	sol88	1988	only	-	May	11	11:56:20s 0:03:40 -
-Rule	sol88	1988	only	-	May	12	11:56:20s 0:03:40 -
-Rule	sol88	1988	only	-	May	13	11:56:20s 0:03:40 -
-Rule	sol88	1988	only	-	May	14	11:56:20s 0:03:40 -
-Rule	sol88	1988	only	-	May	15	11:56:20s 0:03:40 -
-Rule	sol88	1988	only	-	May	16	11:56:20s 0:03:40 -
-Rule	sol88	1988	only	-	May	17	11:56:20s 0:03:40 -
-Rule	sol88	1988	only	-	May	18	11:56:25s 0:03:35 -
-Rule	sol88	1988	only	-	May	19	11:56:25s 0:03:35 -
-Rule	sol88	1988	only	-	May	20	11:56:30s 0:03:30 -
-Rule	sol88	1988	only	-	May	21	11:56:35s 0:03:25 -
-Rule	sol88	1988	only	-	May	22	11:56:40s 0:03:20 -
-Rule	sol88	1988	only	-	May	23	11:56:45s 0:03:15 -
-Rule	sol88	1988	only	-	May	24	11:56:50s 0:03:10 -
-Rule	sol88	1988	only	-	May	25	11:56:55s 0:03:05 -
-Rule	sol88	1988	only	-	May	26	11:57:00s 0:03:00 -
-Rule	sol88	1988	only	-	May	27	11:57:05s 0:02:55 -
-Rule	sol88	1988	only	-	May	28	11:57:15s 0:02:45 -
-Rule	sol88	1988	only	-	May	29	11:57:20s 0:02:40 -
-Rule	sol88	1988	only	-	May	30	11:57:30s 0:02:30 -
-Rule	sol88	1988	only	-	May	31	11:57:40s 0:02:20 -
-Rule	sol88	1988	only	-	Jun	1	11:57:50s 0:02:10 -
-Rule	sol88	1988	only	-	Jun	2	11:57:55s 0:02:05 -
-Rule	sol88	1988	only	-	Jun	3	11:58:05s 0:01:55 -
-Rule	sol88	1988	only	-	Jun	4	11:58:15s 0:01:45 -
-Rule	sol88	1988	only	-	Jun	5	11:58:30s 0:01:30 -
-Rule	sol88	1988	only	-	Jun	6	11:58:40s 0:01:20 -
-Rule	sol88	1988	only	-	Jun	7	11:58:50s 0:01:10 -
-Rule	sol88	1988	only	-	Jun	8	11:59:00s 0:01:00 -
-Rule	sol88	1988	only	-	Jun	9	11:59:15s 0:00:45 -
-Rule	sol88	1988	only	-	Jun	10	11:59:25s 0:00:35 -
-Rule	sol88	1988	only	-	Jun	11	11:59:35s 0:00:25 -
-Rule	sol88	1988	only	-	Jun	12	11:59:50s 0:00:10 -
-Rule	sol88	1988	only	-	Jun	13	12:00:00s 0:00:00 -
-Rule	sol88	1988	only	-	Jun	14	12:00:15s -0:00:15 -
-Rule	sol88	1988	only	-	Jun	15	12:00:25s -0:00:25 -
-Rule	sol88	1988	only	-	Jun	16	12:00:40s -0:00:40 -
-Rule	sol88	1988	only	-	Jun	17	12:00:55s -0:00:55 -
-Rule	sol88	1988	only	-	Jun	18	12:01:05s -0:01:05 -
-Rule	sol88	1988	only	-	Jun	19	12:01:20s -0:01:20 -
-Rule	sol88	1988	only	-	Jun	20	12:01:30s -0:01:30 -
-Rule	sol88	1988	only	-	Jun	21	12:01:45s -0:01:45 -
-Rule	sol88	1988	only	-	Jun	22	12:02:00s -0:02:00 -
-Rule	sol88	1988	only	-	Jun	23	12:02:10s -0:02:10 -
-Rule	sol88	1988	only	-	Jun	24	12:02:25s -0:02:25 -
-Rule	sol88	1988	only	-	Jun	25	12:02:35s -0:02:35 -
-Rule	sol88	1988	only	-	Jun	26	12:02:50s -0:02:50 -
-Rule	sol88	1988	only	-	Jun	27	12:03:00s -0:03:00 -
-Rule	sol88	1988	only	-	Jun	28	12:03:15s -0:03:15 -
-Rule	sol88	1988	only	-	Jun	29	12:03:25s -0:03:25 -
-Rule	sol88	1988	only	-	Jun	30	12:03:40s -0:03:40 -
-Rule	sol88	1988	only	-	Jul	1	12:03:50s -0:03:50 -
-Rule	sol88	1988	only	-	Jul	2	12:04:00s -0:04:00 -
-Rule	sol88	1988	only	-	Jul	3	12:04:10s -0:04:10 -
-Rule	sol88	1988	only	-	Jul	4	12:04:25s -0:04:25 -
-Rule	sol88	1988	only	-	Jul	5	12:04:35s -0:04:35 -
-Rule	sol88	1988	only	-	Jul	6	12:04:45s -0:04:45 -
-Rule	sol88	1988	only	-	Jul	7	12:04:55s -0:04:55 -
-Rule	sol88	1988	only	-	Jul	8	12:05:05s -0:05:05 -
-Rule	sol88	1988	only	-	Jul	9	12:05:10s -0:05:10 -
-Rule	sol88	1988	only	-	Jul	10	12:05:20s -0:05:20 -
-Rule	sol88	1988	only	-	Jul	11	12:05:30s -0:05:30 -
-Rule	sol88	1988	only	-	Jul	12	12:05:35s -0:05:35 -
-Rule	sol88	1988	only	-	Jul	13	12:05:45s -0:05:45 -
-Rule	sol88	1988	only	-	Jul	14	12:05:50s -0:05:50 -
-Rule	sol88	1988	only	-	Jul	15	12:05:55s -0:05:55 -
-Rule	sol88	1988	only	-	Jul	16	12:06:00s -0:06:00 -
-Rule	sol88	1988	only	-	Jul	17	12:06:05s -0:06:05 -
-Rule	sol88	1988	only	-	Jul	18	12:06:10s -0:06:10 -
-Rule	sol88	1988	only	-	Jul	19	12:06:15s -0:06:15 -
-Rule	sol88	1988	only	-	Jul	20	12:06:20s -0:06:20 -
-Rule	sol88	1988	only	-	Jul	21	12:06:25s -0:06:25 -
-Rule	sol88	1988	only	-	Jul	22	12:06:25s -0:06:25 -
-Rule	sol88	1988	only	-	Jul	23	12:06:25s -0:06:25 -
-Rule	sol88	1988	only	-	Jul	24	12:06:30s -0:06:30 -
-Rule	sol88	1988	only	-	Jul	25	12:06:30s -0:06:30 -
-Rule	sol88	1988	only	-	Jul	26	12:06:30s -0:06:30 -
-Rule	sol88	1988	only	-	Jul	27	12:06:30s -0:06:30 -
-Rule	sol88	1988	only	-	Jul	28	12:06:30s -0:06:30 -
-Rule	sol88	1988	only	-	Jul	29	12:06:25s -0:06:25 -
-Rule	sol88	1988	only	-	Jul	30	12:06:25s -0:06:25 -
-Rule	sol88	1988	only	-	Jul	31	12:06:20s -0:06:20 -
-Rule	sol88	1988	only	-	Aug	1	12:06:15s -0:06:15 -
-Rule	sol88	1988	only	-	Aug	2	12:06:15s -0:06:15 -
-Rule	sol88	1988	only	-	Aug	3	12:06:10s -0:06:10 -
-Rule	sol88	1988	only	-	Aug	4	12:06:05s -0:06:05 -
-Rule	sol88	1988	only	-	Aug	5	12:05:55s -0:05:55 -
-Rule	sol88	1988	only	-	Aug	6	12:05:50s -0:05:50 -
-Rule	sol88	1988	only	-	Aug	7	12:05:45s -0:05:45 -
-Rule	sol88	1988	only	-	Aug	8	12:05:35s -0:05:35 -
-Rule	sol88	1988	only	-	Aug	9	12:05:25s -0:05:25 -
-Rule	sol88	1988	only	-	Aug	10	12:05:20s -0:05:20 -
-Rule	sol88	1988	only	-	Aug	11	12:05:10s -0:05:10 -
-Rule	sol88	1988	only	-	Aug	12	12:05:00s -0:05:00 -
-Rule	sol88	1988	only	-	Aug	13	12:04:50s -0:04:50 -
-Rule	sol88	1988	only	-	Aug	14	12:04:35s -0:04:35 -
-Rule	sol88	1988	only	-	Aug	15	12:04:25s -0:04:25 -
-Rule	sol88	1988	only	-	Aug	16	12:04:15s -0:04:15 -
-Rule	sol88	1988	only	-	Aug	17	12:04:00s -0:04:00 -
-Rule	sol88	1988	only	-	Aug	18	12:03:50s -0:03:50 -
-Rule	sol88	1988	only	-	Aug	19	12:03:35s -0:03:35 -
-Rule	sol88	1988	only	-	Aug	20	12:03:20s -0:03:20 -
-Rule	sol88	1988	only	-	Aug	21	12:03:05s -0:03:05 -
-Rule	sol88	1988	only	-	Aug	22	12:02:50s -0:02:50 -
-Rule	sol88	1988	only	-	Aug	23	12:02:35s -0:02:35 -
-Rule	sol88	1988	only	-	Aug	24	12:02:20s -0:02:20 -
-Rule	sol88	1988	only	-	Aug	25	12:02:00s -0:02:00 -
-Rule	sol88	1988	only	-	Aug	26	12:01:45s -0:01:45 -
-Rule	sol88	1988	only	-	Aug	27	12:01:30s -0:01:30 -
-Rule	sol88	1988	only	-	Aug	28	12:01:10s -0:01:10 -
-Rule	sol88	1988	only	-	Aug	29	12:00:50s -0:00:50 -
-Rule	sol88	1988	only	-	Aug	30	12:00:35s -0:00:35 -
-Rule	sol88	1988	only	-	Aug	31	12:00:15s -0:00:15 -
-Rule	sol88	1988	only	-	Sep	1	11:59:55s 0:00:05 -
-Rule	sol88	1988	only	-	Sep	2	11:59:35s 0:00:25 -
-Rule	sol88	1988	only	-	Sep	3	11:59:20s 0:00:40 -
-Rule	sol88	1988	only	-	Sep	4	11:59:00s 0:01:00 -
-Rule	sol88	1988	only	-	Sep	5	11:58:40s 0:01:20 -
-Rule	sol88	1988	only	-	Sep	6	11:58:20s 0:01:40 -
-Rule	sol88	1988	only	-	Sep	7	11:58:00s 0:02:00 -
-Rule	sol88	1988	only	-	Sep	8	11:57:35s 0:02:25 -
-Rule	sol88	1988	only	-	Sep	9	11:57:15s 0:02:45 -
-Rule	sol88	1988	only	-	Sep	10	11:56:55s 0:03:05 -
-Rule	sol88	1988	only	-	Sep	11	11:56:35s 0:03:25 -
-Rule	sol88	1988	only	-	Sep	12	11:56:15s 0:03:45 -
-Rule	sol88	1988	only	-	Sep	13	11:55:50s 0:04:10 -
-Rule	sol88	1988	only	-	Sep	14	11:55:30s 0:04:30 -
-Rule	sol88	1988	only	-	Sep	15	11:55:10s 0:04:50 -
-Rule	sol88	1988	only	-	Sep	16	11:54:50s 0:05:10 -
-Rule	sol88	1988	only	-	Sep	17	11:54:25s 0:05:35 -
-Rule	sol88	1988	only	-	Sep	18	11:54:05s 0:05:55 -
-Rule	sol88	1988	only	-	Sep	19	11:53:45s 0:06:15 -
-Rule	sol88	1988	only	-	Sep	20	11:53:25s 0:06:35 -
-Rule	sol88	1988	only	-	Sep	21	11:53:00s 0:07:00 -
-Rule	sol88	1988	only	-	Sep	22	11:52:40s 0:07:20 -
-Rule	sol88	1988	only	-	Sep	23	11:52:20s 0:07:40 -
-Rule	sol88	1988	only	-	Sep	24	11:52:00s 0:08:00 -
-Rule	sol88	1988	only	-	Sep	25	11:51:40s 0:08:20 -
-Rule	sol88	1988	only	-	Sep	26	11:51:15s 0:08:45 -
-Rule	sol88	1988	only	-	Sep	27	11:50:55s 0:09:05 -
-Rule	sol88	1988	only	-	Sep	28	11:50:35s 0:09:25 -
-Rule	sol88	1988	only	-	Sep	29	11:50:15s 0:09:45 -
-Rule	sol88	1988	only	-	Sep	30	11:49:55s 0:10:05 -
-Rule	sol88	1988	only	-	Oct	1	11:49:35s 0:10:25 -
-Rule	sol88	1988	only	-	Oct	2	11:49:20s 0:10:40 -
-Rule	sol88	1988	only	-	Oct	3	11:49:00s 0:11:00 -
-Rule	sol88	1988	only	-	Oct	4	11:48:40s 0:11:20 -
-Rule	sol88	1988	only	-	Oct	5	11:48:25s 0:11:35 -
-Rule	sol88	1988	only	-	Oct	6	11:48:05s 0:11:55 -
-Rule	sol88	1988	only	-	Oct	7	11:47:50s 0:12:10 -
-Rule	sol88	1988	only	-	Oct	8	11:47:30s 0:12:30 -
-Rule	sol88	1988	only	-	Oct	9	11:47:15s 0:12:45 -
-Rule	sol88	1988	only	-	Oct	10	11:47:00s 0:13:00 -
-Rule	sol88	1988	only	-	Oct	11	11:46:45s 0:13:15 -
-Rule	sol88	1988	only	-	Oct	12	11:46:30s 0:13:30 -
-Rule	sol88	1988	only	-	Oct	13	11:46:15s 0:13:45 -
-Rule	sol88	1988	only	-	Oct	14	11:46:00s 0:14:00 -
-Rule	sol88	1988	only	-	Oct	15	11:45:45s 0:14:15 -
-Rule	sol88	1988	only	-	Oct	16	11:45:35s 0:14:25 -
-Rule	sol88	1988	only	-	Oct	17	11:45:20s 0:14:40 -
-Rule	sol88	1988	only	-	Oct	18	11:45:10s 0:14:50 -
-Rule	sol88	1988	only	-	Oct	19	11:45:00s 0:15:00 -
-Rule	sol88	1988	only	-	Oct	20	11:44:45s 0:15:15 -
-Rule	sol88	1988	only	-	Oct	21	11:44:40s 0:15:20 -
-Rule	sol88	1988	only	-	Oct	22	11:44:30s 0:15:30 -
-Rule	sol88	1988	only	-	Oct	23	11:44:20s 0:15:40 -
-Rule	sol88	1988	only	-	Oct	24	11:44:10s 0:15:50 -
-Rule	sol88	1988	only	-	Oct	25	11:44:05s 0:15:55 -
-Rule	sol88	1988	only	-	Oct	26	11:44:00s 0:16:00 -
-Rule	sol88	1988	only	-	Oct	27	11:43:55s 0:16:05 -
-Rule	sol88	1988	only	-	Oct	28	11:43:50s 0:16:10 -
-Rule	sol88	1988	only	-	Oct	29	11:43:45s 0:16:15 -
-Rule	sol88	1988	only	-	Oct	30	11:43:40s 0:16:20 -
-Rule	sol88	1988	only	-	Oct	31	11:43:40s 0:16:20 -
-Rule	sol88	1988	only	-	Nov	1	11:43:35s 0:16:25 -
-Rule	sol88	1988	only	-	Nov	2	11:43:35s 0:16:25 -
-Rule	sol88	1988	only	-	Nov	3	11:43:35s 0:16:25 -
-Rule	sol88	1988	only	-	Nov	4	11:43:35s 0:16:25 -
-Rule	sol88	1988	only	-	Nov	5	11:43:40s 0:16:20 -
-Rule	sol88	1988	only	-	Nov	6	11:43:40s 0:16:20 -
-Rule	sol88	1988	only	-	Nov	7	11:43:45s 0:16:15 -
-Rule	sol88	1988	only	-	Nov	8	11:43:45s 0:16:15 -
-Rule	sol88	1988	only	-	Nov	9	11:43:50s 0:16:10 -
-Rule	sol88	1988	only	-	Nov	10	11:44:00s 0:16:00 -
-Rule	sol88	1988	only	-	Nov	11	11:44:05s 0:15:55 -
-Rule	sol88	1988	only	-	Nov	12	11:44:10s 0:15:50 -
-Rule	sol88	1988	only	-	Nov	13	11:44:20s 0:15:40 -
-Rule	sol88	1988	only	-	Nov	14	11:44:30s 0:15:30 -
-Rule	sol88	1988	only	-	Nov	15	11:44:40s 0:15:20 -
-Rule	sol88	1988	only	-	Nov	16	11:44:50s 0:15:10 -
-Rule	sol88	1988	only	-	Nov	17	11:45:00s 0:15:00 -
-Rule	sol88	1988	only	-	Nov	18	11:45:15s 0:14:45 -
-Rule	sol88	1988	only	-	Nov	19	11:45:25s 0:14:35 -
-Rule	sol88	1988	only	-	Nov	20	11:45:40s 0:14:20 -
-Rule	sol88	1988	only	-	Nov	21	11:45:55s 0:14:05 -
-Rule	sol88	1988	only	-	Nov	22	11:46:10s 0:13:50 -
-Rule	sol88	1988	only	-	Nov	23	11:46:30s 0:13:30 -
-Rule	sol88	1988	only	-	Nov	24	11:46:45s 0:13:15 -
-Rule	sol88	1988	only	-	Nov	25	11:47:05s 0:12:55 -
-Rule	sol88	1988	only	-	Nov	26	11:47:20s 0:12:40 -
-Rule	sol88	1988	only	-	Nov	27	11:47:40s 0:12:20 -
-Rule	sol88	1988	only	-	Nov	28	11:48:00s 0:12:00 -
-Rule	sol88	1988	only	-	Nov	29	11:48:25s 0:11:35 -
-Rule	sol88	1988	only	-	Nov	30	11:48:45s 0:11:15 -
-Rule	sol88	1988	only	-	Dec	1	11:49:05s 0:10:55 -
-Rule	sol88	1988	only	-	Dec	2	11:49:30s 0:10:30 -
-Rule	sol88	1988	only	-	Dec	3	11:49:55s 0:10:05 -
-Rule	sol88	1988	only	-	Dec	4	11:50:15s 0:09:45 -
-Rule	sol88	1988	only	-	Dec	5	11:50:40s 0:09:20 -
-Rule	sol88	1988	only	-	Dec	6	11:51:05s 0:08:55 -
-Rule	sol88	1988	only	-	Dec	7	11:51:35s 0:08:25 -
-Rule	sol88	1988	only	-	Dec	8	11:52:00s 0:08:00 -
-Rule	sol88	1988	only	-	Dec	9	11:52:25s 0:07:35 -
-Rule	sol88	1988	only	-	Dec	10	11:52:55s 0:07:05 -
-Rule	sol88	1988	only	-	Dec	11	11:53:20s 0:06:40 -
-Rule	sol88	1988	only	-	Dec	12	11:53:50s 0:06:10 -
-Rule	sol88	1988	only	-	Dec	13	11:54:15s 0:05:45 -
-Rule	sol88	1988	only	-	Dec	14	11:54:45s 0:05:15 -
-Rule	sol88	1988	only	-	Dec	15	11:55:15s 0:04:45 -
-Rule	sol88	1988	only	-	Dec	16	11:55:45s 0:04:15 -
-Rule	sol88	1988	only	-	Dec	17	11:56:15s 0:03:45 -
-Rule	sol88	1988	only	-	Dec	18	11:56:40s 0:03:20 -
-Rule	sol88	1988	only	-	Dec	19	11:57:10s 0:02:50 -
-Rule	sol88	1988	only	-	Dec	20	11:57:40s 0:02:20 -
-Rule	sol88	1988	only	-	Dec	21	11:58:10s 0:01:50 -
-Rule	sol88	1988	only	-	Dec	22	11:58:40s 0:01:20 -
-Rule	sol88	1988	only	-	Dec	23	11:59:10s 0:00:50 -
-Rule	sol88	1988	only	-	Dec	24	11:59:40s 0:00:20 -
-Rule	sol88	1988	only	-	Dec	25	12:00:10s -0:00:10 -
-Rule	sol88	1988	only	-	Dec	26	12:00:40s -0:00:40 -
-Rule	sol88	1988	only	-	Dec	27	12:01:10s -0:01:10 -
-Rule	sol88	1988	only	-	Dec	28	12:01:40s -0:01:40 -
-Rule	sol88	1988	only	-	Dec	29	12:02:10s -0:02:10 -
-Rule	sol88	1988	only	-	Dec	30	12:02:35s -0:02:35 -
-Rule	sol88	1988	only	-	Dec	31	12:03:05s -0:03:05 -
-
-# Riyadh is at about 46 degrees 46 minutes East:  3 hrs, 7 mins, 4 secs
-# Before and after 1988, we'll operate on local mean solar time.
-
-# Zone	NAME		GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
-Zone	Asia/Riyadh88	3:07:04	-		zzz	1988
-			3:07:04	sol88		zzz	1989
-			3:07:04	-		zzz
-# For backward compatibility...
-Link	Asia/Riyadh88	Mideast/Riyadh88
--- a/test/jdk/sun/util/calendar/zi/tzdata/solar89	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,416 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# <pre>
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# Apparent noon times below are for Riyadh; they're a bit off for other places.
-# Times were computed using a formula provided by the U. S. Naval Observatory:
-#	eqt = -105.8 * sin(l) + 596.2 * sin(2 * l) + 4.4 * sin(3 * l)
-#		-12.7 * sin(4 * l) - 429.0 * cos(l) - 2.1 * cos (2 * l)
-#		+ 19.3 * cos(3 * l);
-# where l is the "mean longitude of the Sun" given by
-#	l = 279.642 degrees + 0.985647 * d
-# and d is the interval in days from January 0, 0 hours Universal Time
-# (equaling the day of the year plus the fraction of a day from zero hours).
-# The accuracy of the formula is plus or minus three seconds.
-#
-# Rounding to the nearest five seconds results in fewer than
-# 256 different "time types"--a limit that's faced because time types are
-# stored on disk as unsigned chars.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	sol89	1989	only	-	Jan	1	12:03:35s -0:03:35 -
-Rule	sol89	1989	only	-	Jan	2	12:04:05s -0:04:05 -
-Rule	sol89	1989	only	-	Jan	3	12:04:30s -0:04:30 -
-Rule	sol89	1989	only	-	Jan	4	12:05:00s -0:05:00 -
-Rule	sol89	1989	only	-	Jan	5	12:05:25s -0:05:25 -
-Rule	sol89	1989	only	-	Jan	6	12:05:50s -0:05:50 -
-Rule	sol89	1989	only	-	Jan	7	12:06:15s -0:06:15 -
-Rule	sol89	1989	only	-	Jan	8	12:06:45s -0:06:45 -
-Rule	sol89	1989	only	-	Jan	9	12:07:10s -0:07:10 -
-Rule	sol89	1989	only	-	Jan	10	12:07:35s -0:07:35 -
-Rule	sol89	1989	only	-	Jan	11	12:07:55s -0:07:55 -
-Rule	sol89	1989	only	-	Jan	12	12:08:20s -0:08:20 -
-Rule	sol89	1989	only	-	Jan	13	12:08:45s -0:08:45 -
-Rule	sol89	1989	only	-	Jan	14	12:09:05s -0:09:05 -
-Rule	sol89	1989	only	-	Jan	15	12:09:25s -0:09:25 -
-Rule	sol89	1989	only	-	Jan	16	12:09:45s -0:09:45 -
-Rule	sol89	1989	only	-	Jan	17	12:10:05s -0:10:05 -
-Rule	sol89	1989	only	-	Jan	18	12:10:25s -0:10:25 -
-Rule	sol89	1989	only	-	Jan	19	12:10:45s -0:10:45 -
-Rule	sol89	1989	only	-	Jan	20	12:11:05s -0:11:05 -
-Rule	sol89	1989	only	-	Jan	21	12:11:20s -0:11:20 -
-Rule	sol89	1989	only	-	Jan	22	12:11:35s -0:11:35 -
-Rule	sol89	1989	only	-	Jan	23	12:11:55s -0:11:55 -
-Rule	sol89	1989	only	-	Jan	24	12:12:10s -0:12:10 -
-Rule	sol89	1989	only	-	Jan	25	12:12:20s -0:12:20 -
-Rule	sol89	1989	only	-	Jan	26	12:12:35s -0:12:35 -
-Rule	sol89	1989	only	-	Jan	27	12:12:50s -0:12:50 -
-Rule	sol89	1989	only	-	Jan	28	12:13:00s -0:13:00 -
-Rule	sol89	1989	only	-	Jan	29	12:13:10s -0:13:10 -
-Rule	sol89	1989	only	-	Jan	30	12:13:20s -0:13:20 -
-Rule	sol89	1989	only	-	Jan	31	12:13:30s -0:13:30 -
-Rule	sol89	1989	only	-	Feb	1	12:13:40s -0:13:40 -
-Rule	sol89	1989	only	-	Feb	2	12:13:45s -0:13:45 -
-Rule	sol89	1989	only	-	Feb	3	12:13:55s -0:13:55 -
-Rule	sol89	1989	only	-	Feb	4	12:14:00s -0:14:00 -
-Rule	sol89	1989	only	-	Feb	5	12:14:05s -0:14:05 -
-Rule	sol89	1989	only	-	Feb	6	12:14:10s -0:14:10 -
-Rule	sol89	1989	only	-	Feb	7	12:14:10s -0:14:10 -
-Rule	sol89	1989	only	-	Feb	8	12:14:15s -0:14:15 -
-Rule	sol89	1989	only	-	Feb	9	12:14:15s -0:14:15 -
-Rule	sol89	1989	only	-	Feb	10	12:14:20s -0:14:20 -
-Rule	sol89	1989	only	-	Feb	11	12:14:20s -0:14:20 -
-Rule	sol89	1989	only	-	Feb	12	12:14:20s -0:14:20 -
-Rule	sol89	1989	only	-	Feb	13	12:14:15s -0:14:15 -
-Rule	sol89	1989	only	-	Feb	14	12:14:15s -0:14:15 -
-Rule	sol89	1989	only	-	Feb	15	12:14:10s -0:14:10 -
-Rule	sol89	1989	only	-	Feb	16	12:14:10s -0:14:10 -
-Rule	sol89	1989	only	-	Feb	17	12:14:05s -0:14:05 -
-Rule	sol89	1989	only	-	Feb	18	12:14:00s -0:14:00 -
-Rule	sol89	1989	only	-	Feb	19	12:13:55s -0:13:55 -
-Rule	sol89	1989	only	-	Feb	20	12:13:50s -0:13:50 -
-Rule	sol89	1989	only	-	Feb	21	12:13:40s -0:13:40 -
-Rule	sol89	1989	only	-	Feb	22	12:13:35s -0:13:35 -
-Rule	sol89	1989	only	-	Feb	23	12:13:25s -0:13:25 -
-Rule	sol89	1989	only	-	Feb	24	12:13:15s -0:13:15 -
-Rule	sol89	1989	only	-	Feb	25	12:13:05s -0:13:05 -
-Rule	sol89	1989	only	-	Feb	26	12:12:55s -0:12:55 -
-Rule	sol89	1989	only	-	Feb	27	12:12:45s -0:12:45 -
-Rule	sol89	1989	only	-	Feb	28	12:12:35s -0:12:35 -
-Rule	sol89	1989	only	-	Mar	1	12:12:25s -0:12:25 -
-Rule	sol89	1989	only	-	Mar	2	12:12:10s -0:12:10 -
-Rule	sol89	1989	only	-	Mar	3	12:12:00s -0:12:00 -
-Rule	sol89	1989	only	-	Mar	4	12:11:45s -0:11:45 -
-Rule	sol89	1989	only	-	Mar	5	12:11:35s -0:11:35 -
-Rule	sol89	1989	only	-	Mar	6	12:11:20s -0:11:20 -
-Rule	sol89	1989	only	-	Mar	7	12:11:05s -0:11:05 -
-Rule	sol89	1989	only	-	Mar	8	12:10:50s -0:10:50 -
-Rule	sol89	1989	only	-	Mar	9	12:10:35s -0:10:35 -
-Rule	sol89	1989	only	-	Mar	10	12:10:20s -0:10:20 -
-Rule	sol89	1989	only	-	Mar	11	12:10:05s -0:10:05 -
-Rule	sol89	1989	only	-	Mar	12	12:09:50s -0:09:50 -
-Rule	sol89	1989	only	-	Mar	13	12:09:30s -0:09:30 -
-Rule	sol89	1989	only	-	Mar	14	12:09:15s -0:09:15 -
-Rule	sol89	1989	only	-	Mar	15	12:09:00s -0:09:00 -
-Rule	sol89	1989	only	-	Mar	16	12:08:40s -0:08:40 -
-Rule	sol89	1989	only	-	Mar	17	12:08:25s -0:08:25 -
-Rule	sol89	1989	only	-	Mar	18	12:08:05s -0:08:05 -
-Rule	sol89	1989	only	-	Mar	19	12:07:50s -0:07:50 -
-Rule	sol89	1989	only	-	Mar	20	12:07:30s -0:07:30 -
-Rule	sol89	1989	only	-	Mar	21	12:07:15s -0:07:15 -
-Rule	sol89	1989	only	-	Mar	22	12:06:55s -0:06:55 -
-Rule	sol89	1989	only	-	Mar	23	12:06:35s -0:06:35 -
-Rule	sol89	1989	only	-	Mar	24	12:06:20s -0:06:20 -
-Rule	sol89	1989	only	-	Mar	25	12:06:00s -0:06:00 -
-Rule	sol89	1989	only	-	Mar	26	12:05:40s -0:05:40 -
-Rule	sol89	1989	only	-	Mar	27	12:05:25s -0:05:25 -
-Rule	sol89	1989	only	-	Mar	28	12:05:05s -0:05:05 -
-Rule	sol89	1989	only	-	Mar	29	12:04:50s -0:04:50 -
-Rule	sol89	1989	only	-	Mar	30	12:04:30s -0:04:30 -
-Rule	sol89	1989	only	-	Mar	31	12:04:10s -0:04:10 -
-Rule	sol89	1989	only	-	Apr	1	12:03:55s -0:03:55 -
-Rule	sol89	1989	only	-	Apr	2	12:03:35s -0:03:35 -
-Rule	sol89	1989	only	-	Apr	3	12:03:20s -0:03:20 -
-Rule	sol89	1989	only	-	Apr	4	12:03:00s -0:03:00 -
-Rule	sol89	1989	only	-	Apr	5	12:02:45s -0:02:45 -
-Rule	sol89	1989	only	-	Apr	6	12:02:25s -0:02:25 -
-Rule	sol89	1989	only	-	Apr	7	12:02:10s -0:02:10 -
-Rule	sol89	1989	only	-	Apr	8	12:01:50s -0:01:50 -
-Rule	sol89	1989	only	-	Apr	9	12:01:35s -0:01:35 -
-Rule	sol89	1989	only	-	Apr	10	12:01:20s -0:01:20 -
-Rule	sol89	1989	only	-	Apr	11	12:01:05s -0:01:05 -
-Rule	sol89	1989	only	-	Apr	12	12:00:50s -0:00:50 -
-Rule	sol89	1989	only	-	Apr	13	12:00:35s -0:00:35 -
-Rule	sol89	1989	only	-	Apr	14	12:00:20s -0:00:20 -
-Rule	sol89	1989	only	-	Apr	15	12:00:05s -0:00:05 -
-Rule	sol89	1989	only	-	Apr	16	11:59:50s 0:00:10 -
-Rule	sol89	1989	only	-	Apr	17	11:59:35s 0:00:25 -
-Rule	sol89	1989	only	-	Apr	18	11:59:20s 0:00:40 -
-Rule	sol89	1989	only	-	Apr	19	11:59:10s 0:00:50 -
-Rule	sol89	1989	only	-	Apr	20	11:58:55s 0:01:05 -
-Rule	sol89	1989	only	-	Apr	21	11:58:45s 0:01:15 -
-Rule	sol89	1989	only	-	Apr	22	11:58:30s 0:01:30 -
-Rule	sol89	1989	only	-	Apr	23	11:58:20s 0:01:40 -
-Rule	sol89	1989	only	-	Apr	24	11:58:10s 0:01:50 -
-Rule	sol89	1989	only	-	Apr	25	11:58:00s 0:02:00 -
-Rule	sol89	1989	only	-	Apr	26	11:57:50s 0:02:10 -
-Rule	sol89	1989	only	-	Apr	27	11:57:40s 0:02:20 -
-Rule	sol89	1989	only	-	Apr	28	11:57:30s 0:02:30 -
-Rule	sol89	1989	only	-	Apr	29	11:57:20s 0:02:40 -
-Rule	sol89	1989	only	-	Apr	30	11:57:15s 0:02:45 -
-Rule	sol89	1989	only	-	May	1	11:57:05s 0:02:55 -
-Rule	sol89	1989	only	-	May	2	11:57:00s 0:03:00 -
-Rule	sol89	1989	only	-	May	3	11:56:50s 0:03:10 -
-Rule	sol89	1989	only	-	May	4	11:56:45s 0:03:15 -
-Rule	sol89	1989	only	-	May	5	11:56:40s 0:03:20 -
-Rule	sol89	1989	only	-	May	6	11:56:35s 0:03:25 -
-Rule	sol89	1989	only	-	May	7	11:56:30s 0:03:30 -
-Rule	sol89	1989	only	-	May	8	11:56:30s 0:03:30 -
-Rule	sol89	1989	only	-	May	9	11:56:25s 0:03:35 -
-Rule	sol89	1989	only	-	May	10	11:56:25s 0:03:35 -
-Rule	sol89	1989	only	-	May	11	11:56:20s 0:03:40 -
-Rule	sol89	1989	only	-	May	12	11:56:20s 0:03:40 -
-Rule	sol89	1989	only	-	May	13	11:56:20s 0:03:40 -
-Rule	sol89	1989	only	-	May	14	11:56:20s 0:03:40 -
-Rule	sol89	1989	only	-	May	15	11:56:20s 0:03:40 -
-Rule	sol89	1989	only	-	May	16	11:56:20s 0:03:40 -
-Rule	sol89	1989	only	-	May	17	11:56:20s 0:03:40 -
-Rule	sol89	1989	only	-	May	18	11:56:25s 0:03:35 -
-Rule	sol89	1989	only	-	May	19	11:56:25s 0:03:35 -
-Rule	sol89	1989	only	-	May	20	11:56:30s 0:03:30 -
-Rule	sol89	1989	only	-	May	21	11:56:35s 0:03:25 -
-Rule	sol89	1989	only	-	May	22	11:56:35s 0:03:25 -
-Rule	sol89	1989	only	-	May	23	11:56:40s 0:03:20 -
-Rule	sol89	1989	only	-	May	24	11:56:45s 0:03:15 -
-Rule	sol89	1989	only	-	May	25	11:56:55s 0:03:05 -
-Rule	sol89	1989	only	-	May	26	11:57:00s 0:03:00 -
-Rule	sol89	1989	only	-	May	27	11:57:05s 0:02:55 -
-Rule	sol89	1989	only	-	May	28	11:57:15s 0:02:45 -
-Rule	sol89	1989	only	-	May	29	11:57:20s 0:02:40 -
-Rule	sol89	1989	only	-	May	30	11:57:30s 0:02:30 -
-Rule	sol89	1989	only	-	May	31	11:57:35s 0:02:25 -
-Rule	sol89	1989	only	-	Jun	1	11:57:45s 0:02:15 -
-Rule	sol89	1989	only	-	Jun	2	11:57:55s 0:02:05 -
-Rule	sol89	1989	only	-	Jun	3	11:58:05s 0:01:55 -
-Rule	sol89	1989	only	-	Jun	4	11:58:15s 0:01:45 -
-Rule	sol89	1989	only	-	Jun	5	11:58:25s 0:01:35 -
-Rule	sol89	1989	only	-	Jun	6	11:58:35s 0:01:25 -
-Rule	sol89	1989	only	-	Jun	7	11:58:45s 0:01:15 -
-Rule	sol89	1989	only	-	Jun	8	11:59:00s 0:01:00 -
-Rule	sol89	1989	only	-	Jun	9	11:59:10s 0:00:50 -
-Rule	sol89	1989	only	-	Jun	10	11:59:20s 0:00:40 -
-Rule	sol89	1989	only	-	Jun	11	11:59:35s 0:00:25 -
-Rule	sol89	1989	only	-	Jun	12	11:59:45s 0:00:15 -
-Rule	sol89	1989	only	-	Jun	13	12:00:00s 0:00:00 -
-Rule	sol89	1989	only	-	Jun	14	12:00:10s -0:00:10 -
-Rule	sol89	1989	only	-	Jun	15	12:00:25s -0:00:25 -
-Rule	sol89	1989	only	-	Jun	16	12:00:35s -0:00:35 -
-Rule	sol89	1989	only	-	Jun	17	12:00:50s -0:00:50 -
-Rule	sol89	1989	only	-	Jun	18	12:01:05s -0:01:05 -
-Rule	sol89	1989	only	-	Jun	19	12:01:15s -0:01:15 -
-Rule	sol89	1989	only	-	Jun	20	12:01:30s -0:01:30 -
-Rule	sol89	1989	only	-	Jun	21	12:01:40s -0:01:40 -
-Rule	sol89	1989	only	-	Jun	22	12:01:55s -0:01:55 -
-Rule	sol89	1989	only	-	Jun	23	12:02:10s -0:02:10 -
-Rule	sol89	1989	only	-	Jun	24	12:02:20s -0:02:20 -
-Rule	sol89	1989	only	-	Jun	25	12:02:35s -0:02:35 -
-Rule	sol89	1989	only	-	Jun	26	12:02:45s -0:02:45 -
-Rule	sol89	1989	only	-	Jun	27	12:03:00s -0:03:00 -
-Rule	sol89	1989	only	-	Jun	28	12:03:10s -0:03:10 -
-Rule	sol89	1989	only	-	Jun	29	12:03:25s -0:03:25 -
-Rule	sol89	1989	only	-	Jun	30	12:03:35s -0:03:35 -
-Rule	sol89	1989	only	-	Jul	1	12:03:45s -0:03:45 -
-Rule	sol89	1989	only	-	Jul	2	12:04:00s -0:04:00 -
-Rule	sol89	1989	only	-	Jul	3	12:04:10s -0:04:10 -
-Rule	sol89	1989	only	-	Jul	4	12:04:20s -0:04:20 -
-Rule	sol89	1989	only	-	Jul	5	12:04:30s -0:04:30 -
-Rule	sol89	1989	only	-	Jul	6	12:04:40s -0:04:40 -
-Rule	sol89	1989	only	-	Jul	7	12:04:50s -0:04:50 -
-Rule	sol89	1989	only	-	Jul	8	12:05:00s -0:05:00 -
-Rule	sol89	1989	only	-	Jul	9	12:05:10s -0:05:10 -
-Rule	sol89	1989	only	-	Jul	10	12:05:20s -0:05:20 -
-Rule	sol89	1989	only	-	Jul	11	12:05:25s -0:05:25 -
-Rule	sol89	1989	only	-	Jul	12	12:05:35s -0:05:35 -
-Rule	sol89	1989	only	-	Jul	13	12:05:40s -0:05:40 -
-Rule	sol89	1989	only	-	Jul	14	12:05:50s -0:05:50 -
-Rule	sol89	1989	only	-	Jul	15	12:05:55s -0:05:55 -
-Rule	sol89	1989	only	-	Jul	16	12:06:00s -0:06:00 -
-Rule	sol89	1989	only	-	Jul	17	12:06:05s -0:06:05 -
-Rule	sol89	1989	only	-	Jul	18	12:06:10s -0:06:10 -
-Rule	sol89	1989	only	-	Jul	19	12:06:15s -0:06:15 -
-Rule	sol89	1989	only	-	Jul	20	12:06:20s -0:06:20 -
-Rule	sol89	1989	only	-	Jul	21	12:06:20s -0:06:20 -
-Rule	sol89	1989	only	-	Jul	22	12:06:25s -0:06:25 -
-Rule	sol89	1989	only	-	Jul	23	12:06:25s -0:06:25 -
-Rule	sol89	1989	only	-	Jul	24	12:06:30s -0:06:30 -
-Rule	sol89	1989	only	-	Jul	25	12:06:30s -0:06:30 -
-Rule	sol89	1989	only	-	Jul	26	12:06:30s -0:06:30 -
-Rule	sol89	1989	only	-	Jul	27	12:06:30s -0:06:30 -
-Rule	sol89	1989	only	-	Jul	28	12:06:30s -0:06:30 -
-Rule	sol89	1989	only	-	Jul	29	12:06:25s -0:06:25 -
-Rule	sol89	1989	only	-	Jul	30	12:06:25s -0:06:25 -
-Rule	sol89	1989	only	-	Jul	31	12:06:20s -0:06:20 -
-Rule	sol89	1989	only	-	Aug	1	12:06:20s -0:06:20 -
-Rule	sol89	1989	only	-	Aug	2	12:06:15s -0:06:15 -
-Rule	sol89	1989	only	-	Aug	3	12:06:10s -0:06:10 -
-Rule	sol89	1989	only	-	Aug	4	12:06:05s -0:06:05 -
-Rule	sol89	1989	only	-	Aug	5	12:06:00s -0:06:00 -
-Rule	sol89	1989	only	-	Aug	6	12:05:50s -0:05:50 -
-Rule	sol89	1989	only	-	Aug	7	12:05:45s -0:05:45 -
-Rule	sol89	1989	only	-	Aug	8	12:05:35s -0:05:35 -
-Rule	sol89	1989	only	-	Aug	9	12:05:30s -0:05:30 -
-Rule	sol89	1989	only	-	Aug	10	12:05:20s -0:05:20 -
-Rule	sol89	1989	only	-	Aug	11	12:05:10s -0:05:10 -
-Rule	sol89	1989	only	-	Aug	12	12:05:00s -0:05:00 -
-Rule	sol89	1989	only	-	Aug	13	12:04:50s -0:04:50 -
-Rule	sol89	1989	only	-	Aug	14	12:04:40s -0:04:40 -
-Rule	sol89	1989	only	-	Aug	15	12:04:30s -0:04:30 -
-Rule	sol89	1989	only	-	Aug	16	12:04:15s -0:04:15 -
-Rule	sol89	1989	only	-	Aug	17	12:04:05s -0:04:05 -
-Rule	sol89	1989	only	-	Aug	18	12:03:50s -0:03:50 -
-Rule	sol89	1989	only	-	Aug	19	12:03:35s -0:03:35 -
-Rule	sol89	1989	only	-	Aug	20	12:03:25s -0:03:25 -
-Rule	sol89	1989	only	-	Aug	21	12:03:10s -0:03:10 -
-Rule	sol89	1989	only	-	Aug	22	12:02:55s -0:02:55 -
-Rule	sol89	1989	only	-	Aug	23	12:02:40s -0:02:40 -
-Rule	sol89	1989	only	-	Aug	24	12:02:20s -0:02:20 -
-Rule	sol89	1989	only	-	Aug	25	12:02:05s -0:02:05 -
-Rule	sol89	1989	only	-	Aug	26	12:01:50s -0:01:50 -
-Rule	sol89	1989	only	-	Aug	27	12:01:30s -0:01:30 -
-Rule	sol89	1989	only	-	Aug	28	12:01:15s -0:01:15 -
-Rule	sol89	1989	only	-	Aug	29	12:00:55s -0:00:55 -
-Rule	sol89	1989	only	-	Aug	30	12:00:40s -0:00:40 -
-Rule	sol89	1989	only	-	Aug	31	12:00:20s -0:00:20 -
-Rule	sol89	1989	only	-	Sep	1	12:00:00s 0:00:00 -
-Rule	sol89	1989	only	-	Sep	2	11:59:45s 0:00:15 -
-Rule	sol89	1989	only	-	Sep	3	11:59:25s 0:00:35 -
-Rule	sol89	1989	only	-	Sep	4	11:59:05s 0:00:55 -
-Rule	sol89	1989	only	-	Sep	5	11:58:45s 0:01:15 -
-Rule	sol89	1989	only	-	Sep	6	11:58:25s 0:01:35 -
-Rule	sol89	1989	only	-	Sep	7	11:58:05s 0:01:55 -
-Rule	sol89	1989	only	-	Sep	8	11:57:45s 0:02:15 -
-Rule	sol89	1989	only	-	Sep	9	11:57:20s 0:02:40 -
-Rule	sol89	1989	only	-	Sep	10	11:57:00s 0:03:00 -
-Rule	sol89	1989	only	-	Sep	11	11:56:40s 0:03:20 -
-Rule	sol89	1989	only	-	Sep	12	11:56:20s 0:03:40 -
-Rule	sol89	1989	only	-	Sep	13	11:56:00s 0:04:00 -
-Rule	sol89	1989	only	-	Sep	14	11:55:35s 0:04:25 -
-Rule	sol89	1989	only	-	Sep	15	11:55:15s 0:04:45 -
-Rule	sol89	1989	only	-	Sep	16	11:54:55s 0:05:05 -
-Rule	sol89	1989	only	-	Sep	17	11:54:35s 0:05:25 -
-Rule	sol89	1989	only	-	Sep	18	11:54:10s 0:05:50 -
-Rule	sol89	1989	only	-	Sep	19	11:53:50s 0:06:10 -
-Rule	sol89	1989	only	-	Sep	20	11:53:30s 0:06:30 -
-Rule	sol89	1989	only	-	Sep	21	11:53:10s 0:06:50 -
-Rule	sol89	1989	only	-	Sep	22	11:52:45s 0:07:15 -
-Rule	sol89	1989	only	-	Sep	23	11:52:25s 0:07:35 -
-Rule	sol89	1989	only	-	Sep	24	11:52:05s 0:07:55 -
-Rule	sol89	1989	only	-	Sep	25	11:51:45s 0:08:15 -
-Rule	sol89	1989	only	-	Sep	26	11:51:25s 0:08:35 -
-Rule	sol89	1989	only	-	Sep	27	11:51:05s 0:08:55 -
-Rule	sol89	1989	only	-	Sep	28	11:50:40s 0:09:20 -
-Rule	sol89	1989	only	-	Sep	29	11:50:20s 0:09:40 -
-Rule	sol89	1989	only	-	Sep	30	11:50:00s 0:10:00 -
-Rule	sol89	1989	only	-	Oct	1	11:49:45s 0:10:15 -
-Rule	sol89	1989	only	-	Oct	2	11:49:25s 0:10:35 -
-Rule	sol89	1989	only	-	Oct	3	11:49:05s 0:10:55 -
-Rule	sol89	1989	only	-	Oct	4	11:48:45s 0:11:15 -
-Rule	sol89	1989	only	-	Oct	5	11:48:30s 0:11:30 -
-Rule	sol89	1989	only	-	Oct	6	11:48:10s 0:11:50 -
-Rule	sol89	1989	only	-	Oct	7	11:47:50s 0:12:10 -
-Rule	sol89	1989	only	-	Oct	8	11:47:35s 0:12:25 -
-Rule	sol89	1989	only	-	Oct	9	11:47:20s 0:12:40 -
-Rule	sol89	1989	only	-	Oct	10	11:47:00s 0:13:00 -
-Rule	sol89	1989	only	-	Oct	11	11:46:45s 0:13:15 -
-Rule	sol89	1989	only	-	Oct	12	11:46:30s 0:13:30 -
-Rule	sol89	1989	only	-	Oct	13	11:46:15s 0:13:45 -
-Rule	sol89	1989	only	-	Oct	14	11:46:00s 0:14:00 -
-Rule	sol89	1989	only	-	Oct	15	11:45:50s 0:14:10 -
-Rule	sol89	1989	only	-	Oct	16	11:45:35s 0:14:25 -
-Rule	sol89	1989	only	-	Oct	17	11:45:20s 0:14:40 -
-Rule	sol89	1989	only	-	Oct	18	11:45:10s 0:14:50 -
-Rule	sol89	1989	only	-	Oct	19	11:45:00s 0:15:00 -
-Rule	sol89	1989	only	-	Oct	20	11:44:50s 0:15:10 -
-Rule	sol89	1989	only	-	Oct	21	11:44:40s 0:15:20 -
-Rule	sol89	1989	only	-	Oct	22	11:44:30s 0:15:30 -
-Rule	sol89	1989	only	-	Oct	23	11:44:20s 0:15:40 -
-Rule	sol89	1989	only	-	Oct	24	11:44:10s 0:15:50 -
-Rule	sol89	1989	only	-	Oct	25	11:44:05s 0:15:55 -
-Rule	sol89	1989	only	-	Oct	26	11:44:00s 0:16:00 -
-Rule	sol89	1989	only	-	Oct	27	11:43:50s 0:16:10 -
-Rule	sol89	1989	only	-	Oct	28	11:43:45s 0:16:15 -
-Rule	sol89	1989	only	-	Oct	29	11:43:40s 0:16:20 -
-Rule	sol89	1989	only	-	Oct	30	11:43:40s 0:16:20 -
-Rule	sol89	1989	only	-	Oct	31	11:43:35s 0:16:25 -
-Rule	sol89	1989	only	-	Nov	1	11:43:35s 0:16:25 -
-Rule	sol89	1989	only	-	Nov	2	11:43:35s 0:16:25 -
-Rule	sol89	1989	only	-	Nov	3	11:43:30s 0:16:30 -
-Rule	sol89	1989	only	-	Nov	4	11:43:35s 0:16:25 -
-Rule	sol89	1989	only	-	Nov	5	11:43:35s 0:16:25 -
-Rule	sol89	1989	only	-	Nov	6	11:43:35s 0:16:25 -
-Rule	sol89	1989	only	-	Nov	7	11:43:40s 0:16:20 -
-Rule	sol89	1989	only	-	Nov	8	11:43:45s 0:16:15 -
-Rule	sol89	1989	only	-	Nov	9	11:43:50s 0:16:10 -
-Rule	sol89	1989	only	-	Nov	10	11:43:55s 0:16:05 -
-Rule	sol89	1989	only	-	Nov	11	11:44:00s 0:16:00 -
-Rule	sol89	1989	only	-	Nov	12	11:44:05s 0:15:55 -
-Rule	sol89	1989	only	-	Nov	13	11:44:15s 0:15:45 -
-Rule	sol89	1989	only	-	Nov	14	11:44:25s 0:15:35 -
-Rule	sol89	1989	only	-	Nov	15	11:44:35s 0:15:25 -
-Rule	sol89	1989	only	-	Nov	16	11:44:45s 0:15:15 -
-Rule	sol89	1989	only	-	Nov	17	11:44:55s 0:15:05 -
-Rule	sol89	1989	only	-	Nov	18	11:45:10s 0:14:50 -
-Rule	sol89	1989	only	-	Nov	19	11:45:20s 0:14:40 -
-Rule	sol89	1989	only	-	Nov	20	11:45:35s 0:14:25 -
-Rule	sol89	1989	only	-	Nov	21	11:45:50s 0:14:10 -
-Rule	sol89	1989	only	-	Nov	22	11:46:05s 0:13:55 -
-Rule	sol89	1989	only	-	Nov	23	11:46:25s 0:13:35 -
-Rule	sol89	1989	only	-	Nov	24	11:46:40s 0:13:20 -
-Rule	sol89	1989	only	-	Nov	25	11:47:00s 0:13:00 -
-Rule	sol89	1989	only	-	Nov	26	11:47:20s 0:12:40 -
-Rule	sol89	1989	only	-	Nov	27	11:47:35s 0:12:25 -
-Rule	sol89	1989	only	-	Nov	28	11:47:55s 0:12:05 -
-Rule	sol89	1989	only	-	Nov	29	11:48:20s 0:11:40 -
-Rule	sol89	1989	only	-	Nov	30	11:48:40s 0:11:20 -
-Rule	sol89	1989	only	-	Dec	1	11:49:00s 0:11:00 -
-Rule	sol89	1989	only	-	Dec	2	11:49:25s 0:10:35 -
-Rule	sol89	1989	only	-	Dec	3	11:49:50s 0:10:10 -
-Rule	sol89	1989	only	-	Dec	4	11:50:15s 0:09:45 -
-Rule	sol89	1989	only	-	Dec	5	11:50:35s 0:09:25 -
-Rule	sol89	1989	only	-	Dec	6	11:51:00s 0:09:00 -
-Rule	sol89	1989	only	-	Dec	7	11:51:30s 0:08:30 -
-Rule	sol89	1989	only	-	Dec	8	11:51:55s 0:08:05 -
-Rule	sol89	1989	only	-	Dec	9	11:52:20s 0:07:40 -
-Rule	sol89	1989	only	-	Dec	10	11:52:50s 0:07:10 -
-Rule	sol89	1989	only	-	Dec	11	11:53:15s 0:06:45 -
-Rule	sol89	1989	only	-	Dec	12	11:53:45s 0:06:15 -
-Rule	sol89	1989	only	-	Dec	13	11:54:10s 0:05:50 -
-Rule	sol89	1989	only	-	Dec	14	11:54:40s 0:05:20 -
-Rule	sol89	1989	only	-	Dec	15	11:55:10s 0:04:50 -
-Rule	sol89	1989	only	-	Dec	16	11:55:40s 0:04:20 -
-Rule	sol89	1989	only	-	Dec	17	11:56:05s 0:03:55 -
-Rule	sol89	1989	only	-	Dec	18	11:56:35s 0:03:25 -
-Rule	sol89	1989	only	-	Dec	19	11:57:05s 0:02:55 -
-Rule	sol89	1989	only	-	Dec	20	11:57:35s 0:02:25 -
-Rule	sol89	1989	only	-	Dec	21	11:58:05s 0:01:55 -
-Rule	sol89	1989	only	-	Dec	22	11:58:35s 0:01:25 -
-Rule	sol89	1989	only	-	Dec	23	11:59:05s 0:00:55 -
-Rule	sol89	1989	only	-	Dec	24	11:59:35s 0:00:25 -
-Rule	sol89	1989	only	-	Dec	25	12:00:05s -0:00:05 -
-Rule	sol89	1989	only	-	Dec	26	12:00:35s -0:00:35 -
-Rule	sol89	1989	only	-	Dec	27	12:01:05s -0:01:05 -
-Rule	sol89	1989	only	-	Dec	28	12:01:35s -0:01:35 -
-Rule	sol89	1989	only	-	Dec	29	12:02:00s -0:02:00 -
-Rule	sol89	1989	only	-	Dec	30	12:02:30s -0:02:30 -
-Rule	sol89	1989	only	-	Dec	31	12:03:00s -0:03:00 -
-
-# Riyadh is at about 46 degrees 46 minutes East:  3 hrs, 7 mins, 4 secs
-# Before and after 1989, we'll operate on local mean solar time.
-
-# Zone	NAME		GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
-Zone	Asia/Riyadh89	3:07:04	-		zzz	1989
-			3:07:04	sol89		zzz	1990
-			3:07:04	-		zzz
-# For backward compatibility...
-Link	Asia/Riyadh89	Mideast/Riyadh89
--- a/test/jdk/sun/util/calendar/zi/tzdata/southamerica	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1987 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# tzdb data for South America and environs
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# This file is by no means authoritative; if you think you know better,
-# go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).  For more, please see
-# the file CONTRIBUTING in the tz distribution.
-
-# From Paul Eggert (2016-12-05):
-#
-# Unless otherwise specified, the source for data through 1990 is:
-# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
-# San Diego: ACS Publications, Inc. (2003).
-# Unfortunately this book contains many errors and cites no sources.
-#
-# Many years ago Gwillim Law wrote that a good source
-# for time zone data was the International Air Transport
-# Association's Standard Schedules Information Manual (IATA SSIM),
-# published semiannually.  Law sent in several helpful summaries
-# of the IATA's data after 1990.  Except where otherwise noted,
-# IATA SSIM is the source for entries after 1990.
-#
-# For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
-# https://www.jstor.org/stable/1774359
-#
-# These tables use numeric abbreviations like -03 and -0330 for
-# integer hour and minute UT offsets.  Although earlier editions used
-# alphabetic time zone abbreviations, these abbreviations were
-# invented and did not reflect common practice.
-
-###############################################################################
-
-###############################################################################
-
-# Argentina
-
-# From Bob Devine (1988-01-28):
-# Argentina: first Sunday in October to first Sunday in April since 1976.
-# Double Summer time from 1969 to 1974.  Switches at midnight.
-
-# From U. S. Naval Observatory (1988-01-19):
-# ARGENTINA           3 H BEHIND   UTC
-
-# From Hernan G. Otero (1995-06-26):
-# I am sending modifications to the Argentine time zone table...
-# AR was chosen because they are the ISO letters that represent Argentina.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Arg	1930	only	-	Dec	 1	0:00	1:00	-
-Rule	Arg	1931	only	-	Apr	 1	0:00	0	-
-Rule	Arg	1931	only	-	Oct	15	0:00	1:00	-
-Rule	Arg	1932	1940	-	Mar	 1	0:00	0	-
-Rule	Arg	1932	1939	-	Nov	 1	0:00	1:00	-
-Rule	Arg	1940	only	-	Jul	 1	0:00	1:00	-
-Rule	Arg	1941	only	-	Jun	15	0:00	0	-
-Rule	Arg	1941	only	-	Oct	15	0:00	1:00	-
-Rule	Arg	1943	only	-	Aug	 1	0:00	0	-
-Rule	Arg	1943	only	-	Oct	15	0:00	1:00	-
-Rule	Arg	1946	only	-	Mar	 1	0:00	0	-
-Rule	Arg	1946	only	-	Oct	 1	0:00	1:00	-
-Rule	Arg	1963	only	-	Oct	 1	0:00	0	-
-Rule	Arg	1963	only	-	Dec	15	0:00	1:00	-
-Rule	Arg	1964	1966	-	Mar	 1	0:00	0	-
-Rule	Arg	1964	1966	-	Oct	15	0:00	1:00	-
-Rule	Arg	1967	only	-	Apr	 2	0:00	0	-
-Rule	Arg	1967	1968	-	Oct	Sun>=1	0:00	1:00	-
-Rule	Arg	1968	1969	-	Apr	Sun>=1	0:00	0	-
-Rule	Arg	1974	only	-	Jan	23	0:00	1:00	-
-Rule	Arg	1974	only	-	May	 1	0:00	0	-
-Rule	Arg	1988	only	-	Dec	 1	0:00	1:00	-
-#
-# From Hernan G. Otero (1995-06-26):
-# These corrections were contributed by InterSoft Argentina S.A.,
-# obtaining the data from the:
-# Talleres de HidrografĂ­a Naval Argentina
-# (Argentine Naval Hydrography Institute)
-Rule	Arg	1989	1993	-	Mar	Sun>=1	0:00	0	-
-Rule	Arg	1989	1992	-	Oct	Sun>=15	0:00	1:00	-
-#
-# From Hernan G. Otero (1995-06-26):
-# From this moment on, the law that mandated the daylight saving
-# time corrections was derogated and no more modifications
-# to the time zones (for daylight saving) are now made.
-#
-# From Rives McDow (2000-01-10):
-# On October 3, 1999, 0:00 local, Argentina implemented daylight savings time,
-# which did not result in the switch of a time zone, as they stayed 9 hours
-# from the International Date Line.
-Rule	Arg	1999	only	-	Oct	Sun>=1	0:00	1:00	-
-# From Paul Eggert (2007-12-28):
-# DST was set to expire on March 5, not March 3, but since it was converted
-# to standard time on March 3 it's more convenient for us to pretend that
-# it ended on March 3.
-Rule	Arg	2000	only	-	Mar	3	0:00	0	-
-#
-# From Peter Gradelski via Steffen Thorsen (2000-03-01):
-# We just checked with our SĂŁo Paulo office and they say the government of
-# Argentina decided not to become one of the countries that go on or off DST.
-# So Buenos Aires should be -3 hours from GMT at all times.
-#
-# From Fabiån L. Arce Jofré (2000-04-04):
-# The law that claimed DST for Argentina was derogated by President Fernando
-# de la RĂșa on March 2, 2000, because it would make people spend more energy
-# in the winter time, rather than less.  The change took effect on March 3.
-#
-# From Mariano Absatz (2001-06-06):
-# one of the major newspapers here in Argentina said that the 1999
-# Timezone Law (which never was effectively applied) will (would?) be
-# in effect.... The article is at
-# http://ar.clarin.com/diario/2001-06-06/e-01701.htm
-# ... The Law itself is "Ley No. 25155", sanctioned on 1999-08-25, enacted
-# 1999-09-17, and published 1999-09-21.  The official publication is at:
-# http://www.boletin.jus.gov.ar/BON/Primera/1999/09-Septiembre/21/PDF/BO21-09-99LEG.PDF
-# Regretfully, you have to subscribe (and pay) for the on-line version....
-#
-# (2001-06-12):
-# the timezone for Argentina will not change next Sunday.
-# Apparently it will do so on Sunday 24th....
-# http://ar.clarin.com/diario/2001-06-12/s-03501.htm
-#
-# (2001-06-25):
-# Last Friday (yes, the last working day before the date of the change), the
-# Senate annulled the 1999 law that introduced the changes later postponed.
-# http://www.clarin.com.ar/diario/2001-06-22/s-03601.htm
-# It remains the vote of the Deputies..., but it will be the same....
-# This kind of things had always been done this way in Argentina.
-# We are still -03:00 all year round in all of the country.
-#
-# From Steffen Thorsen (2007-12-21):
-# A user (Leonardo Chaim) reported that Argentina will adopt DST....
-# all of the country (all Zone-entries) are affected.  News reports like
-# http://www.lanacion.com.ar/opinion/nota.asp?nota_id=973037 indicate
-# that Argentina will use DST next year as well, from October to
-# March, although exact rules are not given.
-#
-# From Jesper NĂžrgaard Welen (2007-12-26)
-# The last hurdle of Argentina DST is over, the proposal was approved in
-# the lower chamber too (Diputados) with a vote 192 for and 2 against.
-# By the way thanks to Mariano Absatz and Daniel Mario Vega for the link to
-# the original scanned proposal, where the dates and the zero hours are
-# clear and unambiguous...This is the article about final approval:
-# http://www.lanacion.com.ar/politica/nota.asp?nota_id=973996
-#
-# From Paul Eggert (2007-12-22):
-# For dates after mid-2008, the following rules are my guesses and
-# are quite possibly wrong, but are more likely than no DST at all.
-
-# From Alexander Krivenyshev (2008-09-05):
-# As per message from Carlos Alberto Fonseca Arauz (Nicaragua),
-# Argentina will start DST on Sunday October 19, 2008.
-#
-# http://www.worldtimezone.com/dst_news/dst_news_argentina03.html
-# http://www.impulsobaires.com.ar/nota.php?id=57832 (in spanish)
-
-# From Juan Manuel Docile in https://bugs.gentoo.org/240339 (2008-10-07)
-# via Rodrigo Severo:
-# Argentinian law No. 25.155 is no longer valid.
-# http://www.infoleg.gov.ar/infolegInternet/anexos/60000-64999/60036/norma.htm
-# The new one is law No. 26.350
-# http://www.infoleg.gov.ar/infolegInternet/anexos/135000-139999/136191/norma.htm
-# So there is no summer time in Argentina for now.
-
-# From Mariano Absatz (2008-10-20):
-# Decree 1693/2008 applies Law 26.350 for the summer 2008/2009 establishing DST
-# in Argentina from 2008-10-19 until 2009-03-15.
-# http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=16102008&pi=3&pf=4&s=0&sec=01
-#
-
-# Decree 1705/2008 excepting 12 Provinces from applying DST in the summer
-# 2008/2009: Catamarca, La Rioja, Mendoza, Salta, San Juan, San Luis, La
-# Pampa, Neuquén, Rio Negro, Chubut, Santa Cruz and Tierra del Fuego
-# http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=17102008&pi=1&pf=1&s=0&sec=01
-#
-# Press release 235 dated Saturday October 18th, from the Government of the
-# Province of Jujuy saying it will not apply DST either (even when it was not
-# included in Decree 1705/2008).
-# http://www.jujuy.gov.ar/index2/partes_prensa/18_10_08/235-181008.doc
-
-# From fullinet (2009-10-18):
-# As announced in
-# http://www.argentina.gob.ar/argentina/portal/paginas.dhtml?pagina=356
-# (an official .gob.ar) under title: "Sin Cambio de Hora"
-# (English: "No hour change").
-#
-# "Por el momento, el Gobierno Nacional resolviĂł no modificar la hora
-# oficial, decisiĂłn que estaba en estudio para su implementaciĂłn el
-# domingo 18 de octubre. Desde el Ministerio de PlanificaciĂłn se anunciĂł
-# que la Argentina hoy, en estas condiciones meteorolĂłgicas, no necesita
-# la modificaciĂłn del huso horario, ya que 2009 nos encuentra con
-# crecimiento en la producción y distribución energética."
-
-Rule	Arg	2007	only	-	Dec	30	0:00	1:00	-
-Rule	Arg	2008	2009	-	Mar	Sun>=15	0:00	0	-
-Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	-
-
-# From Mariano Absatz (2004-05-21):
-# Today it was officially published that the Province of Mendoza is changing
-# its timezone this winter... starting tomorrow night....
-# http://www.gobernac.mendoza.gov.ar/boletin/pdf/20040521-27158-normas.pdf
-# From Paul Eggert (2004-05-24):
-# It's Law No. 7,210.  This change is due to a public power emergency, so for
-# now we'll assume it's for this year only.
-#
-# From Paul Eggert (2018-01-31):
-# Hora de verano para la RepĂșblica Argentina
-# http://buenasiembra.com.ar/esoterismo/astrologia/hora-de-verano-de-la-republica-argentina-27.html
-# says that standard time in Argentina from 1894-10-31
-# to 1920-05-01 was -4:16:48.25.  Go with this more-precise value
-# over Shanks & Pottenger.  It is upward compatible with Milne, who
-# says CĂłrdoba time was -4:16:48.2.
-
-#
-# From Mariano Absatz (2004-06-05):
-# These media articles from a major newspaper mostly cover the current state:
-# http://www.lanacion.com.ar/04/05/27/de_604825.asp
-# http://www.lanacion.com.ar/04/05/28/de_605203.asp
-#
-# The following eight (8) provinces pulled clocks back to UTC-04:00 at
-# midnight Monday May 31st. (that is, the night between 05/31 and 06/01).
-# Apparently, all nine provinces would go back to UTC-03:00 at the same
-# time in October 17th.
-#
-# Catamarca, Chubut, La Rioja, San Juan, San Luis, Santa Cruz,
-# Tierra del Fuego, TucumĂĄn.
-#
-# From Mariano Absatz (2004-06-14):
-# ... this weekend, the Province of TucumĂĄn decided it'd go back to UTC-03:00
-# yesterday midnight (that is, at 24:00 Saturday 12th), since the people's
-# annoyance with the change is much higher than the power savings obtained....
-#
-# From Gwillim Law (2004-06-14):
-# http://www.lanacion.com.ar/04/06/10/de_609078.asp ...
-#     "The time change in Tierra del Fuego was a conflicted decision from
-#   the start.  The government had decreed that the measure would take
-#   effect on June 1, but a normative error forced the new time to begin
-#   three days earlier, from a Saturday to a Sunday....
-# Our understanding was that the change was originally scheduled to take place
-# on June 1 at 00:00 in Chubut, Santa Cruz, Tierra del Fuego (and some other
-# provinces).  Sunday was May 30, only two days earlier.  So the article
-# contains a contradiction.  I would give more credence to the Saturday/Sunday
-# date than the "three days earlier" phrase, and conclude that Tierra del
-# Fuego set its clocks back at 2004-05-30 00:00.
-#
-# From Steffen Thorsen (2004-10-05):
-# The previous law 7210 which changed the province of Mendoza's time zone
-# back in May have been modified slightly in a new law 7277, which set the
-# new end date to 2004-09-26 (original date was 2004-10-17).
-# http://www.gobernac.mendoza.gov.ar/boletin/pdf/20040924-27244-normas.pdf
-#
-# From Mariano Absatz (2004-10-05):
-# San Juan changed from UTC-03:00 to UTC-04:00 at midnight between
-# Sunday, May 30th and Monday, May 31st.  It changed back to UTC-03:00
-# at midnight between Saturday, July 24th and Sunday, July 25th....
-# http://www.sanjuan.gov.ar/prensa/archivo/000329.html
-# http://www.sanjuan.gov.ar/prensa/archivo/000426.html
-# http://www.sanjuan.gov.ar/prensa/archivo/000441.html
-
-# From Alex Krivenyshev (2008-01-17):
-# Here are articles that Argentina Province San Luis is planning to end DST
-# as earlier as upcoming Monday January 21, 2008 or February 2008:
-#
-# Provincia argentina retrasa reloj y marca diferencia con resto del paĂ­s
-# (Argentine Province delayed clock and mark difference with the rest of the
-# country)
-# http://cl.invertia.com/noticias/noticia.aspx?idNoticia=200801171849_EFE_ET4373&idtel
-#
-# Es inminente que en San Luis atrasen una hora los relojes
-# (It is imminent in San Luis clocks one hour delay)
-# https://www.lagaceta.com.ar/nota/253414/Economia/Es-inminente-que-en-San-Luis-atrasen-una-hora-los-relojes.html
-# http://www.worldtimezone.com/dst_news/dst_news_argentina02.html
-
-# From Jesper NĂžrgaard Welen (2008-01-18):
-# The page of the San Luis provincial government
-# http://www.sanluis.gov.ar/notas.asp?idCanal=0&id=22812
-# confirms what Alex Krivenyshev has earlier sent to the tz
-# emailing list about that San Luis plans to return to standard
-# time much earlier than the rest of the country. It also
-# confirms that upon request the provinces San Juan and Mendoza
-# refused to follow San Luis in this change.
-#
-# The change is supposed to take place Monday the 21st at 0:00
-# hours. As far as I understand it if this goes ahead, we need
-# a new timezone for San Luis (although there are also documented
-# independent changes in the southamerica file of San Luis in
-# 1990 and 1991 which has not been confirmed).
-
-# From Jesper NĂžrgaard Welen (2008-01-25):
-# Unfortunately the below page has become defunct, about the San Luis
-# time change. Perhaps because it now is part of a group of pages "Most
-# important pages of 2008."
-#
-# You can use
-# http://www.sanluis.gov.ar/notas.asp?idCanal=8141&id=22834
-# instead it seems. Or use "Buscador" from the main page of the San Luis
-# government, and fill in "huso" and click OK, and you will get 3 pages
-# from which the first one is identical to the above.
-
-# From Mariano Absatz (2008-01-28):
-# I can confirm that the Province of San Luis (and so far only that
-# province) decided to go back to UTC-3 effective midnight Jan 20th 2008
-# (that is, Monday 21st at 0:00 is the time the clocks were delayed back
-# 1 hour), and they intend to keep UTC-3 as their timezone all year round
-# (that is, unless they change their mind any minute now).
-#
-# So we'll have to add yet another city to 'southamerica' (I think San
-# Luis city is the mos populated city in the Province, so it'd be
-# America/Argentina/San_Luis... of course I can't remember if San Luis's
-# history of particular changes goes along with Mendoza or San Juan :-(
-# (I only remember not being able to collect hard facts about San Luis
-# back in 2004, when these provinces changed to UTC-4 for a few days, I
-# mailed them personally and never got an answer).
-
-# From Paul Eggert (2014-08-12):
-# Unless otherwise specified, data entries are from Shanks & Pottenger through
-# 1992, from the IATA otherwise.  As noted below, Shanks & Pottenger say that
-# America/Cordoba split into 6 subregions during 1991/1992, one of which
-# was America/San_Luis, but we haven't verified this yet so for now we'll
-# keep America/Cordoba a single region rather than splitting it into the
-# other 5 subregions.
-
-# From Mariano Absatz (2009-03-13):
-# Yesterday (with our usual 2-day notice) the Province of San Luis
-# decided that next Sunday instead of "staying" @utc-03:00 they will go
-# to utc-04:00 until the second Saturday in October...
-#
-# The press release is at
-# http://www.sanluis.gov.ar/SL/Paginas/NoticiaDetalle.asp?TemaId=1&InfoPrensaId=3102
-# (I couldn't find the decree, but www.sanluis.gov.ar
-# is the official page for the Province Government.)
-#
-# There's also a note in only one of the major national papers ...
-# http://www.lanacion.com.ar/nota.asp?nota_id=1107912
-#
-# The press release says [quick and dirty translation]:
-# ... announced that next Sunday, at 00:00, Puntanos (the San Luis
-# inhabitants) will have to turn back one hour their clocks
-#
-# Since then, San Luis will establish its own Province timezone. Thus,
-# during 2009, this timezone change will run from 00:00 the third Sunday
-# in March until 24:00 of the second Saturday in October.
-
-# From Mariano Absatz (2009-10-16):
-# ...the Province of San Luis is a case in itself.
-#
-# The Law at
-# http://www.diputadossanluis.gov.ar/diputadosasp/paginas/verNorma.asp?NormaID=276
-# is ambiguous because establishes a calendar from the 2nd Sunday in
-# October at 0:00 thru the 2nd Saturday in March at 24:00 and the
-# complement of that starting on the 2nd Sunday of March at 0:00 and
-# ending on the 2nd Saturday of March at 24:00.
-#
-# This clearly breaks every time the 1st of March or October is a Sunday.
-#
-# IMHO, the "spirit of the Law" is to make the changes at 0:00 on the 2nd
-# Sunday of October and March.
-#
-# The problem is that the changes in the rest of the Provinces that did
-# change in 2007/2008, were made according to the Federal Law and Decrees
-# that did so on the 3rd Sunday of October and March.
-#
-# In fact, San Luis actually switched from UTC-4 to UTC-3 last Sunday
-# (October 11th) at 0:00.
-#
-# So I guess a new set of rules, besides "Arg", must be made and the last
-# America/Argentina/San_Luis entries should change to use these...
-# ...
-
-# From Alexander Krivenyshev (2010-04-09):
-# According to news reports from El Diario de la RepĂșblica Province San
-# Luis, Argentina (standard time UTC-04) will keep Daylight Saving Time
-# after April 11, 2010 - will continue to have same time as rest of
-# Argentina (UTC-3) (no DST).
-#
-# Confirmaron la prĂłrroga del huso horario de verano (Spanish)
-# http://www.eldiariodelarepublica.com/index.php?option=com_content&task=view&id=29383&Itemid=9
-# or (some English translation):
-# http://www.worldtimezone.com/dst_news/dst_news_argentina08.html
-
-# From Mariano Absatz (2010-04-12):
-# yes...I can confirm this...and given that San Luis keeps calling
-# UTC-03:00 "summer time", we should't just let San Luis go back to "Arg"
-# rules...San Luis is still using "Western ARgentina Time" and it got
-# stuck on Summer daylight savings time even though the summer is over.
-
-# From Paul Eggert (2018-01-23):
-# Perhaps San Luis operates on the legal fiction that it is at -04
-# with perpetual daylight saving time, but ordinary usage typically seems to
-# just say it's at -03; see, for example,
-# https://es.wikipedia.org/wiki/Hora_oficial_argentina
-# We've documented similar situations as being plain changes to
-# standard time, so let's do that here too.  This does not change UTC
-# offsets, only tm_isdst and the time zone abbreviations.  One minor
-# plus is that this silences a zic complaint that there's no POSIX TZ
-# setting for timestamps past 2038.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-#
-# Buenos Aires (BA), Capital Federal (CF),
-Zone America/Argentina/Buenos_Aires -3:53:48 - LMT	1894 Oct 31
-			-4:16:48 -	CMT	1920 May    # CĂłrdoba Mean Time
-			-4:00	-	-04	1930 Dec
-			-4:00	Arg	-04/-03	1969 Oct  5
-			-3:00	Arg	-03/-02	1999 Oct  3
-			-4:00	Arg	-04/-03	2000 Mar  3
-			-3:00	Arg	-03/-02
-#
-# CĂłrdoba (CB), Santa Fe (SF), Entre RĂ­os (ER), Corrientes (CN), Misiones (MN),
-# Chaco (CC), Formosa (FM), Santiago del Estero (SE)
-#
-# Shanks & Pottenger also make the following claims, which we haven't verified:
-# - Formosa switched to -3:00 on 1991-01-07.
-# - Misiones switched to -3:00 on 1990-12-29.
-# - Chaco switched to -3:00 on 1991-01-04.
-# - Santiago del Estero switched to -4:00 on 1991-04-01,
-#   then to -3:00 on 1991-04-26.
-#
-Zone America/Argentina/Cordoba -4:16:48 - LMT	1894 Oct 31
-			-4:16:48 -	CMT	1920 May
-			-4:00	-	-04	1930 Dec
-			-4:00	Arg	-04/-03	1969 Oct  5
-			-3:00	Arg	-03/-02	1991 Mar  3
-			-4:00	-	-04	1991 Oct 20
-			-3:00	Arg	-03/-02	1999 Oct  3
-			-4:00	Arg	-04/-03	2000 Mar  3
-			-3:00	Arg	-03/-02
-#
-# Salta (SA), La Pampa (LP), Neuquén (NQ), Rio Negro (RN)
-Zone America/Argentina/Salta -4:21:40 - LMT	1894 Oct 31
-			-4:16:48 -	CMT	1920 May
-			-4:00	-	-04	1930 Dec
-			-4:00	Arg	-04/-03	1969 Oct  5
-			-3:00	Arg	-03/-02	1991 Mar  3
-			-4:00	-	-04	1991 Oct 20
-			-3:00	Arg	-03/-02	1999 Oct  3
-			-4:00	Arg	-04/-03	2000 Mar  3
-			-3:00	Arg	-03/-02	2008 Oct 18
-			-3:00	-	-03
-#
-# TucumĂĄn (TM)
-Zone America/Argentina/Tucuman -4:20:52 - LMT	1894 Oct 31
-			-4:16:48 -	CMT	1920 May
-			-4:00	-	-04	1930 Dec
-			-4:00	Arg	-04/-03	1969 Oct  5
-			-3:00	Arg	-03/-02	1991 Mar  3
-			-4:00	-	-04	1991 Oct 20
-			-3:00	Arg	-03/-02	1999 Oct  3
-			-4:00	Arg	-04/-03	2000 Mar  3
-			-3:00	-	-03	2004 Jun  1
-			-4:00	-	-04	2004 Jun 13
-			-3:00	Arg	-03/-02
-#
-# La Rioja (LR)
-Zone America/Argentina/La_Rioja -4:27:24 - LMT	1894 Oct 31
-			-4:16:48 -	CMT	1920 May
-			-4:00	-	-04	1930 Dec
-			-4:00	Arg	-04/-03	1969 Oct  5
-			-3:00	Arg	-03/-02	1991 Mar  1
-			-4:00	-	-04	1991 May  7
-			-3:00	Arg	-03/-02	1999 Oct  3
-			-4:00	Arg	-04/-03	2000 Mar  3
-			-3:00	-	-03	2004 Jun  1
-			-4:00	-	-04	2004 Jun 20
-			-3:00	Arg	-03/-02	2008 Oct 18
-			-3:00	-	-03
-#
-# San Juan (SJ)
-Zone America/Argentina/San_Juan -4:34:04 - LMT	1894 Oct 31
-			-4:16:48 -	CMT	1920 May
-			-4:00	-	-04	1930 Dec
-			-4:00	Arg	-04/-03	1969 Oct  5
-			-3:00	Arg	-03/-02	1991 Mar  1
-			-4:00	-	-04	1991 May  7
-			-3:00	Arg	-03/-02	1999 Oct  3
-			-4:00	Arg	-04/-03	2000 Mar  3
-			-3:00	-	-03	2004 May 31
-			-4:00	-	-04	2004 Jul 25
-			-3:00	Arg	-03/-02	2008 Oct 18
-			-3:00	-	-03
-#
-# Jujuy (JY)
-Zone America/Argentina/Jujuy -4:21:12 -	LMT	1894 Oct 31
-			-4:16:48 -	CMT	1920 May
-			-4:00	-	-04	1930 Dec
-			-4:00	Arg	-04/-03	1969 Oct  5
-			-3:00	Arg	-03/-02	1990 Mar  4
-			-4:00	-	-04	1990 Oct 28
-			-4:00	1:00	-03	1991 Mar 17
-			-4:00	-	-04	1991 Oct  6
-			-3:00	1:00	-02	1992
-			-3:00	Arg	-03/-02	1999 Oct  3
-			-4:00	Arg	-04/-03	2000 Mar  3
-			-3:00	Arg	-03/-02	2008 Oct 18
-			-3:00	-	-03
-#
-# Catamarca (CT), Chubut (CH)
-Zone America/Argentina/Catamarca -4:23:08 - LMT	1894 Oct 31
-			-4:16:48 -	CMT	1920 May
-			-4:00	-	-04	1930 Dec
-			-4:00	Arg	-04/-03	1969 Oct  5
-			-3:00	Arg	-03/-02	1991 Mar  3
-			-4:00	-	-04	1991 Oct 20
-			-3:00	Arg	-03/-02	1999 Oct  3
-			-4:00	Arg	-04/-03	2000 Mar  3
-			-3:00	-	-03	2004 Jun  1
-			-4:00	-	-04	2004 Jun 20
-			-3:00	Arg	-03/-02	2008 Oct 18
-			-3:00	-	-03
-#
-# Mendoza (MZ)
-Zone America/Argentina/Mendoza -4:35:16 - LMT	1894 Oct 31
-			-4:16:48 -	CMT	1920 May
-			-4:00	-	-04	1930 Dec
-			-4:00	Arg	-04/-03	1969 Oct  5
-			-3:00	Arg	-03/-02	1990 Mar  4
-			-4:00	-	-04	1990 Oct 15
-			-4:00	1:00	-03	1991 Mar  1
-			-4:00	-	-04	1991 Oct 15
-			-4:00	1:00	-03	1992 Mar  1
-			-4:00	-	-04	1992 Oct 18
-			-3:00	Arg	-03/-02	1999 Oct  3
-			-4:00	Arg	-04/-03	2000 Mar  3
-			-3:00	-	-03	2004 May 23
-			-4:00	-	-04	2004 Sep 26
-			-3:00	Arg	-03/-02	2008 Oct 18
-			-3:00	-	-03
-#
-# San Luis (SL)
-
-Rule	SanLuis	2008	2009	-	Mar	Sun>=8	0:00	0	-
-Rule	SanLuis	2007	2008	-	Oct	Sun>=8	0:00	1:00	-
-
-Zone America/Argentina/San_Luis -4:25:24 - LMT	1894 Oct 31
-			-4:16:48 -	CMT	1920 May
-			-4:00	-	-04	1930 Dec
-			-4:00	Arg	-04/-03	1969 Oct  5
-			-3:00	Arg	-03/-02	1990
-			-3:00	1:00	-02	1990 Mar 14
-			-4:00	-	-04	1990 Oct 15
-			-4:00	1:00	-03	1991 Mar  1
-			-4:00	-	-04	1991 Jun  1
-			-3:00	-	-03	1999 Oct  3
-			-4:00	1:00	-03	2000 Mar  3
-			-3:00	-	-03	2004 May 31
-			-4:00	-	-04	2004 Jul 25
-			-3:00	Arg	-03/-02	2008 Jan 21
-			-4:00	SanLuis	-04/-03	2009 Oct 11
-			-3:00	-	-03
-#
-# Santa Cruz (SC)
-Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT	1894 Oct 31
-			-4:16:48 -	CMT	1920 May
-			-4:00	-	-04	1930 Dec
-			-4:00	Arg	-04/-03	1969 Oct  5
-			-3:00	Arg	-03/-02	1999 Oct  3
-			-4:00	Arg	-04/-03	2000 Mar  3
-			-3:00	-	-03	2004 Jun  1
-			-4:00	-	-04	2004 Jun 20
-			-3:00	Arg	-03/-02	2008 Oct 18
-			-3:00	-	-03
-#
-# Tierra del Fuego, AntĂĄrtida e Islas del AtlĂĄntico Sur (TF)
-Zone America/Argentina/Ushuaia -4:33:12 - LMT	1894 Oct 31
-			-4:16:48 -	CMT	1920 May
-			-4:00	-	-04	1930 Dec
-			-4:00	Arg	-04/-03	1969 Oct  5
-			-3:00	Arg	-03/-02	1999 Oct  3
-			-4:00	Arg	-04/-03	2000 Mar  3
-			-3:00	-	-03	2004 May 30
-			-4:00	-	-04	2004 Jun 20
-			-3:00	Arg	-03/-02	2008 Oct 18
-			-3:00	-	-03
-
-# Aruba
-Link America/Curacao America/Aruba
-
-# Bolivia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/La_Paz	-4:32:36 -	LMT	1890
-			-4:32:36 -	CMT	1931 Oct 15 # Calamarca MT
-			-4:32:36 1:00	BST	1932 Mar 21 # Bolivia ST
-			-4:00	-	-04
-
-# Brazil
-
-# From Paul Eggert (1993-11-18):
-# The mayor of Rio recently attempted to change the time zone rules
-# just in his city, in order to leave more summer time for the tourist trade.
-# The rule change lasted only part of the day;
-# the federal government refused to follow the city's rules, and business
-# was in a chaos, so the mayor backed down that afternoon.
-
-# From IATA SSIM (1996-02):
-# _Only_ the following states in BR1 observe DST: Rio Grande do Sul (RS),
-# Santa Catarina (SC), ParanĂĄ (PR), SĂŁo Paulo (SP), Rio de Janeiro (RJ),
-# EspĂ­rito Santo (ES), Minas Gerais (MG), Bahia (BA), GoiĂĄs (GO),
-# Distrito Federal (DF), Tocantins (TO), Sergipe [SE] and Alagoas [AL].
-# [The last three states are new to this issue of the IATA SSIM.]
-
-# From Gwillim Law (1996-10-07):
-# Geography, history (Tocantins was part of GoiĂĄs until 1989), and other
-# sources of time zone information lead me to believe that AL, SE, and TO were
-# always in BR1, and so the only change was whether or not they observed DST....
-# The earliest issue of the SSIM I have is 2/91.  Each issue from then until
-# 9/95 says that DST is observed only in the ten states I quoted from 9/95,
-# along with Mato Grosso (MT) and Mato Grosso do Sul (MS), which are in BR2
-# (UTC-4)....  The other two time zones given for Brazil are BR3, which is
-# UTC-5, no DST, and applies only in the state of Acre (AC); and BR4, which is
-# UTC-2, and applies to Fernando de Noronha (formerly FN, but I believe it's
-# become part of the state of Pernambuco).  The boundary between BR1 and BR2
-# has never been clearly stated.  They've simply been called East and West.
-# However, some conclusions can be drawn from another IATA manual: the Airline
-# Coding Directory, which lists close to 400 airports in Brazil.  For each
-# airport it gives a time zone which is coded to the SSIM.  From that
-# information, I'm led to conclude that the states of AmapĂĄ (AP), CearĂĄ (CE),
-# MaranhĂŁo (MA), ParaĂ­ba (PR), Pernambuco (PE), PiauĂ­ (PI), and Rio Grande do
-# Norte (RN), and the eastern part of ParĂĄ (PA) are all in BR1 without DST.
-
-# From Marcos Tadeu (1998-09-27):
-# Brazilian official page <http://pcdsh01.on.br/verao1.html>
-
-# From Jesper NĂžrgaard (2000-11-03):
-# [For an official list of which regions in Brazil use which time zones, see:]
-# http://pcdsh01.on.br/Fusbr.htm
-# http://pcdsh01.on.br/Fusbrhv.htm
-
-# From Celso Doria via David Madeo (2002-10-09):
-# The reason for the delay this year has to do with elections in Brazil.
-#
-# Unlike in the United States, elections in Brazil are 100% computerized and
-# the results are known almost immediately.  Yesterday, it was the first
-# round of the elections when 115 million Brazilians voted for President,
-# Governor, Senators, Federal Deputies, and State Deputies.  Nobody is
-# counting (or re-counting) votes anymore and we know there will be a second
-# round for the Presidency and also for some Governors.  The 2nd round will
-# take place on October 27th.
-#
-# The reason why the DST will only begin November 3rd is that the thousands
-# of electoral machines used cannot have their time changed, and since the
-# Constitution says the elections must begin at 8:00 AM and end at 5:00 PM,
-# the Government decided to postpone DST, instead of changing the Constitution
-# (maybe, for the next elections, it will be possible to change the clock)...
-
-# From Rodrigo Severo (2004-10-04):
-# It's just the biannual change made necessary by the much hyped, supposedly
-# modern Brazilian eletronic voting machines which, apparently, can't deal
-# with a time change between the first and the second rounds of the elections.
-
-# From Steffen Thorsen (2007-09-20):
-# Brazil will start DST on 2007-10-14 00:00 and end on 2008-02-17 00:00:
-# http://www.mme.gov.br/site/news/detail.do;jsessionid=BBA06811AFCAAC28F0285210913513DA?newsId=13975
-
-# From Paul Schulze (2008-06-24):
-# ...by law number 11.662 of April 24, 2008 (published in the "Diario
-# Oficial da UniĂŁo"...) in Brazil there are changes in the timezones,
-# effective today (00:00am at June 24, 2008) as follows:
-#
-# a) The timezone UTC+5 is extinguished, with all the Acre state and the
-# part of the Amazonas state that had this timezone now being put to the
-# timezone UTC+4
-# b) The whole ParĂĄ state now is put at timezone UTC+3, instead of just
-# part of it, as was before.
-#
-# This change follows a proposal of senator Tiao Viana of Acre state, that
-# proposed it due to concerns about open television channels displaying
-# programs inappropriate to youths in the states that had the timezone
-# UTC+5 too early in the night. In the occasion, some more corrections
-# were proposed, trying to unify the timezones of any given state. This
-# change modifies timezone rules defined in decree 2.784 of 18 June,
-# 1913.
-
-# From Rodrigo Severo (2008-06-24):
-# Just correcting the URL:
-# https://www.in.gov.br/imprensa/visualiza/index.jsp?jornal=do&secao=1&pagina=1&data=25/04/2008
-#
-# As a result of the above Decree I believe the America/Rio_Branco
-# timezone shall be modified from UTC-5 to UTC-4 and a new timezone shall
-# be created to represent the...west side of the ParĂĄ State. I
-# suggest this new timezone be called Santarem as the most
-# important/populated city in the affected area.
-#
-# This new timezone would be the same as the Rio_Branco timezone up to
-# the 2008/06/24 change which would be to UTC-3 instead of UTC-4.
-
-# From Alex Krivenyshev (2008-06-24):
-# This is a quick reference page for New and Old Brazil Time Zones map.
-# http://www.worldtimezone.com/brazil-time-new-old.php
-#
-# - 4 time zones replaced by 3 time zones - eliminating time zone UTC-05
-# (state Acre and the part of the Amazonas will be UTC/GMT-04) - western
-# part of Par state is moving to one timezone UTC-03 (from UTC-04).
-
-# From Paul Eggert (2002-10-10):
-# The official decrees referenced below are mostly taken from
-# Decretos sobre o HorĂĄrio de VerĂŁo no Brasil.
-# http://pcdsh01.on.br/DecHV.html
-
-# From Steffen Thorsen (2008-08-29):
-# As announced by the government and many newspapers in Brazil late
-# yesterday, Brazil will start DST on 2008-10-19 (need to change rule) and
-# it will end on 2009-02-15 (current rule for Brazil is fine). Based on
-# past years experience with the elections, there was a good chance that
-# the start was postponed to November, but it did not happen this year.
-#
-# It has not yet been posted to http://pcdsh01.on.br/DecHV.html
-#
-# An official page about it:
-# http://www.mme.gov.br/site/news/detail.do?newsId=16722
-# Note that this link does not always work directly, but must be accessed
-# by going to
-# http://www.mme.gov.br/first
-#
-# One example link that works directly:
-# http://jornale.com.br/index.php?option=com_content&task=view&id=13530&Itemid=54
-# (Portuguese)
-#
-# We have a written a short article about it as well:
-# https://www.timeanddate.com/news/time/brazil-dst-2008-2009.html
-#
-# From Alexander Krivenyshev (2011-10-04):
-# State Bahia will return to Daylight savings time this year after 8 years off.
-# The announcement was made by Governor Jaques Wagner in an interview to a
-# television station in Salvador.
-
-# In Portuguese:
-# http://g1.globo.com/bahia/noticia/2011/10/governador-jaques-wagner-confirma-horario-de-verao-na-bahia.html
-# https://noticias.terra.com.br/brasil/noticias/0,,OI5390887-EI8139,00-Bahia+volta+a+ter+horario+de+verao+apos+oito+anos.html
-
-# From Guilherme Bernardes Rodrigues (2011-10-07):
-# There is news in the media, however there is still no decree about it.
-# I just send a e-mail to Zulmira Brandao at http://pcdsh01.on.br/ the
-# official agency about time in Brazil, and she confirmed that the old rule is
-# still in force.
-
-# From Guilherme Bernardes Rodrigues (2011-10-14)
-# It's official, the President signed a decree that includes Bahia in summer
-# time.
-#	 [ and in a second message (same day): ]
-# I found the decree.
-#
-# DECRETO No. 7.584, DE 13 DE OUTUBRO DE 2011
-# Link :
-# http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6
-
-# From Kelley Cook (2012-10-16):
-# The governor of state of Bahia in Brazil announced on Thursday that
-# due to public pressure, he is reversing the DST policy they implemented
-# last year and will not be going to Summer Time on October 21st....
-# http://www.correio24horas.com.br/r/artigo/apos-pressoes-wagner-suspende-horario-de-verao-na-bahia
-
-# From Rodrigo Severo (2012-10-16):
-# Tocantins state will have DST.
-# https://noticias.terra.com.br/brasil/noticias/0,,OI6232536-EI306.html
-
-# From Steffen Thorsen (2013-09-20):
-# Tocantins in Brazil is very likely not to observe DST from October....
-# http://conexaoto.com.br/2013/09/18/ministerio-confirma-que-tocantins-esta-fora-do-horario-de-verao-em-2013-mas-falta-publicacao-de-decreto
-# We will keep this article updated when this is confirmed:
-# https://www.timeanddate.com/news/time/brazil-starts-dst-2013.html
-
-# From Steffen Thorsen (2013-10-17):
-# https://www.timeanddate.com/news/time/acre-amazonas-change-time-zone.html
-# Senator Jorge Viana announced that Acre will change time zone on November 10.
-# He did not specify the time of the change, nor if western parts of Amazonas
-# will change as well.
-#
-# From Paul Eggert (2013-10-17):
-# For now, assume western Amazonas will change as well.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-# Decree 20,466 <http://pcdsh01.on.br/HV20466.htm> (1931-10-01)
-# Decree 21,896 <http://pcdsh01.on.br/HV21896.htm> (1932-01-10)
-Rule	Brazil	1931	only	-	Oct	 3	11:00	1:00	-
-Rule	Brazil	1932	1933	-	Apr	 1	 0:00	0	-
-Rule	Brazil	1932	only	-	Oct	 3	 0:00	1:00	-
-# Decree 23,195 <http://pcdsh01.on.br/HV23195.htm> (1933-10-10)
-# revoked DST.
-# Decree 27,496 <http://pcdsh01.on.br/HV27496.htm> (1949-11-24)
-# Decree 27,998 <http://pcdsh01.on.br/HV27998.htm> (1950-04-13)
-Rule	Brazil	1949	1952	-	Dec	 1	 0:00	1:00	-
-Rule	Brazil	1950	only	-	Apr	16	 1:00	0	-
-Rule	Brazil	1951	1952	-	Apr	 1	 0:00	0	-
-# Decree 32,308 <http://pcdsh01.on.br/HV32308.htm> (1953-02-24)
-Rule	Brazil	1953	only	-	Mar	 1	 0:00	0	-
-# Decree 34,724 <http://pcdsh01.on.br/HV34724.htm> (1953-11-30)
-# revoked DST.
-# Decree 52,700 <http://pcdsh01.on.br/HV52700.htm> (1963-10-18)
-# established DST from 1963-10-23 00:00 to 1964-02-29 00:00
-# in SP, RJ, GB, MG, ES, due to the prolongation of the drought.
-# Decree 53,071 <http://pcdsh01.on.br/HV53071.htm> (1963-12-03)
-# extended the above decree to all of the national territory on 12-09.
-Rule	Brazil	1963	only	-	Dec	 9	 0:00	1:00	-
-# Decree 53,604 <http://pcdsh01.on.br/HV53604.htm> (1964-02-25)
-# extended summer time by one day to 1964-03-01 00:00 (start of school).
-Rule	Brazil	1964	only	-	Mar	 1	 0:00	0	-
-# Decree 55,639 <http://pcdsh01.on.br/HV55639.htm> (1965-01-27)
-Rule	Brazil	1965	only	-	Jan	31	 0:00	1:00	-
-Rule	Brazil	1965	only	-	Mar	31	 0:00	0	-
-# Decree 57,303 <http://pcdsh01.on.br/HV57303.htm> (1965-11-22)
-Rule	Brazil	1965	only	-	Dec	 1	 0:00	1:00	-
-# Decree 57,843 <http://pcdsh01.on.br/HV57843.htm> (1966-02-18)
-Rule	Brazil	1966	1968	-	Mar	 1	 0:00	0	-
-Rule	Brazil	1966	1967	-	Nov	 1	 0:00	1:00	-
-# Decree 63,429 <http://pcdsh01.on.br/HV63429.htm> (1968-10-15)
-# revoked DST.
-# Decree 91,698 <http://pcdsh01.on.br/HV91698.htm> (1985-09-27)
-Rule	Brazil	1985	only	-	Nov	 2	 0:00	1:00	-
-# Decree 92,310 (1986-01-21)
-# Decree 92,463 (1986-03-13)
-Rule	Brazil	1986	only	-	Mar	15	 0:00	0	-
-# Decree 93,316 (1986-10-01)
-Rule	Brazil	1986	only	-	Oct	25	 0:00	1:00	-
-Rule	Brazil	1987	only	-	Feb	14	 0:00	0	-
-# Decree 94,922 <http://pcdsh01.on.br/HV94922.htm> (1987-09-22)
-Rule	Brazil	1987	only	-	Oct	25	 0:00	1:00	-
-Rule	Brazil	1988	only	-	Feb	 7	 0:00	0	-
-# Decree 96,676 <http://pcdsh01.on.br/HV96676.htm> (1988-09-12)
-# except for the states of AC, AM, PA, RR, RO, and AP (then a territory)
-Rule	Brazil	1988	only	-	Oct	16	 0:00	1:00	-
-Rule	Brazil	1989	only	-	Jan	29	 0:00	0	-
-# Decree 98,077 <http://pcdsh01.on.br/HV98077.htm> (1989-08-21)
-# with the same exceptions
-Rule	Brazil	1989	only	-	Oct	15	 0:00	1:00	-
-Rule	Brazil	1990	only	-	Feb	11	 0:00	0	-
-# Decree 99,530 <http://pcdsh01.on.br/HV99530.htm> (1990-09-17)
-# adopted by RS, SC, PR, SP, RJ, ES, MG, GO, MS, DF.
-# Decree 99,629 (1990-10-19) adds BA, MT.
-Rule	Brazil	1990	only	-	Oct	21	 0:00	1:00	-
-Rule	Brazil	1991	only	-	Feb	17	 0:00	0	-
-# Unnumbered decree <http://pcdsh01.on.br/HV1991.htm> (1991-09-25)
-# adopted by RS, SC, PR, SP, RJ, ES, MG, BA, GO, MT, MS, DF.
-Rule	Brazil	1991	only	-	Oct	20	 0:00	1:00	-
-Rule	Brazil	1992	only	-	Feb	 9	 0:00	0	-
-# Unnumbered decree <http://pcdsh01.on.br/HV1992.htm> (1992-10-16)
-# adopted by same states.
-Rule	Brazil	1992	only	-	Oct	25	 0:00	1:00	-
-Rule	Brazil	1993	only	-	Jan	31	 0:00	0	-
-# Decree 942 <http://pcdsh01.on.br/HV942.htm> (1993-09-28)
-# adopted by same states, plus AM.
-# Decree 1,252 <http://pcdsh01.on.br/HV1252.htm> (1994-09-22;
-# web page corrected 2004-01-07) adopted by same states, minus AM.
-# Decree 1,636 <http://pcdsh01.on.br/HV1636.htm> (1995-09-14)
-# adopted by same states, plus MT and TO.
-# Decree 1,674 <http://pcdsh01.on.br/HV1674.htm> (1995-10-13)
-# adds AL, SE.
-Rule	Brazil	1993	1995	-	Oct	Sun>=11	 0:00	1:00	-
-Rule	Brazil	1994	1995	-	Feb	Sun>=15	 0:00	0	-
-Rule	Brazil	1996	only	-	Feb	11	 0:00	0	-
-# Decree 2,000 <http://pcdsh01.on.br/HV2000.htm> (1996-09-04)
-# adopted by same states, minus AL, SE.
-Rule	Brazil	1996	only	-	Oct	 6	 0:00	1:00	-
-Rule	Brazil	1997	only	-	Feb	16	 0:00	0	-
-# From Daniel C. Sobral (1998-02-12):
-# In 1997, the DS began on October 6. The stated reason was that
-# because international television networks ignored Brazil's policy on DS,
-# they bought the wrong times on satellite for coverage of Pope's visit.
-# This year, the ending date of DS was postponed to March 1
-# to help dealing with the shortages of electric power.
-#
-# Decree 2,317 (1997-09-04), adopted by same states.
-Rule	Brazil	1997	only	-	Oct	 6	 0:00	1:00	-
-# Decree 2,495 <http://pcdsh01.on.br/figuras/HV2495.JPG>
-# (1998-02-10)
-Rule	Brazil	1998	only	-	Mar	 1	 0:00	0	-
-# Decree 2,780 <http://pcdsh01.on.br/figuras/Hv98.jpg> (1998-09-11)
-# adopted by the same states as before.
-Rule	Brazil	1998	only	-	Oct	11	 0:00	1:00	-
-Rule	Brazil	1999	only	-	Feb	21	 0:00	0	-
-# Decree 3,150 <http://pcdsh01.on.br/figuras/HV3150.gif>
-# (1999-08-23) adopted by same states.
-# Decree 3,188 <http://pcdsh01.on.br/DecHV99.gif> (1999-09-30)
-# adds SE, AL, PB, PE, RN, CE, PI, MA and RR.
-Rule	Brazil	1999	only	-	Oct	 3	 0:00	1:00	-
-Rule	Brazil	2000	only	-	Feb	27	 0:00	0	-
-# Decree 3,592 <http://pcdsh01.on.br/DEC3592.htm> (2000-09-06)
-# adopted by the same states as before.
-# Decree 3,630 <http://pcdsh01.on.br/Dec3630.jpg> (2000-10-13)
-# repeals DST in PE and RR, effective 2000-10-15 00:00.
-# Decree 3,632 <http://pcdsh01.on.br/Dec3632.jpg> (2000-10-17)
-# repeals DST in SE, AL, PB, RN, CE, PI and MA, effective 2000-10-22 00:00.
-# Decree 3,916 <http://pcdsh01.on.br/figuras/HV3916.gif>
-# (2001-09-13) reestablishes DST in AL, CE, MA, PB, PE, PI, RN, SE.
-Rule	Brazil	2000	2001	-	Oct	Sun>=8	 0:00	1:00	-
-Rule	Brazil	2001	2006	-	Feb	Sun>=15	 0:00	0	-
-# Decree 4,399 (2002-10-01) repeals DST in AL, CE, MA, PB, PE, PI, RN, SE.
-# 4,399 <http://www.presidencia.gov.br/CCIVIL/decreto/2002/D4399.htm>
-Rule	Brazil	2002	only	-	Nov	 3	 0:00	1:00	-
-# Decree 4,844 (2003-09-24; corrected 2003-09-26) repeals DST in BA, MT, TO.
-# 4,844 <http://www.presidencia.gov.br/CCIVIL/decreto/2003/D4844.htm>
-Rule	Brazil	2003	only	-	Oct	19	 0:00	1:00	-
-# Decree 5,223 (2004-10-01) reestablishes DST in MT.
-# 5,223 <http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2004/Decreto/D5223.htm>
-Rule	Brazil	2004	only	-	Nov	 2	 0:00	1:00	-
-# Decree 5,539 <http://pcdsh01.on.br/DecHV5539.gif> (2005-09-19),
-# adopted by the same states as before.
-Rule	Brazil	2005	only	-	Oct	16	 0:00	1:00	-
-# Decree 5,920 <http://pcdsh01.on.br/DecHV5920.gif> (2006-10-03),
-# adopted by the same states as before.
-Rule	Brazil	2006	only	-	Nov	 5	 0:00	1:00	-
-Rule	Brazil	2007	only	-	Feb	25	 0:00	0	-
-# Decree 6,212 <http://pcdsh01.on.br/DecHV6212.gif> (2007-09-26),
-# adopted by the same states as before.
-Rule	Brazil	2007	only	-	Oct	Sun>=8	 0:00	1:00	-
-# From Frederico A. C. Neves (2008-09-10):
-# According to this decree
-# http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm
-# [t]he DST period in Brazil now on will be from the 3rd Oct Sunday to the
-# 3rd Feb Sunday. There is an exception on the return date when this is
-# the Carnival Sunday then the return date will be the next Sunday...
-Rule	Brazil	2008	2017	-	Oct	Sun>=15	0:00	1:00	-
-Rule	Brazil	2008	2011	-	Feb	Sun>=15	0:00	0	-
-# Decree 7,584 <http://pcdsh01.on.br/HVdecreto7584_20111013.jpg> (2011-10-13)
-# added Bahia.
-Rule	Brazil	2012	only	-	Feb	Sun>=22	0:00	0	-
-# Decree 7,826 <http://pcdsh01.on.br/HVdecreto7826_20121015.jpg> (2012-10-15)
-# removed Bahia and added Tocantins.
-# Decree 8,112 <http://pcdsh01.on.br/HVdecreto8112_20130930.JPG> (2013-09-30)
-# removed Tocantins.
-Rule	Brazil	2013	2014	-	Feb	Sun>=15	0:00	0	-
-Rule	Brazil	2015	only	-	Feb	Sun>=22	0:00	0	-
-Rule	Brazil	2016	2022	-	Feb	Sun>=15	0:00	0	-
-# From Steffen Thorsen (2017-12-18):
-# According to many media sources, next year's DST start in Brazil will move to
-# the first Sunday of November, and it will stay like that for the years after.
-# ... https://www.timeanddate.com/news/time/brazil-delays-dst-2018.html
-# From Steffen Thorsen (2017-12-20):
-# http://www.planalto.gov.br/ccivil_03/_ato2015-2018/2017/decreto/D9242.htm
-#
-# From FĂĄbio Gomes (2018-10-04):
-# The Brazilian president just announced a new change on this year DST.
-# It was scheduled to start on November 4th and it was changed to November 18th.
-# From Rodrigo BrĂŒning Wessler (2018-10-15):
-# The Brazilian government just announced that the change in DST was
-# canceled....  Maybe the president Michel Temer also woke up one hour
-# earlier today. :)
-Rule	Brazil	2018	max	-	Nov	Sun>=1	0:00	1:00	-
-Rule	Brazil	2023	only	-	Feb	Sun>=22	0:00	0	-
-Rule	Brazil	2024	2025	-	Feb	Sun>=15	0:00	0	-
-Rule	Brazil	2026	only	-	Feb	Sun>=22	0:00	0	-
-Rule	Brazil	2027	2033	-	Feb	Sun>=15	0:00	0	-
-Rule	Brazil	2034	only	-	Feb	Sun>=22	0:00	0	-
-Rule	Brazil	2035	2036	-	Feb	Sun>=15	0:00	0	-
-Rule	Brazil	2037	only	-	Feb	Sun>=22	0:00	0	-
-# From Arthur David Olson (2008-09-29):
-# The next is wrong in some years but is better than nothing.
-Rule	Brazil	2038	max	-	Feb	Sun>=15	0:00	0	-
-
-# The latest ruleset listed above says that the following states observe DST:
-# DF, ES, GO, MG, MS, MT, PR, RJ, RS, SC, SP.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-#
-# Fernando de Noronha (administratively part of PE)
-Zone America/Noronha	-2:09:40 -	LMT	1914
-			-2:00	Brazil	-02/-01	1990 Sep 17
-			-2:00	-	-02	1999 Sep 30
-			-2:00	Brazil	-02/-01	2000 Oct 15
-			-2:00	-	-02	2001 Sep 13
-			-2:00	Brazil	-02/-01	2002 Oct  1
-			-2:00	-	-02
-# Other Atlantic islands have no permanent settlement.
-# These include Trindade and Martim Vaz (administratively part of ES),
-# Rocas Atoll (RN), and the St Peter and St Paul Archipelago (PE).
-# Fernando de Noronha was a separate territory from 1942-09-02 to 1989-01-01;
-# it also included the Penedos.
-#
-# AmapĂĄ (AP), east ParĂĄ (PA)
-# East Parå includes Belém, Marabå, Serra Norte, and São Félix do Xingu.
-# The division between east and west ParĂĄ is the river Xingu.
-# In the north a very small part from the river Javary (now Jari I guess,
-# the border with AmapĂĄ) to the Amazon, then to the Xingu.
-Zone America/Belem	-3:13:56 -	LMT	1914
-			-3:00	Brazil	-03/-02	1988 Sep 12
-			-3:00	-	-03
-#
-# west ParĂĄ (PA)
-# West ParĂĄ includes Altamira, Óbidos, Prainha, OriximinĂĄ, and SantarĂ©m.
-Zone America/Santarem	-3:38:48 -	LMT	1914
-			-4:00	Brazil	-04/-03	1988 Sep 12
-			-4:00	-	-04	2008 Jun 24  0:00
-			-3:00	-	-03
-#
-# MaranhĂŁo (MA), PiauĂ­ (PI), CearĂĄ (CE), Rio Grande do Norte (RN),
-# ParaĂ­ba (PB)
-Zone America/Fortaleza	-2:34:00 -	LMT	1914
-			-3:00	Brazil	-03/-02	1990 Sep 17
-			-3:00	-	-03	1999 Sep 30
-			-3:00	Brazil	-03/-02	2000 Oct 22
-			-3:00	-	-03	2001 Sep 13
-			-3:00	Brazil	-03/-02	2002 Oct  1
-			-3:00	-	-03
-#
-# Pernambuco (PE) (except Atlantic islands)
-Zone America/Recife	-2:19:36 -	LMT	1914
-			-3:00	Brazil	-03/-02	1990 Sep 17
-			-3:00	-	-03	1999 Sep 30
-			-3:00	Brazil	-03/-02	2000 Oct 15
-			-3:00	-	-03	2001 Sep 13
-			-3:00	Brazil	-03/-02	2002 Oct  1
-			-3:00	-	-03
-#
-# Tocantins (TO)
-Zone America/Araguaina	-3:12:48 -	LMT	1914
-			-3:00	Brazil	-03/-02	1990 Sep 17
-			-3:00	-	-03	1995 Sep 14
-			-3:00	Brazil	-03/-02	2003 Sep 24
-			-3:00	-	-03	2012 Oct 21
-			-3:00	Brazil	-03/-02	2013 Sep
-			-3:00	-	-03
-#
-# Alagoas (AL), Sergipe (SE)
-Zone America/Maceio	-2:22:52 -	LMT	1914
-			-3:00	Brazil	-03/-02	1990 Sep 17
-			-3:00	-	-03	1995 Oct 13
-			-3:00	Brazil	-03/-02	1996 Sep  4
-			-3:00	-	-03	1999 Sep 30
-			-3:00	Brazil	-03/-02	2000 Oct 22
-			-3:00	-	-03	2001 Sep 13
-			-3:00	Brazil	-03/-02	2002 Oct  1
-			-3:00	-	-03
-#
-# Bahia (BA)
-# There are too many Salvadors elsewhere, so use America/Bahia instead
-# of America/Salvador.
-Zone America/Bahia	-2:34:04 -	LMT	1914
-			-3:00	Brazil	-03/-02	2003 Sep 24
-			-3:00	-	-03	2011 Oct 16
-			-3:00	Brazil	-03/-02	2012 Oct 21
-			-3:00	-	-03
-#
-# GoiĂĄs (GO), Distrito Federal (DF), Minas Gerais (MG),
-# EspĂ­rito Santo (ES), Rio de Janeiro (RJ), SĂŁo Paulo (SP), ParanĂĄ (PR),
-# Santa Catarina (SC), Rio Grande do Sul (RS)
-Zone America/Sao_Paulo	-3:06:28 -	LMT	1914
-			-3:00	Brazil	-03/-02	1963 Oct 23  0:00
-			-3:00	1:00	-02	1964
-			-3:00	Brazil	-03/-02
-#
-# Mato Grosso do Sul (MS)
-Zone America/Campo_Grande -3:38:28 -	LMT	1914
-			-4:00	Brazil	-04/-03
-#
-# Mato Grosso (MT)
-Zone America/Cuiaba	-3:44:20 -	LMT	1914
-			-4:00	Brazil	-04/-03	2003 Sep 24
-			-4:00	-	-04	2004 Oct  1
-			-4:00	Brazil	-04/-03
-#
-# RondĂŽnia (RO)
-Zone America/Porto_Velho -4:15:36 -	LMT	1914
-			-4:00	Brazil	-04/-03	1988 Sep 12
-			-4:00	-	-04
-#
-# Roraima (RR)
-Zone America/Boa_Vista	-4:02:40 -	LMT	1914
-			-4:00	Brazil	-04/-03	1988 Sep 12
-			-4:00	-	-04	1999 Sep 30
-			-4:00	Brazil	-04/-03	2000 Oct 15
-			-4:00	-	-04
-#
-# east Amazonas (AM): Boca do Acre, JutaĂ­, Manaus, Floriano Peixoto
-# The great circle line from Tabatinga to Porto Acre divides
-# east from west Amazonas.
-Zone America/Manaus	-4:00:04 -	LMT	1914
-			-4:00	Brazil	-04/-03	1988 Sep 12
-			-4:00	-	-04	1993 Sep 28
-			-4:00	Brazil	-04/-03	1994 Sep 22
-			-4:00	-	-04
-#
-# west Amazonas (AM): Atalaia do Norte, Boca do Maoco, Benjamin Constant,
-#	Eirunepé, Envira, Ipixuna
-Zone America/Eirunepe	-4:39:28 -	LMT	1914
-			-5:00	Brazil	-05/-04	1988 Sep 12
-			-5:00	-	-05	1993 Sep 28
-			-5:00	Brazil	-05/-04	1994 Sep 22
-			-5:00	-	-05	2008 Jun 24  0:00
-			-4:00	-	-04	2013 Nov 10
-			-5:00	-	-05
-#
-# Acre (AC)
-Zone America/Rio_Branco	-4:31:12 -	LMT	1914
-			-5:00	Brazil	-05/-04	1988 Sep 12
-			-5:00	-	-05	2008 Jun 24  0:00
-			-4:00	-	-04	2013 Nov 10
-			-5:00	-	-05
-
-# Chile
-
-# From Paul Eggert (2015-04-03):
-# Shanks & Pottenger says America/Santiago introduced standard time in
-# 1890 and rounds its UT offset to 70W40; guess that in practice this
-# was the same offset as in 1916-1919.  It also says Pacific/Easter
-# standardized on 109W22 in 1890; assume this didn't change the clocks.
-#
-# Dates for America/Santiago from 1910 to 2004 are primarily from
-# the following source, cited by Oscar van Vlijmen (2006-10-08):
-# [1] Chile Law
-# http://www.webexhibits.org/daylightsaving/chile.html
-# This contains a copy of this official table:
-# Cambios en la hora oficial de Chile desde 1900 (retrieved 2008-03-30)
-# https://web.archive.org/web/20080330200901/http://www.horaoficial.cl/cambio.htm
-# [1] needs several corrections, though.
-#
-# The first set of corrections is from:
-# [2] History of the Official Time of Chile
-# http://www.horaoficial.cl/ing/horaof_ing.html (retrieved 2012-03-06).  See:
-# https://web.archive.org/web/20120306042032/http://www.horaoficial.cl/ing/horaof_ing.html
-# This is an English translation of:
-# Historia de la hora oficial de Chile (retrieved 2012-10-24).  See:
-# https://web.archive.org/web/20121024234627/http://www.horaoficial.cl/horaof.htm
-# A fancier Spanish version (requiring mouse-clicking) is at:
-# http://www.horaoficial.cl/historia_hora.html
-# Conflicts between [1] and [2] were resolved as follows:
-#
-#  - [1] says the 1910 transition was Jan 1, [2] says Jan 10 and cites
-#    BoletĂ­n No. 1, Aviso No. 1 (1910).  Go with [2].
-#
-#  - [1] says SMT was -4:42:45, [2] says Chile's official time from
-#    1916 to 1919 was -4:42:46.3, the meridian of Chile's National
-#    Astronomical Observatory (OAN), then located in what is now
-#    Quinta Normal in Santiago.  Go with [2], rounding it to -4:42:46.
-#
-#  - [1] says the 1918 transition was Sep 1, [2] says Sep 10 and cites
-#    BoletĂ­n No. 22, Aviso No. 129/1918 (1918-08-23).  Go with [2].
-#
-#  - [1] does not give times for transitions; assume they occur
-#    at midnight mainland time, the current common practice.  However,
-#    go with [2]'s specification of 23:00 for the 1947-05-21 transition.
-#
-# Another correction to [1] is from Jesper NĂžrgaard Welen, who
-# wrote (2006-10-08), "I think that there are some obvious mistakes in
-# the suggested link from Oscar van Vlijmen,... for instance entry 66
-# says that GMT-4 ended 1990-09-12 while entry 67 only begins GMT-3 at
-# 1990-09-15 (they should have been 1990-09-15 and 1990-09-16
-# respectively), but anyhow it clears up some doubts too."
-#
-# Data for Pacific/Easter from 1910 through 1967 come from Shanks &
-# Pottenger.  After that, for lack of better info assume
-# Pacific/Easter is always two hours behind America/Santiago;
-# this is known to work for DST transitions starting in 2008 and
-# may well be true for earlier transitions.
-
-# From Eduardo Krell (1995-10-19):
-# The law says to switch to DST at midnight [24:00] on the second SATURDAY
-# of October....  The law is the same for March and October.
-# (1998-09-29):
-# Because of the drought this year, the government decided to go into
-# DST earlier (saturday 9/26 at 24:00). This is a one-time change only ...
-# (unless there's another dry season next year, I guess).
-
-# From Julio I. Pacheco Troncoso (1999-03-18):
-# Because of the same drought, the government decided to end DST later,
-# on April 3, (one-time change).
-
-# From Germån Poo-Caamaño (2008-03-03):
-# Due to drought, Chile extends Daylight Time in three weeks.  This
-# is one-time change (Saturday 3/29 at 24:00 for America/Santiago
-# and Saturday 3/29 at 22:00 for Pacific/Easter)
-# The Supreme Decree is located at
-# http://www.shoa.cl/servicios/supremo316.pdf
-#
-# From José Miguel Garrido (2008-03-05):
-# http://www.shoa.cl/noticias/2008/04hora/hora.htm
-
-# From Angel Chiang (2010-03-04):
-# Subject: DST in Chile exceptionally extended to 3 April due to earthquake
-# http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098
-#
-# From Arthur David Olson (2010-03-06):
-# Angel Chiang's message confirmed by Julio Pacheco; Julio provided a patch.
-
-# From Glenn Eychaner (2011-03-28):
-# http://diario.elmercurio.com/2011/03/28/_portada/_portada/noticias/7565897A-CA86-49E6-9E03-660B21A4883E.htm?id=3D{7565897A-CA86-49E6-9E03-660B21A4883E}
-# In English:
-# Chile's clocks will go back an hour this year on the 7th of May instead
-# of this Saturday. They will go forward again the 3rd Saturday in
-# August, not in October as they have since 1968.
-
-# From Mauricio Parada (2012-02-22), translated by Glenn Eychaner (2012-02-23):
-# As stated in the website of the Chilean Energy Ministry
-# http://www.minenergia.cl/ministerio/noticias/generales/gobierno-anuncia-fechas-de-cambio-de.html
-# The Chilean Government has decided to postpone the entrance into winter time
-# (to leave DST) from March 11 2012 to April 28th 2012....
-# Quote from the website communication:
-#
-# 6. For the year 2012, the dates of entry into winter time will be as follows:
-# a. Saturday April 28, 2012, clocks should go back 60 minutes; that is, at
-# 23:59:59, instead of passing to 0:00, the time should be adjusted to be 23:00
-# of the same day.
-# b. Saturday, September 1, 2012, clocks should go forward 60 minutes; that is,
-# at 23:59:59, instead of passing to 0:00, the time should be adjusted to be
-# 01:00 on September 2.
-
-# From Steffen Thorsen (2013-02-15):
-# According to several news sources, Chile has extended DST this year,
-# they will end DST later and start DST earlier than planned.  They
-# hope to save energy.  The new end date is 2013-04-28 00:00 and new
-# start date is 2013-09-08 00:00....
-# http://www.gob.cl/informa/2013/02/15/gobierno-anuncia-fechas-de-cambio-de-hora-para-el-ano-2013.htm
-
-# From José Miguel Garrido (2014-02-19):
-# Today appeared in the Diario Oficial a decree amending the time change
-# dates to 2014.
-# DST End: last Saturday of April 2014 (Sun 27 Apr 2014 03:00 UTC)
-# DST Start: first Saturday of September 2014 (Sun 07 Sep 2014 04:00 UTC)
-# http://www.diariooficial.interior.gob.cl//media/2014/02/19/do-20140219.pdf
-
-# From Eduardo Romero Urra (2015-03-03):
-# Today has been published officially that Chile will use the DST time
-# permanently until March 25 of 2017
-# http://www.diariooficial.interior.gob.cl/media/2015/03/03/1-large.jpg
-#
-# From Paul Eggert (2015-03-03):
-# For now, assume that the extension will persist indefinitely.
-
-# From Juan Correa (2016-03-18):
-# The decree regarding DST has been published in today's Official Gazette:
-# http://www.diariooficial.interior.gob.cl/versiones-anteriores/do/20160318/
-# http://www.leychile.cl/Navegar?idNorma=1088502
-# It does consider the second Saturday of May and August as the dates
-# for the transition; and it lists DST dates until 2019, but I think
-# this scheme will stick.
-#
-# From Paul Eggert (2016-03-18):
-# For now, assume the pattern holds for the indefinite future.
-# The decree says transitions occur at 24:00; in practice this appears
-# to mean 24:00 mainland time, not 24:00 local time, so that Easter
-# Island is always two hours behind the mainland.
-
-# From Juan Correa (2016-12-04):
-# Magallanes region ... will keep DST (UTC -3) all year round....
-# http://www.soychile.cl/Santiago/Sociedad/2016/12/04/433428/Bachelet-firmo-el-decreto-para-establecer-un-horario-unico-para-la-Region-de-Magallanes.aspx
-#
-# From Deborah Goldsmith (2017-01-19):
-# http://www.diariooficial.interior.gob.cl/publicaciones/2017/01/17/41660/01/1169626.pdf
-# From Paul Eggert (2017-01-19):
-# The above says the Magallanes change expires 2019-05-11 at 24:00,
-# so in theory, they will revert to -04/-03 after that, which means
-# they will switch from -03 to -04 one hour after Santiago does that day.
-# For now, assume that they will not revert.
-
-# From Juan Correa (2018-08-13):
-# As of moments ago, the Ministry of Energy in Chile has announced the new
-# schema for DST. ...  Announcement in video (in Spanish):
-# https://twitter.com/MinEnergia/status/1029000399129374720
-# From Yonathan Dossow (2018-08-13):
-# The video says "first Saturday of September", we all know it means Sunday at
-# midnight.
-# From Tim Parenti (2018-08-13):
-# Translating the captions on the video at 0:44-0:55, "We want to announce as
-# Government that from 2019, Winter Time will be increased to 5 months, between
-# the first Saturday of April and the first Saturday of September."
-# At 2:08-2:20, "The Magallanes region will maintain its current time, as
-# decided by the citizens during 2017, but our Government will promote a
-# regional dialogue table to gather their opinion on this matter."
-# https://twitter.com/MinEnergia/status/1029009354001973248
-# "We will keep the new time policy unchanged for at least the next 4 years."
-# So we extend the new rules on Saturdays at 24:00 mainland time indefinitely.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Chile	1927	1931	-	Sep	 1	0:00	1:00	-
-Rule	Chile	1928	1932	-	Apr	 1	0:00	0	-
-Rule	Chile	1968	only	-	Nov	 3	4:00u	1:00	-
-Rule	Chile	1969	only	-	Mar	30	3:00u	0	-
-Rule	Chile	1969	only	-	Nov	23	4:00u	1:00	-
-Rule	Chile	1970	only	-	Mar	29	3:00u	0	-
-Rule	Chile	1971	only	-	Mar	14	3:00u	0	-
-Rule	Chile	1970	1972	-	Oct	Sun>=9	4:00u	1:00	-
-Rule	Chile	1972	1986	-	Mar	Sun>=9	3:00u	0	-
-Rule	Chile	1973	only	-	Sep	30	4:00u	1:00	-
-Rule	Chile	1974	1987	-	Oct	Sun>=9	4:00u	1:00	-
-Rule	Chile	1987	only	-	Apr	12	3:00u	0	-
-Rule	Chile	1988	1990	-	Mar	Sun>=9	3:00u	0	-
-Rule	Chile	1988	1989	-	Oct	Sun>=9	4:00u	1:00	-
-Rule	Chile	1990	only	-	Sep	16	4:00u	1:00	-
-Rule	Chile	1991	1996	-	Mar	Sun>=9	3:00u	0	-
-Rule	Chile	1991	1997	-	Oct	Sun>=9	4:00u	1:00	-
-Rule	Chile	1997	only	-	Mar	30	3:00u	0	-
-Rule	Chile	1998	only	-	Mar	Sun>=9	3:00u	0	-
-Rule	Chile	1998	only	-	Sep	27	4:00u	1:00	-
-Rule	Chile	1999	only	-	Apr	 4	3:00u	0	-
-Rule	Chile	1999	2010	-	Oct	Sun>=9	4:00u	1:00	-
-Rule	Chile	2000	2007	-	Mar	Sun>=9	3:00u	0	-
-# N.B.: the end of March 29 in Chile is March 30 in Universal time,
-# which is used below in specifying the transition.
-Rule	Chile	2008	only	-	Mar	30	3:00u	0	-
-Rule	Chile	2009	only	-	Mar	Sun>=9	3:00u	0	-
-Rule	Chile	2010	only	-	Apr	Sun>=1	3:00u	0	-
-Rule	Chile	2011	only	-	May	Sun>=2	3:00u	0	-
-Rule	Chile	2011	only	-	Aug	Sun>=16	4:00u	1:00	-
-Rule	Chile	2012	2014	-	Apr	Sun>=23	3:00u	0	-
-Rule	Chile	2012	2014	-	Sep	Sun>=2	4:00u	1:00	-
-Rule	Chile	2016	2018	-	May	Sun>=9	3:00u	0	-
-Rule	Chile	2016	2018	-	Aug	Sun>=9	4:00u	1:00	-
-Rule	Chile	2019	max	-	Apr	Sun>=2	3:00u	0	-
-Rule	Chile	2019	max	-	Sep	Sun>=2	4:00u	1:00	-
-# IATA SSIM anomalies: (1992-02) says 1992-03-14;
-# (1996-09) says 1998-03-08.  Ignore these.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Santiago	-4:42:46 -	LMT	1890
-			-4:42:46 -	SMT	1910 Jan 10 # Santiago Mean Time
-			-5:00	-	-05	1916 Jul  1
-			-4:42:46 -	SMT	1918 Sep 10
-			-4:00	-	-04	1919 Jul  1
-			-4:42:46 -	SMT	1927 Sep  1
-			-5:00	Chile	-05/-04	1932 Sep  1
-			-4:00	-	-04	1942 Jun  1
-			-5:00	-	-05	1942 Aug  1
-			-4:00	-	-04	1946 Jul 15
-			-4:00	1:00	-03	1946 Sep  1 # central Chile
-			-4:00	-	-04	1947 Apr  1
-			-5:00	-	-05	1947 May 21 23:00
-			-4:00	Chile	-04/-03
-Zone America/Punta_Arenas -4:43:40 -	LMT	1890
-			-4:42:46 -	SMT	1910 Jan 10
-			-5:00	-	-05	1916 Jul  1
-			-4:42:46 -	SMT	1918 Sep 10
-			-4:00	-	-04	1919 Jul  1
-			-4:42:46 -	SMT	1927 Sep  1
-			-5:00	Chile	-05/-04	1932 Sep  1
-			-4:00	-	-04	1942 Jun  1
-			-5:00	-	-05	1942 Aug  1
-			-4:00	-	-04	1947 Apr  1
-			-5:00	-	-05	1947 May 21 23:00
-			-4:00	Chile	-04/-03	2016 Dec  4
-			-3:00	-	-03
-Zone Pacific/Easter	-7:17:28 -	LMT	1890
-			-7:17:28 -	EMT	1932 Sep    # Easter Mean Time
-			-7:00	Chile	-07/-06	1982 Mar 14 3:00u # Easter Time
-			-6:00	Chile	-06/-05
-#
-# Salas y GĂłmez Island is uninhabited.
-# Other Chilean locations, including Juan FernĂĄndez Is, Desventuradas Is,
-# and Antarctic bases, are like America/Santiago.
-
-# Antarctic base using South American rules
-# (See the file 'antarctica' for more.)
-#
-# Palmer, Anvers Island, since 1965 (moved 2 miles in 1968)
-#
-# From Ethan Dicks (1996-10-06):
-# It keeps the same time as Punta Arenas, Chile, because, just like us
-# and the South Pole, that's the other end of their supply line....
-# I verified with someone who was there that since 1980,
-# Palmer has followed Chile.  Prior to that, before the Falklands War,
-# Palmer used to be supplied from Argentina.
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Antarctica/Palmer	0	-	-00	1965
-			-4:00	Arg	-04/-03	1969 Oct  5
-			-3:00	Arg	-03/-02	1982 May
-			-4:00	Chile	-04/-03	2016 Dec  4
-			-3:00	-	-03
-
-# Colombia
-
-# Milne gives 4:56:16.4 for BogotĂĄ time in 1899; round to nearest.  He writes,
-# "A variation of fifteen minutes in the public clocks of Bogota is not rare."
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	CO	1992	only	-	May	 3	0:00	1:00	-
-Rule	CO	1993	only	-	Apr	 4	0:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Bogota	-4:56:16 -	LMT	1884 Mar 13
-			-4:56:16 -	BMT	1914 Nov 23 # BogotĂĄ Mean Time
-			-5:00	CO	-05/-04
-# Malpelo, Providencia, San Andres
-# no information; probably like America/Bogota
-
-# Curaçao
-
-# Milne gives 4:35:46.9 for Curaçao mean time; round to nearest.
-#
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger say that The Bottom and Philipsburg have been at
-# -4:00 since standard time was introduced on 1912-03-02; and that
-# Kralendijk and Rincon used Kralendijk Mean Time (-4:33:08) from
-# 1912-02-02 to 1965-01-01.  The former is dubious, since S&P also say
-# Saba Island has been like Curaçao.
-# This all predates our 1970 cutoff, though.
-#
-# By July 2007 Curaçao and St Maarten are planned to become
-# associated states within the Netherlands, much like Aruba;
-# Bonaire, Saba and St Eustatius would become directly part of the
-# Netherlands as Kingdom Islands.  This won't affect their time zones
-# though, as far as we know.
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Curacao	-4:35:47 -	LMT	1912 Feb 12 # Willemstad
-			-4:30	-	-0430	1965
-			-4:00	-	AST
-
-# From Arthur David Olson (2011-06-15):
-# use links for places with new iso3166 codes.
-# The name "Lower Prince's Quarter" is both longer than fourteen characters
-# and contains an apostrophe; use "Lower_Princes" below.
-
-Link	America/Curacao	America/Lower_Princes	# Sint Maarten
-Link	America/Curacao	America/Kralendijk	# Caribbean Netherlands
-
-# Ecuador
-#
-# Milne says the Central and South American Telegraph Company used -5:24:15.
-#
-# From Alois Treindl (2016-12-15):
-# https://www.elcomercio.com/actualidad/hora-sixto-1993.html
-# ... Whether the law applied also to GalĂĄpagos, I do not know.
-# From Paul Eggert (2016-12-15):
-# https://www.elcomercio.com/afull/modificacion-husohorario-ecuador-presidentes-decreto.html
-# This says President Sixto Durån Ballén signed decree No. 285, which
-# established DST from 1992-11-28 to 1993-02-05; it does not give transition
-# times.  The people called it "hora de Sixto" ("Sixto hour").  The change did
-# not go over well; a popular song "Qué hora es" by Jaime Guevara had lyrics
-# that included "AmanecĂ­a en mitad de la noche, los guaguas iban a clase sin
-# sol" ("It was dawning in the middle of the night, the buses went to class
-# without sun").  Although Ballén's campaign slogan was "Ni un paso atrås"
-# (Not one step back), the clocks went back in 1993 and the experiment was not
-# repeated.  For now, assume transitions were at 00:00 local time country-wide.
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Ecuador	1992	only	-	Nov	28	0:00	1:00	-
-Rule	Ecuador	1993	only	-	Feb	 5	0:00	0	-
-#
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Guayaquil	-5:19:20 -	LMT	1890
-			-5:14:00 -	QMT	1931 # Quito Mean Time
-			-5:00	Ecuador	-05/-04
-Zone Pacific/Galapagos	-5:58:24 -	LMT	1931 # Puerto Baquerizo Moreno
-			-5:00	-	-05	1986
-			-6:00	Ecuador	-06/-05
-
-# Falklands
-
-# From Paul Eggert (2006-03-22):
-# Between 1990 and 2000 inclusive, Shanks & Pottenger and the IATA agree except
-# the IATA gives 1996-09-08.  Go with Shanks & Pottenger.
-
-# From Falkland Islands Government Office, London (2001-01-22)
-# via Jesper NĂžrgaard:
-# ... the clocks revert back to Local Mean Time at 2 am on Sunday 15
-# April 2001 and advance one hour to summer time at 2 am on Sunday 2
-# September.  It is anticipated that the clocks will revert back at 2
-# am on Sunday 21 April 2002 and advance to summer time at 2 am on
-# Sunday 1 September.
-
-# From Rives McDow (2001-02-13):
-#
-# I have communicated several times with people there, and the last
-# time I had communications that was helpful was in 1998.  Here is
-# what was said then:
-#
-# "The general rule was that Stanley used daylight saving and the Camp
-# did not. However for various reasons many people in the Camp have
-# started to use daylight saving (known locally as 'Stanley Time')
-# There is no rule as to who uses daylight saving - it is a matter of
-# personal choice and so it is impossible to draw a map showing who
-# uses it and who does not. Any list would be out of date as soon as
-# it was produced. This year daylight saving ended on April 18/19th
-# and started again on September 12/13th.  I do not know what the rule
-# is, but can find out if you like.  We do not change at the same time
-# as UK or Chile."
-#
-# I did have in my notes that the rule was "Second Saturday in Sep at
-# 0:00 until third Saturday in Apr at 0:00".  I think that this does
-# not agree in some cases with Shanks; is this true?
-#
-# Also, there is no mention in the list that some areas in the
-# Falklands do not use DST.  I have found in my communications there
-# that these areas are on the western half of East Falkland and all of
-# West Falkland.  Stanley is the only place that consistently observes
-# DST.  Again, as in other places in the world, the farmers don't like
-# it.  West Falkland is almost entirely sheep farmers.
-#
-# I know one lady there that keeps a list of which farm keeps DST and
-# which doesn't each year.  She runs a shop in Stanley, and says that
-# the list changes each year.  She uses it to communicate to her
-# customers, catching them when they are home for lunch or dinner.
-
-# From Paul Eggert (2001-03-05):
-# For now, we'll just record the time in Stanley, since we have no
-# better info.
-
-# From Steffen Thorsen (2011-04-01):
-# The Falkland Islands will not turn back clocks this winter, but stay on
-# daylight saving time.
-#
-# One source:
-# http://www.falklandnews.com/public/story.cfm?get=5914&source=3
-#
-# We have gotten this confirmed by a clerk of the legislative assembly:
-# Normally the clocks revert to Local Mean Time (UTC/GMT -4 hours) on the
-# third Sunday of April at 0200hrs and advance to Summer Time (UTC/GMT -3
-# hours) on the first Sunday of September at 0200hrs.
-#
-# IMPORTANT NOTE: During 2011, on a trial basis, the Falkland Islands
-# will not revert to local mean time, but clocks will remain on Summer
-# time (UTC/GMT - 3 hours) throughout the whole of 2011.  Any long term
-# change to local time following the trial period will be notified.
-#
-# From Andrew Newman (2012-02-24)
-# A letter from Justin McPhee, Chief Executive,
-# Cable & Wireless Falkland Islands (dated 2012-02-22)
-# states...
-#   The current Atlantic/Stanley entry under South America expects the
-#   clocks to go back to standard Falklands Time (FKT) on the 15th April.
-#   The database entry states that in 2011 Stanley was staying on fixed
-#   summer time on a trial basis only.  FIG need to contact IANA and/or
-#   the maintainers of the database to inform them we're adopting
-#   the same policy this year and suggest recommendations for future years.
-#
-# For now we will assume permanent -03 for the Falklands
-# until advised differently (to apply for 2012 and beyond, after the 2011
-# experiment was apparently successful.)
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Falk	1937	1938	-	Sep	lastSun	0:00	1:00	-
-Rule	Falk	1938	1942	-	Mar	Sun>=19	0:00	0	-
-Rule	Falk	1939	only	-	Oct	1	0:00	1:00	-
-Rule	Falk	1940	1942	-	Sep	lastSun	0:00	1:00	-
-Rule	Falk	1943	only	-	Jan	1	0:00	0	-
-Rule	Falk	1983	only	-	Sep	lastSun	0:00	1:00	-
-Rule	Falk	1984	1985	-	Apr	lastSun	0:00	0	-
-Rule	Falk	1984	only	-	Sep	16	0:00	1:00	-
-Rule	Falk	1985	2000	-	Sep	Sun>=9	0:00	1:00	-
-Rule	Falk	1986	2000	-	Apr	Sun>=16	0:00	0	-
-Rule	Falk	2001	2010	-	Apr	Sun>=15	2:00	0	-
-Rule	Falk	2001	2010	-	Sep	Sun>=1	2:00	1:00	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Atlantic/Stanley	-3:51:24 -	LMT	1890
-			-3:51:24 -	SMT	1912 Mar 12 # Stanley Mean Time
-			-4:00	Falk	-04/-03	1983 May
-			-3:00	Falk	-03/-02	1985 Sep 15
-			-4:00	Falk	-04/-03	2010 Sep  5  2:00
-			-3:00	-	-03
-
-# French Guiana
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Cayenne	-3:29:20 -	LMT	1911 Jul
-			-4:00	-	-04	1967 Oct
-			-3:00	-	-03
-
-# Guyana
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Guyana	-3:52:40 -	LMT	1915 Mar    # Georgetown
-			-3:45	-	-0345	1975 Jul 31
-			-3:00	-	-03	1991
-# IATA SSIM (1996-06) says -4:00.  Assume a 1991 switch.
-			-4:00	-	-04
-
-# Paraguay
-#
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger say that spring transitions are 01:00 -> 02:00,
-# and autumn transitions are 00:00 -> 23:00.  Go with pre-1999
-# editions of Shanks, and with the IATA, who say transitions occur at 00:00.
-#
-# From Waldemar Villamayor-Venialbo (2013-09-20):
-# No time of the day is established for the adjustment, so people normally
-# adjust their clocks at 0 hour of the given dates.
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Para	1975	1988	-	Oct	 1	0:00	1:00	-
-Rule	Para	1975	1978	-	Mar	 1	0:00	0	-
-Rule	Para	1979	1991	-	Apr	 1	0:00	0	-
-Rule	Para	1989	only	-	Oct	22	0:00	1:00	-
-Rule	Para	1990	only	-	Oct	 1	0:00	1:00	-
-Rule	Para	1991	only	-	Oct	 6	0:00	1:00	-
-Rule	Para	1992	only	-	Mar	 1	0:00	0	-
-Rule	Para	1992	only	-	Oct	 5	0:00	1:00	-
-Rule	Para	1993	only	-	Mar	31	0:00	0	-
-Rule	Para	1993	1995	-	Oct	 1	0:00	1:00	-
-Rule	Para	1994	1995	-	Feb	lastSun	0:00	0	-
-Rule	Para	1996	only	-	Mar	 1	0:00	0	-
-# IATA SSIM (2000-02) says 1999-10-10; ignore this for now.
-# From Steffen Thorsen (2000-10-02):
-# I have three independent reports that Paraguay changed to DST this Sunday
-# (10-01).
-#
-# Translated by Gwillim Law (2001-02-27) from
-# Noticias, a daily paper in AsunciĂłn, Paraguay (2000-10-01):
-# http://www.diarionoticias.com.py/011000/nacional/naciona1.htm
-# Starting at 0:00 today, the clock will be set forward 60 minutes, in
-# fulfillment of Decree No. 7,273 of the Executive Power....  The time change
-# system has been operating for several years.  Formerly there was a separate
-# decree each year; the new law has the same effect, but permanently.  Every
-# year, the time will change on the first Sunday of October; likewise, the
-# clock will be set back on the first Sunday of March.
-#
-Rule	Para	1996	2001	-	Oct	Sun>=1	0:00	1:00	-
-# IATA SSIM (1997-09) says Mar 1; go with Shanks & Pottenger.
-Rule	Para	1997	only	-	Feb	lastSun	0:00	0	-
-# Shanks & Pottenger say 1999-02-28; IATA SSIM (1999-02) says 1999-02-27, but
-# (1999-09) reports no date; go with above sources and Gerd Knops (2001-02-27).
-Rule	Para	1998	2001	-	Mar	Sun>=1	0:00	0	-
-# From Rives McDow (2002-02-28):
-# A decree was issued in Paraguay (No. 16350) on 2002-02-26 that changed the
-# dst method to be from the first Sunday in September to the first Sunday in
-# April.
-Rule	Para	2002	2004	-	Apr	Sun>=1	0:00	0	-
-Rule	Para	2002	2003	-	Sep	Sun>=1	0:00	1:00	-
-#
-# From Jesper NĂžrgaard Welen (2005-01-02):
-# There are several sources that claim that Paraguay made
-# a timezone rule change in autumn 2004.
-# From Steffen Thorsen (2005-01-05):
-# Decree 1,867 (2004-03-05)
-# From Carlos RaĂșl Perasso via Jesper NĂžrgaard Welen (2006-10-13)
-# http://www.presidencia.gov.py/decretos/D1867.pdf
-Rule	Para	2004	2009	-	Oct	Sun>=15	0:00	1:00	-
-Rule	Para	2005	2009	-	Mar	Sun>=8	0:00	0	-
-# From Carlos RaĂșl Perasso (2010-02-18):
-# By decree number 3958 issued yesterday
-# http://www.presidencia.gov.py/v1/wp-content/uploads/2010/02/decreto3958.pdf
-# Paraguay changes its DST schedule, postponing the March rule to April and
-# modifying the October date. The decree reads:
-# ...
-# Art. 1. It is hereby established that from the second Sunday of the month of
-# April of this year (2010), the official time is to be set back 60 minutes,
-# and that on the first Sunday of the month of October, it is to be set
-# forward 60 minutes, in all the territory of the Paraguayan Republic.
-# ...
-Rule	Para	2010	max	-	Oct	Sun>=1	0:00	1:00	-
-Rule	Para	2010	2012	-	Apr	Sun>=8	0:00	0	-
-#
-# From Steffen Thorsen (2013-03-07):
-# Paraguay will end DST on 2013-03-24 00:00....
-# http://www.ande.gov.py/interna.php?id=1075
-#
-# From Carlos RaĂșl Perasso (2013-03-15):
-# The change in Paraguay is now final.  Decree number 10780
-# http://www.presidencia.gov.py/uploads/pdf/presidencia-3b86ff4b691c79d4f5927ca964922ec74772ce857c02ca054a52a37b49afc7fb.pdf
-# From Carlos RaĂșl Perasso (2014-02-28):
-# Decree 1264 can be found at:
-# http://www.presidencia.gov.py/archivos/documentos/DECRETO1264_ey9r8zai.pdf
-Rule	Para	2013	max	-	Mar	Sun>=22	0:00	0	-
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Asuncion	-3:50:40 -	LMT	1890
-			-3:50:40 -	AMT	1931 Oct 10 # AsunciĂłn Mean Time
-			-4:00	-	-04	1972 Oct
-			-3:00	-	-03	1974 Apr
-			-4:00	Para	-04/-03
-
-# Peru
-#
-# From Evelyn C. Leeper via Mark Brader (2003-10-26)
-# <news:xrGmb.39935$gA1.13896113@news4.srv.hcvlny.cv.net>:
-# When we were in Peru in 1985-1986, they apparently switched over
-# sometime between December 29 and January 3 while we were on the Amazon.
-#
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger don't have this transition.  Assume 1986 was like 1987.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Peru	1938	only	-	Jan	 1	0:00	1:00	-
-Rule	Peru	1938	only	-	Apr	 1	0:00	0	-
-Rule	Peru	1938	1939	-	Sep	lastSun	0:00	1:00	-
-Rule	Peru	1939	1940	-	Mar	Sun>=24	0:00	0	-
-Rule	Peru	1986	1987	-	Jan	 1	0:00	1:00	-
-Rule	Peru	1986	1987	-	Apr	 1	0:00	0	-
-Rule	Peru	1990	only	-	Jan	 1	0:00	1:00	-
-Rule	Peru	1990	only	-	Apr	 1	0:00	0	-
-# IATA is ambiguous for 1993/1995; go with Shanks & Pottenger.
-Rule	Peru	1994	only	-	Jan	 1	0:00	1:00	-
-Rule	Peru	1994	only	-	Apr	 1	0:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Lima	-5:08:12 -	LMT	1890
-			-5:08:36 -	LMT	1908 Jul 28 # Lima Mean Time?
-			-5:00	Peru	-05/-04
-
-# South Georgia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Atlantic/South_Georgia -2:26:08 -	LMT	1890 # Grytviken
-			-2:00	-	-02
-
-# South Sandwich Is
-# uninhabited; scientific personnel have wintered
-
-# Suriname
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Paramaribo	-3:40:40 -	LMT	1911
-			-3:40:52 -	PMT	1935     # Paramaribo Mean Time
-			-3:40:36 -	PMT	1945 Oct    # The capital moved?
-			-3:30	-	-0330	1984 Oct
-			-3:00	-	-03
-
-# Trinidad and Tobago
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Port_of_Spain -4:06:04 -	LMT	1912 Mar 2
-			-4:00	-	AST
-
-# These all agree with Trinidad and Tobago since 1970.
-Link America/Port_of_Spain America/Anguilla
-Link America/Port_of_Spain America/Antigua
-Link America/Port_of_Spain America/Dominica
-Link America/Port_of_Spain America/Grenada
-Link America/Port_of_Spain America/Guadeloupe
-Link America/Port_of_Spain America/Marigot	# St Martin (French part)
-Link America/Port_of_Spain America/Montserrat
-Link America/Port_of_Spain America/St_Barthelemy # St Barthélemy
-Link America/Port_of_Spain America/St_Kitts	# St Kitts & Nevis
-Link America/Port_of_Spain America/St_Lucia
-Link America/Port_of_Spain America/St_Thomas	# Virgin Islands (US)
-Link America/Port_of_Spain America/St_Vincent
-Link America/Port_of_Spain America/Tortola	# Virgin Islands (UK)
-
-# Uruguay
-# From Paul Eggert (1993-11-18):
-# Uruguay wins the prize for the strangest peacetime manipulation of the rules.
-#
-# From Tim Parenti (2018-02-20), per Jeremie Bonjour (2018-01-31) and Michael
-# Deckers (2018-02-20):
-# ... At least they kept good records...
-#
-# http://www.armada.mil.uy/ContenidosPDFs/sohma/web/almanaque/almanaque_2018.pdf#page=36
-# Page 36 of Almanaque 2018, published by the Oceanography, Hydrography, and
-# Meteorology Service of the Uruguayan Navy, seems to give many transitions
-# with greater clarity than we've had before.  It directly references many laws
-# and decrees which are, in turn, referenced below.  They can be viewed in the
-# public archives of the Diario Oficial (in Spanish) at
-# http://www.impo.com.uy/diariooficial/
-#
-# Ley No. 3920 of 1908-06-10 placed the determination of legal time under the
-# auspices of the National Institute for the Prediction of Time.  It is unclear
-# exactly what offset was used during this period, though Ley No. 7200 of
-# 1920-04-23 used the Observatory of the National Meteorological Institute in
-# Montevideo (34° 54' 33" S, 56° 12' 45" W) as its reference meridian,
-# retarding legal time by 15 minutes 9 seconds from 1920-04-30 24:00,
-# resulting in UT-04.  Assume the corresponding LMT of UT-03:44:51 (given on
-# page 725 of the Proceedings of the Second Pan-American Scientific Congress,
-# 1915-1916) was in use, and merely became official from 1908-06-10.
-# https://www.impo.com.uy/diariooficial/1908/06/18/12
-# https://www.impo.com.uy/diariooficial/1920/04/27/9
-#
-# Ley No. 7594 of 1923-06-28 specified legal time as Observatory time advanced
-# by 44 minutes 51 seconds (UT-03) "from 30 September to 31 March", and by 14
-# minutes 51 seconds (UT-03:30) "the rest of the year"; a message from the
-# National Council of Administration the same day, published directly below the
-# law in the Diario Oficial, specified the first transition to be 1923-09-30
-# 24:00.  This effectively established standard time at UT-03:30 with 30
-# minutes DST.  Assume transitions at 24:00 on the specified days until Ley No.
-# 7919 of 1926-03-05 ended this arrangement, repealing all "laws and other
-# provisions which oppose" it, resulting in year-round UT-03:30; a ResoluciĂłn
-# of 1926-03-11 puts the final transition at 1926-03-31 24:00, the same as it
-# would have been under the previous law.
-# https://www.impo.com.uy/diariooficial/1923/07/02/2
-# https://www.impo.com.uy/diariooficial/1926/03/10/2
-# https://www.impo.com.uy/diariooficial/1926/03/18/2
-#
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Uruguay	1923	1925	-	Oct	 1	 0:00	0:30	-
-Rule	Uruguay	1924	1926	-	Apr	 1	 0:00	0	-
-# From Tim Parenti (2018-02-15):
-# http://www.impo.com.uy/diariooficial/1933/10/27/6
-#
-# It appears Ley No. 9122 of 1933 was never published as such in the Diario
-# Oficial, but instead appeared as Document 26 in the Diario on Friday
-# 1933-10-27 as a decree made Monday 1933-10-23 and filed under the Ministry of
-# National Defense.  It reinstituted a DST of 30 minutes (to UT-03) "from the
-# last Sunday of October...until the last Saturday of March."  In accordance
-# with this provision, the first transition was explicitly specified in Article
-# 2 of the decree as Saturday 1933-10-28 at 24:00; that is, Sunday 1933-10-29
-# at 00:00.  Assume transitions at 00:00 Sunday throughout.
-#
-# Departing from the matter-of-fact nature of previous timekeeping laws, the
-# 1933 decree "consider[s] the advantages of...the advance of legal time":
-#
-#   "Whereas: The measure adopted by almost all nations at the time of the last
-#    World War still persists in North America and Europe, precisely because of
-#    the economic, hygienic, and social advantages derived from such an
-#    emergency measure...
-#
-#    Whereas: The advance of the legal time during the summer seasons, by
-#    displacing social activity near sunrise, favors the citizen populations
-#    and especially the society that creates and works..."
-#
-# It further specified that "necessary measures" be taken to ensure that
-# "public spectacles finish, in general, before [01:00]."
-Rule	Uruguay	1933	1938	-	Oct	lastSun	 0:00	0:30	-
-Rule	Uruguay	1934	1941	-	Mar	lastSat	24:00	0	-
-# From Tim Parenti (2018-02-15):
-# Most of the Rules below, and their contemporaneous Zone lines, have been
-# updated simply to match the Almanaque 2018.  Although the document does not
-# list exact transition times, midnight transitions were already present in our
-# data here for all transitions through 2004-09, and this is both consistent
-# with prior transitions and verified in several decrees marked below between
-# 1939-09 and 2004-09, wherein the relevant text was typically of the form:
-#
-#   "From 0 hours on [date], the legal time of the entire Republic will be...
-#
-#    In accordance with [the preceding], on [previous date] at 24 hours, all
-#    clocks throughout the Republic will be [advanced/retarded] by..."
-#
-# It is possible that there is greater specificity to be found for the Rules
-# below, but it is buried in no fewer than 40 different decrees individually
-# referenced by the Almanaque for the period from 1939-09 to 2014-09.
-# Four-fifths of these were promulgated less than two weeks before taking
-# effect; more than half within a week and none more than 5 weeks.  Only the
-# handful with comments below have been checked with any thoroughness.
-Rule	Uruguay	1939	only	-	Oct	 1	 0:00	0:30	-
-Rule	Uruguay	1940	only	-	Oct	27	 0:00	0:30	-
-# From Tim Parenti (2018-02-15):
-# Decreto 1145 of the Ministry of National Defense, dated 1941-07-26, specified
-# UT-03 from Friday 1941-08-01 00:00, citing an "urgent...need to save fuel".
-# http://www.impo.com.uy/diariooficial/1941/08/04/1
-Rule	Uruguay	1941	only	-	Aug	 1	 0:00	0:30	-
-# From Tim Parenti (2018-02-15):
-# Decreto 1866 of the Ministry of National Defense, dated 1942-12-09, specified
-# further advancement (to UT-02:30) from Sunday 1942-12-13 24:00.  Since clocks
-# never went back to UT-03:30 thereafter, this is modeled as advancing standard
-# time by 30 minutes to UT-03, while retaining 30 minutes of DST.
-# http://www.impo.com.uy/diariooficial/1942/12/16/3
-Rule	Uruguay	1942	only	-	Dec	14	 0:00	0:30	-
-Rule	Uruguay	1943	only	-	Mar	14	 0:00	0	-
-Rule	Uruguay	1959	only	-	May	24	 0:00	0:30	-
-Rule	Uruguay	1959	only	-	Nov	15	 0:00	0	-
-Rule	Uruguay	1960	only	-	Jan	17	 0:00	1:00	-
-Rule	Uruguay	1960	only	-	Mar	 6	 0:00	0	-
-Rule	Uruguay	1965	only	-	Apr	 4	 0:00	1:00	-
-Rule	Uruguay	1965	only	-	Sep	26	 0:00	0	-
-# From Tim Parenti (2018-02-15):
-# Decreto 321/968 of 1968-05-25, citing emergency drought measures decreed the
-# day before, brought clocks forward 30 minutes from Monday 1968-05-27 00:00.
-# http://www.impo.com.uy/diariooficial/1968/05/30/5
-Rule	Uruguay	1968	only	-	May	27	 0:00	0:30	-
-Rule	Uruguay	1968	only	-	Dec	 1	 0:00	0	-
-# From Tim Parenti (2018-02-15):
-# Decreto 188/970 of 1970-04-23 instituted restrictions on electricity
-# consumption "as a consequence of the current rainfall regime in the country".
-# Articles 13 and 14 advanced clocks by an hour from Saturday 1970-04-25 00:00.
-# http://www.impo.com.uy/diariooficial/1970/04/29/4
-Rule	Uruguay	1970	only	-	Apr	25	 0:00	1:00	-
-Rule	Uruguay	1970	only	-	Jun	14	 0:00	0	-
-Rule	Uruguay	1972	only	-	Apr	23	 0:00	1:00	-
-Rule	Uruguay	1972	only	-	Jul	16	 0:00	0	-
-# From Tim Parenti (2018-02-15):
-# Decreto 29/974 of 1974-01-11, citing "the international rise in the price of
-# oil", advanced clocks by 90 minutes (to UT-01:30).  Decreto 163/974 of
-# 1974-03-04 returned 60 of those minutes (to UT-02:30), and the remaining 30
-# minutes followed in Decreto 679/974 of 1974-08-29.
-# http://www.impo.com.uy/diariooficial/1974/01/22/11
-# http://www.impo.com.uy/diariooficial/1974/03/14/3
-# http://www.impo.com.uy/diariooficial/1974/09/04/6
-Rule	Uruguay	1974	only	-	Jan	13	 0:00	1:30	-
-Rule	Uruguay	1974	only	-	Mar	10	 0:00	0:30	-
-Rule	Uruguay	1974	only	-	Sep	 1	 0:00	0	-
-Rule	Uruguay	1974	only	-	Dec	22	 0:00	1:00	-
-Rule	Uruguay	1975	only	-	Mar	30	 0:00	0	-
-Rule	Uruguay	1976	only	-	Dec	19	 0:00	1:00	-
-Rule	Uruguay	1977	only	-	Mar	 6	 0:00	0	-
-Rule	Uruguay	1977	only	-	Dec	 4	 0:00	1:00	-
-Rule	Uruguay	1978	1979	-	Mar	Sun>=1	 0:00	0	-
-Rule	Uruguay	1978	only	-	Dec	17	 0:00	1:00	-
-Rule	Uruguay	1979	only	-	Apr	29	 0:00	1:00	-
-Rule	Uruguay	1980	only	-	Mar	16	 0:00	0	-
-# From Tim Parenti (2018-02-15):
-# Decreto 725/987 of 1987-12-04 cited "better use of national tourist
-# attractions" to advance clocks one hour from Monday 1987-12-14 00:00.
-# http://www.impo.com.uy/diariooficial/1988/01/25/1
-Rule	Uruguay	1987	only	-	Dec	14	 0:00	1:00	-
-Rule	Uruguay	1988	only	-	Feb	28	 0:00	0	-
-Rule	Uruguay	1988	only	-	Dec	11	 0:00	1:00	-
-Rule	Uruguay	1989	only	-	Mar	 5	 0:00	0	-
-Rule	Uruguay	1989	only	-	Oct	29	 0:00	1:00	-
-Rule	Uruguay	1990	only	-	Feb	25	 0:00	0	-
-# From Tim Parenti (2018-02-15), per Paul Eggert (1999-11-04):
-# IATA agrees as below for 1990-10 through 1993-02.  Per Almanaque 2018, the
-# 1992/1993 season appears to be the first in over half a century where DST
-# both began and ended pursuant to the same decree.
-Rule	Uruguay	1990	1991	-	Oct	Sun>=21	 0:00	1:00	-
-Rule	Uruguay	1991	1992	-	Mar	Sun>=1	 0:00	0	-
-Rule	Uruguay	1992	only	-	Oct	18	 0:00	1:00	-
-Rule	Uruguay	1993	only	-	Feb	28	 0:00	0	-
-# From Eduardo Cota (2004-09-20):
-# The Uruguayan government has decreed a change in the local time....
-# From Tim Parenti (2018-02-15):
-# Decreto 328/004 of 2004-09-15.
-# http://www.impo.com.uy/diariooficial/2004/09/23/documentos.pdf#page=1
-Rule	Uruguay	2004	only	-	Sep	19	 0:00	1:00	-
-# From Steffen Thorsen (2005-03-11):
-# Uruguay's DST was scheduled to end on Sunday, 2005-03-13, but in order to
-# save energy ... it was postponed two weeks....
-# From Tim Parenti (2018-02-15):
-# This 2005 postponement is not in Almanaque 2018.  Go with the contemporaneous
-# reporting, which is confirmed by Decreto 107/005 of 2005-03-10 amending
-# Decreto 328/004:
-# http://www.impo.com.uy/diariooficial/2005/03/15/documentos.pdf#page=1
-# The original decree specified a transition of 2005-03-12 24:00, but the new
-# one specified 2005-03-27 02:00.
-Rule	Uruguay	2005	only	-	Mar	27	 2:00	0	-
-# From Eduardo Cota (2005-09-27):
-# ...from 2005-10-09 at 02:00 local time, until 2006-03-12 at 02:00 local time,
-# official time in Uruguay will be at GMT -2.
-# From Tim Parenti (2018-02-15):
-# Decreto 318/005 of 2005-09-19.
-# http://www.impo.com.uy/diariooficial/2005/09/23/documentos.pdf#page=1
-Rule	Uruguay	2005	only	-	Oct	 9	 2:00	1:00	-
-Rule	Uruguay	2006	2015	-	Mar	Sun>=8	 2:00	0	-
-# From Tim Parenti (2018-02-15), per Jesper NĂžrgaard Welen (2006-09-06):
-# Decreto 311/006 of 2006-09-04 established regular DST from the first Sunday
-# of October at 02:00 through the second Sunday of March at 02:00.  Almanaque
-# 2018 appears to have a few typoed dates through this period; ignore them.
-# http://www.impo.com.uy/diariooficial/2006/09/08/documentos.pdf#page=1
-Rule	Uruguay	2006	2014	-	Oct	Sun>=1	 2:00	1:00	-
-# From Steffen Thorsen (2015-06-30):
-# ... it looks like they will not be using DST the coming summer:
-# http://www.elobservador.com.uy/gobierno-resolvio-que-no-habra-cambio-horario-verano-n656787
-# http://www.republica.com.uy/este-ano-no-se-modificara-el-huso-horario-en-uruguay/523760/
-# From Paul Eggert (2015-06-30):
-# Apparently restaurateurs complained that DST caused people to go to the beach
-# instead of out to dinner.
-# From Pablo Camargo (2015-07-13):
-# http://archivo.presidencia.gub.uy/sci/decretos/2015/06/cons_min_201.pdf
-# From Tim Parenti (2018-02-15):
-# Decreto 178/015 of 2015-06-29; repeals Decreto 311/006.
-
-# This Zone can be simplified once we assume zic %z.
-Zone America/Montevideo	-3:44:51 -	LMT	1908 Jun 10
-			-3:44:51 -	MMT	1920 May  1 # Montevideo MT
-			-4:00	-	-04	1923 Oct  1
-			-3:30	Uruguay	-0330/-03 1942 Dec 14
-			-3:00	Uruguay	-03/-0230 1960
-			-3:00	Uruguay	-03/-02	1968
-			-3:00	Uruguay	-03/-0230 1970
-			-3:00	Uruguay	-03/-02	1974
-			-3:00	Uruguay	-03/-0130 1974 Mar 10
-			-3:00	Uruguay	-03/-0230 1974 Dec 22
-			-3:00	Uruguay	-03/-02
-
-# Venezuela
-#
-# From Paul Eggert (2015-07-28):
-# For the 1965 transition see Gaceta Oficial No. 27.619 (1964-12-15), p 205.533
-# http://www.pgr.gob.ve/dmdocuments/1964/27619.pdf
-#
-# From John Stainforth (2007-11-28):
-# ... the change for Venezuela originally expected for 2007-12-31 has
-# been brought forward to 2007-12-09.  The official announcement was
-# published today in the "Gaceta Oficial de la RepĂșblica Bolivariana
-# de Venezuela, nĂșmero 38.819" (official document for all laws or
-# resolution publication)
-# http://www.globovision.com/news.php?nid=72208
-
-# From Alexander Krivenyshev (2016-04-15):
-# https://actualidad.rt.com/actualidad/204758-venezuela-modificar-huso-horario-sequia-elnino
-#
-# From Paul Eggert (2016-04-15):
-# Clocks advance 30 minutes on 2016-05-01 at 02:30....
-# "'Venezuela's new time-zone: hours without light, hours without water,
-# hours of presidential broadcasts, hours of lines,' quipped comedian
-# Jean Mary CurrĂł ...". See: Cawthorne A, Kai D. Venezuela scraps
-# half-hour time difference set by Chavez. Reuters 2016-04-15 14:50 -0400
-# https://www.reuters.com/article/us-venezuela-timezone-idUSKCN0XC2BE
-#
-# From Matt Johnson (2016-04-20):
-# ... published in the official Gazette [2016-04-18], here:
-# http://historico.tsj.gob.ve/gaceta_ext/abril/1842016/E-1842016-4551.pdf
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Caracas	-4:27:44 -	LMT	1890
-			-4:27:40 -	CMT	1912 Feb 12 # Caracas Mean Time?
-			-4:30	-	-0430	1965 Jan  1  0:00
-			-4:00	-	-04	2007 Dec  9  3:00
-			-4:30	-	-0430	2016 May  1  2:30
-			-4:00	-	-04
--- a/test/jdk/sun/util/calendar/zi/tzdata/systemv	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# tzdb data for System V rules (this file is obsolete)
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# Old rules, should the need arise.
-# No attempt is made to handle Newfoundland, since it cannot be expressed
-# using the System V "TZ" scheme (half-hour offset), or anything outside
-# North America (no support for non-standard DST start/end dates), nor
-# the changes in the DST rules in the US after 1976 (which occurred after
-# the old rules were written).
-#
-# If you need the old rules, uncomment ## lines.
-# Compile this *without* leap second correction for true conformance.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	SystemV	min	1973	-	Apr	lastSun	2:00	1:00	D
-Rule	SystemV	min	1973	-	Oct	lastSun	2:00	0	S
-Rule	SystemV	1974	only	-	Jan	6	2:00	1:00	D
-Rule	SystemV	1974	only	-	Nov	lastSun	2:00	0	S
-Rule	SystemV	1975	only	-	Feb	23	2:00	1:00	D
-Rule	SystemV	1975	only	-	Oct	lastSun	2:00	0	S
-Rule	SystemV	1976	max	-	Apr	lastSun	2:00	1:00	D
-Rule	SystemV	1976	max	-	Oct	lastSun	2:00	0	S
-
-# Zone	NAME		GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
-## Zone	SystemV/AST4ADT	-4:00	SystemV		A%sT
-## Zone	SystemV/EST5EDT	-5:00	SystemV		E%sT
-## Zone	SystemV/CST6CDT	-6:00	SystemV		C%sT
-## Zone	SystemV/MST7MDT	-7:00	SystemV		M%sT
-## Zone	SystemV/PST8PDT	-8:00	SystemV		P%sT
-## Zone	SystemV/YST9YDT	-9:00	SystemV		Y%sT
-## Zone	SystemV/AST4	-4:00	-		AST
-## Zone	SystemV/EST5	-5:00	-		EST
-## Zone	SystemV/CST6	-6:00	-		CST
-## Zone	SystemV/MST7	-7:00	-		MST
-## Zone	SystemV/PST8	-8:00	-		PST
-## Zone	SystemV/YST9	-9:00	-		YST
-## Zone	SystemV/HST10	-10:00	-		HST
--- a/test/jdk/sun/util/calendar/zi/tzdata/zone.tab	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,470 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# tzdb timezone descriptions (deprecated version)
-#
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-#
-# From Paul Eggert (2018-06-27):
-# This file is intended as a backward-compatibility aid for older programs.
-# New programs should use zone1970.tab.  This file is like zone1970.tab (see
-# zone1970.tab's comments), but with the following additional restrictions:
-#
-# 1.  This file contains only ASCII characters.
-# 2.  The first data column contains exactly one country code.
-#
-# Because of (2), each row stands for an area that is the intersection
-# of a region identified by a country code and of a timezone where civil
-# clocks have agreed since 1970; this is a narrower definition than
-# that of zone1970.tab.
-#
-# This table is intended as an aid for users, to help them select timezones
-# appropriate for their practical needs.  It is not intended to take or
-# endorse any position on legal or territorial claims.
-#
-#country-
-#code	coordinates	TZ			comments
-AD	+4230+00131	Europe/Andorra
-AE	+2518+05518	Asia/Dubai
-AF	+3431+06912	Asia/Kabul
-AG	+1703-06148	America/Antigua
-AI	+1812-06304	America/Anguilla
-AL	+4120+01950	Europe/Tirane
-AM	+4011+04430	Asia/Yerevan
-AO	-0848+01314	Africa/Luanda
-AQ	-7750+16636	Antarctica/McMurdo	New Zealand time - McMurdo, South Pole
-AQ	-6617+11031	Antarctica/Casey	Casey
-AQ	-6835+07758	Antarctica/Davis	Davis
-AQ	-6640+14001	Antarctica/DumontDUrville	Dumont-d'Urville
-AQ	-6736+06253	Antarctica/Mawson	Mawson
-AQ	-6448-06406	Antarctica/Palmer	Palmer
-AQ	-6734-06808	Antarctica/Rothera	Rothera
-AQ	-690022+0393524	Antarctica/Syowa	Syowa
-AQ	-720041+0023206	Antarctica/Troll	Troll
-AQ	-7824+10654	Antarctica/Vostok	Vostok
-AR	-3436-05827	America/Argentina/Buenos_Aires	Buenos Aires (BA, CF)
-AR	-3124-06411	America/Argentina/Cordoba	Argentina (most areas: CB, CC, CN, ER, FM, MN, SE, SF)
-AR	-2447-06525	America/Argentina/Salta	Salta (SA, LP, NQ, RN)
-AR	-2411-06518	America/Argentina/Jujuy	Jujuy (JY)
-AR	-2649-06513	America/Argentina/Tucuman	Tucuman (TM)
-AR	-2828-06547	America/Argentina/Catamarca	Catamarca (CT); Chubut (CH)
-AR	-2926-06651	America/Argentina/La_Rioja	La Rioja (LR)
-AR	-3132-06831	America/Argentina/San_Juan	San Juan (SJ)
-AR	-3253-06849	America/Argentina/Mendoza	Mendoza (MZ)
-AR	-3319-06621	America/Argentina/San_Luis	San Luis (SL)
-AR	-5138-06913	America/Argentina/Rio_Gallegos	Santa Cruz (SC)
-AR	-5448-06818	America/Argentina/Ushuaia	Tierra del Fuego (TF)
-AS	-1416-17042	Pacific/Pago_Pago
-AT	+4813+01620	Europe/Vienna
-AU	-3133+15905	Australia/Lord_Howe	Lord Howe Island
-AU	-5430+15857	Antarctica/Macquarie	Macquarie Island
-AU	-4253+14719	Australia/Hobart	Tasmania (most areas)
-AU	-3956+14352	Australia/Currie	Tasmania (King Island)
-AU	-3749+14458	Australia/Melbourne	Victoria
-AU	-3352+15113	Australia/Sydney	New South Wales (most areas)
-AU	-3157+14127	Australia/Broken_Hill	New South Wales (Yancowinna)
-AU	-2728+15302	Australia/Brisbane	Queensland (most areas)
-AU	-2016+14900	Australia/Lindeman	Queensland (Whitsunday Islands)
-AU	-3455+13835	Australia/Adelaide	South Australia
-AU	-1228+13050	Australia/Darwin	Northern Territory
-AU	-3157+11551	Australia/Perth	Western Australia (most areas)
-AU	-3143+12852	Australia/Eucla	Western Australia (Eucla)
-AW	+1230-06958	America/Aruba
-AX	+6006+01957	Europe/Mariehamn
-AZ	+4023+04951	Asia/Baku
-BA	+4352+01825	Europe/Sarajevo
-BB	+1306-05937	America/Barbados
-BD	+2343+09025	Asia/Dhaka
-BE	+5050+00420	Europe/Brussels
-BF	+1222-00131	Africa/Ouagadougou
-BG	+4241+02319	Europe/Sofia
-BH	+2623+05035	Asia/Bahrain
-BI	-0323+02922	Africa/Bujumbura
-BJ	+0629+00237	Africa/Porto-Novo
-BL	+1753-06251	America/St_Barthelemy
-BM	+3217-06446	Atlantic/Bermuda
-BN	+0456+11455	Asia/Brunei
-BO	-1630-06809	America/La_Paz
-BQ	+120903-0681636	America/Kralendijk
-BR	-0351-03225	America/Noronha	Atlantic islands
-BR	-0127-04829	America/Belem	Para (east); Amapa
-BR	-0343-03830	America/Fortaleza	Brazil (northeast: MA, PI, CE, RN, PB)
-BR	-0803-03454	America/Recife	Pernambuco
-BR	-0712-04812	America/Araguaina	Tocantins
-BR	-0940-03543	America/Maceio	Alagoas, Sergipe
-BR	-1259-03831	America/Bahia	Bahia
-BR	-2332-04637	America/Sao_Paulo	Brazil (southeast: GO, DF, MG, ES, RJ, SP, PR, SC, RS)
-BR	-2027-05437	America/Campo_Grande	Mato Grosso do Sul
-BR	-1535-05605	America/Cuiaba	Mato Grosso
-BR	-0226-05452	America/Santarem	Para (west)
-BR	-0846-06354	America/Porto_Velho	Rondonia
-BR	+0249-06040	America/Boa_Vista	Roraima
-BR	-0308-06001	America/Manaus	Amazonas (east)
-BR	-0640-06952	America/Eirunepe	Amazonas (west)
-BR	-0958-06748	America/Rio_Branco	Acre
-BS	+2505-07721	America/Nassau
-BT	+2728+08939	Asia/Thimphu
-BW	-2439+02555	Africa/Gaborone
-BY	+5354+02734	Europe/Minsk
-BZ	+1730-08812	America/Belize
-CA	+4734-05243	America/St_Johns	Newfoundland; Labrador (southeast)
-CA	+4439-06336	America/Halifax	Atlantic - NS (most areas); PE
-CA	+4612-05957	America/Glace_Bay	Atlantic - NS (Cape Breton)
-CA	+4606-06447	America/Moncton	Atlantic - New Brunswick
-CA	+5320-06025	America/Goose_Bay	Atlantic - Labrador (most areas)
-CA	+5125-05707	America/Blanc-Sablon	AST - QC (Lower North Shore)
-CA	+4339-07923	America/Toronto	Eastern - ON, QC (most areas)
-CA	+4901-08816	America/Nipigon	Eastern - ON, QC (no DST 1967-73)
-CA	+4823-08915	America/Thunder_Bay	Eastern - ON (Thunder Bay)
-CA	+6344-06828	America/Iqaluit	Eastern - NU (most east areas)
-CA	+6608-06544	America/Pangnirtung	Eastern - NU (Pangnirtung)
-CA	+484531-0913718	America/Atikokan	EST - ON (Atikokan); NU (Coral H)
-CA	+4953-09709	America/Winnipeg	Central - ON (west); Manitoba
-CA	+4843-09434	America/Rainy_River	Central - ON (Rainy R, Ft Frances)
-CA	+744144-0944945	America/Resolute	Central - NU (Resolute)
-CA	+624900-0920459	America/Rankin_Inlet	Central - NU (central)
-CA	+5024-10439	America/Regina	CST - SK (most areas)
-CA	+5017-10750	America/Swift_Current	CST - SK (midwest)
-CA	+5333-11328	America/Edmonton	Mountain - AB; BC (E); SK (W)
-CA	+690650-1050310	America/Cambridge_Bay	Mountain - NU (west)
-CA	+6227-11421	America/Yellowknife	Mountain - NT (central)
-CA	+682059-1334300	America/Inuvik	Mountain - NT (west)
-CA	+4906-11631	America/Creston	MST - BC (Creston)
-CA	+5946-12014	America/Dawson_Creek	MST - BC (Dawson Cr, Ft St John)
-CA	+5848-12242	America/Fort_Nelson	MST - BC (Ft Nelson)
-CA	+4916-12307	America/Vancouver	Pacific - BC (most areas)
-CA	+6043-13503	America/Whitehorse	Pacific - Yukon (south)
-CA	+6404-13925	America/Dawson	Pacific - Yukon (north)
-CC	-1210+09655	Indian/Cocos
-CD	-0418+01518	Africa/Kinshasa	Dem. Rep. of Congo (west)
-CD	-1140+02728	Africa/Lubumbashi	Dem. Rep. of Congo (east)
-CF	+0422+01835	Africa/Bangui
-CG	-0416+01517	Africa/Brazzaville
-CH	+4723+00832	Europe/Zurich
-CI	+0519-00402	Africa/Abidjan
-CK	-2114-15946	Pacific/Rarotonga
-CL	-3327-07040	America/Santiago	Chile (most areas)
-CL	-5309-07055	America/Punta_Arenas	Region of Magallanes
-CL	-2709-10926	Pacific/Easter	Easter Island
-CM	+0403+00942	Africa/Douala
-CN	+3114+12128	Asia/Shanghai	Beijing Time
-CN	+4348+08735	Asia/Urumqi	Xinjiang Time
-CO	+0436-07405	America/Bogota
-CR	+0956-08405	America/Costa_Rica
-CU	+2308-08222	America/Havana
-CV	+1455-02331	Atlantic/Cape_Verde
-CW	+1211-06900	America/Curacao
-CX	-1025+10543	Indian/Christmas
-CY	+3510+03322	Asia/Nicosia	Cyprus (most areas)
-CY	+3507+03357	Asia/Famagusta	Northern Cyprus
-CZ	+5005+01426	Europe/Prague
-DE	+5230+01322	Europe/Berlin	Germany (most areas)
-DE	+4742+00841	Europe/Busingen	Busingen
-DJ	+1136+04309	Africa/Djibouti
-DK	+5540+01235	Europe/Copenhagen
-DM	+1518-06124	America/Dominica
-DO	+1828-06954	America/Santo_Domingo
-DZ	+3647+00303	Africa/Algiers
-EC	-0210-07950	America/Guayaquil	Ecuador (mainland)
-EC	-0054-08936	Pacific/Galapagos	Galapagos Islands
-EE	+5925+02445	Europe/Tallinn
-EG	+3003+03115	Africa/Cairo
-EH	+2709-01312	Africa/El_Aaiun
-ER	+1520+03853	Africa/Asmara
-ES	+4024-00341	Europe/Madrid	Spain (mainland)
-ES	+3553-00519	Africa/Ceuta	Ceuta, Melilla
-ES	+2806-01524	Atlantic/Canary	Canary Islands
-ET	+0902+03842	Africa/Addis_Ababa
-FI	+6010+02458	Europe/Helsinki
-FJ	-1808+17825	Pacific/Fiji
-FK	-5142-05751	Atlantic/Stanley
-FM	+0725+15147	Pacific/Chuuk	Chuuk/Truk, Yap
-FM	+0658+15813	Pacific/Pohnpei	Pohnpei/Ponape
-FM	+0519+16259	Pacific/Kosrae	Kosrae
-FO	+6201-00646	Atlantic/Faroe
-FR	+4852+00220	Europe/Paris
-GA	+0023+00927	Africa/Libreville
-GB	+513030-0000731	Europe/London
-GD	+1203-06145	America/Grenada
-GE	+4143+04449	Asia/Tbilisi
-GF	+0456-05220	America/Cayenne
-GG	+492717-0023210	Europe/Guernsey
-GH	+0533-00013	Africa/Accra
-GI	+3608-00521	Europe/Gibraltar
-GL	+6411-05144	America/Godthab	Greenland (most areas)
-GL	+7646-01840	America/Danmarkshavn	National Park (east coast)
-GL	+7029-02158	America/Scoresbysund	Scoresbysund/Ittoqqortoormiit
-GL	+7634-06847	America/Thule	Thule/Pituffik
-GM	+1328-01639	Africa/Banjul
-GN	+0931-01343	Africa/Conakry
-GP	+1614-06132	America/Guadeloupe
-GQ	+0345+00847	Africa/Malabo
-GR	+3758+02343	Europe/Athens
-GS	-5416-03632	Atlantic/South_Georgia
-GT	+1438-09031	America/Guatemala
-GU	+1328+14445	Pacific/Guam
-GW	+1151-01535	Africa/Bissau
-GY	+0648-05810	America/Guyana
-HK	+2217+11409	Asia/Hong_Kong
-HN	+1406-08713	America/Tegucigalpa
-HR	+4548+01558	Europe/Zagreb
-HT	+1832-07220	America/Port-au-Prince
-HU	+4730+01905	Europe/Budapest
-ID	-0610+10648	Asia/Jakarta	Java, Sumatra
-ID	-0002+10920	Asia/Pontianak	Borneo (west, central)
-ID	-0507+11924	Asia/Makassar	Borneo (east, south); Sulawesi/Celebes, Bali, Nusa Tengarra; Timor (west)
-ID	-0232+14042	Asia/Jayapura	New Guinea (West Papua / Irian Jaya); Malukus/Moluccas
-IE	+5320-00615	Europe/Dublin
-IL	+314650+0351326	Asia/Jerusalem
-IM	+5409-00428	Europe/Isle_of_Man
-IN	+2232+08822	Asia/Kolkata
-IO	-0720+07225	Indian/Chagos
-IQ	+3321+04425	Asia/Baghdad
-IR	+3540+05126	Asia/Tehran
-IS	+6409-02151	Atlantic/Reykjavik
-IT	+4154+01229	Europe/Rome
-JE	+491101-0020624	Europe/Jersey
-JM	+175805-0764736	America/Jamaica
-JO	+3157+03556	Asia/Amman
-JP	+353916+1394441	Asia/Tokyo
-KE	-0117+03649	Africa/Nairobi
-KG	+4254+07436	Asia/Bishkek
-KH	+1133+10455	Asia/Phnom_Penh
-KI	+0125+17300	Pacific/Tarawa	Gilbert Islands
-KI	-0308-17105	Pacific/Enderbury	Phoenix Islands
-KI	+0152-15720	Pacific/Kiritimati	Line Islands
-KM	-1141+04316	Indian/Comoro
-KN	+1718-06243	America/St_Kitts
-KP	+3901+12545	Asia/Pyongyang
-KR	+3733+12658	Asia/Seoul
-KW	+2920+04759	Asia/Kuwait
-KY	+1918-08123	America/Cayman
-KZ	+4315+07657	Asia/Almaty	Kazakhstan (most areas)
-KZ	+4448+06528	Asia/Qyzylorda	Qyzylorda/Kyzylorda/Kzyl-Orda
-KZ	+5312+06337	Asia/Qostanay	Qostanay/Kostanay/Kustanay
-KZ	+5017+05710	Asia/Aqtobe	Aqtobe/Aktobe
-KZ	+4431+05016	Asia/Aqtau	Mangghystau/Mankistau
-KZ	+4707+05156	Asia/Atyrau	Atyrau/Atirau/Gur'yev
-KZ	+5113+05121	Asia/Oral	West Kazakhstan
-LA	+1758+10236	Asia/Vientiane
-LB	+3353+03530	Asia/Beirut
-LC	+1401-06100	America/St_Lucia
-LI	+4709+00931	Europe/Vaduz
-LK	+0656+07951	Asia/Colombo
-LR	+0618-01047	Africa/Monrovia
-LS	-2928+02730	Africa/Maseru
-LT	+5441+02519	Europe/Vilnius
-LU	+4936+00609	Europe/Luxembourg
-LV	+5657+02406	Europe/Riga
-LY	+3254+01311	Africa/Tripoli
-MA	+3339-00735	Africa/Casablanca
-MC	+4342+00723	Europe/Monaco
-MD	+4700+02850	Europe/Chisinau
-ME	+4226+01916	Europe/Podgorica
-MF	+1804-06305	America/Marigot
-MG	-1855+04731	Indian/Antananarivo
-MH	+0709+17112	Pacific/Majuro	Marshall Islands (most areas)
-MH	+0905+16720	Pacific/Kwajalein	Kwajalein
-MK	+4159+02126	Europe/Skopje
-ML	+1239-00800	Africa/Bamako
-MM	+1647+09610	Asia/Yangon
-MN	+4755+10653	Asia/Ulaanbaatar	Mongolia (most areas)
-MN	+4801+09139	Asia/Hovd	Bayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan
-MN	+4804+11430	Asia/Choibalsan	Dornod, Sukhbaatar
-MO	+221150+1133230	Asia/Macau
-MP	+1512+14545	Pacific/Saipan
-MQ	+1436-06105	America/Martinique
-MR	+1806-01557	Africa/Nouakchott
-MS	+1643-06213	America/Montserrat
-MT	+3554+01431	Europe/Malta
-MU	-2010+05730	Indian/Mauritius
-MV	+0410+07330	Indian/Maldives
-MW	-1547+03500	Africa/Blantyre
-MX	+1924-09909	America/Mexico_City	Central Time
-MX	+2105-08646	America/Cancun	Eastern Standard Time - Quintana Roo
-MX	+2058-08937	America/Merida	Central Time - Campeche, Yucatan
-MX	+2540-10019	America/Monterrey	Central Time - Durango; Coahuila, Nuevo Leon, Tamaulipas (most areas)
-MX	+2550-09730	America/Matamoros	Central Time US - Coahuila, Nuevo Leon, Tamaulipas (US border)
-MX	+2313-10625	America/Mazatlan	Mountain Time - Baja California Sur, Nayarit, Sinaloa
-MX	+2838-10605	America/Chihuahua	Mountain Time - Chihuahua (most areas)
-MX	+2934-10425	America/Ojinaga	Mountain Time US - Chihuahua (US border)
-MX	+2904-11058	America/Hermosillo	Mountain Standard Time - Sonora
-MX	+3232-11701	America/Tijuana	Pacific Time US - Baja California
-MX	+2048-10515	America/Bahia_Banderas	Central Time - Bahia de Banderas
-MY	+0310+10142	Asia/Kuala_Lumpur	Malaysia (peninsula)
-MY	+0133+11020	Asia/Kuching	Sabah, Sarawak
-MZ	-2558+03235	Africa/Maputo
-NA	-2234+01706	Africa/Windhoek
-NC	-2216+16627	Pacific/Noumea
-NE	+1331+00207	Africa/Niamey
-NF	-2903+16758	Pacific/Norfolk
-NG	+0627+00324	Africa/Lagos
-NI	+1209-08617	America/Managua
-NL	+5222+00454	Europe/Amsterdam
-NO	+5955+01045	Europe/Oslo
-NP	+2743+08519	Asia/Kathmandu
-NR	-0031+16655	Pacific/Nauru
-NU	-1901-16955	Pacific/Niue
-NZ	-3652+17446	Pacific/Auckland	New Zealand (most areas)
-NZ	-4357-17633	Pacific/Chatham	Chatham Islands
-OM	+2336+05835	Asia/Muscat
-PA	+0858-07932	America/Panama
-PE	-1203-07703	America/Lima
-PF	-1732-14934	Pacific/Tahiti	Society Islands
-PF	-0900-13930	Pacific/Marquesas	Marquesas Islands
-PF	-2308-13457	Pacific/Gambier	Gambier Islands
-PG	-0930+14710	Pacific/Port_Moresby	Papua New Guinea (most areas)
-PG	-0613+15534	Pacific/Bougainville	Bougainville
-PH	+1435+12100	Asia/Manila
-PK	+2452+06703	Asia/Karachi
-PL	+5215+02100	Europe/Warsaw
-PM	+4703-05620	America/Miquelon
-PN	-2504-13005	Pacific/Pitcairn
-PR	+182806-0660622	America/Puerto_Rico
-PS	+3130+03428	Asia/Gaza	Gaza Strip
-PS	+313200+0350542	Asia/Hebron	West Bank
-PT	+3843-00908	Europe/Lisbon	Portugal (mainland)
-PT	+3238-01654	Atlantic/Madeira	Madeira Islands
-PT	+3744-02540	Atlantic/Azores	Azores
-PW	+0720+13429	Pacific/Palau
-PY	-2516-05740	America/Asuncion
-QA	+2517+05132	Asia/Qatar
-RE	-2052+05528	Indian/Reunion
-RO	+4426+02606	Europe/Bucharest
-RS	+4450+02030	Europe/Belgrade
-RU	+5443+02030	Europe/Kaliningrad	MSK-01 - Kaliningrad
-RU	+554521+0373704	Europe/Moscow	MSK+00 - Moscow area
-RU	+4457+03406	Europe/Simferopol	MSK+00 - Crimea
-RU	+5836+04939	Europe/Kirov	MSK+00 - Kirov
-RU	+4621+04803	Europe/Astrakhan	MSK+01 - Astrakhan
-RU	+4844+04425	Europe/Volgograd	MSK+01 - Volgograd
-RU	+5134+04602	Europe/Saratov	MSK+01 - Saratov
-RU	+5420+04824	Europe/Ulyanovsk	MSK+01 - Ulyanovsk
-RU	+5312+05009	Europe/Samara	MSK+01 - Samara, Udmurtia
-RU	+5651+06036	Asia/Yekaterinburg	MSK+02 - Urals
-RU	+5500+07324	Asia/Omsk	MSK+03 - Omsk
-RU	+5502+08255	Asia/Novosibirsk	MSK+04 - Novosibirsk
-RU	+5322+08345	Asia/Barnaul	MSK+04 - Altai
-RU	+5630+08458	Asia/Tomsk	MSK+04 - Tomsk
-RU	+5345+08707	Asia/Novokuznetsk	MSK+04 - Kemerovo
-RU	+5601+09250	Asia/Krasnoyarsk	MSK+04 - Krasnoyarsk area
-RU	+5216+10420	Asia/Irkutsk	MSK+05 - Irkutsk, Buryatia
-RU	+5203+11328	Asia/Chita	MSK+06 - Zabaykalsky
-RU	+6200+12940	Asia/Yakutsk	MSK+06 - Lena River
-RU	+623923+1353314	Asia/Khandyga	MSK+06 - Tomponsky, Ust-Maysky
-RU	+4310+13156	Asia/Vladivostok	MSK+07 - Amur River
-RU	+643337+1431336	Asia/Ust-Nera	MSK+07 - Oymyakonsky
-RU	+5934+15048	Asia/Magadan	MSK+08 - Magadan
-RU	+4658+14242	Asia/Sakhalin	MSK+08 - Sakhalin Island
-RU	+6728+15343	Asia/Srednekolymsk	MSK+08 - Sakha (E); North Kuril Is
-RU	+5301+15839	Asia/Kamchatka	MSK+09 - Kamchatka
-RU	+6445+17729	Asia/Anadyr	MSK+09 - Bering Sea
-RW	-0157+03004	Africa/Kigali
-SA	+2438+04643	Asia/Riyadh
-SB	-0932+16012	Pacific/Guadalcanal
-SC	-0440+05528	Indian/Mahe
-SD	+1536+03232	Africa/Khartoum
-SE	+5920+01803	Europe/Stockholm
-SG	+0117+10351	Asia/Singapore
-SH	-1555-00542	Atlantic/St_Helena
-SI	+4603+01431	Europe/Ljubljana
-SJ	+7800+01600	Arctic/Longyearbyen
-SK	+4809+01707	Europe/Bratislava
-SL	+0830-01315	Africa/Freetown
-SM	+4355+01228	Europe/San_Marino
-SN	+1440-01726	Africa/Dakar
-SO	+0204+04522	Africa/Mogadishu
-SR	+0550-05510	America/Paramaribo
-SS	+0451+03137	Africa/Juba
-ST	+0020+00644	Africa/Sao_Tome
-SV	+1342-08912	America/El_Salvador
-SX	+180305-0630250	America/Lower_Princes
-SY	+3330+03618	Asia/Damascus
-SZ	-2618+03106	Africa/Mbabane
-TC	+2128-07108	America/Grand_Turk
-TD	+1207+01503	Africa/Ndjamena
-TF	-492110+0701303	Indian/Kerguelen
-TG	+0608+00113	Africa/Lome
-TH	+1345+10031	Asia/Bangkok
-TJ	+3835+06848	Asia/Dushanbe
-TK	-0922-17114	Pacific/Fakaofo
-TL	-0833+12535	Asia/Dili
-TM	+3757+05823	Asia/Ashgabat
-TN	+3648+01011	Africa/Tunis
-TO	-2110-17510	Pacific/Tongatapu
-TR	+4101+02858	Europe/Istanbul
-TT	+1039-06131	America/Port_of_Spain
-TV	-0831+17913	Pacific/Funafuti
-TW	+2503+12130	Asia/Taipei
-TZ	-0648+03917	Africa/Dar_es_Salaam
-UA	+5026+03031	Europe/Kiev	Ukraine (most areas)
-UA	+4837+02218	Europe/Uzhgorod	Ruthenia
-UA	+4750+03510	Europe/Zaporozhye	Zaporozh'ye/Zaporizhia; Lugansk/Luhansk (east)
-UG	+0019+03225	Africa/Kampala
-UM	+2813-17722	Pacific/Midway	Midway Islands
-UM	+1917+16637	Pacific/Wake	Wake Island
-US	+404251-0740023	America/New_York	Eastern (most areas)
-US	+421953-0830245	America/Detroit	Eastern - MI (most areas)
-US	+381515-0854534	America/Kentucky/Louisville	Eastern - KY (Louisville area)
-US	+364947-0845057	America/Kentucky/Monticello	Eastern - KY (Wayne)
-US	+394606-0860929	America/Indiana/Indianapolis	Eastern - IN (most areas)
-US	+384038-0873143	America/Indiana/Vincennes	Eastern - IN (Da, Du, K, Mn)
-US	+410305-0863611	America/Indiana/Winamac	Eastern - IN (Pulaski)
-US	+382232-0862041	America/Indiana/Marengo	Eastern - IN (Crawford)
-US	+382931-0871643	America/Indiana/Petersburg	Eastern - IN (Pike)
-US	+384452-0850402	America/Indiana/Vevay	Eastern - IN (Switzerland)
-US	+415100-0873900	America/Chicago	Central (most areas)
-US	+375711-0864541	America/Indiana/Tell_City	Central - IN (Perry)
-US	+411745-0863730	America/Indiana/Knox	Central - IN (Starke)
-US	+450628-0873651	America/Menominee	Central - MI (Wisconsin border)
-US	+470659-1011757	America/North_Dakota/Center	Central - ND (Oliver)
-US	+465042-1012439	America/North_Dakota/New_Salem	Central - ND (Morton rural)
-US	+471551-1014640	America/North_Dakota/Beulah	Central - ND (Mercer)
-US	+394421-1045903	America/Denver	Mountain (most areas)
-US	+433649-1161209	America/Boise	Mountain - ID (south); OR (east)
-US	+332654-1120424	America/Phoenix	MST - Arizona (except Navajo)
-US	+340308-1181434	America/Los_Angeles	Pacific
-US	+611305-1495401	America/Anchorage	Alaska (most areas)
-US	+581807-1342511	America/Juneau	Alaska - Juneau area
-US	+571035-1351807	America/Sitka	Alaska - Sitka area
-US	+550737-1313435	America/Metlakatla	Alaska - Annette Island
-US	+593249-1394338	America/Yakutat	Alaska - Yakutat
-US	+643004-1652423	America/Nome	Alaska (west)
-US	+515248-1763929	America/Adak	Aleutian Islands
-US	+211825-1575130	Pacific/Honolulu	Hawaii
-UY	-345433-0561245	America/Montevideo
-UZ	+3940+06648	Asia/Samarkand	Uzbekistan (west)
-UZ	+4120+06918	Asia/Tashkent	Uzbekistan (east)
-VA	+415408+0122711	Europe/Vatican
-VC	+1309-06114	America/St_Vincent
-VE	+1030-06656	America/Caracas
-VG	+1827-06437	America/Tortola
-VI	+1821-06456	America/St_Thomas
-VN	+1045+10640	Asia/Ho_Chi_Minh
-VU	-1740+16825	Pacific/Efate
-WF	-1318-17610	Pacific/Wallis
-WS	-1350-17144	Pacific/Apia
-YE	+1245+04512	Asia/Aden
-YT	-1247+04514	Indian/Mayotte
-ZA	-2615+02800	Africa/Johannesburg
-ZM	-1525+02817	Africa/Lusaka
-ZW	-1750+03103	Africa/Harare
--- a/test/jdk/sun/util/calendar/zi/tzdata_jdk/gmt	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	GMT		0:00	-	GMT
--- a/test/jdk/sun/util/calendar/zi/tzdata_jdk/jdk11_full_backward	Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-#
-# Copyright (c) 2001, 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.
-#
-# JDK 1.1.x compatible time zone IDs
-#
-
-Link Australia/Darwin ACT
-Link Australia/Sydney AET
-Link America/Argentina/Buenos_Aires AGT
-Link Africa/Cairo ART
-Link America/Anchorage AST
-Link America/Sao_Paulo BET
-Link Asia/Dhaka BST
-Link Africa/Harare CAT
-Link America/St_Johns CNT
-Link America/Chicago CST
-Link Asia/Shanghai CTT
-Link Africa/Addis_Ababa EAT
-Link Europe/Paris ECT
-Link America/New_York EST
-Link Pacific/Honolulu HST
-Link America/Indiana/Indianapolis IET
-Link Asia/Calcutta IST
-Link Asia/Tokyo JST
-Link Pacific/Apia MIT
-Link America/Denver MST
-Link Asia/Yerevan NET
-Link Pacific/Auckland NST
-Link Asia/Karachi PLT
-Link America/Phoenix PNT
-Link America/Puerto_Rico PRT
-Link America/Los_Angeles PST
-Link Pacific/Guadalcanal SST
-Link Asia/Saigon VST
-
-# The follwong link is required to generate JDK 1.2.x and 1.3.x
-# compatible zones. In the Olson public source, MET is defined as
-# GMT+1:00 with the C-Eur rules. In JDK, MET is defined as an alias
-# of Asia/Tehran. This line must be removed if a full set of Olson
-# zones is generated. Otherwise, MET appears twice in the
-# ZoneInfoMappings.IDs table.
-Link Asia/Tehran MET
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	SystemV	min	1973	-	Apr	lastSun	2:00	1:00	D
-Rule	SystemV	min	1973	-	Oct	lastSun	2:00	0	S
-Rule	SystemV	1974	only	-	Jan	6	2:00	1:00	D
-Rule	SystemV	1974	only	-	Nov	lastSun	2:00	0	S
-Rule	SystemV	1975	only	-	Feb	23	2:00	1:00	D
-Rule	SystemV	1975	only	-	Oct	lastSun	2:00	0	S
-Rule	SystemV	1976	max	-	Apr	lastSun	2:00	1:00	D
-Rule	SystemV	1976	max	-	Oct	lastSun	2:00	0	S
-
-# Zone	NAME		GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
-Zone	SystemV/AST4ADT	-4:00	SystemV		A%sT
-Zone	SystemV/EST5EDT	-5:00	SystemV		E%sT
-Zone	SystemV/CST6CDT	-6:00	SystemV		C%sT
-Zone	SystemV/MST7MDT	-7:00	SystemV		M%sT
-Zone	SystemV/PST8PDT	-8:00	SystemV		P%sT
-Zone	SystemV/YST9YDT	-9:00	SystemV		Y%sT
-Zone	SystemV/AST4	-4:00	-		AST
-Zone	SystemV/EST5	-5:00	-		EST
-Zone	SystemV/CST6	-6:00	-		CST
-Zone	SystemV/MST7	-7:00	-		MST
-Zone	SystemV/PST8	-8:00	-		PST
-Zone	SystemV/YST9	-9:00	-		YST
-Zone	SystemV/HST10	-10:00	-		HST
-
-#
-# For the UTC change in Mustang
-#
-Link GMT UTC
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/ProblemList-graal.txt	Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,31 @@
+#
+# Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+#############################################################################
+#
+# List of quarantined tests for testing in Graal JIT mode.
+#
+#############################################################################
+
+tools/javac/file/LimitedImage.java                         8228642     generic-all
+tools/javac/modules/InheritRuntimeEnvironmentTest.java     8228642     generic-all
--- a/test/langtools/tools/javac/file/LimitedImage.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/test/langtools/tools/javac/file/LimitedImage.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * 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,7 +28,7 @@
  * @library /tools/lib
  * @modules jdk.compiler/com.sun.tools.javac.api
  *          jdk.compiler/com.sun.tools.javac.main
- * @run main/othervm --limit-modules jdk.compiler,jdk.internal.vm.compiler LimitedImage
+ * @run main/othervm --limit-modules jdk.compiler LimitedImage
  */
 
 import java.io.IOException;
--- a/test/langtools/tools/javac/modules/InheritRuntimeEnvironmentTest.java	Thu Jul 25 17:27:53 2019 -0400
+++ b/test/langtools/tools/javac/modules/InheritRuntimeEnvironmentTest.java	Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -130,8 +130,7 @@
         // This is the test, to verify that the module being compiled will not be able to read
         // modules on the module path when a --limit-modules is used
         new TestCase(base)
-                .testOpts("--module-path", modules.toString(),
-                        "--limit-modules", "jdk.compiler,jdk.internal.vm.compiler")
+                .testOpts("--module-path", modules.toString(), "--limit-modules", "jdk.compiler")
                 .otherOpts("-XDrawDiagnostics",
                         "--module-source-path", src.toString(),
                         "-classpath", emptyClassPath.toString())