Update libphonenumber to r74.

Change-Id: I276b82261bb9b1531815a299e2e2c01fcc4765c3
diff --git a/README.android b/README.android
index 5910afb..369c5e2 100644
--- a/README.android
+++ b/README.android
@@ -1,4 +1,4 @@
 URL: http://code.google.com/p/libphonenumber/
-Version: r60
+Version: r74
 License: Apache 2
 Description: Google Phone Number Library.
diff --git a/java/build.xml b/java/build.xml
index 990b0ac..01740a2 100644
--- a/java/build.xml
+++ b/java/build.xml
@@ -35,6 +35,7 @@
       <fileset dir="${classes.dir}">
         <include name="**/*.class"/>
         <exclude name="**/*Test*"/>
+        <exclude name="**/*Build*"/>
       </fileset>
       <fileset dir="${src.dir}">
         <include name="**/PhoneNumberMetadataProto*"/>
@@ -48,6 +49,7 @@
       <fileset dir="${classes.dir}">
         <include name="**/*.class"/>
         <exclude name="**/*Test*"/>
+        <exclude name="**/*Build*"/>
       </fileset>
       <fileset dir="${src.dir}">
         <include name="**/PhoneNumberMetadataProto*"/>
diff --git a/java/release_notes.txt b/java/release_notes.txt
index 57a2f02..b356663 100644
--- a/java/release_notes.txt
+++ b/java/release_notes.txt
@@ -1,12 +1,76 @@
+Feb 11th, 2011
+* Metadata changes:
+ - Update UAN number ranges for IM and JE.
+
+Feb 9th, 2011
+* Code changes:
+  - Better isNumberMatch method. This will now recognise numbers starting with a national prefix as
+    an NSN_MATCH, instead of SHORT_NSN_MATCH.
+    == Note Non-backwards-compatible API change here! ==
+      This will no longer throw a NumberParseException - instead we will return NOT_A_NUMBER if one
+      or other of the numbers provided do not match.
+  - New number-type UAN now supported in the code. This represents Company Numbers or Universally
+    Accessible Numbers.
+* Metadata changes:
+  - Bug-fixes and updates for the following countries: AG, AZ, BA, BE, CA, CU, ES, FI, GB, GD, GG,
+    IE, IL, IM, IN, IR, IT, JE, JP, KR, KW, NG, NZ, PK, PS, PT, RU, SE, SG, SY, US
+  - New countries: CO, LU, LY, MC, SM
+  - Addition of "Personal Number" ranges to all NANPA countries
+
+Jan 31st, 2011
+* Code changes:
+  - Introducing equals() and hashCode() methods for the Phonenumber.PhoneNumber class
+
+Jan 28th, 2011
+* Code changes:
+  - Fixing critical bug with non-Android-compatible code. isEmpty() was being used and CANON_EQ in
+    reg-ex matches.
+
+Jan 20th, 2011
+* Code improvements:
+  - Handle null phone-numbers when parsing by throwing a NumberParseException.
+  - Handle extension written with an accented "o", as per Spanish, when parsing.
+  - Handle U+30FC dashes as phone-number punctuation.
+  - Allow "ZZ" or null regions to be specified for numbers starting with a full-width "+" symbol, or
+    with other characters (such as whitespace) before the leading +.
+  - new getLengthOfNationalDestinationCode function
+* Metadata changes:
+  - New types of numbers introduced: UAN (universal or "company" numbers) and short codes. Note that
+    "generalDesc" patterns do not encompass short-codes.  No code-support for these has been
+    introduced as of yet. We are also now enabling the collection of data for information such as
+    area-code-optional, and no-international-dialling ranges.
+  - Data updates as per ITU notifications/bug fixes for the following countries: AM, BH, CD, CG, CR,
+    DE, DJ, EE, GB, GN, HU, IE, JO, JP, LB, LR, MA, MK, MN, MR, NA, PG, SC, SG, SO, SZ, VN, ZA, ZW
+  - Data added for the following countries: BZ, CU, EC, FO, GI, HN, HT, LK, MT, MV, NU, PS, SD
+  - Indentation fixes in reg-exes for the following countries: BG, GB
+  - Allow nationalPrefixForParsing to be specified for countries with no national prefix, to handle
+    possible carrier prefixes
+
+Jan 3rd, 2011
+* Metadata changes:
+  - Updates to JE
+  - Updated comments for GB/GG/IM/JE
+
+November 25th, 2010
+* Metadata changes:
+  - Updates to existing countries: AD, AG, AI, AN, AS, BB, BG, BM, BS, BW, CA, DM, DO, GD, GH, GM,
+    GU, IN, JM, KN, KY, KZ, LB, LC, MP, MS, PR, SY, TC, TT, TZ, US, VC, VG, VI.
+  - Reorganize reg-exes for better readability.
+  - Updated comments.
+
 October 22nd, 2010
+* Metadata changes:
+  - Updates to existing countries: AE, GB, GG, IM, JE
+
+October 15th, 2010
 * Code improvements:
   - Allowed parsing of numbers that start with "++" or a full-width "+" symbol
-  - Allowed reg-exs for national and possible number patterns to have white space in them in the
+  - Allowed reg-exes for national and possible number patterns to have white space in them in the
     source XML file
   - Added a more useful toString method for the phone number proto class
 * Metadata changes:
-  - Updates to existing countries: AE, AF, BF, BO, ES, GB, GG, IM, IS, JE, JE, JP, KR, PE, PT, RU,
-    SE, TT, ZW
+  - Updates to existing countries: AF, BF, BO, ES, GB, GG, IM, IS, JE, JE, JP, KR, PE, PT, RU, SE,
+    TT, ZW
 * Bug fixes:
   - Parsing empty strings with invalid region codes no longer throws a null pointer exception
 
diff --git a/java/resources/com/google/i18n/phonenumbers/BuildMetadataFromXml.java b/java/resources/com/google/i18n/phonenumbers/BuildMetadataFromXml.java
index aaf2386..87a8d05 100644
--- a/java/resources/com/google/i18n/phonenumbers/BuildMetadataFromXml.java
+++ b/java/resources/com/google/i18n/phonenumbers/BuildMetadataFromXml.java
@@ -126,20 +126,21 @@
     String nationalPrefix = "";
     String nationalPrefixFormattingRule = "";
     String carrierCodeFormattingRule = "";
+    if (element.hasAttribute("nationalPrefixForParsing")) {
+      metadata.setNationalPrefixForParsing(
+          validateRE(element.getAttribute("nationalPrefixForParsing")));
+      if (element.hasAttribute("nationalPrefixTransformRule")) {
+        metadata.setNationalPrefixTransformRule(
+            validateRE(element.getAttribute("nationalPrefixTransformRule")));
+      }
+    }
     if (element.hasAttribute("nationalPrefix")) {
       nationalPrefix = element.getAttribute("nationalPrefix");
       metadata.setNationalPrefix(nationalPrefix);
       nationalPrefixFormattingRule =
-          validateRE(getNationalPrefixFormattingRuleFromElement(element, nationalPrefix));
+          getNationalPrefixFormattingRuleFromElement(element, nationalPrefix);
 
-      if (element.hasAttribute("nationalPrefixForParsing")) {
-        metadata.setNationalPrefixForParsing(
-            validateRE(element.getAttribute("nationalPrefixForParsing")));
-        if (element.hasAttribute("nationalPrefixTransformRule")) {
-          metadata.setNationalPrefixTransformRule(
-              validateRE(element.getAttribute("nationalPrefixTransformRule")));
-        }
-      } else {
+      if (!metadata.hasNationalPrefixForParsing()) {
         metadata.setNationalPrefixForParsing(nationalPrefix);
       }
     }
@@ -158,8 +159,8 @@
         Element numberFormatElement = (Element) numberFormatElements.item(i);
         NumberFormat format = new NumberFormat();
         if (numberFormatElement.hasAttribute("nationalPrefixFormattingRule")) {
-          format.setNationalPrefixFormattingRule(validateRE(
-              getNationalPrefixFormattingRuleFromElement(numberFormatElement, nationalPrefix)));
+          format.setNationalPrefixFormattingRule(
+              getNationalPrefixFormattingRuleFromElement(numberFormatElement, nationalPrefix));
         } else {
           format.setNationalPrefixFormattingRule(nationalPrefixFormattingRule);
         }
@@ -179,7 +180,7 @@
           throw new RuntimeException("Invalid number of format patterns for country: " +
                                      regionCode);
         }
-        format.setFormat(validateRE(formatPattern.item(0).getFirstChild().getNodeValue()));
+        format.setFormat(formatPattern.item(0).getFirstChild().getNodeValue());
         metadata.addNumberFormat(format);
       }
     }
@@ -223,6 +224,9 @@
     metadata.setPersonalNumber(processPhoneNumberDescElement(generalDesc, element,
                                                              "personalNumber"));
     metadata.setPager(processPhoneNumberDescElement(generalDesc, element, "pager"));
+    metadata.setUan(processPhoneNumberDescElement(generalDesc, element, "uan"));
+    metadata.setNoInternationalDialling(processPhoneNumberDescElement(generalDesc, element,
+                                                                      "noInternationalDialling"));
 
     if (metadata.getMobile().getNationalNumberPattern().equals(
         metadata.getFixedLine().getNationalNumberPattern())) {
@@ -237,7 +241,7 @@
     if (numOfLeadingDigitsPatterns > 0) {
       for (int i = 0; i < numOfLeadingDigitsPatterns; i++) {
         format.addLeadingDigitsPattern(
-            validateRE((leadingDigitsPatternNodes.item(i)).getFirstChild().getNodeValue()));
+            validateRE((leadingDigitsPatternNodes.item(i)).getFirstChild().getNodeValue(), true));
       }
     }
   }
diff --git a/java/resources/com/google/i18n/phonenumbers/BuildMetadataJsonFromXml.java b/java/resources/com/google/i18n/phonenumbers/BuildMetadataJsonFromXml.java
deleted file mode 100644
index 95952a7..0000000
--- a/java/resources/com/google/i18n/phonenumbers/BuildMetadataJsonFromXml.java
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.i18n.phonenumbers;
-
-import com.google.i18n.phonenumbers.Phonemetadata.NumberFormat;
-import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
-import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadataCollection;
-import com.google.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc;
-
-import java.io.BufferedWriter;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.Formatter;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Tool to convert phone number metadata from the XML format to JSON format.
- *
- * @author Nikolaos Trogkanis
- */
-public class BuildMetadataJsonFromXml {
-  private static final String NAMESPACE = "i18n.phonenumbers.metadata";
-
-  private static final String HELP_MESSAGE =
-      "Usage:\n" +
-      "BuildMetadataJsonFromXml <inputFile> <outputFile> [<liteBuild>]\n" +
-      "\n" +
-      "where:\n" +
-      "  inputFile    The input file containing phone number metadata in XML format.\n" +
-      "  outputFile   The output file to contain phone number metadata in JSON format.\n" +
-      "  liteBuild    Whether to generate the lite-version of the metadata (default:\n" +
-      "               false). When set to true certain metadata will be omitted.\n" +
-      "               At this moment, example numbers information is omitted.\n" +
-      "\n" +
-      "Example command line invocation:\n" +
-      "BuildMetadataJsonFromXml PhoneNumberMetadata.xml metadatalite.js true\n";
-
-  static final String COPYRIGHT_NOTICE =
-      "/*\n" +
-      " * @license\n" +
-      " * Copyright (C) 2010 Google Inc.\n" +
-      " *\n" +
-      " * Licensed under the Apache License, Version 2.0 (the \"License\");\n" +
-      " * you may not use this file except in compliance with the License.\n" +
-      " * You may obtain a copy of the License at\n" +
-      " *\n" +
-      " * http://www.apache.org/licenses/LICENSE-2.0\n" +
-      " *\n" +
-      " * Unless required by applicable law or agreed to in writing, software\n" +
-      " * distributed under the License is distributed on an \"AS IS\" BASIS,\n" +
-      " * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +
-      " * See the License for the specific language governing permissions and\n" +
-      " * limitations under the License.\n" +
-      " */\n\n";
-
-  private static final String FILE_OVERVIEW =
-      "/**\n" +
-      " * @fileoverview Generated metadata for file\n" +
-      " * %s\n" +
-      " * @author Nikolaos Trogkanis\n" +
-      " */\n\n";
-
-  private static final String COUNTRY_CODE_TO_REGION_CODE_MAP_COMMENT =
-      "/**\n" +
-      " * A mapping from a country code to the region codes which denote the\n" +
-      " * country/region represented by that country code. In the case of multiple\n" +
-      " * countries sharing a calling code, such as the NANPA countries, the one\n" +
-      " * indicated with \"isMainCountryForCode\" in the metadata should be first.\n" +
-      " * @type {Object.<number, Array.<string>>}\n" +
-      " */\n";
-
-  private static final String COUNTRY_TO_METADATA_COMMENT =
-      "/**\n" +
-      " * A mapping from a region code to the PhoneMetadata for that region.\n" +
-      " * @type {Object.<string, Array>}\n" +
-      " */\n";
-
-  public static void main(String[] args) throws Exception {
-    if (args.length != 2 && args.length != 3) {
-      System.err.println(HELP_MESSAGE);
-      System.exit(1);
-    }
-    String inputFile = args[0];
-    String outputFile = args[1];
-    boolean liteBuild = args.length > 2 && args[2].equals("true");
-
-    PhoneMetadataCollection metadataCollection =
-        BuildMetadataFromXml.buildPhoneMetadataCollection(inputFile, liteBuild);
-    Map<Integer, List<String>> countryCodeToRegionCodeMap =
-        BuildMetadataFromXml.buildCountryCodeToRegionCodeMap(metadataCollection);
-
-    BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));
-
-    writer.write(COPYRIGHT_NOTICE);
-    Formatter formatter = new Formatter(writer);
-    formatter.format(FILE_OVERVIEW, inputFile);
-
-    writer.write("goog.provide('" + NAMESPACE + "');\n\n");
-
-    writer.write(COUNTRY_CODE_TO_REGION_CODE_MAP_COMMENT);
-    writer.write(NAMESPACE + ".countryCodeToRegionCodeMap = ");
-    writeCountryCodeCodeToRegionCodeMap(countryCodeToRegionCodeMap, writer);
-    writer.write(";\n\n");
-
-    writer.write(COUNTRY_TO_METADATA_COMMENT);
-    writer.write(NAMESPACE + ".countryToMetadata = ");
-    writeCountryToMetadataMap(metadataCollection, writer);
-    writer.write(";\n");
-
-    writer.flush();
-    writer.close();
-  }
-
-  // Writes a PhoneMetadataCollection in JSON format.
-  private static void writeCountryToMetadataMap(PhoneMetadataCollection metadataCollection,
-                                                BufferedWriter writer) throws IOException {
-    writer.write("{\n");
-    boolean isFirstTimeInLoop = true;
-    for (PhoneMetadata metadata : metadataCollection.getMetadataList()) {
-      if (isFirstTimeInLoop) {
-        isFirstTimeInLoop = false;
-      } else {
-        writer.write(",");
-      }
-      String regionCode = metadata.getId();
-      JSArrayBuilder jsArrayBuilder = new JSArrayBuilder();
-      toJsArray(metadata, jsArrayBuilder);
-      writer.write("\"");
-      writer.write(regionCode);
-      writer.write("\":");
-      writer.write(jsArrayBuilder.toString());
-    }
-    writer.write("}");
-  }
-
-  // Writes a Map<Integer, List<String>> in JSON format.
-  private static void writeCountryCodeCodeToRegionCodeMap(
-      Map<Integer, List<String>> countryCodeToRegionCodeMap,
-      BufferedWriter writer) throws IOException {
-    writer.write("{\n");
-    boolean isFirstTimeInLoop = true;
-    for (Map.Entry<Integer, List<String>> entry : countryCodeToRegionCodeMap.entrySet()) {
-      if (isFirstTimeInLoop) {
-        isFirstTimeInLoop = false;
-      } else {
-        writer.write(",");
-      }
-      writer.write(Integer.toString(entry.getKey()));
-      writer.write(":");
-      JSArrayBuilder jsArrayBuilder = new JSArrayBuilder();
-      jsArrayBuilder.beginArray();
-      jsArrayBuilder.appendIterator(entry.getValue().iterator());
-      jsArrayBuilder.endArray();
-      writer.write(jsArrayBuilder.toString());
-    }
-    writer.write("}");
-  }
-
-  // Converts NumberFormat to JSArray.
-  private static void toJsArray(NumberFormat format, JSArrayBuilder jsArrayBuilder) {
-    jsArrayBuilder.beginArray();
-
-    // missing 0
-    jsArrayBuilder.append(null);
-    // required string pattern = 1;
-    jsArrayBuilder.append(format.getPattern());
-    // required string format = 2;
-    jsArrayBuilder.append(format.getFormat());
-    // repeated string leading_digits_pattern = 3;
-    int leadingDigitsPatternSize = format.getLeadingDigitsPatternCount();
-    if (leadingDigitsPatternSize > 0) {
-      jsArrayBuilder.beginArray();
-      for (int i = 0; i < leadingDigitsPatternSize; i++) {
-        jsArrayBuilder.append(format.getLeadingDigitsPattern(i));
-      }
-      jsArrayBuilder.endArray();
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // optional string national_prefix_formatting_rule = 4;
-    if (format.hasNationalPrefixFormattingRule()) {
-      jsArrayBuilder.append(format.getNationalPrefixFormattingRule());
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // optional string domestic_carrier_code_formatting_rule = 5;
-    if (format.hasDomesticCarrierCodeFormattingRule()) {
-      jsArrayBuilder.append(format.getDomesticCarrierCodeFormattingRule());
-    } else {
-      jsArrayBuilder.append(null);
-    }
-
-    jsArrayBuilder.endArray();
-  }
-
-  // Converts PhoneNumberDesc to JSArray.
-  private static void toJsArray(PhoneNumberDesc desc, JSArrayBuilder jsArrayBuilder) {
-    jsArrayBuilder.beginArray();
-
-    // missing 0
-    jsArrayBuilder.append(null);
-    // missing 1
-    jsArrayBuilder.append(null);
-    // optional string national_number_pattern = 2;
-    if (desc.hasNationalNumberPattern()) {
-      jsArrayBuilder.append(desc.getNationalNumberPattern());
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // optional string possible_number_pattern = 3;
-    if (desc.hasPossibleNumberPattern()) {
-      jsArrayBuilder.append(desc.getPossibleNumberPattern());
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // missing 4
-    jsArrayBuilder.append(null);
-    // missing 5
-    jsArrayBuilder.append(null);
-    // optional string example_number = 6;
-    if (desc.hasExampleNumber()) {
-      jsArrayBuilder.append(desc.getExampleNumber());
-    } else {
-      jsArrayBuilder.append(null);
-    }
-
-    jsArrayBuilder.endArray();
-  }
-
-  // Converts PhoneMetadata to JSArray.
-  private static void toJsArray(PhoneMetadata metadata, JSArrayBuilder jsArrayBuilder) {
-    jsArrayBuilder.beginArray();
-
-    // missing 0
-    jsArrayBuilder.append(null);
-    // required PhoneNumberDesc general_desc = 1;
-    if (metadata.hasGeneralDesc()) {
-      toJsArray(metadata.getGeneralDesc(), jsArrayBuilder);
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // required PhoneNumberDesc fixed_line = 2;
-    if (metadata.hasFixedLine()) {
-      toJsArray(metadata.getFixedLine(), jsArrayBuilder);
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // required PhoneNumberDesc mobile = 3;
-    if (metadata.hasMobile()) {
-      toJsArray(metadata.getMobile(), jsArrayBuilder);
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // required PhoneNumberDesc toll_free = 4;
-    if (metadata.hasTollFree()) {
-      toJsArray(metadata.getTollFree(), jsArrayBuilder);
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // required PhoneNumberDesc premium_rate = 5;
-    if (metadata.hasPremiumRate()) {
-      toJsArray(metadata.getPremiumRate(), jsArrayBuilder);
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // required PhoneNumberDesc shared_cost = 6;
-    if (metadata.hasSharedCost()) {
-      toJsArray(metadata.getSharedCost(), jsArrayBuilder);
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // required PhoneNumberDesc personal_number = 7;
-    if (metadata.hasPersonalNumber()) {
-      toJsArray(metadata.getPersonalNumber(), jsArrayBuilder);
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // required PhoneNumberDesc voip = 8;
-    if (metadata.hasVoip()) {
-      toJsArray(metadata.getVoip(), jsArrayBuilder);
-    } else {
-      jsArrayBuilder.append(null);
-    }
-
-    // required string id = 9;
-    jsArrayBuilder.append(metadata.getId());
-    // required int32 country_code = 10;
-    jsArrayBuilder.append(metadata.getCountryCode());
-    // required string international_prefix = 11;
-    jsArrayBuilder.append(metadata.getInternationalPrefix());
-
-    // optional string national_prefix = 12;
-    if (metadata.hasNationalPrefix()) {
-      jsArrayBuilder.append(metadata.getNationalPrefix());
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // optional string preferred_extn_prefix = 13;
-    if (metadata.hasPreferredExtnPrefix()) {
-      jsArrayBuilder.append(metadata.getPreferredExtnPrefix());
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // missing 14
-    jsArrayBuilder.append(null);
-    // optional string national_prefix_for_parsing = 15;
-    if (metadata.hasNationalPrefixForParsing()) {
-      jsArrayBuilder.append(metadata.getNationalPrefixForParsing());
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // optional string national_prefix_transform_rule = 16;
-    if (metadata.hasNationalPrefixTransformRule()) {
-      jsArrayBuilder.append(metadata.getNationalPrefixTransformRule());
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // optional string preferred_international_prefix = 17;
-    if (metadata.hasPreferredInternationalPrefix()) {
-      jsArrayBuilder.append(metadata.getPreferredInternationalPrefix());
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // optional bool same_mobile_and_fixed_line_pattern = 18 [default=false];
-    if (metadata.getSameMobileAndFixedLinePattern()) {
-      jsArrayBuilder.append(1);
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // repeated NumberFormat number_format = 19;
-    int numberFormatSize = metadata.getNumberFormatCount();
-    if (numberFormatSize > 0) {
-      jsArrayBuilder.beginArray();
-      for (int i = 0; i < numberFormatSize; i++) {
-        toJsArray(metadata.getNumberFormat(i), jsArrayBuilder);
-      }
-      jsArrayBuilder.endArray();
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // repeated NumberFormat intl_number_format = 20;
-    int intlNumberFormatSize = metadata.getIntlNumberFormatCount();
-    if (intlNumberFormatSize > 0) {
-      jsArrayBuilder.beginArray();
-      for (int i = 0; i < intlNumberFormatSize; i++) {
-        toJsArray(metadata.getIntlNumberFormat(i), jsArrayBuilder);
-      }
-      jsArrayBuilder.endArray();
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // missing 21
-    jsArrayBuilder.append(null);
-    // optional bool main_country_for_code = 22 [default=false];
-    if (metadata.getMainCountryForCode()) {
-      jsArrayBuilder.append(1);
-    } else {
-      jsArrayBuilder.append(null);
-    }
-    // optional string leading_digits = 23;
-    if (metadata.hasLeadingDigits()) {
-      jsArrayBuilder.append(metadata.getLeadingDigits());
-    } else {
-      jsArrayBuilder.append(null);
-    }
-
-    jsArrayBuilder.endArray();
-  }
-}
diff --git a/java/resources/com/google/i18n/phonenumbers/JSArrayBuilder.java b/java/resources/com/google/i18n/phonenumbers/JSArrayBuilder.java
deleted file mode 100644
index 9998f63..0000000
--- a/java/resources/com/google/i18n/phonenumbers/JSArrayBuilder.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.i18n.phonenumbers;
-
-import java.util.Iterator;
-
-/**
- * A sequence of elements representing a JavaScript Array. The principal operation on a
- * JSArrayBuilder is the append method that appends an element to the array. To facilitate nesting
- * beginArray and endArray are also supported. Example of a JSArray: ["a", ["b', "c"]].
- *
- * @author Nikolaos Trogkanis
- */
-public class JSArrayBuilder implements CharSequence {
-  // Internal representation.
-  private StringBuilder data = new StringBuilder();
-  // Flag that keeps track whether the element being added to the array is the first element.
-  private boolean isFirstElement = true;
-
-  /**
-   * Begin a new element.
-   */
-  private void beginElement() {
-    if (!isFirstElement) {
-      data.append(',');
-    }
-    isFirstElement = false;
-  }
-
-  /**
-   * Begin a new array.
-   */
-  public JSArrayBuilder beginArray() {
-    beginElement();
-    data.append('[');
-    isFirstElement = true;
-    return this;
-  }
-
-  /**
-   * End an array.
-   */
-  public JSArrayBuilder endArray() {
-    trimTrailingCommas();
-    data.append("]\n");
-    isFirstElement = false;
-    return this;
-  }
-
-  /**
-   * Add a number to the array.
-   */
-  public JSArrayBuilder append(int number) {
-    return append(Integer.toString(number), false);
-  }
-
-  /**
-   * Add a string to the array.
-   */
-  public JSArrayBuilder append(String string) {
-    return append(string, true);
-  }
-
-  /**
-   * Add a collection of strings to the array.
-   */
-  public final JSArrayBuilder appendIterator(Iterator<String> iterator) {
-    while (iterator.hasNext()) {
-      append(iterator.next());
-    }
-    return this;
-  }
-
-  // Adds a string to the array with an option to escape the string or not.
-  private JSArrayBuilder append(String string, boolean escapeString) {
-    beginElement();
-    if (string != null) {
-      if (escapeString) {
-        escape(string, data);
-      } else {
-        data.append(string);
-      }
-    }
-    return this;
-  }
-
-  // Returns a string representing the data in this JSArray.
-  @Override public String toString() {
-    return data.toString();
-  }
-
-  // Double quotes a string and replaces "\" with "\\".
-  private static void escape(String str, StringBuilder out) {
-    out.append('"');
-    out.append(str.replaceAll("\\\\", "\\\\\\\\"));
-    out.append('"');
-  }
-
-  // Trims trailing commas.
-  private void trimTrailingCommas() {
-    int i = data.length();
-    while (i > 0 && data.charAt(i - 1) == ',') {
-      i--;
-    }
-    if (i < data.length()) {
-      data.delete(i, data.length());
-    }
-  }
-
-  @Override public char charAt(int index) {
-    return data.charAt(index);
-  }
-
-  @Override public int length() {
-    return data.length();
-  }
-
-  @Override public CharSequence subSequence(int start, int end) {
-    return data.subSequence(start, end);
-  }
-}
diff --git a/java/resources/com/google/i18n/phonenumbers/proto/phonemetadata.proto b/java/resources/com/google/i18n/phonenumbers/proto/phonemetadata.proto
index 7968feb..42f0a99 100644
--- a/java/resources/com/google/i18n/phonenumbers/proto/phonemetadata.proto
+++ b/java/resources/com/google/i18n/phonenumbers/proto/phonemetadata.proto
@@ -118,6 +118,10 @@
   required PhoneNumberDesc personal_number = 7;
   required PhoneNumberDesc voip = 8;
   required PhoneNumberDesc pager = 21;
+  required PhoneNumberDesc uan = 25;
+  // The rules here distinguish the numbers that are only able to be dialled
+  // nationally.
+  required PhoneNumberDesc no_international_dialling = 24;
 
   // The ISO 3166-1 alpha-2 representation of a country/region
   required string id = 9;
diff --git a/java/resources/com/google/i18n/phonenumbers/src/PhoneNumberMetaData.xml b/java/resources/com/google/i18n/phonenumbers/src/PhoneNumberMetaData.xml
index eeb1706..f4e3e3d 100644
--- a/java/resources/com/google/i18n/phonenumbers/src/PhoneNumberMetaData.xml
+++ b/java/resources/com/google/i18n/phonenumbers/src/PhoneNumberMetaData.xml
@@ -13,30 +13,36 @@
      limitations under the License.
 
      @author: Shaopeng Jia
+     @author: Lara Rennie
 
      MetaData on Phone Number Plan and formatting rules
-     Note: Territories are in alphabetical order by their IDs, which are
-           based on ISO 3166-1 two-letter country codes. The country names
-           in the comments are the official short names in English according
-           to ISO 3166-1.
+     Note: Territories are in alphabetical order by their IDs, which are based on ISO 3166-1
+           two-letter country codes. The country names in the comments are the official short names
+           in English according to ISO 3166-1.
 
      For more information on what each element represents, see
      java/com/google/i18n/phonenumbers/phonemetadata.proto
 
-     Note that if you want to add validation metadata, the generalDesc
-     nationalNumberPattern and possibleNumberPattern must be provided.
-     If this is missing, then the country will be considered to have no more
-     specific phone-number type metadata (fixedLine, mobile etc) and hence only
-     basic validation rules (numbers should be between 3 and 15 digits long)
-     will be applied.
+     Note that if you want to add validation metadata, the generalDesc nationalNumberPattern and
+     possibleNumberPattern must be provided. If this is missing, then the country will be
+     considered to have no more specific phone-number type metadata (fixedLine, mobile etc) and
+     hence only basic validation rules (numbers should be between 3 and 15 digits long) will be
+     applied.
+
+     Country code, international and national prefix information main source:
+     http://www.itu.int/publ/T-SP-E.164C-2010/en
 -->
 
 <!DOCTYPE phoneNumberMetadata [
     <!ELEMENT phoneNumberMetadata (territories)>
     <!ELEMENT territories (territory+)>
-    <!ELEMENT territory (availableFormats?, generalDesc?, fixedLine?, mobile?, pager?, tollFree?,
-        premiumRate?, sharedCost?, personalNumber?, voip?)>
+    <!ELEMENT territory (availableFormats?, generalDesc?, noInternationalDialling?,
+        areaCodeOptional?, fixedLine?, mobile?, pager?, tollFree?, premiumRate?,
+        sharedCost?, personalNumber?, voip?, uan?, shortCode?)>
     <!ELEMENT generalDesc (nationalNumberPattern, possibleNumberPattern)>
+    <!ELEMENT noInternationalDialling (nationalNumberPattern, possibleNumberPattern,
+        exampleNumber?)>
+    <!ELEMENT areaCodeOptional (nationalNumberPattern, possibleNumberPattern, exampleNumber?)>
     <!ELEMENT fixedLine (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
     <!ELEMENT mobile (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
     <!ELEMENT pager (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
@@ -45,6 +51,8 @@
     <!ELEMENT sharedCost (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
     <!ELEMENT personalNumber (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
     <!ELEMENT voip (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
+    <!ELEMENT uan (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
+    <!ELEMENT shortCode (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
     <!ELEMENT availableFormats (numberFormat+, intlNumberFormat*)>
     <!ELEMENT nationalNumberPattern (#PCDATA)>
     <!ELEMENT possibleNumberPattern (#PCDATA)>
@@ -71,7 +79,7 @@
     <!ATTLIST numberFormat pattern CDATA #REQUIRED>
     <!ATTLIST intlNumberFormat pattern CDATA #REQUIRED>
     <!ATTLIST intlNumberFormat carrierCodeFormattingRule CDATA #IMPLIED>
-    ]>
+]>
 
 <phoneNumberMetadata>
   <territories>
@@ -89,7 +97,12 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>(?:[346-9]|180)\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            [346-9]|
+            180
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
@@ -103,16 +116,15 @@
         <exampleNumber>312345</exampleNumber>
       </mobile>
       <tollFree>
-        <!-- Note that the definitions of 1800 and 1802 numbers differ in the
-        plan and on the Andorran www.sta.ad website, but we consider both to be
-        freephone here. -->
+        <!-- Note that the definitions of 1800 and 1802 numbers differ in the plan and on the
+             Andorran www.sta.ad website, but we consider both to be freephone here. -->
         <nationalNumberPattern>180[02]\d{4}</nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>18001234</exampleNumber>
       </tollFree>
-      <!-- The national numbering plan says that numbers beginning with 9 are
-      reserved for special services, so we assume they are premium rate here,
-      although we cannot find examples online.-->
+      <!-- The national numbering plan says that numbers beginning with 9 are reserved for special
+           services, so we assume they are premium rate here, although we cannot find examples
+           online. -->
       <premiumRate>
         <nationalNumberPattern>9\d{5}</nationalNumberPattern>
         <possibleNumberPattern>\d{6}</possibleNumberPattern>
@@ -133,23 +145,29 @@
           <leadingDigits>5</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
-        <numberFormat pattern="([4679]00)(\d)(\d{5})"
-          nationalPrefixFormattingRule="$FG">
+        <numberFormat pattern="([4679]00)(\d)(\d{5})" nationalPrefixFormattingRule="$FG">
           <leadingDigits>[4679]0</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
-        <numberFormat pattern="(800)(\d{2,9})"
-          nationalPrefixFormattingRule="$FG">
+        <numberFormat pattern="(800)(\d{2,9})" nationalPrefixFormattingRule="$FG">
           <leadingDigits>8</leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[2-79]\d{7,8}|800\d{2,9}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [2-79]\d{7,8}|
+          800\d{2,9}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5,12}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:[2-4679][2-8]\d|600[25])\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            [2-4679][2-8]\d|
+            600[25]
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
         <exampleNumber>22345678</exampleNumber>
       </fixedLine>
@@ -159,7 +177,10 @@
         <exampleNumber>501234567</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>400\d{6}|800\d{2,9}</nationalNumberPattern>
+        <nationalNumberPattern>
+          400\d{6}|
+          800\d{2,9}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5,12}</possibleNumberPattern>
         <exampleNumber>800123456</exampleNumber>
       </tollFree>
@@ -189,7 +210,13 @@
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:[25][0-8]|[34][0-4]|6[0-5])[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            [25][0-8]|
+            [34][0-4]|
+            6[0-5]
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <exampleNumber>234567890</exampleNumber>
       </fixedLine>
       <mobile>
@@ -209,16 +236,51 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>268(?:4(?:6[0-3]|84)|56[0-2])\d{4}</nationalNumberPattern>
+        <!-- 268 468 is not in the plan, but has been added after numbers with this prefix have been
+             found in online searches. -->
+        <nationalNumberPattern>
+          268(?:
+            4(?:
+              6[0-38]|
+              84
+            )|
+            56[0-2]
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>2684601234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>268(?:464|7(?:2[0-9]|64|7[0-5]|8[358]))\d{4}</nationalNumberPattern>
+        <!-- 268 776/778/779 are not in the plan, but have been added after numbers with these
+             prefixes have been found in online searches. Same for 268 780/782/784/786. -->
+        <nationalNumberPattern>
+          268(?:
+            464|
+            7(?:
+              2[0-9]|
+              64|
+              7[0-689]|
+              8[02-68]
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>2684641234</exampleNumber>
       </mobile>
+      <pager>
+        <nationalNumberPattern>26840[69]\d{4}</nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>2684061234</exampleNumber>
+      </pager>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002123456</exampleNumber>
       </tollFree>
@@ -227,8 +289,20 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002123456</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
       <voip>
-        <!-- This is included as Centrex in the plan.-->
+        <!-- This is included as Centrex in the plan. -->
         <nationalNumberPattern>26848[01]\d{4}</nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>2684801234</exampleNumber>
@@ -245,16 +319,42 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>2644(?:6[12]|9[78])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          2644(?:
+            6[12]|
+            9[78]
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>2644612345</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>264(?:235|476|5(?:3[6-9]|8[1-4])|7(?:29|72))\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          264(?:
+            235|
+            476|
+            5(?:
+              3[6-9]|
+              8[1-4]
+            )|
+            7(?:
+              29|
+              72
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>2642351234</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002123456</exampleNumber>
       </tollFree>
@@ -263,6 +363,18 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002123456</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Albania -->
@@ -280,20 +392,58 @@
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(\d{2})(\d{3})(\d{3})">
-          <leadingDigits>[2358][2-5]|4[7-9]</leadingDigits>
+          <leadingDigits>
+            [2358][2-5]|
+            4[7-9]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d{3,5})">
-          <leadingDigits>[235][16-9]|8[016-9]|[79]</leadingDigits>
+          <leadingDigits>
+            [235][16-9]|
+            8[016-9]|
+            [79]
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[2-57]\d{7}|6\d{8}|8\d{5,7}|9\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [2-57]\d{7}|
+          6\d{8}|
+          8\d{5,7}|
+          9\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:2(?:[168][1-9]|[247]\d|9[1-7])|3(?:1[1-3]|[2-6]\d|[79][1-8]|8[1-9])|4\d{2}|5(?:1[1-4]|[2-578]\d|6[1-5]|9[1-7])|8(?:[19][1-5]|[2-6]\d|[78][1-7]))\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2(?:
+              [168][1-9]|
+              [247]\d|
+              9[1-7]
+            )|
+            3(?:
+              1[1-3]|
+              [2-6]\d|
+              [79][1-8]|
+              8[1-9]
+            )|
+            4\d{2}|
+            5(?:
+              1[1-4]|
+              [2-578]\d|
+              6[1-5]|
+              9[1-7]
+            )|
+            8(?:
+              [19][1-5]|
+              [2-6]\d|
+              [78][1-7]
+            )
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5,8}</possibleNumberPattern>
         <exampleNumber>22345678</exampleNumber>
       </fixedLine>
@@ -329,15 +479,17 @@
 
     <!-- Armenia -->
     <!-- http://www.itu.int/oth/T020200000A/en -->
-    <!-- We think the national dialling prefix is 0 - it seems this was a change
-    in 2005 (or 2008) along with the new city codes. However, their official
-    document makes no mention of it, websites disagree, and we are not sure if
-    the change has actually been made. -->
+    <!-- We think the national dialling prefix is 0 - it seems this was a change in 2005 (or 2008)
+         along with the new city codes. However, their official document makes no mention of it,
+         websites disagree, and we are not sure if the change has actually been made. -->
     <territory id="AM" countryCode="374" internationalPrefix="00"
                nationalPrefix="0" nationalPrefixFormattingRule="($NP$FG)">
       <availableFormats>
         <numberFormat pattern="(\d{2})(\d{6})">
-          <leadingDigits>[17]|9[1-49]</leadingDigits>
+          <leadingDigits>
+            [17]|
+            9[1-469]
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d{5})">
@@ -346,7 +498,10 @@
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d{2})(\d{3})"
           nationalPrefixFormattingRule="$NP $FG">
-          <leadingDigits>8|90</leadingDigits>
+          <leadingDigits>
+            8|
+            90
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
       </availableFormats>
@@ -355,11 +510,29 @@
         <possibleNumberPattern>\d{5,8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:10\d|2(?:2[2-46]|3[1-8]|4[2-69]|5[2-7]|6[1-9]|8[1-7])|3[12]2)\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            10\d|
+            2(?:
+              2[2-46]|
+              3[1-8]|
+              4[2-69]|
+              5[2-7]|
+              6[1-9]|
+              8[1-7]
+            )|
+            3[12]2
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>10123456</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:77|9[1-49])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            77|
+            9[1-469]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>77123456</exampleNumber>
       </mobile>
@@ -378,6 +551,14 @@
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>80112345</exampleNumber>
       </sharedCost>
+      <shortCode>
+        <nationalNumberPattern>
+          8[1-7]\d{2}|
+          1\d{2}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{3,4}</possibleNumberPattern>
+        <exampleNumber>8711</exampleNumber>
+      </shortCode>
     </territory>
 
     <!-- Netherlands Antilles -->
@@ -398,17 +579,71 @@
         <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:318|5(?:25|4\d|8[239])|7(?:1[578]|50)|9(?:[48]\d{2}|50\d|7(?:2[0-2]|[34]\d|6[35-7]|77)))\d{4}|416[0239]\d{3}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            318|
+            5(?:
+              25|
+              4\d|
+              8[239]
+            )|
+            7(?:
+              1[578]|
+              50
+            )|
+            9(?:
+              [48]\d{2}|
+              50\d|
+              7(?:
+                2[0-2]|
+                [34]\d|
+                6[35-7]|
+                77
+              )
+            )
+          )\d{4}|
+          416[0239]\d{3}
+        </nationalNumberPattern>
         <exampleNumber>7151234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:318|5(?:1[01]|2[0-7]|5\d|8[016-8])|7(0[01]|[89]\d)|9(?:5(?:[1246]\d|3[01])|6(?:[1679]\d|3[01])))\d{4}|416[15-8]\d{3}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            318|
+            5(?:
+              1[01]|
+              2[0-7]|
+              5\d|
+              8[016-8]
+            )|
+            7(?:
+              0[01]|
+              [89]\d
+            )|
+            9(?:
+              5(?:
+                [1246]\d|
+                3[01]
+              )|
+              6(?:
+                [1679]\d|
+                3[01]
+              )
+            )
+          )\d{4}|
+          416[15-8]\d{3}
+        </nationalNumberPattern>
         <exampleNumber>3181234</exampleNumber>
       </mobile>
-      <!-- Value-added services are lumped together under shared cost, since we
-      are not sure exactly what they are.-->
+      <!-- Value-added services are lumped together under shared cost, since we are not sure exactly
+           what they are. -->
       <sharedCost>
-        <nationalNumberPattern>(?:10|69)\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            10|
+            69
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>1011234</exampleNumber>
       </sharedCost>
     </territory>
@@ -426,7 +661,12 @@
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>2\d(?:[26-9]\d|\d[26-9])\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          2\d(?:
+            [26-9]\d|
+            \d[26-9]
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>222123456</exampleNumber>
       </fixedLine>
       <mobile>
@@ -460,23 +700,105 @@
           <format>9 $1 $2-$3</format>
         </intlNumberFormat>
         <numberFormat pattern="9(\d{3})(\d{3})(\d{4})">
-          <leadingDigits>9(?:2[2369]|3[458])</leadingDigits>
-          <leadingDigits>9(?:2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578]))</leadingDigits>
+          <leadingDigits>
+            9(?:
+              2[2369]|
+              3[458]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            9(?:
+              2(?:
+                2[013]|
+                37|
+                6[14]|
+                9[179]
+              )|
+              3(?:
+                4[1235]|
+                5[138]|
+                8[1578]
+              )
+            )
+          </leadingDigits>
           <format>$1 15-$2-$3</format>
         </numberFormat>
         <intlNumberFormat pattern="9(\d{3})(\d{3})(\d{4})">
-          <leadingDigits>9(?:2[2369]|3[458])</leadingDigits>
-          <leadingDigits>9(?:2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578]))</leadingDigits>
+          <leadingDigits>
+            9(?:
+              2[2369]|
+              3[458]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            9(?:
+              2(?:
+                2[013]|
+                37|
+                6[14]|
+                9[179]
+              )|
+              3(?:
+                4[1235]|
+                5[138]|
+                8[1578]
+              )
+            )
+          </leadingDigits>
           <format>9 $1 $2-$3</format>
         </intlNumberFormat>
         <numberFormat pattern="9(\d{4})(\d{2})(\d{4})">
-          <leadingDigits>9(?:2[2-469]|3[3-578])</leadingDigits>
-          <leadingDigits>9(?:2(?:2[24-9]|3[0-69]|47|6[25]|9[02-68])|3(?:3[28]|4[046-9]|5[2467]|7[1-578]|8[23469]))</leadingDigits>
+          <leadingDigits>
+            9(?:
+              2[2-469]|
+              3[3-578]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            9(?:
+              2(?:
+                2[24-9]|
+                3[0-69]|
+                47|
+                6[25]|
+                9[02-68]
+              )|
+              3(?:
+                3[28]|
+                4[046-9]|
+                5[2467]|
+                7[1-578]|
+                8[23469]
+              )
+            )
+          </leadingDigits>
           <format>$1 15-$2-$3</format>
         </numberFormat>
         <intlNumberFormat pattern="9(\d{4})(\d{2})(\d{4})">
-          <leadingDigits>9(?:2[2-469]|3[3-578])</leadingDigits>
-          <leadingDigits>9(?:2(?:2[24-9]|3[0-69]|47|6[25]|9[02-68])|3(?:3[28]|4[046-9]|5[2467]|7[1-578]|8[23469]))</leadingDigits>
+          <leadingDigits>
+            9(?:
+              2[2-469]|
+              3[3-578]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            9(?:
+              2(?:
+                2[24-9]|
+                3[0-69]|
+                47|
+                6[25]|
+                9[02-68]
+              )|
+              3(?:
+                3[28]|
+                4[046-9]|
+                5[2467]|
+                7[1-578]|
+                8[23469]
+              )
+            )
+          </leadingDigits>
           <format>9 $1 $2-$3</format>
         </intlNumberFormat>
         <numberFormat pattern="(11)(\d{4})(\d{4})">
@@ -487,16 +809,38 @@
           <leadingDigits>1</leadingDigits>
           <format>$1 $2-$3</format>
         </intlNumberFormat>
-        <!-- Some 4-digit area codes actually are caught by this
-             rule. I'm giving however preference to the 3-digit area
-             codes, since they are considerably larger
-             communities. -->
+        <!-- Some 4-digit area codes actually are caught by this rule. I'm giving however preference
+             to the 3-digit area codes, since they are considerably larger communities. -->
         <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
-          <leadingDigits>2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578])</leadingDigits>
+          <leadingDigits>
+            2(?:
+              2[013]|
+              37|
+              6[14]|
+              9[179]
+            )|
+            3(?:
+              4[1235]|
+              5[138]|
+              8[1578]
+            )
+          </leadingDigits>
           <format>$1 $2-$3</format>
         </numberFormat>
         <intlNumberFormat pattern="(\d{3})(\d{3})(\d{4})">
-          <leadingDigits>2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578])</leadingDigits>
+          <leadingDigits>
+            2(?:
+              2[013]|
+              37|
+              6[14]|
+              9[179]
+            )|
+            3(?:
+              4[1235]|
+              5[138]|
+              8[1578]
+            )
+          </leadingDigits>
           <format>$1 $2-$3</format>
         </intlNumberFormat>
         <numberFormat pattern="(\d{4})(\d{2})(\d{4})">
@@ -518,7 +862,25 @@
         <exampleNumber>1123456789</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>9(?:11[2-9]\d{7}|(?:2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578]))[2-9]\d{6}|\d{4}[2-9]\d{5})</nationalNumberPattern>
+        <nationalNumberPattern>
+          9(?:
+            11[2-9]\d{7}|
+            (?:
+              2(?:
+                2[013]|
+                37|
+                6[14]|
+                9[179]
+              )|
+              3(?:
+                4[1235]|
+                5[138]|
+                8[1578]
+              )
+            )[2-9]\d{6}|
+            \d{4}[2-9]\d{5}
+          )
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,12}</possibleNumberPattern>
         <exampleNumber>91123456789</exampleNumber>
       </mobile>
@@ -528,7 +890,12 @@
         <exampleNumber>8012345678</exampleNumber>
       </tollFree>
       <premiumRate>
-        <nationalNumberPattern>6(?:0\d|10)\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          6(?:
+            0\d|
+            10
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>6001234567</exampleNumber>
       </premiumRate>
@@ -544,16 +911,39 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>6846(?:22|33|44|55|77|88|9[19])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          6846(?:
+            22|
+            33|
+            44|
+            55|
+            77|
+            88|
+            9[19]
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>6846221234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>684(?:733|258)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          684(?:
+            733|
+            258
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>6847331234</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002123456</exampleNumber>
       </tollFree>
@@ -562,6 +952,18 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002123456</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Austria -->
@@ -570,15 +972,52 @@
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <numberFormat pattern="([15])(\d{3,12})">
-          <leadingDigits>1|5[079]</leadingDigits>
+          <leadingDigits>
+            1|
+            5[079]
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d{3,10})">
-          <leadingDigits>316|46|51|732|6(?:44|5[0-3579]|[6-9])|7(?:1|[28]0)|[89]</leadingDigits>
+          <leadingDigits>
+            316|
+            46|
+            51|
+            732|
+            6(?:
+              44|
+              5[0-3579]|
+              [6-9]
+            )|
+            7(?:
+              1|
+              [28]0
+            )|
+            [89]
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(\d{4})(\d{3,9})">
-          <leadingDigits>2|3(?:1[1-578]|[3-8])|4[2378]|5[2-6]|6(?:[12]|4[1-35-9]|5[468])|7(?:2[1-8]|35|4[1-8]|[57-9])</leadingDigits>
+          <leadingDigits>
+            2|
+            3(?:
+              1[1-578]|
+              [3-8]
+            )|
+            4[2378]|
+            5[2-6]|
+            6(?:
+              [12]|
+              4[1-35-9]|
+              5[468]
+            )|
+            7(?:
+              2[1-8]|
+              35|
+              4[1-8]|
+              [57-9]
+            )
+          </leadingDigits>
             <format>$1 $2</format>
           </numberFormat>
       </availableFormats>
@@ -587,20 +1026,82 @@
         <possibleNumberPattern>\d{3,13}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- Note the 050, 057 and 059 prefixes are defined as "private network"
-        in the Austrian plan. This just means they are registered to companies
-        who are distributed over different geographical areas and maintain their
-        own network. Examples here: http://www.rtr.at/?id=4506&S=05&art=d Also
-        note that the full area code is not validated - just the first 3 digits.
-        This also means that even though for most Austrian numbers the minimum
-        length is 7, we allow 6 since we don't differentiate below between 3 and
-        4 digit area codes for reasons of efficiency.
-        -->
-        <nationalNumberPattern>1\d{3,12}|(?:2(?:1[467]|2[134-8]|5[2357]|6[1-46-8]|7[1-8]|8[124-7]|8[1458])|3(?:1[1-8]|3[23568]|4[5-7]|5[1378]|6[1-38]|8[3-68])|4(?:2[1-8]|35|63|7[1368]|8[2457])|5(?:1[27]|2[1-8]|3[357]|4[147]|5[12578]|6[37])|6(?:13|2[1-47]|4[1-35-8]|5[468]|62)|7(?:2[1-8]|3[25]|4[13478]|5[68]|6[16-8]|7[1-6]|9[45]))\d{3,10}|5(?:0[1-9]|[79]\d)\d{2,10}|720\d{6,10}</nationalNumberPattern>
+        <!-- Note the 050, 057 and 059 prefixes are defined as "private network" in the Austrian
+             plan. This just means they are registered to companies who are distributed over
+             different geographical areas and maintain their own network. Examples here:
+             http://www.rtr.at/?id=4506&S=05&art=d Also note that the full area code is not
+             validated - just the first 3 digits. This also means that even though for most
+             Austrian numbers the minimum length is 7, we allow 6 since we don't differentiate below
+             between 3 and 4 digit area codes for reasons of efficiency. -->
+        <nationalNumberPattern>
+          1\d{3,12}|
+          (?:
+            2(?:
+              1[467]|
+              2[134-8]|
+              5[2357]|
+              6[1-46-8]|
+              7[1-8]|
+              8[124-7]|
+              8[1458]
+            )|
+            3(?:
+              1[1-8]|
+              3[23568]|
+              4[5-7]|
+              5[1378]|
+              6[1-38]|
+              8[3-68]
+            )|
+            4(?:
+              2[1-8]|
+              35|
+              63|
+              7[1368]|
+              8[2457]
+            )|
+            5(?:
+              1[27]|
+              2[1-8]|
+              3[357]|
+              4[147]|
+              5[12578]|
+              6[37]
+            )|
+            6(?:
+              13|
+              2[1-47]|
+              4[1-35-8]|
+              5[468]|
+              62
+            )|
+            7(?:
+              2[1-8]|
+              3[25]|
+              4[13478]|
+              5[68]|
+              6[16-8]|
+              7[1-6]|
+              9[45]
+            )
+          )\d{3,10}|
+          5(?:
+            0[1-9]|
+            [79]\d
+          )\d{2,10}|
+          720\d{6,10}
+        </nationalNumberPattern>
         <exampleNumber>1234567890</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>6(?:44|5[0-3579]|6[013-9]|[7-9]\d)\d{4,10}</nationalNumberPattern>
+        <nationalNumberPattern>
+          6(?:
+            44|
+            5[0-3579]|
+            6[013-9]|
+            [7-9]\d
+          )\d{4,10}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,13}</possibleNumberPattern>
         <exampleNumber>644123456</exampleNumber>
       </mobile>
@@ -610,12 +1111,25 @@
         <exampleNumber>800123456</exampleNumber>
       </tollFree>
       <premiumRate>
-        <nationalNumberPattern>(?:711|9(?:0[01]|3[019]))\d{6,10}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            711|
+            9(?:
+              0[01]|
+              3[019]
+            )
+          )\d{6,10}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9,13}</possibleNumberPattern>
         <exampleNumber>900123456</exampleNumber>
       </premiumRate>
       <sharedCost>
-        <nationalNumberPattern>8(?:10|2[018])\d{6,10}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            10|
+            2[018]
+          )\d{6,10}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9,13}</possibleNumberPattern>
         <exampleNumber>810123456</exampleNumber>
       </sharedCost>
@@ -650,12 +1164,22 @@
         </numberFormat>
         <numberFormat nationalPrefixFormattingRule="$FG"
           pattern="(1[389]\d{2})(\d{3})(\d{3})">
-          <leadingDigits>1(?:[38]0|9)</leadingDigits>
-          <leadingDigits>1(?:[38]00|9)</leadingDigits>
+          <leadingDigits>
+            1(?:
+              [38]0|
+              9
+            )
+          </leadingDigits>
+          <leadingDigits>
+            1(?:
+              [38]00|
+              9
+            )
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
-        <!-- Although the national plan doesn't explicitly say so, there is no evidence that a
-             180 xxxx number could be 180 0xxx. -->
+        <!-- Although the national plan doesn't explicitly say so, there is no evidence that a 180
+             xxxx number could be 180 0xxx. -->
         <numberFormat nationalPrefixFormattingRule="$FG"
           pattern="(180)(\d{4})">
           <leadingDigits>180</leadingDigits>
@@ -683,10 +1207,19 @@
         <exampleNumber>412345678</exampleNumber>
       </mobile>
       <tollFree>
-        <!-- Local-rate (SmartNumbers) are put here for now because they are
-             also a reverse-charge network, although they charge a small local call
-             connect fee (around 25c). These start with 13 or 1300. -->
-        <nationalNumberPattern>1(?:80(?:0\d{2})?|3(?:00\d{2})?)\d{4}</nationalNumberPattern>
+        <!-- Local-rate (SmartNumbers) are put here for now because they are also a reverse-charge
+             network, although they charge a small local call connect fee (around 25c). These start
+             with 13 or 1300. -->
+        <nationalNumberPattern>
+          1(?:
+            80(?:
+              0\d{2}
+            )? |
+            3(?:
+              00\d{2}
+            )?
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
         <exampleNumber>1800123456</exampleNumber>
       </tollFree>
@@ -695,10 +1228,9 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>1900123456</exampleNumber>
       </premiumRate>
-      <!-- Wikipedia was the source for these types of numbers, and number
-      allocation search here
-      http://web.acma.gov.au/numb/openAccess/inquiry/allocationSearch.do
-      confirms this. (Search from 0500000000 to 0590000000)-->
+      <!-- Wikipedia was the source for these types of numbers, and number allocation search here
+           http://web.acma.gov.au/numb/openAccess/inquiry/allocationSearch.do confirms this. (Search
+           from 0500000000 to 0590000000) -->
       <personalNumber>
         <nationalNumberPattern>500\d{6}</nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
@@ -724,14 +1256,32 @@
         <possibleNumberPattern>\d{7}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>5(?:2\d{2}|8(?:[2-7]\d|8[0-79]|9[48]))\d{3}</nationalNumberPattern>
+        <nationalNumberPattern>
+          5(?:
+            2\d{2}|
+            8(?:
+              [2-7]\d|
+              8[0-79]|
+              9[48]
+            )
+          )\d{3}
+        </nationalNumberPattern>
         <exampleNumber>5212345</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Adding 660 since we can successfully deliver SMS messages to
-        numbers with this prefix, and numbers can be found in the yellow pages.
-        -->
-        <nationalNumberPattern>(?:5[69]\d|660|9(?:6\d|9[02-9])|7[34]\d)\d{4}</nationalNumberPattern>
+        <!-- Adding 660 since SMS messages have been successfully delivered to numbers with this
+             prefix, and numbers can be found in the yellow pages. -->
+        <nationalNumberPattern>
+          (?:
+            5[69]\d|
+            660|
+            9(?:
+              6\d|
+              9[02-9]
+            )|
+            7[34]\d
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>5601234</exampleNumber>
       </mobile>
       <tollFree>
@@ -745,28 +1295,80 @@
     </territory>
 
     <!-- Azerbaijan -->
-    <!-- http://www.itu.int/dms_pub/itu-t/oth/02/02/T020200000F0001MSWE.doc -->
-    <territory id="AZ" countryCode="994" internationalPrefix="00">
+    <!-- http://www.itu.int/oth/T020200000F/en -->
+    <territory id="AZ" countryCode="994" internationalPrefix="00"
+        nationalPrefix="0" nationalPrefixFormattingRule="($NP$FG)">
       <availableFormats>
-        <numberFormat pattern="(\d{2})(\d{3})(\d{3,4})">
-          <leadingDigits>1[28]|22|[3-8]</leadingDigits>
-          <format>$1 $2 $3</format>
+        <numberFormat pattern="(\d{2})(\d{3})(\d{2})(\d{2})">
+          <leadingDigits>1[28]</leadingDigits>
+          <format>$1 $2 $3 $4</format>
         </numberFormat>
-        <numberFormat pattern="([12]\d{2})(\d{5})">
-          <leadingDigits>1[013-79]|2[013-9]</leadingDigits>
-          <format>$1 $2</format>
+        <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})">
+          <leadingDigits>22</leadingDigits>
+          <format>$1 $2 $3 $4</format>
+        </numberFormat>
+        <numberFormat pattern="(\d{2})(\d{2,3})(\d{2})(\d{2})">
+          <leadingDigits>3</leadingDigits>
+          <format>$1 $2 $3 $4</format>
+        </numberFormat>
+        <numberFormat pattern="(\d{3})(\d)(\d{2})(\d{2})">
+          <leadingDigits>
+            1[013-79]|
+            2[013-9]
+          </leadingDigits>
+          <format>$1 $2 $3 $4</format>
+        </numberFormat>
+        <numberFormat pattern="(\d{2})(\d{3})(\d{2})(\d{2})"
+          nationalPrefixFormattingRule="$NP$FG">
+          <leadingDigits>[4-8]</leadingDigits>
+          <format>$1 $2 $3 $4</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
         <nationalNumberPattern>[1-8]\d{7,8}</nationalNumberPattern>
-        <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+        <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:1(?:(?:[28]\d|9)\d|02|1[0-589]|3[358]|4[013-79]|5[0-479]|6[0236-9]|7[0-24-8])|2(?:16|2\d|3[0-24]|4[1468]|55|6[56]|79)|365?\d)\d{5}</nationalNumberPattern>
+        <!-- Added the 164 area code after it was found in other online lists and in many online
+             numbers. -->
+        <nationalNumberPattern>
+          (?:
+            1(?:
+              (?:
+                [28]\d|
+                9
+              )\d|
+              02|
+              1[0-589]|
+              3[358]|
+              4[013-79]|
+              5[0-479]|
+              6[02346-9]|
+              7[0-24-8]
+            )|
+            2(?:
+              16|
+              2\d|
+              3[0-24]|
+              4[1468]|
+              55|
+              6[56]|
+              79
+            )|
+            365?\d
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>123123456</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:4[04]|5[015]|60|7[07])\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            4[04]|
+            5[015]|
+            60|
+            7[07]
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>401234567</exampleNumber>
       </mobile>
@@ -792,8 +1394,12 @@
         <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- Including local tariff numbers here. -->
-        <nationalNumberPattern>(?:[35]\d|49|81)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            [35]\d|
+            49
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>30123456</exampleNumber>
       </fixedLine>
       <mobile>
@@ -812,12 +1418,17 @@
         <exampleNumber>90123456</exampleNumber>
       </premiumRate>
       <sharedCost>
-        <!-- Using this category to model national tariff numbers - these are
-        under Shared Cost in the plan. -->
+        <!-- Using this category to model national tariff numbers - these are under Shared Cost in
+             the plan. -->
         <nationalNumberPattern>82\d{6}</nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>82123456</exampleNumber>
       </sharedCost>
+      <uan>
+        <nationalNumberPattern>81\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>81123456</exampleNumber>
+      </uan>
     </territory>
 
     <!-- Barbados -->
@@ -834,12 +1445,29 @@
         <exampleNumber>2462345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>246(?:(?:2[346]|45|82)\d|25[0-4])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          246(?:
+            (?:
+              2[346]|
+              45|
+              82
+            )\d|
+            25[0-4]
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>2462501234</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002123456</exampleNumber>
       </tollFree>
@@ -848,6 +1476,18 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002123456</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Bangladesh -->
@@ -867,7 +1507,10 @@
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d{3,7})">
-          <leadingDigits>[3-79][2-9]|8</leadingDigits>
+          <leadingDigits>
+            [3-79][2-9]|
+            8
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(\d{4})(\d{6})">
@@ -876,29 +1519,155 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-      <!-- This is quite complex so we can define that numbers beginning with
-             88 are not part of the plan, so the country code can be accurately stripped
-             off. -->
-        <nationalNumberPattern>[2-79]\d{5,9}|1\d{9}|8[0-7]\d{4,8}</nationalNumberPattern>
+      <!-- This is quite complex so we can define that numbers beginning with 88 are not part of the
+           plan, so the country code can be accurately stripped off. -->
+        <nationalNumberPattern>
+          [2-79]\d{5,9}|
+          1\d{9}|
+          8[0-7]\d{4,8}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- There was a plan to move to 10 digit fixed-line numbers, but this does not seem to
-             have been realised, judging by online numbers and wikipedia. These
-             patterns are grouped first by leading digit, then within by number
-             of digits. Several Dhaka prefixes (02 731, 751 etc) are included
-             despite not being mentioned on the wikipedia page due to online
-             evidence. Another oddity is Chittagong - some numbers have a
-             leading 2, others do not - both are allowed for now. -->
-             <nationalNumberPattern>2(?:7\d1|8(?:[026]1|[1379][1-5]|8[1-8])|9(?:0[0-2]|1[1-4]|3[3-5]|5[56]|6[67]|71|8[078]))\d{4}|3(?:[6-8]1|(?:0[23]|[25][12]|82|416)\d|(?:31|12?[5-7])\d{2})\d{3}|4(?:(?:02|[49]6|[68]1)|(?:0[13]|21\d?|[23]2|[457][12]|6[28])\d|(?:23|[39]1)\d{2}|1\d{3})\d{3}|5(?:(?:[457-9]1|62)|(?:1\d?|2[12]|3[1-3]|52)\d|61{2})|6(?:[45]1|(?:11|2[15]|[39]1)\d|(?:[06-8]1|62)\d{2})|7(?:(?:32|91)|(?:02|31|[67][12])\d|[458]1\d{2}|21\d{3})\d{3}|8(?:(?:4[12]|[5-7]2|1\d?)|(?:0|3[12]|[5-7]1|217)\d)\d{4}|9(?:[35]1|(?:[024]2|81)\d|(?:1|[24]1)\d{2})\d{3}</nationalNumberPattern>
+        <!-- There was a plan to move to 10 digit fixed-line numbers, but this does not seem to have
+             been realised, judging by online numbers and wikipedia. These patterns are grouped
+             first by leading digit, then within by number of digits. Several Dhaka prefixes (02
+             731, 751 etc) are included despite not being mentioned on the wikipedia page due to
+             online evidence. Another oddity is Chittagong - some numbers have a leading 2, others
+             do not - both are allowed for now. -->
+             <nationalNumberPattern>
+               2(?:
+                 7\d1|
+                 8(?:
+                   [026]1|
+                   [1379][1-5]|
+                   8[1-8]
+                 )|
+                 9(?:
+                   0[0-2]|
+                   1[1-4]|
+                   3[3-5]|
+                   5[56]|
+                   6[67]|
+                   71|
+                   8[078]
+                 )
+               )\d{4}|
+               3(?:
+                 [6-8]1|
+                 (?:
+                   0[23]|
+                   [25][12]|
+                   82|
+                   416
+                 )\d|
+                 (?:
+                   31|
+                   12?[5-7]
+                 )\d{2}
+               )\d{3}|
+               4(?:
+                 (?:
+                   02|
+                   [49]6|
+                   [68]1
+                 )|
+                 (?:
+                   0[13]|
+                   21\d? |
+                   [23]2|
+                   [457][12]|
+                   6[28]
+                 )\d|
+                 (?:
+                   23|
+                   [39]1
+                 )\d{2}|
+                 1\d{3}
+               )\d{3}|
+               5(?:
+                 (?:
+                   [457-9]1|
+                   62
+                 )|
+                 (?:
+                   1\d? |
+                   2[12]|
+                   3[1-3]|
+                   52
+                 )\d|
+                 61{2}
+               )|
+               6(?:
+                 [45]1|
+                 (?:
+                   11|
+                   2[15]|
+                   [39]1
+                 )\d|
+                 (?:
+                   [06-8]1|
+                   62
+                 )\d{2}
+               )|
+               7(?:
+                 (?:
+                   32|
+                   91
+                 )|
+                 (?:
+                   02|
+                   31|
+                   [67][12]
+                 )\d|
+                 [458]1\d{2}|
+                 21\d{3}
+               )\d{3}|
+               8(?:
+                 (?:
+                   4[12]|
+                   [5-7]2|
+                   1\d?
+                 )|
+                 (?:
+                   0|
+                   3[12]|
+                   [5-7]1|
+                   217
+                 )\d
+               )\d{4}|
+               9(?:
+                 [35]1|
+                 (?:
+                   [024]2|
+                   81
+                 )\d|
+                 (?:
+                   1|
+                   [24]1
+                 )\d{2}
+               )\d{3}
+             </nationalNumberPattern>
         <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
         <exampleNumber>27111234</exampleNumber>
       </fixedLine>
       <mobile>
         <!-- Presuming that mobile numbers with the prefixes 66, 37, 44 and 38 must be followed by
-             numbers [02-9] or they would clash with fixed-line codes. According
-             to the plan, mobile numbers should be moving to 1[13-9] anyway. -->
-        <nationalNumberPattern>(?:1[13-9]\d|(?:3[78]|44)[02-9]|6(?:44|6[02-9]))\d{7}</nationalNumberPattern>
+             numbers [02-9] or they would clash with fixed-line codes. According to the plan, mobile
+             numbers should be moving to 1[13-9] anyway. -->
+        <nationalNumberPattern>
+          (?:
+            1[13-9]\d|
+            (?:
+              3[78]|
+              44
+            )[02-9]|
+            6(?:
+              44|
+              6[02-9]
+            )
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>1812345678</exampleNumber>
       </mobile>
@@ -914,8 +1683,8 @@
     <!-- http://www.bipt.be/en/161/ShowContent/502/Database/Databases.aspx -->
     <!-- http://www.telefoonzones.be/ -->
     <!-- Information on non-geographic numbers here: (Dutch)
-    http://www.scarletbusiness.be/business/largeenterprise/nl/products/voiceservices/servicenumbers.jsp
-    -->
+         http://www.scarletbusiness.be/business/largeenterprise/nl/products/voiceservices/servicenumbers.jsp
+         -->
     <territory id="BE" countryCode="32" internationalPrefix="00"
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
@@ -924,15 +1693,30 @@
           <format>$1 $2 $3 $4</format>
         </numberFormat>
         <numberFormat pattern="([2-49])(\d{3})(\d{2})(\d{2})">
-          <leadingDigits>[23]|[49][23]</leadingDigits>
+          <leadingDigits>
+            [23]|
+            [49][23]
+          </leadingDigits>
           <format>$1 $2 $3 $4</format>
         </numberFormat>
         <numberFormat pattern="([15-8]\d)(\d{2})(\d{2})(\d{2})">
-          <leadingDigits>[156]|7[0178]|8(?:0[1-9]|[1-79])</leadingDigits>
+          <leadingDigits>
+            [156]|
+            7[0178]|
+            8(?:
+              0[1-9]|
+              [1-79]
+            )
+          </leadingDigits>
           <format>$1 $2 $3 $4</format>
         </numberFormat>
         <numberFormat pattern="([89]\d{2})(\d{2})(\d{3})">
-          <leadingDigits>(?:80|9)0</leadingDigits>
+          <leadingDigits>
+            (?:
+              80|
+              9
+            )0
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
       </availableFormats>
@@ -941,14 +1725,33 @@
         <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- Note that 80 is a valid area code, so we explicitly check for this
-             case that the third digit begins with 1-9 -->
-        <nationalNumberPattern>(?:1[0-69]|[23][2-8]|[49][23]|5\d|6[013-57-9]|7[18])\d{6}|8(?:0[1-9]|[1-79]\d)\d{5}</nationalNumberPattern>
+        <!-- Note that 80 is a valid area code, so we explicitly check for this case that the third
+             digit begins with 1-9 -->
+        <nationalNumberPattern>
+          (?:
+            1[0-69]|
+            [23][2-8]|
+            [49][23]|
+            5\d|
+            6[013-57-9]|
+            7[18]
+          )\d{6}|
+          8(?:
+            0[1-9]|
+            [1-69]\d
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>12345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>4(?:7\d|8[4-9]|9[1-9])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          4(?:
+            7\d|
+            8[4-9]|
+            9[1-9]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>470123456</exampleNumber>
       </mobile>
@@ -958,18 +1761,28 @@
         <exampleNumber>80012345</exampleNumber>
       </tollFree>
       <premiumRate>
-        <nationalNumberPattern>(?:90|7[07])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            90|
+            7[07]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>90123456</exampleNumber>
       </premiumRate>
+      <sharedCost>
+        <nationalNumberPattern>87\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>87123456</exampleNumber>
+      </sharedCost>
     </territory>
 
     <!-- Burkina Faso -->
     <!-- http://www.itu.int/oth/T0202000021/en -->
     <territory id="BF" countryCode="226" internationalPrefix="00">
       <availableFormats>
-        <!-- The national numbering plan from ITU suggests grouping of 2, 2 and 4, but
-             we have chosen to use the standard from numbers found on the internet instead.-->
+        <!-- The national numbering plan from ITU suggests grouping of 2, 2 and 4, but we have
+             chosen to use the standard from numbers found on the internet instead. -->
         <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})">
           <format>$1 $2 $3 $4</format>
         </numberFormat>
@@ -980,14 +1793,35 @@
       </generalDesc>
       <fixedLine>
         <!-- 50 48 and 50 49 exist as well. -->
-        <nationalNumberPattern>(?:20(?:49|5[23]|9[016-9])|40(?:4[569]|55|7[0179])|50[34]\d)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            20(?:
+              49|
+              5[23]|
+              9[016-9]
+            )|
+            40(?:
+              4[569]|
+              55|
+              7[0179]
+            )|
+            50[34]\d
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>20491234</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Including the whole range of 75 despite the document restricting it
-        to only a few, since even the Zain help-line is outside the range that
-        the document specifies. -->
-        <nationalNumberPattern>7(?:[024-6]\d|1[0-489]|3[01]|8[013-9]|9[012])\d{5}</nationalNumberPattern>
+        <!-- Including the whole range of 75 despite the document restricting it to only a few,
+             since even the Zain help-line is outside the range that the document specifies. -->
+        <nationalNumberPattern>
+          7(?:
+            [024-6]\d|
+            1[0-489]|
+            3[01]|
+            8[013-9]|
+            9[012]
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>70123456</exampleNumber>
       </mobile>
     </territory>
@@ -999,32 +1833,82 @@
       <availableFormats>
         <numberFormat pattern="(2)(\d{3})(\d{3,4})">
           <leadingDigits>2</leadingDigits>
+          <format>$1/$2 $3</format>
+        </numberFormat>
+        <numberFormat pattern="(\d{3})(\d{4})">
+          <leadingDigits>
+            43[124-7]|
+            70[1-9]
+          </leadingDigits>
+          <format>$1/$2</format>
+        </numberFormat>
+        <numberFormat pattern="(\d{3})(\d{3})(\d{2})">
+          <leadingDigits>
+            43[124-7]|
+            70[1-9]
+          </leadingDigits>
+          <format>$1/$2 $3</format>
+        </numberFormat>
+        <numberFormat pattern="(\d{3})(\d{2})(\d{3})">
+          <leadingDigits>[78]00</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
-        <numberFormat pattern="(\d{3})(\d{4,5})">
-          <leadingDigits>43|800</leadingDigits>
-          <format>$1 $2</format>
-        </numberFormat>
-        <numberFormat pattern="(\d{2})(\d{2,3})(\d{3})">
-          <leadingDigits>[35-7]|4[124-7]|8[1-6]|9[1-7]</leadingDigits>
-          <format>$1 $2 $3</format>
+        <numberFormat pattern="(\d{2})(\d{3})(\d{2,3})">
+          <leadingDigits>
+            [356]|
+            7[1-9]|
+            8[1-6]|
+            9[1-7]
+          </leadingDigits>
+          <format>$1/$2 $3</format>
         </numberFormat>
         <numberFormat pattern="(\d{2})(\d{3})(\d{3,4})">
-          <leadingDigits>48|8[7-9]|9[08]</leadingDigits>
+          <leadingDigits>
+            48|
+            8[7-9]|
+            9[08]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[1-9]\d{6,8}</nationalNumberPattern>
+        <nationalNumberPattern>[2-9]\d{6,8}</nationalNumberPattern>
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>2\d{6,7}|(?:[367]\d|4[124-7]|5[1-9]|8[1-6]|9[1-7])\d{5,6}|43[1-6]\d{4,5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2\d|
+            [36]\d|
+            5[1-9]|
+            8[1-6]|
+            9[1-7]
+          )\d{5,6}|
+          (?:
+            4(?:
+              [124-7]\d|
+              3[1-6]
+            )|
+            7(?:
+              0[1-9]|
+              [1-9]\d
+            )
+          )\d{4,5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
         <exampleNumber>2123456</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:8[7-9]|98)\d{7}|43[0789]\d{5}|48\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            8[7-9]|
+            98
+          )\d{7}|
+          4(?:
+            3[0789]|
+            8\d
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
         <exampleNumber>48123456</exampleNumber>
       </mobile>
@@ -1038,10 +1922,15 @@
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>90123456</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <nationalNumberPattern>700\d{5}</nationalNumberPattern>
+        <exampleNumber>70012345</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Bahrain -->
     <!-- http://www.itu.int/oth/T0202000011/en -->
+    <!-- http://www.tra.org.bh/en/pdf/National_Numbering_Plan_2.pdf -->
     <territory id="BH" countryCode="973" internationalPrefix="00">
       <availableFormats>
         <numberFormat pattern="(\d{4})(\d{4})">
@@ -1049,19 +1938,66 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[1367]\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>[136-9]\d{7}</nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
       </generalDesc>
-      <!-- Universal Service numbers are under both Mobile and Fixed-Line, as
-      they can be assigned to either. -->
+      <!-- Universal Service numbers are under both Mobile and Fixed-Line, as they can be assigned
+           to either. -->
       <fixedLine>
-        <nationalNumberPattern>(?:1(?:3[3-6]|6[0156]|7\d)|6(?:1[16]|6[03469]|9[69])|77\d)\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            1(?:
+              3[3-6]|
+              6[0156]|
+              7\d
+            )|
+            6(?:
+              1[16]|
+              6[03469]|
+              9[69]
+            )|
+            77\d
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>17001234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:3(?:[369]\d|77|8[38])|6(?:1[16]|6[03469]|9[69])|77\d)\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            3(?:
+              [369]\d|
+              77|
+              8[38]
+            )|
+            6(?:
+              1[16]|
+              6[03469]|
+              9[69]
+            )|
+            77\d
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>36001234</exampleNumber>
       </mobile>
+      <tollFree>
+        <nationalNumberPattern>80\d{6}</nationalNumberPattern>
+        <exampleNumber>80123456</exampleNumber>
+      </tollFree>
+      <!-- 87 numbers are "wholly paid by the caller", so they are slotted under premium-rate for
+           now. -->
+      <premiumRate>
+        <nationalNumberPattern>
+          (?:
+            87|
+            9[014578]
+          )\d{6}
+        </nationalNumberPattern>
+        <exampleNumber>90123456</exampleNumber>
+      </premiumRate>
+      <sharedCost>
+        <nationalNumberPattern>84\d{6}</nationalNumberPattern>
+        <exampleNumber>84123456</exampleNumber>
+      </sharedCost>
     </territory>
 
     <!-- Burundi -->
@@ -1078,16 +2014,28 @@
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>22(?:2[0-7]|[3-5]0)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          22(?:
+            2[0-7]|
+            [3-5]0
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>22201234</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Extra online mobile number prefixes found: 79 10, 78 \d{2} and
-        76 [29]\d. -->
-        <!-- The 29 prefix is listed as a mobile prefix, but many people list
-        it as their fixed home number. We will keep it as mobile for now, but it
-        may actually be a prefix for fixed satellite phones. -->
-        <nationalNumberPattern>(?:29\d|7(?:1[1-3]|[4-9]\d))\d{5}</nationalNumberPattern>
+        <!-- Extra online mobile number prefixes found: 79 10, 78 \d{2} and 76 [29]\d. The 29
+             prefix is listed as a mobile prefix, but many people list it as their fixed home
+             number. We will keep it as mobile for now, but it may actually be a prefix for fixed
+             satellite phones. -->
+        <nationalNumberPattern>
+          (?:
+            29\d|
+            7(?:
+              1[1-3]|
+              [4-9]\d
+            )
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>79561234</exampleNumber>
       </mobile>
     </territory>
@@ -1102,24 +2050,39 @@
         <!-- Numbers beginning with 7 should be formatted as a block. -->
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[2689]\d{7}|7\d{3}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [2689]\d{7}|
+          7\d{3}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{4,8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- These come from the national numbering plan, but have been widened
-        to include other prefixes found in the yellow pages - specifically 21
-        0.-->
-        <nationalNumberPattern>2(?:02|1[037]|2[45]|3[68])\d{5}</nationalNumberPattern>
+        <!-- These come from the national numbering plan, but have been widened to include other
+             prefixes found in the yellow pages - specifically 21 0. -->
+        <nationalNumberPattern>
+          2(?:
+            02|
+            1[037]|
+            2[45]|
+            3[68]
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>20211234</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- 93 0, 93 4, 93 5 and 93 8 have been added as many online examples
-        of these prefixes can be found. 9[68] and 97[23] prefixes have also been
-        added because of online numbers following these patterns and numbers
-        where SMSs were successfully delivered.
-        66 has been also added, as it seems to be a prefix for Mobile MTN. -->
-        <nationalNumberPattern>66\d{6}|9(?:0[069]|[35][0-2457-9]|[6-8]\d)\d{5}</nationalNumberPattern>
+        <!-- 93 0, 93 4, 93 5 and 93 8 have been added as many online examples of these prefixes can
+             be found. 9[68] and 97[23] prefixes have also been added because of online numbers
+             following these patterns and numbers where SMSs were successfully delivered. 66 has
+             been also added, as it seems to be a prefix for Mobile MTN. -->
+        <nationalNumberPattern>
+          66\d{6}|
+          9(?:
+            0[069]|
+            [35][0-2457-9]|
+            [6-8]\d
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>90011234</exampleNumber>
       </mobile>
@@ -1128,9 +2091,8 @@
         <possibleNumberPattern>\d{4}</possibleNumberPattern>
         <exampleNumber>7312</exampleNumber>
       </tollFree>
-      <!-- Other numbers beginning with 81 are reserved for _either_ free phone
-      or shared-cost, but there is no clear differentiation between these. These
-      need to be modelled in some other way. -->
+      <!-- Other numbers beginning with 81 are reserved for _either_ free phone or shared-cost, but
+           there is no clear differentiation between these. -->
       <voip>
         <nationalNumberPattern>857[58]\d{4}</nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
@@ -1139,13 +2101,11 @@
     </territory>
 
     <!-- Saint Barthélemy, French Antilles -->
-    <!-- There seems to be some overlap with phone numbers from Saint Martin and
-    Guadeloupe. The national numbering plan does not specify any St
-    Barthélemy-specific numbering prefixes, but it appears from searches in
-    online white and yellow pages that a subset of the prefixes available in
-    Guadeloupe are used. In these cases, if getRegionCodeForNumber is used, one
-    of these region codes will be returned, although numbers will be valid for
-    both regions. -->
+    <!-- There seems to be some overlap with phone numbers from Saint Martin and Guadeloupe. The
+         national numbering plan does not specify any St Barthélemy-specific numbering prefixes, but
+         it appears from searches in online white and yellow pages that a subset of the prefixes
+         available in Guadeloupe are used. In these cases, if getRegionCodeForNumber is used, one of
+         these region codes will be returned, although numbers will be valid for both regions. -->
     <!-- http://www.itu.int/oth/T0202000058/en -->
     <territory id="BL" countryCode="590" internationalPrefix="00"
       nationalPrefix="0">
@@ -1155,11 +2115,25 @@
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>590(?:2[7-9]|5[12]|87)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          590(?:
+            2[7-9]|
+            5[12]|
+            87
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>590271234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>690(?:10|2[27]|66|77|8[78])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          690(?:
+            10|
+            2[27]|
+            66|
+            77|
+            8[78]
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>690221234</exampleNumber>
       </mobile>
     </territory>
@@ -1174,16 +2148,45 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>441(?:2(?:02|23|61|[3479]\d)|[46]\d{2}|5(?:4\d|60|89)|824)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          441(?:
+            2(?:
+              02|
+              23|
+              61|
+              [3479]\d
+            )|
+            [46]\d{2}|
+            5(?:
+              4\d|
+              60|
+              89
+            )|
+            824
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>4412345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>441(?:[37]\d|5[0-39])\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          441(?:
+            [37]\d|
+            5[0-39]
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>4413701234</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002123456</exampleNumber>
       </tollFree>
@@ -1192,13 +2195,25 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002123456</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Brunei Darussalam -->
     <!-- http://www.itu.int/oth/T020200001F/en -->
     <territory id="BN" countryCode="673" internationalPrefix="00"
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
-      <!-- Format is from http://aiti.gov.bn/contact.html-->
+      <!-- Format is from http://aiti.gov.bn/contact.html -->
       <availableFormats>
         <numberFormat pattern="([2-578]\d{2})(\d{4})">
           <format>$1 $2</format>
@@ -1244,28 +2259,19 @@
         <nationalNumberPattern>
           (?:
             2(?:
-              2\d{2}
-              |
-              5(?:11|[258]\d|9[67])
-              |
-              6(?:12|2\d|9[34])
-              |
+              2\d{2}|
+              5(?:11|[258]\d|9[67])|
+              6(?:12|2\d|9[34])|
               8(?:2[34]|39|62)
-            )
-            |
+            )|
             3(?:
-              3\d{2}
-              |
-              4(?:6\d|8[24])
-              |
-              8(?:25|42|5[257]|86|9[25])
-              |
+              3\d{2}|
+              4(?:6\d|8[24])|
+              8(?:25|42|5[257]|86|9[25])|
               9(?:2\d|3[234]|4[248]|5[24]|6[2-6]|7\d)
-            )
-            |
+            )|
             4(?:
-              4\d{2}
-              |
+              4\d{2}|
               6(?:11|[24689]\d|72)
             )
           )\d{4}
@@ -1287,11 +2293,10 @@
                nationalPrefix="0"
                nationalPrefixForParsing="0(?:(?:1[245]|2[135]|[34]1)(\d{10}))?"
                nationalPrefixTransformRule="$1">
-      <!--The national prefix for parsing here also contains a capturing group
-      for the main number, since the carrier codes here may also be area codes,
-      so we want to check the length of the number after capturing. We also need
-      a nationalTransformRule to repopulate with the number without the carrier
-      code.-->
+      <!--The national prefix for parsing here also contains a capturing group for the main number,
+           since the carrier codes here may also be area codes, so we want to check the length of
+           the number after capturing. We also need a nationalTransformRule to repopulate with the
+           number without the carrier code. -->
       <availableFormats>
         <numberFormat nationalPrefixFormattingRule="($FG)"
           pattern="(\d{2})(\d{4})(\d{4})"
@@ -1301,7 +2306,10 @@
         </numberFormat>
         <numberFormat pattern="([34]00\d)(\d{4})">
           <leadingDigits>[34]00</leadingDigits>
-          <leadingDigits>400|3003</leadingDigits>
+          <leadingDigits>
+            400|
+            3003
+          </leadingDigits>
           <format>$1-$2</format>
         </numberFormat>
         <numberFormat nationalPrefixFormattingRule="$NP$FG"
@@ -1315,11 +2323,27 @@
         <possibleNumberPattern>\d{8,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-5]\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            [14689][1-9]|
+            2[12478]|
+            3[1-578]|
+            5[13-5]|
+            7[13-579]
+          )[2-5]\d{7}
+        </nationalNumberPattern>
         <exampleNumber>1123456789</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[6-9]\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            [14689][1-9]|
+            2[12478]|
+            3[1-578]|
+            5[13-5]|
+            7[13-579]
+          )[6-9]\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>1161234567</exampleNumber>
       </mobile>
@@ -1332,7 +2356,12 @@
         <exampleNumber>300123456</exampleNumber>
       </premiumRate>
       <sharedCost>
-        <nationalNumberPattern>(?:400\d|3003)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            400\d|
+            3003
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>40041234</exampleNumber>
       </sharedCost>
     </territory>
@@ -1347,17 +2376,71 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>242(?:3(?:02|[236][1-9]|4[0-24-9]|5[0-68]|7[3467]|8[0-4]|9[2-467])|461|502|6(?:12|7[67]|8[78]|9[89])|702)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          242(?:
+            3(?:
+              02|
+              [236][1-9]|
+              4[0-24-9]|
+              5[0-68]|
+              7[3467]|
+              8[0-4]|
+              9[2-467]
+            )|
+            461|
+            502|
+            6(?:
+              12|
+              7[67]|
+              8[78]|
+              9[89]
+            )|
+            702
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>2423456789</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>242(?:3(?:5[79]|[79]5)|4(?:[2-4][1-9]|5[1-8]|6[2-8]|7\d|81)|5(?:2[34]|3[35]|44|5[1-9]|65|77)|6[34]6|727)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          242(?:
+            3(?:
+              5[79]|
+              [79]5
+            )|
+            4(?:
+              [2-4][1-9]|
+              5[1-8]|
+              6[2-8]|
+              7\d|
+              81
+            )|
+            5(?:
+              2[34]|
+              3[35]|
+              44|
+              5[1-9]|
+              65|
+              77
+            )|
+            6[34]6|
+            727
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>2423591234</exampleNumber>
       </mobile>
       <tollFree>
         <!-- 242 300 is a Domestic Toll Free service. -->
-        <nationalNumberPattern>242300\d{4}|8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          242300\d{4}|
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002123456</exampleNumber>
       </tollFree>
@@ -1366,6 +2449,18 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002123456</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Bhutan -->
@@ -1384,11 +2479,25 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>(?:17|[2-8])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            17|
+            [2-8]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:2[3-6]|[34][5-7]|5[236]|6[2-46]|7[246]|8[2-4])\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2[3-6]|
+            [34][5-7]|
+            5[236]|
+            6[2-46]|
+            7[246]|
+            8[2-4]
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,7}</possibleNumberPattern>
         <exampleNumber>2345678</exampleNumber>
       </fixedLine>
@@ -1418,12 +2527,49 @@
         <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:2(?:4[0-48]|6[0-24]|9[0578])|3(?:1[0235-9]|55|6\d|7[01]|9[0-57])|4(?:6[03]|7[1267]|9[0-5])|5(?:3[0389]|4[0489]|7[1-47]|88|9[0-49])|6(?:2[1-35]|5[149]|8[067]))\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2(?:
+              4[0-48]|
+              6[0-24]|
+              9[0578]
+            )|
+            3(?:
+              1[0235-9]|
+              55|
+              6\d|
+              7[01]|
+              9[0-57]
+            )|
+            4(?:
+              6[03]|
+              7[1267]|
+              9[0-5]
+            )|
+            5(?:
+              3[0389]|
+              4[0489]|
+              7[1-47]|
+              88|
+              9[0-49]
+            )|
+            6(?:
+              2[1-35]|
+              5[149]|
+              8[067]
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7}</possibleNumberPattern>
         <exampleNumber>2401234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>7[1-3]\d{6}|74[0-7]\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          7(?:
+            [1-3]\d{6}|
+            4[0-7]\d{5}
+          )
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>71123456</exampleNumber>
       </mobile>
@@ -1441,7 +2587,7 @@
 
     <!-- Belarus -->
     <!-- http://eng.beltelecom.by/info/numbering/ -->
-    <!-- Information on national prefix provided by mahaniok -->
+    <!-- Information on national prefix provided by a Belarussian person. -->
     <territory id="BY" countryCode="375" internationalPrefix="8~10"
                nationalPrefixForParsing="80?" nationalPrefix="8">
       <availableFormats>
@@ -1457,18 +2603,63 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[12-4]\d{8}|[89]\d{9}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [12-4]\d{8}|
+          [89]\d{9}
+        </nationalNumberPattern>
         <!-- Numbers are often written without the city code. -->
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:1(?:5(?:1[1-5]|2\d|6[1-4]|9[1-7])|6(?:[235]\d|4[1-7])|7\d{2})|2(?:1(?:[246]\d|3[0-35-9]|5[1-9])|2(?:[235]\d|4[0-8])|3(?:2\d|3[02-79]|4[024-7]|5[0-7])))\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            1(?:
+              5(?:
+                1[1-5]|
+                2\d|
+                6[1-4]|
+                9[1-7]
+              )|
+              6(?:
+                [235]\d|
+                4[1-7]
+              )|
+              7\d{2}
+            )|
+            2(?:
+              1(?:
+                [246]\d|
+                3[0-35-9]|
+                5[1-9]
+              )|
+              2(?:
+                [235]\d|
+                4[0-8]
+              )|
+              3(?:
+                2\d|
+                3[02-79]|
+                4[024-7]|
+                5[0-7]
+              )
+            )
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
         <!-- Using test number for Grodno from the plan. -->
         <exampleNumber>152450911</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:2(?:5[679]|9[1-9])|33\d|44\d)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2(?:
+              5[679]|
+              9[1-9]
+            )|
+            33\d|
+            44\d
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <!-- Using test number for BelCel from the plan. -->
         <exampleNumber>294911911</exampleNumber>
@@ -1487,8 +2678,51 @@
     </territory>
 
     <!-- Belize -->
-    <territory id="BZ" countryCode="501" internationalPrefix="00"
-               nationalPrefix="0">
+    <!-- http://www.itu.int/oth/T0202000016/en -->
+    <!-- The trunk prefix, formally 0, was dropped in the last reorganisation of the numbering plan.
+         -->
+    <territory id="BZ" countryCode="501" internationalPrefix="00">
+      <availableFormats>
+        <numberFormat pattern="(\d{3})(\d{4})">
+          <leadingDigits>[2-8]</leadingDigits>
+          <!-- Adding hyphen following the Belize Telemedia formatting rules. -->
+          <format>$1-$2</format>
+        </numberFormat>
+        <numberFormat pattern="(0)(800)(\d{4})(\d{3})">
+          <leadingDigits>0</leadingDigits>
+          <format>$1-$2-$3-$4</format>
+        </numberFormat>
+      </availableFormats>
+      <generalDesc>
+        <nationalNumberPattern>
+          [2-8]\d{6}|
+          0\d{10}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{7}(?:\d{4})?</possibleNumberPattern>
+      </generalDesc>
+      <fixedLine>
+        <nationalNumberPattern>[234578][02]\d{5}</nationalNumberPattern>
+        <possibleNumberPattern>\d{7}</possibleNumberPattern>
+        <exampleNumber>2221234</exampleNumber>
+      </fixedLine>
+      <mobile>
+        <nationalNumberPattern>
+          6(?:
+            [01]\d|
+            2[0-5]|
+            [67][01])\d{4}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{7}</possibleNumberPattern>
+        <exampleNumber>6221234</exampleNumber>
+      </mobile>
+      <!-- We don't know how these would be dialled internationally - it is possible that they can't
+           be dialled internationally at all - so we represent the leading 0 as part of the number.
+           Information from www.belizetelemedia.net. -->
+      <tollFree>
+        <nationalNumberPattern>0800\d{7}</nationalNumberPattern>
+        <possibleNumberPattern>\d{11}</possibleNumberPattern>
+        <exampleNumber>08001234123</exampleNumber>
+      </tollFree>
     </territory>
 
     <!-- Canada -->
@@ -1497,19 +2731,112 @@
       nationalPrefix="1">
       <generalDesc>
         <!-- NANPA country - uses US formatting rules -->
-        <nationalNumberPattern>[2-9]\d{9}|3\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [2-9]\d{9}|
+          3\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:2(?:04|26|50|89)|306|4(03|16|18|38|50|56)|5(?:00|06|14|19|81|87)|6(?:00|04|13|47)|7(?:00|05|09|10|78|80)|8(?:07|19|67))[2-9]\d{6}|310\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2(?:
+              04|
+              26|
+              50|
+              89
+            )|
+            3(?:
+              06|
+              43
+            )|
+            4(?:
+              03|
+              1[68]|
+              38|
+              5[06]
+            )|
+            5(?:
+              0[06]|
+              1[49]|
+              79|
+              8[17]
+            )|
+            6(?:
+              0[04]|
+              13|
+              47
+            )|
+            7(?:
+              0[059]|
+              [18]0|
+              78
+            )|
+            8(?:
+              [06]7|
+              19|
+            )|
+            90[25]
+          )[2-9]\d{6}|
+          310\d{4}
+        </nationalNumberPattern>
         <exampleNumber>2042345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:2(?:04|26|50|89)|306|4(03|16|18|38|50|56)|5(?:00|06|14|19|81|87)|6(?:00|04|13|47)|7(?:00|05|09|10|78|80)|8(?:07|19|67)|9(?:02|05))[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2(?:
+              04|
+              26|
+              50|
+              89
+            )|
+            3(?:
+              06|
+              43
+            )|
+            4(?:
+              03|
+              1[68]|
+              38|
+              5[06]
+            )|
+            5(?:
+              0[06]|
+              1[49]|
+              79|
+              8[17]
+            )|
+            6(?:
+              0[04]|
+              13|
+              47
+            )|
+            7(?:
+              0[059]|
+              [18]0|
+              78
+            )|
+            8(?:
+              [06]7|
+              19|
+            )|
+            90[25]
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <exampleNumber>2042345678</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}|310\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}|
+          310\d{4}
+        </nationalNumberPattern>
         <exampleNumber>8002123456</exampleNumber>
       </tollFree>
       <premiumRate>
@@ -1517,6 +2844,18 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002123456</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Congo, Dem. Rep. of the (formerly Zaire) -->
@@ -1534,7 +2873,10 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[89]\d{8}|[1-6]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [89]\d{8}|
+          [1-6]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
@@ -1543,7 +2885,12 @@
         <exampleNumber>1234567</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:8[0149]|9[7-9])\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            8[0-2489]|
+            9[7-9]
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>991234567</exampleNumber>
       </mobile>
@@ -1579,25 +2926,32 @@
     <!-- http://www.itu.int/oth/T020200002E/en -->
     <territory id="CG" countryCode="242" internationalPrefix="00">
       <availableFormats>
-        <numberFormat pattern="(\d{3})(\d{4})">
-          <format>$1 $2</format>
+        <numberFormat pattern="(\d{2})(\d{3})(\d{4})">
+          <leadingDigits>[02]</leadingDigits>
+          <format>$1 $2 $3</format>
+        </numberFormat>
+        <numberFormat pattern="(\d)(\d{4})(\d{4})">
+          <leadingDigits>8</leadingDigits>
+          <format>$1 $2 $3</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[24-68]\d{6}</nationalNumberPattern>
-        <possibleNumberPattern>\d{7}</possibleNumberPattern>
+        <nationalNumberPattern>[028]\d{8}</nationalNumberPattern>
+        <possibleNumberPattern>\d{9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- Revision to plan in December 2009 says that the prefix '8'
-             is to be used temporarily for fixed-line numbers while
-             awaiting revision of the plan. -->
-        <nationalNumberPattern>(?:2[1-589]|8\d)\d{5}</nationalNumberPattern>
-        <exampleNumber>2123456</exampleNumber>
+        <nationalNumberPattern>222[1-589]\d{5}</nationalNumberPattern>
+        <exampleNumber>222123456</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>[4-6]\d{6}</nationalNumberPattern>
-        <exampleNumber>5012345</exampleNumber>
+        <nationalNumberPattern>0[14-6]\d{7}</nationalNumberPattern>
+        <exampleNumber>061234567</exampleNumber>
       </mobile>
+      <!-- Referred to as a "Green number" in the telephone plan. -->
+      <tollFree>
+        <nationalNumberPattern>800\d{6}</nationalNumberPattern>
+        <exampleNumber>800123456</exampleNumber>
+      </tollFree>
     </territory>
 
     <!-- Switzerland -->
@@ -1607,11 +2961,17 @@
                nationalPrefix="0"  nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <numberFormat pattern="([2-9]\d)(\d{3})(\d{2})(\d{2})">
-          <leadingDigits>[2-7]|[89]1</leadingDigits>
+          <leadingDigits>
+            [2-7]|
+            [89]1
+          </leadingDigits>
           <format>$1 $2 $3 $4</format>
         </numberFormat>
         <numberFormat pattern="([89]\d{2})(\d{3})(\d{3})">
-          <leadingDigits>8[047]|90</leadingDigits>
+          <leadingDigits>
+            8[047]|
+            90
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
       </availableFormats>
@@ -1620,7 +2980,16 @@
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:2[12467]|3[1-4]|4[134]|5[12568]|6[12]|[7-9]1)\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2[12467]|
+            3[1-4]|
+            4[134]|
+            5[12568]|
+            6[12]|
+            [7-9]1
+          )\d{7}
+        </nationalNumberPattern>
         <exampleNumber>212345678</exampleNumber>
       </fixedLine>
       <mobile>
@@ -1649,8 +3018,8 @@
     <!-- http://www.itu.int/oth/T0202000031/en -->
     <territory id="CI" countryCode="225" internationalPrefix="00">
       <availableFormats>
-        <!-- Using format from online yellow pages over format implied in
-        national numbering plan. -->
+        <!-- Using format from online yellow pages over format implied in national numbering plan.
+             -->
         <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})">
           <format>$1 $2 $3 $4</format>
         </numberFormat>
@@ -1660,12 +3029,36 @@
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:2(?:0[023]|1[02357]|[23][045]|4[03-5])|3(?:0[06]|1[069]|[2-4][07]|5[09]|6[08]))\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2(?:
+              0[023]|
+              1[02357]|
+              [23][045]|
+              4[03-5]
+            )|
+            3(?:
+              0[06]|
+              1[069]|
+              [2-4][07]|
+              5[09]|
+              6[08]
+            )
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>21234567</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Added the prefix 40. Supported by numbers found on the internet. -->
-        <nationalNumberPattern>(?:0[1-9]|4[04-9]|50|6[067])\d{6}</nationalNumberPattern>
+        <!-- Added the prefix 40 because SMS messages have been successfully delivered. Supported by
+             numbers found on the internet. -->
+        <nationalNumberPattern>
+          (?:
+            0[1-9]|
+            4[04-9]|
+            50|
+            6[067]
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>01234567</exampleNumber>
       </mobile>
     </territory>
@@ -1682,7 +3075,7 @@
     <territory id="CL" countryCode="56"
       internationalPrefix="(?:0|1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))0"
       nationalPrefix="0"
-      nationalPrefixForParsing="(?:0|1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))"
+      nationalPrefixForParsing="0|1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018])"
       nationalPrefixFormattingRule="$NP$FG">
       <!-- When dialling mobile numbers from landlines, or vice versa, you need
       a prefix of 0, which we strip here. National destinations may be dialled
@@ -1694,7 +3087,11 @@
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(\d{2})(\d{2,3})(\d{4})">
-          <leadingDigits>[357]|4[1-35]|6[13-57]</leadingDigits>
+          <leadingDigits>
+            [357]|
+            4[1-35]|
+            6[13-57]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(9)([6-9]\d{3})(\d{4})">
@@ -1707,7 +3104,10 @@
         </numberFormat>
         <numberFormat nationalPrefixFormattingRule="$FG"
           pattern="([68]00)(\d{3})(\d{3,4})">
-          <leadingDigits>60|8</leadingDigits>
+          <leadingDigits>
+            60|
+            8
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat nationalPrefixFormattingRule="$FG"
@@ -1722,13 +3122,32 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>(?:[2-9]|600|123)\d{7,8}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            [2-9]|
+            600|
+            123
+          )\d{7,8}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,11}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:2|32|41)\d{7}|(?:3[3-5]|4[235]|5[1-3578]|6[13-57]|7[1-35])\d{6,7}</nationalNumberPattern>
-        <!-- Area codes do not need to be dialled when dialling within the same
-        area, so the smallest possible number is length 6.-->
+        <nationalNumberPattern>
+          (?:
+            2|
+            32|
+            41
+          )\d{7}|
+          (?:
+            3[3-5]|
+            4[235]|
+            5[1-3578]|
+            6[13-57]|
+            7[1-35]
+          )\d{6,7}
+        </nationalNumberPattern>
+        <!-- Area codes do not need to be dialled when dialling within the same area, so the
+             smallest possible number is length 6. -->
         <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
         <exampleNumber>21234567</exampleNumber>
       </fixedLine>
@@ -1737,11 +3156,14 @@
         <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
         <exampleNumber>961234567</exampleNumber>
       </mobile>
-      <!-- Toll free and premium rate patterns have been collected by looking at
-      numbers on the internet, rather than from a definitive source. -->
+      <!-- Toll free and premium rate patterns have been collected by looking at numbers on the
+           internet, rather than from a definitive source. -->
       <tollFree>
         <!-- 1230 numbers are used by Visa/Mastercard helplines in Chile -->
-        <nationalNumberPattern>800\d{6}|1230\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          800\d{6}|
+          1230\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9,11}</possibleNumberPattern>
         <exampleNumber>800123456</exampleNumber>
       </tollFree>
@@ -1761,12 +3183,15 @@
     <!-- http://www.itu.int/oth/T0202000024/en -->
     <territory id="CM" countryCode="237" internationalPrefix="00">
       <availableFormats>
-        <!-- Formatting on the internet is consistently with the first 2
-        extracted, and usually in the same format as France (all 2 digit groups)
-        so we use this instead of the guidance of the national numbering plan
-        (which has 1 3 2 2 and 4 4 as its two formatting examples.)-->
+        <!-- Formatting on the internet is consistently with the first 2 extracted, and usually in
+             the same format as France (all 2 digit groups) so we use this instead of the guidance
+             of the national numbering plan (which has 1 3 2 2 and 4 4 as its two formatting
+             examples.) -->
         <numberFormat pattern="([237-9]\d)(\d{2})(\d{2})(\d{2})">
-          <leadingDigits>[2379]|88</leadingDigits>
+          <leadingDigits>
+            [2379]|
+            88
+          </leadingDigits>
           <format>$1 $2 $3 $4</format>
         </numberFormat>
         <numberFormat pattern="(800)(\d{2})(\d{3})">
@@ -1779,12 +3204,16 @@
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- Technically, the numbers are required only to start with a 2 or a
-        3, but all numbers at the moment start with 22 or 33 since they have
-        been migrated from seven digit numbers beginning with these numbers.
-        This rule should be relaxed if/when we start getting numbers beginning
-        in other ways. -->
-        <nationalNumberPattern>(?:22|33)\d{6}</nationalNumberPattern>
+        <!-- Technically, the numbers are required only to start with a 2 or a 3, but all numbers at
+             the moment start with 22 or 33 since they have been migrated from seven digit numbers
+             beginning with these numbers. This rule should be relaxed if/when we start getting
+             numbers beginning in other ways. -->
+        <nationalNumberPattern>
+          (?:
+            22|
+            33
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>22123456</exampleNumber>
       </fixedLine>
       <mobile>
@@ -1796,9 +3225,9 @@
         <exampleNumber>80012345</exampleNumber>
       </tollFree>
       <premiumRate>
-        <!-- These numbers are listed as value-added in the guide, and in
-        practice seem to begin with 88 (usually 880). No information can be
-        found as to whether these are premium rate or shared cost.-->
+        <!-- These numbers are listed as value-added in the guide, and in practice seem to begin
+             with 88 (usually 880). No information can be found as to whether these are premium rate
+             or shared cost. -->
         <nationalNumberPattern>88\d{6}</nationalNumberPattern>
         <exampleNumber>88012345</exampleNumber>
       </premiumRate>
@@ -1835,20 +3264,108 @@
         </numberFormat>
         <numberFormat nationalPrefixFormattingRule="$NP$FG"
           pattern="([12]\d)(\d{4})(\d{4})">
-          <leadingDigits>10[1-9]|2[02-9]</leadingDigits>
+          <leadingDigits>
+            10[1-9]|
+            2[02-9]
+          </leadingDigits>
           <!-- Note the leadingDigitsPattern for 4 digits is the same as 3 digits, -->
-          <leadingDigits>10[1-9]|2[02-9]</leadingDigits>
-          <leadingDigits>10(?:[1-79]|8(?:[1-9]|0[1-9]))|2[02-9]</leadingDigits>
+          <leadingDigits>
+            10[1-9]|
+            2[02-9]
+          </leadingDigits>
+          <leadingDigits>
+            10(?:
+              [1-79]|
+              8(?:
+                [1-9]|
+                0[1-9]
+              )
+            )|
+            2[02-9]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat nationalPrefixFormattingRule="$NP$FG"
           pattern="(\d{3})(\d{4})(\d{4})">
-          <leadingDigits>3(?:11|7[159])|4[135]1|5(?:1|2[37]|3[12]|7[13-79]|9[15])|7(?:31|5[457]|6[09])|898</leadingDigits>
+          <leadingDigits>
+            3(?:
+              11|
+              7[159]
+            )|
+            4[135]1|
+            5(?:
+              1|
+              2[37]|
+              3[12]|
+              7[13-79]|
+              9[15]
+            )|
+            7(?:
+              31|
+              5[457]|
+              6[09]
+            )|
+            898
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat nationalPrefixFormattingRule="$NP$FG"
           pattern="(\d{3})(\d{3})(\d{4})">
-          <leadingDigits>3(?:1[02-9]|35|49|5|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[4789]|7[0-46-9]|8[23])|5(?:3[03-9]|4[36]|5|6[1-6]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|[37]|5[1-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])</leadingDigits>
+          <leadingDigits>
+            3(?:
+              1[02-9]|
+              35|
+              49|
+              5|
+              7[02-68]|
+              9[1-68]
+            )|
+            4(?:
+              1[02-9]|
+              2[179]|
+              [35][2-9]|
+              6[4789]|
+              7[0-46-9]|
+              8[23]
+            )|
+            5(?:
+              3[03-9]|
+              4[36]|
+              5|
+              6[1-6]|
+              7[028]|
+              80|
+              9[2-46-9]
+            )|
+            6(?:
+              3[1-5]|
+              6[0238]|
+              9[12]
+            )|
+            7(?:
+              01|
+              [1579]|
+              2[248]|
+              3[04-9]|
+              4[3-6]|
+              6[2368]
+            )|
+            8(?:
+              1[236-8]|
+              2[5-7]|
+              [37]|
+              5[1-9]|
+              8[3678]|
+              9[1-7]
+            )|
+            9(?:
+              0[1-3689]|
+              1[1-79]|
+              [379]|
+              4[13]|
+              5[1-5]
+            )
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(1[3-58]\d)(\d{4})(\d{4})">
@@ -1866,10 +3383,25 @@
           <format>$1 $2 $3</format>
         </intlNumberFormat>
         <intlNumberFormat pattern="([12]\d)(\d{4})(\d{4})">
-          <leadingDigits>10[1-9]|2[02-9]</leadingDigits>
+          <leadingDigits>
+            10[1-9]|
+            2[02-9]
+          </leadingDigits>
           <!-- Note the leadingDigitsPattern for 4 digits is the same as 3 digits, -->
-          <leadingDigits>10[1-9]|2[02-9]</leadingDigits>
-          <leadingDigits>10(?:[1-79]|8(?:[1-9]|0[1-9]))|2[02-9]</leadingDigits>
+          <leadingDigits>
+            10[1-9]|
+            2[02-9]
+          </leadingDigits>
+          <leadingDigits>
+            10(?:
+              [1-79]|
+              8(?:
+                [1-9]|
+                0[1-9]
+              )
+            )|
+            2[02-9]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </intlNumberFormat>
         <intlNumberFormat pattern="(80\d{2})(\d{4})">
@@ -1878,12 +3410,85 @@
         </intlNumberFormat>
         <intlNumberFormat
           pattern="(\d{3})(\d{4})(\d{4})">
-          <leadingDigits>3(?:11|7[159])|4[135]1|5(?:1|2[37]|3[12]|7[13-79]|9[15])|7(?:31|5[457]|6[09])|898</leadingDigits>
+          <leadingDigits>
+            3(?:
+              11|
+              7[159]
+            )|
+            4[135]1|
+            5(?:
+              1|
+              2[37]|
+              3[12]|
+              7[13-79]|
+              9[15]
+            )|
+            7(?:
+              31|
+              5[457]|
+              6[09]
+            )|
+            898
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </intlNumberFormat>
         <intlNumberFormat
           pattern="(\d{3})(\d{3})(\d{4})">
-          <leadingDigits>3(?:1[02-9]|35|49|5|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[4789]|7[0-46-9]|8[23])|5(?:3[03-9]|4[36]|5|6[1-6]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|[37]|5[1-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])</leadingDigits>
+          <leadingDigits>
+            3(?:
+              1[02-9]|
+              35|
+              49|
+              5|
+              7[02-68]|
+              9[1-68]
+            )|
+            4(?:
+              1[02-9]|
+              2[179]|
+              [35][2-9]|
+              6[4789]|
+              7[0-46-9]|
+              8[23]
+            )|
+            5(?:
+              3[03-9]|
+              4[36]|
+              5|
+              6[1-6]|
+              7[028]|
+              80|
+              9[2-46-9]
+            )|
+            6(?:
+              3[1-5]|
+              6[0238]|
+              9[12]
+            )|
+            7(?:
+              01|
+              [1579]|
+              2[248]|
+              3[04-9]|
+              4[3-6]|
+              6[2368]
+            )|
+            8(?:
+              1[236-8]|
+              2[5-7]|
+              [37]|
+              5[1-9]|
+              8[3678]|
+              9[1-7]
+            )|
+            9(?:
+              0[1-3689]|
+              1[1-79]|
+              [379]|
+              4[13]|
+              5[1-5]
+            )
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </intlNumberFormat>
         <intlNumberFormat pattern="(1[3-58]\d)(\d{4})(\d{4})">
@@ -1902,15 +3507,110 @@
         </intlNumberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[1-79]\d{7,11}|8[0-357-9]\d{6,9}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [1-79]\d{7,11}|
+          8[0-357-9]\d{6,9}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{4,12}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>21\d{8,10}|(?:10|2[02-57-9]|3(?:11|7[159])|4[135]1|5(?:1\d|2[37]|3[12]|7[13-79]|9[15])|7(?:31|5[457]|6[09])|898)\d{8}|(?:3(?:1[02-9]|35|49|5\d|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[4789]|7[0-46-9]|8[23])|5(?:3[03-9]|4[36]|5\d|6[1-6]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\d|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|[37]\d|5[1-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]\d|4[13]|5[1-5]))\d{7}|80(?:29|6[03578]|7[018]|81)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          21\d{8,10}|
+          (?:
+            10|
+            2[02-57-9]|
+            3(?:
+              11|
+              7[159]
+            )|
+            4[135]1|
+            5(?:
+              1\d|
+              2[37]|
+              3[12]|
+              7[13-79]|
+              9[15]
+            )|
+            7(?:
+              31|
+              5[457]|
+              6[09]
+            )|
+            898
+          )\d{8}|
+          (?:
+            3(?:
+              1[02-9]|
+              35|
+              49|
+              5\d|
+              7[02-68]|
+              9[1-68]
+            )|
+            4(?:
+              1[02-9]|
+              2[179]|
+              [35][2-9]|
+              6[4789]|
+              7[0-46-9]|
+              8[23]
+            )|
+            5(?:
+              3[03-9]|
+              4[36]|
+              5\d|
+              6[1-6]|
+              7[028]|
+              80|
+              9[2-46-9]
+            )|
+            6(?:
+              3[1-5]|
+              6[0238]|
+              9[12]
+            )|
+            7(?:
+              01|
+              [1579]\d|
+              2[248]|
+              3[04-9]|
+              4[3-6]|
+              6[2368]
+            )|
+            8(?:
+              1[236-8]|
+              2[5-7]|
+              [37]\d|
+              5[1-9]|
+              8[3678]|
+              9[1-7]
+            )|
+            9(?:
+              0[1-3689]|
+              1[1-79]|
+              [379]\d|
+              4[13]|
+              5[1-5]
+            )
+          )\d{7}|
+          80(?:
+            29|
+            6[03578]|
+            7[018]|
+            81
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>1012345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>1(?:3[0-9]|47|5[0135689]|8[05-9])\d{8}</nationalNumberPattern>
+        <nationalNumberPattern>
+          1(?:
+            3[0-9]|
+            47|
+            5[0135689]|
+            8[05-9]
+          )\d{8}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{11}</possibleNumberPattern>
         <exampleNumber>13123456789</exampleNumber>
       </mobile>
@@ -1919,7 +3619,11 @@
            collected from searching the web. -->
       <!-- http://en.wikipedia.org/wiki/Toll-free_telephone_number -->
       <tollFree>
-        <nationalNumberPattern>(?:10)?800\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            10
+          )?800\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10,12}</possibleNumberPattern>
         <exampleNumber>8001234567</exampleNumber>
       </tollFree>
@@ -1936,37 +3640,228 @@
     </territory>
 
     <!-- Colombia -->
-    <territory id="CO" countryCode="57" internationalPrefix="(?:00[579]|#555|#999)"
-               nationalPrefix="0">
+    <!-- http://www.itu.int/oth/T020200002C/en
+         http://en.wikipedia.org/wiki/Telephone_numbers_in_Colombia -->
+    <territory id="CO" countryCode="57" internationalPrefix="00[579]|#555|#999"
+               nationalPrefix="0" nationalPrefixForParsing="0(?:[3579]|4(?:44|56))">
+      <availableFormats>
+        <numberFormat pattern="(\d)(\d{7})">
+          <leadingDigits>
+            1(?:
+              8[2-9]|
+              9[0-3]|
+              [2-7]
+            )|
+            [24-8]
+          </leadingDigits>
+          <leadingDigits>
+            1(?:
+              8[2-9]|
+              9(?:
+                09|
+                [1-3]
+              )|
+              [2-7]
+            )|
+            [24-8]
+          </leadingDigits>
+          <format>($1) $2</format>
+        </numberFormat>
+        <intlNumberFormat pattern="(\d)(\d{7})">
+          <leadingDigits>
+            1(?:
+              8[2-9]|
+              9[0-3]|
+              [2-7]
+            )|
+            [24-8]
+          </leadingDigits>
+          <leadingDigits>
+            1(?:
+              8[2-9]|
+              9(?:
+                09|
+                [1-3]
+              )|
+              [2-7]
+            )|
+            [24-8]
+          </leadingDigits>
+          <format>$1 $2</format>
+        </intlNumberFormat>
+        <numberFormat pattern="(\d{3})(\d{7})">
+          <leadingDigits>3</leadingDigits>
+          <format>$1 $2</format>
+        </numberFormat>
+        <intlNumberFormat pattern="(\d{3})(\d{7})">
+          <leadingDigits>3</leadingDigits>
+          <format>$1 $2</format>
+        </intlNumberFormat>
+        <numberFormat pattern="(1)(\d{3})(\d{7})" nationalPrefixFormattingRule="$NP$FG">
+          <leadingDigits>
+            1(?:
+              80|
+              9[04]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            1(?:
+              800|
+              9(?:
+                0[01]|
+                4[78]
+              )
+            )
+          </leadingDigits>
+          <format>$1-$2-$3</format>
+        </numberFormat>
+        <intlNumberFormat pattern="(1)(\d{3})(\d{7})">
+          <leadingDigits>
+            1(?:
+              80|
+              9[04]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            1(?:
+              800|
+              9(?:
+                0[01]|
+                4[78]
+              )
+            )
+          </leadingDigits>
+          <format>$1 $2 $3</format>
+        </intlNumberFormat>
+      </availableFormats>
+      <generalDesc>
+        <nationalNumberPattern>
+          (?:
+            [13]\d{0,3}|
+            [24-8]
+          )\d{7}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{7,11}</possibleNumberPattern>
+      </generalDesc>
+      <fixedLine>
+        <nationalNumberPattern>[124-8][2-9]\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>12345678</exampleNumber>
+      </fixedLine>
+      <mobile>
+        <nationalNumberPattern>
+          3(?:
+            0[0-24]|
+            1[0-8]|
+            2[01]
+          )\d{7}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>3211234567</exampleNumber>
+      </mobile>
+      <tollFree>
+        <nationalNumberPattern>1800\d{7}</nationalNumberPattern>
+        <possibleNumberPattern>\d{11}</possibleNumberPattern>
+        <exampleNumber>18001234567</exampleNumber>
+      </tollFree>
+      <premiumRate>
+        <nationalNumberPattern>
+          19(?:
+            0[01]|
+            4[78]
+          )\d{7}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{11}</possibleNumberPattern>
+        <exampleNumber>19001234567</exampleNumber>
+      </premiumRate>
     </territory>
 
     <!-- Costa Rica -->
     <!-- http://www.itu.int/oth/T0202000030/en -->
     <territory id="CR" countryCode="506" internationalPrefix="00">
       <availableFormats>
-        <numberFormat pattern="([28]\d{3})(\d{4})">
+        <numberFormat pattern="(\d{4})(\d{4})">
+          <leadingDigits>
+            2|
+            8[389]
+          </leadingDigits>
+          <format>$1 $2</format>
+        </numberFormat>
+        <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+          <leadingDigits>[89]0</leadingDigits>
+          <format>$1-$2-$3</format>
+        </numberFormat>
+      </availableFormats>
+      <generalDesc>
+        <nationalNumberPattern>[289]\d{7,9}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8,10}</possibleNumberPattern>
+      </generalDesc>
+      <fixedLine>
+        <nationalNumberPattern>2[24-7]\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>22123456</exampleNumber>
+      </fixedLine>
+      <mobile>
+        <nationalNumberPattern>8[389]\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>83123456</exampleNumber>
+      </mobile>
+      <tollFree>
+          <nationalNumberPattern>800\d{7}</nationalNumberPattern>
+          <possibleNumberPattern>\d{10}</possibleNumberPattern>
+          <exampleNumber>8001234567</exampleNumber>
+      </tollFree>
+      <premiumRate>
+          <!-- Includes "mass calls" numbers with prefix 905. -->
+          <nationalNumberPattern>90[059]\d{7}</nationalNumberPattern>
+          <possibleNumberPattern>\d{10}</possibleNumberPattern>
+          <exampleNumber>9001234567</exampleNumber>
+      </premiumRate>
+    </territory>
+
+    <!-- Cuba -->
+    <!-- www.itu.int/oth/T0202000033/en -->
+    <territory id="CU" countryCode="53" internationalPrefix="119"
+               nationalPrefix="0" nationalPrefixFormattingRule="($NP$FG)">
+      <availableFormats>
+        <numberFormat pattern="(\d)(\d{6,7})">
+          <leadingDigits>7</leadingDigits>
+          <format>$1 $2</format>
+        </numberFormat>
+        <numberFormat pattern="(\d{2})(\d{4,6})">
+          <leadingDigits>[2-4]</leadingDigits>
+          <format>$1 $2</format>
+        </numberFormat>
+        <numberFormat pattern="(\d)(\d{7})" nationalPrefixFormattingRule="$NP$FG">
+          <leadingDigits>5</leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[28]\d{7}</nationalNumberPattern>
-        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <nationalNumberPattern>[2-57]\d{5,7}</nationalNumberPattern>
+        <possibleNumberPattern>\d{4,8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>2[24-7]\d{6}</nationalNumberPattern>
-        <exampleNumber>22123456</exampleNumber>
+        <nationalNumberPattern>
+          2[1-4]\d{5,6}|
+          3(?:
+            1\d{6}|
+            [23]\d{4,6})|
+          4(?:
+            [125]\d{5,6}|
+            [36]\d{6}|
+            [78]\d{4,6})|
+          7\d{6,7}
+        </nationalNumberPattern>
+        <exampleNumber>71234567</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>8[38]\d{6}</nationalNumberPattern>
-        <exampleNumber>83123456</exampleNumber>
+        <nationalNumberPattern>5\d{7}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>51234567</exampleNumber>
       </mobile>
     </territory>
 
-    <!-- Cuba -->
-    <territory id="CU" countryCode="53" internationalPrefix="119"
-               nationalPrefix="0">
-    </territory>
-
     <!-- Cape Verde -->
     <!-- http://www.itu.int/oth/T0202000026/en -->
     <territory id="CV" countryCode="238" internationalPrefix="0">
@@ -1980,14 +3875,30 @@
         <possibleNumberPattern>\d{7}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>2(?:2[1-7]|3[0-8]|4[12]|5[1256]|6\d|7[1-3]|8[1-5])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          2(?:
+            2[1-7]|
+            3[0-8]|
+            4[12]|
+            5[1256]|
+            6\d|
+            7[1-3]|
+            8[1-5]
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>2211234</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- It seems, contrary to their numbering plan, the entire 9X range is
-        used for mobile phones, and there are plenty of
-        numbers on the internet that start with these prefixes. -->
-        <nationalNumberPattern>(?:9\d|59)\d{5}</nationalNumberPattern>
+        <!-- It seems, contrary to their numbering plan, the entire 9X range is used for mobile
+             phones. SMS messages has been successfully sent to numbers starting with 95 and 97 for
+             example, and there are plenty of numbers on the internet that start with these
+             prefixes. -->
+        <nationalNumberPattern>
+          (?:
+            9\d|
+            59
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>9911234</exampleNumber>
       </mobile>
     </territory>
@@ -2010,9 +3921,15 @@
         <exampleNumber>22345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Universal Access Service numbers (7777 xxxx) are included here, as they are
-             classified as Mobile in the Cyprus national numbering plan. -->
-        <nationalNumberPattern>7777\d{4}|9(?:[69]\d|7[67])\d{5}</nationalNumberPattern>
+        <!-- Universal Access Service numbers (7777 xxxx) are included here, as they are classified
+             as Mobile in the Cyprus national numbering plan. -->
+        <nationalNumberPattern>
+          7777\d{4}|
+          9(?:
+            [69]\d|
+            7[67]
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>96123456</exampleNumber>
       </mobile>
       <tollFree>
@@ -2043,11 +3960,21 @@
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>2\d{8}|(?:3[1257-9]|4[16-9]|5[13-9])\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          2\d{8}|
+          (?:
+            3[1257-9]|
+            4[16-9]|
+            5[13-9]
+          )\d{7}
+        </nationalNumberPattern>
         <exampleNumber>212345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>60[1-8]\d{6}|7[2379]\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          60[1-8]\d{6}|
+          7[2379]\d{7}
+        </nationalNumberPattern>
         <exampleNumber>601123456</exampleNumber>
       </mobile>
       <tollFree>
@@ -2069,39 +3996,153 @@
     </territory>
 
     <!-- Germany -->
-    <!-- http://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000510001XLSE.xls -->
+    <!-- http://www.itu.int/oth/T0202000051/en -->
     <territory id="DE" countryCode="49" internationalPrefix="00"
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <numberFormat pattern="(\d{2})(\d{4,11})">
-          <leadingDigits>3[02]|40|[68]9</leadingDigits>
+          <leadingDigits>
+            3[02]|
+            40|
+            [68]9
+          </leadingDigits>
           <format>$1/$2</format>
         </numberFormat>
         <!-- The order of the rules on 3-5 digits area code matter as fallback is used here. -->
-        <!-- 3 digit area codes.-->
+        <!-- 3 digit area codes. -->
         <numberFormat pattern="(\d{3})(\d{3,10})">
-          <leadingDigits>2(?:\d1|0[2389]|1[24]|28|34)|3(?:[3-9][15]|40)|[4-8][1-9]1|9(?:06|[1-9]1)</leadingDigits>
+          <leadingDigits>
+            2(?:
+              \d1|
+              0[2389]|
+              1[24]|
+              28|
+              34
+            )|
+            3(?:
+              [3-9][15]|
+              40
+            )|
+            [4-8][1-9]1|
+            9(?:
+              06|
+              [1-9]1
+            )
+          </leadingDigits>
           <format>$1/$2</format>
         </numberFormat>
-        <!-- 4 digit area codes.-->
+        <!-- 4 digit area codes. -->
         <numberFormat pattern="(\d{4})(\d{2,8})">
-          <leadingDigits>[24-6]|[7-9](?:\d[1-9]|[1-9]\d)|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])</leadingDigits>
-          <leadingDigits>[24-6]|[7-9](?:\d[1-9]|[1-9]\d)|3(?:3(?:0[1-467]|2[127-9]|3[124578]|[46][1246]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|3[1357]|4[13578]|6[1246]|7[1356]|9[1346])|5(?:0[14]|2[1-3589]|3[1357]|4[1246]|6[1-4]|7[1346]|8[13568]|9[1246])|6(?:0[356]|2[1-489]|3[124-6]|4[1347]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|3[1357]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|4[1347]|6[0135-9]|7[1467]|8[136])|9(?:0[12479]|2[1358]|3[1357]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))</leadingDigits>
+          <leadingDigits>
+            [24-6]|
+            [7-9](?:
+              \d[1-9]|
+              [1-9]\d
+            )|
+            3(?:
+              [3569][02-46-9]|
+              4[2-4679]|
+              7[2-467]|
+              8[2-46-8]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            [24-6]|
+            [7-9](?:
+              \d[1-9]|
+              [1-9]\d
+            )|
+            3(?:
+              3(?:
+                0[1-467]|
+                2[127-9]|
+                3[124578]|
+                [46][1246]|
+                7[1257-9]|
+                8[1256]|
+                9[145]
+              )|
+              4(?:
+                2[135]|
+                3[1357]|
+                4[13578]|
+                6[1246]|
+                7[1356]|
+                9[1346]
+              )|
+              5(?:
+                0[14]|
+                2[1-3589]|
+                3[1357]|
+                4[1246]|
+                6[1-4]|
+                7[1346]|
+                8[13568]|
+                9[1246]
+              )|
+              6(?:
+                0[356]|
+                2[1-489]|
+                3[124-6]|
+                4[1347]|
+                6[13]|
+                7[12579]|
+                8[1-356]|
+                9[135]
+              )|
+              7(?:
+                2[1-7]|
+                3[1357]|
+                4[145]|
+                6[1-5]|
+                7[1-4]
+              )|
+              8(?:
+                21|
+                3[1468]|
+                4[1347]|
+                6[0135-9]|
+                7[1467]|
+                8[136]
+              )|
+              9(?:
+                0[12479]|
+                2[1358]|
+                3[1357]|
+                4[134679]|
+                6[1-9]|
+                7[136]|
+                8[147]|
+                9[1468]
+              )
+            )
+          </leadingDigits>
           <format>$1/$2</format>
         </numberFormat>
-        <!-- 5 digit area codes.-->
+        <!-- 5 digit area codes. -->
         <numberFormat pattern="(\d{5})(\d{1,6})">
           <leadingDigits>3</leadingDigits>
           <format>$1/$2</format>
         </numberFormat>
         <!-- http://www.t-mobile.de/servicehotlines/0,13401,17660-_,00.html -->
         <numberFormat pattern="([18]\d{2})(\d{7,9})">
-          <leadingDigits>1[5-7]|800</leadingDigits>
+          <leadingDigits>
+            1[5-7]|
+            800
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d)(\d{4,10})">
-          <leadingDigits>(?:18|90)0</leadingDigits>
-          <leadingDigits>180|900[1359]</leadingDigits>
+          <leadingDigits>
+            (?:
+              18|
+              90
+            )0
+          </leadingDigits>
+          <leadingDigits>
+            180|
+            900[1359]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(700)(\d{4})(\d{4})">
@@ -2110,37 +4151,100 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <!-- When deciding whether to assume a leading 49 is a country code or
-        not, the number is examined to see if it is valid with the 49 as part of
-        the number. Due to the variable length of German numbers, this test is
-        hard to do. The national pattern is hence stricter for numbers starting
-        with 49, to try and remove the country code if the number begins with 49
-        whenever possible. -->
-        <nationalNumberPattern>(?:4[0-8]|[1-35-9]\d)\d{4,12}|49(?:4[1-8]|[0-35-7]\d)\d{2,7}</nationalNumberPattern>
+        <!-- When deciding whether to assume a leading 49 is a country code or not, the number is
+             examined to see if it is valid with the 49 as part of the number. Due to the variable
+             length of German numbers, this test is hard to do. The national pattern is hence
+             stricter for numbers starting with 49, to try and remove the country code if the number
+             begins with 49 whenever possible. -->
+        <nationalNumberPattern>
+          [1-35-9]\d{3,13}|
+          4(?:
+            [0-8]\d{4,12}|
+            9(?:
+              4[1-8]|
+              [0-35-7]\d
+            )\d{2,7}
+          )
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{2,14}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:[246]\d{2}|3[02-9]\d|5(?:0[2-8]|[38][0-8]|[124-6]\d|[79][0-7])|[789](?:[1-9]\d|0[2-9]))\d{3,10}</nationalNumberPattern>
+        <!-- The numbering plan defines rather optimistic longest-number limits - online numbers
+             don't seem to respect this. The max-length is hence extended. -->
+        <nationalNumberPattern>
+          [246]\d{5,13}|
+          3(?:
+            [03-9]\d{4,11}|
+            2\d{9}
+          )|
+          5(?:
+            0[2-8]|
+            [38][0-8]|
+            [124-6]\d|
+            [79][0-7]
+          )\d{3,10}|
+          7(?:
+            0[2-8]|
+            [1-9]\d
+          )\d{3,10}|
+          8(?:
+            0[2-9]|
+            [1-9]\d
+          )\d{3,10}|
+          9(?:
+            0[6-9]|
+            [1-9]\d
+          )\d{3,10}
+        </nationalNumberPattern>
         <exampleNumber>30123456</exampleNumber>
       </fixedLine>
       <mobile>
         <!-- Note: 8 digit numbers seem to be available for prefix 176 now,
-        although no official documentation can be found. See b/2364060 -->
-        <nationalNumberPattern>1(?:5\d{9}|7(?:[0-57-9]|6\d)\d{7}|6[02]\d{7,8}|63\d{7})</nationalNumberPattern>
+        although no official documentation can be found, according to user
+        bug-reports. -->
+        <nationalNumberPattern>
+          1(?:
+            5\d{9}|
+            7(?:
+              [0-57-9]|
+              6\d
+            )\d{7}|
+            6(?:
+              [02]\d{7,8}|
+              3\d{7}
+            )
+          )
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10,11}</possibleNumberPattern>
         <exampleNumber>15123456789</exampleNumber>
       </mobile>
+      <pager>
+        <nationalNumberPattern>
+          16(?:
+            4\d{1,10}|
+            [89]\d{1,11}
+          )
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{4,14}</possibleNumberPattern>
+        <exampleNumber>16412345</exampleNumber>
+      </pager>
       <tollFree>
         <nationalNumberPattern>800\d{7,9}</nationalNumberPattern>
         <possibleNumberPattern>\d{10,12}</possibleNumberPattern>
         <exampleNumber>8001234567</exampleNumber>
       </tollFree>
       <premiumRate>
-        <nationalNumberPattern>900(?:[135]\d{6}|9\d{7})</nationalNumberPattern>
+        <nationalNumberPattern>
+          900(?:
+            [135]\d{6}|
+            9\d{7}
+          )
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10,11}</possibleNumberPattern>
         <exampleNumber>9001234567</exampleNumber>
       </premiumRate>
       <sharedCost>
+        <!-- See bug 1683119 for a discussion about maximum number lengths. -->
         <nationalNumberPattern>180\d{5,11}</nationalNumberPattern>
         <possibleNumberPattern>\d{8,14}</possibleNumberPattern>
         <exampleNumber>18012345</exampleNumber>
@@ -2159,24 +4263,26 @@
         <!-- The number format here is suggested in the plan and used online,
         although the phone numbers of the national numbering authority itself on
         the plan do not follow this. -->
-        <numberFormat pattern="([2-8]\d)(\d{2})(\d{2})">
+        <numberFormat pattern="(\d{2})(\d{2})(\d{2})">
           <format>$1 $2 $3</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[2-8]\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>[1-8]\d{5}</nationalNumberPattern>
         <possibleNumberPattern>\d{6}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- 32 and 33 are not mentioned in the plan, but seem to be in use. 32
-        is the prefix of the phone number for the Télécom company itself. -->
-        <nationalNumberPattern>(?:25|3[0-6]|42)\d{4}</nationalNumberPattern>
+        <!-- Includes "Numéro long CDMA fixe" numbers starting with the digit 5. -->
+        <nationalNumberPattern>
+          (?:
+            1[05]|
+            [2-5]\d
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>251234</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- 86 and 87 have been added as prefixes since them seem to be widely
-        used in numbers found online. -->
-        <nationalNumberPattern>(?:[5-7]\d|8[0-7])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>[6-8]\d{5}</nationalNumberPattern>
         <exampleNumber>601234</exampleNumber>
       </mobile>
     </territory>
@@ -2194,13 +4300,33 @@
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:3[2-9]|4[3-9]|5[4-9]|6[2-9]|7[02-9]|8[26-9]|9[6-9])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            3[2-9]|
+            4[3-9]|
+            5[4-9]|
+            6[2-9]|
+            7[02-9]|
+            8[26-9]|
+            9[6-9]
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>32123456</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- There are some overlaps for some number prefixes - the plan says
-        that they are 'mainly' used for a certain type of number. -->
-        <nationalNumberPattern>(?:2[0-9]|3[0-2]|4[0-2]|5[0-3]|6[01]|72|99)\d{6}</nationalNumberPattern>
+        <!-- There are some overlaps for some number prefixes - the plan says that they are 'mainly'
+             used for a certain type of number. -->
+        <nationalNumberPattern>
+          (?:
+            2[0-9]|
+            3[0-2]|
+            4[0-2]|
+            5[0-3]|
+            6[01]|
+            72|
+            99
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>20123456</exampleNumber>
       </mobile>
       <tollFree>
@@ -2223,16 +4349,45 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>767(?:2(?:55|66)|4(?:2[01]|4[0-25-9])|50[0-4])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          767(?:
+            2(?:
+              55|
+              66
+            )|
+            4(?:
+              2[01]|
+              4[0-25-9]
+            )|
+            50[0-4]
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>7674201234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>767(?:2(?:[2346]5|7[5-7])|31[5-7]|61[4-6])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          767(?:
+            2(?:
+              [2346]5|
+              7[5-7]
+            )|
+            31[5-7]|
+            61[4-6]
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>7672251234</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002123456</exampleNumber>
       </tollFree>
@@ -2241,6 +4396,18 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002123456</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Dominican Rep. -->
@@ -2253,10 +4420,9 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- We could be more detailed here, as the metadata contains
-        information about some of the mobile/fixed-line prefixes, but the data
-        is incomplete, so we restrict ourselves to a more generic rule for
-        now.-->
+        <!-- We could be more detailed here, as the metadata contains information about some of the
+             mobile/fixed-line prefixes, but the data is incomplete, so we restrict ourselves to a
+             more generic rule for now. -->
         <nationalNumberPattern>8[024]9[2-9]\d{6}</nationalNumberPattern>
         <exampleNumber>8092345678</exampleNumber>
       </fixedLine>
@@ -2265,7 +4431,15 @@
         <exampleNumber>8092345678</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002123456</exampleNumber>
       </tollFree>
@@ -2274,6 +4448,18 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002123456</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Algeria -->
@@ -2297,16 +4483,35 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>(?:[1-4]|[5-9]\d)\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            [1-4]|
+            [5-9]\d
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
         <!-- We include the VSAT lines here. -->
-        <nationalNumberPattern>(?:1\d|2[014-79]|3[0-8]|4[0135689])\d{6}|9619\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            1\d|
+            2[014-79]|
+            3[0-8]|
+            4[0135689]
+          )\d{6}|
+          9619\d{5}
+        </nationalNumberPattern>
         <exampleNumber>12345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:5[56]|6[69]|7[79])\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            5[56]|
+            6[69]|
+            7[79]
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>551234567</exampleNumber>
       </mobile>
@@ -2320,9 +4525,9 @@
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>808123456</exampleNumber>
       </premiumRate>
-      <!-- The Algerian plan doesn't specify where the costs start to be
-      considered "premium", so we draw an arbitrary line here and say that from
-      50 Da up they will be considered premium. -->
+      <!-- The Algerian plan doesn't specify where the costs start to be considered "premium", so we
+           draw an arbitrary line here and say that from 50 Da up they will be considered premium.
+           -->
       <sharedCost>
         <nationalNumberPattern>80[12]1\d{5}</nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
@@ -2336,48 +4541,184 @@
     </territory>
 
     <!-- Ecuador -->
+    <!-- http://en.wikipedia.org/wiki/+593 -->
+    <!-- http://www.conatel.gov.ec -->
+    <!-- http://www.itu.int/oth/T020200003D/en -->
+    <!-- A new plan has been prepared, but no implementation date has yet been stated. -->
     <territory id="EC" countryCode="593" internationalPrefix="00"
-               nationalPrefix="0">
+               nationalPrefix="0" nationalPrefixFormattingRule="($NP$FG)">
+      <availableFormats>
+        <numberFormat pattern="(\d)(\d{3})(\d{4})">
+          <leadingDigits>[2-7]</leadingDigits>
+          <format>$1 $2-$3</format>
+        </numberFormat>
+        <intlNumberFormat pattern="(\d)(\d{3})(\d{4})">
+          <leadingDigits>[2-7]</leadingDigits>
+          <format>$1-$2-$3</format>
+        </intlNumberFormat>
+        <numberFormat pattern="(\d{2})(\d{3})(\d{3})"
+          nationalPrefixFormattingRule="$NP$FG">
+          <leadingDigits>[89]</leadingDigits>
+          <format>$1 $2 $3</format>
+        </numberFormat>
+        <intlNumberFormat pattern="(\d{2})(\d{3})(\d{3})">
+          <leadingDigits>[89]</leadingDigits>
+          <format>$1 $2 $3</format>
+        </intlNumberFormat>
+        <numberFormat pattern="(1800)(\d{3})(\d{3,4})"
+          nationalPrefixFormattingRule="$FG">
+          <leadingDigits>1</leadingDigits>
+          <format>$1 $2 $3</format>
+        </numberFormat>
+        <intlNumberFormat pattern="(1800)(\d{3})(\d{3,4})">
+          <leadingDigits>1</leadingDigits>
+          <format>$1 $2 $3</format>
+        </intlNumberFormat>
+      </availableFormats>
+      <generalDesc>
+        <nationalNumberPattern>[2-9]\d{7}|1\d{9,10}</nationalNumberPattern>
+        <possibleNumberPattern>\d{7,11}</possibleNumberPattern>
+      </generalDesc>
+      <fixedLine>
+        <nationalNumberPattern>[2-7][2-7]\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+        <exampleNumber>22123456</exampleNumber>
+      </fixedLine>
+      <mobile>
+        <nationalNumberPattern>[89]\d{7}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>99123456</exampleNumber>
+      </mobile>
+      <tollFree>
+        <nationalNumberPattern>1800\d{6,7}</nationalNumberPattern>
+        <possibleNumberPattern>\d{10,11}</possibleNumberPattern>
+        <exampleNumber>18001234567</exampleNumber>
+      </tollFree>
     </territory>
 
     <!-- Estonia -->
+    <!-- http://www.itu.int/oth/T0202000043/en -->
     <!-- http://www.tja.ee/public/Legislation_side/Numbering_/Estonian_NP_eng.htm -->
     <territory id="EE" countryCode="372" internationalPrefix="00">
       <availableFormats>
+        <!-- When 7-digit 70 numbers are phased out, they should be removed from this formatting
+             pattern and only 7[1-9] left. -->
         <numberFormat pattern="([34-79]\d{2})(\d{4})">
-          <leadingDigits>[34679]|5(?:[0-2]|5[0-478]|6[45])</leadingDigits>
-          <leadingDigits>[34679]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))</leadingDigits>
+          <leadingDigits>
+            [3679]|
+            4[3-8]|
+            5(?:
+              [0-2]|
+              5[0-478]|
+              6[45]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            [3679]|
+            4[3-8]|
+            5(?:
+              [02]|
+              1(?:
+                [0-8]|
+                95
+              )|
+              5[0-478]|
+              6(?:
+                4[0-4]|
+                5[1-589]
+              )
+            )
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
+        <numberFormat pattern="(70)(\d{2})(\d{4})">
+          <leadingDigits>70</leadingDigits>
+          <format>$1 $2 $3</format>
+        </numberFormat>
         <numberFormat pattern="(8000)(\d{3})(\d{3})">
           <leadingDigits>800</leadingDigits>
           <leadingDigits>8000</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
-        <numberFormat pattern="([58]\d{3})(\d{3,4})">
-          <leadingDigits>5|8(?:00|[1-5])</leadingDigits>
-          <leadingDigits>5|8(?:00[1-9]|[1-5])</leadingDigits>
+        <numberFormat pattern="([458]\d{3})(\d{3,4})">
+          <leadingDigits>
+            40|
+            5|
+            8(?:
+              00|
+              [1-5]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            40|
+            5|
+            8(?:
+              00[1-9]|
+              [1-5]
+            )
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[3-9]\d{6,7}|800\d{6,7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [3-9]\d{6,7}|
+          800\d{6,7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
       </generalDesc>
-      <fixedLine>
-        <nationalNumberPattern>(?:3[23589]|4[3-8]|6\d|7[1-9]|88)\d{5}</nationalNumberPattern>
+      <noInternationalDialling>
+        <nationalNumberPattern>800[2-9]\d{3}</nationalNumberPattern>
         <possibleNumberPattern>\d{7}</possibleNumberPattern>
+        <exampleNumber>8002123</exampleNumber>
+      </noInternationalDialling>
+      <fixedLine>
+        <!-- Supporting eFax numbers here as well. -->
+        <nationalNumberPattern>
+          (?:
+            3[23589]|
+            4(?:
+              0\d|
+              [3-8]
+            )|
+            6\d|
+            7[1-9]|
+            88
+          )\d{5}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
         <exampleNumber>3212345</exampleNumber>
       </fixedLine>
       <mobile>
         <!-- 7 digit mobile numbers currently in use with special prefixes are preserved - new
-        numbers are 8 digits. -->
-        <nationalNumberPattern>(?:5\d|8[1-5])\d{6}|5(?:[02]\d{2}|1(?:[0-8]\d|95)|5[0-478]\d|64[0-4]|65[1-589])\d{3}</nationalNumberPattern>
+             numbers are 8 digits. -->
+        <nationalNumberPattern>
+          (?:
+            5\d|
+            8[1-5]
+          )\d{6}|
+          5(?:
+            [02]\d{2}|
+            1(?:
+              [0-8]\d|
+              95
+            )|
+            5[0-478]\d|
+            64[0-4]|
+            65[1-589]
+          )\d{3}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
         <exampleNumber>51234567</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>800(?:0\d{3}|1\d|[2-9])\d{3}</nationalNumberPattern>
+        <nationalNumberPattern>
+          800(?:
+            0\d{3}|
+            1\d|
+            [2-9]
+          )\d{3}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
         <exampleNumber>80012345</exampleNumber>
       </tollFree>
@@ -2387,10 +4728,17 @@
         <exampleNumber>9001234</exampleNumber>
       </premiumRate>
       <personalNumber>
-        <nationalNumberPattern>70\d{5}</nationalNumberPattern>
-        <possibleNumberPattern>\d{7}</possibleNumberPattern>
-        <exampleNumber>7012345</exampleNumber>
+        <!-- The third digit is optional until Jan 1st 2011, when numbers will have been changed to
+             the new 8 digit series. -->
+        <nationalNumberPattern>70[0-2]?\d{5}</nationalNumberPattern>
+        <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+        <exampleNumber>70012345</exampleNumber>
       </personalNumber>
+      <shortCode>
+        <nationalNumberPattern>1[1-9]\d</nationalNumberPattern>
+        <possibleNumberPattern>\d{3}</possibleNumberPattern>
+        <exampleNumber>112</exampleNumber>
+      </shortCode>
     </territory>
 
     <!-- Egypt -->
@@ -2398,15 +4746,18 @@
     <territory id="EG" countryCode="20" internationalPrefix="00"
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
        <availableFormats>
-         <!-- Note that no explicit formatting rule is here for 5-digit numbers
-         starting with a 16 or 19. These are formatted without national prefix,
-         as a block, so do not need to be listed here. -->
+         <!-- Note that no explicit formatting rule is here for 5-digit numbers starting with a 16
+              or 19. These are formatted without national prefix, as a block, so do not need to be
+              listed here. -->
          <numberFormat pattern="(\d)(\d{7,8})">
            <leadingDigits>[23]</leadingDigits>
            <format>$1 $2</format>
          </numberFormat>
          <numberFormat pattern="(\d{2})(\d{7})">
-           <leadingDigits>[14-6]|[89][2-9]</leadingDigits>
+           <leadingDigits>
+             [14-6]|
+             [89][2-9]
+           </leadingDigits>
            <format>$1 $2</format>
          </numberFormat>
          <numberFormat pattern="([89]00)(\d{3})(\d{4})">
@@ -2415,13 +4766,43 @@
          </numberFormat>
        </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>1\d{4,9}|[2-689]\d{7,9}</nationalNumberPattern>
+        <nationalNumberPattern>
+          1\d{4,9}|
+          [2-689]\d{7,9}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- Short numbers used for businesses (starting with 16 or 19) are
-        covered here. -->
-        <nationalNumberPattern>(?:1[35][23]|2[23]\d|3\d|4(?:0[2-4]|[578][23]|64)|5(?:0[234]|[57][23])|6[24-689]3|8(?:[28][2-4]|42|6[23])|9(?:[25]2|3[24]|6[23]|7[2-4]))\d{6}|1[69]\d{3}</nationalNumberPattern>
+        <!-- Short numbers used for businesses (starting with 16 or 19) are covered here. -->
+        <nationalNumberPattern>
+          (?:
+            1[35][23]|
+            2[23]\d|
+            3\d|
+            4(?:
+              0[2-4]|
+              [578][23]|
+              64
+            )|
+            5(?:
+              0[234]|
+              [57][23]
+            )|
+            6[24-689]3|
+            8(?:
+              [28][2-4]|
+              42|
+              6[23]
+            )|
+            9(?:
+              [25]2|
+              3[24]|
+              6[23]|
+              7[2-4]
+            )
+          )\d{6}|
+          1[69]\d{3}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
         <exampleNumber>234567890</exampleNumber>
       </fixedLine>
@@ -2456,13 +4837,25 @@
         <possibleNumberPattern>\d{6,7}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>1(?:1[12568]|20|40|55|6[146])\d{4}|8\d{6}</nationalNumberPattern>
-        <exampleNumber>8370362</exampleNumber><!-- Test number from plan.-->
+        <nationalNumberPattern>
+          1(?:
+            1[12568]|
+            20|
+            40|
+            55|
+            6[146]
+          )\d{4}|
+          8\d{6}
+        </nationalNumberPattern>
+        <exampleNumber>8370362</exampleNumber><!-- Test number from plan. -->
       </fixedLine>
       <mobile>
-        <!-- It is unclear in the plan whether the 07 mobile prefix superseded the previous
-             017[1-3] numbers or was in addition to them, so we support both here.-->
-        <nationalNumberPattern>17[1-3]\d{4}|7\d{6}</nationalNumberPattern>
+        <!-- It is unclear in the plan whether the 07 mobile prefix superseded the previous 017[1-3]
+             numbers or was in addition to them, so we support both here. -->
+        <nationalNumberPattern>
+          17[1-3]\d{4}|
+          7\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7}</possibleNumberPattern>
         <exampleNumber>7123456</exampleNumber>
       </mobile>
@@ -2500,11 +4893,15 @@
         <nationalNumberPattern>90[12]\d{6}</nationalNumberPattern>
         <exampleNumber>901123456</exampleNumber>
       </sharedCost>
-      <!-- Modelling non-geographic nomadic numbers as Personal Numbers too. -->
       <personalNumber>
-        <nationalNumberPattern>(?:51|70)\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>70\d{7}</nationalNumberPattern>
         <exampleNumber>701234567</exampleNumber>
       </personalNumber>
+      <!-- Modelling non-geographic nomadic numbers as UAN. -->
+      <uan>
+        <nationalNumberPattern>51\d{7}</nationalNumberPattern>
+        <exampleNumber>511234567</exampleNumber>
+      </uan>
     </territory>
 
     <!-- Ethiopia -->
@@ -2521,13 +4918,160 @@
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:11(?:1(?:1[124]|2[2-57]|3[1-5]|5[5-8]|8[6-8])|2(?:13|3[6-8]|5[89]|7[05-9]|8[2-6])|3(?:2[01]|3[0-289]|4[1289]|7[1-4]|87)|4(?:1[69]|3[2-49]|4[0-23]|6[5-8])|5(?:1[57]|44|5[0-4])|6(?:18|2[69]|4[5-7]|5[1-5]|6[0-59]|8[015-8]))|2(?:2(?:11[1-9]|22[0-7]|33\d|44[1467]|66[1-68])|5(?:11[124-6]|33[2-8]|44[1467]|55[14]|66[1-3679]|77[124-79]|880))|3(?:3(?:11[0-46-8]|22[0-6]|33[0134689]|44[04]|55[0-6]|66[01467])|4(?:44[0-8]|55[0-69]|66[0-3]|77[1-5]))|4(?:6(?:22[0-24-7]|33[1-5]|44[13-69]|55[14-689]|660|88[1-4])|7(?:11[1-9]|22[1-9]|33[13-7]|44[13-6]|55[1-689]))|5(?:7(?:227|55[05]|(?:66|77)[14-8])|8(?:11[149]|22[013-79]|33[0-68]|44[013-8]|550|66[1-5]|77\d)))\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            11(?:
+              1(?:
+                1[124]|
+                2[2-57]|
+                3[1-5]|
+                5[5-8]|
+                8[6-8]
+              )|
+              2(?:
+                13|
+                3[6-8]|
+                5[89]|
+                7[05-9]|
+                8[2-6]
+              )|
+              3(?:
+                2[01]|
+                3[0-289]|
+                4[1289]|
+                7[1-4]|
+                87
+              )|
+              4(?:
+                1[69]|
+                3[2-49]|
+                4[0-23]|
+                6[5-8]
+              )|
+              5(?:
+                1[57]|
+                44|
+                5[0-4]
+              )|
+              6(?:
+                18|
+                2[69]|
+                4[5-7]|
+                5[1-5]|
+                6[0-59]|
+                8[015-8]
+              )
+            )|
+            2(?:
+              2(?:
+                11[1-9]|
+                22[0-7]|
+                33\d|
+                44[1467]|
+                66[1-68]
+              )|
+              5(?:
+                11[124-6]|
+                33[2-8]|
+                44[1467]|
+                55[14]|
+                66[1-3679]|
+                77[124-79]|
+                880
+              )
+            )|
+            3(?:
+              3(?:
+                11[0-46-8]|
+                22[0-6]|
+                33[0134689]|
+                44[04]|
+                55[0-6]|
+                66[01467]
+              )|
+              4(?:
+                44[0-8]|
+                55[0-69]|
+                66[0-3]|
+                77[1-5]
+              )
+            )|
+            4(?:
+              6(?:
+                22[0-24-7]|
+                33[1-5]|
+                44[13-69]|
+                55[14-689]|
+                660|
+                88[1-4]
+              )|
+              7(?:
+                11[1-9]|
+                22[1-9]|
+                33[13-7]|
+                44[13-6]|
+                55[1-689]
+              )
+            )|
+            5(?:
+              7(?:
+                227|
+                55[05]|
+                (?:
+                  66|
+                  77
+                )[14-8]
+              )|
+              8(?:
+                11[149]|
+                22[013-79]|
+                33[0-68]|
+                44[013-8]|
+                550|
+                66[1-5]|
+                77\d
+              )
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>111112345</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Some additional area codes are permitted here in line with online
-        numbers, namely 91 13[4-6], 91 17[2-6], 91 31\d, 91 43[2489].  -->
-        <nationalNumberPattern>91(?:1(?:[146]\d|2[0-5]|3[4-6]|50|7[2-6]|8[46-9])|31\d|4(?:3[0-2489]|7[0-3])|5(?:3[23]|7[3-5])|6(?:58|8[23])|7(?:5[57]|8[01])|8(?:3[45]|7[67]))\d{4}</nationalNumberPattern>
+        <!-- Some additional area codes are permitted here in line with online numbers, namely 91
+             13[4-6], 91 17[2-6], 91 31\d, 91 43[2489]. -->
+        <nationalNumberPattern>
+          91(?:
+            1(?:
+              [146]\d|
+              2[0-5]|
+              3[4-6]|
+              50|
+              7[2-6]|
+              8[46-9]
+            )|
+            31\d|
+            4(?:
+              3[0-2489]|
+              7[0-3]
+            )|
+            5(?:
+              3[23]|
+              7[3-5]
+            )|
+            6(?:
+              58|
+              8[23]
+            )|
+            7(?:
+              5[57]|
+              8[01]
+            )|
+            8(?:
+              3[45]|
+              7[67]
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>911123456</exampleNumber>
       </mobile>
@@ -2539,11 +5083,19 @@
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <numberFormat pattern="(\d{2})(\d{4,10})">
-          <leadingDigits>2[09]|[14]|50|7[135]</leadingDigits>
+          <leadingDigits>
+            2[09]|
+            [14]|
+            50|
+            7[135]
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(\d)(\d{4,11})">
-          <leadingDigits>[25689][1-8]|3</leadingDigits>
+          <leadingDigits>
+            [25689][1-8]|
+            3
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="([6-8]00)(\d{4,7})">
@@ -2556,13 +5108,27 @@
         <possibleNumberPattern>\d{5,12}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- This includes both geographic numbers and non-geographic nationwide
-        subscriber numbers. -->
-        <nationalNumberPattern>1(?:0[1-9]\d{3,7}|[35689][1-8]\d{3,9}|[47]\d{5,10})|2(?:0(?:[16-8]\d{3,7}|2[14-9]\d{1,6}|[3-5]\d{2,7}|9[0-7]\d{1,6})|[1-8]\d{3,9}|9\d{4,8})|3(?:0[1-9]\d{3,7}|[1-8]\d{3,9}|9\d{4,8})|[5689][1-8]\d{3,9}|7(?:1\d{7}|3\d{8}|5[03-9]\d{2,7})</nationalNumberPattern>
+        <!-- This is limited to geographic numbers - non-geographic nationwide
+        subscriber numbers are listed under UAN. -->
+        <nationalNumberPattern>
+          1(?:
+            [35689][1-8]\d{3,9}|
+            [47]\d{5,10}
+          )|
+          2[1-8]\d{3,9}|
+          3(?:
+            [1-8]\d{3,9}|
+            9\d{4,8}
+          )|
+          [5689][1-8]\d{3,9}|
+        </nationalNumberPattern>
         <exampleNumber>1312345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>4\d{5,10}|50\d{4,8}</nationalNumberPattern>
+        <nationalNumberPattern>
+          4\d{5,10}|
+          50\d{4,8}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,11}</possibleNumberPattern>
         <exampleNumber>412345678</exampleNumber>
       </mobile>
@@ -2576,6 +5142,28 @@
         <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
         <exampleNumber>600123456</exampleNumber>
       </premiumRate>
+      <uan>
+        <nationalNumberPattern>
+          10[1-9]\d{3,7}|
+          2(?:
+            0(?:
+              [16-8]\d{3,7}|
+              2[14-9]\d{1,6}|
+              [3-5]\d{2,7}|
+              9[0-7]\d{1,6}
+            )|
+            9\d{4,8}
+          )|
+          30[1-9]\d{3,7}|
+          7(?:
+            1\d{7}|
+            3\d{8}|
+            5[03-9]\d{2,7}
+          )
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+        <exampleNumber>10112345</exampleNumber>
+      </uan>
     </territory>
 
     <!-- Fiji -->
@@ -2592,7 +5180,69 @@
     </territory>
 
     <!-- Faroe Islands -->
-    <territory id="FO" countryCode="298" internationalPrefix="00">
+    <!-- http://www.itu.int/oth/T0202000047/en -->
+    <territory id="FO" countryCode="298" internationalPrefix="00"
+         nationalPrefixForParsing="10(?:01|[12]0|88)">
+      <generalDesc>
+        <nationalNumberPattern>[2-9]\d{5}</nationalNumberPattern>
+        <possibleNumberPattern>\d{6}</possibleNumberPattern>
+      </generalDesc>
+      <fixedLine>
+        <nationalNumberPattern>
+          (?:
+            20|
+            [3-4]\d|
+            8[19]
+          )\d{4}
+        </nationalNumberPattern>
+        <exampleNumber>201234</exampleNumber>
+      </fixedLine>
+      <mobile>
+        <nationalNumberPattern>
+          (?:
+            2[1-9]|
+            5\d|
+            7[1-79]
+          )\d{4}
+        </nationalNumberPattern>
+        <exampleNumber>211234</exampleNumber>
+      </mobile>
+      <tollFree>
+        <nationalNumberPattern>80[257-9]\d{3}</nationalNumberPattern>
+        <exampleNumber>802123</exampleNumber>
+      </tollFree>
+      <premiumRate>
+        <nationalNumberPattern>
+          90(?:
+            [1345][15-7]|
+            2[125-7]|
+            99
+            )\d{2}
+        </nationalNumberPattern>
+        <exampleNumber>901123</exampleNumber>
+      </premiumRate>
+      <voip>
+        <nationalNumberPattern>
+          (?:
+            6[0-36]|
+            88
+          )\d{4}
+        </nationalNumberPattern>
+        <exampleNumber>601234</exampleNumber>
+      </voip>
+      <shortCode>
+        <!-- Includes special numbers, special services and universal services.  -->
+        <nationalNumberPattern>
+          1(?:
+            1[248]|
+            4[124]\d|
+            71\d|
+            8[7-9]\d
+          )
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{3,4}</possibleNumberPattern>
+        <exampleNumber>211234</exampleNumber>
+      </shortCode>
     </territory>
 
     <!-- France -->
@@ -2622,7 +5272,10 @@
         <exampleNumber>123456789</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>6\d{8}|7[5-9]\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          6\d{8}|
+          7[5-9]\d{7}
+        </nationalNumberPattern>
         <exampleNumber>612345678</exampleNumber>
       </mobile>
       <tollFree>
@@ -2634,7 +5287,14 @@
         <exampleNumber>891123456</exampleNumber>
       </premiumRate>
       <sharedCost>
-        <nationalNumberPattern>8(?:1[019]|2[0156]|84|90)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            1[019]|
+            2[0156]|
+            84|
+            90
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>810123456</exampleNumber>
       </sharedCost>
       <voip>
@@ -2657,25 +5317,69 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[4-9]\d{5}|0\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [4-9]\d{5}|
+          0\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:4(?:[04-8]\d|2[04])|(?:5[04-689]|6[024-9]|7\d|8[236]|9[02368])\d)\d{3}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            4(?:
+              [04-8]\d|
+              2[04]
+            )|
+            (?:
+              5[04-689]|
+              6[024-9]|
+              7\d|
+              8[236]|
+              9[02368]
+            )\d
+          )\d{3}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6}</possibleNumberPattern>
         <exampleNumber>441234</exampleNumber>
       </fixedLine>
       <!-- The leading zero here is supposed to be temporary - at a later date,
       Gabon intends to have a 0 as their national prefix for all numbers
       instead. -->
-      <!-- http://www.wtng.info/wtng-241-ga.html was used as the basis for the
-      acceptable prefixes, with some supplementary prefixes added from internet
-      research. There is supposedly a resource on mobile prefixes on the Gabon
-      Telecom website, but the site (www.ogooue.ga) doesn't seem to work and no
-      alternative can be found. Extra prefixes added: 07 12, 07 13, 06 71, 07
-      33, 07 [67]\d -->
+      <!-- http://www.wtng.info/wtng-241-ga.html was used as the basis for the acceptable prefixes,
+           with some supplementary prefixes added from internet research. There is supposedly a
+           resource on mobile prefixes on the Gabon Telecom website, but the site (www.ogooue.ga)
+           doesn't seem to work and no alternative can be found. Extra prefixes added: 07 12, 07 13,
+           06 71, 07 33, 07 [67]\d -->
       <mobile>
-        <nationalNumberPattern>0(?:5(?:0[89]|3[0-4]|8[0-26]|9[238])|6(?:0[3-7]|1[01]|2[0-7]|6[0-589]|71|83|9[57])|7(?:1[2-5]|2[89]|3[35-9]|4[01]|5[0-347-9]|[67]\d|8[457-9]|9[0146]))\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          0(?:
+            5(?:
+              0[89]|
+              3[0-4]|
+              8[0-26]|
+              9[238]
+            )|
+            6(?:
+              0[3-7]|
+              1[01]|
+              2[0-7]|
+              6[0-589]|
+              71|
+              83|
+              9[57]
+            )|
+            7(?:
+              1[2-5]|
+              2[89]|
+              3[35-9]|
+              4[01]|
+              5[0-347-9]|
+              [67]\d|
+              8[457-9]|
+              9[0146]
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>06031234</exampleNumber>
       </mobile>
@@ -2683,44 +5387,87 @@
 
     <!-- United Kingdom -->
     <!-- http://stakeholders.ofcom.org.uk/telecoms/numbering/ -->
-    <!-- Note that this excludes Isle of Man, Jersey and Guernsey prefixes for
-    the purposes of validation, although the formatting rules are shared. -->
+    <!-- http://en.wikipedia.org/wiki/List_of_United_Kingdom_dialling_codes -->
+    <!-- http://www.numberingplans.com/?page=dialling&sub=areacodes&ac=GB -->
+    <!-- Note that this excludes Isle of Man, Jersey and Guernsey prefixes for the purposes of
+         validation, although the formatting rules are shared. -->
     <territory id="GB" countryCode="44" internationalPrefix="00"
                nationalPrefix="0" preferredExtnPrefix=" x" nationalPrefixFormattingRule="$NP$FG"
                mainCountryForCode="true">
       <availableFormats>
-        <!-- 2d, 55, 56, 70, 76 with 10 digits -->
+        <!-- 2d, 55, 56, 70, 76 with 10 digits. -->
         <numberFormat pattern="(\d{2})(\d{4})(\d{4})">
-          <leadingDigits>2|5[56]|7[06]</leadingDigits>
+          <leadingDigits>
+            2|
+            5[56]|
+            7[06]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
-        <!-- 11d, 1d1, 3dd, 9dd with 10 digits -->
+        <!-- 11d, 1d1, 3dd, 9dd with 10 digits. -->
         <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
-          <leadingDigits>1(?:1|\d1)|3|9[018]</leadingDigits>
+          <leadingDigits>
+            1(?:
+              1|
+              \d1
+            )|
+            3|
+            9[018]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <!-- 1dddd with 9 or 10 digits.
              These area codes are very rare in GB, and are only available in the following places:
-             13873(Langholm), 15242(Hornby), 15394(Hawkshead), 15395(Grange-Over-Sands),
+             13873(Langholm), 15242(Hornby), 15394(Hawkshead), 15395(Grange-over-Sands),
              15396(Sedbergh), 16973(Wigton), 16974(Raughton Head), 16977(Brampton),
-             17683(Appleby), 17684(Pooley Bridge), 17687(Keswick), 19467(Gosforth) -->
+             17683(Appleby), 17684(Pooley Bridge), 17687(Keswick), 19467(Gosforth). -->
         <numberFormat pattern="(\d{5})(\d{4,5})">
-          <leadingDigits>1(?:38|5[23]|69|76|94)</leadingDigits>
-          <leadingDigits>1(?:387|5(?:24|39)|697|768|946)</leadingDigits>
-          <leadingDigits>1(?:3873|5(?:242|39[456])|697[347]|768[347]|9467)</leadingDigits>
+          <leadingDigits>
+            1(?:
+              38|
+              5[23]|
+              69|
+              76|
+              94
+            )
+          </leadingDigits>
+          <leadingDigits>
+            1(?:
+              387|
+              5(?:
+                24|
+                39
+              )|
+              697|
+              768|
+              946
+            )
+          </leadingDigits>
+          <leadingDigits>
+            1(?:
+              3873|
+              5(?:
+                242|
+                39[456]
+              )|
+              697[347]|
+              768[347]|
+              9467
+            )
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
-        <!-- 1ddd with 9 or 10 digits -->
+        <!-- 1ddd with 9 or 10 digits. -->
         <numberFormat pattern="(1\d{3})(\d{5,6})">
           <leadingDigits>1</leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
-        <!-- 7ddd (not 70, 76) with 10 digits -->
+        <!-- 7ddd (not 70, 76) with 10 digits. -->
         <numberFormat pattern="(7\d{3})(\d{6})">
           <leadingDigits>7[1-5789]</leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
-        <!-- 800 1111 : UK ChildLine -->
+        <!-- 800 1111 : UK ChildLine. -->
         <numberFormat pattern="(800)(\d{4})">
           <leadingDigits>800</leadingDigits>
           <leadingDigits>8001</leadingDigits>
@@ -2729,7 +5476,7 @@
           <leadingDigits>8001111</leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
-        <!-- 845 46 47 : UK NHS Direct -->
+        <!-- 845 46 47 : UK NHS Direct. -->
         <numberFormat pattern="(845)(46)(4\d)">
           <leadingDigits>845</leadingDigits>
           <leadingDigits>8454</leadingDigits>
@@ -2737,17 +5484,22 @@
           <leadingDigits>845464</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
-        <!-- 84d, 87d with 10 digits -->
+        <!-- 84d, 87d with 10 digits. -->
         <numberFormat pattern="(8\d{2})(\d{3})(\d{4})">
-          <leadingDigits>8(?:4[2-5]|7[0-3])</leadingDigits>
+          <leadingDigits>
+            8(?:
+              4[2-5]|
+              7[0-3]
+            )
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
-        <!-- 80d (including 800) with 10 digits -->
+        <!-- 80d (including 800) with 10 digits. -->
         <numberFormat pattern="(80\d)(\d{3})(\d{4})">
           <leadingDigits>80</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
-        <!-- 500, 800 with 9 digits -->
+        <!-- 500, 800 with 9 digits. -->
         <numberFormat pattern="([58]00)(\d{6})">
           <leadingDigits>[58]00</leadingDigits>
           <format>$1 $2</format>
@@ -2757,79 +5509,490 @@
         <nationalNumberPattern>\d{7,10}</nationalNumberPattern>
         <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
       </generalDesc>
+      <areaCodeOptional>
+        <!-- These are a subset of the fixed-line rules, with digits 2-9 as the leading digit of the
+             subscriber number. There are patterns for 2+8, 3+7 and a combined pattern for all
+             4+6/4+5 and 5+5/5+4 numbers. Note that numbers matching this pattern are not
+             necessarily valid numbers. -->
+        <nationalNumberPattern>
+          2\d[2-9]\d{7}|
+          1(?:
+            1\d|
+            \d1
+          )[2-9]\d{6}|
+          1(?:
+            [248][02-9]\d[2-9]\d{4,5}|
+            (?:
+              3(?:
+                [02-79]\d|
+                8[0-69]
+              )|
+              5(?:
+                [04-9]\d|
+                2[0-35-9]|
+                3[0-8]
+              )|
+              6(?:
+                [02-8]\d|
+                9[0-689]
+              )|
+              7(?:
+                [02-5789]\d|
+                6[0-79]
+              )|
+              9(?:
+                [0235-9]\d|
+                4[0-5789]
+              )
+            )[2-9]\d{4,5}|
+            (?:
+              387(?:
+                3[2-9]|
+                [24-9]\d
+              )|
+              5(?:
+                24(?:
+                  2[2-9]|
+                  [3-9]\d
+                )|
+                39(?:
+                  [4-6][2-9]|
+                  [237-9]\d
+                )
+              )|
+              697(?:
+                [347][2-9]|
+                [25689]\d
+              )|
+              768(?:
+                [347][2-9]|
+                [25679]\d
+              )|
+              946(?:
+                7[2-9]|
+                [2-689]\d
+              )
+            )\d{3,4}
+          )
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
+        <exampleNumber>1332456789</exampleNumber>
+      </areaCodeOptional>
       <fixedLine>
         <!-- http://en.wikipedia.org/wiki/List_of_United_Kingdom_dialling_codes -->
-        <!-- Pattern matches all area codes with NSN=10, and all area code and local number
-             initial digits with NSN=9; excluding ranges used in GG, IM, JE -->
-        <nationalNumberPattern>1(?:1[3-8]|[2-69]1)\d{7}|
-          1(?:2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-4789]|7[013-9]|9\d)|
-              3(?:0\d|[25][02-9]|3[02-579]|[468][0-46-9]|7[1235679]|9[24578])|
-              4(?:0[03-9]|2[02-5789]|[37]\d|4[02-69]|5[0-8]|[69][0-79]|8[02-5789])|
-              5(?:0[1235-9]|2[024-9]|3[015689]|4[02-9]|5[03-9]|6\d|7[0-35-9]|8[0-468]|9[0-5789])|
-              6(?:0[034689]|2[0-35689]|3[013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|8[013-9]|9[0124578])|
-              7(?:0[0246-9]|2\d|3[023678]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|
-              8(?:0[35-9]|2[1-5789]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\d|8[02-9]|9[02569])|
-              9(?:0[02-589]|2[02-689]|3[1-5789]|4[2-9]|5[0-579]|6[234789]|7[0124578]|8\d|9[2-57]))\d{6}|
-          1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-4789]|8[345])))|
-              3(?:638[2-5]|647[23]|8(?:47[04-9]|64[015789]))|
-              4(?:044[1-7]|20(?:2[23]|8\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[123]))|
-              5(?:24(?:3[2-79]|6\d)|276\d|6(?:26[06-9]|686))|
-              6(?:06(?:4\d|7[4-79])|295[567]|35[34]\d|47(?:24|61)|59(?:5[08]|6[67]|74)|955[0-4])|
-              7(?:26(?:6[13-9]|7[0-7])|442\d|50(?:2[0-3]|[3-68]2|76))|
-              8(?:27[56]\d|37(?:5[2-5]|8[239])|84(?:3[2-58]))|
-              9(?:0(?:0(?:6[1-8]|85)|52\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\d{3}|
+        <!-- Pattern matches geographic NSN=10 numbers as follows:
+             - area code and local number first digit for 2+8,
+             - area code and local number first digit for 3+7,
+             - area code only for 4+6 (including areas with embedded 5+5).
+             Pattern matches geographic NSN=9 numbers as follows:
+             - area code and local number first two digits for 4+5,
+             - area code and local number first three digits for 4+5 special case (01768) 88Ddd,
+             - area code and local number first digit for 5+4 special case (016977) Dddd.
+             All patterns exclude ranges used in GG, IM, JE. -->
+        <nationalNumberPattern>
+          2(?:
+            0[01378]|
+            3[0189]|
+            4[017]|
+            8[0-46-9]|
+            9[012]
+          )\d{7}|
+          1(?:
+            (?:1
+              (?:3[0-48]|
+                 [46][0-4]|
+                 5[012789]|
+                 7[0-39]|
+                 8[01349]
+              )|
+              21[0-7]|
+              31[0-8]|
+              [459]1\d|
+              61[0-46-9]
+            )
+          )\d{6}|
+          1(?:
+            2(?:
+              0[024-9]|
+              2[3-9]|
+              3[3-79]|
+              4[1-689]|
+              [58][02-9]|
+              6[0-4789]|
+              7[013-9]|
+              9\d
+            )|
+            3(?:
+              0\d|
+              [25][02-9]|
+              3[02-579]|
+              [468][0-46-9]|
+              7[1235679]|
+              9[24578]
+            )|
+            4(?:
+              0[03-9]|
+              [28][02-5789]|
+              [37]\d|
+              4[02-69]|
+              5[0-8]|
+              [69][0-79]
+            )|
+            5(?:
+              0[1235-9]|
+              2[024-9]|
+              3[015689]|
+              4[02-9]|
+              5[03-9]|
+              6\d|
+              7[0-35-9]|
+              8[0-468]|
+              9[0-5789]
+            )|
+            6(?:
+              0[034689]|
+              2[0-35689]|
+              [38][013-9]|
+              4[1-467]|
+              5[0-69]|
+              6[13-9]|
+              7[0-8]|
+              9[0124578]
+            )|
+            7(?:
+              0[0246-9]|
+              2\d|
+              3[023678]|
+              4[03-9]|
+              5[0-46-9]|
+              6[013-9]|
+              7[0-35-9]|
+              8[024-9]|
+              9[02-9]
+            )|
+            8(?:
+              0[35-9]|
+              2[1-5789]|
+              3[02-578]|
+              4[0-578]|
+              5[124-9]|
+              6[2-69]|
+              7\d|
+              8[02-9]|
+              9[02569]
+            )|
+            9(?:
+              0[02-589]|
+              2[02-689]|
+              3[1-5789]|
+              4[2-9]|
+              5[0-579]|
+              6[234789]|
+              7[0124578]|
+              8\d|
+              9[2-57]
+            )
+          )\d{6}|
+          1(?:
+            2(?:
+              0(?:
+                46[1-4]|
+                87[2-9]
+              )|
+              545[1-79]|
+              76(?:
+                2\d|
+                3[1-8]|
+                6[1-6]
+              )|
+              9(?:
+                7(?:
+                  2[0-4]|
+                  3[2-5]
+                )|
+                8(?:
+                  2[2-8]|
+                  7[0-4789]|
+                  8[345]
+                )
+              )
+            )|
+            3(?:
+              638[2-5]|
+              647[23]|
+              8(?:
+                47[04-9]|
+                64[015789]
+              )
+            )|
+            4(?:
+              044[1-7]|
+              20(?:
+                2[23]|
+                8\d
+              )|
+              6(?:
+                0(?:
+                  30|
+                  5[2-57]|
+                  6[1-8]|
+                  7[2-8]
+                )|
+                140
+              )|
+              8(?:
+                052|
+                87[123]
+              )
+            )|
+            5(?:
+              24(?:
+                3[2-79]|
+                6\d
+              )|
+              276\d|
+              6(?:
+                26[06-9]|
+                686
+              )
+            )|
+            6(?:
+              06(?:
+                4\d|
+                7[4-79]
+              )|
+              295[567]|
+              35[34]\d|
+              47(?:
+                24|
+                61
+              )|
+              59(?:
+                5[08]|
+                6[67]|
+                74
+              )|
+              955[0-4]
+            )|
+            7(?:
+              26(?:
+                6[13-9]|
+                7[0-7]
+              )|
+              442\d|
+              50(?:
+                2[0-3]|
+                [3-68]2|
+                76
+              )
+            )|
+            8(?:
+              27[56]\d|
+              37(?:
+                5[2-5]|
+                8[239]
+              )|
+              84(?:
+                3[2-58]
+              )
+            )|
+            9(?:
+              0(?:
+                0(?:
+                  6[1-8]|
+                  85
+                )|
+                52\d
+              )|
+              3583|
+              4(?:
+                66[1-8]|
+                9(?:
+                  2[01]|
+                  81
+                )
+              )|
+              63(?:
+                23|
+                3[1-4]
+              )|
+              9561
+            )
+          )\d{3}|
           176888[234678]\d{2}|
-          16977[23]\d{3}|
-          2(?:0[01378]|3[0189]|4[017]|8[0-46-9]|9[012])\d{7}|
-          (?:3[0347]|55)\d{8}</nationalNumberPattern>
+          16977[23]\d{3}
+        </nationalNumberPattern>
         <exampleNumber>1212345678</exampleNumber>
       </fixedLine>
       <mobile>
         <!-- http://stakeholders.ofcom.org.uk/telecoms/numbering/telephone-no-availability/numbers-administered/
-             7100-7599 and 7700-7999 with 10 digits; excluding ranges used in GG, IM, JE -->
-        <nationalNumberPattern>7(?:[1-4]\d\d|5(?:0[0-8]|[13-9]\d|2[0-35-9])|7(?:0[1-9]|[1-7]\d|8[02-9]|9[0-689])|8(?:[014-9]\d|[23][0-8])|9(?:[04-9]\d|1[02-9]|2[0135-9]|3[0-689]))\d{6}</nationalNumberPattern>
+             7100-7599, 7700-7999 with 10 digits; excluding ranges used in GG, IM, JE. -->
+        <nationalNumberPattern>
+          7(?:
+            [1-4]\d\d|
+            5(?:
+              0[0-8]|
+              [13-9]\d|
+              2[0-35-9]
+            )|
+            7(?:
+              0[1-9]|
+              [1-7]\d|
+              8[02-9]|
+              9[0-689]
+            )|
+            8(?:
+              [014-9]\d|
+              [23][0-8]
+            )|
+            9(?:
+              [04-9]\d|
+              1[02-9]|
+              2[0135-9]|
+              3[0-689]
+            )
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>7400123456</exampleNumber>
       </mobile>
       <pager>
-        <!-- 76 with 10 digits; excluding ranges used in IM -->
-        <nationalNumberPattern>76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\d{6}</nationalNumberPattern>
+        <!-- 76 with 10 digits; excluding ranges used in IM. -->
+        <nationalNumberPattern>
+          76(?:
+            0[012]|
+            2[356]|
+            4[0134]|
+            5[49]|
+            6[0-369]|
+            77|
+            81|
+            9[39]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>7640123456</exampleNumber>
       </pager>
       <!-- Source for non geographic numbers:
-      http://en.wikipedia.org/wiki/Non-geographical_telephone_numbers_in_the_UK -->
+           http://en.wikipedia.org/wiki/Non-geographical_telephone_numbers_in_the_UK -->
       <tollFree>
         <!-- 800 1111 with 7 digits, 800 with 9 or 10 digits, 808 with 10 digits, 500 with 9 digits. -->
-        <nationalNumberPattern>80(?:0(?:1111|\d{6,7})|8\d{7})|500\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          80(?:
+            0(?:
+              1111|
+              \d{6,7}
+            )|
+            8\d{7}
+          )|
+          500\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7}(?:\d{2,3})?</possibleNumberPattern>
         <exampleNumber>8001234567</exampleNumber>
       </tollFree>
       <premiumRate>
-        <!-- 871, 872 and 873 are now Controlled Premium Rate Services,
-             so are listed here as well as 900-909, 910-919, 980-983 -->
-        <nationalNumberPattern>(?:87[123]|9(?:[01]\d|8[0-3]))\d{7}</nationalNumberPattern>
+        <!-- 871, 872, 873 with 10 digits are now Controlled Premium Rate Services, so are listed
+             here as well as 900-909, 910-919, 980-983 with 10 digits. -->
+        <nationalNumberPattern>
+          (?:
+            87[123]|
+            9(?:
+              [01]\d|
+              8[0-3]
+            )
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9012345678</exampleNumber>
       </premiumRate>
       <sharedCost>
-        <!-- Using shared cost to deal with the various revenue sharing
-             number prefixes in the United Kingdom
-             845 46 47 with 7 digits, 842-845, 870 with 10 digits -->
-        <nationalNumberPattern>8(?:4(?:5464\d|[2-5]\d{7})|70\d{7})</nationalNumberPattern>
+        <!-- Using shared cost to deal with the various revenue sharing number prefixes in the
+             United Kingdom: 845 46 47 with 7 digits, 842-845, 870 with 10 digits. -->
+        <nationalNumberPattern>
+          8(?:
+            4(?:
+              5464\d|
+              [2-5]\d{7}
+            )|
+            70\d{7}
+          )
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
         <exampleNumber>8431234567</exampleNumber>
       </sharedCost>
       <personalNumber>
+        <!-- 70 with 10 digits. -->
         <nationalNumberPattern>70\d{8}</nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>7012345678</exampleNumber>
       </personalNumber>
       <voip>
+        <!-- 56 with 10 digits. -->
         <nationalNumberPattern>56\d{8}</nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>5612345678</exampleNumber>
       </voip>
+      <uan>
+        <!-- 30d, 33d, 34d, 37d, 55 with 10 digits. -->
+        <nationalNumberPattern>
+          (?:
+            3[0347]|
+            55
+          )\d{8}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5512345678</exampleNumber>
+      </uan>
+      <shortCode>
+        <!-- This is a list of the ones that can be called. -->
+        <nationalNumberPattern>
+          1(?:
+            0[01]|
+            1(?:
+              [12]|
+              [68]\d{3}
+            )|
+            2[123]|
+            33|
+            4(?:
+              1|
+              7\d
+            )|
+            5\d|
+            70\d|
+            800\d|
+            9[15]
+          )|
+          2(?:
+            02|
+            2(?:
+              02|
+              11|
+              2
+            )|
+            3(?:
+              02|
+              45
+            )
+            425
+          )|
+          3[13]3|
+          4(?:
+            0[02]|
+            35[01]|
+            44[45]|
+            5\d
+          )|
+          650|
+          789|
+          9(?:
+            01|
+            99
+          )
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{3,6}</possibleNumberPattern>
+        <exampleNumber>150</exampleNumber>
+      </shortCode>
     </territory>
 
     <!-- Grenada -->
@@ -2842,16 +6005,59 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>473(?:2(?:3[0-2]|69)|3(?:2[89]|86)|4(?:08|3[5-9]|4[0-49]|5[5-79]|68|73|90)|63[68]|7(?:58|84)|938)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          473(?:
+            2(?:
+              3[0-2]|
+              69
+            )|
+            3(?:
+              2[89]|
+              86
+            )|
+            4(?:
+              [06]8|
+              3[5-9]|
+              4[0-49]|
+              5[5-79]|
+              73|
+              90
+            )|
+            63[68]|
+            7(?:
+              58|
+              84
+            )|
+            938
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>4732691234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>473(?:4(?:0[3-79]|1[04-9]|20|58)|53[3-8])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          473(?:
+            4(?:
+              0[3-79]|
+              1[04-9]|
+              20|
+              58
+            )|
+            53[3-8]
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>4734031234</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002123456</exampleNumber>
       </tollFree>
@@ -2860,6 +6066,18 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002123456</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Georgia -->
@@ -2867,15 +6085,19 @@
     <territory id="GE" countryCode="995" internationalPrefix="8~10"
                nationalPrefix="8" nationalPrefixFormattingRule="$NP $FG">
       <availableFormats>
-        <!-- Format isn't very strictly defined - the yellow pages omits area
-             code and does 2 2 2, the chairman on the communications commission
-             listed his as 2 2 4 (Tblisi area code).-->
+        <!-- Format isn't very strictly defined - the yellow pages omits area code and does 2 2 2,
+             the chairman on the communications commission listed his as 2 2 4 (Tblisi area
+             code). -->
         <numberFormat pattern="(32)(\d{2})(\d{2})(\d{2})">
           <leadingDigits>32</leadingDigits>
           <format>$1 $2 $3 $4</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d{5})">
-          <leadingDigits>2|3[13-79]|446</leadingDigits>
+          <leadingDigits>
+            2|
+            3[13-79]|
+            446
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(\d{4})(\d{3,4})">
@@ -2892,18 +6114,45 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[1-3579]\d{7}|8\d{8}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [1-3579]\d{7}|
+          8\d{8}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{3,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- Added the 253 and 250 prefixes as there are lots of numbers on the
-        internet with that prefix -->
-        <nationalNumberPattern>(?:122|2(?:22|36|5[03])|3(?:1[0-35-8]|[24-6]\d|3[1-35679]|7[0-39]|9[1-35-7])|44[2-6])\d{5}</nationalNumberPattern>
+        <!-- Added the 253 and 250 prefixes as there are lots of numbers on the internet with that
+             prefix -->
+        <nationalNumberPattern>
+          (?:
+            122|
+            2(?:
+              22|
+              36|
+              5[03]
+            )|
+            3(?:
+              1[0-35-8]|
+              [24-6]\d|
+              3[1-35679]|
+              7[0-39]|
+              9[1-35-7]
+            )|
+            44[2-6]
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{3,8}</possibleNumberPattern>
         <exampleNumber>32123456</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:5[1578]|6[28]|7[0147-9]|9[0135-9])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            5[1578]|
+            6[28]|
+            7[0147-9]|
+            9[0135-9]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>55123456</exampleNumber>
       </mobile>
@@ -2913,6 +6162,8 @@
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>800123456</exampleNumber>
       </tollFree>
+      <!-- It seems there may be special 6 digit numbers beginning with 91, but we are not sure, so
+           these are omitted for now. -->
     </territory>
 
     <!-- French Guiana (French Dept. of) -->
@@ -2925,37 +6176,86 @@
     <territory id="GG" countryCode="44" internationalPrefix="00"
                nationalPrefix="0" preferredExtnPrefix=" x" nationalPrefixFormattingRule="$NP$FG">
       <generalDesc>
-        <nationalNumberPattern>[15789]\d{6,9}</nationalNumberPattern>
+        <nationalNumberPattern>[135789]\d{6,9}</nationalNumberPattern>
         <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
       </generalDesc>
+      <areaCodeOptional>
+        <nationalNumberPattern>1481[2-9]\d{5}</nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>1481250123</exampleNumber>
+      </areaCodeOptional>
       <!-- Specific to GG. -->
       <fixedLine>
+        <!-- 1481 with 10 digits. -->
         <nationalNumberPattern>1481\d{6}</nationalNumberPattern>
         <exampleNumber>1481456789</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>7(?:781|839|911)\d{6}</nationalNumberPattern>
+        <!-- 7781, 7839, 7911 with 10 digits. -->
+        <nationalNumberPattern>
+          7(?:
+            781|
+            839|
+            911
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>7781123456</exampleNumber>
       </mobile>
       <!-- Other numbers as per GB. -->
       <pager>
-        <nationalNumberPattern>76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          76(?:
+            0[012]|
+            2[356]|
+            4[0134]|
+            5[49]|
+            6[0-369]|
+            77|
+            81|
+            9[39]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>7640123456</exampleNumber>
       </pager>
       <tollFree>
-        <nationalNumberPattern>80(?:0(?:1111|\d{6,7})|8\d{7})|500\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          80(?:
+            0(?:
+              1111|
+              \d{6,7}
+            )|
+            8\d{7}
+          )|
+          500\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7}(?:\d{2,3})?</possibleNumberPattern>
         <exampleNumber>8001234567</exampleNumber>
       </tollFree>
       <premiumRate>
-        <nationalNumberPattern>(?:87[123]|9(?:[01]\d|8[0-3]))\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            87[123]|
+            9(?:
+              [01]\d|
+              8[0-3]
+            )
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9012345678</exampleNumber>
       </premiumRate>
       <sharedCost>
-        <nationalNumberPattern>8(?:4(?:5464\d|[2-5]\d{7})|70\d{7})</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            4(?:
+              5464\d|
+              [2-5]\d{7}
+            )|
+            70\d{7}
+          )
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
         <exampleNumber>8431234567</exampleNumber>
       </sharedCost>
@@ -2969,6 +6269,24 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>5612345678</exampleNumber>
       </voip>
+      <uan>
+        <nationalNumberPattern>
+          (?:
+            3[0347]|
+            55
+          )\d{8}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5512345678</exampleNumber>
+      </uan>
+      <shortCode>
+        <nationalNumberPattern>
+          1\d{2}(?:\d{3})?|
+          999
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{3,6}</possibleNumberPattern>
+        <exampleNumber>150</exampleNumber>
+      </shortCode>
     </territory>
 
     <!-- Ghana -->
@@ -2986,20 +6304,126 @@
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>3(?:0[237]\d|[167](?:2[0-6]|7\d)|2(?:2[0-5]|7\d)|3(?:2[0-37]|7\d)|4(?:[27]\d|30)|5(?:2[0-7]|7\d)|8(?:2[0-2]|7\d)|9(?:20|7\d))\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          3(?:
+            0[237]\d|
+            [167](?:
+              2[0-6]|
+              7\d
+            )|
+            2(?:
+              2[0-5]|
+              7\d
+            )|
+            3(?:
+              2[0-37]|
+              7\d
+            )|
+            4(?:
+              [27]\d|
+              30
+            )|
+            5(?:
+              2[0-7]|
+              7\d
+            )|
+            8(?:
+              2[0-2]|
+              7\d
+            )|
+            9(?:
+              20|
+              7\d
+            )
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
         <exampleNumber>302345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>2((?:[47]\d|08)\d{6}|[368]\d{7})|54\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          2(?:
+            (?:
+              [47]\d|
+              08
+            )\d{6}|
+            [368]\d{7}
+          )|
+          54\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>231234567</exampleNumber>
       </mobile>
-      <!-- No tollFree or premiumRate information can be found.-->
+      <!-- No tollFree or premiumRate information can be found. -->
     </territory>
 
     <!-- Gibraltar -->
     <territory id="GI" countryCode="350" internationalPrefix="00">
+      <!-- No formatting rules - numbers are always formatted as a block. -->
+      <generalDesc>
+        <nationalNumberPattern>[2568]\d{7}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+      </generalDesc>
+      <fixedLine>
+        <nationalNumberPattern>
+          2(?:
+            00\d|
+            16[0-7]|
+            22[2457]
+          )\d{4}
+        </nationalNumberPattern>
+        <exampleNumber>20012345</exampleNumber>
+      </fixedLine>
+      <mobile>
+        <nationalNumberPattern>
+          (?:
+            5[4-8]|
+            60
+          )\d{6}
+        </nationalNumberPattern>
+        <exampleNumber>57123456</exampleNumber>
+      </mobile>
+      <tollFree>
+        <nationalNumberPattern>80\d{6}</nationalNumberPattern>
+        <exampleNumber>80123456</exampleNumber>
+      </tollFree>
+      <premiumRate>
+        <nationalNumberPattern>8[1-689]\d{6}</nationalNumberPattern>
+        <exampleNumber>88123456</exampleNumber>
+      </premiumRate>
+      <sharedCost>
+        <nationalNumberPattern>87\d{6}</nationalNumberPattern>
+        <exampleNumber>87123456</exampleNumber>
+      </sharedCost>
+      <shortCode>
+        <nationalNumberPattern>
+          1(?:
+            00|
+            1(?:
+              2|
+              6(?:
+                00[06]|
+                11[17]
+              )|
+              8\d{2}
+            )|
+            23|
+            4(?:
+              1|
+              7[014]
+            )|
+            5[015]|
+            9[0349]
+          )|
+          8(?:
+            00|
+            4[0-2]|
+            8\d
+          )
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{3,6}</possibleNumberPattern>
+        <exampleNumber>116123</exampleNumber>
+      </shortCode>
     </territory>
 
     <!-- Greenland -->
@@ -3016,7 +6440,15 @@
       </generalDesc>
       <fixedLine>
         <!-- Including VSAT numbers here. -->
-        <nationalNumberPattern>(?:19|3[1-6]|6[14689]|8[14-79]|9\d)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            19|
+            3[1-6]|
+            6[14689]|
+            8[14-79]|
+            9\d
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>321000</exampleNumber>
       </fixedLine>
       <mobile>
@@ -3046,7 +6478,30 @@
         <possibleNumberPattern>\d{7}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(4(?:[23]\d{2}|4(?:1[024679]|[6-9]\d))|5(?:54[0-7]|6(?:[67]\d)|7(?:1[04]|2[035]|3[58]|48))|8\d{3})\d{3}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            4(?:
+              [23]\d{2}|
+              4(?:
+                1[024679]|
+                [6-9]\d
+              )
+            )|
+            5(?:
+              54[0-7]|
+              6(?:
+                [67]\d
+              )|
+              7(?:
+                1[04]|
+                2[035]|
+                3[58]|
+                48
+              )
+            )|
+            8\d{3}
+          )\d{3}
+        </nationalNumberPattern>
         <exampleNumber>5661234</exampleNumber>
       </fixedLine>
       <mobile>
@@ -3068,14 +6523,37 @@
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>30(?:24|3[12]|4[1-35-7]|5[13]|6[189]|[78]1|9[1478])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          30(?:
+            24|
+            3[12]|
+            4[1-35-7]|
+            5[13]|
+            6[189]|
+            [78]1|
+            9[1478]
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>30241234</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- WiMAX is in the plan - which is a wireless broadband protocol. Not
-        including this in the metadata for now unless this proves to be
-        necessary. These would start with 79. -->
-        <nationalNumberPattern>55\d{6}|6(?:0(?:2\d|3[3467]|5[2457-9])|[2457]\d{2}|3(?:[14]0|35))\d{4}</nationalNumberPattern>
+        <!-- WiMAX is in the plan - which is a wireless broadband protocol. Not including this in
+             the metadata for now unless this proves to be necessary. These would start with 79. -->
+        <nationalNumberPattern>
+          55\d{6}|
+          6(?:
+            0(?:
+              2\d|
+              3[3467]|
+              5[2457-9]
+            )|
+            [24578]\d{2}|
+            3(?:
+              [14]0|
+              35
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>60201234</exampleNumber>
       </mobile>
     </territory>
@@ -3095,13 +6573,32 @@
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- The plan says 59011 and 59012 are not implemented yet, but is from
-        2006 and online examples can be found. -->
-        <nationalNumberPattern>590(?:1[12]|2[0-68]|3[28]|4[126-8]|5[067]|6[018]|[89]\d)\d{4}</nationalNumberPattern>
+        <!-- The plan says 59011 and 59012 are not implemented yet, but is from 2006 and online
+             examples can be found. -->
+        <nationalNumberPattern>
+          590(?:
+            1[12]|
+            2[0-68]|
+            3[28]|
+            4[126-8]|
+            5[067]|
+            6[018]|
+            [89]\d
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>590201234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>690(?:00|[3-5]\d|6[0-57-9]|7[1-6]|8[0-6]|9[09])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          690(?:
+            00|
+            [3-5]\d|
+            6[0-57-9]|
+            7[1-6]|
+            8[0-6]|
+            9[09]
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>690301234</exampleNumber>
       </mobile>
     </territory>
@@ -3121,21 +6618,34 @@
       </availableFormats>
       <generalDesc>
         <nationalNumberPattern>[23589]\d{8}</nationalNumberPattern>
-        <!-- The 6 here refers to the old number pattern - numbers written down
-        may still be this length although they can no longer be dialled. -->
+        <!-- The 6 here refers to the old number pattern - numbers written down may still be this
+             length although they can no longer be dialled. -->
         <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>3(?:3(?:3\d[7-9]|[0-24-9]\d[46])|5\d{2}[7-9])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          3(?:
+            3(?:
+              3\d[7-9]|
+              [0-24-9]\d[46]
+            )|
+            5\d{2}[7-9]
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>333091234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:222|551)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            222|
+            551
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>222123456</exampleNumber>
       </mobile>
-      <!-- Note that personal and sharedCost numbers are said to go under here
-      too - hopefully when they start allocating them there will be a
-      differentiation of prefixes, but this is not clear now. -->
+      <!-- Note that personal and sharedCost numbers are said to go under here too - hopefully when
+           they start allocating them there will be a differentiation of prefixes, but this is not
+           clear now. -->
       <tollFree>
         <nationalNumberPattern>80\d[1-9]\d{5}</nationalNumberPattern>
         <exampleNumber>800123456</exampleNumber>
@@ -3152,11 +6662,17 @@
     <territory id="GR" countryCode="30" internationalPrefix="00">
       <availableFormats>
         <numberFormat pattern="([27]\d)(\d{4})(\d{4})">
-          <leadingDigits>21|7</leadingDigits>
+          <leadingDigits>
+            21|
+            7
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
-          <leadingDigits>2[2-9]1|[689]</leadingDigits>
+          <leadingDigits>
+            2[2-9]1|
+            [689]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(2\d{3})(\d{6})">
@@ -3169,7 +6685,66 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>2(?:1\d{2}|2(?:3[1-8]|4[1-7]|5[1-4]|6[1-8]|7[1-5]|[289][1-9])|3(?:1\d|2[1-5]|3[1-4]|[45][1-3]|7[1-7]|8[1-6]|9[1-79])|4(?:1\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\d|2[1-3]|4[124]|5[1-6]|[39][1-4])|6(?:1\d|3[24]|4[1-7]|5[13-9]|[269][1-6]|7[14]|8[1-35])|7(?:1\d|[23][1-5]|4[1-7]|5[1-57]|6[134]|9[15-7])|8(?:1\d|2[1-5]|[34][1-4]|9[1-7]))\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          2(?:
+            1\d{2}|
+            2(?:
+              3[1-8]|
+              4[1-7]|
+              5[1-4]|
+              6[1-8]|
+              7[1-5]|
+              [289][1-9]
+            )|
+            3(?:
+              1\d|
+              2[1-5]|
+              3[1-4]|
+              [45][1-3]|
+              7[1-7]|
+              8[1-6]|
+              9[1-79]
+            )|
+            4(?:
+              1\d|
+              2[1-8]|
+              3[1-4]|
+              4[13-5]|
+              6[1-578]|
+              9[1-5]
+            )|
+            5(?:
+              1\d|
+              2[1-3]|
+              4[124]|
+              5[1-6]|
+              [39][1-4]
+            )|
+            6(?:
+              1\d|
+              3[24]|
+              4[1-7]|
+              5[13-9]|
+              [269][1-6]|
+              7[14]|
+              8[1-35]
+            )|
+            7(?:
+              1\d|
+              [23][1-5]|
+              4[1-7]|
+              5[1-57]|
+              6[134]|
+              9[15-7]
+            )|
+            8(?:
+              1\d|
+              2[1-5]|
+              [34][1-4]|
+              9[1-7]
+            )
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>2123456789</exampleNumber>
       </fixedLine>
       <mobile>
@@ -3184,10 +6759,16 @@
         <nationalNumberPattern>90[19]\d{7}</nationalNumberPattern>
         <exampleNumber>9091234567</exampleNumber>
       </premiumRate>
-      <!-- Including calls with maximum charge of 0,25 EUR/minute here instead
-      of under premium rate. -->
+      <!-- Including calls with maximum charge of 0,25 EUR/minute here instead of under premium
+           rate. -->
       <sharedCost>
-        <nationalNumberPattern>8(?:0[16]|12|25)\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            0[16]|
+            12|
+            25
+          )\d{7}
+        </nationalNumberPattern>
         <exampleNumber>8011234567</exampleNumber>
       </sharedCost>
       <personalNumber>
@@ -3210,16 +6791,48 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>671(?:3\d{2}|47\d|56\d|6[3-5]\d|7(?:3\d|89)|828)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          671(?:
+            3\d{2}|
+            47\d|
+            56\d|
+            6[3-5]\d|
+            7(?:
+              3\d|
+              89
+            )|
+            828
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>6713123456</exampleNumber>
       </fixedLine>
       <!-- We assume mobile phone numbers to be the same as fixed-line - further info unavailable -->
       <mobile>
-        <nationalNumberPattern>671(?:3\d{2}|47\d|56\d|6[3-5]\d|7(?:3\d|89)|828)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          671(?:
+            3\d{2}|
+            47\d|
+            56\d|
+            6[3-5]\d|
+            7(?:
+              3\d|
+              89
+            )|
+            828
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>6713123456</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002123456</exampleNumber>
       </tollFree>
@@ -3228,6 +6841,18 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002123456</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Guinea-Bissau -->
@@ -3243,7 +6868,16 @@
         <possibleNumberPattern>\d{7}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>3(?:2[0125]|3[1245]|4[12]|5[1-4]|70|9[1-467])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          3(?:
+            2[0125]|
+            3[1245]|
+            4[12]|
+            5[1-4]|
+            70|
+            9[1-467]
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>3201234</exampleNumber>
       </fixedLine>
       <mobile>
@@ -3262,7 +6896,13 @@
     <territory id="HK" countryCode="852" internationalPrefix="00">
       <availableFormats>
         <numberFormat pattern="(\d{4})(\d{4})">
-          <leadingDigits>[235-7]|[89](?:0[1-9]|[1-9])</leadingDigits>
+          <leadingDigits>
+            [235-7]|
+            [89](?:
+              0[1-9]|
+              [1-9]
+            )
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(800)(\d{3})(\d{3})">
@@ -3275,9 +6915,13 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <!-- Slightly more complex pattern to allow the country code to be
-        stripped off if necessary. -->
-        <nationalNumberPattern>[235-7]\d{7}|8\d{7,8}|9\d{7,10}</nationalNumberPattern>
+        <!-- Slightly more complex pattern to allow the country code to be stripped off if
+             necessary. -->
+        <nationalNumberPattern>
+          [235-7]\d{7}|
+          8\d{7,8}|
+          9\d{7,10}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8,11}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
@@ -3307,8 +6951,67 @@
     </territory>
 
     <!-- Honduras -->
-    <territory id="HN" countryCode="504" internationalPrefix="00"
-               nationalPrefix="0">
+    <!-- http://www.itu.int/oth/T020200005F/en -->
+    <!-- It seems there is no longer a trunk prefix in use, based on websites like
+         http://www.howtocallabroad.com/codes.html and on seeing how locals write their numbers in
+         national format. -->
+    <territory id="HN" countryCode="504" internationalPrefix="00" >
+      <availableFormats>
+       <numberFormat pattern="(\d{4})(\d{4})">
+         <format>$1-$2</format>
+       </numberFormat>
+      </availableFormats>
+      <generalDesc>
+        <nationalNumberPattern>[237-9]\d{7}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+      </generalDesc>
+      <fixedLine>
+        <nationalNumberPattern>
+          2(?:
+            2(?:
+              0[019]|
+              1[1-36]|
+              [23]\d|
+              4[056]|
+              5[57]|
+              9[01]
+            )|
+            4(?:
+              2|3-59]|
+              3[13-689]|
+              4[0-68]|
+              5[1-35]
+            )|
+            5(?:
+              4[3-5]|
+              5\d|
+              6[56]|
+              74
+            )|
+            6(?:
+              4[0-378]|
+              [56]\d|
+              [78][0-8]|
+              9[01]
+            )|
+            7(?:
+              6[46-9]|
+              7[02-9]|
+              8[34]
+            )|
+            8(?:
+              79|
+              8[0-35789]|
+              9[1-57-9]
+            )
+          )\d{4}
+        </nationalNumberPattern>
+        <exampleNumber>22123456</exampleNumber>
+      </fixedLine>
+      <mobile>
+        <nationalNumberPattern>[37-9]\d{7}</nationalNumberPattern>
+        <exampleNumber>91234567</exampleNumber>
+      </mobile>
     </territory>
 
     <!-- Croatia -->
@@ -3317,9 +7020,9 @@
     <territory id="HR" countryCode="385" internationalPrefix="00"
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
-        <!-- The plan says 1 XXX XXXX but the government and local telecom
-             websites are formatted 1 XXXX XXX, so we prefer that formatting
-             here. These same sources prefer XXX XXX to XX XXXX as well. -->
+        <!-- The plan says 1 XXX XXXX but the government and local telecom websites are formatted 1
+             XXXX XXX, so we prefer that formatting here. These same sources prefer XXX XXX to XX
+             XXXX as well. -->
        <numberFormat pattern="(1)(\d{4})(\d{3})">
          <leadingDigits>1</leadingDigits>
          <format>$1 $2 $3</format>
@@ -3341,11 +7044,17 @@
           <format>$1 $2 $3 $4</format>
         </numberFormat>
         <numberFormat pattern="(\d{2})(\d{2})(\d{2,3})">
-          <leadingDigits>6[145]|7</leadingDigits>
+          <leadingDigits>
+            6[145]|
+            7
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(\d{2})(\d{3,4})(\d{3})">
-          <leadingDigits>6[145]|7</leadingDigits>
+          <leadingDigits>
+            6[145]|
+            7
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(80[01])(\d{2})(\d{2,3})">
@@ -3358,13 +7067,27 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[1-7]\d{5,8}|[89]\d{6,11}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [1-7]\d{5,8}|
+          [89]\d{6,11}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,12}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
         <!-- Supporting 060 (general service), 062 (universal access), 069 (children service)
              numbers here too. -->
-        <nationalNumberPattern>(?:1|6[029])\d{7}|(?:2[0-3]|3[1-5]|4[02-47-9]|5[1-3])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            1|
+            6[029]
+          )\d{7}|
+          (?:
+            2[0-3]|
+            3[1-5]|
+            4[02-47-9]|
+            5[1-3]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
         <exampleNumber>12345678</exampleNumber>
       </fixedLine>
@@ -3379,8 +7102,8 @@
         <exampleNumber>8001234567</exampleNumber>
       </tollFree>
       <premiumRate>
-        <!-- 061 is for TeleVoting numbers - but these are charged at similar
-             rates to premium rate so we include them here. -->
+        <!-- 061 is for TeleVoting numbers - but these are charged at similar rates to premium rate
+             so we include them here. -->
         <nationalNumberPattern>6[145]\d{4,7}</nationalNumberPattern>
         <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
         <exampleNumber>611234</exampleNumber>
@@ -3393,17 +7116,67 @@
     </territory>
 
     <!-- Haiti -->
-    <territory id="HT" countryCode="509" internationalPrefix="00"
-               nationalPrefix="0">
+    <!-- http://www.itu.int/oth/T020200005E/en -->
+    <!-- http://www.numberingplans.com/ -->
+    <territory id="HT" countryCode="509" internationalPrefix="00">
+      <availableFormats>
+        <numberFormat pattern="(\d{2})(\d{2})(\d{4})">
+          <format>$1 $2 $3</format>
+        </numberFormat>
+      </availableFormats>
+      <generalDesc>
+        <nationalNumberPattern>[2-489]\d{7}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+      </generalDesc>
+      <fixedLine>
+        <!-- The prefix 24 seems to be also used, based on online searches. -->
+        <nationalNumberPattern>
+          2(?:
+            [24]\d|
+            5[1-5]|
+            94
+          )\d{5}
+        </nationalNumberPattern>
+        <exampleNumber>22453300</exampleNumber>
+      </fixedLine>
+      <mobile>
+        <nationalNumberPattern>
+          (?:
+            3[4-9]|
+            4\d
+          )\d{6}
+        </nationalNumberPattern>
+        <exampleNumber>34101234</exampleNumber>
+      </mobile>
+      <tollFree>
+        <!-- ITU document says numbers with prefix 8 are "value-added services and free numbers
+             without making any further distinction. However, http://www.numberingplans.com/ seems
+             to suggest they are free. -->
+        <nationalNumberPattern>8\d{7}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>80012345</exampleNumber>
+      </tollFree>
+      <voip>
+        <!-- ITU document suggests 98\d{6}, but http://www.numberingplans.com/ restricts it to
+             98[89]\d{5}. -->
+        <nationalNumberPattern>98[89]\d{5}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>98901234</exampleNumber>
+      </voip>
+      <shortCode>
+        <nationalNumberPattern>1\d{2}</nationalNumberPattern>
+        <possibleNumberPattern>\d{3}</possibleNumberPattern>
+        <exampleNumber>114</exampleNumber>
+      </shortCode>
     </territory>
 
     <!-- Hungary -->
     <!-- http://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000610001MSWE.doc -->
     <territory id="HU" countryCode="36" internationalPrefix="00"
                nationalPrefix="06" nationalPrefixFormattingRule="($FG)">
-      <!-- Although the national prefix is necessary for dialling, the preferred
-      format (confirmed by the following the yellow pages) is
-      to omit this when formatting. Yellow pages: www.aranyoldalak.hu -->
+      <!-- Although the national prefix is necessary for dialling, the preferred format (confirmed
+           by a Hungarian person and following the yellow pages) is to omit this when formatting.
+           Yellow pages: www.aranyoldalak.hu -->
       <availableFormats>
         <numberFormat pattern="(1)(\d{3})(\d{4})">
           <leadingDigits>1</leadingDigits>
@@ -3420,11 +7193,34 @@
       </generalDesc>
       <fixedLine>
         <!-- Includes numbers for corporate networks. -->
-        <nationalNumberPattern>(?:1\d|2(?:1\d|[2-9])|3[2-7]|4[24-9]|5[2-79]|6[23689]|7(?:1\d|[2-9])|8[2-57-9]|9[2-69])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            1\d|
+            2(?:
+              1\d|
+              [2-9]
+            )|
+            3[2-7]|
+            4[24-9]|
+            5[2-79]|
+            6[23689]|
+            7(?:
+              1\d|
+              [2-9]
+            )|
+            8[2-57-9]|
+            9[2-69]
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>12345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:[237]0|31)\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            [27]0|
+            3[01]
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>201234567</exampleNumber>
       </mobile>
@@ -3453,12 +7249,19 @@
       <availableFormats>
         <numberFormat nationalPrefixFormattingRule="($NP$FG)"
           pattern="(\d{2})(\d{7,8})">
-          <leadingDigits>2[124]|[36]1</leadingDigits>
+          <leadingDigits>
+            2[124]|
+            [36]1
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat nationalPrefixFormattingRule="($NP$FG)"
           pattern="(\d{3})(\d{5,7})">
-          <leadingDigits>[4579]|2[035-9]|[36][02-9]</leadingDigits>
+          <leadingDigits>
+            [4579]|
+            2[035-9]|
+            [36][02-9]
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(8\d{2})(\d{3,4})(\d{3,4})">
@@ -3469,9 +7272,8 @@
           <leadingDigits>1</leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
-        <!-- http://en.wikipedia.org/wiki/Toll-free_telephone_number, and
-             examples on the web show that sometimes they are followed by less
-             digits. -->
+        <!-- http://en.wikipedia.org/wiki/Toll-free_telephone_number, and examples on the web show
+             that sometimes they are followed by less digits. -->
         <numberFormat pattern="(800)(\d{5,7})">
           <leadingDigits>800</leadingDigits>
           <format>$1 $2</format>
@@ -3487,10 +7289,72 @@
       </generalDesc>
       <fixedLine>
         <!-- Area codes taken from wikipedia, with missing ones added from
-        http://www.telkom.co.id/customer-services/area-and-country-code/?type=area.
-        We also added 0770 after user feedback because it seems to be used on
-        Bintan island.  -->
-        <nationalNumberPattern>2[124]\d{7,8}|(?:2(?:[35][1-4]|6[0-8]|7[1-6]|8\d|9[1-8])|3(?:1|2[1-578]|3[1-68]|4[1-3]|5[1-8]|6[1-3568]|7[0-46]|8\d)|4(?:0[1-589]|1[01347-9]|2[0-36-8]|3[0-24-68]|5[1-378]|6[1-5]|7[134]|8[1245])|5(?:1[1-35-9]|2[25-8]|3[1246-9]|4[1-3589]|5[1-46]|6[1-8])|6(?:19?|[25]\d|3[1-469]|4[1-6])|7(?:1[1-46-9]|2[14-9]|[36]\d|4[1-8]|5[1-9]|7[0-36-9])|9(?:0[12]|1[0134-8]|2[0-479]|5[125-8]|6[23679]|7[159]|8[01346]))\d{5,8}</nationalNumberPattern>
+             http://www.telkom.co.id/customer-services/area-and-country-code/?type=area.
+             We also added 0770 after user feedback because it seems to be used on Bintan island.
+             -->
+        <nationalNumberPattern>
+          2[124]\d{7,8}|
+          (?:
+            2(?:
+              [35][1-4]|
+              6[0-8]|
+              7[1-6]|
+              8\d|
+              9[1-8]
+            )|
+            3(?:
+              1|
+              2[1-578]|
+              3[1-68]|
+              4[1-3]|
+              5[1-8]|
+              6[1-3568]|
+              7[0-46]|
+              8\d
+            )|
+            4(?:
+              0[1-589]|
+              1[01347-9]|
+              2[0-36-8]|
+              3[0-24-68]|
+              5[1-378]|
+              6[1-5]|
+              7[134]|
+              8[1245]
+            )|
+            5(?:
+              1[1-35-9]|
+              2[25-8]|
+              3[1246-9]|
+              4[1-3589]|
+              5[1-46]|
+              6[1-8]
+            )|
+            6(?:
+              19? |
+              [25]\d|
+              3[1-469]|
+              4[1-6]
+            )|
+            7(?:
+              1[1-46-9]|
+              2[14-9]|
+              [36]\d|
+              4[1-8]|
+              5[1-9]|
+              7[0-36-9]
+            )|
+            9(?:
+              0[12]|
+              1[0134-8]|
+              2[0-479]|
+              5[125-8]|
+              6[23679]|
+              7[159]|
+              8[01346]
+            )
+          )\d{5,8}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5,10}</possibleNumberPattern>
         <exampleNumber>612345678</exampleNumber>
       </fixedLine>
@@ -3500,10 +7364,14 @@
         <exampleNumber>812345678</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>177\d{6,8}|800\d{5,7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          177\d{6,8}|
+          800\d{5,7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8,11}</possibleNumberPattern>
         <exampleNumber>8001234567</exampleNumber>
       </tollFree>
+      <!-- The infomation below is provided by an Indonesian -->
       <premiumRate>
         <nationalNumberPattern>809\d{7}</nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
@@ -3523,11 +7391,20 @@
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(\d{2})(\d{5})">
-          <leadingDigits>2[2-9]|4[347]|5[2-58]|6[2-47-9]|9[3-9]</leadingDigits>
+          <leadingDigits>
+            2[2-9]|
+            4[347]|
+            5[2-58]|
+            6[2-47-9]|
+            9[3-9]
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d{5})">
-          <leadingDigits>40[24]|50[45]</leadingDigits>
+          <leadingDigits>
+            40[24]|
+            50[45]
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(48)(\d{4})(\d{4})">
@@ -3539,12 +7416,18 @@
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(\d{2})(\d{3})(\d{3,4})">
-          <leadingDigits>[24-69]|7[14]</leadingDigits>
+          <leadingDigits>
+            [24-69]|
+            7[14]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat nationalPrefixFormattingRule="$NP$FG"
-          pattern="([78]\d)(\d{3})(\d{4})">
-          <leadingDigits>76|8[35-9]</leadingDigits>
+          pattern="([78]\d)(\d{3,4})(\d{4})">
+          <leadingDigits>
+            76|
+            8[35-9]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat nationalPrefixFormattingRule="$NP$FG"
@@ -3553,8 +7436,18 @@
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat nationalPrefixFormattingRule="$FG" pattern="(\d{4})(\d{3})(\d{3})">
-          <leadingDigits>1(?:8[059]|5)</leadingDigits>
-          <leadingDigits>1(?:8[059]0|5)</leadingDigits>
+          <leadingDigits>
+            1(?:
+              8[059]|
+              5
+            )
+          </leadingDigits>
+          <leadingDigits>
+            1(?:
+              8[059]0|
+              5
+            )
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
       </availableFormats>
@@ -3563,26 +7456,61 @@
         <possibleNumberPattern>\d{5,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- We allow 6-7 digit subscriber numbers for the 021 area code since
-        that seems to be reflected by the numbers in the Yellow Pages. The 023,
-        043, 052 and 064 area codes also may have 7 digit subscriber numbers,
-        although limited to 5 in the plan. This was caused by a numbering update
-        in 2008 (http://www.wtng.info/wtng-353-ie.html has more details). Other
-        changes not in the plan include consolidating 0502, 0506 and 0509 into
-        057 and 054, 055 and 053 into 053, and making 044 be followed by 7
-        digits in some cases.
-        We also include Universal Access numbers here in the fixed-line list.
-        Another peculiarity is that 048 actually replaces 00 44 28 when Irish
-        people dial, allowing them to easily dial Northern Ireland. We support
-        these numbers here, although technically they are numbers for the UK.
-        -->
-        <nationalNumberPattern>1\d{7,8}|(?:2[24-9]|4(?:0[24]|7)|5(?:0[45]|8)|6[237-9]|9[3-9])\d{5}|(?:45|[569]1|818)\d{6}|(?:4[12469]|5[3679]|6[56]|7[14]|9[04])\d{7}|21\d{6,7}|(?:23|4[34]|52|64)\d{5,7}|48\d{8}</nationalNumberPattern>
+        <!-- We allow 6-7 digit subscriber numbers for the 021 area code since that seems to be
+             reflected by the numbers in the Yellow Pages. The 023, 043, 052 and 064 area codes also
+             may have 7 digit subscriber numbers, although limited to 5 in the plan. This was caused
+             by a numbering update in 2008 (http://www.wtng.info/wtng-353-ie.html has more details).
+             Other changes not in the plan include consolidating 0502, 0506 and 0509 into 057 and
+             054, 055 and 053 into 053, and making 044 be followed by 7 digits in some cases.
+             Another peculiarity is that 048 actually replaces 00 44 28 when Irish people dial,
+             allowing them to easily dial Northern Ireland. We support these numbers here, although
+             technically they are numbers for the UK. -->
+        <nationalNumberPattern>
+          1\d{7,8}|
+          2(?:
+            1\d{6,7}|
+            [24-9]\d{5}|
+            3\d{5,7}
+          )|
+          4(?:
+            0[24]\d{5}|
+            [1269]\d{7}|
+            [34]\d{5,7}|
+            5\d{6}|
+            7\d{5}|
+            8[0-46-9]\d{7}
+          )|
+          5(?:
+            0[45]\d{5}|
+            1\d{6}|
+            2\d{5,7}|
+            [3679]\d{7}|
+            8\d{5}
+          )|
+          6(?:
+            1\d{6}|
+            4\d{5,7}|
+            [237-9]\d{5}|
+            [56]\d{7}
+          )|
+          7[14]\d{7}|
+          9(?:
+            1\d{6}|
+            [04]\d{7}|
+            [3-9]\d{5}
+          )
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5,10}</possibleNumberPattern>
         <exampleNumber>2212345</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>8[35-9]\d{7}</nationalNumberPattern>
-        <possibleNumberPattern>\d{9}</possibleNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            22\d{6}|
+            [35-9]\d{7,8}
+          )
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
         <exampleNumber>850123456</exampleNumber>
       </mobile>
       <tollFree>
@@ -3591,7 +7519,14 @@
         <exampleNumber>1800123456</exampleNumber>
       </tollFree>
       <premiumRate>
-        <nationalNumberPattern>15(?:1[2-9]|[2-8]0|59|9[089])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          15(?:
+            1[2-9]|
+            [2-8]0|
+            59|
+            9[089]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>1520123456</exampleNumber>
       </premiumRate>
@@ -3610,6 +7545,11 @@
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>761234567</exampleNumber>
       </voip>
+      <uan>
+        <nationalNumberPattern>818\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{9}</possibleNumberPattern>
+        <exampleNumber>818123456</exampleNumber>
+      </uan>
     </territory>
 
     <!-- Israel -->
@@ -3617,7 +7557,7 @@
     <!-- http://en.wikipedia.org/wiki/%2B972 -->
     <!-- http://www.wtng.info/wtng-972-il.html -->
     <!-- http://www.moc.gov.il/new/documents/engineering/MISP0200.ppt (in Hebrew) -->
-    <!-- Formatting practice following wikipedia, and government sites.-->
+    <!-- Formatting practice following wikipedia, and government sites. -->
     <territory id="IL" countryCode="972" internationalPrefix="0(?:0|1[2-48])"
                nationalPrefix="0" nationalPrefixFormattingRule="$FG">
       <availableFormats>
@@ -3635,7 +7575,7 @@
           <leadingDigits>1[7-9]</leadingDigits>
           <format>$1-$2-$3-$4</format>
         </numberFormat>
-        <!-- The following number is for hospitals.-->
+        <!-- The following number is for hospitals. -->
         <numberFormat pattern="(1255)(\d{3})">
           <leadingDigits>125</leadingDigits>
           <format>$1-$2</format>
@@ -3648,13 +7588,36 @@
           <leadingDigits>121</leadingDigits>
           <format>$1-$2-$3</format>
         </numberFormat>
+        <!-- These are 4-digit star numbers which are only accessible within Israel and must be
+             dialed with a star in front of the number. -->
+        <numberFormat pattern="(\d{4})">
+          <leadingDigits>[2-689]</leadingDigits>
+          <format>*$1</format>
+        </numberFormat>
       </availableFormats>
       <generalDesc >
-        <nationalNumberPattern>[1-57-9]\d{6,9}</nationalNumberPattern>
-        <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+        <nationalNumberPattern>
+          [17]\d{6,9}|
+          [2-589]\d{3}(?:\d{3,6})?|
+          6\d{3}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
       </generalDesc>
+      <noInternationalDialling>
+        <nationalNumberPattern>
+          1700\d{6}|
+          [2-689]\d{3}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
+        <exampleNumber>1700123456</exampleNumber>
+      </noInternationalDialling>
       <fixedLine>
-        <nationalNumberPattern>(?:[2-489]|7[2-46-8])\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            [2-489]|
+            7[2-46-8]
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
         <exampleNumber>21234567</exampleNumber>
       </fixedLine>
@@ -3664,23 +7627,40 @@
         <exampleNumber>501234567</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>1(?:80[01]\d{3}|255)\d{3}</nationalNumberPattern>
+        <nationalNumberPattern>
+          1(?:
+            80[01]\d{3}|
+            255
+          )\d{3}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
         <exampleNumber>1800123456</exampleNumber>
       </tollFree>
       <premiumRate>
-          <!-- Peculiarly, one source states that 1956 and 1957 are the new
-          premium rate prefixes. However, no online numbers starting with these
-          prefixes can be found, and this data is not found in any other source.
-          Instead, 1919 numbers are commonly used online for these services, so
-          we support them. -->
-          <!-- 1200 and 1212 numbers are for televoting.-->
-        <nationalNumberPattern>1(?:212|(?:919|200)\d{2})\d{4}</nationalNumberPattern>
+          <!-- Peculiarly, one source states that 1956 and 1957 are the new premium rate prefixes.
+               However, no online numbers starting with these prefixes can be found, and this data
+               is not found in any other source. Instead, 1919 numbers are commonly used online for
+               these services, so we support them. -->
+          <!-- 1200 and 1212 numbers are for televoting. -->
+        <nationalNumberPattern>
+          1(?:
+            212|
+            (?:
+              919|
+              200
+            )\d{2}
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8,10}</possibleNumberPattern>
         <exampleNumber>1919123456</exampleNumber>
       </premiumRate>
       <sharedCost>
-        <nationalNumberPattern>1(?:700|809)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          1(?:
+            700|
+            809
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>1700123456</exampleNumber>
       </sharedCost>
@@ -3689,6 +7669,17 @@
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>771234567</exampleNumber>
       </voip>
+      <uan>
+        <!-- 4-digit star numbers. -->
+        <nationalNumberPattern>[2-689]\d{3}</nationalNumberPattern>
+        <possibleNumberPattern>\d{4}</possibleNumberPattern>
+        <exampleNumber>2250</exampleNumber>
+      </uan>
+      <shortCode>
+        <nationalNumberPattern>1\d{3}</nationalNumberPattern>
+        <possibleNumberPattern>\d{4}</possibleNumberPattern>
+        <exampleNumber>1455</exampleNumber>
+      </shortCode>
     </territory>
 
     <!-- Isle of Man -->
@@ -3697,40 +7688,58 @@
     <territory id="IM" countryCode="44" internationalPrefix="00"
                nationalPrefix="0" preferredExtnPrefix=" x" nationalPrefixFormattingRule="$NP$FG">
       <generalDesc>
-        <nationalNumberPattern>[15789]\d{6,9}</nationalNumberPattern>
+        <nationalNumberPattern>[135789]\d{6,9}</nationalNumberPattern>
         <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
       </generalDesc>
+      <areaCodeOptional>
+        <nationalNumberPattern>1624[2-9]\d{5}</nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>1624250123</exampleNumber>
+      </areaCodeOptional>
       <!-- Specific to IM. -->
       <fixedLine>
+        <!-- 1624 with 10 digits. -->
         <nationalNumberPattern>1624\d{6}</nationalNumberPattern>
         <exampleNumber>1624456789</exampleNumber>
       </fixedLine>
       <mobile>
+        <!-- 7524, 7624, 7924 with 10 digits. -->
         <nationalNumberPattern>7[569]24\d{6}</nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>7924123456</exampleNumber>
       </mobile>
-      <pager>
-        <nationalNumberPattern>7624\d{6}</nationalNumberPattern>
-        <possibleNumberPattern>\d{10}</possibleNumberPattern>
-        <exampleNumber>7624123456</exampleNumber>
-      </pager>
-      <!-- Other numbers as per GB. -->
       <tollFree>
-        <nationalNumberPattern>80(?:0(?:1111|\d{6,7})|8\d{7})|500\d{6}</nationalNumberPattern>
-        <possibleNumberPattern>\d{7}(?:\d{2,3})?</possibleNumberPattern>
-        <exampleNumber>8001234567</exampleNumber>
+        <!-- 808 162 with 10 digits. -->
+        <nationalNumberPattern>808162\d{4}</nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>8081624567</exampleNumber>
       </tollFree>
       <premiumRate>
-        <nationalNumberPattern>(?:87[123]|9(?:[01]\d|8[0-3]))\d{7}</nationalNumberPattern>
+        <!-- 872 299, 900 624, 901 624, 906 624, 907 624 with 10 digits. -->
+        <nationalNumberPattern>
+          (?:
+            872299|
+            90[0167]624
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
-        <exampleNumber>9012345678</exampleNumber>
+        <exampleNumber>9016247890</exampleNumber>
       </premiumRate>
       <sharedCost>
-        <nationalNumberPattern>8(?:4(?:5464\d|[2-5]\d{7})|70\d{7})</nationalNumberPattern>
-        <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
-        <exampleNumber>8431234567</exampleNumber>
+        <!-- 844 040 6, 844 090 6, 845 624, 870 624 with 10 digits. -->
+        <nationalNumberPattern>
+          8(?:
+            4(?:
+              40[49]06|
+              5624\d
+            )|
+            70624\d
+          )\d{3}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>8456247890</exampleNumber>
       </sharedCost>
+      <!-- Other numbers as per GB. -->
       <personalNumber>
         <nationalNumberPattern>70\d{8}</nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
@@ -3741,67 +7750,233 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>5612345678</exampleNumber>
       </voip>
+      <uan>
+        <!-- 308 162, 33d, 344 040 6, 344 090 6, 345 624, 370 624, 372 299, 55 with 10 digits. -->
+        <nationalNumberPattern>
+          3(?:
+            08162\d|
+            3\d{5}|
+            4(?:
+              40[49]06|
+              5624\d
+            )|
+            7(?:
+              0624\d|
+              2299\d
+            )
+          )\d{3}|
+          55\d{8}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5512345678</exampleNumber>
+      </uan>
+      <shortCode>
+        <nationalNumberPattern>
+          1\d{2}(?:\d{3})?|
+          999
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{3,6}</possibleNumberPattern>
+        <exampleNumber>150</exampleNumber>
+      </shortCode>
     </territory>
 
     <!-- India -->
     <!-- http://www.itu.int/oth/T0202000063/en -->
     <!-- http://en.wikipedia.org/wiki/%2B91 -->
-    <!-- Note that several changes in area codes have occurred since the
-    numbering plan was released - changes are notified on the www.bsnl.co.in
-    website. Area codes can be verified here at
-    http://www.bsnl.co.in/stdsearch.php. -->
+    <!-- Note that several changes in area codes have occurred since the numbering plan was released
+         - changes are notified on the www.bsnl.co.in website. Area codes can be verified here at
+         http://www.bsnl.co.in/stdsearch.php. -->
     <territory id="IN" countryCode="91" internationalPrefix="00"
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
        <availableFormats>
          <!-- Mobile numbers. -->
          <numberFormat pattern="(\d{2})(\d{2})(\d{6})">
-           <leadingDigits>7(?:39|5[5-9]|[67][02-9]|8[0-6])|8(?:0[01589]|1[024]|8[0479]|9[057-9])|9</leadingDigits>
-           <leadingDigits>7(?:39|5(?:50|[6-9])|[67][02-9]|8[0-6])|8(?:0[01589]|1[024]|8(?:[079]|44)|9[057-9])|9</leadingDigits>
+           <leadingDigits>
+             7(?:
+               39|
+               5[5-9]|
+               [67][02-9]|
+               8[0-6]
+             )|
+             8(?:
+               0[01589]|
+               1[024]|
+               8[0479]|
+               9[057-9]
+             )|
+             9
+           </leadingDigits>
+           <leadingDigits>
+             7(?:
+               39|
+               5(?:
+                 50|
+                 [6-9]
+               )|
+               [67][02-9]|
+               8[0-6]
+             )|
+             8(?:
+               0[01589]|
+               1[024]|
+               8(?:
+                 [079]|
+                 44
+               )|
+               9[057-9]
+             )|
+             9
+           </leadingDigits>
            <format>$1 $2 $3</format>
          </numberFormat>
          <!-- 2 digits area code -->
          <numberFormat pattern="(\d{2})(\d{4})(\d{4})">
-           <leadingDigits>11|2[02]|33|4[04]|79|80[2-6]</leadingDigits>
+           <leadingDigits>
+             11|
+             2[02]|
+             33|
+             4[04]|
+             79|
+             80[2-6]
+           </leadingDigits>
            <format>$1 $2 $3</format>
          </numberFormat>
          <!-- 3 digits area code -->
          <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
-           <leadingDigits>1(?:2[0-249]|3[0-25]|4[145]|[569][14]|7[1257]|8[1346]|[68][1-9])</leadingDigits>
+           <leadingDigits>
+             1(?:
+               2[0-249]|
+               3[0-25]|
+               4[145]|
+               [569][14]|
+               7[1257]|
+               8[1346]|
+               [68][1-9]
+             )
+           </leadingDigits>
            <format>$1 $2 $3</format>
          </numberFormat>
          <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
-           <leadingDigits>2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])</leadingDigits>
+           <leadingDigits>
+             2(?:
+               1[257]|
+               3[013]|
+               4[01]|
+               5[0137]|
+               6[0158]|
+               78|
+               8[1568]|
+               9[14]
+             )
+           </leadingDigits>
            <format>$1 $2 $3</format>
          </numberFormat>
          <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
-           <leadingDigits>3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])</leadingDigits>
+           <leadingDigits>
+             3(?:
+               26|
+               4[1-3]|
+               5[34]|
+               6[01489]|
+               7[02-46]|
+               8[159]
+             )
+           </leadingDigits>
            <format>$1 $2 $3</format>
          </numberFormat>
          <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
-           <leadingDigits>4(?:1[36]|2[1-47]|3[15]|5[12]|6[126-9]|7[0-24-9]|8[013-57]|9[014-7])</leadingDigits>
+           <leadingDigits>
+             4(?:
+               1[36]|
+               2[1-47]|
+               3[15]|
+               5[12]|
+               6[126-9]|
+               7[0-24-9]|
+               8[013-57]|
+               9[014-7]
+             )
+           </leadingDigits>
            <format>$1 $2 $3</format>
          </numberFormat>
          <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
-           <leadingDigits>5(?:[136][25]|22|4[28]|5[12]|[78]1|9[15])</leadingDigits>
+           <leadingDigits>
+             5(?:
+               [136][25]|
+               22|
+               4[28]|
+               5[12]|
+               [78]1|
+               9[15]
+             )
+           </leadingDigits>
            <format>$1 $2 $3</format>
          </numberFormat>
          <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
-           <leadingDigits>6(?:12|[2345]1|57|6[13]|7[14]|80)</leadingDigits>
+           <leadingDigits>
+             6(?:
+               12|
+               [2345]1|
+               57|
+               6[13]|
+               7[14]|
+               80
+             )
+           </leadingDigits>
            <format>$1 $2 $3</format>
          </numberFormat>
          <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
-           <leadingDigits>7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1|88)</leadingDigits>
-           <leadingDigits>7(?:12|2[14]|3[134]|4[47]|5(?:1|5[1-9])|[67]1|88)</leadingDigits>
+           <leadingDigits>
+             7(?:
+               12|
+               2[14]|
+               3[134]|
+               4[47]|
+               5[15]|
+               [67]1|
+               88
+             )
+           </leadingDigits>
+           <leadingDigits>
+             7(?:
+               12|
+               2[14]|
+               3[134]|
+               4[47]|
+               5(?:
+                 1|
+                 5[1-9]
+               )|
+               [67]1|
+               88
+             )
+           </leadingDigits>
            <format>$1 $2 $3</format>
          </numberFormat>
          <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
-           <leadingDigits>8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)</leadingDigits>
+           <leadingDigits>
+             8(?:
+               16|
+               2[014]|
+               3[126]|
+               6[136]|
+               7[078]|
+               8[34]|
+               91
+             )
+           </leadingDigits>
            <format>$1 $2 $3</format>
          </numberFormat>
          <!-- 4 digits area code -->
          <!-- Fallback for fixed-line numbers. -->
          <numberFormat pattern="(\d{4})(\d{3})(\d{3})">
-           <leadingDigits>1(?:[2-579]|[68][1-9])|[2-8]</leadingDigits>
+           <leadingDigits>
+             1(?:
+               [2-579]|
+               [68][1-9]
+             )|
+             [2-8]
+           </leadingDigits>
            <format>$1 $2 $3</format>
          </numberFormat>
          <numberFormat nationalPrefixFormattingRule="$FG"
@@ -3811,9 +7986,9 @@
            <format>$1 $2 $3</format>
          </numberFormat>
          <numberFormat nationalPrefixFormattingRule="$FG"
-           pattern="(1800)(\d{2,3})(\d{4})">
-           <leadingDigits>180</leadingDigits>
-           <leadingDigits>1800</leadingDigits>
+           pattern="(18[06]0)(\d{2,3})(\d{4})">
+           <leadingDigits>18[06]</leadingDigits>
+           <leadingDigits>18[06]0</leadingDigits>
            <format>$1 $2 $3</format>
          </numberFormat>
       </availableFormats>
@@ -3828,32 +8003,251 @@
         wikipedia, with the addition of 5 (HFCL Infotel). Area codes starting
         with a 7 are listed separately, since the prefixes need to be more
         detailed as they would otherwise clash with mobile phone prefixes. -->
-        <nationalNumberPattern>(?:11|2[02]|33|4[04]|79|80)[2-6]\d{7}|(?:1(?:2[0-249]|3[0-25]|4[145]|5[14]|6[014]|7[1257]|8[01346]|9[14])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[126-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[25]|22|3[25]|4[28]|5[12]|6[25]|[78]1|9[15])|6(?:12|[2345]1|57|6[13]|7[14]|80)|7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91))[2-6]\d{6}|(?:(?:1(?:2[35-8]|3[346-9]|4[236-9]|5[0235-9]|6[235-9]|7[34689]|8[257-9]|9[0235-9])|2(?:1[134689]|3[24-8]|4[2-8]|5[25689]|6[2-4679]|7[13-79]|8[2-479]|9[235-9])|3(?:01|1[79]|2[1-5]|4[25-8]|5[125689]|6[235-7]|7[157-9]|8[2-467])|4(?:1[14578]|2[5689]|3[2-467]|5[4-7]|6[35]|73|8[2689]|9[2389])|5(?:1[146-9]|2[14-8]|3[1346]|4[14-69]|5[46]|6[146-9]|7[2-4]|8[2-8]|9[246])|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24-58]|7[23-689]|8[1-6])|8(?:1[1357-9]|2[235-8]|3[03-57-9]|4[0-24-9]|5\d|6[2457-9]|7[1-6]|8[1256]|9[2-4]))\d|7(?:(?:1[013-9]|2[0235-9]|3[2679]|4[1-35689]|5[2-46-9]|[67][02-9]|9\d)\d|8(?:2[0-6]|[013-8]\d)))[2-6]\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            11|
+            2[02]|
+            33|
+            4[04]|
+            79|
+            80
+          )[2-6]\d{7}|
+          (?:
+            1(?:
+              2[0-249]|
+              3[0-25]|
+              4[145]|
+              [59][14]|
+              6[014]|
+              7[1257]|
+              8[01346]
+            )|
+            2(?:
+              1[257]|
+              3[013]|
+              4[01]|
+              5[0137]|
+              6[0158]|
+              78|
+              8[1568]|
+              9[14]
+            )|
+            3(?:
+              26|
+              4[1-3]|
+              5[34]|
+              6[01489]|
+              7[02-46]|
+              8[159]
+            )|
+            4(?:
+              1[36]|
+              2[1-47]|
+              3[15]|
+              5[12]|
+              6[126-9]|
+              7[0-24-9]|
+              8[013-57]|
+              9[014-7]
+            )|
+            5(?:
+              [136][25]|
+              22|
+              4[28]|
+              5[12]|
+              [78]1|
+              9[15]
+            )|
+            6(?:
+              12|
+              [2345]1|
+              57|
+              6[13]|
+              7[14]|
+              80
+            )|
+            7(?:
+              12|
+              2[14]|
+              3[134]|
+              4[47]|
+              5[15]|
+              [67]1|
+              88
+            )|
+            8(?:
+              16|
+              2[014]|
+              3[126]|
+              6[136]|
+              7[078]|
+              8[34]|
+              91
+            )
+          )[2-6]\d{6}|
+          (?:
+            (?:
+              1(?:
+                2[35-8]|
+                3[346-9]|
+                4[236-9]|
+                [59][0235-9]|
+                6[235-9]|
+                7[34689]|
+                8[257-9]
+              )|
+              2(?:
+                1[134689]|
+                3[24-8]|
+                4[2-8]|
+                5[25689]|
+                6[2-4679]|
+                7[13-79]|
+                8[2-479]|
+                9[235-9]
+              )|
+              3(?:
+                01|
+                1[79]|
+                2[1-5]|
+                4[25-8]|
+                5[125689]|
+                6[235-7]|
+                7[157-9]|
+                8[2-467]
+              )|
+              4(?:
+                1[14578]|
+                2[5689]|
+                3[2-467]|
+                5[4-7]|
+                6[35]|
+                73|
+                8[2689]|
+                9[2389]
+              )|
+              5(?:
+                [16][146-9]|
+                2[14-8]|
+                3[1346]|
+                4[14-69]|
+                5[46]|
+                7[2-4]|
+                8[2-8]|
+                9[246]
+              )|
+              6(?:
+                1[1358]|
+                2[2457]|
+                3[2-4]|
+                4[235-7]|
+                5[2-689]|
+                6[24-58]|
+                7[23-689]|
+                8[1-6]
+              )|
+              8(?:
+                1[1357-9]|
+                2[235-8]|
+                3[03-57-9]|
+                4[0-24-9]|
+                5\d|
+                6[2457-9]|
+                7[1-6]|
+                8[1256]|
+                9[2-4]
+              )
+            )\d|
+            7(?:
+              (?:
+                1[013-9]|
+                2[0235-9]|
+                3[2679]|
+                4[1-35689]|
+                5[2-46-9]|
+                [67][02-9]|
+                9\d
+              )\d|
+              8(?:
+                2[0-6]|
+                [013-8]\d
+              )
+            )
+          )[2-6]\d{5}</nationalNumberPattern>
         <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
         <exampleNumber>1123456789</exampleNumber>
       </fixedLine>
       <!--http://en.wikipedia.org/wiki/Mobile_telephone_numbering_in_India -->
       <mobile>
-        <!-- A couple of additional prefixes not found on the wikipedia
-        page, namely 7696 and 779[56] are added because we have
-        successfully sent SMS messages to these.
-        -->
-        <nationalNumberPattern>(?:7(?:39[89]|5(?:50|6[6-8]|79|[89][7-9])|6(?:0[027]|20|3[19]|54|65|7[67]|9[6-9])|7(?:0[89]|3[589]|42|60|9[5-9])|8(?:[03][07-9]|14|2[7-9]|4[25]|6[09]))\d|9\d{4}|8(?:0[01589]\d|1[024]\d|8(?:[079]\d|44)|9[057-9]\d)\d)\d{5}</nationalNumberPattern>
+        <!-- A couple of additional prefixes not found on the wikipedia page,
+             namely 7696 and 779[56] are added because SMS messages have been
+             successfully sent to these numbers. -->
+        <nationalNumberPattern>
+          (?:
+            7(?:
+              39[89]|
+              5(?:
+                50|
+                6[6-8]|
+                79|
+                [89][7-9]
+              )|
+              6(?:
+                0[027]|
+                20|
+                3[19]|
+                54|
+                65|
+                7[67]|
+                9[6-9]
+              )|
+              7(?:
+                0[89]|
+                3[589]|
+                42|
+                60|
+                9[5-9]
+              )|
+              8(?:
+                [03][07-9]|
+                14|
+                2[7-9]|
+                4[25]|
+                6[09]
+              )
+            )\d|
+            9\d{4}|
+            8(?:
+              (?:
+                0[01589]|
+                1[024]
+              )\d|
+              8(?:
+                [079]\d|
+                44
+              )|
+              9[057-9]\d
+            )\d
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9123456789</exampleNumber>
       </mobile>
       <tollFree>
         <!-- Information gathered from sites such as
-        http://www.surfindia.com/india-facts/toll-free-no.html and
-        http://indmusings.blogspot.com/2008/09/free-help-line-numbersindia.html
-        -->
-        <nationalNumberPattern>1(?:800\d?|600)\d{6}</nationalNumberPattern>
+             http://www.surfindia.com/india-facts/toll-free-no.html and
+             http://indmusings.blogspot.com/2008/09/free-help-line-numbersindia.html -->
+        <nationalNumberPattern>
+          1(?:
+            800\d? |
+            600
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10,11}</possibleNumberPattern>
         <exampleNumber>1800123456</exampleNumber>
       </tollFree>
       <!-- The metadata on premium rate is temporarily commented out as wikipedia says 900 is
-           mobile, conflicting with the national numbering plan.
-       -->
+           mobile, conflicting with the national numbering plan. -->
       <!--
       <premiumRate>
         <nationalNumberPattern>900\d{7}</nationalNumberPattern>
@@ -3861,6 +8255,12 @@
         <exampleNumber>9001234567</exampleNumber>
       </premiumRate>
       -->
+      <uan>
+        <!-- Information gathered from sites such as http://www.calcutta.bsnl.co.in/insuan.html -->
+        <nationalNumberPattern>1860345\d{4}</nationalNumberPattern>
+        <possibleNumberPattern>\d{11}</possibleNumberPattern>
+        <exampleNumber>18603451234</exampleNumber>
+      </uan>
     </territory>
 
     <!-- British Indian Ocean Territory / Diego Garcia -->
@@ -3891,7 +8291,16 @@
         <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>1\d{7}|(?:2[13-5]|3[02367]|4[023]|5[03]|6[026])\d{6,7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          1\d{7}|
+          (?:
+            2[13-5]|
+            3[02367]|
+            4[023]|
+            5[03]|
+            6[026]
+          )\d{6,7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
         <exampleNumber>12345678</exampleNumber>
       </fixedLine>
@@ -3909,29 +8318,134 @@
     <territory id="IR" countryCode="98" internationalPrefix="00"
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
+        <!-- Formatting follows wikipedia. -->
         <numberFormat pattern="(21)(\d{4})(\d{4})">
           <leadingDigits>21</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
-          <leadingDigits>[13-89]|2[02-9]</leadingDigits>
+          <leadingDigits>
+            [13-89]|
+            2[02-9]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[1-9]\d{9}</nationalNumberPattern>
-        <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+        <nationalNumberPattern>[2-6]\d{4,9}|[1789]\d{9}</nationalNumberPattern>
+        <possibleNumberPattern>\d{5,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>[1-8]\d{9}</nationalNumberPattern>
+        <!-- The patterns here are organized such that numbers with variable lengths come first,
+             followed by numbers that are 10 digits long. -->
+        <nationalNumberPattern>
+          2(?:
+            1[2-9]\d{2,7}|
+            51\d{3,7}
+          )|
+          (?:
+            241|
+            3(?:
+              11|
+              5[23]
+            )|
+            441|
+            5[14]1
+          )\d{4,7}|
+          (?:
+            3(?:
+              34|
+              41
+            )|
+            6(?:
+              11|
+              52
+            )|
+          )\d{6,7}|
+          (?:
+            1(?:
+              [134589][12]|
+              [27][1-4]
+            )|
+            2(?:
+              2[189]|
+              [3689][12]|
+              42|
+              5[256]|
+              7[34]
+            )|
+            3(?:
+              12|
+              2[1-4]|
+              3[125]|
+              4[24-9]|
+              51|
+              [6-9][12]
+            )|
+            4(?:
+              [135-9][12]|
+              2[1-467]|
+              4[2-4]
+            )|
+            5(?:
+              12|
+              2[89]|
+              3[1-5]|
+              4[2-8]|
+              [5-7][12]|
+              8[1245]
+            )|
+            6(?:
+              12|
+              [347-9][12]|
+              51|
+              6[1-6]
+            )|
+            7(?:
+              [13589][12]|
+              2[1289]|
+              4[1-4]|
+              6[1-6]|
+              7[1-3]
+            )|
+            8(?:
+              [145][12]|
+              3[124578]|
+              6[1256]|
+              7[1245]
+            )
+          )\d{7}
+        </nationalNumberPattern>
         <exampleNumber>2123456789</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>9(?:1\d|3[1-8])\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          9(?:
+            1\d|
+            3[124-8]
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9123456789</exampleNumber>
       </mobile>
+      <pager>
+        <nationalNumberPattern>943[24678]\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>9432123456</exampleNumber>
+      </pager>
       <!-- No tollFree or premiumRate information can be found. -->
+      <voip>
+        <!-- Includes VSAT and Boomehen Satellite numbers. -->
+        <nationalNumberPattern>993[12]\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>9932123456</exampleNumber>
+      </voip>
+      <uan>
+        <!-- TCI Public Relations numbers -->
+        <nationalNumberPattern>9990\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>9990123456</exampleNumber>
+      </uan>
     </territory>
 
     <!-- Iceland -->
@@ -3948,17 +8462,66 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[4-9]\d{6}|38\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [4-9]\d{6}|
+          38\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
         <!-- Including 87[23] XXXX here as it is listed as a fax number. -->
-        <nationalNumberPattern>(?:4(?:1[0-245]|2[0-7]|[37][0-8]|4[0245]|5[0-356]|6\d|8[0-46-8]|9[013-79])|5(?:05|[156]\d|2[02578]|3[013-6]|4[03-6]|7[0-2578]|8[0-25-9]|9[013-689])|87[23])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            4(?:
+              1[0-245]|
+              2[0-7]|
+              [37][0-8]|
+              4[0245]|
+              5[0-356]|
+              6\d|
+              8[0-46-8]|
+              9[013-79]
+            )|
+            5(?:
+              05|
+              [156]\d|
+              2[02578]|
+              3[013-6]|
+              4[03-6]|
+              7[0-2578]|
+              8[0-25-9]|
+              9[013-689]
+            )|
+            87[23]
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7}</possibleNumberPattern>
         <exampleNumber>4101234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>38[59]\d{6}|(?:6(?:1[014-8]|2[0-8]|3[0-27-9]|4[0-29]|5[029]|[67][0-69]|[89]\d)|7(?:5[057]|7[0-7])|8(?:2[0-5]|[469]\d|5[1-9]))\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          38[59]\d{6}|
+          (?:
+            6(?:
+              1[014-8]|
+              2[0-8]|
+              3[0-27-9]|
+              4[0-29]|
+              5[029]|
+              [67][0-69]|
+              [89]\d
+            )|
+            7(?:
+              5[057]|
+              7[0-7]
+            )|
+            8(?:
+              2[0-5]|
+              [469]\d|
+              5[1-9]
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>6101234</exampleNumber>
       </mobile>
       <tollFree>
@@ -3982,8 +8545,8 @@
     <!-- http://en.wikipedia.org/wiki/%2B39 -->
     <territory id="IT" countryCode="39" internationalPrefix="00">
       <availableFormats>
-        <!-- The leading zero for fixed numbers will be prepended before the
-             matching of these regular expressions.-->
+        <!-- The leading zero for fixed numbers will be prepended before the matching of these
+             regular expressions. -->
         <numberFormat pattern="(0[26])(\d{3,4})(\d{4})">
           <leadingDigits>0[26]</leadingDigits>
           <format>$1 $2 $3</format>
@@ -3992,32 +8555,43 @@
           <leadingDigits>0[26]</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
-        <numberFormat pattern="(0[26])(\d{6})">
+        <numberFormat pattern="(0[26])(\d{4,6})">
           <leadingDigits>0[26]</leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(0\d{2})(\d{3,4})(\d{4})">
-          <leadingDigits>0(?:[13-57-9][0159]|36)</leadingDigits>
+          <leadingDigits>0[13-57-9][0159]</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
-        <numberFormat pattern="(0\d{2})(\d{5,6})">
-          <leadingDigits>0(?:[13-57-9][0159]|36)</leadingDigits>
+        <numberFormat pattern="(0\d{2})(\d{4,6})">
+          <leadingDigits>0[13-57-9][0159]</leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(0\d{3})(\d{3})(\d{4})">
-          <leadingDigits>0[13-57-9]</leadingDigits>
+          <leadingDigits>0[13-57-9][2-46-8]</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(0\d{3})(\d{4,6})">
-          <leadingDigits>0[13-57-9]</leadingDigits>
+          <leadingDigits>0[13-57-9][2-46-8]</leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d{3})(\d{3,4})">
-          <leadingDigits>[13]|8(?:00|4[78])</leadingDigits>
+          <leadingDigits>
+            [13]|
+            8(?:
+              00|
+              4[78]
+            )
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d{3,6})">
-          <leadingDigits>8(?:03|9)</leadingDigits>
+          <leadingDigits>
+            8(?:
+              03|
+              9
+            )
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
       </availableFormats>
@@ -4026,8 +8600,16 @@
         <possibleNumberPattern>\d{6,11}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>0\d{7,10}</nationalNumberPattern>
-        <possibleNumberPattern>\d{8,11}</possibleNumberPattern>
+        <nationalNumberPattern>
+          0(?:
+            [26]\d{4,9}|
+            [13-57-9](?:
+              [0159]\d{4,8}|
+              [2-46-8]\d{5,8}
+            )
+          )
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{6,11}</possibleNumberPattern>
         <exampleNumber>0212345678</exampleNumber>
       </fixedLine>
       <mobile>
@@ -4036,12 +8618,22 @@
         <exampleNumber>312345678</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>80(?:0\d{6}|3\d{3})</nationalNumberPattern>
+        <nationalNumberPattern>
+          80(?:
+            0\d{6}|
+            3\d{3}
+          )
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
         <exampleNumber>800123456</exampleNumber>
       </tollFree>
       <premiumRate>
-        <nationalNumberPattern>89(?:2\d{3}|9\d{6})</nationalNumberPattern>
+        <nationalNumberPattern>
+          89(?:
+            2\d{3}|
+            9\d{6}
+          )
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
         <exampleNumber>899123456</exampleNumber>
       </premiumRate>
@@ -4050,11 +8642,10 @@
         <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
         <exampleNumber>8481234567</exampleNumber>
       </sharedCost>
-      <!-- The plan says these should be 6 digits long, but when you go to
-      telephone companies in Italy, such as
-      http://www.gnetwork.it/EmailServizi/Numerazioni178/tabid/91/Default.aspx
-      and when you search for 178 numbers, they seem to all be 7 digits, so we
-      cover both lengths here.-->
+      <!-- The plan says these should be 6 digits long, but when you go to telephone companies in
+           Italy, such as http://www.gnetwork.it/EmailServizi/Numerazioni178/tabid/91/Default.aspx
+           and when you search for 178 numbers, they seem to all be 7 digits, so we cover both
+           lengths here. -->
       <personalNumber>
         <nationalNumberPattern>178\d{6,7}</nationalNumberPattern>
         <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
@@ -4065,55 +8656,193 @@
     <!-- Jersey -->
     <!-- Inherits formatting rules from the UK. -->
     <!-- http://en.wikipedia.org/wiki/Telephone_numbers_in_the_United_Kingdom -->
+    <!-- http://www.jcra.je/cms3/v2/public/cmsChild.asp?pageID=1024&childID=1036 -->
     <territory id="JE" countryCode="44" internationalPrefix="00"
                nationalPrefix="0" preferredExtnPrefix=" x" nationalPrefixFormattingRule="$NP$FG">
       <generalDesc>
-        <nationalNumberPattern>[15789]\d{6,9}</nationalNumberPattern>
+        <nationalNumberPattern>[135789]\d{6,9}</nationalNumberPattern>
         <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
       </generalDesc>
+      <areaCodeOptional>
+        <nationalNumberPattern>1534[2-9]\d{5}</nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>1534250123</exampleNumber>
+      </areaCodeOptional>
       <!-- Specific to JE. -->
       <fixedLine>
+        <!-- 1534 with 10 digits. -->
         <nationalNumberPattern>1534\d{6}</nationalNumberPattern>
         <exampleNumber>1534456789</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>7(?:509|7(?:00|97)|829|937)\d{6}</nationalNumberPattern>
+        <!-- 7509, 7700, 7797, 7829, 7937 with 10 digits. -->
+        <nationalNumberPattern>
+          7(?:
+            509|
+            7(?:
+              00|
+              97
+            )|
+            829|
+            937
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>7797123456</exampleNumber>
       </mobile>
-      <!-- Other numbers as per GB. -->
       <pager>
-        <nationalNumberPattern>76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\d{6}</nationalNumberPattern>
+        <!-- Pager numbers as per GB. -->
+        <nationalNumberPattern>
+          76(?:
+            0[012]|
+            2[356]|
+            4[0134]|
+            5[49]|
+            6[0-369]|
+            77|
+            81|
+            9[39]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>7640123456</exampleNumber>
       </pager>
+      <!-- Specific to JE. -->
       <tollFree>
-        <nationalNumberPattern>80(?:0(?:1111|\d{6,7})|8\d{7})|500\d{6}</nationalNumberPattern>
-        <possibleNumberPattern>\d{7}(?:\d{2,3})?</possibleNumberPattern>
-        <exampleNumber>8001234567</exampleNumber>
+        <!-- 800 735, 800 781, 808 901 with 10 digits. -->
+        <nationalNumberPattern>
+          80(?:
+            07(?:
+              35|
+              81
+            )|
+            8901
+          )\d{4}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>8007354567</exampleNumber>
       </tollFree>
       <premiumRate>
-        <nationalNumberPattern>(?:87[123]|9(?:[01]\d|8[0-3]))\d{7}</nationalNumberPattern>
+        <!-- 871 206, 900 665, 900 669, 901 810, 907 107, 907 155 with 10 digits. -->
+        <nationalNumberPattern>
+          (?:
+            871206|
+            90(?:
+              066[59]|
+              1810|
+              71(?:
+                07|
+                55
+              )
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
-        <exampleNumber>9012345678</exampleNumber>
+        <exampleNumber>9018105678</exampleNumber>
       </premiumRate>
       <sharedCost>
-        <nationalNumberPattern>8(?:4(?:5464\d|[2-5]\d{7})|70\d{7})</nationalNumberPattern>
-        <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
-        <exampleNumber>8431234567</exampleNumber>
+        <!-- 844 405, 844 442, 844 469, 844 703, 845 041, 845 800, 870 002 with 10 digits. -->
+        <nationalNumberPattern>
+          8(?:
+            4(?:
+              4(?:
+                4(?:
+                  05|
+                  42|
+                  69
+                )|
+                703
+              )|
+              5(?:
+                041|
+                800
+              )
+            )|
+            70002
+          )\d{4}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>8447034567</exampleNumber>
       </sharedCost>
-      <!-- Specific to JE. -->
       <personalNumber>
+        <!-- 70 1511 with 10 digits. -->
         <nationalNumberPattern>701511\d{4}</nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>7015115678</exampleNumber>
       </personalNumber>
-      <!-- Other numbers as per GB. -->
       <voip>
+        <!-- VoIP numbers as per GB. -->
         <nationalNumberPattern>56\d{8}</nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>5612345678</exampleNumber>
       </voip>
+      <uan>
+        <!-- 300 735, 300 781, 308 901, 33d, 344 405, 344 442, 344 469, 344 703, 345 041, 345 800,
+             370 002, 371 206, 55 with 10 digits. -->
+        <nationalNumberPattern>
+          3(?:
+            0(?:
+              07(?:
+                35|
+                81
+              )|
+              8901
+            )|
+            3\d{4}|
+            4(?:
+              4(?:
+                4(?:
+                  05|
+                  42|
+                  69
+                )|
+                703
+              )|
+              5(?:
+                041|
+                800
+              )
+            )|
+            7(?:
+              0002|
+              1206
+            )
+          )\d{4}|
+          55\d{8}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5512345678</exampleNumber>
+      </uan>
+      <shortCode>
+        <!-- http://www.jcra.je/cms3/v2/public/cmsChild.asp?pageID=1024&childID=1036 -->
+        <nationalNumberPattern>
+          1(?:
+            00|
+            1(?:
+              2|
+              8\d{3}
+            )|
+            23|
+            4(?:
+              [14]|
+              28|
+              7\d
+            )|
+            5\d|
+            7(?:
+              0[12]|
+              [128]|
+              35?
+            )|
+            808|
+            9[135]
+          )|
+          23[234]|
+          999
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{3,6}</possibleNumberPattern>
+        <exampleNumber>150</exampleNumber>
+      </shortCode>
     </territory>
 
     <!-- Jamaica -->
@@ -4126,17 +8855,65 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>876(?:(?:5[0-26]|6\d|7[1-6]|9[2-8])\d{5}|(?:7(?:0[2-689]|8[056]|9[45])|9(?:0[1-8]|1[02378]|9[2-468]))\d{4})</nationalNumberPattern>
+        <nationalNumberPattern>
+          876(?:
+            (?:
+              5[0-26]|
+              6\d|
+              7[1-6]|
+              9[2-8]
+            )\d{5}|
+            (?:
+              7(?:
+                0[2-689]|
+                8[056]|
+                9[45]
+              )|
+              9(?:
+                0[1-8]|
+                1[02378]|
+                9[2-468]
+              )
+            )\d{4}
+          )
+        </nationalNumberPattern>
         <exampleNumber>8765123456</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Adding 31 as the prefix was found to be valid by online number lookup sites. -->
-        <nationalNumberPattern>876(?:(?:21|[348]\d|5[78]|77)\d|7(?:0[07]|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579]))\d{4}</nationalNumberPattern>
+        <!-- Adding 31 as the prefix was found to be valid by sending SMSs and looking at online
+             number lookup sites. -->
+        <nationalNumberPattern>
+          876(?:
+            (?:
+              21|
+              [348]\d|
+              5[78]|
+              77
+            )\d|
+            7(?:
+              0[07]|
+              8[1-47-9]|
+              9[0-36-9]
+            )|
+            9(?:
+              [01]9|
+              9[0579]
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8762101234</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002123456</exampleNumber>
       </tollFree>
@@ -4145,18 +8922,32 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002123456</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Jordan -->
-    <!-- http://www.trc.gov.jo/images/stories/pdf/National_Numbering_Plan_ar.pdf (In Arabic) -->
+    <!-- http://www.trc.gov.jo/images/stories/pdf/NNP_ver200[1].pdf?lang=english -->
     <!-- http://www.itu.int/oth/T020200006E/en -->
     <!-- http://en.wikipedia.org/wiki/%2B962 -->
     <territory id="JO" countryCode="962" internationalPrefix="00"
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <numberFormat nationalPrefixFormattingRule="($NP$FG)"
-          pattern="([2356])(\d{3})(\d{4})">
-          <leadingDigits>[2356]</leadingDigits>
+          pattern="(\d)(\d{3})(\d{4})">
+          <leadingDigits>
+            [2356]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(7)(\d{2})(\d{2})(\d{2})(\d{2})">
@@ -4164,23 +8955,31 @@
           <format>$1 $2 $3 $4 $5</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d{5,6})">
-          <leadingDigits>70|[89]</leadingDigits>
+          <leadingDigits>
+            70|
+            [89]
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
         <nationalNumberPattern>[235-9]\d{7,8}</nationalNumberPattern>
-        <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+        <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
+        <!-- Used the plan from www.trc.gov.jo since it is much more complete than the plan on the
+             ITU website. -->
         <nationalNumberPattern>[2356][2-8]\d{6}</nationalNumberPattern>
         <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
-        <exampleNumber>62345678</exampleNumber>
+        <exampleNumber>62001234</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Adding 777, 799 prefixes as we could successfully deliver SMS messages to
-             these mobile numbers. -->
-        <nationalNumberPattern>7(?:4[5-7]|55|7[5-79]|8[5-8]|9[05-9])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          7(?:
+            [1-8]\d|
+            9[02-9]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>790123456</exampleNumber>
       </mobile>
@@ -4190,12 +8989,22 @@
         <exampleNumber>80012345</exampleNumber>
       </tollFree>
       <premiumRate>
-        <nationalNumberPattern>90\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>900\d{5}</nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>90012345</exampleNumber>
       </premiumRate>
       <sharedCost>
-        <nationalNumberPattern>(?:8[57]\d|810)\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            10\d|
+            5\d{2}|
+            7(?:
+             [02]0|
+             7[08]|
+             9[09]
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>85012345</exampleNumber>
       </sharedCost>
@@ -4208,12 +9017,18 @@
 
     <!-- Japan -->
     <!-- http://www.soumu.go.jp/main_sosiki/joho_tsusin/top/tel_number/fixed.html -->
+    <!-- http://www.numberingplans.com/?page=dialling&sub=areacodes&ac=JP -->
     <territory id="JP" countryCode="81" internationalPrefix="010"
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <!-- Toll-free numbers -->
         <numberFormat pattern="(\d{3})(\d{3})(\d{3})">
-          <leadingDigits>(?:12|99)0</leadingDigits>
+          <leadingDigits>
+            (?:
+              12|
+              99
+            )0
+          </leadingDigits>
           <format>$1-$2-$3</format>
         </numberFormat>
         <!-- Some leading digits are explicitly reserved for a particular purpose.
@@ -4243,30 +9058,728 @@
              - "993": 99330 -> 993-30, 99331 -> 99-331, 99332 -> 993-32
           -->
         <numberFormat pattern="(\d{4})(\d)(\d{4})">
-          <leadingDigits>1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|5(?:76|97)|499|746|8(?:3[89]|63|47|51)|9(?:49|80|9[16])</leadingDigits>
-          <leadingDigits>1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:76|97)9|499[2468]|7468|8(?:3(?:8[78]|96)|636|477|51[24])|9(?:496|802|9(?:1[23]|69))</leadingDigits>
-          <leadingDigits>1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:769|979[2-69])|499[2468]|7468|8(?:3(?:8[78]|96[2457-9])|636[2-57-9]|477|51[24])|9(?:496|802|9(?:1[23]|69))</leadingDigits>
+          <leadingDigits>
+            1(?:
+              26|
+              3[79]|
+              4[56]|
+              5[4-68]|
+              6[3-5]
+            )|
+            5(?:
+              76|
+              97
+            )|
+            499|
+            746|
+            8(?:
+              3[89]|
+              63|
+              47|
+              51
+            )|
+            9(?:
+              49|
+              80|
+              9[16]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            1(?:
+              267|
+              3(?:
+                7[247]|
+                9[278]
+              )|
+              4(?:
+                5[67]|
+                66
+              )|
+              5(?:
+                47|
+                58|
+                64|
+                8[67]
+              )|
+              6(?:
+                3[245]|
+                48|
+                5[4-68]
+              )
+            )|
+            5(?:
+              76|
+              97
+            )9|
+            499[2468]|
+            7468|
+            8(?:
+              3(?:
+                8[78]|
+                96
+              )|
+              636|
+              477|
+              51[24]
+            )|
+            9(?:
+              496|
+              802|
+              9(?:
+                1[23]|
+                69
+              )
+            )
+          </leadingDigits>
+          <leadingDigits>
+            1(?:
+              267|
+              3(?:
+                7[247]|
+                9[278]
+              )|
+              4(?:
+                5[67]|
+                66
+              )|
+              5(?:
+                47|
+                58|
+                64|
+                8[67]
+              )|
+              6(?:
+                3[245]|
+                48|
+                5[4-68]
+              )
+            )|
+            5(?:
+              769|
+              979[2-69]
+            )|
+            499[2468]|
+            7468|
+            8(?:
+              3(?:
+                8[78]|
+                96[2457-9]
+              )|
+              636[2-57-9]|
+              477|
+              51[24]
+            )|
+            9(?:
+              496|
+              802|
+              9(?:
+                1[23]|
+                69
+              )
+            )
+          </leadingDigits>
           <format>$1-$2-$3</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d{2})(\d{4})">
-          <leadingDigits>1(?:2[3-6]|3[3-9]|4[2-6]|5[2-8]|[68][2-7]|7[2-689]|9[1-578])|2(?:2[034-9]|3[3-58]|4[0-468]|5[04-8]|6[013-8]|7[06-9]|8[02-57-9]|9[13])|4(?:2[28]|3[689]|6[035-7]|7[05689]|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9[4-9])|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9[014-9])|8(?:2[49]|3[3-8]|4[5-8]|5[2-9]|6[35-9]|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[0245-79]|6[4-9]|7[2-47-9]|8[02-7]|9[3-7])</leadingDigits>
-          <leadingDigits>1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-9]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9[2-8])|3(?:7[2-56]|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5[4-7]|6[2-9]|8[2-8]|9[236-9])|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[0245-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3[34]|[4-7]))</leadingDigits>
-          <leadingDigits>1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-9]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:[3578]|20|4[04-9]|6[56]))|3(?:7(?:[2-5]|6[0-59])|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[0245-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))</leadingDigits>
-          <leadingDigits>1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-9]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:[3578]|20|4[04-9]|6(?:5[25]|60)))|3(?:7(?:[2-5]|6[0-59])|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[0245-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))</leadingDigits>
+          <leadingDigits>
+            1(?:
+              2[3-6]|
+              3[3-9]|
+              4[2-6]|
+              5[2-8]|
+              [68][2-7]|
+              7[2-689]|
+              9[1-578]
+            )|
+            2(?:
+              2[034-9]|
+              3[3-58]|
+              4[0-468]|
+              5[04-8]|
+              6[013-8]|
+              7[06-9]|
+              8[02-57-9]|
+              9[13]
+            )|
+            4(?:
+              2[28]|
+              3[689]|
+              6[035-7]|
+              7[05689]|
+              80|
+              9[3-5]
+            )|
+            5(?:
+              3[1-36-9]|
+              4[4578]|
+              5[013-8]|
+              6[1-9]|
+              7[2-8]|
+              8[14-7]|
+              9[4-9]
+            )|
+            7(?:
+              2[15]|
+              3[5-9]|
+              4[02-9]|
+              6[135-8]|
+              7[0-4689]|
+              9[014-9]
+            )|
+            8(?:
+              2[49]|
+              3[3-8]|
+              4[5-8]|
+              5[2-9]|
+              6[35-9]|
+              7[579]|
+              8[03-579]|
+              9[2-8]
+            )|
+            9(?:
+              [23]0|
+              4[02-46-9]|
+              5[0245-79]|
+              6[4-9]|
+              7[2-47-9]|
+              8[02-7]|
+              9[3-7]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            1(?:
+              2[3-6]|
+              3[3-9]|
+              4[2-6]|
+              5(?:
+                [236-8]|
+                [45][2-69]
+              )|
+              [68][2-7]|
+              7[2-689]|
+              9[1-578]
+            )|
+            2(?:
+              2(?:
+                [04-9]|
+                3[23]
+              )|
+              3[3-58]|
+              4[0-468]|
+              5(?:
+                5[78]|
+                7[2-4]|
+                [0468][2-9]
+              )|
+              6(?:
+                [0135-8]|
+                4[2-5]
+              )|
+              7(?:
+                [0679]|
+                8[2-7]
+              )|
+              8(?:
+                [024578]|
+                3[25-9]|
+                9[6-9]
+              )|
+              9(?:
+                11|
+                3[2-4]
+              )
+            )|
+            4(?:
+              2(?:
+                2[2-9]|
+                8[237-9]
+              )|
+              3[689]|
+              6[035-7]|
+              7(?:
+                [059][2-8]|
+                [68]
+              )|
+              80|
+              9[3-5]
+            )|
+            5(?:
+              3[1-36-9]|
+              4[4578]|
+              5[013-8]|
+              6[1-9]|
+              7[2-8]|
+              8[14-7]|
+              9(?:
+                [89][2-8]|
+                [4-7]
+              )
+            )|
+            7(?:
+              2[15]|
+              3[5-9]|
+              4[02-9]|
+              6[135-8]|
+              7[0-4689]|
+              9(?:
+                [017-9]|
+                4[6-8]|
+                5[2-478]|
+                6[2-589]
+              )
+            )|
+            8(?:
+              2(?:
+                4[4-8]|
+                9[2-8]
+              )|
+              3(?:
+                7[2-56]|
+                [3-6][2-9]|
+                8[2-5]
+              )|
+              4[5-8]|
+              5[2-9]|
+              6(?:
+                [37]|
+                5[4-7]|
+                6[2-9]|
+                8[2-8]|
+                9[236-9]
+              )|
+              7[579]|
+              8[03-579]|
+              9[2-8]
+            )|
+            9(?:
+              [23]0|
+              4[02-46-9]|
+              5[0245-79]|
+              6[4-9]|
+              7[2-47-9]|
+              8[02-7]|
+              9(?:
+                3[34]|
+                [4-7]
+              )
+            )
+          </leadingDigits>
+          <leadingDigits>
+            1(?:
+              2[3-6]|
+              3[3-9]|
+              4[2-6]|
+              5(?:
+                [236-8]|
+                [45][2-69]
+              )|
+              [68][2-7]|
+              7[2-689]|
+              9[1-578]
+            )|
+            2(?:
+              2(?:
+                [04-9]|
+                3[23]
+              )|
+              3[3-58]|
+              4[0-468]|
+              5(?:
+                5[78]|
+                7[2-4]|
+                [0468][2-9]
+              )|
+              6(?:
+                [0135-8]|
+                4[2-5]
+              )|
+              7(?:
+                [0679]|
+                8[2-7]
+              )|
+              8(?:
+                [024578]|
+                3[25-9]|
+                9[6-9]
+              )|
+              9(?:
+                11|
+                3[2-4]
+              )
+            )|
+            4(?:
+              2(?:
+                2[2-9]|
+                8[237-9]
+              )|
+              3[689]|
+              6[035-7]|
+              7(?:
+                [059][2-8]|
+                [68]
+              )|
+              80|
+              9[3-5]
+            )|
+            5(?:
+              3[1-36-9]|
+              4[4578]|
+              5[013-8]|
+              6[1-9]|
+              7[2-8]|
+              8[14-7]|
+              9(?:
+                [89][2-8]|
+                [4-7]
+              )
+            )|
+            7(?:
+              2[15]|
+              3[5-9]|
+              4[02-9]|
+              6[135-8]|
+              7[0-4689]|
+              9(?:
+                [017-9]|
+                4[6-8]|
+                5[2-478]|
+                6[2-589]
+              )
+            )|
+            8(?:
+              2(?:
+                4[4-8]|
+                9(?:
+                  [3578]|
+                  20|
+                  4[04-9]|
+                  6[56]
+                )
+              )|
+              3(?:
+                7(?:
+                  [2-5]|
+                  6[0-59]
+                )|
+                [3-6][2-9]|
+                8[2-5]
+              )|
+              4[5-8]|
+              5[2-9]|
+              6(?:
+                [37]|
+                5(?:
+                  [467]|
+                  5[014-9]
+                )|
+                6(?:
+                  [2-8]|
+                  9[02-69]
+                )|
+                8[2-8]|
+                9(?:
+                  [236-8]|
+                  9[23]
+                )
+              )|
+              7[579]|
+              8[03-579]|
+              9[2-8]
+            )|
+            9(?:
+              [23]0|
+              4[02-46-9]|
+              5[0245-79]|
+              6[4-9]|
+              7[2-47-9]|
+              8[02-7]|
+              9(?:
+                3(?:
+                  3[02-9]|
+                  4[0-24689]
+                )|
+                4[2-69]|
+                [5-7]
+              )
+            )
+          </leadingDigits>
+          <leadingDigits>
+            1(?:
+              2[3-6]|
+              3[3-9]|
+              4[2-6]|
+              5(?:
+                [236-8]|
+                [45][2-69]
+              )|
+              [68][2-7]|
+              7[2-689]|
+              9[1-578]
+            )|
+            2(?:
+              2(?:
+                [04-9]|
+                3[23]
+              )|
+              3[3-58]|
+              4[0-468]|
+              5(?:
+                5[78]|
+                7[2-4]|
+                [0468][2-9]
+              )|
+              6(?:
+                [0135-8]|
+                4[2-5]
+              )|
+              7(?:
+                [0679]|
+                8[2-7]
+              )|
+              8(?:
+                [024578]|
+                3[25-9]|
+                9[6-9]
+              )|
+              9(?:
+                11|
+                3[2-4]
+              )
+            )|
+            4(?:
+              2(?:
+                2[2-9]|
+                8[237-9]
+              )|
+              3[689]|
+              6[035-7]|
+              7(?:
+                [059][2-8]|
+                [68]
+              )|
+              80|
+              9[3-5]
+            )|
+            5(?:
+              3[1-36-9]|
+              4[4578]|
+              5[013-8]|
+              6[1-9]|
+              7[2-8]|
+              8[14-7]|
+              9(?:
+                [89][2-8]|
+                [4-7]
+              )
+            )|
+            7(?:
+              2[15]|
+              3[5-9]|
+              4[02-9]|
+              6[135-8]|
+              7[0-4689]|
+              9(?:
+                [017-9]|
+                4[6-8]|
+                5[2-478]|
+                6[2-589]
+              )
+            )|
+            8(?:
+              2(?:
+                4[4-8]|
+                9(?:
+                  [3578]|
+                  20|
+                  4[04-9]|
+                  6(?:
+                    5[25]|
+                    60
+                  )
+                )
+              )|
+              3(?:
+                7(?:
+                  [2-5]|
+                  6[0-59]
+                )|
+                [3-6][2-9]|
+                8[2-5]
+              )|
+              4[5-8]|
+              5[2-9]|
+              6(?:
+                [37]|
+                5(?:
+                  [467]|
+                  5[014-9]
+                )|
+                6(?:
+                  [2-8]|
+                  9[02-69]
+                )|
+                8[2-8]|
+                9(?:
+                  [236-8]|
+                  9[23]
+                )
+              )|
+              7[579]|
+              8[03-579]|
+              9[2-8]
+            )|
+            9(?:
+              [23]0|
+              4[02-46-9]|
+              5[0245-79]|
+              6[4-9]|
+              7[2-47-9]|
+              8[02-7]|
+              9(?:
+                3(?:
+                  3[02-9]|
+                  4[0-24689]
+                )|
+                4[2-69]|
+                [5-7]
+              )
+            )
+          </leadingDigits>
           <format>$1-$2-$3</format>
         </numberFormat>
         <numberFormat pattern="(\d{2})(\d{3})(\d{4})">
-          <leadingDigits>1|2(?:23|5[5-89]|64|78|8[39]|91)|4(?:2[2689]|64|7[347])|5(?:[2-589]|39)|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93)</leadingDigits>
-          <leadingDigits>1|2(?:23|5(?:[57]|[68]0|9[19])|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93[34])</leadingDigits>
-          <leadingDigits>1|2(?:23|5(?:[57]|[68]0|9(?:17|99))|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93(?:31|4))</leadingDigits>
+          <leadingDigits>
+            1|
+            2(?:
+              23|
+              5[5-89]|
+              64|
+              78|
+              8[39]|
+              91
+            )|
+            4(?:
+              2[2689]|
+              64|
+              7[347]
+            )|
+            5(?:
+              [2-589]|
+              39
+            )|
+            8(?:
+              [46-9]|
+              3[279]|
+              2[124589]
+            )|
+            9(?:
+              [235-8]|
+              93
+            )
+          </leadingDigits>
+          <leadingDigits>
+            1|
+            2(?:
+              23|
+              5(?:
+                [57]|
+                [68]0|
+                9[19]
+              )|
+              64|
+              78|
+              8[39]|
+              917
+            )|
+            4(?:
+              2(?:
+                [68]|
+                20|
+                9[178]
+              )|
+              64|
+              7[347]
+            )|
+            5(?:
+              [2-589]|
+              39[67]
+            )|
+            8(?:
+              [46-9]|
+              3[279]|
+              2[124589]
+            )|
+            9(?:
+              [235-8]|
+              93[34]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            1|
+            2(?:
+              23|
+              5(?:
+                [57]|
+                [68]0|
+                9(?:
+                  17|
+                  99
+                )
+              )|
+              64|
+              78|
+              8[39]|
+              917
+            )|
+            4(?:
+              2(?:
+                [68]|
+                20|
+                9[178]
+              )|
+              64|
+              7[347]
+            )|
+            5(?:
+              [2-589]|
+              39[67]
+            )|
+            8(?:
+              [46-9]|
+              3[279]|
+              2[124589]
+            )|
+            9(?:
+              [235-8]|
+              93(?:
+                31|
+                4
+              )
+            )
+          </leadingDigits>
           <format>$1-$2-$3</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d{2})(\d{4})">
-          <leadingDigits>2(?:9[14-79]|74|[34]7|[56]9)|82|993</leadingDigits>
+          <leadingDigits>
+            2(?:
+              9[14-79]|
+              74|
+              [34]7|
+              [56]9
+            )|
+            82|
+            993
+          </leadingDigits>
           <format>$1-$2-$3</format>
         </numberFormat>
         <numberFormat pattern="(\d)(\d{4})(\d{4})">
-          <leadingDigits>[36]|4(?:2[09]|7[01])</leadingDigits>
+          <leadingDigits>
+            [36]|
+            4(?:
+              2[09]|
+              7[01]
+            )
+          </leadingDigits>
           <format>$1-$2-$3</format>
         </numberFormat>
         <numberFormat pattern="(\d{2})(\d{3})(\d{4})">
@@ -4279,7 +9792,48 @@
         <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:1[1-9][1-9]|9(?:[3-9][1-9]|2\d)|(?:[36][1-9]|[24578][2-9])\d)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            1(?:
+              1[236-8]|
+              2[3-6]|
+              3[3-9]|
+              4[2-6]|
+              [58][2-8]|
+              6[2-7]|
+              7[2-9]|
+              9[1-8]
+            )|
+            2[2-9]\d|
+            [36][1-9]\d|
+            4(?:
+              6[0235-8]|
+              [2-578]\d|
+              9[2-59]
+            )|
+            5(?:
+              6[1-9]|
+              7[2-8]|
+              [2-589]\d
+            )|
+            7(?:
+              3[4-9]|
+              4[02-9]|
+              [25-9]\d
+            )|
+            8(?:
+              3[2-9]|
+              4[5-9]|
+              5[1-9]|
+              8[03-9]|
+              [2679]\d
+            )|
+            9(?:
+              [679][1-9]|
+              [2-58]\d
+            )
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>312345678</exampleNumber>
       </fixedLine>
@@ -4320,11 +9874,17 @@
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <numberFormat pattern="(\d{2})(\d{4,7})">
-          <leadingDigits>[2-6]|91</leadingDigits>
+          <leadingDigits>
+            [2-6]|
+            91
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d{6,7})">
-          <leadingDigits>[78]|90</leadingDigits>
+          <leadingDigits>
+            [78]|
+            90
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
       </availableFormats>
@@ -4333,26 +9893,50 @@
         <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:20|4[0-6]|5\d|6[0-24-9])\d{4,7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            20|
+            4[0-6]|
+            5\d|
+            6[0-24-9]
+          )\d{4,7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{4,9}</possibleNumberPattern>
         <exampleNumber>202012345</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Adding 716 after successful delivery by sms. -->
-        <nationalNumberPattern>7(?:1[0-6]|2\d|3[2-8]|5[0-2]|7[023])\d{6}</nationalNumberPattern>
+        <!-- Adding 716 after successful delivery of SMSs. -->
+        <nationalNumberPattern>
+          7(?:
+            1[0-6]|
+            2\d|
+            3[2-8]|
+            5[0-2]|
+            7[023]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>712123456</exampleNumber>
       </mobile>
-      <!-- There is no document that has the information on the actual length
-      of premium rates and tollfree numbers. The information below comes from
-      research on existing numbers. -->
+      <!-- There is no document that has the information on the actual length of premium rates and
+           tollfree numbers. The information below comes from research on existing numbers. -->
       <tollFree>
-        <nationalNumberPattern>8(?:00|88)\d{6,7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            88
+          )\d{6,7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
         <exampleNumber>800123456</exampleNumber>
       </tollFree>
       <premiumRate>
-         <nationalNumberPattern>9(?:00|1)\d{6,7}</nationalNumberPattern>
+         <nationalNumberPattern>
+           9(?:
+             00|
+             1
+           )\d{6,7}
+         </nationalNumberPattern>
          <possibleNumberPattern>\d{8,10}</possibleNumberPattern>
          <exampleNumber>900123456</exampleNumber>
       </premiumRate>
@@ -4364,11 +9948,19 @@
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <numberFormat pattern="(\d{3})(\d{3})(\d{3})">
-          <leadingDigits>31[25]|[5-8]</leadingDigits>
+          <leadingDigits>
+            31[25]|
+            [5-8]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(\d{4})(\d{5})">
-          <leadingDigits>3(?:1[36]|[2-9])</leadingDigits>
+          <leadingDigits>
+            3(?:
+              1[36]|
+              [2-9]
+            )
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
       </availableFormats>
@@ -4377,13 +9969,69 @@
         <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:3(?:1(?:2\d|3[1-9]|52|6[1-8])|2(?:22|3[0-479]|6[0-7])|4(?:22|5[6-9]|6[0-4])|5(?:22|3[4-7]|59|6[0-5])|6(?:22|5[35-7]|6[0-3])|7(?:22|3[468]|4[1-8]|59|6\d|7[5-7])|9(?:22|4[1-7]|6[0-8]))|6(?:09|12|2[2-4])\d)\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            3(?:
+              1(?:
+                2\d|
+                3[1-9]|
+                52|
+                6[1-8]
+              )|
+              2(?:
+                22|
+                3[0-479]|
+                6[0-7]
+              )|
+              4(?:
+                22|
+                5[6-9]|
+                6[0-4]
+              )|
+              5(?:
+                22|
+                3[4-7]|
+                59|
+                6[0-5]
+              )|
+              6(?:
+                22|
+                5[35-7]|
+                6[0-3]
+              )|
+              7(?:
+                22|
+                3[468]|
+                4[1-8]|
+                59|
+                6\d|
+                7[5-7]
+              )|
+              9(?:
+                22|
+                4[1-7]|
+                6[0-8]
+              )
+            )|
+            6(?:
+              09|
+              12|
+              2[2-4]
+            )\d
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>312123456</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Added 705 since we have successfully sent SMS messages to
-        numbers with this prefix. -->
-        <nationalNumberPattern>5[124-7]\d{7}|7(?:0[05]|7\d)\d{6}</nationalNumberPattern>
+        <!-- Added 705 since SMS messages have been successfully sent to numbers with this prefix.
+         -->
+        <nationalNumberPattern>
+          5[124-7]\d{7}|
+          7(?:
+            0[05]|
+            7\d
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>700123456</exampleNumber>
       </mobile>
@@ -4392,7 +10040,7 @@
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>800123456</exampleNumber>
       </tollFree>
-      <!-- No premiumRate information can be found.-->
+      <!-- No premiumRate information can be found. -->
     </territory>
 
     <!-- Cambodia -->
@@ -4402,7 +10050,10 @@
       <availableFormats>
         <numberFormat nationalPrefixFormattingRule="$NP$FG"
           pattern="(\d{2})(\d{3})(\d{3})">
-          <leadingDigits>1\d[1-9]|[2-9]</leadingDigits>
+          <leadingDigits>
+            1\d[1-9]|
+            [2-9]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(1[89]00)(\d{3})(\d{3})">
@@ -4415,24 +10066,49 @@
         <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:2[3-6]|3[2-6]|4[2-4]|[5-7][2-5])[2-47-9]\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2[3-6]|
+            3[2-6]|
+            4[2-4]|
+            [5-7][2-5]
+          )[2-47-9]\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
         <exampleNumber>23456789</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Adding 171, 13X, 85[2-689] and 921 prefixes as we could successfully deliver SMS
-             messages to these mobile numbers. -->
-        <nationalNumberPattern>(?:(?:1[0-35-9]|9[1-49])[1-9]|85[2-689])\d{5}</nationalNumberPattern>
+        <!-- Adding 171, 13X, 85[2-689] and 921 prefixes as SMS messages could be successfully
+             delivered to these mobile numbers. -->
+        <nationalNumberPattern>
+          (?:
+            (?:
+              1[0-35-9]|
+              9[1-49]
+            )[1-9]|
+            85[2-689]
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>91234567</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>1800(?:1\d|2[09])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          1800(?:
+            1\d|
+            2[09]
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>1800123456</exampleNumber>
       </tollFree>
       <premiumRate>
-        <nationalNumberPattern>1900(?:1\d|2[09])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          1900(?:
+            1\d|
+            2[09]
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>1900123456</exampleNumber>
       </premiumRate>
@@ -4458,7 +10134,12 @@
       <fixedLine>
         <!-- CDMA phones are included here, as they are considered as an extension of fixed line:
              http://www.comorestelecom.km/presentationcdma.php -->
-        <nationalNumberPattern>7(?:6[0-37-9]|7[0-57-9])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          7(?:
+            6[0-37-9]|
+            7[0-57-9]
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>7712345</exampleNumber>
       </fixedLine>
       <mobile>
@@ -4477,16 +10158,44 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>869(?:2(?:29|36)|4(?:6[5-9]|70))\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          869(?:
+            2(?:
+              29|
+              36
+            )|
+            4(?:
+              6[5-9]|
+              70
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>8692361234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>869(?:5(?:5[6-8]|6[5-7])|66[2-9]|76[2-5])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          869(?:
+            5(?:
+              5[6-8]|
+              6[5-7]
+            )|
+            66[2-9]|
+            76[2-5]
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8695561234</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002123456</exampleNumber>
       </tollFree>
@@ -4495,6 +10204,18 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002123456</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!--  Korea, Dem. People's Rep. of -->
@@ -4518,13 +10239,52 @@
                nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <numberFormat pattern="(\d{2})(\d{4})(\d{4})">
-          <leadingDigits>1(?:0|1[19]|[69]9|5[458])|[57]0</leadingDigits>
-          <leadingDigits>1(?:0|1[19]|[69]9|5(?:44|59|8))|[57]0</leadingDigits>
+          <leadingDigits>
+            1(?:
+              0|
+              1[19]|
+              [69]9|
+              5[458]
+            )|
+            [57]0
+          </leadingDigits>
+          <leadingDigits>
+            1(?:
+              0|
+              1[19]|
+              [69]9|
+              5(?:
+                44|
+                59|
+                8
+              )
+            )|
+            [57]0
+          </leadingDigits>
           <format>$1-$2-$3</format>
         </numberFormat>
         <numberFormat pattern="(\d{2})(\d{3})(\d{4})">
-          <leadingDigits>1(?:[169][2-8]|[78]|5[1-4])|[68]0|[3-9][1-9][2-9]</leadingDigits>
-          <leadingDigits>1(?:[169][2-8]|[78]|5(?:[1-3]|4[56]))|[68]0|[3-9][1-9][2-9]</leadingDigits>
+          <leadingDigits>
+            1(?:
+              [169][2-8]|
+              [78]|
+              5[1-4]
+            )|
+            [68]0|
+            [3-9][1-9][2-9]
+          </leadingDigits>
+          <leadingDigits>
+            1(?:
+              [169][2-8]|
+              [78]|
+              5(?:
+                [1-3]|
+                4[56]
+              )
+            )|
+            [68]0|
+            [3-9][1-9][2-9]
+          </leadingDigits>
           <format>$1-$2-$3</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d)(\d{4})">
@@ -4546,13 +10306,49 @@
           <format>$1-$2-$3-$4</format>
         </numberFormat>
         <numberFormat pattern="(\d)(\d{4})(\d{4})">
-          <leadingDigits>2(?:[26]|3[0-467])</leadingDigits>
-          <leadingDigits>2(?:[26]|3(?:01|1[45]|2[17-9]|39|4|6[67]|7[078]))</leadingDigits>
+          <leadingDigits>
+            2(?:
+              [26]|
+              3[0-467]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            2(?:
+              [26]|
+              3(?:
+                01|
+                1[45]|
+                2[17-9]|
+                39|
+                4|
+                6[67]|
+                7[078]
+              )
+            )
+          </leadingDigits>
           <format>$1-$2-$3</format>
         </numberFormat>
         <numberFormat pattern="(\d)(\d{3})(\d{4})">
-          <leadingDigits>2(?:3[0-35-9]|[457-9])</leadingDigits>
-          <leadingDigits>2(?:3(?:0[02-9]|1[0-36-9]|2[02-6]|3[0-8]|6[0-589]|7[1-69]|[589])|[457-9])</leadingDigits>
+          <leadingDigits>
+            2(?:
+              3[0-35-9]|
+              [457-9]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            2(?:
+              3(?:
+                0[02-9]|
+                1[0-36-9]|
+                2[02-6]|
+                3[0-8]|
+                6[0-589]|
+                7[1-69]|
+                [589]
+              )|
+              [457-9]
+            )
+          </leadingDigits>
           <format>$1-$2-$3</format>
         </numberFormat>
         <numberFormat pattern="(\d)(\d{3,4})">
@@ -4561,24 +10357,62 @@
         </numberFormat>
         <numberFormat pattern="(\d{2})(\d{3,4})">
           <leadingDigits>[3-9][1-9]1</leadingDigits>
-          <leadingDigits>[3-9][1-9]1(?:[0-46-9])</leadingDigits>
+          <leadingDigits>
+            [3-9][1-9]1(?:
+              [0-46-9]
+            )
+          </leadingDigits>
           <format>$1-$2</format>
         </numberFormat>
-        <!-- Company numbers.-->
+        <!-- Company numbers. -->
         <numberFormat pattern="(\d{4})(\d{4})"
           nationalPrefixFormattingRule="$FG">
-          <leadingDigits>1(?:5[46-9]|6[04678])</leadingDigits>
-          <leadingDigits>1(?:5(?:44|66|77|88|99)|6(?:00|44|6[16]|70|88))</leadingDigits>
+          <leadingDigits>
+            1(?:
+              5[46-9]|
+              6[04678]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            1(?:
+              5(?:
+                44|
+                66|
+                77|
+                88|
+                99
+              )|
+              6(?:
+                00|
+                44|
+                6[16]|
+                70|
+                88
+              )
+            )
+          </leadingDigits>
           <format>$1-$2</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[1-79]\d{3,9}|8\d{8}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [1-79]\d{3,9}|
+          8\d{8}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- 8-digit company numbers have been included here as well.-->
-        <nationalNumberPattern>1(?:5(?:44|66|77|88|99)|6(?:00|44|6[16]|70|88))\d{4}|(?:2|[34][1-3]|5[1-5]|6[1-4])(?:1\d{2,3}|[2-9]\d{6,7})</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2|
+            [34][1-3]|
+            5[1-5]|
+            6[1-4]
+          )(?:
+            1\d{2,3}|
+            [2-9]\d{6,7}
+          )
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
         <exampleNumber>22123456</exampleNumber>
       </fixedLine>
@@ -4592,6 +10426,7 @@
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>801234567</exampleNumber>
       </tollFree>
+      <!-- The information below is provided by a Korean person. -->
       <premiumRate>
         <nationalNumberPattern>60[2-9]\d{6}</nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
@@ -4607,14 +10442,36 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>7012345678</exampleNumber>
       </voip>
+      <uan>
+        <nationalNumberPattern>
+          1(?:
+            5(?:
+              44|
+              66|
+              77|
+              88|
+              99
+            )|
+            6(?:
+              00|
+              44|
+              6[16]|
+              70|
+              88
+            )
+          )\d{4}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>15441234</exampleNumber>
+      </uan>
     </territory>
 
     <!-- Kuwait -->
     <!-- http://www.itu.int/oth/T0202000073/en -->
     <territory id="KW" countryCode="965" internationalPrefix="00"
-               nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+               nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
-        <!-- Format is from http://www.kuwait.com/index.php?option=com_mtree&task=viewlink&link_id=139&Itemid=15 -->
+        <!-- Format is from ITU. -->
         <numberFormat pattern="(\d{4})(\d{3,4})">
           <leadingDigits>[1269]</leadingDigits>
           <format>$1 $2</format>
@@ -4629,16 +10486,52 @@
         <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:18\d|2(?:[23]\d{2}|4[1-35-9]\d|5(?:0[034]|[2-46]\d|5[1-3]|7[1-7])))\d{4}</nationalNumberPattern>
-        <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            18\d|
+            2(?:
+              [23]\d{2}|
+              4[1-35-9]\d|
+              5(?:
+                0[034]|
+                [2-46]\d|
+                5[1-3]|
+                7[1-7]
+              )
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>22345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:5[05]|6[05-7]|9[0479])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            5(?:
+              0[02]|
+              5\d
+            )|
+            6(?:
+              0[03679]|
+              5[015-9]|
+              6\d|
+              7[067]
+            )|
+            9(?:
+              0[09]|
+              4[049]|
+              [79]\d
+            )
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>50012345</exampleNumber>
       </mobile>
       <!-- No tollFree or premiumRate information can be found. -->
+      <shortCode>
+        <nationalNumberPattern>1\d{2}</nationalNumberPattern>
+        <possibleNumberPattern>\d{3}</possibleNumberPattern>
+        <exampleNumber>177</exampleNumber>
+      </shortCode>
     </territory>
 
     <!-- Cayman Islands -->
@@ -4651,24 +10544,89 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>345(?:2(?:22|44)|444|6(?:23|38|40)|7(?:6[6-9]|77)|8(?:00|1[45]|25|4[89]|88)|9(?:14|4[035-9]))\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          345(?:
+            2(?:
+              22|
+              44
+            )|
+            444|
+            6(?:
+              23|
+              38|
+              40
+            )|
+            7(?:
+              6[6-9]|
+              77
+            )|
+            8(?:
+              00|
+              1[45]|
+              25|
+              4[89]|
+              88
+            )|
+            9(?:
+              14|
+              4[035-9]
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>3452221234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>345(?:32[3-79]|5(?:1[467]|2[5-7]|4[5-9])|9(?:1[679]|2[4-9]|3[89]))\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          345(?:
+            32[3-79]|
+            5(?:
+              1[467]|
+              2[5-7]|
+              4[5-9]
+            )|
+            9(?:
+              1[679]|
+              2[4-9]|
+              3[89]
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>3453231234</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002345678</exampleNumber>
       </tollFree>
       <premiumRate>
-        <nationalNumberPattern>900[2-9]\d{6}|345976\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          900[2-9]\d{6}|
+          345976\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002345678</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Kazakhstan -->
@@ -4677,17 +10635,136 @@
                nationalPrefix="8" nationalPrefixFormattingRule="$NP$FG">
        <!-- Formatting rules obtained from Russia. -->
       <generalDesc>
-        <nationalNumberPattern>(?:[67]\d{2}|80[09])\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            [67]\d{2}|
+            80[09]
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>7(?:1\d[2-7]|2(?:[0-689][2-7]|75[279]))\d{6}</nationalNumberPattern>
+        <!-- VSAT numbers are also included here. -->
+        <nationalNumberPattern>
+          7(?:
+            1(?:
+              0(?:
+                [23]\d|
+                4[023]|
+                59|
+                63
+              )|
+              1(?:
+                [23]\d|
+                4[0-79]|
+                59
+              )|
+              2(?:
+                [23]\d|
+                59
+              )|
+              3(?:
+                2\d|
+                3[1-7]|
+                4[1235-9]|
+                59
+              )|
+              4(?:
+                2\d|
+                3[013-79]|
+                4[0-58]|
+                5[1-79]
+              )|
+              5(?:
+                2\d|
+                3[1-8]|
+                4[1-7]|
+                59
+              )|
+              6(?:
+                22|
+                [34]\d|
+                5[19]
+              )|
+              72\d|
+              8(?:
+                [27]\d|
+                3[1-46-9]|
+                4[0-4]|
+              )
+            )|
+            2(?:
+              1(?:
+                [23]\d|
+                4[46-9]|
+                5[3469]
+              )|
+              2(?:
+                2\d|
+                3[0679]|
+                46|
+                5[12679]|
+              )|
+              3(?:
+                [234]\d|
+                5[139]|
+              )|
+              4(?:
+                22|
+                3[1235-8]
+              )|
+              5(?:
+                [23]\d|
+                4[0124-8]|
+                59
+              )|
+              6(?:
+                22|
+                3[1-9]|
+                4[0-4]|
+                59
+              )|
+              7(?:
+                [23]\d|
+                40|
+                5[279]|
+                7\d
+              )|
+              8(?:
+                [23]\d|
+                4[0-3]|
+                59
+              )|
+              9(?:
+                2\d|
+                3[12478]|
+                59
+              )
+            )|
+            3622
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>7123456789</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Wikipedia says that 6xx is used for mobile phone numbers. Other
-        metadata comes from ITU document. -->
-        <nationalNumberPattern>7(?:(?:(?:1[2-578]|2[13-7])9[01]|2758)\d{5}|(?:0[0-257]|6[02-4]|7[57])\d{7})|6\d{9}</nationalNumberPattern>
+        <!-- Wikipedia says that 6xx is used for mobile phone numbers. Other metadata comes from ITU
+             document. -->
+        <nationalNumberPattern>
+          7(?:
+            0[01257]\d{2}|
+            1[2-578]9[01]|
+            2(?:
+              [13-6]9[01]|
+              7(?:
+                58|
+                9[01]
+              )
+            )|
+            6[02-4]\d{2}|
+            7[157]\d{2}
+          )\d{5}|
+          6\d{9}
+        </nationalNumberPattern>
         <exampleNumber>7129012345</exampleNumber>
       </mobile>
       <tollFree>
@@ -4714,7 +10791,10 @@
           <format>$1 $2 $3 $4</format>
         </numberFormat>
         <numberFormat pattern="([2-57]\d)(\d{3})(\d{3})">
-          <leadingDigits>21|[3-57]</leadingDigits>
+          <leadingDigits>
+            21|
+            [3-57]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
       </availableFormats>
@@ -4723,12 +10803,24 @@
         <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:[2-57]1|54)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            [2-57]1|
+            54
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
         <exampleNumber>21212862</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>20(?:[23]|5[4-6]|77|9[89])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          20(?:
+            [23]|
+            5[4-6]|
+            77|
+            9[89]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
         <exampleNumber>202345678</exampleNumber>
       </mobile>
@@ -4741,16 +10833,23 @@
     <territory id="LB" countryCode="961" internationalPrefix="00"
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
-        <numberFormat pattern="([13-6])(\d{3})(\d{3})">
-          <leadingDigits>[13-6]</leadingDigits>
+        <numberFormat pattern="(\d)(\d{3})(\d{3})">
+          <leadingDigits>
+            [13-6]|
+            7(?:
+              [2-57-9]|
+              62)|
+            [89][2-9]
+            </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
-        <numberFormat pattern="([7-9][01])(\d{3})(\d{3})">
-          <leadingDigits>[7-9][01]</leadingDigits>
-          <format>$1 $2 $3</format>
-        </numberFormat>
-        <numberFormat pattern="([7-9][2-9])(\d{2})(\d{3})">
-          <leadingDigits>[7-9][2-9]</leadingDigits>
+        <numberFormat pattern="([7-9]\d)(\d{3})(\d{3})">
+          <leadingDigits>
+            [89][01]|
+            7(?:
+              [01]|
+              66)
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
       </availableFormats>
@@ -4759,14 +10858,28 @@
         <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:[14-6]\d|[7-9][2-9])\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            [14-6]\d{2}|
+            7(?:
+              [2-57-9]\d|
+              62)|
+            [89][2-9]\d
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7}</possibleNumberPattern>
         <exampleNumber>1123456</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Adding 71[67] prefixes as we could successfully deliver SMS messages to these
-             mobile numbers. -->
-        <nationalNumberPattern>(3\d|7(?:0\d|1[167]))\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            3\d|
+            7(?:
+              [01]\d|
+              66
+            )
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
         <exampleNumber>71123456</exampleNumber>
       </mobile>
@@ -4792,18 +10905,55 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>758(?:234|4(?:5[0-9]|6[2-9]|8[0-2])|638|758)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          758(?:
+            234|
+            4(?:
+              5[0-9]|
+              6[2-9]|
+              8[0-2]
+            )|
+            638|
+            758
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>7582345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Adding 721 and 722 as these prefixes are found widely on the
-        internet and we successfully delivered SMSs to these numbers. -->
-        <nationalNumberPattern>758(?:28[4-7]|384|4(?:6[01]|8[4-9])|5(?:1[89]|20|84)|7(?:1[2-9]|2[0-4]))\d{4}</nationalNumberPattern>
+        <!-- Adding 721 and 722 as these prefixes are found widely on the internet and SMS messages
+             have been successfully delivered to these numbers. -->
+        <nationalNumberPattern>
+          758(?:
+            28[4-7]|
+            384|
+            4(?:
+              6[01]|
+              8[4-9]
+            )|
+            5(?:
+              1[89]|
+              20|
+              84
+            )|
+            7(?:
+              1[2-9]|
+              2[0-4]
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>7582845678</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002123456</exampleNumber>
       </tollFree>
@@ -4812,16 +10962,32 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002123456</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Liechtenstein -->
     <!-- http://www.llv.li/amtsstellen/llv-ak-nummerierung.htm -->
-    <!-- http://www.telecom.li has some different patterns for tollfree and
-    shared cost numbers - look at "Mehrwertnummer". -->
+    <!-- http://www.telecom.li has some different patterns for tollfree and shared cost numbers -
+         look at "Mehrwertnummer". -->
     <territory id="LI" countryCode="423" internationalPrefix="00">
       <availableFormats>
         <numberFormat pattern="(\d{3})(\d{2})(\d{2})">
-          <leadingDigits>[23]|7[4-9]|87</leadingDigits>
+          <leadingDigits>
+            [23]|
+            7[4-9]|
+            87
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(6\d)(\d{3})(\d{3})">
@@ -4834,34 +11000,97 @@
         </numberFormat>
         <!-- 0800 and 0900 are valid prefixes, but Liechtenstein
              doesn't have a general national prefix, so we include it manually here
-             when formatting. We can tell whether it needs one by number length.-->
+             when formatting. We can tell whether it needs one by number length. -->
         <numberFormat pattern="([89]0\d)(\d{2})(\d{2})(\d{2})">
           <leadingDigits>[89]0</leadingDigits>
           <format>0$1 $2 $3 $4</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>(?:66|80|90)\d{7}|[237-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            66|
+            80|
+            90
+          )\d{7}|
+          [237-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
         <!-- Regular Cost services are included here as well. -->
-        <nationalNumberPattern>(?:2(?:17|3\d|6[02-58]|96)|3(?:02|7[01357]|8[048]|9[0269])|870)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2(?:
+              17|
+              3\d|
+              6[02-58]|
+              96
+            )|
+            3(?:
+              02|
+              7[01357]|
+              8[048]|
+              9[0269]
+            )|
+            870
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7}</possibleNumberPattern>
         <exampleNumber>2345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>66(?:[0178][0-4]|2[025-9]|[36]\d|4[129]|5[45]|9[019])\d{5}|7(?:4[2-59]|56|[6-9]\d)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          66(?:
+            [0178][0-4]|
+            2[025-9]|
+            [36]\d|
+            4[129]|
+            5[45]|
+            9[019]
+          )\d{5}|
+          7(?:
+            4[2-59]|
+            56|
+            [6-9]\d
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
         <exampleNumber>661234567</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>80(?:0(?:07|2[238]|79|\d{4})|9\d{2})\d{2}</nationalNumberPattern>
+        <nationalNumberPattern>
+          80(?:
+            0(?:
+              07|
+              2[238]|
+              79|
+              \d{4}
+            )|
+            9\d{2}
+          )\d{2}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
         <exampleNumber>8002222</exampleNumber>
       </tollFree>
       <sharedCost>
-        <nationalNumberPattern>90(?:0(?:2[278]|79|\d{4})|1(?:23|\d{4})|6(?:66|\d{4}))\d{2}</nationalNumberPattern>
+        <nationalNumberPattern>
+          90(?:
+            0(?:
+              2[278]|
+              79|
+              \d{4}
+            )|
+            1(?:
+              23|
+              \d{4}
+            )|
+            6(?:
+              66|
+              \d{4}
+            )
+          )\d{2}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
         <exampleNumber>9002222</exampleNumber>
       </sharedCost>
@@ -4873,8 +11102,42 @@
     </territory>
 
     <!-- Sri Lanka -->
+    <!-- http://en.wikipedia.org/wiki/%2B94 -->
+    <!-- http://www.itu.int/oth/T02020000C3/en -->
     <territory id="LK" countryCode="94" internationalPrefix="00"
-               nationalPrefix="0">
+               nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+      <availableFormats>
+        <numberFormat pattern="(\d{2})(\d{1})(\d{6})">
+          <leadingDigits>[1-689]</leadingDigits>
+          <format>$1 $2 $3</format>
+        </numberFormat>
+        <numberFormat pattern="(\d{2})(\d{3})(\d{4})">
+          <leadingDigits>7</leadingDigits>
+          <format>$1 $2 $3</format>
+        </numberFormat>
+      </availableFormats>
+      <generalDesc>
+        <nationalNumberPattern>[1-9]\d{8}</nationalNumberPattern>
+        <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+      </generalDesc>
+      <fixedLine>
+        <nationalNumberPattern>
+          (?:
+            [189]1|
+            2[13-7]|
+            3[1-8]|
+            4[157]|
+            5[12457]|
+            6[35-7]
+          )[2-57]\d{6}
+        </nationalNumberPattern>
+        <exampleNumber>112345678</exampleNumber>
+      </fixedLine>
+      <mobile>
+        <nationalNumberPattern>7[12578]\d{7}</nationalNumberPattern>
+        <possibleNumberPattern>\d{9}</possibleNumberPattern>
+        <exampleNumber>712345678</exampleNumber>
+      </mobile>
     </territory>
 
     <!-- Liberia -->
@@ -4884,8 +11147,8 @@
       <availableFormats>
         <!-- Formatting from Ministry of Agriculture,
         http://www.moa.gov.lr/content.php?sub=Email&?related=Contacts -->
-        <numberFormat pattern="([27]\d)(\d{3})(\d{3})">
-          <leadingDigits>[27]</leadingDigits>
+        <numberFormat pattern="([279]\d)(\d{3})(\d{3})">
+          <leadingDigits>[279]</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="([4-6])(\d{3})(\d{3})">
@@ -4894,7 +11157,12 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>(?:[27]\d|[4-6])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            [279]\d|
+            [4-6]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
@@ -4903,18 +11171,30 @@
         <exampleNumber>21234567</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Added 66, 67 and 68 as prefixes because of online numbers
-             fitting this pattern. -->
-        <nationalNumberPattern>(?:4[67]|5\d|7\d{2}|6[4-8])\d{5}</nationalNumberPattern>
+        <!-- Added 66, 67 and 68 as prefixes because of online numbers fitting this pattern. -->
+        <nationalNumberPattern>
+          (?:
+            4[67]|
+            5\d|
+            6[4-8]|
+            7\d{2}
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>4612345</exampleNumber>
       </mobile>
+      <premiumRate>
+        <!-- Telemedia service is listed under premium rate. -->
+        <nationalNumberPattern>90\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>90123456</exampleNumber>
+      </premiumRate>
     </territory>
 
     <!-- Lesotho -->
     <!-- http://www.itu.int/oth/T0202000078/en -->
     <territory id="LS" countryCode="266" internationalPrefix="00">
       <availableFormats>
-        <!-- Formatting following yellow pages: www.yellowpages.co.ls-->
+        <!-- Formatting following yellow pages: www.yellowpages.co.ls -->
         <numberFormat pattern="(\d{4})(\d{4})">
           <format>$1 $2</format>
         </numberFormat>
@@ -4944,12 +11224,30 @@
       <availableFormats>
         <!-- Two-digit area codes -->
         <numberFormat pattern="([34]\d)(\d{2})(\d{2})(\d{2})">
-          <leadingDigits>37|4(?:1|5[45]|6[2-4])</leadingDigits>
+          <leadingDigits>
+            37|
+            4(?:
+              1|
+              5[45]|
+              6[2-4]
+            )
+          </leadingDigits>
           <format>$1 $2 $3 $4</format>
         </numberFormat>
         <!-- Three-digit area codes -->
         <numberFormat pattern="([3-689]\d{2})(\d{2})(\d{3})">
-          <leadingDigits>3[148]|4(?:[24]|6[09])|5(?:[0189]|28)|[689]</leadingDigits>
+          <leadingDigits>
+            3[148]|
+            4(?:
+              [24]|
+              6[09]
+            )|
+            5(?:
+              [0189]|
+              28
+            )|
+            [689]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(5)(2[0-79]\d)(\d{4})">
@@ -4962,7 +11260,13 @@
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:3[1478]|4[124-6]|52)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            3[1478]|
+            4[124-6]|
+            52
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>31234567</exampleNumber>
       </fixedLine>
       <mobile>
@@ -4980,7 +11284,200 @@
     </territory>
 
     <!-- Luxembourg -->
-    <territory id="LU" countryCode="352" internationalPrefix="00">
+    <!-- http://www.ilr.public.lu/communications_electroniques/numerotation/index.html
+         -->
+    <territory id="LU" countryCode="352" internationalPrefix="00"
+        nationalPrefixForParsing="15(?:0[06]|1[12]|35|4[04]|55|6[26]|77|88|99)\d">
+      <availableFormats>
+        <!-- Patterns overlap because of variable number length. -->
+        <numberFormat pattern="(\d{2})(\d{3})">
+          <leadingDigits>
+            [23-5]|
+            7[1-9]|
+            [89](?:
+              [1-9]|
+              0[2-9]
+            )
+          </leadingDigits>
+          <format>$1 $2</format>
+        </numberFormat>
+        <numberFormat pattern="(\d{2})(\d{2})(\d{2})">
+          <leadingDigits>
+            [23-5]|
+            7[1-9]|
+            [89](?:
+              [1-9]|
+              0[2-9]
+            )
+          </leadingDigits>
+          <format>$1 $2 $3</format>
+        </numberFormat>
+        <numberFormat pattern="(\d{2})(\d{2})(\d{3})">
+          <leadingDigits>20</leadingDigits>
+          <format>$1 $2 $3</format>
+        </numberFormat>
+        <!-- The pattern for 7-digit numbers starting with 20 here will never be reached - but since
+             we want this pattern to apply for 8-digit numbers with a 20 prefix, we include 20 in
+             the leading digits. This is also done for 9-10 digit numbers starting with 20 below.
+             -->
+        <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{1,2})">
+          <leadingDigits>
+            2(?:
+              [0367]|
+              4[3-8]
+            )
+          </leadingDigits>
+          <format>$1 $2 $3 $4</format>
+        </numberFormat>
+        <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{3})">
+          <leadingDigits>20</leadingDigits>
+          <format>$1 $2 $3 $4</format>
+        </numberFormat>
+        <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})(\d{1,2})">
+          <leadingDigits>
+            2(?:
+              [0367]|
+              4[3-8]
+            )
+          </leadingDigits>
+          <format>$1 $2 $3 $4 $5</format>
+        </numberFormat>
+        <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{1,4})">
+          <leadingDigits>
+            2(?:
+              [12589]|
+              4[12]
+            )|
+            [3-5]|
+            7[1-9]|
+            [89](?:
+              [1-9]|
+              0[2-9]
+            )
+          </leadingDigits>
+          <format>$1 $2 $3 $4</format>
+        </numberFormat>
+        <numberFormat pattern="(\d{3})(\d{2})(\d{3})">
+          <leadingDigits>
+            [89]0[01]|
+            70
+          </leadingDigits>
+          <format>$1 $2 $3</format>
+        </numberFormat>
+        <numberFormat pattern="(\d{3})(\d{3})(\d{3})">
+          <leadingDigits>6</leadingDigits>
+          <format>$1 $2 $3</format>
+        </numberFormat>
+      </availableFormats>
+      <generalDesc>
+        <!-- The country-code is an impossible number prefix, so has been excluded here. This is
+             necessary since the numbers have a variable number length. -->
+        <nationalNumberPattern>
+          [24-9]\d{3,10}|
+          3(?:
+            [0-46-9]\d{2,9}|
+            5[013-9]\d{1,8}
+          )
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{4,11}</possibleNumberPattern>
+      </generalDesc>
+      <fixedLine>
+        <!-- Note that numbers starting with 2[367] can be a maximum of 10 digits - all others a
+             maximum of 11. -->
+        <nationalNumberPattern>
+          (?:
+            2(?:
+              2\d{1,2}|
+              3[2-9]|
+              [67]\d|
+              4[1-8]\d?|
+              5[1-5]\d?|
+              9[0-24-9]\d?
+            )|
+            3(?:
+              [059][05-9]|
+              [13]\d|
+              [26][015-9]|
+              4[0-26-9]|
+              7[0-389]|
+              8[08]
+            )\d?|
+            4\d{2,3}|
+            5(?:
+              [01458]\d|
+              [27][0-69]|
+              3[0-3]|
+              [69][0-7]
+            )\d?|
+            7(?:
+              1[019]|
+              2[05-9]|
+              3[05]|
+              [45][07-9]|
+              [679][089]|
+              8[06-9]
+            )\d?|
+            8(?:
+              0[2-9]|
+              1[0-36-9]|
+              3[3-9]|
+              [469]9|
+              [58][7-9]|
+              7[89]
+            )\d?|
+            9(?:
+              0[89]|
+              2[0-49]|
+              37|
+              49|
+              5[0-27-9]|
+              7[7-9]|
+              9[0-478]
+            )\d?
+          )\d{1,7}
+        </nationalNumberPattern>
+        <exampleNumber>27123456</exampleNumber>
+      </fixedLine>
+      <mobile>
+        <nationalNumberPattern>6[269][18]\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{9}</possibleNumberPattern>
+        <exampleNumber>628123456</exampleNumber>
+      </mobile>
+      <tollFree>
+        <nationalNumberPattern>800\d{5}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>80012345</exampleNumber>
+      </tollFree>
+      <premiumRate>
+        <nationalNumberPattern>90[01]\d{5}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>90012345</exampleNumber>
+      </premiumRate>
+      <sharedCost>
+        <nationalNumberPattern>801\d{5}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>80112345</exampleNumber>
+      </sharedCost>
+      <personalNumber>
+        <nationalNumberPattern>70\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>70123456</exampleNumber>
+      </personalNumber>
+      <voip>
+        <nationalNumberPattern>20\d{2,8}</nationalNumberPattern>
+        <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
+        <exampleNumber>2012345</exampleNumber>
+      </voip>
+      <shortCode>
+        <nationalNumberPattern>
+          1(?:
+            1[23]|
+            2\d{3}
+          )
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{3,5}</possibleNumberPattern>
+        <exampleNumber>12123</exampleNumber>
+      </shortCode>
     </territory>
 
     <!-- Latvia -->
@@ -5014,8 +11511,39 @@
     </territory>
 
     <!-- Libya (Soc. People’s Libyan Arab Jamahiriya) -->
+    <!-- Status as of 21 Jan 2011: a lot of outdated information on the web including on wikipedia
+         and itu.int. The new area codes are on the Arabic website of the main telecommunication
+         operator (Hatef Libya). A new mobile operator Aljeel Aljadeed for Technology will start
+         using 096 (they are allowing customers to register numbers currently), so their code has
+         also been added. -->
+    <!-- http://hlc.ly/price.php -->
     <territory id="LY" countryCode="218" internationalPrefix="00"
-               nationalPrefix="0">
+               nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+      <availableFormats>
+        <numberFormat pattern="([25679]\d)(\d{7})">
+          <format>$1-$2</format>
+        </numberFormat>
+      </availableFormats>
+      <generalDesc>
+        <nationalNumberPattern>[25679]\d{8}</nationalNumberPattern>
+        <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+      </generalDesc>
+      <fixedLine>
+        <nationalNumberPattern>
+          (?:
+            2[1345]|
+            5[1347]|
+            6[123479]|
+            71
+          )\d{7}
+        </nationalNumberPattern>
+        <exampleNumber>212345678</exampleNumber>
+      </fixedLine>
+      <mobile>
+        <nationalNumberPattern>9[12356]\d{7}</nationalNumberPattern>
+        <possibleNumberPattern>\d{9}</possibleNumberPattern>
+        <exampleNumber>912345678</exampleNumber>
+      </mobile>
     </territory>
 
     <!-- Morocco -->
@@ -5025,21 +11553,60 @@
       nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <numberFormat pattern="([56]\d{2})(\d{6})">
-          <leadingDigits>5(?:2[015-7]|3[0-4])|6</leadingDigits>
+          <leadingDigits>
+            5(?:
+              2[015-7]|
+              3[0-4]
+            )|
+            6
+          </leadingDigits>
           <format>$1-$2</format>
         </numberFormat>
         <numberFormat pattern="([58]\d{3})(\d{5})">
-          <leadingDigits>5(?:2[2-489]|3[5-9])|892</leadingDigits>
-          <leadingDigits>5(?:2(?:[2-48]|90)|3(?:[5-79]|80))|892</leadingDigits>
+          <leadingDigits>
+            5(?:
+              2[2-489]|
+              3[5-9]
+            )|
+            892
+          </leadingDigits>
+          <leadingDigits>
+            5(?:
+              2(?:
+                [2-48]|
+                90
+              )|
+              3(?:
+                [5-79]|
+                80
+              )
+            )|
+            892
+          </leadingDigits>
           <format>$1-$2</format>
         </numberFormat>
         <numberFormat pattern="(5\d{4})(\d{4})">
-          <leadingDigits>5(?:29|38)</leadingDigits>
-          <leadingDigits>5(?:29|38)[89]</leadingDigits>
+          <leadingDigits>
+            5(?:
+              29|
+              38
+            )
+          </leadingDigits>
+          <leadingDigits>
+            5(?:
+              29|
+              38
+            )[89]
+          </leadingDigits>
           <format>$1-$2</format>
         </numberFormat>
         <numberFormat pattern="(8[09])(\d{7})">
-          <leadingDigits>8(?:0|9[013-9])</leadingDigits>
+          <leadingDigits>
+            8(?:
+              0|
+              9[013-9]
+            )
+          </leadingDigits>
           <format>$1-$2</format>
         </numberFormat>
       </availableFormats>
@@ -5049,11 +11616,47 @@
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>5(?:2(?:[015-7]\d{2}|(?:[28][2-9]|3[2-7]|4[2-8])\d|9(?:0\d|[89]0))|3(?:[0-4]\d{2}|(?:[57][2-9]|6[2-8]|9[3-9])\d|8(?:0\d|[89]0)))\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          5(?:
+            2(?:
+              (?:
+                [015-7]\d|
+                2[2-9]|
+                3[2-57]|
+                4[2-8]|
+                8[235-9]|
+              )\d|
+              9(?:
+                0\d|
+                [89]0
+              )
+            )|
+            3(?:
+              (?:
+                [0-4]\d|
+                [57][2-9]|
+                6[235-8]|
+                9[3-9]
+              )\d|
+              8(?:
+                0\d|
+                [89]0
+              )
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>520123456</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>6(?:00|33|[15-7]\d|4[0-8]|99)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          6(?:
+            0[06]|
+            [14-7]\d|
+            2[236]|
+            33|
+            99
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>650123456</exampleNumber>
       </mobile>
       <tollFree>
@@ -5067,8 +11670,58 @@
     </territory>
 
     <!-- Monaco -->
+    <!-- http://www.itu.int/oth/T020200008D/en -->
+    <!-- We support Kosovo mobile numbers (044, 045) with a Monaco country-code here, as we do not
+         support Kosovo at the moment. Kosovo seems to use a variety of country codes currently. -->
     <territory id="MC" countryCode="377" internationalPrefix="00"
-               nationalPrefix="0">
+               nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+      <availableFormats>
+        <!-- Following formatting found online rather than in the ITU document example. -->
+        <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})">
+          <leadingDigits>[89]</leadingDigits>
+          <format>$1 $2 $3 $4</format>
+        </numberFormat>
+        <numberFormat pattern="(\d{2})(\d{3})(\d{3})">
+          <leadingDigits>4</leadingDigits>
+          <format>$1 $2 $3</format>
+        </numberFormat>
+        <numberFormat pattern="(6)(\d{2})(\d{2})(\d{2})(\d{2})">
+          <leadingDigits>6</leadingDigits>
+          <format>$1 $2 $3 $4 $5</format>
+        </numberFormat>
+      </availableFormats>
+      <generalDesc>
+        <nationalNumberPattern>[4689]\d{7,8}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+      </generalDesc>
+      <noInternationalDialling>
+        <nationalNumberPattern>8\d{7}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+      </noInternationalDialling>
+      <fixedLine>
+        <!-- Restricted to this as no numbers with the prefix of 91, 95 or 96 have been found. -->
+        <nationalNumberPattern>9[2-47-9]\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>99123456</exampleNumber>
+      </fixedLine>
+      <mobile>
+        <!-- 4X mobile numbers are actually used by Kosovo. -->
+        <nationalNumberPattern>
+          6\d{8}|
+          4\d{7}
+        </nationalNumberPattern>
+        <exampleNumber>612345678</exampleNumber>
+      </mobile>
+      <tollFree>
+        <nationalNumberPattern>
+          (?:
+            8\d|
+            90
+          )\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>90123456</exampleNumber>
+      </tollFree>
     </territory>
 
     <!-- Moldova, Rep. of -->
@@ -5081,7 +11734,10 @@
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="([25-7]\d{2})(\d{2})(\d{3})">
-          <leadingDigits>2[13-79]|[5-7]</leadingDigits>
+          <leadingDigits>
+            2[13-79]|
+            [5-7]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="([89]00)(\d{5})">
@@ -5094,14 +11750,42 @@
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:2(?:1[0569]|2\d|3[015-7]|4[1-46-9]|5[0-24689]|6[2-589]|7[1-37]|9[1347-9])|5(?:33|5[257]))\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2(?:
+              1[0569]|
+              2\d|
+              3[015-7]|
+              4[1-46-9]|
+              5[0-24689]|
+              6[2-589]|
+              7[1-37]|
+              9[1347-9]
+            )|
+            5(?:
+              33|
+              5[257]
+            )
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5,8}</possibleNumberPattern>
         <exampleNumber>22212345</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Added 688 and 689 since we have been successfully sending SMSs
-        to these numbers. -->
-        <nationalNumberPattern>(?:6(?:50|7[12]|[89]\d)|7(?:80|9\d))\d{5}</nationalNumberPattern>
+        <!-- Added 688 and 689 since SMS messages have been successfully sent to these numbers. -->
+        <nationalNumberPattern>
+          (?:
+            6(?:
+              50|
+              7[12]|
+              [89]\d
+            )|
+            7(?:
+              80|
+              9\d
+            )
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>65012345</exampleNumber>
       </mobile>
       <tollFree>
@@ -5133,16 +11817,33 @@
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- Added the prefixes 20 44 and 20 47 as they seem popular on the
-        internet - the plan says 20 4 is for the rest of the province of
-        Antanarivo, but then fails to mention any area codes beginning with 4.
-        -->
-        <nationalNumberPattern>2(?:0(?:(?:2\d|4[47]|5[3467]|6[279]|8[268]|9[245])\d|7(?:2[29]|[35]\d))|210\d)\d{4}</nationalNumberPattern>
+        <!-- Added the prefixes 20 44 and 20 47 as they seem popular on the internet - the plan says
+             20 4 is for the rest of the province of Antanarivo, but then fails to mention any area
+             codes beginning with 4. -->
+        <nationalNumberPattern>
+          2(?:
+            0(?:
+              (?:
+                2\d|
+                4[47]|
+                5[3467]|
+                6[279]|
+                8[268]|
+                9[245]
+              )\d|
+              7(?:
+                2[29]|
+                [35]\d
+              )
+            )|
+            210\d
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>202123456</exampleNumber>
       </fixedLine>
       <mobile>
         <!-- The numbering plan suggests the third digit, Z, should be 24-9,
-             but this is not borne out by reality.-->
+             but this is not borne out by reality. -->
         <nationalNumberPattern>3[02-4]\d{7}</nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>301234567</exampleNumber>
@@ -5159,11 +11860,26 @@
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>590(?:10|2[79]|5[128]|[78]7)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          590(?:
+            10|
+            2[79]|
+            5[128]|
+            [78]7
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>590271234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>690(?:10|2[27]|66|77|8[78])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          690(?:
+            10|
+            2[27]|
+            66|
+            77|
+            8[78]
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>690221234</exampleNumber>
       </mobile>
     </territory>
@@ -5198,12 +11914,34 @@
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:2\d|3[1-4]|4[2-8])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2(?:
+              [23]\d|
+              5[125]|
+              61
+            )|
+            3(?:
+              1[3-6]|
+              2[2-6]|
+              3[2-5]|
+              4[235]
+            )|
+            4(?:
+              [23][2-6]|
+              4[3-6]|
+              5[25]|
+              6[25-8]|
+              7[24-6]|
+              8[4-6]
+            )
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
         <exampleNumber>22212345</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>7\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>7[0-25-8]\d{6}</nationalNumberPattern>
         <exampleNumber>72345678</exampleNumber>
       </mobile>
       <tollFree>
@@ -5215,7 +11953,12 @@
         <exampleNumber>50012345</exampleNumber>
       </premiumRate>
       <sharedCost>
-        <nationalNumberPattern>8(?:0[1-9]|[1-9]\d)\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            0[1-9]|
+            [1-9]\d
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>80123456</exampleNumber>
       </sharedCost>
     </territory>
@@ -5236,16 +11979,42 @@
       </generalDesc>
       <fixedLine>
         <!-- 20 70 seems a common pattern, in addition to 21 25. -->
-        <nationalNumberPattern>(?:2(?:0(?:2[0-589]|7[027-9])|1(?:2[5-7]|[3-689]\d))|442\d)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2(?:
+              0(?:
+                2[0-589]|
+                7[027-9]
+              )|
+              1(?:
+                2[5-7]|
+                [3-689]\d
+              )
+            )|
+            442\d
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>20212345</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:6(?:[569]\d)|7(?:[08][1-9]|[3579][0-4]|4[014-7]|6\d))\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            6(?:
+              [569]\d
+            )|
+            7(?:
+              [08][1-9]|
+              [3579][0-4]|
+              4[014-7]|
+              6\d
+            )
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>65012345</exampleNumber>
       </mobile>
       <tollFree>
-        <!-- Online examples have not been found, but this seems to follow the
-        prescriptions in the plan. -->
+        <!-- Online examples have not been found, but this seems to follow the prescriptions in the
+             plan. -->
         <nationalNumberPattern>800\d{5}</nationalNumberPattern>
         <exampleNumber>80012345</exampleNumber>
       </tollFree>
@@ -5284,17 +12053,36 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[124-8]\d{5,7}|9\d{7,8}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [124-8]\d{5,7}|
+          9\d{7,8}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
         <!-- Fixed satellite network numbers (1 3 33X XXX) are also included here. -->
-        <nationalNumberPattern>(?:1\d|2|4[2-6]|5[2-9]|6\d|7[0-5]|8[1-6])\d{5}|1333\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            1\d|
+            2|
+            4[2-6]|
+            5[2-9]|
+            6\d|
+            7[0-5]|
+            8[1-6]
+          )\d{5}|
+          1333\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5,8}</possibleNumberPattern>
         <exampleNumber>1234567</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>9(?:[25689]\d|444)\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          9(?:
+            [25689]\d|
+            444
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
         <exampleNumber>92123456</exampleNumber>
       </mobile>
@@ -5306,41 +12094,101 @@
     <territory id="MN" countryCode="976" internationalPrefix="001"
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
-        <numberFormat pattern="([127-9]\d)(\d{2})(\d{4})">
-          <leadingDigits>[12]1|[7-9]</leadingDigits>
+        <numberFormat pattern="([12]\d)(\d{2})(\d{4})">
+          <leadingDigits>[12]1</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
-        <numberFormat pattern="([12]2\d)(\d{5})">
+        <numberFormat pattern="([12]2\d)(\d{5,6})">
           <leadingDigits>[12]2[1-3]</leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
-        <numberFormat pattern="([12]\d{3})(\d{4})">
-          <leadingDigits>[12](?:27|[3-5])</leadingDigits>
-          <leadingDigits>[12](?:27|[3-5]\d)2</leadingDigits>
+        <numberFormat pattern="([12]\d{3})(\d{5})">
+          <leadingDigits>
+            [12](?:
+              27|
+              [3-5]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            [12](?:
+              27|
+              [3-5]\d
+            )2
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
-        <numberFormat pattern="([12]\d{4})(\d{3})">
-          <leadingDigits>[12](?:27|[3-5])</leadingDigits>
-          <leadingDigits>[12](?:27|[3-5]\d)[4-9]</leadingDigits>
+        <!-- It seems from online formatting that the national prefix is not written (or perhaps
+             needed?) for numbers in these ranges. -->
+        <numberFormat pattern="(\d{4})(\d{4})"
+          nationalPrefixFormattingRule="$FG">
+          <leadingDigits>[57-9]</leadingDigits>
+          <format>$1 $2</format>
+        </numberFormat>
+        <numberFormat pattern="([12]\d{4})(\d{4,5})">
+          <leadingDigits>
+            [12](?:
+              27|
+              [3-5]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            [12](?:
+              27|
+              [3-5]\d
+            )[4-9]
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[127-9]\d{7}</nationalNumberPattern>
-        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <nationalNumberPattern>
+          [12]\d{7,9}|
+          [57-9]\d{7}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{8,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
         <!-- Note the leading digit is the access code: 1 is used by Mongolia Telecom subscribers
              and 2 is used by Mongolian Railway subscribers. The area code then follows the access
-             code, and could be 1 to 4 digits long. -->
-        <nationalNumberPattern>(?:[12](?:1\d|2[1-37]|3[2-8]|4[2-68]|5[1-4689])|70)\d{6}</nationalNumberPattern>
+             code, and could be 1 to 4 digits long. We also cover wireless local loop numbers here
+             as well, even though we are not certain whether they are in fact fixed or mobile in
+             this country. 5-digit subscriber numbers for 4-digit area codes have been added due to
+             online numbers being found. -->
+        <nationalNumberPattern>
+          [12](?:
+            1\d|
+            2(?:
+              [1-3]\d?|
+              7\d
+            )|
+            3[2-8]\d{1,2}|
+            4[2-68]\d{1,2}|
+            5[1-4689]\d{1,2}
+          )\d{5}|
+          (?:
+            5[0568]|
+            70
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>70123456</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:88|9[1569])\d{6}</nationalNumberPattern>
+        <!-- Adding prefix 98 from numbers found on the internet. -->
+        <nationalNumberPattern>
+          (?:
+            8[89]|
+            9[15689]
+          )\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>88123456</exampleNumber>
       </mobile>
-      <!-- No tollFree or premiumRate information can be found.-->
+      <!-- No tollFree or premiumRate information can be found. -->
+      <voip>
+        <nationalNumberPattern>7[569]\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>75123456</exampleNumber>
+      </voip>
     </territory>
 
     <!-- Macao, China -->
@@ -5356,16 +12204,21 @@
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:28[2-57-9]|8[2-57-9]\d)\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            28[2-57-9]|
+            8[2-57-9]\d
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>28212345</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- The 62 prefix is added as we successfully delivered SMS messages to these
+        <!-- The 62 prefix is added as SMS messages have been successfully delivered to these
              numbers, and they are also widely present on the Internet. -->
         <nationalNumberPattern>6[26]\d{6}</nationalNumberPattern>
         <exampleNumber>66123456</exampleNumber>
       </mobile>
-      <!-- No tollFree or premiumRate information can be found.-->
+      <!-- No tollFree or premiumRate information can be found. -->
     </territory>
 
     <!--  Northern Mariana Islands -->
@@ -5379,15 +12232,55 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>670(?:2(?:3[3-5]|88|56)|32[23]|4[38]3|532|6(?:64|70|8\d))\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          670(?:
+            2(?:
+              3[3-5]|
+              88|
+              56
+            )|
+            32[23]|
+            4[38]3|
+            532|
+            6(?:
+              64|
+              70|
+              8\d
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>6702345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>670(?:2(?:3[3-5]|88|56)|32[23]|4[38]3|532|6(?:64|70|8\d))\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          670(?:
+            2(?:
+              3[3-5]|
+              88|
+              56
+            )|
+            32[23]|
+            4[38]3|
+            532|
+            6(?:
+              64|
+              70|
+              8\d
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>6702345678</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002123456</exampleNumber>
       </tollFree>
@@ -5396,6 +12289,18 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002123456</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Martinique (French Dept. of) -->
@@ -5406,24 +12311,63 @@
     <!-- Mauritania -->
     <!-- http://www.itu.int/oth/T0202000087/en -->
     <!-- http://www.are.mr/com-1-4-1.html -->
+    <!-- New number plan to be in official use from January 1st 2011. During this change-over
+         period, both the new and the old number plans are supported. -->
     <territory id="MR" countryCode="222" internationalPrefix="00" >
       <availableFormats>
+        <numberFormat pattern="([2-48]\d)(\d{2})(\d{2})(\d{2})">
+          <leadingDigits>[2-48]</leadingDigits>
+          <format>$1 $2 $3 $4</format>
+        </numberFormat>
         <numberFormat pattern="([2-7]\d{2})(\d{2})(\d{2})">
+          <leadingDigits>[2-7]</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[2-7]\d{6}</nationalNumberPattern>
-        <possibleNumberPattern>\d{7}</possibleNumberPattern>
+        <nationalNumberPattern>
+          [2-4]\d{6,7}|
+          [5-7]\d{6}|
+          8\d{7}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>5(?:1[035]|2[0-69]|3[0348]|4[468]|5[02-467]|6[39]|7[4-69])\d{4}</nationalNumberPattern>
-        <exampleNumber>5131234</exampleNumber>
+        <nationalNumberPattern>
+          5(?:
+            1[035]|
+            2[0-69]|
+            3[0348]|
+            4[468]|
+            5[02-467]|
+            6[39]|
+            7[4-69]
+          )\d{4}|
+          [2-4]5\d{6}
+        </nationalNumberPattern>
+        <exampleNumber>35123456</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:[23][0-4]|4[3-5]|6\d|7[0-7])\d{5}</nationalNumberPattern>
-        <exampleNumber>3123456</exampleNumber>
+        <nationalNumberPattern>
+          (?:
+            [23][0-4]|
+            4[3-5]|
+            6\d|
+            7[0-7]
+          )\d{5}|
+          (?:
+            2[27]|
+            3[367]|
+            4[467]
+          )\d{6}
+        </nationalNumberPattern>
+        <exampleNumber>22123456</exampleNumber>
       </mobile>
+      <tollFree>
+        <nationalNumberPattern>800\d{5}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>80012345</exampleNumber>
+      </tollFree>
     </territory>
 
     <!-- Montserrat -->
@@ -5445,7 +12389,15 @@
         <exampleNumber>6644923456</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002123456</exampleNumber>
       </tollFree>
@@ -5454,21 +12406,92 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002123456</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Malta -->
-    <territory id="MT" countryCode="356" internationalPrefix="00"
-               nationalPrefix="21">
+    <!-- www.itu.int/oth/T0202000084/en -->
+    <!-- www.mca.org.mt (Numbering link in the LHS menu - has more up-to-date allocations) -->
+    <territory id="MT" countryCode="356" internationalPrefix="00">
+      <availableFormats>
+        <numberFormat pattern="(\d{4})(\d{4})">
+          <format>$1 $2</format>
+        </numberFormat>
+      </availableFormats>
+      <generalDesc>
+        <nationalNumberPattern>[2579]\d{7}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+      </generalDesc>
+      <fixedLine>
+        <nationalNumberPattern>
+          2(?:
+            0(?:
+              1[0-6]|
+              [69]\d
+            )|
+            [1-357]\d{2}
+          )\d{4}
+        </nationalNumberPattern>
+        <exampleNumber>21001234</exampleNumber>
+      </fixedLine>
+      <mobile>
+        <nationalNumberPattern>
+          (?:
+            7(?:
+              210|
+              [79]\d{2}|
+            )|
+            9(?:
+              2[13]\d|
+              696|
+              8(?:
+                1[1-3]|
+                89|
+                97
+              )|
+              9\d{2}
+            )
+          )\d{4}
+        </nationalNumberPattern>
+        <exampleNumber>96961234</exampleNumber>
+      </mobile>
+      <pager>
+        <nationalNumberPattern>7117\d{4}</nationalNumberPattern>
+        <exampleNumber>71171234</exampleNumber>
+      </pager>
+      <premiumRate>
+        <nationalNumberPattern>
+          50(?:
+            0(?:
+              3[1679]|
+              4\d
+            )|
+            [169]\d{2}|
+            7[06]\d
+          )\d{3}
+        </nationalNumberPattern>
+        <exampleNumber>50031234</exampleNumber>
+      </premiumRate>
     </territory>
 
     <!-- Mauritius -->
     <!-- http://www.itu.int/oth/T0202000088/en - covers mobile only -->
     <!-- http://www.icta.mu/telecommunications/numbering.htm -->
     <territory id="MU" countryCode="230" internationalPrefix="020">
-      <!-- There is a proposal to change this to 8 digits - this is supposed to
-      happen August 2010, and 7 digit numbers will be phased out by 1 November
-      2010. Update Aug 9th: Changeover postponed to indeterminate later date.
-      -->
+      <!-- There is a proposal to change this to 8 digits - this is supposed to happen August 2010,
+           and 7 digit numbers will be phased out by 1 November 2010. Update Aug 9th: Changeover
+           postponed to indeterminate later date. -->
       <availableFormats>
         <numberFormat pattern="([2-9]\d{2})(\d{4})">
           <format>$1 $2</format>
@@ -5479,24 +12502,51 @@
         <possibleNumberPattern>\d{7}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- Wireless local loop numbers are considered to be fixed, since there
-        is almost no roaming capability. -->
-        <nationalNumberPattern>(?:2(?:[034789]\d|1[0-8]|2[0-79])|4(?:[013-8]\d|2[4-7])|[56]\d{2}|8(?:14|3[129]))\d{4}</nationalNumberPattern>
+        <!-- Wireless local loop numbers are considered to be fixed, since there is almost no
+             roaming capability. -->
+        <nationalNumberPattern>
+          (?:
+            2(?:
+              [034789]\d|
+              1[0-8]|
+              2[0-79]
+            )|
+            4(?:
+              [013-8]\d|
+              2[4-7]
+            )|
+            [56]\d{2}|
+            8(?:
+              14|
+              3[129]
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>2012345</exampleNumber>
       </fixedLine>
       <mobile>
-        <!--Adding 92 as we successfully sent SMSs to this prefix. -->
-        <nationalNumberPattern>(?:25\d|4(?:2[12389]|9\d)|7\d{2}|87[15-7]|9[1-8]\d)\d{4}</nationalNumberPattern>
+        <!--Adding 92 as SMS messages have been successfully sent to this prefix. -->
+        <nationalNumberPattern>
+          (?:
+            25\d|
+            4(?:
+              2[12389]|
+              9\d
+            )|
+            7\d{2}|
+            87[15-7]|
+            9[1-8]\d
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>2512345</exampleNumber>
       </mobile>
       <tollFree>
         <nationalNumberPattern>80[012]\d{4}</nationalNumberPattern>
         <exampleNumber>8001234</exampleNumber>
       </tollFree>
-      <!-- These may be either shared cost or premium rate - they don't
-      differentiate between these in the plan. This is expected to change with
-      the introduction of the new numbering plan in late 2010 - at that time,
-      this will be updated appropriately. -->
+      <!-- These may be either shared cost or premium rate - they don't differentiate between these
+           in the plan. This is expected to change with the introduction of the new numbering plan
+           in late 2010 - at that time, this will be updated appropriately. -->
       <premiumRate>
         <nationalNumberPattern>30\d{5}</nationalNumberPattern>
         <exampleNumber>3012345</exampleNumber>
@@ -5504,14 +12554,68 @@
     </territory>
 
     <!-- Maldives -->
-    <territory id="MV" countryCode="960" internationalPrefix="020"
-               nationalPrefix="0">
+    <!-- http://www.itu.int/oth/T0202000082/en -->
+    <!-- www.dhiraagu.com.mv -->
+    <territory id="MV" countryCode="960" internationalPrefix="0(?:0|19)"
+      preferredInternationalPrefix="00">
+      <availableFormats>
+        <numberFormat pattern="(\d{3})(\d{4})">
+          <format>$1-$2</format>
+        </numberFormat>
+      </availableFormats>
+      <generalDesc>
+        <nationalNumberPattern>[3679]\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{7}</possibleNumberPattern>
+      </generalDesc>
+      <fixedLine>
+        <!-- 300 and 330 have been added as prefixes from online searches, since the numbers seemed
+             to be diallable. -->
+        <nationalNumberPattern>
+          (?:
+            3(?:
+              00|
+              3[0-59]|
+            )|
+            6(?:
+              [567][02468]|
+              8[024689]
+            )
+          )\d{4}
+        </nationalNumberPattern>
+        <exampleNumber>6701234</exampleNumber>
+      </fixedLine>
+      <mobile>
+        <nationalNumberPattern>
+          (?:
+            7(?:
+              [679]\d|
+              8[02-9]
+            )|
+            9[6-9]\d
+          )\d{4}
+        </nationalNumberPattern>
+        <exampleNumber>7712345</exampleNumber>
+      </mobile>
+      <pager>
+        <nationalNumberPattern>781\d{4}</nationalNumberPattern>
+        <exampleNumber>7812345</exampleNumber>
+      </pager>
+      <shortCode>
+        <nationalNumberPattern>
+          1(?:
+            [19]0|
+            23
+          )
+          </nationalNumberPattern>
+        <possibleNumberPattern>\d{3}</possibleNumberPattern>
+        <exampleNumber>123</exampleNumber>
+      </shortCode>
     </territory>
 
     <!-- Malawi -->
     <!-- http://www.itu.int/oth/T0202000080/en -->
-    <!-- The plan doesn't state that a national prefix exists, but
-         numbers found on the internet are consistent in having one.-->
+    <!-- The plan doesn't state that a national prefix exists, but numbers found on the internet are
+         consistent in having one. -->
     <territory id="MW" countryCode="265" internationalPrefix="00"
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
@@ -5532,20 +12636,43 @@
           <format>$1 $2 $3</format>
         </numberFormat>
       </availableFormats>
-      <!-- According to the plan, the switch from 7 to 9 digits for mobile
-           numbers happened in July 2009. However, online numbers don't
-           seem to reflect this - even on the telephone company websites such as
-           www.mw.zain.com. Allowing both for now. -->
+      <!-- According to the plan, the switch from 7 to 9 digits for mobile numbers happened in July
+           2009. However, online numbers don't seem to reflect this - even on the telephone company
+           websites such as www.mw.zain.com. Allowing both for now. -->
       <generalDesc>
-        <nationalNumberPattern>(?:[13-5]|[27]\d{2}|[89](?:\d{2})?)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            [13-5]|
+            [27]\d{2}|
+            [89](?:
+              \d{2}
+            )?
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:1[2-9]|21\d{2})\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            1[2-9]|
+            21\d{2}
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>1234567</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:[3-5]|77|8(?:8\d)?|9(?:9\d)?)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            [3-5]|
+            77|
+            8(?:
+              8\d
+            )? |
+            9(?:
+              9\d
+            )?
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>991234567</exampleNumber>
       </mobile>
     </territory>
@@ -5560,44 +12687,91 @@
                nationalPrefixForParsing="0[12]|04[45](\d{10})"
                nationalPrefixTransformRule="1$1"
                nationalPrefixFormattingRule="$NP $FG">
-      <!-- When a number starts with 01 or 02, we remove the prefixes; when a
-       number starts with 045 or 046 followed by 10 digits, we replace the
-       prefixes with 1. This way all the mobile numbers, regardless written
-       in international format (leading 1) or national format
-       (leading 045/046), will be parsed into the same form. -->
+      <!-- When a number starts with 01 or 02, we remove the prefixes; when a number starts with 045
+           or 046 followed by 10 digits, we replace the prefixes with 1. This way all the mobile
+           numbers, regardless written in international format (leading 1) or national format
+           (leading 045/046), will be parsed into the same form. -->
       <availableFormats>
         <numberFormat pattern="([358]\d)(\d{4})(\d{4})">
-          <leadingDigits>33|55|81</leadingDigits>
+          <leadingDigits>
+            33|
+            55|
+            81
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <intlNumberFormat pattern="([358]\d)(\d{4})(\d{4})">
-          <leadingDigits>33|55|81</leadingDigits>
+          <leadingDigits>
+            33|
+            55|
+            81
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </intlNumberFormat>
         <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
-          <leadingDigits>[2467]|3[12457-9]|5[89]|8[02-9]|9[0-35-9]</leadingDigits>
+          <leadingDigits>
+            [2467]|
+            3[12457-9]|
+            5[89]|
+            8[02-9]|
+            9[0-35-9]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <intlNumberFormat pattern="(\d{3})(\d{3})(\d{4})">
-          <leadingDigits>[2467]|3[12457-9]|5[89]|8[02-9]|9[0-35-9]</leadingDigits>
+          <leadingDigits>
+            [2467]|
+            3[12457-9]|
+            5[89]|
+            8[02-9]|
+            9[0-35-9]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </intlNumberFormat>
         <numberFormat nationalPrefixFormattingRule="$FG"
           pattern="1([358]\d)(\d{4})(\d{4})">
-          <leadingDigits>1(?:33|55|81)</leadingDigits>
+          <leadingDigits>
+            1(?:
+              33|
+              55|
+              81
+            )
+          </leadingDigits>
           <format>045 $1 $2 $3</format>
         </numberFormat>
         <intlNumberFormat pattern="(1)([358]\d)(\d{4})(\d{4})">
-          <leadingDigits>1(?:33|55|81)</leadingDigits>
+          <leadingDigits>
+            1(?:
+              33|
+              55|
+              81
+            )
+          </leadingDigits>
           <format>$1 $2 $3 $4</format>
         </intlNumberFormat>
         <numberFormat nationalPrefixFormattingRule="$FG"
           pattern="1(\d{3})(\d{3})(\d{4})">
-          <leadingDigits>1(?:[2467]|3[12457-9]|5[89]|8[2-9]|9[1-35-9])</leadingDigits>
+          <leadingDigits>
+            1(?:
+              [2467]|
+              3[12457-9]|
+              5[89]|
+              8[2-9]|
+              9[1-35-9]
+            )
+          </leadingDigits>
           <format>045 $1 $2 $3</format>
         </numberFormat>
         <intlNumberFormat pattern="(1)(\d{3})(\d{3})(\d{4})">
-          <leadingDigits>1(?:[2467]|3[12457-9]|5[89]|8[2-9]|9[1-35-9])</leadingDigits>
+          <leadingDigits>
+            1(?:
+              [2467]|
+              3[12457-9]|
+              5[89]|
+              8[2-9]|
+              9[1-35-9]
+            )
+          </leadingDigits>
           <format>$1 $2 $3 $4</format>
         </intlNumberFormat>
       </availableFormats>
@@ -5607,12 +12781,146 @@
       </generalDesc>
       <fixedLine>
         <!-- http://en.wikipedia.org/wiki/Area_codes_in_Mexico_by_code -->
-        <nationalNumberPattern>(?:33|55|81)\d{8}|(?:2(?:2[2-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-58]|9[467])|3(?:1[1-79]|[2458][1-9]|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-6][1-9]|[37][1-8]|8[1-35-9]|9[2-689])|5(?:88|9[1-79])|6(?:1[2-68]|[234][1-9]|5[1-3689]|6[12457-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2[1-8]|5[13-9]|8[1-69]|9[17])|8(?:2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            33|
+            55|
+            81
+          )\d{8}|
+          (?:
+            2(?:
+              2[2-9]|
+              3[1-35-8]|
+              4[13-9]|
+              7[1-689]|
+              8[1-58]|
+              9[467]
+            )|
+            3(?:
+              1[1-79]|
+              [2458][1-9]|
+              7[1-8]|
+              9[1-5]
+            )|
+            4(?:
+              1[1-57-9]|
+              [24-6][1-9]|
+              [37][1-8]|
+              8[1-35-9]|
+              9[2-689]
+            )|
+            5(?:
+              88|
+              9[1-79]
+            )|
+            6(?:
+              1[2-68]|
+              [234][1-9]|
+              5[1-3689]|
+              6[12457-9]|
+              7[1-7]|
+              8[67]|
+              9[4-8]
+            )|
+            7(?:
+              [13467][1-9]|
+              2[1-8]|
+              5[13-9]|
+              8[1-69]|
+              9[17]
+            )|
+            8(?:
+              2[13-689]|
+              3[1-6]|
+              4[124-6]|
+              6[1246-9]|
+              7[1-378]|
+              9[12479]
+            )|
+            9(?:
+              1[346-9]|
+              2[1-4]|
+              3[2-46-8]|
+              5[1348]|
+              [69][1-9]|
+              7[12]|
+              8[1-8]
+            )
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
         <exampleNumber>2221234567</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>1(?:(?:33|55|81)\d{8}|(?:2(?:2[2-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-58]|9[467])|3(?:1[1-79]|[2458][1-9]|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-6][1-9]|[37][1-8]|8[1-35-9]|9[2-689])|5(?:88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[12457-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2[1-8]|5[13-9]|8[1-69]|9[17])|8(?:2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))\d{7})</nationalNumberPattern>
+        <nationalNumberPattern>
+          1(?:
+            (?:
+              33|
+              55|
+              81
+            )\d{8}|
+            (?:
+              2(?:
+                2[2-9]|
+                3[1-35-8]|
+                4[13-9]|
+                7[1-689]|
+                8[1-58]|
+                9[467]
+              )|
+              3(?:
+                1[1-79]|
+                [2458][1-9]|
+                7[1-8]|
+                9[1-5]
+              )|
+              4(?:
+                1[1-57-9]|
+                [24-6][1-9]|
+                [37][1-8]|
+                8[1-35-9]|
+                9[2-689]
+              )|
+              5(?:
+                88|
+                9[1-79]
+              )|
+              6(?:
+                1[2-68]|
+                [2-4][1-9]|
+                5[1-3689]|
+                6[12457-9]|
+                7[1-7]|
+                8[67]|
+                9[4-8]
+              )|
+              7(?:
+                [13467][1-9]|
+                2[1-8]|
+                5[13-9]|
+                8[1-69]|
+                9[17]
+              )|
+              8(?:
+                2[13-689]|
+                3[1-6]|
+                4[124-6]|
+                6[1246-9]|
+                7[1-378]|
+                9[12479]
+              )|
+              9(?:
+                1[346-9]|
+                2[1-4]|
+                3[2-46-8]|
+                5[1348]|
+                [69][1-9]|
+                7[12]|
+                8[1-8]
+              )
+            )\d{7}
+          )
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{11}</possibleNumberPattern>
         <exampleNumber>12221234567</exampleNumber>
       </mobile>
@@ -5646,7 +12954,10 @@
         </numberFormat>
         <numberFormat nationalPrefixFormattingRule="$NP$FG"
           pattern="([18]\d)(\d{3})(\d{3,4})">
-          <leadingDigits>1[0-46-9][1-9]|8</leadingDigits>
+          <leadingDigits>
+            1[0-46-9][1-9]|
+            8
+          </leadingDigits>
           <format>$1-$2 $3</format>
         </numberFormat>
         <numberFormat pattern="(1)([36-8]00)(\d{2})(\d{4})">
@@ -5664,7 +12975,13 @@
         <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:3\d{2}|[4-79]\d|8[2-9])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            3\d{2}|
+            [4-79]\d|
+            8[2-9]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
         <exampleNumber>312345678</exampleNumber>
       </fixedLine>
@@ -5700,7 +13017,10 @@
     <territory id="MZ" countryCode="258" internationalPrefix="00">
       <availableFormats>
         <numberFormat pattern="([28]\d)(\d{3})(\d{3,4})">
-          <leadingDigits>2|8[24]</leadingDigits>
+          <leadingDigits>
+            2|
+            8[24]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(80\d)(\d{3})(\d{3})">
@@ -5713,7 +13033,14 @@
         <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>2(?:[1346]\d|5[0-2]|[78][12]|93)\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          2(?:
+            [1346]\d|
+            5[0-2]|
+            [78][12]|
+            93
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>21123456</exampleNumber>
       </fixedLine>
@@ -5724,14 +13051,14 @@
       </mobile>
       <tollFree>
         <!-- Unsure of the length requirement on toll-free numbers, so using 9
-        based on online examples.-->
+        based on online examples. -->
         <nationalNumberPattern>800\d{6}</nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>800123456</exampleNumber>
       </tollFree>
-      <!-- The plan suggests 801 and 802 numbers are shared-cost numbers, and
-      numbers beginning with a 9 are premium rate, but no online examples can be
-      found of any of these so they are omitted for the time-being.-->
+      <!-- The plan suggests 801 and 802 numbers are shared-cost numbers, and numbers beginning with
+           a 9 are premium rate, but no online examples can be found of any of these so they are
+           omitted for the time-being. -->
     </territory>
 
     <!-- Namibia -->
@@ -5740,60 +13067,155 @@
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <numberFormat pattern="(8\d)(\d{3})(\d{4})">
-          <leadingDigits>8[15]</leadingDigits>
+          <leadingDigits>8[125]</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
-        <!-- This overlaps with the next pattern so is listed first. -->
-        <numberFormat pattern="(632532)(\d{2,4})">
-          <leadingDigits>632</leadingDigits>
-          <leadingDigits>6325</leadingDigits>
-          <leadingDigits>63253</leadingDigits>
-          <leadingDigits>632532</leadingDigits>
-          <format>$1 $2</format>
-        </numberFormat>
         <numberFormat pattern="(6\d)(\d{2,3})(\d{4})">
-          <leadingDigits>6(?:1|[245][1-7]|3[125-7]|6[1256]|7[1236])</leadingDigits>
+          <leadingDigits>6</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
-        <!-- Another overlap pattern - this one is for shorter numbers. -->
-        <numberFormat pattern="(6\d)(\d{4,5})">
-          <leadingDigits>6(?:3[12567]|5[3-5]|6[1256]|7[1236])</leadingDigits>
-          <format>$1 $2</format>
-        </numberFormat>
-        <numberFormat pattern="(6\d{2})(\d{4,6})">
-          <leadingDigits>6[2356]8</leadingDigits>
-          <format>$1 $2</format>
-        </numberFormat>
-        <numberFormat pattern="(6\d{3})(\d{4,5})">
-          <leadingDigits>6(?:34|6[34]|75)</leadingDigits>
-          <leadingDigits>6(?:342|6[34]|751)</leadingDigits>
-          <format>$1 $2</format>
-        </numberFormat>
         <numberFormat pattern="(88)(\d{3})(\d{3})">
           <leadingDigits>88</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
+        <numberFormat pattern="(870)(\d{3})(\d{3})">
+          <leadingDigits>870</leadingDigits>
+          <format>$1 $2 $3</format>
+        </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[68]\d{5,9}</nationalNumberPattern>
-        <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
+        <nationalNumberPattern>[68]\d{7,8}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>6(?:1(?:[136]|2\d?)\d|2(?:[25]\d?|[134678])\d|3(?:2\d{0,3}|4\d{1,2}|[135-8]\d?)|4(?:[13-8]\d|2\d{1,2})|(?:5(?:[16-7]\d|[3-58]\d?|2\d{1,2}))|6\d{0,4}|7\d{0,3})\d{4}</nationalNumberPattern>
+        <!-- Includes VSAT service. -->
+        <nationalNumberPattern>
+          6(?:
+            1(?:
+              17|
+              2(?:
+                [0189]\d|
+                [23-6]|
+                7\d?
+              )|
+              3(?:
+                2\d|
+                3[378]
+              )|
+              4[01]|
+              69|
+              7[014]
+            )|
+            2(?:
+              17|
+              25|
+              5(?:
+                [0-36-8]|
+                4\d?
+              )|
+              69|
+              70
+            )|
+            3(?:
+              17|
+              2(?:
+                [0237]\d?|
+                [14-689]
+              )|
+              34|
+              6[29]|
+              7[01]|
+              81
+            )|
+            4(?:
+              17|
+              2(?:
+                [012]|
+                7?
+              )|
+              4(?:
+                [06]|
+                1\d
+              )|
+              5(?:
+                [01357]|
+                [25]\d?
+              )|
+              69|
+              7[01]
+            )|
+            5(?:
+              17|
+              2(?:
+                [0459]|
+                [23678]\d?
+              )|
+              69|
+              7[01]
+            )|
+            6(?:
+              17|
+              2(?:
+                5|
+                6\d?
+              )|
+              38|
+              42|
+              69|
+              7[01]
+            )|
+            7(?:
+              17|
+              2(?:
+                [569]|
+                [234]\d?
+              )|
+              3(?:
+                0\d?|
+                [13]
+              )|
+              69|
+              7[01]
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>612012345</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- The prefixes 8114, 814\d, 816[0-2] have been added after we
-        have successfully delivered SMS messages to these numbers. -->
-        <nationalNumberPattern>8(?:1(?:1[0-24]|[2-4]\d|50|6[0-2])|5\d{2})\d{5}</nationalNumberPattern>
+        <!-- Includes the Switch CDMA Service. -->
+        <nationalNumberPattern>
+          (?:
+            60|
+            8[125]
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
-        <exampleNumber>811012345</exampleNumber>
+        <exampleNumber>811234567</exampleNumber>
       </mobile>
+      <premiumRate>
+        <nationalNumberPattern>8701\d{5}</nationalNumberPattern>
+        <possibleNumberPattern>\d{9}</possibleNumberPattern>
+        <exampleNumber>870123456</exampleNumber>
+      </premiumRate>
       <voip>
-        <nationalNumberPattern>88\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>886\d{5}</nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
-        <exampleNumber>88123456</exampleNumber>
+        <exampleNumber>88612345</exampleNumber>
       </voip>
+      <shortCode>
+        <nationalNumberPattern>
+          1(?:
+            0111|
+            \d{3}
+          )|
+          9(?:
+            3111|
+            \d{2}
+          )
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{3,5}</possibleNumberPattern>
+        <exampleNumber>93111</exampleNumber>
+      </shortCode>
     </territory>
 
     <!-- New Caledonia (Territoire français d'outre-mer) -->
@@ -5806,7 +13228,10 @@
     <territory id="NE" countryCode="227" internationalPrefix="00">
       <availableFormats>
         <numberFormat pattern="([029]\d)(\d{2})(\d{2})(\d{2})">
-          <leadingDigits>[29]|09</leadingDigits>
+          <leadingDigits>
+            [29]|
+            09
+          </leadingDigits>
           <format>$1 $2 $3 $4</format>
         </numberFormat>
         <numberFormat pattern="(08)(\d{3})(\d{3})">
@@ -5820,12 +13245,29 @@
       </generalDesc>
       <fixedLine>
         <!-- Adding 20 61 from online numbers. -->
-        <nationalNumberPattern>2(?:0(?:20|3[1-7]|4[134]|5[14]|6[14578]|7[1-578])|1(?:4[145]|5[14]|6[14-68]|7[169]|88))\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          2(?:
+            0(?:
+              20|
+              3[1-7]|
+              4[134]|
+              5[14]|
+              6[14578]|
+              7[1-578]
+            )|
+            1(?:
+              4[145]|
+              5[14]|
+              6[14-68]|
+              7[169]|
+              88
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>20201234</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Added 90 and 97 from online data. Zain have confirmed that they use
-        the 97 prefix. -->
+        <!-- Added 90 and 97 from online data. Zain have confirmed that they use the 97 prefix. -->
         <nationalNumberPattern>9[03467]\d{6}</nationalNumberPattern>
         <exampleNumber>93123456</exampleNumber>
       </mobile>
@@ -5853,15 +13295,21 @@
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="([3-8]\d)(\d{3})(\d{2,3})">
-          <leadingDigits>[3-6]|7(?:[1-79]|0[1-9])|8[2-9]</leadingDigits>
+          <leadingDigits>
+            [3-6]|
+            7(?:
+              [1-79]|
+              0[1-9]
+            )|
+            8[2-9]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="([78]\d{2})(\d{3})(\d{3,4})">
-          <leadingDigits>70[03-9]|8(?:0|1[23])</leadingDigits>
-          <format>$1 $2 $3</format>
-        </numberFormat>
-        <numberFormat pattern="([78]\d{3})(\d{3})(\d{3})">
-          <leadingDigits>702|819</leadingDigits>
+          <leadingDigits>
+            70|
+            8[01]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="([78]00)(\d{4})(\d{4,5})">
@@ -5878,17 +13326,51 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[1-69]\d{5,8}|[78]\d{5,13}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [1-69]\d{5,8}|
+          [78]\d{5,13}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5,14}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>[12]\d{6,7}|9\d{7}|(?:4[023568]|5[02368]|6[02-469]|7[569]|8[2-9])\d{6}|(?:4[47]|5[14579]|6[1578]|7[0-357])\d{5,6}|(?:78|41)\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [12]\d{6,7}|
+          9\d{7}|
+          (?:
+            4[023568]|
+            5[02368]|
+            6[02-469]|
+            7[569]|
+            8[2-9]
+          )\d{6}|
+          (?:
+            4[47]|
+            5[14579]|
+            6[1578]|
+            7[0-357]
+          )\d{5,6}|
+          (?:
+            78|
+            41
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
         <exampleNumber>12345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- 813 added because online businesses were also found with this prefix. -->
-        <nationalNumberPattern>(?:70[3-9]|8(?:0[2-9]|1[23]))\d{7}|(?:702[1-9]|819[01])\d{6}</nationalNumberPattern>
+        <!-- More 81X prefixes have been added based on online numbers. -->
+        <nationalNumberPattern>
+          (?:
+            70(?:
+              [3-9]\d|
+              2[1-9]
+            )|
+            8(?:
+              0[2-9]|
+              1[23689]
+            )\d
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8021234567</exampleNumber>
       </mobile>
@@ -5917,11 +13399,25 @@
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <numberFormat pattern="([1-578]\d)(\d{3})(\d{4})">
-          <leadingDigits>1[035]|2[0346]|3[03568]|4[0356]|5[0358]|7|8[458]</leadingDigits>
+          <leadingDigits>
+            1[035]|
+            2[0346]|
+            3[03568]|
+            4[0356]|
+            5[0358]|
+            7|
+            8[458]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="([1-5]\d{2})(\d{3})(\d{3})">
-          <leadingDigits>1[16-8]|2[259]|3[124]|4[17-9]|5[124679]</leadingDigits>
+          <leadingDigits>
+            1[16-8]|
+            2[259]|
+            3[124]|
+            4[17-9]|
+            5[124679]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(6)(\d{8})">
@@ -5929,7 +13425,10 @@
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="([89]0\d)(\d{4,7})">
-          <leadingDigits>80|9</leadingDigits>
+          <leadingDigits>
+            80|
+            9
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
       </availableFormats>
@@ -5938,7 +13437,16 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:1[0135-8]|2[02-69]|3[0-68]|4[0135-9]|[57]\d|8[478])\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            1[0135-8]|
+            2[02-69]|
+            3[0-68]|
+            4[0135-9]|
+            [57]\d|
+            8[478]
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>101234567</exampleNumber>
       </fixedLine>
@@ -5978,18 +13486,41 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>0\d{4}|[2-9]\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          0\d{4}|
+          [2-9]\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5}(?:\d{3})?</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- Includes some 810 local-rate numbers, and long-distance rate
-        numbers, as well as the 5-digit country-wide numbers used by businesses
-        that begin with 0. -->
-        <nationalNumberPattern>0\d{4}|(?:2[1-4]|3[1-3578]|5[1-35-7]|6[1-4679]|7\d)\d{6}|81(?:0(?:0[7-9]|1\d)|5\d{2})\d{3}</nationalNumberPattern>
+        <!-- Includes some 810 local-rate numbers, and long-distance rate numbers, as well as the
+             5-digit country-wide numbers used by businesses that begin with 0. -->
+        <nationalNumberPattern>
+          0\d{4}|
+          (?:
+            2[1-4]|
+            3[1-3578]|
+            5[1-35-7]|
+            6[1-4679]|
+            7\d
+          )\d{6}|
+          81(?:
+            0(?:
+              0[7-9]|
+              1\d
+            )|
+            5\d{2}
+          )\d{3}
+        </nationalNumberPattern>
         <exampleNumber>21234567</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:4[015-8]|9\d)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            4[015-8]|
+            9\d
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>41234567</exampleNumber>
       </mobile>
@@ -6004,7 +13535,12 @@
         <exampleNumber>82012345</exampleNumber>
       </premiumRate>
       <sharedCost>
-        <nationalNumberPattern>810(?:0[0-6]|[2-8]\d)\d{3}</nationalNumberPattern>
+        <nationalNumberPattern>
+          810(?:
+            0[0-6]|
+            [2-8]\d
+          )\d{3}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>81021234</exampleNumber>
       </sharedCost>
@@ -6026,7 +13562,11 @@
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(\d{2})(\d{3})(\d{3})">
-          <leadingDigits>1[01]|[2-8]|9[1-79]</leadingDigits>
+          <leadingDigits>
+            1[01]|
+            [2-8]|
+            9[1-79]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <!-- Format is from http://www.fco.gov.uk/en/travel-and-living-abroad/travel-advice-by-country/country-profile/asia-oceania/nepal/ -->
@@ -6036,11 +13576,26 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[1-8]\d{5,7}|98[45]\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [1-8]\d{5,7}|
+          98[45]\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:1[014-6]|2[13-79]|3[135-8]|4[146-9]|5[135-7]|6[13-9]|7[15-9]|8[1-4679]|9[1-79])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            1[014-6]|
+            2[13-79]|
+            3[135-8]|
+            4[146-9]|
+            5[135-7]|
+            6[13-9]|
+            7[15-9]|
+            8[1-4679]|
+            9[1-79]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
         <exampleNumber>14567890</exampleNumber>
       </fixedLine>
@@ -6060,37 +13615,60 @@
     </territory>
 
     <!-- Niue -->
-    <territory id="NU" countryCode="683" internationalPrefix="00"
-               nationalPrefix="0">
+    <!-- http://www.itu.int/oth/T02020000EC/en -->
+    <territory id="NU" countryCode="683" internationalPrefix="00">
+      <!-- Numbers are always formatted as a block. -->
+      <generalDesc>
+        <nationalNumberPattern>[1-5]\d{3}</nationalNumberPattern>
+        <possibleNumberPattern>\d{4}</possibleNumberPattern>
+      </generalDesc>
+      <fixedLine>
+        <!-- Putting FWT (fixed-wireless-terminals) numbers here too. -->
+        <nationalNumberPattern>[34]\d{3}</nationalNumberPattern>
+        <exampleNumber>4002</exampleNumber>
+      </fixedLine>
+      <mobile>
+        <nationalNumberPattern>[125]\d{3}</nationalNumberPattern>
+        <exampleNumber>1234</exampleNumber>
+      </mobile>
     </territory>
 
     <!-- New Zealand -->
-    <!-- http://www.itu.int/oth/T0202000099/en-->
+    <!-- http://www.itu.int/oth/T0202000099/en -->
     <!-- Includes Ross Dependency, Antarctica -->
-    <territory id="NZ" countryCode="64" internationalPrefix="00"
-               nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+    <!-- Does not currently support 083 "Enhanced voice services", New Zealand direct service
+         numbers and 050 "Nation-Wide Service". -->
+    <territory id="NZ" countryCode="64" internationalPrefix="0(?:0|161)"
+               preferredInternationalPrefix="00" nationalPrefix="0"
+               nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <numberFormat pattern="([34679])(\d{3})(\d{4})">
-          <leadingDigits>[3467]|9[1-9]</leadingDigits>
+          <leadingDigits>
+            [3467]|
+            9[1-9]
+          </leadingDigits>
           <format>$1-$2 $3</format>
         </numberFormat>
-        <!-- Mobile numbers do not have exclusive leading digits - formatting
-        depends on number length.-->
+        <!-- Mobile numbers do not have exclusive leading digits - formatting depends on number
+             length. -->
         <!-- Vodafone numbers are formatted with 021 separated. -->
         <numberFormat pattern="(21)(\d{4})(\d{3,4})">
           <leadingDigits>21</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
-        <!-- Adding in the toll free numbers here as well since they follow the
-        same format. -->
+        <!-- Adding in the toll free numbers here as well since they follow the same format. -->
         <numberFormat pattern="([2589]\d{2})(\d{3})(\d{3,4})">
-          <leadingDigits>2[0247-9]|5|[89]00</leadingDigits>
+          <leadingDigits>
+            2[0247-9]|
+            5|
+            [89]00
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
-        <!-- Vodafone and Orcon numbers can also be 8 digits (without leading
-        0), and these are formatted differently. -->
-        <numberFormat pattern="(2[019])(\d{3})(\d{3})">
-          <leadingDigits>2[019]</leadingDigits>
+        <!-- Vodafone and Orcon numbers can also be 8 digits (without leading 0), and these are
+             formatted differently. -->
+        <numberFormat pattern="(\d{2})(\d{3})(\d{3,4})">
+          <leadingDigits>2[0169]|86</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <!-- Antarctica -->
@@ -6102,36 +13680,61 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[2-9]\d{7,9}</nationalNumberPattern>
-        <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+        <nationalNumberPattern>
+          6[235-9]\d{6}|
+          [2-57-9]\d{7,10}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{7,11}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:3[2-79]|[479][2-689]|6[235-9])\d{6}|24099\d{3}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            3[2-79]|
+            [49][2-689]|
+            6[235-9]|
+            7[2-589]
+          )\d{6}|
+          24099\d{3}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
         <exampleNumber>32345678</exampleNumber>
       </fixedLine>
-      <!-- 025 numbers were shut down 31 March 2007, and have been migrated to
-           027, so are no longer supported. -->
       <mobile>
-        <nationalNumberPattern>2(?:[027]\d{7}|9\d{6,7}|1(?:0\d{5,7}|[12]\d{5,6}|[3-9]\d{5})|4[1-9]\d{6}|8\d{7,8})</nationalNumberPattern>
+        <!-- Includes mobile radio service numbers. -->
+        <nationalNumberPattern>
+          2(?:
+            [079]\d{7}|
+            1(?:
+              0\d{5,7}|
+              [12]\d{5,6}|
+              [3-9]\d{5}
+            )|
+            [28]\d{7,8}|
+            4[1-9]\d{6}
+          )
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8,10}</possibleNumberPattern>
         <exampleNumber>211234567</exampleNumber>
       </mobile>
-      <!-- These are the toll free patterns used, by Telecom and Telstra/Clear,
-           but they are referred to as 'Value-added service' in the phone
-           plan for some reason -->
+      <pager>
+          <nationalNumberPattern>[28]6\d{6,7}</nationalNumberPattern>
+          <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+          <exampleNumber>26123456</exampleNumber>
+      </pager>
+      <!-- These are the toll free patterns used, by Telecom and Telstra/Clear, but they are
+           referred to as 'Value-added service' in the phone plan for some reason. 85 numbers are
+           not covered, as telecom companies don't seem to support them yet. -->
       <tollFree>
-        <nationalNumberPattern>(?:800|508)\d{6,7}</nationalNumberPattern>
-        <!-- Technically this is 8-10 as per the plan, but current companies
-             support only 9 digit numbers. -->
-        <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
+        <nationalNumberPattern>
+          508\d{6,7}|
+          80\d{6,8}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{8,10}</possibleNumberPattern>
         <exampleNumber>800123456</exampleNumber>
       </tollFree>
-      <!-- This is the premium rate pattern used, but it is not mentioned in
-           the phone number plan -->
       <premiumRate>
-        <nationalNumberPattern>900\d{6,7}</nationalNumberPattern>
-        <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
+        <nationalNumberPattern>90\d{7,9}</nationalNumberPattern>
+        <possibleNumberPattern>\d{9,11}</possibleNumberPattern>
         <exampleNumber>900123456</exampleNumber>
       </premiumRate>
     </territory>
@@ -6154,7 +13757,14 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>(?:2[3-6]|5|9[2-9])\d{6}|800\d{5,6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2[3-6]|
+            5|
+            9[2-9]
+          )\d{6}|
+          800\d{5,6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
@@ -6168,18 +13778,20 @@
         <exampleNumber>92123456</exampleNumber>
       </mobile>
       <tollFree>
-        <!-- Link to document about toll-free numbers on www.tra.gov.om, which
-        suggests they should be 8007 followed by 4 digits. However, the only
-        examples I can find, including the customer help line for the main
-        telephony company there (omantel), is 8007 followed by 5 digits, so am
-        allowing both for now to be on the safe side. 500 numbers seem to
-        offer international toll-free dialing numbers - +968 500 1300 for
-        international help desk for omantel, for example. -->
-        <nationalNumberPattern>8007\d{4,5}|500\d{4}</nationalNumberPattern>
+        <!-- Link to document about toll-free numbers on www.tra.gov.om, which suggests they should
+             be 8007 followed by 4 digits. However, the only examples I can find, including the
+             customer help line for the main telephony company there (omantel), is 8007 followed by
+             5 digits, so am allowing both for now to be on the safe side. 500 numbers seem to offer
+             international toll-free dialing numbers - +968 500 1300 for international help desk for
+             omantel, for example. -->
+        <nationalNumberPattern>
+          8007\d{4,5}|
+          500\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
         <exampleNumber>80071234</exampleNumber>
       </tollFree>
-      <!-- No premiumRate information can be found.-->
+      <!-- No premiumRate information can be found. -->
     </territory>
 
     <!-- Panama -->
@@ -6202,8 +13814,7 @@
           <leadingDigits>[4-8]</leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
-        <!-- Formatting from common usage found on the internet, supported by
-             ITU doc. -->
+        <!-- Formatting from common usage found on the internet, supported by ITU doc. -->
         <numberFormat pattern="(9\d{2})(\d{3})(\d{3})"
                       nationalPrefixFormattingRule="$FG">
           <leadingDigits>9</leadingDigits>
@@ -6215,7 +13826,16 @@
         <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:1\d|4[1-4]|5[1-46]|6[1-7]|7[2-46]|8[2-4])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            1\d|
+            4[1-4]|
+            5[1-46]|
+            6[1-7]|
+            7[2-46]|
+            8[2-4]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
         <exampleNumber>11234567</exampleNumber>
       </fixedLine>
@@ -6249,17 +13869,37 @@
         <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- Fixed line patterns are from the numbering plan, with additions for
-        4XX since many numbers in the yellow pages seem to be outside the
-        47X range prescribed by the plan. The same applies to extra 64X numbers. -->
-        <nationalNumberPattern>(?:3\d{2}|4[257]\d|5[34]\d|6(?:29|4[1-9])|85[02-46-9]|9[78]\d)\d{4}</nationalNumberPattern>
+        <!-- Fixed line patterns are from the numbering plan, with additions for 4XX since many
+             numbers in the yellow pages seem to be outside the 47X range prescribed by the plan.
+             The same applies to extra 64X numbers. -->
+        <nationalNumberPattern>
+          (?:
+            3\d{2}|
+            4[257]\d|
+            5[34]\d|
+            6(?:
+              29|
+              4[1-9]
+            )|
+            85[02-46-9]|
+            9[78]\d
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7}</possibleNumberPattern>
         <exampleNumber>3123456</exampleNumber>
       </fixedLine>
       <mobile>
         <!-- Mobile number patterns from the numbering plan are included here,
-        as well as 68x from wikipedia.-->
-        <nationalNumberPattern>(?:68|7(?:[126]\d|3[34689]))\d{5}</nationalNumberPattern>
+        as well as 68x from wikipedia. -->
+        <nationalNumberPattern>
+          (?:
+            68|
+            7(?:
+              [126]\d|
+              3[1-9]
+            )
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
         <exampleNumber>6812345</exampleNumber>
       </mobile>
@@ -6269,6 +13909,7 @@
         <exampleNumber>1801234</exampleNumber>
       </tollFree>
       <voip>
+        <!-- VSAT prefixes are here. -->
         <nationalNumberPattern>275\d{4}</nationalNumberPattern>
         <possibleNumberPattern>\d{7}</possibleNumberPattern>
         <exampleNumber>2751234</exampleNumber>
@@ -6281,7 +13922,7 @@
                nationalPrefix="0">
       <availableFormats>
         <!--Area code separated from number. Area codes found here:
-        http://en.wikipedia.org/wiki/Telecommunications_in_the_Philippines#Area_Codes-->
+        http://en.wikipedia.org/wiki/Telecommunications_in_the_Philippines#Area_Codes -->
         <numberFormat nationalPrefixFormattingRule="($NP$FG)"
           pattern="(2)(\d{3})(\d{4})">
           <leadingDigits>2</leadingDigits>
@@ -6289,17 +13930,87 @@
         </numberFormat>
         <numberFormat nationalPrefixFormattingRule="($NP$FG)"
           pattern="(\d{4})(\d{5})">
-          <leadingDigits>3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|5(?:22|44)|642|8(?:62|8[245])</leadingDigits>
-          <leadingDigits>3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))</leadingDigits>
+          <leadingDigits>
+            3(?:
+              23|
+              39|
+              46
+            )|
+            4(?:
+              2[3-6]|
+              [35]9|
+              4[26]|
+              76
+            )|
+            5(?:
+              22|
+              44
+            )|
+            642|
+            8(?:
+              62|
+              8[245]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            3(?:
+              230|
+              397|
+              461
+            )|
+            4(?:
+              2(?:
+                35|
+                [46]4|
+                51
+              )|
+              396|
+              4(?:
+                22|
+                63
+              )|
+              59[347]|
+              76[15]
+            )|
+            5(?:
+              221|
+              446
+            )|
+            642[23]|
+            8(?:
+              622|
+              8(?:
+                [24]2|
+                5[13]
+              )
+            )
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat nationalPrefixFormattingRule="($NP$FG)"
           pattern="(\d{5})(\d{4})">
-          <leadingDigits>346|4(?:27|9[35])|883</leadingDigits>
-          <leadingDigits>3469|4(?:279|9(?:30|56))|8834</leadingDigits>
+          <leadingDigits>
+            346|
+            4(?:
+              27|
+              9[35]
+            )|
+            883
+          </leadingDigits>
+          <leadingDigits>
+            3469|
+            4(?:
+              279|
+              9(?:
+                30|
+                56
+              )
+            )|
+            8834
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
-        <!-- This rule is a fallback for the more specific area codes.-->
+        <!-- This rule is a fallback for the more specific area codes. -->
         <numberFormat nationalPrefixFormattingRule="($NP$FG)"
           pattern="([3-8]\d)(\d{3})(\d{4})">
           <leadingDigits>[3-8]</leadingDigits>
@@ -6310,8 +14021,7 @@
           <leadingDigits>9</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
-        <!-- Formatting from
-        http://www.uniontelecard.com/calling-guides/philippines/guide1.aspx -->
+        <!-- Formatting from http://www.uniontelecard.com/calling-guides/philippines/guide1.aspx -->
         <numberFormat pattern="(1800)(\d{3})(\d{4})">
           <leadingDigits>1</leadingDigits>
           <format>$1 $2 $3</format>
@@ -6322,27 +14032,49 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[2-9]\d{7,9}|1800\d{7,9}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [2-9]\d{7,9}|
+          1800\d{7,9}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,13}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:2|3[2-68]|4[2-9]|5[2-6]|6[2-58]|7[24578]|8[2-8])\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2|
+            3[2-68]|
+            4[2-9]|
+            5[2-6]|
+            6[2-58]|
+            7[24578]|
+            8[2-8]
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
         <exampleNumber>21234567</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>9(?:0[5-9]|1[025-9]|2[0-36-9]|3[0235-9]|7[349]|[89]9)\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          9(?:
+            0[5-9]|
+            1[025-9]|
+            2[0-36-9]|
+            3[0235-9]|
+            7[349]|
+            [89]9
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9051234567</exampleNumber>
       </mobile>
-      <!-- shaopengjia collected the info on tollfree numbers from searching the internet -->
+      <!-- Information on toll-free numbers collected from searching the internet -->
       <tollFree>
         <nationalNumberPattern>1800\d{7,9}</nationalNumberPattern>
         <possibleNumberPattern>\d{11,13}</possibleNumberPattern>
         <exampleNumber>180012345678</exampleNumber>
       </tollFree>
-      <!-- No information can be found about other types of numbers (such as
-      premium rate) in the Philippines. -->
+      <!-- No information can be found about other types of numbers (such as premium rate) in the
+           Philippines. -->
     </territory>
 
     <!-- Pakistan -->
@@ -6351,28 +14083,124 @@
     <territory id="PK" countryCode="92" internationalPrefix="00"
                nationalPrefix="0" nationalPrefixFormattingRule="($NP$FG)">
       <availableFormats>
-        <!-- Universal Access Numbers (UAN) number format patterns first, so
-        that these numbers are formatted nicely by the AYTF.-->
+        <!-- Universal Access Numbers (UAN) number format patterns first, so that these numbers are
+             formatted nicely by the AYTF. -->
         <numberFormat pattern="(\d{2})(111)(\d{3})(\d{3})">
-          <leadingDigits>(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)1</leadingDigits>
-          <leadingDigits>(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)11</leadingDigits>
-          <leadingDigits>(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)111</leadingDigits>
+          <leadingDigits>
+            (?:
+              2[125]|
+              4[0-246-9]|
+              5[1-35-7]|
+              6[1-8]|
+              7[14]|
+              8[16]|
+              91
+            )1
+          </leadingDigits>
+          <leadingDigits>
+            (?:
+              2[125]|
+              4[0-246-9]|
+              5[1-35-7]|
+              6[1-8]|
+              7[14]|
+              8[16]|
+              91
+            )11
+          </leadingDigits>
+          <leadingDigits>
+            (?:
+              2[125]|
+              4[0-246-9]|
+              5[1-35-7]|
+              6[1-8]|
+              7[14]|
+              8[16]|
+              91
+            )111
+          </leadingDigits>
           <format>$1 $2 $3 $4</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(111)(\d{3})(\d{3})">
-          <leadingDigits>(?:2[349]|45|54|60|72|8[2-5]|9[2-9])</leadingDigits>
-          <leadingDigits>(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\d1</leadingDigits>
-          <leadingDigits>(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\d11</leadingDigits>
-          <leadingDigits>(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\d111</leadingDigits>
+          <leadingDigits>
+            2[349]|
+            45|
+            54|
+            60|
+            72|
+            8[2-5]|
+            9[2-9]
+          </leadingDigits>
+          <leadingDigits>
+            (?:
+              2[349]|
+              45|
+              54|
+              60|
+              72|
+              8[2-5]|
+              9[2-9]
+            )\d1
+          </leadingDigits>
+          <leadingDigits>
+            (?:
+              2[349]|
+              45|
+              54|
+              60|
+              72|
+              8[2-5]|
+              9[2-9]
+            )\d11
+          </leadingDigits>
+          <leadingDigits>
+            (?:
+              2[349]|
+              45|
+              54|
+              60|
+              72|
+              8[2-5]|
+              9[2-9]
+            )\d111
+          </leadingDigits>
           <format>$1 $2 $3 $4</format>
         </numberFormat>
         <numberFormat pattern="(\d{2})(\d{7,8})">
-          <leadingDigits>(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]</leadingDigits>
+          <leadingDigits>
+            (?:
+              2[125]|
+              4[0-246-9]|
+              5[1-35-7]|
+              6[1-8]|
+              7[14]|
+              8[16]|
+              91
+            )[2-9]
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d{6,7})">
-          <leadingDigits>2[349]|45|54|60|72|8[2-5]|9[2-9]</leadingDigits>
-          <leadingDigits>(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\d[2-9]</leadingDigits>
+          <leadingDigits>
+            2[349]|
+            45|
+            54|
+            60|
+            72|
+            8[2-5]|
+            9[2-9]
+          </leadingDigits>
+          <leadingDigits>
+            (?:
+              2[349]|
+              45|
+              54|
+              60|
+              72|
+              8[2-5]|
+              9[2-9]
+            )\d[2-9]
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(3\d{2})(\d{7})" nationalPrefixFormattingRule="$NP$FG">
@@ -6380,7 +14208,10 @@
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="([15]\d{3})(\d{5,6})">
-          <leadingDigits>58[12]|1</leadingDigits>
+          <leadingDigits>
+            58[12]|
+            1
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <!-- This is from online examples. -->
@@ -6394,24 +14225,81 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <!-- This is horribly complex because the country code is 92, and
-        several area codes start with 92, and the number length is widely
-        variable. -->
-        <nationalNumberPattern>1\d{8}|[2-8]\d{5,11}|9(?:[013-9]\d{4,9}|2\d(?:111\d{6}|\d{3,7}))</nationalNumberPattern>
+        <!-- This is horribly complex because the country code is 92, and several area codes start
+             with 92, and the number length is widely variable. -->
+        <nationalNumberPattern>
+          1\d{8}|
+          [2-8]\d{5,11}|
+          9(?:
+            [013-9]\d{4,9}|
+            2\d(?:
+              111\d{6}|
+              \d{3,7}
+            )
+          )
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,12}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- The subscriber number length is not well defined for some area
-        codes. From online examples, we have come up with a heuristic that for
-        3-digit area codes, the subscriber number will be 6 or 7 digits - for
-        2-digit area codes it will be 7, with the exceptions of Karachi and
-        Lahore (both 8). -->
-        <nationalNumberPattern>(?:21|42)[2-9]\d{7}|(?:2[25]|4[0146-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\d{6}|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8]))[2-9]\d{5,6}|58[126]\d{7}</nationalNumberPattern>
+        <!-- The subscriber number length is not well defined for some area codes. From online
+             examples, we have come up with a heuristic that for 3-digit area codes, the subscriber
+             number will be 6 or 7 digits - for 2-digit area codes it will be 7, with the exceptions
+             of Karachi and Lahore (both 8). -->
+        <nationalNumberPattern>
+          (?:
+            21|
+            42
+          )[2-9]\d{7}|
+          (?:
+            2[25]|
+            4[0146-9]|
+            5[1-35-7]|
+            6[1-8]|
+            7[14]|
+            8[16]|
+            91
+          )[2-9]\d{6}|
+          (?:
+            2(?:
+              3[2358]|
+              4[2-4]|
+              9[2-8]
+            )|
+            45[3479]|
+            54[2-467]|
+            60[468]|
+            72[236]|
+            8(?:
+              2[2-689]|
+              3[23578]|
+              4[3478]|
+              5[2356]
+            )|
+            9(?:
+              1|
+              2[2-8]|
+              3[27-9]|
+              4[2-6]|
+              6[3569]|
+              9[25-8]
+            )
+          )[2-9]\d{5,6}|
+          58[126]\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
         <exampleNumber>2123456789</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>3(?:0\d|1[2-5]|2[1-3]|3[1-6]|4[2-6]|64)\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          3(?:
+            0\d|
+            1[2-5]|
+            2[1-3]|
+            3[1-6]|
+            4[2-6]|
+            64
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>3012345678</exampleNumber>
       </mobile>
@@ -6425,26 +14313,63 @@
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>90012345</exampleNumber>
       </premiumRate>
-      <sharedCost>
-        <!-- Data on what a UAN is is hard to come by. http://www.ptcl.com.pk
-        has information under http://www.ptcl.com.pk/contentb.php?NID=143#uan -
-        which defines their format - but not what type of number they are. We
-        place them here as they are listed under "value added services", but are
-        neither premium nor toll free (to our knowledge). We exclude Azad Jammu,
-        Kashmir and Northern Areas here since no online example UANs can be
-        found, and they have an "access code" at the start, making it difficult
-        to guess what a UAN in these areas would look like. -->
-        <nationalNumberPattern>(?:2(?:[125]|3[2358]|4[2-4]|9[2-8])|4(?:[0-246-9]|5[3479])|5(?:[1-35-7]|4[2-467])|6(?:[1-8]|0[468])|7(?:[14]|2[236])|8(?:[16]|2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|22|3[27-9]|4[2-6]|6[3569]|9[2-7]))111\d{6}</nationalNumberPattern>
-        <possibleNumberPattern>\d{11,12}</possibleNumberPattern>
-        <exampleNumber>21111825888</exampleNumber>
-      </sharedCost>
-      <!-- These are referred to as UPT numbers in the plan.-->
+      <!-- These are referred to as UPT numbers in the plan. -->
       <personalNumber>
         <nationalNumberPattern>122\d{6}</nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <!-- The example number here is the test number from the plan. -->
         <exampleNumber>122044444</exampleNumber>
       </personalNumber>
+      <uan>
+        <!-- Data on what a UAN is is hard to come by. http://www.ptcl.com.pk has information under
+             http://www.ptcl.com.pk/contentb.php?NID=143#uan - which defines their format - but not
+             what type of number they are.  We exclude Azad Jammu, Kashmir and Northern Areas here
+             since no online example UANs can be found, and they have an "access code" at the start,
+             making it difficult to guess what a UAN in these areas would look like. -->
+        <nationalNumberPattern>
+          (?:
+            2(?:
+              [125]|
+              3[2358]|
+              4[2-4]|
+              9[2-8]
+            )|
+            4(?:
+              [0-246-9]|
+              5[3479]
+            )|
+            5(?:
+              [1-35-7]|
+              4[2-467]
+            )|
+            6(?:
+              [1-8]|
+              0[468]
+            )|
+            7(?:
+              [14]|
+              2[236]
+            )|
+            8(?:
+              [16]|
+              2[2-689]|
+              3[23578]|
+              4[3478]|
+              5[2356]
+            )|
+            9(?:
+              1|
+              22|
+              3[27-9]|
+              4[2-6]|
+              6[3569]|
+              9[2-7]
+            )
+          )111\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{11,12}</possibleNumberPattern>
+        <exampleNumber>21111825888</exampleNumber>
+      </uan>
     </territory>
 
     <!-- Poland -->
@@ -6455,11 +14380,27 @@
     <territory id="PL" countryCode="48" internationalPrefix="00">
       <availableFormats>
         <numberFormat pattern="(\d{2})(\d{3})(\d{2})(\d{2})">
-          <leadingDigits>[124]|3[2-4]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145]</leadingDigits>
+          <leadingDigits>
+            [124]|
+            3[2-4]|
+            5[24-689]|
+            6[1-3578]|
+            7[14-7]|
+            8[1-79]|
+            9[145]
+          </leadingDigits>
           <format>$1 $2 $3 $4</format>
         </numberFormat>
+        <!-- We are formatting 70 numbers as per mobile numbers, based on information from some
+             Poles that this is more usual. -->
         <numberFormat pattern="(\d{3})(\d{3})(\d{3})">
-          <leadingDigits>39|5[013]|6[069]|7[0289]|8[08]</leadingDigits>
+          <leadingDigits>
+            39|
+            5[013]|
+            6[069]|
+            7[0289]|
+            8[08]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
       </availableFormats>
@@ -6468,11 +14409,30 @@
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:1[2-8]|2[2-59]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            1[2-8]|
+            2[2-59]|
+            3[2-4]|
+            4[1-468]|
+            5[24-689]|
+            6[1-3578]|
+            7[14-7]|
+            8[1-79]|
+            9[145]
+          )\d{7}
+        </nationalNumberPattern>
         <exampleNumber>123456789</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:5[013]|6[069]|7[289]|88)\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            5[013]|
+            6[069]|
+            7[289]|
+            88
+          )\d{7}
+        </nationalNumberPattern>
         <exampleNumber>512345678</exampleNumber>
       </mobile>
       <tollFree>
@@ -6508,15 +14468,33 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:787|939)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            787|
+            939
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <exampleNumber>7872345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:787|939)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            787|
+            939
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <exampleNumber>7872345678</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002345678</exampleNumber>
       </tollFree>
@@ -6525,11 +14503,93 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002345678</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Palestinian Authority -->
+    <!-- http://en.wikipedia.org/wiki/%2B970 -->
+    <!-- http://www.wtng.info/wtng-970-ps.html -->
+    <!-- http://www.paltel.ps -->
+    <!-- Palestinian phone numbers can be reached through the Israeli country code (972) in addition
+         to the Palestinian country code (970) and so Palestinian landlines and mobile lines are a
+         subset of the Israeli formats. -->
     <territory id="PS" countryCode="970" internationalPrefix="00"
-               nationalPrefix="0">
+               nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+      <availableFormats>
+        <numberFormat pattern="([2489])(2\d{2})(\d{4})">
+          <leadingDigits>[2489]</leadingDigits>
+          <format>$1 $2 $3</format>
+        </numberFormat>
+        <numberFormat pattern="(5[69]\d)(\d{3})(\d{3})">
+          <leadingDigits>5</leadingDigits>
+          <format>$1 $2 $3</format>
+        </numberFormat>
+        <numberFormat nationalPrefixFormattingRule="$FG"
+          pattern="(1[78]00)(\d{3})(\d{3})">
+          <leadingDigits>1[78]</leadingDigits>
+          <format>$1 $2 $3</format>
+        </numberFormat>
+        <!-- 4 and 5 digit premium numbers will be formatted as one block by default. -->
+      </availableFormats>
+      <generalDesc>
+        <nationalNumberPattern>
+          [24589]\d{7,8}|
+          1(?:
+            [78]\d{8}|
+            [49]\d{2,3}
+          )
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
+      </generalDesc>
+      <fixedLine>
+        <nationalNumberPattern>
+          (?:
+            22[234789]|
+            42[45]|
+            82[01458]|
+            92[369]
+          )\d{5}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+        <exampleNumber>22234567</exampleNumber>
+      </fixedLine>
+      <mobile>
+        <nationalNumberPattern>5[69]\d{7}</nationalNumberPattern>
+        <possibleNumberPattern>\d{9}</possibleNumberPattern>
+        <exampleNumber>599123456</exampleNumber>
+      </mobile>
+      <tollFree>
+        <nationalNumberPattern>1800\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>1800123456</exampleNumber>
+      </tollFree>
+      <premiumRate>
+        <!-- According to Paltel, premium numbers are 14xx and 19xxx -->
+        <nationalNumberPattern>
+          1(?:
+            4|
+            9\d
+           )\d{2}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{4,5}</possibleNumberPattern>
+        <exampleNumber>19123</exampleNumber>
+      </premiumRate>
+      <sharedCost>
+        <nationalNumberPattern>1700\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>1700123456</exampleNumber>
+      </sharedCost>
     </territory>
 
     <!-- Portugal -->
@@ -6545,15 +14605,37 @@
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>2(?:[12]\d|[35][1-689]|4[1-59]|6[1-35689]|7[1-9]|8[1-69]|9[1256])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          2(?:
+            [12]\d|
+            [35][1-689]|
+            4[1-59]|
+            6[1-35689]|
+            7[1-9]|
+            8[1-69]|
+            9[1256]
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>212345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>9(?:[136]\d{2}|2[25-79]\d|4(?:80|9\d))\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          9(?:
+            [136]\d{2}|
+            2[124-79]\d|
+            4(?:
+              80|
+              9\d
+            )
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>912345678</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>4\d{8}|80[02]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          4\d{8}|
+          80[02]\d{6}
+        </nationalNumberPattern>
         <exampleNumber>800123456</exampleNumber>
       </tollFree>
       <premiumRate>
@@ -6602,7 +14684,14 @@
         <exampleNumber>44123456</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:33|55|66|77)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            33|
+            55|
+            66|
+            77
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>33123456</exampleNumber>
       </mobile>
       <tollFree>
@@ -6613,9 +14702,8 @@
     </territory>
 
     <!-- Réunion (French Departments and Territories in the Indian Ocean) -->
-    <!-- Note this shares the same country code as La Mayotte and French
-    Southern Territories, and the formatting patterns here are used by all of
-    them. -->
+    <!-- Note this shares the same country code as La Mayotte and French Southern Territories, and
+         the formatting patterns here are used by all of them. -->
     <!-- http://www.itu.int/oth/T020200004B/en -->
     <territory id="RE" countryCode="262" internationalPrefix="00"
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG"
@@ -6630,13 +14718,17 @@
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- 0876 numbers are mentioned in the plan, but none in use can be
-        found. -->
+        <!-- 0876 numbers are mentioned in the plan, but none in use can be found. -->
         <nationalNumberPattern>262\d{6}</nationalNumberPattern>
         <exampleNumber>262161234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>6(?:9[23]|47)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          6(?:
+            9[23]|
+            47
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>692123456</exampleNumber>
       </mobile>
@@ -6650,7 +14742,14 @@
         <exampleNumber>891123456</exampleNumber>
       </premiumRate>
       <sharedCost>
-        <nationalNumberPattern>8(?:1[019]|2[0156]|84|90)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            1[019]|
+            2[0156]|
+            84|
+            90
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>810123456</exampleNumber>
       </sharedCost>
     </territory>
@@ -6659,25 +14758,31 @@
     <!-- http://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000AC0001MSWE.doc -->
     <!-- http://en.wikipedia.org/wiki/Romania_telephone_area_codes -->
     <!-- http://en.wikipedia.org/wiki/Telephone_numbers_in_Romania -->
+    <!-- Extension prefix found online, confirmed by a Romanian. -->
     <territory id="RO" countryCode="40" internationalPrefix="00"
       nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG"
       preferredExtnPrefix=" int ">
       <availableFormats>
         <numberFormat pattern="([237]\d)(\d{3})(\d{4})">
-          <leadingDigits>[23]1|7</leadingDigits>
+          <leadingDigits>
+            [23]1|
+            7
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(\d{3})(\d{3})(\d{3})">
-          <leadingDigits>[23][02-9]|[89]</leadingDigits>
+          <leadingDigits>
+            [23][02-9]|
+            [89]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
         <nationalNumberPattern>[237-9]\d{8}</nationalNumberPattern>
-        <!-- Although the ITU plan says the number plan is open, this was
-        changed in 2008 according to wikipedia and people must dial the full
-        number. For this reason the possible number pattern is restricted to 9
-        digits.-->
+        <!-- Although the ITU plan says the number plan is open, this was changed in 2008 according
+             to wikipedia and people must dial the full number. For this reason the possible number
+             pattern is restricted to 9 digits. -->
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
@@ -6713,11 +14818,27 @@
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <numberFormat pattern="([23]\d{2})(\d{4,7})">
-          <leadingDigits>(?:2[389]|39)0</leadingDigits>
+          <leadingDigits>
+            (?:
+              2[389]|
+              39
+            )0
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="([1-4]\d)(\d{4,8})">
-          <leadingDigits>1|2(?:[0-24-7]|[389][1-9])|3(?:[0-8]|9[1-9])|42</leadingDigits>
+          <leadingDigits>
+            1|
+            2(?:
+              [0-24-7]|
+              [389][1-9]
+            )|
+            3(?:
+              [0-8]|
+              9[1-9]
+            )|
+            42
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(6[0-689])(\d{3,10})">
@@ -6749,7 +14870,12 @@
         <exampleNumber>80012345</exampleNumber>
       </tollFree>
       <premiumRate>
-        <nationalNumberPattern>(?:9[0-2]|42)\d{4,7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            9[0-2]|
+            42
+          )\d{4,7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
         <exampleNumber>90012345</exampleNumber>
       </premiumRate>
@@ -6762,9 +14888,9 @@
                nationalPrefix="8" nationalPrefixFormattingRule="$NP ($FG)"
                mainCountryForCode="true" >
       <availableFormats>
-        <!-- Formatting from wikipedia, confirmed on Goverment websites such
-        as http://www.minjust.ru/ru/structure/contact/. Contains formatting
-        instructions for Kazakhstan as well. -->
+        <!-- Formatting from wikipedia, confirmed on Goverment websites such as
+             http://www.minjust.ru/ru/structure/contact/. Contains formatting instructions for
+             Kazakhstan as well. -->
         <numberFormat pattern="([3489]\d{2})(\d{3})(\d{2})(\d{2})">
           <leadingDigits>[34689]</leadingDigits>
           <format>$1 $2-$3-$4</format>
@@ -6779,11 +14905,37 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- The Ivanovo area code 493 was omitted on the official document, but
-        this is still used in the yellow pages, and on their own website and is
-        listed on wikipedia. This applies also to 395 (Irkutsk). Also including
-        the 840 prefix for Abkhazia.-->
-        <nationalNumberPattern>(?:3(?:0[12]|4[1-35-79]|5[1-3]|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15]|6[1-35-7]|7[1-37-9]))\d{7}</nationalNumberPattern>
+        <!-- The Ivanovo area code 493 was omitted on the official document, but this is still used
+             in the yellow pages, and on their own website and is listed on wikipedia. This applies
+             also to 395 (Irkutsk). Also including the 840 prefix for Abkhazia. -->
+        <nationalNumberPattern>
+          (?:
+            3(?:
+              0[12]|
+              4[1-35-79]|
+              5[1-3]|
+              8[1-58]|
+              9[0145]
+            )|
+            4(?:
+              01|
+              1[1356]|
+              2[13467]|
+              7[1-5]|
+              8[1-7]|
+              9[1-689]
+            )|
+            8(?:
+              1[1-8]|
+              2[01]|
+              3[13-6]|
+              4[0-8]|
+              5[15]|
+              6[1-35-7]|
+              7[1-37-9]
+            )
+          )\d{7}
+        </nationalNumberPattern>
         <exampleNumber>3011234567</exampleNumber>
       </fixedLine>
       <mobile>
@@ -6791,11 +14943,15 @@
         <exampleNumber>9123456789</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>800\d{7}</nationalNumberPattern>
+        <!-- The metadata states that 804 numbers are UAN numbers, but
+             teleum.ru/numbers/toll_free_804 states that they are now being offered as toll-free
+             numbers. -->
+        <nationalNumberPattern>80[04]\d{7}</nationalNumberPattern>
         <exampleNumber>8001234567</exampleNumber>
       </tollFree>
       <premiumRate>
-        <nationalNumberPattern>809\d{7}</nationalNumberPattern>
+        <!-- Covers tele-voting numbers as well. -->
+        <nationalNumberPattern>80[39]\d{7}</nationalNumberPattern>
         <exampleNumber>8091234567</exampleNumber>
       </premiumRate>
     </territory>
@@ -6869,13 +15025,27 @@
         <possibleNumberPattern>\d{7,11}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:1[24-7]|2[24-8]|3[35-8]|4[34-68]|6[2-5]|7[235-7])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            1[24-7]|
+            2[24-8]|
+            3[35-8]|
+            4[34-68]|
+            6[2-5]|
+            7[235-7]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
         <exampleNumber>12345678</exampleNumber>
       </fixedLine>
       <mobile>
         <!-- Including "Nomadic" numbers from the Telecom Company "Go" -->
-        <nationalNumberPattern>(?:5[013-69]\d|8111)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            5[013-69]\d|
+            8111
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
         <exampleNumber>512345678</exampleNumber>
       </mobile>
@@ -6897,92 +15067,377 @@
 
     <!-- Seychelles -->
     <!-- http://www.itu.int/oth/T02020000BA/en -->
-    <!-- No evidence can be found that they still use their national prefix, so
-    this is not currently supported. -->
+    <!-- No evidence can be found that they still use their national prefix, so this is not
+         currently supported. -->
     <territory id="SC" countryCode="248" internationalPrefix="0[0-2]"
       preferredInternationalPrefix="00">
       <availableFormats>
         <numberFormat pattern="(\d{3})(\d{3})">
+          <leadingDigits>
+            [23578]|
+            [46][0-35-9]
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
+        <numberFormat pattern="(\d)(\d{3})(\d{3})">
+          <leadingDigits>[46]4</leadingDigits>
+          <format>$1 $2 $3</format>
+        </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[2-8]\d{5}</nationalNumberPattern>
-        <possibleNumberPattern>\d{6}</possibleNumberPattern>
+        <nationalNumberPattern>[2-8]\d{5,6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{6,7}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- Includes Fixed Cellular. We are putting Fixed Services numbers
-        here for now, as we cannot find any evidence that they are more
-        expensive to call than other Fixed Line services. ISDN and DID services
-        are here too, since they seem to be also fixed-line phone numbers. -->
-        <nationalNumberPattern>(?:2(?:1[78]|2[14-69]|3[2-4]|4[1-36-8]|6[167]|[89]\d)|3(?:2[1-6]|4[4-6]|55|6[016]|7\d|8[0-589]|9[0-5])|5(?:5\d|6[0-2])|6(?:0[0-27-9]|1[0-478]|2[145]|3[02-4]|4[124]|6[015]|7\d|8[1-3])|78[0138])\d{3}</nationalNumberPattern>
+        <!-- Includes Fixed Cellular. We are putting Fixed Services numbers here for now, as we
+             cannot find any evidence that they are more expensive to call than other Fixed Line
+             services. ISDN and DID services are here too, since they seem to be also fixed-line
+             phone numbers. -->
+        <nationalNumberPattern>
+          (?:
+            2(?:
+              1[78]|
+              2[14-69]|
+              3[2-4]|
+              4[1-36-8]|
+              6[167]|
+              [89]\d
+            )|
+            3(?:
+              2[1-6]|
+              4[4-6]|
+              55|
+              6[016]|
+              7\d|
+              8[0-589]|
+              9[0-5]
+            )|
+            5(?:
+              5\d|
+              6[0-2]
+            )|
+            6(?:
+              0[0-27-9]|
+              1[0-478]|
+              2[145]|
+              3[02-4]|
+              4[124]|
+              6[015]|
+              7\d|
+              8[1-3]
+            )|
+            78[0138]
+          )\d{3}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{6}</possibleNumberPattern>
         <exampleNumber>217123</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:5(?:[1247-9]\d|6[3-9])|7(?:[14679]\d|2[1-9]|8[24-79]))\d{3}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            5(?:
+              [1247-9]\d|
+              6[3-9]
+            )|
+            7(?:
+              [14679]\d|
+              2[1-9]|
+              8[24-79]
+            )
+          )\d{3}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{6}</possibleNumberPattern>
         <exampleNumber>510123</exampleNumber>
       </mobile>
       <tollFree>
         <nationalNumberPattern>8000\d{2}</nationalNumberPattern>
+        <possibleNumberPattern>\d{6}</possibleNumberPattern>
         <exampleNumber>800000</exampleNumber>
       </tollFree>
       <voip>
-        <nationalNumberPattern>4[1-37]\d{4}</nationalNumberPattern>
-        <exampleNumber>410123</exampleNumber>
+        <!-- The first digit is optional until the end of Feb 2011, when it will be compulsory. -->
+        <nationalNumberPattern>
+          (?:
+            4?4[1-3]|
+            6?47
+          )\d{4}
+        </nationalNumberPattern>
+        <exampleNumber>4410123</exampleNumber>
       </voip>
     </territory>
 
     <!-- Sudan -->
+    <!-- http://www.itu.int/oth/T02020000C4/en -->
     <territory id="SD" countryCode="249" internationalPrefix="00"
-               nationalPrefix="0">
+               nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+      <availableFormats>
+        <numberFormat pattern="(\d{2})(\d{3})(\d{4})">
+          <format>$1 $2 $3</format>
+        </numberFormat>
+      </availableFormats>
+      <generalDesc>
+        <nationalNumberPattern>[19]\d{8}</nationalNumberPattern>
+        <possibleNumberPattern>\d{9}</possibleNumberPattern>
+      </generalDesc>
+      <fixedLine>
+        <!-- Retaining previous prefix as 18 since it seems still to be used. -->
+        <nationalNumberPattern>
+          1(?:
+            [25]\d|
+            8[3567]
+          )\d{6}
+        </nationalNumberPattern>
+        <exampleNumber>121231234</exampleNumber>
+      </fixedLine>
+      <mobile>
+        <nationalNumberPattern>9[1259]\d{7}</nationalNumberPattern>
+        <exampleNumber>911231234</exampleNumber>
+      </mobile>
     </territory>
 
     <!-- Sweden -->
     <!-- http://www.pts.se/upload/Ovrigt/Tele/Nummerfragor/Sv_nrplan_telefoni_enl_TU-T_rek_E.164.pdf -->
-    <!-- Formatting patterns are from that document and from the Swedish yellow
-    pages http://gulasidorna.eniro.se -->
+    <!-- Formatting patterns are from that document and from the Swedish yellow pages
+         http://gulasidorna.eniro.se -->
     <territory id="SE" countryCode="46" internationalPrefix="00"
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <numberFormat pattern="(8)(\d{2,3})(\d{2,3})(\d{2})">
           <leadingDigits>8</leadingDigits>
-          <format>$1 $2 $3 $4</format>
+          <format>$1-$2 $3 $4</format>
         </numberFormat>
+        <intlNumberFormat pattern="(8)(\d{2,3})(\d{2,3})(\d{2})">
+          <leadingDigits>8</leadingDigits>
+          <format>$1 $2 $3 $4</format>
+        </intlNumberFormat>
         <numberFormat pattern="([1-69]\d)(\d{2,3})(\d{2})(\d{2})">
-          <leadingDigits>1[013689]|2[0136]|3[1356]|4[0246]|54|6[03]|90</leadingDigits>
-          <format>$1 $2 $3 $4</format>
+          <leadingDigits>
+            1[013689]|
+            2[0136]|
+            3[1356]|
+            4[0246]|
+            54|
+            6[03]|
+            90
+          </leadingDigits>
+          <format>$1-$2 $3 $4</format>
         </numberFormat>
+        <intlNumberFormat pattern="([1-69]\d)(\d{2,3})(\d{2})(\d{2})">
+          <leadingDigits>
+            1[013689]|
+            2[0136]|
+            3[1356]|
+            4[0246]|
+            54|
+            6[03]|
+            90
+          </leadingDigits>
+          <format>$1 $2 $3 $4</format>
+        </intlNumberFormat>
         <numberFormat pattern="([1-69]\d)(\d{3})(\d{2})">
-          <leadingDigits>1[13689]|2[136]|3[1356]|4[0246]|54|6[03]|90</leadingDigits>
-          <format>$1 $2 $3</format>
+          <leadingDigits>
+            1[13689]|
+            2[136]|
+            3[1356]|
+            4[0246]|
+            54|
+            6[03]|
+            90
+          </leadingDigits>
+          <format>$1-$2 $3</format>
         </numberFormat>
+        <intlNumberFormat pattern="([1-69]\d)(\d{3})(\d{2})">
+          <leadingDigits>
+            1[13689]|
+            2[136]|
+            3[1356]|
+            4[0246]|
+            54|
+            6[03]|
+            90
+          </leadingDigits>
+          <format>$1 $2 $3</format>
+        </intlNumberFormat>
         <numberFormat pattern="(\d{3})(\d{2})(\d{2})(\d{2})">
-          <leadingDigits>1[2457]|2[2457-9]|3[0247-9]|4[1357-9]|5[0-35-9]|6[124-9]|9(?:[125-8]|3[0-5]|4[0-3])</leadingDigits>
+          <leadingDigits>
+            1[2457]|
+            2[2457-9]|
+            3[0247-9]|
+            4[1357-9]|
+            5[0-35-9]|
+            6[124-9]|
+            9(?:
+              [125-8]|
+              3[0-5]|
+              4[0-3]
+            )
+          </leadingDigits>
+          <format>$1-$2 $3 $4</format>
+        </numberFormat>
+        <intlNumberFormat pattern="(\d{3})(\d{2})(\d{2})(\d{2})">
+          <leadingDigits>
+            1[2457]|
+            2[2457-9]|
+            3[0247-9]|
+            4[1357-9]|
+            5[0-35-9]|
+            6[124-9]|
+            9(?:
+              [125-8]|
+              3[0-5]|
+              4[0-3]
+            )
+          </leadingDigits>
           <format>$1 $2 $3 $4</format>
-        </numberFormat>
+        </intlNumberFormat>
         <numberFormat pattern="(\d{3})(\d{2,3})(\d{2})">
-          <leadingDigits>1[2457]|2[2457-9]|3[0247-9]|4[1357-9]|5[0-35-9]|6[124-9]|9(?:[125-8]|3[0-5]|4[0-3])</leadingDigits>
-          <format>$1 $2 $3</format>
+          <leadingDigits>
+            1[2457]|
+            2[2457-9]|
+            3[0247-9]|
+            4[1357-9]|
+            5[0-35-9]|
+            6[124-9]|
+            9(?:
+              [125-8]|
+              3[0-5]|
+              4[0-3]
+            )
+          </leadingDigits>
+          <format>$1-$2 $3</format>
         </numberFormat>
+        <intlNumberFormat pattern="(\d{3})(\d{2,3})(\d{2})">
+          <leadingDigits>
+            1[2457]|
+            2[2457-9]|
+            3[0247-9]|
+            4[1357-9]|
+            5[0-35-9]|
+            6[124-9]|
+            9(?:
+              [125-8]|
+              3[0-5]|
+              4[0-3]
+            )
+          </leadingDigits>
+          <format>$1 $2 $3</format>
+        </intlNumberFormat>
         <numberFormat pattern="(7[02-467])(\d{3})(\d{2})(\d{2})">
           <leadingDigits>7[02-467]</leadingDigits>
-          <format>$1 $2 $3 $4</format>
+          <format>$1-$2 $3 $4</format>
         </numberFormat>
+        <intlNumberFormat pattern="(7[02-467])(\d{3})(\d{2})(\d{2})">
+          <leadingDigits>7[02-467]</leadingDigits>
+          <format>$1 $2 $3 $4</format>
+        </intlNumberFormat>
         <numberFormat pattern="(20)(\d{2,3})(\d{2})">
           <leadingDigits>20</leadingDigits>
-          <format>$1 $2 $3</format>
+          <format>$1-$2 $3</format>
         </numberFormat>
+        <intlNumberFormat pattern="(20)(\d{2,3})(\d{2})">
+          <leadingDigits>20</leadingDigits>
+          <format>$1 $2 $3</format>
+        </intlNumberFormat>
         <numberFormat pattern="(9[034]\d)(\d{2})(\d{2})(\d{3})">
           <leadingDigits>9[034]</leadingDigits>
-          <format>$1 $2 $3 $4</format>
+          <format>$1-$2 $3 $4</format>
         </numberFormat>
+        <intlNumberFormat pattern="(9[034]\d)(\d{2})(\d{2})(\d{3})">
+          <leadingDigits>9[034]</leadingDigits>
+          <format>$1 $2 $3 $4</format>
+        </intlNumberFormat>
       </availableFormats>
       <generalDesc>
         <nationalNumberPattern>\d{7,10}</nationalNumberPattern>
         <possibleNumberPattern>\d{5,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>1(?:0[1-8]\d{6}|[136]\d{5,7}|(?:2[0-35]|4[0-4]|5[0-25-9]|7[13-6]|[89]\d)\d{5,6})|2(?:[136]\d{5,7}|(?:2[0-7]|4[0136-8]|5[0-38]|7[018]|8[01]|9[0-57])\d{5,6})|3(?:[356]\d{5,7}|(?:0[0-4]|1\d|2[0-25]|4[056]|7[0-2]|8[0-3]|9[023])\d{5,6})|4(?:[0246]\d{5,7}|(?:1[01-8]|3[0135]|5[14-79]|7[0-246-9]|8[0156]|9[0-689])\d{5,6})|5(?:0[0-6]|1[1-5]|2[0-68]|3[0-4]|4\d|5[0-5]|6[03-5]|7[013]|8[0-79]|9[01])\d{5,6}|6(?:[03]\d{5,7}|(?:1[1-3]|2[0-4]|4[02-57]|5[0-37]|6[0-3]|7[0-2]|8[0247]|9[0-356])\d{5,6})|8\d{6,8}|9(?:0\d{5,7}|(?:1[0-68]|2\d|3[02-59]|4[0-4]|5[0-4]|6[01]|7[0135-8]|8[01])\d{5,6})</nationalNumberPattern>
+        <nationalNumberPattern>
+          1(?:
+            0[1-8]\d{6}|
+            [136]\d{5,7}|
+            (?:
+              2[0-35]|
+              4[0-4]|
+              5[0-25-9]|
+              7[13-6]|
+              [89]\d
+            )\d{5,6}
+          )|
+          2(?:
+            [136]\d{5,7}|
+            (?:
+              2[0-7]|
+              4[0136-8]|
+              5[0-38]|
+              7[018]|
+              8[01]|
+              9[0-57]
+            )\d{5,6}
+          )|
+          3(?:
+            [356]\d{5,7}|
+            (?:
+              0[0-4]|
+              1\d|
+              2[0-25]|
+              4[056]|
+              7[0-2]|
+              8[0-3]|
+              9[023]
+            )\d{5,6}
+          )|
+          4(?:
+            [0246]\d{5,7}|
+            (?:
+              1[01-8]|
+              3[0135]|
+              5[14-79]|
+              7[0-246-9]|
+              8[0156]|
+              9[0-689]
+            )\d{5,6}
+          )|
+          5(?:
+            0[0-6]|
+            1[1-5]|
+            2[0-68]|
+            3[0-4]|
+            4\d|
+            5[0-5]|
+            6[03-5]|
+            7[013]|
+            8[0-79]|
+            9[01]
+          )\d{5,6}|
+          6(?:
+            [03]\d{5,7}|
+            (?:
+              1[1-3]|
+              2[0-4]|
+              4[02-57]|
+              5[0-37]|
+              6[0-3]|
+              7[0-2]|
+              8[0247]|
+              9[0-356]
+            )\d{5,6}
+          )|
+          8\d{6,8}|
+          9(?:
+            0\d{5,7}|
+            (?:
+              1[0-68]|
+              2\d|
+              3[02-59]|
+              4[0-4]|
+              5[0-4]|
+              6[01]|
+              7[0135-8]|
+              8[01]
+            )\d{5,6}
+          )
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
         <exampleNumber>8123456</exampleNumber>
       </fixedLine>
@@ -6997,7 +15452,13 @@
         <exampleNumber>201234567</exampleNumber>
       </tollFree>
       <premiumRate>
-        <nationalNumberPattern>9(?:00|39|44)\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          9(?:
+            00|
+            39|
+            44
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9001234567</exampleNumber>
       </premiumRate>
@@ -7013,29 +15474,46 @@
     <territory id="SG" countryCode="65" internationalPrefix="0[0-3][0-9]">
       <availableFormats>
         <numberFormat pattern="([3689]\d{3})(\d{4})">
-          <leadingDigits>[369]|8[1-9]</leadingDigits>
+          <leadingDigits>
+            [369]|
+            8[1-9]
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(1[89]00)(\d{3})(\d{4})">
           <leadingDigits>1[89]</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
+        <numberFormat pattern="(7000)(\d{4})(\d{3})">
+          <leadingDigits>70</leadingDigits>
+          <format>$1 $2 $3</format>
+        </numberFormat>
         <numberFormat pattern="(800)(\d{3})(\d{4})">
           <leadingDigits>80</leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[13689]\d{7,10}</nationalNumberPattern>
+        <!-- We have a stricter national number pattern for numbers beginning with 6 to enable us to
+             easily strip off leading "65" country codes. -->
+        <nationalNumberPattern>
+          [36]\d{7}|
+          [17-9]\d{7,10}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8,11}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>[36]\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>6[1-8]\d{6}</nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
-        <exampleNumber>31234567</exampleNumber>
+        <exampleNumber>61234567</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>[89]\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            8[1-5]|
+            9[0-8]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>81234567</exampleNumber>
       </mobile>
@@ -7049,6 +15527,34 @@
         <possibleNumberPattern>\d{11}</possibleNumberPattern>
         <exampleNumber>19001234567</exampleNumber>
       </premiumRate>
+      <voip>
+        <nationalNumberPattern>3[0-2]\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>31234567</exampleNumber>
+      </voip>
+      <uan>
+        <!-- Although not detailed in the plan beyond mentioning their existence, it seems 7000
+             numbers are used for companies. Most of the online examples are in fact alpha-numbers.
+             -->
+        <nationalNumberPattern>7000\d{7}</nationalNumberPattern>
+        <possibleNumberPattern>\d{11}</possibleNumberPattern>
+        <exampleNumber>70001234567</exampleNumber>
+      </uan>
+      <shortCode>
+        <nationalNumberPattern>
+          1(?:
+            [0136]\d{2}|
+            41\d|
+            [89](?:
+              [1-9]\d|
+              0[1-9]
+            )|
+            [57]\d{2,3})|
+          99\d
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{3,5}</possibleNumberPattern>
+        <exampleNumber>1312</exampleNumber>
+      </shortCode>
     </territory>
 
     <!-- Saint Helena -->
@@ -7062,11 +15568,22 @@
       <availableFormats>
         <numberFormat nationalPrefixFormattingRule="($NP$FG)"
           pattern="(\d)(\d{3})(\d{2})(\d{2})">
-          <leadingDigits>[12]|3[4-8]|4[24-8]|5[3-8]|7[3-8]</leadingDigits>
+          <leadingDigits>
+            [12]|
+            3[4-8]|
+            4[24-8]|
+            5[3-8]|
+            7[3-8]
+          </leadingDigits>
           <format>$1 $2 $3 $4</format>
           </numberFormat>
         <numberFormat pattern="([3-7]\d)(\d{3})(\d{3})">
-          <leadingDigits>[37][01]|4[019]|51|64</leadingDigits>
+          <leadingDigits>
+            [37][01]|
+            4[019]|
+            51|
+            64
+          </leadingDigits>
           <format>$1 $2 $3</format>
           </numberFormat>
         <numberFormat pattern="([89][09])(\d{3,6})">
@@ -7074,25 +15591,45 @@
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="([58]\d{2})(\d{5})">
-          <leadingDigits>59|8[1-3]</leadingDigits>
+          <leadingDigits>
+            59|
+            8[1-3]
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[1-7]\d{6,7}|[89]\d{4,7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [1-7]\d{6,7}|
+          [89]\d{4,7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5,8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:1\d|2[2-8]|3[4-8]|4[24-8]|[57][3-8])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            1\d|
+            2[2-8]|
+            3[4-8]|
+            4[24-8]|
+            [57][3-8]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
         <exampleNumber>11234567</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- We include 049 here - it is VoIP in the plan, but successful
-        delivery has been performed by mobile - and it is run by Mobitel.
-        There are also mobile numbers found on the internet with this prefix -
-        it is apparently used in Kosovo. -->
-        <nationalNumberPattern>(?:[37][01]|4[019]|51|64)\d{6}</nationalNumberPattern>
+        <!-- We include 049 here - it is VoIP in the plan, but SMS messages have been successfully
+             delivered - and it is run by Mobitel. There are also mobile numbers found on the
+             internet with this prefix - it is apparently used in Kosovo. -->
+        <nationalNumberPattern>
+          (?:
+            [37][01]|
+            4[019]|
+            51|
+            64
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>31234567</exampleNumber>
       </mobile>
@@ -7102,13 +15639,21 @@
         <exampleNumber>80123456</exampleNumber>
       </tollFree>
       <premiumRate>
-        <!-- Includes televoting, mass calling-->
-        <nationalNumberPattern>90\d{4,6}|89[1-3]\d{2,5}</nationalNumberPattern>
+        <!-- Includes televoting, mass calling -->
+        <nationalNumberPattern>
+          90\d{4,6}|
+          89[1-3]\d{2,5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5,8}</possibleNumberPattern>
         <exampleNumber>90123456</exampleNumber>
       </premiumRate>
       <voip>
-        <nationalNumberPattern>(?:59|8[1-3])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            59|
+            8[1-3]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>59012345</exampleNumber>
       </voip>
@@ -7141,9 +15686,15 @@
         <exampleNumber>212345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- 948 isn't in the number pattern, but many examples using this have
-        been found, so deeming it valid for now.-->
-        <nationalNumberPattern>9(?:0[1-8]|1[0-24-9]|4[0489])\d{6}</nationalNumberPattern>
+        <!-- 948 isn't in the number pattern, but many examples using this have been found, so
+             deeming it valid for now. -->
+        <nationalNumberPattern>
+          9(?:
+            0[1-8]|
+            1[0-24-9]|
+            4[0489]
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>912123456</exampleNumber>
       </mobile>
       <tollFree>
@@ -7151,7 +15702,12 @@
         <exampleNumber>800123456</exampleNumber>
       </tollFree>
       <premiumRate>
-        <nationalNumberPattern>9(?:[78]\d{7}|00\d{6})</nationalNumberPattern>
+        <nationalNumberPattern>
+          9(?:
+            [78]\d{7}|
+            00\d{6}
+          )
+        </nationalNumberPattern>
         <exampleNumber>900123456</exampleNumber>
       </premiumRate>
       <sharedCost>
@@ -7159,7 +15715,12 @@
         <exampleNumber>850123456</exampleNumber>
       </sharedCost>
       <voip>
-        <nationalNumberPattern>6(?:5[0-4]|9[0-6])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          6(?:
+            5[0-4]|
+            9[0-6]
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>690123456</exampleNumber>
       </voip>
     </territory>
@@ -7169,8 +15730,7 @@
     <territory id="SL" countryCode="232" internationalPrefix="00"
                nationalPrefix="0" nationalPrefixFormattingRule="($NP$FG)">
       <availableFormats>
-        <!-- Following formatting of online yellow pages
-             www.leonedirect.com -->
+        <!-- Following formatting of online yellow pages www.leonedirect.com -->
              <numberFormat pattern="(\d{2})(\d{6})">
                <format>$1 $2</format>
              </numberFormat>
@@ -7184,25 +15744,102 @@
         <exampleNumber>22221234</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Adding prefix 50 because it was found in online numbers and this is
-        supported by http://www.wtng.info/wtng-232-sl.html - although the data
-        may be outdated, since no further information about Datatel can be found. -->
-        <nationalNumberPattern>(?:25|3[03]|44|5[056]|7[6-8]|88)[1-9]\d{5}</nationalNumberPattern>
+        <!-- Adding prefix 50 because it was found in online numbers and this is supported by
+             http://www.wtng.info/wtng-232-sl.html - although the data may be outdated, since no
+             further information about Datatel can be found. -->
+        <nationalNumberPattern>
+          (?:
+            25|
+            3[03]|
+            44|
+            5[056]|
+            7[6-8]|
+            88
+          )[1-9]\d{5}
+        </nationalNumberPattern>
         <exampleNumber>25123456</exampleNumber>
       </mobile>
     </territory>
 
     <!-- San Marino -->
+    <!-- http://www.itu.int/oth/T02020000B5/en -->
+    <!-- http://en.wikipedia.org/wiki/%2B39 (Information about Italy) -->
+    <!-- http://en.wikipedia.org/wiki/%2B378-->
+    <!-- San Marino fixed-line numbers have an area code of "0549". However, this seems to be
+         optional when dialling from outside the country; the phone number can be reached both with
+         and without this area code. The nationalPrefixForParsing and nationalPrefixTransformRule
+         are used to ensure that if the 0549 is not present, it will be added. -->
     <territory id="SM" countryCode="378" internationalPrefix="00"
-               nationalPrefix="0">
+      nationalPrefixForParsing="(?:0549)?([89]\d{5})" nationalPrefixTransformRule="0549$1">
+      <availableFormats>
+        <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})">
+          <leadingDigits>[5-7]</leadingDigits>
+          <format>$1 $2 $3 $4</format>
+        </numberFormat>
+        <intlNumberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})">
+          <leadingDigits>[5-7]</leadingDigits>
+          <format>$1 $2 $3 $4</format>
+        </intlNumberFormat>
+        <!-- We follow the guidelines of the yellow-pages when formatting in national format. -->
+        <numberFormat pattern="(0549)(\d{6})">
+          <leadingDigits>0</leadingDigits>
+          <format>$1 $2</format>
+        </numberFormat>
+        <!-- We follow the guidelines of the Telecommunications Document published on ITU when
+             formatting in international format. -->
+        <intlNumberFormat pattern="(0549)(\d{6})">
+          <leadingDigits>0</leadingDigits>
+          <format>($1) $2</format>
+        </intlNumberFormat>
+        <!-- A rule in case the number has been stored without the leading 0549 necessary for
+             fixed-lines. -->
+        <numberFormat pattern="(\d{6})">
+          <leadingDigits>[89]</leadingDigits>
+          <format>0549 $1</format>
+        </numberFormat>
+        <intlNumberFormat pattern="(\d{6})">
+          <leadingDigits>[89]</leadingDigits>
+          <format>(0549) $1</format>
+        </intlNumberFormat>
+      </availableFormats>
+      <generalDesc>
+        <nationalNumberPattern>[05-7]\d{7,9}</nationalNumberPattern>
+        <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+      </generalDesc>
+      <!-- Example numbers provided by the Telecommunications Services. -->
+      <fixedLine>
+        <nationalNumberPattern>
+          0549(?:
+            8[0157-9]|
+            9\d
+          )\d{4}
+        </nationalNumberPattern>
+        <exampleNumber>0549886377</exampleNumber>
+      </fixedLine>
+      <mobile>
+        <nationalNumberPattern>6[16]\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>66661212</exampleNumber>
+      </mobile>
+      <premiumRate>
+        <!-- Includes Video Call numbers. -->
+        <nationalNumberPattern>7[178]\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>71123456</exampleNumber>
+      </premiumRate>
+      <voip>
+        <nationalNumberPattern>5[158]\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>58001110</exampleNumber>
+      </voip>
     </territory>
 
     <!-- Senegal -->
     <!-- http://www.itu.int/oth/T02020000B8/en -->
     <territory id="SN" countryCode="221" internationalPrefix="00">
       <availableFormats>
-        <!-- Using yellow pages and online telecom company formatting, rather
-        than that implied in the national numbering plan. -->
+        <!-- Using yellow pages and online telecom company formatting, rather than that implied in
+             the national numbering plan. -->
         <numberFormat pattern="(\d{2})(\d{3})(\d{2})(\d{2})">
           <format>$1 $2 $3 $4</format>
         </numberFormat>
@@ -7212,13 +15849,45 @@
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>3(?:010|3(?:8[1-9]|9[2-9]))\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          3(?:
+            010|
+            3(?:
+              8[1-9]|
+              9[2-9]
+            )
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>301012345</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Adding 77 7[45]X and 77 9[0-6]X from online searches and from
-        numbers successfully delivered by the wireless team. -->
-        <nationalNumberPattern>7(?:0[1256]0|6(?:1[23]|2[89]|3[3489]|4[6-9]|5[1-389]|6[6-9]|7[45]|8[3-8])|7(?:1[014-8]|2[0-7]|3[0-35-8]|4[0-6]|[56]\d|7[0-589]|8[01]|9[0-6]))\d{5}</nationalNumberPattern>
+        <!-- Adding 77 7[45]X and 77 9[0-6]X from online searches and from numbers successfully
+             delivered by the wireless team. -->
+        <nationalNumberPattern>
+          7(?:
+            0[1256]0|
+            6(?:
+              1[23]|
+              2[89]|
+              3[3489]|
+              4[6-9]|
+              5[1-389]|
+              6[6-9]|
+              7[45]|
+              8[3-8]
+            )|
+            7(?:
+              1[014-8]|
+              2[0-7]|
+              3[0-35-8]|
+              4[0-6]|
+              [56]\d|
+              7[0-589]|
+              8[01]|
+              9[0-6]
+            )
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>701012345</exampleNumber>
       </mobile>
       <voip>
@@ -7236,16 +15905,15 @@
     operators. See regression tests for more details. -->
     <territory id="SO" countryCode="252" internationalPrefix="00">
       <availableFormats>
-        <!-- These follow formats online, such as www.hortel.net/contact_us.html
-        -->
+        <!-- These follow formats online, such as www.hortel.net/contact_us.html -->
         <numberFormat pattern="([13-5])(\d{6})">
           <leadingDigits>[13-5]</leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
-        <!-- Unfortunately numbers beginning with 1 are hard to format based on
-        prefixes, since it depends on number length. -->
+        <!-- Unfortunately numbers beginning with 1 are hard to format based on prefixes, since it
+             depends on number length. -->
         <numberFormat pattern="([19]\d)(\d{6})">
-          <leadingDigits>[19]</leadingDigits>
+          <leadingDigits>15|9</leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
       </availableFormats>
@@ -7254,13 +15922,23 @@
         <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:5[57-9]|[134]\d)\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            5[57-9]|
+            [134]\d
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7}</possibleNumberPattern>
         <!-- Example numbers are test numbers from the document. -->
         <exampleNumber>5522010</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:9[01]|15)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            9[01]|
+            15
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>90792024</exampleNumber>
       </mobile>
@@ -7315,14 +15993,37 @@
         <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:1(?:|1\d?|4\d|[2356])|2[1-35]|3(?:1\d|[34])|4[13]|5[1-3])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            1(?:
+              1\d?|
+              4\d|
+              [2356]
+            )|
+            2[1-35]|
+            3(?:
+              1\d|
+              [34]
+            )|
+            4[13]|
+            5[1-3]
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>112345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- 945, 967 and 991 numbers are added as we successfully
-        delivered SMS messages to these numbers, and they are also widely
-        present on the Internet. -->
-        <nationalNumberPattern>9(?:3[23]|4[457]|55|6[67]|88|9[19])\d{6}</nationalNumberPattern>
+        <!-- 945, 967 and 991 numbers are added as SMS messages have been successfully delivered to
+             these numbers, and they are also widely present on the Internet. -->
+        <nationalNumberPattern>
+          9(?:
+            3[23]|
+            4[457]|
+            55|
+            6[67]|
+            88|
+            9[19]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>944567890</exampleNumber>
       </mobile>
@@ -7331,8 +16032,8 @@
 
     <!-- Swaziland -->
     <!-- http://www.itu.int/oth/T02020000C6/en -->
-    <!-- Note this plan is scheduled to change in February 2011 so should be
-    updated at that time. -->
+    <!-- Note this plan is scheduled to change in February 2011 so should be updated at that time.
+         -->
     <territory id="SZ" countryCode="268" internationalPrefix="00">
       <availableFormats>
         <numberFormat pattern="(\d{3})(\d{4})">
@@ -7340,24 +16041,68 @@
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(\d{4})(\d{4})">
-          <leadingDigits>7</leadingDigits>
+          <leadingDigits>[027]</leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[2-7]\d{6,7}</nationalNumberPattern>
+        <nationalNumberPattern>[02-7]\d{6,7}</nationalNumberPattern>
         <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
       </generalDesc>
+      <noInternationalDialling>
+        <nationalNumberPattern>0800\d{4}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>08001234</exampleNumber>
+      </noInternationalDialling>
       <fixedLine>
-        <!-- The leading optional 2 is because future changes to the fixed-line
-        plan will be made by prepending a two to fixed-line numbers. -->
-        <nationalNumberPattern>2?(?:2(?:0[07]|[13]7|2[57])|3(?:0[34]|[1278]3|3[23]|[46][34])|(?:40[4-69]|16|2[12]|3[57]|[4578]2|67)|5(?:0[5-7]|1[6-9]|[23][78]|48|5[01]))\d{4}</nationalNumberPattern>
+        <!-- The leading optional 2 is because future changes to the fixed-line plan will be made by
+             prepending a two to fixed-line numbers. -->
+        <nationalNumberPattern>
+          2?(?:
+            2(?:
+              0[07]|
+              [13]7|
+              2[57]
+            )|
+            3(?:
+              0[34]|
+              [1278]3|
+              3[23]|
+              [46][34]
+            )|
+            (?:
+              40[4-69]|
+              16|
+              2[12]|
+              3[57]|
+              [4578]2|
+              67
+            )|
+            5(?:
+              0[5-7]|
+              1[6-9]|
+              [23][78]|
+              48|
+              5[01]
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>2171234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:6|7[67])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            6|
+            7[6-8]
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>76123456</exampleNumber>
       </mobile>
+      <tollFree>
+        <nationalNumberPattern>0800\d{4}</nationalNumberPattern>
+        <possibleNumberPattern>\d{8}</possibleNumberPattern>
+        <exampleNumber>08001234</exampleNumber>
+      </tollFree>
     </territory>
 
     <!-- Turks and Caicos Islands -->
@@ -7370,16 +16115,44 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>649(?:712|9(?:4\d|50))\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          649(?:
+            712|
+            9(?:
+              4\d|
+              50
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>6497121234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>649(?:2(?:3[12]|4[1-5])|3(?:3[1-39]|4[1-57])|4[34][12])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          649(?:
+            2(?:
+              3[12]|
+              4[1-5]
+            )|
+            3(?:
+              3[1-39]|
+              4[1-57]
+            )|
+            4[34][12]
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>6492311234</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002345678</exampleNumber>
       </tollFree>
@@ -7388,6 +16161,18 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002345678</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
       <voip>
         <nationalNumberPattern>64971[01]\d{4}</nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
@@ -7397,8 +16182,7 @@
 
     <!-- Chad -->
     <!-- http://www.itu.int/oth/T0202000029/en -->
-    <!-- The international prefix includes 16 as the international manual
-         exchange. -->
+    <!-- The international prefix includes 16 as the international manual exchange. -->
     <territory id="TD" countryCode="235" preferredInternationalPrefix="00"
          internationalPrefix="00|16">
       <availableFormats>
@@ -7412,14 +16196,32 @@
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>22(?:[3789]0|5[0-5]|6[89])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          22(?:
+            [3789]0|
+            5[0-5]|
+            6[89]
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>22501234</exampleNumber>
       </fixedLine>
       <mobile>
         <!-- Sotel Tchad "SALAM" (77 XX XX XX) is classified as a fixed operator in the plan, but it
-             also says numbers starting with 7 are mobile numbers. Putting under
-             mobile for now. Also adding 63[5-7] from sms evidence. -->
-        <nationalNumberPattern>(?:6(?:3[0-7]|6\d)|77\d|9(?:5[0-4]|9\d))\d{5}</nationalNumberPattern>
+             also says numbers starting with 7 are mobile numbers. Putting under mobile for now.
+             Also adding 63[5-7] from evidence of successful SMS delivery. -->
+        <nationalNumberPattern>
+          (?:
+            6(?:
+              3[0-7]|
+              6\d
+            )|
+            77\d|
+            9(?:
+              5[0-4]|
+              9\d
+            )
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>63012345</exampleNumber>
       </mobile>
     </territory>
@@ -7442,12 +16244,28 @@
         <possibleNumberPattern>\d{7}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:2[2-7]|3[23]|44|55|66|77)\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2[2-7]|
+            3[23]|
+            44|
+            55|
+            66|
+            77
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>2212345</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Added prefix 09 because many mobile numbers were found with this.-->
-        <nationalNumberPattern>(?:0[1-9]|7[56]|8[1-7]|9\d)\d{5}</nationalNumberPattern>
+        <!-- Added prefix 09 because many mobile numbers were found with this. -->
+        <nationalNumberPattern>
+          (?:
+            0[1-9]|
+            7[56]|
+            8[1-7]|
+            9\d
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>0112345</exampleNumber>
       </mobile>
     </territory>
@@ -7478,16 +16296,27 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[2-8]\d{7,8}|1\d{9}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [2-8]\d{7,8}|
+          1\d{9}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:2[1-9]|3[24-9]|4[2-5]|5[3-6]|7[3-7])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2[1-9]|
+            3[24-9]|
+            4[2-5]|
+            5[3-6]|
+            7[3-7]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
         <exampleNumber>21234567</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- 8[02] numbers are added as we successfully delivered SMS messages to these
+        <!-- 8[02] numbers are added as SMS messages have been successfully delivered to these
              numbers, and they are also widely present on the Internet. -->
         <nationalNumberPattern>8\d{8}</nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
@@ -7517,11 +16346,20 @@
                nationalPrefix="8" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <numberFormat pattern="([349]\d{2})(\d{2})(\d{4})">
-          <leadingDigits>[34]7|91[78]</leadingDigits>
+          <leadingDigits>
+            [34]7|
+            91[78]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="([49]\d)(\d{3})(\d{4})">
-          <leadingDigits>4[48]|9(?:19|[0235-9])</leadingDigits>
+          <leadingDigits>
+            4[48]|
+            9(?:
+              19|
+              [0235-9]
+            )
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(331700)(\d)(\d{2})">
@@ -7533,7 +16371,15 @@
         </numberFormat>
         <numberFormat pattern="(\d{4})(\d)(\d{4})">
           <leadingDigits>3[1-5]</leadingDigits>
-          <leadingDigits>3(?:[1245]|3(?:[02-9]|1[0-589]))</leadingDigits>
+          <leadingDigits>
+            3(?:
+              [1245]|
+              3(?:
+                [02-9]|
+                1[0-589]
+              )
+            )
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
       </availableFormats>
@@ -7542,17 +16388,33 @@
         <possibleNumberPattern>\d{3,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:3(?:1[3-5]|2[245]|31|4[24-7]|5[25]|72)|4(?:46|74|87))\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            3(?:
+              1[3-5]|
+              2[245]|
+              31|
+              4[24-7]|
+              5[25]|
+              72
+            )|
+            4(?:
+              46|
+              74|
+              87
+            )
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>372123456</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Adding 90 prefix as we could successfully deliver SMS messages to these mobile
+        <!-- Adding 90 prefix as SMS messages could be successfully delivered to these mobile
              numbers. -->
         <nationalNumberPattern>9[0-35-9]\d{7}</nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>917123456</exampleNumber>
       </mobile>
-      <!-- No tollFree or premiumRate information can be found.-->
+      <!-- No tollFree or premiumRate information can be found. -->
     </territory>
 
     <!-- Tokelau -->
@@ -7572,7 +16434,13 @@
         <possibleNumberPattern>\d{7}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:2[1-5]|3[1-9]|4[1-4])\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2[1-5]|
+            3[1-9]|
+            4[1-4]
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>2112345</exampleNumber>
       </fixedLine>
       <mobile>
@@ -7600,26 +16468,31 @@
       <availableFormats>
         <!-- There doesn't seem to be a standardized format. The format below is based on the
              Turkmenistan embassy at
-             http://www.turkmenistanembassy.org/turkmen/info/contact.html-->
-             <numberFormat pattern="([1-6]\d)(\d{2})(\d{2})(\d{2})">
-               <format>$1 $2 $3 $4</format>
-             </numberFormat>
+             http://www.turkmenistanembassy.org/turkmen/info/contact.html -->
+          <numberFormat pattern="([1-6]\d)(\d{2})(\d{2})(\d{2})">
+            <format>$1 $2 $3 $4</format>
+          </numberFormat>
       </availableFormats>
       <generalDesc>
         <nationalNumberPattern>[1-6]\d{7}</nationalNumberPattern>
         <possibleNumberPattern>\d{8}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:12\d|243|[3-5]22)\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            12\d|
+            243|
+            [3-5]22
+          )\d{5}
+        </nationalNumberPattern>
         <exampleNumber>12345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Adding 68 as we successfully sent SMS messages to numbers
-        with this prefix. -->
+        <!-- Adding 68 as SMS messages have been successfully sent to numbers with this prefix. -->
         <nationalNumberPattern>6[6-8]\d{6}</nationalNumberPattern>
         <exampleNumber>66123456</exampleNumber>
       </mobile>
-      <!-- No tollFree or premiumRate information can be found.-->
+      <!-- No tollFree or premiumRate information can be found. -->
     </territory>
 
     <!-- Tunisia -->
@@ -7639,11 +16512,17 @@
         <exampleNumber>71234567</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:2[0-7]|40|9\d)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2[0-7]|
+            40|
+            9\d
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>20123456</exampleNumber>
       </mobile>
-      <!-- These are listed as 'value added services' - pending further
-      information, we add them here for now. -->
+      <!-- These are listed as 'value added services' - pending further information, we add them
+           here for now. -->
       <premiumRate>
         <nationalNumberPattern>8[028]\d{6}</nationalNumberPattern>
         <exampleNumber>80123456</exampleNumber>
@@ -7669,7 +16548,10 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>[2-4]\d{9}|850\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [2-4]\d{9}|
+          850\d{7}
+        </nationalNumberPattern>
         <exampleNumber>2123456789</exampleNumber>
       </fixedLine>
       <mobile>
@@ -7696,16 +16578,61 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>868(?:2(?:01|2[1-4])|6(?:1[4-6]|2[1-9]|[3-6]\d|7[0-79]|9[0-8])|82[12])\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          868(?:
+            2(?:
+              01|
+              2[1-4]
+            )|
+            6(?:
+              1[4-6]|
+              2[1-9]|
+              [3-6]\d|
+              7[0-79]|
+              9[0-8]
+            )|
+            82[12]
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>8682211234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>868(?:29\d|3(?:0[1-9]|1[02-9]|[2-9]\d)|4([679]\d|8[0-4])|6(?:20|78|8\d)|7(?:1[02-9]|[2-9]\d))\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          868(?:
+            29\d|
+            3(?:
+              0[1-9]|
+              1[02-9]|
+              [2-9]\d
+            )|
+            4(?:
+              [679]\d|
+              8[0-4]
+            )|
+            6(?:
+              20|
+              78|
+              8\d
+            )|
+            7(?:
+              1[02-9]|
+              [2-9]\d
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8682911234</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002345678</exampleNumber>
       </tollFree>
@@ -7714,6 +16641,18 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002345678</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Tuvalu -->
@@ -7728,11 +16667,17 @@
                nationalPrefix="0" preferredExtnPrefix="#" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <numberFormat pattern="([2-8])(\d{3,4})(\d{4})">
-          <leadingDigits>[2-7]|8[1-9]</leadingDigits>
+          <leadingDigits>
+            [2-7]|
+            8[1-9]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="([89]\d{2})(\d{3})(\d{3})">
-          <leadingDigits>80|9</leadingDigits>
+          <leadingDigits>
+            80|
+            9
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
       </availableFormats>
@@ -7791,7 +16736,12 @@
         <exampleNumber>222345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:6[158]|7[1-9])(\d{7})</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            6[158]|
+            7[1-9]
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>612345678</exampleNumber>
       </mobile>
@@ -7806,7 +16756,12 @@
         <exampleNumber>900123456</exampleNumber>
       </premiumRate>
       <sharedCost>
-        <nationalNumberPattern>8(?:40|6[01])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            40|
+            6[01]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>840123456</exampleNumber>
       </sharedCost>
@@ -7823,24 +16778,133 @@
     <territory id="UA" countryCode="380" internationalPrefix="0~0"
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
-        <!-- City codes separated out. No definitive list has been found of what
-        constitutes the area code - http://www.ua.all-biz.info/guide/phonecodes
-        is useful but not error-free. Have used local yellow pages guidelines,
-        Google searches and regression tests to reverse-engineer these rules.
-        -->
+        <!-- City codes separated out. No definitive list has been found of what constitutes the
+             area code - http://www.ua.all-biz.info/guide/phonecodes is useful but not error-free.
+             Have used local yellow pages guidelines, Google searches and regression tests to
+             reverse-engineer these rules as well as bugs. -->
         <numberFormat pattern="([3-69]\d)(\d{3})(\d{4})">
-          <leadingDigits>39|4(?:[45][0-5]|87)|5(?:0|6[37]|7[37])|6[36-8]|9[1-9]</leadingDigits>
-          <leadingDigits>39|4(?:[45][0-5]|87)|5(?:0|6(?:3[14-7]|7)|7[37])|6[36-8]|9[1-9]</leadingDigits>
+          <leadingDigits>
+            39|
+            4(?:
+              [45][0-5]|
+              87
+            )|
+            5(?:
+              0|
+              6[37]|
+              7[37]
+            )|
+            6[36-8]|
+            9[1-9]
+          </leadingDigits>
+          <leadingDigits>
+            39|
+            4(?:
+              [45][0-5]|
+              87
+            )|
+            5(?:
+              0|
+              6(?:
+                3[14-7]|
+                7
+              )|
+              7[37]
+            )|
+            6[36-8]|
+            9[1-9]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="([3-689]\d{2})(\d{3})(\d{3})">
-          <leadingDigits>3[1-8]2|4[1378]2|5(?:[12457]2|6[24])|6(?:[49]2|[12][29]|5[24])|8|90</leadingDigits>
-          <leadingDigits>3(?:[1-46-8]2[013-9]|52)|4[1378]2|5(?:[12457]2|6[24])|6(?:[49]2|[12][29]|5[24])|8|90</leadingDigits>
+          <leadingDigits>
+            3[1-8]2|
+            4[1378]2|
+            5(?:
+              [12457]2|
+              6[24]
+            )|
+            6(?:
+              [49]2|
+              [12][29]|
+              5[24]
+            )|
+            8|
+            90
+          </leadingDigits>
+          <leadingDigits>
+            3(?:
+              [1-46-8]2[013-9]|
+              52
+            )|
+            4[1378]2|
+            5(?:
+              [12457]2|
+              6[24]
+            )|
+            6(?:
+              [49]2|
+              [12][29]|
+              5[24]
+            )|
+            8|
+            90
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="([3-6]\d{3})(\d{5})">
-          <leadingDigits>3(?:5[013-9]|[1-46-8])|4(?:[137][013-9]|6|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6[0135-9]|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8])</leadingDigits>
-          <leadingDigits>3(?:5[013-9]|[1-46-8](?:22|[013-9]))|4(?:[137][013-9]|6|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6(?:3[02389]|[015689])|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8])</leadingDigits>
+          <leadingDigits>
+            3(?:
+              5[013-9]|
+              [1-46-8]
+            )|
+            4(?:
+              [137][013-9]|
+              6|
+              [45][6-9]|
+              8[4-6]
+            )|
+            5(?:
+              [1245][013-9]|
+              6[0135-9]|
+              3|
+              7[4-6]
+            )|
+            6(?:
+              [49][013-9]|
+              5[0135-9]|
+              [12][13-8]
+            )
+          </leadingDigits>
+          <leadingDigits>
+            3(?:
+              5[013-9]|
+              [1-46-8](?:
+                22|
+                [013-9]
+              )
+            )|
+            4(?:
+              [137][013-9]|
+              6|
+              [45][6-9]|
+              8[4-6]
+            )|
+            5(?:
+              [1245][013-9]|
+              6(?:
+                3[02389]|
+                [015689]
+              )|
+              3|
+              7[4-6]
+            )|
+            6(?:
+              [49][013-9]|
+              5[0135-9]|
+              [12][13-8]
+            )
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
       </availableFormats>
@@ -7849,11 +16913,25 @@
         <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:3[1-8]|4[13-8]|5[1-7]|6[12459])\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            3[1-8]|
+            4[13-8]|
+            5[1-7]|
+            6[12459]
+          )\d{7}
+        </nationalNumberPattern>
         <exampleNumber>311234567</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:39|50|6[36-8]|9[1-9])\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            39|
+            50|
+            6[36-8]|
+            9[1-9]
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>391234567</exampleNumber>
       </mobile>
@@ -7876,11 +16954,24 @@
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <numberFormat pattern="([247-9]\d{2})(\d{6})">
-          <leadingDigits>[7-9]|200|4(?:6[45]|[7-9])</leadingDigits>
+          <leadingDigits>
+            [7-9]|
+            200|
+            4(?:
+              6[45]|
+              [7-9]
+            )
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="([34]\d)(\d{7})">
-          <leadingDigits>3|4(?:[1-5]|6[0-36-9])</leadingDigits>
+          <leadingDigits>
+            3|
+            4(?:
+              [1-5]|
+              6[0-36-9]
+            )
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="(2024)(\d{5})">
@@ -7893,12 +16984,29 @@
         <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>3\d{8}|4(?:[1-6]\d|7[136]|8[1356]|96)\d{6}|20(?:0\d|24)\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          3\d{8}|
+          4(?:
+            [1-6]\d|
+            7[136]|
+            8[1356]|
+            96
+          )\d{6}|
+          20(?:
+            0\d|
+            24
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
         <exampleNumber>312345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>7(?:[1578]\d|0[0-4])\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          7(?:
+            [1578]\d|
+            0[0-4]
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>712345678</exampleNumber>
       </mobile>
@@ -7921,9 +17029,8 @@
          numbers in the national format, it is not included. Therefore, we omit it here to make
          formatting consistent with the rest of the world. The same applies to all the
          countries/regions under NANPA -->
-    <!-- The national prefix of "1" here is the same as the country code. It is
-         not used by default when formatting, but is set here so that users
-         who are calling formatByPattern can specify
+    <!-- The national prefix of "1" here is the same as the country code. It is not used by default
+         when formatting, but is set here so that users who are calling formatByPattern can specify
          NationalPrefixFormattingRule if they want to. -->
     <territory id="US" countryCode="1" internationalPrefix="011"
       mainCountryForCode="true" nationalPrefix="1">
@@ -7934,8 +17041,8 @@
         <numberFormat pattern="(\d{3})(\d{4})">
           <format>$1-$2</format>
         </numberFormat>
-        <!-- A different pattern is used when formatting internationally, as
-        the area code is no longer optional and should not be in brackets. -->
+        <!-- A different pattern is used when formatting internationally, as the area code is no
+             longer optional and should not be in brackets. -->
         <intlNumberFormat pattern="(\d{3})(\d{3})(\d{4})">
           <format>$1-$2-$3</format>
         </intlNumberFormat>
@@ -7945,15 +17052,199 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:2(?:0[1-35-9]|1[02-9]|2[4589]|3[149]|4[08]|5[1-46]|6[0279]|7[06]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|47|5[12]|6[01]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|69|7[089]|8[04])|5(?:0[1-57-9]|1[0235-8]|[23]0|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[036]|3[016]|4[16]|5[017]|6[0-29]|78|8[12])|7(?:0[1-46-8]|1[2-9]|2[047]|3[124]|4[07]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[06-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[058]|3[167]|4[0179]|5[1246]|7[0-3589]|8[059]))[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2(?:
+              0[1-35-9]|
+              1[02-9]|
+              2[4589]|
+              3[149]|
+              4[08]|
+              5[1-46]|
+              6[0279]|
+              7[06]|
+              8[13]
+            )|
+            3(?:
+              0[1-57-9]|
+              1[02-9]|
+              2[0135]|
+              3[014679]|
+              47|
+              5[12]|
+              6[01]|
+              8[056]
+            )|
+            4(?:
+              0[124-9]|
+              1[02-579]|
+              2[3-5]|
+              3[0245]|
+              4[0235]|
+              58|
+              69|
+              7[0589]|
+              8[04]
+            )|
+            5(?:
+              0[1-57-9]|
+              1[0235-8]|
+              20|
+              3[04]|
+              4[01]|
+              5[19]|
+              6[1-37]|
+              7[013-5]|
+              8[056]
+            )|
+            6(?:
+              0[1-35-9]|
+              1[024-9]|
+              2[036]|
+              3[016]|
+              4[16]|
+              5[017]|
+              6[0-29]|
+              78|
+              8[12]
+            )|
+            7(?:
+              0[1-46-8]|
+              1[2-9]|
+              2[047]|
+              3[124]|
+              4[07]|
+              5[47]|
+              6[02359]|
+              7[02-59]|
+              8[156]
+            )|
+            8(?:
+              0[1-68]|
+              1[02-8]|
+              28|
+              3[0-25]|
+              4[3578]|
+              5[06-9]|
+              6[02-5]|
+              7[028]
+            )|
+            9(?:
+              0[1346-9]|
+              1[02-9]|
+              2[058]|
+              3[1678]|
+              4[0179]|
+              5[1246]|
+              7[0-3589]|
+              8[059]
+            )
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <exampleNumber>2012345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:2(?:0[1-35-9]|1[02-9]|2[4589]|3[149]|4[08]|5[1-46]|6[0279]|7[06]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|47|5[12]|6[01]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|69|7[089]|8[04])|5(?:0[1-57-9]|1[0235-8]|[23]0|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[036]|3[016]|4[16]|5[017]|6[0-29]|78|8[12])|7(?:0[1-46-8]|1[2-9]|2[047]|3[124]|4[07]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[06-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[058]|3[167]|4[0179]|5[1246]|7[0-3589]|8[059]))[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2(?:
+              0[1-35-9]|
+              1[02-9]|
+              2[4589]|
+              3[149]|
+              4[08]|
+              5[1-46]|
+              6[0279]|
+              7[06]|
+              8[13]
+            )|
+            3(?:
+              0[1-57-9]|
+              1[02-9]|
+              2[0135]|
+              3[014679]|
+              47|
+              5[12]|
+              6[01]|
+              8[056]
+            )|
+            4(?:
+              0[124-9]|
+              1[02-579]|
+              2[3-5]|
+              3[0245]|
+              4[0235]|
+              58|
+              69|
+              7[0589]|
+              8[04]
+            )|
+            5(?:
+              0[1-57-9]|
+              1[0235-8]|
+              20|
+              3[04]|
+              4[01]|
+              5[19]|
+              6[1-37]|
+              7[013-5]|
+              8[056]
+            )|
+            6(?:
+              0[1-35-9]|
+              1[024-9]|
+              2[036]|
+              3[016]|
+              4[16]|
+              5[017]|
+              6[0-29]|
+              78|
+              8[12]
+            )|
+            7(?:
+              0[1-46-8]|
+              1[2-9]|
+              2[047]|
+              3[124]|
+              4[07]|
+              5[47]|
+              6[02359]|
+              7[02-59]|
+              8[156]
+            )|
+            8(?:
+              0[1-68]|
+              1[02-8]|
+              28|
+              3[0-25]|
+              4[3578]|
+              5[06-9]|
+              6[02-5]|
+              7[028]
+            )|
+            9(?:
+              0[1346-9]|
+              1[02-9]|
+              2[058]|
+              3[1678]|
+              4[0179]|
+              5[1246]|
+              7[0-3589]|
+              8[059]
+            )
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <exampleNumber>2012345678</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002345678</exampleNumber>
       </tollFree>
@@ -7962,6 +17253,18 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002345678</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Uruguay -->
@@ -7984,23 +17287,28 @@
       </generalDesc>
       <fixedLine>
         <!-- Adding 70 prefix as suggested by http://www.ttts.uz/eng/telephone_codes/codes_uzb_eng
-        -->
-        <nationalNumberPattern>(?:6[125679]|7[0-69])\d{7}</nationalNumberPattern>
+             -->
+        <nationalNumberPattern>
+          (?:
+            6[125679]|
+            7[0-69]
+          )\d{7}
+        </nationalNumberPattern>
         <exampleNumber>612345678</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Adding 9[45] as suggested by
-        http://www.ucell.uz/en/for_subscribers/how_to_call.html -->
+        <!-- Adding 9[45] as suggested by http://www.ucell.uz/en/for_subscribers/how_to_call.html
+             -->
         <nationalNumberPattern>9[0-57-9]\d{7}</nationalNumberPattern>
         <exampleNumber>912345678</exampleNumber>
       </mobile>
-      <!-- No tollFree or premiumRate information can be found.-->
+      <!-- No tollFree or premiumRate information can be found. -->
     </territory>
 
     <!-- Vatican City -->
     <!-- http://en.wikipedia.org/wiki/Telephone_numbers_in_Vatican_City -->
-    <!-- Note that numbers here are also accessible via Italy (+39 and prefix of
-    06 698) but can also be dialled with the Vatican City country code. -->
+    <!-- Note that numbers here are also accessible via Italy (+39 and prefix of 06 698) but can
+         also be dialled with the Vatican City country code. -->
     <territory id="VA" countryCode="379" internationalPrefix="00" >
       <availableFormats>
         <numberFormat pattern="(06)(\d{4})(\d{4})">
@@ -8016,8 +17324,8 @@
         <exampleNumber>0669812345</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- We have no information on mobile numbers from the Vatican. It
-        is probable that they use Italian mobile contracts. -->
+        <!-- We have no information on mobile numbers from the Vatican. It is probable that they use
+             Italian mobile contracts. -->
         <nationalNumberPattern>N/A</nationalNumberPattern>
         <possibleNumberPattern>N/A</possibleNumberPattern>
       </mobile>
@@ -8030,20 +17338,70 @@
       nationalPrefix="1" internationalPrefix="011">
       <generalDesc>
         <!-- NANPA country - uses US formatting rules -->
-        <nationalNumberPattern>(?:784|8(?:00|66|77|88)|900)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            784|
+            8(?:
+              00|
+              66|
+              77|
+              88
+            )|
+            900
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>784(?:266|3(?:6[6-9]|7\d|8[0-24-6])|4(?:38|5[0-36-8]|8\d|9[01])|555|638|784)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          784(?:
+            266|
+            3(?:
+              6[6-9]|
+              7\d|
+              8[0-24-6]
+            )|
+            4(?:
+              38|
+              5[0-36-8]|
+              8\d|
+              9[01]
+            )|
+            555|
+            638|
+            784
+          )\d{4}
+        </nationalNumberPattern>
         <exampleNumber>7842661234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>784(?:4(?:3[0-24]|5[45]|9[2-5])|5(?:2[6-9]|3[0-3]|93))\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          784(?:
+            4(?:
+              3[0-24]|
+              5[45]|
+              9[2-5]
+            )|
+            5(?:
+              2[6-9]|
+              3[0-3]|
+              93
+            )
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>7844301234</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002345678</exampleNumber>
       </tollFree>
@@ -8052,6 +17410,18 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002345678</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Venezuela -->
@@ -8072,14 +17442,30 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- Including region-free 500 calls here, since these are treated as
-        local calls. Wikipedia mentions these as 5XX, but online examples that
-        can be found are seemingly restricted to 50[01]. -->
-        <nationalNumberPattern>(?:2(?:12|3[457-9]|[58][1-9]|[467]\d|9[1-6])|50[01])\d{7}</nationalNumberPattern>
+        <!-- Including region-free 500 calls here, since these are treated as local calls. Wikipedia
+             mentions these as 5XX, but online examples that can be found are seemingly restricted
+             to 50[01]. -->
+        <nationalNumberPattern>
+          (?:
+            2(?:
+              12|
+              3[457-9]|
+              [58][1-9]|
+              [467]\d|
+              9[1-6]
+            )|
+            50[01]
+          )\d{7}
+        </nationalNumberPattern>
         <exampleNumber>2121234567</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>4(?:1[24-8]|2[46])\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          4(?:
+            1[24-8]|
+            2[46]
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>4121234567</exampleNumber>
       </mobile>
@@ -8101,20 +17487,67 @@
       nationalPrefix="1" internationalPrefix="011">
       <generalDesc>
         <!-- NANPA country - uses US formatting rules -->
-        <nationalNumberPattern>(?:284|8(?:00|66|77|88)|900)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            284|
+            8(?:
+              00|
+              66|
+              77|
+              88
+            )|
+            900
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>284(?:(?:229|4(?:46|9[45])|8(?:52|6[459]))\d{4}|496[0-5]\d{3})</nationalNumberPattern>
+        <nationalNumberPattern>
+          284(?:
+            (?:
+              229|
+              4(?:
+                46|
+                9[45]
+              )|
+              8(?:
+                52|
+                6[459]
+              )
+            )\d{4}|
+            496[0-5]\d{3}
+          )
+        </nationalNumberPattern>
         <exampleNumber>2842291234</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>284(?:(?:30[0-3]|4(?:4[0-5]|68|99)|54[0-4])\d{4}|496[6-9]\d{3})</nationalNumberPattern>
+        <nationalNumberPattern>
+          284(?:
+            (?:
+              30[0-3]|
+              4(?:
+                4[0-5]|
+                68|
+                99
+              )|
+              54[0-4]
+            )\d{4}|
+            496[6-9]\d{3}
+          )
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>2843001234</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(?:00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002345678</exampleNumber>
       </tollFree>
@@ -8123,6 +17556,18 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002345678</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Virgin Islands, United States -->
@@ -8131,7 +17576,21 @@
       nationalPrefix="1" internationalPrefix="011">
       <generalDesc>
         <!-- NANPA country - uses US formatting rules -->
-        <nationalNumberPattern>340(?:6[49]2|7[17]\d)\d{4}|(?:8(?:00|66|77|88)|900)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          340(?:
+            6[49]2|
+            7[17]\d
+          )\d{4}|
+          (?:
+            8(?:
+              00|
+              66|
+              77|
+              88
+            )|
+            900
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
@@ -8141,7 +17600,15 @@
         <exampleNumber>3406421234</exampleNumber>
       </mobile>
       <tollFree>
-        <nationalNumberPattern>8(00|66|77|88)[2-9]\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8(?:
+            00|
+            55|
+            66|
+            77|
+            88
+          )[2-9]\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8002345678</exampleNumber>
       </tollFree>
@@ -8150,6 +17617,18 @@
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>9002345678</exampleNumber>
       </premiumRate>
+      <personalNumber>
+        <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+        <nationalNumberPattern>
+          5(?:
+            00|
+            33|
+            44
+          )[2-9]\d{6}
+        </nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+        <exampleNumber>5002345678</exampleNumber>
+      </personalNumber>
     </territory>
 
     <!-- Viet Nam (Vietnam) -->
@@ -8163,7 +17642,13 @@
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="([235-7]\d)(\d{4})(\d{3})">
-          <leadingDigits>2[025-79]|3[0136-9]|5[2-9]|6[0-46-9]|7[02-79]</leadingDigits>
+          <leadingDigits>
+            2[025-79]|
+            3[0136-9]|
+            5[2-9]|
+            6[0-46-9]|
+            7[02-79]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(80)(\d{5})">
@@ -8175,36 +17660,86 @@
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="([235-7]\d{2})(\d{4})(\d{3})">
-          <leadingDigits>2[1348]|3[25]|5[01]|65|7[18]</leadingDigits>
+          <leadingDigits>
+            2[1348]|
+            3[25]|
+            5[01]|
+            65|
+            7[18]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(9\d)(\d{3})(\d{2})(\d{2})">
           <leadingDigits>9</leadingDigits>
           <format>$1 $2 $3 $4</format>
         </numberFormat>
-        <numberFormat pattern="(1[269]\d)(\d{3})(\d{4})">
-          <leadingDigits>1(?:[26]|99)</leadingDigits>
+        <numberFormat pattern="(1[2689]\d)(\d{3})(\d{4})">
+          <leadingDigits>
+            1(?:
+              [26]|
+              88|
+              99
+            )
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat nationalPrefixFormattingRule="$FG"
           pattern="(1[89]00)(\d{4,6})">
-          <leadingDigits>1(?:8|90)</leadingDigits>
+          <leadingDigits>1[89]0</leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>8\d{5,8}|[1-79]\d{7,9}</nationalNumberPattern>
+        <nationalNumberPattern>
+          8\d{5,8}|
+          [1-79]\d{7,9}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:2(?:[025-79]|1[0189]|[348][01])|3(?:[0136-9]|[25][01])|[48]\d|5(?:[01][01]|[2-9])|6(?:[0-46-8]|5[01])|7(?:[02-79]|[18][01]))\d{7}|69\d{5,6}|80\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            2(?:
+              [025-79]|
+              1[0189]|
+              [348][01]
+            )|
+            3(?:
+              [0136-9]|
+              [25][01]
+            )|
+            [48]\d|
+            5(?:
+              [01][01]|
+              [2-9]
+            )|
+            6(?:
+              [0-46-8]|
+              5[01]
+            )|
+            7(?:
+              [02-79]|
+              [18][01]
+            )
+          )\d{7}|
+          69\d{5,6}|
+          80\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
         <exampleNumber>2101234567</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Adding 16[35] because we sent SMS messages successfully
-        to many numbers with these prefixes. -->
-        <nationalNumberPattern>(?:9\d|1(?:2[1-35-9]|6[3-9]|99))\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            9\d|
+            1(?:
+              2\d|
+              6[3-9]|
+              88|
+              99
+            )
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
         <exampleNumber>912345678</exampleNumber>
       </mobile>
@@ -8233,9 +17768,8 @@
     <territory id="WS" countryCode="685" internationalPrefix="0"
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
-      <!-- Should be formatted in one block, apart from the specific series
-      below. For this reason the leadingDigits is more detailed than would
-      appear necessary. -->
+      <!-- Should be formatted in one block, apart from the specific series below. For this reason
+           the leadingDigits is more detailed than would appear necessary. -->
       <numberFormat pattern="(8[04]0)(\d{3,4})">
         <leadingDigits>8[04]0</leadingDigits>
         <format>$1 $2</format>
@@ -8250,27 +17784,36 @@
         <possibleNumberPattern>\d{5,7}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:[2-5]\d|6[1-9]|840\d)\d{3}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            [2-5]\d|
+            6[1-9]|
+            840\d
+          )\d{3}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{5,7}</possibleNumberPattern>
         <exampleNumber>22123</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:60|7[25-7]\d)\d{4}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            60|
+            7[25-7]\d
+          )\d{4}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,7}</possibleNumberPattern>
         <exampleNumber>601234</exampleNumber>
       </mobile>
       <tollFree>
-        <!-- The 800 number series is new, and is used by companies such as the
-        ANZ bank in Samoa to provide 24 hour eMerchant support. It is marked as
-        "Customized Services" in the plan for now, so may be also used for other
-        purposes than toll free, but until we have further evidence of these we
-        will keep it as toll free.-->
+        <!-- The 800 number series is new, and is used by companies such as the ANZ bank in Samoa to
+             provide 24 hour eMerchant support. It is marked as "Customized Services" in the plan
+             for now, so may be also used for other purposes than toll free, but until we have
+             further evidence of these we will keep it as toll free. -->
         <nationalNumberPattern>800\d{3}</nationalNumberPattern>
         <possibleNumberPattern>\d{6}</possibleNumberPattern>
         <exampleNumber>800123</exampleNumber>
       </tollFree>
-      <!-- Current research suggests other types of numbers are not used in
-      Samoa.-->
+      <!-- Current research suggests other types of numbers are not used in Samoa. -->
     </territory>
 
     <!-- Yemen -->
@@ -8279,7 +17822,10 @@
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
         <numberFormat pattern="([1-7])(\d{3})(\d{3,4})">
-          <leadingDigits>[1-6]|7[24-68]</leadingDigits>
+          <leadingDigits>
+            [1-6]|
+            7[24-68]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <numberFormat pattern="(7[137]\d)(\d{3})(\d{3})">
@@ -8292,7 +17838,20 @@
         <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:1(?:7\d|[2-68])|2[2-68]|3[2358]|4[2-58]|5[2-6]|6[3-58]|7[24-68])\d{5}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            1(?:
+              7\d|
+              [2-68]
+            )|
+            2[2-68]|
+            3[2358]|
+            4[2-58]|
+            5[2-6]|
+            6[3-58]|
+            7[24-68]
+          )\d{5}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
         <exampleNumber>1234567</exampleNumber>
       </fixedLine>
@@ -8305,12 +17864,10 @@
     </territory>
 
     <!-- Mayotte -->
-    <!-- Some information at
-    http://en.wikipedia.org/wiki/Telephone_numbers_in_France - most from
-    collection of internet data.
-    http://www.comores-online.com/mwezinet/internet/262.htm verifies the
-    fixed-line prefixes, but the mobile prefixes listed here seem out of date.
-    -->
+    <!-- Some information at http://en.wikipedia.org/wiki/Telephone_numbers_in_France - most from
+         collection of internet data.  http://www.comores-online.com/mwezinet/internet/262.htm
+         verifies the fixed-line prefixes, but the mobile prefixes listed here seem out of date.
+         -->
     <territory id="YT" countryCode="262" internationalPrefix="00"
       nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG"
       leadingDigits="269|63">
@@ -8340,7 +17897,18 @@
     <territory id="ZA" countryCode="27" internationalPrefix="00"
                nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
       <availableFormats>
+        <numberFormat pattern="(860)(\d{3})(\d{3})">
+          <leadingDigits>860</leadingDigits>
+          <format>$1 $2 $3</format>
+        </numberFormat>
         <numberFormat pattern="([1-578]\d)(\d{3})(\d{4})">
+          <leadingDigits>
+            [1-57]|
+            8(?:
+              [0-57-9]|
+              6[1-9]
+            )
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
       </availableFormats>
@@ -8349,12 +17917,25 @@
         <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <nationalNumberPattern>(?:1[0-8]|2[1-478]|3[1-69]|4\d|5[1346-8])\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            1[0-8]|
+            2[1-478]|
+            3[1-69]|
+            4\d|
+            5[1346-8]
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
         <exampleNumber>101234567</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:7[1-4689]|8[1-5789])\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>
+          (?:
+            7[1-4689]|
+            8[1-5789]
+          )\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>711234567</exampleNumber>
       </mobile>
@@ -8364,10 +17945,15 @@
         <exampleNumber>801234567</exampleNumber>
       </tollFree>
       <premiumRate>
-        <nationalNumberPattern>86\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>86[1-9]\d{6}</nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
         <exampleNumber>861234567</exampleNumber>
       </premiumRate>
+      <sharedCost>
+        <nationalNumberPattern>860\d{6}</nationalNumberPattern>
+        <possibleNumberPattern>\d{9}</possibleNumberPattern>
+        <exampleNumber>860123456</exampleNumber>
+      </sharedCost>
       <voip>
         <nationalNumberPattern>87\d{7}</nationalNumberPattern>
         <possibleNumberPattern>\d{9}</possibleNumberPattern>
@@ -8398,10 +17984,15 @@
         <exampleNumber>211234567</exampleNumber>
       </fixedLine>
       <mobile>
-        <!-- Adding extra prefixes 6[457-9] and 7[4-6] since SMS messages have
-        been successfully delivered to these numbers, and
-        numbers like this can be found on the Internet. -->
-        <nationalNumberPattern>9(?:55|6[4-9]|7[4-9])\d{6}</nationalNumberPattern>
+        <!-- Adding extra prefixes 6[457-9] and 7[4-6] since SMS messages have been successfully
+             delivered to these numbers, and numbers like this can be found on the Internet. -->
+        <nationalNumberPattern>
+          9(?:
+            55|
+            6[4-9]|
+            7[4-9]
+          )\d{6}
+        </nationalNumberPattern>
         <exampleNumber>955123456</exampleNumber>
       </mobile>
       <tollFree>
@@ -8417,41 +18008,145 @@
       <availableFormats>
         <!-- One-digit area codes -->
         <numberFormat pattern="([49])(\d{3})(\d{2,5})">
-          <leadingDigits>4|9[2-9]</leadingDigits>
+          <leadingDigits>
+            4|
+            9[2-9]
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <!-- Mobile numbers -->
         <numberFormat pattern="([179]\d)(\d{3})(\d{3,4})">
-          <leadingDigits>[19]1|7</leadingDigits>
+          <leadingDigits>
+            [19]1|
+            7
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <!-- Two-digit area codes -->
         <numberFormat pattern="([1-356]\d)(\d{3,5})">
-          <leadingDigits>1[3-9]|2(?:[1-469]|0[0-35-9]|[45][0-79])|3(?:0[0-79]|1[0-689]|[24-69]|3[0-69])|5(?:[02-46-9]|[15][0-69])|6(?:[0145]|[29][0-79]|3[0-689]|[68][0-69])</leadingDigits>
+          <leadingDigits>
+            1[3-9]|
+            2(?:
+              [1-469]|
+              0[0-35-9]|
+              [45][0-79]
+            )|
+            3(?:
+              0[0-79]|
+              1[0-689]|
+              [24-69]|
+              3[0-69]
+            )|
+            5(?:
+              [02-46-9]|
+              [15][0-69]
+            )|
+            6(?:
+              [0145]|
+              [29][0-79]|
+              3[0-689]|
+              [68][0-69]
+            )
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="([1-356]\d)(\d{3})(\d{3})">
-          <leadingDigits>1[3-9]|2(?:[1-469]|0[0-35-9]|[45][0-79])|3(?:0[0-79]|1[0-689]|[24-69]|3[0-69])|5(?:[02-46-9]|[15][0-69])|6(?:[0145]|[29][0-79]|3[0-689]|[68][0-69])</leadingDigits>
+          <leadingDigits>
+            1[3-9]|
+            2(?:
+              [1-469]|
+              0[0-35-9]|
+              [45][0-79]
+            )|
+            3(?:
+              0[0-79]|
+              1[0-689]|
+              [24-69]|
+              3[0-69]
+            )|
+            5(?:
+              [02-46-9]|
+              [15][0-69]
+            )|
+            6(?:
+              [0145]|
+              [29][0-79]|
+              3[0-689]|
+              [68][0-69]
+            )
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <!-- Three-digit area codes -->
         <numberFormat pattern="([2356]\d{2})(\d{3,5})">
-          <leadingDigits>2(?:[278]|0[45]|48)|3(?:08|17|3[78]|[78])|5[15][78]|6(?:[29]8|37|[68][78])</leadingDigits>
+          <leadingDigits>
+            2(?:
+              [278]|
+              0[45]|
+              48
+            )|
+            3(?:
+              08|
+              17|
+              3[78]|
+              [78]
+            )|
+            5[15][78]|
+            6(?:
+              [29]8|
+              37|
+              [68][78]
+            )
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="([2356]\d{2})(\d{3})(\d{3})">
-          <leadingDigits>2(?:[278]|0[45]|48)|3(?:08|17|3[78]|[78])|5[15][78]|6(?:[29]8|37|[68][78])</leadingDigits>
+          <leadingDigits>
+            2(?:
+              [278]|
+              0[45]|
+              48
+            )|
+            3(?:
+              08|
+              17|
+              3[78]|
+              [78]
+            )|
+            5[15][78]|
+            6(?:
+              [29]8|
+              37|
+              [68][78]
+            )
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <!-- Four-digit area codes -->
         <numberFormat pattern="([25]\d{3})(\d{3,5})">
-          <leadingDigits>(?:25|54)8</leadingDigits>
-          <leadingDigits>258[23]|5483</leadingDigits>
+          <leadingDigits>
+            (?:
+              25|
+              54
+            )8
+          </leadingDigits>
+          <leadingDigits>
+            258[23]|
+            5483
+          </leadingDigits>
           <format>$1 $2</format>
         </numberFormat>
         <numberFormat pattern="([25]\d{3})(\d{3})(\d{3})">
-          <leadingDigits>(?:25|54)8</leadingDigits>
-          <leadingDigits>258[23]|5483</leadingDigits>
+          <leadingDigits>
+            (?:
+              25|
+              54
+            )8
+          </leadingDigits>
+          <leadingDigits>
+            258[23]|
+            5483
+          </leadingDigits>
           <format>$1 $2 $3</format>
         </numberFormat>
         <!-- VOIP numbers -->
@@ -8461,35 +18156,97 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <!-- A complicated nationalNumberPattern is necessary here, since the
-        numbers are extremely variable in length and the possible prefixes clash
-        with the country code. -->
+        <!-- A complicated nationalNumberPattern is necessary here, since the numbers are extremely
+             variable in length and the possible prefixes clash with the country code. -->
         <nationalNumberPattern>
-          2(?:[012457-9]\d{3,8}|6\d{3,6})|
+          2(?:
+            [012457-9]\d{3,8}|
+            6\d{3,6}
+          )|
           [13-79]\d{4,8}|
           86\d{8}
         </nationalNumberPattern>
         <possibleNumberPattern>\d{3,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
-        <!-- Numbering is grouped by subscriber-number length.-->
+        <!-- Numbering is grouped by subscriber-number length. -->
         <nationalNumberPattern>
-          (?:1[3-9]|2(?:0[45]|[16]|2[28]|[49]8?|58[23]|7[246]|8[1346-9])|3(?:08?|17?|3[78]|[2456]|7[1569]|8[379])|5(?:[07-9]|1[78]|483|5(?:7?|8))|6(?:0|28|37?|[45][68][78]|98?)|848)\d{3,6}|
-          (?:2(?:27|5|7[135789]|8[25])|3[39]|5[1-46]|6[126-8])\d{4,6}|
-          2(?:0|70)\d{5,6}|
-          (?:4\d|9[2-8])\d{4,7}
+          (?:
+            1[3-9]|
+            2(?:
+              0[45]|
+              [16]|
+              2[28]|
+              [49]8?|
+              58[23]|
+              7[246]|
+              8[1346-9]
+            )|
+            3(?:
+              08?|
+              17?|
+              3[78]|
+              [2456]|
+              7[1569]|
+              8[379]
+            )|
+            5(?:
+              [07-9]|
+              1[78]|
+              483|
+              5(?:
+                7?|
+                8
+              )
+            )|
+            6(?:
+              0|
+              28|
+              37?|
+              [45][68][78]|
+              98?
+            )|
+            848
+          )\d{3,6}|
+          (?:
+            2(?:
+              27|
+              5|
+              7[135789]|
+              8[25]
+            )|
+            3[39]|
+            5[1-46]|
+            6[126-8]
+          )\d{4,6}|
+          2(?:
+            0|
+            70
+          )\d{5,6}|
+          (?:
+            4\d|
+            9[2-8]
+          )\d{4,7}
         </nationalNumberPattern>
-        <possibleNumberPattern>\d{3,10}</possibleNumberPattern>
         <exampleNumber>1312345</exampleNumber>
       </fixedLine>
       <mobile>
-        <nationalNumberPattern>(?:[19]1|7[13])\d{6,7}</nationalNumberPattern>
-        <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
-        <exampleNumber>911234567</exampleNumber>
+        <nationalNumberPattern>7[137]\d{7}</nationalNumberPattern>
+        <possibleNumberPattern>\d{9}</possibleNumberPattern>
+        <exampleNumber>711234567</exampleNumber>
       </mobile>
-      <!-- No tollFree or premiumRate information can be found.-->
+      <!-- No tollFree or premiumRate information can be found. -->
       <voip>
-        <nationalNumberPattern>86(?:1[12]|22|30|44|8[367]|99)\d{6}</nationalNumberPattern>
+        <nationalNumberPattern>
+          86(?:
+            1[12]|
+            22|
+            30|
+            44|
+            8[367]|
+            99
+          )\d{6}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
         <exampleNumber>8686123456</exampleNumber>
       </voip>
diff --git a/java/resources/com/google/i18n/phonenumbers/test/PhoneNumberMetaDataForTesting.xml b/java/resources/com/google/i18n/phonenumbers/test/PhoneNumberMetaDataForTesting.xml
index 8604fa5..c2b0dd8 100644
--- a/java/resources/com/google/i18n/phonenumbers/test/PhoneNumberMetaDataForTesting.xml
+++ b/java/resources/com/google/i18n/phonenumbers/test/PhoneNumberMetaDataForTesting.xml
@@ -29,7 +29,6 @@
     <!-- Angola -->
     <!-- This country has been coopted to test the case of a national prefix
     with a non-numeric symbol in it. -->
-      
     <territory id="AO" countryCode="244" internationalPrefix="00" nationalPrefix="0~0">
       <availableFormats>
         <numberFormat pattern="(\d{3})(\d{3})(\d{3})">
@@ -559,7 +558,10 @@
         </numberFormat>
       </availableFormats>
       <generalDesc>
-        <nationalNumberPattern>[2-9]\d{7,9}</nationalNumberPattern>
+        <nationalNumberPattern>
+          [289]\d{7,9}|
+          [3-7]\d{7}
+        </nationalNumberPattern>
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
       </generalDesc>
       <fixedLine>
@@ -703,8 +705,13 @@
         <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
         <exampleNumber>1234567890</exampleNumber>
       </generalDesc>
+      <noInternationalDialling>
+        <!-- This range is added for testing purposes only. -->
+        <nationalNumberPattern>800\d{7}</nationalNumberPattern>
+        <possibleNumberPattern>\d{10}</possibleNumberPattern>
+      </noInternationalDialling>
       <tollFree>
-        <nationalNumberPattern>8(00|66|77|88)\d{7}</nationalNumberPattern>
+        <nationalNumberPattern>8(?:00|66|77|88)\d{7}</nationalNumberPattern>
         <possibleNumberPattern>\d{10}</possibleNumberPattern>
       </tollFree>
       <premiumRate>
diff --git a/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java b/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
index d546685..9f00392 100644
--- a/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
+++ b/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
@@ -47,9 +47,13 @@
  * @author Lara Rennie
  */
 public class PhoneNumberUtil {
+  /** Flags to use when compiling regular expressions for phone numbers. */
+  static final int REGEX_FLAGS = Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE;
   // The minimum and maximum length of the national significant number.
   private static final int MIN_LENGTH_FOR_NSN = 3;
-  private static final int MAX_LENGTH_FOR_NSN = 15;
+  static final int MAX_LENGTH_FOR_NSN = 15;
+  // The maximum length of the country code.
+  static final int MAX_LENGTH_COUNTRY_CODE = 3;
   static final String META_DATA_FILE_PREFIX =
       "/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto";
   static final String COUNTRY_CODE_TO_REGION_CODE_MAP_CLASS_NAME =
@@ -68,6 +72,8 @@
   // load factor of roughly 0.75.
   private final Set<String> supportedCountries = new HashSet<String>(300);
 
+  // Region-code for the unknown region.
+  private static final String UNKNOWN_REGION = "ZZ";
 
   // The set of countries that share country code 1.
   // There are roughly 26 countries of them and we set the initial capacity of the HashSet to 35
@@ -94,33 +100,43 @@
     digitMap.put('0', '0');
     digitMap.put('\uFF10', '0');  // Fullwidth digit 0
     digitMap.put('\u0660', '0');  // Arabic-indic digit 0
+    digitMap.put('\u06F0', '0');  // Eastern-Arabic digit 0
     digitMap.put('1', '1');
     digitMap.put('\uFF11', '1');  // Fullwidth digit 1
     digitMap.put('\u0661', '1');  // Arabic-indic digit 1
+    digitMap.put('\u06F1', '1');  // Eastern-Arabic digit 1
     digitMap.put('2', '2');
     digitMap.put('\uFF12', '2');  // Fullwidth digit 2
     digitMap.put('\u0662', '2');  // Arabic-indic digit 2
+    digitMap.put('\u06F2', '2');  // Eastern-Arabic digit 2
     digitMap.put('3', '3');
     digitMap.put('\uFF13', '3');  // Fullwidth digit 3
     digitMap.put('\u0663', '3');  // Arabic-indic digit 3
+    digitMap.put('\u06F3', '3');  // Eastern-Arabic digit 3
     digitMap.put('4', '4');
     digitMap.put('\uFF14', '4');  // Fullwidth digit 4
     digitMap.put('\u0664', '4');  // Arabic-indic digit 4
+    digitMap.put('\u06F4', '4');  // Eastern-Arabic digit 4
     digitMap.put('5', '5');
     digitMap.put('\uFF15', '5');  // Fullwidth digit 5
     digitMap.put('\u0665', '5');  // Arabic-indic digit 5
+    digitMap.put('\u06F5', '5');  // Eastern-Arabic digit 5
     digitMap.put('6', '6');
     digitMap.put('\uFF16', '6');  // Fullwidth digit 6
     digitMap.put('\u0666', '6');  // Arabic-indic digit 6
+    digitMap.put('\u06F6', '6');  // Eastern-Arabic digit 6
     digitMap.put('7', '7');
     digitMap.put('\uFF17', '7');  // Fullwidth digit 7
     digitMap.put('\u0667', '7');  // Arabic-indic digit 7
+    digitMap.put('\u06F7', '7');  // Eastern-Arabic digit 7
     digitMap.put('8', '8');
     digitMap.put('\uFF18', '8');  // Fullwidth digit 8
     digitMap.put('\u0668', '8');  // Arabic-indic digit 8
+    digitMap.put('\u06F8', '8');  // Eastern-Arabic digit 8
     digitMap.put('9', '9');
     digitMap.put('\uFF19', '9');  // Fullwidth digit 9
     digitMap.put('\u0669', '9');  // Arabic-indic digit 9
+    digitMap.put('\u06F9', '9');  // Eastern-Arabic digit 9
     DIGIT_MAPPINGS = Collections.unmodifiableMap(digitMap);
 
     HashMap<Character, Character> alphaMap = new HashMap<Character, Character>(40);
@@ -169,7 +185,11 @@
     aSet.add(227);  // Niger
     aSet.add(228);  // Togo
     aSet.add(241);  // Gabon
+    aSet.add(242);  // Congo (Rep. of the)
+    aSet.add(268);  // Swaziland
+    aSet.add(378);  // San Marino
     aSet.add(379);  // Vatican City
+    aSet.add(501);  // Belize
     LEADING_ZERO_COUNTRIES = Collections.unmodifiableSet(aSet);
   }
 
@@ -187,17 +207,17 @@
   // This consists of dash characters, white space characters, full stops, slashes,
   // square brackets, parentheses and tildes. It also includes the letter 'x' as that is found as a
   // placeholder for carrier information in some phone numbers.
-  private static final String VALID_PUNCTUATION = "-x\u2010-\u2015\u2212\uFF0D-\uFF0F " +
+  static final String VALID_PUNCTUATION = "-x\u2010-\u2015\u2212\u30FC\uFF0D-\uFF0F " +
       "\u00A0\u200B\u2060\u3000()\uFF08\uFF09\uFF3B\uFF3D.\\[\\]/~\u2053\u223C\uFF5E";
 
-  // Digits accepted in phone numbers
+  // Digits accepted in phone numbers that we understand.
   private static final String VALID_DIGITS =
-      Arrays.toString(DIGIT_MAPPINGS.keySet().toArray()).replaceAll(", ", "");
+      Arrays.toString(DIGIT_MAPPINGS.keySet().toArray()).replaceAll("[, \\[\\]]", "");
   // We accept alpha characters in phone numbers, ASCII only, upper and lower case.
   private static final String VALID_ALPHA =
-      Arrays.toString(ALPHA_MAPPINGS.keySet().toArray()).replaceAll(", ", "") +
-      Arrays.toString(ALPHA_MAPPINGS.keySet().toArray()).toLowerCase().replaceAll(", ", "");
-  private static final String PLUS_CHARS = "+\uFF0B";
+      Arrays.toString(ALPHA_MAPPINGS.keySet().toArray()).replaceAll("[, \\[\\]]", "") +
+      Arrays.toString(ALPHA_MAPPINGS.keySet().toArray()).toLowerCase().replaceAll("[, \\[\\]]", "");
+  static final String PLUS_CHARS = "+\uFF0B";
   private static final Pattern PLUS_CHARS_PATTERN = Pattern.compile("[" + PLUS_CHARS + "]+");
   private static final Pattern CAPTURING_DIGIT_PATTERN =
       Pattern.compile("([" + VALID_DIGITS + "])");
@@ -217,7 +237,7 @@
   // actually two phone numbers, (530) 583-6985 x302 and (530) 583-6985 x2303. We remove the second
   // extension so that the first number is parsed correctly.
   private static final String SECOND_NUMBER_START = "[\\\\/] *x";
-  private static final Pattern SECOND_NUMBER_START_PATTERN = Pattern.compile(SECOND_NUMBER_START);
+  static final Pattern SECOND_NUMBER_START_PATTERN = Pattern.compile(SECOND_NUMBER_START);
 
   // Regular expression of trailing characters that we want to remove. We remove all characters that
   // are not alpha or numerical characters. The hash character is retained here, as it may signify
@@ -237,9 +257,10 @@
   // the start.
   // Corresponds to the following:
   // plus_sign*([punctuation]*[digits]){3,}([punctuation]|[digits]|[alpha])*
+  // Note VALID_PUNCTUATION starts with a -, so must be the first in the range.
   private static final String VALID_PHONE_NUMBER =
       "[" + PLUS_CHARS + "]*(?:[" + VALID_PUNCTUATION + "]*[" + VALID_DIGITS + "]){3,}[" +
-      VALID_ALPHA + VALID_PUNCTUATION + VALID_DIGITS + "]*";
+      VALID_PUNCTUATION + VALID_ALPHA + VALID_DIGITS + "]*";
 
   // Default extension prefix to use when formatting. This will be put in front of any extension
   // component of the number, after the main national number is formatted. For example, if you wish
@@ -255,7 +276,11 @@
   // the extension is written with a hash at the end, such as "- 503#".
   // Note that the only capturing groups should be around the digits that you want to capture as
   // part of the extension, or else parsing will fail!
-  private static final String KNOWN_EXTN_PATTERNS = "[ \u00A0\\t,]*(?:ext(?:ensio)?n?|" +
+  // Canonical-equivalence doesn't seem to be an option with Android java, so we allow two options
+  // for representing the accented o - the character itself, and one in the unicode decomposed form
+  // with the combining acute accent.
+  static final String KNOWN_EXTN_PATTERNS = "[ \u00A0\\t,]*" +
+      "(?:ext(?:ensi(?:o\u0301?|\u00F3))?n?|" +
       "\uFF45\uFF58\uFF54\uFF4E?|[,x\uFF58#\uFF03~\uFF5E]|int|anexo|\uFF49\uFF4E\uFF54)" +
       "[:\\.\uFF0E]?[ \u00A0\\t,-]*([" + VALID_DIGITS + "]{1,7})#?|[- ]+([" + VALID_DIGITS +
       "]{1,5})#";
@@ -263,14 +288,12 @@
   // Regexp of all known extension prefixes used by different countries followed by 1 or more valid
   // digits, for use when parsing.
   private static final Pattern EXTN_PATTERN =
-      Pattern.compile("(?:" + KNOWN_EXTN_PATTERNS + ")$",
-                      Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
+      Pattern.compile("(?:" + KNOWN_EXTN_PATTERNS + ")$", REGEX_FLAGS);
 
   // We append optionally the extension pattern to the end here, as a valid phone number may
   // have an extension prefix appended, followed by 1 or more digits.
   private static final Pattern VALID_PHONE_NUMBER_PATTERN =
-      Pattern.compile(VALID_PHONE_NUMBER + "(?:" + KNOWN_EXTN_PATTERNS + ")?",
-                      Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
+      Pattern.compile(VALID_PHONE_NUMBER + "(?:" + KNOWN_EXTN_PATTERNS + ")?", REGEX_FLAGS);
 
   private static final Pattern NON_DIGITS_PATTERN = Pattern.compile("(\\D+)");
   private static final Pattern FIRST_GROUP_PATTERN = Pattern.compile("(\\$1)");
@@ -327,6 +350,9 @@
     // http://en.wikipedia.org/wiki/Personal_Numbers
     PERSONAL_NUMBER,
     PAGER,
+    // Used for "Universal Access Numbers" or "Company Numbers". They may be further routed to
+    // specific offices, but allow one number to be used for a company.
+    UAN,
     // A phone number is of type UNKNOWN when it does not fit any of the known patterns for a
     // specific country.
     UNKNOWN
@@ -336,6 +362,7 @@
    * Types of phone number matches. See detailed description beside the isNumberMatch() method.
    */
   public enum MatchType {
+    NOT_A_NUMBER,
     NO_MATCH,
     SHORT_NSN_MATCH,
     NSN_MATCH,
@@ -369,7 +396,7 @@
   private void loadMetadataForRegionFromFile(String filePrefix, String regionCode) {
     InputStream source =
         PhoneNumberUtil.class.getResourceAsStream(filePrefix + "_" + regionCode);
-    ObjectInputStream in = null;
+    ObjectInputStream in;
     try {
       in = new ObjectInputStream(source);
       PhoneMetadataCollection metadataCollection = new PhoneMetadataCollection();
@@ -379,13 +406,6 @@
       }
     } catch (IOException e) {
       LOGGER.log(Level.WARNING, e.toString());
-    } finally {
-      if (in != null) {
-        try {
-          in.close();
-        } catch (IOException e) {
-        }
-      }
     }
   }
 
@@ -490,8 +510,8 @@
 
   /**
    * Converts all alpha characters in a number to their respective digits on a keypad, but retains
-   * existing formatting. Also converts wide-ascii digits to normal ascii digits, and converts
-   * Arabic-Indic numerals to European numerals.
+   * existing formatting. This Java implementation of this function also converts wide-ascii digits
+   * to normal ascii digits, and converts Arabic-Indic numerals to European numerals.
    */
   public static String convertAlphaCharactersInNumber(String number) {
     return normalizeHelper(number, ALL_NORMALIZATION_MAPPINGS, false);
@@ -540,9 +560,7 @@
       return 0;
     }
     PhoneMetadata metadata = getMetadataForRegion(regionCode);
-    // For NANPA countries, national prefix is the same as country code, but it is not stored in
-    // the metadata.
-    if (!metadata.hasNationalPrefix() && !isNANPACountry(regionCode)) {
+    if (!metadata.hasNationalPrefix()) {
       return 0;
     }
 
@@ -553,6 +571,39 @@
       return 0;
     }
 
+    return getLengthOfNationalDestinationCode(number);
+  }
+
+  /**
+   * Gets the length of the national destination code (NDC) from the PhoneNumber object passed in,
+   * so that clients could use it to split a national significant number into NDC and subscriber
+   * number. The NDC of a phone number is normally the first group of digit(s) right after the
+   * country code when the number is formatted in the international format, if there is a subscriber
+   * number part that follows. An example of how this could be used:
+   *
+   * PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
+   * PhoneNumber number = phoneUtil.parse("18002530000", "US");
+   * String nationalSignificantNumber = PhoneNumberUtil.getNationalSignificantNumber(number);
+   * String nationalDestinationCode;
+   * String subscriberNumber;
+   *
+   * int nationalDestinationCodeLength = phoneUtil.getLengthOfNationalDestinationCode(number);
+   * if (nationalDestinationCodeLength > 0) {
+   *   nationalDestinationCode = nationalSignificantNumber.substring(0,
+   *       nationalDestinationCodeLength);
+   *   subscriberNumber = nationalSignificantNumber.substring(nationalDestinationCodeLength);
+   * } else {
+   *   nationalDestinationCode = "";
+   *   subscriberNumber = nationalSignificantNumber;
+   * }
+   *
+   * Refer to the unittests to see the difference between this function and
+   * getLengthOfGeographicalAreaCode().
+   *
+   * @param number  the PhoneNumber object for which clients want to know the length of the NDC.
+   * @return  the length of NDC of the PhoneNumber object passed in.
+   */
+  public int getLengthOfNationalDestinationCode(PhoneNumber number) {
     PhoneNumber copiedProto;
     if (number.hasExtension()) {
       // We don't want to alter the proto given to us, but we don't want to include the extension
@@ -573,6 +624,17 @@
     if (numberGroups.length <= 3) {
       return 0;
     }
+
+    if (getRegionCodeForNumber(number).equals("AR") &&
+        getNumberType(number) == PhoneNumberType.MOBILE) {
+      // Argentinian mobile numbers, when formatted in the international format, are in the form of
+      // +54 9 NDC XXXX.... As a result, we take the length of the third group (NDC) and add 1 for
+      // the digit 9, which also forms part of the national significant number.
+      //
+      // TODO: Investigate the possibility of better modeling the metadata to make it
+      // easier to obtain the NDC.
+      return numberGroups[3].length() + 1;
+    }
     return numberGroups[2].length();
   }
 
@@ -1078,6 +1140,8 @@
         return metadata.getPersonalNumber();
       case PAGER:
         return metadata.getPager();
+      case UAN:
+        return metadata.getUan();
       default:
         return metadata.getGeneralDesc();
     }
@@ -1123,6 +1187,9 @@
     if (isNumberMatchingDesc(nationalNumber, metadata.getPager())) {
       return PhoneNumberType.PAGER;
     }
+    if (isNumberMatchingDesc(nationalNumber, metadata.getUan())) {
+      return PhoneNumberType.UAN;
+    }
 
     boolean isFixedLine = isNumberMatchingDesc(nationalNumber, metadata.getFixedLine());
     if (isFixedLine) {
@@ -1172,8 +1239,7 @@
    */
   public boolean isValidNumber(PhoneNumber number) {
     String regionCode = getRegionCodeForNumber(number);
-    return isValidRegionCode(regionCode)
-           && isValidNumberForRegion(number, regionCode);
+    return (isValidRegionCode(regionCode) && isValidNumberForRegion(number, regionCode));
   }
 
   /**
@@ -1253,7 +1319,7 @@
    */
   public String getRegionCodeForCountryCode(int countryCode) {
     List<String> regionCodes = countryCodeToRegionCodeMap.get(countryCode);
-    return regionCodes == null ? "ZZ" : regionCodes.get(0);
+    return regionCodes == null ? UNKNOWN_REGION : regionCodes.get(0);
   }
 
   /**
@@ -1405,15 +1471,14 @@
    *
    * @param number  the number that needs to be checked, in the form of a string
    * @param countryDialingFrom  the ISO 3166-1 two-letter country code that denotes
-   *            the country that we are expecting the number to be dialed from.
-   *            Note this is different from the country where the number belongs.
-   *            For example, the number +1 650 253 0000 is a number that belongs to US.
-   *            When written in this form, it could be dialed from any country.
-   *            When it is written as 00 1 650 253 0000, it could be dialed from
-   *            any country which has international prefix 00. When it is written as
-   *            650 253 0000, it could only be dialed from US, and when written as
-   *            253 0000, it could only be dialed from US (Mountain View, CA, to be
-   *            more specific).
+   *     the country that we are expecting the number to be dialed from.
+   *     Note this is different from the country where the number belongs. For example, the number
+   *     +1 650 253 0000 is a number that belongs to US. When written in this form, it could be
+   *     dialed from any country. When it is written as 00 1 650 253 0000, it could be dialed from
+   *     any country which uses an international dialling prefix of 00. When it is written as 650
+   *     253 0000, it could only be dialed from within the US, and when written as 253 0000, it
+   *     could only be dialed from within a smaller area in the US (Mountain View, CA, to be more
+   *     specific).
    * @return  true if the number is possible
    */
   public boolean isPossibleNumber(String number, String countryDialingFrom) {
@@ -1469,7 +1534,7 @@
   int extractCountryCode(StringBuffer fullNumber, StringBuffer nationalNumber) {
     int potentialCountryCode;
     int numberLength = fullNumber.length();
-    for (int i = 1; i <= 3 && i <= numberLength; i++) {
+    for (int i = 1; i <= MAX_LENGTH_COUNTRY_CODE && i <= numberLength; i++) {
       potentialCountryCode = Integer.parseInt(fullNumber.substring(0, i));
       if (countryCodeToRegionCodeMap.containsKey(potentialCountryCode)) {
         nationalNumber.append(fullNumber.substring(i));
@@ -1612,12 +1677,12 @@
    * the resulting number, and indicates if an international prefix was present.
    *
    * @param number  the non-normalized telephone number that we wish to strip any international
-   *     dialing prefix from
+   *     dialing prefix from.
    * @param possibleIddPrefix  the international direct dialing prefix from the country we
    *     think this number may be dialed in
    * @return  the corresponding CountryCodeSource if an international dialing prefix could be
    *          removed from the number, otherwise CountryCodeSource.FROM_DEFAULT_COUNTRY if the
-   *          number did not seem to be in international format
+   *          number did not seem to be in international format.
    */
   CountryCodeSource maybeStripInternationalPrefixAndNormalize(
       StringBuffer number,
@@ -1721,6 +1786,22 @@
   }
 
   /**
+   * Checks to see that the region code used is valid, or if it is not valid, that the number to
+   * parse starts with a + symbol so that we can attempt to infer the country from the number.
+   * Returns false if it cannot use the region provided and the region cannot be inferred.
+   */
+  private boolean checkRegionForParsing(String numberToParse, String defaultCountry) {
+    if (!isValidRegionCode(defaultCountry)) {
+      // If the number is null or empty, we can't guess the country code.
+      if (numberToParse == null || numberToParse.length() == 0 ||
+          !PLUS_CHARS_PATTERN.matcher(numberToParse).lookingAt()) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  /**
    * Parses a string and returns it in proto buffer format. This method will throw a
    * NumberParseException exception if the number is not considered to be a possible number. Note
    * that validation of whether the number is actually a valid number for a particular
@@ -1751,13 +1832,7 @@
   // decrease object creation when invoked many times.
   public void parse(String numberToParse, String defaultCountry, PhoneNumber phoneNumber)
       throws NumberParseException {
-    if (!isValidRegionCode(defaultCountry)) {
-      if (numberToParse.length() > 0 && numberToParse.charAt(0) != PLUS_SIGN) {
-        throw new NumberParseException(NumberParseException.ErrorType.INVALID_COUNTRY_CODE,
-                                       "Missing or invalid default country.");
-      }
-    }
-    parseHelper(numberToParse, defaultCountry, false, phoneNumber);
+    parseHelper(numberToParse, defaultCountry, false, true, phoneNumber);
   }
 
   /**
@@ -1788,23 +1863,22 @@
   public void parseAndKeepRawInput(String numberToParse, String defaultCountry,
                                    PhoneNumber phoneNumber)
       throws NumberParseException {
-    if (!isValidRegionCode(defaultCountry)) {
-      if (numberToParse.length() > 0 && numberToParse.charAt(0) != PLUS_SIGN) {
-        throw new NumberParseException(NumberParseException.ErrorType.INVALID_COUNTRY_CODE,
-                                       "Missing or invalid default country.");
-      }
-    }
-    parseHelper(numberToParse, defaultCountry, true, phoneNumber);
+    parseHelper(numberToParse, defaultCountry, true, true, phoneNumber);
   }
 
   /**
    * Parses a string and fills up the phoneNumber. This method is the same as the public
    * parse() method, with the exception that it allows the default country to be null, for use by
-   * isNumberMatch().
+   * isNumberMatch(). checkRegion should be set to false if it is permitted for the default country
+   * to be null or unknown ("ZZ").
    */
-  private void parseHelper(String numberToParse, String defaultCountry,
-                           boolean keepRawInput, PhoneNumber phoneNumber)
+  private void parseHelper(String numberToParse, String defaultCountry, boolean keepRawInput,
+                           boolean checkRegion, PhoneNumber phoneNumber)
       throws NumberParseException {
+    if (numberToParse == null) {
+      throw new NumberParseException(NumberParseException.ErrorType.NOT_A_NUMBER,
+                                     "The phone number supplied was null.");
+    }
     // Extract a possible number from the string passed in (this strips leading characters that
     // could not be the start of a phone number.)
     String number = extractPossibleNumber(numberToParse);
@@ -1813,6 +1887,13 @@
                                      "The string supplied did not seem to be a phone number.");
     }
 
+    // Check the country supplied is valid, or that the extracted number starts with some sort of +
+    // sign so the number's region can be determined.
+    if (checkRegion && !checkRegionForParsing(number, defaultCountry)) {
+      throw new NumberParseException(NumberParseException.ErrorType.INVALID_COUNTRY_CODE,
+                                     "Missing or invalid default country.");
+    }
+
     if (keepRawInput) {
       phoneNumber.setRawInput(numberToParse);
     }
@@ -1969,18 +2050,35 @@
    *     specified with + at the start.
    * @param secondNumber  second number to compare. Can contain formatting, and can have country
    *     code specified with + at the start.
-   * @return  NO_MATCH, SHORT_NSN_MATCH, NSN_MATCH, EXACT_MATCH. See isNumberMatch(PhoneNumber
-   *     firstNumber, PhoneNumber secondNumber) for more details.
-   * @throws NumberParseException  if either number is not considered to be a viable phone
-   *     number
+   * @return  NOT_A_NUMBER, NO_MATCH, SHORT_NSN_MATCH, NSN_MATCH, EXACT_MATCH. See
+   *     isNumberMatch(PhoneNumber firstNumber, PhoneNumber secondNumber) for more details.
    */
-  public MatchType isNumberMatch(String firstNumber, String secondNumber)
-      throws NumberParseException {
-    PhoneNumber number1 = new PhoneNumber();
-    parseHelper(firstNumber, null, false, number1);
-    PhoneNumber number2 = new PhoneNumber();
-    parseHelper(secondNumber, null, false, number2);
-    return isNumberMatch(number1, number2);
+  public MatchType isNumberMatch(String firstNumber, String secondNumber) {
+    try {
+      PhoneNumber firstNumberAsProto = parse(firstNumber, UNKNOWN_REGION);
+      return isNumberMatch(firstNumberAsProto, secondNumber);
+    } catch (NumberParseException e) {
+      if (e.getErrorType() == NumberParseException.ErrorType.INVALID_COUNTRY_CODE) {
+        try {
+          PhoneNumber secondNumberAsProto = parse(secondNumber, UNKNOWN_REGION);
+          return isNumberMatch(secondNumberAsProto, firstNumber);
+        } catch (NumberParseException e2) {
+          if (e2.getErrorType() == NumberParseException.ErrorType.INVALID_COUNTRY_CODE) {
+            try {
+              PhoneNumber firstNumberProto = new PhoneNumber();
+              PhoneNumber secondNumberProto = new PhoneNumber();
+              parseHelper(firstNumber, null, false, false, firstNumberProto);
+              parseHelper(secondNumber, null, false, false, secondNumberProto);
+              return isNumberMatch(firstNumberProto, secondNumberProto);
+            } catch (NumberParseException e3) {
+              // Fall through and return MatchType.NOT_A_NUMBER.
+            }
+          }
+        }
+      }
+    }
+    // One or more of the phone numbers we are trying to match is not a viable phone number.
+    return MatchType.NOT_A_NUMBER;
   }
 
   /**
@@ -1990,15 +2088,61 @@
    * @param firstNumber  first number to compare in proto buffer format.
    * @param secondNumber  second number to compare. Can contain formatting, and can have country
    *     code specified with + at the start.
-   * @return  NO_MATCH, SHORT_NSN_MATCH, NSN_MATCH, EXACT_MATCH. See isNumberMatch(PhoneNumber
-   *     firstNumber, PhoneNumber secondNumber) for more details.
-   * @throws NumberParseException  if the second number is not considered to be a viable phone
-   *     number
+   * @return  NOT_A_NUMBER, NO_MATCH, SHORT_NSN_MATCH, NSN_MATCH, EXACT_MATCH. See
+   *     isNumberMatch(PhoneNumber firstNumber, PhoneNumber secondNumber) for more details.
    */
-  public MatchType isNumberMatch(PhoneNumber firstNumber, String secondNumber)
-      throws NumberParseException {
-    PhoneNumber number2 = new PhoneNumber();
-    parseHelper(secondNumber, null, false, number2);
-    return isNumberMatch(firstNumber, number2);
+  public MatchType isNumberMatch(PhoneNumber firstNumber, String secondNumber) {
+    // First see if the second number has an implicit country code, by attempting to parse it.
+    try {
+      PhoneNumber secondNumberAsProto = parse(secondNumber, UNKNOWN_REGION);
+      return isNumberMatch(firstNumber, secondNumberAsProto);
+    } catch (NumberParseException e) {
+      if (e.getErrorType() == NumberParseException.ErrorType.INVALID_COUNTRY_CODE) {
+        // The second number has no country code. EXACT_MATCH is no longer possible.
+        // We parse it as if the region was the same as that for the first number, and if
+        // EXACT_MATCH is returned, we replace this with NSN_MATCH.
+        String firstNumberRegion = getRegionCodeForCountryCode(firstNumber.getCountryCode());
+        try {
+          if (!firstNumberRegion.equals(UNKNOWN_REGION)) {
+            PhoneNumber secondNumberWithFirstNumberRegion = parse(secondNumber, firstNumberRegion);
+            MatchType match = isNumberMatch(firstNumber, secondNumberWithFirstNumberRegion);
+            if (match == MatchType.EXACT_MATCH) {
+              return MatchType.NSN_MATCH;
+            }
+            return match;
+          } else {
+            // If the first number didn't have a valid country code, then we parse the second number
+            // without one as well.
+            PhoneNumber secondNumberProto = new PhoneNumber();
+            parseHelper(secondNumber, null, false, false, secondNumberProto);
+            return isNumberMatch(firstNumber, secondNumberProto);
+          }
+        } catch (NumberParseException e2) {
+          // Fall-through to return NOT_A_NUMBER.
+        }
+      }
+    }
+    // One or more of the phone numbers we are trying to match is not a viable phone number.
+    return MatchType.NOT_A_NUMBER;
+  }
+
+  /**
+   * Returns true if the number can only be dialled from within the country. If unknown, or the
+   * number can be dialled from outside the country as well, returns false. Does not check the
+   * number is a valid number.
+   * TODO: Make this method public when we have enough metadata to make it worthwhile. Currently
+   * visible for testing purposes only.
+   *
+   * @param number  the phone-number for which we want to know whether it is only diallable from
+   *     within the country
+   */
+  boolean canBeInternationallyDialled(PhoneNumber number) {
+    String regionCode = getRegionCodeForNumber(number);
+    String nationalSignificantNumber = getNationalSignificantNumber(number);
+    if (!isValidRegionCode(regionCode)) {
+      return true;
+    }
+    PhoneMetadata metadata = getMetadataForRegion(regionCode);
+    return !isNumberMatchingDesc(nationalSignificantNumber, metadata.getNoInternationalDialling());
   }
 }
diff --git a/java/src/com/google/i18n/phonenumbers/Phonemetadata.java b/java/src/com/google/i18n/phonenumbers/Phonemetadata.java
index 0c1aea0..98dd52f 100644
--- a/java/src/com/google/i18n/phonenumbers/Phonemetadata.java
+++ b/java/src/com/google/i18n/phonenumbers/Phonemetadata.java
@@ -374,6 +374,34 @@
       return this;
     }
 
+    // required PhoneNumberDesc uan = 25;
+    private boolean hasUan;
+    private PhoneNumberDesc uan_ = null;
+    public boolean hasUan() { return hasUan; }
+    public PhoneNumberDesc getUan() { return uan_; }
+    public PhoneMetadata setUan(PhoneNumberDesc value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      hasUan = true;
+      uan_ = value;
+      return this;
+    }
+
+    // required PhoneNumberDesc noInternationalDialling = 24;
+    private boolean hasNoInternationalDialling;
+    private PhoneNumberDesc noInternationalDialling_ = null;
+    public boolean hasNoInternationalDialling() { return hasNoInternationalDialling; }
+    public PhoneNumberDesc getNoInternationalDialling() { return noInternationalDialling_; }
+    public PhoneMetadata setNoInternationalDialling(PhoneNumberDesc value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      hasNoInternationalDialling = true;
+      noInternationalDialling_ = value;
+      return this;
+    }
+
     // required string id = 9;
     private boolean hasId;
     private String id_ = "";
@@ -568,6 +596,14 @@
       if (hasPager) {
         pager_.writeExternal(objectOutput);
       }
+      objectOutput.writeBoolean(hasUan);
+      if (hasUan) {
+        uan_.writeExternal(objectOutput);
+      }
+      objectOutput.writeBoolean(hasNoInternationalDialling);
+      if (hasNoInternationalDialling) {
+        noInternationalDialling_.writeExternal(objectOutput);
+      }
 
       objectOutput.writeUTF(id_);
       objectOutput.writeInt(countryCode_);
@@ -675,6 +711,18 @@
         desc.readExternal(objectInput);
         setPager(desc);
       }
+      hasDesc = objectInput.readBoolean();
+      if (hasDesc) {
+        PhoneNumberDesc desc = new PhoneNumberDesc();
+        desc.readExternal(objectInput);
+        setUan(desc);
+      }
+      hasDesc = objectInput.readBoolean();
+      if (hasDesc) {
+        PhoneNumberDesc desc = new PhoneNumberDesc();
+        desc.readExternal(objectInput);
+        setNoInternationalDialling(desc);
+      }
 
       setId(objectInput.readUTF());
       setCountryCode(objectInput.readInt());
diff --git a/java/src/com/google/i18n/phonenumbers/Phonenumber.java b/java/src/com/google/i18n/phonenumbers/Phonenumber.java
index 42a8dcd..608a3b4 100644
--- a/java/src/com/google/i18n/phonenumbers/Phonenumber.java
+++ b/java/src/com/google/i18n/phonenumbers/Phonenumber.java
@@ -174,12 +174,39 @@
     }
 
     public boolean exactlySameAs(PhoneNumber other) {
+      if (other == null) {
+        return false;
+      }
+      if (this == other) {
+        return true;
+      }
       return (countryCode_ == other.countryCode_ && nationalNumber_ == other.nationalNumber_ &&
           extension_.equals(other.extension_) && italianLeadingZero_ == other.italianLeadingZero_ &&
           rawInput_.equals(other.rawInput_) && countryCodeSource_ == other.countryCodeSource_);
     }
 
     @Override
+    public boolean equals(Object that) {
+      return (that instanceof PhoneNumber) && exactlySameAs((PhoneNumber) that);
+    }
+
+    @Override
+    public int hashCode() {
+      // Simplified rendition of the hashCode function automatically generated from the proto
+      // compiler with java_generate_equals_and_hash set to true. We are happy with unset values to
+      // be considered equal to their explicitly-set equivalents, so don't check if any value is
+      // unknown.
+      int hash = 41;
+      hash = (53 * hash) + getCountryCode();
+      hash = (53 * hash) + Long.valueOf(getNationalNumber()).hashCode();
+      hash = (53 * hash) + getExtension().hashCode();
+      hash = (53 * hash) + (getItalianLeadingZero() ? 1231 : 1237);
+      hash = (53 * hash) + getRawInput().hashCode();
+      hash = (53 * hash) + getCountryCodeSource().hashCode();
+      return hash;
+    }
+
+    @Override
     public String toString() {
       StringBuffer outputString = new StringBuffer();
       outputString.append("Country Code: ").append(countryCode_);
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AD b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AD
index 616dae9..62b3b29 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AD
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AD
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AE
index 597d55b..cce7540 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF
index d5c3985..6922340 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG
index d9c73d6..f0b7c4f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI
index 6306b89..403d693 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AL b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AL
index 9ace69a..560b677 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AL
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AL
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM
index 0fc855a..e1488b3 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AN
index f6cca2f..73a83e8 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO
index 83acb24..304cb0a 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
index 7c15410..44a3b68 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS
index a24dea9..8728b28 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT
index 54e77bc..f2b645c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU
index b00eedd..0fa61dd 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AW b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AW
index 8eae2ed..1c7842e 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AW
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AW
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ
index f1d442e..ca83c98 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BA
index 8517a81..3c9e268 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB
index f569daf..0b60e57 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD
index a7d04c2..872fc63 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE
index 925aa03..b0074bf 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
index 99e001a..1fc75cc 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG
index e437c93..ed3913d 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH
index 6559332..a7b67c4 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BI
index db71deb..40ecfcb 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ
index 3ed5c44..1fb8318 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BL b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BL
index 276bbbc..de4b804 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BL
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BL
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM
index 58e3e3a..f51c6f7 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BN
index 2b56da6..0fe3d38 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BO
index 577f505..191b55c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR
index 741d8b7..7fc1610 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS
index 2dc1ad3..e72eaac 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BT
index c5abdd1..c04cc47 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW
index a88ea9f..752f852 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY
index 0ef9b4d..91b8207 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ
index a890dcc..ec98a81 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
index ddb61ae..08a19c1 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CD b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CD
index bfdfe3b..029f0e9 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CD
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CD
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CF
index 7ad9c1f..440ee17 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CG
index 0ad281c..dfc82a1 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CH b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CH
index b9ec90d..b9781b3 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CH
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CH
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI
index 728b344..c647c3d 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CK b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CK
index a02cd7a..2ce83c2 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CK
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CK
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL
index a5068d8..e6bb05e 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM
index 48d9209..414c1dd 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
index f0e924b..aeb8224 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
index ec43e3a..84926a1 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR
index 699410d..1b3a91c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU
index 6566563..58728b9 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CV b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CV
index 348260b..40f6819 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CV
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CV
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CY
index d59197b..6e910fa 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CZ
index 9fd84fc..8e4bc85 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE
index a2fc820..657ff37 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ
index b9e8dc6..195b880 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK
index 294013b..84b40d6 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM
index 2232772..2f46834 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO
index 4876adb..0100b93 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ
index 809e4a2..9551e58 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC
index edb880d..5078020 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE
index dcb5b6c..45242fe 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG
index dc2b772..1b383cb 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ER b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ER
index 5dee5f6..7207396 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ER
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ER
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ES b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ES
index 85d0e22..81c67e2 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ES
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ES
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET
index 45587df..6c1a588 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FI
index f544b38..925e740 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ
index 9756031..dfc6432 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FK b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FK
index b10ad65..9630d47 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FK
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FK
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FM
index 13fbbac..f3f3699 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO
index b76288c..f75752f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR
index af320de..2b16dea 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA
index 21886c6..f923cae 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB
index e3ab079..9f4e327 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD
index 7324f18..f2e6c56 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE
index 13f26f3..fd894c5 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF
index b904357..e82b26c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG
index 8692082..ae3cec7 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH
index 1295bdd..82ff8e4 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GI
index b597b4b..63a685f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GL b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GL
index a0934bc..f8dc2b0 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GL
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GL
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GM
index 09f0f45..27ce34f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GN
index 284d882..dde6c53 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP
index e9302aa..f6108ee 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GQ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GQ
index 455e8ae..c3bd13e 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GQ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GQ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR
index 7797c75..ed28df8 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GT
index 82c4d1d..b91516c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU
index 321994f..237d37a 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GW b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GW
index a5c64f6..a755f36 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GW
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GW
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GY
index d11ba6d..10f48a7 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK
index aa8066c..01b773d 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN
index 305ac3f..502c311 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR
index 3a0bbe8..3089e8b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HT
index 610a2d4..11abb56 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU
index e0b9d9b..90009c0 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID
index 704fffe..0c2803e 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IE
index 2edbe88..706aedd 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL
index 7657feb..d39b391 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IM
index fb263ec..30bb20e 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN
index 6c8638e..60dd9da 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IO
index a8da3f4..f15346f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IQ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IQ
index 18d3ab2..ab713bb 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IQ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IQ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR
index 2fbfb2d..35827c0 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS
index ac155c1..233e357 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT
index b3334c6..8c81e18 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE
index ca1fb4e..2e3c4d5 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM
index 5cff428..77c4efc 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO
index 45e5454..6c8e265 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP
index ab74bd8..230c63b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE
index ab8e987..bfd69a4 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
index a20e18d..06d1f7d 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH
index 2d186fe..0ddca18 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KI
index 8370801..377f39b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KM
index 2d6fe4f..a2d3de6 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN
index e97d232..863b3eb 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KP b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KP
index 74310f1..eccdf9e 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KP
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KP
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR
index 978e7d9..641ce7f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW
index 5cc81d8..3d5cd85 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY
index 2640b9e..754551b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ
index feec65c..b0b73df 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA
index 4d0bedb..e0c1ec1 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB
index 2d11a0c..ab97154 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC
index 565e3d3..296fe41 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI
index 03207a1..37693c5 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LK b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LK
index 528b89a..4092102 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LK
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LK
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LR
index a6d98d1..c5cfee6 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LS b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LS
index aaafe00..ca98900 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LS
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LS
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LT
index 47f2228..43b750c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LU
index 2b9e4a8..e3b025f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LV b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LV
index 9293298..631d6f2 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LV
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LV
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LY
index f0433fd..6fb9f25 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
index 7781aeb..bf69698 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MC b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MC
index 66f0d76..61e560f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MC
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MC
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD
index 9b7ff42..edc5d0f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ME b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ME
index 80be441..056305b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ME
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ME
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MF
index 5138d37..29c214b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MG
index 7b38ca3..b0c8bf2 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH
index b8d3d45..131f198 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK
index 5401cbb..9b94a61 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML
index 73cc6dc..d1efd0f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM
index f0be7e4..8c35059 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN
index 9fe3e04..0d76175 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MO
index f0fbe00..a72a4bc 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP
index e50cceb..312659b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ
index c13fbbf..6a495d7 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MR
index e7c1c5d..fd21ea7 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS
index a8b0e10..c1ad3b3 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT
index 8bae5e4..9dcbbbf 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MU
index f6ae6ee..782c700 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV
index ef2343e..49e9b28 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW
index aeb8334..4529ee1 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX
index c09bbf4..c857d1d 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY
index 9ba15d7..47e64ec 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MZ
index 3320fb1..6ae79b9 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA
index b87e997..046be15 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC
index b5e235a..a6ce4d0 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NE
index 9654c4d..05e12c3 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NF
index 544eef3..e4ef5e8 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG
index ddb825f..09939ff 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI
index 42181d3..5eb33fe 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL
index e85597f..79c8741 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO
index 7f32771..de77f88 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP
index fc42a3f..74caa04 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NR
index 1ed47df..72e46b3 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NU
index fb8ea16..d33aa7a 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ
index 71b1d94..20dc762 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM
index 9f31d3f..aa0e794 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA
index 7a7f1b4..c8c2c76 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE
index 472ee30..45de89d 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF
index 921e217..30924a4 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG
index 5350b0c..067b499 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH
index 39910ad..5810c29 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK
index ac19177..a7a82f7 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL
index 1adeefd..2d51c34 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM
index f108d30..e645cd2 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR
index b6139f1..335b318 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PS b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PS
index dc8b00f..21b9986 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PS
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PS
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT
index 3903c9c..bb7270f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PW b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PW
index f0fbeb9..d65d876 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PW
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PW
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PY
index 546d531..0735436 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA
index 3415b66..4717ebd 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE
index 3f9a186..fa0ccb4 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RO
index 6f16215..595878e 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RS b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RS
index 6b0d501..cc359b1 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RS
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RS
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU
index 1c713a3..9589b84 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RW b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RW
index 9b9f1d6..63319ce 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RW
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RW
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA
index df752f2..ec5abcc 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB
index fa3af2f..464b8ec 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC
index 6a0ef37..d852806 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD
index 05dafe7..34968f0 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE
index a857f7e..fb42a83 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG
index 399191b..9071c3f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SH b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SH
index df0fa34..96e6c73 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SH
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SH
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI
index e592b21..927774b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK
index 862ba16..b755b5c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL
index ee6c80f..c3fd293 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SM
index 60532b7..ea97ce1 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN
index 48518c5..535afa3 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO
index c58bcf3..334be74 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SR
index 1acc4d5..b563d07 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ST b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ST
index 4cf121b..29b7d36 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ST
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ST
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SV b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SV
index 1530fe3..0a299cf 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SV
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SV
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY
index bf87161..9c547de 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SZ
index 2d43434..663f11a 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC
index b22f359..8034cbd 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TD b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TD
index e37f5ee..cfde8b7 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TD
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TD
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TF
index b434ff2..d18541d 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TG
index 473a79c..d6b9654 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH
index 2148ca0..e7f2c33 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ
index f938797..5a3fd6f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TK b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TK
index bc3a14c..653d606 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TK
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TK
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TL b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TL
index 60b6a85..8b4378c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TL
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TL
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TM
index fef8dc0..c3c8de1 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN
index fa651eb..b9ffbfd 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TO
index 5de8915..4497b3f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TR
index beb2168..595e26c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
index 1943401..bdbaf96 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TV b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TV
index bc611bf..8cf631d 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TV
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TV
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TW b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TW
index e87da47..63963cf 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TW
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TW
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TZ
index d4bd4d0..0f99acb 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA
index 9fe9153..a5d2806 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG
index cddbc4a..4eb5563 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
index 3be038b..25b3668 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UY
index 0160ccf..2a198e6 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ
index 2349b7d..2a307b3 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VA
index 7da0693..a0be427 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC
index ac22b5f..ab04383 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VE
index 41e1cf6..3cc77d1 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
index b59311c..e7d7db7 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI
index de0ea6f..88428e8 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN
index 81fbb02..a463207 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VU
index d2499c0..a79ddef 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WF
index 47b706e..423e86d 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WS b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WS
index b4150e8..52fd0e7 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WS
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WS
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YE
index 0858848..e4e2e78 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT
index 824eb77..5d3b0f9 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA
index f4a82cc..19896c6 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM
index addba8d..99c8152 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZW b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZW
index 99b27ec..13aa728 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZW
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZW
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java b/java/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java
index bfc2132..1d83fa7 100644
--- a/java/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java
+++ b/java/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java
@@ -17,6 +17,7 @@
 package com.google.i18n.phonenumbers;
 
 import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberType;
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc;
 import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
 
 import junit.framework.TestCase;
@@ -127,8 +128,15 @@
   }
 
   public void testPager() throws Exception {
-    Set<PhoneNumberType> voipTypes = EnumSet.of(PhoneNumberType.PAGER);
-    checkNumbersValidAndCorrectType(PhoneNumberType.PAGER, voipTypes);
+    Set<PhoneNumberType> pagerTypes = EnumSet.of(PhoneNumberType.PAGER);
+    checkNumbersValidAndCorrectType(PhoneNumberType.PAGER, pagerTypes);
+    assertEquals(0, invalidCases.size());
+    assertEquals(0, wrongTypeCases.size());
+  }
+
+  public void testUan() throws Exception {
+    Set<PhoneNumberType> uanTypes = EnumSet.of(PhoneNumberType.UAN);
+    checkNumbersValidAndCorrectType(PhoneNumberType.UAN, uanTypes);
     assertEquals(0, invalidCases.size());
     assertEquals(0, wrongTypeCases.size());
   }
@@ -139,4 +147,23 @@
     assertEquals(0, invalidCases.size());
     assertEquals(0, wrongTypeCases.size());
   }
+
+  public void testCanBeInternationallyDialled() throws Exception {
+    for (String regionCode : phoneNumberUtil.getSupportedCountries()) {
+      PhoneNumber exampleNumber = null;
+      PhoneNumberDesc desc =
+          phoneNumberUtil.getMetadataForRegion(regionCode).getNoInternationalDialling();
+      try {
+        if (desc.hasExampleNumber()) {
+          exampleNumber = phoneNumberUtil.parse(desc.getExampleNumber(), regionCode);
+        }
+      } catch (NumberParseException e) {
+        LOGGER.log(Level.SEVERE, e.toString());
+      }
+      if (exampleNumber != null && phoneNumberUtil.canBeInternationallyDialled(exampleNumber)) {
+        wrongTypeCases.add(exampleNumber);
+      }
+    }
+    assertEquals(0, wrongTypeCases.size());
+  }
 }
diff --git a/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java b/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
index 1e96cdb..ffd6017 100644
--- a/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
+++ b/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
@@ -65,18 +65,6 @@
     super.tearDown();
   }
 
-  private void assertEquals(PhoneNumber number1, PhoneNumber number2) {
-    boolean equal = false;
-    if (number1 == null && number2 == null) {
-      equal = true;
-    } else if (number1 != null && number2 != null) {
-      equal = number1.exactlySameAs(number2);
-    }
-    if (!equal) {
-      fail("The phone numbers do not match");
-    }
-  }
-
   public void testGetInstanceLoadUSMetadata() {
     PhoneMetadata metadata = phoneUtil.getMetadataForRegion("US");
     assertEquals("US", metadata.getId());
@@ -169,6 +157,49 @@
     assertEquals(0, phoneUtil.getLengthOfGeographicalAreaCode(number));
   }
 
+  public void testGetLengthOfNationalDestinationCode() {
+    PhoneNumber number = new PhoneNumber();
+    // Google MTV, which has national destination code (NDC) "650".
+    number.setCountryCode(1).setNationalNumber(6502530000L);
+    assertEquals(3, phoneUtil.getLengthOfNationalDestinationCode(number));
+
+    // A North America toll-free number, which has NDC "800".
+    number.setCountryCode(1).setNationalNumber(8002530000L);
+    assertEquals(3, phoneUtil.getLengthOfNationalDestinationCode(number));
+
+    // Google London, which has NDC "20".
+    number.setCountryCode(44).setNationalNumber(2070313000L);
+    assertEquals(2, phoneUtil.getLengthOfNationalDestinationCode(number));
+
+    // A UK mobile phone, which has NDC "7123".
+    number.setCountryCode(44).setNationalNumber(7123456789L);
+    assertEquals(4, phoneUtil.getLengthOfNationalDestinationCode(number));
+
+    // Google Buenos Aires, which has NDC "11".
+    number.setCountryCode(54).setNationalNumber(1155303000L);
+    assertEquals(2, phoneUtil.getLengthOfNationalDestinationCode(number));
+
+    // An Argentinian mobile which has NDC "911".
+    number.setCountryCode(54).setNationalNumber(91155303001L);
+    assertEquals(3, phoneUtil.getLengthOfNationalDestinationCode(number));
+
+    // Google Sydney, which has NDC "2".
+    number.setCountryCode(61).setNationalNumber(293744000L);
+    assertEquals(1, phoneUtil.getLengthOfNationalDestinationCode(number));
+
+    // Google Singapore, which has NDC "6521".
+    number.setCountryCode(65).setNationalNumber(65218000L);
+    assertEquals(4, phoneUtil.getLengthOfNationalDestinationCode(number));
+
+    // An invalid US number (1 digit shorter), which has no NDC.
+    number.setCountryCode(1).setNationalNumber(650253000L);
+    assertEquals(0, phoneUtil.getLengthOfNationalDestinationCode(number));
+
+    // A number containing an invalid country code, which shouldn't have any NDC.
+    number.setCountryCode(123).setNationalNumber(6502530000L);
+    assertEquals(0, phoneUtil.getLengthOfNationalDestinationCode(number));
+  }
+
   public void testGetNationalSignificantNumber() {
     PhoneNumber number = new PhoneNumber();
     number.setCountryCode(1).setNationalNumber(6502530000L);
@@ -225,6 +256,12 @@
     assertEquals("Conversion did not correctly replace non-latin digits",
                  expectedOutput,
                  PhoneNumberUtil.normalize(inputNumber));
+    // Eastern-Arabic digits.
+    inputNumber = "\u06F52\u06F0";
+    expectedOutput = "520";
+    assertEquals("Conversion did not correctly replace non-latin digits",
+                 expectedOutput,
+                 PhoneNumberUtil.normalize(inputNumber));
   }
 
   public void testNormaliseStripAlphaCharacters() {
@@ -411,8 +448,6 @@
                  phoneUtil.formatOutOfCountryCallingNumber(arNumber, "AU"));
     assertEquals("011 15 8765-4321 ext. 1234",
                  phoneUtil.formatOutOfCountryCallingNumber(arNumber, "AR"));
-    assertEquals("011 15 8765-4321 ext. 1234",
-                 phoneUtil.formatOutOfCountryCallingNumber(arNumber, "ar"));
   }
 
   public void testFormatOutOfCountryWithPreferredIntlPrefix() {
@@ -790,7 +825,6 @@
     assertEquals(0, phoneUtil.getCountryCodeForRegion("CS"));
   }
 
-  @SuppressWarnings("deprecation")
   public void testGetNationalDiallingPrefixForRegion() {
     assertEquals("1", phoneUtil.getNddPrefixForRegion("US", false));
     // Test non-main country to see it gets the national dialling prefix for the main country with
@@ -1273,6 +1307,10 @@
     assertEquals(usNumber, phoneUtil.parse("\uFF0B\uFF11\u3000\uFF08\uFF16\uFF15\uFF10\uFF09" +
                                            "\u3000\uFF13\uFF13\uFF13\uFF0D\uFF16\uFF10\uFF10\uFF10",
                                            "SG"));
+    // Using U+30FC dash instead.
+    assertEquals(usNumber, phoneUtil.parse("\uFF0B\uFF11\u3000\uFF08\uFF16\uFF15\uFF10\uFF09" +
+                                           "\u3000\uFF13\uFF13\uFF13\u30FC\uFF16\uFF10\uFF10\uFF10",
+                                           "SG"));
   }
 
   public void testParseWithLeadingZero() throws Exception {
@@ -1481,6 +1519,31 @@
                    NumberParseException.ErrorType.NOT_A_NUMBER,
                    e.getErrorType());
     }
+    try {
+      String nullNumber = null;
+      // Invalid region.
+      phoneUtil.parse(nullNumber, "ZZ");
+      fail("Null string - should fail.");
+    } catch (NumberParseException e) {
+      // Expected this exception.
+      assertEquals("Wrong error type stored in exception.",
+                   NumberParseException.ErrorType.NOT_A_NUMBER,
+                   e.getErrorType());
+    } catch (NullPointerException e) {
+      fail("Null string - but should not throw a null pointer exception.");
+    }
+    try {
+      String nullNumber = null;
+      phoneUtil.parse(nullNumber, "US");
+      fail("Null string - should fail.");
+    } catch (NumberParseException e) {
+      // Expected this exception.
+      assertEquals("Wrong error type stored in exception.",
+                   NumberParseException.ErrorType.NOT_A_NUMBER,
+                   e.getErrorType());
+    } catch (NullPointerException e) {
+      fail("Null string - but should not throw a null pointer exception.");
+    }
   }
 
   public void testParseNumbersWithPlusWithNoRegion() throws Exception {
@@ -1489,6 +1552,10 @@
     // "ZZ" is allowed only if the number starts with a '+' - then the country code can be
     // calculated.
     assertEquals(nzNumber, phoneUtil.parse("+64 3 331 6005", "ZZ"));
+    // Test with full-width plus.
+    assertEquals(nzNumber, phoneUtil.parse("\uFF0B64 3 331 6005", "ZZ"));
+    // Test with normal plus but leading characters that need to be stripped.
+    assertEquals(nzNumber, phoneUtil.parse("Tel: +64 3 331 6005", "ZZ"));
     assertEquals(nzNumber, phoneUtil.parse("+64 3 331 6005", null));
     nzNumber.setRawInput("+64 3 331 6005").
         setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN);
@@ -1534,6 +1601,11 @@
     assertEquals(usWithExtension, phoneUtil.parse("(800) 901-3355 , ext 7246433", "US"));
     assertEquals(usWithExtension,
                  phoneUtil.parse("(800) 901-3355 ,extension 7246433", "US"));
+    assertEquals(usWithExtension,
+                 phoneUtil.parse("(800) 901-3355 ,extensi\u00F3n 7246433", "US"));
+    // Repeat with the small letter o with acute accent created by combining characters.
+    assertEquals(usWithExtension,
+                 phoneUtil.parse("(800) 901-3355 ,extensio\u0301n 7246433", "US"));
     assertEquals(usWithExtension, phoneUtil.parse("(800) 901-3355 , 7246433", "US"));
     assertEquals(usWithExtension, phoneUtil.parse("(800) 901-3355 ext: 7246433", "US"));
 
@@ -1672,6 +1744,17 @@
     // NSN matches, but extension is different - not the same number.
     assertEquals(PhoneNumberUtil.MatchType.NO_MATCH,
                  phoneUtil.isNumberMatch("+64 3 331-6005 ext.1235", "3 331 6005#1234"));
+
+    // Invalid numbers that can't be parsed.
+    assertEquals(PhoneNumberUtil.MatchType.NOT_A_NUMBER,
+                 phoneUtil.isNumberMatch("43", "3 331 6043"));
+    // Invalid numbers that can't be parsed.
+    assertEquals(PhoneNumberUtil.MatchType.NOT_A_NUMBER,
+                 phoneUtil.isNumberMatch("+43", "+64 3 331 6005"));
+    assertEquals(PhoneNumberUtil.MatchType.NOT_A_NUMBER,
+                 phoneUtil.isNumberMatch("+43", "64 3 331 6005"));
+    assertEquals(PhoneNumberUtil.MatchType.NOT_A_NUMBER,
+                 phoneUtil.isNumberMatch("Dog", "64 3 331 6005"));
   }
 
   public void testIsNumberMatchNsnMatches() throws Exception {
@@ -1684,10 +1767,35 @@
     nzNumber.setCountryCode(64).setNationalNumber(33316005L).setExtension("");
     assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH,
                  phoneUtil.isNumberMatch(nzNumber, "03 331 6005"));
+    // Here the second number possibly starts with the country code for New Zealand, although we are
+    // unsure.
+    assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH,
+                 phoneUtil.isNumberMatch(nzNumber, "(64-3) 331 6005"));
     PhoneNumber unchangedNzNumber = new PhoneNumber();
     unchangedNzNumber.setCountryCode(64).setNationalNumber(33316005L).setExtension("");
     // Check the phone number proto was not edited during the method call.
     assertEquals(unchangedNzNumber, nzNumber);
+
+    // Here, the 1 might be a national prefix, if we compare it to the US number, so the resultant
+    // match is an NSN match.
+    PhoneNumber usNumber = new PhoneNumber();
+    usNumber.setCountryCode(1).setNationalNumber(2345678901L).setExtension("");
+    assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH,
+                 phoneUtil.isNumberMatch(usNumber, "1-234-567-8901"));
+    assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH,
+                 phoneUtil.isNumberMatch(usNumber, "2345678901"));
+    assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH,
+                 phoneUtil.isNumberMatch("+1 234-567 8901", "1 234 567 8901"));
+    assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH,
+                 phoneUtil.isNumberMatch("1 234-567 8901", "1 234 567 8901"));
+    assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH,
+                 phoneUtil.isNumberMatch("1 234-567 8901", "+1 234 567 8901"));
+    // For this case, the match will be a short NSN match, because we cannot assume that the 1 might
+    // be a national prefix, so don't remove it when parsing.
+    PhoneNumber randomNumber = new PhoneNumber();
+    randomNumber.setCountryCode(41).setNationalNumber(2345678901L).setExtension("");
+    assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH,
+                 phoneUtil.isNumberMatch(randomNumber, "1-234-567-8901"));
   }
 
   public void testIsNumberMatchShortNsnMatches() throws Exception {
@@ -1721,4 +1829,25 @@
     assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH,
                  phoneUtil.isNumberMatch(italianNumberOne, italianNumberTwo));
   }
+
+  public void testCanBeInternationallyDialled() throws Exception {
+    // We have no-international-dialling rules for the US in our test metadata.
+    PhoneNumber usNumber = new PhoneNumber();
+    usNumber.setCountryCode(1).setNationalNumber(8001231234L);
+    assertFalse(phoneUtil.canBeInternationallyDialled(usNumber));
+
+    PhoneNumber usInternationalNumber = new PhoneNumber();
+    usInternationalNumber.setCountryCode(1).setNationalNumber(2311231234L);
+    assertTrue(phoneUtil.canBeInternationallyDialled(usInternationalNumber));
+
+    PhoneNumber usInvalidNumber = new PhoneNumber();
+    // Invalid number.
+    usInvalidNumber.setCountryCode(1).setNationalNumber(13112312L);
+    assertTrue(phoneUtil.canBeInternationallyDialled(usInvalidNumber));
+
+    // We have no data for NZ - should return true.
+    PhoneNumber nzNumber = new PhoneNumber();
+    nzNumber.setCountryCode(64).setNationalNumber(33316005L);
+    assertTrue(phoneUtil.canBeInternationallyDialled(nzNumber));
+  }
 }
diff --git a/java/test/com/google/i18n/phonenumbers/PhonenumberTest.java b/java/test/com/google/i18n/phonenumbers/PhonenumberTest.java
new file mode 100644
index 0000000..b77b9d1
--- /dev/null
+++ b/java/test/com/google/i18n/phonenumbers/PhonenumberTest.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.i18n.phonenumbers;
+
+import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
+import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for the Phonenumber.PhoneNumber object itself.
+ *
+ * @author Lara Rennie
+ */
+public class PhonenumberTest extends TestCase {
+
+  public void testEqualsSimpleNumber() throws Exception {
+    PhoneNumber numberA = new PhoneNumber();
+    numberA.setCountryCode(1).setNationalNumber(6502530000L);
+
+    PhoneNumber numberB = new PhoneNumber();
+    numberB.setCountryCode(1).setNationalNumber(6502530000L);
+
+    assertEquals(numberA, numberB);
+    assertEquals(numberA.hashCode(), numberB.hashCode());
+  }
+
+  public void testEqualsWithOtherFields() throws Exception {
+    PhoneNumber numberA = new PhoneNumber();
+    numberA.setCountryCode(1).setNationalNumber(6502530000L).setItalianLeadingZero(false);
+
+    PhoneNumber numberB = new PhoneNumber();
+    numberB.setCountryCode(1).setNationalNumber(6502530000L);
+
+    // These should still be equal, since the default value for this field is false.
+    assertEquals(numberA, numberB);
+    assertEquals(numberA.hashCode(), numberB.hashCode());
+
+    numberA.setRawInput("+1 650 253 00 00").
+        setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN);
+    numberB.setRawInput("+1 650 253 00 00").
+        setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN);
+    assertEquals(numberA, numberB);
+    assertEquals(numberA.hashCode(), numberB.hashCode());
+  }
+
+  public void testNonEqualWithOtherFields() throws Exception {
+    PhoneNumber numberA = new PhoneNumber();
+    numberA.setCountryCode(1).setNationalNumber(6502530000L).setItalianLeadingZero(true);
+
+    PhoneNumber numberB = new PhoneNumber();
+    numberB.setCountryCode(1).setNationalNumber(6502530000L);
+
+    assertFalse(numberA.equals(numberB));
+    assertFalse(numberA.hashCode() == numberB.hashCode());
+  }
+
+  public void testNonEqualWithAllFields() throws Exception {
+    PhoneNumber numberA = new PhoneNumber();
+    numberA.setCountryCode(1).setNationalNumber(6502530000L).setRawInput("+1 650 253 00 00").
+        setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN);
+
+    PhoneNumber numberB = new PhoneNumber();
+    // Although these numbers would pass an isNumberMatch test, they are not considered "equal" as
+    // objects, since their raw input is different.
+    numberB.setCountryCode(1).setNationalNumber(6502530000L).setRawInput("+1-650-253-00-00").
+        setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN);
+
+    assertFalse(numberA.equals(numberB));
+    assertFalse(numberA.hashCode() == numberB.hashCode());
+  }
+}
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AD b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AD
index 8f72b95..f72b264 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AD
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AD
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AO b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AO
index 7620339..486d96d 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AO
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AO
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AR b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AR
index 68b2502..4a9b091 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AR
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AR
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AU b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AU
index 8a05649..8c20ebf 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AU
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AU
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BS b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BS
index f6f9f9c..d1a31b0 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BS
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BS
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_DE b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_DE
index 039192c..b2f1c5a 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_DE
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_DE
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_GB b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_GB
index 4a3747b..1d2b408 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_GB
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_GB
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_IT b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_IT
index 4865284..3cc5f04 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_IT
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_IT
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_JP b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_JP
index 4316297..7887d32 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_JP
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_JP
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_KR b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_KR
index 5bad0e2..aad7e41 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_KR
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_KR
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_MX b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_MX
index 98c475b..5857b91 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_MX
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_MX
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_NZ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_NZ
index 257c955..e330135 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_NZ
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_NZ
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_PL b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_PL
index c6a0cb6..0fd0d27 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_PL
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_PL
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_RE b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_RE
index 69e0bb7..6ec64af 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_RE
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_RE
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_SG b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_SG
index bb12d76..0836187 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_SG
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_SG
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_US b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_US
index 6070764..3db0e26 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_US
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_US
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_YT b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_YT
index 47e6e06..b9da104 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_YT
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_YT
Binary files differ