Extend TzLookupGenerator to generate new data am: dd3888102d am: f4f6b0d6ab

Original change: https://android-review.googlesource.com/c/platform/system/timezone/+/1309355

Change-Id: I3e7a2e90a7aec06af6a6e3b72f2b5af216d1db45
diff --git a/input_tools/android/tzlookup_generator/Android.bp b/input_tools/android/tzlookup_generator/Android.bp
index 3ebd323..b63324a 100644
--- a/input_tools/android/tzlookup_generator/Android.bp
+++ b/input_tools/android/tzlookup_generator/Android.bp
@@ -29,8 +29,8 @@
 
     srcs: ["src/main/java/**/*.java"],
     static_libs: [
-        "icu4j",
         "countryzonesprotos",
+        "icu4j",
         "libprotobuf-java-full",
         "tztools_common",
     ],
diff --git a/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/BackwardFile.java b/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/BackwardFile.java
index 161a6b8..b010c01 100644
--- a/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/BackwardFile.java
+++ b/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/BackwardFile.java
@@ -22,8 +22,11 @@
 import java.text.ParseException;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -32,6 +35,7 @@
 final class BackwardFile {
 
     private final Map<String, String> links = new HashMap<>();
+    private Map<String, String> directLinks;
 
     private BackwardFile() {}
 
@@ -70,30 +74,69 @@
         }
     }
 
