Enable CultureInfo netstandard 1.7 APIs on Linux (#7811)
authorTarek Mahmoud Sayed <tarekms@microsoft.com>
Wed, 26 Oct 2016 15:37:53 +0000 (08:37 -0700)
committerGitHub <noreply@github.com>
Wed, 26 Oct 2016 15:37:53 +0000 (08:37 -0700)
* Enable CultureInfo netstandard 1.7 APIs on Linux

* fix spaces

* Use Array.Empty<CultureInfo> instead of CultureInfo[0]

12 files changed:
src/corefx/System.Globalization.Native/locale.cpp
src/corefx/System.Globalization.Native/localeStringData.cpp
src/mscorlib/corefx/Interop/Unix/System.Globalization.Native/Interop.Locale.cs
src/mscorlib/corefx/SR.cs
src/mscorlib/corefx/System/Globalization/CultureData.Unix.cs
src/mscorlib/corefx/System/Globalization/CultureData.Windows.cs
src/mscorlib/corefx/System/Globalization/CultureData.cs
src/mscorlib/corefx/System/Globalization/CultureInfo.cs
src/mscorlib/corefx/System/Globalization/CultureTypes.cs [new file with mode: 0644]
src/mscorlib/corefx/System/Globalization/LocaleData.Unix.cs
src/mscorlib/corefx/System/Globalization/STUBS.cs
src/mscorlib/mscorlib.shared.sources.props

index 0a85ae1..951179d 100644 (file)
@@ -148,6 +148,56 @@ const char* DetectDefaultLocaleName()
     return uloc_getDefault();
 }
 
+// GlobalizationNative_GetLocales gets all locale names and store it in the value buffer
+// in case of success, it returns the count of the characters stored in value buffer  
+// in case of failure, it returns negative number.
+// if the input value buffer is null, it returns the length needed to store the 
+// locale names list.
+// if the value is not null, it fills the value with locale names separated by the length 
+// of each name. 
+extern "C" int32_t GlobalizationNative_GetLocales(UChar *value, int32_t valueLength)
+{
+    int32_t totalLength = 0;
+    int32_t index = 0;
+    int32_t localeCount = uloc_countAvailable();
+    
+    if (localeCount <=  0)
+        return -1; // failed
+    
+    for (int32_t i = 0; i < localeCount; i++)
+    {
+        const char *pLocaleName = uloc_getAvailable(i);
+        if (pLocaleName[0] == 0) // unexpected empty name
+            return -2;
+        
+        int32_t localeNameLength = strlen(pLocaleName);
+        
+        totalLength += localeNameLength + 1; // add 1 for the name length
+        
+        if (value != nullptr)
+        {
+            if (totalLength > valueLength)
+                return -3;
+            
+            value[index++] = (UChar) localeNameLength;
+            
+            for (int j=0; j<localeNameLength; j++)
+            {
+                if (pLocaleName[j] == '_') // fix the locale name  
+                {
+                    value[index++] = (UChar) '-';
+                }
+                else
+                {
+                    value[index++] = (UChar) pLocaleName[j];
+                }
+            }
+        }
+    }
+    
+    return totalLength;
+}
+
 extern "C" int32_t GlobalizationNative_GetLocaleName(const UChar* localeName, UChar* value, int32_t valueLength)
 {
     UErrorCode status = U_ZERO_ERROR;
index 54ef8f0..b8eaa30 100644 (file)
@@ -37,7 +37,8 @@ enum LocaleStringData : int32_t
     PMDesignator = 0x00000029,
     PositiveSign = 0x00000050,
     NegativeSign = 0x00000051,
-    Iso639LanguageName = 0x00000059,
+    Iso639LanguageTwoLetterName = 0x00000059,
+    Iso639LanguageThreeLetterName = 0x00000067,
     Iso3166CountryName = 0x0000005A,
     Iso3166CountryName2= 0x00000068,
     NaNSymbol = 0x00000069,
@@ -115,11 +116,11 @@ UErrorCode GetLocaleInfoAmPm(const char* locale, bool am, UChar* value, int32_t
 
 /*
 Function:
-GetLocaleIso639LanguageName
+GetLocaleIso639LanguageTwoLetterName
 
 Gets the language name for a locale (via uloc_getLanguage) and converts the result to UChars
 */
-UErrorCode GetLocaleIso639LanguageName(const char* locale, UChar* value, int32_t valueLength)
+UErrorCode GetLocaleIso639LanguageTwoLetterName(const char* locale, UChar* value, int32_t valueLength)
 {
     UErrorCode status = U_ZERO_ERROR;
     int32_t length = uloc_getLanguage(locale, nullptr, 0, &status);
@@ -139,6 +140,23 @@ UErrorCode GetLocaleIso639LanguageName(const char* locale, UChar* value, int32_t
 
 /*
 Function:
+GetLocaleIso639LanguageThreeLetterName
+
+Gets the language name for a locale (via uloc_getISO3Language) and converts the result to UChars
+*/
+UErrorCode GetLocaleIso639LanguageThreeLetterName(const char* locale, UChar* value, int32_t valueLength)
+{
+    const char *isoLanguage = uloc_getISO3Language(locale);
+    if (isoLanguage[0] == 0)
+    {
+        return U_ILLEGAL_ARGUMENT_ERROR;
+    }
+    
+    return u_charsToUChars_safe(isoLanguage, value, valueLength);
+}
+
+/*
+Function:
 GetLocaleIso3166CountryName
 
 Gets the country name for a locale (via uloc_getCountry) and converts the result to UChars
@@ -315,8 +333,11 @@ extern "C" int32_t GlobalizationNative_GetLocaleInfoString(
         case NegativeSign:
             status = GetLocaleInfoDecimalFormatSymbol(locale, UNUM_MINUS_SIGN_SYMBOL, value, valueLength);
             break;
-        case Iso639LanguageName:
-            status = GetLocaleIso639LanguageName(locale, value, valueLength);
+        case Iso639LanguageTwoLetterName:
+            status = GetLocaleIso639LanguageTwoLetterName(locale, value, valueLength);
+            break;
+        case Iso639LanguageThreeLetterName:
+            status = GetLocaleIso639LanguageThreeLetterName(locale, value, valueLength);
             break;
         case Iso3166CountryName:
             status = GetLocaleIso3166CountryName(locale, value, valueLength);
index 3912581..fcea708 100644 (file)
@@ -33,5 +33,8 @@ internal static partial class Interop
         [DllImport(Libraries.GlobalizationInterop, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_GetLocaleInfoGroupingSizes")]
         [return: MarshalAs(UnmanagedType.Bool)]
         internal unsafe static extern bool GetLocaleInfoGroupingSizes(string localeName, uint localeGroupingData, ref int primaryGroupSize, ref int secondaryGroupSize);
+
+        [DllImport(Libraries.GlobalizationInterop, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_GetLocales")]
+        internal unsafe static extern int GetLocales([Out] Char[] value, int valueLength);
     }
 }
index 1b32d92..df31607 100644 (file)
@@ -139,6 +139,11 @@ namespace System.Globalization
             get { return Environment.GetResourceString("Argument_ConflictingDateTimeStyles"); }
         }
 
+        public static string Argument_CultureIetfNotSupported
+        {
+            get { return Environment.GetResourceString("Argument_CultureIetfNotSupported"); }
+        }
+
         public static string Argument_CultureInvalidIdentifier
         {
             get { return Environment.GetResourceString("Argument_CultureInvalidIdentifier"); }
@@ -234,6 +239,11 @@ namespace System.Globalization
             get { return Environment.GetResourceString("Argument_NoRegionInvariantCulture"); }
         }
 
+        public static string Argument_OneOfCulturesNotSupported
+        {
+            get { return Environment.GetResourceString("Argument_OneOfCulturesNotSupported"); }
+        }
+
         public static string Argument_OnlyMscorlib
         {
             get { return Environment.GetResourceString("Argument_OnlyMscorlib"); }
index 71c943f..feb0c44 100644 (file)
@@ -67,7 +67,6 @@ namespace System.Globalization
                 _sName = _sWindowsName;
             }
             _sRealName = _sName;
-            _sSpecificCulture = _sRealName; // we don't attempt to find a non-neutral locale if a neutral is passed in (unlike win32)
 
             _iLanguage = this.ILANGUAGE;
             if (_iLanguage == 0)
@@ -76,7 +75,9 @@ namespace System.Globalization
             }
 
             _bNeutral = (this.SISO3166CTRYNAME.Length == 0);
-
+            
+            _sSpecificCulture = _bNeutral ? LocaleData.GetSpecificCultureName(_sRealName) : _sRealName;   
+            
             // Remove the sort from sName unless custom culture
             if (index>0 && !_bNeutral && !IsCustomCultureId(_iLanguage))
             {
@@ -345,5 +346,60 @@ namespace System.Globalization
             int digitSubstitution = LocaleData.GetLocaleDataNumericPart(cultureName, LocaleDataParts.DigitSubstitution);
             return digitSubstitution == -1 ? (int) DigitShapes.None : digitSubstitution; 
         }
+
+        private static string GetThreeLetterWindowsLanguageName(string cultureName)
+        {
+            string langName = LocaleData.GetThreeLetterWindowsLangageName(cultureName);
+            return langName == null ? "ZZZ" /* default lang name */ : langName; 
+        }
+
+        private static CultureInfo[] EnumCultures(CultureTypes types)
+        {
+            if ((types & (CultureTypes.NeutralCultures | CultureTypes.SpecificCultures)) == 0)
+            {
+                return Array.Empty<CultureInfo>();
+            }
+            
+            int bufferLength = Interop.GlobalizationInterop.GetLocales(null, 0);
+            if (bufferLength <= 0)
+            {
+                return Array.Empty<CultureInfo>();
+            }
+            
+            Char [] chars = new Char[bufferLength];
+            
+            bufferLength = Interop.GlobalizationInterop.GetLocales(chars, bufferLength);
+            if (bufferLength <= 0)
+            {
+                return Array.Empty<CultureInfo>();
+            }
+            
+            bool enumNeutrals   = (types & CultureTypes.NeutralCultures) != 0; 
+            bool enumSpecificss = (types & CultureTypes.SpecificCultures) != 0; 
+            
+            List<CultureInfo> list = new List<CultureInfo>();
+            if (enumNeutrals) 
+            {
+                list.Add(CultureInfo.InvariantCulture);
+            }
+            
+            int index = 0;
+            while (index < bufferLength)
+            {
+                int length = (int) chars[index++];
+                if (index + length <= bufferLength)
+                {
+                    CultureInfo ci = CultureInfo.GetCultureInfo(new String(chars, index, length));
+                    if ((enumNeutrals && ci.IsNeutralCulture) || (enumSpecificss && !ci.IsNeutralCulture))
+                    {
+                        list.Add(ci);
+                    }
+                }
+                
+                index += length;
+            }
+            
+            return list.ToArray();
+        }
     }
 }
index 7d6c703..2feaede 100644 (file)
@@ -597,5 +597,15 @@ namespace System.Globalization
         {
             throw new NotImplementedException();
         }
+        
+        private static string GetThreeLetterWindowsLanguageName(string cultureName)
+        {
+            throw new NotImplementedException();
+        }
+
+        private static CultureInfo[] EnumCultures(CultureTypes types)
+        {
+            throw new NotImplementedException();
+        }
     }
 }
index 62c1ff4..5bb32f7 100644 (file)
@@ -74,9 +74,11 @@ namespace System.Globalization
 
         // Language
         private String _sISO639Language; // ISO 639 Language Name
+        private String _sISO639Language2; // ISO 639 Language Name
         private String _sLocalizedLanguage; // Localized name for this language
         private String _sEnglishLanguage; // English name for this language
         private String _sNativeLanguage; // Native name of this language
+        private String _sAbbrevLang; // abbreviated language name (Windows Language Name) ex: ENU
 
         // Region
         private String _sRegionName; // (RegionInfo)
@@ -399,6 +401,42 @@ namespace System.Globalization
             return retVal;
         }
 
+        // Clear our internal caches
+        internal static void ClearCachedData()
+        {
+            s_cachedCultures = null;
+            s_cachedRegions = null;
+        }
+
+        internal static CultureInfo[] GetCultures(CultureTypes types)
+        {
+            // Disable  warning 618: System.Globalization.CultureTypes.FrameworkCultures' is obsolete
+#pragma warning disable 618
+            // Validate flags
+            if ((int)types <= 0 || ((int)types & (int)~(CultureTypes.NeutralCultures | CultureTypes.SpecificCultures |
+                                                        CultureTypes.InstalledWin32Cultures | CultureTypes.UserCustomCulture |
+                                                        CultureTypes.ReplacementCultures | CultureTypes.WindowsOnlyCultures |
+                                                        CultureTypes.FrameworkCultures)) != 0)
+            {
+                throw new ArgumentOutOfRangeException("types", 
+                              SR.Format(SR.ArgumentOutOfRange_Range, CultureTypes.NeutralCultures, CultureTypes.FrameworkCultures));
+            }
+
+            // We have deprecated CultureTypes.FrameworkCultures.
+            // When this enum is used, we will enumerate Whidbey framework cultures (for compatibility).
+            //
+
+            // We have deprecated CultureTypes.WindowsOnlyCultures.
+            // When this enum is used, we will return an empty array for this enum.
+            if ((types & CultureTypes.WindowsOnlyCultures) != 0)
+            {
+                // Remove the enum as it is an no-op.
+                types &= (~CultureTypes.WindowsOnlyCultures);
+            }
+            
+#pragma warning restore 618
+            return EnumCultures(types);
+        }
 
         /////////////////////////////////////////////////////////////////////////
         // Build our invariant information
@@ -430,9 +468,11 @@ namespace System.Globalization
 
                     // Language
                     invariant._sISO639Language = "iv";                   // ISO 639 Language Name
+                           invariant._sISO639Language2 = "ivl";                  // 3 char ISO 639 lang name 2
                     invariant._sLocalizedLanguage = "Invariant Language";   // Display name for this Language
                     invariant._sEnglishLanguage = "Invariant Language";   // English name for this language
                     invariant._sNativeLanguage = "Invariant Language";   // Native name of this language
+                           invariant._sAbbrevLang = "IVL";                  // abbreviated language name (Windows Language Name)
 
                     // Region
                     invariant._sRegionName = "IV";                    // (RegionInfo)
@@ -876,6 +916,17 @@ namespace System.Globalization
             }
         }
 
+        // The culture name to be used in CultureInfo.CreateSpecificCulture()
+        internal string SSPECIFICCULTURE
+        {
+            get
+            {
+                // This got populated during the culture initialization
+                Contract.Assert(_sSpecificCulture != null, "[CultureData.SSPECIFICCULTURE] Expected this.sSpecificCulture to be populated by culture data initialization already");
+                return _sSpecificCulture;
+            }
+        }
+
         /////////////
         // Language //
         /////////////
@@ -887,12 +938,39 @@ namespace System.Globalization
             {
                 if (_sISO639Language == null)
                 {
-                    _sISO639Language = GetLocaleInfo(LocaleStringData.Iso639LanguageName);
+                    _sISO639Language = GetLocaleInfo(LocaleStringData.Iso639LanguageTwoLetterName);
                 }
                 return _sISO639Language;
             }
         }
 
+        // iso 639 language name, ie: eng
+        internal string SISO639LANGNAME2
+        {
+            get
+            {
+                if (_sISO639Language2 == null)
+                {
+                    _sISO639Language2 = GetLocaleInfo(LocaleStringData.Iso639LanguageThreeLetterName);
+                }
+                return _sISO639Language2;
+            }
+        }
+
+        // abbreviated windows language name (ie: enu) (non-standard, avoid this)
+        internal string SABBREVLANGNAME
+        {
+            get
+            {
+                if (_sAbbrevLang == null)
+                {
+                    _sAbbrevLang = GetThreeLetterWindowsLanguageName(_sRealName);
+                }
+                return _sAbbrevLang;
+            }
+        }
+
+
         // Localized name for this language (Windows Only) ie: Inglis
         // This is only valid for Windows 8 and higher neutrals:
         internal String SLOCALIZEDLANGUAGE
@@ -2263,7 +2341,9 @@ namespace System.Globalization
             /// <summary>negative sign (coresponds to LOCALE_SNEGATIVESIGN)</summary>
             NegativeSign = 0x00000051,
             /// <summary>ISO abbreviated language name (coresponds to LOCALE_SISO639LANGNAME)</summary>
-            Iso639LanguageName = 0x00000059,
+            Iso639LanguageTwoLetterName = 0x00000059,
+            /// <summary>ISO abbreviated country name (coresponds to LOCALE_SISO639LANGNAME2)</summary>
+            Iso639LanguageThreeLetterName = 0x00000067,
             /// <summary>ISO abbreviated country name (coresponds to LOCALE_SISO3166CTRYNAME)</summary>
             Iso3166CountryName = 0x0000005A,
             /// <summary>3 letter ISO country code (coresponds to LOCALE_SISO3166CTRYNAME2)</summary>
index a5fa224..b81315b 100644 (file)
@@ -315,6 +315,66 @@ namespace System.Globalization
             return ci;
         }
 
+        //
+        // Return a specific culture.  A tad irrelevent now since we always return valid data
+        // for neutral locales.
+        //
+        // Note that there's interesting behavior that tries to find a smaller name, ala RFC4647,
+        // if we can't find a bigger name.  That doesn't help with things like "zh" though, so
+        // the approach is of questionable value
+        //
+        public static CultureInfo CreateSpecificCulture(String name)
+        {
+            Contract.Ensures(Contract.Result<CultureInfo>() != null);
+
+            CultureInfo culture;
+
+            try
+            {
+                culture = new CultureInfo(name);
+            }
+            catch (ArgumentException)
+            {
+                // When CultureInfo throws this exception, it may be because someone passed the form
+                // like "az-az" because it came out of an http accept lang. We should try a little
+                // parsing to perhaps fall back to "az" here and use *it* to create the neutral.
+
+                int idx;
+
+                culture = null;
+                for (idx = 0; idx < name.Length; idx++)
+                {
+                    if ('-' == name[idx])
+                    {
+                        try
+                        {
+                            culture = new CultureInfo(name.Substring(0, idx));
+                            break;
+                        }
+                        catch (ArgumentException)
+                        {
+                            // throw the original exception so the name in the string will be right
+                            throw;
+                        }
+                    }
+                }
+
+                if (culture == null)
+                {
+                    // nothing to save here; throw the original exception
+                    throw;
+                }
+            }
+
+            // In the most common case, they've given us a specific culture, so we'll just return that.
+            if (!(culture.IsNeutralCulture))
+            {
+                return culture;
+            }
+
+            return (new CultureInfo(culture.m_cultureData.SSPECIFICCULTURE));
+        }
+
         //        //
         //        // Return a specific culture.  A tad irrelevent now since we always return valid data
         //        // for neutral locales.
@@ -495,6 +555,20 @@ namespace System.Globalization
             }
         }
 
+        public static CultureInfo InstalledUICulture
+        {
+            get
+            {
+                Contract.Ensures(Contract.Result<CultureInfo>() != null);
+                if (s_userDefaultCulture == null)
+                {
+                    Init();
+                }
+                Contract.Assert(s_userDefaultCulture != null, "[CultureInfo.InstalledUICulture] s_userDefaultCulture != null");
+                return s_userDefaultCulture;
+            }
+        }
+
         public static CultureInfo DefaultThreadCurrentCulture
         {
             get { return s_DefaultThreadCurrentCulture; }
@@ -597,6 +671,18 @@ namespace System.Globalization
             }
         }
 
+        public static CultureInfo[] GetCultures(CultureTypes types)
+        {
+            Contract.Ensures(Contract.Result<CultureInfo[]>() != null);
+            // internally we treat UserCustomCultures as Supplementals but v2
+            // treats as Supplementals and Replacements
+            if((types & CultureTypes.UserCustomCulture) == CultureTypes.UserCustomCulture)
+            {
+                types |= CultureTypes.ReplacementCultures;
+            }
+            return (CultureData.GetCultures(types));
+        }
+
         ////////////////////////////////////////////////////////////////////////
         //
         //  Name
@@ -703,6 +789,32 @@ namespace System.Globalization
             }
         }
 
+        // ie: eng
+        public virtual String ThreeLetterISOLanguageName
+        {
+            get
+            {
+                Contract.Ensures(Contract.Result<String>() != null);
+                return m_cultureData.SISO639LANGNAME2;
+            }
+        }
+
+        ////////////////////////////////////////////////////////////////////////
+        //
+        //  ThreeLetterWindowsLanguageName
+        //
+        //  Returns the 3 letter windows language name for the current instance.  eg: "ENU"
+        //  The ISO names are much preferred
+        //
+        ////////////////////////////////////////////////////////////////////////
+        public virtual String ThreeLetterWindowsLanguageName
+        {
+            get
+            {
+                Contract.Ensures(Contract.Result<String>() != null);
+                return m_cultureData.SABBREVLANGNAME;
+            }
+        }
 
         ////////////////////////////////////////////////////////////////////////
         //
@@ -908,6 +1020,21 @@ namespace System.Globalization
             }
         }
 
+        public void ClearCachedData()
+        {
+            s_userDefaultCulture = null;
+
+            RegionInfo.s_currentRegionInfo = null;
+            #pragma warning disable 0618 // disable the obsolete warning 
+            TimeZone.ResetTimeZone();
+            #pragma warning restore 0618
+            TimeZoneInfo.ClearCachedData();
+            s_LcidCachedCultures = null;
+            s_NameCachedCultures = null;
+
+            CultureData.ClearCachedData();
+        }
+
         /*=================================GetCalendarInstance==========================
         **Action: Map a Win32 CALID to an instance of supported calendar.
         **Returns: An instance of calendar.
@@ -1013,12 +1140,11 @@ namespace System.Globalization
             }
         }
 
-
-        private bool UseUserOverride
+        public bool UseUserOverride
         {
             get
             {
-                return (this.m_cultureData.UseUserOverride);
+                return m_cultureData.UseUserOverride;
             }
         }
 
@@ -1317,6 +1443,55 @@ namespace System.Globalization
             }
             return retval;
         }
+
+        // Gets a cached copy of the specified culture from an internal hashtable (or creates it
+        // if not found).
+        public static CultureInfo GetCultureInfo(string name, string altName)
+        {
+            // Make sure we have a valid, non-zero length string as name
+            if (name == null)
+            {
+                throw new ArgumentNullException("name");
+            }
+
+            if (altName == null)
+            {
+                throw new ArgumentNullException("altName");
+            }
+            
+            Contract.Ensures(Contract.Result<CultureInfo>() != null);
+            Contract.EndContractBlock();
+
+            CultureInfo retval = GetCultureInfoHelper(-1, name, altName);
+            if (retval == null)
+            {
+                throw new CultureNotFoundException("name or altName",
+                                        SR.Format(SR.Argument_OneOfCulturesNotSupported, name, altName));
+            }
+            return retval;
+        }
+
+        // This function is deprecated, we don't like it
+        public static CultureInfo GetCultureInfoByIetfLanguageTag(string name)
+        {
+            Contract.Ensures(Contract.Result<CultureInfo>() != null);
+
+            // Disallow old zh-CHT/zh-CHS names
+            if (name == "zh-CHT" || name == "zh-CHS")
+            {
+                throw new CultureNotFoundException("name", SR.Format(SR.Argument_CultureIetfNotSupported, name));
+            }
+            
+            CultureInfo ci = GetCultureInfo(name);
+
+            // Disallow alt sorts and es-es_TS
+            if (ci.LCID > 0xffff || ci.LCID == 0x040a)
+            {
+                throw new CultureNotFoundException("name", SR.Format(SR.Argument_CultureIetfNotSupported, name));
+            }
+            
+            return ci;
+        }
     }
 }
 
diff --git a/src/mscorlib/corefx/System/Globalization/CultureTypes.cs b/src/mscorlib/corefx/System/Globalization/CultureTypes.cs
new file mode 100644 (file)
index 0000000..80b588a
--- /dev/null
@@ -0,0 +1,28 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+// The enumeration constants used in CultureInfo.GetCultures().
+// On Linux platforms, the only enum values used there is NeutralCultures and SpecificCultures 
+// the rest are obsolete or not valid on Linux
+
+namespace System.Globalization
+{    
+    [Serializable]
+    [Flags]
+    public enum CultureTypes
+    {
+        NeutralCultures             = 0x0001,             // Neutral cultures are cultures like "en", "de", "zh", etc, for enumeration this includes ALL neutrals regardless of other flags
+        SpecificCultures            = 0x0002,             // Non-netural cultuers.  Examples are "en-us", "zh-tw", etc., for enumeration this includes ALL specifics regardless of other flags
+        InstalledWin32Cultures      = 0x0004,             // Win32 installed cultures in the system and exists in the framework too., this is effectively all cultures
+        
+        AllCultures                 = NeutralCultures | SpecificCultures | InstalledWin32Cultures,
+        
+        UserCustomCulture           = 0x0008,               // User defined custom culture
+        ReplacementCultures         = 0x0010,               // User defined replacement custom culture.
+        [Obsolete("This value has been deprecated.  Please use other values in CultureTypes.")]
+        WindowsOnlyCultures         = 0x0020,               // this will always return empty list.
+        [Obsolete("This value has been deprecated.  Please use other values in CultureTypes.")]
+        FrameworkCultures           = 0x0040,               // will return only the v2 cultures marked as Framework culture.
+    }
+}    
index 7ddb3f0..c9cb325 100644 (file)
@@ -16,7 +16,8 @@ namespace System.Globalization
         MacCodePage = 3,
         EbcdicCodePage = 4,
         GeoId = 5, 
-        DigitSubstitution = 6
+        DigitSubstitution = 6, 
+        SpecificLocaleIndex = 7
     }
     
     internal partial class LocaleData
@@ -892,6 +893,876 @@ namespace System.Globalization
             "zh-tw_radstr"            + //  40404 - 4265
             "zu"                      + //  00035 - 4277
             "zu-za";                    //  00435 - 4279
+        
+        // c_threeLetterWindowsLanguageName is string containing 3-letter Windows language names
+        // every 3-characters entry is matching locale name entry in c_localeNames 
+        
+        private const string c_threeLetterWindowsLanguageName =
+            "ZZZ" + // aa
+            "ZZZ" + // aa-dj
+            "ZZZ" + // aa-er
+            "ZZZ" + // aa-et
+            "AFK" + // af
+            "ZZZ" + // af-na
+            "AFK" + // af-za
+            "ZZZ" + // agq
+            "ZZZ" + // agq-cm
+            "ZZZ" + // ak
+            "ZZZ" + // ak-gh
+            "AMH" + // am
+            "AMH" + // am-et
+            "ARA" + // ar
+            "ZZZ" + // ar-001
+            "ARU" + // ar-ae
+            "ARH" + // ar-bh
+            "ZZZ" + // ar-dj
+            "ARG" + // ar-dz
+            "ARE" + // ar-eg
+            "ZZZ" + // ar-er
+            "ZZZ" + // ar-il
+            "ARI" + // ar-iq
+            "ARJ" + // ar-jo
+            "ZZZ" + // ar-km
+            "ARK" + // ar-kw
+            "ARB" + // ar-lb
+            "ARL" + // ar-ly
+            "ARM" + // ar-ma
+            "ZZZ" + // ar-mr
+            "ARO" + // ar-om
+            "ZZZ" + // ar-ps
+            "ARQ" + // ar-qa
+            "ARA" + // ar-sa
+            "ZZZ" + // ar-sd
+            "ZZZ" + // ar-so
+            "ZZZ" + // ar-ss
+            "ARS" + // ar-sy
+            "ZZZ" + // ar-td
+            "ART" + // ar-tn
+            "ARY" + // ar-ye
+            "MPD" + // arn
+            "MPD" + // arn-cl
+            "ASM" + // as
+            "ASM" + // as-in
+            "ZZZ" + // asa
+            "ZZZ" + // asa-tz
+            "ZZZ" + // ast
+            "ZZZ" + // ast-es
+            "AZE" + // az
+            "AZC" + // az-cyrl
+            "AZC" + // az-cyrl-az
+            "AZE" + // az-latn
+            "AZE" + // az-latn-az
+            "BAS" + // ba
+            "BAS" + // ba-ru
+            "ZZZ" + // bas
+            "ZZZ" + // bas-cm
+            "BEL" + // be
+            "BEL" + // be-by
+            "ZZZ" + // bem
+            "ZZZ" + // bem-zm
+            "ZZZ" + // bez
+            "ZZZ" + // bez-tz
+            "BGR" + // bg
+            "BGR" + // bg-bg
+            "ZZZ" + // bin
+            "ZZZ" + // bin-ng
+            "ZZZ" + // bm
+            "ZZZ" + // bm-latn
+            "ZZZ" + // bm-latn-ml
+            "BNB" + // bn
+            "BNB" + // bn-bd
+            "BNG" + // bn-in
+            "BOB" + // bo
+            "BOB" + // bo-cn
+            "ZZZ" + // bo-in
+            "BRE" + // br
+            "BRE" + // br-fr
+            "ZZZ" + // brx
+            "ZZZ" + // brx-in
+            "BSB" + // bs
+            "BSC" + // bs-cyrl
+            "BSC" + // bs-cyrl-ba
+            "BSB" + // bs-latn
+            "BSB" + // bs-latn-ba
+            "ZZZ" + // byn
+            "ZZZ" + // byn-er
+            "CAT" + // ca
+            "ZZZ" + // ca-ad
+            "CAT" + // ca-es
+            "VAL" + // ca-es-valencia
+            "ZZZ" + // ca-fr
+            "ZZZ" + // ca-it
+            "ZZZ" + // ce
+            "ZZZ" + // ce-ru
+            "ZZZ" + // cgg
+            "ZZZ" + // cgg-ug
+            "CRE" + // chr
+            "CRE" + // chr-cher
+            "CRE" + // chr-cher-us
+            "COS" + // co
+            "COS" + // co-fr
+            "CSY" + // cs
+            "CSY" + // cs-cz
+            "ZZZ" + // cu
+            "ZZZ" + // cu-ru
+            "CYM" + // cy
+            "CYM" + // cy-gb
+            "DAN" + // da
+            "DAN" + // da-dk
+            "ZZZ" + // da-gl
+            "ZZZ" + // dav
+            "ZZZ" + // dav-ke
+            "DEU" + // de
+            "DEA" + // de-at
+            "ZZZ" + // de-be
+            "DES" + // de-ch
+            "DEU" + // de-de
+            "DEU" + // de-de_phoneb
+            "ZZZ" + // de-it
+            "DEC" + // de-li
+            "DEL" + // de-lu
+            "ZZZ" + // dje
+            "ZZZ" + // dje-ne
+            "DSB" + // dsb
+            "DSB" + // dsb-de
+            "ZZZ" + // dua
+            "ZZZ" + // dua-cm
+            "DIV" + // dv
+            "DIV" + // dv-mv
+            "ZZZ" + // dyo
+            "ZZZ" + // dyo-sn
+            "ZZZ" + // dz
+            "ZZZ" + // dz-bt
+            "ZZZ" + // ebu
+            "ZZZ" + // ebu-ke
+            "ZZZ" + // ee
+            "ZZZ" + // ee-gh
+            "ZZZ" + // ee-tg
+            "ELL" + // el
+            "ZZZ" + // el-cy
+            "ELL" + // el-gr
+            "ENU" + // en
+            "ZZZ" + // en-001
+            "ENB" + // en-029
+            "ZZZ" + // en-150
+            "ZZZ" + // en-ag
+            "ZZZ" + // en-ai
+            "ZZZ" + // en-as
+            "ZZZ" + // en-at
+            "ENA" + // en-au
+            "ZZZ" + // en-bb
+            "ZZZ" + // en-be
+            "ZZZ" + // en-bi
+            "ZZZ" + // en-bm
+            "ZZZ" + // en-bs
+            "ZZZ" + // en-bw
+            "ENL" + // en-bz
+            "ENC" + // en-ca
+            "ZZZ" + // en-cc
+            "ZZZ" + // en-ch
+            "ZZZ" + // en-ck
+            "ZZZ" + // en-cm
+            "ZZZ" + // en-cx
+            "ZZZ" + // en-cy
+            "ZZZ" + // en-de
+            "ZZZ" + // en-dk
+            "ZZZ" + // en-dm
+            "ZZZ" + // en-er
+            "ZZZ" + // en-fi
+            "ZZZ" + // en-fj
+            "ZZZ" + // en-fk
+            "ZZZ" + // en-fm
+            "ENG" + // en-gb
+            "ZZZ" + // en-gd
+            "ZZZ" + // en-gg
+            "ZZZ" + // en-gh
+            "ZZZ" + // en-gi
+            "ZZZ" + // en-gm
+            "ZZZ" + // en-gu
+            "ZZZ" + // en-gy
+            "ENH" + // en-hk
+            "ZZZ" + // en-id
+            "ENI" + // en-ie
+            "ZZZ" + // en-il
+            "ZZZ" + // en-im
+            "ENN" + // en-in
+            "ZZZ" + // en-io
+            "ZZZ" + // en-je
+            "ENJ" + // en-jm
+            "ZZZ" + // en-ke
+            "ZZZ" + // en-ki
+            "ZZZ" + // en-kn
+            "ZZZ" + // en-ky
+            "ZZZ" + // en-lc
+            "ZZZ" + // en-lr
+            "ZZZ" + // en-ls
+            "ZZZ" + // en-mg
+            "ZZZ" + // en-mh
+            "ZZZ" + // en-mo
+            "ZZZ" + // en-mp
+            "ZZZ" + // en-ms
+            "ZZZ" + // en-mt
+            "ZZZ" + // en-mu
+            "ZZZ" + // en-mw
+            "ENM" + // en-my
+            "ZZZ" + // en-na
+            "ZZZ" + // en-nf
+            "ZZZ" + // en-ng
+            "ZZZ" + // en-nl
+            "ZZZ" + // en-nr
+            "ZZZ" + // en-nu
+            "ENZ" + // en-nz
+            "ZZZ" + // en-pg
+            "ENP" + // en-ph
+            "ZZZ" + // en-pk
+            "ZZZ" + // en-pn
+            "ZZZ" + // en-pr
+            "ZZZ" + // en-pw
+            "ZZZ" + // en-rw
+            "ZZZ" + // en-sb
+            "ZZZ" + // en-sc
+            "ZZZ" + // en-sd
+            "ZZZ" + // en-se
+            "ENE" + // en-sg
+            "ZZZ" + // en-sh
+            "ZZZ" + // en-si
+            "ZZZ" + // en-sl
+            "ZZZ" + // en-ss
+            "ZZZ" + // en-sx
+            "ZZZ" + // en-sz
+            "ZZZ" + // en-tc
+            "ZZZ" + // en-tk
+            "ZZZ" + // en-to
+            "ENT" + // en-tt
+            "ZZZ" + // en-tv
+            "ZZZ" + // en-tz
+            "ZZZ" + // en-ug
+            "ZZZ" + // en-um
+            "ENU" + // en-us
+            "ZZZ" + // en-vc
+            "ZZZ" + // en-vg
+            "ZZZ" + // en-vi
+            "ZZZ" + // en-vu
+            "ZZZ" + // en-ws
+            "ENS" + // en-za
+            "ZZZ" + // en-zm
+            "ENW" + // en-zw
+            "ZZZ" + // eo
+            "ZZZ" + // eo-001
+            "ESN" + // es
+            "ESJ" + // es-419
+            "ESS" + // es-ar
+            "ESB" + // es-bo
+            "ZZZ" + // es-br
+            "ESL" + // es-cl
+            "ESO" + // es-co
+            "ESC" + // es-cr
+            "ESK" + // es-cu
+            "ESD" + // es-do
+            "ESF" + // es-ec
+            "ESN" + // es-es
+            "ESP" + // es-es_tradnl
+            "ZZZ" + // es-gq
+            "ESG" + // es-gt
+            "ESH" + // es-hn
+            "ESM" + // es-mx
+            "ESI" + // es-ni
+            "ESA" + // es-pa
+            "ESR" + // es-pe
+            "ZZZ" + // es-ph
+            "ESU" + // es-pr
+            "ESZ" + // es-py
+            "ESE" + // es-sv
+            "EST" + // es-us
+            "ESY" + // es-uy
+            "ESV" + // es-ve
+            "ETI" + // et
+            "ETI" + // et-ee
+            "EUQ" + // eu
+            "EUQ" + // eu-es
+            "ZZZ" + // ewo
+            "ZZZ" + // ewo-cm
+            "FAR" + // fa
+            "FAR" + // fa-ir
+            "FUL" + // ff
+            "ZZZ" + // ff-cm
+            "ZZZ" + // ff-gn
+            "FUL" + // ff-latn
+            "FUL" + // ff-latn-sn
+            "ZZZ" + // ff-mr
+            "ZZZ" + // ff-ng
+            "FIN" + // fi
+            "FIN" + // fi-fi
+            "FPO" + // fil
+            "FPO" + // fil-ph
+            "FOS" + // fo
+            "ZZZ" + // fo-dk
+            "FOS" + // fo-fo
+            "FRA" + // fr
+            "ZZZ" + // fr-029
+            "FRB" + // fr-be
+            "ZZZ" + // fr-bf
+            "ZZZ" + // fr-bi
+            "ZZZ" + // fr-bj
+            "ZZZ" + // fr-bl
+            "FRC" + // fr-ca
+            "FRD" + // fr-cd
+            "ZZZ" + // fr-cf
+            "ZZZ" + // fr-cg
+            "FRS" + // fr-ch
+            "FRI" + // fr-ci
+            "FRE" + // fr-cm
+            "ZZZ" + // fr-dj
+            "ZZZ" + // fr-dz
+            "FRA" + // fr-fr
+            "ZZZ" + // fr-ga
+            "ZZZ" + // fr-gf
+            "ZZZ" + // fr-gn
+            "ZZZ" + // fr-gp
+            "ZZZ" + // fr-gq
+            "FRH" + // fr-ht
+            "ZZZ" + // fr-km
+            "FRL" + // fr-lu
+            "FRO" + // fr-ma
+            "FRM" + // fr-mc
+            "ZZZ" + // fr-mf
+            "ZZZ" + // fr-mg
+            "FRF" + // fr-ml
+            "ZZZ" + // fr-mq
+            "ZZZ" + // fr-mr
+            "ZZZ" + // fr-mu
+            "ZZZ" + // fr-nc
+            "ZZZ" + // fr-ne
+            "ZZZ" + // fr-pf
+            "ZZZ" + // fr-pm
+            "FRR" + // fr-re
+            "ZZZ" + // fr-rw
+            "ZZZ" + // fr-sc
+            "FRN" + // fr-sn
+            "ZZZ" + // fr-sy
+            "ZZZ" + // fr-td
+            "ZZZ" + // fr-tg
+            "ZZZ" + // fr-tn
+            "ZZZ" + // fr-vu
+            "ZZZ" + // fr-wf
+            "ZZZ" + // fr-yt
+            "ZZZ" + // fur
+            "ZZZ" + // fur-it
+            "FYN" + // fy
+            "FYN" + // fy-nl
+            "IRE" + // ga
+            "IRE" + // ga-ie
+            "GLA" + // gd
+            "GLA" + // gd-gb
+            "GLC" + // gl
+            "GLC" + // gl-es
+            "GRN" + // gn
+            "GRN" + // gn-py
+            "ZZZ" + // gsw
+            "ZZZ" + // gsw-ch
+            "GSW" + // gsw-fr
+            "ZZZ" + // gsw-li
+            "GUJ" + // gu
+            "GUJ" + // gu-in
+            "ZZZ" + // guz
+            "ZZZ" + // guz-ke
+            "ZZZ" + // gv
+            "ZZZ" + // gv-im
+            "HAU" + // ha
+            "HAU" + // ha-latn
+            "ZZZ" + // ha-latn-gh
+            "ZZZ" + // ha-latn-ne
+            "HAU" + // ha-latn-ng
+            "HAW" + // haw
+            "HAW" + // haw-us
+            "HEB" + // he
+            "HEB" + // he-il
+            "HIN" + // hi
+            "HIN" + // hi-in
+            "HRV" + // hr
+            "HRB" + // hr-ba
+            "HRV" + // hr-hr
+            "HSB" + // hsb
+            "HSB" + // hsb-de
+            "HUN" + // hu
+            "HUN" + // hu-hu
+            "HUN" + // hu-hu_technl
+            "HYE" + // hy
+            "HYE" + // hy-am
+            "ZZZ" + // ia
+            "ZZZ" + // ia-001
+            "ZZZ" + // ia-fr
+            "ZZZ" + // ibb
+            "ZZZ" + // ibb-ng
+            "IND" + // id
+            "IND" + // id-id
+            "IBO" + // ig
+            "IBO" + // ig-ng
+            "III" + // ii
+            "III" + // ii-cn
+            "ISL" + // is
+            "ISL" + // is-is
+            "ITA" + // it
+            "ITS" + // it-ch
+            "ITA" + // it-it
+            "ZZZ" + // it-sm
+            "IUK" + // iu
+            "IUS" + // iu-cans
+            "IUS" + // iu-cans-ca
+            "IUK" + // iu-latn
+            "IUK" + // iu-latn-ca
+            "JPN" + // ja
+            "JPN" + // ja-jp
+            "JPN" + // ja-jp_radstr
+            "ZZZ" + // jgo
+            "ZZZ" + // jgo-cm
+            "ZZZ" + // jmc
+            "ZZZ" + // jmc-tz
+            "JAV" + // jv
+            "ZZZ" + // jv-java
+            "ZZZ" + // jv-java-id
+            "JAV" + // jv-latn
+            "JAV" + // jv-latn-id
+            "KAT" + // ka
+            "KAT" + // ka-ge
+            "KAT" + // ka-ge_modern
+            "ZZZ" + // kab
+            "ZZZ" + // kab-dz
+            "ZZZ" + // kam
+            "ZZZ" + // kam-ke
+            "ZZZ" + // kde
+            "ZZZ" + // kde-tz
+            "ZZZ" + // kea
+            "ZZZ" + // kea-cv
+            "ZZZ" + // khq
+            "ZZZ" + // khq-ml
+            "ZZZ" + // ki
+            "ZZZ" + // ki-ke
+            "KKZ" + // kk
+            "KKZ" + // kk-kz
+            "ZZZ" + // kkj
+            "ZZZ" + // kkj-cm
+            "KAL" + // kl
+            "KAL" + // kl-gl
+            "ZZZ" + // kln
+            "ZZZ" + // kln-ke
+            "KHM" + // km
+            "KHM" + // km-kh
+            "KDI" + // kn
+            "KDI" + // kn-in
+            "KOR" + // ko
+            "ZZZ" + // ko-kp
+            "KOR" + // ko-kr
+            "KNK" + // kok
+            "KNK" + // kok-in
+            "ZZZ" + // kr
+            "ZZZ" + // kr-ng
+            "ZZZ" + // ks
+            "ZZZ" + // ks-arab
+            "ZZZ" + // ks-arab-in
+            "ZZZ" + // ks-deva
+            "ZZZ" + // ks-deva-in
+            "ZZZ" + // ksb
+            "ZZZ" + // ksb-tz
+            "ZZZ" + // ksf
+            "ZZZ" + // ksf-cm
+            "ZZZ" + // ksh
+            "ZZZ" + // ksh-de
+            "KUR" + // ku
+            "KUR" + // ku-arab
+            "KUR" + // ku-arab-iq
+            "ZZZ" + // ku-arab-ir
+            "ZZZ" + // kw
+            "ZZZ" + // kw-gb
+            "KYR" + // ky
+            "KYR" + // ky-kg
+            "ZZZ" + // la
+            "ZZZ" + // la-001
+            "ZZZ" + // lag
+            "ZZZ" + // lag-tz
+            "LBX" + // lb
+            "LBX" + // lb-lu
+            "ZZZ" + // lg
+            "ZZZ" + // lg-ug
+            "ZZZ" + // lkt
+            "ZZZ" + // lkt-us
+            "ZZZ" + // ln
+            "ZZZ" + // ln-ao
+            "ZZZ" + // ln-cd
+            "ZZZ" + // ln-cf
+            "ZZZ" + // ln-cg
+            "LAO" + // lo
+            "LAO" + // lo-la
+            "ZZZ" + // lrc
+            "ZZZ" + // lrc-iq
+            "ZZZ" + // lrc-ir
+            "LTH" + // lt
+            "LTH" + // lt-lt
+            "ZZZ" + // lu
+            "ZZZ" + // lu-cd
+            "ZZZ" + // luo
+            "ZZZ" + // luo-ke
+            "ZZZ" + // luy
+            "ZZZ" + // luy-ke
+            "LVI" + // lv
+            "LVI" + // lv-lv
+            "ZZZ" + // mas
+            "ZZZ" + // mas-ke
+            "ZZZ" + // mas-tz
+            "ZZZ" + // mer
+            "ZZZ" + // mer-ke
+            "ZZZ" + // mfe
+            "ZZZ" + // mfe-mu
+            "MLG" + // mg
+            "MLG" + // mg-mg
+            "ZZZ" + // mgh
+            "ZZZ" + // mgh-mz
+            "ZZZ" + // mgo
+            "ZZZ" + // mgo-cm
+            "MRI" + // mi
+            "MRI" + // mi-nz
+            "MKI" + // mk
+            "MKI" + // mk-mk
+            "MYM" + // ml
+            "MYM" + // ml-in
+            "MNN" + // mn
+            "MNN" + // mn-cyrl
+            "MNN" + // mn-mn
+            "MNG" + // mn-mong
+            "MNG" + // mn-mong-cn
+            "MNM" + // mn-mong-mn
+            "ZZZ" + // mni
+            "ZZZ" + // mni-in
+            "MWK" + // moh
+            "MWK" + // moh-ca
+            "MAR" + // mr
+            "MAR" + // mr-in
+            "MSL" + // ms
+            "MSB" + // ms-bn
+            "MSL" + // ms-my
+            "ZZZ" + // ms-sg
+            "MLT" + // mt
+            "MLT" + // mt-mt
+            "ZZZ" + // mua
+            "ZZZ" + // mua-cm
+            "MYA" + // my
+            "MYA" + // my-mm
+            "ZZZ" + // mzn
+            "ZZZ" + // mzn-ir
+            "ZZZ" + // naq
+            "ZZZ" + // naq-na
+            "NOR" + // nb
+            "NOR" + // nb-no
+            "ZZZ" + // nb-sj
+            "ZZZ" + // nd
+            "ZZZ" + // nd-zw
+            "ZZZ" + // nds
+            "ZZZ" + // nds-de
+            "ZZZ" + // nds-nl
+            "NEP" + // ne
+            "NEI" + // ne-in
+            "NEP" + // ne-np
+            "NLD" + // nl
+            "ZZZ" + // nl-aw
+            "NLB" + // nl-be
+            "ZZZ" + // nl-bq
+            "ZZZ" + // nl-cw
+            "NLD" + // nl-nl
+            "ZZZ" + // nl-sr
+            "ZZZ" + // nl-sx
+            "ZZZ" + // nmg
+            "ZZZ" + // nmg-cm
+            "NON" + // nn
+            "NON" + // nn-no
+            "ZZZ" + // nnh
+            "ZZZ" + // nnh-cm
+            "NOR" + // no
+            "NQO" + // nqo
+            "NQO" + // nqo-gn
+            "ZZZ" + // nr
+            "ZZZ" + // nr-za
+            "NSO" + // nso
+            "NSO" + // nso-za
+            "ZZZ" + // nus
+            "ZZZ" + // nus-ss
+            "ZZZ" + // nyn
+            "ZZZ" + // nyn-ug
+            "OCI" + // oc
+            "OCI" + // oc-fr
+            "ORM" + // om
+            "ORM" + // om-et
+            "ZZZ" + // om-ke
+            "ORI" + // or
+            "ORI" + // or-in
+            "ZZZ" + // os
+            "ZZZ" + // os-ge
+            "ZZZ" + // os-ru
+            "PAN" + // pa
+            "PAP" + // pa-arab
+            "PAP" + // pa-arab-pk
+            "PAN" + // pa-in
+            "ZZZ" + // pap
+            "ZZZ" + // pap-029
+            "PLK" + // pl
+            "PLK" + // pl-pl
+            "ZZZ" + // prg
+            "ZZZ" + // prg-001
+            "PRS" + // prs
+            "PRS" + // prs-af
+            "PAS" + // ps
+            "PAS" + // ps-af
+            "PTB" + // pt
+            "PTA" + // pt-ao
+            "PTB" + // pt-br
+            "ZZZ" + // pt-ch
+            "ZZZ" + // pt-cv
+            "ZZZ" + // pt-gq
+            "ZZZ" + // pt-gw
+            "ZZZ" + // pt-lu
+            "ZZZ" + // pt-mo
+            "ZZZ" + // pt-mz
+            "PTG" + // pt-pt
+            "ZZZ" + // pt-st
+            "ZZZ" + // pt-tl
+            "ENJ" + // qps-latn-x-sh
+            "ENU" + // qps-ploc
+            "JPN" + // qps-ploca
+            "ARA" + // qps-plocm
+            "QUT" + // quc
+            "QUT" + // quc-latn
+            "QUT" + // quc-latn-gt
+            "QUB" + // quz
+            "QUB" + // quz-bo
+            "QUE" + // quz-ec
+            "QUP" + // quz-pe
+            "RMC" + // rm
+            "RMC" + // rm-ch
+            "ZZZ" + // rn
+            "ZZZ" + // rn-bi
+            "ROM" + // ro
+            "ROD" + // ro-md
+            "ROM" + // ro-ro
+            "ZZZ" + // rof
+            "ZZZ" + // rof-tz
+            "RUS" + // ru
+            "ZZZ" + // ru-by
+            "ZZZ" + // ru-kg
+            "ZZZ" + // ru-kz
+            "RUM" + // ru-md
+            "RUS" + // ru-ru
+            "ZZZ" + // ru-ua
+            "KIN" + // rw
+            "KIN" + // rw-rw
+            "ZZZ" + // rwk
+            "ZZZ" + // rwk-tz
+            "SAN" + // sa
+            "SAN" + // sa-in
+            "SAH" + // sah
+            "SAH" + // sah-ru
+            "ZZZ" + // saq
+            "ZZZ" + // saq-ke
+            "ZZZ" + // sbp
+            "ZZZ" + // sbp-tz
+            "SIP" + // sd
+            "SIP" + // sd-arab
+            "SIP" + // sd-arab-pk
+            "ZZZ" + // sd-deva
+            "ZZZ" + // sd-deva-in
+            "SME" + // se
+            "SMG" + // se-fi
+            "SME" + // se-no
+            "SMF" + // se-se
+            "ZZZ" + // seh
+            "ZZZ" + // seh-mz
+            "ZZZ" + // ses
+            "ZZZ" + // ses-ml
+            "ZZZ" + // sg
+            "ZZZ" + // sg-cf
+            "ZZZ" + // shi
+            "ZZZ" + // shi-latn
+            "ZZZ" + // shi-latn-ma
+            "ZZZ" + // shi-tfng
+            "ZZZ" + // shi-tfng-ma
+            "SIN" + // si
+            "SIN" + // si-lk
+            "SKY" + // sk
+            "SKY" + // sk-sk
+            "SLV" + // sl
+            "SLV" + // sl-si
+            "SMB" + // sma
+            "SMA" + // sma-no
+            "SMB" + // sma-se
+            "SMK" + // smj
+            "SMJ" + // smj-no
+            "SMK" + // smj-se
+            "SMN" + // smn
+            "SMN" + // smn-fi
+            "SMS" + // sms
+            "SMS" + // sms-fi
+            "SNA" + // sn
+            "SNA" + // sn-latn
+            "SNA" + // sn-latn-zw
+            "SOM" + // so
+            "ZZZ" + // so-dj
+            "ZZZ" + // so-et
+            "ZZZ" + // so-ke
+            "SOM" + // so-so
+            "SQI" + // sq
+            "SQI" + // sq-al
+            "ZZZ" + // sq-mk
+            "ZZZ" + // sq-xk
+            "SRM" + // sr
+            "SRO" + // sr-cyrl
+            "SRN" + // sr-cyrl-ba
+            "SRB" + // sr-cyrl-cs
+            "SRQ" + // sr-cyrl-me
+            "SRO" + // sr-cyrl-rs
+            "ZZZ" + // sr-cyrl-xk
+            "SRM" + // sr-latn
+            "SRS" + // sr-latn-ba
+            "SRL" + // sr-latn-cs
+            "SRP" + // sr-latn-me
+            "SRM" + // sr-latn-rs
+            "ZZZ" + // sr-latn-xk
+            "ZZZ" + // ss
+            "ZZZ" + // ss-sz
+            "ZZZ" + // ss-za
+            "ZZZ" + // ssy
+            "ZZZ" + // ssy-er
+            "SOT" + // st
+            "ZZZ" + // st-ls
+            "SOT" + // st-za
+            "SVE" + // sv
+            "ZZZ" + // sv-ax
+            "SVF" + // sv-fi
+            "SVE" + // sv-se
+            "SWK" + // sw
+            "ZZZ" + // sw-cd
+            "SWK" + // sw-ke
+            "ZZZ" + // sw-tz
+            "ZZZ" + // sw-ug
+            "ZZZ" + // swc
+            "ZZZ" + // swc-cd
+            "SYR" + // syr
+            "SYR" + // syr-sy
+            "TAI" + // ta
+            "TAI" + // ta-in
+            "TAM" + // ta-lk
+            "ZZZ" + // ta-my
+            "ZZZ" + // ta-sg
+            "TEL" + // te
+            "TEL" + // te-in
+            "ZZZ" + // teo
+            "ZZZ" + // teo-ke
+            "ZZZ" + // teo-ug
+            "TAJ" + // tg
+            "TAJ" + // tg-cyrl
+            "TAJ" + // tg-cyrl-tj
+            "THA" + // th
+            "THA" + // th-th
+            "TIR" + // ti
+            "TIR" + // ti-er
+            "TIE" + // ti-et
+            "ZZZ" + // tig
+            "ZZZ" + // tig-er
+            "TUK" + // tk
+            "TUK" + // tk-tm
+            "TSN" + // tn
+            "TSB" + // tn-bw
+            "TSN" + // tn-za
+            "ZZZ" + // to
+            "ZZZ" + // to-to
+            "TRK" + // tr
+            "ZZZ" + // tr-cy
+            "TRK" + // tr-tr
+            "TSO" + // ts
+            "TSO" + // ts-za
+            "TTT" + // tt
+            "TTT" + // tt-ru
+            "ZZZ" + // twq
+            "ZZZ" + // twq-ne
+            "TZA" + // tzm
+            "ZZZ" + // tzm-arab
+            "ZZZ" + // tzm-arab-ma
+            "TZA" + // tzm-latn
+            "TZA" + // tzm-latn-dz
+            "ZZZ" + // tzm-latn-ma
+            "TZM" + // tzm-tfng
+            "TZM" + // tzm-tfng-ma
+            "UIG" + // ug
+            "UIG" + // ug-cn
+            "UKR" + // uk
+            "UKR" + // uk-ua
+            "URD" + // ur
+            "URI" + // ur-in
+            "URD" + // ur-pk
+            "UZB" + // uz
+            "ZZZ" + // uz-arab
+            "ZZZ" + // uz-arab-af
+            "UZC" + // uz-cyrl
+            "UZC" + // uz-cyrl-uz
+            "UZB" + // uz-latn
+            "UZB" + // uz-latn-uz
+            "ZZZ" + // vai
+            "ZZZ" + // vai-latn
+            "ZZZ" + // vai-latn-lr
+            "ZZZ" + // vai-vaii
+            "ZZZ" + // vai-vaii-lr
+            "ZZZ" + // ve
+            "ZZZ" + // ve-za
+            "VIT" + // vi
+            "VIT" + // vi-vn
+            "ZZZ" + // vo
+            "ZZZ" + // vo-001
+            "ZZZ" + // vun
+            "ZZZ" + // vun-tz
+            "ZZZ" + // wae
+            "ZZZ" + // wae-ch
+            "ZZZ" + // wal
+            "ZZZ" + // wal-et
+            "WOL" + // wo
+            "WOL" + // wo-sn
+            "IVL" + // x-iv_mathan
+            "XHO" + // xh
+            "XHO" + // xh-za
+            "ZZZ" + // xog
+            "ZZZ" + // xog-ug
+            "ZZZ" + // yav
+            "ZZZ" + // yav-cm
+            "ZZZ" + // yi
+            "ZZZ" + // yi-001
+            "YOR" + // yo
+            "ZZZ" + // yo-bj
+            "YOR" + // yo-ng
+            "ZZZ" + // yue
+            "ZZZ" + // yue-hk
+            "ZHG" + // zgh
+            "ZHG" + // zgh-tfng
+            "ZHG" + // zgh-tfng-ma
+            "CHS" + // zh
+            "CHS" + // zh-chs
+            "CHT" + // zh-cht
+            "CHS" + // zh-cn
+            "CHS" + // zh-cn_phoneb
+            "CHS" + // zh-cn_stroke
+            "CHS" + // zh-hans
+            "ZZZ" + // zh-hans-hk
+            "ZZZ" + // zh-hans-mo
+            "ZHH" + // zh-hant
+            "ZHH" + // zh-hk
+            "ZHH" + // zh-hk_radstr
+            "ZHM" + // zh-mo
+            "ZHM" + // zh-mo_radstr
+            "ZHM" + // zh-mo_stroke
+            "ZHI" + // zh-sg
+            "ZHI" + // zh-sg_phoneb
+            "ZHI" + // zh-sg_stroke
+            "CHT" + // zh-tw
+            "CHT" + // zh-tw_pronun
+            "CHT" + // zh-tw_radstr
+            "ZUL" + // zu
+            "ZUL";  // zu-za
+
         // s_localeNamesIndices contains the start index of every culture name in the string
         // s_localeNames. We infer the length of each string by looking at the start index
         // of the next string.
@@ -1765,880 +2636,880 @@ namespace System.Globalization
             4284
         };
                
-        private const int NUMERIC_LOCALE_DATA_COUNT_PER_ROW = 7;  
+        private const int NUMERIC_LOCALE_DATA_COUNT_PER_ROW = 8;  
         // s_nameIndexToNumericData is mapping from index in s_localeNamesIndices to locale data: 
-        //      Lcid, Ansi codepage, Oem codepage, MAC codepage, EBCDIC codepage, Geo Id, Digit Substitution
+        //      Lcid, Ansi codepage, Oem codepage, MAC codepage, EBCDIC codepage, Geo Id, Digit Substitution, specific locale index
         private static readonly int[] s_nameIndexToNumericData = new int[]
         {
-         // Lcid,  Ansi CP, Oem CP, MAC CP, EBCDIC CP, Geo Id, digit substitution // index - locale name
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , // 0    - aa
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3e  , 1 , // 1    - aa-dj
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , 1 , // 2    - aa-er
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , // 3    - aa-et
-            0x36   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , // 4    - af
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xfe  , 1 , // 5    - af-na
-            0x436  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , // 6    - af-za
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 7    - agq
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 8    - agq-cm
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x59  , 1 , // 9    - ak
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x59  , 1 , // 10   - ak-gh
-            0x5e   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , // 11   - am
-            0x45e  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , // 12   - am-et
-            0x1    , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xcd  , 0 , // 13   - ar
-            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x989e, 0 , // 14   - ar-001
-            0x3801 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xe0  , 0 , // 15   - ar-ae
-            0x3c01 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x11  , 0 , // 16   - ar-bh
-            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x3e  , 0 , // 17   - ar-dj
-            0x1401 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x4   , 1 , // 18   - ar-dz
-            0xc01  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x43  , 0 , // 19   - ar-eg
-            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x47  , 0 , // 20   - ar-er
-            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x75  , 0 , // 21   - ar-il
-            0x801  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x79  , 0 , // 22   - ar-iq
-            0x2c01 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x7e  , 0 , // 23   - ar-jo
-            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x32  , 0 , // 24   - ar-km
-            0x3401 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x88  , 0 , // 25   - ar-kw
-            0x3001 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x8b  , 0 , // 26   - ar-lb
-            0x1001 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x94  , 1 , // 27   - ar-ly
-            0x1801 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x9f  , 1 , // 28   - ar-ma
-            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xa2  , 0 , // 29   - ar-mr
-            0x2001 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xa4  , 0 , // 30   - ar-om
-            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xb8  , 0 , // 31   - ar-ps
-            0x4001 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xc5  , 0 , // 32   - ar-qa
-            0x401  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xcd  , 0 , // 33   - ar-sa
-            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xdb  , 0 , // 34   - ar-sd
-            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xd8  , 0 , // 35   - ar-so
-            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x114 , 0 , // 36   - ar-ss
-            0x2801 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xde  , 0 , // 37   - ar-sy
-            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x29  , 0 , // 38   - ar-td
-            0x1c01 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xea  , 1 , // 39   - ar-tn
-            0x2401 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x105 , 0 , // 40   - ar-ye
-            0x7a   , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x2e  , 1 , // 41   - arn
-            0x47a  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x2e  , 1 , // 42   - arn-cl
-            0x4d   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 43   - as
-            0x44d  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 44   - as-in
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 45   - asa
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 46   - asa-tz
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd9  , 1 , // 47   - ast
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd9  , 1 , // 48   - ast-es
-            0x2c   , 0x4e6 , 0x359 , 0x2761, 0x51a9, 0x5   , 1 , // 49   - az
-            0x742c , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x5   , 1 , // 50   - az-cyrl
-            0x82c  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x5   , 1 , // 51   - az-cyrl-az
-            0x782c , 0x4e6 , 0x359 , 0x2761, 0x51a9, 0x5   , 1 , // 52   - az-latn
-            0x42c  , 0x4e6 , 0x359 , 0x2761, 0x51a9, 0x5   , 1 , // 53   - az-latn-az
-            0x6d   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , 1 , // 54   - ba
-            0x46d  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , 1 , // 55   - ba-ru
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 56   - bas
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 57   - bas-cm
-            0x23   , 0x4e3 , 0x362 , 0x2717, 0x1f4 , 0x1d  , 1 , // 58   - be
-            0x423  , 0x4e3 , 0x362 , 0x2717, 0x1f4 , 0x1d  , 1 , // 59   - be-by
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x107 , 1 , // 60   - bem
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x107 , 1 , // 61   - bem-zm
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 62   - bez
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 63   - bez-tz
-            0x2    , 0x4e3 , 0x362 , 0x2717, 0x5221, 0x23  , 1 , // 64   - bg
-            0x402  , 0x4e3 , 0x362 , 0x2717, 0x5221, 0x23  , 1 , // 65   - bg-bg
-            0x66   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , 1 , // 66   - bin
-            0x466  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , 1 , // 67   - bin-ng
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , 1 , // 68   - bm
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , 1 , // 69   - bm-latn
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , 1 , // 70   - bm-latn-ml
-            0x45   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x17  , 1 , // 71   - bn
-            0x845  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x17  , 1 , // 72   - bn-bd
-            0x445  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 73   - bn-in
-            0x51   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2d  , 1 , // 74   - bo
-            0x451  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2d  , 1 , // 75   - bo-cn
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 76   - bo-in
-            0x7e   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , 1 , // 77   - br
-            0x47e  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , 1 , // 78   - br-fr
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 79   - brx
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 80   - brx-in
-            0x781a , 0x4e2 , 0x354 , 0x2762, 0x366 , 0x19  , 1 , // 81   - bs
-            0x641a , 0x4e3 , 0x357 , 0x2762, 0x366 , 0x19  , 1 , // 82   - bs-cyrl
-            0x201a , 0x4e3 , 0x357 , 0x2762, 0x366 , 0x19  , 1 , // 83   - bs-cyrl-ba
-            0x681a , 0x4e2 , 0x354 , 0x2762, 0x366 , 0x19  , 1 , // 84   - bs-latn
-            0x141a , 0x4e2 , 0x354 , 0x2762, 0x366 , 0x19  , 1 , // 85   - bs-latn-ba
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , 1 , // 86   - byn
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , 1 , // 87   - byn-er
-            0x3    , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd9  , 1 , // 88   - ca
-            0x1000 , 0x4e4 , 0x352 , 0x2   , 0x1f4 , 0x8   , 1 , // 89   - ca-ad
-            0x403  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd9  , 1 , // 90   - ca-es
-            0x803  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd9  , 1 , // 91   - ca-es-valencia
-            0x1000 , 0x4e4 , 0x352 , 0x2   , 0x1f4 , 0x54  , 1 , // 92   - ca-fr
-            0x1000 , 0x4e4 , 0x352 , 0x2   , 0x1f4 , 0x76  , 1 , // 93   - ca-it
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xcb  , 1 , // 94   - ce
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xcb  , 1 , // 95   - ce-ru
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , // 96   - cgg
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , // 97   - cgg-ug
-            0x5c   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf4  , 1 , // 98   - chr
-            0x7c5c , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf4  , 1 , // 99   - chr-cher
-            0x45c  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf4  , 1 , // 100  - chr-cher-us
-            0x83   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , 1 , // 101  - co
-            0x483  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , 1 , // 102  - co-fr
-            0x5    , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x4b  , 1 , // 103  - cs
-            0x405  , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x4b  , 1 , // 104  - cs-cz
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xcb  , 1 , // 105  - cu
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xcb  , 1 , // 106  - cu-ru
-            0x52   , 0x4e4 , 0x352 , 0x2710, 0x4f3d, 0xf2  , 1 , // 107  - cy
-            0x452  , 0x4e4 , 0x352 , 0x2710, 0x4f3d, 0xf2  , 1 , // 108  - cy-gb
-            0x6    , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0x3d  , 1 , // 109  - da
-            0x406  , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0x3d  , 1 , // 110  - da-dk
-            0x1000 , 0x4e4 , 0x352 , 0x2   , 0x1f4 , 0x5d  , 1 , // 111  - da-gl
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 112  - dav
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 113  - dav-ke
-            0x7    , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0x5e  , 1 , // 114  - de
-            0xc07  , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0xe   , 1 , // 115  - de-at
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0x15  , 1 , // 116  - de-be
-            0x807  , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0xdf  , 1 , // 117  - de-ch
-            0x407  , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0x5e  , 1 , // 118  - de-de
-            0x10407, 0x4e4 , 0x352 , 0x2710, 0x4f31, 0x5e  , 1 , // 119  - de-de_phoneb
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x76  , 1 , // 120  - de-it
-            0x1407 , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0x91  , 1 , // 121  - de-li
-            0x1007 , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0x93  , 1 , // 122  - de-lu
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xad  , 1 , // 123  - dje
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xad  , 1 , // 124  - dje-ne
-            0x7c2e , 0x4e4 , 0x352 , 0x2710, 0x366 , 0x5e  , 1 , // 125  - dsb
-            0x82e  , 0x4e4 , 0x352 , 0x2710, 0x366 , 0x5e  , 1 , // 126  - dsb-de
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 127  - dua
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 128  - dua-cm
-            0x65   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa5  , 1 , // 129  - dv
-            0x465  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa5  , 1 , // 130  - dv-mv
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd2  , 1 , // 131  - dyo
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd2  , 1 , // 132  - dyo-sn
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x22  , 2 , // 133  - dz
-            0xc51  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x22  , 2 , // 134  - dz-bt
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 135  - ebu
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 136  - ebu-ke
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x59  , 1 , // 137  - ee
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x59  , 1 , // 138  - ee-gh
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xe8  , 1 , // 139  - ee-tg
-            0x8    , 0x4e5 , 0x2e1 , 0x2716, 0x4f31, 0x62  , 1 , // 140  - el
-            0x1000 , 0x4e5 , 0x2e1 , 0x2716, 0x4f31, 0x3b  , 1 , // 141  - el-cy
-            0x408  , 0x4e5 , 0x2e1 , 0x2716, 0x4f31, 0x62  , 1 , // 142  - el-gr
-            0x9    , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xf4  , 1 , // 143  - en
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x989e, 1 , // 144  - en-001
-            0x2409 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x993248, 1 , // 145  - en-029
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x292d, 1 , // 146  - en-150
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x2   , 1 , // 147  - en-ag
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x12c , 1 , // 148  - en-ai
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xa   , 1 , // 149  - en-as
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xe   , 1 , // 150  - en-at
-            0xc09  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xc   , 1 , // 151  - en-au
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x12  , 1 , // 152  - en-bb
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x15  , 1 , // 153  - en-be
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x26  , 1 , // 154  - en-bi
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x14  , 1 , // 155  - en-bm
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x16  , 1 , // 156  - en-bs
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x13  , 1 , // 157  - en-bw
-            0x2809 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x18  , 1 , // 158  - en-bz
-            0x1009 , 0x4e4 , 0x352 , 0x2710, 0x25  , 0x27  , 1 , // 159  - en-ca
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x137 , 1 , // 160  - en-cc
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xdf  , 1 , // 161  - en-ch
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x138 , 1 , // 162  - en-ck
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x31  , 1 , // 163  - en-cm
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x135 , 1 , // 164  - en-cx
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3b  , 1 , // 165  - en-cy
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x5e  , 1 , // 166  - en-de
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3d  , 1 , // 167  - en-dk
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x3f  , 1 , // 168  - en-dm
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x47  , 1 , // 169  - en-er
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x4d  , 1 , // 170  - en-fi
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x4e  , 1 , // 171  - en-fj
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x13b , 1 , // 172  - en-fk
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x50  , 1 , // 173  - en-fm
-            0x809  , 0x4e4 , 0x352 , 0x2710, 0x4f3d, 0xf2  , 1 , // 174  - en-gb
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x5b  , 1 , // 175  - en-gd
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x144 , 1 , // 176  - en-gg
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x59  , 1 , // 177  - en-gh
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x5a  , 1 , // 178  - en-gi
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x56  , 1 , // 179  - en-gm
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x142 , 1 , // 180  - en-gu
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x65  , 1 , // 181  - en-gy
-            0x3c09 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x68  , 1 , // 182  - en-hk
-            0x3809 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , 1 , // 183  - en-id
-            0x1809 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x44  , 1 , // 184  - en-ie
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x75  , 1 , // 185  - en-il
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x3b16, 1 , // 186  - en-im
-            0x4009 , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0x71  , 1 , // 187  - en-in
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x72  , 1 , // 188  - en-io
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x148 , 1 , // 189  - en-je
-            0x2009 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x7c  , 1 , // 190  - en-jm
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x81  , 1 , // 191  - en-ke
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x85  , 1 , // 192  - en-ki
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xcf  , 1 , // 193  - en-kn
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x133 , 1 , // 194  - en-ky
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xda  , 1 , // 195  - en-lc
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x8e  , 1 , // 196  - en-lr
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x92  , 1 , // 197  - en-ls
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x95  , 1 , // 198  - en-mg
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xc7  , 1 , // 199  - en-mh
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x97  , 1 , // 200  - en-mo
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x151 , 1 , // 201  - en-mp
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x14c , 1 , // 202  - en-ms
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xa3  , 1 , // 203  - en-mt
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xa0  , 1 , // 204  - en-mu
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x9c  , 1 , // 205  - en-mw
-            0x4409 , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xa7  , 1 , // 206  - en-my
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xfe  , 1 , // 207  - en-na
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x150 , 1 , // 208  - en-nf
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , 1 , // 209  - en-ng
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xb0  , 1 , // 210  - en-nl
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb4  , 1 , // 211  - en-nr
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x14f , 1 , // 212  - en-nu
-            0x1409 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb7  , 1 , // 213  - en-nz
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xc2  , 1 , // 214  - en-pg
-            0x3409 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xc9  , 1 , // 215  - en-ph
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xbe  , 1 , // 216  - en-pk
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x153 , 1 , // 217  - en-pn
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xca  , 1 , // 218  - en-pr
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xc3  , 1 , // 219  - en-pw
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xcc  , 1 , // 220  - en-rw
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x1e  , 1 , // 221  - en-sb
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd0  , 1 , // 222  - en-sc
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xdb  , 1 , // 223  - en-sd
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xdd  , 1 , // 224  - en-se
-            0x4809 , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xd7  , 1 , // 225  - en-sg
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x157 , 1 , // 226  - en-sh
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd4  , 1 , // 227  - en-si
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd5  , 1 , // 228  - en-sl
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x114 , 1 , // 229  - en-ss
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x78f7, 1 , // 230  - en-sx
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x104 , 1 , // 231  - en-sz
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x15d , 1 , // 232  - en-tc
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x15b , 1 , // 233  - en-tk
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xe7  , 1 , // 234  - en-to
-            0x2c09 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xe1  , 1 , // 235  - en-tt
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xec  , 1 , // 236  - en-tv
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xef  , 1 , // 237  - en-tz
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xf0  , 1 , // 238  - en-ug
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x9a55d40, 1 , // 239  - en-um
-            0x409  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xf4  , 1 , // 240  - en-us
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xf8  , 1 , // 241  - en-vc
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x15f , 1 , // 242  - en-vg
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xfc  , 1 , // 243  - en-vi
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xae  , 1 , // 244  - en-vu
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x103 , 1 , // 245  - en-ws
-            0x1c09 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xd1  , 1 , // 246  - en-za
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x107 , 1 , // 247  - en-zm
-            0x3009 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0x108 , 1 , // 248  - en-zw
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, 1 , // 249  - eo
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, 1 , // 250  - eo-001
-            0xa    , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xd9  , 1 , // 251  - es
-            0x580a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x9a55d41, 1 , // 252  - es-419
-            0x2c0a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xb   , 1 , // 253  - es-ar
-            0x400a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x1a  , 1 , // 254  - es-bo
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x20  , 1 , // 255  - es-br
-            0x340a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x2e  , 1 , // 256  - es-cl
-            0x240a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x33  , 1 , // 257  - es-co
-            0x140a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x36  , 1 , // 258  - es-cr
-            0x5c0a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x38  , 1 , // 259  - es-cu
-            0x1c0a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x41  , 1 , // 260  - es-do
-            0x300a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x42  , 1 , // 261  - es-ec
-            0xc0a  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xd9  , 1 , // 262  - es-es
-            0x40a  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xd9  , 1 , // 263  - es-es_tradnl
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x45  , 1 , // 264  - es-gq
-            0x100a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x63  , 1 , // 265  - es-gt
-            0x480a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x6a  , 1 , // 266  - es-hn
-            0x80a  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xa6  , 1 , // 267  - es-mx
-            0x4c0a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xb6  , 1 , // 268  - es-ni
-            0x180a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xc0  , 1 , // 269  - es-pa
-            0x280a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xbb  , 1 , // 270  - es-pe
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xc9  , 1 , // 271  - es-ph
-            0x500a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xca  , 1 , // 272  - es-pr
-            0x3c0a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xb9  , 1 , // 273  - es-py
-            0x440a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x48  , 1 , // 274  - es-sv
-            0x540a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xf4  , 1 , // 275  - es-us
-            0x380a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xf6  , 1 , // 276  - es-uy
-            0x200a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xf9  , 1 , // 277  - es-ve
-            0x25   , 0x4e9 , 0x307 , 0x272d, 0x1f4 , 0x46  , 1 , // 278  - et
-            0x425  , 0x4e9 , 0x307 , 0x272d, 0x1f4 , 0x46  , 1 , // 279  - et-ee
-            0x2d   , 0x4e4 , 0x352 , 0x2   , 0x1f4 , 0xd9  , 1 , // 280  - eu
-            0x42d  , 0x4e4 , 0x352 , 0x2   , 0x1f4 , 0xd9  , 1 , // 281  - eu-es
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 282  - ewo
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 283  - ewo-cm
-            0x29   , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x74  , 0 , // 284  - fa
-            0x429  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x74  , 0 , // 285  - fa-ir
-            0x67   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd2  , 1 , // 286  - ff
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x31  , 1 , // 287  - ff-cm
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x64  , 1 , // 288  - ff-gn
-            0x7c67 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd2  , 1 , // 289  - ff-latn
-            0x867  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd2  , 1 , // 290  - ff-latn-sn
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xa2  , 1 , // 291  - ff-mr
-            0x467  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xaf  , 1 , // 292  - ff-ng
-            0xb    , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , 1 , // 293  - fi
-            0x40b  , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , 1 , // 294  - fi-fi
-            0x64   , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xc9  , 1 , // 295  - fil
-            0x464  , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xc9  , 1 , // 296  - fil-ph
-            0x38   , 0x4e4 , 0x352 , 0x275f, 0x4f35, 0x51  , 1 , // 297  - fo
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3d  , 1 , // 298  - fo-dk
-            0x438  , 0x4e4 , 0x352 , 0x275f, 0x4f35, 0x51  , 1 , // 299  - fo-fo
-            0xc    , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , 1 , // 300  - fr
-            0x1c0c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x993248, 1 , // 301  - fr-029
-            0x80c  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x15  , 1 , // 302  - fr-be
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xf5  , 1 , // 303  - fr-bf
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x26  , 1 , // 304  - fr-bi
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x1c  , 1 , // 305  - fr-bj
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x9a55c4f, 1 , // 306  - fr-bl
-            0xc0c  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x27  , 1 , // 307  - fr-ca
-            0x240c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x2c  , 1 , // 308  - fr-cd
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x37  , 1 , // 309  - fr-cf
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x2b  , 1 , // 310  - fr-cg
-            0x100c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xdf  , 1 , // 311  - fr-ch
-            0x300c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x77  , 1 , // 312  - fr-ci
-            0x2c0c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x31  , 1 , // 313  - fr-cm
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x3e  , 1 , // 314  - fr-dj
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x4   , 1 , // 315  - fr-dz
-            0x40c  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , 1 , // 316  - fr-fr
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x57  , 1 , // 317  - fr-ga
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x13d , 1 , // 318  - fr-gf
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x64  , 1 , // 319  - fr-gn
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x141 , 1 , // 320  - fr-gp
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x45  , 1 , // 321  - fr-gq
-            0x3c0c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x67  , 1 , // 322  - fr-ht
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x32  , 1 , // 323  - fr-km
-            0x140c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x93  , 1 , // 324  - fr-lu
-            0x380c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x9f  , 1 , // 325  - fr-ma
-            0x180c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x9e  , 1 , // 326  - fr-mc
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x7bda, 1 , // 327  - fr-mf
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x95  , 1 , // 328  - fr-mg
-            0x340c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x9d  , 1 , // 329  - fr-ml
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x14a , 1 , // 330  - fr-mq
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xa2  , 1 , // 331  - fr-mr
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xa0  , 1 , // 332  - fr-mu
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x14e , 1 , // 333  - fr-nc
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xad  , 1 , // 334  - fr-ne
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x13e , 1 , // 335  - fr-pf
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xce  , 1 , // 336  - fr-pm
-            0x200c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xc6  , 1 , // 337  - fr-re
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xcc  , 1 , // 338  - fr-rw
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd0  , 1 , // 339  - fr-sc
-            0x280c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd2  , 1 , // 340  - fr-sn
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xde  , 1 , // 341  - fr-sy
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x29  , 1 , // 342  - fr-td
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xe8  , 1 , // 343  - fr-tg
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xea  , 1 , // 344  - fr-tn
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xae  , 1 , // 345  - fr-vu
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x160 , 1 , // 346  - fr-wf
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x14b , 1 , // 347  - fr-yt
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x76  , 1 , // 348  - fur
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x76  , 1 , // 349  - fur-it
-            0x62   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb0  , 1 , // 350  - fy
-            0x462  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb0  , 1 , // 351  - fy-nl
-            0x3c   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x44  , 1 , // 352  - ga
-            0x83c  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x44  , 1 , // 353  - ga-ie
-            0x91   , 0x4e4 , 0x352 , 0x2710, 0x4f3d, 0xf2  , 1 , // 354  - gd
-            0x491  , 0x4e4 , 0x352 , 0x2710, 0x4f3d, 0xf2  , 1 , // 355  - gd-gb
-            0x56   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd9  , 1 , // 356  - gl
-            0x456  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd9  , 1 , // 357  - gl-es
-            0x74   , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xb9  , 1 , // 358  - gn
-            0x474  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xb9  , 1 , // 359  - gn-py
-            0x84   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xdf  , 1 , // 360  - gsw
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xdf  , 1 , // 361  - gsw-ch
-            0x484  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , 1 , // 362  - gsw-fr
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x91  , 1 , // 363  - gsw-li
-            0x47   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 364  - gu
-            0x447  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 365  - gu-in
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 366  - guz
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 367  - guz-ke
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3b16, 1 , // 368  - gv
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3b16, 1 , // 369  - gv-im
-            0x68   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , 1 , // 370  - ha
-            0x7c68 , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , 1 , // 371  - ha-latn
-            0x1000 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0x59  , 1 , // 372  - ha-latn-gh
-            0x1000 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xad  , 1 , // 373  - ha-latn-ne
-            0x468  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , 1 , // 374  - ha-latn-ng
-            0x75   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xf4  , 1 , // 375  - haw
-            0x475  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xf4  , 1 , // 376  - haw-us
-            0xd    , 0x4e7 , 0x35e , 0x2715, 0x1f4 , 0x75  , 1 , // 377  - he
-            0x40d  , 0x4e7 , 0x35e , 0x2715, 0x1f4 , 0x75  , 1 , // 378  - he-il
-            0x39   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 379  - hi
-            0x439  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 380  - hi-in
-            0x1a   , 0x4e2 , 0x354 , 0x2762, 0x1f4 , 0x6c  , 1 , // 381  - hr
-            0x101a , 0x4e2 , 0x354 , 0x2762, 0x366 , 0x19  , 1 , // 382  - hr-ba
-            0x41a  , 0x4e2 , 0x354 , 0x2762, 0x1f4 , 0x6c  , 1 , // 383  - hr-hr
-            0x2e   , 0x4e4 , 0x352 , 0x2710, 0x366 , 0x5e  , 1 , // 384  - hsb
-            0x42e  , 0x4e4 , 0x352 , 0x2710, 0x366 , 0x5e  , 1 , // 385  - hsb-de
-            0xe    , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x6d  , 1 , // 386  - hu
-            0x40e  , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x6d  , 1 , // 387  - hu-hu
-            0x1040e, 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x6d  , 1 , // 388  - hu-hu_technl
-            0x2b   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x7   , 1 , // 389  - hy
-            0x42b  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x7   , 1 , // 390  - hy-am
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x54  , 1 , // 391  - ia
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, 1 , // 392  - ia-001
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x54  , 1 , // 393  - ia-fr
-            0x69   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , 1 , // 394  - ibb
-            0x469  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , 1 , // 395  - ibb-ng
-            0x21   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , 1 , // 396  - id
-            0x421  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , 1 , // 397  - id-id
-            0x70   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , 1 , // 398  - ig
-            0x470  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , 1 , // 399  - ig-ng
-            0x78   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2d  , 1 , // 400  - ii
-            0x478  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2d  , 1 , // 401  - ii-cn
-            0xf    , 0x4e4 , 0x352 , 0x275f, 0x5187, 0x6e  , 1 , // 402  - is
-            0x40f  , 0x4e4 , 0x352 , 0x275f, 0x5187, 0x6e  , 1 , // 403  - is-is
-            0x10   , 0x4e4 , 0x352 , 0x2710, 0x4f38, 0x76  , 1 , // 404  - it
-            0x810  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xdf  , 1 , // 405  - it-ch
-            0x410  , 0x4e4 , 0x352 , 0x2710, 0x4f38, 0x76  , 1 , // 406  - it-it
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f38, 0xd6  , 1 , // 407  - it-sm
-            0x5d   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0x27  , 1 , // 408  - iu
-            0x785d , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x27  , 1 , // 409  - iu-cans
-            0x45d  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x27  , 1 , // 410  - iu-cans-ca
-            0x7c5d , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0x27  , 1 , // 411  - iu-latn
-            0x85d  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0x27  , 1 , // 412  - iu-latn-ca
-            0x11   , 0x3a4 , 0x3a4 , 0x2711, 0x4f42, 0x7a  , 1 , // 413  - ja
-            0x411  , 0x3a4 , 0x3a4 , 0x2711, 0x4f42, 0x7a  , 1 , // 414  - ja-jp
-            0x40411, 0x3a4 , 0x3a4 , 0x2711, 0x4f42, 0x7a  , 1 , // 415  - ja-jp_radstr
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 416  - jgo
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 417  - jgo-cm
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 418  - jmc
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 419  - jmc-tz
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , 1 , // 420  - jv
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , 1 , // 421  - jv-java
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , 1 , // 422  - jv-java-id
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , 1 , // 423  - jv-latn
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , 1 , // 424  - jv-latn-id
-            0x37   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x58  , 1 , // 425  - ka
-            0x437  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x58  , 1 , // 426  - ka-ge
-            0x10437, 0x0   , 0x1   , 0x2   , 0x1f4 , 0x58  , 1 , // 427  - ka-ge_modern
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x4   , 1 , // 428  - kab
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x4   , 1 , // 429  - kab-dz
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 430  - kam
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 431  - kam-ke
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 432  - kde
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 433  - kde-tz
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x39  , 1 , // 434  - kea
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x39  , 1 , // 435  - kea-cv
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , 1 , // 436  - khq
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , 1 , // 437  - khq-ml
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 438  - ki
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 439  - ki-ke
-            0x3f   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x89  , 1 , // 440  - kk
-            0x43f  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x89  , 1 , // 441  - kk-kz
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 442  - kkj
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 443  - kkj-cm
-            0x6f   , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0x5d  , 1 , // 444  - kl
-            0x46f  , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0x5d  , 1 , // 445  - kl-gl
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 446  - kln
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 447  - kln-ke
-            0x53   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x28  , 2 , // 448  - km
-            0x453  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x28  , 2 , // 449  - km-kh
-            0x4b   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 450  - kn
-            0x44b  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 451  - kn-in
-            0x12   , 0x3b5 , 0x3b5 , 0x2713, 0x5161, 0x86  , 1 , // 452  - ko
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x83  , 1 , // 453  - ko-kp
-            0x412  , 0x3b5 , 0x3b5 , 0x2713, 0x5161, 0x86  , 1 , // 454  - ko-kr
-            0x57   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 455  - kok
-            0x457  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 456  - kok-in
-            0x71   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , 1 , // 457  - kr
-            0x471  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , 1 , // 458  - kr-ng
-            0x60   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 2 , // 459  - ks
-            0x460  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 2 , // 460  - ks-arab
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 2 , // 461  - ks-arab-in
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 462  - ks-deva
-            0x860  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 463  - ks-deva-in
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 464  - ksb
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 465  - ksb-tz
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 466  - ksf
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 467  - ksf-cm
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x5e  , 1 , // 468  - ksh
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x5e  , 1 , // 469  - ksh-de
-            0x92   , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x79  , 0 , // 470  - ku
-            0x7c92 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x79  , 0 , // 471  - ku-arab
-            0x492  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x79  , 0 , // 472  - ku-arab-iq
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x74  , 0 , // 473  - ku-arab-ir
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf2  , 1 , // 474  - kw
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf2  , 1 , // 475  - kw-gb
-            0x40   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x82  , 1 , // 476  - ky
-            0x440  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x82  , 1 , // 477  - ky-kg
-            0x76   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0x989e, 1 , // 478  - la
-            0x476  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0x989e, 1 , // 479  - la-001
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 480  - lag
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 481  - lag-tz
-            0x6e   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x93  , 1 , // 482  - lb
-            0x46e  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x93  , 1 , // 483  - lb-lu
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , // 484  - lg
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , // 485  - lg-ug
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf4  , 1 , // 486  - lkt
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf4  , 1 , // 487  - lkt-us
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2c  , 1 , // 488  - ln
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9   , 1 , // 489  - ln-ao
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2c  , 1 , // 490  - ln-cd
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x37  , 1 , // 491  - ln-cf
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2b  , 1 , // 492  - ln-cg
-            0x54   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8a  , 1 , // 493  - lo
-            0x454  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8a  , 1 , // 494  - lo-la
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x74  , 2 , // 495  - lrc
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x79  , 2 , // 496  - lrc-iq
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x74  , 2 , // 497  - lrc-ir
-            0x27   , 0x4e9 , 0x307 , 0x272d, 0x1f4 , 0x8d  , 1 , // 498  - lt
-            0x427  , 0x4e9 , 0x307 , 0x272d, 0x1f4 , 0x8d  , 1 , // 499  - lt-lt
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2c  , 1 , // 500  - lu
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2c  , 1 , // 501  - lu-cd
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 502  - luo
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 503  - luo-ke
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 504  - luy
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 505  - luy-ke
-            0x26   , 0x4e9 , 0x307 , 0x272d, 0x1f4 , 0x8c  , 1 , // 506  - lv
-            0x426  , 0x4e9 , 0x307 , 0x272d, 0x1f4 , 0x8c  , 1 , // 507  - lv-lv
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 508  - mas
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 509  - mas-ke
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 510  - mas-tz
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 511  - mer
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 512  - mer-ke
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa0  , 1 , // 513  - mfe
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa0  , 1 , // 514  - mfe-mu
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x95  , 1 , // 515  - mg
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x95  , 1 , // 516  - mg-mg
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa8  , 1 , // 517  - mgh
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa8  , 1 , // 518  - mgh-mz
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 519  - mgo
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 520  - mgo-cm
-            0x81   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xb7  , 1 , // 521  - mi
-            0x481  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xb7  , 1 , // 522  - mi-nz
-            0x2f   , 0x4e3 , 0x362 , 0x2717, 0x1f4 , 0x4ca2, 1 , // 523  - mk
-            0x42f  , 0x4e3 , 0x362 , 0x2717, 0x1f4 , 0x4ca2, 1 , // 524  - mk-mk
-            0x4c   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 525  - ml
-            0x44c  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 526  - ml-in
-            0x50   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x9a  , 1 , // 527  - mn
-            0x7850 , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x9a  , 1 , // 528  - mn-cyrl
-            0x450  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x9a  , 1 , // 529  - mn-mn
-            0x7c50 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2d  , 1 , // 530  - mn-mong
-            0x850  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2d  , 1 , // 531  - mn-mong-cn
-            0xc50  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9a  , 1 , // 532  - mn-mong-mn
-            0x58   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 533  - mni
-            0x458  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 534  - mni-in
-            0x7c   , 0x4e4 , 0x352 , 0x2710, 0x25  , 0x27  , 1 , // 535  - moh
-            0x47c  , 0x4e4 , 0x352 , 0x2710, 0x25  , 0x27  , 1 , // 536  - moh-ca
-            0x4e   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 537  - mr
-            0x44e  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 538  - mr-in
-            0x3e   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xa7  , 1 , // 539  - ms
-            0x83e  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x25  , 1 , // 540  - ms-bn
-            0x43e  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xa7  , 1 , // 541  - ms-my
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd7  , 1 , // 542  - ms-sg
-            0x3a   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa3  , 1 , // 543  - mt
-            0x43a  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa3  , 1 , // 544  - mt-mt
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 545  - mua
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 546  - mua-cm
-            0x55   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x1b  , 2 , // 547  - my
-            0x455  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x1b  , 2 , // 548  - my-mm
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x74  , 2 , // 549  - mzn
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x74  , 2 , // 550  - mzn-ir
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xfe  , 1 , // 551  - naq
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xfe  , 1 , // 552  - naq-na
-            0x7c14 , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , 1 , // 553  - nb
-            0x414  , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , 1 , // 554  - nb-no
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xdc  , 1 , // 555  - nb-sj
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x108 , 1 , // 556  - nd
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x108 , 1 , // 557  - nd-zw
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x5e  , 1 , // 558  - nds
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x5e  , 1 , // 559  - nds-de
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xb0  , 1 , // 560  - nds-nl
-            0x61   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xb2  , 1 , // 561  - ne
-            0x861  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 2 , // 562  - ne-in
-            0x461  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xb2  , 1 , // 563  - ne-np
-            0x13   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb0  , 1 , // 564  - nl
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x12e , 1 , // 565  - nl-aw
-            0x813  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x15  , 1 , // 566  - nl-be
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x9a55d42, 1 , // 567  - nl-bq
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x111 , 1 , // 568  - nl-cw
-            0x413  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb0  , 1 , // 569  - nl-nl
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb5  , 1 , // 570  - nl-sr
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x78f7, 1 , // 571  - nl-sx
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 572  - nmg
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 573  - nmg-cm
-            0x7814 , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , 1 , // 574  - nn
-            0x814  , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , 1 , // 575  - nn-no
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 576  - nnh
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 577  - nnh-cm
-            0x14   , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , 1 , // 578  - no
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x64  , 2 , // 579  - nqo
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x64  , 2 , // 580  - nqo-gn
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , // 581  - nr
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , // 582  - nr-za
-            0x6c   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , // 583  - nso
-            0x46c  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , // 584  - nso-za
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x114 , 1 , // 585  - nus
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x114 , 1 , // 586  - nus-ss
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , // 587  - nyn
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , // 588  - nyn-ug
-            0x82   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , 1 , // 589  - oc
-            0x482  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , 1 , // 590  - oc-fr
-            0x72   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , // 591  - om
-            0x472  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , // 592  - om-et
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 593  - om-ke
-            0x48   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 594  - or
-            0x448  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 595  - or-in
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x58  , 1 , // 596  - os
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x58  , 1 , // 597  - os-ge
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xcb  , 1 , // 598  - os-ru
-            0x46   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 599  - pa
-            0x7c46 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , 2 , // 600  - pa-arab
-            0x846  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , 2 , // 601  - pa-arab-pk
-            0x446  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 602  - pa-in
-            0x79   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x993248, 1 , // 603  - pap
-            0x479  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x993248, 1 , // 604  - pap-029
-            0x15   , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xbf  , 1 , // 605  - pl
-            0x415  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xbf  , 1 , // 606  - pl-pl
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, 1 , // 607  - prg
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, 1 , // 608  - prg-001
-            0x8c   , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x3   , 2 , // 609  - prs
-            0x48c  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x3   , 2 , // 610  - prs-af
-            0x63   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3   , 2 , // 611  - ps
-            0x463  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3   , 2 , // 612  - ps-af
-            0x16   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x20  , 1 , // 613  - pt
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x9   , 1 , // 614  - pt-ao
-            0x416  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x20  , 1 , // 615  - pt-br
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xdf  , 1 , // 616  - pt-ch
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x39  , 1 , // 617  - pt-cv
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x45  , 1 , // 618  - pt-gq
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xc4  , 1 , // 619  - pt-gw
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x93  , 1 , // 620  - pt-lu
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x97  , 1 , // 621  - pt-mo
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xa8  , 1 , // 622  - pt-mz
-            0x816  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xc1  , 1 , // 623  - pt-pt
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xe9  , 1 , // 624  - pt-st
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f60e7, 1 , // 625  - pt-tl
-            0x901  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x7c  , 1 , // 626  - qps-latn-x-sh
-            0x501  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xf4  , 1 , // 627  - qps-ploc
-            0x5fe  , 0x3a4 , 0x3a4 , 0x2711, 0x4f42, 0x7a  , 1 , // 628  - qps-ploca
-            0x9ff  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xcd  , 0 , // 629  - qps-plocm
-            0x86   , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x63  , 1 , // 630  - quc
-            0x7c86 , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x63  , 1 , // 631  - quc-latn
-            0x486  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x63  , 1 , // 632  - quc-latn-gt
-            0x6b   , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x1a  , 1 , // 633  - quz
-            0x46b  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x1a  , 1 , // 634  - quz-bo
-            0x86b  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x42  , 1 , // 635  - quz-ec
-            0xc6b  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xbb  , 1 , // 636  - quz-pe
-            0x17   , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0xdf  , 1 , // 637  - rm
-            0x417  , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0xdf  , 1 , // 638  - rm-ch
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x26  , 1 , // 639  - rn
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x26  , 1 , // 640  - rn-bi
-            0x18   , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xc8  , 1 , // 641  - ro
-            0x818  , 0x4e2 , 0x354 , 0x2   , 0x1f4 , 0x98  , 1 , // 642  - ro-md
-            0x418  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xc8  , 1 , // 643  - ro-ro
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 644  - rof
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 645  - rof-tz
-            0x19   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , 1 , // 646  - ru
-            0x1000 , 0x4e3 , 0x362 , 0x2   , 0x1f4 , 0x1d  , 1 , // 647  - ru-by
-            0x1000 , 0x4e3 , 0x362 , 0x2   , 0x1f4 , 0x82  , 1 , // 648  - ru-kg
-            0x1000 , 0x4e3 , 0x362 , 0x2   , 0x1f4 , 0x89  , 1 , // 649  - ru-kz
-            0x819  , 0x4e3 , 0x362 , 0x2   , 0x1f4 , 0x98  , 1 , // 650  - ru-md
-            0x419  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , 1 , // 651  - ru-ru
-            0x1000 , 0x4e3 , 0x362 , 0x2   , 0x1f4 , 0xf1  , 1 , // 652  - ru-ua
-            0x87   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xcc  , 1 , // 653  - rw
-            0x487  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xcc  , 1 , // 654  - rw-rw
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 655  - rwk
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 656  - rwk-tz
-            0x4f   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 657  - sa
-            0x44f  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 658  - sa-in
-            0x85   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , 1 , // 659  - sah
-            0x485  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , 1 , // 660  - sah-ru
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 661  - saq
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 662  - saq-ke
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 663  - sbp
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 664  - sbp-tz
-            0x59   , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , 2 , // 665  - sd
-            0x7c59 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , 2 , // 666  - sd-arab
-            0x859  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , 2 , // 667  - sd-arab-pk
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 668  - sd-deva
-            0x459  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 669  - sd-deva-in
-            0x3b   , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , 1 , // 670  - se
-            0xc3b  , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , 1 , // 671  - se-fi
-            0x43b  , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , 1 , // 672  - se-no
-            0x83b  , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , 1 , // 673  - se-se
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa8  , 1 , // 674  - seh
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa8  , 1 , // 675  - seh-mz
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , 1 , // 676  - ses
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , 1 , // 677  - ses-ml
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x37  , 1 , // 678  - sg
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x37  , 1 , // 679  - sg-cf
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , // 680  - shi
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , // 681  - shi-latn
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , // 682  - shi-latn-ma
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , // 683  - shi-tfng
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , // 684  - shi-tfng-ma
-            0x5b   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2a  , 1 , // 685  - si
-            0x45b  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2a  , 1 , // 686  - si-lk
-            0x1b   , 0x4e2 , 0x354 , 0x272d, 0x5190, 0x8f  , 1 , // 687  - sk
-            0x41b  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0x8f  , 1 , // 688  - sk-sk
-            0x24   , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xd4  , 1 , // 689  - sl
-            0x424  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xd4  , 1 , // 690  - sl-si
-            0x783b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , 1 , // 691  - sma
-            0x183b , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , 1 , // 692  - sma-no
-            0x1c3b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , 1 , // 693  - sma-se
-            0x7c3b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , 1 , // 694  - smj
-            0x103b , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , 1 , // 695  - smj-no
-            0x143b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , 1 , // 696  - smj-se
-            0x703b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , 1 , // 697  - smn
-            0x243b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , 1 , // 698  - smn-fi
-            0x743b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , 1 , // 699  - sms
-            0x203b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , 1 , // 700  - sms-fi
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x108 , 1 , // 701  - sn
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x108 , 1 , // 702  - sn-latn
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x108 , 1 , // 703  - sn-latn-zw
-            0x77   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd8  , 1 , // 704  - so
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3e  , 1 , // 705  - so-dj
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , // 706  - so-et
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 707  - so-ke
-            0x477  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd8  , 1 , // 708  - so-so
-            0x1c   , 0x4e2 , 0x354 , 0x272d, 0x5190, 0x6   , 1 , // 709  - sq
-            0x41c  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0x6   , 1 , // 710  - sq-al
-            0x1000 , 0x4e2 , 0x354 , 0x272d, 0x5190, 0x4ca2, 1 , // 711  - sq-mk
-            0x1000 , 0x4e2 , 0x354 , 0x272d, 0x5190, 0x974941, 1 , // 712  - sq-xk
-            0x7c1a , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x10f , 1 , // 713  - sr
-            0x6c1a , 0x4e3 , 0x357 , 0x2717, 0x5221, 0x10f , 1 , // 714  - sr-cyrl
-            0x1c1a , 0x4e3 , 0x357 , 0x2717, 0x5221, 0x19  , 1 , // 715  - sr-cyrl-ba
-            0xc1a  , 0x4e3 , 0x357 , 0x2717, 0x5221, 0x10d , 1 , // 716  - sr-cyrl-cs
-            0x301a , 0x4e3 , 0x357 , 0x2717, 0x5221, 0x10e , 1 , // 717  - sr-cyrl-me
-            0x281a , 0x4e3 , 0x357 , 0x2717, 0x5221, 0x10f , 1 , // 718  - sr-cyrl-rs
-            0x1000 , 0x4e3 , 0x357 , 0x2717, 0x5221, 0x974941, 1 , // 719  - sr-cyrl-xk
-            0x701a , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x10f , 1 , // 720  - sr-latn
-            0x181a , 0x4e2 , 0x354 , 0x2762, 0x366 , 0x19  , 1 , // 721  - sr-latn-ba
-            0x81a  , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x10d , 1 , // 722  - sr-latn-cs
-            0x2c1a , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x10e , 1 , // 723  - sr-latn-me
-            0x241a , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x10f , 1 , // 724  - sr-latn-rs
-            0x1000 , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x974941, 1 , // 725  - sr-latn-xk
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , // 726  - ss
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x104 , 1 , // 727  - ss-sz
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , // 728  - ss-za
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , 1 , // 729  - ssy
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , 1 , // 730  - ssy-er
-            0x30   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , // 731  - st
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x92  , 1 , // 732  - st-ls
-            0x430  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , // 733  - st-za
-            0x1d   , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , 1 , // 734  - sv
-            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x9906f5, 1 , // 735  - sv-ax
-            0x81d  , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , 1 , // 736  - sv-fi
-            0x41d  , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , 1 , // 737  - sv-se
-            0x41   , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0x81  , 1 , // 738  - sw
-            0x1000 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0x2c  , 1 , // 739  - sw-cd
-            0x441  , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0x81  , 1 , // 740  - sw-ke
-            0x1000 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xef  , 1 , // 741  - sw-tz
-            0x1000 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xf0  , 1 , // 742  - sw-ug
-            0x1000 , 0x0   , 0x1   , 0x0   , 0x1f4 , 0x2c  , 1 , // 743  - swc
-            0x1000 , 0x0   , 0x1   , 0x0   , 0x1f4 , 0x2c  , 1 , // 744  - swc-cd
-            0x5a   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xde  , 1 , // 745  - syr
-            0x45a  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xde  , 1 , // 746  - syr-sy
-            0x49   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 747  - ta
-            0x449  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 748  - ta-in
-            0x849  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2a  , 1 , // 749  - ta-lk
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa7  , 1 , // 750  - ta-my
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd7  , 1 , // 751  - ta-sg
-            0x4a   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 752  - te
-            0x44a  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , // 753  - te-in
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , // 754  - teo
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , // 755  - teo-ke
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , // 756  - teo-ug
-            0x28   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xe4  , 1 , // 757  - tg
-            0x7c28 , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xe4  , 1 , // 758  - tg-cyrl
-            0x428  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xe4  , 1 , // 759  - tg-cyrl-tj
-            0x1e   , 0x36a , 0x36a , 0x2725, 0x5166, 0xe3  , 1 , // 760  - th
-            0x41e  , 0x36a , 0x36a , 0x2725, 0x5166, 0xe3  , 1 , // 761  - th-th
-            0x73   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , 1 , // 762  - ti
-            0x873  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , 1 , // 763  - ti-er
-            0x473  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , // 764  - ti-et
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , 1 , // 765  - tig
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , 1 , // 766  - tig-er
-            0x42   , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xee  , 1 , // 767  - tk
-            0x442  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xee  , 1 , // 768  - tk-tm
-            0x32   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , // 769  - tn
-            0x832  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x13  , 1 , // 770  - tn-bw
-            0x432  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , // 771  - tn-za
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xe7  , 1 , // 772  - to
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xe7  , 1 , // 773  - to-to
-            0x1f   , 0x4e6 , 0x359 , 0x2761, 0x51a9, 0xeb  , 1 , // 774  - tr
-            0x1000 , 0x4e6 , 0x359 , 0x2761, 0x51a9, 0x3b  , 1 , // 775  - tr-cy
-            0x41f  , 0x4e6 , 0x359 , 0x2761, 0x51a9, 0xeb  , 1 , // 776  - tr-tr
-            0x31   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , // 777  - ts
-            0x431  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , // 778  - ts-za
-            0x44   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , 1 , // 779  - tt
-            0x444  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , 1 , // 780  - tt-ru
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xad  , 1 , // 781  - twq
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xad  , 1 , // 782  - twq-ne
-            0x5f   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x4   , 1 , // 783  - tzm
-            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x9f  , 1 , // 784  - tzm-arab
-            0x45f  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x9f  , 1 , // 785  - tzm-arab-ma
-            0x7c5f , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x4   , 1 , // 786  - tzm-latn
-            0x85f  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x4   , 1 , // 787  - tzm-latn-dz
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , // 788  - tzm-latn-ma
-            0x785f , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , // 789  - tzm-tfng
-            0x105f , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , // 790  - tzm-tfng-ma
-            0x80   , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x2d  , 1 , // 791  - ug
-            0x480  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x2d  , 1 , // 792  - ug-cn
-            0x22   , 0x4e3 , 0x362 , 0x2721, 0x1f4 , 0xf1  , 1 , // 793  - uk
-            0x422  , 0x4e3 , 0x362 , 0x2721, 0x1f4 , 0xf1  , 1 , // 794  - uk-ua
-            0x20   , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , 1 , // 795  - ur
-            0x820  , 0x4e8 , 0x2d0 , 0x2   , 0x1f4 , 0x71  , 2 , // 796  - ur-in
-            0x420  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , 1 , // 797  - ur-pk
-            0x43   , 0x4e6 , 0x359 , 0x272d, 0x1f4 , 0xf7  , 1 , // 798  - uz
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3   , 2 , // 799  - uz-arab
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3   , 2 , // 800  - uz-arab-af
-            0x7843 , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xf7  , 1 , // 801  - uz-cyrl
-            0x843  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xf7  , 1 , // 802  - uz-cyrl-uz
-            0x7c43 , 0x4e6 , 0x359 , 0x272d, 0x1f4 , 0xf7  , 1 , // 803  - uz-latn
-            0x443  , 0x4e6 , 0x359 , 0x272d, 0x1f4 , 0xf7  , 1 , // 804  - uz-latn-uz
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8e  , 1 , // 805  - vai
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8e  , 1 , // 806  - vai-latn
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8e  , 1 , // 807  - vai-latn-lr
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8e  , 1 , // 808  - vai-vaii
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8e  , 1 , // 809  - vai-vaii-lr
-            0x33   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , // 810  - ve
-            0x433  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , // 811  - ve-za
-            0x2a   , 0x4ea , 0x4ea , 0x2710, 0x1f4 , 0xfb  , 1 , // 812  - vi
-            0x42a  , 0x4ea , 0x4ea , 0x2710, 0x1f4 , 0xfb  , 1 , // 813  - vi-vn
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, 1 , // 814  - vo
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, 1 , // 815  - vo-001
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 816  - vun
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , // 817  - vun-tz
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xdf  , 1 , // 818  - wae
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xdf  , 1 , // 819  - wae-ch
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , // 820  - wal
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , // 821  - wal-et
-            0x88   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd2  , 1 , // 822  - wo
-            0x488  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd2  , 1 , // 823  - wo-sn
-            0x1007f, 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xf4  , 1 , // 824  - x-iv_mathan
-            0x34   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , // 825  - xh
-            0x434  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , // 826  - xh-za
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , // 827  - xog
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , // 828  - xog-ug
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 829  - yav
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , // 830  - yav-cm
-            0x3d   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, 1 , // 831  - yi
-            0x43d  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, 1 , // 832  - yi-001
-            0x6a   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , 1 , // 833  - yo
-            0x1000 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0x1c  , 1 , // 834  - yo-bj
-            0x46a  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , 1 , // 835  - yo-ng
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x68  , 1 , // 836  - yue
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x68  , 1 , // 837  - yue-hk
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , // 838  - zgh
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , // 839  - zgh-tfng
-            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , // 840  - zgh-tfng-ma
-            0x7804 , 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x2d  , 1 , // 841  - zh
-            0x4    , 0x3a8 , 0x3a8 , 0x0   , 0x1f4 , 0x2d  , 1 , // 842  - zh-chs
-            0x7c04 , 0x3b6 , 0x3b6 , 0x0   , 0x1f4 , 0x68  , 1 , // 843  - zh-cht
-            0x804  , 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x2d  , 1 , // 844  - zh-cn
-            0x50804, 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x2d  , 1 , // 845  - zh-cn_phoneb
-            0x20804, 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x2d  , 1 , // 846  - zh-cn_stroke
-            0x4    , 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x2d  , 1 , // 847  - zh-hans
-            0x1000 , 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x68  , 1 , // 848  - zh-hans-hk
-            0x1000 , 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x97  , 1 , // 849  - zh-hans-mo
-            0x7c04 , 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0x68  , 1 , // 850  - zh-hant
-            0xc04  , 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0x68  , 1 , // 851  - zh-hk
-            0x40c04, 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0x68  , 1 , // 852  - zh-hk_radstr
-            0x1404 , 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0x97  , 1 , // 853  - zh-mo
-            0x41404, 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0x97  , 1 , // 854  - zh-mo_radstr
-            0x21404, 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0x97  , 1 , // 855  - zh-mo_stroke
-            0x1004 , 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0xd7  , 1 , // 856  - zh-sg
-            0x51004, 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0xd7  , 1 , // 857  - zh-sg_phoneb
-            0x21004, 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0xd7  , 1 , // 858  - zh-sg_stroke
-            0x404  , 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0xed  , 1 , // 859  - zh-tw
-            0x30404, 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0xed  , 1 , // 860  - zh-tw_pronun
-            0x40404, 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0xed  , 1 , // 861  - zh-tw_radstr
-            0x35   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , // 862  - zu
-            0x435  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , // 863  - zu-za
+         // Lcid,  Ansi CP, Oem CP, MAC CP, EBCDIC CP, Geo Id, digit substitution, Specific culture index // index - locale name
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , 3   , // 0    - aa
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3e  , 1 , 1   , // 1    - aa-dj
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , 1 , 2   , // 2    - aa-er
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , 3   , // 3    - aa-et
+            0x36   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , 6   , // 4    - af
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xfe  , 1 , 5   , // 5    - af-na
+            0x436  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , 6   , // 6    - af-za
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 8   , // 7    - agq
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 8   , // 8    - agq-cm
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x59  , 1 , 10  , // 9    - ak
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x59  , 1 , 10  , // 10   - ak-gh
+            0x5e   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , 12  , // 11   - am
+            0x45e  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , 12  , // 12   - am-et
+            0x1    , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xcd  , 0 , 33  , // 13   - ar
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x989e, 0 , 14  , // 14   - ar-001
+            0x3801 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xe0  , 0 , 15  , // 15   - ar-ae
+            0x3c01 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x11  , 0 , 16  , // 16   - ar-bh
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x3e  , 0 , 17  , // 17   - ar-dj
+            0x1401 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x4   , 1 , 18  , // 18   - ar-dz
+            0xc01  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x43  , 0 , 19  , // 19   - ar-eg
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x47  , 0 , 20  , // 20   - ar-er
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x75  , 0 , 21  , // 21   - ar-il
+            0x801  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x79  , 0 , 22  , // 22   - ar-iq
+            0x2c01 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x7e  , 0 , 23  , // 23   - ar-jo
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x32  , 0 , 24  , // 24   - ar-km
+            0x3401 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x88  , 0 , 25  , // 25   - ar-kw
+            0x3001 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x8b  , 0 , 26  , // 26   - ar-lb
+            0x1001 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x94  , 1 , 27  , // 27   - ar-ly
+            0x1801 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x9f  , 1 , 28  , // 28   - ar-ma
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xa2  , 0 , 29  , // 29   - ar-mr
+            0x2001 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xa4  , 0 , 30  , // 30   - ar-om
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xb8  , 0 , 31  , // 31   - ar-ps
+            0x4001 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xc5  , 0 , 32  , // 32   - ar-qa
+            0x401  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xcd  , 0 , 33  , // 33   - ar-sa
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xdb  , 0 , 34  , // 34   - ar-sd
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xd8  , 0 , 35  , // 35   - ar-so
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x114 , 0 , 36  , // 36   - ar-ss
+            0x2801 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xde  , 0 , 37  , // 37   - ar-sy
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x29  , 0 , 38  , // 38   - ar-td
+            0x1c01 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xea  , 1 , 39  , // 39   - ar-tn
+            0x2401 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x105 , 0 , 40  , // 40   - ar-ye
+            0x7a   , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x2e  , 1 , 42  , // 41   - arn
+            0x47a  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x2e  , 1 , 42  , // 42   - arn-cl
+            0x4d   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 44  , // 43   - as
+            0x44d  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 44  , // 44   - as-in
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 46  , // 45   - asa
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 46  , // 46   - asa-tz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd9  , 1 , 48  , // 47   - ast
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd9  , 1 , 48  , // 48   - ast-es
+            0x2c   , 0x4e6 , 0x359 , 0x2761, 0x51a9, 0x5   , 1 , 53  , // 49   - az
+            0x742c , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x5   , 1 , 51  , // 50   - az-cyrl
+            0x82c  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x5   , 1 , 51  , // 51   - az-cyrl-az
+            0x782c , 0x4e6 , 0x359 , 0x2761, 0x51a9, 0x5   , 1 , 53  , // 52   - az-latn
+            0x42c  , 0x4e6 , 0x359 , 0x2761, 0x51a9, 0x5   , 1 , 53  , // 53   - az-latn-az
+            0x6d   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , 1 , 55  , // 54   - ba
+            0x46d  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , 1 , 55  , // 55   - ba-ru
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 57  , // 56   - bas
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 57  , // 57   - bas-cm
+            0x23   , 0x4e3 , 0x362 , 0x2717, 0x1f4 , 0x1d  , 1 , 59  , // 58   - be
+            0x423  , 0x4e3 , 0x362 , 0x2717, 0x1f4 , 0x1d  , 1 , 59  , // 59   - be-by
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x107 , 1 , 61  , // 60   - bem
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x107 , 1 , 61  , // 61   - bem-zm
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 63  , // 62   - bez
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 63  , // 63   - bez-tz
+            0x2    , 0x4e3 , 0x362 , 0x2717, 0x5221, 0x23  , 1 , 65  , // 64   - bg
+            0x402  , 0x4e3 , 0x362 , 0x2717, 0x5221, 0x23  , 1 , 65  , // 65   - bg-bg
+            0x66   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , 1 , 67  , // 66   - bin
+            0x466  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , 1 , 67  , // 67   - bin-ng
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , 1 , 70  , // 68   - bm
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , 1 , 70  , // 69   - bm-latn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , 1 , 70  , // 70   - bm-latn-ml
+            0x45   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x17  , 1 , 72  , // 71   - bn
+            0x845  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x17  , 1 , 72  , // 72   - bn-bd
+            0x445  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 73  , // 73   - bn-in
+            0x51   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2d  , 1 , 75  , // 74   - bo
+            0x451  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2d  , 1 , 75  , // 75   - bo-cn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 76  , // 76   - bo-in
+            0x7e   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , 1 , 78  , // 77   - br
+            0x47e  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , 1 , 78  , // 78   - br-fr
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 80  , // 79   - brx
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 80  , // 80   - brx-in
+            0x781a , 0x4e2 , 0x354 , 0x2762, 0x366 , 0x19  , 1 , 85  , // 81   - bs
+            0x641a , 0x4e3 , 0x357 , 0x2762, 0x366 , 0x19  , 1 , 83  , // 82   - bs-cyrl
+            0x201a , 0x4e3 , 0x357 , 0x2762, 0x366 , 0x19  , 1 , 83  , // 83   - bs-cyrl-ba
+            0x681a , 0x4e2 , 0x354 , 0x2762, 0x366 , 0x19  , 1 , 85  , // 84   - bs-latn
+            0x141a , 0x4e2 , 0x354 , 0x2762, 0x366 , 0x19  , 1 , 85  , // 85   - bs-latn-ba
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , 1 , 87  , // 86   - byn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , 1 , 87  , // 87   - byn-er
+            0x3    , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd9  , 1 , 90  , // 88   - ca
+            0x1000 , 0x4e4 , 0x352 , 0x2   , 0x1f4 , 0x8   , 1 , 89  , // 89   - ca-ad
+            0x403  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd9  , 1 , 90  , // 90   - ca-es
+            0x803  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd9  , 1 , 91  , // 91   - ca-es-valencia
+            0x1000 , 0x4e4 , 0x352 , 0x2   , 0x1f4 , 0x54  , 1 , 92  , // 92   - ca-fr
+            0x1000 , 0x4e4 , 0x352 , 0x2   , 0x1f4 , 0x76  , 1 , 93  , // 93   - ca-it
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xcb  , 1 , 95  , // 94   - ce
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xcb  , 1 , 95  , // 95   - ce-ru
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , 97  , // 96   - cgg
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , 97  , // 97   - cgg-ug
+            0x5c   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf4  , 1 , 100 , // 98   - chr
+            0x7c5c , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf4  , 1 , 100 , // 99   - chr-cher
+            0x45c  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf4  , 1 , 100 , // 100  - chr-cher-us
+            0x83   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , 1 , 102 , // 101  - co
+            0x483  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , 1 , 102 , // 102  - co-fr
+            0x5    , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x4b  , 1 , 104 , // 103  - cs
+            0x405  , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x4b  , 1 , 104 , // 104  - cs-cz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xcb  , 1 , 106 , // 105  - cu
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xcb  , 1 , 106 , // 106  - cu-ru
+            0x52   , 0x4e4 , 0x352 , 0x2710, 0x4f3d, 0xf2  , 1 , 108 , // 107  - cy
+            0x452  , 0x4e4 , 0x352 , 0x2710, 0x4f3d, 0xf2  , 1 , 108 , // 108  - cy-gb
+            0x6    , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0x3d  , 1 , 110 , // 109  - da
+            0x406  , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0x3d  , 1 , 110 , // 110  - da-dk
+            0x1000 , 0x4e4 , 0x352 , 0x2   , 0x1f4 , 0x5d  , 1 , 111 , // 111  - da-gl
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 113 , // 112  - dav
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 113 , // 113  - dav-ke
+            0x7    , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0x5e  , 1 , 118 , // 114  - de
+            0xc07  , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0xe   , 1 , 115 , // 115  - de-at
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0x15  , 1 , 116 , // 116  - de-be
+            0x807  , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0xdf  , 1 , 117 , // 117  - de-ch
+            0x407  , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0x5e  , 1 , 118 , // 118  - de-de
+            0x10407, 0x4e4 , 0x352 , 0x2710, 0x4f31, 0x5e  , 1 , 118 , // 119  - de-de_phoneb
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x76  , 1 , 120 , // 120  - de-it
+            0x1407 , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0x91  , 1 , 121 , // 121  - de-li
+            0x1007 , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0x93  , 1 , 122 , // 122  - de-lu
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xad  , 1 , 124 , // 123  - dje
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xad  , 1 , 124 , // 124  - dje-ne
+            0x7c2e , 0x4e4 , 0x352 , 0x2710, 0x366 , 0x5e  , 1 , 126 , // 125  - dsb
+            0x82e  , 0x4e4 , 0x352 , 0x2710, 0x366 , 0x5e  , 1 , 126 , // 126  - dsb-de
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 128 , // 127  - dua
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 128 , // 128  - dua-cm
+            0x65   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa5  , 1 , 130 , // 129  - dv
+            0x465  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa5  , 1 , 130 , // 130  - dv-mv
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd2  , 1 , 132 , // 131  - dyo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd2  , 1 , 132 , // 132  - dyo-sn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x22  , 2 , 134 , // 133  - dz
+            0xc51  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x22  , 2 , 134 , // 134  - dz-bt
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 136 , // 135  - ebu
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 136 , // 136  - ebu-ke
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x59  , 1 , 138 , // 137  - ee
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x59  , 1 , 138 , // 138  - ee-gh
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xe8  , 1 , 139 , // 139  - ee-tg
+            0x8    , 0x4e5 , 0x2e1 , 0x2716, 0x4f31, 0x62  , 1 , 142 , // 140  - el
+            0x1000 , 0x4e5 , 0x2e1 , 0x2716, 0x4f31, 0x3b  , 1 , 141 , // 141  - el-cy
+            0x408  , 0x4e5 , 0x2e1 , 0x2716, 0x4f31, 0x62  , 1 , 142 , // 142  - el-gr
+            0x9    , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xf4  , 1 , 240 , // 143  - en
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x989e, 1 , 144 , // 144  - en-001
+            0x2409 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x993248, 1 , 145 , // 145  - en-029
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x292d, 1 , 146 , // 146  - en-150
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x2   , 1 , 147 , // 147  - en-ag
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x12c , 1 , 148 , // 148  - en-ai
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xa   , 1 , 149 , // 149  - en-as
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xe   , 1 , 150 , // 150  - en-at
+            0xc09  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xc   , 1 , 151 , // 151  - en-au
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x12  , 1 , 152 , // 152  - en-bb
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x15  , 1 , 153 , // 153  - en-be
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x26  , 1 , 154 , // 154  - en-bi
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x14  , 1 , 155 , // 155  - en-bm
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x16  , 1 , 156 , // 156  - en-bs
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x13  , 1 , 157 , // 157  - en-bw
+            0x2809 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x18  , 1 , 158 , // 158  - en-bz
+            0x1009 , 0x4e4 , 0x352 , 0x2710, 0x25  , 0x27  , 1 , 159 , // 159  - en-ca
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x137 , 1 , 160 , // 160  - en-cc
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xdf  , 1 , 161 , // 161  - en-ch
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x138 , 1 , 162 , // 162  - en-ck
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x31  , 1 , 163 , // 163  - en-cm
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x135 , 1 , 164 , // 164  - en-cx
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3b  , 1 , 165 , // 165  - en-cy
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x5e  , 1 , 166 , // 166  - en-de
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3d  , 1 , 167 , // 167  - en-dk
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x3f  , 1 , 168 , // 168  - en-dm
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x47  , 1 , 169 , // 169  - en-er
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x4d  , 1 , 170 , // 170  - en-fi
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x4e  , 1 , 171 , // 171  - en-fj
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x13b , 1 , 172 , // 172  - en-fk
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x50  , 1 , 173 , // 173  - en-fm
+            0x809  , 0x4e4 , 0x352 , 0x2710, 0x4f3d, 0xf2  , 1 , 174 , // 174  - en-gb
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x5b  , 1 , 175 , // 175  - en-gd
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x144 , 1 , 176 , // 176  - en-gg
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x59  , 1 , 177 , // 177  - en-gh
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x5a  , 1 , 178 , // 178  - en-gi
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x56  , 1 , 179 , // 179  - en-gm
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x142 , 1 , 180 , // 180  - en-gu
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x65  , 1 , 181 , // 181  - en-gy
+            0x3c09 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x68  , 1 , 182 , // 182  - en-hk
+            0x3809 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , 1 , 183 , // 183  - en-id
+            0x1809 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x44  , 1 , 184 , // 184  - en-ie
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x75  , 1 , 185 , // 185  - en-il
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x3b16, 1 , 186 , // 186  - en-im
+            0x4009 , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0x71  , 1 , 187 , // 187  - en-in
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x72  , 1 , 188 , // 188  - en-io
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x148 , 1 , 189 , // 189  - en-je
+            0x2009 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x7c  , 1 , 190 , // 190  - en-jm
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x81  , 1 , 191 , // 191  - en-ke
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x85  , 1 , 192 , // 192  - en-ki
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xcf  , 1 , 193 , // 193  - en-kn
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x133 , 1 , 194 , // 194  - en-ky
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xda  , 1 , 195 , // 195  - en-lc
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x8e  , 1 , 196 , // 196  - en-lr
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x92  , 1 , 197 , // 197  - en-ls
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x95  , 1 , 198 , // 198  - en-mg
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xc7  , 1 , 199 , // 199  - en-mh
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x97  , 1 , 200 , // 200  - en-mo
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x151 , 1 , 201 , // 201  - en-mp
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x14c , 1 , 202 , // 202  - en-ms
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xa3  , 1 , 203 , // 203  - en-mt
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xa0  , 1 , 204 , // 204  - en-mu
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x9c  , 1 , 205 , // 205  - en-mw
+            0x4409 , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xa7  , 1 , 206 , // 206  - en-my
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xfe  , 1 , 207 , // 207  - en-na
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x150 , 1 , 208 , // 208  - en-nf
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , 1 , 209 , // 209  - en-ng
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xb0  , 1 , 210 , // 210  - en-nl
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb4  , 1 , 211 , // 211  - en-nr
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x14f , 1 , 212 , // 212  - en-nu
+            0x1409 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb7  , 1 , 213 , // 213  - en-nz
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xc2  , 1 , 214 , // 214  - en-pg
+            0x3409 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xc9  , 1 , 215 , // 215  - en-ph
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xbe  , 1 , 216 , // 216  - en-pk
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x153 , 1 , 217 , // 217  - en-pn
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xca  , 1 , 218 , // 218  - en-pr
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xc3  , 1 , 219 , // 219  - en-pw
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xcc  , 1 , 220 , // 220  - en-rw
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x1e  , 1 , 221 , // 221  - en-sb
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd0  , 1 , 222 , // 222  - en-sc
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xdb  , 1 , 223 , // 223  - en-sd
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xdd  , 1 , 224 , // 224  - en-se
+            0x4809 , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xd7  , 1 , 225 , // 225  - en-sg
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x157 , 1 , 226 , // 226  - en-sh
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd4  , 1 , 227 , // 227  - en-si
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd5  , 1 , 228 , // 228  - en-sl
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x114 , 1 , 229 , // 229  - en-ss
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x78f7, 1 , 230 , // 230  - en-sx
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x104 , 1 , 231 , // 231  - en-sz
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x15d , 1 , 232 , // 232  - en-tc
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x15b , 1 , 233 , // 233  - en-tk
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xe7  , 1 , 234 , // 234  - en-to
+            0x2c09 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xe1  , 1 , 235 , // 235  - en-tt
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xec  , 1 , 236 , // 236  - en-tv
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xef  , 1 , 237 , // 237  - en-tz
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xf0  , 1 , 238 , // 238  - en-ug
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x9a55d40, 1 , 239 , // 239  - en-um
+            0x409  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xf4  , 1 , 240 , // 240  - en-us
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xf8  , 1 , 241 , // 241  - en-vc
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x15f , 1 , 242 , // 242  - en-vg
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xfc  , 1 , 243 , // 243  - en-vi
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xae  , 1 , 244 , // 244  - en-vu
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x103 , 1 , 245 , // 245  - en-ws
+            0x1c09 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xd1  , 1 , 246 , // 246  - en-za
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x107 , 1 , 247 , // 247  - en-zm
+            0x3009 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0x108 , 1 , 248 , // 248  - en-zw
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, 1 , 250 , // 249  - eo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, 1 , 250 , // 250  - eo-001
+            0xa    , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xd9  , 1 , 262 , // 251  - es
+            0x580a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x9a55d41, 1 , 252 , // 252  - es-419
+            0x2c0a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xb   , 1 , 253 , // 253  - es-ar
+            0x400a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x1a  , 1 , 254 , // 254  - es-bo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x20  , 1 , 255 , // 255  - es-br
+            0x340a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x2e  , 1 , 256 , // 256  - es-cl
+            0x240a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x33  , 1 , 257 , // 257  - es-co
+            0x140a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x36  , 1 , 258 , // 258  - es-cr
+            0x5c0a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x38  , 1 , 259 , // 259  - es-cu
+            0x1c0a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x41  , 1 , 260 , // 260  - es-do
+            0x300a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x42  , 1 , 261 , // 261  - es-ec
+            0xc0a  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xd9  , 1 , 262 , // 262  - es-es
+            0x40a  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xd9  , 1 , 263 , // 263  - es-es_tradnl
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x45  , 1 , 264 , // 264  - es-gq
+            0x100a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x63  , 1 , 265 , // 265  - es-gt
+            0x480a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x6a  , 1 , 266 , // 266  - es-hn
+            0x80a  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xa6  , 1 , 267 , // 267  - es-mx
+            0x4c0a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xb6  , 1 , 268 , // 268  - es-ni
+            0x180a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xc0  , 1 , 269 , // 269  - es-pa
+            0x280a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xbb  , 1 , 270 , // 270  - es-pe
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xc9  , 1 , 271 , // 271  - es-ph
+            0x500a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xca  , 1 , 272 , // 272  - es-pr
+            0x3c0a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xb9  , 1 , 273 , // 273  - es-py
+            0x440a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x48  , 1 , 274 , // 274  - es-sv
+            0x540a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xf4  , 1 , 275 , // 275  - es-us
+            0x380a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xf6  , 1 , 276 , // 276  - es-uy
+            0x200a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xf9  , 1 , 277 , // 277  - es-ve
+            0x25   , 0x4e9 , 0x307 , 0x272d, 0x1f4 , 0x46  , 1 , 279 , // 278  - et
+            0x425  , 0x4e9 , 0x307 , 0x272d, 0x1f4 , 0x46  , 1 , 279 , // 279  - et-ee
+            0x2d   , 0x4e4 , 0x352 , 0x2   , 0x1f4 , 0xd9  , 1 , 281 , // 280  - eu
+            0x42d  , 0x4e4 , 0x352 , 0x2   , 0x1f4 , 0xd9  , 1 , 281 , // 281  - eu-es
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 283 , // 282  - ewo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 283 , // 283  - ewo-cm
+            0x29   , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x74  , 0 , 285 , // 284  - fa
+            0x429  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x74  , 0 , 285 , // 285  - fa-ir
+            0x67   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd2  , 1 , 290 , // 286  - ff
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x31  , 1 , 287 , // 287  - ff-cm
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x64  , 1 , 288 , // 288  - ff-gn
+            0x7c67 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd2  , 1 , 290 , // 289  - ff-latn
+            0x867  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd2  , 1 , 290 , // 290  - ff-latn-sn
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xa2  , 1 , 291 , // 291  - ff-mr
+            0x467  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xaf  , 1 , 292 , // 292  - ff-ng
+            0xb    , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , 1 , 294 , // 293  - fi
+            0x40b  , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , 1 , 294 , // 294  - fi-fi
+            0x64   , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xc9  , 1 , 296 , // 295  - fil
+            0x464  , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xc9  , 1 , 296 , // 296  - fil-ph
+            0x38   , 0x4e4 , 0x352 , 0x275f, 0x4f35, 0x51  , 1 , 299 , // 297  - fo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3d  , 1 , 298 , // 298  - fo-dk
+            0x438  , 0x4e4 , 0x352 , 0x275f, 0x4f35, 0x51  , 1 , 299 , // 299  - fo-fo
+            0xc    , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , 1 , 316 , // 300  - fr
+            0x1c0c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x993248, 1 , 301 , // 301  - fr-029
+            0x80c  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x15  , 1 , 302 , // 302  - fr-be
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xf5  , 1 , 303 , // 303  - fr-bf
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x26  , 1 , 304 , // 304  - fr-bi
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x1c  , 1 , 305 , // 305  - fr-bj
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x9a55c4f, 1 , 306 , // 306  - fr-bl
+            0xc0c  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x27  , 1 , 307 , // 307  - fr-ca
+            0x240c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x2c  , 1 , 308 , // 308  - fr-cd
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x37  , 1 , 309 , // 309  - fr-cf
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x2b  , 1 , 310 , // 310  - fr-cg
+            0x100c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xdf  , 1 , 311 , // 311  - fr-ch
+            0x300c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x77  , 1 , 312 , // 312  - fr-ci
+            0x2c0c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x31  , 1 , 313 , // 313  - fr-cm
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x3e  , 1 , 314 , // 314  - fr-dj
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x4   , 1 , 315 , // 315  - fr-dz
+            0x40c  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , 1 , 316 , // 316  - fr-fr
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x57  , 1 , 317 , // 317  - fr-ga
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x13d , 1 , 318 , // 318  - fr-gf
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x64  , 1 , 319 , // 319  - fr-gn
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x141 , 1 , 320 , // 320  - fr-gp
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x45  , 1 , 321 , // 321  - fr-gq
+            0x3c0c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x67  , 1 , 322 , // 322  - fr-ht
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x32  , 1 , 323 , // 323  - fr-km
+            0x140c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x93  , 1 , 324 , // 324  - fr-lu
+            0x380c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x9f  , 1 , 325 , // 325  - fr-ma
+            0x180c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x9e  , 1 , 326 , // 326  - fr-mc
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x7bda, 1 , 327 , // 327  - fr-mf
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x95  , 1 , 328 , // 328  - fr-mg
+            0x340c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x9d  , 1 , 329 , // 329  - fr-ml
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x14a , 1 , 330 , // 330  - fr-mq
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xa2  , 1 , 331 , // 331  - fr-mr
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xa0  , 1 , 332 , // 332  - fr-mu
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x14e , 1 , 333 , // 333  - fr-nc
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xad  , 1 , 334 , // 334  - fr-ne
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x13e , 1 , 335 , // 335  - fr-pf
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xce  , 1 , 336 , // 336  - fr-pm
+            0x200c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xc6  , 1 , 337 , // 337  - fr-re
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xcc  , 1 , 338 , // 338  - fr-rw
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd0  , 1 , 339 , // 339  - fr-sc
+            0x280c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd2  , 1 , 340 , // 340  - fr-sn
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xde  , 1 , 341 , // 341  - fr-sy
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x29  , 1 , 342 , // 342  - fr-td
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xe8  , 1 , 343 , // 343  - fr-tg
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xea  , 1 , 344 , // 344  - fr-tn
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xae  , 1 , 345 , // 345  - fr-vu
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x160 , 1 , 346 , // 346  - fr-wf
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x14b , 1 , 347 , // 347  - fr-yt
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x76  , 1 , 349 , // 348  - fur
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x76  , 1 , 349 , // 349  - fur-it
+            0x62   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb0  , 1 , 351 , // 350  - fy
+            0x462  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb0  , 1 , 351 , // 351  - fy-nl
+            0x3c   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x44  , 1 , 353 , // 352  - ga
+            0x83c  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x44  , 1 , 353 , // 353  - ga-ie
+            0x91   , 0x4e4 , 0x352 , 0x2710, 0x4f3d, 0xf2  , 1 , 355 , // 354  - gd
+            0x491  , 0x4e4 , 0x352 , 0x2710, 0x4f3d, 0xf2  , 1 , 355 , // 355  - gd-gb
+            0x56   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd9  , 1 , 357 , // 356  - gl
+            0x456  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd9  , 1 , 357 , // 357  - gl-es
+            0x74   , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xb9  , 1 , 359 , // 358  - gn
+            0x474  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xb9  , 1 , 359 , // 359  - gn-py
+            0x84   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xdf  , 1 , 361 , // 360  - gsw
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xdf  , 1 , 361 , // 361  - gsw-ch
+            0x484  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , 1 , 362 , // 362  - gsw-fr
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x91  , 1 , 363 , // 363  - gsw-li
+            0x47   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 365 , // 364  - gu
+            0x447  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 365 , // 365  - gu-in
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 367 , // 366  - guz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 367 , // 367  - guz-ke
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3b16, 1 , 369 , // 368  - gv
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3b16, 1 , 369 , // 369  - gv-im
+            0x68   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , 1 , 374 , // 370  - ha
+            0x7c68 , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , 1 , 374 , // 371  - ha-latn
+            0x1000 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0x59  , 1 , 372 , // 372  - ha-latn-gh
+            0x1000 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xad  , 1 , 373 , // 373  - ha-latn-ne
+            0x468  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , 1 , 374 , // 374  - ha-latn-ng
+            0x75   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xf4  , 1 , 376 , // 375  - haw
+            0x475  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xf4  , 1 , 376 , // 376  - haw-us
+            0xd    , 0x4e7 , 0x35e , 0x2715, 0x1f4 , 0x75  , 1 , 378 , // 377  - he
+            0x40d  , 0x4e7 , 0x35e , 0x2715, 0x1f4 , 0x75  , 1 , 378 , // 378  - he-il
+            0x39   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 380 , // 379  - hi
+            0x439  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 380 , // 380  - hi-in
+            0x1a   , 0x4e2 , 0x354 , 0x2762, 0x1f4 , 0x6c  , 1 , 383 , // 381  - hr
+            0x101a , 0x4e2 , 0x354 , 0x2762, 0x366 , 0x19  , 1 , 382 , // 382  - hr-ba
+            0x41a  , 0x4e2 , 0x354 , 0x2762, 0x1f4 , 0x6c  , 1 , 383 , // 383  - hr-hr
+            0x2e   , 0x4e4 , 0x352 , 0x2710, 0x366 , 0x5e  , 1 , 385 , // 384  - hsb
+            0x42e  , 0x4e4 , 0x352 , 0x2710, 0x366 , 0x5e  , 1 , 385 , // 385  - hsb-de
+            0xe    , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x6d  , 1 , 387 , // 386  - hu
+            0x40e  , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x6d  , 1 , 387 , // 387  - hu-hu
+            0x1040e, 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x6d  , 1 , 387 , // 388  - hu-hu_technl
+            0x2b   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x7   , 1 , 390 , // 389  - hy
+            0x42b  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x7   , 1 , 390 , // 390  - hy-am
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x54  , 1 , 393 , // 391  - ia
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, 1 , 392 , // 392  - ia-001
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x54  , 1 , 393 , // 393  - ia-fr
+            0x69   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , 1 , 395 , // 394  - ibb
+            0x469  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , 1 , 395 , // 395  - ibb-ng
+            0x21   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , 1 , 397 , // 396  - id
+            0x421  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , 1 , 397 , // 397  - id-id
+            0x70   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , 1 , 399 , // 398  - ig
+            0x470  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , 1 , 399 , // 399  - ig-ng
+            0x78   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2d  , 1 , 401 , // 400  - ii
+            0x478  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2d  , 1 , 401 , // 401  - ii-cn
+            0xf    , 0x4e4 , 0x352 , 0x275f, 0x5187, 0x6e  , 1 , 403 , // 402  - is
+            0x40f  , 0x4e4 , 0x352 , 0x275f, 0x5187, 0x6e  , 1 , 403 , // 403  - is-is
+            0x10   , 0x4e4 , 0x352 , 0x2710, 0x4f38, 0x76  , 1 , 406 , // 404  - it
+            0x810  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xdf  , 1 , 405 , // 405  - it-ch
+            0x410  , 0x4e4 , 0x352 , 0x2710, 0x4f38, 0x76  , 1 , 406 , // 406  - it-it
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f38, 0xd6  , 1 , 407 , // 407  - it-sm
+            0x5d   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0x27  , 1 , 412 , // 408  - iu
+            0x785d , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x27  , 1 , 410 , // 409  - iu-cans
+            0x45d  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x27  , 1 , 410 , // 410  - iu-cans-ca
+            0x7c5d , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0x27  , 1 , 412 , // 411  - iu-latn
+            0x85d  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0x27  , 1 , 412 , // 412  - iu-latn-ca
+            0x11   , 0x3a4 , 0x3a4 , 0x2711, 0x4f42, 0x7a  , 1 , 414 , // 413  - ja
+            0x411  , 0x3a4 , 0x3a4 , 0x2711, 0x4f42, 0x7a  , 1 , 414 , // 414  - ja-jp
+            0x40411, 0x3a4 , 0x3a4 , 0x2711, 0x4f42, 0x7a  , 1 , 414 , // 415  - ja-jp_radstr
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 417 , // 416  - jgo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 417 , // 417  - jgo-cm
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 419 , // 418  - jmc
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 419 , // 419  - jmc-tz
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , 1 , 424 , // 420  - jv
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , 1 , 422 , // 421  - jv-java
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , 1 , 422 , // 422  - jv-java-id
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , 1 , 424 , // 423  - jv-latn
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , 1 , 424 , // 424  - jv-latn-id
+            0x37   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x58  , 1 , 426 , // 425  - ka
+            0x437  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x58  , 1 , 426 , // 426  - ka-ge
+            0x10437, 0x0   , 0x1   , 0x2   , 0x1f4 , 0x58  , 1 , 426 , // 427  - ka-ge_modern
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x4   , 1 , 429 , // 428  - kab
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x4   , 1 , 429 , // 429  - kab-dz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 431 , // 430  - kam
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 431 , // 431  - kam-ke
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 433 , // 432  - kde
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 433 , // 433  - kde-tz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x39  , 1 , 435 , // 434  - kea
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x39  , 1 , 435 , // 435  - kea-cv
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , 1 , 437 , // 436  - khq
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , 1 , 437 , // 437  - khq-ml
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 439 , // 438  - ki
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 439 , // 439  - ki-ke
+            0x3f   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x89  , 1 , 441 , // 440  - kk
+            0x43f  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x89  , 1 , 441 , // 441  - kk-kz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 443 , // 442  - kkj
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 443 , // 443  - kkj-cm
+            0x6f   , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0x5d  , 1 , 445 , // 444  - kl
+            0x46f  , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0x5d  , 1 , 445 , // 445  - kl-gl
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 447 , // 446  - kln
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 447 , // 447  - kln-ke
+            0x53   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x28  , 2 , 449 , // 448  - km
+            0x453  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x28  , 2 , 449 , // 449  - km-kh
+            0x4b   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 451 , // 450  - kn
+            0x44b  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 451 , // 451  - kn-in
+            0x12   , 0x3b5 , 0x3b5 , 0x2713, 0x5161, 0x86  , 1 , 454 , // 452  - ko
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x83  , 1 , 453 , // 453  - ko-kp
+            0x412  , 0x3b5 , 0x3b5 , 0x2713, 0x5161, 0x86  , 1 , 454 , // 454  - ko-kr
+            0x57   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 456 , // 455  - kok
+            0x457  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 456 , // 456  - kok-in
+            0x71   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , 1 , 458 , // 457  - kr
+            0x471  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , 1 , 458 , // 458  - kr-ng
+            0x60   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 2 , 461 , // 459  - ks
+            0x460  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 2 , 461 , // 460  - ks-arab
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 2 , 461 , // 461  - ks-arab-in
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 463 , // 462  - ks-deva
+            0x860  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 463 , // 463  - ks-deva-in
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 465 , // 464  - ksb
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 465 , // 465  - ksb-tz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 467 , // 466  - ksf
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 467 , // 467  - ksf-cm
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x5e  , 1 , 469 , // 468  - ksh
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x5e  , 1 , 469 , // 469  - ksh-de
+            0x92   , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x79  , 0 , 472 , // 470  - ku
+            0x7c92 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x79  , 0 , 472 , // 471  - ku-arab
+            0x492  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x79  , 0 , 472 , // 472  - ku-arab-iq
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x74  , 0 , 473 , // 473  - ku-arab-ir
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf2  , 1 , 475 , // 474  - kw
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf2  , 1 , 475 , // 475  - kw-gb
+            0x40   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x82  , 1 , 477 , // 476  - ky
+            0x440  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x82  , 1 , 477 , // 477  - ky-kg
+            0x76   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0x989e, 1 , 479 , // 478  - la
+            0x476  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0x989e, 1 , 479 , // 479  - la-001
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 481 , // 480  - lag
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 481 , // 481  - lag-tz
+            0x6e   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x93  , 1 , 483 , // 482  - lb
+            0x46e  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x93  , 1 , 483 , // 483  - lb-lu
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , 485 , // 484  - lg
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , 485 , // 485  - lg-ug
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf4  , 1 , 487 , // 486  - lkt
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf4  , 1 , 487 , // 487  - lkt-us
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2c  , 1 , 490 , // 488  - ln
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9   , 1 , 489 , // 489  - ln-ao
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2c  , 1 , 490 , // 490  - ln-cd
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x37  , 1 , 491 , // 491  - ln-cf
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2b  , 1 , 492 , // 492  - ln-cg
+            0x54   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8a  , 1 , 494 , // 493  - lo
+            0x454  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8a  , 1 , 494 , // 494  - lo-la
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x74  , 2 , 497 , // 495  - lrc
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x79  , 2 , 496 , // 496  - lrc-iq
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x74  , 2 , 497 , // 497  - lrc-ir
+            0x27   , 0x4e9 , 0x307 , 0x272d, 0x1f4 , 0x8d  , 1 , 499 , // 498  - lt
+            0x427  , 0x4e9 , 0x307 , 0x272d, 0x1f4 , 0x8d  , 1 , 499 , // 499  - lt-lt
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2c  , 1 , 501 , // 500  - lu
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2c  , 1 , 501 , // 501  - lu-cd
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 503 , // 502  - luo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 503 , // 503  - luo-ke
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 505 , // 504  - luy
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 505 , // 505  - luy-ke
+            0x26   , 0x4e9 , 0x307 , 0x272d, 0x1f4 , 0x8c  , 1 , 507 , // 506  - lv
+            0x426  , 0x4e9 , 0x307 , 0x272d, 0x1f4 , 0x8c  , 1 , 507 , // 507  - lv-lv
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 509 , // 508  - mas
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 509 , // 509  - mas-ke
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 510 , // 510  - mas-tz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 512 , // 511  - mer
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 512 , // 512  - mer-ke
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa0  , 1 , 514 , // 513  - mfe
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa0  , 1 , 514 , // 514  - mfe-mu
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x95  , 1 , 516 , // 515  - mg
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x95  , 1 , 516 , // 516  - mg-mg
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa8  , 1 , 518 , // 517  - mgh
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa8  , 1 , 518 , // 518  - mgh-mz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 520 , // 519  - mgo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 520 , // 520  - mgo-cm
+            0x81   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xb7  , 1 , 522 , // 521  - mi
+            0x481  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xb7  , 1 , 522 , // 522  - mi-nz
+            0x2f   , 0x4e3 , 0x362 , 0x2717, 0x1f4 , 0x4ca2, 1 , 524 , // 523  - mk
+            0x42f  , 0x4e3 , 0x362 , 0x2717, 0x1f4 , 0x4ca2, 1 , 524 , // 524  - mk-mk
+            0x4c   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 526 , // 525  - ml
+            0x44c  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 526 , // 526  - ml-in
+            0x50   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x9a  , 1 , 529 , // 527  - mn
+            0x7850 , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x9a  , 1 , 529 , // 528  - mn-cyrl
+            0x450  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x9a  , 1 , 529 , // 529  - mn-mn
+            0x7c50 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2d  , 1 , 531 , // 530  - mn-mong
+            0x850  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2d  , 1 , 531 , // 531  - mn-mong-cn
+            0xc50  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9a  , 1 , 532 , // 532  - mn-mong-mn
+            0x58   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 534 , // 533  - mni
+            0x458  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 534 , // 534  - mni-in
+            0x7c   , 0x4e4 , 0x352 , 0x2710, 0x25  , 0x27  , 1 , 536 , // 535  - moh
+            0x47c  , 0x4e4 , 0x352 , 0x2710, 0x25  , 0x27  , 1 , 536 , // 536  - moh-ca
+            0x4e   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 538 , // 537  - mr
+            0x44e  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 538 , // 538  - mr-in
+            0x3e   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xa7  , 1 , 541 , // 539  - ms
+            0x83e  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x25  , 1 , 540 , // 540  - ms-bn
+            0x43e  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xa7  , 1 , 541 , // 541  - ms-my
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd7  , 1 , 542 , // 542  - ms-sg
+            0x3a   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa3  , 1 , 544 , // 543  - mt
+            0x43a  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa3  , 1 , 544 , // 544  - mt-mt
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 546 , // 545  - mua
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 546 , // 546  - mua-cm
+            0x55   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x1b  , 2 , 548 , // 547  - my
+            0x455  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x1b  , 2 , 548 , // 548  - my-mm
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x74  , 2 , 550 , // 549  - mzn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x74  , 2 , 550 , // 550  - mzn-ir
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xfe  , 1 , 552 , // 551  - naq
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xfe  , 1 , 552 , // 552  - naq-na
+            0x7c14 , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , 1 , 554 , // 553  - nb
+            0x414  , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , 1 , 554 , // 554  - nb-no
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xdc  , 1 , 555 , // 555  - nb-sj
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x108 , 1 , 557 , // 556  - nd
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x108 , 1 , 557 , // 557  - nd-zw
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x5e  , 1 , 559 , // 558  - nds
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x5e  , 1 , 559 , // 559  - nds-de
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xb0  , 1 , 560 , // 560  - nds-nl
+            0x61   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xb2  , 1 , 563 , // 561  - ne
+            0x861  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 2 , 562 , // 562  - ne-in
+            0x461  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xb2  , 1 , 563 , // 563  - ne-np
+            0x13   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb0  , 1 , 569 , // 564  - nl
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x12e , 1 , 565 , // 565  - nl-aw
+            0x813  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x15  , 1 , 566 , // 566  - nl-be
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x9a55d42, 1 , 567 , // 567  - nl-bq
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x111 , 1 , 568 , // 568  - nl-cw
+            0x413  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb0  , 1 , 569 , // 569  - nl-nl
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb5  , 1 , 570 , // 570  - nl-sr
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x78f7, 1 , 571 , // 571  - nl-sx
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 573 , // 572  - nmg
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 573 , // 573  - nmg-cm
+            0x7814 , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , 1 , 575 , // 574  - nn
+            0x814  , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , 1 , 575 , // 575  - nn-no
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 577 , // 576  - nnh
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 577 , // 577  - nnh-cm
+            0x14   , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , 1 , 554 , // 578  - no
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x64  , 2 , 580 , // 579  - nqo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x64  , 2 , 580 , // 580  - nqo-gn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , 582 , // 581  - nr
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , 582 , // 582  - nr-za
+            0x6c   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , 584 , // 583  - nso
+            0x46c  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , 584 , // 584  - nso-za
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x114 , 1 , 586 , // 585  - nus
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x114 , 1 , 586 , // 586  - nus-ss
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , 588 , // 587  - nyn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , 588 , // 588  - nyn-ug
+            0x82   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , 1 , 590 , // 589  - oc
+            0x482  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , 1 , 590 , // 590  - oc-fr
+            0x72   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , 592 , // 591  - om
+            0x472  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , 592 , // 592  - om-et
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 593 , // 593  - om-ke
+            0x48   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 595 , // 594  - or
+            0x448  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 595 , // 595  - or-in
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x58  , 1 , 597 , // 596  - os
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x58  , 1 , 597 , // 597  - os-ge
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xcb  , 1 , 598 , // 598  - os-ru
+            0x46   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 602 , // 599  - pa
+            0x7c46 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , 2 , 601 , // 600  - pa-arab
+            0x846  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , 2 , 601 , // 601  - pa-arab-pk
+            0x446  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 602 , // 602  - pa-in
+            0x79   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x993248, 1 , 604 , // 603  - pap
+            0x479  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x993248, 1 , 604 , // 604  - pap-029
+            0x15   , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xbf  , 1 , 606 , // 605  - pl
+            0x415  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xbf  , 1 , 606 , // 606  - pl-pl
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, 1 , 608 , // 607  - prg
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, 1 , 608 , // 608  - prg-001
+            0x8c   , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x3   , 2 , 610 , // 609  - prs
+            0x48c  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x3   , 2 , 610 , // 610  - prs-af
+            0x63   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3   , 2 , 612 , // 611  - ps
+            0x463  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3   , 2 , 612 , // 612  - ps-af
+            0x16   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x20  , 1 , 615 , // 613  - pt
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x9   , 1 , 614 , // 614  - pt-ao
+            0x416  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x20  , 1 , 615 , // 615  - pt-br
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xdf  , 1 , 616 , // 616  - pt-ch
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x39  , 1 , 617 , // 617  - pt-cv
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x45  , 1 , 618 , // 618  - pt-gq
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xc4  , 1 , 619 , // 619  - pt-gw
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x93  , 1 , 620 , // 620  - pt-lu
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x97  , 1 , 621 , // 621  - pt-mo
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xa8  , 1 , 622 , // 622  - pt-mz
+            0x816  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xc1  , 1 , 623 , // 623  - pt-pt
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xe9  , 1 , 624 , // 624  - pt-st
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f60e7, 1 , 625 , // 625  - pt-tl
+            0x901  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x7c  , 1 , 626 , // 626  - qps-latn-x-sh
+            0x501  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xf4  , 1 , 627 , // 627  - qps-ploc
+            0x5fe  , 0x3a4 , 0x3a4 , 0x2711, 0x4f42, 0x7a  , 1 , 628 , // 628  - qps-ploca
+            0x9ff  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xcd  , 0 , 629 , // 629  - qps-plocm
+            0x86   , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x63  , 1 , 632 , // 630  - quc
+            0x7c86 , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x63  , 1 , 632 , // 631  - quc-latn
+            0x486  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x63  , 1 , 632 , // 632  - quc-latn-gt
+            0x6b   , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x1a  , 1 , 634 , // 633  - quz
+            0x46b  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x1a  , 1 , 634 , // 634  - quz-bo
+            0x86b  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x42  , 1 , 635 , // 635  - quz-ec
+            0xc6b  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xbb  , 1 , 636 , // 636  - quz-pe
+            0x17   , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0xdf  , 1 , 638 , // 637  - rm
+            0x417  , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0xdf  , 1 , 638 , // 638  - rm-ch
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x26  , 1 , 640 , // 639  - rn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x26  , 1 , 640 , // 640  - rn-bi
+            0x18   , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xc8  , 1 , 643 , // 641  - ro
+            0x818  , 0x4e2 , 0x354 , 0x2   , 0x1f4 , 0x98  , 1 , 642 , // 642  - ro-md
+            0x418  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xc8  , 1 , 643 , // 643  - ro-ro
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 645 , // 644  - rof
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 645 , // 645  - rof-tz
+            0x19   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , 1 , 651 , // 646  - ru
+            0x1000 , 0x4e3 , 0x362 , 0x2   , 0x1f4 , 0x1d  , 1 , 647 , // 647  - ru-by
+            0x1000 , 0x4e3 , 0x362 , 0x2   , 0x1f4 , 0x82  , 1 , 648 , // 648  - ru-kg
+            0x1000 , 0x4e3 , 0x362 , 0x2   , 0x1f4 , 0x89  , 1 , 649 , // 649  - ru-kz
+            0x819  , 0x4e3 , 0x362 , 0x2   , 0x1f4 , 0x98  , 1 , 650 , // 650  - ru-md
+            0x419  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , 1 , 651 , // 651  - ru-ru
+            0x1000 , 0x4e3 , 0x362 , 0x2   , 0x1f4 , 0xf1  , 1 , 652 , // 652  - ru-ua
+            0x87   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xcc  , 1 , 654 , // 653  - rw
+            0x487  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xcc  , 1 , 654 , // 654  - rw-rw
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 656 , // 655  - rwk
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 656 , // 656  - rwk-tz
+            0x4f   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 658 , // 657  - sa
+            0x44f  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 658 , // 658  - sa-in
+            0x85   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , 1 , 660 , // 659  - sah
+            0x485  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , 1 , 660 , // 660  - sah-ru
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 662 , // 661  - saq
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 662 , // 662  - saq-ke
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 664 , // 663  - sbp
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 664 , // 664  - sbp-tz
+            0x59   , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , 2 , 667 , // 665  - sd
+            0x7c59 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , 2 , 667 , // 666  - sd-arab
+            0x859  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , 2 , 667 , // 667  - sd-arab-pk
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 669 , // 668  - sd-deva
+            0x459  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 669 , // 669  - sd-deva-in
+            0x3b   , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , 1 , 672 , // 670  - se
+            0xc3b  , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , 1 , 671 , // 671  - se-fi
+            0x43b  , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , 1 , 672 , // 672  - se-no
+            0x83b  , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , 1 , 673 , // 673  - se-se
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa8  , 1 , 675 , // 674  - seh
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa8  , 1 , 675 , // 675  - seh-mz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , 1 , 677 , // 676  - ses
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , 1 , 677 , // 677  - ses-ml
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x37  , 1 , 679 , // 678  - sg
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x37  , 1 , 679 , // 679  - sg-cf
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , 684 , // 680  - shi
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , 682 , // 681  - shi-latn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , 682 , // 682  - shi-latn-ma
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , 684 , // 683  - shi-tfng
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , 684 , // 684  - shi-tfng-ma
+            0x5b   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2a  , 1 , 686 , // 685  - si
+            0x45b  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2a  , 1 , 686 , // 686  - si-lk
+            0x1b   , 0x4e2 , 0x354 , 0x272d, 0x5190, 0x8f  , 1 , 688 , // 687  - sk
+            0x41b  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0x8f  , 1 , 688 , // 688  - sk-sk
+            0x24   , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xd4  , 1 , 690 , // 689  - sl
+            0x424  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xd4  , 1 , 690 , // 690  - sl-si
+            0x783b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , 1 , 693 , // 691  - sma
+            0x183b , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , 1 , 692 , // 692  - sma-no
+            0x1c3b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , 1 , 693 , // 693  - sma-se
+            0x7c3b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , 1 , 696 , // 694  - smj
+            0x103b , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , 1 , 695 , // 695  - smj-no
+            0x143b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , 1 , 696 , // 696  - smj-se
+            0x703b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , 1 , 698 , // 697  - smn
+            0x243b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , 1 , 698 , // 698  - smn-fi
+            0x743b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , 1 , 700 , // 699  - sms
+            0x203b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , 1 , 700 , // 700  - sms-fi
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x108 , 1 , 703 , // 701  - sn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x108 , 1 , 703 , // 702  - sn-latn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x108 , 1 , 703 , // 703  - sn-latn-zw
+            0x77   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd8  , 1 , 708 , // 704  - so
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3e  , 1 , 705 , // 705  - so-dj
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , 706 , // 706  - so-et
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 707 , // 707  - so-ke
+            0x477  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd8  , 1 , 708 , // 708  - so-so
+            0x1c   , 0x4e2 , 0x354 , 0x272d, 0x5190, 0x6   , 1 , 710 , // 709  - sq
+            0x41c  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0x6   , 1 , 710 , // 710  - sq-al
+            0x1000 , 0x4e2 , 0x354 , 0x272d, 0x5190, 0x4ca2, 1 , 711 , // 711  - sq-mk
+            0x1000 , 0x4e2 , 0x354 , 0x272d, 0x5190, 0x974941, 1 , 712 , // 712  - sq-xk
+            0x7c1a , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x10f , 1 , 724 , // 713  - sr
+            0x6c1a , 0x4e3 , 0x357 , 0x2717, 0x5221, 0x10f , 1 , 718 , // 714  - sr-cyrl
+            0x1c1a , 0x4e3 , 0x357 , 0x2717, 0x5221, 0x19  , 1 , 715 , // 715  - sr-cyrl-ba
+            0xc1a  , 0x4e3 , 0x357 , 0x2717, 0x5221, 0x10d , 1 , 716 , // 716  - sr-cyrl-cs
+            0x301a , 0x4e3 , 0x357 , 0x2717, 0x5221, 0x10e , 1 , 717 , // 717  - sr-cyrl-me
+            0x281a , 0x4e3 , 0x357 , 0x2717, 0x5221, 0x10f , 1 , 718 , // 718  - sr-cyrl-rs
+            0x1000 , 0x4e3 , 0x357 , 0x2717, 0x5221, 0x974941, 1 , 719 , // 719  - sr-cyrl-xk
+            0x701a , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x10f , 1 , 724 , // 720  - sr-latn
+            0x181a , 0x4e2 , 0x354 , 0x2762, 0x366 , 0x19  , 1 , 721 , // 721  - sr-latn-ba
+            0x81a  , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x10d , 1 , 722 , // 722  - sr-latn-cs
+            0x2c1a , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x10e , 1 , 723 , // 723  - sr-latn-me
+            0x241a , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x10f , 1 , 724 , // 724  - sr-latn-rs
+            0x1000 , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x974941, 1 , 725 , // 725  - sr-latn-xk
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , 728 , // 726  - ss
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x104 , 1 , 727 , // 727  - ss-sz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , 728 , // 728  - ss-za
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , 1 , 730 , // 729  - ssy
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , 1 , 730 , // 730  - ssy-er
+            0x30   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , 733 , // 731  - st
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x92  , 1 , 732 , // 732  - st-ls
+            0x430  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , 733 , // 733  - st-za
+            0x1d   , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , 1 , 737 , // 734  - sv
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x9906f5, 1 , 735 , // 735  - sv-ax
+            0x81d  , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , 1 , 736 , // 736  - sv-fi
+            0x41d  , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , 1 , 737 , // 737  - sv-se
+            0x41   , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0x81  , 1 , 740 , // 738  - sw
+            0x1000 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0x2c  , 1 , 739 , // 739  - sw-cd
+            0x441  , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0x81  , 1 , 740 , // 740  - sw-ke
+            0x1000 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xef  , 1 , 741 , // 741  - sw-tz
+            0x1000 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xf0  , 1 , 742 , // 742  - sw-ug
+            0x1000 , 0x0   , 0x1   , 0x0   , 0x1f4 , 0x2c  , 1 , 744 , // 743  - swc
+            0x1000 , 0x0   , 0x1   , 0x0   , 0x1f4 , 0x2c  , 1 , 744 , // 744  - swc-cd
+            0x5a   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xde  , 1 , 746 , // 745  - syr
+            0x45a  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xde  , 1 , 746 , // 746  - syr-sy
+            0x49   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 748 , // 747  - ta
+            0x449  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 748 , // 748  - ta-in
+            0x849  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2a  , 1 , 749 , // 749  - ta-lk
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa7  , 1 , 750 , // 750  - ta-my
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd7  , 1 , 751 , // 751  - ta-sg
+            0x4a   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 753 , // 752  - te
+            0x44a  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , 1 , 753 , // 753  - te-in
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , 756 , // 754  - teo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , 1 , 755 , // 755  - teo-ke
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , 756 , // 756  - teo-ug
+            0x28   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xe4  , 1 , 759 , // 757  - tg
+            0x7c28 , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xe4  , 1 , 759 , // 758  - tg-cyrl
+            0x428  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xe4  , 1 , 759 , // 759  - tg-cyrl-tj
+            0x1e   , 0x36a , 0x36a , 0x2725, 0x5166, 0xe3  , 1 , 761 , // 760  - th
+            0x41e  , 0x36a , 0x36a , 0x2725, 0x5166, 0xe3  , 1 , 761 , // 761  - th-th
+            0x73   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , 1 , 763 , // 762  - ti
+            0x873  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , 1 , 763 , // 763  - ti-er
+            0x473  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , 764 , // 764  - ti-et
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , 1 , 766 , // 765  - tig
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , 1 , 766 , // 766  - tig-er
+            0x42   , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xee  , 1 , 768 , // 767  - tk
+            0x442  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xee  , 1 , 768 , // 768  - tk-tm
+            0x32   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , 771 , // 769  - tn
+            0x832  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x13  , 1 , 770 , // 770  - tn-bw
+            0x432  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , 771 , // 771  - tn-za
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xe7  , 1 , 773 , // 772  - to
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xe7  , 1 , 773 , // 773  - to-to
+            0x1f   , 0x4e6 , 0x359 , 0x2761, 0x51a9, 0xeb  , 1 , 776 , // 774  - tr
+            0x1000 , 0x4e6 , 0x359 , 0x2761, 0x51a9, 0x3b  , 1 , 775 , // 775  - tr-cy
+            0x41f  , 0x4e6 , 0x359 , 0x2761, 0x51a9, 0xeb  , 1 , 776 , // 776  - tr-tr
+            0x31   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , 778 , // 777  - ts
+            0x431  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , 778 , // 778  - ts-za
+            0x44   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , 1 , 780 , // 779  - tt
+            0x444  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , 1 , 780 , // 780  - tt-ru
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xad  , 1 , 782 , // 781  - twq
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xad  , 1 , 782 , // 782  - twq-ne
+            0x5f   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x4   , 1 , 787 , // 783  - tzm
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x9f  , 1 , 785 , // 784  - tzm-arab
+            0x45f  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x9f  , 1 , 785 , // 785  - tzm-arab-ma
+            0x7c5f , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x4   , 1 , 787 , // 786  - tzm-latn
+            0x85f  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x4   , 1 , 787 , // 787  - tzm-latn-dz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , 788 , // 788  - tzm-latn-ma
+            0x785f , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , 790 , // 789  - tzm-tfng
+            0x105f , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , 790 , // 790  - tzm-tfng-ma
+            0x80   , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x2d  , 1 , 792 , // 791  - ug
+            0x480  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x2d  , 1 , 792 , // 792  - ug-cn
+            0x22   , 0x4e3 , 0x362 , 0x2721, 0x1f4 , 0xf1  , 1 , 794 , // 793  - uk
+            0x422  , 0x4e3 , 0x362 , 0x2721, 0x1f4 , 0xf1  , 1 , 794 , // 794  - uk-ua
+            0x20   , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , 1 , 797 , // 795  - ur
+            0x820  , 0x4e8 , 0x2d0 , 0x2   , 0x1f4 , 0x71  , 2 , 796 , // 796  - ur-in
+            0x420  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , 1 , 797 , // 797  - ur-pk
+            0x43   , 0x4e6 , 0x359 , 0x272d, 0x1f4 , 0xf7  , 1 , 804 , // 798  - uz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3   , 2 , 800 , // 799  - uz-arab
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3   , 2 , 800 , // 800  - uz-arab-af
+            0x7843 , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xf7  , 1 , 802 , // 801  - uz-cyrl
+            0x843  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xf7  , 1 , 802 , // 802  - uz-cyrl-uz
+            0x7c43 , 0x4e6 , 0x359 , 0x272d, 0x1f4 , 0xf7  , 1 , 804 , // 803  - uz-latn
+            0x443  , 0x4e6 , 0x359 , 0x272d, 0x1f4 , 0xf7  , 1 , 804 , // 804  - uz-latn-uz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8e  , 1 , 809 , // 805  - vai
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8e  , 1 , 807 , // 806  - vai-latn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8e  , 1 , 807 , // 807  - vai-latn-lr
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8e  , 1 , 809 , // 808  - vai-vaii
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8e  , 1 , 809 , // 809  - vai-vaii-lr
+            0x33   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , 811 , // 810  - ve
+            0x433  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , 1 , 811 , // 811  - ve-za
+            0x2a   , 0x4ea , 0x4ea , 0x2710, 0x1f4 , 0xfb  , 1 , 813 , // 812  - vi
+            0x42a  , 0x4ea , 0x4ea , 0x2710, 0x1f4 , 0xfb  , 1 , 813 , // 813  - vi-vn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, 1 , 815 , // 814  - vo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, 1 , 815 , // 815  - vo-001
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 817 , // 816  - vun
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , 1 , 817 , // 817  - vun-tz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xdf  , 1 , 819 , // 818  - wae
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xdf  , 1 , 819 , // 819  - wae-ch
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , 821 , // 820  - wal
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , 1 , 821 , // 821  - wal-et
+            0x88   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd2  , 1 , 823 , // 822  - wo
+            0x488  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd2  , 1 , 823 , // 823  - wo-sn
+            0x1007f, 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xf4  , 1 , -1  , // 824  - x-iv_mathan
+            0x34   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , 826 , // 825  - xh
+            0x434  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , 826 , // 826  - xh-za
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , 828 , // 827  - xog
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , 1 , 828 , // 828  - xog-ug
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 830 , // 829  - yav
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , 1 , 830 , // 830  - yav-cm
+            0x3d   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, 1 , 832 , // 831  - yi
+            0x43d  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, 1 , 832 , // 832  - yi-001
+            0x6a   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , 1 , 835 , // 833  - yo
+            0x1000 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0x1c  , 1 , 834 , // 834  - yo-bj
+            0x46a  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , 1 , 835 , // 835  - yo-ng
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x68  , 1 , 837 , // 836  - yue
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x68  , 1 , 837 , // 837  - yue-hk
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , 840 , // 838  - zgh
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , 840 , // 839  - zgh-tfng
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , 1 , 840 , // 840  - zgh-tfng-ma
+            0x7804 , 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x2d  , 1 , 844 , // 841  - zh
+            0x4    , 0x3a8 , 0x3a8 , 0x0   , 0x1f4 , 0x2d  , 1 , 844 , // 842  - zh-chs
+            0x7c04 , 0x3b6 , 0x3b6 , 0x0   , 0x1f4 , 0x68  , 1 , 851 , // 843  - zh-cht
+            0x804  , 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x2d  , 1 , 844 , // 844  - zh-cn
+            0x50804, 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x2d  , 1 , 844 , // 845  - zh-cn_phoneb
+            0x20804, 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x2d  , 1 , 844 , // 846  - zh-cn_stroke
+            0x4    , 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x2d  , 1 , 844 , // 847  - zh-hans
+            0x1000 , 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x68  , 1 , 848 , // 848  - zh-hans-hk
+            0x1000 , 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x97  , 1 , 849 , // 849  - zh-hans-mo
+            0x7c04 , 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0x68  , 1 , 851 , // 850  - zh-hant
+            0xc04  , 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0x68  , 1 , 851 , // 851  - zh-hk
+            0x40c04, 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0x68  , 1 , 851 , // 852  - zh-hk_radstr
+            0x1404 , 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0x97  , 1 , 853 , // 853  - zh-mo
+            0x41404, 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0x97  , 1 , 853 , // 854  - zh-mo_radstr
+            0x21404, 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0x97  , 1 , 853 , // 855  - zh-mo_stroke
+            0x1004 , 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0xd7  , 1 , 856 , // 856  - zh-sg
+            0x51004, 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0xd7  , 1 , 856 , // 857  - zh-sg_phoneb
+            0x21004, 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0xd7  , 1 , 856 , // 858  - zh-sg_stroke
+            0x404  , 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0xed  , 1 , 859 , // 859  - zh-tw
+            0x30404, 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0xed  , 1 , 859 , // 860  - zh-tw_pronun
+            0x40404, 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0xed  , 1 , 859 , // 861  - zh-tw_radstr
+            0x35   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , 863 , // 862  - zu
+            0x435  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , 1 , 863 , // 863  - zu-za
         };
 
         // s_lcids list all supported lcids. used to binary search and we use the index of the matched lcid to 
-        // get the index in s_localeNamesIndices using s_lcidToCultureNameIndecis
+        // get the index in s_localeNamesIndices using s_lcidToCultureNameIndices
         private static readonly int[] s_lcids = new int[]
         {
             // Lcid , index   - index in c_localeNames
@@ -3091,8 +3962,8 @@ namespace System.Globalization
             0x50804, // 446  - 4115
             0x51004  // 447  - 4224
         };        
-        // each element in s_lcidToCultureNameIndecis is index to s_localeNamesIndices
-        private static readonly int[] s_lcidToCultureNameIndecis = new int[]
+        // each element in s_lcidToCultureNameIndices is index to s_localeNamesIndices
+        private static readonly int[] s_lcidToCultureNameIndices = new int[]
         {
         // Index to s_localeNamesIndices, index to this array - lcid  - index to the c_localeNames
             13   , // 0    - 1     - 52
@@ -3551,7 +4422,7 @@ namespace System.Globalization
             int right = s_lcids.Length - 1;
             int index;
 
-            Contract.Assert(s_lcids.Length == s_lcidToCultureNameIndecis.Length);
+            Contract.Assert(s_lcids.Length == s_lcidToCultureNameIndices.Length);
 
             while (left <= right)
             {
@@ -3559,7 +4430,7 @@ namespace System.Globalization
 
                 if (culture == s_lcids[index])
                 {
-                    int indexToLocaleNamesIndices = s_lcidToCultureNameIndecis[index];
+                    int indexToLocaleNamesIndices = s_lcidToCultureNameIndices[index];
                     Contract.Assert(indexToLocaleNamesIndices < s_localeNamesIndices.Length - 1);
                     
                     return c_localeNames.Substring(s_localeNamesIndices[indexToLocaleNamesIndices], 
@@ -3593,6 +4464,32 @@ namespace System.Globalization
             return s_nameIndexToNumericData[index * NUMERIC_LOCALE_DATA_COUNT_PER_ROW + (int) part];
         }
         
+        internal static string GetThreeLetterWindowsLangageName(string cultureName)
+        {
+            int index = SearchCultureName(cultureName);
+            if (index < 0)
+            {
+                return null;
+            }
+            
+            Contract.Assert(s_localeNamesIndices.Length-1 == (c_threeLetterWindowsLanguageName.Length / 3));
+            return c_threeLetterWindowsLanguageName.Substring(index * 3, 3); 
+        }
+        
+        internal static string GetSpecificCultureName(string cultureName)
+        {
+            int indexToIndicesTable = GetLocaleDataNumericPart(cultureName, LocaleDataParts.SpecificLocaleIndex);
+            if (indexToIndicesTable < 0)
+            {
+                return ""; // fallback to invariant
+            }
+            
+            Contract.Assert(indexToIndicesTable < s_localeNamesIndices.Length-1);
+            
+            return c_localeNames.Substring(s_localeNamesIndices[indexToIndicesTable], 
+                                           s_localeNamesIndices[indexToIndicesTable+1] - s_localeNamesIndices[indexToIndicesTable]);
+        }
+        
         // SearchCultureName will binary search c_localeNames using s_localeNamesIndices.
         // return index in s_localeNamesIndices, or -1 if it fail finding any match   
         private static int SearchCultureName(string name)
index 82afc23..988d837 100644 (file)
@@ -1,31 +1,5 @@
 namespace System.Globalization
 {
-    public partial class CultureInfo : System.ICloneable, System.IFormatProvider
-    {
-        public static System.Globalization.CultureInfo InstalledUICulture { get { throw new NotImplementedException(); } }
-        public virtual string ThreeLetterISOLanguageName { get { throw new NotImplementedException(); } }
-        public virtual string ThreeLetterWindowsLanguageName { get { throw new NotImplementedException(); } }
-        public void ClearCachedData() { throw new NotImplementedException(); }
-        public static System.Globalization.CultureInfo CreateSpecificCulture(string name) { throw new NotImplementedException(); }
-        public static System.Globalization.CultureInfo GetCultureInfo(string name, string altName) { throw new NotImplementedException(); }
-        public static System.Globalization.CultureInfo GetCultureInfoByIetfLanguageTag(string name) { throw new NotImplementedException(); }
-        public static System.Globalization.CultureInfo[] GetCultures(System.Globalization.CultureTypes types) { throw new NotImplementedException(); }
-    }
-
-    public enum CultureTypes
-    {
-        AllCultures = 7,
-        [System.ObsoleteAttribute("This value has been deprecated.  Please use other values in CultureTypes.")]
-        FrameworkCultures = 64,
-        InstalledWin32Cultures = 4,
-        NeutralCultures = 1,
-        ReplacementCultures = 16,
-        SpecificCultures = 2,
-        UserCustomCulture = 8,
-        [System.ObsoleteAttribute("This value has been deprecated.  Please use other values in CultureTypes.")]
-        WindowsOnlyCultures = 32,
-    }
-
     public sealed partial class IdnMapping
     {
         public IdnMapping() { }
index 26e7fbd..dcd4384 100644 (file)
     <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CompareInfo.cs" />
     <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CultureData.cs" />
     <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CultureInfo.cs" />
+    <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CultureTypes.cs" />
     <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CultureNotFoundException.cs" />
     <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\DateTimeFormatInfo.cs" />
     <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\DateTimeFormatInfoScanner.cs" />