-    /** Returns a mapping from linkName (old tz ID) to target (new tz ID). */
-    Map<String, String> getDirectLinks() {
-        // Validate links for cycles and collapse the links if there are links to links. There's a
-        // simple check to confirm that no chain is longer than a fixed length, to guard against
-        // cycles.
-        final int maxChainLength = 2;
-        Map<String, String> collapsedLinks = new HashMap<>();
-        for (String fromId : links.keySet()) {
-            int chainLength = 0;
-            String currentId = fromId;
-            String lastId = null;
-            while ((currentId = links.get(currentId)) != null) {
-                chainLength++;
-                lastId = currentId;
-                if (chainLength >= maxChainLength) {
-                    throw new IllegalStateException(
-                            "Chain from " + fromId + " is longer than " + maxChainLength);
+    /**
+     * Returns a set of IDs linked to the supplied ID, even intermediate ones in a chain of links.
+     */
+    Set<String> getAllAlternativeIds(String zoneId) {
+        Set<String> knownAlternativeIds = new HashSet<>();
+        // Add the ID we're searching for. We don't need to look for it.
+        knownAlternativeIds.add(zoneId);
+
+        LinkedList<String> searchIdQueue = new LinkedList<>();
+        searchIdQueue.add(zoneId);
+        while (!searchIdQueue.isEmpty()) {
+            String searchId = searchIdQueue.removeLast();
+            for (Map.Entry<String, String> entry : links.entrySet()) {
+                String fromId = entry.getKey();
+                String toId = entry.getValue();
+                if (fromId.equals(searchId)) {
+                    if (knownAlternativeIds.add(toId)) {
+                        searchIdQueue.add(toId);
+                    }
+                } else if (toId.equals(searchId)) {
+                    if (knownAlternativeIds.add(fromId)) {
+                        searchIdQueue.add(fromId);
+                    }
                 }
             }
-            if (chainLength == 0) {
-                throw new IllegalStateException("Null Link targetId for " + fromId);
-            }
-            collapsedLinks.put(fromId, lastId);
         }
-        return Collections.unmodifiableMap(collapsedLinks);
+
+        // Remove the zone we were searching for - it's not an alternative for itself.
+        knownAlternativeIds.remove(zoneId);
+        return Collections.unmodifiableSet(knownAlternativeIds);
+    }
+
+    Map<String, String> getLinks() {
+        return Collections.unmodifiableMap(links);
+    }
+
+    /** Returns a mapping from linkName (old tz ID) to target (new tz ID). */
+    Map<String, String> getDirectLinks() {
+        if (directLinks == null) {
+            // Validate links for cycles and collapse the links to remove intermediates if there are
+            // links to links. There's a simple check to confirm that no chain is longer than a
+            // fixed length, to guard against cycles.
+            final int maxChainLength = 2;
+            Map<String, String> collapsedLinks = new HashMap<>();
+            for (String fromId : links.keySet()) {
+                int chainLength = 0;
+                String currentId = fromId;
+                String lastId = null;
+                while ((currentId = links.get(currentId)) != null) {
+                    chainLength++;
+                    lastId = currentId;
+                    if (chainLength > maxChainLength) {
+                        throw new IllegalStateException(
+                                "Chain from " + fromId + " is longer than " + maxChainLength);
+                    }
+                }
+                if (chainLength == 0) {
+                    throw new IllegalStateException("Null Link targetId for " + fromId);
+                }
+                collapsedLinks.put(fromId, lastId);
+            }
+            directLinks = Collections.unmodifiableMap(collapsedLinks);
+        }
+        return directLinks;
     }
 }
diff --git a/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/TzLookupFile.java b/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/TzLookupFile.java
index d29de56..dd04d8e 100644
--- a/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/TzLookupFile.java
+++ b/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/TzLookupFile.java
@@ -25,6 +25,8 @@
 import java.time.Instant;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
+
 import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
@@ -60,6 +62,10 @@
     private static final String ZONE_SHOW_IN_PICKER_ATTRIBUTE = "picker";
     // The time when the zone stops being distinct from another of the country's zones (inclusive).
     private static final String ZONE_NOT_USED_AFTER_ATTRIBUTE = "notafter";
+    // The zone ID used in place of this one starting from the "notafter" time (when present).
+    private static final String ZONE_NOT_USED_REPLACEMENT_ID_ATTRIBUTE = "repl";
+    // Other IDs associated with this ID, e.g. legacy or more modern alternatives.
+    private static final String ZONE_ALTERNATIVE_IDS_ATTRIBUTE = "alts";
 
 
     // Short encodings for boolean attributes.
@@ -71,20 +77,17 @@
         /*
          * The required XML structure is:
          * <timezones ianaversion="2017b">
-         *   <countryzones>
-         *     <country code="us" default="America/New_York" everutc="n">
-         *       <!-- -5:00 -->
-         *       <id notafter="1234">America/New_York"</id>
-         *       ...
-         *       <!-- -8:00 -->
-         *       <id picker="n">America/Los_Angeles</id>
-         *       ...
-         *     </country>
-         *     <country code="gb" default="Europe/London" defaultBoost="y" everutc="y">
-         *       <!-- 0:00 -->
-         *       <id>Europe/London</id>
-         *     </country>
-         *   </countryzones>
+         *  <countryzones>
+         *   <country code="us" default="America/New_York" everutc="n">
+         *    <id>America/New_York"</id>
+         *    <id notafter="1234" repl="America/New_York" alts="US/Michigan">America/Detroit"</id>
+         *    ...
+         *    <id picker="n">America/Los_Angeles</id>
+         *   </country>
+         *   <country code="gb" default="Europe/London" defaultBoost="y" everutc="y">
+         *    <id alts="Europe/Belfast,GB,GB-Eire">Europe/London</id>
+         *   </country>
+         *  </countryzones>
          * </timezones>
          */
 
@@ -212,24 +215,40 @@
         private final String olsonId;
         private final boolean showInPicker;
         private final Instant notUsedAfterInclusive;
+        private final String notAfterReplacementId;
+        private final List<String> alternativeZoneIds;
 
-        TimeZoneMapping(String olsonId, boolean showInPicker, Instant notUsedAfterInclusive) {
-            this.olsonId = olsonId;
+        TimeZoneMapping(String olsonId, boolean showInPicker, Instant notUsedAfterInclusive,
+                String notAfterReplacementId, List<String> alternativeZoneIds) {
+            this.olsonId = Objects.requireNonNull(olsonId);
             this.showInPicker = showInPicker;
+            if ((notUsedAfterInclusive == null) != (notAfterReplacementId == null)) {
+                throw new IllegalArgumentException(
+                        "Supply both notUsedAfterInclusive and notAfterReplacementId or neither");
+            }
             this.notUsedAfterInclusive = notUsedAfterInclusive;
+            this.notAfterReplacementId = notAfterReplacementId;
+            this.alternativeZoneIds = Objects.requireNonNull(alternativeZoneIds);
         }
 
-        static void writeXml(TimeZoneMapping timeZoneId, XMLStreamWriter writer)
+        static void writeXml(TimeZoneMapping timeZoneMapping, XMLStreamWriter writer)
                 throws XMLStreamException {
             writer.writeStartElement(ZONE_ID_ELEMENT);
-            if (!timeZoneId.showInPicker) {
+            if (!timeZoneMapping.showInPicker) {
                 writer.writeAttribute(ZONE_SHOW_IN_PICKER_ATTRIBUTE, encodeBooleanAttribute(false));
             }
-            if (timeZoneId.notUsedAfterInclusive != null) {
+            if (timeZoneMapping.notUsedAfterInclusive != null) {
                 writer.writeAttribute(ZONE_NOT_USED_AFTER_ATTRIBUTE,
-                        encodeLongAttribute(timeZoneId.notUsedAfterInclusive.toEpochMilli()));
+                        encodeLongAttribute(timeZoneMapping.notUsedAfterInclusive.toEpochMilli()));
+                writer.writeAttribute(ZONE_NOT_USED_REPLACEMENT_ID_ATTRIBUTE,
+                        timeZoneMapping.notAfterReplacementId);
             }
-            writer.writeCharacters(timeZoneId.olsonId);
+            if (!timeZoneMapping.alternativeZoneIds.isEmpty()) {
+                String alternativeZoneIdsString =
+                        String.join(",", timeZoneMapping.alternativeZoneIds);
+                writer.writeAttribute(ZONE_ALTERNATIVE_IDS_ATTRIBUTE, alternativeZoneIdsString);
+            }
+            writer.writeCharacters(timeZoneMapping.olsonId);
             writer.writeEndElement();
         }
     }
diff --git a/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/TzLookupGenerator.java b/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/TzLookupGenerator.java
index b6d368b..119d847 100644
--- a/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/TzLookupGenerator.java
+++ b/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/TzLookupGenerator.java
@@ -31,6 +31,7 @@
 import java.time.Instant;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -39,9 +40,8 @@
 import javax.xml.stream.XMLStreamException;
 
 /**
- * Generates the tzlookup.xml file using the information from countryzones.txt and zones.tab.
- *
- * See {@link #main(String[])} for commandline information.
+ * Generates the tzlookup.xml file using the information from ICU4J, countryzones.txt, backwards
+ * and zones.tab.
  */
 public final class TzLookupGenerator {
 
@@ -53,7 +53,7 @@
 
     /**
      * The end time (exclusive) for generating country zone usage. 20380119 03:14:07 UTC. Any times
-     * after this will be considered "infinity" for the "notAfter" value and not included. Chosen
+     * after this will be considered "infinity" for the "notafter" value and not included. Chosen
      * because this is a "nice round number" and has historical significance for people that deal
      * with computer time. There is no particular reason to choose this over another time; any
      * future time after the last time we expect the code to reasonably encounter will do.
@@ -70,10 +70,10 @@
     public static final Instant ZONE_USAGE_CALCS_END =
             ZONE_USAGE_NOT_AFTER_CUT_OFF.plus(2 * 365, ChronoUnit.DAYS);
 
-    private final String countryZonesFile;
-    private final String zoneTabFile;
-    private final String backwardFile;
-    private final String outputFile;
+    private final String countryZonesFileIn;
+    private final String zoneTabFileIn;
+    private final String backwardFileIn;
+    private final String tzLookupXmlOut;
 
     /**
      * Executes the generator.
@@ -82,20 +82,22 @@
         if (args.length != 4) {
             System.err.println(
                     "usage: java com.android.libcore.timezone.tzlookup.TzLookupGenerator"
-                            + " <input proto file> <zone.tab file> <backward file>"
-                            + " <output xml file>");
+                            + " <[in] countryzones.txt file> <[in] zone.tab file>"
+                            + " <[in] backward file> <[out] tzlookup.xml file>");
             System.exit(0);
         }
-        boolean success = new TzLookupGenerator(args[0], args[1], args[2], args[3]).execute();
+        TzLookupGenerator tzLookupGenerator =
+                new TzLookupGenerator(args[0], args[1], args[2], args[3]);
+        boolean success = tzLookupGenerator.execute();
         System.exit(success ? 0 : 1);
     }
 
-    TzLookupGenerator(String countryZonesFile, String zoneTabFile, String backwardFile,
-            String outputFile) {
-        this.countryZonesFile = countryZonesFile;
-        this.zoneTabFile = zoneTabFile;
-        this.backwardFile = backwardFile;
-        this.outputFile = outputFile;
+    TzLookupGenerator(String countryZonesFileIn, String zoneTabFileIn, String backwardFileIn,
+            String tzLookupXmlOut) {
+        this.countryZonesFileIn = countryZonesFileIn;
+        this.zoneTabFileIn = zoneTabFileIn;
+        this.backwardFileIn = backwardFileIn;
+        this.tzLookupXmlOut = tzLookupXmlOut;
     }
 
     boolean execute() {
@@ -103,7 +105,7 @@
         try {
             // Parse the countryzones input file.
             CountryZonesFile.CountryZones countryZonesIn =
-                    parseAndValidateCountryZones(countryZonesFile, errors);
+                    parseAndValidateCountryZones(countryZonesFileIn, errors);
 
             // Check the countryzones.txt rules version matches the version that ICU is using.
             String icuTzDataVersion = TimeZone.getTZDataVersion();
@@ -113,10 +115,9 @@
                         + inputIanaVersion + " but the ICU you have is for " + icuTzDataVersion);
             }
 
-
             // Pull out information we want to validate against from zone.tab (which we have to
             // assume matches the ICU version since it doesn't contain its own version info).
-            Map<String, List<String>> zoneTabMapping = parseZoneTabFile(zoneTabFile, errors);
+            Map<String, List<String>> zoneTabMapping = parseZoneTabFile(zoneTabFileIn, errors);
 
             List<CountryZonesFile.Country> countriesIn = countryZonesIn.getCountriesList();
             List<String> countriesInIsos = CountryZonesFileSupport.extractIsoCodes(countriesIn);
@@ -139,31 +140,26 @@
             Set<String> timezonesCountryIsos = new HashSet<>(upperCaseCountriesInIsos);
             Set<String> zoneTabCountryIsos = zoneTabMapping.keySet();
             if (!zoneTabCountryIsos.equals(timezonesCountryIsos)) {
-                throw errors.addFatalAndHalt(zoneTabFile + " contains "
+                throw errors.addFatalAndHalt(zoneTabFileIn + " contains "
                         + Utils.subtract(zoneTabCountryIsos, timezonesCountryIsos)
                         + " not present in countryzones, "
-                        + countryZonesFile + " contains "
+                        + countryZonesFileIn + " contains "
                         + Utils.subtract(timezonesCountryIsos, zoneTabCountryIsos)
                         + " not present in zonetab.");
             }
 
             // Obtain and validate a mapping from old IDs to new IDs.
-            Map<String, String> zoneIdLinks = parseAndValidateBackwardFile(backwardFile, errors);
+            BackwardFile backwardIn = parseAndValidateBackwardFile(backwardFileIn, errors);
             errors.throwIfError("Errors accumulated");
 
-            TzLookupFile.TimeZones timeZonesOut = createOutputTimeZones(
-                    inputIanaVersion, zoneTabMapping, countriesIn, zoneIdLinks, errors);
+            TzLookupFile.TimeZones timeZonesOut = createOutputData(
+                    inputIanaVersion, zoneTabMapping, countriesIn, backwardIn, errors);
             errors.throwIfError("Errors accumulated");
 
             // Write the output structure if there wasn't an error.
-            logInfo("Writing " + outputFile);
-            try {
-                TzLookupFile.write(timeZonesOut, outputFile);
-            } catch (XMLStreamException e) {
-                throw errors.addFatalAndHalt("Unable to write output file", e);
-            }
+            writeOutputData(timeZonesOut, tzLookupXmlOut, errors);
             return true;
-        } catch (HaltExecutionException | IOException e) {
+        } catch (HaltExecutionException e) {
             logError("Stopping due to fatal condition", e);
             return false;
         } finally {
@@ -192,14 +188,13 @@
      * Load the backward file and return the links contained within. This is used as the source of
      * equivalent time zone IDs.
      */
-    private static Map<String, String> parseAndValidateBackwardFile(
-            String backwardFile, Errors errors) {
+    private static BackwardFile parseAndValidateBackwardFile(String backwardFile, Errors errors) {
         errors.pushScope("Parsing " + backwardFile);
         try {
-            BackwardFile backwardIn = BackwardFile.parse(backwardFile);
+            BackwardFile backward = BackwardFile.parse(backwardFile);
 
             // Validate the links.
-            Map<String, String> zoneIdLinks = backwardIn.getDirectLinks();
+            Map<String, String> zoneIdLinks = backward.getLinks();
             zoneIdLinks.forEach(
                     (k, v) -> {
                         if (invalidTimeZoneId(k)) {
@@ -209,7 +204,7 @@
                             errors.addError("Bad 'to' link: " + k + "->" + v);
                         }
                     });
-            return zoneIdLinks;
+            return backward;
         } catch (ParseException | IOException e) {
             errors.addError("Unable to parse " + backwardFile, e);
             return null;
@@ -232,10 +227,24 @@
         }
     }
 
-    private static TzLookupFile.TimeZones createOutputTimeZones(String inputIanaVersion,
+    private static void writeOutputData(TzLookupFile.TimeZones timeZonesOut,
+            String tzLookupXmlFileName, Errors errors) throws HaltExecutionException {
+        errors.pushScope("write " + tzLookupXmlFileName);
+        try {
+            // Write out the file used on device.
+            logInfo("Writing " + tzLookupXmlFileName);
+
+            TzLookupFile.write(timeZonesOut, tzLookupXmlFileName);
+        } catch (IOException | XMLStreamException e) {
+            errors.addFatalAndHalt("Unable to write " + tzLookupXmlFileName, e);
+        } finally {
+            errors.popScope();
+        }
+    }
+
+    private static TzLookupFile.TimeZones createOutputData(String inputIanaVersion,
             Map<String, List<String>> zoneTabMapping, List<CountryZonesFile.Country> countriesIn,
-            Map<String, String> zoneIdLinks, Errors errors)
-            throws HaltExecutionException {
+            BackwardFile backwardIn, Errors errors) throws HaltExecutionException {
 
         // Start constructing the output structure.
         TzLookupFile.TimeZones timeZonesOut = new TzLookupFile.TimeZones(inputIanaVersion);
@@ -262,7 +271,7 @@
 
             TzLookupFile.Country countryOut = processCountry(
                     offsetSampleTimeMillis, everUseUtcStartTimeMillis, countryIn,
-                    zoneTabCountryTimeZoneIds, zoneIdLinks, errors);
+                    zoneTabCountryTimeZoneIds, backwardIn, errors);
             if (countryOut == null) {
                 // Continue processing countries if there are only errors.
                 continue;
@@ -275,7 +284,7 @@
 
     private static TzLookupFile.Country processCountry(long offsetSampleTimeMillis,
             long everUseUtcStartTimeMillis, CountryZonesFile.Country countryIn,
-            List<String> zoneTabCountryTimeZoneIds, Map<String, String> zoneIdLinks,
+            List<String> zoneTabCountryTimeZoneIds, BackwardFile backwardIn,
             Errors errors) {
         String isoCode = countryIn.getIsoCode();
         errors.pushScope("country=" + isoCode);
@@ -349,7 +358,7 @@
                 // the countryzones.txt needs to be updated with new IDs (or an alias can be added
                 // if there's some reason to keep using the old ID).
                 validateCountryZonesTzIdsAgainstIana(isoCode, zoneTabCountryTimeZoneIds,
-                        timeZonesIn, zoneIdLinks, errors);
+                        timeZonesIn, backwardIn.getDirectLinks(), errors);
                 if (errors.hasError()) {
                     // No point in continuing.
                     return null;
@@ -365,7 +374,7 @@
                 return null;
             }
 
-            // Add the country to the output structure.
+            // Create the tzlookup country structure.
             TzLookupFile.Country countryOut = new TzLookupFile.Country(
                     isoCode, defaultTimeZoneId, defaultTimeZoneBoost, everUsesUtc);
 
@@ -375,10 +384,18 @@
                         "id=" + timeZoneIn.getId() + ", offset=" + timeZoneIn.getUtcOffset()
                                 + ", shownInPicker=" + timeZoneIn.getShownInPicker());
                 try {
+                    String timeZoneInId = timeZoneIn.getId();
+
+                    // The notUsedAfterInstant can be null if the zone is used until at least
+                    // ZONE_CALCS_END_INSTANT. That's what we want.
+                    Instant notUsedAfterInstant =
+                            countryZoneUsage.getNotUsedAfterInstant(timeZoneInId);
+                    String notUsedReplacementId =
+                            countryZoneUsage.getNotUsedReplacementId(timeZoneInId);
+
                     // Validate the offset information in countryIn.
                     validateNonDstOffset(offsetSampleTimeMillis, countryIn, timeZoneIn, errors);
 
-                    String timeZoneInId = timeZoneIn.getId();
                     boolean shownInPicker = timeZoneIn.getShownInPicker();
                     if (!countryZoneUsage.hasEntry(timeZoneInId)) {
                         // This implies a programming error.
@@ -386,15 +403,15 @@
                         return null;
                     }
 
-                    // The notUsedAfterInstant can be null if the zone is used until at least
-                    // ZONE_CALCS_END_INSTANT. That's what we want.
-                    Instant notUsedAfterInstant =
-                            countryZoneUsage.getNotUsedAfterInstant(timeZoneInId);
+                    // Find all the alternative zone IDs for the chosen zone ID.
+                    List<String> alternativeZoneIds =
+                            new ArrayList<>(backwardIn.getAllAlternativeIds(timeZoneInId));
+                    Collections.sort(alternativeZoneIds);
 
                     // Add the id mapping and associated metadata.
-                    TzLookupFile.TimeZoneMapping timeZoneIdOut =
-                            new TzLookupFile.TimeZoneMapping(
-                                    timeZoneInId, shownInPicker, notUsedAfterInstant);
+                    TzLookupFile.TimeZoneMapping timeZoneIdOut = new TzLookupFile.TimeZoneMapping(
+                            timeZoneInId, shownInPicker, notUsedAfterInstant, notUsedReplacementId,
+                            alternativeZoneIds);
                     countryOut.addTimeZoneIdentifier(timeZoneIdOut);
                 } finally {
                     errors.popScope();
diff --git a/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneTree.java b/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneTree.java
index 23c2b0a..c294cc8 100644
--- a/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneTree.java
+++ b/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneTree.java
@@ -510,27 +510,44 @@
                 }
 
                 Instant endInstant = node.getEndInstant();
+                String replacementTimeZoneId = findReplacementTimeZoneId(node);
                 if (!node.isLeaf()) {
                     ZoneInfo primaryZone = node.getPrimaryZoneInfo();
-                    addZoneEntryIfMissing(endInstant, primaryZone);
+                    addZoneEntryIfMissing(endInstant, replacementTimeZoneId, primaryZone);
                 } else {
                     // In some rare cases (e.g. Canada: Swift_Current and Creston) zones have agreed
                     // completely since 1970 so some leaves may have multiple zones. So, attempt to
                     // add all zones for leaves, not just the primary.
                     for (ZoneInfo zoneInfo : node.getZoneInfos()) {
-                        addZoneEntryIfMissing(endInstant, zoneInfo);
+                        addZoneEntryIfMissing(endInstant, replacementTimeZoneId, zoneInfo);
                     }
                 }
             }
 
-            private void addZoneEntryIfMissing(Instant endInstant, ZoneInfo zoneInfo) {
+            /**
+             * Find the time zone that the node ultimately "merges" into, i.e. the one it is
+             * effectively replaced by.
+             */
+            private String findReplacementTimeZoneId(ZoneNode node) {
+                if (node.getParent().isRoot()) {
+                    return null;
+                }
+                do {
+                    node = node.getParent();
+                } while (!node.getParent().isRoot());
+                return node.primaryZoneInfo.getZoneId();
+            }
+
+            private void addZoneEntryIfMissing(
+                    Instant endInstant, String replacementTimeZoneId, ZoneInfo zoneInfo) {
                 String zoneId = zoneInfo.getZoneId();
                 if (!notAfterCutOff.isAfter(endInstant)) {
                     // notAfterCutOff <= endInstant
                     endInstant = null;
+                    replacementTimeZoneId = null;
                 }
                 if (!zoneUsage.hasEntry(zoneId)) {
-                    zoneUsage.addEntry(zoneId, endInstant);
+                    zoneUsage.addEntry(zoneId, endInstant, replacementTimeZoneId);
                 }
             }
 
diff --git a/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneUsage.java b/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneUsage.java
index 813d741..334c66b 100644
--- a/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneUsage.java
+++ b/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneUsage.java
@@ -18,6 +18,7 @@
 import java.time.Instant;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * A record for a country of when zones stopped being (effectively) used.
@@ -34,12 +35,12 @@
         return isoCode;
     }
 
-    void addEntry(String zoneId, Instant notUsedAfterInstant) {
+    void addEntry(String zoneId, Instant notUsedAfterInstant, String notUsedReplacementId) {
         if (zoneIdEntryMap.containsKey(zoneId)) {
             throw new IllegalArgumentException(
                     "Entry exists for " + zoneId + " for isoCode=" + isoCode);
         }
-        zoneIdEntryMap.put(zoneId, new Entry(zoneId, notUsedAfterInstant));
+        zoneIdEntryMap.put(zoneId, new Entry(zoneId, notUsedAfterInstant, notUsedReplacementId));
     }
 
     public boolean hasEntry(String zoneId) {
@@ -50,18 +51,34 @@
         Entry entry = zoneIdEntryMap.get(zoneId);
         if (entry == null) {
             throw new IllegalArgumentException(
-                    "No entry for " + zoneId+ " for isoCode=" + isoCode);
+                    "No entry for " + zoneId + " for isoCode=" + isoCode);
         }
         return entry.notUsedAfter;
     }
 
+    public String getNotUsedReplacementId(String zoneId) {
+        Entry entry = zoneIdEntryMap.get(zoneId);
+        if (entry == null) {
+            throw new IllegalArgumentException(
+                    "No entry for " + zoneId + " for isoCode=" + isoCode);
+        }
+        return entry.notUsedReplacementId;
+    }
+
     private static class Entry {
         final String zoneId;
         final Instant notUsedAfter;
+        final String notUsedReplacementId;
 
-        Entry(String zoneId, Instant notUsedAfter) {
-            this.zoneId = zoneId;
+        Entry(String zoneId, Instant notUsedAfter, String notUsedReplacementId) {
+            this.zoneId = Objects.requireNonNull(zoneId);
+
+            if ((notUsedAfter == null) != (notUsedReplacementId == null)) {
+                throw new IllegalArgumentException(
+                        "Both notUsedAfter and notUsedReplacement, or neither required");
+            }
             this.notUsedAfter = notUsedAfter;
+            this.notUsedReplacementId = notUsedReplacementId;
         }
     }
 }
diff --git a/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/BackwardFileTest.java b/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/BackwardFileTest.java
index c575a8e..bed94e5 100644
--- a/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/BackwardFileTest.java
+++ b/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/BackwardFileTest.java
@@ -30,8 +30,11 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.text.ParseException;
+import java.util.Arrays;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 
 public class BackwardFileTest {
 
@@ -78,19 +81,34 @@
                 "Link\tAfrica/Nairobi\t\tAfrica/Asmera",
                 "# This is a comment",
                 "Link\tAfrica/Abidjan\t\tAfrica/Timbuktu",
-                "# This is a comment"
+                "# This is a comment",
+                "Link\tAfrica/Timbuktu\t\tAfrica/Timbuktu2"
         );
         BackwardFile backward = BackwardFile.parse(file);
         Map<String, String> expectedLinks = new HashMap<>();
         expectedLinks.put("America/Godthab", "America/Nuuk");
         expectedLinks.put("Africa/Asmera", "Africa/Nairobi");
         expectedLinks.put("Africa/Timbuktu", "Africa/Abidjan");
+        expectedLinks.put("Africa/Timbuktu2", "Africa/Timbuktu");
+        assertEquals(expectedLinks, backward.getLinks());
 
-        assertEquals(expectedLinks, backward.getDirectLinks());
+        Map<String, String> expectedDirectLinks = new HashMap<>();
+        expectedDirectLinks.put("America/Godthab", "America/Nuuk");
+        expectedDirectLinks.put("Africa/Asmera", "Africa/Nairobi");
+        expectedDirectLinks.put("Africa/Timbuktu", "Africa/Abidjan");
+        expectedDirectLinks.put("Africa/Timbuktu2", "Africa/Abidjan");
+        assertEquals(expectedDirectLinks, backward.getDirectLinks());
+
+        assertEquals(set("Africa/Abidjan", "Africa/Timbuktu2"),
+                backward.getAllAlternativeIds("Africa/Timbuktu"));
+        assertEquals(set("Africa/Abidjan", "Africa/Timbuktu"),
+                backward.getAllAlternativeIds("Africa/Timbuktu2"));
+        assertEquals(set("Africa/Timbuktu", "Africa/Timbuktu2"),
+                backward.getAllAlternativeIds("Africa/Abidjan"));
     }
 
     @Test(expected = IllegalStateException.class)
-    public void getLinksWithLoop() throws Exception {
+    public void getDirectLinksWithLoop() throws Exception {
         String file = createFile(
                 "Link\tAmerica/New_York\t\tAmerica/Los_Angeles",
                 "Link\tAmerica/Los_Angeles\t\tAmerica/Phoenix",
@@ -119,4 +137,8 @@
     private String createFile(String... lines) throws IOException {
         return TestUtils.createFile(tempDir, lines);
     }
+
+    private static <T> Set<T> set(T... values) {
+        return new HashSet<>(Arrays.asList(values));
+    }
 }
diff --git a/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/TzLookupGeneratorTest.java b/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/TzLookupGeneratorTest.java
index d8677cc..e5ae559 100644
--- a/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/TzLookupGeneratorTest.java
+++ b/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/TzLookupGeneratorTest.java
@@ -438,16 +438,15 @@
                 new ZoneTabFile.CountryEntry("GL", "America/Scoresbysund"),
                 new ZoneTabFile.CountryEntry("GL", "America/Thule")
         );
-        Map<String, String> links = new HashMap<>();
-        links.put("America/Godthab", "America/Nuuk");
+        Map<String, String> backwardLinks = new HashMap<>();
+        backwardLinks.put("America/Godthab", "America/Nuuk");
 
-        String tzLookupXml = generateTzLookupXml(country, zoneTabWithNewIds, links);
+        String tzLookupXml = generateTzLookupXml(country, zoneTabWithNewIds, backwardLinks);
 
-        String expectedOutput =
-                "<id>America/Danmarkshavn</id>\n"
-                        + "<id>America/Scoresbysund</id>\n"
-                        + "<id>America/Godthab</id>\n"
-                        + "<id>America/Thule</id>\n";
+        String expectedOutput = "<id>America/Danmarkshavn</id>\n"
+                + "<id>America/Scoresbysund</id>\n"
+                + "<id alts=\"America/Nuuk\">America/Godthab</id>\n"
+                + "<id>America/Thule</id>\n";
         String[] expectedLines = expectedOutput.split("\\n");
         for (String expectedLine : expectedLines) {
             assertContains(tzLookupXml, expectedLine);
@@ -562,32 +561,32 @@
                 createValidBackwardLinks());
         String expectedOutput =
                 "<id>America/New_York</id>\n"
-                + "<id notafter=\"167814000000\">America/Detroit</id>\n"
-                + "<id notafter=\"152089200000\">America/Kentucky/Louisville</id>\n"
-                + "<id notafter=\"972802800000\">America/Kentucky/Monticello</id>\n"
-                + "<id notafter=\"1130652000000\">America/Indiana/Indianapolis</id>\n"
-                + "<id notafter=\"1194159600000\">America/Indiana/Vincennes</id>\n"
-                + "<id notafter=\"1173600000000\">America/Indiana/Winamac</id>\n"
-                + "<id notafter=\"183535200000\">America/Indiana/Marengo</id>\n"
-                + "<id notafter=\"247042800000\">America/Indiana/Petersburg</id>\n"
-                + "<id notafter=\"89186400000\">America/Indiana/Vevay</id>\n"
+                + "<id notafter=\"167814000000\" repl=\"America/New_York\">America/Detroit</id>\n"
+                + "<id notafter=\"152089200000\" repl=\"America/New_York\">America/Kentucky/Louisville</id>\n"
+                + "<id notafter=\"972802800000\" repl=\"America/New_York\">America/Kentucky/Monticello</id>\n"
+                + "<id notafter=\"1130652000000\" repl=\"America/New_York\">America/Indiana/Indianapolis</id>\n"
+                + "<id notafter=\"1194159600000\" repl=\"America/New_York\">America/Indiana/Vincennes</id>\n"
+                + "<id notafter=\"1173600000000\" repl=\"America/New_York\">America/Indiana/Winamac</id>\n"
+                + "<id notafter=\"183535200000\" repl=\"America/New_York\">America/Indiana/Marengo</id>\n"
+                + "<id notafter=\"247042800000\" repl=\"America/New_York\">America/Indiana/Petersburg</id>\n"
+                + "<id notafter=\"89186400000\" repl=\"America/New_York\">America/Indiana/Vevay</id>\n"
                 + "<id>America/Chicago</id>\n"
-                + "<id notafter=\"688546800000\">America/Indiana/Knox</id>\n"
-                + "<id notafter=\"104918400000\">America/Menominee</id>\n"
-                + "<id notafter=\"720000000000\">America/North_Dakota/Center</id>\n"
-                + "<id notafter=\"1067155200000\">America/North_Dakota/New_Salem</id>\n"
-                + "<id notafter=\"1143964800000\">America/Indiana/Tell_City</id>\n"
-                + "<id notafter=\"1289116800000\">America/North_Dakota/Beulah</id>\n"
+                + "<id notafter=\"688546800000\" repl=\"America/Chicago\">America/Indiana/Knox</id>\n"
+                + "<id notafter=\"104918400000\" repl=\"America/Chicago\">America/Menominee</id>\n"
+                + "<id notafter=\"720000000000\" repl=\"America/Chicago\">America/North_Dakota/Center</id>\n"
+                + "<id notafter=\"1067155200000\" repl=\"America/Chicago\">America/North_Dakota/New_Salem</id>\n"
+                + "<id notafter=\"1143964800000\" repl=\"America/Chicago\">America/Indiana/Tell_City</id>\n"
+                + "<id notafter=\"1289116800000\" repl=\"America/Chicago\">America/North_Dakota/Beulah</id>\n"
                 + "<id>America/Denver</id>\n"
-                + "<id notafter=\"129114000000\">America/Boise</id>\n"
                 + "<id>America/Phoenix</id>\n"
+                + "<id notafter=\"129114000000\" repl=\"America/Phoenix\">America/Boise</id>\n"
                 + "<id>America/Los_Angeles</id>\n"
                 + "<id>America/Anchorage</id>\n"
-                + "<id notafter=\"436359600000\">America/Juneau</id>\n"
-                + "<id notafter=\"436356000000\">America/Yakutat</id>\n"
-                + "<id notafter=\"436363200000\">America/Nome</id>\n"
-                + "<id notafter=\"1547978400000\">America/Metlakatla</id>\n"
-                + "<id notafter=\"341402400000\">America/Sitka</id>\n"
+                + "<id notafter=\"436359600000\" repl=\"America/Anchorage\">America/Juneau</id>\n"
+                + "<id notafter=\"436356000000\" repl=\"America/Anchorage\">America/Yakutat</id>\n"
+                + "<id notafter=\"436363200000\" repl=\"America/Anchorage\">America/Nome</id>\n"
+                + "<id notafter=\"1547978400000\" repl=\"America/Anchorage\">America/Metlakatla</id>\n"
+                + "<id notafter=\"341402400000\" repl=\"America/Anchorage\">America/Sitka</id>\n"
                 + "<id>Pacific/Honolulu</id>\n"
                 + "<id>America/Adak</id>\n";
         String[] expectedLines = expectedOutput.split("\\n");
diff --git a/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneUsageTest.java b/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneUsageTest.java
index b1a13b9..eae3ec1 100644
--- a/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneUsageTest.java
+++ b/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneUsageTest.java
@@ -22,13 +22,14 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 public class CountryZoneUsageTest {
 
     @Test
-    public void testGetIsCode() {
+    public void testGetIsoCode() {
         CountryZoneUsage countryZoneUsage = new CountryZoneUsage("us");
         assertEquals("us", countryZoneUsage.getIsoCode());
     }
@@ -48,15 +49,23 @@
     @Test
     public void testWithEntry() {
         CountryZoneUsage countryZoneUsage = new CountryZoneUsage("us");
-        String usZoneId = "America/Boise";
+
+        String usZoneId1 = "America/Boise";
+        countryZoneUsage.addEntry(usZoneId1, null /* notUsedAfterInstant */, null /* altTzId */);
+        assertTrue(countryZoneUsage.hasEntry(usZoneId1));
+        assertNull(countryZoneUsage.getNotUsedAfterInstant(usZoneId1));
+        assertNull(null, countryZoneUsage.getNotUsedReplacementId(usZoneId1));
+
+        String usZoneId2 = "America/Los_Angeles";
         Instant instant = Instant.ofEpochSecond(1234);
-        countryZoneUsage.addEntry(usZoneId, instant);
+        countryZoneUsage.addEntry(usZoneId2, instant, usZoneId1 /* notUsedReplacementId */);
+        assertTrue(countryZoneUsage.hasEntry(usZoneId2));
+        assertEquals(instant, countryZoneUsage.getNotUsedAfterInstant(usZoneId2));
+        assertEquals(usZoneId1, countryZoneUsage.getNotUsedReplacementId(usZoneId2));
 
-        assertTrue(countryZoneUsage.hasEntry(usZoneId));
-        assertEquals(instant, countryZoneUsage.getNotUsedAfterInstant(usZoneId));
-
+        // Duplicate IDs are not allowed.
         try {
-            countryZoneUsage.addEntry(usZoneId, instant);
+            countryZoneUsage.addEntry(usZoneId1, instant, "" /* notUsedReplacementId */);
             fail();
         } catch (IllegalArgumentException expected) {
         }
diff --git a/output_data/android/tzlookup.xml b/output_data/android/tzlookup.xml
index 5240499..c703fad 100644
--- a/output_data/android/tzlookup.xml
+++ b/output_data/android/tzlookup.xml
@@ -41,38 +41,38 @@
    <id>Antarctica/Palmer</id>
   </country>
   <country code="ar" default="America/Argentina/Buenos_Aires" defaultBoost="y" everutc="n">
-   <id>America/Argentina/Buenos_Aires</id>
-   <id notafter="687931200000">America/Argentina/Cordoba</id>
-   <id notafter="1237082400000">America/Argentina/Mendoza</id>
-   <id notafter="1087099200000">America/Argentina/Tucuman</id>
-   <id notafter="1096171200000">America/Argentina/Salta</id>
-   <id notafter="1090728000000">America/Argentina/San_Juan</id>
-   <id notafter="687931200000">America/Argentina/Jujuy</id>
-   <id notafter="1087704000000">America/Argentina/Catamarca</id>
-   <id notafter="687931200000">America/Argentina/La_Rioja</id>
-   <id notafter="673588800000">America/Argentina/Rio_Gallegos</id>
-   <id notafter="1087704000000">America/Argentina/Ushuaia</id>
+   <id alts="America/Buenos_Aires">America/Argentina/Buenos_Aires</id>
+   <id notafter="687931200000" repl="America/Argentina/Buenos_Aires" alts="America/Cordoba,America/Rosario">America/Argentina/Cordoba</id>
+   <id notafter="1237082400000" repl="America/Argentina/Buenos_Aires" alts="America/Mendoza">America/Argentina/Mendoza</id>
+   <id notafter="1087099200000" repl="America/Argentina/Buenos_Aires">America/Argentina/Tucuman</id>
+   <id notafter="1096171200000" repl="America/Argentina/Buenos_Aires">America/Argentina/Salta</id>
+   <id notafter="1090728000000" repl="America/Argentina/Buenos_Aires">America/Argentina/San_Juan</id>
+   <id notafter="687931200000" repl="America/Argentina/Buenos_Aires" alts="America/Jujuy">America/Argentina/Jujuy</id>
+   <id notafter="1087704000000" repl="America/Argentina/Buenos_Aires" alts="America/Argentina/ComodRivadavia,America/Catamarca">America/Argentina/Catamarca</id>
+   <id notafter="687931200000" repl="America/Argentina/Buenos_Aires">America/Argentina/La_Rioja</id>
+   <id notafter="673588800000" repl="America/Argentina/Buenos_Aires">America/Argentina/Rio_Gallegos</id>
+   <id notafter="1087704000000" repl="America/Argentina/Buenos_Aires">America/Argentina/Ushuaia</id>
    <id>America/Argentina/San_Luis</id>
   </country>
   <country code="as" default="Pacific/Pago_Pago" everutc="n">
-   <id>Pacific/Pago_Pago</id>
+   <id alts="Pacific/Samoa,US/Samoa">Pacific/Pago_Pago</id>
   </country>
   <country code="at" default="Europe/Vienna" everutc="n">
    <id>Europe/Vienna</id>
   </country>
   <country code="au" default="Australia/Sydney" everutc="n">
-   <id>Australia/Sydney</id>
-   <id notafter="796147200000">Australia/Melbourne</id>
-   <id notafter="1193500800000">Australia/Hobart</id>
-   <id notafter="37728000000">Australia/Currie</id>
-   <id>Australia/Brisbane</id>
-   <id notafter="762883200000">Australia/Lindeman</id>
+   <id alts="Australia/ACT,Australia/Canberra,Australia/NSW">Australia/Sydney</id>
+   <id notafter="796147200000" repl="Australia/Sydney" alts="Australia/Victoria">Australia/Melbourne</id>
+   <id notafter="1193500800000" repl="Australia/Sydney" alts="Australia/Tasmania">Australia/Hobart</id>
+   <id notafter="37728000000" repl="Australia/Sydney">Australia/Currie</id>
+   <id alts="Australia/Queensland">Australia/Brisbane</id>
+   <id notafter="762883200000" repl="Australia/Brisbane">Australia/Lindeman</id>
    <id>Antarctica/Macquarie</id>
-   <id>Australia/Lord_Howe</id>
-   <id>Australia/Adelaide</id>
-   <id notafter="796149000000">Australia/Broken_Hill</id>
-   <id>Australia/Darwin</id>
-   <id>Australia/Perth</id>
+   <id alts="Australia/LHI">Australia/Lord_Howe</id>
+   <id alts="Australia/South">Australia/Adelaide</id>
+   <id notafter="796149000000" repl="Australia/Adelaide" alts="Australia/Yancowinna">Australia/Broken_Hill</id>
+   <id alts="Australia/North">Australia/Darwin</id>
+   <id alts="Australia/West">Australia/Perth</id>
    <id>Australia/Eucla</id>
   </country>
   <country code="aw" default="America/Aruba" everutc="n">
@@ -91,7 +91,7 @@
    <id>America/Barbados</id>
   </country>
   <country code="bd" default="Asia/Dhaka" everutc="n">
-   <id>Asia/Dhaka</id>
+   <id alts="Asia/Dacca">Asia/Dhaka</id>
   </country>
   <country code="be" default="Europe/Brussels" everutc="n">
    <id>Europe/Brussels</id>
@@ -127,28 +127,28 @@
    <id>America/Kralendijk</id>
   </country>
   <country code="br" default="America/Noronha" everutc="n">
-   <id>America/Noronha</id>
-   <id>America/Sao_Paulo</id>
-   <id notafter="1550368800000">America/Bahia</id>
-   <id notafter="1214280000000">America/Santarem</id>
-   <id notafter="1330221600000">America/Recife</id>
-   <id notafter="972180000000">America/Fortaleza</id>
-   <id notafter="1013911200000">America/Belem</id>
-   <id notafter="824004000000">America/Maceio</id>
-   <id notafter="1361066400000">America/Araguaina</id>
-   <id>America/Manaus</id>
-   <id notafter="1550372400000">America/Cuiaba</id>
-   <id notafter="1076814000000">America/Campo_Grande</id>
-   <id notafter="761713200000">America/Porto_Velho</id>
-   <id notafter="971578800000">America/Boa_Vista</id>
-   <id>America/Rio_Branco</id>
-   <id notafter="761716800000">America/Eirunepe</id>
+   <id alts="Brazil/DeNoronha">America/Noronha</id>
+   <id alts="Brazil/East">America/Sao_Paulo</id>
+   <id notafter="1550368800000" repl="America/Sao_Paulo">America/Bahia</id>
+   <id notafter="1214280000000" repl="America/Sao_Paulo">America/Santarem</id>
+   <id notafter="1330221600000" repl="America/Sao_Paulo">America/Recife</id>
+   <id notafter="972180000000" repl="America/Sao_Paulo">America/Fortaleza</id>
+   <id notafter="1013911200000" repl="America/Sao_Paulo">America/Belem</id>
+   <id notafter="824004000000" repl="America/Sao_Paulo">America/Maceio</id>
+   <id notafter="1361066400000" repl="America/Sao_Paulo">America/Araguaina</id>
+   <id alts="Brazil/West">America/Manaus</id>
+   <id notafter="1550372400000" repl="America/Manaus">America/Cuiaba</id>
+   <id notafter="1076814000000" repl="America/Manaus">America/Campo_Grande</id>
+   <id notafter="761713200000" repl="America/Manaus">America/Porto_Velho</id>
+   <id notafter="971578800000" repl="America/Manaus">America/Boa_Vista</id>
+   <id alts="America/Porto_Acre,Brazil/Acre">America/Rio_Branco</id>
+   <id notafter="761716800000" repl="America/Rio_Branco">America/Eirunepe</id>
   </country>
   <country code="bs" default="America/Nassau" everutc="n">
    <id>America/Nassau</id>
   </country>
   <country code="bt" default="Asia/Thimphu" everutc="n">
-   <id>Asia/Thimphu</id>
+   <id alts="Asia/Thimbu">Asia/Thimphu</id>
   </country>
   <country code="bw" default="Africa/Gaborone" everutc="n">
    <id>Africa/Gaborone</id>
@@ -160,34 +160,34 @@
    <id>America/Belize</id>
   </country>
   <country code="ca" default="America/Toronto" everutc="n">
-   <id>America/Toronto</id>
-   <id>America/Vancouver</id>
-   <id>America/Edmonton</id>
-   <id>America/Winnipeg</id>
-   <id>America/Halifax</id>
-   <id>America/St_Johns</id>
-   <id notafter="1162098000000">America/Moncton</id>
-   <id notafter="57733200000">America/Glace_Bay</id>
-   <id notafter="1299996000000">America/Goose_Bay</id>
+   <id alts="America/Montreal,Canada/Eastern">America/Toronto</id>
+   <id alts="Canada/Pacific">America/Vancouver</id>
+   <id alts="Canada/Mountain">America/Edmonton</id>
+   <id alts="Canada/Central">America/Winnipeg</id>
+   <id alts="Canada/Atlantic">America/Halifax</id>
+   <id alts="Canada/Newfoundland">America/St_Johns</id>
+   <id notafter="1162098000000" repl="America/Halifax">America/Moncton</id>
+   <id notafter="57733200000" repl="America/Halifax">America/Glace_Bay</id>
+   <id notafter="1299996000000" repl="America/Halifax">America/Goose_Bay</id>
    <id>America/Blanc-Sablon</id>
-   <id notafter="120636000000">America/Thunder_Bay</id>
-   <id notafter="972802800000">America/Iqaluit</id>
-   <id notafter="89186400000">America/Nipigon</id>
-   <id notafter="796806000000">America/Pangnirtung</id>
-   <id>America/Atikokan</id>
-   <id>America/Regina</id>
-   <id notafter="73472400000">America/Swift_Current</id>
-   <id notafter="1130659200000">America/Rankin_Inlet</id>
-   <id notafter="986112000000">America/Rainy_River</id>
-   <id notafter="1173600000000">America/Resolute</id>
-   <id notafter="309945600000">America/Yellowknife</id>
-   <id notafter="1583661600000">America/Dawson_Creek</id>
-   <id notafter="84013200000">America/Creston</id>
-   <id notafter="1425808800000">America/Fort_Nelson</id>
-   <id notafter="294228000000">America/Inuvik</id>
-   <id notafter="986115600000">America/Cambridge_Bay</id>
-   <id notafter="120646800000">America/Dawson</id>
-   <id>America/Whitehorse</id>
+   <id notafter="120636000000" repl="America/Toronto">America/Thunder_Bay</id>
+   <id notafter="972802800000" repl="America/Toronto">America/Iqaluit</id>
+   <id notafter="89186400000" repl="America/Toronto">America/Nipigon</id>
+   <id notafter="796806000000" repl="America/Toronto">America/Pangnirtung</id>
+   <id alts="America/Coral_Harbour">America/Atikokan</id>
+   <id alts="Canada/Saskatchewan">America/Regina</id>
+   <id notafter="73472400000" repl="America/Winnipeg">America/Swift_Current</id>
+   <id notafter="1130659200000" repl="America/Winnipeg">America/Rankin_Inlet</id>
+   <id notafter="986112000000" repl="America/Winnipeg">America/Rainy_River</id>
+   <id notafter="1173600000000" repl="America/Winnipeg">America/Resolute</id>
+   <id notafter="309945600000" repl="America/Edmonton">America/Yellowknife</id>
+   <id notafter="1583661600000" repl="America/Edmonton">America/Dawson_Creek</id>
+   <id notafter="84013200000" repl="America/Edmonton">America/Creston</id>
+   <id notafter="1425808800000" repl="America/Edmonton">America/Fort_Nelson</id>
+   <id notafter="294228000000" repl="America/Edmonton">America/Inuvik</id>
+   <id notafter="986115600000" repl="America/Edmonton">America/Cambridge_Bay</id>
+   <id notafter="120646800000" repl="America/Edmonton">America/Dawson</id>
+   <id alts="Canada/Yukon">America/Whitehorse</id>
   </country>
   <country code="cc" default="Indian/Cocos" everutc="n">
    <id>Indian/Cocos</id>
@@ -206,22 +206,22 @@
    <id>Europe/Zurich</id>
   </country>
   <country code="ci" default="Africa/Abidjan" everutc="y">
-   <id>Africa/Abidjan</id>
+   <id alts="Africa/Timbuktu">Africa/Abidjan</id>
   </country>
   <country code="ck" default="Pacific/Rarotonga" everutc="n">
    <id>Pacific/Rarotonga</id>
   </country>
   <country code="cl" default="America/Santiago" everutc="n">
    <id>America/Punta_Arenas</id>
-   <id>America/Santiago</id>
-   <id>Pacific/Easter</id>
+   <id alts="Chile/Continental">America/Santiago</id>
+   <id alts="Chile/EasterIsland">Pacific/Easter</id>
   </country>
   <country code="cm" default="Africa/Douala" everutc="n">
    <id>Africa/Douala</id>
   </country>
   <country code="cn" default="Asia/Shanghai" defaultBoost="y" everutc="n">
-   <id>Asia/Shanghai</id>
-   <id>Asia/Urumqi</id>
+   <id alts="Asia/Chongqing,Asia/Chungking,Asia/Harbin,PRC">Asia/Shanghai</id>
+   <id alts="Asia/Kashgar">Asia/Urumqi</id>
   </country>
   <country code="co" default="America/Bogota" everutc="n">
    <id>America/Bogota</id>
@@ -230,7 +230,7 @@
    <id>America/Costa_Rica</id>
   </country>
   <country code="cu" default="America/Havana" everutc="n">
-   <id>America/Havana</id>
+   <id alts="Cuba">America/Havana</id>
   </country>
   <country code="cv" default="Atlantic/Cape_Verde" everutc="n">
    <id>Atlantic/Cape_Verde</id>
@@ -250,7 +250,7 @@
   </country>
   <country code="de" default="Europe/Berlin" everutc="n">
    <id>Europe/Berlin</id>
-   <id notafter="338950800000">Europe/Busingen</id>
+   <id notafter="338950800000" repl="Europe/Berlin">Europe/Busingen</id>
   </country>
   <country code="dj" default="Africa/Djibouti" everutc="n">
    <id>Africa/Djibouti</id>
@@ -275,7 +275,7 @@
    <id>Europe/Tallinn</id>
   </country>
   <country code="eg" default="Africa/Cairo" everutc="n">
-   <id>Africa/Cairo</id>
+   <id alts="Egypt">Africa/Cairo</id>
   </country>
   <country code="eh" default="Africa/El_Aaiun" everutc="y">
    <id>Africa/El_Aaiun</id>
@@ -285,7 +285,7 @@
   </country>
   <country code="es" default="Europe/Madrid" everutc="y">
    <id>Europe/Madrid</id>
-   <id notafter="496803600000">Africa/Ceuta</id>
+   <id notafter="496803600000" repl="Europe/Madrid">Africa/Ceuta</id>
    <id>Atlantic/Canary</id>
   </country>
   <country code="et" default="Africa/Addis_Ababa" everutc="n">
@@ -301,12 +301,12 @@
    <id>Atlantic/Stanley</id>
   </country>
   <country code="fm" default="Pacific/Pohnpei" everutc="n">
-   <id>Pacific/Pohnpei</id>
+   <id alts="Pacific/Ponape">Pacific/Pohnpei</id>
    <id>Pacific/Kosrae</id>
-   <id>Pacific/Chuuk</id>
+   <id alts="Pacific/Truk,Pacific/Yap">Pacific/Chuuk</id>
   </country>
   <country code="fo" default="Atlantic/Faroe" everutc="y">
-   <id>Atlantic/Faroe</id>
+   <id alts="Atlantic/Faeroe">Atlantic/Faroe</id>
   </country>
   <country code="fr" default="Europe/Paris" everutc="n">
    <id>Europe/Paris</id>
@@ -315,7 +315,7 @@
    <id>Africa/Libreville</id>
   </country>
   <country code="gb" default="Europe/London" everutc="y">
-   <id>Europe/London</id>
+   <id alts="Europe/Belfast,GB,GB-Eire">Europe/London</id>
   </country>
   <country code="gd" default="America/Grenada" everutc="n">
    <id>America/Grenada</id>
@@ -338,7 +338,7 @@
   <country code="gl" default="America/Nuuk" everutc="y">
    <id>America/Danmarkshavn</id>
    <id>America/Scoresbysund</id>
-   <id>America/Nuuk</id>
+   <id alts="America/Godthab">America/Nuuk</id>
    <id>America/Thule</id>
   </country>
   <country code="gm" default="Africa/Banjul" everutc="y">
@@ -372,7 +372,7 @@
    <id>America/Guyana</id>
   </country>
   <country code="hk" default="Asia/Hong_Kong" everutc="n">
-   <id>Asia/Hong_Kong</id>
+   <id alts="Hongkong">Asia/Hong_Kong</id>
   </country>
   <country code="hn" default="America/Tegucigalpa" everutc="n">
    <id>America/Tegucigalpa</id>
@@ -388,21 +388,21 @@
   </country>
   <country code="id" default="Asia/Jakarta" everutc="n">
    <id>Asia/Jayapura</id>
-   <id>Asia/Makassar</id>
+   <id alts="Asia/Ujung_Pandang">Asia/Makassar</id>
    <id>Asia/Jakarta</id>
-   <id notafter="567964800000">Asia/Pontianak</id>
+   <id notafter="567964800000" repl="Asia/Jakarta">Asia/Pontianak</id>
   </country>
   <country code="ie" default="Europe/Dublin" everutc="y">
-   <id>Europe/Dublin</id>
+   <id alts="Eire">Europe/Dublin</id>
   </country>
   <country code="il" default="Asia/Jerusalem" everutc="n">
-   <id>Asia/Jerusalem</id>
+   <id alts="Asia/Tel_Aviv,Israel">Asia/Jerusalem</id>
   </country>
   <country code="im" default="Europe/Isle_of_Man" everutc="y">
    <id>Europe/Isle_of_Man</id>
   </country>
   <country code="in" default="Asia/Kolkata" everutc="n">
-   <id>Asia/Kolkata</id>
+   <id alts="Asia/Calcutta">Asia/Kolkata</id>
   </country>
   <country code="io" default="Indian/Chagos" everutc="n">
    <id>Indian/Chagos</id>
@@ -411,10 +411,10 @@
    <id>Asia/Baghdad</id>
   </country>
   <country code="ir" default="Asia/Tehran" everutc="n">
-   <id>Asia/Tehran</id>
+   <id alts="Iran">Asia/Tehran</id>
   </country>
   <country code="is" default="Atlantic/Reykjavik" everutc="y">
-   <id>Atlantic/Reykjavik</id>
+   <id alts="Iceland">Atlantic/Reykjavik</id>
   </country>
   <country code="it" default="Europe/Rome" everutc="n">
    <id>Europe/Rome</id>
@@ -423,16 +423,16 @@
    <id>Europe/Jersey</id>
   </country>
   <country code="jm" default="America/Jamaica" everutc="n">
-   <id>America/Jamaica</id>
+   <id alts="Jamaica">America/Jamaica</id>
   </country>
   <country code="jo" default="Asia/Amman" everutc="n">
    <id>Asia/Amman</id>
   </country>
   <country code="jp" default="Asia/Tokyo" everutc="n">
-   <id>Asia/Tokyo</id>
+   <id alts="Japan">Asia/Tokyo</id>
   </country>
   <country code="ke" default="Africa/Nairobi" everutc="n">
-   <id>Africa/Nairobi</id>
+   <id alts="Africa/Asmera">Africa/Nairobi</id>
   </country>
   <country code="kg" default="Asia/Bishkek" everutc="n">
    <id>Asia/Bishkek</id>
@@ -455,7 +455,7 @@
    <id>Asia/Pyongyang</id>
   </country>
   <country code="kr" default="Asia/Seoul" everutc="n">
-   <id>Asia/Seoul</id>
+   <id alts="ROK">Asia/Seoul</id>
   </country>
   <country code="kw" default="Asia/Kuwait" everutc="n">
    <id>Asia/Kuwait</id>
@@ -465,12 +465,12 @@
   </country>
   <country code="kz" default="Asia/Almaty" everutc="n">
    <id>Asia/Almaty</id>
-   <id notafter="1099170000000">Asia/Qostanay</id>
+   <id notafter="1099170000000" repl="Asia/Almaty">Asia/Qostanay</id>
    <id>Asia/Oral</id>
-   <id notafter="1099173600000">Asia/Aqtau</id>
-   <id notafter="1545328800000">Asia/Qyzylorda</id>
-   <id notafter="1545328800000">Asia/Aqtobe</id>
-   <id notafter="922572000000">Asia/Atyrau</id>
+   <id notafter="1099173600000" repl="Asia/Oral">Asia/Aqtau</id>
+   <id notafter="1545328800000" repl="Asia/Oral">Asia/Qyzylorda</id>
+   <id notafter="1545328800000" repl="Asia/Oral">Asia/Aqtobe</id>
+   <id notafter="922572000000" repl="Asia/Oral">Asia/Atyrau</id>
   </country>
   <country code="la" default="Asia/Vientiane" everutc="n">
    <id>Asia/Vientiane</id>
@@ -503,7 +503,7 @@
    <id>Europe/Riga</id>
   </country>
   <country code="ly" default="Africa/Tripoli" everutc="n">
-   <id>Africa/Tripoli</id>
+   <id alts="Libya">Africa/Tripoli</id>
   </country>
   <country code="ma" default="Africa/Casablanca" everutc="y">
    <id>Africa/Casablanca</id>
@@ -512,7 +512,7 @@
    <id>Europe/Monaco</id>
   </country>
   <country code="md" default="Europe/Chisinau" everutc="n">
-   <id>Europe/Chisinau</id>
+   <id alts="Europe/Tiraspol">Europe/Chisinau</id>
   </country>
   <country code="me" default="Europe/Podgorica" everutc="n">
    <id>Europe/Podgorica</id>
@@ -525,7 +525,7 @@
   </country>
   <country code="mh" default="Pacific/Majuro" everutc="n">
    <id>Pacific/Majuro</id>
-   <id notafter="745934400000">Pacific/Kwajalein</id>
+   <id notafter="745934400000" repl="Pacific/Majuro" alts="Kwajalein">Pacific/Kwajalein</id>
   </country>
   <country code="mk" default="Europe/Skopje" everutc="n">
    <id>Europe/Skopje</id>
@@ -534,15 +534,15 @@
    <id>Africa/Bamako</id>
   </country>
   <country code="mm" default="Asia/Yangon" everutc="n">
-   <id>Asia/Yangon</id>
+   <id alts="Asia/Rangoon">Asia/Yangon</id>
   </country>
   <country code="mn" default="Asia/Ulaanbaatar" everutc="n">
    <id>Asia/Choibalsan</id>
-   <id>Asia/Ulaanbaatar</id>
+   <id alts="Asia/Ulan_Bator">Asia/Ulaanbaatar</id>
    <id>Asia/Hovd</id>
   </country>
   <country code="mo" default="Asia/Macau" everutc="n">
-   <id>Asia/Macau</id>
+   <id alts="Asia/Macao">Asia/Macau</id>
   </country>
   <country code="mp" default="Pacific/Saipan" everutc="n">
    <id>Pacific/Saipan</id>
@@ -569,21 +569,21 @@
    <id>Africa/Blantyre</id>
   </country>
   <country code="mx" default="America/Mexico_City" everutc="n">
-   <id>America/Mexico_City</id>
-   <id notafter="407653200000">America/Merida</id>
-   <id notafter="594198000000">America/Monterrey</id>
-   <id notafter="1270371600000">America/Bahia_Banderas</id>
+   <id alts="Mexico/General">America/Mexico_City</id>
+   <id notafter="407653200000" repl="America/Mexico_City">America/Merida</id>
+   <id notafter="594198000000" repl="America/Mexico_City">America/Monterrey</id>
+   <id notafter="1270371600000" repl="America/Mexico_City">America/Bahia_Banderas</id>
    <id>America/Matamoros</id>
    <id>America/Cancun</id>
    <id>America/Chihuahua</id>
-   <id notafter="891766800000">America/Mazatlan</id>
+   <id notafter="891766800000" repl="America/Chihuahua" alts="Mexico/BajaSur">America/Mazatlan</id>
    <id>America/Hermosillo</id>
    <id>America/Ojinaga</id>
-   <id>America/Tijuana</id>
+   <id alts="America/Ensenada,America/Santa_Isabel,Mexico/BajaNorte">America/Tijuana</id>
   </country>
   <country code="my" default="Asia/Kuala_Lumpur" everutc="n">
    <id>Asia/Kuala_Lumpur</id>
-   <id notafter="378664200000">Asia/Kuching</id>
+   <id notafter="378664200000" repl="Asia/Kuala_Lumpur">Asia/Kuching</id>
   </country>
   <country code="mz" default="Africa/Maputo" everutc="n">
    <id>Africa/Maputo</id>
@@ -610,10 +610,10 @@
    <id>Europe/Amsterdam</id>
   </country>
   <country code="no" default="Europe/Oslo" everutc="n">
-   <id>Europe/Oslo</id>
+   <id alts="Atlantic/Jan_Mayen">Europe/Oslo</id>
   </country>
   <country code="np" default="Asia/Kathmandu" everutc="n">
-   <id>Asia/Kathmandu</id>
+   <id alts="Asia/Katmandu">Asia/Kathmandu</id>
   </country>
   <country code="nr" default="Pacific/Nauru" everutc="n">
    <id>Pacific/Nauru</id>
@@ -622,8 +622,8 @@
    <id>Pacific/Niue</id>
   </country>
   <country code="nz" default="Pacific/Auckland" defaultBoost="y" everutc="n">
-   <id>Pacific/Auckland</id>
-   <id>Pacific/Chatham</id>
+   <id alts="Antarctica/South_Pole,NZ">Pacific/Auckland</id>
+   <id alts="NZ-CHAT">Pacific/Chatham</id>
   </country>
   <country code="om" default="Asia/Muscat" everutc="n">
    <id>Asia/Muscat</id>
@@ -650,7 +650,7 @@
    <id>Asia/Karachi</id>
   </country>
   <country code="pl" default="Europe/Warsaw" everutc="n">
-   <id>Europe/Warsaw</id>
+   <id alts="Poland">Europe/Warsaw</id>
   </country>
   <country code="pm" default="America/Miquelon" everutc="n">
    <id>America/Miquelon</id>
@@ -663,11 +663,11 @@
   </country>
   <country code="ps" default="Asia/Gaza" everutc="n">
    <id>Asia/Hebron</id>
-   <id notafter="1317330000000">Asia/Gaza</id>
+   <id notafter="1317330000000" repl="Asia/Hebron">Asia/Gaza</id>
   </country>
   <country code="pt" default="Europe/Lisbon" everutc="y">
-   <id>Europe/Lisbon</id>
-   <id notafter="828234000000">Atlantic/Madeira</id>
+   <id alts="Portugal">Europe/Lisbon</id>
+   <id notafter="828234000000" repl="Europe/Lisbon">Atlantic/Madeira</id>
    <id>Atlantic/Azores</id>
   </country>
   <country code="pw" default="Pacific/Palau" everutc="n">
@@ -695,24 +695,24 @@
    <id>Asia/Sakhalin</id>
    <id>Asia/Srednekolymsk</id>
    <id>Asia/Vladivostok</id>
-   <id notafter="1315828800000">Asia/Ust-Nera</id>
+   <id notafter="1315828800000" repl="Asia/Vladivostok">Asia/Ust-Nera</id>
    <id>Asia/Chita</id>
-   <id notafter="1459015200000">Asia/Yakutsk</id>
-   <id notafter="1315832400000">Asia/Khandyga</id>
+   <id notafter="1459015200000" repl="Asia/Chita">Asia/Yakutsk</id>
+   <id notafter="1315832400000" repl="Asia/Chita">Asia/Khandyga</id>
    <id>Asia/Irkutsk</id>
    <id>Asia/Krasnoyarsk</id>
-   <id notafter="1459022400000">Asia/Novokuznetsk</id>
+   <id notafter="1459022400000" repl="Asia/Krasnoyarsk">Asia/Novokuznetsk</id>
    <id>Asia/Novosibirsk</id>
    <id>Asia/Barnaul</id>
-   <id notafter="1464465600000">Asia/Tomsk</id>
+   <id notafter="1464465600000" repl="Asia/Barnaul">Asia/Tomsk</id>
    <id>Asia/Omsk</id>
    <id>Asia/Yekaterinburg</id>
    <id>Europe/Samara</id>
    <id>Europe/Saratov</id>
-   <id notafter="1480806000000">Europe/Ulyanovsk</id>
-   <id notafter="701823600000">Europe/Astrakhan</id>
+   <id notafter="1480806000000" repl="Europe/Saratov">Europe/Ulyanovsk</id>
+   <id notafter="701823600000" repl="Europe/Saratov">Europe/Astrakhan</id>
    <id>Europe/Volgograd</id>
-   <id>Europe/Moscow</id>
+   <id alts="W-SU">Europe/Moscow</id>
    <id>Europe/Kirov</id>
    <id>Europe/Kaliningrad</id>
   </country>
@@ -735,7 +735,7 @@
    <id>Europe/Stockholm</id>
   </country>
   <country code="sg" default="Asia/Singapore" everutc="n">
-   <id>Asia/Singapore</id>
+   <id alts="Singapore">Asia/Singapore</id>
   </country>
   <country code="sh" default="Atlantic/St_Helena" everutc="y">
    <id>Atlantic/St_Helena</id>
@@ -807,7 +807,7 @@
    <id>Asia/Dili</id>
   </country>
   <country code="tm" default="Asia/Ashgabat" everutc="n">
-   <id>Asia/Ashgabat</id>
+   <id alts="Asia/Ashkhabad">Asia/Ashgabat</id>
   </country>
   <country code="tn" default="Africa/Tunis" everutc="n">
    <id>Africa/Tunis</id>
@@ -816,24 +816,24 @@
    <id>Pacific/Tongatapu</id>
   </country>
   <country code="tr" default="Europe/Istanbul" everutc="n">
-   <id>Europe/Istanbul</id>
+   <id alts="Turkey">Europe/Istanbul</id>
   </country>
   <country code="tt" default="America/Port_of_Spain" everutc="n">
-   <id>America/Port_of_Spain</id>
+   <id alts="America/Virgin">America/Port_of_Spain</id>
   </country>
   <country code="tv" default="Pacific/Funafuti" everutc="n">
    <id>Pacific/Funafuti</id>
   </country>
   <country code="tw" default="Asia/Taipei" everutc="n">
-   <id>Asia/Taipei</id>
+   <id alts="ROC">Asia/Taipei</id>
   </country>
   <country code="tz" default="Africa/Dar_es_Salaam" everutc="n">
    <id>Africa/Dar_es_Salaam</id>
   </country>
   <country code="ua" default="Europe/Kiev" everutc="n">
    <id>Europe/Kiev</id>
-   <id notafter="686102400000">Europe/Zaporozhye</id>
-   <id notafter="686091600000">Europe/Uzhgorod</id>
+   <id notafter="686102400000" repl="Europe/Kiev">Europe/Zaporozhye</id>
+   <id notafter="686091600000" repl="Europe/Kiev">Europe/Uzhgorod</id>
    <id picker="n">Europe/Simferopol</id>
   </country>
   <country code="ug" default="Africa/Kampala" everutc="n">
@@ -844,42 +844,42 @@
    <id>Pacific/Midway</id>
   </country>
   <country code="us" default="America/New_York" everutc="n">
-   <id>America/New_York</id>
-   <id notafter="152089200000">America/Kentucky/Louisville</id>
-   <id notafter="167814000000">America/Detroit</id>
-   <id notafter="1130652000000">America/Indiana/Indianapolis</id>
-   <id notafter="1194159600000">America/Indiana/Vincennes</id>
-   <id notafter="972802800000">America/Kentucky/Monticello</id>
-   <id notafter="247042800000">America/Indiana/Petersburg</id>
-   <id notafter="1173600000000">America/Indiana/Winamac</id>
-   <id notafter="89186400000">America/Indiana/Vevay</id>
-   <id notafter="183535200000">America/Indiana/Marengo</id>
-   <id>America/Chicago</id>
-   <id notafter="104918400000">America/Menominee</id>
-   <id notafter="1143964800000">America/Indiana/Tell_City</id>
-   <id notafter="688546800000">America/Indiana/Knox</id>
-   <id notafter="1289116800000">America/North_Dakota/Beulah</id>
-   <id notafter="1067155200000">America/North_Dakota/New_Salem</id>
-   <id notafter="720000000000">America/North_Dakota/Center</id>
-   <id>America/Denver</id>
-   <id>America/Phoenix</id>
-   <id notafter="129114000000">America/Boise</id>
-   <id>America/Los_Angeles</id>
-   <id>America/Anchorage</id>
-   <id notafter="436359600000">America/Juneau</id>
-   <id notafter="341402400000">America/Sitka</id>
-   <id notafter="436363200000">America/Nome</id>
-   <id notafter="1547978400000">America/Metlakatla</id>
-   <id notafter="436356000000">America/Yakutat</id>
-   <id>Pacific/Honolulu</id>
-   <id>America/Adak</id>
+   <id alts="US/Eastern">America/New_York</id>
+   <id notafter="152089200000" repl="America/New_York" alts="America/Louisville">America/Kentucky/Louisville</id>
+   <id notafter="167814000000" repl="America/New_York" alts="US/Michigan">America/Detroit</id>
+   <id notafter="1130652000000" repl="America/New_York" alts="America/Fort_Wayne,America/Indianapolis,US/East-Indiana">America/Indiana/Indianapolis</id>
+   <id notafter="1194159600000" repl="America/New_York">America/Indiana/Vincennes</id>
+   <id notafter="972802800000" repl="America/New_York">America/Kentucky/Monticello</id>
+   <id notafter="247042800000" repl="America/New_York">America/Indiana/Petersburg</id>
+   <id notafter="1173600000000" repl="America/New_York">America/Indiana/Winamac</id>
+   <id notafter="89186400000" repl="America/New_York">America/Indiana/Vevay</id>
+   <id notafter="183535200000" repl="America/New_York">America/Indiana/Marengo</id>
+   <id alts="US/Central">America/Chicago</id>
+   <id notafter="104918400000" repl="America/Chicago">America/Menominee</id>
+   <id notafter="1143964800000" repl="America/Chicago">America/Indiana/Tell_City</id>
+   <id notafter="688546800000" repl="America/Chicago" alts="America/Knox_IN,US/Indiana-Starke">America/Indiana/Knox</id>
+   <id notafter="1289116800000" repl="America/Chicago">America/North_Dakota/Beulah</id>
+   <id notafter="1067155200000" repl="America/Chicago">America/North_Dakota/New_Salem</id>
+   <id notafter="720000000000" repl="America/Chicago">America/North_Dakota/Center</id>
+   <id alts="America/Shiprock,Navajo,US/Mountain">America/Denver</id>
+   <id alts="US/Arizona">America/Phoenix</id>
+   <id notafter="129114000000" repl="America/Phoenix">America/Boise</id>
+   <id alts="US/Pacific">America/Los_Angeles</id>
+   <id alts="US/Alaska">America/Anchorage</id>
+   <id notafter="436359600000" repl="America/Anchorage">America/Juneau</id>
+   <id notafter="341402400000" repl="America/Anchorage">America/Sitka</id>
+   <id notafter="436363200000" repl="America/Anchorage">America/Nome</id>
+   <id notafter="1547978400000" repl="America/Anchorage">America/Metlakatla</id>
+   <id notafter="436356000000" repl="America/Anchorage">America/Yakutat</id>
+   <id alts="Pacific/Johnston,US/Hawaii">Pacific/Honolulu</id>
+   <id alts="America/Atka,US/Aleutian">America/Adak</id>
   </country>
   <country code="uy" default="America/Montevideo" everutc="n">
    <id>America/Montevideo</id>
   </country>
   <country code="uz" default="Asia/Tashkent" everutc="n">
    <id>Asia/Tashkent</id>
-   <id notafter="670366800000">Asia/Samarkand</id>
+   <id notafter="670366800000" repl="Asia/Tashkent">Asia/Samarkand</id>
   </country>
   <country code="va" default="Europe/Vatican" everutc="n">
    <id>Europe/Vatican</id>
@@ -897,7 +897,7 @@
    <id>America/St_Thomas</id>
   </country>
   <country code="vn" default="Asia/Ho_Chi_Minh" everutc="n">
-   <id>Asia/Ho_Chi_Minh</id>
+   <id alts="Asia/Saigon">Asia/Ho_Chi_Minh</id>
   </country>
   <country code="vu" default="Pacific/Efate" everutc="n">
    <id>Pacific/Efate</id>
diff --git a/output_data/distro/distro.zip b/output_data/distro/distro.zip
index 17d8c07..cb99d76 100644
--- a/output_data/distro/distro.zip
+++ b/output_data/distro/distro.zip
Binary files differ
diff --git a/testing/data/test1/output_data/android/tzlookup.xml b/testing/data/test1/output_data/android/tzlookup.xml
index 6297544..8906877 100644
--- a/testing/data/test1/output_data/android/tzlookup.xml
+++ b/testing/data/test1/output_data/android/tzlookup.xml
@@ -41,38 +41,38 @@
    <id>Antarctica/Palmer</id>
   </country>
   <country code="ar" default="America/Argentina/Buenos_Aires" defaultBoost="y" everutc="n">
-   <id>America/Argentina/Buenos_Aires</id>
-   <id notafter="687931200000">America/Argentina/Cordoba</id>
-   <id notafter="1237082400000">America/Argentina/Mendoza</id>
-   <id notafter="1087099200000">America/Argentina/Tucuman</id>
-   <id notafter="1096171200000">America/Argentina/Salta</id>
-   <id notafter="1090728000000">America/Argentina/San_Juan</id>
-   <id notafter="687931200000">America/Argentina/Jujuy</id>
-   <id notafter="1087704000000">America/Argentina/Catamarca</id>
-   <id notafter="687931200000">America/Argentina/La_Rioja</id>
-   <id notafter="673588800000">America/Argentina/Rio_Gallegos</id>
-   <id notafter="1087704000000">America/Argentina/Ushuaia</id>
+   <id alts="America/Buenos_Aires">America/Argentina/Buenos_Aires</id>
+   <id notafter="687931200000" repl="America/Argentina/Buenos_Aires" alts="America/Cordoba,America/Rosario">America/Argentina/Cordoba</id>
+   <id notafter="1237082400000" repl="America/Argentina/Buenos_Aires" alts="America/Mendoza">America/Argentina/Mendoza</id>
+   <id notafter="1087099200000" repl="America/Argentina/Buenos_Aires">America/Argentina/Tucuman</id>
+   <id notafter="1096171200000" repl="America/Argentina/Buenos_Aires">America/Argentina/Salta</id>
+   <id notafter="1090728000000" repl="America/Argentina/Buenos_Aires">America/Argentina/San_Juan</id>
+   <id notafter="687931200000" repl="America/Argentina/Buenos_Aires" alts="America/Jujuy">America/Argentina/Jujuy</id>
+   <id notafter="1087704000000" repl="America/Argentina/Buenos_Aires" alts="America/Argentina/ComodRivadavia,America/Catamarca">America/Argentina/Catamarca</id>
+   <id notafter="687931200000" repl="America/Argentina/Buenos_Aires">America/Argentina/La_Rioja</id>
+   <id notafter="673588800000" repl="America/Argentina/Buenos_Aires">America/Argentina/Rio_Gallegos</id>
+   <id notafter="1087704000000" repl="America/Argentina/Buenos_Aires">America/Argentina/Ushuaia</id>
    <id>America/Argentina/San_Luis</id>
   </country>
   <country code="as" default="Pacific/Pago_Pago" everutc="n">
-   <id>Pacific/Pago_Pago</id>
+   <id alts="Pacific/Samoa,US/Samoa">Pacific/Pago_Pago</id>
   </country>
   <country code="at" default="Europe/Vienna" everutc="n">
    <id>Europe/Vienna</id>
   </country>
   <country code="au" default="Australia/Sydney" everutc="n">
-   <id>Australia/Sydney</id>
-   <id notafter="796147200000">Australia/Melbourne</id>
-   <id notafter="1193500800000">Australia/Hobart</id>
-   <id notafter="37728000000">Australia/Currie</id>
-   <id>Australia/Brisbane</id>
-   <id notafter="762883200000">Australia/Lindeman</id>
+   <id alts="Australia/ACT,Australia/Canberra,Australia/NSW">Australia/Sydney</id>
+   <id notafter="796147200000" repl="Australia/Sydney" alts="Australia/Victoria">Australia/Melbourne</id>
+   <id notafter="1193500800000" repl="Australia/Sydney" alts="Australia/Tasmania">Australia/Hobart</id>
+   <id notafter="37728000000" repl="Australia/Sydney">Australia/Currie</id>
+   <id alts="Australia/Queensland">Australia/Brisbane</id>
+   <id notafter="762883200000" repl="Australia/Brisbane">Australia/Lindeman</id>
    <id>Antarctica/Macquarie</id>
-   <id>Australia/Lord_Howe</id>
-   <id>Australia/Adelaide</id>
-   <id notafter="796149000000">Australia/Broken_Hill</id>
-   <id>Australia/Darwin</id>
-   <id>Australia/Perth</id>
+   <id alts="Australia/LHI">Australia/Lord_Howe</id>
+   <id alts="Australia/South">Australia/Adelaide</id>
+   <id notafter="796149000000" repl="Australia/Adelaide" alts="Australia/Yancowinna">Australia/Broken_Hill</id>
+   <id alts="Australia/North">Australia/Darwin</id>
+   <id alts="Australia/West">Australia/Perth</id>
    <id>Australia/Eucla</id>
   </country>
   <country code="aw" default="America/Aruba" everutc="n">
@@ -91,7 +91,7 @@
    <id>America/Barbados</id>
   </country>
   <country code="bd" default="Asia/Dhaka" everutc="n">
-   <id>Asia/Dhaka</id>
+   <id alts="Asia/Dacca">Asia/Dhaka</id>
   </country>
   <country code="be" default="Europe/Brussels" everutc="n">
    <id>Europe/Brussels</id>
@@ -127,28 +127,28 @@
    <id>America/Kralendijk</id>
   </country>
   <country code="br" default="America/Noronha" everutc="n">
-   <id>America/Noronha</id>
-   <id>America/Sao_Paulo</id>
-   <id notafter="1550368800000">America/Bahia</id>
-   <id notafter="1214280000000">America/Santarem</id>
-   <id notafter="1330221600000">America/Recife</id>
-   <id notafter="972180000000">America/Fortaleza</id>
-   <id notafter="1013911200000">America/Belem</id>
-   <id notafter="824004000000">America/Maceio</id>
-   <id notafter="1361066400000">America/Araguaina</id>
-   <id>America/Manaus</id>
-   <id notafter="1550372400000">America/Cuiaba</id>
-   <id notafter="1076814000000">America/Campo_Grande</id>
-   <id notafter="761713200000">America/Porto_Velho</id>
-   <id notafter="971578800000">America/Boa_Vista</id>
-   <id>America/Rio_Branco</id>
-   <id notafter="761716800000">America/Eirunepe</id>
+   <id alts="Brazil/DeNoronha">America/Noronha</id>
+   <id alts="Brazil/East">America/Sao_Paulo</id>
+   <id notafter="1550368800000" repl="America/Sao_Paulo">America/Bahia</id>
+   <id notafter="1214280000000" repl="America/Sao_Paulo">America/Santarem</id>
+   <id notafter="1330221600000" repl="America/Sao_Paulo">America/Recife</id>
+   <id notafter="972180000000" repl="America/Sao_Paulo">America/Fortaleza</id>
+   <id notafter="1013911200000" repl="America/Sao_Paulo">America/Belem</id>
+   <id notafter="824004000000" repl="America/Sao_Paulo">America/Maceio</id>
+   <id notafter="1361066400000" repl="America/Sao_Paulo">America/Araguaina</id>
+   <id alts="Brazil/West">America/Manaus</id>
+   <id notafter="1550372400000" repl="America/Manaus">America/Cuiaba</id>
+   <id notafter="1076814000000" repl="America/Manaus">America/Campo_Grande</id>
+   <id notafter="761713200000" repl="America/Manaus">America/Porto_Velho</id>
+   <id notafter="971578800000" repl="America/Manaus">America/Boa_Vista</id>
+   <id alts="America/Porto_Acre,Brazil/Acre">America/Rio_Branco</id>
+   <id notafter="761716800000" repl="America/Rio_Branco">America/Eirunepe</id>
   </country>
   <country code="bs" default="America/Nassau" everutc="n">
    <id>America/Nassau</id>
   </country>
   <country code="bt" default="Asia/Thimphu" everutc="n">
-   <id>Asia/Thimphu</id>
+   <id alts="Asia/Thimbu">Asia/Thimphu</id>
   </country>
   <country code="bw" default="Africa/Gaborone" everutc="n">
    <id>Africa/Gaborone</id>
@@ -160,34 +160,34 @@
    <id>America/Belize</id>
   </country>
   <country code="ca" default="America/Toronto" everutc="n">
-   <id>America/Toronto</id>
-   <id>America/Vancouver</id>
-   <id>America/Edmonton</id>
-   <id>America/Winnipeg</id>
-   <id>America/Halifax</id>
-   <id>America/St_Johns</id>
-   <id notafter="1162098000000">America/Moncton</id>
-   <id notafter="57733200000">America/Glace_Bay</id>
-   <id notafter="1299996000000">America/Goose_Bay</id>
+   <id alts="America/Montreal,Canada/Eastern">America/Toronto</id>
+   <id alts="Canada/Pacific">America/Vancouver</id>
+   <id alts="Canada/Mountain">America/Edmonton</id>
+   <id alts="Canada/Central">America/Winnipeg</id>
+   <id alts="Canada/Atlantic">America/Halifax</id>
+   <id alts="Canada/Newfoundland">America/St_Johns</id>
+   <id notafter="1162098000000" repl="America/Halifax">America/Moncton</id>
+   <id notafter="57733200000" repl="America/Halifax">America/Glace_Bay</id>
+   <id notafter="1299996000000" repl="America/Halifax">America/Goose_Bay</id>
    <id>America/Blanc-Sablon</id>
-   <id notafter="120636000000">America/Thunder_Bay</id>
-   <id notafter="972802800000">America/Iqaluit</id>
-   <id notafter="89186400000">America/Nipigon</id>
-   <id notafter="796806000000">America/Pangnirtung</id>
-   <id>America/Atikokan</id>
-   <id>America/Regina</id>
-   <id notafter="73472400000">America/Swift_Current</id>
-   <id notafter="1130659200000">America/Rankin_Inlet</id>
-   <id notafter="986112000000">America/Rainy_River</id>
-   <id notafter="1173600000000">America/Resolute</id>
-   <id notafter="309945600000">America/Yellowknife</id>
-   <id notafter="1583661600000">America/Dawson_Creek</id>
-   <id notafter="84013200000">America/Creston</id>
-   <id notafter="1425808800000">America/Fort_Nelson</id>
-   <id notafter="294228000000">America/Inuvik</id>
-   <id notafter="986115600000">America/Cambridge_Bay</id>
-   <id notafter="120646800000">America/Dawson</id>
-   <id>America/Whitehorse</id>
+   <id notafter="120636000000" repl="America/Toronto">America/Thunder_Bay</id>
+   <id notafter="972802800000" repl="America/Toronto">America/Iqaluit</id>
+   <id notafter="89186400000" repl="America/Toronto">America/Nipigon</id>
+   <id notafter="796806000000" repl="America/Toronto">America/Pangnirtung</id>
+   <id alts="America/Coral_Harbour">America/Atikokan</id>
+   <id alts="Canada/Saskatchewan">America/Regina</id>
+   <id notafter="73472400000" repl="America/Winnipeg">America/Swift_Current</id>
+   <id notafter="1130659200000" repl="America/Winnipeg">America/Rankin_Inlet</id>
+   <id notafter="986112000000" repl="America/Winnipeg">America/Rainy_River</id>
+   <id notafter="1173600000000" repl="America/Winnipeg">America/Resolute</id>
+   <id notafter="309945600000" repl="America/Edmonton">America/Yellowknife</id>
+   <id notafter="1583661600000" repl="America/Edmonton">America/Dawson_Creek</id>
+   <id notafter="84013200000" repl="America/Edmonton">America/Creston</id>
+   <id notafter="1425808800000" repl="America/Edmonton">America/Fort_Nelson</id>
+   <id notafter="294228000000" repl="America/Edmonton">America/Inuvik</id>
+   <id notafter="986115600000" repl="America/Edmonton">America/Cambridge_Bay</id>
+   <id notafter="120646800000" repl="America/Edmonton">America/Dawson</id>
+   <id alts="Canada/Yukon">America/Whitehorse</id>
   </country>
   <country code="cc" default="Indian/Cocos" everutc="n">
    <id>Indian/Cocos</id>
@@ -206,22 +206,22 @@
    <id>Europe/Zurich</id>
   </country>
   <country code="ci" default="Africa/Abidjan" everutc="y">
-   <id>Africa/Abidjan</id>
+   <id alts="Africa/Timbuktu">Africa/Abidjan</id>
   </country>
   <country code="ck" default="Pacific/Rarotonga" everutc="n">
    <id>Pacific/Rarotonga</id>
   </country>
   <country code="cl" default="America/Santiago" everutc="n">
    <id>America/Punta_Arenas</id>
-   <id>America/Santiago</id>
-   <id>Pacific/Easter</id>
+   <id alts="Chile/Continental">America/Santiago</id>
+   <id alts="Chile/EasterIsland">Pacific/Easter</id>
   </country>
   <country code="cm" default="Africa/Douala" everutc="n">
    <id>Africa/Douala</id>
   </country>
   <country code="cn" default="Asia/Shanghai" defaultBoost="y" everutc="n">
-   <id>Asia/Shanghai</id>
-   <id>Asia/Urumqi</id>
+   <id alts="Asia/Chongqing,Asia/Chungking,Asia/Harbin,PRC">Asia/Shanghai</id>
+   <id alts="Asia/Kashgar">Asia/Urumqi</id>
   </country>
   <country code="co" default="America/Bogota" everutc="n">
    <id>America/Bogota</id>
@@ -230,7 +230,7 @@
    <id>America/Costa_Rica</id>
   </country>
   <country code="cu" default="America/Havana" everutc="n">
-   <id>America/Havana</id>
+   <id alts="Cuba">America/Havana</id>
   </country>
   <country code="cv" default="Atlantic/Cape_Verde" everutc="n">
    <id>Atlantic/Cape_Verde</id>
@@ -250,7 +250,7 @@
   </country>
   <country code="de" default="Europe/Berlin" everutc="n">
    <id>Europe/Berlin</id>
-   <id notafter="338950800000">Europe/Busingen</id>
+   <id notafter="338950800000" repl="Europe/Berlin">Europe/Busingen</id>
   </country>
   <country code="dj" default="Africa/Djibouti" everutc="n">
    <id>Africa/Djibouti</id>
@@ -275,7 +275,7 @@
    <id>Europe/Tallinn</id>
   </country>
   <country code="eg" default="Africa/Cairo" everutc="n">
-   <id>Africa/Cairo</id>
+   <id alts="Egypt">Africa/Cairo</id>
   </country>
   <country code="eh" default="Africa/El_Aaiun" everutc="y">
    <id>Africa/El_Aaiun</id>
@@ -285,7 +285,7 @@
   </country>
   <country code="es" default="Europe/Madrid" everutc="y">
    <id>Europe/Madrid</id>
-   <id notafter="496803600000">Africa/Ceuta</id>
+   <id notafter="496803600000" repl="Europe/Madrid">Africa/Ceuta</id>
    <id>Atlantic/Canary</id>
   </country>
   <country code="et" default="Africa/Addis_Ababa" everutc="n">
@@ -301,12 +301,12 @@
    <id>Atlantic/Stanley</id>
   </country>
   <country code="fm" default="Pacific/Pohnpei" everutc="n">
-   <id>Pacific/Pohnpei</id>
+   <id alts="Pacific/Ponape">Pacific/Pohnpei</id>
    <id>Pacific/Kosrae</id>
-   <id>Pacific/Chuuk</id>
+   <id alts="Pacific/Truk,Pacific/Yap">Pacific/Chuuk</id>
   </country>
   <country code="fo" default="Atlantic/Faroe" everutc="y">
-   <id>Atlantic/Faroe</id>
+   <id alts="Atlantic/Faeroe">Atlantic/Faroe</id>
   </country>
   <country code="fr" default="Europe/Paris" everutc="n">
    <id>Europe/Paris</id>
@@ -315,7 +315,7 @@
    <id>Africa/Libreville</id>
   </country>
   <country code="gb" default="Europe/London" everutc="y">
-   <id>Europe/London</id>
+   <id alts="Europe/Belfast,GB,GB-Eire">Europe/London</id>
   </country>
   <country code="gd" default="America/Grenada" everutc="n">
    <id>America/Grenada</id>
@@ -338,7 +338,7 @@
   <country code="gl" default="America/Nuuk" everutc="y">
    <id>America/Danmarkshavn</id>
    <id>America/Scoresbysund</id>
-   <id>America/Nuuk</id>
+   <id alts="America/Godthab">America/Nuuk</id>
    <id>America/Thule</id>
   </country>
   <country code="gm" default="Africa/Banjul" everutc="y">
@@ -372,7 +372,7 @@
    <id>America/Guyana</id>
   </country>
   <country code="hk" default="Asia/Hong_Kong" everutc="n">
-   <id>Asia/Hong_Kong</id>
+   <id alts="Hongkong">Asia/Hong_Kong</id>
   </country>
   <country code="hn" default="America/Tegucigalpa" everutc="n">
    <id>America/Tegucigalpa</id>
@@ -388,21 +388,21 @@
   </country>
   <country code="id" default="Asia/Jakarta" everutc="n">
    <id>Asia/Jayapura</id>
-   <id>Asia/Makassar</id>
+   <id alts="Asia/Ujung_Pandang">Asia/Makassar</id>
    <id>Asia/Jakarta</id>
-   <id notafter="567964800000">Asia/Pontianak</id>
+   <id notafter="567964800000" repl="Asia/Jakarta">Asia/Pontianak</id>
   </country>
   <country code="ie" default="Europe/Dublin" everutc="y">
-   <id>Europe/Dublin</id>
+   <id alts="Eire">Europe/Dublin</id>
   </country>
   <country code="il" default="Asia/Jerusalem" everutc="n">
-   <id>Asia/Jerusalem</id>
+   <id alts="Asia/Tel_Aviv,Israel">Asia/Jerusalem</id>
   </country>
   <country code="im" default="Europe/Isle_of_Man" everutc="y">
    <id>Europe/Isle_of_Man</id>
   </country>
   <country code="in" default="Asia/Kolkata" everutc="n">
-   <id>Asia/Kolkata</id>
+   <id alts="Asia/Calcutta">Asia/Kolkata</id>
   </country>
   <country code="io" default="Indian/Chagos" everutc="n">
    <id>Indian/Chagos</id>
@@ -411,10 +411,10 @@
    <id>Asia/Baghdad</id>
   </country>
   <country code="ir" default="Asia/Tehran" everutc="n">
-   <id>Asia/Tehran</id>
+   <id alts="Iran">Asia/Tehran</id>
   </country>
   <country code="is" default="Atlantic/Reykjavik" everutc="y">
-   <id>Atlantic/Reykjavik</id>
+   <id alts="Iceland">Atlantic/Reykjavik</id>
   </country>
   <country code="it" default="Europe/Rome" everutc="n">
    <id>Europe/Rome</id>
@@ -423,16 +423,16 @@
    <id>Europe/Jersey</id>
   </country>
   <country code="jm" default="America/Jamaica" everutc="n">
-   <id>America/Jamaica</id>
+   <id alts="Jamaica">America/Jamaica</id>
   </country>
   <country code="jo" default="Asia/Amman" everutc="n">
    <id>Asia/Amman</id>
   </country>
   <country code="jp" default="Asia/Tokyo" everutc="n">
-   <id>Asia/Tokyo</id>
+   <id alts="Japan">Asia/Tokyo</id>
   </country>
   <country code="ke" default="Africa/Nairobi" everutc="n">
-   <id>Africa/Nairobi</id>
+   <id alts="Africa/Asmera">Africa/Nairobi</id>
   </country>
   <country code="kg" default="Asia/Bishkek" everutc="n">
    <id>Asia/Bishkek</id>
@@ -455,7 +455,7 @@
    <id>Asia/Pyongyang</id>
   </country>
   <country code="kr" default="Asia/Seoul" everutc="n">
-   <id>Asia/Seoul</id>
+   <id alts="ROK">Asia/Seoul</id>
   </country>
   <country code="kw" default="Asia/Kuwait" everutc="n">
    <id>Asia/Kuwait</id>
@@ -465,12 +465,12 @@
   </country>
   <country code="kz" default="Asia/Almaty" everutc="n">
    <id>Asia/Almaty</id>
-   <id notafter="1099170000000">Asia/Qostanay</id>
+   <id notafter="1099170000000" repl="Asia/Almaty">Asia/Qostanay</id>
    <id>Asia/Oral</id>
-   <id notafter="1099173600000">Asia/Aqtau</id>
-   <id notafter="1545328800000">Asia/Qyzylorda</id>
-   <id notafter="1545328800000">Asia/Aqtobe</id>
-   <id notafter="922572000000">Asia/Atyrau</id>
+   <id notafter="1099173600000" repl="Asia/Oral">Asia/Aqtau</id>
+   <id notafter="1545328800000" repl="Asia/Oral">Asia/Qyzylorda</id>
+   <id notafter="1545328800000" repl="Asia/Oral">Asia/Aqtobe</id>
+   <id notafter="922572000000" repl="Asia/Oral">Asia/Atyrau</id>
   </country>
   <country code="la" default="Asia/Vientiane" everutc="n">
    <id>Asia/Vientiane</id>
@@ -503,7 +503,7 @@
    <id>Europe/Riga</id>
   </country>
   <country code="ly" default="Africa/Tripoli" everutc="n">
-   <id>Africa/Tripoli</id>
+   <id alts="Libya">Africa/Tripoli</id>
   </country>
   <country code="ma" default="Africa/Casablanca" everutc="y">
    <id>Africa/Casablanca</id>
@@ -512,7 +512,7 @@
    <id>Europe/Monaco</id>
   </country>
   <country code="md" default="Europe/Chisinau" everutc="n">
-   <id>Europe/Chisinau</id>
+   <id alts="Europe/Tiraspol">Europe/Chisinau</id>
   </country>
   <country code="me" default="Europe/Podgorica" everutc="n">
    <id>Europe/Podgorica</id>
@@ -525,7 +525,7 @@
   </country>
   <country code="mh" default="Pacific/Majuro" everutc="n">
    <id>Pacific/Majuro</id>
-   <id notafter="745934400000">Pacific/Kwajalein</id>
+   <id notafter="745934400000" repl="Pacific/Majuro" alts="Kwajalein">Pacific/Kwajalein</id>
   </country>
   <country code="mk" default="Europe/Skopje" everutc="n">
    <id>Europe/Skopje</id>
@@ -534,15 +534,15 @@
    <id>Africa/Bamako</id>
   </country>
   <country code="mm" default="Asia/Yangon" everutc="n">
-   <id>Asia/Yangon</id>
+   <id alts="Asia/Rangoon">Asia/Yangon</id>
   </country>
   <country code="mn" default="Asia/Ulaanbaatar" everutc="n">
    <id>Asia/Choibalsan</id>
-   <id>Asia/Ulaanbaatar</id>
+   <id alts="Asia/Ulan_Bator">Asia/Ulaanbaatar</id>
    <id>Asia/Hovd</id>
   </country>
   <country code="mo" default="Asia/Macau" everutc="n">
-   <id>Asia/Macau</id>
+   <id alts="Asia/Macao">Asia/Macau</id>
   </country>
   <country code="mp" default="Pacific/Saipan" everutc="n">
    <id>Pacific/Saipan</id>
@@ -569,21 +569,21 @@
    <id>Africa/Blantyre</id>
   </country>
   <country code="mx" default="America/Mexico_City" everutc="n">
-   <id>America/Mexico_City</id>
-   <id notafter="407653200000">America/Merida</id>
-   <id notafter="594198000000">America/Monterrey</id>
-   <id notafter="1270371600000">America/Bahia_Banderas</id>
+   <id alts="Mexico/General">America/Mexico_City</id>
+   <id notafter="407653200000" repl="America/Mexico_City">America/Merida</id>
+   <id notafter="594198000000" repl="America/Mexico_City">America/Monterrey</id>
+   <id notafter="1270371600000" repl="America/Mexico_City">America/Bahia_Banderas</id>
    <id>America/Matamoros</id>
    <id>America/Cancun</id>
    <id>America/Chihuahua</id>
-   <id notafter="891766800000">America/Mazatlan</id>
+   <id notafter="891766800000" repl="America/Chihuahua" alts="Mexico/BajaSur">America/Mazatlan</id>
    <id>America/Hermosillo</id>
    <id>America/Ojinaga</id>
-   <id>America/Tijuana</id>
+   <id alts="America/Ensenada,America/Santa_Isabel,Mexico/BajaNorte">America/Tijuana</id>
   </country>
   <country code="my" default="Asia/Kuala_Lumpur" everutc="n">
    <id>Asia/Kuala_Lumpur</id>
-   <id notafter="378664200000">Asia/Kuching</id>
+   <id notafter="378664200000" repl="Asia/Kuala_Lumpur">Asia/Kuching</id>
   </country>
   <country code="mz" default="Africa/Maputo" everutc="n">
    <id>Africa/Maputo</id>
@@ -610,10 +610,10 @@
    <id>Europe/Amsterdam</id>
   </country>
   <country code="no" default="Europe/Oslo" everutc="n">
-   <id>Europe/Oslo</id>
+   <id alts="Atlantic/Jan_Mayen">Europe/Oslo</id>
   </country>
   <country code="np" default="Asia/Kathmandu" everutc="n">
-   <id>Asia/Kathmandu</id>
+   <id alts="Asia/Katmandu">Asia/Kathmandu</id>
   </country>
   <country code="nr" default="Pacific/Nauru" everutc="n">
    <id>Pacific/Nauru</id>
@@ -622,8 +622,8 @@
    <id>Pacific/Niue</id>
   </country>
   <country code="nz" default="Pacific/Auckland" defaultBoost="y" everutc="n">
-   <id>Pacific/Auckland</id>
-   <id>Pacific/Chatham</id>
+   <id alts="Antarctica/South_Pole,NZ">Pacific/Auckland</id>
+   <id alts="NZ-CHAT">Pacific/Chatham</id>
   </country>
   <country code="om" default="Asia/Muscat" everutc="n">
    <id>Asia/Muscat</id>
@@ -650,7 +650,7 @@
    <id>Asia/Karachi</id>
   </country>
   <country code="pl" default="Europe/Warsaw" everutc="n">
-   <id>Europe/Warsaw</id>
+   <id alts="Poland">Europe/Warsaw</id>
   </country>
   <country code="pm" default="America/Miquelon" everutc="n">
    <id>America/Miquelon</id>
@@ -663,11 +663,11 @@
   </country>
   <country code="ps" default="Asia/Gaza" everutc="n">
    <id>Asia/Hebron</id>
-   <id notafter="1317330000000">Asia/Gaza</id>
+   <id notafter="1317330000000" repl="Asia/Hebron">Asia/Gaza</id>
   </country>
   <country code="pt" default="Europe/Lisbon" everutc="y">
-   <id>Europe/Lisbon</id>
-   <id notafter="828234000000">Atlantic/Madeira</id>
+   <id alts="Portugal">Europe/Lisbon</id>
+   <id notafter="828234000000" repl="Europe/Lisbon">Atlantic/Madeira</id>
    <id>Atlantic/Azores</id>
   </country>
   <country code="pw" default="Pacific/Palau" everutc="n">
@@ -695,24 +695,24 @@
    <id>Asia/Sakhalin</id>
    <id>Asia/Srednekolymsk</id>
    <id>Asia/Vladivostok</id>
-   <id notafter="1315828800000">Asia/Ust-Nera</id>
+   <id notafter="1315828800000" repl="Asia/Vladivostok">Asia/Ust-Nera</id>
    <id>Asia/Chita</id>
-   <id notafter="1459015200000">Asia/Yakutsk</id>
-   <id notafter="1315832400000">Asia/Khandyga</id>
+   <id notafter="1459015200000" repl="Asia/Chita">Asia/Yakutsk</id>
+   <id notafter="1315832400000" repl="Asia/Chita">Asia/Khandyga</id>
    <id>Asia/Irkutsk</id>
    <id>Asia/Krasnoyarsk</id>
-   <id notafter="1459022400000">Asia/Novokuznetsk</id>
+   <id notafter="1459022400000" repl="Asia/Krasnoyarsk">Asia/Novokuznetsk</id>
    <id>Asia/Novosibirsk</id>
    <id>Asia/Barnaul</id>
-   <id notafter="1464465600000">Asia/Tomsk</id>
+   <id notafter="1464465600000" repl="Asia/Barnaul">Asia/Tomsk</id>
    <id>Asia/Omsk</id>
    <id>Asia/Yekaterinburg</id>
    <id>Europe/Samara</id>
    <id>Europe/Saratov</id>
-   <id notafter="1480806000000">Europe/Ulyanovsk</id>
-   <id notafter="701823600000">Europe/Astrakhan</id>
+   <id notafter="1480806000000" repl="Europe/Saratov">Europe/Ulyanovsk</id>
+   <id notafter="701823600000" repl="Europe/Saratov">Europe/Astrakhan</id>
    <id>Europe/Volgograd</id>
-   <id>Europe/Moscow</id>
+   <id alts="W-SU">Europe/Moscow</id>
    <id>Europe/Kirov</id>
    <id>Europe/Kaliningrad</id>
   </country>
@@ -735,7 +735,7 @@
    <id>Europe/Stockholm</id>
   </country>
   <country code="sg" default="Asia/Singapore" everutc="n">
-   <id>Asia/Singapore</id>
+   <id alts="Singapore">Asia/Singapore</id>
   </country>
   <country code="sh" default="Atlantic/St_Helena" everutc="y">
    <id>Atlantic/St_Helena</id>
@@ -807,7 +807,7 @@
    <id>Asia/Dili</id>
   </country>
   <country code="tm" default="Asia/Ashgabat" everutc="n">
-   <id>Asia/Ashgabat</id>
+   <id alts="Asia/Ashkhabad">Asia/Ashgabat</id>
   </country>
   <country code="tn" default="Africa/Tunis" everutc="n">
    <id>Africa/Tunis</id>
@@ -816,24 +816,24 @@
    <id>Pacific/Tongatapu</id>
   </country>
   <country code="tr" default="Europe/Istanbul" everutc="n">
-   <id>Europe/Istanbul</id>
+   <id alts="Turkey">Europe/Istanbul</id>
   </country>
   <country code="tt" default="America/Port_of_Spain" everutc="n">
-   <id>America/Port_of_Spain</id>
+   <id alts="America/Virgin">America/Port_of_Spain</id>
   </country>
   <country code="tv" default="Pacific/Funafuti" everutc="n">
    <id>Pacific/Funafuti</id>
   </country>
   <country code="tw" default="Asia/Taipei" everutc="n">
-   <id>Asia/Taipei</id>
+   <id alts="ROC">Asia/Taipei</id>
   </country>
   <country code="tz" default="Africa/Dar_es_Salaam" everutc="n">
    <id>Africa/Dar_es_Salaam</id>
   </country>
   <country code="ua" default="Europe/Kiev" everutc="n">
    <id>Europe/Kiev</id>
-   <id notafter="686102400000">Europe/Zaporozhye</id>
-   <id notafter="686091600000">Europe/Uzhgorod</id>
+   <id notafter="686102400000" repl="Europe/Kiev">Europe/Zaporozhye</id>
+   <id notafter="686091600000" repl="Europe/Kiev">Europe/Uzhgorod</id>
    <id picker="n">Europe/Simferopol</id>
   </country>
   <country code="ug" default="Africa/Kampala" everutc="n">
@@ -844,42 +844,42 @@
    <id>Pacific/Midway</id>
   </country>
   <country code="us" default="America/New_York" everutc="n">
-   <id>America/New_York</id>
-   <id notafter="152089200000">America/Kentucky/Louisville</id>
-   <id notafter="167814000000">America/Detroit</id>
-   <id notafter="1130652000000">America/Indiana/Indianapolis</id>
-   <id notafter="1194159600000">America/Indiana/Vincennes</id>
-   <id notafter="972802800000">America/Kentucky/Monticello</id>
-   <id notafter="247042800000">America/Indiana/Petersburg</id>
-   <id notafter="1173600000000">America/Indiana/Winamac</id>
-   <id notafter="89186400000">America/Indiana/Vevay</id>
-   <id notafter="183535200000">America/Indiana/Marengo</id>
-   <id>America/Chicago</id>
-   <id notafter="104918400000">America/Menominee</id>
-   <id notafter="1143964800000">America/Indiana/Tell_City</id>
-   <id notafter="688546800000">America/Indiana/Knox</id>
-   <id notafter="1289116800000">America/North_Dakota/Beulah</id>
-   <id notafter="1067155200000">America/North_Dakota/New_Salem</id>
-   <id notafter="720000000000">America/North_Dakota/Center</id>
-   <id>America/Denver</id>
-   <id>America/Phoenix</id>
-   <id notafter="129114000000">America/Boise</id>
-   <id>America/Los_Angeles</id>
-   <id>America/Anchorage</id>
-   <id notafter="436359600000">America/Juneau</id>
-   <id notafter="341402400000">America/Sitka</id>
-   <id notafter="436363200000">America/Nome</id>
-   <id notafter="1547978400000">America/Metlakatla</id>
-   <id notafter="436356000000">America/Yakutat</id>
-   <id>Pacific/Honolulu</id>
-   <id>America/Adak</id>
+   <id alts="US/Eastern">America/New_York</id>
+   <id notafter="152089200000" repl="America/New_York" alts="America/Louisville">America/Kentucky/Louisville</id>
+   <id notafter="167814000000" repl="America/New_York" alts="US/Michigan">America/Detroit</id>
+   <id notafter="1130652000000" repl="America/New_York" alts="America/Fort_Wayne,America/Indianapolis,US/East-Indiana">America/Indiana/Indianapolis</id>
+   <id notafter="1194159600000" repl="America/New_York">America/Indiana/Vincennes</id>
+   <id notafter="972802800000" repl="America/New_York">America/Kentucky/Monticello</id>
+   <id notafter="247042800000" repl="America/New_York">America/Indiana/Petersburg</id>
+   <id notafter="1173600000000" repl="America/New_York">America/Indiana/Winamac</id>
+   <id notafter="89186400000" repl="America/New_York">America/Indiana/Vevay</id>
+   <id notafter="183535200000" repl="America/New_York">America/Indiana/Marengo</id>
+   <id alts="US/Central">America/Chicago</id>
+   <id notafter="104918400000" repl="America/Chicago">America/Menominee</id>
+   <id notafter="1143964800000" repl="America/Chicago">America/Indiana/Tell_City</id>
+   <id notafter="688546800000" repl="America/Chicago" alts="America/Knox_IN,US/Indiana-Starke">America/Indiana/Knox</id>
+   <id notafter="1289116800000" repl="America/Chicago">America/North_Dakota/Beulah</id>
+   <id notafter="1067155200000" repl="America/Chicago">America/North_Dakota/New_Salem</id>
+   <id notafter="720000000000" repl="America/Chicago">America/North_Dakota/Center</id>
+   <id alts="America/Shiprock,Navajo,US/Mountain">America/Denver</id>
+   <id alts="US/Arizona">America/Phoenix</id>
+   <id notafter="129114000000" repl="America/Phoenix">America/Boise</id>
+   <id alts="US/Pacific">America/Los_Angeles</id>
+   <id alts="US/Alaska">America/Anchorage</id>
+   <id notafter="436359600000" repl="America/Anchorage">America/Juneau</id>
+   <id notafter="341402400000" repl="America/Anchorage">America/Sitka</id>
+   <id notafter="436363200000" repl="America/Anchorage">America/Nome</id>
+   <id notafter="1547978400000" repl="America/Anchorage">America/Metlakatla</id>
+   <id notafter="436356000000" repl="America/Anchorage">America/Yakutat</id>
+   <id alts="Pacific/Johnston,US/Hawaii">Pacific/Honolulu</id>
+   <id alts="America/Atka,US/Aleutian">America/Adak</id>
   </country>
   <country code="uy" default="America/Montevideo" everutc="n">
    <id>America/Montevideo</id>
   </country>
   <country code="uz" default="Asia/Tashkent" everutc="n">
    <id>Asia/Tashkent</id>
-   <id notafter="670366800000">Asia/Samarkand</id>
+   <id notafter="670366800000" repl="Asia/Tashkent">Asia/Samarkand</id>
   </country>
   <country code="va" default="Europe/Vatican" everutc="n">
    <id>Europe/Vatican</id>
@@ -897,7 +897,7 @@
    <id>America/St_Thomas</id>
   </country>
   <country code="vn" default="Asia/Ho_Chi_Minh" everutc="n">
-   <id>Asia/Ho_Chi_Minh</id>
+   <id alts="Asia/Saigon">Asia/Ho_Chi_Minh</id>
   </country>
   <country code="vu" default="Pacific/Efate" everutc="n">
    <id>Pacific/Efate</id>
diff --git a/testing/data/test1/output_data/distro/distro.zip b/testing/data/test1/output_data/distro/distro.zip
index 333d9d1..b7b3db4 100644
--- a/testing/data/test1/output_data/distro/distro.zip
+++ b/testing/data/test1/output_data/distro/distro.zip
Binary files differ
diff --git a/testing/data/test2/output_data/android/tzlookup.xml b/testing/data/test2/output_data/android/tzlookup.xml
index ef5f3dc..681f304 100644
--- a/testing/data/test2/output_data/android/tzlookup.xml
+++ b/testing/data/test2/output_data/android/tzlookup.xml
@@ -41,38 +41,38 @@
    <id>Antarctica/Palmer</id>
   </country>
   <country code="ar" default="America/Argentina/Buenos_Aires" defaultBoost="y" everutc="n">
-   <id>America/Argentina/Buenos_Aires</id>
-   <id notafter="687931200000">America/Argentina/Cordoba</id>
-   <id notafter="1237082400000">America/Argentina/Mendoza</id>
-   <id notafter="1087099200000">America/Argentina/Tucuman</id>
-   <id notafter="1096171200000">America/Argentina/Salta</id>
-   <id notafter="1090728000000">America/Argentina/San_Juan</id>
-   <id notafter="687931200000">America/Argentina/Jujuy</id>
-   <id notafter="1087704000000">America/Argentina/Catamarca</id>
-   <id notafter="687931200000">America/Argentina/La_Rioja</id>
-   <id notafter="673588800000">America/Argentina/Rio_Gallegos</id>
-   <id notafter="1087704000000">America/Argentina/Ushuaia</id>
+   <id alts="America/Buenos_Aires">America/Argentina/Buenos_Aires</id>
+   <id notafter="687931200000" repl="America/Argentina/Buenos_Aires" alts="America/Cordoba,America/Rosario">America/Argentina/Cordoba</id>
+   <id notafter="1237082400000" repl="America/Argentina/Buenos_Aires" alts="America/Mendoza">America/Argentina/Mendoza</id>
+   <id notafter="1087099200000" repl="America/Argentina/Buenos_Aires">America/Argentina/Tucuman</id>
+   <id notafter="1096171200000" repl="America/Argentina/Buenos_Aires">America/Argentina/Salta</id>
+   <id notafter="1090728000000" repl="America/Argentina/Buenos_Aires">America/Argentina/San_Juan</id>
+   <id notafter="687931200000" repl="America/Argentina/Buenos_Aires" alts="America/Jujuy">America/Argentina/Jujuy</id>
+   <id notafter="1087704000000" repl="America/Argentina/Buenos_Aires" alts="America/Argentina/ComodRivadavia,America/Catamarca">America/Argentina/Catamarca</id>
+   <id notafter="687931200000" repl="America/Argentina/Buenos_Aires">America/Argentina/La_Rioja</id>
+   <id notafter="673588800000" repl="America/Argentina/Buenos_Aires">America/Argentina/Rio_Gallegos</id>
+   <id notafter="1087704000000" repl="America/Argentina/Buenos_Aires">America/Argentina/Ushuaia</id>
    <id>America/Argentina/San_Luis</id>
   </country>
   <country code="as" default="Pacific/Pago_Pago" everutc="n">
-   <id>Pacific/Pago_Pago</id>
+   <id alts="Pacific/Samoa,US/Samoa">Pacific/Pago_Pago</id>
   </country>
   <country code="at" default="Europe/Vienna" everutc="n">
    <id>Europe/Vienna</id>
   </country>
   <country code="au" default="Australia/Sydney" everutc="n">
-   <id>Australia/Sydney</id>
-   <id notafter="796147200000">Australia/Melbourne</id>
-   <id notafter="1193500800000">Australia/Hobart</id>
-   <id notafter="37728000000">Australia/Currie</id>
-   <id>Australia/Brisbane</id>
-   <id notafter="762883200000">Australia/Lindeman</id>
+   <id alts="Australia/ACT,Australia/Canberra,Australia/NSW">Australia/Sydney</id>
+   <id notafter="796147200000" repl="Australia/Sydney" alts="Australia/Victoria">Australia/Melbourne</id>
+   <id notafter="1193500800000" repl="Australia/Sydney" alts="Australia/Tasmania">Australia/Hobart</id>
+   <id notafter="37728000000" repl="Australia/Sydney">Australia/Currie</id>
+   <id alts="Australia/Queensland">Australia/Brisbane</id>
+   <id notafter="762883200000" repl="Australia/Brisbane">Australia/Lindeman</id>
    <id>Antarctica/Macquarie</id>
-   <id>Australia/Lord_Howe</id>
-   <id>Australia/Adelaide</id>
-   <id notafter="796149000000">Australia/Broken_Hill</id>
-   <id>Australia/Darwin</id>
-   <id>Australia/Perth</id>
+   <id alts="Australia/LHI">Australia/Lord_Howe</id>
+   <id alts="Australia/South">Australia/Adelaide</id>
+   <id notafter="796149000000" repl="Australia/Adelaide" alts="Australia/Yancowinna">Australia/Broken_Hill</id>
+   <id alts="Australia/North">Australia/Darwin</id>
+   <id alts="Australia/West">Australia/Perth</id>
    <id>Australia/Eucla</id>
   </country>
   <country code="aw" default="America/Aruba" everutc="n">
@@ -91,7 +91,7 @@
    <id>America/Barbados</id>
   </country>
   <country code="bd" default="Asia/Dhaka" everutc="n">
-   <id>Asia/Dhaka</id>
+   <id alts="Asia/Dacca">Asia/Dhaka</id>
   </country>
   <country code="be" default="Europe/Brussels" everutc="n">
    <id>Europe/Brussels</id>
@@ -127,28 +127,28 @@
    <id>America/Kralendijk</id>
   </country>
   <country code="br" default="America/Noronha" everutc="n">
-   <id>America/Noronha</id>
-   <id>America/Sao_Paulo</id>
-   <id notafter="1550368800000">America/Bahia</id>
-   <id notafter="1214280000000">America/Santarem</id>
-   <id notafter="1330221600000">America/Recife</id>
-   <id notafter="972180000000">America/Fortaleza</id>
-   <id notafter="1013911200000">America/Belem</id>
-   <id notafter="824004000000">America/Maceio</id>
-   <id notafter="1361066400000">America/Araguaina</id>
-   <id>America/Manaus</id>
-   <id notafter="1550372400000">America/Cuiaba</id>
-   <id notafter="1076814000000">America/Campo_Grande</id>
-   <id notafter="761713200000">America/Porto_Velho</id>
-   <id notafter="971578800000">America/Boa_Vista</id>
-   <id>America/Rio_Branco</id>
-   <id notafter="761716800000">America/Eirunepe</id>
+   <id alts="Brazil/DeNoronha">America/Noronha</id>
+   <id alts="Brazil/East">America/Sao_Paulo</id>
+   <id notafter="1550368800000" repl="America/Sao_Paulo">America/Bahia</id>
+   <id notafter="1214280000000" repl="America/Sao_Paulo">America/Santarem</id>
+   <id notafter="1330221600000" repl="America/Sao_Paulo">America/Recife</id>
+   <id notafter="972180000000" repl="America/Sao_Paulo">America/Fortaleza</id>
+   <id notafter="1013911200000" repl="America/Sao_Paulo">America/Belem</id>
+   <id notafter="824004000000" repl="America/Sao_Paulo">America/Maceio</id>
+   <id notafter="1361066400000" repl="America/Sao_Paulo">America/Araguaina</id>
+   <id alts="Brazil/West">America/Manaus</id>
+   <id notafter="1550372400000" repl="America/Manaus">America/Cuiaba</id>
+   <id notafter="1076814000000" repl="America/Manaus">America/Campo_Grande</id>
+   <id notafter="761713200000" repl="America/Manaus">America/Porto_Velho</id>
+   <id notafter="971578800000" repl="America/Manaus">America/Boa_Vista</id>
+   <id alts="America/Porto_Acre,Brazil/Acre">America/Rio_Branco</id>
+   <id notafter="761716800000" repl="America/Rio_Branco">America/Eirunepe</id>
   </country>
   <country code="bs" default="America/Nassau" everutc="n">
    <id>America/Nassau</id>
   </country>
   <country code="bt" default="Asia/Thimphu" everutc="n">
-   <id>Asia/Thimphu</id>
+   <id alts="Asia/Thimbu">Asia/Thimphu</id>
   </country>
   <country code="bw" default="Africa/Gaborone" everutc="n">
    <id>Africa/Gaborone</id>
@@ -160,34 +160,34 @@
    <id>America/Belize</id>
   </country>
   <country code="ca" default="America/Toronto" everutc="n">
-   <id>America/Toronto</id>
-   <id>America/Vancouver</id>
-   <id>America/Edmonton</id>
-   <id>America/Winnipeg</id>
-   <id>America/Halifax</id>
-   <id>America/St_Johns</id>
-   <id notafter="1162098000000">America/Moncton</id>
-   <id notafter="57733200000">America/Glace_Bay</id>
-   <id notafter="1299996000000">America/Goose_Bay</id>
+   <id alts="America/Montreal,Canada/Eastern">America/Toronto</id>
+   <id alts="Canada/Pacific">America/Vancouver</id>
+   <id alts="Canada/Mountain">America/Edmonton</id>
+   <id alts="Canada/Central">America/Winnipeg</id>
+   <id alts="Canada/Atlantic">America/Halifax</id>
+   <id alts="Canada/Newfoundland">America/St_Johns</id>
+   <id notafter="1162098000000" repl="America/Halifax">America/Moncton</id>
+   <id notafter="57733200000" repl="America/Halifax">America/Glace_Bay</id>
+   <id notafter="1299996000000" repl="America/Halifax">America/Goose_Bay</id>
    <id>America/Blanc-Sablon</id>
-   <id notafter="120636000000">America/Thunder_Bay</id>
-   <id notafter="972802800000">America/Iqaluit</id>
-   <id notafter="89186400000">America/Nipigon</id>
-   <id notafter="796806000000">America/Pangnirtung</id>
-   <id>America/Atikokan</id>
-   <id>America/Regina</id>
-   <id notafter="73472400000">America/Swift_Current</id>
-   <id notafter="1130659200000">America/Rankin_Inlet</id>
-   <id notafter="986112000000">America/Rainy_River</id>
-   <id notafter="1173600000000">America/Resolute</id>
-   <id notafter="309945600000">America/Yellowknife</id>
-   <id notafter="1583661600000">America/Dawson_Creek</id>
-   <id notafter="84013200000">America/Creston</id>
-   <id notafter="1425808800000">America/Fort_Nelson</id>
-   <id notafter="294228000000">America/Inuvik</id>
-   <id notafter="986115600000">America/Cambridge_Bay</id>
-   <id notafter="120646800000">America/Dawson</id>
-   <id>America/Whitehorse</id>
+   <id notafter="120636000000" repl="America/Toronto">America/Thunder_Bay</id>
+   <id notafter="972802800000" repl="America/Toronto">America/Iqaluit</id>
+   <id notafter="89186400000" repl="America/Toronto">America/Nipigon</id>
+   <id notafter="796806000000" repl="America/Toronto">America/Pangnirtung</id>
+   <id alts="America/Coral_Harbour">America/Atikokan</id>
+   <id alts="Canada/Saskatchewan">America/Regina</id>
+   <id notafter="73472400000" repl="America/Winnipeg">America/Swift_Current</id>
+   <id notafter="1130659200000" repl="America/Winnipeg">America/Rankin_Inlet</id>
+   <id notafter="986112000000" repl="America/Winnipeg">America/Rainy_River</id>
+   <id notafter="1173600000000" repl="America/Winnipeg">America/Resolute</id>
+   <id notafter="309945600000" repl="America/Edmonton">America/Yellowknife</id>
+   <id notafter="1583661600000" repl="America/Edmonton">America/Dawson_Creek</id>
+   <id notafter="84013200000" repl="America/Edmonton">America/Creston</id>
+   <id notafter="1425808800000" repl="America/Edmonton">America/Fort_Nelson</id>
+   <id notafter="294228000000" repl="America/Edmonton">America/Inuvik</id>
+   <id notafter="986115600000" repl="America/Edmonton">America/Cambridge_Bay</id>
+   <id notafter="120646800000" repl="America/Edmonton">America/Dawson</id>
+   <id alts="Canada/Yukon">America/Whitehorse</id>
   </country>
   <country code="cc" default="Indian/Cocos" everutc="n">
    <id>Indian/Cocos</id>
@@ -206,22 +206,22 @@
    <id>Europe/Zurich</id>
   </country>
   <country code="ci" default="Africa/Abidjan" everutc="y">
-   <id>Africa/Abidjan</id>
+   <id alts="Africa/Timbuktu">Africa/Abidjan</id>
   </country>
   <country code="ck" default="Pacific/Rarotonga" everutc="n">
    <id>Pacific/Rarotonga</id>
   </country>
   <country code="cl" default="America/Santiago" everutc="n">
    <id>America/Punta_Arenas</id>
-   <id>America/Santiago</id>
-   <id>Pacific/Easter</id>
+   <id alts="Chile/Continental">America/Santiago</id>
+   <id alts="Chile/EasterIsland">Pacific/Easter</id>
   </country>
   <country code="cm" default="Africa/Douala" everutc="n">
    <id>Africa/Douala</id>
   </country>
   <country code="cn" default="Asia/Shanghai" defaultBoost="y" everutc="n">
-   <id>Asia/Shanghai</id>
-   <id>Asia/Urumqi</id>
+   <id alts="Asia/Chongqing,Asia/Chungking,Asia/Harbin,PRC">Asia/Shanghai</id>
+   <id alts="Asia/Kashgar">Asia/Urumqi</id>
   </country>
   <country code="co" default="America/Bogota" everutc="n">
    <id>America/Bogota</id>
@@ -230,7 +230,7 @@
    <id>America/Costa_Rica</id>
   </country>
   <country code="cu" default="America/Havana" everutc="n">
-   <id>America/Havana</id>
+   <id alts="Cuba">America/Havana</id>
   </country>
   <country code="cv" default="Atlantic/Cape_Verde" everutc="n">
    <id>Atlantic/Cape_Verde</id>
@@ -250,7 +250,7 @@
   </country>
   <country code="de" default="Europe/Berlin" everutc="n">
    <id>Europe/Berlin</id>
-   <id notafter="338950800000">Europe/Busingen</id>
+   <id notafter="338950800000" repl="Europe/Berlin">Europe/Busingen</id>
   </country>
   <country code="dj" default="Africa/Djibouti" everutc="n">
    <id>Africa/Djibouti</id>
@@ -275,7 +275,7 @@
    <id>Europe/Tallinn</id>
   </country>
   <country code="eg" default="Africa/Cairo" everutc="n">
-   <id>Africa/Cairo</id>
+   <id alts="Egypt">Africa/Cairo</id>
   </country>
   <country code="eh" default="Africa/El_Aaiun" everutc="y">
    <id>Africa/El_Aaiun</id>
@@ -285,7 +285,7 @@
   </country>
   <country code="es" default="Europe/Madrid" everutc="y">
    <id>Europe/Madrid</id>
-   <id notafter="496803600000">Africa/Ceuta</id>
+   <id notafter="496803600000" repl="Europe/Madrid">Africa/Ceuta</id>
    <id>Atlantic/Canary</id>
   </country>
   <country code="et" default="Africa/Addis_Ababa" everutc="n">
@@ -301,12 +301,12 @@
    <id>Atlantic/Stanley</id>
   </country>
   <country code="fm" default="Pacific/Pohnpei" everutc="n">
-   <id>Pacific/Pohnpei</id>
+   <id alts="Pacific/Ponape">Pacific/Pohnpei</id>
    <id>Pacific/Kosrae</id>
-   <id>Pacific/Chuuk</id>
+   <id alts="Pacific/Truk,Pacific/Yap">Pacific/Chuuk</id>
   </country>
   <country code="fo" default="Atlantic/Faroe" everutc="y">
-   <id>Atlantic/Faroe</id>
+   <id alts="Atlantic/Faeroe">Atlantic/Faroe</id>
   </country>
   <country code="fr" default="Europe/Paris" everutc="n">
    <id>Europe/Paris</id>
@@ -315,7 +315,7 @@
    <id>Africa/Libreville</id>
   </country>
   <country code="gb" default="Europe/London" everutc="y">
-   <id>Europe/London</id>
+   <id alts="Europe/Belfast,GB,GB-Eire">Europe/London</id>
   </country>
   <country code="gd" default="America/Grenada" everutc="n">
    <id>America/Grenada</id>
@@ -338,7 +338,7 @@
   <country code="gl" default="America/Nuuk" everutc="y">
    <id>America/Danmarkshavn</id>
    <id>America/Scoresbysund</id>
-   <id>America/Nuuk</id>
+   <id alts="America/Godthab">America/Nuuk</id>
    <id>America/Thule</id>
   </country>
   <country code="gm" default="Africa/Banjul" everutc="y">
@@ -372,7 +372,7 @@
    <id>America/Guyana</id>
   </country>
   <country code="hk" default="Asia/Hong_Kong" everutc="n">
-   <id>Asia/Hong_Kong</id>
+   <id alts="Hongkong">Asia/Hong_Kong</id>
   </country>
   <country code="hn" default="America/Tegucigalpa" everutc="n">
    <id>America/Tegucigalpa</id>
@@ -388,21 +388,21 @@
   </country>
   <country code="id" default="Asia/Jakarta" everutc="n">
    <id>Asia/Jayapura</id>
-   <id>Asia/Makassar</id>
+   <id alts="Asia/Ujung_Pandang">Asia/Makassar</id>
    <id>Asia/Jakarta</id>
-   <id notafter="567964800000">Asia/Pontianak</id>
+   <id notafter="567964800000" repl="Asia/Jakarta">Asia/Pontianak</id>
   </country>
   <country code="ie" default="Europe/Dublin" everutc="y">
-   <id>Europe/Dublin</id>
+   <id alts="Eire">Europe/Dublin</id>
   </country>
   <country code="il" default="Asia/Jerusalem" everutc="n">
-   <id>Asia/Jerusalem</id>
+   <id alts="Asia/Tel_Aviv,Israel">Asia/Jerusalem</id>
   </country>
   <country code="im" default="Europe/Isle_of_Man" everutc="y">
    <id>Europe/Isle_of_Man</id>
   </country>
   <country code="in" default="Asia/Kolkata" everutc="n">
-   <id>Asia/Kolkata</id>
+   <id alts="Asia/Calcutta">Asia/Kolkata</id>
   </country>
   <country code="io" default="Indian/Chagos" everutc="n">
    <id>Indian/Chagos</id>
@@ -411,10 +411,10 @@
    <id>Asia/Baghdad</id>
   </country>
   <country code="ir" default="Asia/Tehran" everutc="n">
-   <id>Asia/Tehran</id>
+   <id alts="Iran">Asia/Tehran</id>
   </country>
   <country code="is" default="Atlantic/Reykjavik" everutc="y">
-   <id>Atlantic/Reykjavik</id>
+   <id alts="Iceland">Atlantic/Reykjavik</id>
   </country>
   <country code="it" default="Europe/Rome" everutc="n">
    <id>Europe/Rome</id>
@@ -423,16 +423,16 @@
    <id>Europe/Jersey</id>
   </country>
   <country code="jm" default="America/Jamaica" everutc="n">
-   <id>America/Jamaica</id>
+   <id alts="Jamaica">America/Jamaica</id>
   </country>
   <country code="jo" default="Asia/Amman" everutc="n">
    <id>Asia/Amman</id>
   </country>
   <country code="jp" default="Asia/Tokyo" everutc="n">
-   <id>Asia/Tokyo</id>
+   <id alts="Japan">Asia/Tokyo</id>
   </country>
   <country code="ke" default="Africa/Nairobi" everutc="n">
-   <id>Africa/Nairobi</id>
+   <id alts="Africa/Asmera">Africa/Nairobi</id>
   </country>
   <country code="kg" default="Asia/Bishkek" everutc="n">
    <id>Asia/Bishkek</id>
@@ -455,7 +455,7 @@
    <id>Asia/Pyongyang</id>
   </country>
   <country code="kr" default="Asia/Seoul" everutc="n">
-   <id>Asia/Seoul</id>
+   <id alts="ROK">Asia/Seoul</id>
   </country>
   <country code="kw" default="Asia/Kuwait" everutc="n">
    <id>Asia/Kuwait</id>
@@ -465,12 +465,12 @@
   </country>
   <country code="kz" default="Asia/Almaty" everutc="n">
    <id>Asia/Almaty</id>
-   <id notafter="1099170000000">Asia/Qostanay</id>
+   <id notafter="1099170000000" repl="Asia/Almaty">Asia/Qostanay</id>
    <id>Asia/Oral</id>
-   <id notafter="1099173600000">Asia/Aqtau</id>
-   <id notafter="1545328800000">Asia/Qyzylorda</id>
-   <id notafter="1545328800000">Asia/Aqtobe</id>
-   <id notafter="922572000000">Asia/Atyrau</id>
+   <id notafter="1099173600000" repl="Asia/Oral">Asia/Aqtau</id>
+   <id notafter="1545328800000" repl="Asia/Oral">Asia/Qyzylorda</id>
+   <id notafter="1545328800000" repl="Asia/Oral">Asia/Aqtobe</id>
+   <id notafter="922572000000" repl="Asia/Oral">Asia/Atyrau</id>
   </country>
   <country code="la" default="Asia/Vientiane" everutc="n">
    <id>Asia/Vientiane</id>
@@ -503,7 +503,7 @@
    <id>Europe/Riga</id>
   </country>
   <country code="ly" default="Africa/Tripoli" everutc="n">
-   <id>Africa/Tripoli</id>
+   <id alts="Libya">Africa/Tripoli</id>
   </country>
   <country code="ma" default="Africa/Casablanca" everutc="y">
    <id>Africa/Casablanca</id>
@@ -512,7 +512,7 @@
    <id>Europe/Monaco</id>
   </country>
   <country code="md" default="Europe/Chisinau" everutc="n">
-   <id>Europe/Chisinau</id>
+   <id alts="Europe/Tiraspol">Europe/Chisinau</id>
   </country>
   <country code="me" default="Europe/Podgorica" everutc="n">
    <id>Europe/Podgorica</id>
@@ -525,7 +525,7 @@
   </country>
   <country code="mh" default="Pacific/Majuro" everutc="n">
    <id>Pacific/Majuro</id>
-   <id notafter="745934400000">Pacific/Kwajalein</id>
+   <id notafter="745934400000" repl="Pacific/Majuro" alts="Kwajalein">Pacific/Kwajalein</id>
   </country>
   <country code="mk" default="Europe/Skopje" everutc="n">
    <id>Europe/Skopje</id>
@@ -534,15 +534,15 @@
    <id>Africa/Bamako</id>
   </country>
   <country code="mm" default="Asia/Yangon" everutc="n">
-   <id>Asia/Yangon</id>
+   <id alts="Asia/Rangoon">Asia/Yangon</id>
   </country>
   <country code="mn" default="Asia/Ulaanbaatar" everutc="n">
    <id>Asia/Choibalsan</id>
-   <id>Asia/Ulaanbaatar</id>
+   <id alts="Asia/Ulan_Bator">Asia/Ulaanbaatar</id>
    <id>Asia/Hovd</id>
   </country>
   <country code="mo" default="Asia/Macau" everutc="n">
-   <id>Asia/Macau</id>
+   <id alts="Asia/Macao">Asia/Macau</id>
   </country>
   <country code="mp" default="Pacific/Saipan" everutc="n">
    <id>Pacific/Saipan</id>
@@ -569,21 +569,21 @@
    <id>Africa/Blantyre</id>
   </country>
   <country code="mx" default="America/Mexico_City" everutc="n">
-   <id>America/Mexico_City</id>
-   <id notafter="407653200000">America/Merida</id>
-   <id notafter="594198000000">America/Monterrey</id>
-   <id notafter="1270371600000">America/Bahia_Banderas</id>
+   <id alts="Mexico/General">America/Mexico_City</id>
+   <id notafter="407653200000" repl="America/Mexico_City">America/Merida</id>
+   <id notafter="594198000000" repl="America/Mexico_City">America/Monterrey</id>
+   <id notafter="1270371600000" repl="America/Mexico_City">America/Bahia_Banderas</id>
    <id>America/Matamoros</id>
    <id>America/Cancun</id>
    <id>America/Chihuahua</id>
-   <id notafter="891766800000">America/Mazatlan</id>
+   <id notafter="891766800000" repl="America/Chihuahua" alts="Mexico/BajaSur">America/Mazatlan</id>
    <id>America/Hermosillo</id>
    <id>America/Ojinaga</id>
-   <id>America/Tijuana</id>
+   <id alts="America/Ensenada,America/Santa_Isabel,Mexico/BajaNorte">America/Tijuana</id>
   </country>
   <country code="my" default="Asia/Kuala_Lumpur" everutc="n">
    <id>Asia/Kuala_Lumpur</id>
-   <id notafter="378664200000">Asia/Kuching</id>
+   <id notafter="378664200000" repl="Asia/Kuala_Lumpur">Asia/Kuching</id>
   </country>
   <country code="mz" default="Africa/Maputo" everutc="n">
    <id>Africa/Maputo</id>
@@ -610,10 +610,10 @@
    <id>Europe/Amsterdam</id>
   </country>
   <country code="no" default="Europe/Oslo" everutc="n">
-   <id>Europe/Oslo</id>
+   <id alts="Atlantic/Jan_Mayen">Europe/Oslo</id>
   </country>
   <country code="np" default="Asia/Kathmandu" everutc="n">
-   <id>Asia/Kathmandu</id>
+   <id alts="Asia/Katmandu">Asia/Kathmandu</id>
   </country>
   <country code="nr" default="Pacific/Nauru" everutc="n">
    <id>Pacific/Nauru</id>
@@ -622,8 +622,8 @@
    <id>Pacific/Niue</id>
   </country>
   <country code="nz" default="Pacific/Auckland" defaultBoost="y" everutc="n">
-   <id>Pacific/Auckland</id>
-   <id>Pacific/Chatham</id>
+   <id alts="Antarctica/South_Pole,NZ">Pacific/Auckland</id>
+   <id alts="NZ-CHAT">Pacific/Chatham</id>
   </country>
   <country code="om" default="Asia/Muscat" everutc="n">
    <id>Asia/Muscat</id>
@@ -650,7 +650,7 @@
    <id>Asia/Karachi</id>
   </country>
   <country code="pl" default="Europe/Warsaw" everutc="n">
-   <id>Europe/Warsaw</id>
+   <id alts="Poland">Europe/Warsaw</id>
   </country>
   <country code="pm" default="America/Miquelon" everutc="n">
    <id>America/Miquelon</id>
@@ -663,11 +663,11 @@
   </country>
   <country code="ps" default="Asia/Gaza" everutc="n">
    <id>Asia/Hebron</id>
-   <id notafter="1317330000000">Asia/Gaza</id>
+   <id notafter="1317330000000" repl="Asia/Hebron">Asia/Gaza</id>
   </country>
   <country code="pt" default="Europe/Lisbon" everutc="y">
-   <id>Europe/Lisbon</id>
-   <id notafter="828234000000">Atlantic/Madeira</id>
+   <id alts="Portugal">Europe/Lisbon</id>
+   <id notafter="828234000000" repl="Europe/Lisbon">Atlantic/Madeira</id>
    <id>Atlantic/Azores</id>
   </country>
   <country code="pw" default="Pacific/Palau" everutc="n">
@@ -695,24 +695,24 @@
    <id>Asia/Sakhalin</id>
    <id>Asia/Srednekolymsk</id>
    <id>Asia/Vladivostok</id>
-   <id notafter="1315828800000">Asia/Ust-Nera</id>
+   <id notafter="1315828800000" repl="Asia/Vladivostok">Asia/Ust-Nera</id>
    <id>Asia/Chita</id>
-   <id notafter="1459015200000">Asia/Yakutsk</id>
-   <id notafter="1315832400000">Asia/Khandyga</id>
+   <id notafter="1459015200000" repl="Asia/Chita">Asia/Yakutsk</id>
+   <id notafter="1315832400000" repl="Asia/Chita">Asia/Khandyga</id>
    <id>Asia/Irkutsk</id>
    <id>Asia/Krasnoyarsk</id>
-   <id notafter="1459022400000">Asia/Novokuznetsk</id>
+   <id notafter="1459022400000" repl="Asia/Krasnoyarsk">Asia/Novokuznetsk</id>
    <id>Asia/Novosibirsk</id>
    <id>Asia/Barnaul</id>
-   <id notafter="1464465600000">Asia/Tomsk</id>
+   <id notafter="1464465600000" repl="Asia/Barnaul">Asia/Tomsk</id>
    <id>Asia/Omsk</id>
    <id>Asia/Yekaterinburg</id>
    <id>Europe/Samara</id>
    <id>Europe/Saratov</id>
-   <id notafter="1480806000000">Europe/Ulyanovsk</id>
-   <id notafter="701823600000">Europe/Astrakhan</id>
+   <id notafter="1480806000000" repl="Europe/Saratov">Europe/Ulyanovsk</id>
+   <id notafter="701823600000" repl="Europe/Saratov">Europe/Astrakhan</id>
    <id>Europe/Volgograd</id>
-   <id>Europe/Moscow</id>
+   <id alts="W-SU">Europe/Moscow</id>
    <id>Europe/Kirov</id>
    <id>Europe/Kaliningrad</id>
   </country>
@@ -735,7 +735,7 @@
    <id>Europe/Stockholm</id>
   </country>
   <country code="sg" default="Asia/Singapore" everutc="n">
-   <id>Asia/Singapore</id>
+   <id alts="Singapore">Asia/Singapore</id>
   </country>
   <country code="sh" default="Atlantic/St_Helena" everutc="y">
    <id>Atlantic/St_Helena</id>
@@ -807,7 +807,7 @@
    <id>Asia/Dili</id>
   </country>
   <country code="tm" default="Asia/Ashgabat" everutc="n">
-   <id>Asia/Ashgabat</id>
+   <id alts="Asia/Ashkhabad">Asia/Ashgabat</id>
   </country>
   <country code="tn" default="Africa/Tunis" everutc="n">
    <id>Africa/Tunis</id>
@@ -816,24 +816,24 @@
    <id>Pacific/Tongatapu</id>
   </country>
   <country code="tr" default="Europe/Istanbul" everutc="n">
-   <id>Europe/Istanbul</id>
+   <id alts="Turkey">Europe/Istanbul</id>
   </country>
   <country code="tt" default="America/Port_of_Spain" everutc="n">
-   <id>America/Port_of_Spain</id>
+   <id alts="America/Virgin">America/Port_of_Spain</id>
   </country>
   <country code="tv" default="Pacific/Funafuti" everutc="n">
    <id>Pacific/Funafuti</id>
   </country>
   <country code="tw" default="Asia/Taipei" everutc="n">
-   <id>Asia/Taipei</id>
+   <id alts="ROC">Asia/Taipei</id>
   </country>
   <country code="tz" default="Africa/Dar_es_Salaam" everutc="n">
    <id>Africa/Dar_es_Salaam</id>
   </country>
   <country code="ua" default="Europe/Kiev" everutc="n">
    <id>Europe/Kiev</id>
-   <id notafter="686102400000">Europe/Zaporozhye</id>
-   <id notafter="686091600000">Europe/Uzhgorod</id>
+   <id notafter="686102400000" repl="Europe/Kiev">Europe/Zaporozhye</id>
+   <id notafter="686091600000" repl="Europe/Kiev">Europe/Uzhgorod</id>
    <id picker="n">Europe/Simferopol</id>
   </country>
   <country code="ug" default="Africa/Kampala" everutc="n">
@@ -844,42 +844,42 @@
    <id>Pacific/Midway</id>
   </country>
   <country code="us" default="America/New_York" everutc="n">
-   <id>America/New_York</id>
-   <id notafter="152089200000">America/Kentucky/Louisville</id>
-   <id notafter="167814000000">America/Detroit</id>
-   <id notafter="1130652000000">America/Indiana/Indianapolis</id>
-   <id notafter="1194159600000">America/Indiana/Vincennes</id>
-   <id notafter="972802800000">America/Kentucky/Monticello</id>
-   <id notafter="247042800000">America/Indiana/Petersburg</id>
-   <id notafter="1173600000000">America/Indiana/Winamac</id>
-   <id notafter="89186400000">America/Indiana/Vevay</id>
-   <id notafter="183535200000">America/Indiana/Marengo</id>
-   <id>America/Chicago</id>
-   <id notafter="104918400000">America/Menominee</id>
-   <id notafter="1143964800000">America/Indiana/Tell_City</id>
-   <id notafter="688546800000">America/Indiana/Knox</id>
-   <id notafter="1289116800000">America/North_Dakota/Beulah</id>
-   <id notafter="1067155200000">America/North_Dakota/New_Salem</id>
-   <id notafter="720000000000">America/North_Dakota/Center</id>
-   <id>America/Denver</id>
-   <id>America/Phoenix</id>
-   <id notafter="129114000000">America/Boise</id>
-   <id>America/Los_Angeles</id>
-   <id>America/Anchorage</id>
-   <id notafter="436359600000">America/Juneau</id>
-   <id notafter="341402400000">America/Sitka</id>
-   <id notafter="436363200000">America/Nome</id>
-   <id notafter="1547978400000">America/Metlakatla</id>
-   <id notafter="436356000000">America/Yakutat</id>
-   <id>Pacific/Honolulu</id>
-   <id>America/Adak</id>
+   <id alts="US/Eastern">America/New_York</id>
+   <id notafter="152089200000" repl="America/New_York" alts="America/Louisville">America/Kentucky/Louisville</id>
+   <id notafter="167814000000" repl="America/New_York" alts="US/Michigan">America/Detroit</id>
+   <id notafter="1130652000000" repl="America/New_York" alts="America/Fort_Wayne,America/Indianapolis,US/East-Indiana">America/Indiana/Indianapolis</id>
+   <id notafter="1194159600000" repl="America/New_York">America/Indiana/Vincennes</id>
+   <id notafter="972802800000" repl="America/New_York">America/Kentucky/Monticello</id>
+   <id notafter="247042800000" repl="America/New_York">America/Indiana/Petersburg</id>
+   <id notafter="1173600000000" repl="America/New_York">America/Indiana/Winamac</id>
+   <id notafter="89186400000" repl="America/New_York">America/Indiana/Vevay</id>
+   <id notafter="183535200000" repl="America/New_York">America/Indiana/Marengo</id>
+   <id alts="US/Central">America/Chicago</id>
+   <id notafter="104918400000" repl="America/Chicago">America/Menominee</id>
+   <id notafter="1143964800000" repl="America/Chicago">America/Indiana/Tell_City</id>
+   <id notafter="688546800000" repl="America/Chicago" alts="America/Knox_IN,US/Indiana-Starke">America/Indiana/Knox</id>
+   <id notafter="1289116800000" repl="America/Chicago">America/North_Dakota/Beulah</id>
+   <id notafter="1067155200000" repl="America/Chicago">America/North_Dakota/New_Salem</id>
+   <id notafter="720000000000" repl="America/Chicago">America/North_Dakota/Center</id>
+   <id alts="America/Shiprock,Navajo,US/Mountain">America/Denver</id>
+   <id alts="US/Arizona">America/Phoenix</id>
+   <id notafter="129114000000" repl="America/Phoenix">America/Boise</id>
+   <id alts="US/Pacific">America/Los_Angeles</id>
+   <id alts="US/Alaska">America/Anchorage</id>
+   <id notafter="436359600000" repl="America/Anchorage">America/Juneau</id>
+   <id notafter="341402400000" repl="America/Anchorage">America/Sitka</id>
+   <id notafter="436363200000" repl="America/Anchorage">America/Nome</id>
+   <id notafter="1547978400000" repl="America/Anchorage">America/Metlakatla</id>
+   <id notafter="436356000000" repl="America/Anchorage">America/Yakutat</id>
+   <id alts="Pacific/Johnston,US/Hawaii">Pacific/Honolulu</id>
+   <id alts="America/Atka,US/Aleutian">America/Adak</id>
   </country>
   <country code="uy" default="America/Montevideo" everutc="n">
    <id>America/Montevideo</id>
   </country>
   <country code="uz" default="Asia/Tashkent" everutc="n">
    <id>Asia/Tashkent</id>
-   <id notafter="670366800000">Asia/Samarkand</id>
+   <id notafter="670366800000" repl="Asia/Tashkent">Asia/Samarkand</id>
   </country>
   <country code="va" default="Europe/Vatican" everutc="n">
    <id>Europe/Vatican</id>
@@ -897,7 +897,7 @@
    <id>America/St_Thomas</id>
   </country>
   <country code="vn" default="Asia/Ho_Chi_Minh" everutc="n">
-   <id>Asia/Ho_Chi_Minh</id>
+   <id alts="Asia/Saigon">Asia/Ho_Chi_Minh</id>
   </country>
   <country code="vu" default="Pacific/Efate" everutc="n">
    <id>Pacific/Efate</id>
diff --git a/testing/data/test2/output_data/distro/distro.zip b/testing/data/test2/output_data/distro/distro.zip
index 4a9da2a..f3362ae 100644
--- a/testing/data/test2/output_data/distro/distro.zip
+++ b/testing/data/test2/output_data/distro/distro.zip
Binary files differ
diff --git a/testing/data/test3/output_data/android/tzlookup.xml b/testing/data/test3/output_data/android/tzlookup.xml
index 6297544..8906877 100644
--- a/testing/data/test3/output_data/android/tzlookup.xml
+++ b/testing/data/test3/output_data/android/tzlookup.xml
@@ -41,38 +41,38 @@
    <id>Antarctica/Palmer</id>
   </country>
   <country code="ar" default="America/Argentina/Buenos_Aires" defaultBoost="y" everutc="n">
-   <id>America/Argentina/Buenos_Aires</id>
-   <id notafter="687931200000">America/Argentina/Cordoba</id>
-   <id notafter="1237082400000">America/Argentina/Mendoza</id>
-   <id notafter="1087099200000">America/Argentina/Tucuman</id>
-   <id notafter="1096171200000">America/Argentina/Salta</id>
-   <id notafter="1090728000000">America/Argentina/San_Juan</id>
-   <id notafter="687931200000">America/Argentina/Jujuy</id>
-   <id notafter="1087704000000">America/Argentina/Catamarca</id>
-   <id notafter="687931200000">America/Argentina/La_Rioja</id>
-   <id notafter="673588800000">America/Argentina/Rio_Gallegos</id>
-   <id notafter="1087704000000">America/Argentina/Ushuaia</id>
+   <id alts="America/Buenos_Aires">America/Argentina/Buenos_Aires</id>
+   <id notafter="687931200000" repl="America/Argentina/Buenos_Aires" alts="America/Cordoba,America/Rosario">America/Argentina/Cordoba</id>
+   <id notafter="1237082400000" repl="America/Argentina/Buenos_Aires" alts="America/Mendoza">America/Argentina/Mendoza</id>
+   <id notafter="1087099200000" repl="America/Argentina/Buenos_Aires">America/Argentina/Tucuman</id>
+   <id notafter="1096171200000" repl="America/Argentina/Buenos_Aires">America/Argentina/Salta</id>
+   <id notafter="1090728000000" repl="America/Argentina/Buenos_Aires">America/Argentina/San_Juan</id>
+   <id notafter="687931200000" repl="America/Argentina/Buenos_Aires" alts="America/Jujuy">America/Argentina/Jujuy</id>
+   <id notafter="1087704000000" repl="America/Argentina/Buenos_Aires" alts="America/Argentina/ComodRivadavia,America/Catamarca">America/Argentina/Catamarca</id>
+   <id notafter="687931200000" repl="America/Argentina/Buenos_Aires">America/Argentina/La_Rioja</id>
+   <id notafter="673588800000" repl="America/Argentina/Buenos_Aires">America/Argentina/Rio_Gallegos</id>
+   <id notafter="1087704000000" repl="America/Argentina/Buenos_Aires">America/Argentina/Ushuaia</id>
    <id>America/Argentina/San_Luis</id>
   </country>
   <country code="as" default="Pacific/Pago_Pago" everutc="n">
-   <id>Pacific/Pago_Pago</id>
+   <id alts="Pacific/Samoa,US/Samoa">Pacific/Pago_Pago</id>
   </country>
   <country code="at" default="Europe/Vienna" everutc="n">
    <id>Europe/Vienna</id>
   </country>
   <country code="au" default="Australia/Sydney" everutc="n">
-   <id>Australia/Sydney</id>
-   <id notafter="796147200000">Australia/Melbourne</id>
-   <id notafter="1193500800000">Australia/Hobart</id>
-   <id notafter="37728000000">Australia/Currie</id>
-   <id>Australia/Brisbane</id>
-   <id notafter="762883200000">Australia/Lindeman</id>
+   <id alts="Australia/ACT,Australia/Canberra,Australia/NSW">Australia/Sydney</id>
+   <id notafter="796147200000" repl="Australia/Sydney" alts="Australia/Victoria">Australia/Melbourne</id>
+   <id notafter="1193500800000" repl="Australia/Sydney" alts="Australia/Tasmania">Australia/Hobart</id>
+   <id notafter="37728000000" repl="Australia/Sydney">Australia/Currie</id>
+   <id alts="Australia/Queensland">Australia/Brisbane</id>
+   <id notafter="762883200000" repl="Australia/Brisbane">Australia/Lindeman</id>
    <id>Antarctica/Macquarie</id>
-   <id>Australia/Lord_Howe</id>
-   <id>Australia/Adelaide</id>
-   <id notafter="796149000000">Australia/Broken_Hill</id>
-   <id>Australia/Darwin</id>
-   <id>Australia/Perth</id>
+   <id alts="Australia/LHI">Australia/Lord_Howe</id>
+   <id alts="Australia/South">Australia/Adelaide</id>
+   <id notafter="796149000000" repl="Australia/Adelaide" alts="Australia/Yancowinna">Australia/Broken_Hill</id>
+   <id alts="Australia/North">Australia/Darwin</id>
+   <id alts="Australia/West">Australia/Perth</id>
    <id>Australia/Eucla</id>
   </country>
   <country code="aw" default="America/Aruba" everutc="n">
@@ -91,7 +91,7 @@
    <id>America/Barbados</id>
   </country>
   <country code="bd" default="Asia/Dhaka" everutc="n">
-   <id>Asia/Dhaka</id>
+   <id alts="Asia/Dacca">Asia/Dhaka</id>
   </country>
   <country code="be" default="Europe/Brussels" everutc="n">
    <id>Europe/Brussels</id>
@@ -127,28 +127,28 @@
    <id>America/Kralendijk</id>
   </country>
   <country code="br" default="America/Noronha" everutc="n">
-   <id>America/Noronha</id>
-   <id>America/Sao_Paulo</id>
-   <id notafter="1550368800000">America/Bahia</id>
-   <id notafter="1214280000000">America/Santarem</id>
-   <id notafter="1330221600000">America/Recife</id>
-   <id notafter="972180000000">America/Fortaleza</id>
-   <id notafter="1013911200000">America/Belem</id>
-   <id notafter="824004000000">America/Maceio</id>
-   <id notafter="1361066400000">America/Araguaina</id>
-   <id>America/Manaus</id>
-   <id notafter="1550372400000">America/Cuiaba</id>
-   <id notafter="1076814000000">America/Campo_Grande</id>
-   <id notafter="761713200000">America/Porto_Velho</id>
-   <id notafter="971578800000">America/Boa_Vista</id>
-   <id>America/Rio_Branco</id>
-   <id notafter="761716800000">America/Eirunepe</id>
+   <id alts="Brazil/DeNoronha">America/Noronha</id>
+   <id alts="Brazil/East">America/Sao_Paulo</id>
+   <id notafter="1550368800000" repl="America/Sao_Paulo">America/Bahia</id>
+   <id notafter="1214280000000" repl="America/Sao_Paulo">America/Santarem</id>
+   <id notafter="1330221600000" repl="America/Sao_Paulo">America/Recife</id>
+   <id notafter="972180000000" repl="America/Sao_Paulo">America/Fortaleza</id>
+   <id notafter="1013911200000" repl="America/Sao_Paulo">America/Belem</id>
+   <id notafter="824004000000" repl="America/Sao_Paulo">America/Maceio</id>
+   <id notafter="1361066400000" repl="America/Sao_Paulo">America/Araguaina</id>
+   <id alts="Brazil/West">America/Manaus</id>
+   <id notafter="1550372400000" repl="America/Manaus">America/Cuiaba</id>
+   <id notafter="1076814000000" repl="America/Manaus">America/Campo_Grande</id>
+   <id notafter="761713200000" repl="America/Manaus">America/Porto_Velho</id>
+   <id notafter="971578800000" repl="America/Manaus">America/Boa_Vista</id>
+   <id alts="America/Porto_Acre,Brazil/Acre">America/Rio_Branco</id>
+   <id notafter="761716800000" repl="America/Rio_Branco">America/Eirunepe</id>
   </country>
   <country code="bs" default="America/Nassau" everutc="n">
    <id>America/Nassau</id>
   </country>
   <country code="bt" default="Asia/Thimphu" everutc="n">
-   <id>Asia/Thimphu</id>
+   <id alts="Asia/Thimbu">Asia/Thimphu</id>
   </country>
   <country code="bw" default="Africa/Gaborone" everutc="n">
    <id>Africa/Gaborone</id>
@@ -160,34 +160,34 @@
    <id>America/Belize</id>
   </country>
   <country code="ca" default="America/Toronto" everutc="n">
-   <id>America/Toronto</id>
-   <id>America/Vancouver</id>
-   <id>America/Edmonton</id>
-   <id>America/Winnipeg</id>
-   <id>America/Halifax</id>
-   <id>America/St_Johns</id>
-   <id notafter="1162098000000">America/Moncton</id>
-   <id notafter="57733200000">America/Glace_Bay</id>
-   <id notafter="1299996000000">America/Goose_Bay</id>
+   <id alts="America/Montreal,Canada/Eastern">America/Toronto</id>
+   <id alts="Canada/Pacific">America/Vancouver</id>
+   <id alts="Canada/Mountain">America/Edmonton</id>
+   <id alts="Canada/Central">America/Winnipeg</id>
+   <id alts="Canada/Atlantic">America/Halifax</id>
+   <id alts="Canada/Newfoundland">America/St_Johns</id>
+   <id notafter="1162098000000" repl="America/Halifax">America/Moncton</id>
+   <id notafter="57733200000" repl="America/Halifax">America/Glace_Bay</id>
+   <id notafter="1299996000000" repl="America/Halifax">America/Goose_Bay</id>
    <id>America/Blanc-Sablon</id>
-   <id notafter="120636000000">America/Thunder_Bay</id>
-   <id notafter="972802800000">America/Iqaluit</id>
-   <id notafter="89186400000">America/Nipigon</id>
-   <id notafter="796806000000">America/Pangnirtung</id>
-   <id>America/Atikokan</id>
-   <id>America/Regina</id>
-   <id notafter="73472400000">America/Swift_Current</id>
-   <id notafter="1130659200000">America/Rankin_Inlet</id>
-   <id notafter="986112000000">America/Rainy_River</id>
-   <id notafter="1173600000000">America/Resolute</id>
-   <id notafter="309945600000">America/Yellowknife</id>
-   <id notafter="1583661600000">America/Dawson_Creek</id>
-   <id notafter="84013200000">America/Creston</id>
-   <id notafter="1425808800000">America/Fort_Nelson</id>
-   <id notafter="294228000000">America/Inuvik</id>
-   <id notafter="986115600000">America/Cambridge_Bay</id>
-   <id notafter="120646800000">America/Dawson</id>
-   <id>America/Whitehorse</id>
+   <id notafter="120636000000" repl="America/Toronto">America/Thunder_Bay</id>
+   <id notafter="972802800000" repl="America/Toronto">America/Iqaluit</id>
+   <id notafter="89186400000" repl="America/Toronto">America/Nipigon</id>
+   <id notafter="796806000000" repl="America/Toronto">America/Pangnirtung</id>
+   <id alts="America/Coral_Harbour">America/Atikokan</id>
+   <id alts="Canada/Saskatchewan">America/Regina</id>
+   <id notafter="73472400000" repl="America/Winnipeg">America/Swift_Current</id>
+   <id notafter="1130659200000" repl="America/Winnipeg">America/Rankin_Inlet</id>
+   <id notafter="986112000000" repl="America/Winnipeg">America/Rainy_River</id>
+   <id notafter="1173600000000" repl="America/Winnipeg">America/Resolute</id>
+   <id notafter="309945600000" repl="America/Edmonton">America/Yellowknife</id>
+   <id notafter="1583661600000" repl="America/Edmonton">America/Dawson_Creek</id>
+   <id notafter="84013200000" repl="America/Edmonton">America/Creston</id>
+   <id notafter="1425808800000" repl="America/Edmonton">America/Fort_Nelson</id>
+   <id notafter="294228000000" repl="America/Edmonton">America/Inuvik</id>
+   <id notafter="986115600000" repl="America/Edmonton">America/Cambridge_Bay</id>
+   <id notafter="120646800000" repl="America/Edmonton">America/Dawson</id>
+   <id alts="Canada/Yukon">America/Whitehorse</id>
   </country>
   <country code="cc" default="Indian/Cocos" everutc="n">
    <id>Indian/Cocos</id>
@@ -206,22 +206,22 @@
    <id>Europe/Zurich</id>
   </country>
   <country code="ci" default="Africa/Abidjan" everutc="y">
-   <id>Africa/Abidjan</id>
+   <id alts="Africa/Timbuktu">Africa/Abidjan</id>
   </country>
   <country code="ck" default="Pacific/Rarotonga" everutc="n">
    <id>Pacific/Rarotonga</id>
   </country>
   <country code="cl" default="America/Santiago" everutc="n">
    <id>America/Punta_Arenas</id>
-   <id>America/Santiago</id>
-   <id>Pacific/Easter</id>
+   <id alts="Chile/Continental">America/Santiago</id>
+   <id alts="Chile/EasterIsland">Pacific/Easter</id>
   </country>
   <country code="cm" default="Africa/Douala" everutc="n">
    <id>Africa/Douala</id>
   </country>
   <country code="cn" default="Asia/Shanghai" defaultBoost="y" everutc="n">
-   <id>Asia/Shanghai</id>
-   <id>Asia/Urumqi</id>
+   <id alts="Asia/Chongqing,Asia/Chungking,Asia/Harbin,PRC">Asia/Shanghai</id>
+   <id alts="Asia/Kashgar">Asia/Urumqi</id>
   </country>
   <country code="co" default="America/Bogota" everutc="n">
    <id>America/Bogota</id>
@@ -230,7 +230,7 @@
    <id>America/Costa_Rica</id>
   </country>
   <country code="cu" default="America/Havana" everutc="n">
-   <id>America/Havana</id>
+   <id alts="Cuba">America/Havana</id>
   </country>
   <country code="cv" default="Atlantic/Cape_Verde" everutc="n">
    <id>Atlantic/Cape_Verde</id>
@@ -250,7 +250,7 @@
   </country>
   <country code="de" default="Europe/Berlin" everutc="n">
    <id>Europe/Berlin</id>
-   <id notafter="338950800000">Europe/Busingen</id>
+   <id notafter="338950800000" repl="Europe/Berlin">Europe/Busingen</id>
   </country>
   <country code="dj" default="Africa/Djibouti" everutc="n">
    <id>Africa/Djibouti</id>
@@ -275,7 +275,7 @@
    <id>Europe/Tallinn</id>
   </country>
   <country code="eg" default="Africa/Cairo" everutc="n">
-   <id>Africa/Cairo</id>
+   <id alts="Egypt">Africa/Cairo</id>
   </country>
   <country code="eh" default="Africa/El_Aaiun" everutc="y">
    <id>Africa/El_Aaiun</id>
@@ -285,7 +285,7 @@
   </country>
   <country code="es" default="Europe/Madrid" everutc="y">
    <id>Europe/Madrid</id>
-   <id notafter="496803600000">Africa/Ceuta</id>
+   <id notafter="496803600000" repl="Europe/Madrid">Africa/Ceuta</id>
    <id>Atlantic/Canary</id>
   </country>
   <country code="et" default="Africa/Addis_Ababa" everutc="n">
@@ -301,12 +301,12 @@
    <id>Atlantic/Stanley</id>
   </country>
   <country code="fm" default="Pacific/Pohnpei" everutc="n">
-   <id>Pacific/Pohnpei</id>
+   <id alts="Pacific/Ponape">Pacific/Pohnpei</id>
    <id>Pacific/Kosrae</id>
-   <id>Pacific/Chuuk</id>
+   <id alts="Pacific/Truk,Pacific/Yap">Pacific/Chuuk</id>
   </country>
   <country code="fo" default="Atlantic/Faroe" everutc="y">
-   <id>Atlantic/Faroe</id>
+   <id alts="Atlantic/Faeroe">Atlantic/Faroe</id>
   </country>
   <country code="fr" default="Europe/Paris" everutc="n">
    <id>Europe/Paris</id>
@@ -315,7 +315,7 @@
    <id>Africa/Libreville</id>
   </country>
   <country code="gb" default="Europe/London" everutc="y">
-   <id>Europe/London</id>
+   <id alts="Europe/Belfast,GB,GB-Eire">Europe/London</id>
   </country>
   <country code="gd" default="America/Grenada" everutc="n">
    <id>America/Grenada</id>
@@ -338,7 +338,7 @@
   <country code="gl" default="America/Nuuk" everutc="y">
    <id>America/Danmarkshavn</id>
    <id>America/Scoresbysund</id>
-   <id>America/Nuuk</id>
+   <id alts="America/Godthab">America/Nuuk</id>
    <id>America/Thule</id>
   </country>
   <country code="gm" default="Africa/Banjul" everutc="y">
@@ -372,7 +372,7 @@
    <id>America/Guyana</id>
   </country>
   <country code="hk" default="Asia/Hong_Kong" everutc="n">
-   <id>Asia/Hong_Kong</id>
+   <id alts="Hongkong">Asia/Hong_Kong</id>
   </country>
   <country code="hn" default="America/Tegucigalpa" everutc="n">
    <id>America/Tegucigalpa</id>
@@ -388,21 +388,21 @@
   </country>
   <country code="id" default="Asia/Jakarta" everutc="n">
    <id>Asia/Jayapura</id>
-   <id>Asia/Makassar</id>
+   <id alts="Asia/Ujung_Pandang">Asia/Makassar</id>
    <id>Asia/Jakarta</id>
-   <id notafter="567964800000">Asia/Pontianak</id>
+   <id notafter="567964800000" repl="Asia/Jakarta">Asia/Pontianak</id>
   </country>
   <country code="ie" default="Europe/Dublin" everutc="y">
-   <id>Europe/Dublin</id>
+   <id alts="Eire">Europe/Dublin</id>
   </country>
   <country code="il" default="Asia/Jerusalem" everutc="n">
-   <id>Asia/Jerusalem</id>
+   <id alts="Asia/Tel_Aviv,Israel">Asia/Jerusalem</id>
   </country>
   <country code="im" default="Europe/Isle_of_Man" everutc="y">
    <id>Europe/Isle_of_Man</id>
   </country>
   <country code="in" default="Asia/Kolkata" everutc="n">
-   <id>Asia/Kolkata</id>
+   <id alts="Asia/Calcutta">Asia/Kolkata</id>
   </country>
   <country code="io" default="Indian/Chagos" everutc="n">
    <id>Indian/Chagos</id>
@@ -411,10 +411,10 @@
    <id>Asia/Baghdad</id>
   </country>
   <country code="ir" default="Asia/Tehran" everutc="n">
-   <id>Asia/Tehran</id>
+   <id alts="Iran">Asia/Tehran</id>
   </country>
   <country code="is" default="Atlantic/Reykjavik" everutc="y">
-   <id>Atlantic/Reykjavik</id>
+   <id alts="Iceland">Atlantic/Reykjavik</id>
   </country>
   <country code="it" default="Europe/Rome" everutc="n">
    <id>Europe/Rome</id>
@@ -423,16 +423,16 @@
    <id>Europe/Jersey</id>
   </country>
   <country code="jm" default="America/Jamaica" everutc="n">
-   <id>America/Jamaica</id>
+   <id alts="Jamaica">America/Jamaica</id>
   </country>
   <country code="jo" default="Asia/Amman" everutc="n">
    <id>Asia/Amman</id>
   </country>
   <country code="jp" default="Asia/Tokyo" everutc="n">
-   <id>Asia/Tokyo</id>
+   <id alts="Japan">Asia/Tokyo</id>
   </country>
   <country code="ke" default="Africa/Nairobi" everutc="n">
-   <id>Africa/Nairobi</id>
+   <id alts="Africa/Asmera">Africa/Nairobi</id>
   </country>
   <country code="kg" default="Asia/Bishkek" everutc="n">
    <id>Asia/Bishkek</id>
@@ -455,7 +455,7 @@
    <id>Asia/Pyongyang</id>
   </country>
   <country code="kr" default="Asia/Seoul" everutc="n">
-   <id>Asia/Seoul</id>
+   <id alts="ROK">Asia/Seoul</id>
   </country>
   <country code="kw" default="Asia/Kuwait" everutc="n">
    <id>Asia/Kuwait</id>
@@ -465,12 +465,12 @@
   </country>
   <country code="kz" default="Asia/Almaty" everutc="n">
    <id>Asia/Almaty</id>
-   <id notafter="1099170000000">Asia/Qostanay</id>
+   <id notafter="1099170000000" repl="Asia/Almaty">Asia/Qostanay</id>
    <id>Asia/Oral</id>
-   <id notafter="1099173600000">Asia/Aqtau</id>
-   <id notafter="1545328800000">Asia/Qyzylorda</id>
-   <id notafter="1545328800000">Asia/Aqtobe</id>
-   <id notafter="922572000000">Asia/Atyrau</id>
+   <id notafter="1099173600000" repl="Asia/Oral">Asia/Aqtau</id>
+   <id notafter="1545328800000" repl="Asia/Oral">Asia/Qyzylorda</id>
+   <id notafter="1545328800000" repl="Asia/Oral">Asia/Aqtobe</id>
+   <id notafter="922572000000" repl="Asia/Oral">Asia/Atyrau</id>
   </country>
   <country code="la" default="Asia/Vientiane" everutc="n">
    <id>Asia/Vientiane</id>
@@ -503,7 +503,7 @@
    <id>Europe/Riga</id>
   </country>
   <country code="ly" default="Africa/Tripoli" everutc="n">
-   <id>Africa/Tripoli</id>
+   <id alts="Libya">Africa/Tripoli</id>
   </country>
   <country code="ma" default="Africa/Casablanca" everutc="y">
    <id>Africa/Casablanca</id>
@@ -512,7 +512,7 @@
    <id>Europe/Monaco</id>
   </country>
   <country code="md" default="Europe/Chisinau" everutc="n">
-   <id>Europe/Chisinau</id>
+   <id alts="Europe/Tiraspol">Europe/Chisinau</id>
   </country>
   <country code="me" default="Europe/Podgorica" everutc="n">
    <id>Europe/Podgorica</id>
@@ -525,7 +525,7 @@
   </country>
   <country code="mh" default="Pacific/Majuro" everutc="n">
    <id>Pacific/Majuro</id>
-   <id notafter="745934400000">Pacific/Kwajalein</id>
+   <id notafter="745934400000" repl="Pacific/Majuro" alts="Kwajalein">Pacific/Kwajalein</id>
   </country>
   <country code="mk" default="Europe/Skopje" everutc="n">
    <id>Europe/Skopje</id>
@@ -534,15 +534,15 @@
    <id>Africa/Bamako</id>
   </country>
   <country code="mm" default="Asia/Yangon" everutc="n">
-   <id>Asia/Yangon</id>
+   <id alts="Asia/Rangoon">Asia/Yangon</id>
   </country>
   <country code="mn" default="Asia/Ulaanbaatar" everutc="n">
    <id>Asia/Choibalsan</id>
-   <id>Asia/Ulaanbaatar</id>
+   <id alts="Asia/Ulan_Bator">Asia/Ulaanbaatar</id>
    <id>Asia/Hovd</id>
   </country>
   <country code="mo" default="Asia/Macau" everutc="n">
-   <id>Asia/Macau</id>
+   <id alts="Asia/Macao">Asia/Macau</id>
   </country>
   <country code="mp" default="Pacific/Saipan" everutc="n">
    <id>Pacific/Saipan</id>
@@ -569,21 +569,21 @@
    <id>Africa/Blantyre</id>
   </country>
   <country code="mx" default="America/Mexico_City" everutc="n">
-   <id>America/Mexico_City</id>
-   <id notafter="407653200000">America/Merida</id>
-   <id notafter="594198000000">America/Monterrey</id>
-   <id notafter="1270371600000">America/Bahia_Banderas</id>
+   <id alts="Mexico/General">America/Mexico_City</id>
+   <id notafter="407653200000" repl="America/Mexico_City">America/Merida</id>
+   <id notafter="594198000000" repl="America/Mexico_City">America/Monterrey</id>
+   <id notafter="1270371600000" repl="America/Mexico_City">America/Bahia_Banderas</id>
    <id>America/Matamoros</id>
    <id>America/Cancun</id>
    <id>America/Chihuahua</id>
-   <id notafter="891766800000">America/Mazatlan</id>
+   <id notafter="891766800000" repl="America/Chihuahua" alts="Mexico/BajaSur">America/Mazatlan</id>
    <id>America/Hermosillo</id>
    <id>America/Ojinaga</id>
-   <id>America/Tijuana</id>
+   <id alts="America/Ensenada,America/Santa_Isabel,Mexico/BajaNorte">America/Tijuana</id>
   </country>
   <country code="my" default="Asia/Kuala_Lumpur" everutc="n">
    <id>Asia/Kuala_Lumpur</id>
-   <id notafter="378664200000">Asia/Kuching</id>
+   <id notafter="378664200000" repl="Asia/Kuala_Lumpur">Asia/Kuching</id>
   </country>
   <country code="mz" default="Africa/Maputo" everutc="n">
    <id>Africa/Maputo</id>
@@ -610,10 +610,10 @@
    <id>Europe/Amsterdam</id>
   </country>
   <country code="no" default="Europe/Oslo" everutc="n">
-   <id>Europe/Oslo</id>
+   <id alts="Atlantic/Jan_Mayen">Europe/Oslo</id>
   </country>
   <country code="np" default="Asia/Kathmandu" everutc="n">
-   <id>Asia/Kathmandu</id>
+   <id alts="Asia/Katmandu">Asia/Kathmandu</id>
   </country>
   <country code="nr" default="Pacific/Nauru" everutc="n">
    <id>Pacific/Nauru</id>
@@ -622,8 +622,8 @@
    <id>Pacific/Niue</id>
   </country>
   <country code="nz" default="Pacific/Auckland" defaultBoost="y" everutc="n">
-   <id>Pacific/Auckland</id>
-   <id>Pacific/Chatham</id>
+   <id alts="Antarctica/South_Pole,NZ">Pacific/Auckland</id>
+   <id alts="NZ-CHAT">Pacific/Chatham</id>
   </country>
   <country code="om" default="Asia/Muscat" everutc="n">
    <id>Asia/Muscat</id>
@@ -650,7 +650,7 @@
    <id>Asia/Karachi</id>
   </country>
   <country code="pl" default="Europe/Warsaw" everutc="n">
-   <id>Europe/Warsaw</id>
+   <id alts="Poland">Europe/Warsaw</id>
   </country>
   <country code="pm" default="America/Miquelon" everutc="n">
    <id>America/Miquelon</id>
@@ -663,11 +663,11 @@
   </country>
   <country code="ps" default="Asia/Gaza" everutc="n">
    <id>Asia/Hebron</id>
-   <id notafter="1317330000000">Asia/Gaza</id>
+   <id notafter="1317330000000" repl="Asia/Hebron">Asia/Gaza</id>
   </country>
   <country code="pt" default="Europe/Lisbon" everutc="y">
-   <id>Europe/Lisbon</id>
-   <id notafter="828234000000">Atlantic/Madeira</id>
+   <id alts="Portugal">Europe/Lisbon</id>
+   <id notafter="828234000000" repl="Europe/Lisbon">Atlantic/Madeira</id>
    <id>Atlantic/Azores</id>
   </country>
   <country code="pw" default="Pacific/Palau" everutc="n">
@@ -695,24 +695,24 @@
    <id>Asia/Sakhalin</id>
    <id>Asia/Srednekolymsk</id>
    <id>Asia/Vladivostok</id>
-   <id notafter="1315828800000">Asia/Ust-Nera</id>
+   <id notafter="1315828800000" repl="Asia/Vladivostok">Asia/Ust-Nera</id>
    <id>Asia/Chita</id>
-   <id notafter="1459015200000">Asia/Yakutsk</id>
-   <id notafter="1315832400000">Asia/Khandyga</id>
+   <id notafter="1459015200000" repl="Asia/Chita">Asia/Yakutsk</id>
+   <id notafter="1315832400000" repl="Asia/Chita">Asia/Khandyga</id>
    <id>Asia/Irkutsk</id>
    <id>Asia/Krasnoyarsk</id>
-   <id notafter="1459022400000">Asia/Novokuznetsk</id>
+   <id notafter="1459022400000" repl="Asia/Krasnoyarsk">Asia/Novokuznetsk</id>
    <id>Asia/Novosibirsk</id>
    <id>Asia/Barnaul</id>
-   <id notafter="1464465600000">Asia/Tomsk</id>
+   <id notafter="1464465600000" repl="Asia/Barnaul">Asia/Tomsk</id>
    <id>Asia/Omsk</id>
    <id>Asia/Yekaterinburg</id>
    <id>Europe/Samara</id>
    <id>Europe/Saratov</id>
-   <id notafter="1480806000000">Europe/Ulyanovsk</id>
-   <id notafter="701823600000">Europe/Astrakhan</id>
+   <id notafter="1480806000000" repl="Europe/Saratov">Europe/Ulyanovsk</id>
+   <id notafter="701823600000" repl="Europe/Saratov">Europe/Astrakhan</id>
    <id>Europe/Volgograd</id>
-   <id>Europe/Moscow</id>
+   <id alts="W-SU">Europe/Moscow</id>
    <id>Europe/Kirov</id>
    <id>Europe/Kaliningrad</id>
   </country>
@@ -735,7 +735,7 @@
    <id>Europe/Stockholm</id>
   </country>
   <country code="sg" default="Asia/Singapore" everutc="n">
-   <id>Asia/Singapore</id>
+   <id alts="Singapore">Asia/Singapore</id>
   </country>
   <country code="sh" default="Atlantic/St_Helena" everutc="y">
    <id>Atlantic/St_Helena</id>
@@ -807,7 +807,7 @@
    <id>Asia/Dili</id>
   </country>
   <country code="tm" default="Asia/Ashgabat" everutc="n">
-   <id>Asia/Ashgabat</id>
+   <id alts="Asia/Ashkhabad">Asia/Ashgabat</id>
   </country>
   <country code="tn" default="Africa/Tunis" everutc="n">
    <id>Africa/Tunis</id>
@@ -816,24 +816,24 @@
    <id>Pacific/Tongatapu</id>
   </country>
   <country code="tr" default="Europe/Istanbul" everutc="n">
-   <id>Europe/Istanbul</id>
+   <id alts="Turkey">Europe/Istanbul</id>
   </country>
   <country code="tt" default="America/Port_of_Spain" everutc="n">
-   <id>America/Port_of_Spain</id>
+   <id alts="America/Virgin">America/Port_of_Spain</id>
   </country>
   <country code="tv" default="Pacific/Funafuti" everutc="n">
    <id>Pacific/Funafuti</id>
   </country>
   <country code="tw" default="Asia/Taipei" everutc="n">
-   <id>Asia/Taipei</id>
+   <id alts="ROC">Asia/Taipei</id>
   </country>
   <country code="tz" default="Africa/Dar_es_Salaam" everutc="n">
    <id>Africa/Dar_es_Salaam</id>
   </country>
   <country code="ua" default="Europe/Kiev" everutc="n">
    <id>Europe/Kiev</id>
-   <id notafter="686102400000">Europe/Zaporozhye</id>
-   <id notafter="686091600000">Europe/Uzhgorod</id>
+   <id notafter="686102400000" repl="Europe/Kiev">Europe/Zaporozhye</id>
+   <id notafter="686091600000" repl="Europe/Kiev">Europe/Uzhgorod</id>
    <id picker="n">Europe/Simferopol</id>
   </country>
   <country code="ug" default="Africa/Kampala" everutc="n">
@@ -844,42 +844,42 @@
    <id>Pacific/Midway</id>
   </country>
   <country code="us" default="America/New_York" everutc="n">
-   <id>America/New_York</id>
-   <id notafter="152089200000">America/Kentucky/Louisville</id>
-   <id notafter="167814000000">America/Detroit</id>
-   <id notafter="1130652000000">America/Indiana/Indianapolis</id>
-   <id notafter="1194159600000">America/Indiana/Vincennes</id>
-   <id notafter="972802800000">America/Kentucky/Monticello</id>
-   <id notafter="247042800000">America/Indiana/Petersburg</id>
-   <id notafter="1173600000000">America/Indiana/Winamac</id>
-   <id notafter="89186400000">America/Indiana/Vevay</id>
-   <id notafter="183535200000">America/Indiana/Marengo</id>
-   <id>America/Chicago</id>
-   <id notafter="104918400000">America/Menominee</id>
-   <id notafter="1143964800000">America/Indiana/Tell_City</id>
-   <id notafter="688546800000">America/Indiana/Knox</id>
-   <id notafter="1289116800000">America/North_Dakota/Beulah</id>
-   <id notafter="1067155200000">America/North_Dakota/New_Salem</id>
-   <id notafter="720000000000">America/North_Dakota/Center</id>
-   <id>America/Denver</id>
-   <id>America/Phoenix</id>
-   <id notafter="129114000000">America/Boise</id>
-   <id>America/Los_Angeles</id>
-   <id>America/Anchorage</id>
-   <id notafter="436359600000">America/Juneau</id>
-   <id notafter="341402400000">America/Sitka</id>
-   <id notafter="436363200000">America/Nome</id>
-   <id notafter="1547978400000">America/Metlakatla</id>
-   <id notafter="436356000000">America/Yakutat</id>
-   <id>Pacific/Honolulu</id>
-   <id>America/Adak</id>
+   <id alts="US/Eastern">America/New_York</id>
+   <id notafter="152089200000" repl="America/New_York" alts="America/Louisville">America/Kentucky/Louisville</id>
+   <id notafter="167814000000" repl="America/New_York" alts="US/Michigan">America/Detroit</id>
+   <id notafter="1130652000000" repl="America/New_York" alts="America/Fort_Wayne,America/Indianapolis,US/East-Indiana">America/Indiana/Indianapolis</id>
+   <id notafter="1194159600000" repl="America/New_York">America/Indiana/Vincennes</id>
+   <id notafter="972802800000" repl="America/New_York">America/Kentucky/Monticello</id>
+   <id notafter="247042800000" repl="America/New_York">America/Indiana/Petersburg</id>
+   <id notafter="1173600000000" repl="America/New_York">America/Indiana/Winamac</id>
+   <id notafter="89186400000" repl="America/New_York">America/Indiana/Vevay</id>
+   <id notafter="183535200000" repl="America/New_York">America/Indiana/Marengo</id>
+   <id alts="US/Central">America/Chicago</id>
+   <id notafter="104918400000" repl="America/Chicago">America/Menominee</id>
+   <id notafter="1143964800000" repl="America/Chicago">America/Indiana/Tell_City</id>
+   <id notafter="688546800000" repl="America/Chicago" alts="America/Knox_IN,US/Indiana-Starke">America/Indiana/Knox</id>
+   <id notafter="1289116800000" repl="America/Chicago">America/North_Dakota/Beulah</id>
+   <id notafter="1067155200000" repl="America/Chicago">America/North_Dakota/New_Salem</id>
+   <id notafter="720000000000" repl="America/Chicago">America/North_Dakota/Center</id>
+   <id alts="America/Shiprock,Navajo,US/Mountain">America/Denver</id>
+   <id alts="US/Arizona">America/Phoenix</id>
+   <id notafter="129114000000" repl="America/Phoenix">America/Boise</id>
+   <id alts="US/Pacific">America/Los_Angeles</id>
+   <id alts="US/Alaska">America/Anchorage</id>
+   <id notafter="436359600000" repl="America/Anchorage">America/Juneau</id>
+   <id notafter="341402400000" repl="America/Anchorage">America/Sitka</id>
+   <id notafter="436363200000" repl="America/Anchorage">America/Nome</id>
+   <id notafter="1547978400000" repl="America/Anchorage">America/Metlakatla</id>
+   <id notafter="436356000000" repl="America/Anchorage">America/Yakutat</id>
+   <id alts="Pacific/Johnston,US/Hawaii">Pacific/Honolulu</id>
+   <id alts="America/Atka,US/Aleutian">America/Adak</id>
   </country>
   <country code="uy" default="America/Montevideo" everutc="n">
    <id>America/Montevideo</id>
   </country>
   <country code="uz" default="Asia/Tashkent" everutc="n">
    <id>Asia/Tashkent</id>
-   <id notafter="670366800000">Asia/Samarkand</id>
+   <id notafter="670366800000" repl="Asia/Tashkent">Asia/Samarkand</id>
   </country>
   <country code="va" default="Europe/Vatican" everutc="n">
    <id>Europe/Vatican</id>
@@ -897,7 +897,7 @@
    <id>America/St_Thomas</id>
   </country>
   <country code="vn" default="Asia/Ho_Chi_Minh" everutc="n">
-   <id>Asia/Ho_Chi_Minh</id>
+   <id alts="Asia/Saigon">Asia/Ho_Chi_Minh</id>
   </country>
   <country code="vu" default="Pacific/Efate" everutc="n">
    <id>Pacific/Efate</id>
diff --git a/testing/data/test3/output_data/distro/distro.zip b/testing/data/test3/output_data/distro/distro.zip
index c9a74cb..27e2446 100644
--- a/testing/data/test3/output_data/distro/distro.zip
+++ b/testing/data/test3/output_data/distro/distro.zip
Binary files differ