]> source.dussan.org Git - gitea.git/commitdiff
Update to last common x/text (#3994)
authorAntoine GIRARD <sapk@users.noreply.github.com>
Sun, 20 May 2018 10:09:00 +0000 (12:09 +0200)
committerLunny Xiao <xiaolunwen@gmail.com>
Sun, 20 May 2018 10:09:00 +0000 (18:09 +0800)
29 files changed:
vendor/golang.org/x/text/encoding/charmap/charmap.go
vendor/golang.org/x/text/encoding/charmap/maketables.go [deleted file]
vendor/golang.org/x/text/encoding/charmap/tables.go
vendor/golang.org/x/text/encoding/htmlindex/gen.go [deleted file]
vendor/golang.org/x/text/encoding/htmlindex/tables.go
vendor/golang.org/x/text/encoding/internal/identifier/gen.go [deleted file]
vendor/golang.org/x/text/encoding/internal/identifier/identifier.go
vendor/golang.org/x/text/encoding/internal/identifier/mib.go
vendor/golang.org/x/text/encoding/japanese/eucjp.go
vendor/golang.org/x/text/encoding/japanese/iso2022jp.go
vendor/golang.org/x/text/encoding/japanese/maketables.go [deleted file]
vendor/golang.org/x/text/encoding/japanese/shiftjis.go
vendor/golang.org/x/text/encoding/korean/euckr.go
vendor/golang.org/x/text/encoding/korean/maketables.go [deleted file]
vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go
vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go
vendor/golang.org/x/text/encoding/simplifiedchinese/maketables.go [deleted file]
vendor/golang.org/x/text/encoding/traditionalchinese/big5.go
vendor/golang.org/x/text/encoding/traditionalchinese/maketables.go [deleted file]
vendor/golang.org/x/text/language/common.go
vendor/golang.org/x/text/language/gen_common.go [deleted file]
vendor/golang.org/x/text/language/gen_index.go [deleted file]
vendor/golang.org/x/text/language/index.go
vendor/golang.org/x/text/language/maketables.go [deleted file]
vendor/golang.org/x/text/language/match.go
vendor/golang.org/x/text/language/tables.go
vendor/golang.org/x/text/unicode/norm/maketables.go [deleted file]
vendor/golang.org/x/text/unicode/norm/triegen.go [deleted file]
vendor/vendor.json

index 6e62a83747ac686bc4baa321b30f5adf25c11f32..e89ff0734fdb43f7a85407855c883976c0cfa26a 100644 (file)
@@ -33,32 +33,32 @@ var (
        ISO8859_8I encoding.Encoding = &iso8859_8I
 
        iso8859_6E = internal.Encoding{
-               ISO8859_6,
-               "ISO-8859-6E",
-               identifier.ISO88596E,
+               Encoding: ISO8859_6,
+               Name:     "ISO-8859-6E",
+               MIB:      identifier.ISO88596E,
        }
 
        iso8859_6I = internal.Encoding{
-               ISO8859_6,
-               "ISO-8859-6I",
-               identifier.ISO88596I,
+               Encoding: ISO8859_6,
+               Name:     "ISO-8859-6I",
+               MIB:      identifier.ISO88596I,
        }
 
        iso8859_8E = internal.Encoding{
-               ISO8859_8,
-               "ISO-8859-8E",
-               identifier.ISO88598E,
+               Encoding: ISO8859_8,
+               Name:     "ISO-8859-8E",
+               MIB:      identifier.ISO88598E,
        }
 
        iso8859_8I = internal.Encoding{
-               ISO8859_8,
-               "ISO-8859-8I",
-               identifier.ISO88598I,
+               Encoding: ISO8859_8,
+               Name:     "ISO-8859-8I",
+               MIB:      identifier.ISO88598I,
        }
 )
 
 // All is a list of all defined encodings in this package.
-var All = listAll
+var All []encoding.Encoding = listAll
 
 // TODO: implement these encodings, in order of importance.
 // ASCII, ISO8859_1:       Rather common. Close to Windows 1252.
@@ -70,8 +70,8 @@ type utf8Enc struct {
        data [3]byte
 }
 
-// charmap describes an 8-bit character set encoding.
-type charmap struct {
+// Charmap is an 8-bit character set encoding.
+type Charmap struct {
        // name is the encoding's name.
        name string
        // mib is the encoding type of this encoder.
@@ -79,7 +79,7 @@ type charmap struct {
        // asciiSuperset states whether the encoding is a superset of ASCII.
        asciiSuperset bool
        // low is the lower bound of the encoded byte for a non-ASCII rune. If
-       // charmap.asciiSuperset is true then this will be 0x80, otherwise 0x00.
+       // Charmap.asciiSuperset is true then this will be 0x80, otherwise 0x00.
        low uint8
        // replacement is the encoded replacement character.
        replacement byte
@@ -91,26 +91,30 @@ type charmap struct {
        encode [256]uint32
 }
 
-func (m *charmap) NewDecoder() *encoding.Decoder {
+// NewDecoder implements the encoding.Encoding interface.
+func (m *Charmap) NewDecoder() *encoding.Decoder {
        return &encoding.Decoder{Transformer: charmapDecoder{charmap: m}}
 }
 
-func (m *charmap) NewEncoder() *encoding.Encoder {
+// NewEncoder implements the encoding.Encoding interface.
+func (m *Charmap) NewEncoder() *encoding.Encoder {
        return &encoding.Encoder{Transformer: charmapEncoder{charmap: m}}
 }
 
-func (m *charmap) String() string {
+// String returns the Charmap's name.
+func (m *Charmap) String() string {
        return m.name
 }
 
-func (m *charmap) ID() (mib identifier.MIB, other string) {
+// ID implements an internal interface.
+func (m *Charmap) ID() (mib identifier.MIB, other string) {
        return m.mib, ""
 }
 
 // charmapDecoder implements transform.Transformer by decoding to UTF-8.
 type charmapDecoder struct {
        transform.NopResetter
-       charmap *charmap
+       charmap *Charmap
 }
 
 func (m charmapDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
@@ -142,10 +146,22 @@ func (m charmapDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int,
        return nDst, nSrc, err
 }
 
+// DecodeByte returns the Charmap's rune decoding of the byte b.
+func (m *Charmap) DecodeByte(b byte) rune {
+       switch x := &m.decode[b]; x.len {
+       case 1:
+               return rune(x.data[0])
+       case 2:
+               return rune(x.data[0]&0x1f)<<6 | rune(x.data[1]&0x3f)
+       default:
+               return rune(x.data[0]&0x0f)<<12 | rune(x.data[1]&0x3f)<<6 | rune(x.data[2]&0x3f)
+       }
+}
+
 // charmapEncoder implements transform.Transformer by encoding from UTF-8.
 type charmapEncoder struct {
        transform.NopResetter
-       charmap *charmap
+       charmap *Charmap
 }
 
 func (m charmapEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
@@ -207,3 +223,27 @@ loop:
        }
        return nDst, nSrc, err
 }
+
+// EncodeRune returns the Charmap's byte encoding of the rune r. ok is whether
+// r is in the Charmap's repertoire. If not, b is set to the Charmap's
+// replacement byte. This is often the ASCII substitute character '\x1a'.
+func (m *Charmap) EncodeRune(r rune) (b byte, ok bool) {
+       if r < utf8.RuneSelf && m.asciiSuperset {
+               return byte(r), true
+       }
+       for low, high := int(m.low), 0x100; ; {
+               if low >= high {
+                       return m.replacement, false
+               }
+               mid := (low + high) / 2
+               got := m.encode[mid]
+               gotRune := rune(got & (1<<24 - 1))
+               if gotRune < r {
+                       low = mid + 1
+               } else if gotRune > r {
+                       high = mid
+               } else {
+                       return byte(got >> 24), true
+               }
+       }
+}
diff --git a/vendor/golang.org/x/text/encoding/charmap/maketables.go b/vendor/golang.org/x/text/encoding/charmap/maketables.go
deleted file mode 100644 (file)
index 9672c55..0000000
+++ /dev/null
@@ -1,524 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore
-
-package main
-
-import (
-       "bufio"
-       "fmt"
-       "log"
-       "net/http"
-       "sort"
-       "strings"
-       "unicode/utf8"
-
-       "golang.org/x/text/encoding"
-       "golang.org/x/text/internal/gen"
-)
-
-const ascii = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" +
-       "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" +
-       ` !"#$%&'()*+,-./0123456789:;<=>?` +
-       `@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_` +
-       "`abcdefghijklmnopqrstuvwxyz{|}~\u007f"
-
-var encodings = []struct {
-       name        string
-       mib         string
-       comment     string
-       varName     string
-       replacement byte
-       mapping     string
-}{
-       {
-               "IBM Code Page 437",
-               "PC8CodePage437",
-               "",
-               "CodePage437",
-               encoding.ASCIISub,
-               "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM437-2.1.2.ucm",
-       },
-       {
-               "IBM Code Page 850",
-               "PC850Multilingual",
-               "",
-               "CodePage850",
-               encoding.ASCIISub,
-               "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM850-2.1.2.ucm",
-       },
-       {
-               "IBM Code Page 852",
-               "PCp852",
-               "",
-               "CodePage852",
-               encoding.ASCIISub,
-               "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM852-2.1.2.ucm",
-       },
-       {
-               "IBM Code Page 855",
-               "IBM855",
-               "",
-               "CodePage855",
-               encoding.ASCIISub,
-               "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM855-2.1.2.ucm",
-       },
-       {
-               "Windows Code Page 858", // PC latin1 with Euro
-               "IBM00858",
-               "",
-               "CodePage858",
-               encoding.ASCIISub,
-               "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/windows-858-2000.ucm",
-       },
-       {
-               "IBM Code Page 860",
-               "IBM860",
-               "",
-               "CodePage860",
-               encoding.ASCIISub,
-               "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM860-2.1.2.ucm",
-       },
-       {
-               "IBM Code Page 862",
-               "PC862LatinHebrew",
-               "",
-               "CodePage862",
-               encoding.ASCIISub,
-               "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM862-2.1.2.ucm",
-       },
-       {
-               "IBM Code Page 863",
-               "IBM863",
-               "",
-               "CodePage863",
-               encoding.ASCIISub,
-               "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM863-2.1.2.ucm",
-       },
-       {
-               "IBM Code Page 865",
-               "IBM865",
-               "",
-               "CodePage865",
-               encoding.ASCIISub,
-               "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM865-2.1.2.ucm",
-       },
-       {
-               "IBM Code Page 866",
-               "IBM866",
-               "",
-               "CodePage866",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-ibm866.txt",
-       },
-       {
-               "ISO 8859-1",
-               "ISOLatin1",
-               "",
-               "ISO8859_1",
-               encoding.ASCIISub,
-               "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/iso-8859_1-1998.ucm",
-       },
-       {
-               "ISO 8859-2",
-               "ISOLatin2",
-               "",
-               "ISO8859_2",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-iso-8859-2.txt",
-       },
-       {
-               "ISO 8859-3",
-               "ISOLatin3",
-               "",
-               "ISO8859_3",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-iso-8859-3.txt",
-       },
-       {
-               "ISO 8859-4",
-               "ISOLatin4",
-               "",
-               "ISO8859_4",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-iso-8859-4.txt",
-       },
-       {
-               "ISO 8859-5",
-               "ISOLatinCyrillic",
-               "",
-               "ISO8859_5",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-iso-8859-5.txt",
-       },
-       {
-               "ISO 8859-6",
-               "ISOLatinArabic",
-               "",
-               "ISO8859_6,ISO8859_6E,ISO8859_6I",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-iso-8859-6.txt",
-       },
-       {
-               "ISO 8859-7",
-               "ISOLatinGreek",
-               "",
-               "ISO8859_7",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-iso-8859-7.txt",
-       },
-       {
-               "ISO 8859-8",
-               "ISOLatinHebrew",
-               "",
-               "ISO8859_8,ISO8859_8E,ISO8859_8I",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-iso-8859-8.txt",
-       },
-       {
-               "ISO 8859-10",
-               "ISOLatin6",
-               "",
-               "ISO8859_10",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-iso-8859-10.txt",
-       },
-       {
-               "ISO 8859-13",
-               "ISO885913",
-               "",
-               "ISO8859_13",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-iso-8859-13.txt",
-       },
-       {
-               "ISO 8859-14",
-               "ISO885914",
-               "",
-               "ISO8859_14",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-iso-8859-14.txt",
-       },
-       {
-               "ISO 8859-15",
-               "ISO885915",
-               "",
-               "ISO8859_15",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-iso-8859-15.txt",
-       },
-       {
-               "ISO 8859-16",
-               "ISO885916",
-               "",
-               "ISO8859_16",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-iso-8859-16.txt",
-       },
-       {
-               "KOI8-R",
-               "KOI8R",
-               "",
-               "KOI8R",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-koi8-r.txt",
-       },
-       {
-               "KOI8-U",
-               "KOI8U",
-               "",
-               "KOI8U",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-koi8-u.txt",
-       },
-       {
-               "Macintosh",
-               "Macintosh",
-               "",
-               "Macintosh",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-macintosh.txt",
-       },
-       {
-               "Macintosh Cyrillic",
-               "MacintoshCyrillic",
-               "",
-               "MacintoshCyrillic",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-x-mac-cyrillic.txt",
-       },
-       {
-               "Windows 874",
-               "Windows874",
-               "",
-               "Windows874",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-windows-874.txt",
-       },
-       {
-               "Windows 1250",
-               "Windows1250",
-               "",
-               "Windows1250",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-windows-1250.txt",
-       },
-       {
-               "Windows 1251",
-               "Windows1251",
-               "",
-               "Windows1251",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-windows-1251.txt",
-       },
-       {
-               "Windows 1252",
-               "Windows1252",
-               "",
-               "Windows1252",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-windows-1252.txt",
-       },
-       {
-               "Windows 1253",
-               "Windows1253",
-               "",
-               "Windows1253",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-windows-1253.txt",
-       },
-       {
-               "Windows 1254",
-               "Windows1254",
-               "",
-               "Windows1254",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-windows-1254.txt",
-       },
-       {
-               "Windows 1255",
-               "Windows1255",
-               "",
-               "Windows1255",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-windows-1255.txt",
-       },
-       {
-               "Windows 1256",
-               "Windows1256",
-               "",
-               "Windows1256",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-windows-1256.txt",
-       },
-       {
-               "Windows 1257",
-               "Windows1257",
-               "",
-               "Windows1257",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-windows-1257.txt",
-       },
-       {
-               "Windows 1258",
-               "Windows1258",
-               "",
-               "Windows1258",
-               encoding.ASCIISub,
-               "http://encoding.spec.whatwg.org/index-windows-1258.txt",
-       },
-       {
-               "X-User-Defined",
-               "XUserDefined",
-               "It is defined at http://encoding.spec.whatwg.org/#x-user-defined",
-               "XUserDefined",
-               encoding.ASCIISub,
-               ascii +
-                       "\uf780\uf781\uf782\uf783\uf784\uf785\uf786\uf787" +
-                       "\uf788\uf789\uf78a\uf78b\uf78c\uf78d\uf78e\uf78f" +
-                       "\uf790\uf791\uf792\uf793\uf794\uf795\uf796\uf797" +
-                       "\uf798\uf799\uf79a\uf79b\uf79c\uf79d\uf79e\uf79f" +
-                       "\uf7a0\uf7a1\uf7a2\uf7a3\uf7a4\uf7a5\uf7a6\uf7a7" +
-                       "\uf7a8\uf7a9\uf7aa\uf7ab\uf7ac\uf7ad\uf7ae\uf7af" +
-                       "\uf7b0\uf7b1\uf7b2\uf7b3\uf7b4\uf7b5\uf7b6\uf7b7" +
-                       "\uf7b8\uf7b9\uf7ba\uf7bb\uf7bc\uf7bd\uf7be\uf7bf" +
-                       "\uf7c0\uf7c1\uf7c2\uf7c3\uf7c4\uf7c5\uf7c6\uf7c7" +
-                       "\uf7c8\uf7c9\uf7ca\uf7cb\uf7cc\uf7cd\uf7ce\uf7cf" +
-                       "\uf7d0\uf7d1\uf7d2\uf7d3\uf7d4\uf7d5\uf7d6\uf7d7" +
-                       "\uf7d8\uf7d9\uf7da\uf7db\uf7dc\uf7dd\uf7de\uf7df" +
-                       "\uf7e0\uf7e1\uf7e2\uf7e3\uf7e4\uf7e5\uf7e6\uf7e7" +
-                       "\uf7e8\uf7e9\uf7ea\uf7eb\uf7ec\uf7ed\uf7ee\uf7ef" +
-                       "\uf7f0\uf7f1\uf7f2\uf7f3\uf7f4\uf7f5\uf7f6\uf7f7" +
-                       "\uf7f8\uf7f9\uf7fa\uf7fb\uf7fc\uf7fd\uf7fe\uf7ff",
-       },
-}
-
-func getWHATWG(url string) string {
-       res, err := http.Get(url)
-       if err != nil {
-               log.Fatalf("%q: Get: %v", url, err)
-       }
-       defer res.Body.Close()
-
-       mapping := make([]rune, 128)
-       for i := range mapping {
-               mapping[i] = '\ufffd'
-       }
-
-       scanner := bufio.NewScanner(res.Body)
-       for scanner.Scan() {
-               s := strings.TrimSpace(scanner.Text())
-               if s == "" || s[0] == '#' {
-                       continue
-               }
-               x, y := 0, 0
-               if _, err := fmt.Sscanf(s, "%d\t0x%x", &x, &y); err != nil {
-                       log.Fatalf("could not parse %q", s)
-               }
-               if x < 0 || 128 <= x {
-                       log.Fatalf("code %d is out of range", x)
-               }
-               if 0x80 <= y && y < 0xa0 {
-                       // We diverge from the WHATWG spec by mapping control characters
-                       // in the range [0x80, 0xa0) to U+FFFD.
-                       continue
-               }
-               mapping[x] = rune(y)
-       }
-       return ascii + string(mapping)
-}
-
-func getUCM(url string) string {
-       res, err := http.Get(url)
-       if err != nil {
-               log.Fatalf("%q: Get: %v", url, err)
-       }
-       defer res.Body.Close()
-
-       mapping := make([]rune, 256)
-       for i := range mapping {
-               mapping[i] = '\ufffd'
-       }
-
-       charsFound := 0
-       scanner := bufio.NewScanner(res.Body)
-       for scanner.Scan() {
-               s := strings.TrimSpace(scanner.Text())
-               if s == "" || s[0] == '#' {
-                       continue
-               }
-               var c byte
-               var r rune
-               if _, err := fmt.Sscanf(s, `<U%x> \x%x |0`, &r, &c); err != nil {
-                       continue
-               }
-               mapping[c] = r
-               charsFound++
-       }
-
-       if charsFound < 200 {
-               log.Fatalf("%q: only %d characters found (wrong page format?)", url, charsFound)
-       }
-
-       return string(mapping)
-}
-
-func main() {
-       mibs := map[string]bool{}
-       all := []string{}
-
-       w := gen.NewCodeWriter()
-       defer w.WriteGoFile("tables.go", "charmap")
-
-       printf := func(s string, a ...interface{}) { fmt.Fprintf(w, s, a...) }
-
-       printf("import (\n")
-       printf("\t\"golang.org/x/text/encoding\"\n")
-       printf("\t\"golang.org/x/text/encoding/internal/identifier\"\n")
-       printf(")\n\n")
-       for _, e := range encodings {
-               varNames := strings.Split(e.varName, ",")
-               all = append(all, varNames...)
-               varName := varNames[0]
-               switch {
-               case strings.HasPrefix(e.mapping, "http://encoding.spec.whatwg.org/"):
-                       e.mapping = getWHATWG(e.mapping)
-               case strings.HasPrefix(e.mapping, "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/"):
-                       e.mapping = getUCM(e.mapping)
-               }
-
-               asciiSuperset, low := strings.HasPrefix(e.mapping, ascii), 0x00
-               if asciiSuperset {
-                       low = 0x80
-               }
-               lvn := 1
-               if strings.HasPrefix(varName, "ISO") || strings.HasPrefix(varName, "KOI") {
-                       lvn = 3
-               }
-               lowerVarName := strings.ToLower(varName[:lvn]) + varName[lvn:]
-               printf("// %s is the %s encoding.\n", varName, e.name)
-               if e.comment != "" {
-                       printf("//\n// %s\n", e.comment)
-               }
-               printf("var %s encoding.Encoding = &%s\n\nvar %s = charmap{\nname: %q,\n",
-                       varName, lowerVarName, lowerVarName, e.name)
-               if mibs[e.mib] {
-                       log.Fatalf("MIB type %q declared multiple times.", e.mib)
-               }
-               printf("mib: identifier.%s,\n", e.mib)
-               printf("asciiSuperset: %t,\n", asciiSuperset)
-               printf("low: 0x%02x,\n", low)
-               printf("replacement: 0x%02x,\n", e.replacement)
-
-               printf("decode: [256]utf8Enc{\n")
-               i, backMapping := 0, map[rune]byte{}
-               for _, c := range e.mapping {
-                       if _, ok := backMapping[c]; !ok && c != utf8.RuneError {
-                               backMapping[c] = byte(i)
-                       }
-                       var buf [8]byte
-                       n := utf8.EncodeRune(buf[:], c)
-                       if n > 3 {
-                               panic(fmt.Sprintf("rune %q (%U) is too long", c, c))
-                       }
-                       printf("{%d,[3]byte{0x%02x,0x%02x,0x%02x}},", n, buf[0], buf[1], buf[2])
-                       if i%2 == 1 {
-                               printf("\n")
-                       }
-                       i++
-               }
-               printf("},\n")
-
-               printf("encode: [256]uint32{\n")
-               encode := make([]uint32, 0, 256)
-               for c, i := range backMapping {
-                       encode = append(encode, uint32(i)<<24|uint32(c))
-               }
-               sort.Sort(byRune(encode))
-               for len(encode) < cap(encode) {
-                       encode = append(encode, encode[len(encode)-1])
-               }
-               for i, enc := range encode {
-                       printf("0x%08x,", enc)
-                       if i%8 == 7 {
-                               printf("\n")
-                       }
-               }
-               printf("},\n}\n")
-
-               // Add an estimate of the size of a single charmap{} struct value, which
-               // includes two 256 elem arrays of 4 bytes and some extra fields, which
-               // align to 3 uint64s on 64-bit architectures.
-               w.Size += 2*4*256 + 3*8
-       }
-       // TODO: add proper line breaking.
-       printf("var listAll = []encoding.Encoding{\n%s,\n}\n\n", strings.Join(all, ",\n"))
-}
-
-type byRune []uint32
-
-func (b byRune) Len() int           { return len(b) }
-func (b byRune) Less(i, j int) bool { return b[i]&0xffffff < b[j]&0xffffff }
-func (b byRune) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }
index 5ae8dbcfa6bd5512050c826513229e2207094832..cf7281e9e36e2062899c1dd9c864ec915a12d341 100644 (file)
@@ -1,4 +1,4 @@
-// This file was generated by go generate; DO NOT EDIT
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
 
 package charmap
 
@@ -7,10 +7,185 @@ import (
        "golang.org/x/text/encoding/internal/identifier"
 )
 
+// CodePage037 is the IBM Code Page 037 encoding.
+var CodePage037 *Charmap = &codePage037
+
+var codePage037 = Charmap{
+       name:          "IBM Code Page 037",
+       mib:           identifier.IBM037,
+       asciiSuperset: false,
+       low:           0x00,
+       replacement:   0x3f,
+       decode: [256]utf8Enc{
+               {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+               {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x9c, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x86, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x97, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}},
+               {2, [3]byte{0xc2, 0x8e, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+               {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+               {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+               {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+               {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}},
+               {1, [3]byte{0x08, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}},
+               {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}},
+               {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+               {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}},
+               {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}},
+               {2, [3]byte{0xc2, 0x84, 0x00}}, {1, [3]byte{0x0a, 0x00, 0x00}},
+               {1, [3]byte{0x17, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}},
+               {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}},
+               {2, [3]byte{0xc2, 0x8c, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+               {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}},
+               {1, [3]byte{0x16, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}},
+               {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}},
+               {2, [3]byte{0xc2, 0x96, 0x00}}, {1, [3]byte{0x04, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}},
+               {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}},
+               {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x9e, 0x00}}, {1, [3]byte{0x1a, 0x00, 0x00}},
+               {1, [3]byte{0x20, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
+               {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa4, 0x00}},
+               {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+               {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
+               {2, [3]byte{0xc3, 0xa7, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
+               {2, [3]byte{0xc2, 0xa2, 0x00}}, {1, [3]byte{0x2e, 0x00, 0x00}},
+               {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x28, 0x00, 0x00}},
+               {1, [3]byte{0x2b, 0x00, 0x00}}, {1, [3]byte{0x7c, 0x00, 0x00}},
+               {1, [3]byte{0x26, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+               {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+               {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+               {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+               {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+               {1, [3]byte{0x21, 0x00, 0x00}}, {1, [3]byte{0x24, 0x00, 0x00}},
+               {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+               {1, [3]byte{0x3b, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xac, 0x00}},
+               {1, [3]byte{0x2d, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+               {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x84, 0x00}},
+               {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+               {2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+               {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+               {2, [3]byte{0xc2, 0xa6, 0x00}}, {1, [3]byte{0x2c, 0x00, 0x00}},
+               {1, [3]byte{0x25, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+               {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+               {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+               {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+               {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+               {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
+               {2, [3]byte{0xc3, 0x8c, 0x00}}, {1, [3]byte{0x60, 0x00, 0x00}},
+               {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+               {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+               {1, [3]byte{0x3d, 0x00, 0x00}}, {1, [3]byte{0x22, 0x00, 0x00}},
+               {2, [3]byte{0xc3, 0x98, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+               {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+               {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+               {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+               {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+               {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
+               {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+               {2, [3]byte{0xc2, 0xb0, 0x00}}, {1, [3]byte{0x6a, 0x00, 0x00}},
+               {1, [3]byte{0x6b, 0x00, 0x00}}, {1, [3]byte{0x6c, 0x00, 0x00}},
+               {1, [3]byte{0x6d, 0x00, 0x00}}, {1, [3]byte{0x6e, 0x00, 0x00}},
+               {1, [3]byte{0x6f, 0x00, 0x00}}, {1, [3]byte{0x70, 0x00, 0x00}},
+               {1, [3]byte{0x71, 0x00, 0x00}}, {1, [3]byte{0x72, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
+               {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
+               {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc2, 0xa4, 0x00}},
+               {2, [3]byte{0xc2, 0xb5, 0x00}}, {1, [3]byte{0x7e, 0x00, 0x00}},
+               {1, [3]byte{0x73, 0x00, 0x00}}, {1, [3]byte{0x74, 0x00, 0x00}},
+               {1, [3]byte{0x75, 0x00, 0x00}}, {1, [3]byte{0x76, 0x00, 0x00}},
+               {1, [3]byte{0x77, 0x00, 0x00}}, {1, [3]byte{0x78, 0x00, 0x00}},
+               {1, [3]byte{0x79, 0x00, 0x00}}, {1, [3]byte{0x7a, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
+               {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
+               {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}},
+               {1, [3]byte{0x5e, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+               {2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+               {2, [3]byte{0xc2, 0xa9, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+               {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xbc, 0x00}},
+               {2, [3]byte{0xc2, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}},
+               {1, [3]byte{0x5b, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}},
+               {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+               {1, [3]byte{0x7b, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+               {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+               {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+               {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+               {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
+               {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
+               {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
+               {1, [3]byte{0x7d, 0x00, 0x00}}, {1, [3]byte{0x4a, 0x00, 0x00}},
+               {1, [3]byte{0x4b, 0x00, 0x00}}, {1, [3]byte{0x4c, 0x00, 0x00}},
+               {1, [3]byte{0x4d, 0x00, 0x00}}, {1, [3]byte{0x4e, 0x00, 0x00}},
+               {1, [3]byte{0x4f, 0x00, 0x00}}, {1, [3]byte{0x50, 0x00, 0x00}},
+               {1, [3]byte{0x51, 0x00, 0x00}}, {1, [3]byte{0x52, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xb9, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+               {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+               {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
+               {1, [3]byte{0x5c, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+               {1, [3]byte{0x53, 0x00, 0x00}}, {1, [3]byte{0x54, 0x00, 0x00}},
+               {1, [3]byte{0x55, 0x00, 0x00}}, {1, [3]byte{0x56, 0x00, 0x00}},
+               {1, [3]byte{0x57, 0x00, 0x00}}, {1, [3]byte{0x58, 0x00, 0x00}},
+               {1, [3]byte{0x59, 0x00, 0x00}}, {1, [3]byte{0x5a, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}},
+               {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}},
+               {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+               {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+               {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+               {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+               {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+               {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+               {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+               {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}},
+       },
+       encode: [256]uint32{
+               0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x37000004, 0x2d000005, 0x2e000006, 0x2f000007,
+               0x16000008, 0x05000009, 0x2500000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+               0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x3c000014, 0x3d000015, 0x32000016, 0x26000017,
+               0x18000018, 0x19000019, 0x3f00001a, 0x2700001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+               0x40000020, 0x5a000021, 0x7f000022, 0x7b000023, 0x5b000024, 0x6c000025, 0x50000026, 0x7d000027,
+               0x4d000028, 0x5d000029, 0x5c00002a, 0x4e00002b, 0x6b00002c, 0x6000002d, 0x4b00002e, 0x6100002f,
+               0xf0000030, 0xf1000031, 0xf2000032, 0xf3000033, 0xf4000034, 0xf5000035, 0xf6000036, 0xf7000037,
+               0xf8000038, 0xf9000039, 0x7a00003a, 0x5e00003b, 0x4c00003c, 0x7e00003d, 0x6e00003e, 0x6f00003f,
+               0x7c000040, 0xc1000041, 0xc2000042, 0xc3000043, 0xc4000044, 0xc5000045, 0xc6000046, 0xc7000047,
+               0xc8000048, 0xc9000049, 0xd100004a, 0xd200004b, 0xd300004c, 0xd400004d, 0xd500004e, 0xd600004f,
+               0xd7000050, 0xd8000051, 0xd9000052, 0xe2000053, 0xe3000054, 0xe4000055, 0xe5000056, 0xe6000057,
+               0xe7000058, 0xe8000059, 0xe900005a, 0xba00005b, 0xe000005c, 0xbb00005d, 0xb000005e, 0x6d00005f,
+               0x79000060, 0x81000061, 0x82000062, 0x83000063, 0x84000064, 0x85000065, 0x86000066, 0x87000067,
+               0x88000068, 0x89000069, 0x9100006a, 0x9200006b, 0x9300006c, 0x9400006d, 0x9500006e, 0x9600006f,
+               0x97000070, 0x98000071, 0x99000072, 0xa2000073, 0xa3000074, 0xa4000075, 0xa5000076, 0xa6000077,
+               0xa7000078, 0xa8000079, 0xa900007a, 0xc000007b, 0x4f00007c, 0xd000007d, 0xa100007e, 0x0700007f,
+               0x20000080, 0x21000081, 0x22000082, 0x23000083, 0x24000084, 0x15000085, 0x06000086, 0x17000087,
+               0x28000088, 0x29000089, 0x2a00008a, 0x2b00008b, 0x2c00008c, 0x0900008d, 0x0a00008e, 0x1b00008f,
+               0x30000090, 0x31000091, 0x1a000092, 0x33000093, 0x34000094, 0x35000095, 0x36000096, 0x08000097,
+               0x38000098, 0x39000099, 0x3a00009a, 0x3b00009b, 0x0400009c, 0x1400009d, 0x3e00009e, 0xff00009f,
+               0x410000a0, 0xaa0000a1, 0x4a0000a2, 0xb10000a3, 0x9f0000a4, 0xb20000a5, 0x6a0000a6, 0xb50000a7,
+               0xbd0000a8, 0xb40000a9, 0x9a0000aa, 0x8a0000ab, 0x5f0000ac, 0xca0000ad, 0xaf0000ae, 0xbc0000af,
+               0x900000b0, 0x8f0000b1, 0xea0000b2, 0xfa0000b3, 0xbe0000b4, 0xa00000b5, 0xb60000b6, 0xb30000b7,
+               0x9d0000b8, 0xda0000b9, 0x9b0000ba, 0x8b0000bb, 0xb70000bc, 0xb80000bd, 0xb90000be, 0xab0000bf,
+               0x640000c0, 0x650000c1, 0x620000c2, 0x660000c3, 0x630000c4, 0x670000c5, 0x9e0000c6, 0x680000c7,
+               0x740000c8, 0x710000c9, 0x720000ca, 0x730000cb, 0x780000cc, 0x750000cd, 0x760000ce, 0x770000cf,
+               0xac0000d0, 0x690000d1, 0xed0000d2, 0xee0000d3, 0xeb0000d4, 0xef0000d5, 0xec0000d6, 0xbf0000d7,
+               0x800000d8, 0xfd0000d9, 0xfe0000da, 0xfb0000db, 0xfc0000dc, 0xad0000dd, 0xae0000de, 0x590000df,
+               0x440000e0, 0x450000e1, 0x420000e2, 0x460000e3, 0x430000e4, 0x470000e5, 0x9c0000e6, 0x480000e7,
+               0x540000e8, 0x510000e9, 0x520000ea, 0x530000eb, 0x580000ec, 0x550000ed, 0x560000ee, 0x570000ef,
+               0x8c0000f0, 0x490000f1, 0xcd0000f2, 0xce0000f3, 0xcb0000f4, 0xcf0000f5, 0xcc0000f6, 0xe10000f7,
+               0x700000f8, 0xdd0000f9, 0xde0000fa, 0xdb0000fb, 0xdc0000fc, 0x8d0000fd, 0x8e0000fe, 0xdf0000ff,
+       },
+}
+
 // CodePage437 is the IBM Code Page 437 encoding.
-var CodePage437 encoding.Encoding = &codePage437
+var CodePage437 *Charmap = &codePage437
 
-var codePage437 = charmap{
+var codePage437 = Charmap{
        name:          "IBM Code Page 437",
        mib:           identifier.PC8CodePage437,
        asciiSuperset: true,
@@ -183,9 +358,9 @@ var codePage437 = charmap{
 }
 
 // CodePage850 is the IBM Code Page 850 encoding.
-var CodePage850 encoding.Encoding = &codePage850
+var CodePage850 *Charmap = &codePage850
 
-var codePage850 = charmap{
+var codePage850 = Charmap{
        name:          "IBM Code Page 850",
        mib:           identifier.PC850Multilingual,
        asciiSuperset: true,
@@ -358,9 +533,9 @@ var codePage850 = charmap{
 }
 
 // CodePage852 is the IBM Code Page 852 encoding.
-var CodePage852 encoding.Encoding = &codePage852
+var CodePage852 *Charmap = &codePage852
 
-var codePage852 = charmap{
+var codePage852 = Charmap{
        name:          "IBM Code Page 852",
        mib:           identifier.PCp852,
        asciiSuperset: true,
@@ -533,9 +708,9 @@ var codePage852 = charmap{
 }
 
 // CodePage855 is the IBM Code Page 855 encoding.
-var CodePage855 encoding.Encoding = &codePage855
+var CodePage855 *Charmap = &codePage855
 
-var codePage855 = charmap{
+var codePage855 = Charmap{
        name:          "IBM Code Page 855",
        mib:           identifier.IBM855,
        asciiSuperset: true,
@@ -708,9 +883,9 @@ var codePage855 = charmap{
 }
 
 // CodePage858 is the Windows Code Page 858 encoding.
-var CodePage858 encoding.Encoding = &codePage858
+var CodePage858 *Charmap = &codePage858
 
-var codePage858 = charmap{
+var codePage858 = Charmap{
        name:          "Windows Code Page 858",
        mib:           identifier.IBM00858,
        asciiSuperset: true,
@@ -883,9 +1058,9 @@ var codePage858 = charmap{
 }
 
 // CodePage860 is the IBM Code Page 860 encoding.
-var CodePage860 encoding.Encoding = &codePage860
+var CodePage860 *Charmap = &codePage860
 
-var codePage860 = charmap{
+var codePage860 = Charmap{
        name:          "IBM Code Page 860",
        mib:           identifier.IBM860,
        asciiSuperset: true,
@@ -1058,9 +1233,9 @@ var codePage860 = charmap{
 }
 
 // CodePage862 is the IBM Code Page 862 encoding.
-var CodePage862 encoding.Encoding = &codePage862
+var CodePage862 *Charmap = &codePage862
 
-var codePage862 = charmap{
+var codePage862 = Charmap{
        name:          "IBM Code Page 862",
        mib:           identifier.PC862LatinHebrew,
        asciiSuperset: true,
@@ -1233,9 +1408,9 @@ var codePage862 = charmap{
 }
 
 // CodePage863 is the IBM Code Page 863 encoding.
-var CodePage863 encoding.Encoding = &codePage863
+var CodePage863 *Charmap = &codePage863
 
-var codePage863 = charmap{
+var codePage863 = Charmap{
        name:          "IBM Code Page 863",
        mib:           identifier.IBM863,
        asciiSuperset: true,
@@ -1408,9 +1583,9 @@ var codePage863 = charmap{
 }
 
 // CodePage865 is the IBM Code Page 865 encoding.
-var CodePage865 encoding.Encoding = &codePage865
+var CodePage865 *Charmap = &codePage865
 
-var codePage865 = charmap{
+var codePage865 = Charmap{
        name:          "IBM Code Page 865",
        mib:           identifier.IBM865,
        asciiSuperset: true,
@@ -1583,9 +1758,9 @@ var codePage865 = charmap{
 }
 
 // CodePage866 is the IBM Code Page 866 encoding.
-var CodePage866 encoding.Encoding = &codePage866
+var CodePage866 *Charmap = &codePage866
 
-var codePage866 = charmap{
+var codePage866 = Charmap{
        name:          "IBM Code Page 866",
        mib:           identifier.IBM866,
        asciiSuperset: true,
@@ -1757,10 +1932,360 @@ var codePage866 = charmap{
        },
 }
 
+// CodePage1047 is the IBM Code Page 1047 encoding.
+var CodePage1047 *Charmap = &codePage1047
+
+var codePage1047 = Charmap{
+       name:          "IBM Code Page 1047",
+       mib:           identifier.IBM1047,
+       asciiSuperset: false,
+       low:           0x00,
+       replacement:   0x3f,
+       decode: [256]utf8Enc{
+               {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+               {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x9c, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x86, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x97, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}},
+               {2, [3]byte{0xc2, 0x8e, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+               {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+               {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+               {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+               {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}},
+               {1, [3]byte{0x08, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}},
+               {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}},
+               {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+               {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}},
+               {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}},
+               {2, [3]byte{0xc2, 0x84, 0x00}}, {1, [3]byte{0x0a, 0x00, 0x00}},
+               {1, [3]byte{0x17, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}},
+               {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}},
+               {2, [3]byte{0xc2, 0x8c, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+               {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}},
+               {1, [3]byte{0x16, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}},
+               {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}},
+               {2, [3]byte{0xc2, 0x96, 0x00}}, {1, [3]byte{0x04, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}},
+               {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}},
+               {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x9e, 0x00}}, {1, [3]byte{0x1a, 0x00, 0x00}},
+               {1, [3]byte{0x20, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
+               {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa4, 0x00}},
+               {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+               {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
+               {2, [3]byte{0xc3, 0xa7, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
+               {2, [3]byte{0xc2, 0xa2, 0x00}}, {1, [3]byte{0x2e, 0x00, 0x00}},
+               {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x28, 0x00, 0x00}},
+               {1, [3]byte{0x2b, 0x00, 0x00}}, {1, [3]byte{0x7c, 0x00, 0x00}},
+               {1, [3]byte{0x26, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+               {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+               {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+               {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+               {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+               {1, [3]byte{0x21, 0x00, 0x00}}, {1, [3]byte{0x24, 0x00, 0x00}},
+               {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+               {1, [3]byte{0x3b, 0x00, 0x00}}, {1, [3]byte{0x5e, 0x00, 0x00}},
+               {1, [3]byte{0x2d, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+               {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x84, 0x00}},
+               {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+               {2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+               {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+               {2, [3]byte{0xc2, 0xa6, 0x00}}, {1, [3]byte{0x2c, 0x00, 0x00}},
+               {1, [3]byte{0x25, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+               {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+               {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+               {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+               {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+               {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
+               {2, [3]byte{0xc3, 0x8c, 0x00}}, {1, [3]byte{0x60, 0x00, 0x00}},
+               {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+               {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+               {1, [3]byte{0x3d, 0x00, 0x00}}, {1, [3]byte{0x22, 0x00, 0x00}},
+               {2, [3]byte{0xc3, 0x98, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+               {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+               {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+               {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+               {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+               {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
+               {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+               {2, [3]byte{0xc2, 0xb0, 0x00}}, {1, [3]byte{0x6a, 0x00, 0x00}},
+               {1, [3]byte{0x6b, 0x00, 0x00}}, {1, [3]byte{0x6c, 0x00, 0x00}},
+               {1, [3]byte{0x6d, 0x00, 0x00}}, {1, [3]byte{0x6e, 0x00, 0x00}},
+               {1, [3]byte{0x6f, 0x00, 0x00}}, {1, [3]byte{0x70, 0x00, 0x00}},
+               {1, [3]byte{0x71, 0x00, 0x00}}, {1, [3]byte{0x72, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
+               {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
+               {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc2, 0xa4, 0x00}},
+               {2, [3]byte{0xc2, 0xb5, 0x00}}, {1, [3]byte{0x7e, 0x00, 0x00}},
+               {1, [3]byte{0x73, 0x00, 0x00}}, {1, [3]byte{0x74, 0x00, 0x00}},
+               {1, [3]byte{0x75, 0x00, 0x00}}, {1, [3]byte{0x76, 0x00, 0x00}},
+               {1, [3]byte{0x77, 0x00, 0x00}}, {1, [3]byte{0x78, 0x00, 0x00}},
+               {1, [3]byte{0x79, 0x00, 0x00}}, {1, [3]byte{0x7a, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
+               {2, [3]byte{0xc3, 0x90, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+               {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}},
+               {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+               {2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+               {2, [3]byte{0xc2, 0xa9, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+               {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xbc, 0x00}},
+               {2, [3]byte{0xc2, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}},
+               {2, [3]byte{0xc3, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}},
+               {2, [3]byte{0xc2, 0xaf, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+               {1, [3]byte{0x7b, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+               {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+               {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+               {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+               {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
+               {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
+               {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
+               {1, [3]byte{0x7d, 0x00, 0x00}}, {1, [3]byte{0x4a, 0x00, 0x00}},
+               {1, [3]byte{0x4b, 0x00, 0x00}}, {1, [3]byte{0x4c, 0x00, 0x00}},
+               {1, [3]byte{0x4d, 0x00, 0x00}}, {1, [3]byte{0x4e, 0x00, 0x00}},
+               {1, [3]byte{0x4f, 0x00, 0x00}}, {1, [3]byte{0x50, 0x00, 0x00}},
+               {1, [3]byte{0x51, 0x00, 0x00}}, {1, [3]byte{0x52, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xb9, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+               {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+               {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
+               {1, [3]byte{0x5c, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+               {1, [3]byte{0x53, 0x00, 0x00}}, {1, [3]byte{0x54, 0x00, 0x00}},
+               {1, [3]byte{0x55, 0x00, 0x00}}, {1, [3]byte{0x56, 0x00, 0x00}},
+               {1, [3]byte{0x57, 0x00, 0x00}}, {1, [3]byte{0x58, 0x00, 0x00}},
+               {1, [3]byte{0x59, 0x00, 0x00}}, {1, [3]byte{0x5a, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}},
+               {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}},
+               {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+               {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+               {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+               {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+               {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+               {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+               {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+               {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}},
+       },
+       encode: [256]uint32{
+               0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x37000004, 0x2d000005, 0x2e000006, 0x2f000007,
+               0x16000008, 0x05000009, 0x2500000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+               0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x3c000014, 0x3d000015, 0x32000016, 0x26000017,
+               0x18000018, 0x19000019, 0x3f00001a, 0x2700001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+               0x40000020, 0x5a000021, 0x7f000022, 0x7b000023, 0x5b000024, 0x6c000025, 0x50000026, 0x7d000027,
+               0x4d000028, 0x5d000029, 0x5c00002a, 0x4e00002b, 0x6b00002c, 0x6000002d, 0x4b00002e, 0x6100002f,
+               0xf0000030, 0xf1000031, 0xf2000032, 0xf3000033, 0xf4000034, 0xf5000035, 0xf6000036, 0xf7000037,
+               0xf8000038, 0xf9000039, 0x7a00003a, 0x5e00003b, 0x4c00003c, 0x7e00003d, 0x6e00003e, 0x6f00003f,
+               0x7c000040, 0xc1000041, 0xc2000042, 0xc3000043, 0xc4000044, 0xc5000045, 0xc6000046, 0xc7000047,
+               0xc8000048, 0xc9000049, 0xd100004a, 0xd200004b, 0xd300004c, 0xd400004d, 0xd500004e, 0xd600004f,
+               0xd7000050, 0xd8000051, 0xd9000052, 0xe2000053, 0xe3000054, 0xe4000055, 0xe5000056, 0xe6000057,
+               0xe7000058, 0xe8000059, 0xe900005a, 0xad00005b, 0xe000005c, 0xbd00005d, 0x5f00005e, 0x6d00005f,
+               0x79000060, 0x81000061, 0x82000062, 0x83000063, 0x84000064, 0x85000065, 0x86000066, 0x87000067,
+               0x88000068, 0x89000069, 0x9100006a, 0x9200006b, 0x9300006c, 0x9400006d, 0x9500006e, 0x9600006f,
+               0x97000070, 0x98000071, 0x99000072, 0xa2000073, 0xa3000074, 0xa4000075, 0xa5000076, 0xa6000077,
+               0xa7000078, 0xa8000079, 0xa900007a, 0xc000007b, 0x4f00007c, 0xd000007d, 0xa100007e, 0x0700007f,
+               0x20000080, 0x21000081, 0x22000082, 0x23000083, 0x24000084, 0x15000085, 0x06000086, 0x17000087,
+               0x28000088, 0x29000089, 0x2a00008a, 0x2b00008b, 0x2c00008c, 0x0900008d, 0x0a00008e, 0x1b00008f,
+               0x30000090, 0x31000091, 0x1a000092, 0x33000093, 0x34000094, 0x35000095, 0x36000096, 0x08000097,
+               0x38000098, 0x39000099, 0x3a00009a, 0x3b00009b, 0x0400009c, 0x1400009d, 0x3e00009e, 0xff00009f,
+               0x410000a0, 0xaa0000a1, 0x4a0000a2, 0xb10000a3, 0x9f0000a4, 0xb20000a5, 0x6a0000a6, 0xb50000a7,
+               0xbb0000a8, 0xb40000a9, 0x9a0000aa, 0x8a0000ab, 0xb00000ac, 0xca0000ad, 0xaf0000ae, 0xbc0000af,
+               0x900000b0, 0x8f0000b1, 0xea0000b2, 0xfa0000b3, 0xbe0000b4, 0xa00000b5, 0xb60000b6, 0xb30000b7,
+               0x9d0000b8, 0xda0000b9, 0x9b0000ba, 0x8b0000bb, 0xb70000bc, 0xb80000bd, 0xb90000be, 0xab0000bf,
+               0x640000c0, 0x650000c1, 0x620000c2, 0x660000c3, 0x630000c4, 0x670000c5, 0x9e0000c6, 0x680000c7,
+               0x740000c8, 0x710000c9, 0x720000ca, 0x730000cb, 0x780000cc, 0x750000cd, 0x760000ce, 0x770000cf,
+               0xac0000d0, 0x690000d1, 0xed0000d2, 0xee0000d3, 0xeb0000d4, 0xef0000d5, 0xec0000d6, 0xbf0000d7,
+               0x800000d8, 0xfd0000d9, 0xfe0000da, 0xfb0000db, 0xfc0000dc, 0xba0000dd, 0xae0000de, 0x590000df,
+               0x440000e0, 0x450000e1, 0x420000e2, 0x460000e3, 0x430000e4, 0x470000e5, 0x9c0000e6, 0x480000e7,
+               0x540000e8, 0x510000e9, 0x520000ea, 0x530000eb, 0x580000ec, 0x550000ed, 0x560000ee, 0x570000ef,
+               0x8c0000f0, 0x490000f1, 0xcd0000f2, 0xce0000f3, 0xcb0000f4, 0xcf0000f5, 0xcc0000f6, 0xe10000f7,
+               0x700000f8, 0xdd0000f9, 0xde0000fa, 0xdb0000fb, 0xdc0000fc, 0x8d0000fd, 0x8e0000fe, 0xdf0000ff,
+       },
+}
+
+// CodePage1140 is the IBM Code Page 1140 encoding.
+var CodePage1140 *Charmap = &codePage1140
+
+var codePage1140 = Charmap{
+       name:          "IBM Code Page 1140",
+       mib:           identifier.IBM01140,
+       asciiSuperset: false,
+       low:           0x00,
+       replacement:   0x3f,
+       decode: [256]utf8Enc{
+               {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+               {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x9c, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x86, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x97, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}},
+               {2, [3]byte{0xc2, 0x8e, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+               {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+               {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+               {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+               {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}},
+               {1, [3]byte{0x08, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}},
+               {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}},
+               {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+               {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}},
+               {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}},
+               {2, [3]byte{0xc2, 0x84, 0x00}}, {1, [3]byte{0x0a, 0x00, 0x00}},
+               {1, [3]byte{0x17, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}},
+               {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}},
+               {2, [3]byte{0xc2, 0x8c, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+               {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}},
+               {1, [3]byte{0x16, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}},
+               {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}},
+               {2, [3]byte{0xc2, 0x96, 0x00}}, {1, [3]byte{0x04, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}},
+               {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}},
+               {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x9e, 0x00}}, {1, [3]byte{0x1a, 0x00, 0x00}},
+               {1, [3]byte{0x20, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
+               {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa4, 0x00}},
+               {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+               {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
+               {2, [3]byte{0xc3, 0xa7, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
+               {2, [3]byte{0xc2, 0xa2, 0x00}}, {1, [3]byte{0x2e, 0x00, 0x00}},
+               {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x28, 0x00, 0x00}},
+               {1, [3]byte{0x2b, 0x00, 0x00}}, {1, [3]byte{0x7c, 0x00, 0x00}},
+               {1, [3]byte{0x26, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+               {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+               {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+               {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+               {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+               {1, [3]byte{0x21, 0x00, 0x00}}, {1, [3]byte{0x24, 0x00, 0x00}},
+               {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+               {1, [3]byte{0x3b, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xac, 0x00}},
+               {1, [3]byte{0x2d, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+               {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x84, 0x00}},
+               {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+               {2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+               {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+               {2, [3]byte{0xc2, 0xa6, 0x00}}, {1, [3]byte{0x2c, 0x00, 0x00}},
+               {1, [3]byte{0x25, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+               {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+               {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+               {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+               {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+               {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
+               {2, [3]byte{0xc3, 0x8c, 0x00}}, {1, [3]byte{0x60, 0x00, 0x00}},
+               {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+               {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+               {1, [3]byte{0x3d, 0x00, 0x00}}, {1, [3]byte{0x22, 0x00, 0x00}},
+               {2, [3]byte{0xc3, 0x98, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+               {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+               {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+               {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+               {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+               {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
+               {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+               {2, [3]byte{0xc2, 0xb0, 0x00}}, {1, [3]byte{0x6a, 0x00, 0x00}},
+               {1, [3]byte{0x6b, 0x00, 0x00}}, {1, [3]byte{0x6c, 0x00, 0x00}},
+               {1, [3]byte{0x6d, 0x00, 0x00}}, {1, [3]byte{0x6e, 0x00, 0x00}},
+               {1, [3]byte{0x6f, 0x00, 0x00}}, {1, [3]byte{0x70, 0x00, 0x00}},
+               {1, [3]byte{0x71, 0x00, 0x00}}, {1, [3]byte{0x72, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
+               {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
+               {2, [3]byte{0xc3, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x82, 0xac}},
+               {2, [3]byte{0xc2, 0xb5, 0x00}}, {1, [3]byte{0x7e, 0x00, 0x00}},
+               {1, [3]byte{0x73, 0x00, 0x00}}, {1, [3]byte{0x74, 0x00, 0x00}},
+               {1, [3]byte{0x75, 0x00, 0x00}}, {1, [3]byte{0x76, 0x00, 0x00}},
+               {1, [3]byte{0x77, 0x00, 0x00}}, {1, [3]byte{0x78, 0x00, 0x00}},
+               {1, [3]byte{0x79, 0x00, 0x00}}, {1, [3]byte{0x7a, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
+               {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
+               {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}},
+               {1, [3]byte{0x5e, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+               {2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+               {2, [3]byte{0xc2, 0xa9, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+               {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xbc, 0x00}},
+               {2, [3]byte{0xc2, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}},
+               {1, [3]byte{0x5b, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}},
+               {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+               {1, [3]byte{0x7b, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+               {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+               {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+               {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+               {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
+               {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
+               {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
+               {1, [3]byte{0x7d, 0x00, 0x00}}, {1, [3]byte{0x4a, 0x00, 0x00}},
+               {1, [3]byte{0x4b, 0x00, 0x00}}, {1, [3]byte{0x4c, 0x00, 0x00}},
+               {1, [3]byte{0x4d, 0x00, 0x00}}, {1, [3]byte{0x4e, 0x00, 0x00}},
+               {1, [3]byte{0x4f, 0x00, 0x00}}, {1, [3]byte{0x50, 0x00, 0x00}},
+               {1, [3]byte{0x51, 0x00, 0x00}}, {1, [3]byte{0x52, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xb9, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+               {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+               {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
+               {1, [3]byte{0x5c, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+               {1, [3]byte{0x53, 0x00, 0x00}}, {1, [3]byte{0x54, 0x00, 0x00}},
+               {1, [3]byte{0x55, 0x00, 0x00}}, {1, [3]byte{0x56, 0x00, 0x00}},
+               {1, [3]byte{0x57, 0x00, 0x00}}, {1, [3]byte{0x58, 0x00, 0x00}},
+               {1, [3]byte{0x59, 0x00, 0x00}}, {1, [3]byte{0x5a, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}},
+               {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}},
+               {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+               {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+               {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+               {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+               {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+               {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+               {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+               {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}},
+       },
+       encode: [256]uint32{
+               0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x37000004, 0x2d000005, 0x2e000006, 0x2f000007,
+               0x16000008, 0x05000009, 0x2500000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+               0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x3c000014, 0x3d000015, 0x32000016, 0x26000017,
+               0x18000018, 0x19000019, 0x3f00001a, 0x2700001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+               0x40000020, 0x5a000021, 0x7f000022, 0x7b000023, 0x5b000024, 0x6c000025, 0x50000026, 0x7d000027,
+               0x4d000028, 0x5d000029, 0x5c00002a, 0x4e00002b, 0x6b00002c, 0x6000002d, 0x4b00002e, 0x6100002f,
+               0xf0000030, 0xf1000031, 0xf2000032, 0xf3000033, 0xf4000034, 0xf5000035, 0xf6000036, 0xf7000037,
+               0xf8000038, 0xf9000039, 0x7a00003a, 0x5e00003b, 0x4c00003c, 0x7e00003d, 0x6e00003e, 0x6f00003f,
+               0x7c000040, 0xc1000041, 0xc2000042, 0xc3000043, 0xc4000044, 0xc5000045, 0xc6000046, 0xc7000047,
+               0xc8000048, 0xc9000049, 0xd100004a, 0xd200004b, 0xd300004c, 0xd400004d, 0xd500004e, 0xd600004f,
+               0xd7000050, 0xd8000051, 0xd9000052, 0xe2000053, 0xe3000054, 0xe4000055, 0xe5000056, 0xe6000057,
+               0xe7000058, 0xe8000059, 0xe900005a, 0xba00005b, 0xe000005c, 0xbb00005d, 0xb000005e, 0x6d00005f,
+               0x79000060, 0x81000061, 0x82000062, 0x83000063, 0x84000064, 0x85000065, 0x86000066, 0x87000067,
+               0x88000068, 0x89000069, 0x9100006a, 0x9200006b, 0x9300006c, 0x9400006d, 0x9500006e, 0x9600006f,
+               0x97000070, 0x98000071, 0x99000072, 0xa2000073, 0xa3000074, 0xa4000075, 0xa5000076, 0xa6000077,
+               0xa7000078, 0xa8000079, 0xa900007a, 0xc000007b, 0x4f00007c, 0xd000007d, 0xa100007e, 0x0700007f,
+               0x20000080, 0x21000081, 0x22000082, 0x23000083, 0x24000084, 0x15000085, 0x06000086, 0x17000087,
+               0x28000088, 0x29000089, 0x2a00008a, 0x2b00008b, 0x2c00008c, 0x0900008d, 0x0a00008e, 0x1b00008f,
+               0x30000090, 0x31000091, 0x1a000092, 0x33000093, 0x34000094, 0x35000095, 0x36000096, 0x08000097,
+               0x38000098, 0x39000099, 0x3a00009a, 0x3b00009b, 0x0400009c, 0x1400009d, 0x3e00009e, 0xff00009f,
+               0x410000a0, 0xaa0000a1, 0x4a0000a2, 0xb10000a3, 0xb20000a5, 0x6a0000a6, 0xb50000a7, 0xbd0000a8,
+               0xb40000a9, 0x9a0000aa, 0x8a0000ab, 0x5f0000ac, 0xca0000ad, 0xaf0000ae, 0xbc0000af, 0x900000b0,
+               0x8f0000b1, 0xea0000b2, 0xfa0000b3, 0xbe0000b4, 0xa00000b5, 0xb60000b6, 0xb30000b7, 0x9d0000b8,
+               0xda0000b9, 0x9b0000ba, 0x8b0000bb, 0xb70000bc, 0xb80000bd, 0xb90000be, 0xab0000bf, 0x640000c0,
+               0x650000c1, 0x620000c2, 0x660000c3, 0x630000c4, 0x670000c5, 0x9e0000c6, 0x680000c7, 0x740000c8,
+               0x710000c9, 0x720000ca, 0x730000cb, 0x780000cc, 0x750000cd, 0x760000ce, 0x770000cf, 0xac0000d0,
+               0x690000d1, 0xed0000d2, 0xee0000d3, 0xeb0000d4, 0xef0000d5, 0xec0000d6, 0xbf0000d7, 0x800000d8,
+               0xfd0000d9, 0xfe0000da, 0xfb0000db, 0xfc0000dc, 0xad0000dd, 0xae0000de, 0x590000df, 0x440000e0,
+               0x450000e1, 0x420000e2, 0x460000e3, 0x430000e4, 0x470000e5, 0x9c0000e6, 0x480000e7, 0x540000e8,
+               0x510000e9, 0x520000ea, 0x530000eb, 0x580000ec, 0x550000ed, 0x560000ee, 0x570000ef, 0x8c0000f0,
+               0x490000f1, 0xcd0000f2, 0xce0000f3, 0xcb0000f4, 0xcf0000f5, 0xcc0000f6, 0xe10000f7, 0x700000f8,
+               0xdd0000f9, 0xde0000fa, 0xdb0000fb, 0xdc0000fc, 0x8d0000fd, 0x8e0000fe, 0xdf0000ff, 0x9f0020ac,
+       },
+}
+
 // ISO8859_1 is the ISO 8859-1 encoding.
-var ISO8859_1 encoding.Encoding = &iso8859_1
+var ISO8859_1 *Charmap = &iso8859_1
 
-var iso8859_1 = charmap{
+var iso8859_1 = Charmap{
        name:          "ISO 8859-1",
        mib:           identifier.ISOLatin1,
        asciiSuperset: true,
@@ -1933,9 +2458,9 @@ var iso8859_1 = charmap{
 }
 
 // ISO8859_2 is the ISO 8859-2 encoding.
-var ISO8859_2 encoding.Encoding = &iso8859_2
+var ISO8859_2 *Charmap = &iso8859_2
 
-var iso8859_2 = charmap{
+var iso8859_2 = Charmap{
        name:          "ISO 8859-2",
        mib:           identifier.ISOLatin2,
        asciiSuperset: true,
@@ -2108,9 +2633,9 @@ var iso8859_2 = charmap{
 }
 
 // ISO8859_3 is the ISO 8859-3 encoding.
-var ISO8859_3 encoding.Encoding = &iso8859_3
+var ISO8859_3 *Charmap = &iso8859_3
 
-var iso8859_3 = charmap{
+var iso8859_3 = Charmap{
        name:          "ISO 8859-3",
        mib:           identifier.ISOLatin3,
        asciiSuperset: true,
@@ -2283,9 +2808,9 @@ var iso8859_3 = charmap{
 }
 
 // ISO8859_4 is the ISO 8859-4 encoding.
-var ISO8859_4 encoding.Encoding = &iso8859_4
+var ISO8859_4 *Charmap = &iso8859_4
 
-var iso8859_4 = charmap{
+var iso8859_4 = Charmap{
        name:          "ISO 8859-4",
        mib:           identifier.ISOLatin4,
        asciiSuperset: true,
@@ -2458,9 +2983,9 @@ var iso8859_4 = charmap{
 }
 
 // ISO8859_5 is the ISO 8859-5 encoding.
-var ISO8859_5 encoding.Encoding = &iso8859_5
+var ISO8859_5 *Charmap = &iso8859_5
 
-var iso8859_5 = charmap{
+var iso8859_5 = Charmap{
        name:          "ISO 8859-5",
        mib:           identifier.ISOLatinCyrillic,
        asciiSuperset: true,
@@ -2633,9 +3158,9 @@ var iso8859_5 = charmap{
 }
 
 // ISO8859_6 is the ISO 8859-6 encoding.
-var ISO8859_6 encoding.Encoding = &iso8859_6
+var ISO8859_6 *Charmap = &iso8859_6
 
-var iso8859_6 = charmap{
+var iso8859_6 = Charmap{
        name:          "ISO 8859-6",
        mib:           identifier.ISOLatinArabic,
        asciiSuperset: true,
@@ -2808,9 +3333,9 @@ var iso8859_6 = charmap{
 }
 
 // ISO8859_7 is the ISO 8859-7 encoding.
-var ISO8859_7 encoding.Encoding = &iso8859_7
+var ISO8859_7 *Charmap = &iso8859_7
 
-var iso8859_7 = charmap{
+var iso8859_7 = Charmap{
        name:          "ISO 8859-7",
        mib:           identifier.ISOLatinGreek,
        asciiSuperset: true,
@@ -2983,9 +3508,9 @@ var iso8859_7 = charmap{
 }
 
 // ISO8859_8 is the ISO 8859-8 encoding.
-var ISO8859_8 encoding.Encoding = &iso8859_8
+var ISO8859_8 *Charmap = &iso8859_8
 
-var iso8859_8 = charmap{
+var iso8859_8 = Charmap{
        name:          "ISO 8859-8",
        mib:           identifier.ISOLatinHebrew,
        asciiSuperset: true,
@@ -3157,10 +3682,185 @@ var iso8859_8 = charmap{
        },
 }
 
+// ISO8859_9 is the ISO 8859-9 encoding.
+var ISO8859_9 *Charmap = &iso8859_9
+
+var iso8859_9 = Charmap{
+       name:          "ISO 8859-9",
+       mib:           identifier.ISOLatin5,
+       asciiSuperset: true,
+       low:           0x80,
+       replacement:   0x1a,
+       decode: [256]utf8Enc{
+               {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+               {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+               {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+               {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+               {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+               {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+               {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+               {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+               {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+               {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+               {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+               {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+               {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+               {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+               {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+               {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+               {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+               {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+               {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+               {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+               {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+               {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+               {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+               {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+               {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+               {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+               {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+               {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+               {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+               {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+               {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+               {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+               {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+               {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+               {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+               {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+               {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+               {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+               {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+               {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+               {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+               {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+               {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+               {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+               {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+               {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+               {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+               {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+               {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+               {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+               {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+               {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+               {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+               {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+               {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+               {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+               {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+               {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+               {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+               {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+               {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+               {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+               {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+               {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+               {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}},
+               {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}},
+               {2, [3]byte{0xc2, 0x84, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}},
+               {2, [3]byte{0xc2, 0x86, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}},
+               {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}},
+               {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}},
+               {2, [3]byte{0xc2, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}},
+               {2, [3]byte{0xc2, 0x8e, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}},
+               {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}},
+               {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}},
+               {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}},
+               {2, [3]byte{0xc2, 0x96, 0x00}}, {2, [3]byte{0xc2, 0x97, 0x00}},
+               {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}},
+               {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}},
+               {2, [3]byte{0xc2, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0x9d, 0x00}},
+               {2, [3]byte{0xc2, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}},
+               {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
+               {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+               {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
+               {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+               {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+               {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+               {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+               {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
+               {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+               {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
+               {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
+               {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+               {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
+               {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+               {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+               {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
+               {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+               {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
+               {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+               {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
+               {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+               {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+               {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+               {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
+               {2, [3]byte{0xc4, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+               {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
+               {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+               {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+               {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+               {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+               {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc4, 0xb0, 0x00}},
+               {2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+               {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+               {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
+               {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
+               {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+               {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+               {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+               {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+               {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+               {2, [3]byte{0xc4, 0x9f, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
+               {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
+               {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
+               {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+               {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+               {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+               {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}},
+               {2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
+       },
+       encode: [256]uint32{
+               0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+               0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+               0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+               0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+               0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+               0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+               0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+               0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+               0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+               0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+               0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+               0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+               0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+               0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+               0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+               0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+               0x80000080, 0x81000081, 0x82000082, 0x83000083, 0x84000084, 0x85000085, 0x86000086, 0x87000087,
+               0x88000088, 0x89000089, 0x8a00008a, 0x8b00008b, 0x8c00008c, 0x8d00008d, 0x8e00008e, 0x8f00008f,
+               0x90000090, 0x91000091, 0x92000092, 0x93000093, 0x94000094, 0x95000095, 0x96000096, 0x97000097,
+               0x98000098, 0x99000099, 0x9a00009a, 0x9b00009b, 0x9c00009c, 0x9d00009d, 0x9e00009e, 0x9f00009f,
+               0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7,
+               0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af,
+               0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7,
+               0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf,
+               0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7,
+               0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf,
+               0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xd80000d8,
+               0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2,
+               0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, 0xe80000e8, 0xe90000e9, 0xea0000ea,
+               0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, 0xf20000f2, 0xf30000f3,
+               0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7, 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb,
+               0xfc0000fc, 0xff0000ff, 0xd000011e, 0xf000011f, 0xdd000130, 0xfd000131, 0xde00015e, 0xfe00015f,
+       },
+}
+
 // ISO8859_10 is the ISO 8859-10 encoding.
-var ISO8859_10 encoding.Encoding = &iso8859_10
+var ISO8859_10 *Charmap = &iso8859_10
 
-var iso8859_10 = charmap{
+var iso8859_10 = Charmap{
        name:          "ISO 8859-10",
        mib:           identifier.ISOLatin6,
        asciiSuperset: true,
@@ -3333,9 +4033,9 @@ var iso8859_10 = charmap{
 }
 
 // ISO8859_13 is the ISO 8859-13 encoding.
-var ISO8859_13 encoding.Encoding = &iso8859_13
+var ISO8859_13 *Charmap = &iso8859_13
 
-var iso8859_13 = charmap{
+var iso8859_13 = Charmap{
        name:          "ISO 8859-13",
        mib:           identifier.ISO885913,
        asciiSuperset: true,
@@ -3508,9 +4208,9 @@ var iso8859_13 = charmap{
 }
 
 // ISO8859_14 is the ISO 8859-14 encoding.
-var ISO8859_14 encoding.Encoding = &iso8859_14
+var ISO8859_14 *Charmap = &iso8859_14
 
-var iso8859_14 = charmap{
+var iso8859_14 = Charmap{
        name:          "ISO 8859-14",
        mib:           identifier.ISO885914,
        asciiSuperset: true,
@@ -3683,9 +4383,9 @@ var iso8859_14 = charmap{
 }
 
 // ISO8859_15 is the ISO 8859-15 encoding.
-var ISO8859_15 encoding.Encoding = &iso8859_15
+var ISO8859_15 *Charmap = &iso8859_15
 
-var iso8859_15 = charmap{
+var iso8859_15 = Charmap{
        name:          "ISO 8859-15",
        mib:           identifier.ISO885915,
        asciiSuperset: true,
@@ -3858,9 +4558,9 @@ var iso8859_15 = charmap{
 }
 
 // ISO8859_16 is the ISO 8859-16 encoding.
-var ISO8859_16 encoding.Encoding = &iso8859_16
+var ISO8859_16 *Charmap = &iso8859_16
 
-var iso8859_16 = charmap{
+var iso8859_16 = Charmap{
        name:          "ISO 8859-16",
        mib:           identifier.ISO885916,
        asciiSuperset: true,
@@ -4033,9 +4733,9 @@ var iso8859_16 = charmap{
 }
 
 // KOI8R is the KOI8-R encoding.
-var KOI8R encoding.Encoding = &koi8R
+var KOI8R *Charmap = &koi8R
 
-var koi8R = charmap{
+var koi8R = Charmap{
        name:          "KOI8-R",
        mib:           identifier.KOI8R,
        asciiSuperset: true,
@@ -4208,9 +4908,9 @@ var koi8R = charmap{
 }
 
 // KOI8U is the KOI8-U encoding.
-var KOI8U encoding.Encoding = &koi8U
+var KOI8U *Charmap = &koi8U
 
-var koi8U = charmap{
+var koi8U = Charmap{
        name:          "KOI8-U",
        mib:           identifier.KOI8U,
        asciiSuperset: true,
@@ -4383,9 +5083,9 @@ var koi8U = charmap{
 }
 
 // Macintosh is the Macintosh encoding.
-var Macintosh encoding.Encoding = &macintosh
+var Macintosh *Charmap = &macintosh
 
-var macintosh = charmap{
+var macintosh = Charmap{
        name:          "Macintosh",
        mib:           identifier.Macintosh,
        asciiSuperset: true,
@@ -4558,9 +5258,9 @@ var macintosh = charmap{
 }
 
 // MacintoshCyrillic is the Macintosh Cyrillic encoding.
-var MacintoshCyrillic encoding.Encoding = &macintoshCyrillic
+var MacintoshCyrillic *Charmap = &macintoshCyrillic
 
-var macintoshCyrillic = charmap{
+var macintoshCyrillic = Charmap{
        name:          "Macintosh Cyrillic",
        mib:           identifier.MacintoshCyrillic,
        asciiSuperset: true,
@@ -4733,9 +5433,9 @@ var macintoshCyrillic = charmap{
 }
 
 // Windows874 is the Windows 874 encoding.
-var Windows874 encoding.Encoding = &windows874
+var Windows874 *Charmap = &windows874
 
-var windows874 = charmap{
+var windows874 = Charmap{
        name:          "Windows 874",
        mib:           identifier.Windows874,
        asciiSuperset: true,
@@ -4908,9 +5608,9 @@ var windows874 = charmap{
 }
 
 // Windows1250 is the Windows 1250 encoding.
-var Windows1250 encoding.Encoding = &windows1250
+var Windows1250 *Charmap = &windows1250
 
-var windows1250 = charmap{
+var windows1250 = Charmap{
        name:          "Windows 1250",
        mib:           identifier.Windows1250,
        asciiSuperset: true,
@@ -5083,9 +5783,9 @@ var windows1250 = charmap{
 }
 
 // Windows1251 is the Windows 1251 encoding.
-var Windows1251 encoding.Encoding = &windows1251
+var Windows1251 *Charmap = &windows1251
 
-var windows1251 = charmap{
+var windows1251 = Charmap{
        name:          "Windows 1251",
        mib:           identifier.Windows1251,
        asciiSuperset: true,
@@ -5258,9 +5958,9 @@ var windows1251 = charmap{
 }
 
 // Windows1252 is the Windows 1252 encoding.
-var Windows1252 encoding.Encoding = &windows1252
+var Windows1252 *Charmap = &windows1252
 
-var windows1252 = charmap{
+var windows1252 = Charmap{
        name:          "Windows 1252",
        mib:           identifier.Windows1252,
        asciiSuperset: true,
@@ -5433,9 +6133,9 @@ var windows1252 = charmap{
 }
 
 // Windows1253 is the Windows 1253 encoding.
-var Windows1253 encoding.Encoding = &windows1253
+var Windows1253 *Charmap = &windows1253
 
-var windows1253 = charmap{
+var windows1253 = Charmap{
        name:          "Windows 1253",
        mib:           identifier.Windows1253,
        asciiSuperset: true,
@@ -5608,9 +6308,9 @@ var windows1253 = charmap{
 }
 
 // Windows1254 is the Windows 1254 encoding.
-var Windows1254 encoding.Encoding = &windows1254
+var Windows1254 *Charmap = &windows1254
 
-var windows1254 = charmap{
+var windows1254 = Charmap{
        name:          "Windows 1254",
        mib:           identifier.Windows1254,
        asciiSuperset: true,
@@ -5783,9 +6483,9 @@ var windows1254 = charmap{
 }
 
 // Windows1255 is the Windows 1255 encoding.
-var Windows1255 encoding.Encoding = &windows1255
+var Windows1255 *Charmap = &windows1255
 
-var windows1255 = charmap{
+var windows1255 = Charmap{
        name:          "Windows 1255",
        mib:           identifier.Windows1255,
        asciiSuperset: true,
@@ -5893,7 +6593,7 @@ var windows1255 = charmap{
                {2, [3]byte{0xd6, 0xb4, 0x00}}, {2, [3]byte{0xd6, 0xb5, 0x00}},
                {2, [3]byte{0xd6, 0xb6, 0x00}}, {2, [3]byte{0xd6, 0xb7, 0x00}},
                {2, [3]byte{0xd6, 0xb8, 0x00}}, {2, [3]byte{0xd6, 0xb9, 0x00}},
-               {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xd6, 0xbb, 0x00}},
+               {2, [3]byte{0xd6, 0xba, 0x00}}, {2, [3]byte{0xd6, 0xbb, 0x00}},
                {2, [3]byte{0xd6, 0xbc, 0x00}}, {2, [3]byte{0xd6, 0xbd, 0x00}},
                {2, [3]byte{0xd6, 0xbe, 0x00}}, {2, [3]byte{0xd6, 0xbf, 0x00}},
                {2, [3]byte{0xd7, 0x80, 0x00}}, {2, [3]byte{0xd7, 0x81, 0x00}},
@@ -5943,24 +6643,24 @@ var windows1255 = charmap{
                0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xb80000b8, 0xb90000b9,
                0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf, 0xaa0000d7, 0xba0000f7, 0x83000192,
                0x880002c6, 0x980002dc, 0xc00005b0, 0xc10005b1, 0xc20005b2, 0xc30005b3, 0xc40005b4, 0xc50005b5,
-               0xc60005b6, 0xc70005b7, 0xc80005b8, 0xc90005b9, 0xcb0005bb, 0xcc0005bc, 0xcd0005bd, 0xce0005be,
-               0xcf0005bf, 0xd00005c0, 0xd10005c1, 0xd20005c2, 0xd30005c3, 0xe00005d0, 0xe10005d1, 0xe20005d2,
-               0xe30005d3, 0xe40005d4, 0xe50005d5, 0xe60005d6, 0xe70005d7, 0xe80005d8, 0xe90005d9, 0xea0005da,
-               0xeb0005db, 0xec0005dc, 0xed0005dd, 0xee0005de, 0xef0005df, 0xf00005e0, 0xf10005e1, 0xf20005e2,
-               0xf30005e3, 0xf40005e4, 0xf50005e5, 0xf60005e6, 0xf70005e7, 0xf80005e8, 0xf90005e9, 0xfa0005ea,
-               0xd40005f0, 0xd50005f1, 0xd60005f2, 0xd70005f3, 0xd80005f4, 0xfd00200e, 0xfe00200f, 0x96002013,
-               0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020,
-               0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0xa40020aa, 0x800020ac,
-               0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
+               0xc60005b6, 0xc70005b7, 0xc80005b8, 0xc90005b9, 0xca0005ba, 0xcb0005bb, 0xcc0005bc, 0xcd0005bd,
+               0xce0005be, 0xcf0005bf, 0xd00005c0, 0xd10005c1, 0xd20005c2, 0xd30005c3, 0xe00005d0, 0xe10005d1,
+               0xe20005d2, 0xe30005d3, 0xe40005d4, 0xe50005d5, 0xe60005d6, 0xe70005d7, 0xe80005d8, 0xe90005d9,
+               0xea0005da, 0xeb0005db, 0xec0005dc, 0xed0005dd, 0xee0005de, 0xef0005df, 0xf00005e0, 0xf10005e1,
+               0xf20005e2, 0xf30005e3, 0xf40005e4, 0xf50005e5, 0xf60005e6, 0xf70005e7, 0xf80005e8, 0xf90005e9,
+               0xfa0005ea, 0xd40005f0, 0xd50005f1, 0xd60005f2, 0xd70005f3, 0xd80005f4, 0xfd00200e, 0xfe00200f,
+               0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e,
+               0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0xa40020aa,
+               0x800020ac, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
                0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
                0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
        },
 }
 
 // Windows1256 is the Windows 1256 encoding.
-var Windows1256 encoding.Encoding = &windows1256
+var Windows1256 *Charmap = &windows1256
 
-var windows1256 = charmap{
+var windows1256 = Charmap{
        name:          "Windows 1256",
        mib:           identifier.Windows1256,
        asciiSuperset: true,
@@ -6133,9 +6833,9 @@ var windows1256 = charmap{
 }
 
 // Windows1257 is the Windows 1257 encoding.
-var Windows1257 encoding.Encoding = &windows1257
+var Windows1257 *Charmap = &windows1257
 
-var windows1257 = charmap{
+var windows1257 = Charmap{
        name:          "Windows 1257",
        mib:           identifier.Windows1257,
        asciiSuperset: true,
@@ -6308,9 +7008,9 @@ var windows1257 = charmap{
 }
 
 // Windows1258 is the Windows 1258 encoding.
-var Windows1258 encoding.Encoding = &windows1258
+var Windows1258 *Charmap = &windows1258
 
-var windows1258 = charmap{
+var windows1258 = Charmap{
        name:          "Windows 1258",
        mib:           identifier.Windows1258,
        asciiSuperset: true,
@@ -6485,9 +7185,9 @@ var windows1258 = charmap{
 // XUserDefined is the X-User-Defined encoding.
 //
 // It is defined at http://encoding.spec.whatwg.org/#x-user-defined
-var XUserDefined encoding.Encoding = &xUserDefined
+var XUserDefined *Charmap = &xUserDefined
 
-var xUserDefined = charmap{
+var xUserDefined = Charmap{
        name:          "X-User-Defined",
        mib:           identifier.XUserDefined,
        asciiSuperset: true,
@@ -6659,6 +7359,7 @@ var xUserDefined = charmap{
        },
 }
 var listAll = []encoding.Encoding{
+       CodePage037,
        CodePage437,
        CodePage850,
        CodePage852,
@@ -6669,6 +7370,8 @@ var listAll = []encoding.Encoding{
        CodePage863,
        CodePage865,
        CodePage866,
+       CodePage1047,
+       CodePage1140,
        ISO8859_1,
        ISO8859_2,
        ISO8859_3,
@@ -6681,6 +7384,7 @@ var listAll = []encoding.Encoding{
        ISO8859_8,
        ISO8859_8E,
        ISO8859_8I,
+       ISO8859_9,
        ISO8859_10,
        ISO8859_13,
        ISO8859_14,
@@ -6703,4 +7407,4 @@ var listAll = []encoding.Encoding{
        XUserDefined,
 }
 
-// Total table size 78736 bytes (76KiB); checksum: 811C9DC5
+// Total table size 87024 bytes (84KiB); checksum: 811C9DC5
diff --git a/vendor/golang.org/x/text/encoding/htmlindex/gen.go b/vendor/golang.org/x/text/encoding/htmlindex/gen.go
deleted file mode 100644 (file)
index d10e5e0..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore
-
-package main
-
-import (
-       "bytes"
-       "encoding/json"
-       "fmt"
-       "log"
-       "strings"
-
-       "golang.org/x/text/internal/gen"
-)
-
-type group struct {
-       Encodings []struct {
-               Labels []string
-               Name   string
-       }
-}
-
-func main() {
-       gen.Init()
-
-       r := gen.Open("http://www.w3.org/TR", "w3", "encoding/indexes/encodings.json")
-       var groups []group
-       if err := json.NewDecoder(r).Decode(&groups); err != nil {
-               log.Fatalf("Error reading encodings.json: %v", err)
-       }
-
-       w := &bytes.Buffer{}
-       fmt.Fprintln(w, "type htmlEncoding byte")
-       fmt.Fprintln(w, "const (")
-       for i, g := range groups {
-               for _, e := range g.Encodings {
-                       name := consts[e.Name]
-                       if name == "" {
-                               log.Fatalf("No const defined for %s.", e.Name)
-                       }
-                       if i == 0 {
-                               fmt.Fprintf(w, "%s htmlEncoding = iota\n", name)
-                       } else {
-                               fmt.Fprintf(w, "%s\n", name)
-                       }
-               }
-       }
-       fmt.Fprintln(w, "numEncodings")
-       fmt.Fprint(w, ")\n\n")
-
-       fmt.Fprintln(w, "var canonical = [numEncodings]string{")
-       for _, g := range groups {
-               for _, e := range g.Encodings {
-                       fmt.Fprintf(w, "%q,\n", e.Name)
-               }
-       }
-       fmt.Fprint(w, "}\n\n")
-
-       fmt.Fprintln(w, "var nameMap = map[string]htmlEncoding{")
-       for _, g := range groups {
-               for _, e := range g.Encodings {
-                       for _, l := range e.Labels {
-                               fmt.Fprintf(w, "%q: %s,\n", l, consts[e.Name])
-                       }
-               }
-       }
-       fmt.Fprint(w, "}\n\n")
-
-       var tags []string
-       fmt.Fprintln(w, "var localeMap = []htmlEncoding{")
-       for _, loc := range locales {
-               tags = append(tags, loc.tag)
-               fmt.Fprintf(w, "%s, // %s \n", consts[loc.name], loc.tag)
-       }
-       fmt.Fprint(w, "}\n\n")
-
-       fmt.Fprintf(w, "const locales = %q\n", strings.Join(tags, " "))
-
-       gen.WriteGoFile("tables.go", "htmlindex", w.Bytes())
-}
-
-// consts maps canonical encoding name to internal constant.
-var consts = map[string]string{
-       "utf-8":          "utf8",
-       "ibm866":         "ibm866",
-       "iso-8859-2":     "iso8859_2",
-       "iso-8859-3":     "iso8859_3",
-       "iso-8859-4":     "iso8859_4",
-       "iso-8859-5":     "iso8859_5",
-       "iso-8859-6":     "iso8859_6",
-       "iso-8859-7":     "iso8859_7",
-       "iso-8859-8":     "iso8859_8",
-       "iso-8859-8-i":   "iso8859_8I",
-       "iso-8859-10":    "iso8859_10",
-       "iso-8859-13":    "iso8859_13",
-       "iso-8859-14":    "iso8859_14",
-       "iso-8859-15":    "iso8859_15",
-       "iso-8859-16":    "iso8859_16",
-       "koi8-r":         "koi8r",
-       "koi8-u":         "koi8u",
-       "macintosh":      "macintosh",
-       "windows-874":    "windows874",
-       "windows-1250":   "windows1250",
-       "windows-1251":   "windows1251",
-       "windows-1252":   "windows1252",
-       "windows-1253":   "windows1253",
-       "windows-1254":   "windows1254",
-       "windows-1255":   "windows1255",
-       "windows-1256":   "windows1256",
-       "windows-1257":   "windows1257",
-       "windows-1258":   "windows1258",
-       "x-mac-cyrillic": "macintoshCyrillic",
-       "gbk":            "gbk",
-       "gb18030":        "gb18030",
-       // "hz-gb-2312":     "hzgb2312", // Was removed from WhatWG
-       "big5":           "big5",
-       "euc-jp":         "eucjp",
-       "iso-2022-jp":    "iso2022jp",
-       "shift_jis":      "shiftJIS",
-       "euc-kr":         "euckr",
-       "replacement":    "replacement",
-       "utf-16be":       "utf16be",
-       "utf-16le":       "utf16le",
-       "x-user-defined": "xUserDefined",
-}
-
-// locales is taken from
-// https://html.spec.whatwg.org/multipage/syntax.html#encoding-sniffing-algorithm.
-var locales = []struct{ tag, name string }{
-       {"und", "windows-1252"}, // The default value.
-       {"ar", "windows-1256"},
-       {"ba", "windows-1251"},
-       {"be", "windows-1251"},
-       {"bg", "windows-1251"},
-       {"cs", "windows-1250"},
-       {"el", "iso-8859-7"},
-       {"et", "windows-1257"},
-       {"fa", "windows-1256"},
-       {"he", "windows-1255"},
-       {"hr", "windows-1250"},
-       {"hu", "iso-8859-2"},
-       {"ja", "shift_jis"},
-       {"kk", "windows-1251"},
-       {"ko", "euc-kr"},
-       {"ku", "windows-1254"},
-       {"ky", "windows-1251"},
-       {"lt", "windows-1257"},
-       {"lv", "windows-1257"},
-       {"mk", "windows-1251"},
-       {"pl", "iso-8859-2"},
-       {"ru", "windows-1251"},
-       {"sah", "windows-1251"},
-       {"sk", "windows-1250"},
-       {"sl", "iso-8859-2"},
-       {"sr", "windows-1251"},
-       {"tg", "windows-1251"},
-       {"th", "windows-874"},
-       {"tr", "windows-1254"},
-       {"tt", "windows-1251"},
-       {"uk", "windows-1251"},
-       {"vi", "windows-1258"},
-       {"zh-hans", "gb18030"},
-       {"zh-hant", "big5"},
-}
index 78950d3c3d97d2d070628278cfd00bf0947040b0..cbf4ba9236d5dc42e8291ba7ed495d17368989bb 100644 (file)
@@ -1,4 +1,4 @@
-// This file was generated by go generate; DO NOT EDIT
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
 
 package htmlindex
 
diff --git a/vendor/golang.org/x/text/encoding/internal/identifier/gen.go b/vendor/golang.org/x/text/encoding/internal/identifier/gen.go
deleted file mode 100644 (file)
index 0c8eba7..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore
-
-package main
-
-import (
-       "bytes"
-       "encoding/xml"
-       "fmt"
-       "io"
-       "log"
-       "strings"
-
-       "golang.org/x/text/internal/gen"
-)
-
-type registry struct {
-       XMLName  xml.Name `xml:"registry"`
-       Updated  string   `xml:"updated"`
-       Registry []struct {
-               ID     string `xml:"id,attr"`
-               Record []struct {
-                       Name string `xml:"name"`
-                       Xref []struct {
-                               Type string `xml:"type,attr"`
-                               Data string `xml:"data,attr"`
-                       } `xml:"xref"`
-                       Desc struct {
-                               Data string `xml:",innerxml"`
-                               // Any []struct {
-                               //      Data string `xml:",chardata"`
-                               // } `xml:",any"`
-                               // Data string `xml:",chardata"`
-                       } `xml:"description,"`
-                       MIB   string   `xml:"value"`
-                       Alias []string `xml:"alias"`
-                       MIME  string   `xml:"preferred_alias"`
-               } `xml:"record"`
-       } `xml:"registry"`
-}
-
-func main() {
-       r := gen.OpenIANAFile("assignments/character-sets/character-sets.xml")
-       reg := &registry{}
-       if err := xml.NewDecoder(r).Decode(&reg); err != nil && err != io.EOF {
-               log.Fatalf("Error decoding charset registry: %v", err)
-       }
-       if len(reg.Registry) == 0 || reg.Registry[0].ID != "character-sets-1" {
-               log.Fatalf("Unexpected ID %s", reg.Registry[0].ID)
-       }
-
-       w := &bytes.Buffer{}
-       fmt.Fprintf(w, "const (\n")
-       for _, rec := range reg.Registry[0].Record {
-               constName := ""
-               for _, a := range rec.Alias {
-                       if strings.HasPrefix(a, "cs") && strings.IndexByte(a, '-') == -1 {
-                               // Some of the constant definitions have comments in them. Strip those.
-                               constName = strings.Title(strings.SplitN(a[2:], "\n", 2)[0])
-                       }
-               }
-               if constName == "" {
-                       switch rec.MIB {
-                       case "2085":
-                               constName = "HZGB2312" // Not listed as alias for some reason.
-                       default:
-                               log.Fatalf("No cs alias defined for %s.", rec.MIB)
-                       }
-               }
-               if rec.MIME != "" {
-                       rec.MIME = fmt.Sprintf(" (MIME: %s)", rec.MIME)
-               }
-               fmt.Fprintf(w, "// %s is the MIB identifier with IANA name %s%s.\n//\n", constName, rec.Name, rec.MIME)
-               if len(rec.Desc.Data) > 0 {
-                       fmt.Fprint(w, "// ")
-                       d := xml.NewDecoder(strings.NewReader(rec.Desc.Data))
-                       inElem := true
-                       attr := ""
-                       for {
-                               t, err := d.Token()
-                               if err != nil {
-                                       if err != io.EOF {
-                                               log.Fatal(err)
-                                       }
-                                       break
-                               }
-                               switch x := t.(type) {
-                               case xml.CharData:
-                                       attr = "" // Don't need attribute info.
-                                       a := bytes.Split([]byte(x), []byte("\n"))
-                                       for i, b := range a {
-                                               if b = bytes.TrimSpace(b); len(b) != 0 {
-                                                       if !inElem && i > 0 {
-                                                               fmt.Fprint(w, "\n// ")
-                                                       }
-                                                       inElem = false
-                                                       fmt.Fprintf(w, "%s ", string(b))
-                                               }
-                                       }
-                               case xml.StartElement:
-                                       if x.Name.Local == "xref" {
-                                               inElem = true
-                                               use := false
-                                               for _, a := range x.Attr {
-                                                       if a.Name.Local == "type" {
-                                                               use = use || a.Value != "person"
-                                                       }
-                                                       if a.Name.Local == "data" && use {
-                                                               attr = a.Value + " "
-                                                       }
-                                               }
-                                       }
-                               case xml.EndElement:
-                                       inElem = false
-                                       fmt.Fprint(w, attr)
-                               }
-                       }
-                       fmt.Fprint(w, "\n")
-               }
-               for _, x := range rec.Xref {
-                       switch x.Type {
-                       case "rfc":
-                               fmt.Fprintf(w, "// Reference: %s\n", strings.ToUpper(x.Data))
-                       case "uri":
-                               fmt.Fprintf(w, "// Reference: %s\n", x.Data)
-                       }
-               }
-               fmt.Fprintf(w, "%s MIB = %s\n", constName, rec.MIB)
-               fmt.Fprintln(w)
-       }
-       fmt.Fprintln(w, ")")
-
-       gen.WriteGoFile("mib.go", "identifier", w.Bytes())
-}
index 2a2da0ef253d3aae513fa6d386633d2e836e85ff..7351b4ef8af04df7116e006cc98fdd2060722f51 100644 (file)
@@ -36,8 +36,8 @@ package identifier
 // - http://www.ietf.org/rfc/rfc2978.txt
 // - http://www.unicode.org/reports/tr22/
 // - http://www.w3.org/TR/encoding/
-// - http://www.w3.org/TR/encoding/indexes/encodings.json
 // - https://encoding.spec.whatwg.org/
+// - https://encoding.spec.whatwg.org/encodings.json
 // - https://tools.ietf.org/html/rfc6657#section-5
 
 // Interface can be implemented by Encodings to define the CCS or CES for which
index 915abfa297340f97bb1b45e611b76f6a5484fa15..768842b0a5a4b512918eec0606cb1a2e28b875e1 100644 (file)
@@ -1,4 +1,4 @@
-// This file was generated by go generate; DO NOT EDIT
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
 
 package identifier
 
index 40f9b05f3852f00aa7a2be19b7307c7dd062da33..79313fa589aefc588c33ec60b511fd99e98e914e 100644 (file)
@@ -5,7 +5,6 @@
 package japanese
 
 import (
-       "errors"
        "unicode/utf8"
 
        "golang.org/x/text/encoding"
@@ -23,10 +22,9 @@ var eucJP = internal.Encoding{
        identifier.EUCPkdFmtJapanese,
 }
 
-var errInvalidEUCJP = errors.New("japanese: invalid EUC-JP encoding")
-
 type eucJPDecoder struct{ transform.NopResetter }
 
+// See https://encoding.spec.whatwg.org/#euc-jp-decoder.
 func (eucJPDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
        r, size := rune(0), 0
 loop:
@@ -37,60 +35,79 @@ loop:
 
                case c0 == 0x8e:
                        if nSrc+1 >= len(src) {
-                               err = transform.ErrShortSrc
-                               break loop
+                               if !atEOF {
+                                       err = transform.ErrShortSrc
+                                       break loop
+                               }
+                               r, size = utf8.RuneError, 1
+                               break
                        }
                        c1 := src[nSrc+1]
-                       if c1 < 0xa1 || 0xdf < c1 {
-                               err = errInvalidEUCJP
-                               break loop
+                       switch {
+                       case c1 < 0xa1:
+                               r, size = utf8.RuneError, 1
+                       case c1 > 0xdf:
+                               r, size = utf8.RuneError, 2
+                               if c1 == 0xff {
+                                       size = 1
+                               }
+                       default:
+                               r, size = rune(c1)+(0xff61-0xa1), 2
                        }
-                       r, size = rune(c1)+(0xff61-0xa1), 2
-
                case c0 == 0x8f:
                        if nSrc+2 >= len(src) {
-                               err = transform.ErrShortSrc
-                               break loop
+                               if !atEOF {
+                                       err = transform.ErrShortSrc
+                                       break loop
+                               }
+                               r, size = utf8.RuneError, 1
+                               if p := nSrc + 1; p < len(src) && 0xa1 <= src[p] && src[p] < 0xfe {
+                                       size = 2
+                               }
+                               break
                        }
                        c1 := src[nSrc+1]
                        if c1 < 0xa1 || 0xfe < c1 {
-                               err = errInvalidEUCJP
-                               break loop
+                               r, size = utf8.RuneError, 1
+                               break
                        }
                        c2 := src[nSrc+2]
                        if c2 < 0xa1 || 0xfe < c2 {
-                               err = errInvalidEUCJP
-                               break loop
+                               r, size = utf8.RuneError, 2
+                               break
                        }
-                       r, size = '\ufffd', 3
+                       r, size = utf8.RuneError, 3
                        if i := int(c1-0xa1)*94 + int(c2-0xa1); i < len(jis0212Decode) {
                                r = rune(jis0212Decode[i])
                                if r == 0 {
-                                       r = '\ufffd'
+                                       r = utf8.RuneError
                                }
                        }
 
                case 0xa1 <= c0 && c0 <= 0xfe:
                        if nSrc+1 >= len(src) {
-                               err = transform.ErrShortSrc
-                               break loop
+                               if !atEOF {
+                                       err = transform.ErrShortSrc
+                                       break loop
+                               }
+                               r, size = utf8.RuneError, 1
+                               break
                        }
                        c1 := src[nSrc+1]
                        if c1 < 0xa1 || 0xfe < c1 {
-                               err = errInvalidEUCJP
-                               break loop
+                               r, size = utf8.RuneError, 1
+                               break
                        }
-                       r, size = '\ufffd', 2
+                       r, size = utf8.RuneError, 2
                        if i := int(c0-0xa1)*94 + int(c1-0xa1); i < len(jis0208Decode) {
                                r = rune(jis0208Decode[i])
                                if r == 0 {
-                                       r = '\ufffd'
+                                       r = utf8.RuneError
                                }
                        }
 
                default:
-                       err = errInvalidEUCJP
-                       break loop
+                       r, size = utf8.RuneError, 1
                }
 
                if nDst+utf8.RuneLen(r) > len(dst) {
@@ -99,9 +116,6 @@ loop:
                }
                nDst += utf8.EncodeRune(dst[nDst:], r)
        }
-       if atEOF && err == transform.ErrShortSrc {
-               err = errInvalidEUCJP
-       }
        return nDst, nSrc, err
 }
 
index b63e7d5d8f31c65d05f16b8ee2724326d01baf2b..613226df5e9103f8276e509db2cbf301c4112a77 100644 (file)
@@ -5,7 +5,6 @@
 package japanese
 
 import (
-       "errors"
        "unicode/utf8"
 
        "golang.org/x/text/encoding"
@@ -31,8 +30,6 @@ func iso2022JPNewEncoder() transform.Transformer {
        return new(iso2022JPEncoder)
 }
 
-var errInvalidISO2022JP = errors.New("japanese: invalid ISO-2022-JP encoding")
-
 const (
        asciiState = iota
        katakanaState
@@ -50,45 +47,51 @@ func (d *iso2022JPDecoder) Reset() {
 
 func (d *iso2022JPDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
        r, size := rune(0), 0
-loop:
        for ; nSrc < len(src); nSrc += size {
                c0 := src[nSrc]
                if c0 >= utf8.RuneSelf {
-                       err = errInvalidISO2022JP
-                       break loop
+                       r, size = '\ufffd', 1
+                       goto write
                }
 
                if c0 == asciiEsc {
                        if nSrc+2 >= len(src) {
-                               err = transform.ErrShortSrc
-                               break loop
+                               if !atEOF {
+                                       return nDst, nSrc, transform.ErrShortSrc
+                               }
+                               // TODO: is it correct to only skip 1??
+                               r, size = '\ufffd', 1
+                               goto write
                        }
                        size = 3
                        c1 := src[nSrc+1]
                        c2 := src[nSrc+2]
                        switch {
-                       case c1 == '$' && (c2 == '@' || c2 == 'B'):
+                       case c1 == '$' && (c2 == '@' || c2 == 'B'): // 0x24 {0x40, 0x42}
                                *d = jis0208State
                                continue
-                       case c1 == '$' && c2 == '(':
+                       case c1 == '$' && c2 == '(': // 0x24 0x28
                                if nSrc+3 >= len(src) {
-                                       err = transform.ErrShortSrc
-                                       break loop
+                                       if !atEOF {
+                                               return nDst, nSrc, transform.ErrShortSrc
+                                       }
+                                       r, size = '\ufffd', 1
+                                       goto write
                                }
                                size = 4
-                               if src[nSrc]+3 == 'D' {
+                               if src[nSrc+3] == 'D' {
                                        *d = jis0212State
                                        continue
                                }
-                       case c1 == '(' && (c2 == 'B' || c2 == 'J'):
+                       case c1 == '(' && (c2 == 'B' || c2 == 'J'): // 0x28 {0x42, 0x4A}
                                *d = asciiState
                                continue
-                       case c1 == '(' && c2 == 'I':
+                       case c1 == '(' && c2 == 'I': // 0x28 0x49
                                *d = katakanaState
                                continue
                        }
-                       err = errInvalidISO2022JP
-                       break loop
+                       r, size = '\ufffd', 1
+                       goto write
                }
 
                switch *d {
@@ -97,8 +100,8 @@ loop:
 
                case katakanaState:
                        if c0 < 0x21 || 0x60 <= c0 {
-                               err = errInvalidISO2022JP
-                               break loop
+                               r, size = '\ufffd', 1
+                               goto write
                        }
                        r, size = rune(c0)+(0xff61-0x21), 1
 
@@ -106,11 +109,14 @@ loop:
                        if c0 == 0x0a {
                                *d = asciiState
                                r, size = rune(c0), 1
-                               break
+                               goto write
                        }
                        if nSrc+1 >= len(src) {
-                               err = transform.ErrShortSrc
-                               break loop
+                               if !atEOF {
+                                       return nDst, nSrc, transform.ErrShortSrc
+                               }
+                               r, size = '\ufffd', 1
+                               goto write
                        }
                        size = 2
                        c1 := src[nSrc+1]
@@ -121,22 +127,19 @@ loop:
                                r = rune(jis0212Decode[i])
                        } else {
                                r = '\ufffd'
-                               break
+                               goto write
                        }
                        if r == 0 {
                                r = '\ufffd'
                        }
                }
 
+       write:
                if nDst+utf8.RuneLen(r) > len(dst) {
-                       err = transform.ErrShortDst
-                       break loop
+                       return nDst, nSrc, transform.ErrShortDst
                }
                nDst += utf8.EncodeRune(dst[nDst:], r)
        }
-       if atEOF && err == transform.ErrShortSrc {
-               err = errInvalidISO2022JP
-       }
        return nDst, nSrc, err
 }
 
diff --git a/vendor/golang.org/x/text/encoding/japanese/maketables.go b/vendor/golang.org/x/text/encoding/japanese/maketables.go
deleted file mode 100644 (file)
index d6c10de..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore
-
-package main
-
-// This program generates tables.go:
-//     go run maketables.go | gofmt > tables.go
-
-// TODO: Emoji extensions?
-// http://www.unicode.org/faq/emoji_dingbats.html
-// http://www.unicode.org/Public/UNIDATA/EmojiSources.txt
-
-import (
-       "bufio"
-       "fmt"
-       "log"
-       "net/http"
-       "sort"
-       "strings"
-)
-
-type entry struct {
-       jisCode, table int
-}
-
-func main() {
-       fmt.Printf("// generated by go run maketables.go; DO NOT EDIT\n\n")
-       fmt.Printf("// Package japanese provides Japanese encodings such as EUC-JP and Shift JIS.\n")
-       fmt.Printf(`package japanese // import "golang.org/x/text/encoding/japanese"` + "\n\n")
-
-       reverse := [65536]entry{}
-       for i := range reverse {
-               reverse[i].table = -1
-       }
-
-       tables := []struct {
-               url  string
-               name string
-       }{
-               {"http://encoding.spec.whatwg.org/index-jis0208.txt", "0208"},
-               {"http://encoding.spec.whatwg.org/index-jis0212.txt", "0212"},
-       }
-       for i, table := range tables {
-               res, err := http.Get(table.url)
-               if err != nil {
-                       log.Fatalf("%q: Get: %v", table.url, err)
-               }
-               defer res.Body.Close()
-
-               mapping := [65536]uint16{}
-
-               scanner := bufio.NewScanner(res.Body)
-               for scanner.Scan() {
-                       s := strings.TrimSpace(scanner.Text())
-                       if s == "" || s[0] == '#' {
-                               continue
-                       }
-                       x, y := 0, uint16(0)
-                       if _, err := fmt.Sscanf(s, "%d 0x%x", &x, &y); err != nil {
-                               log.Fatalf("%q: could not parse %q", table.url, s)
-                       }
-                       if x < 0 || 120*94 <= x {
-                               log.Fatalf("%q: JIS code %d is out of range", table.url, x)
-                       }
-                       mapping[x] = y
-                       if reverse[y].table == -1 {
-                               reverse[y] = entry{jisCode: x, table: i}
-                       }
-               }
-               if err := scanner.Err(); err != nil {
-                       log.Fatalf("%q: scanner error: %v", table.url, err)
-               }
-
-               fmt.Printf("// jis%sDecode is the decoding table from JIS %s code to Unicode.\n// It is defined at %s\n",
-                       table.name, table.name, table.url)
-               fmt.Printf("var jis%sDecode = [...]uint16{\n", table.name)
-               for i, m := range mapping {
-                       if m != 0 {
-                               fmt.Printf("\t%d: 0x%04X,\n", i, m)
-                       }
-               }
-               fmt.Printf("}\n\n")
-       }
-
-       // Any run of at least separation continuous zero entries in the reverse map will
-       // be a separate encode table.
-       const separation = 1024
-
-       intervals := []interval(nil)
-       low, high := -1, -1
-       for i, v := range reverse {
-               if v.table == -1 {
-                       continue
-               }
-               if low < 0 {
-                       low = i
-               } else if i-high >= separation {
-                       if high >= 0 {
-                               intervals = append(intervals, interval{low, high})
-                       }
-                       low = i
-               }
-               high = i + 1
-       }
-       if high >= 0 {
-               intervals = append(intervals, interval{low, high})
-       }
-       sort.Sort(byDecreasingLength(intervals))
-
-       fmt.Printf("const (\n")
-       fmt.Printf("\tjis0208    = 1\n")
-       fmt.Printf("\tjis0212    = 2\n")
-       fmt.Printf("\tcodeMask   = 0x7f\n")
-       fmt.Printf("\tcodeShift  = 7\n")
-       fmt.Printf("\ttableShift = 14\n")
-       fmt.Printf(")\n\n")
-
-       fmt.Printf("const numEncodeTables = %d\n\n", len(intervals))
-       fmt.Printf("// encodeX are the encoding tables from Unicode to JIS code,\n")
-       fmt.Printf("// sorted by decreasing length.\n")
-       for i, v := range intervals {
-               fmt.Printf("// encode%d: %5d entries for runes in [%5d, %5d).\n", i, v.len(), v.low, v.high)
-       }
-       fmt.Printf("//\n")
-       fmt.Printf("// The high two bits of the value record whether the JIS code comes from the\n")
-       fmt.Printf("// JIS0208 table (high bits == 1) or the JIS0212 table (high bits == 2).\n")
-       fmt.Printf("// The low 14 bits are two 7-bit unsigned integers j1 and j2 that form the\n")
-       fmt.Printf("// JIS code (94*j1 + j2) within that table.\n")
-       fmt.Printf("\n")
-
-       for i, v := range intervals {
-               fmt.Printf("const encode%dLow, encode%dHigh = %d, %d\n\n", i, i, v.low, v.high)
-               fmt.Printf("var encode%d = [...]uint16{\n", i)
-               for j := v.low; j < v.high; j++ {
-                       x := reverse[j]
-                       if x.table == -1 {
-                               continue
-                       }
-                       fmt.Printf("\t%d - %d: jis%s<<14 | 0x%02X<<7 | 0x%02X,\n",
-                               j, v.low, tables[x.table].name, x.jisCode/94, x.jisCode%94)
-               }
-               fmt.Printf("}\n\n")
-       }
-}
-
-// interval is a half-open interval [low, high).
-type interval struct {
-       low, high int
-}
-
-func (i interval) len() int { return i.high - i.low }
-
-// byDecreasingLength sorts intervals by decreasing length.
-type byDecreasingLength []interval
-
-func (b byDecreasingLength) Len() int           { return len(b) }
-func (b byDecreasingLength) Less(i, j int) bool { return b[i].len() > b[j].len() }
-func (b byDecreasingLength) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }
index 099aecc31cf51b86d2368b30e5d50943775f5632..16fd8a6e3ea15a5f238d493837bc8ef198815e91 100644 (file)
@@ -5,7 +5,6 @@
 package japanese
 
 import (
-       "errors"
        "unicode/utf8"
 
        "golang.org/x/text/encoding"
@@ -24,8 +23,6 @@ var shiftJIS = internal.Encoding{
        identifier.ShiftJIS,
 }
 
-var errInvalidShiftJIS = errors.New("japanese: invalid Shift JIS encoding")
-
 type shiftJISDecoder struct{ transform.NopResetter }
 
 func (shiftJISDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
@@ -48,28 +45,32 @@ loop:
                        c0 = 2*c0 - 0x21
 
                        if nSrc+1 >= len(src) {
-                               err = transform.ErrShortSrc
-                               break loop
+                               if !atEOF {
+                                       err = transform.ErrShortSrc
+                                       break loop
+                               }
+                               r, size = '\ufffd', 1
+                               goto write
                        }
                        c1 := src[nSrc+1]
                        switch {
                        case c1 < 0x40:
-                               err = errInvalidShiftJIS
-                               break loop
+                               r, size = '\ufffd', 1 // c1 is ASCII so output on next round
+                               goto write
                        case c1 < 0x7f:
                                c0--
                                c1 -= 0x40
                        case c1 == 0x7f:
-                               err = errInvalidShiftJIS
-                               break loop
+                               r, size = '\ufffd', 1 // c1 is ASCII so output on next round
+                               goto write
                        case c1 < 0x9f:
                                c0--
                                c1 -= 0x41
                        case c1 < 0xfd:
                                c1 -= 0x9f
                        default:
-                               err = errInvalidShiftJIS
-                               break loop
+                               r, size = '\ufffd', 2
+                               goto write
                        }
                        r, size = '\ufffd', 2
                        if i := int(c0)*94 + int(c1); i < len(jis0208Decode) {
@@ -79,20 +80,19 @@ loop:
                                }
                        }
 
+               case c0 == 0x80:
+                       r, size = 0x80, 1
+
                default:
-                       err = errInvalidShiftJIS
-                       break loop
+                       r, size = '\ufffd', 1
                }
-
+       write:
                if nDst+utf8.RuneLen(r) > len(dst) {
                        err = transform.ErrShortDst
                        break loop
                }
                nDst += utf8.EncodeRune(dst[nDst:], r)
        }
-       if atEOF && err == transform.ErrShortSrc {
-               err = errInvalidShiftJIS
-       }
        return nDst, nSrc, err
 }
 
index a4b9ff178b97e20fbc905aa5a2790c7a40102303..034337f5df5c7741334ab2b96f85f6ef4e6e93e5 100644 (file)
@@ -5,7 +5,6 @@
 package korean
 
 import (
-       "errors"
        "unicode/utf8"
 
        "golang.org/x/text/encoding"
@@ -26,8 +25,6 @@ var eucKR = internal.Encoding{
        identifier.EUCKR,
 }
 
-var errInvalidEUCKR = errors.New("korean: invalid EUC-KR encoding")
-
 type eucKRDecoder struct{ transform.NopResetter }
 
 func (eucKRDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
@@ -40,10 +37,15 @@ loop:
 
                case 0x81 <= c0 && c0 < 0xff:
                        if nSrc+1 >= len(src) {
-                               err = transform.ErrShortSrc
-                               break loop
+                               if !atEOF {
+                                       err = transform.ErrShortSrc
+                                       break loop
+                               }
+                               r, size = utf8.RuneError, 1
+                               break
                        }
                        c1 := src[nSrc+1]
+                       size = 2
                        if c0 < 0xc7 {
                                r = 178 * rune(c0-0x81)
                                switch {
@@ -54,39 +56,36 @@ loop:
                                case 0x81 <= c1 && c1 < 0xff:
                                        r += rune(c1) - (0x81 - 2*26)
                                default:
-                                       err = errInvalidEUCKR
-                                       break loop
+                                       goto decError
                                }
                        } else if 0xa1 <= c1 && c1 < 0xff {
                                r = 178*(0xc7-0x81) + rune(c0-0xc7)*94 + rune(c1-0xa1)
                        } else {
-                               err = errInvalidEUCKR
-                               break loop
+                               goto decError
                        }
                        if int(r) < len(decode) {
                                r = rune(decode[r])
-                               if r == 0 {
-                                       r = '\ufffd'
+                               if r != 0 {
+                                       break
                                }
-                       } else {
-                               r = '\ufffd'
                        }
-                       size = 2
+               decError:
+                       r = utf8.RuneError
+                       if c1 < utf8.RuneSelf {
+                               size = 1
+                       }
 
                default:
-                       err = errInvalidEUCKR
-                       break loop
+                       r, size = utf8.RuneError, 1
+                       break
                }
 
                if nDst+utf8.RuneLen(r) > len(dst) {
                        err = transform.ErrShortDst
-                       break loop
+                       break
                }
                nDst += utf8.EncodeRune(dst[nDst:], r)
        }
-       if atEOF && err == transform.ErrShortSrc {
-               err = errInvalidEUCKR
-       }
        return nDst, nSrc, err
 }
 
diff --git a/vendor/golang.org/x/text/encoding/korean/maketables.go b/vendor/golang.org/x/text/encoding/korean/maketables.go
deleted file mode 100644 (file)
index c84034f..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore
-
-package main
-
-// This program generates tables.go:
-//     go run maketables.go | gofmt > tables.go
-
-import (
-       "bufio"
-       "fmt"
-       "log"
-       "net/http"
-       "sort"
-       "strings"
-)
-
-func main() {
-       fmt.Printf("// generated by go run maketables.go; DO NOT EDIT\n\n")
-       fmt.Printf("// Package korean provides Korean encodings such as EUC-KR.\n")
-       fmt.Printf(`package korean // import "golang.org/x/text/encoding/korean"` + "\n\n")
-
-       res, err := http.Get("http://encoding.spec.whatwg.org/index-euc-kr.txt")
-       if err != nil {
-               log.Fatalf("Get: %v", err)
-       }
-       defer res.Body.Close()
-
-       mapping := [65536]uint16{}
-       reverse := [65536]uint16{}
-
-       scanner := bufio.NewScanner(res.Body)
-       for scanner.Scan() {
-               s := strings.TrimSpace(scanner.Text())
-               if s == "" || s[0] == '#' {
-                       continue
-               }
-               x, y := uint16(0), uint16(0)
-               if _, err := fmt.Sscanf(s, "%d 0x%x", &x, &y); err != nil {
-                       log.Fatalf("could not parse %q", s)
-               }
-               if x < 0 || 178*(0xc7-0x81)+(0xfe-0xc7)*94+(0xff-0xa1) <= x {
-                       log.Fatalf("EUC-KR code %d is out of range", x)
-               }
-               mapping[x] = y
-               if reverse[y] == 0 {
-                       c0, c1 := uint16(0), uint16(0)
-                       if x < 178*(0xc7-0x81) {
-                               c0 = uint16(x/178) + 0x81
-                               c1 = uint16(x % 178)
-                               switch {
-                               case c1 < 1*26:
-                                       c1 += 0x41
-                               case c1 < 2*26:
-                                       c1 += 0x47
-                               default:
-                                       c1 += 0x4d
-                               }
-                       } else {
-                               x -= 178 * (0xc7 - 0x81)
-                               c0 = uint16(x/94) + 0xc7
-                               c1 = uint16(x%94) + 0xa1
-                       }
-                       reverse[y] = c0<<8 | c1
-               }
-       }
-       if err := scanner.Err(); err != nil {
-               log.Fatalf("scanner error: %v", err)
-       }
-
-       fmt.Printf("// decode is the decoding table from EUC-KR code to Unicode.\n")
-       fmt.Printf("// It is defined at http://encoding.spec.whatwg.org/index-euc-kr.txt\n")
-       fmt.Printf("var decode = [...]uint16{\n")
-       for i, v := range mapping {
-               if v != 0 {
-                       fmt.Printf("\t%d: 0x%04X,\n", i, v)
-               }
-       }
-       fmt.Printf("}\n\n")
-
-       // Any run of at least separation continuous zero entries in the reverse map will
-       // be a separate encode table.
-       const separation = 1024
-
-       intervals := []interval(nil)
-       low, high := -1, -1
-       for i, v := range reverse {
-               if v == 0 {
-                       continue
-               }
-               if low < 0 {
-                       low = i
-               } else if i-high >= separation {
-                       if high >= 0 {
-                               intervals = append(intervals, interval{low, high})
-                       }
-                       low = i
-               }
-               high = i + 1
-       }
-       if high >= 0 {
-               intervals = append(intervals, interval{low, high})
-       }
-       sort.Sort(byDecreasingLength(intervals))
-
-       fmt.Printf("const numEncodeTables = %d\n\n", len(intervals))
-       fmt.Printf("// encodeX are the encoding tables from Unicode to EUC-KR code,\n")
-       fmt.Printf("// sorted by decreasing length.\n")
-       for i, v := range intervals {
-               fmt.Printf("// encode%d: %5d entries for runes in [%5d, %5d).\n", i, v.len(), v.low, v.high)
-       }
-       fmt.Printf("\n")
-
-       for i, v := range intervals {
-               fmt.Printf("const encode%dLow, encode%dHigh = %d, %d\n\n", i, i, v.low, v.high)
-               fmt.Printf("var encode%d = [...]uint16{\n", i)
-               for j := v.low; j < v.high; j++ {
-                       x := reverse[j]
-                       if x == 0 {
-                               continue
-                       }
-                       fmt.Printf("\t%d-%d: 0x%04X,\n", j, v.low, x)
-               }
-               fmt.Printf("}\n\n")
-       }
-}
-
-// interval is a half-open interval [low, high).
-type interval struct {
-       low, high int
-}
-
-func (i interval) len() int { return i.high - i.low }
-
-// byDecreasingLength sorts intervals by decreasing length.
-type byDecreasingLength []interval
-
-func (b byDecreasingLength) Len() int           { return len(b) }
-func (b byDecreasingLength) Less(i, j int) bool { return b[i].len() > b[j].len() }
-func (b byDecreasingLength) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }
index e0b15bbcc114c84be4cfda4b6435c0c3ffd31f41..b89c45b03d842a7ec35ef10eac5c40f427f841ab 100644 (file)
@@ -5,7 +5,6 @@
 package simplifiedchinese
 
 import (
-       "errors"
        "unicode/utf8"
 
        "golang.org/x/text/encoding"
@@ -40,11 +39,6 @@ var gbk18030 = internal.Encoding{
        identifier.GB18030,
 }
 
-var (
-       errInvalidGB18030 = errors.New("simplifiedchinese: invalid GB18030 encoding")
-       errInvalidGBK     = errors.New("simplifiedchinese: invalid GBK encoding")
-)
-
 type gbkDecoder struct {
        transform.NopResetter
        gb18030 bool
@@ -66,8 +60,12 @@ loop:
 
                case c0 < 0xff:
                        if nSrc+1 >= len(src) {
-                               err = transform.ErrShortSrc
-                               break loop
+                               if !atEOF {
+                                       err = transform.ErrShortSrc
+                                       break loop
+                               }
+                               r, size = utf8.RuneError, 1
+                               goto write
                        }
                        c1 := src[nSrc+1]
                        switch {
@@ -77,18 +75,24 @@ loop:
                                c1 -= 0x41
                        case d.gb18030 && 0x30 <= c1 && c1 < 0x40:
                                if nSrc+3 >= len(src) {
-                                       err = transform.ErrShortSrc
-                                       break loop
+                                       if !atEOF {
+                                               err = transform.ErrShortSrc
+                                               break loop
+                                       }
+                                       // The second byte here is always ASCII, so we can set size
+                                       // to 1 in all cases.
+                                       r, size = utf8.RuneError, 1
+                                       goto write
                                }
                                c2 := src[nSrc+2]
                                if c2 < 0x81 || 0xff <= c2 {
-                                       err = errInvalidGB18030
-                                       break loop
+                                       r, size = utf8.RuneError, 1
+                                       goto write
                                }
                                c3 := src[nSrc+3]
                                if c3 < 0x30 || 0x3a <= c3 {
-                                       err = errInvalidGB18030
-                                       break loop
+                                       r, size = utf8.RuneError, 1
+                                       goto write
                                }
                                size = 4
                                r = ((rune(c0-0x81)*10+rune(c1-0x30))*126+rune(c2-0x81))*10 + rune(c3-0x30)
@@ -109,17 +113,13 @@ loop:
                                r -= 189000
                                if 0 <= r && r < 0x100000 {
                                        r += 0x10000
-                                       goto write
-                               }
-                               err = errInvalidGB18030
-                               break loop
-                       default:
-                               if d.gb18030 {
-                                       err = errInvalidGB18030
                                } else {
-                                       err = errInvalidGBK
+                                       r, size = utf8.RuneError, 1
                                }
-                               break loop
+                               goto write
+                       default:
+                               r, size = utf8.RuneError, 1
+                               goto write
                        }
                        r, size = '\ufffd', 2
                        if i := int(c0-0x81)*190 + int(c1); i < len(decode) {
@@ -130,12 +130,7 @@ loop:
                        }
 
                default:
-                       if d.gb18030 {
-                               err = errInvalidGB18030
-                       } else {
-                               err = errInvalidGBK
-                       }
-                       break loop
+                       r, size = utf8.RuneError, 1
                }
 
        write:
@@ -145,13 +140,6 @@ loop:
                }
                nDst += utf8.EncodeRune(dst[nDst:], r)
        }
-       if atEOF && err == transform.ErrShortSrc {
-               if d.gb18030 {
-                       err = errInvalidGB18030
-               } else {
-                       err = errInvalidGBK
-               }
-       }
        return nDst, nSrc, err
 }
 
index 85de6b1e640ee9e8171bf3478c21bc2fc052d241..eb3157f0b20efa0cf7725a9b1f531ce728357d9a 100644 (file)
@@ -5,7 +5,6 @@
 package simplifiedchinese
 
 import (
-       "errors"
        "unicode/utf8"
 
        "golang.org/x/text/encoding"
@@ -31,8 +30,6 @@ func hzGB2312NewEncoder() transform.Transformer {
        return new(hzGB2312Encoder)
 }
 
-var errInvalidHZGB2312 = errors.New("simplifiedchinese: invalid HZ-GB2312 encoding")
-
 const (
        asciiState = iota
        gbState
@@ -50,14 +47,18 @@ loop:
        for ; nSrc < len(src); nSrc += size {
                c0 := src[nSrc]
                if c0 >= utf8.RuneSelf {
-                       err = errInvalidHZGB2312
-                       break loop
+                       r, size = utf8.RuneError, 1
+                       goto write
                }
 
                if c0 == '~' {
                        if nSrc+1 >= len(src) {
-                               err = transform.ErrShortSrc
-                               break loop
+                               if !atEOF {
+                                       err = transform.ErrShortSrc
+                                       break loop
+                               }
+                               r = utf8.RuneError
+                               goto write
                        }
                        size = 2
                        switch src[nSrc+1] {
@@ -78,8 +79,8 @@ loop:
                        case '\n':
                                continue
                        default:
-                               err = errInvalidHZGB2312
-                               break loop
+                               r = utf8.RuneError
+                               goto write
                        }
                }
 
@@ -87,33 +88,37 @@ loop:
                        r, size = rune(c0), 1
                } else {
                        if nSrc+1 >= len(src) {
-                               err = transform.ErrShortSrc
-                               break loop
+                               if !atEOF {
+                                       err = transform.ErrShortSrc
+                                       break loop
+                               }
+                               r, size = utf8.RuneError, 1
+                               goto write
                        }
+                       size = 2
                        c1 := src[nSrc+1]
                        if c0 < 0x21 || 0x7e <= c0 || c1 < 0x21 || 0x7f <= c1 {
-                               err = errInvalidHZGB2312
-                               break loop
-                       }
-
-                       r, size = '\ufffd', 2
-                       if i := int(c0-0x01)*190 + int(c1+0x3f); i < len(decode) {
+                               // error
+                       } else if i := int(c0-0x01)*190 + int(c1+0x3f); i < len(decode) {
                                r = rune(decode[i])
-                               if r == 0 {
-                                       r = '\ufffd'
+                               if r != 0 {
+                                       goto write
                                }
                        }
+                       if c1 > utf8.RuneSelf {
+                               // Be consistent and always treat non-ASCII as a single error.
+                               size = 1
+                       }
+                       r = utf8.RuneError
                }
 
+       write:
                if nDst+utf8.RuneLen(r) > len(dst) {
                        err = transform.ErrShortDst
                        break loop
                }
                nDst += utf8.EncodeRune(dst[nDst:], r)
        }
-       if atEOF && err == transform.ErrShortSrc {
-               err = errInvalidHZGB2312
-       }
        return nDst, nSrc, err
 }
 
diff --git a/vendor/golang.org/x/text/encoding/simplifiedchinese/maketables.go b/vendor/golang.org/x/text/encoding/simplifiedchinese/maketables.go
deleted file mode 100644 (file)
index 55016c7..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore
-
-package main
-
-// This program generates tables.go:
-//     go run maketables.go | gofmt > tables.go
-
-import (
-       "bufio"
-       "fmt"
-       "log"
-       "net/http"
-       "sort"
-       "strings"
-)
-
-func main() {
-       fmt.Printf("// generated by go run maketables.go; DO NOT EDIT\n\n")
-       fmt.Printf("// Package simplifiedchinese provides Simplified Chinese encodings such as GBK.\n")
-       fmt.Printf(`package simplifiedchinese // import "golang.org/x/text/encoding/simplifiedchinese"` + "\n\n")
-
-       printGB18030()
-       printGBK()
-}
-
-func printGB18030() {
-       res, err := http.Get("http://encoding.spec.whatwg.org/index-gb18030.txt")
-       if err != nil {
-               log.Fatalf("Get: %v", err)
-       }
-       defer res.Body.Close()
-
-       fmt.Printf("// gb18030 is the table from http://encoding.spec.whatwg.org/index-gb18030.txt\n")
-       fmt.Printf("var gb18030 = [...][2]uint16{\n")
-       scanner := bufio.NewScanner(res.Body)
-       for scanner.Scan() {
-               s := strings.TrimSpace(scanner.Text())
-               if s == "" || s[0] == '#' {
-                       continue
-               }
-               x, y := uint32(0), uint32(0)
-               if _, err := fmt.Sscanf(s, "%d 0x%x", &x, &y); err != nil {
-                       log.Fatalf("could not parse %q", s)
-               }
-               if x < 0x10000 && y < 0x10000 {
-                       fmt.Printf("\t{0x%04x, 0x%04x},\n", x, y)
-               }
-       }
-       fmt.Printf("}\n\n")
-}
-
-func printGBK() {
-       res, err := http.Get("http://encoding.spec.whatwg.org/index-gbk.txt")
-       if err != nil {
-               log.Fatalf("Get: %v", err)
-       }
-       defer res.Body.Close()
-
-       mapping := [65536]uint16{}
-       reverse := [65536]uint16{}
-
-       scanner := bufio.NewScanner(res.Body)
-       for scanner.Scan() {
-               s := strings.TrimSpace(scanner.Text())
-               if s == "" || s[0] == '#' {
-                       continue
-               }
-               x, y := uint16(0), uint16(0)
-               if _, err := fmt.Sscanf(s, "%d 0x%x", &x, &y); err != nil {
-                       log.Fatalf("could not parse %q", s)
-               }
-               if x < 0 || 126*190 <= x {
-                       log.Fatalf("GBK code %d is out of range", x)
-               }
-               mapping[x] = y
-               if reverse[y] == 0 {
-                       c0, c1 := x/190, x%190
-                       if c1 >= 0x3f {
-                               c1++
-                       }
-                       reverse[y] = (0x81+c0)<<8 | (0x40 + c1)
-               }
-       }
-       if err := scanner.Err(); err != nil {
-               log.Fatalf("scanner error: %v", err)
-       }
-
-       fmt.Printf("// decode is the decoding table from GBK code to Unicode.\n")
-       fmt.Printf("// It is defined at http://encoding.spec.whatwg.org/index-gbk.txt\n")
-       fmt.Printf("var decode = [...]uint16{\n")
-       for i, v := range mapping {
-               if v != 0 {
-                       fmt.Printf("\t%d: 0x%04X,\n", i, v)
-               }
-       }
-       fmt.Printf("}\n\n")
-
-       // Any run of at least separation continuous zero entries in the reverse map will
-       // be a separate encode table.
-       const separation = 1024
-
-       intervals := []interval(nil)
-       low, high := -1, -1
-       for i, v := range reverse {
-               if v == 0 {
-                       continue
-               }
-               if low < 0 {
-                       low = i
-               } else if i-high >= separation {
-                       if high >= 0 {
-                               intervals = append(intervals, interval{low, high})
-                       }
-                       low = i
-               }
-               high = i + 1
-       }
-       if high >= 0 {
-               intervals = append(intervals, interval{low, high})
-       }
-       sort.Sort(byDecreasingLength(intervals))
-
-       fmt.Printf("const numEncodeTables = %d\n\n", len(intervals))
-       fmt.Printf("// encodeX are the encoding tables from Unicode to GBK code,\n")
-       fmt.Printf("// sorted by decreasing length.\n")
-       for i, v := range intervals {
-               fmt.Printf("// encode%d: %5d entries for runes in [%5d, %5d).\n", i, v.len(), v.low, v.high)
-       }
-       fmt.Printf("\n")
-
-       for i, v := range intervals {
-               fmt.Printf("const encode%dLow, encode%dHigh = %d, %d\n\n", i, i, v.low, v.high)
-               fmt.Printf("var encode%d = [...]uint16{\n", i)
-               for j := v.low; j < v.high; j++ {
-                       x := reverse[j]
-                       if x == 0 {
-                               continue
-                       }
-                       fmt.Printf("\t%d-%d: 0x%04X,\n", j, v.low, x)
-               }
-               fmt.Printf("}\n\n")
-       }
-}
-
-// interval is a half-open interval [low, high).
-type interval struct {
-       low, high int
-}
-
-func (i interval) len() int { return i.high - i.low }
-
-// byDecreasingLength sorts intervals by decreasing length.
-type byDecreasingLength []interval
-
-func (b byDecreasingLength) Len() int           { return len(b) }
-func (b byDecreasingLength) Less(i, j int) bool { return b[i].len() > b[j].len() }
-func (b byDecreasingLength) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }
index 275821f5db901e6239ccbde87e2592c6d64b3add..1fcddde08297d20edebd3ccd3229ec49ccd1bef0 100644 (file)
@@ -5,7 +5,6 @@
 package traditionalchinese
 
 import (
-       "errors"
        "unicode/utf8"
 
        "golang.org/x/text/encoding"
@@ -26,8 +25,6 @@ var big5 = internal.Encoding{
        identifier.Big5,
 }
 
-var errInvalidBig5 = errors.New("traditionalchinese: invalid Big5 encoding")
-
 type big5Decoder struct{ transform.NopResetter }
 
 func (big5Decoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
@@ -40,8 +37,12 @@ loop:
 
                case 0x81 <= c0 && c0 < 0xff:
                        if nSrc+1 >= len(src) {
-                               err = transform.ErrShortSrc
-                               break loop
+                               if !atEOF {
+                                       err = transform.ErrShortSrc
+                                       break loop
+                               }
+                               r, size = utf8.RuneError, 1
+                               goto write
                        }
                        c1 := src[nSrc+1]
                        switch {
@@ -49,9 +50,12 @@ loop:
                                c1 -= 0x40
                        case 0xa1 <= c1 && c1 < 0xff:
                                c1 -= 0x62
+                       case c1 < 0x40:
+                               r, size = utf8.RuneError, 1
+                               goto write
                        default:
-                               err = errInvalidBig5
-                               break loop
+                               r, size = utf8.RuneError, 2
+                               goto write
                        }
                        r, size = '\ufffd', 2
                        if i := int(c0-0x81)*157 + int(c1); i < len(decode) {
@@ -80,10 +84,10 @@ loop:
                        }
 
                default:
-                       err = errInvalidBig5
-                       break loop
+                       r, size = utf8.RuneError, 1
                }
 
+       write:
                if nDst+utf8.RuneLen(r) > len(dst) {
                        err = transform.ErrShortDst
                        break loop
@@ -99,9 +103,6 @@ loop:
                nDst += copy(dst[nDst:], s)
                continue loop
        }
-       if atEOF && err == transform.ErrShortSrc {
-               err = errInvalidBig5
-       }
        return nDst, nSrc, err
 }
 
diff --git a/vendor/golang.org/x/text/encoding/traditionalchinese/maketables.go b/vendor/golang.org/x/text/encoding/traditionalchinese/maketables.go
deleted file mode 100644 (file)
index cf7fdb3..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore
-
-package main
-
-// This program generates tables.go:
-//     go run maketables.go | gofmt > tables.go
-
-import (
-       "bufio"
-       "fmt"
-       "log"
-       "net/http"
-       "sort"
-       "strings"
-)
-
-func main() {
-       fmt.Printf("// generated by go run maketables.go; DO NOT EDIT\n\n")
-       fmt.Printf("// Package traditionalchinese provides Traditional Chinese encodings such as Big5.\n")
-       fmt.Printf(`package traditionalchinese // import "golang.org/x/text/encoding/traditionalchinese"` + "\n\n")
-
-       res, err := http.Get("http://encoding.spec.whatwg.org/index-big5.txt")
-       if err != nil {
-               log.Fatalf("Get: %v", err)
-       }
-       defer res.Body.Close()
-
-       mapping := [65536]uint32{}
-       reverse := [65536 * 4]uint16{}
-
-       scanner := bufio.NewScanner(res.Body)
-       for scanner.Scan() {
-               s := strings.TrimSpace(scanner.Text())
-               if s == "" || s[0] == '#' {
-                       continue
-               }
-               x, y := uint16(0), uint32(0)
-               if _, err := fmt.Sscanf(s, "%d 0x%x", &x, &y); err != nil {
-                       log.Fatalf("could not parse %q", s)
-               }
-               if x < 0 || 126*157 <= x {
-                       log.Fatalf("Big5 code %d is out of range", x)
-               }
-               mapping[x] = y
-
-               // The WHATWG spec http://encoding.spec.whatwg.org/#indexes says that
-               // "The index pointer for code point in index is the first pointer
-               // corresponding to code point in index", which would normally mean
-               // that the code below should be guarded by "if reverse[y] == 0", but
-               // last instead of first seems to match the behavior of
-               // "iconv -f UTF-8 -t BIG5". For example, U+8005 è€… occurs twice in
-               // http://encoding.spec.whatwg.org/index-big5.txt, as index 2148
-               // (encoded as "\x8e\xcd") and index 6543 (encoded as "\xaa\xcc")
-               // and "echo è€… | iconv -f UTF-8 -t BIG5 | xxd" gives "\xaa\xcc".
-               c0, c1 := x/157, x%157
-               if c1 < 0x3f {
-                       c1 += 0x40
-               } else {
-                       c1 += 0x62
-               }
-               reverse[y] = (0x81+c0)<<8 | c1
-       }
-       if err := scanner.Err(); err != nil {
-               log.Fatalf("scanner error: %v", err)
-       }
-
-       fmt.Printf("// decode is the decoding table from Big5 code to Unicode.\n")
-       fmt.Printf("// It is defined at http://encoding.spec.whatwg.org/index-big5.txt\n")
-       fmt.Printf("var decode = [...]uint32{\n")
-       for i, v := range mapping {
-               if v != 0 {
-                       fmt.Printf("\t%d: 0x%08X,\n", i, v)
-               }
-       }
-       fmt.Printf("}\n\n")
-
-       // Any run of at least separation continuous zero entries in the reverse map will
-       // be a separate encode table.
-       const separation = 1024
-
-       intervals := []interval(nil)
-       low, high := -1, -1
-       for i, v := range reverse {
-               if v == 0 {
-                       continue
-               }
-               if low < 0 {
-                       low = i
-               } else if i-high >= separation {
-                       if high >= 0 {
-                               intervals = append(intervals, interval{low, high})
-                       }
-                       low = i
-               }
-               high = i + 1
-       }
-       if high >= 0 {
-               intervals = append(intervals, interval{low, high})
-       }
-       sort.Sort(byDecreasingLength(intervals))
-
-       fmt.Printf("const numEncodeTables = %d\n\n", len(intervals))
-       fmt.Printf("// encodeX are the encoding tables from Unicode to Big5 code,\n")
-       fmt.Printf("// sorted by decreasing length.\n")
-       for i, v := range intervals {
-               fmt.Printf("// encode%d: %5d entries for runes in [%6d, %6d).\n", i, v.len(), v.low, v.high)
-       }
-       fmt.Printf("\n")
-
-       for i, v := range intervals {
-               fmt.Printf("const encode%dLow, encode%dHigh = %d, %d\n\n", i, i, v.low, v.high)
-               fmt.Printf("var encode%d = [...]uint16{\n", i)
-               for j := v.low; j < v.high; j++ {
-                       x := reverse[j]
-                       if x == 0 {
-                               continue
-                       }
-                       fmt.Printf("\t%d-%d: 0x%04X,\n", j, v.low, x)
-               }
-               fmt.Printf("}\n\n")
-       }
-}
-
-// interval is a half-open interval [low, high).
-type interval struct {
-       low, high int
-}
-
-func (i interval) len() int { return i.high - i.low }
-
-// byDecreasingLength sorts intervals by decreasing length.
-type byDecreasingLength []interval
-
-func (b byDecreasingLength) Len() int           { return len(b) }
-func (b byDecreasingLength) Less(i, j int) bool { return b[i].len() > b[j].len() }
-func (b byDecreasingLength) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }
index a255bb0a50261f36bd3321511f4dbabc4590dd00..9d86e185543397c10ff3d6638de867d1bda9de0d 100644 (file)
@@ -1,4 +1,4 @@
-// This file was generated by go generate; DO NOT EDIT
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
 
 package language
 
diff --git a/vendor/golang.org/x/text/language/gen_common.go b/vendor/golang.org/x/text/language/gen_common.go
deleted file mode 100644 (file)
index 83ce180..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore
-
-package main
-
-// This file contains code common to the maketables.go and the package code.
-
-// langAliasType is the type of an alias in langAliasMap.
-type langAliasType int8
-
-const (
-       langDeprecated langAliasType = iota
-       langMacro
-       langLegacy
-
-       langAliasTypeUnknown langAliasType = -1
-)
diff --git a/vendor/golang.org/x/text/language/gen_index.go b/vendor/golang.org/x/text/language/gen_index.go
deleted file mode 100644 (file)
index eef555c..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore
-
-package main
-
-// This file generates derivative tables based on the language package itself.
-
-import (
-       "bytes"
-       "flag"
-       "fmt"
-       "io/ioutil"
-       "log"
-       "reflect"
-       "sort"
-       "strings"
-
-       "golang.org/x/text/internal/gen"
-       "golang.org/x/text/language"
-       "golang.org/x/text/unicode/cldr"
-)
-
-var (
-       test = flag.Bool("test", false,
-               "test existing tables; can be used to compare web data with package data.")
-
-       draft = flag.String("draft",
-               "contributed",
-               `Minimal draft requirements (approved, contributed, provisional, unconfirmed).`)
-)
-
-func main() {
-       gen.Init()
-
-       // Read the CLDR zip file.
-       r := gen.OpenCLDRCoreZip()
-       defer r.Close()
-
-       d := &cldr.Decoder{}
-       data, err := d.DecodeZip(r)
-       if err != nil {
-               log.Fatalf("DecodeZip: %v", err)
-       }
-
-       w := gen.NewCodeWriter()
-       defer func() {
-               buf := &bytes.Buffer{}
-
-               if _, err = w.WriteGo(buf, "language"); err != nil {
-                       log.Fatalf("Error formatting file index.go: %v", err)
-               }
-
-               // Since we're generating a table for our own package we need to rewrite
-               // doing the equivalent of go fmt -r 'language.b -> b'. Using
-               // bytes.Replace will do.
-               out := bytes.Replace(buf.Bytes(), []byte("language."), nil, -1)
-               if err := ioutil.WriteFile("index.go", out, 0600); err != nil {
-                       log.Fatalf("Could not create file index.go: %v", err)
-               }
-       }()
-
-       m := map[language.Tag]bool{}
-       for _, lang := range data.Locales() {
-               // We include all locales unconditionally to be consistent with en_US.
-               // We want en_US, even though it has no data associated with it.
-
-               // TODO: put any of the languages for which no data exists at the end
-               // of the index. This allows all components based on ICU to use that
-               // as the cutoff point.
-               // if x := data.RawLDML(lang); false ||
-               //      x.LocaleDisplayNames != nil ||
-               //      x.Characters != nil ||
-               //      x.Delimiters != nil ||
-               //      x.Measurement != nil ||
-               //      x.Dates != nil ||
-               //      x.Numbers != nil ||
-               //      x.Units != nil ||
-               //      x.ListPatterns != nil ||
-               //      x.Collations != nil ||
-               //      x.Segmentations != nil ||
-               //      x.Rbnf != nil ||
-               //      x.Annotations != nil ||
-               //      x.Metadata != nil {
-
-               // TODO: support POSIX natively, albeit non-standard.
-               tag := language.Make(strings.Replace(lang, "_POSIX", "-u-va-posix", 1))
-               m[tag] = true
-               // }
-       }
-       // Include locales for plural rules, which uses a different structure.
-       for _, plurals := range data.Supplemental().Plurals {
-               for _, rules := range plurals.PluralRules {
-                       for _, lang := range strings.Split(rules.Locales, " ") {
-                               m[language.Make(lang)] = true
-                       }
-               }
-       }
-
-       var core, special []language.Tag
-
-       for t := range m {
-               if x := t.Extensions(); len(x) != 0 && fmt.Sprint(x) != "[u-va-posix]" {
-                       log.Fatalf("Unexpected extension %v in %v", x, t)
-               }
-               if len(t.Variants()) == 0 && len(t.Extensions()) == 0 {
-                       core = append(core, t)
-               } else {
-                       special = append(special, t)
-               }
-       }
-
-       w.WriteComment(`
-       NumCompactTags is the number of common tags. The maximum tag is
-       NumCompactTags-1.`)
-       w.WriteConst("NumCompactTags", len(core)+len(special))
-
-       sort.Sort(byAlpha(special))
-       w.WriteVar("specialTags", special)
-
-       // TODO: order by frequency?
-       sort.Sort(byAlpha(core))
-
-       // Size computations are just an estimate.
-       w.Size += int(reflect.TypeOf(map[uint32]uint16{}).Size())
-       w.Size += len(core) * 6 // size of uint32 and uint16
-
-       fmt.Fprintln(w)
-       fmt.Fprintln(w, "var coreTags = map[uint32]uint16{")
-       fmt.Fprintln(w, "0x0: 0, // und")
-       i := len(special) + 1 // Und and special tags already written.
-       for _, t := range core {
-               if t == language.Und {
-                       continue
-               }
-               fmt.Fprint(w.Hash, t, i)
-               b, s, r := t.Raw()
-               fmt.Fprintf(w, "0x%s%s%s: %d, // %s\n",
-                       getIndex(b, 3), // 3 is enough as it is guaranteed to be a compact number
-                       getIndex(s, 2),
-                       getIndex(r, 3),
-                       i, t)
-               i++
-       }
-       fmt.Fprintln(w, "}")
-}
-
-// getIndex prints the subtag type and extracts its index of size nibble.
-// If the index is less than n nibbles, the result is prefixed with 0s.
-func getIndex(x interface{}, n int) string {
-       s := fmt.Sprintf("%#v", x) // s is of form Type{typeID: 0x00}
-       s = s[strings.Index(s, "0x")+2 : len(s)-1]
-       return strings.Repeat("0", n-len(s)) + s
-}
-
-type byAlpha []language.Tag
-
-func (a byAlpha) Len() int           { return len(a) }
-func (a byAlpha) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
-func (a byAlpha) Less(i, j int) bool { return a[i].String() < a[j].String() }
index 50c75218688e66ba6e0b77c8f8a9b32236fbf440..973db9fd54f82090fa7fd3044f7227e7652480e4 100644 (file)
-// This file was generated by go generate; DO NOT EDIT
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
 
 package language
 
 // NumCompactTags is the number of common tags. The maximum tag is
 // NumCompactTags-1.
-const NumCompactTags = 752
+const NumCompactTags = 754
 
 var specialTags = []Tag{ // 2 elements
-       0: {lang: 0xd5, region: 0x6d, script: 0x0, pVariant: 0x5, pExt: 0xe, str: "ca-ES-valencia"},
-       1: {lang: 0x134, region: 0x134, script: 0x0, pVariant: 0x5, pExt: 0x5, str: "en-US-u-va-posix"},
+       0: {lang: 0xd7, region: 0x6d, script: 0x0, pVariant: 0x5, pExt: 0xe, str: "ca-ES-valencia"},
+       1: {lang: 0x138, region: 0x134, script: 0x0, pVariant: 0x5, pExt: 0x5, str: "en-US-u-va-posix"},
 } // Size: 72 bytes
 
 var coreTags = map[uint32]uint16{
        0x0:        0,   // und
-       0x01500000: 3,   // af
-       0x015000d1: 4,   // af-NA
-       0x01500160: 5,   // af-ZA
-       0x01b00000: 6,   // agq
-       0x01b00051: 7,   // agq-CM
-       0x02000000: 8,   // ak
-       0x0200007f: 9,   // ak-GH
-       0x02600000: 10,  // am
-       0x0260006e: 11,  // am-ET
-       0x03900000: 12,  // ar
-       0x03900001: 13,  // ar-001
-       0x03900022: 14,  // ar-AE
-       0x03900038: 15,  // ar-BH
-       0x03900061: 16,  // ar-DJ
-       0x03900066: 17,  // ar-DZ
-       0x0390006a: 18,  // ar-EG
-       0x0390006b: 19,  // ar-EH
-       0x0390006c: 20,  // ar-ER
-       0x03900096: 21,  // ar-IL
-       0x0390009a: 22,  // ar-IQ
-       0x039000a0: 23,  // ar-JO
-       0x039000a7: 24,  // ar-KM
-       0x039000ab: 25,  // ar-KW
-       0x039000af: 26,  // ar-LB
-       0x039000b8: 27,  // ar-LY
-       0x039000b9: 28,  // ar-MA
-       0x039000c8: 29,  // ar-MR
-       0x039000e0: 30,  // ar-OM
-       0x039000ec: 31,  // ar-PS
-       0x039000f2: 32,  // ar-QA
-       0x03900107: 33,  // ar-SA
-       0x0390010a: 34,  // ar-SD
-       0x03900114: 35,  // ar-SO
-       0x03900116: 36,  // ar-SS
-       0x0390011b: 37,  // ar-SY
-       0x0390011f: 38,  // ar-TD
-       0x03900127: 39,  // ar-TN
-       0x0390015d: 40,  // ar-YE
-       0x03f00000: 41,  // ars
-       0x04200000: 42,  // as
-       0x04200098: 43,  // as-IN
-       0x04300000: 44,  // asa
-       0x0430012e: 45,  // asa-TZ
-       0x04700000: 46,  // ast
-       0x0470006d: 47,  // ast-ES
-       0x05700000: 48,  // az
-       0x0571e000: 49,  // az-Cyrl
-       0x0571e031: 50,  // az-Cyrl-AZ
-       0x05752000: 51,  // az-Latn
-       0x05752031: 52,  // az-Latn-AZ
-       0x05d00000: 53,  // bas
-       0x05d00051: 54,  // bas-CM
-       0x07000000: 55,  // be
-       0x07000046: 56,  // be-BY
-       0x07400000: 57,  // bem
-       0x07400161: 58,  // bem-ZM
-       0x07800000: 59,  // bez
-       0x0780012e: 60,  // bez-TZ
-       0x07d00000: 61,  // bg
-       0x07d00037: 62,  // bg-BG
-       0x08100000: 63,  // bh
-       0x09e00000: 64,  // bm
-       0x09e000c2: 65,  // bm-ML
-       0x0a300000: 66,  // bn
-       0x0a300034: 67,  // bn-BD
-       0x0a300098: 68,  // bn-IN
-       0x0a700000: 69,  // bo
-       0x0a700052: 70,  // bo-CN
-       0x0a700098: 71,  // bo-IN
-       0x0b000000: 72,  // br
-       0x0b000077: 73,  // br-FR
-       0x0b300000: 74,  // brx
-       0x0b300098: 75,  // brx-IN
-       0x0b500000: 76,  // bs
-       0x0b51e000: 77,  // bs-Cyrl
-       0x0b51e032: 78,  // bs-Cyrl-BA
-       0x0b552000: 79,  // bs-Latn
-       0x0b552032: 80,  // bs-Latn-BA
-       0x0d500000: 81,  // ca
-       0x0d500021: 82,  // ca-AD
-       0x0d50006d: 83,  // ca-ES
-       0x0d500077: 84,  // ca-FR
-       0x0d50009d: 85,  // ca-IT
-       0x0da00000: 86,  // ce
-       0x0da00105: 87,  // ce-RU
-       0x0dd00000: 88,  // cgg
-       0x0dd00130: 89,  // cgg-UG
-       0x0e300000: 90,  // chr
-       0x0e300134: 91,  // chr-US
-       0x0e700000: 92,  // ckb
-       0x0e70009a: 93,  // ckb-IQ
-       0x0e70009b: 94,  // ckb-IR
-       0x0f600000: 95,  // cs
-       0x0f60005d: 96,  // cs-CZ
-       0x0fa00000: 97,  // cu
-       0x0fa00105: 98,  // cu-RU
-       0x0fc00000: 99,  // cy
-       0x0fc0007a: 100, // cy-GB
-       0x0fd00000: 101, // da
-       0x0fd00062: 102, // da-DK
-       0x0fd00081: 103, // da-GL
-       0x10400000: 104, // dav
-       0x104000a3: 105, // dav-KE
-       0x10900000: 106, // de
-       0x1090002d: 107, // de-AT
-       0x10900035: 108, // de-BE
-       0x1090004d: 109, // de-CH
-       0x1090005f: 110, // de-DE
-       0x1090009d: 111, // de-IT
-       0x109000b1: 112, // de-LI
-       0x109000b6: 113, // de-LU
-       0x11300000: 114, // dje
-       0x113000d3: 115, // dje-NE
-       0x11b00000: 116, // dsb
-       0x11b0005f: 117, // dsb-DE
-       0x12000000: 118, // dua
-       0x12000051: 119, // dua-CM
-       0x12400000: 120, // dv
-       0x12700000: 121, // dyo
-       0x12700113: 122, // dyo-SN
-       0x12900000: 123, // dz
-       0x12900042: 124, // dz-BT
-       0x12b00000: 125, // ebu
-       0x12b000a3: 126, // ebu-KE
-       0x12c00000: 127, // ee
-       0x12c0007f: 128, // ee-GH
-       0x12c00121: 129, // ee-TG
-       0x13100000: 130, // el
-       0x1310005c: 131, // el-CY
-       0x13100086: 132, // el-GR
-       0x13400000: 133, // en
-       0x13400001: 134, // en-001
-       0x1340001a: 135, // en-150
-       0x13400024: 136, // en-AG
-       0x13400025: 137, // en-AI
-       0x1340002c: 138, // en-AS
-       0x1340002d: 139, // en-AT
-       0x1340002e: 140, // en-AU
-       0x13400033: 141, // en-BB
-       0x13400035: 142, // en-BE
-       0x13400039: 143, // en-BI
-       0x1340003c: 144, // en-BM
-       0x13400041: 145, // en-BS
-       0x13400045: 146, // en-BW
-       0x13400047: 147, // en-BZ
-       0x13400048: 148, // en-CA
-       0x13400049: 149, // en-CC
-       0x1340004d: 150, // en-CH
-       0x1340004f: 151, // en-CK
-       0x13400051: 152, // en-CM
-       0x1340005b: 153, // en-CX
-       0x1340005c: 154, // en-CY
-       0x1340005f: 155, // en-DE
-       0x13400060: 156, // en-DG
-       0x13400062: 157, // en-DK
-       0x13400063: 158, // en-DM
-       0x1340006c: 159, // en-ER
-       0x13400071: 160, // en-FI
-       0x13400072: 161, // en-FJ
-       0x13400073: 162, // en-FK
-       0x13400074: 163, // en-FM
-       0x1340007a: 164, // en-GB
-       0x1340007b: 165, // en-GD
-       0x1340007e: 166, // en-GG
-       0x1340007f: 167, // en-GH
-       0x13400080: 168, // en-GI
-       0x13400082: 169, // en-GM
-       0x13400089: 170, // en-GU
-       0x1340008b: 171, // en-GY
-       0x1340008c: 172, // en-HK
-       0x13400095: 173, // en-IE
-       0x13400096: 174, // en-IL
-       0x13400097: 175, // en-IM
-       0x13400098: 176, // en-IN
-       0x13400099: 177, // en-IO
-       0x1340009e: 178, // en-JE
-       0x1340009f: 179, // en-JM
-       0x134000a3: 180, // en-KE
-       0x134000a6: 181, // en-KI
-       0x134000a8: 182, // en-KN
-       0x134000ac: 183, // en-KY
-       0x134000b0: 184, // en-LC
-       0x134000b3: 185, // en-LR
-       0x134000b4: 186, // en-LS
-       0x134000be: 187, // en-MG
-       0x134000bf: 188, // en-MH
-       0x134000c5: 189, // en-MO
-       0x134000c6: 190, // en-MP
-       0x134000c9: 191, // en-MS
-       0x134000ca: 192, // en-MT
-       0x134000cb: 193, // en-MU
-       0x134000cd: 194, // en-MW
-       0x134000cf: 195, // en-MY
-       0x134000d1: 196, // en-NA
-       0x134000d4: 197, // en-NF
-       0x134000d5: 198, // en-NG
-       0x134000d8: 199, // en-NL
-       0x134000dc: 200, // en-NR
-       0x134000de: 201, // en-NU
-       0x134000df: 202, // en-NZ
-       0x134000e5: 203, // en-PG
-       0x134000e6: 204, // en-PH
-       0x134000e7: 205, // en-PK
-       0x134000ea: 206, // en-PN
-       0x134000eb: 207, // en-PR
-       0x134000ef: 208, // en-PW
-       0x13400106: 209, // en-RW
-       0x13400108: 210, // en-SB
-       0x13400109: 211, // en-SC
-       0x1340010a: 212, // en-SD
-       0x1340010b: 213, // en-SE
-       0x1340010c: 214, // en-SG
-       0x1340010d: 215, // en-SH
-       0x1340010e: 216, // en-SI
-       0x13400111: 217, // en-SL
-       0x13400116: 218, // en-SS
-       0x1340011a: 219, // en-SX
-       0x1340011c: 220, // en-SZ
-       0x1340011e: 221, // en-TC
-       0x13400124: 222, // en-TK
-       0x13400128: 223, // en-TO
-       0x1340012b: 224, // en-TT
-       0x1340012c: 225, // en-TV
-       0x1340012e: 226, // en-TZ
-       0x13400130: 227, // en-UG
-       0x13400132: 228, // en-UM
-       0x13400134: 229, // en-US
-       0x13400138: 230, // en-VC
-       0x1340013b: 231, // en-VG
-       0x1340013c: 232, // en-VI
-       0x1340013e: 233, // en-VU
-       0x13400141: 234, // en-WS
-       0x13400160: 235, // en-ZA
-       0x13400161: 236, // en-ZM
-       0x13400163: 237, // en-ZW
-       0x13700000: 238, // eo
-       0x13700001: 239, // eo-001
-       0x13900000: 240, // es
-       0x1390001e: 241, // es-419
-       0x1390002b: 242, // es-AR
-       0x1390003e: 243, // es-BO
-       0x13900040: 244, // es-BR
-       0x13900050: 245, // es-CL
-       0x13900053: 246, // es-CO
-       0x13900055: 247, // es-CR
-       0x13900058: 248, // es-CU
-       0x13900064: 249, // es-DO
-       0x13900067: 250, // es-EA
-       0x13900068: 251, // es-EC
-       0x1390006d: 252, // es-ES
-       0x13900085: 253, // es-GQ
-       0x13900088: 254, // es-GT
-       0x1390008e: 255, // es-HN
-       0x13900093: 256, // es-IC
-       0x139000ce: 257, // es-MX
-       0x139000d7: 258, // es-NI
-       0x139000e1: 259, // es-PA
-       0x139000e3: 260, // es-PE
-       0x139000e6: 261, // es-PH
-       0x139000eb: 262, // es-PR
-       0x139000f0: 263, // es-PY
-       0x13900119: 264, // es-SV
-       0x13900134: 265, // es-US
-       0x13900135: 266, // es-UY
-       0x1390013a: 267, // es-VE
-       0x13b00000: 268, // et
-       0x13b00069: 269, // et-EE
-       0x14000000: 270, // eu
-       0x1400006d: 271, // eu-ES
-       0x14100000: 272, // ewo
-       0x14100051: 273, // ewo-CM
-       0x14300000: 274, // fa
-       0x14300023: 275, // fa-AF
-       0x1430009b: 276, // fa-IR
-       0x14900000: 277, // ff
-       0x14900051: 278, // ff-CM
-       0x14900083: 279, // ff-GN
-       0x149000c8: 280, // ff-MR
-       0x14900113: 281, // ff-SN
-       0x14c00000: 282, // fi
-       0x14c00071: 283, // fi-FI
-       0x14e00000: 284, // fil
-       0x14e000e6: 285, // fil-PH
-       0x15300000: 286, // fo
-       0x15300062: 287, // fo-DK
-       0x15300075: 288, // fo-FO
-       0x15900000: 289, // fr
-       0x15900035: 290, // fr-BE
-       0x15900036: 291, // fr-BF
-       0x15900039: 292, // fr-BI
-       0x1590003a: 293, // fr-BJ
-       0x1590003b: 294, // fr-BL
-       0x15900048: 295, // fr-CA
-       0x1590004a: 296, // fr-CD
-       0x1590004b: 297, // fr-CF
-       0x1590004c: 298, // fr-CG
-       0x1590004d: 299, // fr-CH
-       0x1590004e: 300, // fr-CI
-       0x15900051: 301, // fr-CM
-       0x15900061: 302, // fr-DJ
-       0x15900066: 303, // fr-DZ
-       0x15900077: 304, // fr-FR
-       0x15900079: 305, // fr-GA
-       0x1590007d: 306, // fr-GF
-       0x15900083: 307, // fr-GN
-       0x15900084: 308, // fr-GP
-       0x15900085: 309, // fr-GQ
-       0x15900090: 310, // fr-HT
-       0x159000a7: 311, // fr-KM
-       0x159000b6: 312, // fr-LU
-       0x159000b9: 313, // fr-MA
-       0x159000ba: 314, // fr-MC
-       0x159000bd: 315, // fr-MF
-       0x159000be: 316, // fr-MG
-       0x159000c2: 317, // fr-ML
-       0x159000c7: 318, // fr-MQ
-       0x159000c8: 319, // fr-MR
-       0x159000cb: 320, // fr-MU
-       0x159000d2: 321, // fr-NC
-       0x159000d3: 322, // fr-NE
-       0x159000e4: 323, // fr-PF
-       0x159000e9: 324, // fr-PM
-       0x15900101: 325, // fr-RE
-       0x15900106: 326, // fr-RW
-       0x15900109: 327, // fr-SC
-       0x15900113: 328, // fr-SN
-       0x1590011b: 329, // fr-SY
-       0x1590011f: 330, // fr-TD
-       0x15900121: 331, // fr-TG
-       0x15900127: 332, // fr-TN
-       0x1590013e: 333, // fr-VU
-       0x1590013f: 334, // fr-WF
-       0x1590015e: 335, // fr-YT
-       0x16400000: 336, // fur
-       0x1640009d: 337, // fur-IT
-       0x16800000: 338, // fy
-       0x168000d8: 339, // fy-NL
-       0x16900000: 340, // ga
-       0x16900095: 341, // ga-IE
-       0x17800000: 342, // gd
-       0x1780007a: 343, // gd-GB
-       0x18a00000: 344, // gl
-       0x18a0006d: 345, // gl-ES
-       0x19c00000: 346, // gsw
-       0x19c0004d: 347, // gsw-CH
-       0x19c00077: 348, // gsw-FR
-       0x19c000b1: 349, // gsw-LI
-       0x19d00000: 350, // gu
-       0x19d00098: 351, // gu-IN
-       0x1a200000: 352, // guw
-       0x1a400000: 353, // guz
-       0x1a4000a3: 354, // guz-KE
-       0x1a500000: 355, // gv
-       0x1a500097: 356, // gv-IM
-       0x1ad00000: 357, // ha
-       0x1ad0007f: 358, // ha-GH
-       0x1ad000d3: 359, // ha-NE
-       0x1ad000d5: 360, // ha-NG
-       0x1b100000: 361, // haw
-       0x1b100134: 362, // haw-US
-       0x1b500000: 363, // he
-       0x1b500096: 364, // he-IL
-       0x1b700000: 365, // hi
-       0x1b700098: 366, // hi-IN
-       0x1ca00000: 367, // hr
-       0x1ca00032: 368, // hr-BA
-       0x1ca0008f: 369, // hr-HR
-       0x1cb00000: 370, // hsb
-       0x1cb0005f: 371, // hsb-DE
-       0x1ce00000: 372, // hu
-       0x1ce00091: 373, // hu-HU
-       0x1d000000: 374, // hy
-       0x1d000027: 375, // hy-AM
-       0x1da00000: 376, // id
-       0x1da00094: 377, // id-ID
-       0x1df00000: 378, // ig
-       0x1df000d5: 379, // ig-NG
-       0x1e200000: 380, // ii
-       0x1e200052: 381, // ii-CN
-       0x1f000000: 382, // is
-       0x1f00009c: 383, // is-IS
-       0x1f100000: 384, // it
-       0x1f10004d: 385, // it-CH
-       0x1f10009d: 386, // it-IT
-       0x1f100112: 387, // it-SM
-       0x1f200000: 388, // iu
-       0x1f800000: 389, // ja
-       0x1f8000a1: 390, // ja-JP
-       0x1fb00000: 391, // jbo
-       0x1ff00000: 392, // jgo
-       0x1ff00051: 393, // jgo-CM
-       0x20200000: 394, // jmc
-       0x2020012e: 395, // jmc-TZ
-       0x20600000: 396, // jv
-       0x20800000: 397, // ka
-       0x2080007c: 398, // ka-GE
-       0x20a00000: 399, // kab
-       0x20a00066: 400, // kab-DZ
-       0x20e00000: 401, // kaj
-       0x20f00000: 402, // kam
-       0x20f000a3: 403, // kam-KE
-       0x21700000: 404, // kcg
-       0x21b00000: 405, // kde
-       0x21b0012e: 406, // kde-TZ
-       0x21f00000: 407, // kea
-       0x21f00059: 408, // kea-CV
-       0x22c00000: 409, // khq
-       0x22c000c2: 410, // khq-ML
-       0x23100000: 411, // ki
-       0x231000a3: 412, // ki-KE
-       0x23a00000: 413, // kk
-       0x23a000ad: 414, // kk-KZ
-       0x23c00000: 415, // kkj
-       0x23c00051: 416, // kkj-CM
-       0x23d00000: 417, // kl
-       0x23d00081: 418, // kl-GL
-       0x23e00000: 419, // kln
-       0x23e000a3: 420, // kln-KE
-       0x24200000: 421, // km
-       0x242000a5: 422, // km-KH
-       0x24900000: 423, // kn
-       0x24900098: 424, // kn-IN
-       0x24b00000: 425, // ko
-       0x24b000a9: 426, // ko-KP
-       0x24b000aa: 427, // ko-KR
-       0x24d00000: 428, // kok
-       0x24d00098: 429, // kok-IN
-       0x26100000: 430, // ks
-       0x26100098: 431, // ks-IN
-       0x26200000: 432, // ksb
-       0x2620012e: 433, // ksb-TZ
-       0x26400000: 434, // ksf
-       0x26400051: 435, // ksf-CM
-       0x26500000: 436, // ksh
-       0x2650005f: 437, // ksh-DE
-       0x26b00000: 438, // ku
-       0x27800000: 439, // kw
-       0x2780007a: 440, // kw-GB
-       0x28100000: 441, // ky
-       0x281000a4: 442, // ky-KG
-       0x28800000: 443, // lag
-       0x2880012e: 444, // lag-TZ
-       0x28c00000: 445, // lb
-       0x28c000b6: 446, // lb-LU
-       0x29a00000: 447, // lg
-       0x29a00130: 448, // lg-UG
-       0x2a600000: 449, // lkt
-       0x2a600134: 450, // lkt-US
-       0x2ac00000: 451, // ln
-       0x2ac00029: 452, // ln-AO
-       0x2ac0004a: 453, // ln-CD
-       0x2ac0004b: 454, // ln-CF
-       0x2ac0004c: 455, // ln-CG
-       0x2af00000: 456, // lo
-       0x2af000ae: 457, // lo-LA
-       0x2b600000: 458, // lrc
-       0x2b60009a: 459, // lrc-IQ
-       0x2b60009b: 460, // lrc-IR
-       0x2b700000: 461, // lt
-       0x2b7000b5: 462, // lt-LT
-       0x2b900000: 463, // lu
-       0x2b90004a: 464, // lu-CD
-       0x2bb00000: 465, // luo
-       0x2bb000a3: 466, // luo-KE
-       0x2bc00000: 467, // luy
-       0x2bc000a3: 468, // luy-KE
-       0x2be00000: 469, // lv
-       0x2be000b7: 470, // lv-LV
-       0x2c800000: 471, // mas
-       0x2c8000a3: 472, // mas-KE
-       0x2c80012e: 473, // mas-TZ
-       0x2e000000: 474, // mer
-       0x2e0000a3: 475, // mer-KE
-       0x2e400000: 476, // mfe
-       0x2e4000cb: 477, // mfe-MU
-       0x2e800000: 478, // mg
-       0x2e8000be: 479, // mg-MG
-       0x2e900000: 480, // mgh
-       0x2e9000d0: 481, // mgh-MZ
-       0x2eb00000: 482, // mgo
-       0x2eb00051: 483, // mgo-CM
-       0x2f600000: 484, // mk
-       0x2f6000c1: 485, // mk-MK
-       0x2fb00000: 486, // ml
-       0x2fb00098: 487, // ml-IN
-       0x30200000: 488, // mn
-       0x302000c4: 489, // mn-MN
-       0x31200000: 490, // mr
-       0x31200098: 491, // mr-IN
-       0x31600000: 492, // ms
-       0x3160003d: 493, // ms-BN
-       0x316000cf: 494, // ms-MY
-       0x3160010c: 495, // ms-SG
-       0x31700000: 496, // mt
-       0x317000ca: 497, // mt-MT
-       0x31c00000: 498, // mua
-       0x31c00051: 499, // mua-CM
-       0x32800000: 500, // my
-       0x328000c3: 501, // my-MM
-       0x33100000: 502, // mzn
-       0x3310009b: 503, // mzn-IR
-       0x33800000: 504, // nah
-       0x33c00000: 505, // naq
-       0x33c000d1: 506, // naq-NA
-       0x33e00000: 507, // nb
-       0x33e000d9: 508, // nb-NO
-       0x33e0010f: 509, // nb-SJ
-       0x34500000: 510, // nd
-       0x34500163: 511, // nd-ZW
-       0x34700000: 512, // nds
-       0x3470005f: 513, // nds-DE
-       0x347000d8: 514, // nds-NL
-       0x34800000: 515, // ne
-       0x34800098: 516, // ne-IN
-       0x348000da: 517, // ne-NP
-       0x35e00000: 518, // nl
-       0x35e0002f: 519, // nl-AW
-       0x35e00035: 520, // nl-BE
-       0x35e0003f: 521, // nl-BQ
-       0x35e0005a: 522, // nl-CW
-       0x35e000d8: 523, // nl-NL
-       0x35e00115: 524, // nl-SR
-       0x35e0011a: 525, // nl-SX
-       0x35f00000: 526, // nmg
-       0x35f00051: 527, // nmg-CM
-       0x36100000: 528, // nn
-       0x361000d9: 529, // nn-NO
-       0x36300000: 530, // nnh
-       0x36300051: 531, // nnh-CM
-       0x36600000: 532, // no
-       0x36c00000: 533, // nqo
-       0x36d00000: 534, // nr
-       0x37100000: 535, // nso
-       0x37700000: 536, // nus
-       0x37700116: 537, // nus-SS
-       0x37e00000: 538, // ny
-       0x38000000: 539, // nyn
-       0x38000130: 540, // nyn-UG
-       0x38700000: 541, // om
-       0x3870006e: 542, // om-ET
-       0x387000a3: 543, // om-KE
-       0x38c00000: 544, // or
-       0x38c00098: 545, // or-IN
-       0x38f00000: 546, // os
-       0x38f0007c: 547, // os-GE
-       0x38f00105: 548, // os-RU
-       0x39400000: 549, // pa
-       0x39405000: 550, // pa-Arab
-       0x394050e7: 551, // pa-Arab-PK
-       0x3942f000: 552, // pa-Guru
-       0x3942f098: 553, // pa-Guru-IN
-       0x39800000: 554, // pap
-       0x3aa00000: 555, // pl
-       0x3aa000e8: 556, // pl-PL
-       0x3b400000: 557, // prg
-       0x3b400001: 558, // prg-001
-       0x3b500000: 559, // ps
-       0x3b500023: 560, // ps-AF
-       0x3b700000: 561, // pt
-       0x3b700029: 562, // pt-AO
-       0x3b700040: 563, // pt-BR
-       0x3b70004d: 564, // pt-CH
-       0x3b700059: 565, // pt-CV
-       0x3b700085: 566, // pt-GQ
-       0x3b70008a: 567, // pt-GW
-       0x3b7000b6: 568, // pt-LU
-       0x3b7000c5: 569, // pt-MO
-       0x3b7000d0: 570, // pt-MZ
-       0x3b7000ed: 571, // pt-PT
-       0x3b700117: 572, // pt-ST
-       0x3b700125: 573, // pt-TL
-       0x3bb00000: 574, // qu
-       0x3bb0003e: 575, // qu-BO
-       0x3bb00068: 576, // qu-EC
-       0x3bb000e3: 577, // qu-PE
-       0x3cb00000: 578, // rm
-       0x3cb0004d: 579, // rm-CH
-       0x3d000000: 580, // rn
-       0x3d000039: 581, // rn-BI
-       0x3d300000: 582, // ro
-       0x3d3000bb: 583, // ro-MD
-       0x3d300103: 584, // ro-RO
-       0x3d500000: 585, // rof
-       0x3d50012e: 586, // rof-TZ
-       0x3d900000: 587, // ru
-       0x3d900046: 588, // ru-BY
-       0x3d9000a4: 589, // ru-KG
-       0x3d9000ad: 590, // ru-KZ
-       0x3d9000bb: 591, // ru-MD
-       0x3d900105: 592, // ru-RU
-       0x3d90012f: 593, // ru-UA
-       0x3dc00000: 594, // rw
-       0x3dc00106: 595, // rw-RW
-       0x3dd00000: 596, // rwk
-       0x3dd0012e: 597, // rwk-TZ
-       0x3e200000: 598, // sah
-       0x3e200105: 599, // sah-RU
-       0x3e300000: 600, // saq
-       0x3e3000a3: 601, // saq-KE
-       0x3e900000: 602, // sbp
-       0x3e90012e: 603, // sbp-TZ
-       0x3f200000: 604, // sdh
-       0x3f300000: 605, // se
-       0x3f300071: 606, // se-FI
-       0x3f3000d9: 607, // se-NO
-       0x3f30010b: 608, // se-SE
-       0x3f500000: 609, // seh
-       0x3f5000d0: 610, // seh-MZ
-       0x3f700000: 611, // ses
-       0x3f7000c2: 612, // ses-ML
-       0x3f800000: 613, // sg
-       0x3f80004b: 614, // sg-CF
-       0x3fe00000: 615, // shi
-       0x3fe52000: 616, // shi-Latn
-       0x3fe520b9: 617, // shi-Latn-MA
-       0x3fed2000: 618, // shi-Tfng
-       0x3fed20b9: 619, // shi-Tfng-MA
-       0x40200000: 620, // si
-       0x402000b2: 621, // si-LK
-       0x40800000: 622, // sk
-       0x40800110: 623, // sk-SK
-       0x40c00000: 624, // sl
-       0x40c0010e: 625, // sl-SI
-       0x41200000: 626, // sma
-       0x41300000: 627, // smi
-       0x41400000: 628, // smj
-       0x41500000: 629, // smn
-       0x41500071: 630, // smn-FI
-       0x41800000: 631, // sms
-       0x41900000: 632, // sn
-       0x41900163: 633, // sn-ZW
-       0x41f00000: 634, // so
-       0x41f00061: 635, // so-DJ
-       0x41f0006e: 636, // so-ET
-       0x41f000a3: 637, // so-KE
-       0x41f00114: 638, // so-SO
-       0x42700000: 639, // sq
-       0x42700026: 640, // sq-AL
-       0x427000c1: 641, // sq-MK
-       0x4270014c: 642, // sq-XK
-       0x42800000: 643, // sr
-       0x4281e000: 644, // sr-Cyrl
-       0x4281e032: 645, // sr-Cyrl-BA
-       0x4281e0bc: 646, // sr-Cyrl-ME
-       0x4281e104: 647, // sr-Cyrl-RS
-       0x4281e14c: 648, // sr-Cyrl-XK
-       0x42852000: 649, // sr-Latn
-       0x42852032: 650, // sr-Latn-BA
-       0x428520bc: 651, // sr-Latn-ME
-       0x42852104: 652, // sr-Latn-RS
-       0x4285214c: 653, // sr-Latn-XK
-       0x42d00000: 654, // ss
-       0x43000000: 655, // ssy
-       0x43100000: 656, // st
-       0x43a00000: 657, // sv
-       0x43a00030: 658, // sv-AX
-       0x43a00071: 659, // sv-FI
-       0x43a0010b: 660, // sv-SE
-       0x43b00000: 661, // sw
-       0x43b0004a: 662, // sw-CD
-       0x43b000a3: 663, // sw-KE
-       0x43b0012e: 664, // sw-TZ
-       0x43b00130: 665, // sw-UG
-       0x44400000: 666, // syr
-       0x44600000: 667, // ta
-       0x44600098: 668, // ta-IN
-       0x446000b2: 669, // ta-LK
-       0x446000cf: 670, // ta-MY
-       0x4460010c: 671, // ta-SG
-       0x45700000: 672, // te
-       0x45700098: 673, // te-IN
-       0x45a00000: 674, // teo
-       0x45a000a3: 675, // teo-KE
-       0x45a00130: 676, // teo-UG
-       0x46100000: 677, // th
-       0x46100122: 678, // th-TH
-       0x46500000: 679, // ti
-       0x4650006c: 680, // ti-ER
-       0x4650006e: 681, // ti-ET
-       0x46700000: 682, // tig
-       0x46c00000: 683, // tk
-       0x46c00126: 684, // tk-TM
-       0x47600000: 685, // tn
-       0x47800000: 686, // to
-       0x47800128: 687, // to-TO
-       0x48000000: 688, // tr
-       0x4800005c: 689, // tr-CY
-       0x4800012a: 690, // tr-TR
-       0x48400000: 691, // ts
-       0x49a00000: 692, // twq
-       0x49a000d3: 693, // twq-NE
-       0x49f00000: 694, // tzm
-       0x49f000b9: 695, // tzm-MA
-       0x4a200000: 696, // ug
-       0x4a200052: 697, // ug-CN
-       0x4a400000: 698, // uk
-       0x4a40012f: 699, // uk-UA
-       0x4aa00000: 700, // ur
-       0x4aa00098: 701, // ur-IN
-       0x4aa000e7: 702, // ur-PK
-       0x4b200000: 703, // uz
-       0x4b205000: 704, // uz-Arab
-       0x4b205023: 705, // uz-Arab-AF
-       0x4b21e000: 706, // uz-Cyrl
-       0x4b21e136: 707, // uz-Cyrl-UZ
-       0x4b252000: 708, // uz-Latn
-       0x4b252136: 709, // uz-Latn-UZ
-       0x4b400000: 710, // vai
-       0x4b452000: 711, // vai-Latn
-       0x4b4520b3: 712, // vai-Latn-LR
-       0x4b4d9000: 713, // vai-Vaii
-       0x4b4d90b3: 714, // vai-Vaii-LR
-       0x4b600000: 715, // ve
-       0x4b900000: 716, // vi
-       0x4b90013d: 717, // vi-VN
-       0x4bf00000: 718, // vo
-       0x4bf00001: 719, // vo-001
-       0x4c200000: 720, // vun
-       0x4c20012e: 721, // vun-TZ
-       0x4c400000: 722, // wa
-       0x4c500000: 723, // wae
-       0x4c50004d: 724, // wae-CH
-       0x4db00000: 725, // wo
-       0x4e800000: 726, // xh
-       0x4f100000: 727, // xog
-       0x4f100130: 728, // xog-UG
-       0x4ff00000: 729, // yav
-       0x4ff00051: 730, // yav-CM
-       0x50800000: 731, // yi
-       0x50800001: 732, // yi-001
-       0x50e00000: 733, // yo
-       0x50e0003a: 734, // yo-BJ
-       0x50e000d5: 735, // yo-NG
-       0x51500000: 736, // yue
-       0x5150008c: 737, // yue-HK
-       0x51e00000: 738, // zgh
-       0x51e000b9: 739, // zgh-MA
-       0x51f00000: 740, // zh
-       0x51f34000: 741, // zh-Hans
-       0x51f34052: 742, // zh-Hans-CN
-       0x51f3408c: 743, // zh-Hans-HK
-       0x51f340c5: 744, // zh-Hans-MO
-       0x51f3410c: 745, // zh-Hans-SG
-       0x51f35000: 746, // zh-Hant
-       0x51f3508c: 747, // zh-Hant-HK
-       0x51f350c5: 748, // zh-Hant-MO
-       0x51f3512d: 749, // zh-Hant-TW
-       0x52400000: 750, // zu
-       0x52400160: 751, // zu-ZA
+       0x01600000: 3,   // af
+       0x016000d1: 4,   // af-NA
+       0x01600160: 5,   // af-ZA
+       0x01c00000: 6,   // agq
+       0x01c00051: 7,   // agq-CM
+       0x02100000: 8,   // ak
+       0x0210007f: 9,   // ak-GH
+       0x02700000: 10,  // am
+       0x0270006e: 11,  // am-ET
+       0x03a00000: 12,  // ar
+       0x03a00001: 13,  // ar-001
+       0x03a00022: 14,  // ar-AE
+       0x03a00038: 15,  // ar-BH
+       0x03a00061: 16,  // ar-DJ
+       0x03a00066: 17,  // ar-DZ
+       0x03a0006a: 18,  // ar-EG
+       0x03a0006b: 19,  // ar-EH
+       0x03a0006c: 20,  // ar-ER
+       0x03a00096: 21,  // ar-IL
+       0x03a0009a: 22,  // ar-IQ
+       0x03a000a0: 23,  // ar-JO
+       0x03a000a7: 24,  // ar-KM
+       0x03a000ab: 25,  // ar-KW
+       0x03a000af: 26,  // ar-LB
+       0x03a000b8: 27,  // ar-LY
+       0x03a000b9: 28,  // ar-MA
+       0x03a000c8: 29,  // ar-MR
+       0x03a000e0: 30,  // ar-OM
+       0x03a000ec: 31,  // ar-PS
+       0x03a000f2: 32,  // ar-QA
+       0x03a00107: 33,  // ar-SA
+       0x03a0010a: 34,  // ar-SD
+       0x03a00114: 35,  // ar-SO
+       0x03a00116: 36,  // ar-SS
+       0x03a0011b: 37,  // ar-SY
+       0x03a0011f: 38,  // ar-TD
+       0x03a00127: 39,  // ar-TN
+       0x03a0015d: 40,  // ar-YE
+       0x04000000: 41,  // ars
+       0x04300000: 42,  // as
+       0x04300098: 43,  // as-IN
+       0x04400000: 44,  // asa
+       0x0440012e: 45,  // asa-TZ
+       0x04800000: 46,  // ast
+       0x0480006d: 47,  // ast-ES
+       0x05800000: 48,  // az
+       0x0581e000: 49,  // az-Cyrl
+       0x0581e031: 50,  // az-Cyrl-AZ
+       0x05852000: 51,  // az-Latn
+       0x05852031: 52,  // az-Latn-AZ
+       0x05e00000: 53,  // bas
+       0x05e00051: 54,  // bas-CM
+       0x07100000: 55,  // be
+       0x07100046: 56,  // be-BY
+       0x07500000: 57,  // bem
+       0x07500161: 58,  // bem-ZM
+       0x07900000: 59,  // bez
+       0x0790012e: 60,  // bez-TZ
+       0x07e00000: 61,  // bg
+       0x07e00037: 62,  // bg-BG
+       0x08200000: 63,  // bh
+       0x0a000000: 64,  // bm
+       0x0a0000c2: 65,  // bm-ML
+       0x0a500000: 66,  // bn
+       0x0a500034: 67,  // bn-BD
+       0x0a500098: 68,  // bn-IN
+       0x0a900000: 69,  // bo
+       0x0a900052: 70,  // bo-CN
+       0x0a900098: 71,  // bo-IN
+       0x0b200000: 72,  // br
+       0x0b200077: 73,  // br-FR
+       0x0b500000: 74,  // brx
+       0x0b500098: 75,  // brx-IN
+       0x0b700000: 76,  // bs
+       0x0b71e000: 77,  // bs-Cyrl
+       0x0b71e032: 78,  // bs-Cyrl-BA
+       0x0b752000: 79,  // bs-Latn
+       0x0b752032: 80,  // bs-Latn-BA
+       0x0d700000: 81,  // ca
+       0x0d700021: 82,  // ca-AD
+       0x0d70006d: 83,  // ca-ES
+       0x0d700077: 84,  // ca-FR
+       0x0d70009d: 85,  // ca-IT
+       0x0dc00000: 86,  // ce
+       0x0dc00105: 87,  // ce-RU
+       0x0df00000: 88,  // cgg
+       0x0df00130: 89,  // cgg-UG
+       0x0e500000: 90,  // chr
+       0x0e500134: 91,  // chr-US
+       0x0e900000: 92,  // ckb
+       0x0e90009a: 93,  // ckb-IQ
+       0x0e90009b: 94,  // ckb-IR
+       0x0f900000: 95,  // cs
+       0x0f90005d: 96,  // cs-CZ
+       0x0fd00000: 97,  // cu
+       0x0fd00105: 98,  // cu-RU
+       0x0ff00000: 99,  // cy
+       0x0ff0007a: 100, // cy-GB
+       0x10000000: 101, // da
+       0x10000062: 102, // da-DK
+       0x10000081: 103, // da-GL
+       0x10700000: 104, // dav
+       0x107000a3: 105, // dav-KE
+       0x10c00000: 106, // de
+       0x10c0002d: 107, // de-AT
+       0x10c00035: 108, // de-BE
+       0x10c0004d: 109, // de-CH
+       0x10c0005f: 110, // de-DE
+       0x10c0009d: 111, // de-IT
+       0x10c000b1: 112, // de-LI
+       0x10c000b6: 113, // de-LU
+       0x11600000: 114, // dje
+       0x116000d3: 115, // dje-NE
+       0x11e00000: 116, // dsb
+       0x11e0005f: 117, // dsb-DE
+       0x12300000: 118, // dua
+       0x12300051: 119, // dua-CM
+       0x12700000: 120, // dv
+       0x12a00000: 121, // dyo
+       0x12a00113: 122, // dyo-SN
+       0x12c00000: 123, // dz
+       0x12c00042: 124, // dz-BT
+       0x12e00000: 125, // ebu
+       0x12e000a3: 126, // ebu-KE
+       0x12f00000: 127, // ee
+       0x12f0007f: 128, // ee-GH
+       0x12f00121: 129, // ee-TG
+       0x13500000: 130, // el
+       0x1350005c: 131, // el-CY
+       0x13500086: 132, // el-GR
+       0x13800000: 133, // en
+       0x13800001: 134, // en-001
+       0x1380001a: 135, // en-150
+       0x13800024: 136, // en-AG
+       0x13800025: 137, // en-AI
+       0x1380002c: 138, // en-AS
+       0x1380002d: 139, // en-AT
+       0x1380002e: 140, // en-AU
+       0x13800033: 141, // en-BB
+       0x13800035: 142, // en-BE
+       0x13800039: 143, // en-BI
+       0x1380003c: 144, // en-BM
+       0x13800041: 145, // en-BS
+       0x13800045: 146, // en-BW
+       0x13800047: 147, // en-BZ
+       0x13800048: 148, // en-CA
+       0x13800049: 149, // en-CC
+       0x1380004d: 150, // en-CH
+       0x1380004f: 151, // en-CK
+       0x13800051: 152, // en-CM
+       0x1380005b: 153, // en-CX
+       0x1380005c: 154, // en-CY
+       0x1380005f: 155, // en-DE
+       0x13800060: 156, // en-DG
+       0x13800062: 157, // en-DK
+       0x13800063: 158, // en-DM
+       0x1380006c: 159, // en-ER
+       0x13800071: 160, // en-FI
+       0x13800072: 161, // en-FJ
+       0x13800073: 162, // en-FK
+       0x13800074: 163, // en-FM
+       0x1380007a: 164, // en-GB
+       0x1380007b: 165, // en-GD
+       0x1380007e: 166, // en-GG
+       0x1380007f: 167, // en-GH
+       0x13800080: 168, // en-GI
+       0x13800082: 169, // en-GM
+       0x13800089: 170, // en-GU
+       0x1380008b: 171, // en-GY
+       0x1380008c: 172, // en-HK
+       0x13800095: 173, // en-IE
+       0x13800096: 174, // en-IL
+       0x13800097: 175, // en-IM
+       0x13800098: 176, // en-IN
+       0x13800099: 177, // en-IO
+       0x1380009e: 178, // en-JE
+       0x1380009f: 179, // en-JM
+       0x138000a3: 180, // en-KE
+       0x138000a6: 181, // en-KI
+       0x138000a8: 182, // en-KN
+       0x138000ac: 183, // en-KY
+       0x138000b0: 184, // en-LC
+       0x138000b3: 185, // en-LR
+       0x138000b4: 186, // en-LS
+       0x138000be: 187, // en-MG
+       0x138000bf: 188, // en-MH
+       0x138000c5: 189, // en-MO
+       0x138000c6: 190, // en-MP
+       0x138000c9: 191, // en-MS
+       0x138000ca: 192, // en-MT
+       0x138000cb: 193, // en-MU
+       0x138000cd: 194, // en-MW
+       0x138000cf: 195, // en-MY
+       0x138000d1: 196, // en-NA
+       0x138000d4: 197, // en-NF
+       0x138000d5: 198, // en-NG
+       0x138000d8: 199, // en-NL
+       0x138000dc: 200, // en-NR
+       0x138000de: 201, // en-NU
+       0x138000df: 202, // en-NZ
+       0x138000e5: 203, // en-PG
+       0x138000e6: 204, // en-PH
+       0x138000e7: 205, // en-PK
+       0x138000ea: 206, // en-PN
+       0x138000eb: 207, // en-PR
+       0x138000ef: 208, // en-PW
+       0x13800106: 209, // en-RW
+       0x13800108: 210, // en-SB
+       0x13800109: 211, // en-SC
+       0x1380010a: 212, // en-SD
+       0x1380010b: 213, // en-SE
+       0x1380010c: 214, // en-SG
+       0x1380010d: 215, // en-SH
+       0x1380010e: 216, // en-SI
+       0x13800111: 217, // en-SL
+       0x13800116: 218, // en-SS
+       0x1380011a: 219, // en-SX
+       0x1380011c: 220, // en-SZ
+       0x1380011e: 221, // en-TC
+       0x13800124: 222, // en-TK
+       0x13800128: 223, // en-TO
+       0x1380012b: 224, // en-TT
+       0x1380012c: 225, // en-TV
+       0x1380012e: 226, // en-TZ
+       0x13800130: 227, // en-UG
+       0x13800132: 228, // en-UM
+       0x13800134: 229, // en-US
+       0x13800138: 230, // en-VC
+       0x1380013b: 231, // en-VG
+       0x1380013c: 232, // en-VI
+       0x1380013e: 233, // en-VU
+       0x13800141: 234, // en-WS
+       0x13800160: 235, // en-ZA
+       0x13800161: 236, // en-ZM
+       0x13800163: 237, // en-ZW
+       0x13b00000: 238, // eo
+       0x13b00001: 239, // eo-001
+       0x13d00000: 240, // es
+       0x13d0001e: 241, // es-419
+       0x13d0002b: 242, // es-AR
+       0x13d0003e: 243, // es-BO
+       0x13d00040: 244, // es-BR
+       0x13d00047: 245, // es-BZ
+       0x13d00050: 246, // es-CL
+       0x13d00053: 247, // es-CO
+       0x13d00055: 248, // es-CR
+       0x13d00058: 249, // es-CU
+       0x13d00064: 250, // es-DO
+       0x13d00067: 251, // es-EA
+       0x13d00068: 252, // es-EC
+       0x13d0006d: 253, // es-ES
+       0x13d00085: 254, // es-GQ
+       0x13d00088: 255, // es-GT
+       0x13d0008e: 256, // es-HN
+       0x13d00093: 257, // es-IC
+       0x13d000ce: 258, // es-MX
+       0x13d000d7: 259, // es-NI
+       0x13d000e1: 260, // es-PA
+       0x13d000e3: 261, // es-PE
+       0x13d000e6: 262, // es-PH
+       0x13d000eb: 263, // es-PR
+       0x13d000f0: 264, // es-PY
+       0x13d00119: 265, // es-SV
+       0x13d00134: 266, // es-US
+       0x13d00135: 267, // es-UY
+       0x13d0013a: 268, // es-VE
+       0x13f00000: 269, // et
+       0x13f00069: 270, // et-EE
+       0x14400000: 271, // eu
+       0x1440006d: 272, // eu-ES
+       0x14500000: 273, // ewo
+       0x14500051: 274, // ewo-CM
+       0x14700000: 275, // fa
+       0x14700023: 276, // fa-AF
+       0x1470009b: 277, // fa-IR
+       0x14d00000: 278, // ff
+       0x14d00051: 279, // ff-CM
+       0x14d00083: 280, // ff-GN
+       0x14d000c8: 281, // ff-MR
+       0x14d00113: 282, // ff-SN
+       0x15000000: 283, // fi
+       0x15000071: 284, // fi-FI
+       0x15200000: 285, // fil
+       0x152000e6: 286, // fil-PH
+       0x15700000: 287, // fo
+       0x15700062: 288, // fo-DK
+       0x15700075: 289, // fo-FO
+       0x15d00000: 290, // fr
+       0x15d00035: 291, // fr-BE
+       0x15d00036: 292, // fr-BF
+       0x15d00039: 293, // fr-BI
+       0x15d0003a: 294, // fr-BJ
+       0x15d0003b: 295, // fr-BL
+       0x15d00048: 296, // fr-CA
+       0x15d0004a: 297, // fr-CD
+       0x15d0004b: 298, // fr-CF
+       0x15d0004c: 299, // fr-CG
+       0x15d0004d: 300, // fr-CH
+       0x15d0004e: 301, // fr-CI
+       0x15d00051: 302, // fr-CM
+       0x15d00061: 303, // fr-DJ
+       0x15d00066: 304, // fr-DZ
+       0x15d00077: 305, // fr-FR
+       0x15d00079: 306, // fr-GA
+       0x15d0007d: 307, // fr-GF
+       0x15d00083: 308, // fr-GN
+       0x15d00084: 309, // fr-GP
+       0x15d00085: 310, // fr-GQ
+       0x15d00090: 311, // fr-HT
+       0x15d000a7: 312, // fr-KM
+       0x15d000b6: 313, // fr-LU
+       0x15d000b9: 314, // fr-MA
+       0x15d000ba: 315, // fr-MC
+       0x15d000bd: 316, // fr-MF
+       0x15d000be: 317, // fr-MG
+       0x15d000c2: 318, // fr-ML
+       0x15d000c7: 319, // fr-MQ
+       0x15d000c8: 320, // fr-MR
+       0x15d000cb: 321, // fr-MU
+       0x15d000d2: 322, // fr-NC
+       0x15d000d3: 323, // fr-NE
+       0x15d000e4: 324, // fr-PF
+       0x15d000e9: 325, // fr-PM
+       0x15d00101: 326, // fr-RE
+       0x15d00106: 327, // fr-RW
+       0x15d00109: 328, // fr-SC
+       0x15d00113: 329, // fr-SN
+       0x15d0011b: 330, // fr-SY
+       0x15d0011f: 331, // fr-TD
+       0x15d00121: 332, // fr-TG
+       0x15d00127: 333, // fr-TN
+       0x15d0013e: 334, // fr-VU
+       0x15d0013f: 335, // fr-WF
+       0x15d0015e: 336, // fr-YT
+       0x16800000: 337, // fur
+       0x1680009d: 338, // fur-IT
+       0x16c00000: 339, // fy
+       0x16c000d8: 340, // fy-NL
+       0x16d00000: 341, // ga
+       0x16d00095: 342, // ga-IE
+       0x17c00000: 343, // gd
+       0x17c0007a: 344, // gd-GB
+       0x18e00000: 345, // gl
+       0x18e0006d: 346, // gl-ES
+       0x1a100000: 347, // gsw
+       0x1a10004d: 348, // gsw-CH
+       0x1a100077: 349, // gsw-FR
+       0x1a1000b1: 350, // gsw-LI
+       0x1a200000: 351, // gu
+       0x1a200098: 352, // gu-IN
+       0x1a700000: 353, // guw
+       0x1a900000: 354, // guz
+       0x1a9000a3: 355, // guz-KE
+       0x1aa00000: 356, // gv
+       0x1aa00097: 357, // gv-IM
+       0x1b200000: 358, // ha
+       0x1b20007f: 359, // ha-GH
+       0x1b2000d3: 360, // ha-NE
+       0x1b2000d5: 361, // ha-NG
+       0x1b600000: 362, // haw
+       0x1b600134: 363, // haw-US
+       0x1ba00000: 364, // he
+       0x1ba00096: 365, // he-IL
+       0x1bc00000: 366, // hi
+       0x1bc00098: 367, // hi-IN
+       0x1cf00000: 368, // hr
+       0x1cf00032: 369, // hr-BA
+       0x1cf0008f: 370, // hr-HR
+       0x1d000000: 371, // hsb
+       0x1d00005f: 372, // hsb-DE
+       0x1d300000: 373, // hu
+       0x1d300091: 374, // hu-HU
+       0x1d500000: 375, // hy
+       0x1d500027: 376, // hy-AM
+       0x1df00000: 377, // id
+       0x1df00094: 378, // id-ID
+       0x1e500000: 379, // ig
+       0x1e5000d5: 380, // ig-NG
+       0x1e800000: 381, // ii
+       0x1e800052: 382, // ii-CN
+       0x1f600000: 383, // is
+       0x1f60009c: 384, // is-IS
+       0x1f700000: 385, // it
+       0x1f70004d: 386, // it-CH
+       0x1f70009d: 387, // it-IT
+       0x1f700112: 388, // it-SM
+       0x1f700137: 389, // it-VA
+       0x1f800000: 390, // iu
+       0x1fe00000: 391, // ja
+       0x1fe000a1: 392, // ja-JP
+       0x20100000: 393, // jbo
+       0x20500000: 394, // jgo
+       0x20500051: 395, // jgo-CM
+       0x20800000: 396, // jmc
+       0x2080012e: 397, // jmc-TZ
+       0x20c00000: 398, // jv
+       0x20e00000: 399, // ka
+       0x20e0007c: 400, // ka-GE
+       0x21000000: 401, // kab
+       0x21000066: 402, // kab-DZ
+       0x21400000: 403, // kaj
+       0x21500000: 404, // kam
+       0x215000a3: 405, // kam-KE
+       0x21d00000: 406, // kcg
+       0x22100000: 407, // kde
+       0x2210012e: 408, // kde-TZ
+       0x22500000: 409, // kea
+       0x22500059: 410, // kea-CV
+       0x23200000: 411, // khq
+       0x232000c2: 412, // khq-ML
+       0x23700000: 413, // ki
+       0x237000a3: 414, // ki-KE
+       0x24000000: 415, // kk
+       0x240000ad: 416, // kk-KZ
+       0x24200000: 417, // kkj
+       0x24200051: 418, // kkj-CM
+       0x24300000: 419, // kl
+       0x24300081: 420, // kl-GL
+       0x24400000: 421, // kln
+       0x244000a3: 422, // kln-KE
+       0x24800000: 423, // km
+       0x248000a5: 424, // km-KH
+       0x24f00000: 425, // kn
+       0x24f00098: 426, // kn-IN
+       0x25200000: 427, // ko
+       0x252000a9: 428, // ko-KP
+       0x252000aa: 429, // ko-KR
+       0x25400000: 430, // kok
+       0x25400098: 431, // kok-IN
+       0x26800000: 432, // ks
+       0x26800098: 433, // ks-IN
+       0x26900000: 434, // ksb
+       0x2690012e: 435, // ksb-TZ
+       0x26b00000: 436, // ksf
+       0x26b00051: 437, // ksf-CM
+       0x26c00000: 438, // ksh
+       0x26c0005f: 439, // ksh-DE
+       0x27200000: 440, // ku
+       0x27f00000: 441, // kw
+       0x27f0007a: 442, // kw-GB
+       0x28800000: 443, // ky
+       0x288000a4: 444, // ky-KG
+       0x28f00000: 445, // lag
+       0x28f0012e: 446, // lag-TZ
+       0x29300000: 447, // lb
+       0x293000b6: 448, // lb-LU
+       0x2a100000: 449, // lg
+       0x2a100130: 450, // lg-UG
+       0x2ad00000: 451, // lkt
+       0x2ad00134: 452, // lkt-US
+       0x2b300000: 453, // ln
+       0x2b300029: 454, // ln-AO
+       0x2b30004a: 455, // ln-CD
+       0x2b30004b: 456, // ln-CF
+       0x2b30004c: 457, // ln-CG
+       0x2b600000: 458, // lo
+       0x2b6000ae: 459, // lo-LA
+       0x2bd00000: 460, // lrc
+       0x2bd0009a: 461, // lrc-IQ
+       0x2bd0009b: 462, // lrc-IR
+       0x2be00000: 463, // lt
+       0x2be000b5: 464, // lt-LT
+       0x2c000000: 465, // lu
+       0x2c00004a: 466, // lu-CD
+       0x2c200000: 467, // luo
+       0x2c2000a3: 468, // luo-KE
+       0x2c300000: 469, // luy
+       0x2c3000a3: 470, // luy-KE
+       0x2c500000: 471, // lv
+       0x2c5000b7: 472, // lv-LV
+       0x2cf00000: 473, // mas
+       0x2cf000a3: 474, // mas-KE
+       0x2cf0012e: 475, // mas-TZ
+       0x2e700000: 476, // mer
+       0x2e7000a3: 477, // mer-KE
+       0x2eb00000: 478, // mfe
+       0x2eb000cb: 479, // mfe-MU
+       0x2ef00000: 480, // mg
+       0x2ef000be: 481, // mg-MG
+       0x2f000000: 482, // mgh
+       0x2f0000d0: 483, // mgh-MZ
+       0x2f200000: 484, // mgo
+       0x2f200051: 485, // mgo-CM
+       0x2fd00000: 486, // mk
+       0x2fd000c1: 487, // mk-MK
+       0x30200000: 488, // ml
+       0x30200098: 489, // ml-IN
+       0x30900000: 490, // mn
+       0x309000c4: 491, // mn-MN
+       0x31900000: 492, // mr
+       0x31900098: 493, // mr-IN
+       0x31d00000: 494, // ms
+       0x31d0003d: 495, // ms-BN
+       0x31d000cf: 496, // ms-MY
+       0x31d0010c: 497, // ms-SG
+       0x31e00000: 498, // mt
+       0x31e000ca: 499, // mt-MT
+       0x32300000: 500, // mua
+       0x32300051: 501, // mua-CM
+       0x32f00000: 502, // my
+       0x32f000c3: 503, // my-MM
+       0x33800000: 504, // mzn
+       0x3380009b: 505, // mzn-IR
+       0x33f00000: 506, // nah
+       0x34300000: 507, // naq
+       0x343000d1: 508, // naq-NA
+       0x34500000: 509, // nb
+       0x345000d9: 510, // nb-NO
+       0x3450010f: 511, // nb-SJ
+       0x34c00000: 512, // nd
+       0x34c00163: 513, // nd-ZW
+       0x34e00000: 514, // nds
+       0x34e0005f: 515, // nds-DE
+       0x34e000d8: 516, // nds-NL
+       0x34f00000: 517, // ne
+       0x34f00098: 518, // ne-IN
+       0x34f000da: 519, // ne-NP
+       0x36500000: 520, // nl
+       0x3650002f: 521, // nl-AW
+       0x36500035: 522, // nl-BE
+       0x3650003f: 523, // nl-BQ
+       0x3650005a: 524, // nl-CW
+       0x365000d8: 525, // nl-NL
+       0x36500115: 526, // nl-SR
+       0x3650011a: 527, // nl-SX
+       0x36600000: 528, // nmg
+       0x36600051: 529, // nmg-CM
+       0x36800000: 530, // nn
+       0x368000d9: 531, // nn-NO
+       0x36a00000: 532, // nnh
+       0x36a00051: 533, // nnh-CM
+       0x36d00000: 534, // no
+       0x37300000: 535, // nqo
+       0x37400000: 536, // nr
+       0x37800000: 537, // nso
+       0x37e00000: 538, // nus
+       0x37e00116: 539, // nus-SS
+       0x38500000: 540, // ny
+       0x38700000: 541, // nyn
+       0x38700130: 542, // nyn-UG
+       0x38e00000: 543, // om
+       0x38e0006e: 544, // om-ET
+       0x38e000a3: 545, // om-KE
+       0x39300000: 546, // or
+       0x39300098: 547, // or-IN
+       0x39600000: 548, // os
+       0x3960007c: 549, // os-GE
+       0x39600105: 550, // os-RU
+       0x39b00000: 551, // pa
+       0x39b05000: 552, // pa-Arab
+       0x39b050e7: 553, // pa-Arab-PK
+       0x39b2f000: 554, // pa-Guru
+       0x39b2f098: 555, // pa-Guru-IN
+       0x39f00000: 556, // pap
+       0x3b100000: 557, // pl
+       0x3b1000e8: 558, // pl-PL
+       0x3bb00000: 559, // prg
+       0x3bb00001: 560, // prg-001
+       0x3bc00000: 561, // ps
+       0x3bc00023: 562, // ps-AF
+       0x3be00000: 563, // pt
+       0x3be00029: 564, // pt-AO
+       0x3be00040: 565, // pt-BR
+       0x3be0004d: 566, // pt-CH
+       0x3be00059: 567, // pt-CV
+       0x3be00085: 568, // pt-GQ
+       0x3be0008a: 569, // pt-GW
+       0x3be000b6: 570, // pt-LU
+       0x3be000c5: 571, // pt-MO
+       0x3be000d0: 572, // pt-MZ
+       0x3be000ed: 573, // pt-PT
+       0x3be00117: 574, // pt-ST
+       0x3be00125: 575, // pt-TL
+       0x3c200000: 576, // qu
+       0x3c20003e: 577, // qu-BO
+       0x3c200068: 578, // qu-EC
+       0x3c2000e3: 579, // qu-PE
+       0x3d200000: 580, // rm
+       0x3d20004d: 581, // rm-CH
+       0x3d700000: 582, // rn
+       0x3d700039: 583, // rn-BI
+       0x3da00000: 584, // ro
+       0x3da000bb: 585, // ro-MD
+       0x3da00103: 586, // ro-RO
+       0x3dc00000: 587, // rof
+       0x3dc0012e: 588, // rof-TZ
+       0x3e000000: 589, // ru
+       0x3e000046: 590, // ru-BY
+       0x3e0000a4: 591, // ru-KG
+       0x3e0000ad: 592, // ru-KZ
+       0x3e0000bb: 593, // ru-MD
+       0x3e000105: 594, // ru-RU
+       0x3e00012f: 595, // ru-UA
+       0x3e300000: 596, // rw
+       0x3e300106: 597, // rw-RW
+       0x3e400000: 598, // rwk
+       0x3e40012e: 599, // rwk-TZ
+       0x3e900000: 600, // sah
+       0x3e900105: 601, // sah-RU
+       0x3ea00000: 602, // saq
+       0x3ea000a3: 603, // saq-KE
+       0x3f100000: 604, // sbp
+       0x3f10012e: 605, // sbp-TZ
+       0x3fa00000: 606, // sdh
+       0x3fb00000: 607, // se
+       0x3fb00071: 608, // se-FI
+       0x3fb000d9: 609, // se-NO
+       0x3fb0010b: 610, // se-SE
+       0x3fd00000: 611, // seh
+       0x3fd000d0: 612, // seh-MZ
+       0x3ff00000: 613, // ses
+       0x3ff000c2: 614, // ses-ML
+       0x40000000: 615, // sg
+       0x4000004b: 616, // sg-CF
+       0x40600000: 617, // shi
+       0x40652000: 618, // shi-Latn
+       0x406520b9: 619, // shi-Latn-MA
+       0x406d2000: 620, // shi-Tfng
+       0x406d20b9: 621, // shi-Tfng-MA
+       0x40a00000: 622, // si
+       0x40a000b2: 623, // si-LK
+       0x41000000: 624, // sk
+       0x41000110: 625, // sk-SK
+       0x41400000: 626, // sl
+       0x4140010e: 627, // sl-SI
+       0x41a00000: 628, // sma
+       0x41b00000: 629, // smi
+       0x41c00000: 630, // smj
+       0x41d00000: 631, // smn
+       0x41d00071: 632, // smn-FI
+       0x42000000: 633, // sms
+       0x42100000: 634, // sn
+       0x42100163: 635, // sn-ZW
+       0x42700000: 636, // so
+       0x42700061: 637, // so-DJ
+       0x4270006e: 638, // so-ET
+       0x427000a3: 639, // so-KE
+       0x42700114: 640, // so-SO
+       0x42f00000: 641, // sq
+       0x42f00026: 642, // sq-AL
+       0x42f000c1: 643, // sq-MK
+       0x42f0014c: 644, // sq-XK
+       0x43000000: 645, // sr
+       0x4301e000: 646, // sr-Cyrl
+       0x4301e032: 647, // sr-Cyrl-BA
+       0x4301e0bc: 648, // sr-Cyrl-ME
+       0x4301e104: 649, // sr-Cyrl-RS
+       0x4301e14c: 650, // sr-Cyrl-XK
+       0x43052000: 651, // sr-Latn
+       0x43052032: 652, // sr-Latn-BA
+       0x430520bc: 653, // sr-Latn-ME
+       0x43052104: 654, // sr-Latn-RS
+       0x4305214c: 655, // sr-Latn-XK
+       0x43500000: 656, // ss
+       0x43800000: 657, // ssy
+       0x43900000: 658, // st
+       0x44200000: 659, // sv
+       0x44200030: 660, // sv-AX
+       0x44200071: 661, // sv-FI
+       0x4420010b: 662, // sv-SE
+       0x44300000: 663, // sw
+       0x4430004a: 664, // sw-CD
+       0x443000a3: 665, // sw-KE
+       0x4430012e: 666, // sw-TZ
+       0x44300130: 667, // sw-UG
+       0x44c00000: 668, // syr
+       0x44e00000: 669, // ta
+       0x44e00098: 670, // ta-IN
+       0x44e000b2: 671, // ta-LK
+       0x44e000cf: 672, // ta-MY
+       0x44e0010c: 673, // ta-SG
+       0x45f00000: 674, // te
+       0x45f00098: 675, // te-IN
+       0x46200000: 676, // teo
+       0x462000a3: 677, // teo-KE
+       0x46200130: 678, // teo-UG
+       0x46900000: 679, // th
+       0x46900122: 680, // th-TH
+       0x46d00000: 681, // ti
+       0x46d0006c: 682, // ti-ER
+       0x46d0006e: 683, // ti-ET
+       0x46f00000: 684, // tig
+       0x47400000: 685, // tk
+       0x47400126: 686, // tk-TM
+       0x47e00000: 687, // tn
+       0x48000000: 688, // to
+       0x48000128: 689, // to-TO
+       0x48800000: 690, // tr
+       0x4880005c: 691, // tr-CY
+       0x4880012a: 692, // tr-TR
+       0x48c00000: 693, // ts
+       0x4a200000: 694, // twq
+       0x4a2000d3: 695, // twq-NE
+       0x4a700000: 696, // tzm
+       0x4a7000b9: 697, // tzm-MA
+       0x4aa00000: 698, // ug
+       0x4aa00052: 699, // ug-CN
+       0x4ac00000: 700, // uk
+       0x4ac0012f: 701, // uk-UA
+       0x4b200000: 702, // ur
+       0x4b200098: 703, // ur-IN
+       0x4b2000e7: 704, // ur-PK
+       0x4ba00000: 705, // uz
+       0x4ba05000: 706, // uz-Arab
+       0x4ba05023: 707, // uz-Arab-AF
+       0x4ba1e000: 708, // uz-Cyrl
+       0x4ba1e136: 709, // uz-Cyrl-UZ
+       0x4ba52000: 710, // uz-Latn
+       0x4ba52136: 711, // uz-Latn-UZ
+       0x4bc00000: 712, // vai
+       0x4bc52000: 713, // vai-Latn
+       0x4bc520b3: 714, // vai-Latn-LR
+       0x4bcd9000: 715, // vai-Vaii
+       0x4bcd90b3: 716, // vai-Vaii-LR
+       0x4be00000: 717, // ve
+       0x4c100000: 718, // vi
+       0x4c10013d: 719, // vi-VN
+       0x4c700000: 720, // vo
+       0x4c700001: 721, // vo-001
+       0x4ca00000: 722, // vun
+       0x4ca0012e: 723, // vun-TZ
+       0x4cc00000: 724, // wa
+       0x4cd00000: 725, // wae
+       0x4cd0004d: 726, // wae-CH
+       0x4e300000: 727, // wo
+       0x4f000000: 728, // xh
+       0x4f900000: 729, // xog
+       0x4f900130: 730, // xog-UG
+       0x50700000: 731, // yav
+       0x50700051: 732, // yav-CM
+       0x51000000: 733, // yi
+       0x51000001: 734, // yi-001
+       0x51600000: 735, // yo
+       0x5160003a: 736, // yo-BJ
+       0x516000d5: 737, // yo-NG
+       0x51d00000: 738, // yue
+       0x51d0008c: 739, // yue-HK
+       0x52600000: 740, // zgh
+       0x526000b9: 741, // zgh-MA
+       0x52700000: 742, // zh
+       0x52734000: 743, // zh-Hans
+       0x52734052: 744, // zh-Hans-CN
+       0x5273408c: 745, // zh-Hans-HK
+       0x527340c5: 746, // zh-Hans-MO
+       0x5273410c: 747, // zh-Hans-SG
+       0x52735000: 748, // zh-Hant
+       0x5273508c: 749, // zh-Hant-HK
+       0x527350c5: 750, // zh-Hant-MO
+       0x5273512d: 751, // zh-Hant-TW
+       0x52c00000: 752, // zu
+       0x52c00160: 753, // zu-ZA
 }
 
-// Total table size 4580 bytes (4KiB); checksum: A7F72A2A
+// Total table size 4592 bytes (4KiB); checksum: C25F8AFF
diff --git a/vendor/golang.org/x/text/language/maketables.go b/vendor/golang.org/x/text/language/maketables.go
deleted file mode 100644 (file)
index 107f992..0000000
+++ /dev/null
@@ -1,1648 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore
-
-// Language tag table generator.
-// Data read from the web.
-
-package main
-
-import (
-       "bufio"
-       "flag"
-       "fmt"
-       "io"
-       "io/ioutil"
-       "log"
-       "math"
-       "reflect"
-       "regexp"
-       "sort"
-       "strconv"
-       "strings"
-
-       "golang.org/x/text/internal/gen"
-       "golang.org/x/text/internal/tag"
-       "golang.org/x/text/unicode/cldr"
-)
-
-var (
-       test = flag.Bool("test",
-               false,
-               "test existing tables; can be used to compare web data with package data.")
-       outputFile = flag.String("output",
-               "tables.go",
-               "output file for generated tables")
-)
-
-var comment = []string{
-       `
-lang holds an alphabetically sorted list of ISO-639 language identifiers.
-All entries are 4 bytes. The index of the identifier (divided by 4) is the language tag.
-For 2-byte language identifiers, the two successive bytes have the following meaning:
-    - if the first letter of the 2- and 3-letter ISO codes are the same:
-      the second and third letter of the 3-letter ISO code.
-    - otherwise: a 0 and a by 2 bits right-shifted index into altLangISO3.
-For 3-byte language identifiers the 4th byte is 0.`,
-       `
-langNoIndex is a bit vector of all 3-letter language codes that are not used as an index
-in lookup tables. The language ids for these language codes are derived directly
-from the letters and are not consecutive.`,
-       `
-altLangISO3 holds an alphabetically sorted list of 3-letter language code alternatives
-to 2-letter language codes that cannot be derived using the method described above.
-Each 3-letter code is followed by its 1-byte langID.`,
-       `
-altLangIndex is used to convert indexes in altLangISO3 to langIDs.`,
-       `
-langAliasMap maps langIDs to their suggested replacements.`,
-       `
-script is an alphabetically sorted list of ISO 15924 codes. The index
-of the script in the string, divided by 4, is the internal scriptID.`,
-       `
-isoRegionOffset needs to be added to the index of regionISO to obtain the regionID
-for 2-letter ISO codes. (The first isoRegionOffset regionIDs are reserved for
-the UN.M49 codes used for groups.)`,
-       `
-regionISO holds a list of alphabetically sorted 2-letter ISO region codes.
-Each 2-letter codes is followed by two bytes with the following meaning:
-    - [A-Z}{2}: the first letter of the 2-letter code plus these two 
-                letters form the 3-letter ISO code.
-    - 0, n:     index into altRegionISO3.`,
-       `
-regionTypes defines the status of a region for various standards.`,
-       `
-m49 maps regionIDs to UN.M49 codes. The first isoRegionOffset entries are
-codes indicating collections of regions.`,
-       `
-m49Index gives indexes into fromM49 based on the three most significant bits
-of a 10-bit UN.M49 code. To search an UN.M49 code in fromM49, search in
-   fromM49[m49Index[msb39(code)]:m49Index[msb3(code)+1]]
-for an entry where the first 7 bits match the 7 lsb of the UN.M49 code.
-The region code is stored in the 9 lsb of the indexed value.`,
-       `
-fromM49 contains entries to map UN.M49 codes to regions. See m49Index for details.`,
-       `
-altRegionISO3 holds a list of 3-letter region codes that cannot be
-mapped to 2-letter codes using the default algorithm. This is a short list.`,
-       `
-altRegionIDs holds a list of regionIDs the positions of which match those
-of the 3-letter ISO codes in altRegionISO3.`,
-       `
-variantNumSpecialized is the number of specialized variants in variants.`,
-       `
-suppressScript is an index from langID to the dominant script for that language,
-if it exists.  If a script is given, it should be suppressed from the language tag.`,
-       `
-likelyLang is a lookup table, indexed by langID, for the most likely
-scripts and regions given incomplete information. If more entries exist for a
-given language, region and script are the index and size respectively
-of the list in likelyLangList.`,
-       `
-likelyLangList holds lists info associated with likelyLang.`,
-       `
-likelyRegion is a lookup table, indexed by regionID, for the most likely
-languages and scripts given incomplete information. If more entries exist
-for a given regionID, lang and script are the index and size respectively
-of the list in likelyRegionList.
-TODO: exclude containers and user-definable regions from the list.`,
-       `
-likelyRegionList holds lists info associated with likelyRegion.`,
-       `
-likelyScript is a lookup table, indexed by scriptID, for the most likely
-languages and regions given a script.`,
-       `
-matchLang holds pairs of langIDs of base languages that are typically
-mutually intelligible. Each pair is associated with a confidence and
-whether the intelligibility goes one or both ways.`,
-       `
-matchScript holds pairs of scriptIDs where readers of one script
-can typically also read the other. Each is associated with a confidence.`,
-       `
-nRegionGroups is the number of region groups.`,
-       `
-regionInclusion maps region identifiers to sets of regions in regionInclusionBits,
-where each set holds all groupings that are directly connected in a region
-containment graph.`,
-       `
-regionInclusionBits is an array of bit vectors where every vector represents
-a set of region groupings.  These sets are used to compute the distance
-between two regions for the purpose of language matching.`,
-       `
-regionInclusionNext marks, for each entry in regionInclusionBits, the set of
-all groups that are reachable from the groups set in the respective entry.`,
-}
-
-// TODO: consider changing some of these structures to tries. This can reduce
-// memory, but may increase the need for memory allocations. This could be
-// mitigated if we can piggyback on language tags for common cases.
-
-func failOnError(e error) {
-       if e != nil {
-               log.Panic(e)
-       }
-}
-
-type setType int
-
-const (
-       Indexed setType = 1 + iota // all elements must be of same size
-       Linear
-)
-
-type stringSet struct {
-       s              []string
-       sorted, frozen bool
-
-       // We often need to update values after the creation of an index is completed.
-       // We include a convenience map for keeping track of this.
-       update map[string]string
-       typ    setType // used for checking.
-}
-
-func (ss *stringSet) clone() stringSet {
-       c := *ss
-       c.s = append([]string(nil), c.s...)
-       return c
-}
-
-func (ss *stringSet) setType(t setType) {
-       if ss.typ != t && ss.typ != 0 {
-               log.Panicf("type %d cannot be assigned as it was already %d", t, ss.typ)
-       }
-}
-
-// parse parses a whitespace-separated string and initializes ss with its
-// components.
-func (ss *stringSet) parse(s string) {
-       scan := bufio.NewScanner(strings.NewReader(s))
-       scan.Split(bufio.ScanWords)
-       for scan.Scan() {
-               ss.add(scan.Text())
-       }
-}
-
-func (ss *stringSet) assertChangeable() {
-       if ss.frozen {
-               log.Panic("attempt to modify a frozen stringSet")
-       }
-}
-
-func (ss *stringSet) add(s string) {
-       ss.assertChangeable()
-       ss.s = append(ss.s, s)
-       ss.sorted = ss.frozen
-}
-
-func (ss *stringSet) freeze() {
-       ss.compact()
-       ss.frozen = true
-}
-
-func (ss *stringSet) compact() {
-       if ss.sorted {
-               return
-       }
-       a := ss.s
-       sort.Strings(a)
-       k := 0
-       for i := 1; i < len(a); i++ {
-               if a[k] != a[i] {
-                       a[k+1] = a[i]
-                       k++
-               }
-       }
-       ss.s = a[:k+1]
-       ss.sorted = ss.frozen
-}
-
-type funcSorter struct {
-       fn func(a, b string) bool
-       sort.StringSlice
-}
-
-func (s funcSorter) Less(i, j int) bool {
-       return s.fn(s.StringSlice[i], s.StringSlice[j])
-}
-
-func (ss *stringSet) sortFunc(f func(a, b string) bool) {
-       ss.compact()
-       sort.Sort(funcSorter{f, sort.StringSlice(ss.s)})
-}
-
-func (ss *stringSet) remove(s string) {
-       ss.assertChangeable()
-       if i, ok := ss.find(s); ok {
-               copy(ss.s[i:], ss.s[i+1:])
-               ss.s = ss.s[:len(ss.s)-1]
-       }
-}
-
-func (ss *stringSet) replace(ol, nu string) {
-       ss.s[ss.index(ol)] = nu
-       ss.sorted = ss.frozen
-}
-
-func (ss *stringSet) index(s string) int {
-       ss.setType(Indexed)
-       i, ok := ss.find(s)
-       if !ok {
-               if i < len(ss.s) {
-                       log.Panicf("find: item %q is not in list. Closest match is %q.", s, ss.s[i])
-               }
-               log.Panicf("find: item %q is not in list", s)
-
-       }
-       return i
-}
-
-func (ss *stringSet) find(s string) (int, bool) {
-       ss.compact()
-       i := sort.SearchStrings(ss.s, s)
-       return i, i != len(ss.s) && ss.s[i] == s
-}
-
-func (ss *stringSet) slice() []string {
-       ss.compact()
-       return ss.s
-}
-
-func (ss *stringSet) updateLater(v, key string) {
-       if ss.update == nil {
-               ss.update = map[string]string{}
-       }
-       ss.update[v] = key
-}
-
-// join joins the string and ensures that all entries are of the same length.
-func (ss *stringSet) join() string {
-       ss.setType(Indexed)
-       n := len(ss.s[0])
-       for _, s := range ss.s {
-               if len(s) != n {
-                       log.Panicf("join: not all entries are of the same length: %q", s)
-               }
-       }
-       ss.s = append(ss.s, strings.Repeat("\xff", n))
-       return strings.Join(ss.s, "")
-}
-
-// ianaEntry holds information for an entry in the IANA Language Subtag Repository.
-// All types use the same entry.
-// See http://tools.ietf.org/html/bcp47#section-5.1 for a description of the various
-// fields.
-type ianaEntry struct {
-       typ            string
-       description    []string
-       scope          string
-       added          string
-       preferred      string
-       deprecated     string
-       suppressScript string
-       macro          string
-       prefix         []string
-}
-
-type builder struct {
-       w    *gen.CodeWriter
-       hw   io.Writer // MultiWriter for w and w.Hash
-       data *cldr.CLDR
-       supp *cldr.SupplementalData
-
-       // indices
-       locale      stringSet // common locales
-       lang        stringSet // canonical language ids (2 or 3 letter ISO codes) with data
-       langNoIndex stringSet // 3-letter ISO codes with no associated data
-       script      stringSet // 4-letter ISO codes
-       region      stringSet // 2-letter ISO or 3-digit UN M49 codes
-       variant     stringSet // 4-8-alphanumeric variant code.
-
-       // Region codes that are groups with their corresponding group IDs.
-       groups map[int]index
-
-       // langInfo
-       registry map[string]*ianaEntry
-}
-
-type index uint
-
-func newBuilder(w *gen.CodeWriter) *builder {
-       r := gen.OpenCLDRCoreZip()
-       defer r.Close()
-       d := &cldr.Decoder{}
-       data, err := d.DecodeZip(r)
-       failOnError(err)
-       b := builder{
-               w:    w,
-               hw:   io.MultiWriter(w, w.Hash),
-               data: data,
-               supp: data.Supplemental(),
-       }
-       b.parseRegistry()
-       return &b
-}
-
-func (b *builder) parseRegistry() {
-       r := gen.OpenIANAFile("assignments/language-subtag-registry")
-       defer r.Close()
-       b.registry = make(map[string]*ianaEntry)
-
-       scan := bufio.NewScanner(r)
-       scan.Split(bufio.ScanWords)
-       var record *ianaEntry
-       for more := scan.Scan(); more; {
-               key := scan.Text()
-               more = scan.Scan()
-               value := scan.Text()
-               switch key {
-               case "Type:":
-                       record = &ianaEntry{typ: value}
-               case "Subtag:", "Tag:":
-                       if s := strings.SplitN(value, "..", 2); len(s) > 1 {
-                               for a := s[0]; a <= s[1]; a = inc(a) {
-                                       b.addToRegistry(a, record)
-                               }
-                       } else {
-                               b.addToRegistry(value, record)
-                       }
-               case "Suppress-Script:":
-                       record.suppressScript = value
-               case "Added:":
-                       record.added = value
-               case "Deprecated:":
-                       record.deprecated = value
-               case "Macrolanguage:":
-                       record.macro = value
-               case "Preferred-Value:":
-                       record.preferred = value
-               case "Prefix:":
-                       record.prefix = append(record.prefix, value)
-               case "Scope:":
-                       record.scope = value
-               case "Description:":
-                       buf := []byte(value)
-                       for more = scan.Scan(); more; more = scan.Scan() {
-                               b := scan.Bytes()
-                               if b[0] == '%' || b[len(b)-1] == ':' {
-                                       break
-                               }
-                               buf = append(buf, ' ')
-                               buf = append(buf, b...)
-                       }
-                       record.description = append(record.description, string(buf))
-                       continue
-               default:
-                       continue
-               }
-               more = scan.Scan()
-       }
-       if scan.Err() != nil {
-               log.Panic(scan.Err())
-       }
-}
-
-func (b *builder) addToRegistry(key string, entry *ianaEntry) {
-       if info, ok := b.registry[key]; ok {
-               if info.typ != "language" || entry.typ != "extlang" {
-                       log.Fatalf("parseRegistry: tag %q already exists", key)
-               }
-       } else {
-               b.registry[key] = entry
-       }
-}
-
-var commentIndex = make(map[string]string)
-
-func init() {
-       for _, s := range comment {
-               key := strings.TrimSpace(strings.SplitN(s, " ", 2)[0])
-               commentIndex[key] = s
-       }
-}
-
-func (b *builder) comment(name string) {
-       if s := commentIndex[name]; len(s) > 0 {
-               b.w.WriteComment(s)
-       } else {
-               fmt.Fprintln(b.w)
-       }
-}
-
-func (b *builder) pf(f string, x ...interface{}) {
-       fmt.Fprintf(b.hw, f, x...)
-       fmt.Fprint(b.hw, "\n")
-}
-
-func (b *builder) p(x ...interface{}) {
-       fmt.Fprintln(b.hw, x...)
-}
-
-func (b *builder) addSize(s int) {
-       b.w.Size += s
-       b.pf("// Size: %d bytes", s)
-}
-
-func (b *builder) writeConst(name string, x interface{}) {
-       b.comment(name)
-       b.w.WriteConst(name, x)
-}
-
-// writeConsts computes f(v) for all v in values and writes the results
-// as constants named _v to a single constant block.
-func (b *builder) writeConsts(f func(string) int, values ...string) {
-       b.pf("const (")
-       for _, v := range values {
-               b.pf("\t_%s = %v", v, f(v))
-       }
-       b.pf(")")
-}
-
-// writeType writes the type of the given value, which must be a struct.
-func (b *builder) writeType(value interface{}) {
-       b.comment(reflect.TypeOf(value).Name())
-       b.w.WriteType(value)
-}
-
-func (b *builder) writeSlice(name string, ss interface{}) {
-       b.writeSliceAddSize(name, 0, ss)
-}
-
-func (b *builder) writeSliceAddSize(name string, extraSize int, ss interface{}) {
-       b.comment(name)
-       b.w.Size += extraSize
-       v := reflect.ValueOf(ss)
-       t := v.Type().Elem()
-       b.pf("// Size: %d bytes, %d elements", v.Len()*int(t.Size())+extraSize, v.Len())
-
-       fmt.Fprintf(b.w, "var %s = ", name)
-       b.w.WriteArray(ss)
-       b.p()
-}
-
-type fromTo struct {
-       from, to uint16
-}
-
-func (b *builder) writeSortedMap(name string, ss *stringSet, index func(s string) uint16) {
-       ss.sortFunc(func(a, b string) bool {
-               return index(a) < index(b)
-       })
-       m := []fromTo{}
-       for _, s := range ss.s {
-               m = append(m, fromTo{index(s), index(ss.update[s])})
-       }
-       b.writeSlice(name, m)
-}
-
-const base = 'z' - 'a' + 1
-
-func strToInt(s string) uint {
-       v := uint(0)
-       for i := 0; i < len(s); i++ {
-               v *= base
-               v += uint(s[i] - 'a')
-       }
-       return v
-}
-
-// converts the given integer to the original ASCII string passed to strToInt.
-// len(s) must match the number of characters obtained.
-func intToStr(v uint, s []byte) {
-       for i := len(s) - 1; i >= 0; i-- {
-               s[i] = byte(v%base) + 'a'
-               v /= base
-       }
-}
-
-func (b *builder) writeBitVector(name string, ss []string) {
-       vec := make([]uint8, int(math.Ceil(math.Pow(base, float64(len(ss[0])))/8)))
-       for _, s := range ss {
-               v := strToInt(s)
-               vec[v/8] |= 1 << (v % 8)
-       }
-       b.writeSlice(name, vec)
-}
-
-// TODO: convert this type into a list or two-stage trie.
-func (b *builder) writeMapFunc(name string, m map[string]string, f func(string) uint16) {
-       b.comment(name)
-       v := reflect.ValueOf(m)
-       sz := v.Len() * (2 + int(v.Type().Key().Size()))
-       for _, k := range m {
-               sz += len(k)
-       }
-       b.addSize(sz)
-       keys := []string{}
-       b.pf(`var %s = map[string]uint16{`, name)
-       for k := range m {
-               keys = append(keys, k)
-       }
-       sort.Strings(keys)
-       for _, k := range keys {
-               b.pf("\t%q: %v,", k, f(m[k]))
-       }
-       b.p("}")
-}
-
-func (b *builder) writeMap(name string, m interface{}) {
-       b.comment(name)
-       v := reflect.ValueOf(m)
-       sz := v.Len() * (2 + int(v.Type().Key().Size()) + int(v.Type().Elem().Size()))
-       b.addSize(sz)
-       f := strings.FieldsFunc(fmt.Sprintf("%#v", m), func(r rune) bool {
-               return strings.IndexRune("{}, ", r) != -1
-       })
-       sort.Strings(f[1:])
-       b.pf(`var %s = %s{`, name, f[0])
-       for _, kv := range f[1:] {
-               b.pf("\t%s,", kv)
-       }
-       b.p("}")
-}
-
-func (b *builder) langIndex(s string) uint16 {
-       if s == "und" {
-               return 0
-       }
-       if i, ok := b.lang.find(s); ok {
-               return uint16(i)
-       }
-       return uint16(strToInt(s)) + uint16(len(b.lang.s))
-}
-
-// inc advances the string to its lexicographical successor.
-func inc(s string) string {
-       const maxTagLength = 4
-       var buf [maxTagLength]byte
-       intToStr(strToInt(strings.ToLower(s))+1, buf[:len(s)])
-       for i := 0; i < len(s); i++ {
-               if s[i] <= 'Z' {
-                       buf[i] -= 'a' - 'A'
-               }
-       }
-       return string(buf[:len(s)])
-}
-
-func (b *builder) parseIndices() {
-       meta := b.supp.Metadata
-
-       for k, v := range b.registry {
-               var ss *stringSet
-               switch v.typ {
-               case "language":
-                       if len(k) == 2 || v.suppressScript != "" || v.scope == "special" {
-                               b.lang.add(k)
-                               continue
-                       } else {
-                               ss = &b.langNoIndex
-                       }
-               case "region":
-                       ss = &b.region
-               case "script":
-                       ss = &b.script
-               case "variant":
-                       ss = &b.variant
-               default:
-                       continue
-               }
-               ss.add(k)
-       }
-       // Include any language for which there is data.
-       for _, lang := range b.data.Locales() {
-               if x := b.data.RawLDML(lang); false ||
-                       x.LocaleDisplayNames != nil ||
-                       x.Characters != nil ||
-                       x.Delimiters != nil ||
-                       x.Measurement != nil ||
-                       x.Dates != nil ||
-                       x.Numbers != nil ||
-                       x.Units != nil ||
-                       x.ListPatterns != nil ||
-                       x.Collations != nil ||
-                       x.Segmentations != nil ||
-                       x.Rbnf != nil ||
-                       x.Annotations != nil ||
-                       x.Metadata != nil {
-
-                       from := strings.Split(lang, "_")
-                       if lang := from[0]; lang != "root" {
-                               b.lang.add(lang)
-                       }
-               }
-       }
-       // Include locales for plural rules, which uses a different structure.
-       for _, plurals := range b.data.Supplemental().Plurals {
-               for _, rules := range plurals.PluralRules {
-                       for _, lang := range strings.Split(rules.Locales, " ") {
-                               if lang = strings.Split(lang, "_")[0]; lang != "root" {
-                                       b.lang.add(lang)
-                               }
-                       }
-               }
-       }
-       // Include languages in likely subtags.
-       for _, m := range b.supp.LikelySubtags.LikelySubtag {
-               from := strings.Split(m.From, "_")
-               b.lang.add(from[0])
-       }
-       // Include ISO-639 alpha-3 bibliographic entries.
-       for _, a := range meta.Alias.LanguageAlias {
-               if a.Reason == "bibliographic" {
-                       b.langNoIndex.add(a.Type)
-               }
-       }
-       // Include regions in territoryAlias (not all are in the IANA registry!)
-       for _, reg := range b.supp.Metadata.Alias.TerritoryAlias {
-               if len(reg.Type) == 2 {
-                       b.region.add(reg.Type)
-               }
-       }
-
-       for _, s := range b.lang.s {
-               if len(s) == 3 {
-                       b.langNoIndex.remove(s)
-               }
-       }
-       b.writeConst("numLanguages", len(b.lang.slice())+len(b.langNoIndex.slice()))
-       b.writeConst("numScripts", len(b.script.slice()))
-       b.writeConst("numRegions", len(b.region.slice()))
-
-       // Add dummy codes at the start of each list to represent "unspecified".
-       b.lang.add("---")
-       b.script.add("----")
-       b.region.add("---")
-
-       // common locales
-       b.locale.parse(meta.DefaultContent.Locales)
-}
-
-// TODO: region inclusion data will probably not be use used in future matchers.
-
-func (b *builder) computeRegionGroups() {
-       b.groups = make(map[int]index)
-
-       // Create group indices.
-       for i := 1; b.region.s[i][0] < 'A'; i++ { // Base M49 indices on regionID.
-               b.groups[i] = index(len(b.groups))
-       }
-       for _, g := range b.supp.TerritoryContainment.Group {
-               // Skip UN and EURO zone as they are flattening the containment
-               // relationship.
-               if g.Type == "EZ" || g.Type == "UN" {
-                       continue
-               }
-               group := b.region.index(g.Type)
-               if _, ok := b.groups[group]; !ok {
-                       b.groups[group] = index(len(b.groups))
-               }
-       }
-       if len(b.groups) > 32 {
-               log.Fatalf("only 32 groups supported, found %d", len(b.groups))
-       }
-       b.writeConst("nRegionGroups", len(b.groups))
-}
-
-var langConsts = []string{
-       "af", "am", "ar", "az", "bg", "bn", "ca", "cs", "da", "de", "el", "en", "es",
-       "et", "fa", "fi", "fil", "fr", "gu", "he", "hi", "hr", "hu", "hy", "id", "is",
-       "it", "ja", "ka", "kk", "km", "kn", "ko", "ky", "lo", "lt", "lv", "mk", "ml",
-       "mn", "mo", "mr", "ms", "mul", "my", "nb", "ne", "nl", "no", "pa", "pl", "pt",
-       "ro", "ru", "sh", "si", "sk", "sl", "sq", "sr", "sv", "sw", "ta", "te", "th",
-       "tl", "tn", "tr", "uk", "ur", "uz", "vi", "zh", "zu",
-
-       // constants for grandfathered tags (if not already defined)
-       "jbo", "ami", "bnn", "hak", "tlh", "lb", "nv", "pwn", "tao", "tay", "tsu",
-       "nn", "sfb", "vgt", "sgg", "cmn", "nan", "hsn",
-}
-
-// writeLanguage generates all tables needed for language canonicalization.
-func (b *builder) writeLanguage() {
-       meta := b.supp.Metadata
-
-       b.writeConst("nonCanonicalUnd", b.lang.index("und"))
-       b.writeConsts(func(s string) int { return int(b.langIndex(s)) }, langConsts...)
-       b.writeConst("langPrivateStart", b.langIndex("qaa"))
-       b.writeConst("langPrivateEnd", b.langIndex("qtz"))
-
-       // Get language codes that need to be mapped (overlong 3-letter codes,
-       // deprecated 2-letter codes, legacy and grandfathered tags.)
-       langAliasMap := stringSet{}
-       aliasTypeMap := map[string]langAliasType{}
-
-       // altLangISO3 get the alternative ISO3 names that need to be mapped.
-       altLangISO3 := stringSet{}
-       // Add dummy start to avoid the use of index 0.
-       altLangISO3.add("---")
-       altLangISO3.updateLater("---", "aa")
-
-       lang := b.lang.clone()
-       for _, a := range meta.Alias.LanguageAlias {
-               if a.Replacement == "" {
-                       a.Replacement = "und"
-               }
-               // TODO: support mapping to tags
-               repl := strings.SplitN(a.Replacement, "_", 2)[0]
-               if a.Reason == "overlong" {
-                       if len(a.Replacement) == 2 && len(a.Type) == 3 {
-                               lang.updateLater(a.Replacement, a.Type)
-                       }
-               } else if len(a.Type) <= 3 {
-                       switch a.Reason {
-                       case "macrolanguage":
-                               aliasTypeMap[a.Type] = langMacro
-                       case "deprecated":
-                               // handled elsewhere
-                               continue
-                       case "bibliographic", "legacy":
-                               if a.Type == "no" {
-                                       continue
-                               }
-                               aliasTypeMap[a.Type] = langLegacy
-                       default:
-                               log.Fatalf("new %s alias: %s", a.Reason, a.Type)
-                       }
-                       langAliasMap.add(a.Type)
-                       langAliasMap.updateLater(a.Type, repl)
-               }
-       }
-       // Manually add the mapping of "nb" (Norwegian) to its macro language.
-       // This can be removed if CLDR adopts this change.
-       langAliasMap.add("nb")
-       langAliasMap.updateLater("nb", "no")
-       aliasTypeMap["nb"] = langMacro
-
-       for k, v := range b.registry {
-               // Also add deprecated values for 3-letter ISO codes, which CLDR omits.
-               if v.typ == "language" && v.deprecated != "" && v.preferred != "" {
-                       langAliasMap.add(k)
-                       langAliasMap.updateLater(k, v.preferred)
-                       aliasTypeMap[k] = langDeprecated
-               }
-       }
-       // Fix CLDR mappings.
-       lang.updateLater("tl", "tgl")
-       lang.updateLater("sh", "hbs")
-       lang.updateLater("mo", "mol")
-       lang.updateLater("no", "nor")
-       lang.updateLater("tw", "twi")
-       lang.updateLater("nb", "nob")
-       lang.updateLater("ak", "aka")
-       lang.updateLater("bh", "bih")
-
-       // Ensure that each 2-letter code is matched with a 3-letter code.
-       for _, v := range lang.s[1:] {
-               s, ok := lang.update[v]
-               if !ok {
-                       if s, ok = lang.update[langAliasMap.update[v]]; !ok {
-                               continue
-                       }
-                       lang.update[v] = s
-               }
-               if v[0] != s[0] {
-                       altLangISO3.add(s)
-                       altLangISO3.updateLater(s, v)
-               }
-       }
-
-       // Complete canonialized language tags.
-       lang.freeze()
-       for i, v := range lang.s {
-               // We can avoid these manual entries by using the IANI registry directly.
-               // Seems easier to update the list manually, as changes are rare.
-               // The panic in this loop will trigger if we miss an entry.
-               add := ""
-               if s, ok := lang.update[v]; ok {
-                       if s[0] == v[0] {
-                               add = s[1:]
-                       } else {
-                               add = string([]byte{0, byte(altLangISO3.index(s))})
-                       }
-               } else if len(v) == 3 {
-                       add = "\x00"
-               } else {
-                       log.Panicf("no data for long form of %q", v)
-               }
-               lang.s[i] += add
-       }
-       b.writeConst("lang", tag.Index(lang.join()))
-
-       b.writeConst("langNoIndexOffset", len(b.lang.s))
-
-       // space of all valid 3-letter language identifiers.
-       b.writeBitVector("langNoIndex", b.langNoIndex.slice())
-
-       altLangIndex := []uint16{}
-       for i, s := range altLangISO3.slice() {
-               altLangISO3.s[i] += string([]byte{byte(len(altLangIndex))})
-               if i > 0 {
-                       idx := b.lang.index(altLangISO3.update[s])
-                       altLangIndex = append(altLangIndex, uint16(idx))
-               }
-       }
-       b.writeConst("altLangISO3", tag.Index(altLangISO3.join()))
-       b.writeSlice("altLangIndex", altLangIndex)
-
-       b.writeSortedMap("langAliasMap", &langAliasMap, b.langIndex)
-       types := make([]langAliasType, len(langAliasMap.s))
-       for i, s := range langAliasMap.s {
-               types[i] = aliasTypeMap[s]
-       }
-       b.writeSlice("langAliasTypes", types)
-}
-
-var scriptConsts = []string{
-       "Latn", "Hani", "Hans", "Hant", "Qaaa", "Qaai", "Qabx", "Zinh", "Zyyy",
-       "Zzzz",
-}
-
-func (b *builder) writeScript() {
-       b.writeConsts(b.script.index, scriptConsts...)
-       b.writeConst("script", tag.Index(b.script.join()))
-
-       supp := make([]uint8, len(b.lang.slice()))
-       for i, v := range b.lang.slice()[1:] {
-               if sc := b.registry[v].suppressScript; sc != "" {
-                       supp[i+1] = uint8(b.script.index(sc))
-               }
-       }
-       b.writeSlice("suppressScript", supp)
-
-       // There is only one deprecated script in CLDR. This value is hard-coded.
-       // We check here if the code must be updated.
-       for _, a := range b.supp.Metadata.Alias.ScriptAlias {
-               if a.Type != "Qaai" {
-                       log.Panicf("unexpected deprecated stript %q", a.Type)
-               }
-       }
-}
-
-func parseM49(s string) int16 {
-       if len(s) == 0 {
-               return 0
-       }
-       v, err := strconv.ParseUint(s, 10, 10)
-       failOnError(err)
-       return int16(v)
-}
-
-var regionConsts = []string{
-       "001", "419", "BR", "CA", "ES", "GB", "MD", "PT", "UK", "US",
-       "ZZ", "XA", "XC", "XK", // Unofficial tag for Kosovo.
-}
-
-func (b *builder) writeRegion() {
-       b.writeConsts(b.region.index, regionConsts...)
-
-       isoOffset := b.region.index("AA")
-       m49map := make([]int16, len(b.region.slice()))
-       fromM49map := make(map[int16]int)
-       altRegionISO3 := ""
-       altRegionIDs := []uint16{}
-
-       b.writeConst("isoRegionOffset", isoOffset)
-
-       // 2-letter region lookup and mapping to numeric codes.
-       regionISO := b.region.clone()
-       regionISO.s = regionISO.s[isoOffset:]
-       regionISO.sorted = false
-
-       regionTypes := make([]byte, len(b.region.s))
-
-       // Is the region valid BCP 47?
-       for s, e := range b.registry {
-               if len(s) == 2 && s == strings.ToUpper(s) {
-                       i := b.region.index(s)
-                       for _, d := range e.description {
-                               if strings.Contains(d, "Private use") {
-                                       regionTypes[i] = iso3166UserAssgined
-                               }
-                       }
-                       regionTypes[i] |= bcp47Region
-               }
-       }
-
-       // Is the region a valid ccTLD?
-       r := gen.OpenIANAFile("domains/root/db")
-       defer r.Close()
-
-       buf, err := ioutil.ReadAll(r)
-       failOnError(err)
-       re := regexp.MustCompile(`"/domains/root/db/([a-z]{2}).html"`)
-       for _, m := range re.FindAllSubmatch(buf, -1) {
-               i := b.region.index(strings.ToUpper(string(m[1])))
-               regionTypes[i] |= ccTLD
-       }
-
-       b.writeSlice("regionTypes", regionTypes)
-
-       iso3Set := make(map[string]int)
-       update := func(iso2, iso3 string) {
-               i := regionISO.index(iso2)
-               if j, ok := iso3Set[iso3]; !ok && iso3[0] == iso2[0] {
-                       regionISO.s[i] += iso3[1:]
-                       iso3Set[iso3] = -1
-               } else {
-                       if ok && j >= 0 {
-                               regionISO.s[i] += string([]byte{0, byte(j)})
-                       } else {
-                               iso3Set[iso3] = len(altRegionISO3)
-                               regionISO.s[i] += string([]byte{0, byte(len(altRegionISO3))})
-                               altRegionISO3 += iso3
-                               altRegionIDs = append(altRegionIDs, uint16(isoOffset+i))
-                       }
-               }
-       }
-       for _, tc := range b.supp.CodeMappings.TerritoryCodes {
-               i := regionISO.index(tc.Type) + isoOffset
-               if d := m49map[i]; d != 0 {
-                       log.Panicf("%s found as a duplicate UN.M49 code of %03d", tc.Numeric, d)
-               }
-               m49 := parseM49(tc.Numeric)
-               m49map[i] = m49
-               if r := fromM49map[m49]; r == 0 {
-                       fromM49map[m49] = i
-               } else if r != i {
-                       dep := b.registry[regionISO.s[r-isoOffset]].deprecated
-                       if t := b.registry[tc.Type]; t != nil && dep != "" && (t.deprecated == "" || t.deprecated > dep) {
-                               fromM49map[m49] = i
-                       }
-               }
-       }
-       for _, ta := range b.supp.Metadata.Alias.TerritoryAlias {
-               if len(ta.Type) == 3 && ta.Type[0] <= '9' && len(ta.Replacement) == 2 {
-                       from := parseM49(ta.Type)
-                       if r := fromM49map[from]; r == 0 {
-                               fromM49map[from] = regionISO.index(ta.Replacement) + isoOffset
-                       }
-               }
-       }
-       for _, tc := range b.supp.CodeMappings.TerritoryCodes {
-               if len(tc.Alpha3) == 3 {
-                       update(tc.Type, tc.Alpha3)
-               }
-       }
-       // This entries are not included in territoryCodes. Mostly 3-letter variants
-       // of deleted codes and an entry for QU.
-       for _, m := range []struct{ iso2, iso3 string }{
-               {"CT", "CTE"},
-               {"DY", "DHY"},
-               {"HV", "HVO"},
-               {"JT", "JTN"},
-               {"MI", "MID"},
-               {"NH", "NHB"},
-               {"NQ", "ATN"},
-               {"PC", "PCI"},
-               {"PU", "PUS"},
-               {"PZ", "PCZ"},
-               {"RH", "RHO"},
-               {"VD", "VDR"},
-               {"WK", "WAK"},
-               // These three-letter codes are used for others as well.
-               {"FQ", "ATF"},
-       } {
-               update(m.iso2, m.iso3)
-       }
-       for i, s := range regionISO.s {
-               if len(s) != 4 {
-                       regionISO.s[i] = s + "  "
-               }
-       }
-       b.writeConst("regionISO", tag.Index(regionISO.join()))
-       b.writeConst("altRegionISO3", altRegionISO3)
-       b.writeSlice("altRegionIDs", altRegionIDs)
-
-       // Create list of deprecated regions.
-       // TODO: consider inserting SF -> FI. Not included by CLDR, but is the only
-       // Transitionally-reserved mapping not included.
-       regionOldMap := stringSet{}
-       // Include regions in territoryAlias (not all are in the IANA registry!)
-       for _, reg := range b.supp.Metadata.Alias.TerritoryAlias {
-               if len(reg.Type) == 2 && reg.Reason == "deprecated" && len(reg.Replacement) == 2 {
-                       regionOldMap.add(reg.Type)
-                       regionOldMap.updateLater(reg.Type, reg.Replacement)
-                       i, _ := regionISO.find(reg.Type)
-                       j, _ := regionISO.find(reg.Replacement)
-                       if k := m49map[i+isoOffset]; k == 0 {
-                               m49map[i+isoOffset] = m49map[j+isoOffset]
-                       }
-               }
-       }
-       b.writeSortedMap("regionOldMap", &regionOldMap, func(s string) uint16 {
-               return uint16(b.region.index(s))
-       })
-       // 3-digit region lookup, groupings.
-       for i := 1; i < isoOffset; i++ {
-               m := parseM49(b.region.s[i])
-               m49map[i] = m
-               fromM49map[m] = i
-       }
-       b.writeSlice("m49", m49map)
-
-       const (
-               searchBits = 7
-               regionBits = 9
-       )
-       if len(m49map) >= 1<<regionBits {
-               log.Fatalf("Maximum number of regions exceeded: %d > %d", len(m49map), 1<<regionBits)
-       }
-       m49Index := [9]int16{}
-       fromM49 := []uint16{}
-       m49 := []int{}
-       for k, _ := range fromM49map {
-               m49 = append(m49, int(k))
-       }
-       sort.Ints(m49)
-       for _, k := range m49[1:] {
-               val := (k & (1<<searchBits - 1)) << regionBits
-               fromM49 = append(fromM49, uint16(val|fromM49map[int16(k)]))
-               m49Index[1:][k>>searchBits] = int16(len(fromM49))
-       }
-       b.writeSlice("m49Index", m49Index)
-       b.writeSlice("fromM49", fromM49)
-}
-
-const (
-       // TODO: put these lists in regionTypes as user data? Could be used for
-       // various optimizations and refinements and could be exposed in the API.
-       iso3166Except = "AC CP DG EA EU FX IC SU TA UK"
-       iso3166Trans  = "AN BU CS NT TP YU ZR" // SF is not in our set of Regions.
-       // DY and RH are actually not deleted, but indeterminately reserved.
-       iso3166DelCLDR = "CT DD DY FQ HV JT MI NH NQ PC PU PZ RH VD WK YD"
-)
-
-const (
-       iso3166UserAssgined = 1 << iota
-       ccTLD
-       bcp47Region
-)
-
-func find(list []string, s string) int {
-       for i, t := range list {
-               if t == s {
-                       return i
-               }
-       }
-       return -1
-}
-
-// writeVariants generates per-variant information and creates a map from variant
-// name to index value. We assign index values such that sorting multiple
-// variants by index value will result in the correct order.
-// There are two types of variants: specialized and general. Specialized variants
-// are only applicable to certain language or language-script pairs. Generalized
-// variants apply to any language. Generalized variants always sort after
-// specialized variants.  We will therefore always assign a higher index value
-// to a generalized variant than any other variant. Generalized variants are
-// sorted alphabetically among themselves.
-// Specialized variants may also sort after other specialized variants. Such
-// variants will be ordered after any of the variants they may follow.
-// We assume that if a variant x is followed by a variant y, then for any prefix
-// p of x, p-x is a prefix of y. This allows us to order tags based on the
-// maximum of the length of any of its prefixes.
-// TODO: it is possible to define a set of Prefix values on variants such that
-// a total order cannot be defined to the point that this algorithm breaks.
-// In other words, we cannot guarantee the same order of variants for the
-// future using the same algorithm or for non-compliant combinations of
-// variants. For this reason, consider using simple alphabetic sorting
-// of variants and ignore Prefix restrictions altogether.
-func (b *builder) writeVariant() {
-       generalized := stringSet{}
-       specialized := stringSet{}
-       specializedExtend := stringSet{}
-       // Collate the variants by type and check assumptions.
-       for _, v := range b.variant.slice() {
-               e := b.registry[v]
-               if len(e.prefix) == 0 {
-                       generalized.add(v)
-                       continue
-               }
-               c := strings.Split(e.prefix[0], "-")
-               hasScriptOrRegion := false
-               if len(c) > 1 {
-                       _, hasScriptOrRegion = b.script.find(c[1])
-                       if !hasScriptOrRegion {
-                               _, hasScriptOrRegion = b.region.find(c[1])
-
-                       }
-               }
-               if len(c) == 1 || len(c) == 2 && hasScriptOrRegion {
-                       // Variant is preceded by a language.
-                       specialized.add(v)
-                       continue
-               }
-               // Variant is preceded by another variant.
-               specializedExtend.add(v)
-               prefix := c[0] + "-"
-               if hasScriptOrRegion {
-                       prefix += c[1]
-               }
-               for _, p := range e.prefix {
-                       // Verify that the prefix minus the last element is a prefix of the
-                       // predecessor element.
-                       i := strings.LastIndex(p, "-")
-                       pred := b.registry[p[i+1:]]
-                       if find(pred.prefix, p[:i]) < 0 {
-                               log.Fatalf("prefix %q for variant %q not consistent with predecessor spec", p, v)
-                       }
-                       // The sorting used below does not work in the general case. It works
-                       // if we assume that variants that may be followed by others only have
-                       // prefixes of the same length. Verify this.
-                       count := strings.Count(p[:i], "-")
-                       for _, q := range pred.prefix {
-                               if c := strings.Count(q, "-"); c != count {
-                                       log.Fatalf("variant %q preceding %q has a prefix %q of size %d; want %d", p[i+1:], v, q, c, count)
-                               }
-                       }
-                       if !strings.HasPrefix(p, prefix) {
-                               log.Fatalf("prefix %q of variant %q should start with %q", p, v, prefix)
-                       }
-               }
-       }
-
-       // Sort extended variants.
-       a := specializedExtend.s
-       less := func(v, w string) bool {
-               // Sort by the maximum number of elements.
-               maxCount := func(s string) (max int) {
-                       for _, p := range b.registry[s].prefix {
-                               if c := strings.Count(p, "-"); c > max {
-                                       max = c
-                               }
-                       }
-                       return
-               }
-               if cv, cw := maxCount(v), maxCount(w); cv != cw {
-                       return cv < cw
-               }
-               // Sort by name as tie breaker.
-               return v < w
-       }
-       sort.Sort(funcSorter{less, sort.StringSlice(a)})
-       specializedExtend.frozen = true
-
-       // Create index from variant name to index.
-       variantIndex := make(map[string]uint8)
-       add := func(s []string) {
-               for _, v := range s {
-                       variantIndex[v] = uint8(len(variantIndex))
-               }
-       }
-       add(specialized.slice())
-       add(specializedExtend.s)
-       numSpecialized := len(variantIndex)
-       add(generalized.slice())
-       if n := len(variantIndex); n > 255 {
-               log.Fatalf("maximum number of variants exceeded: was %d; want <= 255", n)
-       }
-       b.writeMap("variantIndex", variantIndex)
-       b.writeConst("variantNumSpecialized", numSpecialized)
-}
-
-func (b *builder) writeLanguageInfo() {
-}
-
-// writeLikelyData writes tables that are used both for finding parent relations and for
-// language matching.  Each entry contains additional bits to indicate the status of the
-// data to know when it cannot be used for parent relations.
-func (b *builder) writeLikelyData() {
-       const (
-               isList = 1 << iota
-               scriptInFrom
-               regionInFrom
-       )
-       type ( // generated types
-               likelyScriptRegion struct {
-                       region uint16
-                       script uint8
-                       flags  uint8
-               }
-               likelyLangScript struct {
-                       lang   uint16
-                       script uint8
-                       flags  uint8
-               }
-               likelyLangRegion struct {
-                       lang   uint16
-                       region uint16
-               }
-               // likelyTag is used for getting likely tags for group regions, where
-               // the likely region might be a region contained in the group.
-               likelyTag struct {
-                       lang   uint16
-                       region uint16
-                       script uint8
-               }
-       )
-       var ( // generated variables
-               likelyRegionGroup = make([]likelyTag, len(b.groups))
-               likelyLang        = make([]likelyScriptRegion, len(b.lang.s))
-               likelyRegion      = make([]likelyLangScript, len(b.region.s))
-               likelyScript      = make([]likelyLangRegion, len(b.script.s))
-               likelyLangList    = []likelyScriptRegion{}
-               likelyRegionList  = []likelyLangScript{}
-       )
-       type fromTo struct {
-               from, to []string
-       }
-       langToOther := map[int][]fromTo{}
-       regionToOther := map[int][]fromTo{}
-       for _, m := range b.supp.LikelySubtags.LikelySubtag {
-               from := strings.Split(m.From, "_")
-               to := strings.Split(m.To, "_")
-               if len(to) != 3 {
-                       log.Fatalf("invalid number of subtags in %q: found %d, want 3", m.To, len(to))
-               }
-               if len(from) > 3 {
-                       log.Fatalf("invalid number of subtags: found %d, want 1-3", len(from))
-               }
-               if from[0] != to[0] && from[0] != "und" {
-                       log.Fatalf("unexpected language change in expansion: %s -> %s", from, to)
-               }
-               if len(from) == 3 {
-                       if from[2] != to[2] {
-                               log.Fatalf("unexpected region change in expansion: %s -> %s", from, to)
-                       }
-                       if from[0] != "und" {
-                               log.Fatalf("unexpected fully specified from tag: %s -> %s", from, to)
-                       }
-               }
-               if len(from) == 1 || from[0] != "und" {
-                       id := 0
-                       if from[0] != "und" {
-                               id = b.lang.index(from[0])
-                       }
-                       langToOther[id] = append(langToOther[id], fromTo{from, to})
-               } else if len(from) == 2 && len(from[1]) == 4 {
-                       sid := b.script.index(from[1])
-                       likelyScript[sid].lang = uint16(b.langIndex(to[0]))
-                       likelyScript[sid].region = uint16(b.region.index(to[2]))
-               } else {
-                       r := b.region.index(from[len(from)-1])
-                       if id, ok := b.groups[r]; ok {
-                               if from[0] != "und" {
-                                       log.Fatalf("region changed unexpectedly: %s -> %s", from, to)
-                               }
-                               likelyRegionGroup[id].lang = uint16(b.langIndex(to[0]))
-                               likelyRegionGroup[id].script = uint8(b.script.index(to[1]))
-                               likelyRegionGroup[id].region = uint16(b.region.index(to[2]))
-                       } else {
-                               regionToOther[r] = append(regionToOther[r], fromTo{from, to})
-                       }
-               }
-       }
-       b.writeType(likelyLangRegion{})
-       b.writeSlice("likelyScript", likelyScript)
-
-       for id := range b.lang.s {
-               list := langToOther[id]
-               if len(list) == 1 {
-                       likelyLang[id].region = uint16(b.region.index(list[0].to[2]))
-                       likelyLang[id].script = uint8(b.script.index(list[0].to[1]))
-               } else if len(list) > 1 {
-                       likelyLang[id].flags = isList
-                       likelyLang[id].region = uint16(len(likelyLangList))
-                       likelyLang[id].script = uint8(len(list))
-                       for _, x := range list {
-                               flags := uint8(0)
-                               if len(x.from) > 1 {
-                                       if x.from[1] == x.to[2] {
-                                               flags = regionInFrom
-                                       } else {
-                                               flags = scriptInFrom
-                                       }
-                               }
-                               likelyLangList = append(likelyLangList, likelyScriptRegion{
-                                       region: uint16(b.region.index(x.to[2])),
-                                       script: uint8(b.script.index(x.to[1])),
-                                       flags:  flags,
-                               })
-                       }
-               }
-       }
-       // TODO: merge suppressScript data with this table.
-       b.writeType(likelyScriptRegion{})
-       b.writeSlice("likelyLang", likelyLang)
-       b.writeSlice("likelyLangList", likelyLangList)
-
-       for id := range b.region.s {
-               list := regionToOther[id]
-               if len(list) == 1 {
-                       likelyRegion[id].lang = uint16(b.langIndex(list[0].to[0]))
-                       likelyRegion[id].script = uint8(b.script.index(list[0].to[1]))
-                       if len(list[0].from) > 2 {
-                               likelyRegion[id].flags = scriptInFrom
-                       }
-               } else if len(list) > 1 {
-                       likelyRegion[id].flags = isList
-                       likelyRegion[id].lang = uint16(len(likelyRegionList))
-                       likelyRegion[id].script = uint8(len(list))
-                       for i, x := range list {
-                               if len(x.from) == 2 && i != 0 || i > 0 && len(x.from) != 3 {
-                                       log.Fatalf("unspecified script must be first in list: %v at %d", x.from, i)
-                               }
-                               x := likelyLangScript{
-                                       lang:   uint16(b.langIndex(x.to[0])),
-                                       script: uint8(b.script.index(x.to[1])),
-                               }
-                               if len(list[0].from) > 2 {
-                                       x.flags = scriptInFrom
-                               }
-                               likelyRegionList = append(likelyRegionList, x)
-                       }
-               }
-       }
-       b.writeType(likelyLangScript{})
-       b.writeSlice("likelyRegion", likelyRegion)
-       b.writeSlice("likelyRegionList", likelyRegionList)
-
-       b.writeType(likelyTag{})
-       b.writeSlice("likelyRegionGroup", likelyRegionGroup)
-}
-
-type mutualIntelligibility struct {
-       want, have uint16
-       conf       uint8
-       oneway     bool
-}
-
-type scriptIntelligibility struct {
-       lang       uint16 // langID or 0 if *
-       want, have uint8
-       conf       uint8
-}
-
-type sortByConf []mutualIntelligibility
-
-func (l sortByConf) Less(a, b int) bool {
-       return l[a].conf > l[b].conf
-}
-
-func (l sortByConf) Swap(a, b int) {
-       l[a], l[b] = l[b], l[a]
-}
-
-func (l sortByConf) Len() int {
-       return len(l)
-}
-
-// toConf converts a percentage value [0, 100] to a confidence class.
-func toConf(pct uint8) uint8 {
-       switch {
-       case pct == 100:
-               return 3 // Exact
-       case pct >= 90:
-               return 2 // High
-       case pct > 50:
-               return 1 // Low
-       default:
-               return 0 // No
-       }
-}
-
-// writeMatchData writes tables with languages and scripts for which there is
-// mutual intelligibility. The data is based on CLDR's languageMatching data.
-// Note that we use a different algorithm than the one defined by CLDR and that
-// we slightly modify the data. For example, we convert scores to confidence levels.
-// We also drop all region-related data as we use a different algorithm to
-// determine region equivalence.
-func (b *builder) writeMatchData() {
-       b.writeType(mutualIntelligibility{})
-       b.writeType(scriptIntelligibility{})
-       lm := b.supp.LanguageMatching.LanguageMatches
-       cldr.MakeSlice(&lm).SelectAnyOf("type", "written")
-
-       matchLang := []mutualIntelligibility{}
-       matchScript := []scriptIntelligibility{}
-       // Convert the languageMatch entries in lists keyed by desired language.
-       for _, m := range lm[0].LanguageMatch {
-               // Different versions of CLDR use different separators.
-               desired := strings.Replace(m.Desired, "-", "_", -1)
-               supported := strings.Replace(m.Supported, "-", "_", -1)
-               d := strings.Split(desired, "_")
-               s := strings.Split(supported, "_")
-               if len(d) != len(s) || len(d) > 2 {
-                       // Skip all entries with regions and work around CLDR bug.
-                       continue
-               }
-               pct, _ := strconv.ParseInt(m.Percent, 10, 8)
-               if len(d) == 2 && d[0] == s[0] && len(d[1]) == 4 {
-                       // language-script pair.
-                       lang := uint16(0)
-                       if d[0] != "*" {
-                               lang = uint16(b.langIndex(d[0]))
-                       }
-                       matchScript = append(matchScript, scriptIntelligibility{
-                               lang: lang,
-                               want: uint8(b.script.index(d[1])),
-                               have: uint8(b.script.index(s[1])),
-                               conf: toConf(uint8(pct)),
-                       })
-                       if m.Oneway != "true" {
-                               matchScript = append(matchScript, scriptIntelligibility{
-                                       lang: lang,
-                                       want: uint8(b.script.index(s[1])),
-                                       have: uint8(b.script.index(d[1])),
-                                       conf: toConf(uint8(pct)),
-                               })
-                       }
-               } else if len(d) == 1 && d[0] != "*" {
-                       if pct == 100 {
-                               // nb == no is already handled by macro mapping. Check there
-                               // really is only this case.
-                               if d[0] != "no" || s[0] != "nb" {
-                                       log.Fatalf("unhandled equivalence %s == %s", s[0], d[0])
-                               }
-                               continue
-                       }
-                       matchLang = append(matchLang, mutualIntelligibility{
-                               want:   uint16(b.langIndex(d[0])),
-                               have:   uint16(b.langIndex(s[0])),
-                               conf:   uint8(pct),
-                               oneway: m.Oneway == "true",
-                       })
-               } else {
-                       // TODO: Handle other mappings.
-                       a := []string{"*;*", "*_*;*_*", "es_MX;es_419"}
-                       s := strings.Join([]string{desired, supported}, ";")
-                       if i := sort.SearchStrings(a, s); i == len(a) || a[i] != s {
-                               log.Printf("%q not handled", s)
-                       }
-               }
-       }
-       sort.Stable(sortByConf(matchLang))
-       // collapse percentage into confidence classes
-       for i, m := range matchLang {
-               matchLang[i].conf = toConf(m.conf)
-       }
-       b.writeSlice("matchLang", matchLang)
-       b.writeSlice("matchScript", matchScript)
-}
-
-func (b *builder) writeRegionInclusionData() {
-       var (
-               // mm holds for each group the set of groups with a distance of 1.
-               mm = make(map[int][]index)
-
-               // containment holds for each group the transitive closure of
-               // containment of other groups.
-               containment = make(map[index][]index)
-       )
-       for _, g := range b.supp.TerritoryContainment.Group {
-               // Skip UN and EURO zone as they are flattening the containment
-               // relationship.
-               if g.Type == "EZ" || g.Type == "UN" {
-                       continue
-               }
-               group := b.region.index(g.Type)
-               groupIdx := b.groups[group]
-               for _, mem := range strings.Split(g.Contains, " ") {
-                       r := b.region.index(mem)
-                       mm[r] = append(mm[r], groupIdx)
-                       if g, ok := b.groups[r]; ok {
-                               mm[group] = append(mm[group], g)
-                               containment[groupIdx] = append(containment[groupIdx], g)
-                       }
-               }
-       }
-
-       regionContainment := make([]uint32, len(b.groups))
-       for _, g := range b.groups {
-               l := containment[g]
-
-               // Compute the transitive closure of containment.
-               for i := 0; i < len(l); i++ {
-                       l = append(l, containment[l[i]]...)
-               }
-
-               // Compute the bitmask.
-               regionContainment[g] = 1 << g
-               for _, v := range l {
-                       regionContainment[g] |= 1 << v
-               }
-               // log.Printf("%d: %X", g, regionContainment[g])
-       }
-       b.writeSlice("regionContainment", regionContainment)
-
-       regionInclusion := make([]uint8, len(b.region.s))
-       bvs := make(map[uint32]index)
-       // Make the first bitvector positions correspond with the groups.
-       for r, i := range b.groups {
-               bv := uint32(1 << i)
-               for _, g := range mm[r] {
-                       bv |= 1 << g
-               }
-               bvs[bv] = i
-               regionInclusion[r] = uint8(bvs[bv])
-       }
-       for r := 1; r < len(b.region.s); r++ {
-               if _, ok := b.groups[r]; !ok {
-                       bv := uint32(0)
-                       for _, g := range mm[r] {
-                               bv |= 1 << g
-                       }
-                       if bv == 0 {
-                               // Pick the world for unspecified regions.
-                               bv = 1 << b.groups[b.region.index("001")]
-                       }
-                       if _, ok := bvs[bv]; !ok {
-                               bvs[bv] = index(len(bvs))
-                       }
-                       regionInclusion[r] = uint8(bvs[bv])
-               }
-       }
-       b.writeSlice("regionInclusion", regionInclusion)
-       regionInclusionBits := make([]uint32, len(bvs))
-       for k, v := range bvs {
-               regionInclusionBits[v] = uint32(k)
-       }
-       // Add bit vectors for increasingly large distances until a fixed point is reached.
-       regionInclusionNext := []uint8{}
-       for i := 0; i < len(regionInclusionBits); i++ {
-               bits := regionInclusionBits[i]
-               next := bits
-               for i := uint(0); i < uint(len(b.groups)); i++ {
-                       if bits&(1<<i) != 0 {
-                               next |= regionInclusionBits[i]
-                       }
-               }
-               if _, ok := bvs[next]; !ok {
-                       bvs[next] = index(len(bvs))
-                       regionInclusionBits = append(regionInclusionBits, next)
-               }
-               regionInclusionNext = append(regionInclusionNext, uint8(bvs[next]))
-       }
-       b.writeSlice("regionInclusionBits", regionInclusionBits)
-       b.writeSlice("regionInclusionNext", regionInclusionNext)
-}
-
-type parentRel struct {
-       lang       uint16
-       script     uint8
-       maxScript  uint8
-       toRegion   uint16
-       fromRegion []uint16
-}
-
-func (b *builder) writeParents() {
-       b.writeType(parentRel{})
-
-       parents := []parentRel{}
-
-       // Construct parent overrides.
-       n := 0
-       for _, p := range b.data.Supplemental().ParentLocales.ParentLocale {
-               // Skipping non-standard scripts to root is implemented using addTags.
-               if p.Parent == "root" {
-                       continue
-               }
-
-               sub := strings.Split(p.Parent, "_")
-               parent := parentRel{lang: b.langIndex(sub[0])}
-               if len(sub) == 2 {
-                       // TODO: check that all undefined scripts are indeed Latn in these
-                       // cases.
-                       parent.maxScript = uint8(b.script.index("Latn"))
-                       parent.toRegion = uint16(b.region.index(sub[1]))
-               } else {
-                       parent.script = uint8(b.script.index(sub[1]))
-                       parent.maxScript = parent.script
-                       parent.toRegion = uint16(b.region.index(sub[2]))
-               }
-               for _, c := range strings.Split(p.Locales, " ") {
-                       region := b.region.index(c[strings.LastIndex(c, "_")+1:])
-                       parent.fromRegion = append(parent.fromRegion, uint16(region))
-               }
-               parents = append(parents, parent)
-               n += len(parent.fromRegion)
-       }
-       b.writeSliceAddSize("parents", n*2, parents)
-}
-
-func main() {
-       gen.Init()
-
-       gen.Repackage("gen_common.go", "common.go", "language")
-
-       w := gen.NewCodeWriter()
-       defer w.WriteGoFile("tables.go", "language")
-
-       fmt.Fprintln(w, `import "golang.org/x/text/internal/tag"`)
-
-       b := newBuilder(w)
-       gen.WriteCLDRVersion(w)
-
-       b.parseIndices()
-       b.writeType(fromTo{})
-       b.writeLanguage()
-       b.writeScript()
-       b.writeRegion()
-       b.writeVariant()
-       // TODO: b.writeLocale()
-       b.computeRegionGroups()
-       b.writeLikelyData()
-       b.writeMatchData()
-       b.writeRegionInclusionData()
-       b.writeParents()
-}
index 8ad9505339844042c5782b1ad4399c8084e91fdf..bb4fff24ddb489abe4f14692e945356d74e3df6e 100644 (file)
@@ -440,8 +440,10 @@ func makeHaveTag(tag Tag, index int) (haveTag, langID) {
 // script to map to another and we rely on this to keep the code simple.
 func altScript(l langID, s scriptID) scriptID {
        for _, alt := range matchScript {
-               if (alt.lang == 0 || langID(alt.lang) == l) && scriptID(alt.have) == s {
-                       return scriptID(alt.want)
+               // TODO: also match cases where language is not the same.
+               if (langID(alt.wantLang) == l || langID(alt.haveLang) == l) &&
+                       scriptID(alt.haveScript) == s {
+                       return scriptID(alt.wantScript)
                }
        }
        return 0
@@ -486,6 +488,16 @@ func (m *matcher) header(l langID) *matchHeader {
        return h
 }
 
+func toConf(d uint8) Confidence {
+       if d <= 10 {
+               return High
+       }
+       if d < 30 {
+               return Low
+       }
+       return No
+}
+
 // newMatcher builds an index for the given supported tags and returns it as
 // a matcher. It also expands the index by considering various equivalence classes
 // for a given tag.
@@ -537,9 +549,9 @@ func newMatcher(supported []Tag) *matcher {
        // Add entries for languages with mutual intelligibility as defined by CLDR's
        // languageMatch data.
        for _, ml := range matchLang {
-               update(ml.want, ml.have, Confidence(ml.conf), false)
+               update(ml.want, ml.have, toConf(ml.distance), false)
                if !ml.oneway {
-                       update(ml.have, ml.want, Confidence(ml.conf), false)
+                       update(ml.have, ml.want, toConf(ml.distance), false)
                }
        }
 
index 1a92e582b986063e1ade65b5620482d89a7784eb..a108554a41061e202ab65300647acf76489de8d4 100644 (file)
@@ -1,11 +1,11 @@
-// This file was generated by go generate; DO NOT EDIT
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
 
 package language
 
 import "golang.org/x/text/internal/tag"
 
 // CLDRVersion is the CLDR version from which the tables in this package are derived.
-const CLDRVersion = "30"
+const CLDRVersion = "31"
 
 const numLanguages = 8654
 
@@ -18,105 +18,105 @@ type fromTo struct {
        to   uint16
 }
 
-const nonCanonicalUnd = 1191
+const nonCanonicalUnd = 1199
 const (
-       _af  = 21
-       _am  = 38
-       _ar  = 57
-       _az  = 87
-       _bg  = 125
-       _bn  = 163
-       _ca  = 213
-       _cs  = 246
-       _da  = 253
-       _de  = 265
-       _el  = 305
-       _en  = 308
-       _es  = 313
-       _et  = 315
-       _fa  = 323
-       _fi  = 332
-       _fil = 334
-       _fr  = 345
-       _gu  = 413
-       _he  = 437
-       _hi  = 439
-       _hr  = 458
-       _hu  = 462
-       _hy  = 464
-       _id  = 474
-       _is  = 496
-       _it  = 497
-       _ja  = 504
-       _ka  = 520
-       _kk  = 570
-       _km  = 578
-       _kn  = 585
-       _ko  = 587
-       _ky  = 641
-       _lo  = 687
-       _lt  = 695
-       _lv  = 702
-       _mk  = 758
-       _ml  = 763
-       _mn  = 770
-       _mo  = 775
-       _mr  = 786
-       _ms  = 790
-       _mul = 797
-       _my  = 808
-       _nb  = 830
-       _ne  = 840
-       _nl  = 862
-       _no  = 870
-       _pa  = 916
-       _pl  = 938
-       _pt  = 951
-       _ro  = 979
-       _ru  = 985
-       _sh  = 1021
-       _si  = 1026
-       _sk  = 1032
-       _sl  = 1036
-       _sq  = 1063
-       _sr  = 1064
-       _sv  = 1082
-       _sw  = 1083
-       _ta  = 1094
-       _te  = 1111
-       _th  = 1121
-       _tl  = 1136
-       _tn  = 1142
-       _tr  = 1152
-       _uk  = 1188
-       _ur  = 1194
-       _uz  = 1202
-       _vi  = 1209
-       _zh  = 1311
-       _zu  = 1316
-       _jbo = 507
-       _ami = 1639
-       _bnn = 2346
-       _hak = 431
-       _tlh = 14456
-       _lb  = 652
-       _nv  = 890
-       _pwn = 12044
-       _tao = 14177
-       _tay = 14187
-       _tsu = 14651
-       _nn  = 865
-       _sfb = 13618
-       _vgt = 15690
-       _sgg = 13649
-       _cmn = 2996
-       _nan = 826
-       _hsn = 460
+       _af  = 22
+       _am  = 39
+       _ar  = 58
+       _az  = 88
+       _bg  = 126
+       _bn  = 165
+       _ca  = 215
+       _cs  = 249
+       _da  = 256
+       _de  = 268
+       _el  = 309
+       _en  = 312
+       _es  = 317
+       _et  = 319
+       _fa  = 327
+       _fi  = 336
+       _fil = 338
+       _fr  = 349
+       _gu  = 418
+       _he  = 442
+       _hi  = 444
+       _hr  = 463
+       _hu  = 467
+       _hy  = 469
+       _id  = 479
+       _is  = 502
+       _it  = 503
+       _ja  = 510
+       _ka  = 526
+       _kk  = 576
+       _km  = 584
+       _kn  = 591
+       _ko  = 594
+       _ky  = 648
+       _lo  = 694
+       _lt  = 702
+       _lv  = 709
+       _mk  = 765
+       _ml  = 770
+       _mn  = 777
+       _mo  = 782
+       _mr  = 793
+       _ms  = 797
+       _mul = 804
+       _my  = 815
+       _nb  = 837
+       _ne  = 847
+       _nl  = 869
+       _no  = 877
+       _pa  = 923
+       _pl  = 945
+       _pt  = 958
+       _ro  = 986
+       _ru  = 992
+       _sh  = 1029
+       _si  = 1034
+       _sk  = 1040
+       _sl  = 1044
+       _sq  = 1071
+       _sr  = 1072
+       _sv  = 1090
+       _sw  = 1091
+       _ta  = 1102
+       _te  = 1119
+       _th  = 1129
+       _tl  = 1144
+       _tn  = 1150
+       _tr  = 1160
+       _uk  = 1196
+       _ur  = 1202
+       _uz  = 1210
+       _vi  = 1217
+       _zh  = 1319
+       _zu  = 1324
+       _jbo = 513
+       _ami = 1647
+       _bnn = 2354
+       _hak = 436
+       _tlh = 14464
+       _lb  = 659
+       _nv  = 897
+       _pwn = 12052
+       _tao = 14185
+       _tay = 14195
+       _tsu = 14659
+       _nn  = 872
+       _sfb = 13626
+       _vgt = 15698
+       _sgg = 13657
+       _cmn = 3004
+       _nan = 833
+       _hsn = 465
 )
 
-const langPrivateStart = 0x2f67
+const langPrivateStart = 0x2f6f
 
-const langPrivateEnd = 0x316e
+const langPrivateEnd = 0x3176
 
 // lang holds an alphabetically sorted list of ISO-639 language identifiers.
 // All entries are 4 bytes. The index of the identifier (divided by 4) is the language tag.
@@ -125,132 +125,133 @@ const langPrivateEnd = 0x316e
 //       the second and third letter of the 3-letter ISO code.
 //     - otherwise: a 0 and a by 2 bits right-shifted index into altLangISO3.
 // For 3-byte language identifiers the 4th byte is 0.
-var lang tag.Index = "" + // Size: 5280 bytes
-       "---\x00aaaraai\x00aak\x00aau\x00abbkabi\x00abr\x00abt\x00aby\x00acd\x00a" +
-       "ce\x00ach\x00ada\x00ade\x00adj\x00ady\x00adz\x00aeveaeb\x00aey\x00affrag" +
-       "c\x00agd\x00agg\x00agm\x00ago\x00agq\x00aha\x00ahl\x00aho\x00ajg\x00akka" +
-       "akk\x00ala\x00ali\x00aln\x00alt\x00ammhamm\x00amn\x00amo\x00amp\x00anrga" +
-       "nc\x00ank\x00ann\x00any\x00aoj\x00aom\x00aoz\x00apc\x00apd\x00ape\x00apr" +
-       "\x00aps\x00apz\x00arraarc\x00arh\x00arn\x00aro\x00arq\x00ars\x00ary\x00a" +
-       "rz\x00assmasa\x00ase\x00asg\x00aso\x00ast\x00ata\x00atg\x00atj\x00auy" +
-       "\x00avvaavl\x00avn\x00avt\x00avu\x00awa\x00awb\x00awo\x00awx\x00ayymayb" +
-       "\x00azzebaakbal\x00ban\x00bap\x00bar\x00bas\x00bav\x00bax\x00bba\x00bbb" +
-       "\x00bbc\x00bbd\x00bbj\x00bbp\x00bbr\x00bcf\x00bch\x00bci\x00bcm\x00bcn" +
-       "\x00bco\x00bcq\x00bcu\x00bdd\x00beelbef\x00beh\x00bej\x00bem\x00bet\x00b" +
-       "ew\x00bex\x00bez\x00bfd\x00bfq\x00bft\x00bfy\x00bgulbgc\x00bgn\x00bgx" +
-       "\x00bhihbhb\x00bhg\x00bhi\x00bhk\x00bhl\x00bho\x00bhy\x00biisbib\x00big" +
-       "\x00bik\x00bim\x00bin\x00bio\x00biq\x00bjh\x00bji\x00bjj\x00bjn\x00bjo" +
-       "\x00bjr\x00bjz\x00bkc\x00bkm\x00bkq\x00bku\x00bkv\x00blt\x00bmambmh\x00b" +
-       "mk\x00bmq\x00bmu\x00bnenbng\x00bnm\x00bnp\x00boodboj\x00bom\x00bon\x00bp" +
-       "y\x00bqc\x00bqi\x00bqp\x00bqv\x00brrebra\x00brh\x00brx\x00brz\x00bsosbsj" +
-       "\x00bsq\x00bss\x00bst\x00bto\x00btt\x00btv\x00bua\x00buc\x00bud\x00bug" +
-       "\x00buk\x00bum\x00buo\x00bus\x00buu\x00bvb\x00bwd\x00bwr\x00bxh\x00bye" +
-       "\x00byn\x00byr\x00bys\x00byv\x00byx\x00bza\x00bze\x00bzf\x00bzh\x00bzw" +
-       "\x00caatcan\x00cbj\x00cch\x00ccp\x00ceheceb\x00cfa\x00cgg\x00chhachk\x00" +
-       "chm\x00cho\x00chp\x00chr\x00cja\x00cjm\x00cjv\x00ckb\x00ckl\x00cko\x00ck" +
-       "y\x00cla\x00cme\x00cooscop\x00cps\x00crrecrj\x00crk\x00crl\x00crm\x00crs" +
-       "\x00csescsb\x00csw\x00ctd\x00cuhucvhvcyymdaandad\x00daf\x00dag\x00dah" +
-       "\x00dak\x00dar\x00dav\x00dbd\x00dbq\x00dcc\x00ddn\x00deeuded\x00den\x00d" +
-       "ga\x00dgh\x00dgi\x00dgl\x00dgr\x00dgz\x00dia\x00dje\x00dnj\x00dob\x00doi" +
-       "\x00dop\x00dow\x00dri\x00drs\x00dsb\x00dtm\x00dtp\x00dts\x00dty\x00dua" +
-       "\x00duc\x00dud\x00dug\x00dvivdva\x00dww\x00dyo\x00dyu\x00dzzodzg\x00ebu" +
-       "\x00eeweefi\x00egl\x00egy\x00eky\x00elllema\x00emi\x00enngenn\x00enq\x00" +
-       "eopoeri\x00es\x00\x05esu\x00etstetr\x00ett\x00etu\x00etx\x00euusewo\x00e" +
-       "xt\x00faasfaa\x00fab\x00fag\x00fai\x00fan\x00ffulffi\x00ffm\x00fiinfia" +
-       "\x00fil\x00fit\x00fjijflr\x00fmp\x00foaofod\x00fon\x00for\x00fpe\x00fqs" +
-       "\x00frrafrc\x00frp\x00frr\x00frs\x00fub\x00fud\x00fue\x00fuf\x00fuh\x00f" +
-       "uq\x00fur\x00fuv\x00fuy\x00fvr\x00fyrygalegaa\x00gaf\x00gag\x00gah\x00ga" +
-       "j\x00gam\x00gan\x00gaw\x00gay\x00gbf\x00gbm\x00gby\x00gbz\x00gcr\x00gdla" +
-       "gde\x00gdn\x00gdr\x00geb\x00gej\x00gel\x00gez\x00gfk\x00ggn\x00ghs\x00gi" +
-       "l\x00gim\x00gjk\x00gjn\x00gju\x00gkn\x00gkp\x00gllgglk\x00gmm\x00gmv\x00" +
-       "gnrngnd\x00gng\x00god\x00gof\x00goi\x00gom\x00gon\x00gor\x00gos\x00got" +
-       "\x00grc\x00grt\x00grw\x00gsw\x00guujgub\x00guc\x00gud\x00gur\x00guw\x00g" +
-       "ux\x00guz\x00gvlvgvf\x00gvr\x00gvs\x00gwc\x00gwi\x00gwt\x00gyi\x00haauha" +
-       "g\x00hak\x00ham\x00haw\x00haz\x00hbb\x00hdy\x00heebhhy\x00hiinhia\x00hif" +
-       "\x00hig\x00hih\x00hil\x00hla\x00hlu\x00hmd\x00hmt\x00hnd\x00hne\x00hnj" +
-       "\x00hnn\x00hno\x00homohoc\x00hoj\x00hot\x00hrrvhsb\x00hsn\x00htathuunhui" +
-       "\x00hyyehzerianaian\x00iar\x00iba\x00ibb\x00iby\x00ica\x00ich\x00idndidd" +
-       "\x00idi\x00idu\x00ieleigboigb\x00ige\x00iiiiijj\x00ikpkikk\x00ikt\x00ikw" +
-       "\x00ikx\x00ilo\x00imo\x00inndinh\x00iodoiou\x00iri\x00isslittaiukuiw\x00" +
-       "\x03iwm\x00iws\x00izh\x00izi\x00japnjab\x00jam\x00jbo\x00jbu\x00jen\x00j" +
-       "gk\x00jgo\x00ji\x00\x06jib\x00jmc\x00jml\x00jra\x00jut\x00jvavjwavkaatka" +
-       "a\x00kab\x00kac\x00kad\x00kai\x00kaj\x00kam\x00kao\x00kbd\x00kbm\x00kbp" +
-       "\x00kbq\x00kbx\x00kby\x00kcg\x00kck\x00kcl\x00kct\x00kde\x00kdh\x00kdl" +
-       "\x00kdt\x00kea\x00ken\x00kez\x00kfo\x00kfr\x00kfy\x00kgonkge\x00kgf\x00k" +
-       "gp\x00kha\x00khb\x00khn\x00khq\x00khs\x00kht\x00khw\x00khz\x00kiikkij" +
-       "\x00kiu\x00kiw\x00kjuakjd\x00kjg\x00kjs\x00kjy\x00kkazkkc\x00kkj\x00klal" +
-       "kln\x00klq\x00klt\x00klx\x00kmhmkmb\x00kmh\x00kmo\x00kms\x00kmu\x00kmw" +
-       "\x00knanknp\x00koorkoi\x00kok\x00kol\x00kos\x00koz\x00kpe\x00kpf\x00kpo" +
-       "\x00kpr\x00kpx\x00kqb\x00kqf\x00kqs\x00kqy\x00kraukrc\x00kri\x00krj\x00k" +
-       "rl\x00krs\x00kru\x00ksasksb\x00ksd\x00ksf\x00ksh\x00ksj\x00ksr\x00ktb" +
-       "\x00ktm\x00kto\x00kuurkub\x00kud\x00kue\x00kuj\x00kum\x00kun\x00kup\x00k" +
-       "us\x00kvomkvg\x00kvr\x00kvx\x00kw\x00\x01kwj\x00kwo\x00kxa\x00kxc\x00kxm" +
-       "\x00kxp\x00kxw\x00kxz\x00kyirkye\x00kyx\x00kzr\x00laatlab\x00lad\x00lag" +
-       "\x00lah\x00laj\x00las\x00lbtzlbe\x00lbu\x00lbw\x00lcm\x00lcp\x00ldb\x00l" +
-       "ed\x00lee\x00lem\x00lep\x00leq\x00leu\x00lez\x00lguglgg\x00liimlia\x00li" +
-       "d\x00lif\x00lig\x00lih\x00lij\x00lis\x00ljp\x00lki\x00lkt\x00lle\x00lln" +
-       "\x00lmn\x00lmo\x00lmp\x00lninlns\x00lnu\x00loaoloj\x00lok\x00lol\x00lor" +
-       "\x00los\x00loz\x00lrc\x00ltitltg\x00luublua\x00luo\x00luy\x00luz\x00lvav" +
-       "lwl\x00lzh\x00lzz\x00mad\x00maf\x00mag\x00mai\x00mak\x00man\x00mas\x00ma" +
-       "w\x00maz\x00mbh\x00mbo\x00mbq\x00mbu\x00mbw\x00mci\x00mcp\x00mcq\x00mcr" +
-       "\x00mcu\x00mda\x00mde\x00mdf\x00mdh\x00mdj\x00mdr\x00mdx\x00med\x00mee" +
-       "\x00mek\x00men\x00mer\x00met\x00meu\x00mfa\x00mfe\x00mfn\x00mfo\x00mfq" +
-       "\x00mglgmgh\x00mgl\x00mgo\x00mgp\x00mgy\x00mhahmhi\x00mhl\x00mirimif\x00" +
-       "min\x00mis\x00miw\x00mkkdmki\x00mkl\x00mkp\x00mkw\x00mlalmle\x00mlp\x00m" +
-       "ls\x00mmo\x00mmu\x00mmx\x00mnonmna\x00mnf\x00mni\x00mnw\x00moolmoa\x00mo" +
-       "e\x00moh\x00mos\x00mox\x00mpp\x00mps\x00mpt\x00mpx\x00mql\x00mrarmrd\x00" +
-       "mrj\x00mro\x00mssamtltmtc\x00mtf\x00mti\x00mtr\x00mua\x00mul\x00mur\x00m" +
-       "us\x00mva\x00mvn\x00mvy\x00mwk\x00mwr\x00mwv\x00mxc\x00mxm\x00myyamyk" +
-       "\x00mym\x00myv\x00myw\x00myx\x00myz\x00mzk\x00mzm\x00mzn\x00mzp\x00mzw" +
-       "\x00mzz\x00naaunac\x00naf\x00nah\x00nak\x00nan\x00nap\x00naq\x00nas\x00n" +
-       "bobnca\x00nce\x00ncf\x00nch\x00nco\x00ncu\x00nddendc\x00nds\x00neepneb" +
-       "\x00new\x00nex\x00nfr\x00ngdonga\x00ngb\x00ngl\x00nhb\x00nhe\x00nhw\x00n" +
-       "if\x00nii\x00nij\x00nin\x00niu\x00niy\x00niz\x00njo\x00nkg\x00nko\x00nll" +
-       "dnmg\x00nmz\x00nnnonnf\x00nnh\x00nnk\x00nnm\x00noornod\x00noe\x00non\x00" +
-       "nop\x00nou\x00nqo\x00nrblnrb\x00nsk\x00nsn\x00nso\x00nss\x00ntm\x00ntr" +
-       "\x00nui\x00nup\x00nus\x00nuv\x00nux\x00nvavnwb\x00nxq\x00nxr\x00nyyanym" +
-       "\x00nyn\x00nzi\x00occiogc\x00ojjiokr\x00okv\x00omrmong\x00onn\x00ons\x00" +
-       "opm\x00orrioro\x00oru\x00osssosa\x00ota\x00otk\x00ozm\x00paanpag\x00pal" +
-       "\x00pam\x00pap\x00pau\x00pbi\x00pcd\x00pcm\x00pdc\x00pdt\x00ped\x00peo" +
-       "\x00pex\x00pfl\x00phl\x00phn\x00pilipil\x00pip\x00pka\x00pko\x00plolpla" +
-       "\x00pms\x00png\x00pnn\x00pnt\x00pon\x00ppo\x00pra\x00prd\x00prg\x00psusp" +
-       "ss\x00ptorptp\x00puu\x00pwa\x00quuequc\x00qug\x00rai\x00raj\x00rao\x00rc" +
-       "f\x00rej\x00rel\x00res\x00rgn\x00rhg\x00ria\x00rif\x00rjs\x00rkt\x00rmoh" +
-       "rmf\x00rmo\x00rmt\x00rmu\x00rnunrna\x00rng\x00roonrob\x00rof\x00roo\x00r" +
-       "ro\x00rtm\x00ruusrue\x00rug\x00rw\x00\x04rwk\x00rwo\x00ryu\x00saansaf" +
-       "\x00sah\x00saq\x00sas\x00sat\x00saz\x00sba\x00sbe\x00sbp\x00scrdsck\x00s" +
-       "cl\x00scn\x00sco\x00scs\x00sdndsdc\x00sdh\x00semesef\x00seh\x00sei\x00se" +
-       "s\x00sgagsga\x00sgs\x00sgw\x00sgz\x00sh\x00\x02shi\x00shk\x00shn\x00shu" +
-       "\x00siinsid\x00sig\x00sil\x00sim\x00sjr\x00sklkskc\x00skr\x00sks\x00sllv" +
-       "sld\x00sli\x00sll\x00sly\x00smmosma\x00smi\x00smj\x00smn\x00smp\x00smq" +
-       "\x00sms\x00snnasnc\x00snk\x00snp\x00snx\x00sny\x00soomsok\x00soq\x00sou" +
-       "\x00soy\x00spd\x00spl\x00sps\x00sqqisrrpsrb\x00srn\x00srr\x00srx\x00sssw" +
-       "ssd\x00ssg\x00ssy\x00stotstk\x00stq\x00suunsua\x00sue\x00suk\x00sur\x00s" +
-       "us\x00svweswwaswb\x00swc\x00swg\x00swp\x00swv\x00sxn\x00sxw\x00syl\x00sy" +
-       "r\x00szl\x00taamtaj\x00tal\x00tan\x00taq\x00tbc\x00tbd\x00tbf\x00tbg\x00" +
-       "tbo\x00tbw\x00tbz\x00tci\x00tcy\x00tdd\x00tdg\x00tdh\x00teelted\x00tem" +
-       "\x00teo\x00tet\x00tfi\x00tggktgc\x00tgo\x00tgu\x00thhathl\x00thq\x00thr" +
-       "\x00tiirtif\x00tig\x00tik\x00tim\x00tio\x00tiv\x00tkuktkl\x00tkr\x00tkt" +
-       "\x00tlgltlf\x00tlx\x00tly\x00tmh\x00tmy\x00tnsntnh\x00toontof\x00tog\x00" +
-       "toq\x00tpi\x00tpm\x00tpz\x00tqo\x00trurtru\x00trv\x00trw\x00tssotsd\x00t" +
-       "sf\x00tsg\x00tsj\x00tsw\x00ttatttd\x00tte\x00ttj\x00ttr\x00tts\x00ttt" +
-       "\x00tuh\x00tul\x00tum\x00tuq\x00tvd\x00tvl\x00tvu\x00twwitwh\x00twq\x00t" +
-       "xg\x00tyahtya\x00tyv\x00tzm\x00ubu\x00udm\x00ugiguga\x00ukkruli\x00umb" +
-       "\x00und\x00unr\x00unx\x00urrduri\x00urt\x00urw\x00usa\x00utr\x00uvh\x00u" +
-       "vl\x00uzzbvag\x00vai\x00van\x00veenvec\x00vep\x00viievic\x00viv\x00vls" +
-       "\x00vmf\x00vmw\x00voolvot\x00vro\x00vun\x00vut\x00walnwae\x00waj\x00wal" +
-       "\x00wan\x00war\x00wbp\x00wbq\x00wbr\x00wci\x00wer\x00wgi\x00whg\x00wib" +
-       "\x00wiu\x00wiv\x00wja\x00wji\x00wls\x00wmo\x00wnc\x00wni\x00wnu\x00woolw" +
-       "ob\x00wos\x00wrs\x00wsk\x00wtm\x00wuu\x00wuv\x00wwa\x00xav\x00xbi\x00xcr" +
-       "\x00xes\x00xhhoxla\x00xlc\x00xld\x00xmf\x00xmn\x00xmr\x00xna\x00xnr\x00x" +
-       "og\x00xon\x00xpr\x00xrb\x00xsa\x00xsi\x00xsm\x00xsr\x00xwe\x00yam\x00yao" +
-       "\x00yap\x00yas\x00yat\x00yav\x00yay\x00yaz\x00yba\x00ybb\x00yby\x00yer" +
-       "\x00ygr\x00ygw\x00yiidyko\x00yle\x00ylg\x00yll\x00yml\x00yooryon\x00yrb" +
-       "\x00yre\x00yrl\x00yss\x00yua\x00yue\x00yuj\x00yut\x00yuw\x00zahazag\x00z" +
-       "bl\x00zdj\x00zea\x00zgh\x00zhhozia\x00zlm\x00zmi\x00zne\x00zuulzxx\x00zz" +
-       "a\x00\xff\xff\xff\xff"
+const lang tag.Index = "" + // Size: 5312 bytes
+       "---\x00aaaraai\x00aak\x00aau\x00abbkabi\x00abq\x00abr\x00abt\x00aby\x00a" +
+       "cd\x00ace\x00ach\x00ada\x00ade\x00adj\x00ady\x00adz\x00aeveaeb\x00aey" +
+       "\x00affragc\x00agd\x00agg\x00agm\x00ago\x00agq\x00aha\x00ahl\x00aho\x00a" +
+       "jg\x00akkaakk\x00ala\x00ali\x00aln\x00alt\x00ammhamm\x00amn\x00amo\x00am" +
+       "p\x00anrganc\x00ank\x00ann\x00any\x00aoj\x00aom\x00aoz\x00apc\x00apd\x00" +
+       "ape\x00apr\x00aps\x00apz\x00arraarc\x00arh\x00arn\x00aro\x00arq\x00ars" +
+       "\x00ary\x00arz\x00assmasa\x00ase\x00asg\x00aso\x00ast\x00ata\x00atg\x00a" +
+       "tj\x00auy\x00avvaavl\x00avn\x00avt\x00avu\x00awa\x00awb\x00awo\x00awx" +
+       "\x00ayymayb\x00azzebaakbal\x00ban\x00bap\x00bar\x00bas\x00bav\x00bax\x00" +
+       "bba\x00bbb\x00bbc\x00bbd\x00bbj\x00bbp\x00bbr\x00bcf\x00bch\x00bci\x00bc" +
+       "m\x00bcn\x00bco\x00bcq\x00bcu\x00bdd\x00beelbef\x00beh\x00bej\x00bem\x00" +
+       "bet\x00bew\x00bex\x00bez\x00bfd\x00bfq\x00bft\x00bfy\x00bgulbgc\x00bgn" +
+       "\x00bgx\x00bhihbhb\x00bhg\x00bhi\x00bhk\x00bhl\x00bho\x00bhy\x00biisbib" +
+       "\x00big\x00bik\x00bim\x00bin\x00bio\x00biq\x00bjh\x00bji\x00bjj\x00bjn" +
+       "\x00bjo\x00bjr\x00bjt\x00bjz\x00bkc\x00bkm\x00bkq\x00bku\x00bkv\x00blt" +
+       "\x00bmambmh\x00bmk\x00bmq\x00bmu\x00bnenbng\x00bnm\x00bnp\x00boodboj\x00" +
+       "bom\x00bon\x00bpy\x00bqc\x00bqi\x00bqp\x00bqv\x00brrebra\x00brh\x00brx" +
+       "\x00brz\x00bsosbsj\x00bsq\x00bss\x00bst\x00bto\x00btt\x00btv\x00bua\x00b" +
+       "uc\x00bud\x00bug\x00buk\x00bum\x00buo\x00bus\x00buu\x00bvb\x00bwd\x00bwr" +
+       "\x00bxh\x00bye\x00byn\x00byr\x00bys\x00byv\x00byx\x00bza\x00bze\x00bzf" +
+       "\x00bzh\x00bzw\x00caatcan\x00cbj\x00cch\x00ccp\x00ceheceb\x00cfa\x00cgg" +
+       "\x00chhachk\x00chm\x00cho\x00chp\x00chr\x00cja\x00cjm\x00cjv\x00ckb\x00c" +
+       "kl\x00cko\x00cky\x00cla\x00cme\x00cooscop\x00cps\x00crrecrh\x00crj\x00cr" +
+       "k\x00crl\x00crm\x00crs\x00csescsb\x00csw\x00ctd\x00cuhucvhvcyymdaandad" +
+       "\x00daf\x00dag\x00dah\x00dak\x00dar\x00dav\x00dbd\x00dbq\x00dcc\x00ddn" +
+       "\x00deeuded\x00den\x00dga\x00dgh\x00dgi\x00dgl\x00dgr\x00dgz\x00dia\x00d" +
+       "je\x00dnj\x00dob\x00doi\x00dop\x00dow\x00dri\x00drs\x00dsb\x00dtm\x00dtp" +
+       "\x00dts\x00dty\x00dua\x00duc\x00dud\x00dug\x00dvivdva\x00dww\x00dyo\x00d" +
+       "yu\x00dzzodzg\x00ebu\x00eeweefi\x00egl\x00egy\x00eka\x00eky\x00elllema" +
+       "\x00emi\x00enngenn\x00enq\x00eopoeri\x00es\x00\x05esu\x00etstetr\x00ett" +
+       "\x00etu\x00etx\x00euusewo\x00ext\x00faasfaa\x00fab\x00fag\x00fai\x00fan" +
+       "\x00ffulffi\x00ffm\x00fiinfia\x00fil\x00fit\x00fjijflr\x00fmp\x00foaofod" +
+       "\x00fon\x00for\x00fpe\x00fqs\x00frrafrc\x00frp\x00frr\x00frs\x00fub\x00f" +
+       "ud\x00fue\x00fuf\x00fuh\x00fuq\x00fur\x00fuv\x00fuy\x00fvr\x00fyrygalega" +
+       "a\x00gaf\x00gag\x00gah\x00gaj\x00gam\x00gan\x00gaw\x00gay\x00gbf\x00gbm" +
+       "\x00gby\x00gbz\x00gcr\x00gdlagde\x00gdn\x00gdr\x00geb\x00gej\x00gel\x00g" +
+       "ez\x00gfk\x00ggn\x00ghs\x00gil\x00gim\x00gjk\x00gjn\x00gju\x00gkn\x00gkp" +
+       "\x00gllgglk\x00gmm\x00gmv\x00gnrngnd\x00gng\x00god\x00gof\x00goi\x00gom" +
+       "\x00gon\x00gor\x00gos\x00got\x00grb\x00grc\x00grt\x00grw\x00gsw\x00guujg" +
+       "ub\x00guc\x00gud\x00gur\x00guw\x00gux\x00guz\x00gvlvgvf\x00gvr\x00gvs" +
+       "\x00gwc\x00gwi\x00gwt\x00gyi\x00haauhag\x00hak\x00ham\x00haw\x00haz\x00h" +
+       "bb\x00hdy\x00heebhhy\x00hiinhia\x00hif\x00hig\x00hih\x00hil\x00hla\x00hl" +
+       "u\x00hmd\x00hmt\x00hnd\x00hne\x00hnj\x00hnn\x00hno\x00homohoc\x00hoj\x00" +
+       "hot\x00hrrvhsb\x00hsn\x00htathuunhui\x00hyyehzerianaian\x00iar\x00iba" +
+       "\x00ibb\x00iby\x00ica\x00ich\x00idndidd\x00idi\x00idu\x00ieleife\x00igbo" +
+       "igb\x00ige\x00iiiiijj\x00ikpkikk\x00ikt\x00ikw\x00ikx\x00ilo\x00imo\x00i" +
+       "nndinh\x00iodoiou\x00iri\x00isslittaiukuiw\x00\x03iwm\x00iws\x00izh\x00i" +
+       "zi\x00japnjab\x00jam\x00jbo\x00jbu\x00jen\x00jgk\x00jgo\x00ji\x00\x06jib" +
+       "\x00jmc\x00jml\x00jra\x00jut\x00jvavjwavkaatkaa\x00kab\x00kac\x00kad\x00" +
+       "kai\x00kaj\x00kam\x00kao\x00kbd\x00kbm\x00kbp\x00kbq\x00kbx\x00kby\x00kc" +
+       "g\x00kck\x00kcl\x00kct\x00kde\x00kdh\x00kdl\x00kdt\x00kea\x00ken\x00kez" +
+       "\x00kfo\x00kfr\x00kfy\x00kgonkge\x00kgf\x00kgp\x00kha\x00khb\x00khn\x00k" +
+       "hq\x00khs\x00kht\x00khw\x00khz\x00kiikkij\x00kiu\x00kiw\x00kjuakjd\x00kj" +
+       "g\x00kjs\x00kjy\x00kkazkkc\x00kkj\x00klalkln\x00klq\x00klt\x00klx\x00kmh" +
+       "mkmb\x00kmh\x00kmo\x00kms\x00kmu\x00kmw\x00knanknf\x00knp\x00koorkoi\x00" +
+       "kok\x00kol\x00kos\x00koz\x00kpe\x00kpf\x00kpo\x00kpr\x00kpx\x00kqb\x00kq" +
+       "f\x00kqs\x00kqy\x00kraukrc\x00kri\x00krj\x00krl\x00krs\x00kru\x00ksasksb" +
+       "\x00ksd\x00ksf\x00ksh\x00ksj\x00ksr\x00ktb\x00ktm\x00kto\x00kuurkub\x00k" +
+       "ud\x00kue\x00kuj\x00kum\x00kun\x00kup\x00kus\x00kvomkvg\x00kvr\x00kvx" +
+       "\x00kw\x00\x01kwj\x00kwo\x00kxa\x00kxc\x00kxm\x00kxp\x00kxw\x00kxz\x00ky" +
+       "irkye\x00kyx\x00kzr\x00laatlab\x00lad\x00lag\x00lah\x00laj\x00las\x00lbt" +
+       "zlbe\x00lbu\x00lbw\x00lcm\x00lcp\x00ldb\x00led\x00lee\x00lem\x00lep\x00l" +
+       "eq\x00leu\x00lez\x00lguglgg\x00liimlia\x00lid\x00lif\x00lig\x00lih\x00li" +
+       "j\x00lis\x00ljp\x00lki\x00lkt\x00lle\x00lln\x00lmn\x00lmo\x00lmp\x00lnin" +
+       "lns\x00lnu\x00loaoloj\x00lok\x00lol\x00lor\x00los\x00loz\x00lrc\x00ltitl" +
+       "tg\x00luublua\x00luo\x00luy\x00luz\x00lvavlwl\x00lzh\x00lzz\x00mad\x00ma" +
+       "f\x00mag\x00mai\x00mak\x00man\x00mas\x00maw\x00maz\x00mbh\x00mbo\x00mbq" +
+       "\x00mbu\x00mbw\x00mci\x00mcp\x00mcq\x00mcr\x00mcu\x00mda\x00mde\x00mdf" +
+       "\x00mdh\x00mdj\x00mdr\x00mdx\x00med\x00mee\x00mek\x00men\x00mer\x00met" +
+       "\x00meu\x00mfa\x00mfe\x00mfn\x00mfo\x00mfq\x00mglgmgh\x00mgl\x00mgo\x00m" +
+       "gp\x00mgy\x00mhahmhi\x00mhl\x00mirimif\x00min\x00mis\x00miw\x00mkkdmki" +
+       "\x00mkl\x00mkp\x00mkw\x00mlalmle\x00mlp\x00mls\x00mmo\x00mmu\x00mmx\x00m" +
+       "nonmna\x00mnf\x00mni\x00mnw\x00moolmoa\x00moe\x00moh\x00mos\x00mox\x00mp" +
+       "p\x00mps\x00mpt\x00mpx\x00mql\x00mrarmrd\x00mrj\x00mro\x00mssamtltmtc" +
+       "\x00mtf\x00mti\x00mtr\x00mua\x00mul\x00mur\x00mus\x00mva\x00mvn\x00mvy" +
+       "\x00mwk\x00mwr\x00mwv\x00mxc\x00mxm\x00myyamyk\x00mym\x00myv\x00myw\x00m" +
+       "yx\x00myz\x00mzk\x00mzm\x00mzn\x00mzp\x00mzw\x00mzz\x00naaunac\x00naf" +
+       "\x00nah\x00nak\x00nan\x00nap\x00naq\x00nas\x00nbobnca\x00nce\x00ncf\x00n" +
+       "ch\x00nco\x00ncu\x00nddendc\x00nds\x00neepneb\x00new\x00nex\x00nfr\x00ng" +
+       "donga\x00ngb\x00ngl\x00nhb\x00nhe\x00nhw\x00nif\x00nii\x00nij\x00nin\x00" +
+       "niu\x00niy\x00niz\x00njo\x00nkg\x00nko\x00nlldnmg\x00nmz\x00nnnonnf\x00n" +
+       "nh\x00nnk\x00nnm\x00noornod\x00noe\x00non\x00nop\x00nou\x00nqo\x00nrblnr" +
+       "b\x00nsk\x00nsn\x00nso\x00nss\x00ntm\x00ntr\x00nui\x00nup\x00nus\x00nuv" +
+       "\x00nux\x00nvavnwb\x00nxq\x00nxr\x00nyyanym\x00nyn\x00nzi\x00occiogc\x00" +
+       "ojjiokr\x00okv\x00omrmong\x00onn\x00ons\x00opm\x00orrioro\x00oru\x00osss" +
+       "osa\x00ota\x00otk\x00ozm\x00paanpag\x00pal\x00pam\x00pap\x00pau\x00pbi" +
+       "\x00pcd\x00pcm\x00pdc\x00pdt\x00ped\x00peo\x00pex\x00pfl\x00phl\x00phn" +
+       "\x00pilipil\x00pip\x00pka\x00pko\x00plolpla\x00pms\x00png\x00pnn\x00pnt" +
+       "\x00pon\x00ppo\x00pra\x00prd\x00prg\x00psuspss\x00ptorptp\x00puu\x00pwa" +
+       "\x00quuequc\x00qug\x00rai\x00raj\x00rao\x00rcf\x00rej\x00rel\x00res\x00r" +
+       "gn\x00rhg\x00ria\x00rif\x00rjs\x00rkt\x00rmohrmf\x00rmo\x00rmt\x00rmu" +
+       "\x00rnunrna\x00rng\x00roonrob\x00rof\x00roo\x00rro\x00rtm\x00ruusrue\x00" +
+       "rug\x00rw\x00\x04rwk\x00rwo\x00ryu\x00saansaf\x00sah\x00saq\x00sas\x00sa" +
+       "t\x00sav\x00saz\x00sba\x00sbe\x00sbp\x00scrdsck\x00scl\x00scn\x00sco\x00" +
+       "scs\x00sdndsdc\x00sdh\x00semesef\x00seh\x00sei\x00ses\x00sgagsga\x00sgs" +
+       "\x00sgw\x00sgz\x00sh\x00\x02shi\x00shk\x00shn\x00shu\x00siinsid\x00sig" +
+       "\x00sil\x00sim\x00sjr\x00sklkskc\x00skr\x00sks\x00sllvsld\x00sli\x00sll" +
+       "\x00sly\x00smmosma\x00smi\x00smj\x00smn\x00smp\x00smq\x00sms\x00snnasnc" +
+       "\x00snk\x00snp\x00snx\x00sny\x00soomsok\x00soq\x00sou\x00soy\x00spd\x00s" +
+       "pl\x00sps\x00sqqisrrpsrb\x00srn\x00srr\x00srx\x00ssswssd\x00ssg\x00ssy" +
+       "\x00stotstk\x00stq\x00suunsua\x00sue\x00suk\x00sur\x00sus\x00svweswwaswb" +
+       "\x00swc\x00swg\x00swp\x00swv\x00sxn\x00sxw\x00syl\x00syr\x00szl\x00taamt" +
+       "aj\x00tal\x00tan\x00taq\x00tbc\x00tbd\x00tbf\x00tbg\x00tbo\x00tbw\x00tbz" +
+       "\x00tci\x00tcy\x00tdd\x00tdg\x00tdh\x00teelted\x00tem\x00teo\x00tet\x00t" +
+       "fi\x00tggktgc\x00tgo\x00tgu\x00thhathl\x00thq\x00thr\x00tiirtif\x00tig" +
+       "\x00tik\x00tim\x00tio\x00tiv\x00tkuktkl\x00tkr\x00tkt\x00tlgltlf\x00tlx" +
+       "\x00tly\x00tmh\x00tmy\x00tnsntnh\x00toontof\x00tog\x00toq\x00tpi\x00tpm" +
+       "\x00tpz\x00tqo\x00trurtru\x00trv\x00trw\x00tssotsd\x00tsf\x00tsg\x00tsj" +
+       "\x00tsw\x00ttatttd\x00tte\x00ttj\x00ttr\x00tts\x00ttt\x00tuh\x00tul\x00t" +
+       "um\x00tuq\x00tvd\x00tvl\x00tvu\x00twwitwh\x00twq\x00txg\x00tyahtya\x00ty" +
+       "v\x00tzm\x00ubu\x00udm\x00ugiguga\x00ukkruli\x00umb\x00und\x00unr\x00unx" +
+       "\x00urrduri\x00urt\x00urw\x00usa\x00utr\x00uvh\x00uvl\x00uzzbvag\x00vai" +
+       "\x00van\x00veenvec\x00vep\x00viievic\x00viv\x00vls\x00vmf\x00vmw\x00vool" +
+       "vot\x00vro\x00vun\x00vut\x00walnwae\x00waj\x00wal\x00wan\x00war\x00wbp" +
+       "\x00wbq\x00wbr\x00wci\x00wer\x00wgi\x00whg\x00wib\x00wiu\x00wiv\x00wja" +
+       "\x00wji\x00wls\x00wmo\x00wnc\x00wni\x00wnu\x00woolwob\x00wos\x00wrs\x00w" +
+       "sk\x00wtm\x00wuu\x00wuv\x00wwa\x00xav\x00xbi\x00xcr\x00xes\x00xhhoxla" +
+       "\x00xlc\x00xld\x00xmf\x00xmn\x00xmr\x00xna\x00xnr\x00xog\x00xon\x00xpr" +
+       "\x00xrb\x00xsa\x00xsi\x00xsm\x00xsr\x00xwe\x00yam\x00yao\x00yap\x00yas" +
+       "\x00yat\x00yav\x00yay\x00yaz\x00yba\x00ybb\x00yby\x00yer\x00ygr\x00ygw" +
+       "\x00yiidyko\x00yle\x00ylg\x00yll\x00yml\x00yooryon\x00yrb\x00yre\x00yrl" +
+       "\x00yss\x00yua\x00yue\x00yuj\x00yut\x00yuw\x00zahazag\x00zbl\x00zdj\x00z" +
+       "ea\x00zgh\x00zhhozia\x00zlm\x00zmi\x00zne\x00zuulzxx\x00zza\x00\xff\xff" +
+       "\xff\xff"
 
-const langNoIndexOffset = 1319
+const langNoIndexOffset = 1327
 
 // langNoIndex is a bit vector of all 3-letter language codes that are not used as an index
 // in lookup tables. The language ids for these language codes are derived directly
@@ -258,7 +259,7 @@ const langNoIndexOffset = 1319
 // Size: 2197 bytes, 2197 elements
 var langNoIndex = [2197]uint8{
        // Entry 0 - 3F
-       0xff, 0xf8, 0xed, 0xfe, 0xeb, 0xd7, 0x3b, 0xd2,
+       0xff, 0xf8, 0xed, 0xfe, 0xeb, 0xd3, 0x3b, 0xd2,
        0xfb, 0xbf, 0x7a, 0xfa, 0x37, 0x1d, 0x3c, 0x57,
        0x6e, 0x97, 0x73, 0x38, 0xfb, 0xea, 0xbf, 0x70,
        0xad, 0x03, 0xff, 0xff, 0xcf, 0x05, 0x84, 0x62,
@@ -273,7 +274,7 @@ var langNoIndex = [2197]uint8{
        0x7c, 0x5f, 0xff, 0x5f, 0x8e, 0x6e, 0xdf, 0xff,
        0xff, 0xff, 0x55, 0x7c, 0xd3, 0xfd, 0xbf, 0xb5,
        0x7b, 0xdf, 0x7f, 0xf7, 0xca, 0xfe, 0xdb, 0xa3,
-       0xa8, 0xff, 0x1f, 0x67, 0x7f, 0xeb, 0xef, 0xce,
+       0xa8, 0xff, 0x1f, 0x67, 0x7d, 0xeb, 0xef, 0xce,
        0xff, 0xff, 0x9f, 0xff, 0xb7, 0xef, 0xfe, 0xcf,
        // Entry 80 - BF
        0xdb, 0xff, 0xf3, 0xcd, 0xfb, 0x2f, 0xff, 0xff,
@@ -289,7 +290,7 @@ var langNoIndex = [2197]uint8{
        0x1b, 0x14, 0x08, 0xf2, 0x2b, 0xe7, 0x17, 0x56,
        0x45, 0x7d, 0x0e, 0x1c, 0x37, 0x71, 0xf3, 0xef,
        0x97, 0xff, 0x5d, 0x38, 0x64, 0x08, 0x00, 0x10,
-       0xbc, 0x87, 0xaf, 0xdf, 0xff, 0xf7, 0x73, 0x35,
+       0xbc, 0x85, 0xaf, 0xdf, 0xff, 0xf7, 0x73, 0x35,
        0x3e, 0x87, 0xc7, 0xdf, 0xff, 0x00, 0x81, 0x00,
        0xb0, 0x05, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03,
        0x40, 0x00, 0x40, 0x92, 0x21, 0x50, 0xb1, 0x5d,
@@ -309,7 +310,7 @@ var langNoIndex = [2197]uint8{
        0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x10,
        0x00, 0x00, 0x44, 0x00, 0x00, 0x10, 0x00, 0x04,
        0x08, 0x00, 0x00, 0x04, 0x00, 0x80, 0x28, 0x04,
-       0x00, 0x00, 0x50, 0xd5, 0x2d, 0x00, 0x64, 0x35,
+       0x00, 0x00, 0x40, 0xd5, 0x2d, 0x00, 0x64, 0x35,
        0x24, 0x52, 0xf4, 0xd4, 0xbd, 0x62, 0xc9, 0x03,
        // Entry 180 - 1BF
        0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
@@ -336,7 +337,7 @@ var langNoIndex = [2197]uint8{
        0x03, 0x44, 0x08, 0x10, 0x01, 0x04, 0x01, 0xe3,
        0x92, 0x54, 0xdb, 0x28, 0xd1, 0x5f, 0xf6, 0x6d,
        0x79, 0xed, 0x1c, 0x7d, 0x04, 0x08, 0x00, 0x01,
-       0x21, 0x12, 0x6c, 0x5f, 0xdd, 0x0e, 0x85, 0x4f,
+       0x21, 0x12, 0x64, 0x5f, 0xdd, 0x0e, 0x85, 0x4f,
        0x40, 0x40, 0x00, 0x04, 0xf1, 0xfd, 0x3d, 0x54,
        // Entry 240 - 27F
        0xe8, 0x03, 0xb4, 0x27, 0x23, 0x0d, 0x00, 0x00,
@@ -354,7 +355,7 @@ var langNoIndex = [2197]uint8{
        0x40, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
        0x08, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x60,
        0xe5, 0x48, 0x00, 0x81, 0x20, 0xc0, 0x05, 0x80,
-       0x03, 0x00, 0x00, 0x00, 0xcc, 0x50, 0x40, 0x04,
+       0x03, 0x00, 0x00, 0x00, 0x8c, 0x50, 0x40, 0x04,
        0x84, 0x47, 0x84, 0x40, 0x20, 0x10, 0x00, 0x20,
        // Entry 2C0 - 2FF
        0x02, 0x50, 0x80, 0x11, 0x00, 0x91, 0x6c, 0xe2,
@@ -381,7 +382,7 @@ var langNoIndex = [2197]uint8{
        0xfd, 0xfc, 0xfe, 0xdf, 0xff, 0xfd, 0xff, 0xf6,
        0xfb, 0xfc, 0xf7, 0x1f, 0xff, 0xb3, 0x6c, 0xff,
        0xd9, 0xad, 0xdf, 0xfe, 0xef, 0xba, 0xdf, 0xff,
-       0xff, 0xff, 0xb7, 0xdd, 0x7d, 0xbf, 0xab, 0xff,
+       0xff, 0xff, 0xb7, 0xdd, 0x7d, 0xbf, 0xab, 0x7f,
        0xfd, 0xfd, 0xdf, 0x2f, 0x9c, 0xdf, 0xf3, 0x6f,
        // Entry 380 - 3BF
        0xdf, 0xdd, 0xff, 0xfb, 0xee, 0xd2, 0xab, 0x5f,
@@ -471,7 +472,7 @@ var langNoIndex = [2197]uint8{
        0x19, 0x00, 0x10, 0x02, 0x10, 0x61, 0x5a, 0x9d,
        0x31, 0x00, 0x00, 0x00, 0x01, 0x10, 0x02, 0x20,
        0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x20, 0x00,
-       0x00, 0x1f, 0xdf, 0xf2, 0xb9, 0xff, 0xfd, 0x3f,
+       0x00, 0x1f, 0xdf, 0xd2, 0xb9, 0xff, 0xfd, 0x3f,
        0x1f, 0x18, 0xcf, 0x9c, 0xbf, 0xaf, 0x5f, 0xfe,
        // Entry 600 - 63F
        0x7b, 0x4b, 0x40, 0x10, 0xe1, 0xfd, 0xaf, 0xd9,
@@ -572,178 +573,178 @@ var langNoIndex = [2197]uint8{
 // altLangISO3 holds an alphabetically sorted list of 3-letter language code alternatives
 // to 2-letter language codes that cannot be derived using the method described above.
 // Each 3-letter code is followed by its 1-byte langID.
-var altLangISO3 tag.Index = "---\x00cor\x00hbs\x01heb\x02kin\x03spa\x04yid\x05\xff\xff\xff\xff"
+const altLangISO3 tag.Index = "---\x00cor\x00hbs\x01heb\x02kin\x03spa\x04yid\x05\xff\xff\xff\xff"
 
 // altLangIndex is used to convert indexes in altLangISO3 to langIDs.
 // Size: 12 bytes, 6 elements
 var altLangIndex = [6]uint16{
-       0x0278, 0x03fd, 0x01f3, 0x03dc, 0x0139, 0x0200,
+       0x027f, 0x0405, 0x01f9, 0x03e3, 0x013d, 0x0206,
 }
 
 // langAliasMap maps langIDs to their suggested replacements.
 // Size: 644 bytes, 161 elements
 var langAliasMap = [161]fromTo{
-       0:   {from: 0x81, to: 0x87},
-       1:   {from: 0x181, to: 0x1a7},
-       2:   {from: 0x1eb, to: 0x1da},
-       3:   {from: 0x1f3, to: 0x1b5},
-       4:   {from: 0x200, to: 0x508},
-       5:   {from: 0x207, to: 0x206},
-       6:   {from: 0x307, to: 0x3d3},
-       7:   {from: 0x33e, to: 0x366},
-       8:   {from: 0x3fd, to: 0x428},
-       9:   {from: 0x470, to: 0x14e},
-       10:  {from: 0x486, to: 0x447},
-       11:  {from: 0x498, to: 0x20},
-       12:  {from: 0x533, to: 0x539},
-       13:  {from: 0x584, to: 0x129},
-       14:  {from: 0x625, to: 0x1ea6},
-       15:  {from: 0x646, to: 0x427},
-       16:  {from: 0x657, to: 0x427},
-       17:  {from: 0x6e2, to: 0x39},
-       18:  {from: 0x6ed, to: 0x1d0},
-       19:  {from: 0x733, to: 0x2196},
-       20:  {from: 0x7a8, to: 0x55},
-       21:  {from: 0x7ae, to: 0x2990},
-       22:  {from: 0x7ba, to: 0x57},
-       23:  {from: 0x7db, to: 0x140},
-       24:  {from: 0x801, to: 0x59},
-       25:  {from: 0x80a, to: 0x8c},
-       26:  {from: 0x873, to: 0x805},
-       27:  {from: 0x8b8, to: 0xed8},
-       28:  {from: 0x9e4, to: 0x328},
-       29:  {from: 0xa2b, to: 0x2bc},
-       30:  {from: 0xa32, to: 0xbd},
-       31:  {from: 0xab3, to: 0x3317},
-       32:  {from: 0xb2d, to: 0x51f},
-       33:  {from: 0xb6a, to: 0x264f},
-       34:  {from: 0xb73, to: 0xbb8},
-       35:  {from: 0xb90, to: 0x444},
-       36:  {from: 0xbb1, to: 0x421e},
-       37:  {from: 0xbb4, to: 0x51f},
-       38:  {from: 0xbf3, to: 0x2d9c},
-       39:  {from: 0xc23, to: 0x3176},
-       40:  {from: 0xcae, to: 0xf0},
-       41:  {from: 0xcfd, to: 0xf6},
-       42:  {from: 0xdbd, to: 0x116},
-       43:  {from: 0xdcc, to: 0x324},
-       44:  {from: 0xded, to: 0xdf0},
-       45:  {from: 0xdf3, to: 0x526},
-       46:  {from: 0xed4, to: 0x204f},
-       47:  {from: 0xee3, to: 0x2e8f},
-       48:  {from: 0xf2e, to: 0x35e},
-       49:  {from: 0x10c5, to: 0x13b},
-       50:  {from: 0x10f9, to: 0x2c7},
-       51:  {from: 0x1195, to: 0x1e4},
-       52:  {from: 0x126e, to: 0x20},
-       53:  {from: 0x1419, to: 0x159},
-       54:  {from: 0x1465, to: 0x149},
-       55:  {from: 0x1514, to: 0xd90},
-       56:  {from: 0x1518, to: 0x387},
-       57:  {from: 0x1527, to: 0x16ba},
-       58:  {from: 0x1575, to: 0x208},
-       59:  {from: 0x1578, to: 0x109},
-       60:  {from: 0x1598, to: 0x3ca4},
-       61:  {from: 0x165f, to: 0x195},
-       62:  {from: 0x16bd, to: 0x131},
-       63:  {from: 0x16f5, to: 0x29ed},
-       64:  {from: 0x170d, to: 0x18e},
-       65:  {from: 0x171c, to: 0xf34},
-       66:  {from: 0x176f, to: 0x1519},
-       67:  {from: 0x17fe, to: 0x17ab},
-       68:  {from: 0x180b, to: 0x18e8},
-       69:  {from: 0x187f, to: 0x42c},
-       70:  {from: 0x196e, to: 0x1cf6},
-       71:  {from: 0x1a69, to: 0x2ba5},
-       72:  {from: 0x1a7f, to: 0x1f0},
-       73:  {from: 0x1b4f, to: 0x1f2},
-       74:  {from: 0x1b7b, to: 0x150a},
-       75:  {from: 0x202d, to: 0x37a6},
-       76:  {from: 0x2032, to: 0x20d2},
-       77:  {from: 0x204f, to: 0x302},
-       78:  {from: 0x20d8, to: 0x26b},
-       79:  {from: 0x20e3, to: 0x25a},
-       80:  {from: 0x20e7, to: 0x225},
-       81:  {from: 0x20ee, to: 0x24d},
-       82:  {from: 0x2104, to: 0x21e0},
-       83:  {from: 0x212a, to: 0x274},
-       84:  {from: 0x218e, to: 0x11d},
-       85:  {from: 0x21c3, to: 0x1556},
-       86:  {from: 0x21db, to: 0x4fa},
-       87:  {from: 0x21e9, to: 0x495},
-       88:  {from: 0x2222, to: 0x11d},
-       89:  {from: 0x222c, to: 0x11d},
-       90:  {from: 0x2257, to: 0x91f},
-       91:  {from: 0x230b, to: 0x321b},
-       92:  {from: 0x2377, to: 0x335a},
-       93:  {from: 0x2467, to: 0x2be},
-       94:  {from: 0x24d9, to: 0x2f6},
-       95:  {from: 0x24e5, to: 0x2f1},
-       96:  {from: 0x24ef, to: 0x316},
-       97:  {from: 0x2545, to: 0xb50},
-       98:  {from: 0x259e, to: 0xe0},
-       99:  {from: 0x2633, to: 0x2c7},
-       100: {from: 0x26be, to: 0x26a9},
-       101: {from: 0x26ee, to: 0x3bf},
-       102: {from: 0x271c, to: 0x3ca4},
-       103: {from: 0x275a, to: 0x26a9},
-       104: {from: 0x277e, to: 0x434d},
-       105: {from: 0x28e4, to: 0x282c},
-       106: {from: 0x2909, to: 0x348},
-       107: {from: 0x297b, to: 0x2d9c},
-       108: {from: 0x2b0f, to: 0x384},
-       109: {from: 0x2bf1, to: 0x38c},
-       110: {from: 0x2c34, to: 0x3ca4},
-       111: {from: 0x2cf1, to: 0x3b5},
-       112: {from: 0x2d08, to: 0x58c},
-       113: {from: 0x2d3c, to: 0x143},
-       114: {from: 0x2d3d, to: 0x143},
-       115: {from: 0x2df4, to: 0x2e8},
-       116: {from: 0x2dfd, to: 0x19c1},
-       117: {from: 0x2e0f, to: 0x2d8a},
-       118: {from: 0x2e16, to: 0x289},
-       119: {from: 0x2e49, to: 0x7c},
-       120: {from: 0x2e5a, to: 0x2277},
-       121: {from: 0x2e95, to: 0x2e90},
-       122: {from: 0x2ee4, to: 0x2ecc},
-       123: {from: 0x3188, to: 0x3bb},
-       124: {from: 0x335b, to: 0x3383},
-       125: {from: 0x341f, to: 0x3d3},
-       126: {from: 0x34e3, to: 0x18c5},
-       127: {from: 0x35db, to: 0x408},
-       128: {from: 0x364d, to: 0x23e},
-       129: {from: 0x366b, to: 0x3ea},
-       130: {from: 0x36f2, to: 0x43b},
-       131: {from: 0x37b5, to: 0x11d},
-       132: {from: 0x380b, to: 0x38e7},
-       133: {from: 0x3820, to: 0x2c90},
-       134: {from: 0x3824, to: 0xa7},
-       135: {from: 0x3827, to: 0x321d},
-       136: {from: 0x3861, to: 0x399b},
-       137: {from: 0x3887, to: 0x3fb5},
-       138: {from: 0x389a, to: 0x39cc},
-       139: {from: 0x38a9, to: 0x1f99},
-       140: {from: 0x38aa, to: 0x2e8f},
-       141: {from: 0x3951, to: 0x474},
-       142: {from: 0x3b43, to: 0xd86},
-       143: {from: 0x3b6d, to: 0x132},
-       144: {from: 0x3c8e, to: 0x4b2},
-       145: {from: 0x3fb2, to: 0xfc},
-       146: {from: 0x41fd, to: 0xa86},
-       147: {from: 0x42b3, to: 0x568},
-       148: {from: 0x42ee, to: 0x3f55},
-       149: {from: 0x436d, to: 0x251},
-       150: {from: 0x43c0, to: 0x36c0},
-       151: {from: 0x43c2, to: 0x10b},
-       152: {from: 0x44a4, to: 0x3317},
-       153: {from: 0x44d8, to: 0x508},
-       154: {from: 0x45bf, to: 0x23fe},
-       155: {from: 0x45d2, to: 0x26d1},
-       156: {from: 0x4605, to: 0x48a3},
-       157: {from: 0x46a3, to: 0x4695},
-       158: {from: 0x4733, to: 0x473a},
-       159: {from: 0x490b, to: 0x316},
-       160: {from: 0x499c, to: 0x519},
+       0:   {from: 0x82, to: 0x88},
+       1:   {from: 0x185, to: 0x1ac},
+       2:   {from: 0x1f1, to: 0x1df},
+       3:   {from: 0x1f9, to: 0x1ba},
+       4:   {from: 0x206, to: 0x510},
+       5:   {from: 0x20d, to: 0x20c},
+       6:   {from: 0x30e, to: 0x3da},
+       7:   {from: 0x345, to: 0x36d},
+       8:   {from: 0x405, to: 0x430},
+       9:   {from: 0x478, to: 0x152},
+       10:  {from: 0x48e, to: 0x44f},
+       11:  {from: 0x4a0, to: 0x21},
+       12:  {from: 0x53b, to: 0x541},
+       13:  {from: 0x58c, to: 0x12c},
+       14:  {from: 0x62d, to: 0x1eae},
+       15:  {from: 0x64e, to: 0x42f},
+       16:  {from: 0x65f, to: 0x42f},
+       17:  {from: 0x6ea, to: 0x3a},
+       18:  {from: 0x6f5, to: 0x1d5},
+       19:  {from: 0x73b, to: 0x219e},
+       20:  {from: 0x7b0, to: 0x56},
+       21:  {from: 0x7b6, to: 0x2998},
+       22:  {from: 0x7c2, to: 0x58},
+       23:  {from: 0x7e3, to: 0x144},
+       24:  {from: 0x809, to: 0x5a},
+       25:  {from: 0x812, to: 0x8d},
+       26:  {from: 0x87b, to: 0x80d},
+       27:  {from: 0x8c0, to: 0xee0},
+       28:  {from: 0x9ec, to: 0x32f},
+       29:  {from: 0xa33, to: 0x2c3},
+       30:  {from: 0xa3a, to: 0xbf},
+       31:  {from: 0xabb, to: 0x331f},
+       32:  {from: 0xb35, to: 0x527},
+       33:  {from: 0xb72, to: 0x2657},
+       34:  {from: 0xb7b, to: 0xbc0},
+       35:  {from: 0xb98, to: 0x44c},
+       36:  {from: 0xbb9, to: 0x4226},
+       37:  {from: 0xbbc, to: 0x527},
+       38:  {from: 0xbfb, to: 0x2da4},
+       39:  {from: 0xc2b, to: 0x317e},
+       40:  {from: 0xcb6, to: 0xf2},
+       41:  {from: 0xd05, to: 0xf9},
+       42:  {from: 0xdc5, to: 0x119},
+       43:  {from: 0xdd4, to: 0x32b},
+       44:  {from: 0xdf5, to: 0xdf8},
+       45:  {from: 0xdfb, to: 0x52e},
+       46:  {from: 0xedc, to: 0x2057},
+       47:  {from: 0xeeb, to: 0x2e97},
+       48:  {from: 0xf36, to: 0x365},
+       49:  {from: 0x10cd, to: 0x13f},
+       50:  {from: 0x1101, to: 0x2ce},
+       51:  {from: 0x119d, to: 0x1ea},
+       52:  {from: 0x1276, to: 0x21},
+       53:  {from: 0x1421, to: 0x15d},
+       54:  {from: 0x146d, to: 0x14d},
+       55:  {from: 0x151c, to: 0xd98},
+       56:  {from: 0x1520, to: 0x38e},
+       57:  {from: 0x152f, to: 0x19d},
+       58:  {from: 0x157d, to: 0x20e},
+       59:  {from: 0x1580, to: 0x10c},
+       60:  {from: 0x15a0, to: 0x3cac},
+       61:  {from: 0x1667, to: 0x199},
+       62:  {from: 0x16c5, to: 0x135},
+       63:  {from: 0x16fd, to: 0x29f5},
+       64:  {from: 0x1715, to: 0x192},
+       65:  {from: 0x1724, to: 0xf3c},
+       66:  {from: 0x1777, to: 0x1521},
+       67:  {from: 0x1806, to: 0x17b3},
+       68:  {from: 0x1813, to: 0x18f0},
+       69:  {from: 0x1887, to: 0x434},
+       70:  {from: 0x1976, to: 0x1cfe},
+       71:  {from: 0x1a71, to: 0x2bad},
+       72:  {from: 0x1a87, to: 0x1f6},
+       73:  {from: 0x1b57, to: 0x1f8},
+       74:  {from: 0x1b83, to: 0x1512},
+       75:  {from: 0x2035, to: 0x37ae},
+       76:  {from: 0x203a, to: 0x20da},
+       77:  {from: 0x2057, to: 0x309},
+       78:  {from: 0x20e0, to: 0x272},
+       79:  {from: 0x20eb, to: 0x261},
+       80:  {from: 0x20ef, to: 0x22b},
+       81:  {from: 0x20f6, to: 0x254},
+       82:  {from: 0x210c, to: 0x21e8},
+       83:  {from: 0x2132, to: 0x27b},
+       84:  {from: 0x2196, to: 0x120},
+       85:  {from: 0x21cb, to: 0x155e},
+       86:  {from: 0x21e3, to: 0x502},
+       87:  {from: 0x21f1, to: 0x49d},
+       88:  {from: 0x222a, to: 0x120},
+       89:  {from: 0x2234, to: 0x120},
+       90:  {from: 0x225f, to: 0x927},
+       91:  {from: 0x2313, to: 0x3223},
+       92:  {from: 0x237f, to: 0x3362},
+       93:  {from: 0x246f, to: 0x2c5},
+       94:  {from: 0x24e1, to: 0x2fd},
+       95:  {from: 0x24ed, to: 0x2f8},
+       96:  {from: 0x24f7, to: 0x31d},
+       97:  {from: 0x254d, to: 0xb58},
+       98:  {from: 0x25a6, to: 0xe2},
+       99:  {from: 0x263b, to: 0x2ce},
+       100: {from: 0x26c6, to: 0x26b1},
+       101: {from: 0x26f6, to: 0x3c6},
+       102: {from: 0x2724, to: 0x3cac},
+       103: {from: 0x2762, to: 0x26b1},
+       104: {from: 0x2786, to: 0x4355},
+       105: {from: 0x28ec, to: 0x2834},
+       106: {from: 0x2911, to: 0x34f},
+       107: {from: 0x2983, to: 0x2da4},
+       108: {from: 0x2b17, to: 0x38b},
+       109: {from: 0x2bf9, to: 0x393},
+       110: {from: 0x2c3c, to: 0x3cac},
+       111: {from: 0x2cf9, to: 0x3bc},
+       112: {from: 0x2d10, to: 0x594},
+       113: {from: 0x2d44, to: 0x147},
+       114: {from: 0x2d45, to: 0x147},
+       115: {from: 0x2dfc, to: 0x2ef},
+       116: {from: 0x2e05, to: 0x19c9},
+       117: {from: 0x2e17, to: 0x2d92},
+       118: {from: 0x2e1e, to: 0x290},
+       119: {from: 0x2e51, to: 0x7d},
+       120: {from: 0x2e62, to: 0x227f},
+       121: {from: 0x2e9d, to: 0x2e98},
+       122: {from: 0x2eec, to: 0x2ed4},
+       123: {from: 0x3190, to: 0x3c2},
+       124: {from: 0x3363, to: 0x338b},
+       125: {from: 0x3427, to: 0x3da},
+       126: {from: 0x34eb, to: 0x18cd},
+       127: {from: 0x35e3, to: 0x410},
+       128: {from: 0x3655, to: 0x244},
+       129: {from: 0x3673, to: 0x3f2},
+       130: {from: 0x36fa, to: 0x443},
+       131: {from: 0x37bd, to: 0x120},
+       132: {from: 0x3813, to: 0x38ef},
+       133: {from: 0x3828, to: 0x2c98},
+       134: {from: 0x382c, to: 0xa9},
+       135: {from: 0x382f, to: 0x3225},
+       136: {from: 0x3869, to: 0x39a3},
+       137: {from: 0x388f, to: 0x3fbd},
+       138: {from: 0x38a2, to: 0x39d4},
+       139: {from: 0x38b1, to: 0x1fa1},
+       140: {from: 0x38b2, to: 0x2e97},
+       141: {from: 0x3959, to: 0x47c},
+       142: {from: 0x3b4b, to: 0xd8e},
+       143: {from: 0x3b75, to: 0x136},
+       144: {from: 0x3c96, to: 0x4ba},
+       145: {from: 0x3fba, to: 0xff},
+       146: {from: 0x4205, to: 0xa8e},
+       147: {from: 0x42bb, to: 0x570},
+       148: {from: 0x42f6, to: 0x3f5d},
+       149: {from: 0x4375, to: 0x258},
+       150: {from: 0x43c8, to: 0x36c8},
+       151: {from: 0x43ca, to: 0x10e},
+       152: {from: 0x44ac, to: 0x331f},
+       153: {from: 0x44e0, to: 0x510},
+       154: {from: 0x45c7, to: 0x2406},
+       155: {from: 0x45da, to: 0x26d9},
+       156: {from: 0x460d, to: 0x48ab},
+       157: {from: 0x46ab, to: 0x469d},
+       158: {from: 0x473b, to: 0x4742},
+       159: {from: 0x4913, to: 0x31d},
+       160: {from: 0x49a4, to: 0x521},
 }
 
 // Size: 161 bytes, 161 elements
@@ -779,7 +780,7 @@ const (
 
 // script is an alphabetically sorted list of ISO 15924 codes. The index
 // of the script in the string, divided by 4, is the internal scriptID.
-var script tag.Index = "" + // Size: 928 bytes
+const script tag.Index = "" + // Size: 928 bytes
        "----AdlmAfakAghbAhomArabAranArmiArmnAvstBaliBamuBassBatkBengBhksBlisBopo" +
        "BrahBraiBugiBuhdCakmCansCariChamCherCirtCoptCprtCyrlCyrsDevaDsrtDuplEgyd" +
        "EgyhEgypElbaEthiGeokGeorGlagGothGranGrekGujrGuruHanbHangHaniHanoHansHant" +
@@ -797,153 +798,154 @@ var script tag.Index = "" + // Size: 928 bytes
 
 // suppressScript is an index from langID to the dominant script for that language,
 // if it exists.  If a script is given, it should be suppressed from the language tag.
-// Size: 1319 bytes, 1319 elements
-var suppressScript = [1319]uint8{
+// Size: 1327 bytes, 1327 elements
+var suppressScript = [1327]uint8{
        // Entry 0 - 3F
        0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
        // Entry 40 - 7F
-       0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00,
+       0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00,
        // Entry 80 - BF
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        // Entry C0 - FF
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x52, 0x52, 0x00, 0x00,
-       // Entry 100 - 13F
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
+       // Entry 100 - 13F
+       0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00,
-       0x00, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x2d, 0x00, 0x00, 0x52, 0x00, 0x00, 0x52,
-       0x00, 0x52, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4,
+       0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00,
+       0x52, 0x00, 0x00, 0x52, 0x00, 0x52, 0x00, 0x52,
        // Entry 140 - 17F
-       0x52, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
-       0x52, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x52, 0x00, 0x00, 0x52, 0x52, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x05,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x52,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
        0x52, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x52, 0x52, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        // Entry 180 - 1BF
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x52, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x52, 0x2e, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
+       0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x20,
+       0x00, 0x52, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x37, 0x00, 0x20, 0x00, 0x00, 0x00,
        // Entry 1C0 - 1FF
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x52, 0x52, 0x00, 0x52, 0x52, 0x00,
-       0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
+       0x52, 0x00, 0x52, 0x52, 0x00, 0x08, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
-       0x52, 0x52, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00,
-       0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x52, 0x52,
+       0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00,
        // Entry 200 - 23F
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x1e, 0x00, 0x00, 0x52, 0x00, 0x00,
-       // Entry 240 - 27F
-       0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x4a, 0x00, 0x4b, 0x00, 0x20, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       // Entry 240 - 27F
+       0x1e, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
+       0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a,
+       0x00, 0x00, 0x4b, 0x00, 0x20, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        // Entry 280 - 2BF
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x4f,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
+       0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x4f, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
        // Entry 2C0 - 2FF
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00,
-       0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00,
        // Entry 300 - 33F
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
+       0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x52, 0x52,
+       0x00, 0x20, 0x00, 0x00, 0x00, 0x52, 0x52, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
        // Entry 340 - 37F
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x52,
-       0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x52, 0x20,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
-       0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x70, 0x52, 0x00, 0x00,
-       0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
-       // Entry 380 - 3BF
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
-       0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
+       0x52, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x70, 0x52, 0x00, 0x00, 0x00,
+       0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       // Entry 380 - 3BF
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
+       0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x52,
-       0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x52, 0x00,
        // Entry 3C0 - 3FF
+       0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
-       0x52, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x1e, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x52,
+       0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x1e, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        // Entry 400 - 43F
+       0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
        0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -951,8 +953,8 @@ var suppressScript = [1319]uint8{
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
        0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x52, 0x52, 0x00, 0x00, 0x00, 0x00,
        // Entry 440 - 47F
+       0x00, 0x00, 0x52, 0x52, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0,
@@ -960,17 +962,17 @@ var suppressScript = [1319]uint8{
        0x00, 0xd5, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
        0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x52, 0x00,
-       0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
        // Entry 480 - 4BF
        0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
+       0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
-       0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        // Entry 4C0 - 4FF
+       0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -978,9 +980,9 @@ var suppressScript = [1319]uint8{
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        // Entry 500 - 53F
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
@@ -1070,7 +1072,7 @@ var regionTypes = [357]uint8{
 //     - [A-Z}{2}: the first letter of the 2-letter code plus these two
 //                 letters form the 3-letter ISO code.
 //     - 0, n:     index into altRegionISO3.
-var regionISO tag.Index = "" + // Size: 1308 bytes
+const regionISO tag.Index = "" + // Size: 1308 bytes
        "AAAAACSCADNDAEREAFFGAGTGAIIAALLBAMRMANNTAOGOAQTAARRGASSMATUTAUUSAWBWAXLA" +
        "AZZEBAIHBBRBBDGDBEELBFFABGGRBHHRBIDIBJENBLLMBMMUBNRNBOOLBQESBRRABSHSBTTN" +
        "BUURBVVTBWWABYLRBZLZCAANCCCKCDODCFAFCGOGCHHECIIVCKOKCLHLCMMRCNHNCOOLCPPT" +
@@ -1094,7 +1096,7 @@ var regionISO tag.Index = "" + // Size: 1308 bytes
 
 // altRegionISO3 holds a list of 3-letter region codes that cannot be
 // mapped to 2-letter codes using the default algorithm. This is a short list.
-var altRegionISO3 string = "SCGQUUSGSCOMPRKCYMSPMSRBATFMYTATN"
+const altRegionISO3 string = "SCGQUUSGSCOMPRKCYMSPMSRBATFMYTATN"
 
 // altRegionIDs holds a list of regionIDs the positions of which match those
 // of the 3-letter ISO codes in altRegionISO3.
@@ -1345,145 +1347,145 @@ type likelyLangRegion struct {
 // languages and regions given a script.
 // Size: 928 bytes, 232 elements
 var likelyScript = [232]likelyLangRegion{
-       1:   {lang: 0x149, region: 0x83},
-       3:   {lang: 0x299, region: 0x105},
-       4:   {lang: 0x1e, region: 0x98},
-       5:   {lang: 0x39, region: 0x6a},
-       7:   {lang: 0x3a, region: 0x9b},
-       8:   {lang: 0x1d0, region: 0x27},
-       9:   {lang: 0x12, region: 0x9b},
-       10:  {lang: 0x5a, region: 0x94},
-       11:  {lang: 0x5f, region: 0x51},
-       12:  {lang: 0xb7, region: 0xb3},
-       13:  {lang: 0x62, region: 0x94},
-       14:  {lang: 0xa3, region: 0x34},
-       15:  {lang: 0x3e0, region: 0x98},
-       17:  {lang: 0x51f, region: 0x12d},
-       18:  {lang: 0x3a8, region: 0x98},
-       19:  {lang: 0x159, region: 0x77},
-       20:  {lang: 0xc0, region: 0x94},
-       21:  {lang: 0x9b, region: 0xe6},
-       22:  {lang: 0xd9, region: 0x34},
-       23:  {lang: 0xf0, region: 0x48},
-       24:  {lang: 0x4e6, region: 0x12a},
-       25:  {lang: 0xe5, region: 0x13d},
-       26:  {lang: 0xe3, region: 0x134},
-       28:  {lang: 0xee, region: 0x6a},
-       29:  {lang: 0x199, region: 0x5c},
-       30:  {lang: 0x3d9, region: 0x105},
-       32:  {lang: 0x1b7, region: 0x98},
-       34:  {lang: 0x159, region: 0x77},
-       37:  {lang: 0x12f, region: 0x6a},
-       38:  {lang: 0x427, region: 0x26},
-       39:  {lang: 0x26, region: 0x6e},
-       41:  {lang: 0x208, region: 0x7c},
-       42:  {lang: 0xfa, region: 0x37},
-       43:  {lang: 0x198, region: 0x12f},
-       44:  {lang: 0x3e0, region: 0x98},
-       45:  {lang: 0x131, region: 0x86},
-       46:  {lang: 0x19d, region: 0x98},
-       47:  {lang: 0x394, region: 0x98},
-       48:  {lang: 0x51f, region: 0x12d},
-       49:  {lang: 0x24b, region: 0xaa},
-       50:  {lang: 0x51f, region: 0x52},
-       51:  {lang: 0x1c4, region: 0xe6},
-       52:  {lang: 0x51f, region: 0x52},
-       53:  {lang: 0x51f, region: 0x12d},
-       54:  {lang: 0x2f4, region: 0x9a},
-       55:  {lang: 0x1b5, region: 0x96},
-       56:  {lang: 0x1f8, region: 0xa1},
-       57:  {lang: 0x1be, region: 0x12a},
-       58:  {lang: 0x1c3, region: 0xae},
-       60:  {lang: 0x1ce, region: 0x91},
-       62:  {lang: 0x13d, region: 0x9d},
-       63:  {lang: 0x24b, region: 0xaa},
-       64:  {lang: 0x206, region: 0x94},
-       65:  {lang: 0x1f8, region: 0xa1},
-       67:  {lang: 0x130, region: 0xc3},
-       68:  {lang: 0x1f8, region: 0xa1},
-       69:  {lang: 0x3b2, region: 0xe7},
-       70:  {lang: 0x242, region: 0xa5},
-       71:  {lang: 0x3f0, region: 0x98},
-       74:  {lang: 0x249, region: 0x98},
-       75:  {lang: 0x24b, region: 0xaa},
-       77:  {lang: 0x87, region: 0x98},
-       78:  {lang: 0x367, region: 0x122},
-       79:  {lang: 0x2af, region: 0xae},
-       84:  {lang: 0x296, region: 0x98},
-       85:  {lang: 0x29f, region: 0x98},
-       86:  {lang: 0x286, region: 0x86},
-       87:  {lang: 0x199, region: 0x86},
-       88:  {lang: 0x2a3, region: 0x52},
-       90:  {lang: 0x4ea, region: 0x12a},
-       91:  {lang: 0x4eb, region: 0x12a},
-       92:  {lang: 0x1b7, region: 0x98},
-       93:  {lang: 0x32e, region: 0x9b},
-       94:  {lang: 0x4ed, region: 0x52},
-       95:  {lang: 0xa7, region: 0x52},
-       97:  {lang: 0x2df, region: 0x111},
-       98:  {lang: 0x4ee, region: 0x10a},
-       99:  {lang: 0x4ee, region: 0x10a},
-       100: {lang: 0x2fb, region: 0x98},
-       101: {lang: 0x312, region: 0x98},
-       102: {lang: 0x302, region: 0x52},
-       104: {lang: 0x315, region: 0x34},
-       105: {lang: 0x305, region: 0x98},
-       106: {lang: 0x40a, region: 0xe7},
-       107: {lang: 0x328, region: 0xc3},
-       108: {lang: 0x4ef, region: 0x107},
-       109: {lang: 0x3a, region: 0xa0},
-       110: {lang: 0x34a, region: 0xda},
-       112: {lang: 0x2c7, region: 0x83},
-       114: {lang: 0x3f9, region: 0x95},
-       115: {lang: 0x3e5, region: 0x98},
-       116: {lang: 0x392, region: 0xc4},
-       117: {lang: 0x38c, region: 0x98},
-       118: {lang: 0x390, region: 0x134},
-       119: {lang: 0x41f, region: 0x114},
-       120: {lang: 0x3a, region: 0x11b},
-       121: {lang: 0xf9, region: 0xc3},
-       122: {lang: 0x274, region: 0x105},
-       123: {lang: 0x2c0, region: 0x52},
-       124: {lang: 0x396, region: 0x9b},
-       125: {lang: 0x396, region: 0x52},
-       127: {lang: 0x3a4, region: 0xaf},
-       129: {lang: 0x1bf, region: 0x52},
-       130: {lang: 0x4f3, region: 0x9b},
-       181: {lang: 0x3c2, region: 0x94},
-       183: {lang: 0x369, region: 0x10b},
-       184: {lang: 0x416, region: 0x96},
-       186: {lang: 0x4f5, region: 0x15d},
-       187: {lang: 0x3e6, region: 0x98},
-       188: {lang: 0x44, region: 0x134},
-       189: {lang: 0x134, region: 0x7a},
-       190: {lang: 0x3e0, region: 0x98},
-       191: {lang: 0x3e0, region: 0x98},
-       192: {lang: 0x3f0, region: 0x98},
-       193: {lang: 0x402, region: 0xb2},
-       194: {lang: 0x429, region: 0x98},
-       195: {lang: 0x434, region: 0x94},
-       196: {lang: 0x443, region: 0x34},
-       197: {lang: 0x444, region: 0x9a},
-       201: {lang: 0x450, region: 0xe6},
-       202: {lang: 0x116, region: 0x98},
-       203: {lang: 0x454, region: 0x52},
-       204: {lang: 0x22a, region: 0x52},
-       205: {lang: 0x446, region: 0x98},
-       206: {lang: 0x49b, region: 0x52},
-       207: {lang: 0x9d, region: 0x13d},
-       208: {lang: 0x457, region: 0x98},
-       210: {lang: 0x51e, region: 0xb9},
-       211: {lang: 0x14e, region: 0xe6},
-       212: {lang: 0x124, region: 0xcc},
-       213: {lang: 0x461, region: 0x122},
-       214: {lang: 0xa7, region: 0x52},
-       215: {lang: 0x2c5, region: 0x98},
-       216: {lang: 0x4a3, region: 0x11b},
-       217: {lang: 0x4b4, region: 0xb3},
-       219: {lang: 0x1c7, region: 0x98},
-       221: {lang: 0x3a0, region: 0x9b},
-       222: {lang: 0x21, region: 0x9a},
-       223: {lang: 0x1e2, region: 0x52},
+       1:   {lang: 0x14d, region: 0x83},
+       3:   {lang: 0x2a0, region: 0x105},
+       4:   {lang: 0x1f, region: 0x98},
+       5:   {lang: 0x3a, region: 0x6a},
+       7:   {lang: 0x3b, region: 0x9b},
+       8:   {lang: 0x1d5, region: 0x27},
+       9:   {lang: 0x13, region: 0x9b},
+       10:  {lang: 0x5b, region: 0x94},
+       11:  {lang: 0x60, region: 0x51},
+       12:  {lang: 0xb9, region: 0xb3},
+       13:  {lang: 0x63, region: 0x94},
+       14:  {lang: 0xa5, region: 0x34},
+       15:  {lang: 0x3e7, region: 0x98},
+       17:  {lang: 0x527, region: 0x12d},
+       18:  {lang: 0x3af, region: 0x98},
+       19:  {lang: 0x15d, region: 0x77},
+       20:  {lang: 0xc2, region: 0x94},
+       21:  {lang: 0x9d, region: 0xe6},
+       22:  {lang: 0xdb, region: 0x34},
+       23:  {lang: 0xf2, region: 0x48},
+       24:  {lang: 0x4ee, region: 0x12a},
+       25:  {lang: 0xe7, region: 0x13d},
+       26:  {lang: 0xe5, region: 0x134},
+       28:  {lang: 0xf0, region: 0x6a},
+       29:  {lang: 0x19e, region: 0x5c},
+       30:  {lang: 0x3e0, region: 0x105},
+       32:  {lang: 0x1bc, region: 0x98},
+       34:  {lang: 0x15d, region: 0x77},
+       37:  {lang: 0x132, region: 0x6a},
+       38:  {lang: 0x42f, region: 0x26},
+       39:  {lang: 0x27, region: 0x6e},
+       41:  {lang: 0x20e, region: 0x7c},
+       42:  {lang: 0xfd, region: 0x37},
+       43:  {lang: 0x19c, region: 0x12f},
+       44:  {lang: 0x3e7, region: 0x98},
+       45:  {lang: 0x135, region: 0x86},
+       46:  {lang: 0x1a2, region: 0x98},
+       47:  {lang: 0x39b, region: 0x98},
+       48:  {lang: 0x527, region: 0x12d},
+       49:  {lang: 0x252, region: 0xaa},
+       50:  {lang: 0x527, region: 0x52},
+       51:  {lang: 0x1c9, region: 0xe6},
+       52:  {lang: 0x527, region: 0x52},
+       53:  {lang: 0x527, region: 0x12d},
+       54:  {lang: 0x2fb, region: 0x9a},
+       55:  {lang: 0x1ba, region: 0x96},
+       56:  {lang: 0x1fe, region: 0xa1},
+       57:  {lang: 0x1c3, region: 0x12a},
+       58:  {lang: 0x1c8, region: 0xae},
+       60:  {lang: 0x1d3, region: 0x91},
+       62:  {lang: 0x141, region: 0x9d},
+       63:  {lang: 0x252, region: 0xaa},
+       64:  {lang: 0x20c, region: 0x94},
+       65:  {lang: 0x1fe, region: 0xa1},
+       67:  {lang: 0x134, region: 0xc3},
+       68:  {lang: 0x1fe, region: 0xa1},
+       69:  {lang: 0x3b9, region: 0xe7},
+       70:  {lang: 0x248, region: 0xa5},
+       71:  {lang: 0x3f8, region: 0x98},
+       74:  {lang: 0x24f, region: 0x98},
+       75:  {lang: 0x252, region: 0xaa},
+       77:  {lang: 0x88, region: 0x98},
+       78:  {lang: 0x36e, region: 0x122},
+       79:  {lang: 0x2b6, region: 0xae},
+       84:  {lang: 0x29d, region: 0x98},
+       85:  {lang: 0x2a6, region: 0x98},
+       86:  {lang: 0x28d, region: 0x86},
+       87:  {lang: 0x19e, region: 0x86},
+       88:  {lang: 0x2aa, region: 0x52},
+       90:  {lang: 0x4f2, region: 0x12a},
+       91:  {lang: 0x4f3, region: 0x12a},
+       92:  {lang: 0x1bc, region: 0x98},
+       93:  {lang: 0x335, region: 0x9b},
+       94:  {lang: 0x4f5, region: 0x52},
+       95:  {lang: 0xa9, region: 0x52},
+       97:  {lang: 0x2e6, region: 0x111},
+       98:  {lang: 0x4f6, region: 0x10a},
+       99:  {lang: 0x4f6, region: 0x10a},
+       100: {lang: 0x302, region: 0x98},
+       101: {lang: 0x319, region: 0x98},
+       102: {lang: 0x309, region: 0x52},
+       104: {lang: 0x31c, region: 0x34},
+       105: {lang: 0x30c, region: 0x98},
+       106: {lang: 0x412, region: 0xe7},
+       107: {lang: 0x32f, region: 0xc3},
+       108: {lang: 0x4f7, region: 0x107},
+       109: {lang: 0x3b, region: 0xa0},
+       110: {lang: 0x351, region: 0xda},
+       112: {lang: 0x2ce, region: 0x83},
+       114: {lang: 0x401, region: 0x95},
+       115: {lang: 0x3ec, region: 0x98},
+       116: {lang: 0x399, region: 0xc4},
+       117: {lang: 0x393, region: 0x98},
+       118: {lang: 0x397, region: 0x134},
+       119: {lang: 0x427, region: 0x114},
+       120: {lang: 0x3b, region: 0x11b},
+       121: {lang: 0xfc, region: 0xc3},
+       122: {lang: 0x27b, region: 0x105},
+       123: {lang: 0x2c7, region: 0x52},
+       124: {lang: 0x39d, region: 0x9b},
+       125: {lang: 0x39d, region: 0x52},
+       127: {lang: 0x3ab, region: 0xaf},
+       129: {lang: 0x1c4, region: 0x52},
+       130: {lang: 0x4fb, region: 0x9b},
+       181: {lang: 0x3c9, region: 0x94},
+       183: {lang: 0x370, region: 0x10b},
+       184: {lang: 0x41e, region: 0x96},
+       186: {lang: 0x4fd, region: 0x15d},
+       187: {lang: 0x3ee, region: 0x98},
+       188: {lang: 0x45, region: 0x134},
+       189: {lang: 0x138, region: 0x7a},
+       190: {lang: 0x3e7, region: 0x98},
+       191: {lang: 0x3e7, region: 0x98},
+       192: {lang: 0x3f8, region: 0x98},
+       193: {lang: 0x40a, region: 0xb2},
+       194: {lang: 0x431, region: 0x98},
+       195: {lang: 0x43c, region: 0x94},
+       196: {lang: 0x44b, region: 0x34},
+       197: {lang: 0x44c, region: 0x9a},
+       201: {lang: 0x458, region: 0xe6},
+       202: {lang: 0x119, region: 0x98},
+       203: {lang: 0x45c, region: 0x52},
+       204: {lang: 0x230, region: 0x52},
+       205: {lang: 0x44e, region: 0x98},
+       206: {lang: 0x4a3, region: 0x52},
+       207: {lang: 0x9f, region: 0x13d},
+       208: {lang: 0x45f, region: 0x98},
+       210: {lang: 0x526, region: 0xb9},
+       211: {lang: 0x152, region: 0xe6},
+       212: {lang: 0x127, region: 0xcc},
+       213: {lang: 0x469, region: 0x122},
+       214: {lang: 0xa9, region: 0x52},
+       215: {lang: 0x2cc, region: 0x98},
+       216: {lang: 0x4ab, region: 0x11b},
+       217: {lang: 0x4bc, region: 0xb3},
+       219: {lang: 0x1cc, region: 0x98},
+       221: {lang: 0x3a7, region: 0x9b},
+       222: {lang: 0x22, region: 0x9a},
+       223: {lang: 0x1e8, region: 0x52},
 }
 
 type likelyScriptRegion struct {
@@ -1496,8 +1498,8 @@ type likelyScriptRegion struct {
 // scripts and regions given incomplete information. If more entries exist for a
 // given language, region and script are the index and size respectively
 // of the list in likelyLangList.
-// Size: 5276 bytes, 1319 elements
-var likelyLang = [1319]likelyScriptRegion{
+// Size: 5308 bytes, 1327 elements
+var likelyLang = [1327]likelyScriptRegion{
        0:    {region: 0x134, script: 0x52, flags: 0x0},
        1:    {region: 0x6e, script: 0x52, flags: 0x0},
        2:    {region: 0x164, script: 0x52, flags: 0x0},
@@ -1505,1305 +1507,1313 @@ var likelyLang = [1319]likelyScriptRegion{
        4:    {region: 0x164, script: 0x52, flags: 0x0},
        5:    {region: 0x7c, script: 0x1e, flags: 0x0},
        6:    {region: 0x164, script: 0x52, flags: 0x0},
-       7:    {region: 0x7f, script: 0x52, flags: 0x0},
-       8:    {region: 0x164, script: 0x52, flags: 0x0},
+       7:    {region: 0x164, script: 0x1e, flags: 0x0},
+       8:    {region: 0x7f, script: 0x52, flags: 0x0},
        9:    {region: 0x164, script: 0x52, flags: 0x0},
        10:   {region: 0x164, script: 0x52, flags: 0x0},
-       11:   {region: 0x94, script: 0x52, flags: 0x0},
-       12:   {region: 0x130, script: 0x52, flags: 0x0},
-       13:   {region: 0x7f, script: 0x52, flags: 0x0},
-       14:   {region: 0x164, script: 0x52, flags: 0x0},
+       11:   {region: 0x164, script: 0x52, flags: 0x0},
+       12:   {region: 0x94, script: 0x52, flags: 0x0},
+       13:   {region: 0x130, script: 0x52, flags: 0x0},
+       14:   {region: 0x7f, script: 0x52, flags: 0x0},
        15:   {region: 0x164, script: 0x52, flags: 0x0},
-       16:   {region: 0x105, script: 0x1e, flags: 0x0},
-       17:   {region: 0x164, script: 0x52, flags: 0x0},
-       18:   {region: 0x9b, script: 0x9, flags: 0x0},
-       19:   {region: 0x127, script: 0x5, flags: 0x0},
-       20:   {region: 0x164, script: 0x52, flags: 0x0},
-       21:   {region: 0x160, script: 0x52, flags: 0x0},
-       22:   {region: 0x164, script: 0x52, flags: 0x0},
+       16:   {region: 0x164, script: 0x52, flags: 0x0},
+       17:   {region: 0x105, script: 0x1e, flags: 0x0},
+       18:   {region: 0x164, script: 0x52, flags: 0x0},
+       19:   {region: 0x9b, script: 0x9, flags: 0x0},
+       20:   {region: 0x127, script: 0x5, flags: 0x0},
+       21:   {region: 0x164, script: 0x52, flags: 0x0},
+       22:   {region: 0x160, script: 0x52, flags: 0x0},
        23:   {region: 0x164, script: 0x52, flags: 0x0},
        24:   {region: 0x164, script: 0x52, flags: 0x0},
        25:   {region: 0x164, script: 0x52, flags: 0x0},
        26:   {region: 0x164, script: 0x52, flags: 0x0},
-       27:   {region: 0x51, script: 0x52, flags: 0x0},
-       28:   {region: 0x164, script: 0x52, flags: 0x0},
+       27:   {region: 0x164, script: 0x52, flags: 0x0},
+       28:   {region: 0x51, script: 0x52, flags: 0x0},
        29:   {region: 0x164, script: 0x52, flags: 0x0},
-       30:   {region: 0x98, script: 0x4, flags: 0x0},
-       31:   {region: 0x164, script: 0x52, flags: 0x0},
-       32:   {region: 0x7f, script: 0x52, flags: 0x0},
-       33:   {region: 0x9a, script: 0xde, flags: 0x0},
-       34:   {region: 0x164, script: 0x52, flags: 0x0},
+       30:   {region: 0x164, script: 0x52, flags: 0x0},
+       31:   {region: 0x98, script: 0x4, flags: 0x0},
+       32:   {region: 0x164, script: 0x52, flags: 0x0},
+       33:   {region: 0x7f, script: 0x52, flags: 0x0},
+       34:   {region: 0x9a, script: 0xde, flags: 0x0},
        35:   {region: 0x164, script: 0x52, flags: 0x0},
-       36:   {region: 0x14c, script: 0x52, flags: 0x0},
-       37:   {region: 0x105, script: 0x1e, flags: 0x0},
-       38:   {region: 0x6e, script: 0x27, flags: 0x0},
-       39:   {region: 0x164, script: 0x52, flags: 0x0},
+       36:   {region: 0x164, script: 0x52, flags: 0x0},
+       37:   {region: 0x14c, script: 0x52, flags: 0x0},
+       38:   {region: 0x105, script: 0x1e, flags: 0x0},
+       39:   {region: 0x6e, script: 0x27, flags: 0x0},
        40:   {region: 0x164, script: 0x52, flags: 0x0},
-       41:   {region: 0xd5, script: 0x52, flags: 0x0},
-       42:   {region: 0x164, script: 0x52, flags: 0x0},
-       44:   {region: 0x164, script: 0x52, flags: 0x0},
+       41:   {region: 0x164, script: 0x52, flags: 0x0},
+       42:   {region: 0xd5, script: 0x52, flags: 0x0},
+       43:   {region: 0x164, script: 0x52, flags: 0x0},
        45:   {region: 0x164, script: 0x52, flags: 0x0},
        46:   {region: 0x164, script: 0x52, flags: 0x0},
        47:   {region: 0x164, script: 0x52, flags: 0x0},
        48:   {region: 0x164, script: 0x52, flags: 0x0},
        49:   {region: 0x164, script: 0x52, flags: 0x0},
-       50:   {region: 0x94, script: 0x52, flags: 0x0},
-       51:   {region: 0x164, script: 0x5, flags: 0x0},
-       52:   {region: 0x121, script: 0x5, flags: 0x0},
-       53:   {region: 0x164, script: 0x52, flags: 0x0},
+       50:   {region: 0x164, script: 0x52, flags: 0x0},
+       51:   {region: 0x94, script: 0x52, flags: 0x0},
+       52:   {region: 0x164, script: 0x5, flags: 0x0},
+       53:   {region: 0x121, script: 0x5, flags: 0x0},
        54:   {region: 0x164, script: 0x52, flags: 0x0},
        55:   {region: 0x164, script: 0x52, flags: 0x0},
        56:   {region: 0x164, script: 0x52, flags: 0x0},
-       57:   {region: 0x6a, script: 0x5, flags: 0x0},
-       58:   {region: 0x0, script: 0x3, flags: 0x1},
-       59:   {region: 0x164, script: 0x52, flags: 0x0},
-       60:   {region: 0x50, script: 0x52, flags: 0x0},
-       61:   {region: 0x3e, script: 0x52, flags: 0x0},
-       62:   {region: 0x66, script: 0x5, flags: 0x0},
-       64:   {region: 0xb9, script: 0x5, flags: 0x0},
-       65:   {region: 0x6a, script: 0x5, flags: 0x0},
-       66:   {region: 0x98, script: 0xe, flags: 0x0},
-       67:   {region: 0x12e, script: 0x52, flags: 0x0},
-       68:   {region: 0x134, script: 0xbc, flags: 0x0},
-       69:   {region: 0x164, script: 0x52, flags: 0x0},
+       57:   {region: 0x164, script: 0x52, flags: 0x0},
+       58:   {region: 0x6a, script: 0x5, flags: 0x0},
+       59:   {region: 0x0, script: 0x3, flags: 0x1},
+       60:   {region: 0x164, script: 0x52, flags: 0x0},
+       61:   {region: 0x50, script: 0x52, flags: 0x0},
+       62:   {region: 0x3e, script: 0x52, flags: 0x0},
+       63:   {region: 0x66, script: 0x5, flags: 0x0},
+       65:   {region: 0xb9, script: 0x5, flags: 0x0},
+       66:   {region: 0x6a, script: 0x5, flags: 0x0},
+       67:   {region: 0x98, script: 0xe, flags: 0x0},
+       68:   {region: 0x12e, script: 0x52, flags: 0x0},
+       69:   {region: 0x134, script: 0xbc, flags: 0x0},
        70:   {region: 0x164, script: 0x52, flags: 0x0},
-       71:   {region: 0x6d, script: 0x52, flags: 0x0},
-       72:   {region: 0x164, script: 0x52, flags: 0x0},
+       71:   {region: 0x164, script: 0x52, flags: 0x0},
+       72:   {region: 0x6d, script: 0x52, flags: 0x0},
        73:   {region: 0x164, script: 0x52, flags: 0x0},
-       74:   {region: 0x48, script: 0x52, flags: 0x0},
-       75:   {region: 0x164, script: 0x52, flags: 0x0},
-       76:   {region: 0x105, script: 0x1e, flags: 0x0},
-       77:   {region: 0x164, script: 0x5, flags: 0x0},
-       78:   {region: 0x164, script: 0x52, flags: 0x0},
+       74:   {region: 0x164, script: 0x52, flags: 0x0},
+       75:   {region: 0x48, script: 0x52, flags: 0x0},
+       76:   {region: 0x164, script: 0x52, flags: 0x0},
+       77:   {region: 0x105, script: 0x1e, flags: 0x0},
+       78:   {region: 0x164, script: 0x5, flags: 0x0},
        79:   {region: 0x164, script: 0x52, flags: 0x0},
        80:   {region: 0x164, script: 0x52, flags: 0x0},
-       81:   {region: 0x98, script: 0x20, flags: 0x0},
-       82:   {region: 0x164, script: 0x52, flags: 0x0},
+       81:   {region: 0x164, script: 0x52, flags: 0x0},
+       82:   {region: 0x98, script: 0x20, flags: 0x0},
        83:   {region: 0x164, script: 0x52, flags: 0x0},
        84:   {region: 0x164, script: 0x52, flags: 0x0},
-       85:   {region: 0x3e, script: 0x52, flags: 0x0},
-       86:   {region: 0x164, script: 0x52, flags: 0x0},
-       87:   {region: 0x3, script: 0x5, flags: 0x1},
-       88:   {region: 0x105, script: 0x1e, flags: 0x0},
-       89:   {region: 0xe7, script: 0x5, flags: 0x0},
-       90:   {region: 0x94, script: 0x52, flags: 0x0},
-       91:   {region: 0xda, script: 0x20, flags: 0x0},
-       92:   {region: 0x2d, script: 0x52, flags: 0x0},
-       93:   {region: 0x51, script: 0x52, flags: 0x0},
-       94:   {region: 0x164, script: 0x52, flags: 0x0},
-       95:   {region: 0x51, script: 0xb, flags: 0x0},
-       96:   {region: 0x164, script: 0x52, flags: 0x0},
+       85:   {region: 0x164, script: 0x52, flags: 0x0},
+       86:   {region: 0x3e, script: 0x52, flags: 0x0},
+       87:   {region: 0x164, script: 0x52, flags: 0x0},
+       88:   {region: 0x3, script: 0x5, flags: 0x1},
+       89:   {region: 0x105, script: 0x1e, flags: 0x0},
+       90:   {region: 0xe7, script: 0x5, flags: 0x0},
+       91:   {region: 0x94, script: 0x52, flags: 0x0},
+       92:   {region: 0xda, script: 0x20, flags: 0x0},
+       93:   {region: 0x2d, script: 0x52, flags: 0x0},
+       94:   {region: 0x51, script: 0x52, flags: 0x0},
+       95:   {region: 0x164, script: 0x52, flags: 0x0},
+       96:   {region: 0x51, script: 0xb, flags: 0x0},
        97:   {region: 0x164, script: 0x52, flags: 0x0},
-       98:   {region: 0x94, script: 0x52, flags: 0x0},
-       99:   {region: 0x164, script: 0x52, flags: 0x0},
-       100:  {region: 0x51, script: 0x52, flags: 0x0},
-       101:  {region: 0x164, script: 0x52, flags: 0x0},
+       98:   {region: 0x164, script: 0x52, flags: 0x0},
+       99:   {region: 0x94, script: 0x52, flags: 0x0},
+       100:  {region: 0x164, script: 0x52, flags: 0x0},
+       101:  {region: 0x51, script: 0x52, flags: 0x0},
        102:  {region: 0x164, script: 0x52, flags: 0x0},
        103:  {region: 0x164, script: 0x52, flags: 0x0},
        104:  {region: 0x164, script: 0x52, flags: 0x0},
-       105:  {region: 0x4e, script: 0x52, flags: 0x0},
-       106:  {region: 0x164, script: 0x52, flags: 0x0},
+       105:  {region: 0x164, script: 0x52, flags: 0x0},
+       106:  {region: 0x4e, script: 0x52, flags: 0x0},
        107:  {region: 0x164, script: 0x52, flags: 0x0},
        108:  {region: 0x164, script: 0x52, flags: 0x0},
-       109:  {region: 0x164, script: 0x27, flags: 0x0},
-       110:  {region: 0x164, script: 0x52, flags: 0x0},
+       109:  {region: 0x164, script: 0x52, flags: 0x0},
+       110:  {region: 0x164, script: 0x27, flags: 0x0},
        111:  {region: 0x164, script: 0x52, flags: 0x0},
-       112:  {region: 0x46, script: 0x1e, flags: 0x0},
-       113:  {region: 0x164, script: 0x52, flags: 0x0},
+       112:  {region: 0x164, script: 0x52, flags: 0x0},
+       113:  {region: 0x46, script: 0x1e, flags: 0x0},
        114:  {region: 0x164, script: 0x52, flags: 0x0},
-       115:  {region: 0x10a, script: 0x5, flags: 0x0},
-       116:  {region: 0x161, script: 0x52, flags: 0x0},
-       117:  {region: 0x164, script: 0x52, flags: 0x0},
-       118:  {region: 0x94, script: 0x52, flags: 0x0},
-       119:  {region: 0x164, script: 0x52, flags: 0x0},
-       120:  {region: 0x12e, script: 0x52, flags: 0x0},
-       121:  {region: 0x51, script: 0x52, flags: 0x0},
-       122:  {region: 0x98, script: 0xcd, flags: 0x0},
-       123:  {region: 0xe7, script: 0x5, flags: 0x0},
-       124:  {region: 0x98, script: 0x20, flags: 0x0},
-       125:  {region: 0x37, script: 0x1e, flags: 0x0},
-       126:  {region: 0x98, script: 0x20, flags: 0x0},
-       127:  {region: 0xe7, script: 0x5, flags: 0x0},
-       128:  {region: 0x12a, script: 0x2d, flags: 0x0},
-       130:  {region: 0x98, script: 0x20, flags: 0x0},
-       131:  {region: 0x164, script: 0x52, flags: 0x0},
-       132:  {region: 0x98, script: 0x20, flags: 0x0},
-       133:  {region: 0xe6, script: 0x52, flags: 0x0},
-       134:  {region: 0x164, script: 0x52, flags: 0x0},
-       135:  {region: 0x98, script: 0x20, flags: 0x0},
-       136:  {region: 0x164, script: 0x52, flags: 0x0},
-       137:  {region: 0x13e, script: 0x52, flags: 0x0},
-       138:  {region: 0x164, script: 0x52, flags: 0x0},
+       115:  {region: 0x164, script: 0x52, flags: 0x0},
+       116:  {region: 0x10a, script: 0x5, flags: 0x0},
+       117:  {region: 0x161, script: 0x52, flags: 0x0},
+       118:  {region: 0x164, script: 0x52, flags: 0x0},
+       119:  {region: 0x94, script: 0x52, flags: 0x0},
+       120:  {region: 0x164, script: 0x52, flags: 0x0},
+       121:  {region: 0x12e, script: 0x52, flags: 0x0},
+       122:  {region: 0x51, script: 0x52, flags: 0x0},
+       123:  {region: 0x98, script: 0xcd, flags: 0x0},
+       124:  {region: 0xe7, script: 0x5, flags: 0x0},
+       125:  {region: 0x98, script: 0x20, flags: 0x0},
+       126:  {region: 0x37, script: 0x1e, flags: 0x0},
+       127:  {region: 0x98, script: 0x20, flags: 0x0},
+       128:  {region: 0xe7, script: 0x5, flags: 0x0},
+       129:  {region: 0x12a, script: 0x2d, flags: 0x0},
+       131:  {region: 0x98, script: 0x20, flags: 0x0},
+       132:  {region: 0x164, script: 0x52, flags: 0x0},
+       133:  {region: 0x98, script: 0x20, flags: 0x0},
+       134:  {region: 0xe6, script: 0x52, flags: 0x0},
+       135:  {region: 0x164, script: 0x52, flags: 0x0},
+       136:  {region: 0x98, script: 0x20, flags: 0x0},
+       137:  {region: 0x164, script: 0x52, flags: 0x0},
+       138:  {region: 0x13e, script: 0x52, flags: 0x0},
        139:  {region: 0x164, script: 0x52, flags: 0x0},
-       140:  {region: 0xe6, script: 0x52, flags: 0x0},
-       141:  {region: 0x164, script: 0x52, flags: 0x0},
-       142:  {region: 0xd5, script: 0x52, flags: 0x0},
-       143:  {region: 0x164, script: 0x52, flags: 0x0},
+       140:  {region: 0x164, script: 0x52, flags: 0x0},
+       141:  {region: 0xe6, script: 0x52, flags: 0x0},
+       142:  {region: 0x164, script: 0x52, flags: 0x0},
+       143:  {region: 0xd5, script: 0x52, flags: 0x0},
        144:  {region: 0x164, script: 0x52, flags: 0x0},
        145:  {region: 0x164, script: 0x52, flags: 0x0},
-       146:  {region: 0x164, script: 0x27, flags: 0x0},
-       147:  {region: 0x98, script: 0x20, flags: 0x0},
-       148:  {region: 0x94, script: 0x52, flags: 0x0},
-       149:  {region: 0x164, script: 0x52, flags: 0x0},
+       146:  {region: 0x164, script: 0x52, flags: 0x0},
+       147:  {region: 0x164, script: 0x27, flags: 0x0},
+       148:  {region: 0x98, script: 0x20, flags: 0x0},
+       149:  {region: 0x94, script: 0x52, flags: 0x0},
        150:  {region: 0x164, script: 0x52, flags: 0x0},
        151:  {region: 0x164, script: 0x52, flags: 0x0},
-       152:  {region: 0x164, script: 0x52, flags: 0x0},
-       153:  {region: 0x51, script: 0x52, flags: 0x0},
+       152:  {region: 0x113, script: 0x52, flags: 0x0},
+       153:  {region: 0x164, script: 0x52, flags: 0x0},
        154:  {region: 0x164, script: 0x52, flags: 0x0},
-       155:  {region: 0xe6, script: 0x52, flags: 0x0},
+       155:  {region: 0x51, script: 0x52, flags: 0x0},
        156:  {region: 0x164, script: 0x52, flags: 0x0},
-       157:  {region: 0x13d, script: 0xcf, flags: 0x0},
-       158:  {region: 0xc2, script: 0x52, flags: 0x0},
-       159:  {region: 0x164, script: 0x52, flags: 0x0},
-       160:  {region: 0x164, script: 0x52, flags: 0x0},
-       161:  {region: 0xc2, script: 0x52, flags: 0x0},
+       157:  {region: 0xe6, script: 0x52, flags: 0x0},
+       158:  {region: 0x164, script: 0x52, flags: 0x0},
+       159:  {region: 0x13d, script: 0xcf, flags: 0x0},
+       160:  {region: 0xc2, script: 0x52, flags: 0x0},
+       161:  {region: 0x164, script: 0x52, flags: 0x0},
        162:  {region: 0x164, script: 0x52, flags: 0x0},
-       163:  {region: 0x34, script: 0xe, flags: 0x0},
+       163:  {region: 0xc2, script: 0x52, flags: 0x0},
        164:  {region: 0x164, script: 0x52, flags: 0x0},
-       165:  {region: 0x164, script: 0x52, flags: 0x0},
+       165:  {region: 0x34, script: 0xe, flags: 0x0},
        166:  {region: 0x164, script: 0x52, flags: 0x0},
-       167:  {region: 0x52, script: 0xd6, flags: 0x0},
+       167:  {region: 0x164, script: 0x52, flags: 0x0},
        168:  {region: 0x164, script: 0x52, flags: 0x0},
-       169:  {region: 0x164, script: 0x52, flags: 0x0},
+       169:  {region: 0x52, script: 0xd6, flags: 0x0},
        170:  {region: 0x164, script: 0x52, flags: 0x0},
-       171:  {region: 0x98, script: 0xe, flags: 0x0},
+       171:  {region: 0x164, script: 0x52, flags: 0x0},
        172:  {region: 0x164, script: 0x52, flags: 0x0},
-       173:  {region: 0x9b, script: 0x5, flags: 0x0},
+       173:  {region: 0x98, script: 0xe, flags: 0x0},
        174:  {region: 0x164, script: 0x52, flags: 0x0},
-       175:  {region: 0x4e, script: 0x52, flags: 0x0},
-       176:  {region: 0x77, script: 0x52, flags: 0x0},
-       177:  {region: 0x98, script: 0x20, flags: 0x0},
-       178:  {region: 0xe7, script: 0x5, flags: 0x0},
+       175:  {region: 0x9b, script: 0x5, flags: 0x0},
+       176:  {region: 0x164, script: 0x52, flags: 0x0},
+       177:  {region: 0x4e, script: 0x52, flags: 0x0},
+       178:  {region: 0x77, script: 0x52, flags: 0x0},
        179:  {region: 0x98, script: 0x20, flags: 0x0},
-       180:  {region: 0x164, script: 0x52, flags: 0x0},
-       181:  {region: 0x32, script: 0x52, flags: 0x0},
+       180:  {region: 0xe7, script: 0x5, flags: 0x0},
+       181:  {region: 0x98, script: 0x20, flags: 0x0},
        182:  {region: 0x164, script: 0x52, flags: 0x0},
-       183:  {region: 0xb3, script: 0xc, flags: 0x0},
-       184:  {region: 0x51, script: 0x52, flags: 0x0},
-       185:  {region: 0x164, script: 0x27, flags: 0x0},
-       186:  {region: 0xe6, script: 0x52, flags: 0x0},
-       187:  {region: 0x164, script: 0x52, flags: 0x0},
-       188:  {region: 0xe7, script: 0x20, flags: 0x0},
-       189:  {region: 0x105, script: 0x1e, flags: 0x0},
-       190:  {region: 0x15e, script: 0x52, flags: 0x0},
-       191:  {region: 0x164, script: 0x52, flags: 0x0},
-       192:  {region: 0x94, script: 0x52, flags: 0x0},
+       183:  {region: 0x32, script: 0x52, flags: 0x0},
+       184:  {region: 0x164, script: 0x52, flags: 0x0},
+       185:  {region: 0xb3, script: 0xc, flags: 0x0},
+       186:  {region: 0x51, script: 0x52, flags: 0x0},
+       187:  {region: 0x164, script: 0x27, flags: 0x0},
+       188:  {region: 0xe6, script: 0x52, flags: 0x0},
+       189:  {region: 0x164, script: 0x52, flags: 0x0},
+       190:  {region: 0xe7, script: 0x20, flags: 0x0},
+       191:  {region: 0x105, script: 0x1e, flags: 0x0},
+       192:  {region: 0x15e, script: 0x52, flags: 0x0},
        193:  {region: 0x164, script: 0x52, flags: 0x0},
-       194:  {region: 0x51, script: 0x52, flags: 0x0},
+       194:  {region: 0x94, script: 0x52, flags: 0x0},
        195:  {region: 0x164, script: 0x52, flags: 0x0},
-       196:  {region: 0x164, script: 0x52, flags: 0x0},
+       196:  {region: 0x51, script: 0x52, flags: 0x0},
        197:  {region: 0x164, script: 0x52, flags: 0x0},
-       198:  {region: 0x85, script: 0x52, flags: 0x0},
+       198:  {region: 0x164, script: 0x52, flags: 0x0},
        199:  {region: 0x164, script: 0x52, flags: 0x0},
-       200:  {region: 0x164, script: 0x52, flags: 0x0},
+       200:  {region: 0x85, script: 0x52, flags: 0x0},
        201:  {region: 0x164, script: 0x52, flags: 0x0},
        202:  {region: 0x164, script: 0x52, flags: 0x0},
-       203:  {region: 0x6c, script: 0x27, flags: 0x0},
+       203:  {region: 0x164, script: 0x52, flags: 0x0},
        204:  {region: 0x164, script: 0x52, flags: 0x0},
-       205:  {region: 0x164, script: 0x52, flags: 0x0},
-       206:  {region: 0x51, script: 0x52, flags: 0x0},
+       205:  {region: 0x6c, script: 0x27, flags: 0x0},
+       206:  {region: 0x164, script: 0x52, flags: 0x0},
        207:  {region: 0x164, script: 0x52, flags: 0x0},
-       208:  {region: 0x164, script: 0x52, flags: 0x0},
-       209:  {region: 0xc2, script: 0x52, flags: 0x0},
+       208:  {region: 0x51, script: 0x52, flags: 0x0},
+       209:  {region: 0x164, script: 0x52, flags: 0x0},
        210:  {region: 0x164, script: 0x52, flags: 0x0},
-       211:  {region: 0x164, script: 0x52, flags: 0x0},
+       211:  {region: 0xc2, script: 0x52, flags: 0x0},
        212:  {region: 0x164, script: 0x52, flags: 0x0},
-       213:  {region: 0x6d, script: 0x52, flags: 0x0},
+       213:  {region: 0x164, script: 0x52, flags: 0x0},
        214:  {region: 0x164, script: 0x52, flags: 0x0},
-       215:  {region: 0x164, script: 0x52, flags: 0x0},
-       216:  {region: 0xd5, script: 0x52, flags: 0x0},
-       217:  {region: 0x8, script: 0x2, flags: 0x1},
-       218:  {region: 0x105, script: 0x1e, flags: 0x0},
-       219:  {region: 0xe6, script: 0x52, flags: 0x0},
-       220:  {region: 0x164, script: 0x52, flags: 0x0},
-       221:  {region: 0x130, script: 0x52, flags: 0x0},
-       222:  {region: 0x89, script: 0x52, flags: 0x0},
-       223:  {region: 0x74, script: 0x52, flags: 0x0},
-       224:  {region: 0x105, script: 0x1e, flags: 0x0},
-       225:  {region: 0x134, script: 0x52, flags: 0x0},
-       226:  {region: 0x48, script: 0x52, flags: 0x0},
-       227:  {region: 0x134, script: 0x1a, flags: 0x0},
-       228:  {region: 0xa5, script: 0x5, flags: 0x0},
-       229:  {region: 0x13d, script: 0x19, flags: 0x0},
-       230:  {region: 0x164, script: 0x52, flags: 0x0},
-       231:  {region: 0x9a, script: 0x5, flags: 0x0},
+       215:  {region: 0x6d, script: 0x52, flags: 0x0},
+       216:  {region: 0x164, script: 0x52, flags: 0x0},
+       217:  {region: 0x164, script: 0x52, flags: 0x0},
+       218:  {region: 0xd5, script: 0x52, flags: 0x0},
+       219:  {region: 0x34, script: 0x16, flags: 0x0},
+       220:  {region: 0x105, script: 0x1e, flags: 0x0},
+       221:  {region: 0xe6, script: 0x52, flags: 0x0},
+       222:  {region: 0x164, script: 0x52, flags: 0x0},
+       223:  {region: 0x130, script: 0x52, flags: 0x0},
+       224:  {region: 0x89, script: 0x52, flags: 0x0},
+       225:  {region: 0x74, script: 0x52, flags: 0x0},
+       226:  {region: 0x105, script: 0x1e, flags: 0x0},
+       227:  {region: 0x134, script: 0x52, flags: 0x0},
+       228:  {region: 0x48, script: 0x52, flags: 0x0},
+       229:  {region: 0x134, script: 0x1a, flags: 0x0},
+       230:  {region: 0xa5, script: 0x5, flags: 0x0},
+       231:  {region: 0x13d, script: 0x19, flags: 0x0},
        232:  {region: 0x164, script: 0x52, flags: 0x0},
-       233:  {region: 0x164, script: 0x52, flags: 0x0},
+       233:  {region: 0x9a, script: 0x5, flags: 0x0},
        234:  {region: 0x164, script: 0x52, flags: 0x0},
        235:  {region: 0x164, script: 0x52, flags: 0x0},
        236:  {region: 0x164, script: 0x52, flags: 0x0},
-       237:  {region: 0x77, script: 0x52, flags: 0x0},
-       238:  {region: 0x6a, script: 0x1c, flags: 0x0},
-       239:  {region: 0xe6, script: 0x52, flags: 0x0},
-       240:  {region: 0x48, script: 0x17, flags: 0x0},
-       241:  {region: 0x48, script: 0x17, flags: 0x0},
+       237:  {region: 0x164, script: 0x52, flags: 0x0},
+       238:  {region: 0x164, script: 0x52, flags: 0x0},
+       239:  {region: 0x77, script: 0x52, flags: 0x0},
+       240:  {region: 0x6a, script: 0x1c, flags: 0x0},
+       241:  {region: 0xe6, script: 0x52, flags: 0x0},
        242:  {region: 0x48, script: 0x17, flags: 0x0},
-       243:  {region: 0x48, script: 0x17, flags: 0x0},
+       243:  {region: 0x12f, script: 0x1e, flags: 0x0},
        244:  {region: 0x48, script: 0x17, flags: 0x0},
-       245:  {region: 0x109, script: 0x52, flags: 0x0},
-       246:  {region: 0x5d, script: 0x52, flags: 0x0},
-       247:  {region: 0xe8, script: 0x52, flags: 0x0},
-       248:  {region: 0x48, script: 0x17, flags: 0x0},
-       249:  {region: 0xc3, script: 0x79, flags: 0x0},
-       250:  {region: 0xa, script: 0x2, flags: 0x1},
-       251:  {region: 0x105, script: 0x1e, flags: 0x0},
-       252:  {region: 0x7a, script: 0x52, flags: 0x0},
-       253:  {region: 0x62, script: 0x52, flags: 0x0},
-       254:  {region: 0x164, script: 0x52, flags: 0x0},
-       255:  {region: 0x164, script: 0x52, flags: 0x0},
-       256:  {region: 0x164, script: 0x52, flags: 0x0},
+       245:  {region: 0x48, script: 0x17, flags: 0x0},
+       246:  {region: 0x48, script: 0x17, flags: 0x0},
+       247:  {region: 0x48, script: 0x17, flags: 0x0},
+       248:  {region: 0x109, script: 0x52, flags: 0x0},
+       249:  {region: 0x5d, script: 0x52, flags: 0x0},
+       250:  {region: 0xe8, script: 0x52, flags: 0x0},
+       251:  {region: 0x48, script: 0x17, flags: 0x0},
+       252:  {region: 0xc3, script: 0x79, flags: 0x0},
+       253:  {region: 0x8, script: 0x2, flags: 0x1},
+       254:  {region: 0x105, script: 0x1e, flags: 0x0},
+       255:  {region: 0x7a, script: 0x52, flags: 0x0},
+       256:  {region: 0x62, script: 0x52, flags: 0x0},
        257:  {region: 0x164, script: 0x52, flags: 0x0},
-       258:  {region: 0x134, script: 0x52, flags: 0x0},
-       259:  {region: 0x105, script: 0x1e, flags: 0x0},
-       260:  {region: 0xa3, script: 0x52, flags: 0x0},
-       261:  {region: 0x164, script: 0x52, flags: 0x0},
-       262:  {region: 0x164, script: 0x52, flags: 0x0},
-       263:  {region: 0x98, script: 0x5, flags: 0x0},
+       258:  {region: 0x164, script: 0x52, flags: 0x0},
+       259:  {region: 0x164, script: 0x52, flags: 0x0},
+       260:  {region: 0x164, script: 0x52, flags: 0x0},
+       261:  {region: 0x134, script: 0x52, flags: 0x0},
+       262:  {region: 0x105, script: 0x1e, flags: 0x0},
+       263:  {region: 0xa3, script: 0x52, flags: 0x0},
        264:  {region: 0x164, script: 0x52, flags: 0x0},
-       265:  {region: 0x5f, script: 0x52, flags: 0x0},
-       266:  {region: 0x164, script: 0x52, flags: 0x0},
-       267:  {region: 0x48, script: 0x52, flags: 0x0},
-       268:  {region: 0x164, script: 0x52, flags: 0x0},
+       265:  {region: 0x164, script: 0x52, flags: 0x0},
+       266:  {region: 0x98, script: 0x5, flags: 0x0},
+       267:  {region: 0x164, script: 0x52, flags: 0x0},
+       268:  {region: 0x5f, script: 0x52, flags: 0x0},
        269:  {region: 0x164, script: 0x52, flags: 0x0},
-       270:  {region: 0x164, script: 0x52, flags: 0x0},
-       271:  {region: 0x164, script: 0x5, flags: 0x0},
-       272:  {region: 0x48, script: 0x52, flags: 0x0},
+       270:  {region: 0x48, script: 0x52, flags: 0x0},
+       271:  {region: 0x164, script: 0x52, flags: 0x0},
+       272:  {region: 0x164, script: 0x52, flags: 0x0},
        273:  {region: 0x164, script: 0x52, flags: 0x0},
-       274:  {region: 0x164, script: 0x52, flags: 0x0},
-       275:  {region: 0xd3, script: 0x52, flags: 0x0},
-       276:  {region: 0x4e, script: 0x52, flags: 0x0},
+       274:  {region: 0x164, script: 0x5, flags: 0x0},
+       275:  {region: 0x48, script: 0x52, flags: 0x0},
+       276:  {region: 0x164, script: 0x52, flags: 0x0},
        277:  {region: 0x164, script: 0x52, flags: 0x0},
-       278:  {region: 0x98, script: 0x5, flags: 0x0},
-       279:  {region: 0x164, script: 0x52, flags: 0x0},
+       278:  {region: 0xd3, script: 0x52, flags: 0x0},
+       279:  {region: 0x4e, script: 0x52, flags: 0x0},
        280:  {region: 0x164, script: 0x52, flags: 0x0},
-       281:  {region: 0x164, script: 0x52, flags: 0x0},
-       282:  {region: 0x164, script: 0x27, flags: 0x0},
-       283:  {region: 0x5f, script: 0x52, flags: 0x0},
-       284:  {region: 0xc2, script: 0x52, flags: 0x0},
-       285:  {region: 0xcf, script: 0x52, flags: 0x0},
-       286:  {region: 0x164, script: 0x52, flags: 0x0},
-       287:  {region: 0xda, script: 0x20, flags: 0x0},
-       288:  {region: 0x51, script: 0x52, flags: 0x0},
+       281:  {region: 0x98, script: 0x5, flags: 0x0},
+       282:  {region: 0x164, script: 0x52, flags: 0x0},
+       283:  {region: 0x164, script: 0x52, flags: 0x0},
+       284:  {region: 0x164, script: 0x52, flags: 0x0},
+       285:  {region: 0x164, script: 0x27, flags: 0x0},
+       286:  {region: 0x5f, script: 0x52, flags: 0x0},
+       287:  {region: 0xc2, script: 0x52, flags: 0x0},
+       288:  {region: 0xcf, script: 0x52, flags: 0x0},
        289:  {region: 0x164, script: 0x52, flags: 0x0},
-       290:  {region: 0x164, script: 0x52, flags: 0x0},
-       291:  {region: 0x164, script: 0x52, flags: 0x0},
-       292:  {region: 0xcc, script: 0xd4, flags: 0x0},
+       290:  {region: 0xda, script: 0x20, flags: 0x0},
+       291:  {region: 0x51, script: 0x52, flags: 0x0},
+       292:  {region: 0x164, script: 0x52, flags: 0x0},
        293:  {region: 0x164, script: 0x52, flags: 0x0},
        294:  {region: 0x164, script: 0x52, flags: 0x0},
-       295:  {region: 0x113, script: 0x52, flags: 0x0},
-       296:  {region: 0x36, script: 0x52, flags: 0x0},
-       297:  {region: 0x42, script: 0xd6, flags: 0x0},
-       298:  {region: 0x164, script: 0x52, flags: 0x0},
-       299:  {region: 0xa3, script: 0x52, flags: 0x0},
-       300:  {region: 0x7f, script: 0x52, flags: 0x0},
-       301:  {region: 0xd5, script: 0x52, flags: 0x0},
-       302:  {region: 0x9d, script: 0x52, flags: 0x0},
-       303:  {region: 0x6a, script: 0x25, flags: 0x0},
-       304:  {region: 0xc3, script: 0x43, flags: 0x0},
-       305:  {region: 0x86, script: 0x2d, flags: 0x0},
-       306:  {region: 0x164, script: 0x52, flags: 0x0},
+       295:  {region: 0xcc, script: 0xd4, flags: 0x0},
+       296:  {region: 0x164, script: 0x52, flags: 0x0},
+       297:  {region: 0x164, script: 0x52, flags: 0x0},
+       298:  {region: 0x113, script: 0x52, flags: 0x0},
+       299:  {region: 0x36, script: 0x52, flags: 0x0},
+       300:  {region: 0x42, script: 0xd6, flags: 0x0},
+       301:  {region: 0x164, script: 0x52, flags: 0x0},
+       302:  {region: 0xa3, script: 0x52, flags: 0x0},
+       303:  {region: 0x7f, script: 0x52, flags: 0x0},
+       304:  {region: 0xd5, script: 0x52, flags: 0x0},
+       305:  {region: 0x9d, script: 0x52, flags: 0x0},
+       306:  {region: 0x6a, script: 0x25, flags: 0x0},
        307:  {region: 0x164, script: 0x52, flags: 0x0},
-       308:  {region: 0xc, script: 0x2, flags: 0x1},
-       309:  {region: 0x164, script: 0x52, flags: 0x0},
+       308:  {region: 0xc3, script: 0x43, flags: 0x0},
+       309:  {region: 0x86, script: 0x2d, flags: 0x0},
        310:  {region: 0x164, script: 0x52, flags: 0x0},
-       311:  {region: 0x1, script: 0x52, flags: 0x0},
-       312:  {region: 0x164, script: 0x52, flags: 0x0},
-       313:  {region: 0x6d, script: 0x52, flags: 0x0},
-       314:  {region: 0x134, script: 0x52, flags: 0x0},
-       315:  {region: 0x69, script: 0x52, flags: 0x0},
+       311:  {region: 0x164, script: 0x52, flags: 0x0},
+       312:  {region: 0xa, script: 0x2, flags: 0x1},
+       313:  {region: 0x164, script: 0x52, flags: 0x0},
+       314:  {region: 0x164, script: 0x52, flags: 0x0},
+       315:  {region: 0x1, script: 0x52, flags: 0x0},
        316:  {region: 0x164, script: 0x52, flags: 0x0},
-       317:  {region: 0x9d, script: 0x3e, flags: 0x0},
-       318:  {region: 0x164, script: 0x52, flags: 0x0},
-       319:  {region: 0x164, script: 0x52, flags: 0x0},
-       320:  {region: 0x6d, script: 0x52, flags: 0x0},
-       321:  {region: 0x51, script: 0x52, flags: 0x0},
-       322:  {region: 0x6d, script: 0x52, flags: 0x0},
-       323:  {region: 0x9b, script: 0x5, flags: 0x0},
-       324:  {region: 0x164, script: 0x52, flags: 0x0},
-       325:  {region: 0x164, script: 0x52, flags: 0x0},
-       326:  {region: 0x164, script: 0x52, flags: 0x0},
-       327:  {region: 0x164, script: 0x52, flags: 0x0},
-       328:  {region: 0x85, script: 0x52, flags: 0x0},
-       329:  {region: 0xe, script: 0x2, flags: 0x1},
+       317:  {region: 0x6d, script: 0x52, flags: 0x0},
+       318:  {region: 0x134, script: 0x52, flags: 0x0},
+       319:  {region: 0x69, script: 0x52, flags: 0x0},
+       320:  {region: 0x164, script: 0x52, flags: 0x0},
+       321:  {region: 0x9d, script: 0x3e, flags: 0x0},
+       322:  {region: 0x164, script: 0x52, flags: 0x0},
+       323:  {region: 0x164, script: 0x52, flags: 0x0},
+       324:  {region: 0x6d, script: 0x52, flags: 0x0},
+       325:  {region: 0x51, script: 0x52, flags: 0x0},
+       326:  {region: 0x6d, script: 0x52, flags: 0x0},
+       327:  {region: 0x9b, script: 0x5, flags: 0x0},
+       328:  {region: 0x164, script: 0x52, flags: 0x0},
+       329:  {region: 0x164, script: 0x52, flags: 0x0},
        330:  {region: 0x164, script: 0x52, flags: 0x0},
-       331:  {region: 0xc2, script: 0x52, flags: 0x0},
-       332:  {region: 0x71, script: 0x52, flags: 0x0},
-       333:  {region: 0x10a, script: 0x5, flags: 0x0},
-       334:  {region: 0xe6, script: 0x52, flags: 0x0},
-       335:  {region: 0x10b, script: 0x52, flags: 0x0},
-       336:  {region: 0x72, script: 0x52, flags: 0x0},
-       337:  {region: 0x164, script: 0x52, flags: 0x0},
-       338:  {region: 0x164, script: 0x52, flags: 0x0},
-       339:  {region: 0x75, script: 0x52, flags: 0x0},
-       340:  {region: 0x164, script: 0x52, flags: 0x0},
-       341:  {region: 0x3a, script: 0x52, flags: 0x0},
+       331:  {region: 0x164, script: 0x52, flags: 0x0},
+       332:  {region: 0x85, script: 0x52, flags: 0x0},
+       333:  {region: 0xc, script: 0x2, flags: 0x1},
+       334:  {region: 0x164, script: 0x52, flags: 0x0},
+       335:  {region: 0xc2, script: 0x52, flags: 0x0},
+       336:  {region: 0x71, script: 0x52, flags: 0x0},
+       337:  {region: 0x10a, script: 0x5, flags: 0x0},
+       338:  {region: 0xe6, script: 0x52, flags: 0x0},
+       339:  {region: 0x10b, script: 0x52, flags: 0x0},
+       340:  {region: 0x72, script: 0x52, flags: 0x0},
+       341:  {region: 0x164, script: 0x52, flags: 0x0},
        342:  {region: 0x164, script: 0x52, flags: 0x0},
-       343:  {region: 0x164, script: 0x52, flags: 0x0},
+       343:  {region: 0x75, script: 0x52, flags: 0x0},
        344:  {region: 0x164, script: 0x52, flags: 0x0},
-       345:  {region: 0x77, script: 0x52, flags: 0x0},
-       346:  {region: 0x134, script: 0x52, flags: 0x0},
-       347:  {region: 0x77, script: 0x52, flags: 0x0},
-       348:  {region: 0x5f, script: 0x52, flags: 0x0},
-       349:  {region: 0x5f, script: 0x52, flags: 0x0},
-       350:  {region: 0x51, script: 0x5, flags: 0x0},
-       351:  {region: 0x13f, script: 0x52, flags: 0x0},
-       352:  {region: 0x164, script: 0x52, flags: 0x0},
-       353:  {region: 0x83, script: 0x52, flags: 0x0},
-       354:  {region: 0x164, script: 0x52, flags: 0x0},
-       355:  {region: 0xd3, script: 0x52, flags: 0x0},
-       356:  {region: 0x9d, script: 0x52, flags: 0x0},
-       357:  {region: 0xd5, script: 0x52, flags: 0x0},
+       345:  {region: 0x3a, script: 0x52, flags: 0x0},
+       346:  {region: 0x164, script: 0x52, flags: 0x0},
+       347:  {region: 0x164, script: 0x52, flags: 0x0},
+       348:  {region: 0x164, script: 0x52, flags: 0x0},
+       349:  {region: 0x77, script: 0x52, flags: 0x0},
+       350:  {region: 0x134, script: 0x52, flags: 0x0},
+       351:  {region: 0x77, script: 0x52, flags: 0x0},
+       352:  {region: 0x5f, script: 0x52, flags: 0x0},
+       353:  {region: 0x5f, script: 0x52, flags: 0x0},
+       354:  {region: 0x51, script: 0x5, flags: 0x0},
+       355:  {region: 0x13f, script: 0x52, flags: 0x0},
+       356:  {region: 0x164, script: 0x52, flags: 0x0},
+       357:  {region: 0x83, script: 0x52, flags: 0x0},
        358:  {region: 0x164, script: 0x52, flags: 0x0},
-       359:  {region: 0x10a, script: 0x52, flags: 0x0},
-       360:  {region: 0xd8, script: 0x52, flags: 0x0},
-       361:  {region: 0x95, script: 0x52, flags: 0x0},
-       362:  {region: 0x7f, script: 0x52, flags: 0x0},
-       363:  {region: 0x164, script: 0x52, flags: 0x0},
-       364:  {region: 0xbb, script: 0x52, flags: 0x0},
-       365:  {region: 0x164, script: 0x52, flags: 0x0},
-       366:  {region: 0x164, script: 0x52, flags: 0x0},
+       359:  {region: 0xd3, script: 0x52, flags: 0x0},
+       360:  {region: 0x9d, script: 0x52, flags: 0x0},
+       361:  {region: 0xd5, script: 0x52, flags: 0x0},
+       362:  {region: 0x164, script: 0x52, flags: 0x0},
+       363:  {region: 0x10a, script: 0x52, flags: 0x0},
+       364:  {region: 0xd8, script: 0x52, flags: 0x0},
+       365:  {region: 0x95, script: 0x52, flags: 0x0},
+       366:  {region: 0x7f, script: 0x52, flags: 0x0},
        367:  {region: 0x164, script: 0x52, flags: 0x0},
-       368:  {region: 0x52, script: 0x34, flags: 0x0},
+       368:  {region: 0xbb, script: 0x52, flags: 0x0},
        369:  {region: 0x164, script: 0x52, flags: 0x0},
-       370:  {region: 0x94, script: 0x52, flags: 0x0},
+       370:  {region: 0x164, script: 0x52, flags: 0x0},
        371:  {region: 0x164, script: 0x52, flags: 0x0},
-       372:  {region: 0x98, script: 0x20, flags: 0x0},
+       372:  {region: 0x52, script: 0x34, flags: 0x0},
        373:  {region: 0x164, script: 0x52, flags: 0x0},
-       374:  {region: 0x9b, script: 0x5, flags: 0x0},
-       375:  {region: 0x7d, script: 0x52, flags: 0x0},
-       376:  {region: 0x7a, script: 0x52, flags: 0x0},
+       374:  {region: 0x94, script: 0x52, flags: 0x0},
+       375:  {region: 0x164, script: 0x52, flags: 0x0},
+       376:  {region: 0x98, script: 0x20, flags: 0x0},
        377:  {region: 0x164, script: 0x52, flags: 0x0},
-       378:  {region: 0x164, script: 0x52, flags: 0x0},
-       379:  {region: 0x164, script: 0x52, flags: 0x0},
-       380:  {region: 0x164, script: 0x52, flags: 0x0},
+       378:  {region: 0x9b, script: 0x5, flags: 0x0},
+       379:  {region: 0x7d, script: 0x52, flags: 0x0},
+       380:  {region: 0x7a, script: 0x52, flags: 0x0},
        381:  {region: 0x164, script: 0x52, flags: 0x0},
        382:  {region: 0x164, script: 0x52, flags: 0x0},
-       383:  {region: 0x6e, script: 0x27, flags: 0x0},
+       383:  {region: 0x164, script: 0x52, flags: 0x0},
        384:  {region: 0x164, script: 0x52, flags: 0x0},
-       385:  {region: 0xda, script: 0x20, flags: 0x0},
+       385:  {region: 0x164, script: 0x52, flags: 0x0},
        386:  {region: 0x164, script: 0x52, flags: 0x0},
-       387:  {region: 0xa6, script: 0x52, flags: 0x0},
+       387:  {region: 0x6e, script: 0x27, flags: 0x0},
        388:  {region: 0x164, script: 0x52, flags: 0x0},
-       389:  {region: 0xe7, script: 0x5, flags: 0x0},
+       389:  {region: 0xda, script: 0x20, flags: 0x0},
        390:  {region: 0x164, script: 0x52, flags: 0x0},
-       391:  {region: 0xe7, script: 0x5, flags: 0x0},
+       391:  {region: 0xa6, script: 0x52, flags: 0x0},
        392:  {region: 0x164, script: 0x52, flags: 0x0},
-       393:  {region: 0x164, script: 0x52, flags: 0x0},
-       394:  {region: 0x6d, script: 0x52, flags: 0x0},
-       395:  {region: 0x9b, script: 0x5, flags: 0x0},
+       393:  {region: 0xe7, script: 0x5, flags: 0x0},
+       394:  {region: 0x164, script: 0x52, flags: 0x0},
+       395:  {region: 0xe7, script: 0x5, flags: 0x0},
        396:  {region: 0x164, script: 0x52, flags: 0x0},
-       397:  {region: 0x164, script: 0x27, flags: 0x0},
-       398:  {region: 0xf0, script: 0x52, flags: 0x0},
-       399:  {region: 0x164, script: 0x52, flags: 0x0},
+       397:  {region: 0x164, script: 0x52, flags: 0x0},
+       398:  {region: 0x6d, script: 0x52, flags: 0x0},
+       399:  {region: 0x9b, script: 0x5, flags: 0x0},
        400:  {region: 0x164, script: 0x52, flags: 0x0},
-       401:  {region: 0x164, script: 0x52, flags: 0x0},
-       402:  {region: 0x164, script: 0x27, flags: 0x0},
+       401:  {region: 0x164, script: 0x27, flags: 0x0},
+       402:  {region: 0xf0, script: 0x52, flags: 0x0},
        403:  {region: 0x164, script: 0x52, flags: 0x0},
-       404:  {region: 0x98, script: 0x20, flags: 0x0},
-       405:  {region: 0x98, script: 0xd0, flags: 0x0},
-       406:  {region: 0x94, script: 0x52, flags: 0x0},
-       407:  {region: 0xd8, script: 0x52, flags: 0x0},
-       408:  {region: 0x12f, script: 0x2b, flags: 0x0},
-       409:  {region: 0x10, script: 0x2, flags: 0x1},
-       410:  {region: 0x98, script: 0xe, flags: 0x0},
-       411:  {region: 0x164, script: 0x52, flags: 0x0},
-       412:  {region: 0x4d, script: 0x52, flags: 0x0},
-       413:  {region: 0x98, script: 0x2e, flags: 0x0},
-       414:  {region: 0x40, script: 0x52, flags: 0x0},
-       415:  {region: 0x53, script: 0x52, flags: 0x0},
+       404:  {region: 0x164, script: 0x52, flags: 0x0},
+       405:  {region: 0x164, script: 0x52, flags: 0x0},
+       406:  {region: 0x164, script: 0x27, flags: 0x0},
+       407:  {region: 0x164, script: 0x52, flags: 0x0},
+       408:  {region: 0x98, script: 0x20, flags: 0x0},
+       409:  {region: 0x98, script: 0xd0, flags: 0x0},
+       410:  {region: 0x94, script: 0x52, flags: 0x0},
+       411:  {region: 0xd8, script: 0x52, flags: 0x0},
+       412:  {region: 0x12f, script: 0x2b, flags: 0x0},
+       413:  {region: 0x164, script: 0x52, flags: 0x0},
+       414:  {region: 0xe, script: 0x2, flags: 0x1},
+       415:  {region: 0x98, script: 0xe, flags: 0x0},
        416:  {region: 0x164, script: 0x52, flags: 0x0},
-       417:  {region: 0x7f, script: 0x52, flags: 0x0},
-       418:  {region: 0x164, script: 0x52, flags: 0x0},
-       419:  {region: 0x164, script: 0x52, flags: 0x0},
-       420:  {region: 0xa3, script: 0x52, flags: 0x0},
-       421:  {region: 0x97, script: 0x52, flags: 0x0},
-       422:  {region: 0x164, script: 0x52, flags: 0x0},
-       423:  {region: 0xda, script: 0x20, flags: 0x0},
+       417:  {region: 0x4d, script: 0x52, flags: 0x0},
+       418:  {region: 0x98, script: 0x2e, flags: 0x0},
+       419:  {region: 0x40, script: 0x52, flags: 0x0},
+       420:  {region: 0x53, script: 0x52, flags: 0x0},
+       421:  {region: 0x164, script: 0x52, flags: 0x0},
+       422:  {region: 0x7f, script: 0x52, flags: 0x0},
+       423:  {region: 0x164, script: 0x52, flags: 0x0},
        424:  {region: 0x164, script: 0x52, flags: 0x0},
-       425:  {region: 0x164, script: 0x5, flags: 0x0},
-       426:  {region: 0x48, script: 0x52, flags: 0x0},
-       427:  {region: 0x164, script: 0x5, flags: 0x0},
-       428:  {region: 0x164, script: 0x52, flags: 0x0},
-       429:  {region: 0x12, script: 0x3, flags: 0x1},
-       430:  {region: 0x164, script: 0x52, flags: 0x0},
-       431:  {region: 0x52, script: 0x34, flags: 0x0},
-       432:  {region: 0x164, script: 0x52, flags: 0x0},
-       433:  {region: 0x134, script: 0x52, flags: 0x0},
-       434:  {region: 0x23, script: 0x5, flags: 0x0},
+       425:  {region: 0xa3, script: 0x52, flags: 0x0},
+       426:  {region: 0x97, script: 0x52, flags: 0x0},
+       427:  {region: 0x164, script: 0x52, flags: 0x0},
+       428:  {region: 0xda, script: 0x20, flags: 0x0},
+       429:  {region: 0x164, script: 0x52, flags: 0x0},
+       430:  {region: 0x164, script: 0x5, flags: 0x0},
+       431:  {region: 0x48, script: 0x52, flags: 0x0},
+       432:  {region: 0x164, script: 0x5, flags: 0x0},
+       433:  {region: 0x164, script: 0x52, flags: 0x0},
+       434:  {region: 0x10, script: 0x3, flags: 0x1},
        435:  {region: 0x164, script: 0x52, flags: 0x0},
-       436:  {region: 0x164, script: 0x27, flags: 0x0},
-       437:  {region: 0x96, script: 0x37, flags: 0x0},
-       438:  {region: 0x164, script: 0x52, flags: 0x0},
-       439:  {region: 0x98, script: 0x20, flags: 0x0},
+       436:  {region: 0x52, script: 0x34, flags: 0x0},
+       437:  {region: 0x164, script: 0x52, flags: 0x0},
+       438:  {region: 0x134, script: 0x52, flags: 0x0},
+       439:  {region: 0x23, script: 0x5, flags: 0x0},
        440:  {region: 0x164, script: 0x52, flags: 0x0},
-       441:  {region: 0x72, script: 0x52, flags: 0x0},
-       442:  {region: 0x164, script: 0x52, flags: 0x0},
+       441:  {region: 0x164, script: 0x27, flags: 0x0},
+       442:  {region: 0x96, script: 0x37, flags: 0x0},
        443:  {region: 0x164, script: 0x52, flags: 0x0},
-       444:  {region: 0xe6, script: 0x52, flags: 0x0},
+       444:  {region: 0x98, script: 0x20, flags: 0x0},
        445:  {region: 0x164, script: 0x52, flags: 0x0},
-       446:  {region: 0x12a, script: 0x39, flags: 0x0},
-       447:  {region: 0x52, script: 0x81, flags: 0x0},
+       446:  {region: 0x72, script: 0x52, flags: 0x0},
+       447:  {region: 0x164, script: 0x52, flags: 0x0},
        448:  {region: 0x164, script: 0x52, flags: 0x0},
-       449:  {region: 0xe7, script: 0x5, flags: 0x0},
-       450:  {region: 0x98, script: 0x20, flags: 0x0},
-       451:  {region: 0xae, script: 0x3a, flags: 0x0},
-       452:  {region: 0xe6, script: 0x52, flags: 0x0},
-       453:  {region: 0xe7, script: 0x5, flags: 0x0},
-       454:  {region: 0xe5, script: 0x52, flags: 0x0},
+       449:  {region: 0xe6, script: 0x52, flags: 0x0},
+       450:  {region: 0x164, script: 0x52, flags: 0x0},
+       451:  {region: 0x12a, script: 0x39, flags: 0x0},
+       452:  {region: 0x52, script: 0x81, flags: 0x0},
+       453:  {region: 0x164, script: 0x52, flags: 0x0},
+       454:  {region: 0xe7, script: 0x5, flags: 0x0},
        455:  {region: 0x98, script: 0x20, flags: 0x0},
-       456:  {region: 0x98, script: 0x20, flags: 0x0},
-       457:  {region: 0x164, script: 0x52, flags: 0x0},
-       458:  {region: 0x8f, script: 0x52, flags: 0x0},
-       459:  {region: 0x5f, script: 0x52, flags: 0x0},
-       460:  {region: 0x52, script: 0x34, flags: 0x0},
-       461:  {region: 0x90, script: 0x52, flags: 0x0},
-       462:  {region: 0x91, script: 0x52, flags: 0x0},
-       463:  {region: 0x164, script: 0x52, flags: 0x0},
-       464:  {region: 0x27, script: 0x8, flags: 0x0},
-       465:  {region: 0xd1, script: 0x52, flags: 0x0},
-       466:  {region: 0x77, script: 0x52, flags: 0x0},
-       467:  {region: 0x164, script: 0x52, flags: 0x0},
+       456:  {region: 0xae, script: 0x3a, flags: 0x0},
+       457:  {region: 0xe6, script: 0x52, flags: 0x0},
+       458:  {region: 0xe7, script: 0x5, flags: 0x0},
+       459:  {region: 0xe5, script: 0x52, flags: 0x0},
+       460:  {region: 0x98, script: 0x20, flags: 0x0},
+       461:  {region: 0x98, script: 0x20, flags: 0x0},
+       462:  {region: 0x164, script: 0x52, flags: 0x0},
+       463:  {region: 0x8f, script: 0x52, flags: 0x0},
+       464:  {region: 0x5f, script: 0x52, flags: 0x0},
+       465:  {region: 0x52, script: 0x34, flags: 0x0},
+       466:  {region: 0x90, script: 0x52, flags: 0x0},
+       467:  {region: 0x91, script: 0x52, flags: 0x0},
        468:  {region: 0x164, script: 0x52, flags: 0x0},
-       469:  {region: 0xcf, script: 0x52, flags: 0x0},
-       470:  {region: 0xd5, script: 0x52, flags: 0x0},
-       471:  {region: 0x164, script: 0x52, flags: 0x0},
+       469:  {region: 0x27, script: 0x8, flags: 0x0},
+       470:  {region: 0xd1, script: 0x52, flags: 0x0},
+       471:  {region: 0x77, script: 0x52, flags: 0x0},
        472:  {region: 0x164, script: 0x52, flags: 0x0},
        473:  {region: 0x164, script: 0x52, flags: 0x0},
-       474:  {region: 0x94, script: 0x52, flags: 0x0},
-       475:  {region: 0x164, script: 0x52, flags: 0x0},
+       474:  {region: 0xcf, script: 0x52, flags: 0x0},
+       475:  {region: 0xd5, script: 0x52, flags: 0x0},
        476:  {region: 0x164, script: 0x52, flags: 0x0},
        477:  {region: 0x164, script: 0x52, flags: 0x0},
-       479:  {region: 0xd5, script: 0x52, flags: 0x0},
+       478:  {region: 0x164, script: 0x52, flags: 0x0},
+       479:  {region: 0x94, script: 0x52, flags: 0x0},
        480:  {region: 0x164, script: 0x52, flags: 0x0},
        481:  {region: 0x164, script: 0x52, flags: 0x0},
-       482:  {region: 0x52, script: 0xdf, flags: 0x0},
-       483:  {region: 0x164, script: 0x52, flags: 0x0},
-       484:  {region: 0x134, script: 0x52, flags: 0x0},
-       485:  {region: 0x164, script: 0x52, flags: 0x0},
-       486:  {region: 0x48, script: 0x52, flags: 0x0},
+       482:  {region: 0x164, script: 0x52, flags: 0x0},
+       484:  {region: 0x121, script: 0x52, flags: 0x0},
+       485:  {region: 0xd5, script: 0x52, flags: 0x0},
+       486:  {region: 0x164, script: 0x52, flags: 0x0},
        487:  {region: 0x164, script: 0x52, flags: 0x0},
-       488:  {region: 0x164, script: 0x52, flags: 0x0},
-       489:  {region: 0xe6, script: 0x52, flags: 0x0},
-       490:  {region: 0x164, script: 0x52, flags: 0x0},
-       491:  {region: 0x94, script: 0x52, flags: 0x0},
-       492:  {region: 0x105, script: 0x1e, flags: 0x0},
+       488:  {region: 0x52, script: 0xdf, flags: 0x0},
+       489:  {region: 0x164, script: 0x52, flags: 0x0},
+       490:  {region: 0x134, script: 0x52, flags: 0x0},
+       491:  {region: 0x164, script: 0x52, flags: 0x0},
+       492:  {region: 0x48, script: 0x52, flags: 0x0},
+       493:  {region: 0x164, script: 0x52, flags: 0x0},
        494:  {region: 0x164, script: 0x52, flags: 0x0},
-       495:  {region: 0x164, script: 0x52, flags: 0x0},
-       496:  {region: 0x9c, script: 0x52, flags: 0x0},
-       497:  {region: 0x9d, script: 0x52, flags: 0x0},
-       498:  {region: 0x48, script: 0x17, flags: 0x0},
-       499:  {region: 0x96, script: 0x37, flags: 0x0},
+       495:  {region: 0xe6, script: 0x52, flags: 0x0},
+       496:  {region: 0x164, script: 0x52, flags: 0x0},
+       497:  {region: 0x94, script: 0x52, flags: 0x0},
+       498:  {region: 0x105, script: 0x1e, flags: 0x0},
        500:  {region: 0x164, script: 0x52, flags: 0x0},
        501:  {region: 0x164, script: 0x52, flags: 0x0},
-       502:  {region: 0x105, script: 0x52, flags: 0x0},
-       503:  {region: 0x164, script: 0x52, flags: 0x0},
-       504:  {region: 0xa1, script: 0x41, flags: 0x0},
-       505:  {region: 0x164, script: 0x52, flags: 0x0},
-       506:  {region: 0x9f, script: 0x52, flags: 0x0},
-       508:  {region: 0x164, script: 0x52, flags: 0x0},
+       502:  {region: 0x9c, script: 0x52, flags: 0x0},
+       503:  {region: 0x9d, script: 0x52, flags: 0x0},
+       504:  {region: 0x48, script: 0x17, flags: 0x0},
+       505:  {region: 0x96, script: 0x37, flags: 0x0},
+       506:  {region: 0x164, script: 0x52, flags: 0x0},
+       507:  {region: 0x164, script: 0x52, flags: 0x0},
+       508:  {region: 0x105, script: 0x52, flags: 0x0},
        509:  {region: 0x164, script: 0x52, flags: 0x0},
-       510:  {region: 0x164, script: 0x52, flags: 0x0},
-       511:  {region: 0x51, script: 0x52, flags: 0x0},
-       512:  {region: 0x12f, script: 0x37, flags: 0x0},
-       513:  {region: 0x164, script: 0x52, flags: 0x0},
-       514:  {region: 0x12e, script: 0x52, flags: 0x0},
-       515:  {region: 0xda, script: 0x20, flags: 0x0},
+       510:  {region: 0xa1, script: 0x41, flags: 0x0},
+       511:  {region: 0x164, script: 0x52, flags: 0x0},
+       512:  {region: 0x9f, script: 0x52, flags: 0x0},
+       514:  {region: 0x164, script: 0x52, flags: 0x0},
+       515:  {region: 0x164, script: 0x52, flags: 0x0},
        516:  {region: 0x164, script: 0x52, flags: 0x0},
-       517:  {region: 0x62, script: 0x52, flags: 0x0},
-       518:  {region: 0x94, script: 0x52, flags: 0x0},
-       519:  {region: 0x94, script: 0x52, flags: 0x0},
-       520:  {region: 0x7c, script: 0x29, flags: 0x0},
-       521:  {region: 0x136, script: 0x1e, flags: 0x0},
-       522:  {region: 0x66, script: 0x52, flags: 0x0},
-       523:  {region: 0xc3, script: 0x52, flags: 0x0},
-       524:  {region: 0x164, script: 0x52, flags: 0x0},
-       525:  {region: 0x164, script: 0x52, flags: 0x0},
-       526:  {region: 0xd5, script: 0x52, flags: 0x0},
-       527:  {region: 0xa3, script: 0x52, flags: 0x0},
-       528:  {region: 0xc2, script: 0x52, flags: 0x0},
-       529:  {region: 0x105, script: 0x1e, flags: 0x0},
+       517:  {region: 0x51, script: 0x52, flags: 0x0},
+       518:  {region: 0x12f, script: 0x37, flags: 0x0},
+       519:  {region: 0x164, script: 0x52, flags: 0x0},
+       520:  {region: 0x12e, script: 0x52, flags: 0x0},
+       521:  {region: 0xda, script: 0x20, flags: 0x0},
+       522:  {region: 0x164, script: 0x52, flags: 0x0},
+       523:  {region: 0x62, script: 0x52, flags: 0x0},
+       524:  {region: 0x94, script: 0x52, flags: 0x0},
+       525:  {region: 0x94, script: 0x52, flags: 0x0},
+       526:  {region: 0x7c, script: 0x29, flags: 0x0},
+       527:  {region: 0x136, script: 0x1e, flags: 0x0},
+       528:  {region: 0x66, script: 0x52, flags: 0x0},
+       529:  {region: 0xc3, script: 0x52, flags: 0x0},
        530:  {region: 0x164, script: 0x52, flags: 0x0},
        531:  {region: 0x164, script: 0x52, flags: 0x0},
-       532:  {region: 0x164, script: 0x52, flags: 0x0},
-       533:  {region: 0x164, script: 0x52, flags: 0x0},
-       534:  {region: 0xd3, script: 0x5, flags: 0x0},
-       535:  {region: 0xd5, script: 0x52, flags: 0x0},
-       536:  {region: 0x163, script: 0x52, flags: 0x0},
+       532:  {region: 0xd5, script: 0x52, flags: 0x0},
+       533:  {region: 0xa3, script: 0x52, flags: 0x0},
+       534:  {region: 0xc2, script: 0x52, flags: 0x0},
+       535:  {region: 0x105, script: 0x1e, flags: 0x0},
+       536:  {region: 0x164, script: 0x52, flags: 0x0},
        537:  {region: 0x164, script: 0x52, flags: 0x0},
        538:  {region: 0x164, script: 0x52, flags: 0x0},
-       539:  {region: 0x12e, script: 0x52, flags: 0x0},
-       540:  {region: 0x121, script: 0x5, flags: 0x0},
-       541:  {region: 0x164, script: 0x52, flags: 0x0},
-       542:  {region: 0x122, script: 0xd5, flags: 0x0},
-       543:  {region: 0x59, script: 0x52, flags: 0x0},
-       544:  {region: 0x51, script: 0x52, flags: 0x0},
-       545:  {region: 0x164, script: 0x52, flags: 0x0},
-       546:  {region: 0x4e, script: 0x52, flags: 0x0},
-       547:  {region: 0x98, script: 0x20, flags: 0x0},
-       548:  {region: 0x98, script: 0x20, flags: 0x0},
-       549:  {region: 0x4a, script: 0x52, flags: 0x0},
-       550:  {region: 0x94, script: 0x52, flags: 0x0},
+       539:  {region: 0x164, script: 0x52, flags: 0x0},
+       540:  {region: 0xd3, script: 0x5, flags: 0x0},
+       541:  {region: 0xd5, script: 0x52, flags: 0x0},
+       542:  {region: 0x163, script: 0x52, flags: 0x0},
+       543:  {region: 0x164, script: 0x52, flags: 0x0},
+       544:  {region: 0x164, script: 0x52, flags: 0x0},
+       545:  {region: 0x12e, script: 0x52, flags: 0x0},
+       546:  {region: 0x121, script: 0x5, flags: 0x0},
+       547:  {region: 0x164, script: 0x52, flags: 0x0},
+       548:  {region: 0x122, script: 0xd5, flags: 0x0},
+       549:  {region: 0x59, script: 0x52, flags: 0x0},
+       550:  {region: 0x51, script: 0x52, flags: 0x0},
        551:  {region: 0x164, script: 0x52, flags: 0x0},
-       552:  {region: 0x40, script: 0x52, flags: 0x0},
-       553:  {region: 0x98, script: 0x52, flags: 0x0},
-       554:  {region: 0x52, script: 0xcc, flags: 0x0},
-       555:  {region: 0x98, script: 0x20, flags: 0x0},
-       556:  {region: 0xc2, script: 0x52, flags: 0x0},
+       552:  {region: 0x4e, script: 0x52, flags: 0x0},
+       553:  {region: 0x98, script: 0x20, flags: 0x0},
+       554:  {region: 0x98, script: 0x20, flags: 0x0},
+       555:  {region: 0x4a, script: 0x52, flags: 0x0},
+       556:  {region: 0x94, script: 0x52, flags: 0x0},
        557:  {region: 0x164, script: 0x52, flags: 0x0},
-       558:  {region: 0x98, script: 0x6b, flags: 0x0},
-       559:  {region: 0xe7, script: 0x5, flags: 0x0},
-       560:  {region: 0x164, script: 0x52, flags: 0x0},
-       561:  {region: 0xa3, script: 0x52, flags: 0x0},
-       562:  {region: 0x164, script: 0x52, flags: 0x0},
-       563:  {region: 0x12a, script: 0x52, flags: 0x0},
-       564:  {region: 0x164, script: 0x52, flags: 0x0},
-       565:  {region: 0xd1, script: 0x52, flags: 0x0},
+       558:  {region: 0x40, script: 0x52, flags: 0x0},
+       559:  {region: 0x98, script: 0x52, flags: 0x0},
+       560:  {region: 0x52, script: 0xcc, flags: 0x0},
+       561:  {region: 0x98, script: 0x20, flags: 0x0},
+       562:  {region: 0xc2, script: 0x52, flags: 0x0},
+       563:  {region: 0x164, script: 0x52, flags: 0x0},
+       564:  {region: 0x98, script: 0x6b, flags: 0x0},
+       565:  {region: 0xe7, script: 0x5, flags: 0x0},
        566:  {region: 0x164, script: 0x52, flags: 0x0},
-       567:  {region: 0xae, script: 0x4f, flags: 0x0},
+       567:  {region: 0xa3, script: 0x52, flags: 0x0},
        568:  {region: 0x164, script: 0x52, flags: 0x0},
-       569:  {region: 0x164, script: 0x52, flags: 0x0},
-       570:  {region: 0x15, script: 0x6, flags: 0x1},
-       571:  {region: 0x164, script: 0x52, flags: 0x0},
-       572:  {region: 0x51, script: 0x52, flags: 0x0},
-       573:  {region: 0x81, script: 0x52, flags: 0x0},
-       574:  {region: 0xa3, script: 0x52, flags: 0x0},
+       569:  {region: 0x12a, script: 0x52, flags: 0x0},
+       570:  {region: 0x164, script: 0x52, flags: 0x0},
+       571:  {region: 0xd1, script: 0x52, flags: 0x0},
+       572:  {region: 0x164, script: 0x52, flags: 0x0},
+       573:  {region: 0xae, script: 0x4f, flags: 0x0},
+       574:  {region: 0x164, script: 0x52, flags: 0x0},
        575:  {region: 0x164, script: 0x52, flags: 0x0},
-       576:  {region: 0x164, script: 0x52, flags: 0x0},
+       576:  {region: 0x13, script: 0x6, flags: 0x1},
        577:  {region: 0x164, script: 0x52, flags: 0x0},
-       578:  {region: 0xa5, script: 0x46, flags: 0x0},
-       579:  {region: 0x29, script: 0x52, flags: 0x0},
-       580:  {region: 0x164, script: 0x52, flags: 0x0},
+       578:  {region: 0x51, script: 0x52, flags: 0x0},
+       579:  {region: 0x81, script: 0x52, flags: 0x0},
+       580:  {region: 0xa3, script: 0x52, flags: 0x0},
        581:  {region: 0x164, script: 0x52, flags: 0x0},
        582:  {region: 0x164, script: 0x52, flags: 0x0},
        583:  {region: 0x164, script: 0x52, flags: 0x0},
-       584:  {region: 0x164, script: 0x52, flags: 0x0},
-       585:  {region: 0x98, script: 0x4a, flags: 0x0},
+       584:  {region: 0xa5, script: 0x46, flags: 0x0},
+       585:  {region: 0x29, script: 0x52, flags: 0x0},
        586:  {region: 0x164, script: 0x52, flags: 0x0},
-       587:  {region: 0xaa, script: 0x4b, flags: 0x0},
-       588:  {region: 0x105, script: 0x1e, flags: 0x0},
-       589:  {region: 0x98, script: 0x20, flags: 0x0},
+       587:  {region: 0x164, script: 0x52, flags: 0x0},
+       588:  {region: 0x164, script: 0x52, flags: 0x0},
+       589:  {region: 0x164, script: 0x52, flags: 0x0},
        590:  {region: 0x164, script: 0x52, flags: 0x0},
-       591:  {region: 0x74, script: 0x52, flags: 0x0},
-       592:  {region: 0x164, script: 0x52, flags: 0x0},
-       593:  {region: 0xb3, script: 0x52, flags: 0x0},
-       594:  {region: 0x164, script: 0x52, flags: 0x0},
-       595:  {region: 0x164, script: 0x52, flags: 0x0},
-       596:  {region: 0x164, script: 0x52, flags: 0x0},
+       591:  {region: 0x98, script: 0x4a, flags: 0x0},
+       592:  {region: 0x113, script: 0x52, flags: 0x0},
+       593:  {region: 0x164, script: 0x52, flags: 0x0},
+       594:  {region: 0xaa, script: 0x4b, flags: 0x0},
+       595:  {region: 0x105, script: 0x1e, flags: 0x0},
+       596:  {region: 0x98, script: 0x20, flags: 0x0},
        597:  {region: 0x164, script: 0x52, flags: 0x0},
-       598:  {region: 0x164, script: 0x52, flags: 0x0},
+       598:  {region: 0x74, script: 0x52, flags: 0x0},
        599:  {region: 0x164, script: 0x52, flags: 0x0},
-       600:  {region: 0x164, script: 0x52, flags: 0x0},
-       601:  {region: 0x164, script: 0x27, flags: 0x0},
-       603:  {region: 0x105, script: 0x1e, flags: 0x0},
-       604:  {region: 0x111, script: 0x52, flags: 0x0},
-       605:  {region: 0xe6, script: 0x52, flags: 0x0},
-       606:  {region: 0x105, script: 0x52, flags: 0x0},
+       600:  {region: 0xb3, script: 0x52, flags: 0x0},
+       601:  {region: 0x164, script: 0x52, flags: 0x0},
+       602:  {region: 0x164, script: 0x52, flags: 0x0},
+       603:  {region: 0x164, script: 0x52, flags: 0x0},
+       604:  {region: 0x164, script: 0x52, flags: 0x0},
+       605:  {region: 0x164, script: 0x52, flags: 0x0},
+       606:  {region: 0x164, script: 0x52, flags: 0x0},
        607:  {region: 0x164, script: 0x52, flags: 0x0},
-       608:  {region: 0x98, script: 0x20, flags: 0x0},
-       609:  {region: 0x98, script: 0x5, flags: 0x0},
-       610:  {region: 0x12e, script: 0x52, flags: 0x0},
-       611:  {region: 0x164, script: 0x52, flags: 0x0},
-       612:  {region: 0x51, script: 0x52, flags: 0x0},
-       613:  {region: 0x5f, script: 0x52, flags: 0x0},
+       608:  {region: 0x164, script: 0x27, flags: 0x0},
+       610:  {region: 0x105, script: 0x1e, flags: 0x0},
+       611:  {region: 0x111, script: 0x52, flags: 0x0},
+       612:  {region: 0xe6, script: 0x52, flags: 0x0},
+       613:  {region: 0x105, script: 0x52, flags: 0x0},
        614:  {region: 0x164, script: 0x52, flags: 0x0},
-       615:  {region: 0x164, script: 0x52, flags: 0x0},
-       616:  {region: 0x164, script: 0x27, flags: 0x0},
-       617:  {region: 0x164, script: 0x52, flags: 0x0},
+       615:  {region: 0x98, script: 0x20, flags: 0x0},
+       616:  {region: 0x98, script: 0x5, flags: 0x0},
+       617:  {region: 0x12e, script: 0x52, flags: 0x0},
        618:  {region: 0x164, script: 0x52, flags: 0x0},
-       619:  {region: 0x1b, script: 0x3, flags: 0x1},
-       620:  {region: 0x164, script: 0x52, flags: 0x0},
+       619:  {region: 0x51, script: 0x52, flags: 0x0},
+       620:  {region: 0x5f, script: 0x52, flags: 0x0},
        621:  {region: 0x164, script: 0x52, flags: 0x0},
        622:  {region: 0x164, script: 0x52, flags: 0x0},
-       623:  {region: 0x164, script: 0x52, flags: 0x0},
-       624:  {region: 0x105, script: 0x1e, flags: 0x0},
+       623:  {region: 0x164, script: 0x27, flags: 0x0},
+       624:  {region: 0x164, script: 0x52, flags: 0x0},
        625:  {region: 0x164, script: 0x52, flags: 0x0},
-       626:  {region: 0x164, script: 0x52, flags: 0x0},
+       626:  {region: 0x19, script: 0x3, flags: 0x1},
        627:  {region: 0x164, script: 0x52, flags: 0x0},
-       628:  {region: 0x105, script: 0x1e, flags: 0x0},
+       628:  {region: 0x164, script: 0x52, flags: 0x0},
        629:  {region: 0x164, script: 0x52, flags: 0x0},
-       630:  {region: 0x94, script: 0x52, flags: 0x0},
-       631:  {region: 0xe7, script: 0x5, flags: 0x0},
-       632:  {region: 0x7a, script: 0x52, flags: 0x0},
+       630:  {region: 0x164, script: 0x52, flags: 0x0},
+       631:  {region: 0x105, script: 0x1e, flags: 0x0},
+       632:  {region: 0x164, script: 0x52, flags: 0x0},
        633:  {region: 0x164, script: 0x52, flags: 0x0},
        634:  {region: 0x164, script: 0x52, flags: 0x0},
-       635:  {region: 0x164, script: 0x52, flags: 0x0},
-       636:  {region: 0x164, script: 0x27, flags: 0x0},
-       637:  {region: 0x122, script: 0xd5, flags: 0x0},
+       635:  {region: 0x105, script: 0x1e, flags: 0x0},
+       636:  {region: 0x164, script: 0x52, flags: 0x0},
+       637:  {region: 0x94, script: 0x52, flags: 0x0},
        638:  {region: 0xe7, script: 0x5, flags: 0x0},
-       639:  {region: 0x164, script: 0x52, flags: 0x0},
+       639:  {region: 0x7a, script: 0x52, flags: 0x0},
        640:  {region: 0x164, script: 0x52, flags: 0x0},
-       641:  {region: 0x1e, script: 0x5, flags: 0x1},
+       641:  {region: 0x164, script: 0x52, flags: 0x0},
        642:  {region: 0x164, script: 0x52, flags: 0x0},
-       643:  {region: 0x164, script: 0x52, flags: 0x0},
-       644:  {region: 0x164, script: 0x52, flags: 0x0},
-       645:  {region: 0x137, script: 0x52, flags: 0x0},
-       646:  {region: 0x86, script: 0x56, flags: 0x0},
-       647:  {region: 0x96, script: 0x37, flags: 0x0},
-       648:  {region: 0x12e, script: 0x52, flags: 0x0},
-       649:  {region: 0xe7, script: 0x5, flags: 0x0},
-       650:  {region: 0x130, script: 0x52, flags: 0x0},
+       643:  {region: 0x164, script: 0x27, flags: 0x0},
+       644:  {region: 0x122, script: 0xd5, flags: 0x0},
+       645:  {region: 0xe7, script: 0x5, flags: 0x0},
+       646:  {region: 0x164, script: 0x52, flags: 0x0},
+       647:  {region: 0x164, script: 0x52, flags: 0x0},
+       648:  {region: 0x1c, script: 0x5, flags: 0x1},
+       649:  {region: 0x164, script: 0x52, flags: 0x0},
+       650:  {region: 0x164, script: 0x52, flags: 0x0},
        651:  {region: 0x164, script: 0x52, flags: 0x0},
-       652:  {region: 0xb6, script: 0x52, flags: 0x0},
-       653:  {region: 0x105, script: 0x1e, flags: 0x0},
-       654:  {region: 0x164, script: 0x52, flags: 0x0},
-       655:  {region: 0x94, script: 0x52, flags: 0x0},
-       656:  {region: 0x164, script: 0x52, flags: 0x0},
-       657:  {region: 0x52, script: 0xd5, flags: 0x0},
+       652:  {region: 0x137, script: 0x52, flags: 0x0},
+       653:  {region: 0x86, script: 0x56, flags: 0x0},
+       654:  {region: 0x96, script: 0x37, flags: 0x0},
+       655:  {region: 0x12e, script: 0x52, flags: 0x0},
+       656:  {region: 0xe7, script: 0x5, flags: 0x0},
+       657:  {region: 0x130, script: 0x52, flags: 0x0},
        658:  {region: 0x164, script: 0x52, flags: 0x0},
-       659:  {region: 0x164, script: 0x52, flags: 0x0},
-       660:  {region: 0x164, script: 0x52, flags: 0x0},
+       659:  {region: 0xb6, script: 0x52, flags: 0x0},
+       660:  {region: 0x105, script: 0x1e, flags: 0x0},
        661:  {region: 0x164, script: 0x52, flags: 0x0},
-       662:  {region: 0x98, script: 0x54, flags: 0x0},
+       662:  {region: 0x94, script: 0x52, flags: 0x0},
        663:  {region: 0x164, script: 0x52, flags: 0x0},
-       664:  {region: 0x164, script: 0x52, flags: 0x0},
-       665:  {region: 0x105, script: 0x1e, flags: 0x0},
-       666:  {region: 0x130, script: 0x52, flags: 0x0},
+       664:  {region: 0x52, script: 0xd5, flags: 0x0},
+       665:  {region: 0x164, script: 0x52, flags: 0x0},
+       666:  {region: 0x164, script: 0x52, flags: 0x0},
        667:  {region: 0x164, script: 0x52, flags: 0x0},
-       668:  {region: 0xd8, script: 0x52, flags: 0x0},
-       669:  {region: 0x164, script: 0x52, flags: 0x0},
+       668:  {region: 0x164, script: 0x52, flags: 0x0},
+       669:  {region: 0x98, script: 0x54, flags: 0x0},
        670:  {region: 0x164, script: 0x52, flags: 0x0},
-       671:  {region: 0x23, script: 0x2, flags: 0x1},
-       672:  {region: 0x164, script: 0x52, flags: 0x0},
-       673:  {region: 0x164, script: 0x52, flags: 0x0},
-       674:  {region: 0x9d, script: 0x52, flags: 0x0},
-       675:  {region: 0x52, script: 0x58, flags: 0x0},
-       676:  {region: 0x94, script: 0x52, flags: 0x0},
-       677:  {region: 0x9b, script: 0x5, flags: 0x0},
-       678:  {region: 0x134, script: 0x52, flags: 0x0},
+       671:  {region: 0x164, script: 0x52, flags: 0x0},
+       672:  {region: 0x105, script: 0x1e, flags: 0x0},
+       673:  {region: 0x130, script: 0x52, flags: 0x0},
+       674:  {region: 0x164, script: 0x52, flags: 0x0},
+       675:  {region: 0xd8, script: 0x52, flags: 0x0},
+       676:  {region: 0x164, script: 0x52, flags: 0x0},
+       677:  {region: 0x164, script: 0x52, flags: 0x0},
+       678:  {region: 0x21, script: 0x2, flags: 0x1},
        679:  {region: 0x164, script: 0x52, flags: 0x0},
        680:  {region: 0x164, script: 0x52, flags: 0x0},
-       681:  {region: 0x98, script: 0xd0, flags: 0x0},
-       682:  {region: 0x9d, script: 0x52, flags: 0x0},
-       683:  {region: 0x164, script: 0x52, flags: 0x0},
-       684:  {region: 0x4a, script: 0x52, flags: 0x0},
-       685:  {region: 0x164, script: 0x52, flags: 0x0},
+       681:  {region: 0x9d, script: 0x52, flags: 0x0},
+       682:  {region: 0x52, script: 0x58, flags: 0x0},
+       683:  {region: 0x94, script: 0x52, flags: 0x0},
+       684:  {region: 0x9b, script: 0x5, flags: 0x0},
+       685:  {region: 0x134, script: 0x52, flags: 0x0},
        686:  {region: 0x164, script: 0x52, flags: 0x0},
-       687:  {region: 0xae, script: 0x4f, flags: 0x0},
-       688:  {region: 0x164, script: 0x52, flags: 0x0},
-       689:  {region: 0x164, script: 0x52, flags: 0x0},
-       690:  {region: 0x4a, script: 0x52, flags: 0x0},
-       691:  {region: 0x164, script: 0x52, flags: 0x0},
+       687:  {region: 0x164, script: 0x52, flags: 0x0},
+       688:  {region: 0x98, script: 0xd0, flags: 0x0},
+       689:  {region: 0x9d, script: 0x52, flags: 0x0},
+       690:  {region: 0x164, script: 0x52, flags: 0x0},
+       691:  {region: 0x4a, script: 0x52, flags: 0x0},
        692:  {region: 0x164, script: 0x52, flags: 0x0},
-       693:  {region: 0x161, script: 0x52, flags: 0x0},
-       694:  {region: 0x9b, script: 0x5, flags: 0x0},
-       695:  {region: 0xb5, script: 0x52, flags: 0x0},
-       696:  {region: 0xb7, script: 0x52, flags: 0x0},
+       693:  {region: 0x164, script: 0x52, flags: 0x0},
+       694:  {region: 0xae, script: 0x4f, flags: 0x0},
+       695:  {region: 0x164, script: 0x52, flags: 0x0},
+       696:  {region: 0x164, script: 0x52, flags: 0x0},
        697:  {region: 0x4a, script: 0x52, flags: 0x0},
-       698:  {region: 0x4a, script: 0x52, flags: 0x0},
-       699:  {region: 0xa3, script: 0x52, flags: 0x0},
-       700:  {region: 0xa3, script: 0x52, flags: 0x0},
+       698:  {region: 0x164, script: 0x52, flags: 0x0},
+       699:  {region: 0x164, script: 0x52, flags: 0x0},
+       700:  {region: 0x161, script: 0x52, flags: 0x0},
        701:  {region: 0x9b, script: 0x5, flags: 0x0},
-       702:  {region: 0xb7, script: 0x52, flags: 0x0},
-       703:  {region: 0x122, script: 0xd5, flags: 0x0},
-       704:  {region: 0x52, script: 0x34, flags: 0x0},
-       705:  {region: 0x12a, script: 0x52, flags: 0x0},
-       706:  {region: 0x94, script: 0x52, flags: 0x0},
-       707:  {region: 0x51, script: 0x52, flags: 0x0},
-       708:  {region: 0x98, script: 0x20, flags: 0x0},
-       709:  {region: 0x98, script: 0x20, flags: 0x0},
-       710:  {region: 0x94, script: 0x52, flags: 0x0},
-       711:  {region: 0x25, script: 0x3, flags: 0x1},
-       712:  {region: 0xa3, script: 0x52, flags: 0x0},
-       713:  {region: 0x164, script: 0x52, flags: 0x0},
-       714:  {region: 0xce, script: 0x52, flags: 0x0},
-       715:  {region: 0x164, script: 0x52, flags: 0x0},
-       716:  {region: 0x164, script: 0x52, flags: 0x0},
-       717:  {region: 0x164, script: 0x52, flags: 0x0},
-       718:  {region: 0x164, script: 0x52, flags: 0x0},
-       719:  {region: 0x164, script: 0x52, flags: 0x0},
+       702:  {region: 0xb5, script: 0x52, flags: 0x0},
+       703:  {region: 0xb7, script: 0x52, flags: 0x0},
+       704:  {region: 0x4a, script: 0x52, flags: 0x0},
+       705:  {region: 0x4a, script: 0x52, flags: 0x0},
+       706:  {region: 0xa3, script: 0x52, flags: 0x0},
+       707:  {region: 0xa3, script: 0x52, flags: 0x0},
+       708:  {region: 0x9b, script: 0x5, flags: 0x0},
+       709:  {region: 0xb7, script: 0x52, flags: 0x0},
+       710:  {region: 0x122, script: 0xd5, flags: 0x0},
+       711:  {region: 0x52, script: 0x34, flags: 0x0},
+       712:  {region: 0x12a, script: 0x52, flags: 0x0},
+       713:  {region: 0x94, script: 0x52, flags: 0x0},
+       714:  {region: 0x51, script: 0x52, flags: 0x0},
+       715:  {region: 0x98, script: 0x20, flags: 0x0},
+       716:  {region: 0x98, script: 0x20, flags: 0x0},
+       717:  {region: 0x94, script: 0x52, flags: 0x0},
+       718:  {region: 0x23, script: 0x3, flags: 0x1},
+       719:  {region: 0xa3, script: 0x52, flags: 0x0},
        720:  {region: 0x164, script: 0x52, flags: 0x0},
-       721:  {region: 0x164, script: 0x52, flags: 0x0},
+       721:  {region: 0xce, script: 0x52, flags: 0x0},
        722:  {region: 0x164, script: 0x52, flags: 0x0},
        723:  {region: 0x164, script: 0x52, flags: 0x0},
        724:  {region: 0x164, script: 0x52, flags: 0x0},
        725:  {region: 0x164, script: 0x52, flags: 0x0},
-       726:  {region: 0x164, script: 0x5, flags: 0x0},
-       727:  {region: 0x105, script: 0x1e, flags: 0x0},
-       728:  {region: 0xe6, script: 0x52, flags: 0x0},
+       726:  {region: 0x164, script: 0x52, flags: 0x0},
+       727:  {region: 0x164, script: 0x52, flags: 0x0},
+       728:  {region: 0x164, script: 0x52, flags: 0x0},
        729:  {region: 0x164, script: 0x52, flags: 0x0},
-       730:  {region: 0x94, script: 0x52, flags: 0x0},
-       731:  {region: 0x164, script: 0x27, flags: 0x0},
+       730:  {region: 0x164, script: 0x52, flags: 0x0},
+       731:  {region: 0x164, script: 0x52, flags: 0x0},
        732:  {region: 0x164, script: 0x52, flags: 0x0},
-       733:  {region: 0x164, script: 0x52, flags: 0x0},
-       734:  {region: 0x164, script: 0x52, flags: 0x0},
-       735:  {region: 0x111, script: 0x52, flags: 0x0},
-       736:  {region: 0xa3, script: 0x52, flags: 0x0},
-       737:  {region: 0x164, script: 0x52, flags: 0x0},
-       738:  {region: 0x164, script: 0x52, flags: 0x0},
-       739:  {region: 0x122, script: 0x5, flags: 0x0},
-       740:  {region: 0xcb, script: 0x52, flags: 0x0},
+       733:  {region: 0x164, script: 0x5, flags: 0x0},
+       734:  {region: 0x105, script: 0x1e, flags: 0x0},
+       735:  {region: 0xe6, script: 0x52, flags: 0x0},
+       736:  {region: 0x164, script: 0x52, flags: 0x0},
+       737:  {region: 0x94, script: 0x52, flags: 0x0},
+       738:  {region: 0x164, script: 0x27, flags: 0x0},
+       739:  {region: 0x164, script: 0x52, flags: 0x0},
+       740:  {region: 0x164, script: 0x52, flags: 0x0},
        741:  {region: 0x164, script: 0x52, flags: 0x0},
-       742:  {region: 0x164, script: 0x52, flags: 0x0},
-       743:  {region: 0x164, script: 0x52, flags: 0x0},
-       744:  {region: 0xbe, script: 0x52, flags: 0x0},
-       745:  {region: 0xd0, script: 0x52, flags: 0x0},
-       746:  {region: 0x164, script: 0x52, flags: 0x0},
-       747:  {region: 0x51, script: 0x52, flags: 0x0},
-       748:  {region: 0xda, script: 0x20, flags: 0x0},
-       749:  {region: 0x12e, script: 0x52, flags: 0x0},
-       750:  {region: 0xbf, script: 0x52, flags: 0x0},
-       751:  {region: 0x164, script: 0x52, flags: 0x0},
-       752:  {region: 0x164, script: 0x52, flags: 0x0},
-       753:  {region: 0xdf, script: 0x52, flags: 0x0},
-       754:  {region: 0x164, script: 0x52, flags: 0x0},
-       755:  {region: 0x94, script: 0x52, flags: 0x0},
-       756:  {region: 0x9a, script: 0x36, flags: 0x0},
-       757:  {region: 0x164, script: 0x52, flags: 0x0},
-       758:  {region: 0xc1, script: 0x1e, flags: 0x0},
-       759:  {region: 0x164, script: 0x5, flags: 0x0},
-       760:  {region: 0x164, script: 0x52, flags: 0x0},
+       742:  {region: 0x111, script: 0x52, flags: 0x0},
+       743:  {region: 0xa3, script: 0x52, flags: 0x0},
+       744:  {region: 0x164, script: 0x52, flags: 0x0},
+       745:  {region: 0x164, script: 0x52, flags: 0x0},
+       746:  {region: 0x122, script: 0x5, flags: 0x0},
+       747:  {region: 0xcb, script: 0x52, flags: 0x0},
+       748:  {region: 0x164, script: 0x52, flags: 0x0},
+       749:  {region: 0x164, script: 0x52, flags: 0x0},
+       750:  {region: 0x164, script: 0x52, flags: 0x0},
+       751:  {region: 0xbe, script: 0x52, flags: 0x0},
+       752:  {region: 0xd0, script: 0x52, flags: 0x0},
+       753:  {region: 0x164, script: 0x52, flags: 0x0},
+       754:  {region: 0x51, script: 0x52, flags: 0x0},
+       755:  {region: 0xda, script: 0x20, flags: 0x0},
+       756:  {region: 0x12e, script: 0x52, flags: 0x0},
+       757:  {region: 0xbf, script: 0x52, flags: 0x0},
+       758:  {region: 0x164, script: 0x52, flags: 0x0},
+       759:  {region: 0x164, script: 0x52, flags: 0x0},
+       760:  {region: 0xdf, script: 0x52, flags: 0x0},
        761:  {region: 0x164, script: 0x52, flags: 0x0},
-       762:  {region: 0x164, script: 0x52, flags: 0x0},
-       763:  {region: 0x98, script: 0x64, flags: 0x0},
+       762:  {region: 0x94, script: 0x52, flags: 0x0},
+       763:  {region: 0x9a, script: 0x36, flags: 0x0},
        764:  {region: 0x164, script: 0x52, flags: 0x0},
-       765:  {region: 0x164, script: 0x52, flags: 0x0},
-       766:  {region: 0x10a, script: 0x52, flags: 0x0},
+       765:  {region: 0xc1, script: 0x1e, flags: 0x0},
+       766:  {region: 0x164, script: 0x5, flags: 0x0},
        767:  {region: 0x164, script: 0x52, flags: 0x0},
        768:  {region: 0x164, script: 0x52, flags: 0x0},
        769:  {region: 0x164, script: 0x52, flags: 0x0},
-       770:  {region: 0x28, script: 0x3, flags: 0x1},
+       770:  {region: 0x98, script: 0x64, flags: 0x0},
        771:  {region: 0x164, script: 0x52, flags: 0x0},
        772:  {region: 0x164, script: 0x52, flags: 0x0},
-       773:  {region: 0x98, script: 0xe, flags: 0x0},
-       774:  {region: 0xc3, script: 0x6b, flags: 0x0},
+       773:  {region: 0x10a, script: 0x52, flags: 0x0},
+       774:  {region: 0x164, script: 0x52, flags: 0x0},
+       775:  {region: 0x164, script: 0x52, flags: 0x0},
        776:  {region: 0x164, script: 0x52, flags: 0x0},
-       777:  {region: 0x48, script: 0x52, flags: 0x0},
-       778:  {region: 0x48, script: 0x52, flags: 0x0},
-       779:  {region: 0x36, script: 0x52, flags: 0x0},
-       780:  {region: 0x164, script: 0x52, flags: 0x0},
-       781:  {region: 0x164, script: 0x52, flags: 0x0},
-       782:  {region: 0x164, script: 0x52, flags: 0x0},
+       777:  {region: 0x26, script: 0x3, flags: 0x1},
+       778:  {region: 0x164, script: 0x52, flags: 0x0},
+       779:  {region: 0x164, script: 0x52, flags: 0x0},
+       780:  {region: 0x98, script: 0xe, flags: 0x0},
+       781:  {region: 0xc3, script: 0x6b, flags: 0x0},
        783:  {region: 0x164, script: 0x52, flags: 0x0},
-       784:  {region: 0x164, script: 0x52, flags: 0x0},
-       785:  {region: 0x164, script: 0x52, flags: 0x0},
-       786:  {region: 0x98, script: 0x20, flags: 0x0},
-       787:  {region: 0xda, script: 0x20, flags: 0x0},
-       788:  {region: 0x105, script: 0x1e, flags: 0x0},
-       789:  {region: 0x34, script: 0x68, flags: 0x0},
-       790:  {region: 0x2b, script: 0x3, flags: 0x1},
-       791:  {region: 0xca, script: 0x52, flags: 0x0},
+       784:  {region: 0x48, script: 0x52, flags: 0x0},
+       785:  {region: 0x48, script: 0x52, flags: 0x0},
+       786:  {region: 0x36, script: 0x52, flags: 0x0},
+       787:  {region: 0x164, script: 0x52, flags: 0x0},
+       788:  {region: 0x164, script: 0x52, flags: 0x0},
+       789:  {region: 0x164, script: 0x52, flags: 0x0},
+       790:  {region: 0x164, script: 0x52, flags: 0x0},
+       791:  {region: 0x164, script: 0x52, flags: 0x0},
        792:  {region: 0x164, script: 0x52, flags: 0x0},
-       793:  {region: 0x164, script: 0x52, flags: 0x0},
-       794:  {region: 0x164, script: 0x52, flags: 0x0},
-       795:  {region: 0x98, script: 0x20, flags: 0x0},
-       796:  {region: 0x51, script: 0x52, flags: 0x0},
-       798:  {region: 0x164, script: 0x52, flags: 0x0},
-       799:  {region: 0x134, script: 0x52, flags: 0x0},
+       793:  {region: 0x98, script: 0x20, flags: 0x0},
+       794:  {region: 0xda, script: 0x20, flags: 0x0},
+       795:  {region: 0x105, script: 0x1e, flags: 0x0},
+       796:  {region: 0x34, script: 0x68, flags: 0x0},
+       797:  {region: 0x29, script: 0x3, flags: 0x1},
+       798:  {region: 0xca, script: 0x52, flags: 0x0},
+       799:  {region: 0x164, script: 0x52, flags: 0x0},
        800:  {region: 0x164, script: 0x52, flags: 0x0},
        801:  {region: 0x164, script: 0x52, flags: 0x0},
-       802:  {region: 0xe7, script: 0x5, flags: 0x0},
-       803:  {region: 0xc2, script: 0x52, flags: 0x0},
-       804:  {region: 0x98, script: 0x20, flags: 0x0},
-       805:  {region: 0x94, script: 0x52, flags: 0x0},
-       806:  {region: 0x163, script: 0x52, flags: 0x0},
+       802:  {region: 0x98, script: 0x20, flags: 0x0},
+       803:  {region: 0x51, script: 0x52, flags: 0x0},
+       805:  {region: 0x164, script: 0x52, flags: 0x0},
+       806:  {region: 0x134, script: 0x52, flags: 0x0},
        807:  {region: 0x164, script: 0x52, flags: 0x0},
-       808:  {region: 0xc3, script: 0x6b, flags: 0x0},
-       809:  {region: 0x164, script: 0x52, flags: 0x0},
-       810:  {region: 0x164, script: 0x27, flags: 0x0},
-       811:  {region: 0x105, script: 0x1e, flags: 0x0},
-       812:  {region: 0x164, script: 0x52, flags: 0x0},
-       813:  {region: 0x130, script: 0x52, flags: 0x0},
-       814:  {region: 0x9b, script: 0x5d, flags: 0x0},
-       815:  {region: 0x164, script: 0x52, flags: 0x0},
+       808:  {region: 0x164, script: 0x52, flags: 0x0},
+       809:  {region: 0xe7, script: 0x5, flags: 0x0},
+       810:  {region: 0xc2, script: 0x52, flags: 0x0},
+       811:  {region: 0x98, script: 0x20, flags: 0x0},
+       812:  {region: 0x94, script: 0x52, flags: 0x0},
+       813:  {region: 0x163, script: 0x52, flags: 0x0},
+       814:  {region: 0x164, script: 0x52, flags: 0x0},
+       815:  {region: 0xc3, script: 0x6b, flags: 0x0},
        816:  {region: 0x164, script: 0x52, flags: 0x0},
-       817:  {region: 0x9b, script: 0x5, flags: 0x0},
-       818:  {region: 0x164, script: 0x52, flags: 0x0},
+       817:  {region: 0x164, script: 0x27, flags: 0x0},
+       818:  {region: 0x105, script: 0x1e, flags: 0x0},
        819:  {region: 0x164, script: 0x52, flags: 0x0},
-       820:  {region: 0x164, script: 0x52, flags: 0x0},
-       821:  {region: 0xdc, script: 0x52, flags: 0x0},
+       820:  {region: 0x130, script: 0x52, flags: 0x0},
+       821:  {region: 0x9b, script: 0x5d, flags: 0x0},
        822:  {region: 0x164, script: 0x52, flags: 0x0},
        823:  {region: 0x164, script: 0x52, flags: 0x0},
+       824:  {region: 0x9b, script: 0x5, flags: 0x0},
        825:  {region: 0x164, script: 0x52, flags: 0x0},
-       826:  {region: 0x52, script: 0x34, flags: 0x0},
-       827:  {region: 0x9d, script: 0x52, flags: 0x0},
-       828:  {region: 0xd1, script: 0x52, flags: 0x0},
+       826:  {region: 0x164, script: 0x52, flags: 0x0},
+       827:  {region: 0x164, script: 0x52, flags: 0x0},
+       828:  {region: 0xdc, script: 0x52, flags: 0x0},
        829:  {region: 0x164, script: 0x52, flags: 0x0},
-       830:  {region: 0xd9, script: 0x52, flags: 0x0},
-       831:  {region: 0x164, script: 0x52, flags: 0x0},
+       830:  {region: 0x164, script: 0x52, flags: 0x0},
        832:  {region: 0x164, script: 0x52, flags: 0x0},
-       833:  {region: 0x164, script: 0x52, flags: 0x0},
-       834:  {region: 0xce, script: 0x52, flags: 0x0},
-       835:  {region: 0x164, script: 0x52, flags: 0x0},
+       833:  {region: 0x52, script: 0x34, flags: 0x0},
+       834:  {region: 0x9d, script: 0x52, flags: 0x0},
+       835:  {region: 0xd1, script: 0x52, flags: 0x0},
        836:  {region: 0x164, script: 0x52, flags: 0x0},
-       837:  {region: 0x163, script: 0x52, flags: 0x0},
-       838:  {region: 0xd0, script: 0x52, flags: 0x0},
-       839:  {region: 0x5f, script: 0x52, flags: 0x0},
-       840:  {region: 0xda, script: 0x20, flags: 0x0},
-       841:  {region: 0x164, script: 0x52, flags: 0x0},
-       842:  {region: 0xda, script: 0x20, flags: 0x0},
+       837:  {region: 0xd9, script: 0x52, flags: 0x0},
+       838:  {region: 0x164, script: 0x52, flags: 0x0},
+       839:  {region: 0x164, script: 0x52, flags: 0x0},
+       840:  {region: 0x164, script: 0x52, flags: 0x0},
+       841:  {region: 0xce, script: 0x52, flags: 0x0},
+       842:  {region: 0x164, script: 0x52, flags: 0x0},
        843:  {region: 0x164, script: 0x52, flags: 0x0},
-       844:  {region: 0x164, script: 0x52, flags: 0x0},
-       845:  {region: 0xd1, script: 0x52, flags: 0x0},
-       846:  {region: 0x164, script: 0x52, flags: 0x0},
-       847:  {region: 0x164, script: 0x52, flags: 0x0},
-       848:  {region: 0xd0, script: 0x52, flags: 0x0},
-       849:  {region: 0x164, script: 0x52, flags: 0x0},
-       850:  {region: 0xce, script: 0x52, flags: 0x0},
-       851:  {region: 0xce, script: 0x52, flags: 0x0},
-       852:  {region: 0x164, script: 0x52, flags: 0x0},
+       844:  {region: 0x163, script: 0x52, flags: 0x0},
+       845:  {region: 0xd0, script: 0x52, flags: 0x0},
+       846:  {region: 0x5f, script: 0x52, flags: 0x0},
+       847:  {region: 0xda, script: 0x20, flags: 0x0},
+       848:  {region: 0x164, script: 0x52, flags: 0x0},
+       849:  {region: 0xda, script: 0x20, flags: 0x0},
+       850:  {region: 0x164, script: 0x52, flags: 0x0},
+       851:  {region: 0x164, script: 0x52, flags: 0x0},
+       852:  {region: 0xd1, script: 0x52, flags: 0x0},
        853:  {region: 0x164, script: 0x52, flags: 0x0},
-       854:  {region: 0x94, script: 0x52, flags: 0x0},
-       855:  {region: 0x164, script: 0x52, flags: 0x0},
-       856:  {region: 0xde, script: 0x52, flags: 0x0},
-       857:  {region: 0x164, script: 0x52, flags: 0x0},
-       858:  {region: 0x164, script: 0x52, flags: 0x0},
-       859:  {region: 0x98, script: 0x52, flags: 0x0},
+       854:  {region: 0x164, script: 0x52, flags: 0x0},
+       855:  {region: 0xd0, script: 0x52, flags: 0x0},
+       856:  {region: 0x164, script: 0x52, flags: 0x0},
+       857:  {region: 0xce, script: 0x52, flags: 0x0},
+       858:  {region: 0xce, script: 0x52, flags: 0x0},
+       859:  {region: 0x164, script: 0x52, flags: 0x0},
        860:  {region: 0x164, script: 0x52, flags: 0x0},
-       861:  {region: 0x164, script: 0x52, flags: 0x0},
-       862:  {region: 0xd8, script: 0x52, flags: 0x0},
-       863:  {region: 0x51, script: 0x52, flags: 0x0},
+       861:  {region: 0x94, script: 0x52, flags: 0x0},
+       862:  {region: 0x164, script: 0x52, flags: 0x0},
+       863:  {region: 0xde, script: 0x52, flags: 0x0},
        864:  {region: 0x164, script: 0x52, flags: 0x0},
-       865:  {region: 0xd9, script: 0x52, flags: 0x0},
-       866:  {region: 0x164, script: 0x52, flags: 0x0},
-       867:  {region: 0x51, script: 0x52, flags: 0x0},
+       865:  {region: 0x164, script: 0x52, flags: 0x0},
+       866:  {region: 0x98, script: 0x52, flags: 0x0},
+       867:  {region: 0x164, script: 0x52, flags: 0x0},
        868:  {region: 0x164, script: 0x52, flags: 0x0},
-       869:  {region: 0x164, script: 0x52, flags: 0x0},
-       870:  {region: 0xd9, script: 0x52, flags: 0x0},
-       871:  {region: 0x122, script: 0x4e, flags: 0x0},
-       872:  {region: 0x98, script: 0x20, flags: 0x0},
-       873:  {region: 0x10b, script: 0xb7, flags: 0x0},
-       874:  {region: 0x164, script: 0x52, flags: 0x0},
+       869:  {region: 0xd8, script: 0x52, flags: 0x0},
+       870:  {region: 0x51, script: 0x52, flags: 0x0},
+       871:  {region: 0x164, script: 0x52, flags: 0x0},
+       872:  {region: 0xd9, script: 0x52, flags: 0x0},
+       873:  {region: 0x164, script: 0x52, flags: 0x0},
+       874:  {region: 0x51, script: 0x52, flags: 0x0},
        875:  {region: 0x164, script: 0x52, flags: 0x0},
-       876:  {region: 0x83, script: 0x70, flags: 0x0},
-       877:  {region: 0x160, script: 0x52, flags: 0x0},
-       878:  {region: 0x164, script: 0x52, flags: 0x0},
-       879:  {region: 0x48, script: 0x17, flags: 0x0},
-       880:  {region: 0x164, script: 0x52, flags: 0x0},
-       881:  {region: 0x160, script: 0x52, flags: 0x0},
+       876:  {region: 0x164, script: 0x52, flags: 0x0},
+       877:  {region: 0xd9, script: 0x52, flags: 0x0},
+       878:  {region: 0x122, script: 0x4e, flags: 0x0},
+       879:  {region: 0x98, script: 0x20, flags: 0x0},
+       880:  {region: 0x10b, script: 0xb7, flags: 0x0},
+       881:  {region: 0x164, script: 0x52, flags: 0x0},
        882:  {region: 0x164, script: 0x52, flags: 0x0},
-       883:  {region: 0x164, script: 0x52, flags: 0x0},
-       884:  {region: 0x164, script: 0x52, flags: 0x0},
+       883:  {region: 0x83, script: 0x70, flags: 0x0},
+       884:  {region: 0x160, script: 0x52, flags: 0x0},
        885:  {region: 0x164, script: 0x52, flags: 0x0},
-       886:  {region: 0x164, script: 0x52, flags: 0x0},
-       887:  {region: 0x116, script: 0x52, flags: 0x0},
-       888:  {region: 0x164, script: 0x52, flags: 0x0},
+       886:  {region: 0x48, script: 0x17, flags: 0x0},
+       887:  {region: 0x164, script: 0x52, flags: 0x0},
+       888:  {region: 0x160, script: 0x52, flags: 0x0},
        889:  {region: 0x164, script: 0x52, flags: 0x0},
-       890:  {region: 0x134, script: 0x52, flags: 0x0},
+       890:  {region: 0x164, script: 0x52, flags: 0x0},
        891:  {region: 0x164, script: 0x52, flags: 0x0},
-       892:  {region: 0x52, script: 0x52, flags: 0x0},
+       892:  {region: 0x164, script: 0x52, flags: 0x0},
        893:  {region: 0x164, script: 0x52, flags: 0x0},
-       894:  {region: 0xcd, script: 0x52, flags: 0x0},
-       895:  {region: 0x12e, script: 0x52, flags: 0x0},
-       896:  {region: 0x130, script: 0x52, flags: 0x0},
-       897:  {region: 0x7f, script: 0x52, flags: 0x0},
-       898:  {region: 0x77, script: 0x52, flags: 0x0},
-       899:  {region: 0x164, script: 0x52, flags: 0x0},
-       901:  {region: 0x164, script: 0x52, flags: 0x0},
-       902:  {region: 0x164, script: 0x52, flags: 0x0},
-       903:  {region: 0x6e, script: 0x52, flags: 0x0},
-       904:  {region: 0x164, script: 0x52, flags: 0x0},
-       905:  {region: 0x164, script: 0x52, flags: 0x0},
+       894:  {region: 0x116, script: 0x52, flags: 0x0},
+       895:  {region: 0x164, script: 0x52, flags: 0x0},
+       896:  {region: 0x164, script: 0x52, flags: 0x0},
+       897:  {region: 0x134, script: 0x52, flags: 0x0},
+       898:  {region: 0x164, script: 0x52, flags: 0x0},
+       899:  {region: 0x52, script: 0x52, flags: 0x0},
+       900:  {region: 0x164, script: 0x52, flags: 0x0},
+       901:  {region: 0xcd, script: 0x52, flags: 0x0},
+       902:  {region: 0x12e, script: 0x52, flags: 0x0},
+       903:  {region: 0x130, script: 0x52, flags: 0x0},
+       904:  {region: 0x7f, script: 0x52, flags: 0x0},
+       905:  {region: 0x77, script: 0x52, flags: 0x0},
        906:  {region: 0x164, script: 0x52, flags: 0x0},
-       907:  {region: 0x164, script: 0x52, flags: 0x0},
-       908:  {region: 0x98, script: 0x75, flags: 0x0},
+       908:  {region: 0x164, script: 0x52, flags: 0x0},
        909:  {region: 0x164, script: 0x52, flags: 0x0},
-       910:  {region: 0x164, script: 0x5, flags: 0x0},
-       911:  {region: 0x7c, script: 0x1e, flags: 0x0},
-       912:  {region: 0x134, script: 0x76, flags: 0x0},
-       913:  {region: 0x164, script: 0x5, flags: 0x0},
-       914:  {region: 0xc4, script: 0x74, flags: 0x0},
-       915:  {region: 0x164, script: 0x52, flags: 0x0},
-       916:  {region: 0x2e, script: 0x3, flags: 0x1},
-       917:  {region: 0xe6, script: 0x52, flags: 0x0},
-       918:  {region: 0x31, script: 0x2, flags: 0x1},
-       919:  {region: 0xe6, script: 0x52, flags: 0x0},
-       920:  {region: 0x2f, script: 0x52, flags: 0x0},
-       921:  {region: 0xef, script: 0x52, flags: 0x0},
+       910:  {region: 0x6e, script: 0x52, flags: 0x0},
+       911:  {region: 0x164, script: 0x52, flags: 0x0},
+       912:  {region: 0x164, script: 0x52, flags: 0x0},
+       913:  {region: 0x164, script: 0x52, flags: 0x0},
+       914:  {region: 0x164, script: 0x52, flags: 0x0},
+       915:  {region: 0x98, script: 0x75, flags: 0x0},
+       916:  {region: 0x164, script: 0x52, flags: 0x0},
+       917:  {region: 0x164, script: 0x5, flags: 0x0},
+       918:  {region: 0x7c, script: 0x1e, flags: 0x0},
+       919:  {region: 0x134, script: 0x76, flags: 0x0},
+       920:  {region: 0x164, script: 0x5, flags: 0x0},
+       921:  {region: 0xc4, script: 0x74, flags: 0x0},
        922:  {region: 0x164, script: 0x52, flags: 0x0},
-       923:  {region: 0x77, script: 0x52, flags: 0x0},
-       924:  {region: 0xd5, script: 0x52, flags: 0x0},
-       925:  {region: 0x134, script: 0x52, flags: 0x0},
-       926:  {region: 0x48, script: 0x52, flags: 0x0},
-       927:  {region: 0x164, script: 0x52, flags: 0x0},
-       928:  {region: 0x9b, script: 0xdd, flags: 0x0},
+       923:  {region: 0x2c, script: 0x3, flags: 0x1},
+       924:  {region: 0xe6, script: 0x52, flags: 0x0},
+       925:  {region: 0x2f, script: 0x2, flags: 0x1},
+       926:  {region: 0xe6, script: 0x52, flags: 0x0},
+       927:  {region: 0x2f, script: 0x52, flags: 0x0},
+       928:  {region: 0xef, script: 0x52, flags: 0x0},
        929:  {region: 0x164, script: 0x52, flags: 0x0},
-       930:  {region: 0x5f, script: 0x52, flags: 0x0},
-       931:  {region: 0x164, script: 0x5, flags: 0x0},
-       932:  {region: 0xaf, script: 0x7f, flags: 0x0},
+       930:  {region: 0x77, script: 0x52, flags: 0x0},
+       931:  {region: 0xd5, script: 0x52, flags: 0x0},
+       932:  {region: 0x134, script: 0x52, flags: 0x0},
+       933:  {region: 0x48, script: 0x52, flags: 0x0},
        934:  {region: 0x164, script: 0x52, flags: 0x0},
-       935:  {region: 0x164, script: 0x52, flags: 0x0},
-       936:  {region: 0x98, script: 0x12, flags: 0x0},
-       937:  {region: 0xa3, script: 0x52, flags: 0x0},
-       938:  {region: 0xe8, script: 0x52, flags: 0x0},
-       939:  {region: 0x164, script: 0x52, flags: 0x0},
-       940:  {region: 0x9d, script: 0x52, flags: 0x0},
+       935:  {region: 0x9b, script: 0xdd, flags: 0x0},
+       936:  {region: 0x164, script: 0x52, flags: 0x0},
+       937:  {region: 0x5f, script: 0x52, flags: 0x0},
+       938:  {region: 0x164, script: 0x5, flags: 0x0},
+       939:  {region: 0xaf, script: 0x7f, flags: 0x0},
        941:  {region: 0x164, script: 0x52, flags: 0x0},
        942:  {region: 0x164, script: 0x52, flags: 0x0},
-       943:  {region: 0x86, script: 0x2d, flags: 0x0},
-       944:  {region: 0x74, script: 0x52, flags: 0x0},
-       945:  {region: 0x164, script: 0x52, flags: 0x0},
-       946:  {region: 0xe7, script: 0x45, flags: 0x0},
-       947:  {region: 0x9b, script: 0x5, flags: 0x0},
-       948:  {region: 0x1, script: 0x52, flags: 0x0},
-       949:  {region: 0x23, script: 0x5, flags: 0x0},
-       950:  {region: 0x164, script: 0x52, flags: 0x0},
-       951:  {region: 0x40, script: 0x52, flags: 0x0},
+       943:  {region: 0x98, script: 0x12, flags: 0x0},
+       944:  {region: 0xa3, script: 0x52, flags: 0x0},
+       945:  {region: 0xe8, script: 0x52, flags: 0x0},
+       946:  {region: 0x164, script: 0x52, flags: 0x0},
+       947:  {region: 0x9d, script: 0x52, flags: 0x0},
+       948:  {region: 0x164, script: 0x52, flags: 0x0},
+       949:  {region: 0x164, script: 0x52, flags: 0x0},
+       950:  {region: 0x86, script: 0x2d, flags: 0x0},
+       951:  {region: 0x74, script: 0x52, flags: 0x0},
        952:  {region: 0x164, script: 0x52, flags: 0x0},
-       953:  {region: 0x79, script: 0x52, flags: 0x0},
-       954:  {region: 0x164, script: 0x52, flags: 0x0},
-       955:  {region: 0xe3, script: 0x52, flags: 0x0},
-       956:  {region: 0x88, script: 0x52, flags: 0x0},
-       957:  {region: 0x68, script: 0x52, flags: 0x0},
-       958:  {region: 0x164, script: 0x52, flags: 0x0},
-       959:  {region: 0x98, script: 0x20, flags: 0x0},
-       960:  {region: 0x164, script: 0x52, flags: 0x0},
-       961:  {region: 0x101, script: 0x52, flags: 0x0},
-       962:  {region: 0x94, script: 0x52, flags: 0x0},
-       963:  {region: 0x164, script: 0x52, flags: 0x0},
-       964:  {region: 0x164, script: 0x52, flags: 0x0},
-       965:  {region: 0x9d, script: 0x52, flags: 0x0},
-       966:  {region: 0x164, script: 0x5, flags: 0x0},
-       967:  {region: 0x98, script: 0x52, flags: 0x0},
-       968:  {region: 0x33, script: 0x2, flags: 0x1},
-       969:  {region: 0xda, script: 0x20, flags: 0x0},
-       970:  {region: 0x34, script: 0xe, flags: 0x0},
-       971:  {region: 0x4d, script: 0x52, flags: 0x0},
-       972:  {region: 0x71, script: 0x52, flags: 0x0},
-       973:  {region: 0x4d, script: 0x52, flags: 0x0},
-       974:  {region: 0x9b, script: 0x5, flags: 0x0},
-       975:  {region: 0x10b, script: 0x52, flags: 0x0},
-       976:  {region: 0x39, script: 0x52, flags: 0x0},
-       977:  {region: 0x164, script: 0x52, flags: 0x0},
-       978:  {region: 0xd0, script: 0x52, flags: 0x0},
-       979:  {region: 0x103, script: 0x52, flags: 0x0},
-       980:  {region: 0x94, script: 0x52, flags: 0x0},
-       981:  {region: 0x12e, script: 0x52, flags: 0x0},
-       982:  {region: 0x164, script: 0x52, flags: 0x0},
-       983:  {region: 0x164, script: 0x52, flags: 0x0},
-       984:  {region: 0x72, script: 0x52, flags: 0x0},
-       985:  {region: 0x105, script: 0x1e, flags: 0x0},
-       986:  {region: 0x12f, script: 0x1e, flags: 0x0},
-       987:  {region: 0x108, script: 0x52, flags: 0x0},
-       988:  {region: 0x106, script: 0x52, flags: 0x0},
-       989:  {region: 0x12e, script: 0x52, flags: 0x0},
+       953:  {region: 0xe7, script: 0x45, flags: 0x0},
+       954:  {region: 0x9b, script: 0x5, flags: 0x0},
+       955:  {region: 0x1, script: 0x52, flags: 0x0},
+       956:  {region: 0x23, script: 0x5, flags: 0x0},
+       957:  {region: 0x164, script: 0x52, flags: 0x0},
+       958:  {region: 0x40, script: 0x52, flags: 0x0},
+       959:  {region: 0x164, script: 0x52, flags: 0x0},
+       960:  {region: 0x79, script: 0x52, flags: 0x0},
+       961:  {region: 0x164, script: 0x52, flags: 0x0},
+       962:  {region: 0xe3, script: 0x52, flags: 0x0},
+       963:  {region: 0x88, script: 0x52, flags: 0x0},
+       964:  {region: 0x68, script: 0x52, flags: 0x0},
+       965:  {region: 0x164, script: 0x52, flags: 0x0},
+       966:  {region: 0x98, script: 0x20, flags: 0x0},
+       967:  {region: 0x164, script: 0x52, flags: 0x0},
+       968:  {region: 0x101, script: 0x52, flags: 0x0},
+       969:  {region: 0x94, script: 0x52, flags: 0x0},
+       970:  {region: 0x164, script: 0x52, flags: 0x0},
+       971:  {region: 0x164, script: 0x52, flags: 0x0},
+       972:  {region: 0x9d, script: 0x52, flags: 0x0},
+       973:  {region: 0x164, script: 0x5, flags: 0x0},
+       974:  {region: 0x98, script: 0x52, flags: 0x0},
+       975:  {region: 0x31, script: 0x2, flags: 0x1},
+       976:  {region: 0xda, script: 0x20, flags: 0x0},
+       977:  {region: 0x34, script: 0xe, flags: 0x0},
+       978:  {region: 0x4d, script: 0x52, flags: 0x0},
+       979:  {region: 0x71, script: 0x52, flags: 0x0},
+       980:  {region: 0x4d, script: 0x52, flags: 0x0},
+       981:  {region: 0x9b, script: 0x5, flags: 0x0},
+       982:  {region: 0x10b, script: 0x52, flags: 0x0},
+       983:  {region: 0x39, script: 0x52, flags: 0x0},
+       984:  {region: 0x164, script: 0x52, flags: 0x0},
+       985:  {region: 0xd0, script: 0x52, flags: 0x0},
+       986:  {region: 0x103, script: 0x52, flags: 0x0},
+       987:  {region: 0x94, script: 0x52, flags: 0x0},
+       988:  {region: 0x12e, script: 0x52, flags: 0x0},
+       989:  {region: 0x164, script: 0x52, flags: 0x0},
        990:  {region: 0x164, script: 0x52, flags: 0x0},
-       991:  {region: 0xa1, script: 0x44, flags: 0x0},
-       992:  {region: 0x98, script: 0x20, flags: 0x0},
-       993:  {region: 0x7f, script: 0x52, flags: 0x0},
-       994:  {region: 0x105, script: 0x1e, flags: 0x0},
-       995:  {region: 0xa3, script: 0x52, flags: 0x0},
-       996:  {region: 0x94, script: 0x52, flags: 0x0},
-       997:  {region: 0x98, script: 0x52, flags: 0x0},
-       998:  {region: 0x98, script: 0xbb, flags: 0x0},
-       999:  {region: 0x164, script: 0x52, flags: 0x0},
-       1000: {region: 0x164, script: 0x52, flags: 0x0},
-       1001: {region: 0x12e, script: 0x52, flags: 0x0},
-       1002: {region: 0x9d, script: 0x52, flags: 0x0},
-       1003: {region: 0x98, script: 0x20, flags: 0x0},
-       1004: {region: 0x164, script: 0x5, flags: 0x0},
-       1005: {region: 0x9d, script: 0x52, flags: 0x0},
-       1006: {region: 0x7a, script: 0x52, flags: 0x0},
-       1007: {region: 0x48, script: 0x52, flags: 0x0},
-       1008: {region: 0x35, script: 0x4, flags: 0x1},
-       1009: {region: 0x9d, script: 0x52, flags: 0x0},
-       1010: {region: 0x9b, script: 0x5, flags: 0x0},
-       1011: {region: 0xd9, script: 0x52, flags: 0x0},
-       1012: {region: 0x4e, script: 0x52, flags: 0x0},
-       1013: {region: 0xd0, script: 0x52, flags: 0x0},
-       1014: {region: 0xce, script: 0x52, flags: 0x0},
-       1015: {region: 0xc2, script: 0x52, flags: 0x0},
-       1016: {region: 0x4b, script: 0x52, flags: 0x0},
-       1017: {region: 0x95, script: 0x72, flags: 0x0},
-       1018: {region: 0xb5, script: 0x52, flags: 0x0},
-       1019: {region: 0x164, script: 0x27, flags: 0x0},
-       1020: {region: 0x164, script: 0x52, flags: 0x0},
-       1022: {region: 0xb9, script: 0xd2, flags: 0x0},
-       1023: {region: 0x164, script: 0x52, flags: 0x0},
-       1024: {region: 0xc3, script: 0x6b, flags: 0x0},
-       1025: {region: 0x164, script: 0x5, flags: 0x0},
-       1026: {region: 0xb2, script: 0xc1, flags: 0x0},
-       1027: {region: 0x6e, script: 0x52, flags: 0x0},
+       991:  {region: 0x72, script: 0x52, flags: 0x0},
+       992:  {region: 0x105, script: 0x1e, flags: 0x0},
+       993:  {region: 0x12f, script: 0x1e, flags: 0x0},
+       994:  {region: 0x108, script: 0x52, flags: 0x0},
+       995:  {region: 0x106, script: 0x52, flags: 0x0},
+       996:  {region: 0x12e, script: 0x52, flags: 0x0},
+       997:  {region: 0x164, script: 0x52, flags: 0x0},
+       998:  {region: 0xa1, script: 0x44, flags: 0x0},
+       999:  {region: 0x98, script: 0x20, flags: 0x0},
+       1000: {region: 0x7f, script: 0x52, flags: 0x0},
+       1001: {region: 0x105, script: 0x1e, flags: 0x0},
+       1002: {region: 0xa3, script: 0x52, flags: 0x0},
+       1003: {region: 0x94, script: 0x52, flags: 0x0},
+       1004: {region: 0x98, script: 0x52, flags: 0x0},
+       1005: {region: 0x113, script: 0x52, flags: 0x0},
+       1006: {region: 0x98, script: 0xbb, flags: 0x0},
+       1007: {region: 0x164, script: 0x52, flags: 0x0},
+       1008: {region: 0x164, script: 0x52, flags: 0x0},
+       1009: {region: 0x12e, script: 0x52, flags: 0x0},
+       1010: {region: 0x9d, script: 0x52, flags: 0x0},
+       1011: {region: 0x98, script: 0x20, flags: 0x0},
+       1012: {region: 0x164, script: 0x5, flags: 0x0},
+       1013: {region: 0x9d, script: 0x52, flags: 0x0},
+       1014: {region: 0x7a, script: 0x52, flags: 0x0},
+       1015: {region: 0x48, script: 0x52, flags: 0x0},
+       1016: {region: 0x33, script: 0x4, flags: 0x1},
+       1017: {region: 0x9d, script: 0x52, flags: 0x0},
+       1018: {region: 0x9b, script: 0x5, flags: 0x0},
+       1019: {region: 0xd9, script: 0x52, flags: 0x0},
+       1020: {region: 0x4e, script: 0x52, flags: 0x0},
+       1021: {region: 0xd0, script: 0x52, flags: 0x0},
+       1022: {region: 0xce, script: 0x52, flags: 0x0},
+       1023: {region: 0xc2, script: 0x52, flags: 0x0},
+       1024: {region: 0x4b, script: 0x52, flags: 0x0},
+       1025: {region: 0x95, script: 0x72, flags: 0x0},
+       1026: {region: 0xb5, script: 0x52, flags: 0x0},
+       1027: {region: 0x164, script: 0x27, flags: 0x0},
        1028: {region: 0x164, script: 0x52, flags: 0x0},
-       1029: {region: 0x164, script: 0x52, flags: 0x0},
-       1030: {region: 0x164, script: 0x52, flags: 0x0},
+       1030: {region: 0xb9, script: 0xd2, flags: 0x0},
        1031: {region: 0x164, script: 0x52, flags: 0x0},
-       1032: {region: 0x110, script: 0x52, flags: 0x0},
-       1033: {region: 0x164, script: 0x52, flags: 0x0},
-       1034: {region: 0xe7, script: 0x5, flags: 0x0},
-       1035: {region: 0x164, script: 0x52, flags: 0x0},
-       1036: {region: 0x10e, script: 0x52, flags: 0x0},
+       1032: {region: 0xc3, script: 0x6b, flags: 0x0},
+       1033: {region: 0x164, script: 0x5, flags: 0x0},
+       1034: {region: 0xb2, script: 0xc1, flags: 0x0},
+       1035: {region: 0x6e, script: 0x52, flags: 0x0},
+       1036: {region: 0x164, script: 0x52, flags: 0x0},
        1037: {region: 0x164, script: 0x52, flags: 0x0},
-       1038: {region: 0xe8, script: 0x52, flags: 0x0},
+       1038: {region: 0x164, script: 0x52, flags: 0x0},
        1039: {region: 0x164, script: 0x52, flags: 0x0},
-       1040: {region: 0x94, script: 0x52, flags: 0x0},
-       1041: {region: 0x141, script: 0x52, flags: 0x0},
-       1042: {region: 0x10b, script: 0x52, flags: 0x0},
-       1044: {region: 0x10b, script: 0x52, flags: 0x0},
-       1045: {region: 0x71, script: 0x52, flags: 0x0},
-       1046: {region: 0x96, script: 0xb8, flags: 0x0},
+       1040: {region: 0x110, script: 0x52, flags: 0x0},
+       1041: {region: 0x164, script: 0x52, flags: 0x0},
+       1042: {region: 0xe7, script: 0x5, flags: 0x0},
+       1043: {region: 0x164, script: 0x52, flags: 0x0},
+       1044: {region: 0x10e, script: 0x52, flags: 0x0},
+       1045: {region: 0x164, script: 0x52, flags: 0x0},
+       1046: {region: 0xe8, script: 0x52, flags: 0x0},
        1047: {region: 0x164, script: 0x52, flags: 0x0},
-       1048: {region: 0x71, script: 0x52, flags: 0x0},
-       1049: {region: 0x163, script: 0x52, flags: 0x0},
-       1050: {region: 0x164, script: 0x52, flags: 0x0},
-       1051: {region: 0xc2, script: 0x52, flags: 0x0},
-       1052: {region: 0x164, script: 0x52, flags: 0x0},
-       1053: {region: 0x164, script: 0x52, flags: 0x0},
-       1054: {region: 0x164, script: 0x52, flags: 0x0},
-       1055: {region: 0x114, script: 0x52, flags: 0x0},
-       1056: {region: 0x164, script: 0x52, flags: 0x0},
-       1057: {region: 0x164, script: 0x52, flags: 0x0},
-       1058: {region: 0x122, script: 0xd5, flags: 0x0},
-       1059: {region: 0x164, script: 0x52, flags: 0x0},
+       1048: {region: 0x94, script: 0x52, flags: 0x0},
+       1049: {region: 0x141, script: 0x52, flags: 0x0},
+       1050: {region: 0x10b, script: 0x52, flags: 0x0},
+       1052: {region: 0x10b, script: 0x52, flags: 0x0},
+       1053: {region: 0x71, script: 0x52, flags: 0x0},
+       1054: {region: 0x96, script: 0xb8, flags: 0x0},
+       1055: {region: 0x164, script: 0x52, flags: 0x0},
+       1056: {region: 0x71, script: 0x52, flags: 0x0},
+       1057: {region: 0x163, script: 0x52, flags: 0x0},
+       1058: {region: 0x164, script: 0x52, flags: 0x0},
+       1059: {region: 0xc2, script: 0x52, flags: 0x0},
        1060: {region: 0x164, script: 0x52, flags: 0x0},
        1061: {region: 0x164, script: 0x52, flags: 0x0},
        1062: {region: 0x164, script: 0x52, flags: 0x0},
-       1063: {region: 0x26, script: 0x52, flags: 0x0},
-       1064: {region: 0x39, script: 0x5, flags: 0x1},
-       1065: {region: 0x98, script: 0xc2, flags: 0x0},
-       1066: {region: 0x115, script: 0x52, flags: 0x0},
-       1067: {region: 0x113, script: 0x52, flags: 0x0},
-       1068: {region: 0x98, script: 0x20, flags: 0x0},
-       1069: {region: 0x160, script: 0x52, flags: 0x0},
+       1063: {region: 0x114, script: 0x52, flags: 0x0},
+       1064: {region: 0x164, script: 0x52, flags: 0x0},
+       1065: {region: 0x164, script: 0x52, flags: 0x0},
+       1066: {region: 0x122, script: 0xd5, flags: 0x0},
+       1067: {region: 0x164, script: 0x52, flags: 0x0},
+       1068: {region: 0x164, script: 0x52, flags: 0x0},
+       1069: {region: 0x164, script: 0x52, flags: 0x0},
        1070: {region: 0x164, script: 0x52, flags: 0x0},
-       1071: {region: 0x164, script: 0x52, flags: 0x0},
-       1072: {region: 0x6c, script: 0x52, flags: 0x0},
-       1073: {region: 0x160, script: 0x52, flags: 0x0},
-       1074: {region: 0x164, script: 0x52, flags: 0x0},
-       1075: {region: 0x5f, script: 0x52, flags: 0x0},
-       1076: {region: 0x94, script: 0x52, flags: 0x0},
-       1077: {region: 0x164, script: 0x52, flags: 0x0},
+       1071: {region: 0x26, script: 0x52, flags: 0x0},
+       1072: {region: 0x37, script: 0x5, flags: 0x1},
+       1073: {region: 0x98, script: 0xc2, flags: 0x0},
+       1074: {region: 0x115, script: 0x52, flags: 0x0},
+       1075: {region: 0x113, script: 0x52, flags: 0x0},
+       1076: {region: 0x98, script: 0x20, flags: 0x0},
+       1077: {region: 0x160, script: 0x52, flags: 0x0},
        1078: {region: 0x164, script: 0x52, flags: 0x0},
-       1079: {region: 0x12e, script: 0x52, flags: 0x0},
-       1080: {region: 0x164, script: 0x52, flags: 0x0},
-       1081: {region: 0x83, script: 0x52, flags: 0x0},
-       1082: {region: 0x10b, script: 0x52, flags: 0x0},
-       1083: {region: 0x12e, script: 0x52, flags: 0x0},
-       1084: {region: 0x15e, script: 0x5, flags: 0x0},
-       1085: {region: 0x4a, script: 0x52, flags: 0x0},
-       1086: {region: 0x5f, script: 0x52, flags: 0x0},
-       1087: {region: 0x164, script: 0x52, flags: 0x0},
-       1088: {region: 0x98, script: 0x20, flags: 0x0},
-       1089: {region: 0x94, script: 0x52, flags: 0x0},
-       1090: {region: 0x164, script: 0x52, flags: 0x0},
-       1091: {region: 0x34, script: 0xe, flags: 0x0},
-       1092: {region: 0x9a, script: 0xc5, flags: 0x0},
-       1093: {region: 0xe8, script: 0x52, flags: 0x0},
-       1094: {region: 0x98, script: 0xcd, flags: 0x0},
-       1095: {region: 0xda, script: 0x20, flags: 0x0},
-       1096: {region: 0x164, script: 0x52, flags: 0x0},
-       1097: {region: 0x164, script: 0x52, flags: 0x0},
+       1079: {region: 0x164, script: 0x52, flags: 0x0},
+       1080: {region: 0x6c, script: 0x52, flags: 0x0},
+       1081: {region: 0x160, script: 0x52, flags: 0x0},
+       1082: {region: 0x164, script: 0x52, flags: 0x0},
+       1083: {region: 0x5f, script: 0x52, flags: 0x0},
+       1084: {region: 0x94, script: 0x52, flags: 0x0},
+       1085: {region: 0x164, script: 0x52, flags: 0x0},
+       1086: {region: 0x164, script: 0x52, flags: 0x0},
+       1087: {region: 0x12e, script: 0x52, flags: 0x0},
+       1088: {region: 0x164, script: 0x52, flags: 0x0},
+       1089: {region: 0x83, script: 0x52, flags: 0x0},
+       1090: {region: 0x10b, script: 0x52, flags: 0x0},
+       1091: {region: 0x12e, script: 0x52, flags: 0x0},
+       1092: {region: 0x15e, script: 0x5, flags: 0x0},
+       1093: {region: 0x4a, script: 0x52, flags: 0x0},
+       1094: {region: 0x5f, script: 0x52, flags: 0x0},
+       1095: {region: 0x164, script: 0x52, flags: 0x0},
+       1096: {region: 0x98, script: 0x20, flags: 0x0},
+       1097: {region: 0x94, script: 0x52, flags: 0x0},
        1098: {region: 0x164, script: 0x52, flags: 0x0},
-       1099: {region: 0x164, script: 0x52, flags: 0x0},
-       1100: {region: 0x164, script: 0x52, flags: 0x0},
-       1101: {region: 0x164, script: 0x52, flags: 0x0},
-       1102: {region: 0x164, script: 0x52, flags: 0x0},
-       1103: {region: 0x164, script: 0x52, flags: 0x0},
-       1104: {region: 0xe6, script: 0x52, flags: 0x0},
+       1099: {region: 0x34, script: 0xe, flags: 0x0},
+       1100: {region: 0x9a, script: 0xc5, flags: 0x0},
+       1101: {region: 0xe8, script: 0x52, flags: 0x0},
+       1102: {region: 0x98, script: 0xcd, flags: 0x0},
+       1103: {region: 0xda, script: 0x20, flags: 0x0},
+       1104: {region: 0x164, script: 0x52, flags: 0x0},
        1105: {region: 0x164, script: 0x52, flags: 0x0},
        1106: {region: 0x164, script: 0x52, flags: 0x0},
-       1107: {region: 0x98, script: 0x4a, flags: 0x0},
-       1108: {region: 0x52, script: 0xcb, flags: 0x0},
-       1109: {region: 0xda, script: 0x20, flags: 0x0},
-       1110: {region: 0xda, script: 0x20, flags: 0x0},
-       1111: {region: 0x98, script: 0xd0, flags: 0x0},
-       1112: {region: 0x164, script: 0x52, flags: 0x0},
-       1113: {region: 0x111, script: 0x52, flags: 0x0},
-       1114: {region: 0x130, script: 0x52, flags: 0x0},
-       1115: {region: 0x125, script: 0x52, flags: 0x0},
-       1116: {region: 0x164, script: 0x52, flags: 0x0},
-       1117: {region: 0x3e, script: 0x3, flags: 0x1},
-       1118: {region: 0x164, script: 0x52, flags: 0x0},
-       1119: {region: 0x164, script: 0x52, flags: 0x0},
+       1107: {region: 0x164, script: 0x52, flags: 0x0},
+       1108: {region: 0x164, script: 0x52, flags: 0x0},
+       1109: {region: 0x164, script: 0x52, flags: 0x0},
+       1110: {region: 0x164, script: 0x52, flags: 0x0},
+       1111: {region: 0x164, script: 0x52, flags: 0x0},
+       1112: {region: 0xe6, script: 0x52, flags: 0x0},
+       1113: {region: 0x164, script: 0x52, flags: 0x0},
+       1114: {region: 0x164, script: 0x52, flags: 0x0},
+       1115: {region: 0x98, script: 0x4a, flags: 0x0},
+       1116: {region: 0x52, script: 0xcb, flags: 0x0},
+       1117: {region: 0xda, script: 0x20, flags: 0x0},
+       1118: {region: 0xda, script: 0x20, flags: 0x0},
+       1119: {region: 0x98, script: 0xd0, flags: 0x0},
        1120: {region: 0x164, script: 0x52, flags: 0x0},
-       1121: {region: 0x122, script: 0xd5, flags: 0x0},
-       1122: {region: 0xda, script: 0x20, flags: 0x0},
-       1123: {region: 0xda, script: 0x20, flags: 0x0},
-       1124: {region: 0xda, script: 0x20, flags: 0x0},
-       1125: {region: 0x6e, script: 0x27, flags: 0x0},
+       1121: {region: 0x111, script: 0x52, flags: 0x0},
+       1122: {region: 0x130, script: 0x52, flags: 0x0},
+       1123: {region: 0x125, script: 0x52, flags: 0x0},
+       1124: {region: 0x164, script: 0x52, flags: 0x0},
+       1125: {region: 0x3c, script: 0x3, flags: 0x1},
        1126: {region: 0x164, script: 0x52, flags: 0x0},
-       1127: {region: 0x6c, script: 0x27, flags: 0x0},
+       1127: {region: 0x164, script: 0x52, flags: 0x0},
        1128: {region: 0x164, script: 0x52, flags: 0x0},
-       1129: {region: 0x164, script: 0x52, flags: 0x0},
-       1130: {region: 0x164, script: 0x52, flags: 0x0},
-       1131: {region: 0xd5, script: 0x52, flags: 0x0},
-       1132: {region: 0x126, script: 0x52, flags: 0x0},
-       1133: {region: 0x124, script: 0x52, flags: 0x0},
-       1134: {region: 0x31, script: 0x52, flags: 0x0},
-       1135: {region: 0xda, script: 0x20, flags: 0x0},
-       1136: {region: 0xe6, script: 0x52, flags: 0x0},
+       1129: {region: 0x122, script: 0xd5, flags: 0x0},
+       1130: {region: 0xda, script: 0x20, flags: 0x0},
+       1131: {region: 0xda, script: 0x20, flags: 0x0},
+       1132: {region: 0xda, script: 0x20, flags: 0x0},
+       1133: {region: 0x6e, script: 0x27, flags: 0x0},
+       1134: {region: 0x164, script: 0x52, flags: 0x0},
+       1135: {region: 0x6c, script: 0x27, flags: 0x0},
+       1136: {region: 0x164, script: 0x52, flags: 0x0},
        1137: {region: 0x164, script: 0x52, flags: 0x0},
        1138: {region: 0x164, script: 0x52, flags: 0x0},
-       1139: {region: 0x31, script: 0x52, flags: 0x0},
-       1140: {region: 0xd3, script: 0x52, flags: 0x0},
-       1141: {region: 0x164, script: 0x52, flags: 0x0},
-       1142: {region: 0x160, script: 0x52, flags: 0x0},
-       1143: {region: 0x164, script: 0x52, flags: 0x0},
-       1144: {region: 0x128, script: 0x52, flags: 0x0},
+       1139: {region: 0xd5, script: 0x52, flags: 0x0},
+       1140: {region: 0x126, script: 0x52, flags: 0x0},
+       1141: {region: 0x124, script: 0x52, flags: 0x0},
+       1142: {region: 0x31, script: 0x52, flags: 0x0},
+       1143: {region: 0xda, script: 0x20, flags: 0x0},
+       1144: {region: 0xe6, script: 0x52, flags: 0x0},
        1145: {region: 0x164, script: 0x52, flags: 0x0},
-       1146: {region: 0xcd, script: 0x52, flags: 0x0},
-       1147: {region: 0x164, script: 0x52, flags: 0x0},
-       1148: {region: 0xe5, script: 0x52, flags: 0x0},
+       1146: {region: 0x164, script: 0x52, flags: 0x0},
+       1147: {region: 0x31, script: 0x52, flags: 0x0},
+       1148: {region: 0xd3, script: 0x52, flags: 0x0},
        1149: {region: 0x164, script: 0x52, flags: 0x0},
-       1150: {region: 0x164, script: 0x52, flags: 0x0},
+       1150: {region: 0x160, script: 0x52, flags: 0x0},
        1151: {region: 0x164, script: 0x52, flags: 0x0},
-       1152: {region: 0x12a, script: 0x52, flags: 0x0},
-       1153: {region: 0x12a, script: 0x52, flags: 0x0},
-       1154: {region: 0x12d, script: 0x52, flags: 0x0},
-       1155: {region: 0x164, script: 0x5, flags: 0x0},
-       1156: {region: 0x160, script: 0x52, flags: 0x0},
-       1157: {region: 0x86, script: 0x2d, flags: 0x0},
-       1158: {region: 0xda, script: 0x20, flags: 0x0},
-       1159: {region: 0xe6, script: 0x52, flags: 0x0},
-       1160: {region: 0x42, script: 0xd6, flags: 0x0},
-       1161: {region: 0x164, script: 0x52, flags: 0x0},
-       1162: {region: 0x105, script: 0x1e, flags: 0x0},
-       1163: {region: 0x164, script: 0x52, flags: 0x0},
-       1164: {region: 0x164, script: 0x52, flags: 0x0},
-       1165: {region: 0x130, script: 0x52, flags: 0x0},
-       1166: {region: 0x164, script: 0x52, flags: 0x0},
-       1167: {region: 0x122, script: 0xd5, flags: 0x0},
-       1168: {region: 0x31, script: 0x52, flags: 0x0},
+       1152: {region: 0x128, script: 0x52, flags: 0x0},
+       1153: {region: 0x164, script: 0x52, flags: 0x0},
+       1154: {region: 0xcd, script: 0x52, flags: 0x0},
+       1155: {region: 0x164, script: 0x52, flags: 0x0},
+       1156: {region: 0xe5, script: 0x52, flags: 0x0},
+       1157: {region: 0x164, script: 0x52, flags: 0x0},
+       1158: {region: 0x164, script: 0x52, flags: 0x0},
+       1159: {region: 0x164, script: 0x52, flags: 0x0},
+       1160: {region: 0x12a, script: 0x52, flags: 0x0},
+       1161: {region: 0x12a, script: 0x52, flags: 0x0},
+       1162: {region: 0x12d, script: 0x52, flags: 0x0},
+       1163: {region: 0x164, script: 0x5, flags: 0x0},
+       1164: {region: 0x160, script: 0x52, flags: 0x0},
+       1165: {region: 0x86, script: 0x2d, flags: 0x0},
+       1166: {region: 0xda, script: 0x20, flags: 0x0},
+       1167: {region: 0xe6, script: 0x52, flags: 0x0},
+       1168: {region: 0x42, script: 0xd6, flags: 0x0},
        1169: {region: 0x164, script: 0x52, flags: 0x0},
-       1170: {region: 0x164, script: 0x52, flags: 0x0},
-       1171: {region: 0xcd, script: 0x52, flags: 0x0},
+       1170: {region: 0x105, script: 0x1e, flags: 0x0},
+       1171: {region: 0x164, script: 0x52, flags: 0x0},
        1172: {region: 0x164, script: 0x52, flags: 0x0},
-       1173: {region: 0x164, script: 0x52, flags: 0x0},
-       1174: {region: 0x12c, script: 0x52, flags: 0x0},
-       1175: {region: 0x164, script: 0x52, flags: 0x0},
+       1173: {region: 0x130, script: 0x52, flags: 0x0},
+       1174: {region: 0x164, script: 0x52, flags: 0x0},
+       1175: {region: 0x122, script: 0xd5, flags: 0x0},
+       1176: {region: 0x31, script: 0x52, flags: 0x0},
        1177: {region: 0x164, script: 0x52, flags: 0x0},
-       1178: {region: 0xd3, script: 0x52, flags: 0x0},
-       1179: {region: 0x52, script: 0xce, flags: 0x0},
-       1180: {region: 0xe4, script: 0x52, flags: 0x0},
+       1178: {region: 0x164, script: 0x52, flags: 0x0},
+       1179: {region: 0xcd, script: 0x52, flags: 0x0},
+       1180: {region: 0x164, script: 0x52, flags: 0x0},
        1181: {region: 0x164, script: 0x52, flags: 0x0},
-       1182: {region: 0x105, script: 0x1e, flags: 0x0},
-       1183: {region: 0xb9, script: 0x52, flags: 0x0},
-       1184: {region: 0x164, script: 0x52, flags: 0x0},
-       1185: {region: 0x105, script: 0x1e, flags: 0x0},
-       1186: {region: 0x41, script: 0x4, flags: 0x1},
-       1187: {region: 0x11b, script: 0xd8, flags: 0x0},
-       1188: {region: 0x12f, script: 0x1e, flags: 0x0},
-       1189: {region: 0x74, script: 0x52, flags: 0x0},
-       1190: {region: 0x29, script: 0x52, flags: 0x0},
-       1192: {region: 0x45, script: 0x3, flags: 0x1},
-       1193: {region: 0x98, script: 0xe, flags: 0x0},
-       1194: {region: 0xe7, script: 0x5, flags: 0x0},
-       1195: {region: 0x164, script: 0x52, flags: 0x0},
-       1196: {region: 0x164, script: 0x52, flags: 0x0},
-       1197: {region: 0x164, script: 0x52, flags: 0x0},
-       1198: {region: 0x164, script: 0x52, flags: 0x0},
-       1199: {region: 0x164, script: 0x52, flags: 0x0},
-       1200: {region: 0x164, script: 0x52, flags: 0x0},
-       1201: {region: 0x164, script: 0x52, flags: 0x0},
-       1202: {region: 0x48, script: 0x4, flags: 0x1},
+       1182: {region: 0x12c, script: 0x52, flags: 0x0},
+       1183: {region: 0x164, script: 0x52, flags: 0x0},
+       1185: {region: 0x164, script: 0x52, flags: 0x0},
+       1186: {region: 0xd3, script: 0x52, flags: 0x0},
+       1187: {region: 0x52, script: 0xce, flags: 0x0},
+       1188: {region: 0xe4, script: 0x52, flags: 0x0},
+       1189: {region: 0x164, script: 0x52, flags: 0x0},
+       1190: {region: 0x105, script: 0x1e, flags: 0x0},
+       1191: {region: 0xb9, script: 0x52, flags: 0x0},
+       1192: {region: 0x164, script: 0x52, flags: 0x0},
+       1193: {region: 0x105, script: 0x1e, flags: 0x0},
+       1194: {region: 0x3f, script: 0x4, flags: 0x1},
+       1195: {region: 0x11b, script: 0xd8, flags: 0x0},
+       1196: {region: 0x12f, script: 0x1e, flags: 0x0},
+       1197: {region: 0x74, script: 0x52, flags: 0x0},
+       1198: {region: 0x29, script: 0x52, flags: 0x0},
+       1200: {region: 0x43, script: 0x3, flags: 0x1},
+       1201: {region: 0x98, script: 0xe, flags: 0x0},
+       1202: {region: 0xe7, script: 0x5, flags: 0x0},
        1203: {region: 0x164, script: 0x52, flags: 0x0},
-       1204: {region: 0xb3, script: 0xd9, flags: 0x0},
+       1204: {region: 0x164, script: 0x52, flags: 0x0},
        1205: {region: 0x164, script: 0x52, flags: 0x0},
-       1206: {region: 0x160, script: 0x52, flags: 0x0},
-       1207: {region: 0x9d, script: 0x52, flags: 0x0},
-       1208: {region: 0x105, script: 0x52, flags: 0x0},
-       1209: {region: 0x13d, script: 0x52, flags: 0x0},
-       1210: {region: 0x11a, script: 0x52, flags: 0x0},
+       1206: {region: 0x164, script: 0x52, flags: 0x0},
+       1207: {region: 0x164, script: 0x52, flags: 0x0},
+       1208: {region: 0x164, script: 0x52, flags: 0x0},
+       1209: {region: 0x164, script: 0x52, flags: 0x0},
+       1210: {region: 0x46, script: 0x4, flags: 0x1},
        1211: {region: 0x164, script: 0x52, flags: 0x0},
-       1212: {region: 0x35, script: 0x52, flags: 0x0},
-       1213: {region: 0x5f, script: 0x52, flags: 0x0},
-       1214: {region: 0xd0, script: 0x52, flags: 0x0},
-       1215: {region: 0x1, script: 0x52, flags: 0x0},
+       1212: {region: 0xb3, script: 0xd9, flags: 0x0},
+       1213: {region: 0x164, script: 0x52, flags: 0x0},
+       1214: {region: 0x160, script: 0x52, flags: 0x0},
+       1215: {region: 0x9d, script: 0x52, flags: 0x0},
        1216: {region: 0x105, script: 0x52, flags: 0x0},
-       1217: {region: 0x69, script: 0x52, flags: 0x0},
-       1218: {region: 0x12e, script: 0x52, flags: 0x0},
+       1217: {region: 0x13d, script: 0x52, flags: 0x0},
+       1218: {region: 0x11a, script: 0x52, flags: 0x0},
        1219: {region: 0x164, script: 0x52, flags: 0x0},
        1220: {region: 0x35, script: 0x52, flags: 0x0},
-       1221: {region: 0x4d, script: 0x52, flags: 0x0},
-       1222: {region: 0x164, script: 0x52, flags: 0x0},
-       1223: {region: 0x6e, script: 0x27, flags: 0x0},
-       1224: {region: 0x164, script: 0x52, flags: 0x0},
-       1225: {region: 0xe6, script: 0x52, flags: 0x0},
-       1226: {region: 0x2e, script: 0x52, flags: 0x0},
-       1227: {region: 0x98, script: 0xd0, flags: 0x0},
-       1228: {region: 0x98, script: 0x20, flags: 0x0},
-       1229: {region: 0x164, script: 0x52, flags: 0x0},
+       1221: {region: 0x5f, script: 0x52, flags: 0x0},
+       1222: {region: 0xd0, script: 0x52, flags: 0x0},
+       1223: {region: 0x1, script: 0x52, flags: 0x0},
+       1224: {region: 0x105, script: 0x52, flags: 0x0},
+       1225: {region: 0x69, script: 0x52, flags: 0x0},
+       1226: {region: 0x12e, script: 0x52, flags: 0x0},
+       1227: {region: 0x164, script: 0x52, flags: 0x0},
+       1228: {region: 0x35, script: 0x52, flags: 0x0},
+       1229: {region: 0x4d, script: 0x52, flags: 0x0},
        1230: {region: 0x164, script: 0x52, flags: 0x0},
-       1231: {region: 0x164, script: 0x52, flags: 0x0},
+       1231: {region: 0x6e, script: 0x27, flags: 0x0},
        1232: {region: 0x164, script: 0x52, flags: 0x0},
-       1233: {region: 0x164, script: 0x52, flags: 0x0},
-       1234: {region: 0x164, script: 0x52, flags: 0x0},
-       1235: {region: 0x164, script: 0x52, flags: 0x0},
-       1236: {region: 0x164, script: 0x52, flags: 0x0},
+       1233: {region: 0xe6, script: 0x52, flags: 0x0},
+       1234: {region: 0x2e, script: 0x52, flags: 0x0},
+       1235: {region: 0x98, script: 0xd0, flags: 0x0},
+       1236: {region: 0x98, script: 0x20, flags: 0x0},
        1237: {region: 0x164, script: 0x52, flags: 0x0},
-       1238: {region: 0x13f, script: 0x52, flags: 0x0},
+       1238: {region: 0x164, script: 0x52, flags: 0x0},
        1239: {region: 0x164, script: 0x52, flags: 0x0},
        1240: {region: 0x164, script: 0x52, flags: 0x0},
-       1241: {region: 0xa7, script: 0x5, flags: 0x0},
+       1241: {region: 0x164, script: 0x52, flags: 0x0},
        1242: {region: 0x164, script: 0x52, flags: 0x0},
-       1243: {region: 0x113, script: 0x52, flags: 0x0},
+       1243: {region: 0x164, script: 0x52, flags: 0x0},
        1244: {region: 0x164, script: 0x52, flags: 0x0},
        1245: {region: 0x164, script: 0x52, flags: 0x0},
-       1246: {region: 0x164, script: 0x52, flags: 0x0},
+       1246: {region: 0x13f, script: 0x52, flags: 0x0},
        1247: {region: 0x164, script: 0x52, flags: 0x0},
-       1248: {region: 0x98, script: 0x20, flags: 0x0},
-       1249: {region: 0x52, script: 0x34, flags: 0x0},
+       1248: {region: 0x164, script: 0x52, flags: 0x0},
+       1249: {region: 0xa7, script: 0x5, flags: 0x0},
        1250: {region: 0x164, script: 0x52, flags: 0x0},
-       1251: {region: 0x164, script: 0x52, flags: 0x0},
-       1252: {region: 0x40, script: 0x52, flags: 0x0},
+       1251: {region: 0x113, script: 0x52, flags: 0x0},
+       1252: {region: 0x164, script: 0x52, flags: 0x0},
        1253: {region: 0x164, script: 0x52, flags: 0x0},
-       1254: {region: 0x12a, script: 0x18, flags: 0x0},
+       1254: {region: 0x164, script: 0x52, flags: 0x0},
        1255: {region: 0x164, script: 0x52, flags: 0x0},
-       1256: {region: 0x160, script: 0x52, flags: 0x0},
-       1257: {region: 0x164, script: 0x52, flags: 0x0},
-       1258: {region: 0x12a, script: 0x5a, flags: 0x0},
-       1259: {region: 0x12a, script: 0x5b, flags: 0x0},
-       1260: {region: 0x7c, script: 0x29, flags: 0x0},
-       1261: {region: 0x52, script: 0x5e, flags: 0x0},
-       1262: {region: 0x10a, script: 0x62, flags: 0x0},
-       1263: {region: 0x107, script: 0x6c, flags: 0x0},
-       1264: {region: 0x98, script: 0x20, flags: 0x0},
-       1265: {region: 0x130, script: 0x52, flags: 0x0},
-       1266: {region: 0x164, script: 0x52, flags: 0x0},
-       1267: {region: 0x9b, script: 0x82, flags: 0x0},
-       1268: {region: 0x164, script: 0x52, flags: 0x0},
-       1269: {region: 0x15d, script: 0xba, flags: 0x0},
-       1270: {region: 0x164, script: 0x52, flags: 0x0},
-       1271: {region: 0x164, script: 0x52, flags: 0x0},
-       1272: {region: 0xda, script: 0x20, flags: 0x0},
-       1273: {region: 0x164, script: 0x52, flags: 0x0},
+       1256: {region: 0x98, script: 0x20, flags: 0x0},
+       1257: {region: 0x52, script: 0x34, flags: 0x0},
+       1258: {region: 0x164, script: 0x52, flags: 0x0},
+       1259: {region: 0x164, script: 0x52, flags: 0x0},
+       1260: {region: 0x40, script: 0x52, flags: 0x0},
+       1261: {region: 0x164, script: 0x52, flags: 0x0},
+       1262: {region: 0x12a, script: 0x18, flags: 0x0},
+       1263: {region: 0x164, script: 0x52, flags: 0x0},
+       1264: {region: 0x160, script: 0x52, flags: 0x0},
+       1265: {region: 0x164, script: 0x52, flags: 0x0},
+       1266: {region: 0x12a, script: 0x5a, flags: 0x0},
+       1267: {region: 0x12a, script: 0x5b, flags: 0x0},
+       1268: {region: 0x7c, script: 0x29, flags: 0x0},
+       1269: {region: 0x52, script: 0x5e, flags: 0x0},
+       1270: {region: 0x10a, script: 0x62, flags: 0x0},
+       1271: {region: 0x107, script: 0x6c, flags: 0x0},
+       1272: {region: 0x98, script: 0x20, flags: 0x0},
+       1273: {region: 0x130, script: 0x52, flags: 0x0},
        1274: {region: 0x164, script: 0x52, flags: 0x0},
-       1275: {region: 0xd0, script: 0x52, flags: 0x0},
-       1276: {region: 0x74, script: 0x52, flags: 0x0},
-       1277: {region: 0x164, script: 0x52, flags: 0x0},
+       1275: {region: 0x9b, script: 0x82, flags: 0x0},
+       1276: {region: 0x164, script: 0x52, flags: 0x0},
+       1277: {region: 0x15d, script: 0xba, flags: 0x0},
        1278: {region: 0x164, script: 0x52, flags: 0x0},
-       1279: {region: 0x51, script: 0x52, flags: 0x0},
-       1280: {region: 0x164, script: 0x52, flags: 0x0},
+       1279: {region: 0x164, script: 0x52, flags: 0x0},
+       1280: {region: 0xda, script: 0x20, flags: 0x0},
        1281: {region: 0x164, script: 0x52, flags: 0x0},
        1282: {region: 0x164, script: 0x52, flags: 0x0},
-       1283: {region: 0x51, script: 0x52, flags: 0x0},
-       1284: {region: 0x164, script: 0x52, flags: 0x0},
+       1283: {region: 0xd0, script: 0x52, flags: 0x0},
+       1284: {region: 0x74, script: 0x52, flags: 0x0},
        1285: {region: 0x164, script: 0x52, flags: 0x0},
        1286: {region: 0x164, script: 0x52, flags: 0x0},
-       1287: {region: 0x164, script: 0x52, flags: 0x0},
-       1288: {region: 0x1, script: 0x37, flags: 0x0},
+       1287: {region: 0x51, script: 0x52, flags: 0x0},
+       1288: {region: 0x164, script: 0x52, flags: 0x0},
        1289: {region: 0x164, script: 0x52, flags: 0x0},
        1290: {region: 0x164, script: 0x52, flags: 0x0},
-       1291: {region: 0x164, script: 0x52, flags: 0x0},
+       1291: {region: 0x51, script: 0x52, flags: 0x0},
        1292: {region: 0x164, script: 0x52, flags: 0x0},
        1293: {region: 0x164, script: 0x52, flags: 0x0},
-       1294: {region: 0xd5, script: 0x52, flags: 0x0},
+       1294: {region: 0x164, script: 0x52, flags: 0x0},
        1295: {region: 0x164, script: 0x52, flags: 0x0},
-       1296: {region: 0x164, script: 0x52, flags: 0x0},
+       1296: {region: 0x1, script: 0x37, flags: 0x0},
        1297: {region: 0x164, script: 0x52, flags: 0x0},
-       1298: {region: 0x40, script: 0x52, flags: 0x0},
+       1298: {region: 0x164, script: 0x52, flags: 0x0},
        1299: {region: 0x164, script: 0x52, flags: 0x0},
-       1300: {region: 0xce, script: 0x52, flags: 0x0},
-       1301: {region: 0x4c, script: 0x3, flags: 0x1},
-       1302: {region: 0x164, script: 0x52, flags: 0x0},
+       1300: {region: 0x164, script: 0x52, flags: 0x0},
+       1301: {region: 0x164, script: 0x52, flags: 0x0},
+       1302: {region: 0xd5, script: 0x52, flags: 0x0},
        1303: {region: 0x164, script: 0x52, flags: 0x0},
        1304: {region: 0x164, script: 0x52, flags: 0x0},
-       1305: {region: 0x52, script: 0x52, flags: 0x0},
-       1306: {region: 0x10a, script: 0x52, flags: 0x0},
-       1308: {region: 0xa7, script: 0x5, flags: 0x0},
-       1309: {region: 0xd8, script: 0x52, flags: 0x0},
-       1310: {region: 0xb9, script: 0xd2, flags: 0x0},
-       1311: {region: 0x4f, script: 0x14, flags: 0x1},
+       1305: {region: 0x164, script: 0x52, flags: 0x0},
+       1306: {region: 0x40, script: 0x52, flags: 0x0},
+       1307: {region: 0x164, script: 0x52, flags: 0x0},
+       1308: {region: 0xce, script: 0x52, flags: 0x0},
+       1309: {region: 0x4a, script: 0x3, flags: 0x1},
+       1310: {region: 0x164, script: 0x52, flags: 0x0},
+       1311: {region: 0x164, script: 0x52, flags: 0x0},
        1312: {region: 0x164, script: 0x52, flags: 0x0},
-       1313: {region: 0x121, script: 0x52, flags: 0x0},
-       1314: {region: 0xcf, script: 0x52, flags: 0x0},
-       1315: {region: 0x164, script: 0x52, flags: 0x0},
-       1316: {region: 0x160, script: 0x52, flags: 0x0},
-       1318: {region: 0x12a, script: 0x52, flags: 0x0},
+       1313: {region: 0x52, script: 0x52, flags: 0x0},
+       1314: {region: 0x10a, script: 0x52, flags: 0x0},
+       1316: {region: 0xa7, script: 0x5, flags: 0x0},
+       1317: {region: 0xd8, script: 0x52, flags: 0x0},
+       1318: {region: 0xb9, script: 0xd2, flags: 0x0},
+       1319: {region: 0x4d, script: 0x14, flags: 0x1},
+       1320: {region: 0x164, script: 0x52, flags: 0x0},
+       1321: {region: 0x121, script: 0x52, flags: 0x0},
+       1322: {region: 0xcf, script: 0x52, flags: 0x0},
+       1323: {region: 0x164, script: 0x52, flags: 0x0},
+       1324: {region: 0x160, script: 0x52, flags: 0x0},
+       1326: {region: 0x12a, script: 0x52, flags: 0x0},
 }
 
 // likelyLangList holds lists info associated with likelyLang.
-// Size: 396 bytes, 99 elements
-var likelyLangList = [99]likelyScriptRegion{
+// Size: 388 bytes, 97 elements
+var likelyLangList = [97]likelyScriptRegion{
        0:  {region: 0x9b, script: 0x7, flags: 0x0},
        1:  {region: 0xa0, script: 0x6d, flags: 0x2},
        2:  {region: 0x11b, script: 0x78, flags: 0x2},
@@ -2812,97 +2822,95 @@ var likelyLangList = [99]likelyScriptRegion{
        5:  {region: 0x9b, script: 0x5, flags: 0x4},
        6:  {region: 0x105, script: 0x1e, flags: 0x4},
        7:  {region: 0x9b, script: 0x5, flags: 0x2},
-       8:  {region: 0x98, script: 0xe, flags: 0x0},
-       9:  {region: 0x34, script: 0x16, flags: 0x2},
-       10: {region: 0x105, script: 0x1e, flags: 0x0},
-       11: {region: 0x37, script: 0x2a, flags: 0x2},
-       12: {region: 0x134, script: 0x52, flags: 0x0},
-       13: {region: 0x7a, script: 0xbd, flags: 0x2},
-       14: {region: 0x113, script: 0x52, flags: 0x0},
-       15: {region: 0x83, script: 0x1, flags: 0x2},
-       16: {region: 0x5c, script: 0x1d, flags: 0x0},
-       17: {region: 0x86, script: 0x57, flags: 0x2},
-       18: {region: 0xd5, script: 0x52, flags: 0x0},
-       19: {region: 0x51, script: 0x5, flags: 0x4},
-       20: {region: 0x10a, script: 0x5, flags: 0x4},
-       21: {region: 0xad, script: 0x1e, flags: 0x0},
-       22: {region: 0x23, script: 0x5, flags: 0x4},
-       23: {region: 0x52, script: 0x5, flags: 0x4},
-       24: {region: 0x9b, script: 0x5, flags: 0x4},
-       25: {region: 0xc4, script: 0x5, flags: 0x4},
-       26: {region: 0x52, script: 0x5, flags: 0x2},
-       27: {region: 0x12a, script: 0x52, flags: 0x0},
-       28: {region: 0xaf, script: 0x5, flags: 0x4},
-       29: {region: 0x9a, script: 0x5, flags: 0x2},
-       30: {region: 0xa4, script: 0x1e, flags: 0x0},
-       31: {region: 0x52, script: 0x5, flags: 0x4},
-       32: {region: 0x12a, script: 0x52, flags: 0x4},
-       33: {region: 0x52, script: 0x5, flags: 0x2},
-       34: {region: 0x12a, script: 0x52, flags: 0x2},
-       35: {region: 0xda, script: 0x20, flags: 0x0},
-       36: {region: 0x98, script: 0x55, flags: 0x2},
-       37: {region: 0x82, script: 0x52, flags: 0x0},
-       38: {region: 0x83, script: 0x70, flags: 0x4},
-       39: {region: 0x83, script: 0x70, flags: 0x2},
-       40: {region: 0xc4, script: 0x1e, flags: 0x0},
-       41: {region: 0x52, script: 0x66, flags: 0x4},
-       42: {region: 0x52, script: 0x66, flags: 0x2},
-       43: {region: 0xcf, script: 0x52, flags: 0x0},
-       44: {region: 0x49, script: 0x5, flags: 0x4},
-       45: {region: 0x94, script: 0x5, flags: 0x4},
-       46: {region: 0x98, script: 0x2f, flags: 0x0},
-       47: {region: 0xe7, script: 0x5, flags: 0x4},
-       48: {region: 0xe7, script: 0x5, flags: 0x2},
-       49: {region: 0x9b, script: 0x7c, flags: 0x0},
-       50: {region: 0x52, script: 0x7d, flags: 0x2},
-       51: {region: 0xb9, script: 0xd2, flags: 0x0},
-       52: {region: 0xd8, script: 0x52, flags: 0x4},
-       53: {region: 0xe7, script: 0x5, flags: 0x0},
-       54: {region: 0x98, script: 0x20, flags: 0x2},
-       55: {region: 0x98, script: 0x47, flags: 0x2},
-       56: {region: 0x98, script: 0xc0, flags: 0x2},
-       57: {region: 0x104, script: 0x1e, flags: 0x0},
-       58: {region: 0xbc, script: 0x52, flags: 0x4},
-       59: {region: 0x103, script: 0x52, flags: 0x4},
-       60: {region: 0x105, script: 0x52, flags: 0x4},
-       61: {region: 0x12a, script: 0x52, flags: 0x4},
-       62: {region: 0x123, script: 0x1e, flags: 0x0},
-       63: {region: 0xe7, script: 0x5, flags: 0x4},
-       64: {region: 0xe7, script: 0x5, flags: 0x2},
-       65: {region: 0x52, script: 0x5, flags: 0x0},
-       66: {region: 0xad, script: 0x1e, flags: 0x4},
-       67: {region: 0xc4, script: 0x1e, flags: 0x4},
-       68: {region: 0xad, script: 0x1e, flags: 0x2},
-       69: {region: 0x98, script: 0xe, flags: 0x0},
-       70: {region: 0xda, script: 0x20, flags: 0x4},
-       71: {region: 0xda, script: 0x20, flags: 0x2},
-       72: {region: 0x136, script: 0x52, flags: 0x0},
-       73: {region: 0x23, script: 0x5, flags: 0x4},
-       74: {region: 0x52, script: 0x1e, flags: 0x4},
-       75: {region: 0x23, script: 0x5, flags: 0x2},
-       76: {region: 0x8c, script: 0x35, flags: 0x0},
-       77: {region: 0x52, script: 0x34, flags: 0x4},
-       78: {region: 0x52, script: 0x34, flags: 0x2},
-       79: {region: 0x52, script: 0x34, flags: 0x0},
-       80: {region: 0x2e, script: 0x35, flags: 0x4},
-       81: {region: 0x3d, script: 0x35, flags: 0x4},
-       82: {region: 0x7a, script: 0x35, flags: 0x4},
-       83: {region: 0x7d, script: 0x35, flags: 0x4},
-       84: {region: 0x8c, script: 0x35, flags: 0x4},
-       85: {region: 0x94, script: 0x35, flags: 0x4},
-       86: {region: 0xc5, script: 0x35, flags: 0x4},
-       87: {region: 0xcf, script: 0x35, flags: 0x4},
-       88: {region: 0xe1, script: 0x35, flags: 0x4},
-       89: {region: 0xe4, script: 0x35, flags: 0x4},
-       90: {region: 0xe6, script: 0x35, flags: 0x4},
-       91: {region: 0x115, script: 0x35, flags: 0x4},
-       92: {region: 0x122, script: 0x35, flags: 0x4},
-       93: {region: 0x12d, script: 0x35, flags: 0x4},
-       94: {region: 0x134, script: 0x35, flags: 0x4},
-       95: {region: 0x13d, script: 0x35, flags: 0x4},
-       96: {region: 0x12d, script: 0x11, flags: 0x2},
-       97: {region: 0x12d, script: 0x30, flags: 0x2},
-       98: {region: 0x12d, script: 0x35, flags: 0x2},
+       8:  {region: 0x105, script: 0x1e, flags: 0x0},
+       9:  {region: 0x37, script: 0x2a, flags: 0x2},
+       10: {region: 0x134, script: 0x52, flags: 0x0},
+       11: {region: 0x7a, script: 0xbd, flags: 0x2},
+       12: {region: 0x113, script: 0x52, flags: 0x0},
+       13: {region: 0x83, script: 0x1, flags: 0x2},
+       14: {region: 0x5c, script: 0x1d, flags: 0x0},
+       15: {region: 0x86, script: 0x57, flags: 0x2},
+       16: {region: 0xd5, script: 0x52, flags: 0x0},
+       17: {region: 0x51, script: 0x5, flags: 0x4},
+       18: {region: 0x10a, script: 0x5, flags: 0x4},
+       19: {region: 0xad, script: 0x1e, flags: 0x0},
+       20: {region: 0x23, script: 0x5, flags: 0x4},
+       21: {region: 0x52, script: 0x5, flags: 0x4},
+       22: {region: 0x9b, script: 0x5, flags: 0x4},
+       23: {region: 0xc4, script: 0x5, flags: 0x4},
+       24: {region: 0x52, script: 0x5, flags: 0x2},
+       25: {region: 0x12a, script: 0x52, flags: 0x0},
+       26: {region: 0xaf, script: 0x5, flags: 0x4},
+       27: {region: 0x9a, script: 0x5, flags: 0x2},
+       28: {region: 0xa4, script: 0x1e, flags: 0x0},
+       29: {region: 0x52, script: 0x5, flags: 0x4},
+       30: {region: 0x12a, script: 0x52, flags: 0x4},
+       31: {region: 0x52, script: 0x5, flags: 0x2},
+       32: {region: 0x12a, script: 0x52, flags: 0x2},
+       33: {region: 0xda, script: 0x20, flags: 0x0},
+       34: {region: 0x98, script: 0x55, flags: 0x2},
+       35: {region: 0x82, script: 0x52, flags: 0x0},
+       36: {region: 0x83, script: 0x70, flags: 0x4},
+       37: {region: 0x83, script: 0x70, flags: 0x2},
+       38: {region: 0xc4, script: 0x1e, flags: 0x0},
+       39: {region: 0x52, script: 0x66, flags: 0x4},
+       40: {region: 0x52, script: 0x66, flags: 0x2},
+       41: {region: 0xcf, script: 0x52, flags: 0x0},
+       42: {region: 0x49, script: 0x5, flags: 0x4},
+       43: {region: 0x94, script: 0x5, flags: 0x4},
+       44: {region: 0x98, script: 0x2f, flags: 0x0},
+       45: {region: 0xe7, script: 0x5, flags: 0x4},
+       46: {region: 0xe7, script: 0x5, flags: 0x2},
+       47: {region: 0x9b, script: 0x7c, flags: 0x0},
+       48: {region: 0x52, script: 0x7d, flags: 0x2},
+       49: {region: 0xb9, script: 0xd2, flags: 0x0},
+       50: {region: 0xd8, script: 0x52, flags: 0x4},
+       51: {region: 0xe7, script: 0x5, flags: 0x0},
+       52: {region: 0x98, script: 0x20, flags: 0x2},
+       53: {region: 0x98, script: 0x47, flags: 0x2},
+       54: {region: 0x98, script: 0xc0, flags: 0x2},
+       55: {region: 0x104, script: 0x1e, flags: 0x0},
+       56: {region: 0xbc, script: 0x52, flags: 0x4},
+       57: {region: 0x103, script: 0x52, flags: 0x4},
+       58: {region: 0x105, script: 0x52, flags: 0x4},
+       59: {region: 0x12a, script: 0x52, flags: 0x4},
+       60: {region: 0x123, script: 0x1e, flags: 0x0},
+       61: {region: 0xe7, script: 0x5, flags: 0x4},
+       62: {region: 0xe7, script: 0x5, flags: 0x2},
+       63: {region: 0x52, script: 0x5, flags: 0x0},
+       64: {region: 0xad, script: 0x1e, flags: 0x4},
+       65: {region: 0xc4, script: 0x1e, flags: 0x4},
+       66: {region: 0xad, script: 0x1e, flags: 0x2},
+       67: {region: 0x98, script: 0xe, flags: 0x0},
+       68: {region: 0xda, script: 0x20, flags: 0x4},
+       69: {region: 0xda, script: 0x20, flags: 0x2},
+       70: {region: 0x136, script: 0x52, flags: 0x0},
+       71: {region: 0x23, script: 0x5, flags: 0x4},
+       72: {region: 0x52, script: 0x1e, flags: 0x4},
+       73: {region: 0x23, script: 0x5, flags: 0x2},
+       74: {region: 0x8c, script: 0x35, flags: 0x0},
+       75: {region: 0x52, script: 0x34, flags: 0x4},
+       76: {region: 0x52, script: 0x34, flags: 0x2},
+       77: {region: 0x52, script: 0x34, flags: 0x0},
+       78: {region: 0x2e, script: 0x35, flags: 0x4},
+       79: {region: 0x3d, script: 0x35, flags: 0x4},
+       80: {region: 0x7a, script: 0x35, flags: 0x4},
+       81: {region: 0x7d, script: 0x35, flags: 0x4},
+       82: {region: 0x8c, script: 0x35, flags: 0x4},
+       83: {region: 0x94, script: 0x35, flags: 0x4},
+       84: {region: 0xc5, script: 0x35, flags: 0x4},
+       85: {region: 0xcf, script: 0x35, flags: 0x4},
+       86: {region: 0xe1, script: 0x35, flags: 0x4},
+       87: {region: 0xe4, script: 0x35, flags: 0x4},
+       88: {region: 0xe6, script: 0x35, flags: 0x4},
+       89: {region: 0x115, script: 0x35, flags: 0x4},
+       90: {region: 0x122, script: 0x35, flags: 0x4},
+       91: {region: 0x12d, script: 0x35, flags: 0x4},
+       92: {region: 0x134, script: 0x35, flags: 0x4},
+       93: {region: 0x13d, script: 0x35, flags: 0x4},
+       94: {region: 0x12d, script: 0x11, flags: 0x2},
+       95: {region: 0x12d, script: 0x30, flags: 0x2},
+       96: {region: 0x12d, script: 0x35, flags: 0x2},
 }
 
 type likelyLangScript struct {
@@ -2918,308 +2926,306 @@ type likelyLangScript struct {
 // TODO: exclude containers and user-definable regions from the list.
 // Size: 1428 bytes, 357 elements
 var likelyRegion = [357]likelyLangScript{
-       33:  {lang: 0xd5, script: 0x52, flags: 0x0},
-       34:  {lang: 0x39, script: 0x5, flags: 0x0},
+       33:  {lang: 0xd7, script: 0x52, flags: 0x0},
+       34:  {lang: 0x3a, script: 0x5, flags: 0x0},
        35:  {lang: 0x0, script: 0x2, flags: 0x1},
        38:  {lang: 0x2, script: 0x2, flags: 0x1},
        39:  {lang: 0x4, script: 0x2, flags: 0x1},
-       41:  {lang: 0x3b7, script: 0x52, flags: 0x0},
+       41:  {lang: 0x3be, script: 0x52, flags: 0x0},
        42:  {lang: 0x0, script: 0x52, flags: 0x0},
-       43:  {lang: 0x139, script: 0x52, flags: 0x0},
-       44:  {lang: 0x411, script: 0x52, flags: 0x0},
-       45:  {lang: 0x109, script: 0x52, flags: 0x0},
-       47:  {lang: 0x35e, script: 0x52, flags: 0x0},
-       48:  {lang: 0x43a, script: 0x52, flags: 0x0},
-       49:  {lang: 0x57, script: 0x52, flags: 0x0},
+       43:  {lang: 0x13d, script: 0x52, flags: 0x0},
+       44:  {lang: 0x419, script: 0x52, flags: 0x0},
+       45:  {lang: 0x10c, script: 0x52, flags: 0x0},
+       47:  {lang: 0x365, script: 0x52, flags: 0x0},
+       48:  {lang: 0x442, script: 0x52, flags: 0x0},
+       49:  {lang: 0x58, script: 0x52, flags: 0x0},
        50:  {lang: 0x6, script: 0x2, flags: 0x1},
-       52:  {lang: 0xa3, script: 0xe, flags: 0x0},
-       53:  {lang: 0x35e, script: 0x52, flags: 0x0},
-       54:  {lang: 0x159, script: 0x52, flags: 0x0},
-       55:  {lang: 0x7d, script: 0x1e, flags: 0x0},
-       56:  {lang: 0x39, script: 0x5, flags: 0x0},
-       57:  {lang: 0x3d0, script: 0x52, flags: 0x0},
-       58:  {lang: 0x159, script: 0x52, flags: 0x0},
-       59:  {lang: 0x159, script: 0x52, flags: 0x0},
-       61:  {lang: 0x316, script: 0x52, flags: 0x0},
-       62:  {lang: 0x139, script: 0x52, flags: 0x0},
-       63:  {lang: 0x398, script: 0x52, flags: 0x0},
-       64:  {lang: 0x3b7, script: 0x52, flags: 0x0},
+       52:  {lang: 0xa5, script: 0xe, flags: 0x0},
+       53:  {lang: 0x365, script: 0x52, flags: 0x0},
+       54:  {lang: 0x15d, script: 0x52, flags: 0x0},
+       55:  {lang: 0x7e, script: 0x1e, flags: 0x0},
+       56:  {lang: 0x3a, script: 0x5, flags: 0x0},
+       57:  {lang: 0x3d7, script: 0x52, flags: 0x0},
+       58:  {lang: 0x15d, script: 0x52, flags: 0x0},
+       59:  {lang: 0x15d, script: 0x52, flags: 0x0},
+       61:  {lang: 0x31d, script: 0x52, flags: 0x0},
+       62:  {lang: 0x13d, script: 0x52, flags: 0x0},
+       63:  {lang: 0x39f, script: 0x52, flags: 0x0},
+       64:  {lang: 0x3be, script: 0x52, flags: 0x0},
        66:  {lang: 0x8, script: 0x2, flags: 0x1},
        68:  {lang: 0x0, script: 0x52, flags: 0x0},
-       70:  {lang: 0x70, script: 0x1e, flags: 0x0},
-       72:  {lang: 0x508, script: 0x37, flags: 0x2},
-       73:  {lang: 0x316, script: 0x5, flags: 0x2},
-       74:  {lang: 0x43b, script: 0x52, flags: 0x0},
-       75:  {lang: 0x159, script: 0x52, flags: 0x0},
-       76:  {lang: 0x159, script: 0x52, flags: 0x0},
-       77:  {lang: 0x109, script: 0x52, flags: 0x0},
-       78:  {lang: 0x159, script: 0x52, flags: 0x0},
-       80:  {lang: 0x139, script: 0x52, flags: 0x0},
-       81:  {lang: 0x159, script: 0x52, flags: 0x0},
+       70:  {lang: 0x71, script: 0x1e, flags: 0x0},
+       72:  {lang: 0x510, script: 0x37, flags: 0x2},
+       73:  {lang: 0x31d, script: 0x5, flags: 0x2},
+       74:  {lang: 0x443, script: 0x52, flags: 0x0},
+       75:  {lang: 0x15d, script: 0x52, flags: 0x0},
+       76:  {lang: 0x15d, script: 0x52, flags: 0x0},
+       77:  {lang: 0x10c, script: 0x52, flags: 0x0},
+       78:  {lang: 0x15d, script: 0x52, flags: 0x0},
+       80:  {lang: 0x13d, script: 0x52, flags: 0x0},
+       81:  {lang: 0x15d, script: 0x52, flags: 0x0},
        82:  {lang: 0xa, script: 0x5, flags: 0x1},
-       83:  {lang: 0x139, script: 0x52, flags: 0x0},
+       83:  {lang: 0x13d, script: 0x52, flags: 0x0},
        84:  {lang: 0x0, script: 0x52, flags: 0x0},
-       85:  {lang: 0x139, script: 0x52, flags: 0x0},
-       88:  {lang: 0x139, script: 0x52, flags: 0x0},
-       89:  {lang: 0x3b7, script: 0x52, flags: 0x0},
-       90:  {lang: 0x398, script: 0x52, flags: 0x0},
+       85:  {lang: 0x13d, script: 0x52, flags: 0x0},
+       88:  {lang: 0x13d, script: 0x52, flags: 0x0},
+       89:  {lang: 0x3be, script: 0x52, flags: 0x0},
+       90:  {lang: 0x39f, script: 0x52, flags: 0x0},
        92:  {lang: 0xf, script: 0x2, flags: 0x1},
-       93:  {lang: 0xf6, script: 0x52, flags: 0x0},
-       95:  {lang: 0x109, script: 0x52, flags: 0x0},
+       93:  {lang: 0xf9, script: 0x52, flags: 0x0},
+       95:  {lang: 0x10c, script: 0x52, flags: 0x0},
        97:  {lang: 0x1, script: 0x52, flags: 0x0},
-       98:  {lang: 0xfd, script: 0x52, flags: 0x0},
-       100: {lang: 0x139, script: 0x52, flags: 0x0},
+       98:  {lang: 0x100, script: 0x52, flags: 0x0},
+       100: {lang: 0x13d, script: 0x52, flags: 0x0},
        102: {lang: 0x11, script: 0x2, flags: 0x1},
-       103: {lang: 0x139, script: 0x52, flags: 0x0},
-       104: {lang: 0x139, script: 0x52, flags: 0x0},
-       105: {lang: 0x13b, script: 0x52, flags: 0x0},
-       106: {lang: 0x39, script: 0x5, flags: 0x0},
-       107: {lang: 0x39, script: 0x5, flags: 0x0},
-       108: {lang: 0x465, script: 0x27, flags: 0x0},
-       109: {lang: 0x139, script: 0x52, flags: 0x0},
+       103: {lang: 0x13d, script: 0x52, flags: 0x0},
+       104: {lang: 0x13d, script: 0x52, flags: 0x0},
+       105: {lang: 0x13f, script: 0x52, flags: 0x0},
+       106: {lang: 0x3a, script: 0x5, flags: 0x0},
+       107: {lang: 0x3a, script: 0x5, flags: 0x0},
+       108: {lang: 0x46d, script: 0x27, flags: 0x0},
+       109: {lang: 0x13d, script: 0x52, flags: 0x0},
        110: {lang: 0x13, script: 0x2, flags: 0x1},
-       112: {lang: 0x109, script: 0x52, flags: 0x0},
-       113: {lang: 0x14c, script: 0x52, flags: 0x0},
-       114: {lang: 0x1b9, script: 0x20, flags: 0x2},
-       117: {lang: 0x153, script: 0x52, flags: 0x0},
-       119: {lang: 0x159, script: 0x52, flags: 0x0},
-       121: {lang: 0x159, script: 0x52, flags: 0x0},
+       112: {lang: 0x10c, script: 0x52, flags: 0x0},
+       113: {lang: 0x150, script: 0x52, flags: 0x0},
+       114: {lang: 0x1be, script: 0x20, flags: 0x2},
+       117: {lang: 0x157, script: 0x52, flags: 0x0},
+       119: {lang: 0x15d, script: 0x52, flags: 0x0},
+       121: {lang: 0x15d, script: 0x52, flags: 0x0},
        122: {lang: 0x15, script: 0x2, flags: 0x1},
        124: {lang: 0x17, script: 0x3, flags: 0x1},
-       125: {lang: 0x159, script: 0x52, flags: 0x0},
-       127: {lang: 0x20, script: 0x52, flags: 0x0},
-       129: {lang: 0x23d, script: 0x52, flags: 0x0},
-       131: {lang: 0x159, script: 0x52, flags: 0x0},
-       132: {lang: 0x159, script: 0x52, flags: 0x0},
-       133: {lang: 0x139, script: 0x52, flags: 0x0},
+       125: {lang: 0x15d, script: 0x52, flags: 0x0},
+       127: {lang: 0x21, script: 0x52, flags: 0x0},
+       129: {lang: 0x243, script: 0x52, flags: 0x0},
+       131: {lang: 0x15d, script: 0x52, flags: 0x0},
+       132: {lang: 0x15d, script: 0x52, flags: 0x0},
+       133: {lang: 0x13d, script: 0x52, flags: 0x0},
        134: {lang: 0x1a, script: 0x2, flags: 0x1},
        135: {lang: 0x0, script: 0x52, flags: 0x0},
-       136: {lang: 0x139, script: 0x52, flags: 0x0},
-       138: {lang: 0x3b7, script: 0x52, flags: 0x0},
-       140: {lang: 0x51f, script: 0x35, flags: 0x0},
+       136: {lang: 0x13d, script: 0x52, flags: 0x0},
+       138: {lang: 0x3be, script: 0x52, flags: 0x0},
+       140: {lang: 0x527, script: 0x35, flags: 0x0},
        141: {lang: 0x0, script: 0x52, flags: 0x0},
-       142: {lang: 0x139, script: 0x52, flags: 0x0},
-       143: {lang: 0x1ca, script: 0x52, flags: 0x0},
-       144: {lang: 0x1cd, script: 0x52, flags: 0x0},
-       145: {lang: 0x1ce, script: 0x52, flags: 0x0},
-       147: {lang: 0x139, script: 0x52, flags: 0x0},
+       142: {lang: 0x13d, script: 0x52, flags: 0x0},
+       143: {lang: 0x1cf, script: 0x52, flags: 0x0},
+       144: {lang: 0x1d2, script: 0x52, flags: 0x0},
+       145: {lang: 0x1d3, script: 0x52, flags: 0x0},
+       147: {lang: 0x13d, script: 0x52, flags: 0x0},
        148: {lang: 0x1c, script: 0x2, flags: 0x1},
-       150: {lang: 0x1b5, script: 0x37, flags: 0x0},
+       150: {lang: 0x1ba, script: 0x37, flags: 0x0},
        152: {lang: 0x1e, script: 0x3, flags: 0x1},
-       154: {lang: 0x39, script: 0x5, flags: 0x0},
+       154: {lang: 0x3a, script: 0x5, flags: 0x0},
        155: {lang: 0x21, script: 0x2, flags: 0x1},
-       156: {lang: 0x1f0, script: 0x52, flags: 0x0},
-       157: {lang: 0x1f1, script: 0x52, flags: 0x0},
-       160: {lang: 0x39, script: 0x5, flags: 0x0},
-       161: {lang: 0x1f8, script: 0x41, flags: 0x0},
-       163: {lang: 0x43b, script: 0x52, flags: 0x0},
-       164: {lang: 0x281, script: 0x1e, flags: 0x0},
+       156: {lang: 0x1f6, script: 0x52, flags: 0x0},
+       157: {lang: 0x1f7, script: 0x52, flags: 0x0},
+       160: {lang: 0x3a, script: 0x5, flags: 0x0},
+       161: {lang: 0x1fe, script: 0x41, flags: 0x0},
+       163: {lang: 0x443, script: 0x52, flags: 0x0},
+       164: {lang: 0x288, script: 0x1e, flags: 0x0},
        165: {lang: 0x23, script: 0x3, flags: 0x1},
        167: {lang: 0x26, script: 0x2, flags: 0x1},
-       169: {lang: 0x24b, script: 0x4b, flags: 0x0},
-       170: {lang: 0x24b, script: 0x4b, flags: 0x0},
-       171: {lang: 0x39, script: 0x5, flags: 0x0},
-       173: {lang: 0x3d9, script: 0x1e, flags: 0x0},
+       169: {lang: 0x252, script: 0x4b, flags: 0x0},
+       170: {lang: 0x252, script: 0x4b, flags: 0x0},
+       171: {lang: 0x3a, script: 0x5, flags: 0x0},
+       173: {lang: 0x3e0, script: 0x1e, flags: 0x0},
        174: {lang: 0x28, script: 0x2, flags: 0x1},
-       175: {lang: 0x39, script: 0x5, flags: 0x0},
-       177: {lang: 0x109, script: 0x52, flags: 0x0},
-       178: {lang: 0x402, script: 0xc1, flags: 0x0},
-       180: {lang: 0x431, script: 0x52, flags: 0x0},
-       181: {lang: 0x2b7, script: 0x52, flags: 0x0},
-       182: {lang: 0x159, script: 0x52, flags: 0x0},
-       183: {lang: 0x2be, script: 0x52, flags: 0x0},
-       184: {lang: 0x39, script: 0x5, flags: 0x0},
+       175: {lang: 0x3a, script: 0x5, flags: 0x0},
+       177: {lang: 0x10c, script: 0x52, flags: 0x0},
+       178: {lang: 0x40a, script: 0xc1, flags: 0x0},
+       180: {lang: 0x439, script: 0x52, flags: 0x0},
+       181: {lang: 0x2be, script: 0x52, flags: 0x0},
+       182: {lang: 0x15d, script: 0x52, flags: 0x0},
+       183: {lang: 0x2c5, script: 0x52, flags: 0x0},
+       184: {lang: 0x3a, script: 0x5, flags: 0x0},
        185: {lang: 0x2a, script: 0x2, flags: 0x1},
-       186: {lang: 0x159, script: 0x52, flags: 0x0},
+       186: {lang: 0x15d, script: 0x52, flags: 0x0},
        187: {lang: 0x2c, script: 0x2, flags: 0x1},
-       188: {lang: 0x428, script: 0x52, flags: 0x0},
-       189: {lang: 0x159, script: 0x52, flags: 0x0},
-       190: {lang: 0x2e8, script: 0x52, flags: 0x0},
+       188: {lang: 0x430, script: 0x52, flags: 0x0},
+       189: {lang: 0x15d, script: 0x52, flags: 0x0},
+       190: {lang: 0x2ef, script: 0x52, flags: 0x0},
        193: {lang: 0x2e, script: 0x2, flags: 0x1},
-       194: {lang: 0x9e, script: 0x52, flags: 0x0},
+       194: {lang: 0xa0, script: 0x52, flags: 0x0},
        195: {lang: 0x30, script: 0x2, flags: 0x1},
        196: {lang: 0x32, script: 0x2, flags: 0x1},
        197: {lang: 0x34, script: 0x2, flags: 0x1},
-       199: {lang: 0x159, script: 0x52, flags: 0x0},
+       199: {lang: 0x15d, script: 0x52, flags: 0x0},
        200: {lang: 0x36, script: 0x2, flags: 0x1},
-       202: {lang: 0x317, script: 0x52, flags: 0x0},
+       202: {lang: 0x31e, script: 0x52, flags: 0x0},
        203: {lang: 0x38, script: 0x3, flags: 0x1},
-       204: {lang: 0x124, script: 0xd4, flags: 0x0},
-       206: {lang: 0x139, script: 0x52, flags: 0x0},
-       207: {lang: 0x316, script: 0x52, flags: 0x0},
-       208: {lang: 0x3b7, script: 0x52, flags: 0x0},
-       209: {lang: 0x15, script: 0x52, flags: 0x0},
-       210: {lang: 0x159, script: 0x52, flags: 0x0},
-       211: {lang: 0x1ad, script: 0x52, flags: 0x0},
-       213: {lang: 0x1ad, script: 0x5, flags: 0x2},
-       215: {lang: 0x139, script: 0x52, flags: 0x0},
-       216: {lang: 0x35e, script: 0x52, flags: 0x0},
-       217: {lang: 0x33e, script: 0x52, flags: 0x0},
-       218: {lang: 0x348, script: 0x20, flags: 0x0},
-       224: {lang: 0x39, script: 0x5, flags: 0x0},
-       225: {lang: 0x139, script: 0x52, flags: 0x0},
-       227: {lang: 0x139, script: 0x52, flags: 0x0},
-       228: {lang: 0x159, script: 0x52, flags: 0x0},
-       229: {lang: 0x47c, script: 0x52, flags: 0x0},
-       230: {lang: 0x14e, script: 0x52, flags: 0x0},
+       204: {lang: 0x127, script: 0xd4, flags: 0x0},
+       206: {lang: 0x13d, script: 0x52, flags: 0x0},
+       207: {lang: 0x31d, script: 0x52, flags: 0x0},
+       208: {lang: 0x3be, script: 0x52, flags: 0x0},
+       209: {lang: 0x16, script: 0x52, flags: 0x0},
+       210: {lang: 0x15d, script: 0x52, flags: 0x0},
+       211: {lang: 0x1b2, script: 0x52, flags: 0x0},
+       213: {lang: 0x1b2, script: 0x5, flags: 0x2},
+       215: {lang: 0x13d, script: 0x52, flags: 0x0},
+       216: {lang: 0x365, script: 0x52, flags: 0x0},
+       217: {lang: 0x345, script: 0x52, flags: 0x0},
+       218: {lang: 0x34f, script: 0x20, flags: 0x0},
+       224: {lang: 0x3a, script: 0x5, flags: 0x0},
+       225: {lang: 0x13d, script: 0x52, flags: 0x0},
+       227: {lang: 0x13d, script: 0x52, flags: 0x0},
+       228: {lang: 0x15d, script: 0x52, flags: 0x0},
+       229: {lang: 0x484, script: 0x52, flags: 0x0},
+       230: {lang: 0x152, script: 0x52, flags: 0x0},
        231: {lang: 0x3b, script: 0x3, flags: 0x1},
-       232: {lang: 0x3e, script: 0x2, flags: 0x1},
-       233: {lang: 0x159, script: 0x52, flags: 0x0},
-       235: {lang: 0x139, script: 0x52, flags: 0x0},
-       236: {lang: 0x39, script: 0x5, flags: 0x0},
-       237: {lang: 0x3b7, script: 0x52, flags: 0x0},
-       239: {lang: 0x399, script: 0x52, flags: 0x0},
-       240: {lang: 0x18e, script: 0x52, flags: 0x0},
-       242: {lang: 0x39, script: 0x5, flags: 0x0},
-       257: {lang: 0x159, script: 0x52, flags: 0x0},
-       259: {lang: 0x40, script: 0x2, flags: 0x1},
-       260: {lang: 0x428, script: 0x1e, flags: 0x0},
-       261: {lang: 0x42, script: 0x2, flags: 0x1},
-       262: {lang: 0x3dc, script: 0x52, flags: 0x0},
-       263: {lang: 0x39, script: 0x5, flags: 0x0},
-       265: {lang: 0x159, script: 0x52, flags: 0x0},
-       266: {lang: 0x39, script: 0x5, flags: 0x0},
-       267: {lang: 0x44, script: 0x2, flags: 0x1},
-       270: {lang: 0x40c, script: 0x52, flags: 0x0},
-       271: {lang: 0x33e, script: 0x52, flags: 0x0},
-       272: {lang: 0x46, script: 0x2, flags: 0x1},
-       274: {lang: 0x1f1, script: 0x52, flags: 0x0},
-       275: {lang: 0x159, script: 0x52, flags: 0x0},
-       276: {lang: 0x41f, script: 0x52, flags: 0x0},
-       277: {lang: 0x35e, script: 0x52, flags: 0x0},
-       279: {lang: 0x3b7, script: 0x52, flags: 0x0},
-       281: {lang: 0x139, script: 0x52, flags: 0x0},
-       283: {lang: 0x48, script: 0x2, flags: 0x1},
-       287: {lang: 0x159, script: 0x52, flags: 0x0},
-       288: {lang: 0x159, script: 0x52, flags: 0x0},
-       289: {lang: 0x4a, script: 0x2, flags: 0x1},
-       290: {lang: 0x4c, script: 0x3, flags: 0x1},
-       291: {lang: 0x4f, script: 0x2, flags: 0x1},
-       292: {lang: 0x46d, script: 0x52, flags: 0x0},
-       293: {lang: 0x3b7, script: 0x52, flags: 0x0},
-       294: {lang: 0x46c, script: 0x52, flags: 0x0},
-       295: {lang: 0x51, script: 0x2, flags: 0x1},
-       296: {lang: 0x478, script: 0x52, flags: 0x0},
-       298: {lang: 0x53, script: 0x4, flags: 0x1},
-       300: {lang: 0x496, script: 0x52, flags: 0x0},
-       301: {lang: 0x57, script: 0x2, flags: 0x1},
-       302: {lang: 0x43b, script: 0x52, flags: 0x0},
-       303: {lang: 0x59, script: 0x3, flags: 0x1},
-       304: {lang: 0x43b, script: 0x52, flags: 0x0},
-       308: {lang: 0x508, script: 0x37, flags: 0x2},
-       309: {lang: 0x139, script: 0x52, flags: 0x0},
-       310: {lang: 0x4b2, script: 0x52, flags: 0x0},
-       311: {lang: 0x1f1, script: 0x52, flags: 0x0},
-       314: {lang: 0x139, script: 0x52, flags: 0x0},
-       317: {lang: 0x4b9, script: 0x52, flags: 0x0},
-       318: {lang: 0x89, script: 0x52, flags: 0x0},
-       319: {lang: 0x159, script: 0x52, flags: 0x0},
-       321: {lang: 0x411, script: 0x52, flags: 0x0},
-       332: {lang: 0x5c, script: 0x2, flags: 0x1},
-       349: {lang: 0x39, script: 0x5, flags: 0x0},
-       350: {lang: 0x5e, script: 0x2, flags: 0x1},
-       355: {lang: 0x419, script: 0x52, flags: 0x0},
+       232: {lang: 0x3b1, script: 0x52, flags: 0x0},
+       233: {lang: 0x15d, script: 0x52, flags: 0x0},
+       235: {lang: 0x13d, script: 0x52, flags: 0x0},
+       236: {lang: 0x3a, script: 0x5, flags: 0x0},
+       237: {lang: 0x3be, script: 0x52, flags: 0x0},
+       239: {lang: 0x3a0, script: 0x52, flags: 0x0},
+       240: {lang: 0x192, script: 0x52, flags: 0x0},
+       242: {lang: 0x3a, script: 0x5, flags: 0x0},
+       257: {lang: 0x15d, script: 0x52, flags: 0x0},
+       259: {lang: 0x3e, script: 0x2, flags: 0x1},
+       260: {lang: 0x430, script: 0x1e, flags: 0x0},
+       261: {lang: 0x40, script: 0x2, flags: 0x1},
+       262: {lang: 0x3e3, script: 0x52, flags: 0x0},
+       263: {lang: 0x3a, script: 0x5, flags: 0x0},
+       265: {lang: 0x15d, script: 0x52, flags: 0x0},
+       266: {lang: 0x3a, script: 0x5, flags: 0x0},
+       267: {lang: 0x42, script: 0x2, flags: 0x1},
+       270: {lang: 0x414, script: 0x52, flags: 0x0},
+       271: {lang: 0x345, script: 0x52, flags: 0x0},
+       272: {lang: 0x44, script: 0x2, flags: 0x1},
+       274: {lang: 0x1f7, script: 0x52, flags: 0x0},
+       275: {lang: 0x15d, script: 0x52, flags: 0x0},
+       276: {lang: 0x427, script: 0x52, flags: 0x0},
+       277: {lang: 0x365, script: 0x52, flags: 0x0},
+       279: {lang: 0x3be, script: 0x52, flags: 0x0},
+       281: {lang: 0x13d, script: 0x52, flags: 0x0},
+       283: {lang: 0x46, script: 0x2, flags: 0x1},
+       287: {lang: 0x15d, script: 0x52, flags: 0x0},
+       288: {lang: 0x15d, script: 0x52, flags: 0x0},
+       289: {lang: 0x48, script: 0x2, flags: 0x1},
+       290: {lang: 0x4a, script: 0x3, flags: 0x1},
+       291: {lang: 0x4d, script: 0x2, flags: 0x1},
+       292: {lang: 0x475, script: 0x52, flags: 0x0},
+       293: {lang: 0x3be, script: 0x52, flags: 0x0},
+       294: {lang: 0x474, script: 0x52, flags: 0x0},
+       295: {lang: 0x4f, script: 0x2, flags: 0x1},
+       296: {lang: 0x480, script: 0x52, flags: 0x0},
+       298: {lang: 0x51, script: 0x4, flags: 0x1},
+       300: {lang: 0x49e, script: 0x52, flags: 0x0},
+       301: {lang: 0x55, script: 0x2, flags: 0x1},
+       302: {lang: 0x443, script: 0x52, flags: 0x0},
+       303: {lang: 0x57, script: 0x3, flags: 0x1},
+       304: {lang: 0x443, script: 0x52, flags: 0x0},
+       308: {lang: 0x510, script: 0x37, flags: 0x2},
+       309: {lang: 0x13d, script: 0x52, flags: 0x0},
+       310: {lang: 0x4ba, script: 0x52, flags: 0x0},
+       311: {lang: 0x1f7, script: 0x52, flags: 0x0},
+       314: {lang: 0x13d, script: 0x52, flags: 0x0},
+       317: {lang: 0x4c1, script: 0x52, flags: 0x0},
+       318: {lang: 0x8a, script: 0x52, flags: 0x0},
+       319: {lang: 0x15d, script: 0x52, flags: 0x0},
+       321: {lang: 0x419, script: 0x52, flags: 0x0},
+       332: {lang: 0x5a, script: 0x2, flags: 0x1},
+       349: {lang: 0x3a, script: 0x5, flags: 0x0},
+       350: {lang: 0x5c, script: 0x2, flags: 0x1},
+       355: {lang: 0x421, script: 0x52, flags: 0x0},
 }
 
 // likelyRegionList holds lists info associated with likelyRegion.
-// Size: 384 bytes, 96 elements
-var likelyRegionList = [96]likelyLangScript{
-       0:  {lang: 0x143, script: 0x5, flags: 0x0},
-       1:  {lang: 0x46c, script: 0x52, flags: 0x0},
-       2:  {lang: 0x427, script: 0x52, flags: 0x0},
-       3:  {lang: 0x2f6, script: 0x1e, flags: 0x0},
-       4:  {lang: 0x1d0, script: 0x8, flags: 0x0},
-       5:  {lang: 0x26b, script: 0x52, flags: 0x0},
-       6:  {lang: 0xb5, script: 0x52, flags: 0x0},
-       7:  {lang: 0x428, script: 0x1e, flags: 0x0},
-       8:  {lang: 0x129, script: 0xd6, flags: 0x0},
-       9:  {lang: 0x348, script: 0x20, flags: 0x0},
-       10: {lang: 0x51f, script: 0x34, flags: 0x0},
-       11: {lang: 0x4a2, script: 0x5, flags: 0x0},
-       12: {lang: 0x515, script: 0x35, flags: 0x0},
-       13: {lang: 0x519, script: 0x52, flags: 0x0},
-       14: {lang: 0x291, script: 0xd5, flags: 0x0},
-       15: {lang: 0x131, script: 0x2d, flags: 0x0},
-       16: {lang: 0x480, script: 0x52, flags: 0x0},
-       17: {lang: 0x39, script: 0x5, flags: 0x0},
-       18: {lang: 0x159, script: 0x52, flags: 0x0},
-       19: {lang: 0x26, script: 0x27, flags: 0x0},
-       20: {lang: 0x134, script: 0x52, flags: 0x0},
-       21: {lang: 0x261, script: 0x5, flags: 0x2},
-       22: {lang: 0x508, script: 0x37, flags: 0x2},
-       23: {lang: 0x208, script: 0x29, flags: 0x0},
+// Size: 376 bytes, 94 elements
+var likelyRegionList = [94]likelyLangScript{
+       0:  {lang: 0x147, script: 0x5, flags: 0x0},
+       1:  {lang: 0x474, script: 0x52, flags: 0x0},
+       2:  {lang: 0x42f, script: 0x52, flags: 0x0},
+       3:  {lang: 0x2fd, script: 0x1e, flags: 0x0},
+       4:  {lang: 0x1d5, script: 0x8, flags: 0x0},
+       5:  {lang: 0x272, script: 0x52, flags: 0x0},
+       6:  {lang: 0xb7, script: 0x52, flags: 0x0},
+       7:  {lang: 0x430, script: 0x1e, flags: 0x0},
+       8:  {lang: 0x12c, script: 0xd6, flags: 0x0},
+       9:  {lang: 0x34f, script: 0x20, flags: 0x0},
+       10: {lang: 0x527, script: 0x34, flags: 0x0},
+       11: {lang: 0x4aa, script: 0x5, flags: 0x0},
+       12: {lang: 0x51d, script: 0x35, flags: 0x0},
+       13: {lang: 0x521, script: 0x52, flags: 0x0},
+       14: {lang: 0x298, script: 0xd5, flags: 0x0},
+       15: {lang: 0x135, script: 0x2d, flags: 0x0},
+       16: {lang: 0x488, script: 0x52, flags: 0x0},
+       17: {lang: 0x3a, script: 0x5, flags: 0x0},
+       18: {lang: 0x15d, script: 0x52, flags: 0x0},
+       19: {lang: 0x27, script: 0x27, flags: 0x0},
+       20: {lang: 0x138, script: 0x52, flags: 0x0},
+       21: {lang: 0x268, script: 0x5, flags: 0x2},
+       22: {lang: 0x510, script: 0x37, flags: 0x2},
+       23: {lang: 0x20e, script: 0x29, flags: 0x0},
        24: {lang: 0x5, script: 0x1e, flags: 0x0},
-       25: {lang: 0x26b, script: 0x52, flags: 0x0},
-       26: {lang: 0x131, script: 0x2d, flags: 0x0},
-       27: {lang: 0x2f6, script: 0x1e, flags: 0x0},
-       28: {lang: 0x1da, script: 0x52, flags: 0x0},
-       29: {lang: 0x316, script: 0x5, flags: 0x0},
-       30: {lang: 0x1b7, script: 0x20, flags: 0x0},
-       31: {lang: 0x4aa, script: 0x5, flags: 0x0},
-       32: {lang: 0x22e, script: 0x6b, flags: 0x0},
-       33: {lang: 0x143, script: 0x5, flags: 0x0},
-       34: {lang: 0x46c, script: 0x52, flags: 0x0},
-       35: {lang: 0x242, script: 0x46, flags: 0x0},
-       36: {lang: 0xe4, script: 0x5, flags: 0x0},
-       37: {lang: 0x21e, script: 0xd5, flags: 0x0},
-       38: {lang: 0x39, script: 0x5, flags: 0x0},
-       39: {lang: 0x159, script: 0x52, flags: 0x0},
-       40: {lang: 0x2af, script: 0x4f, flags: 0x0},
-       41: {lang: 0x21e, script: 0xd5, flags: 0x0},
-       42: {lang: 0x39, script: 0x5, flags: 0x0},
-       43: {lang: 0x159, script: 0x52, flags: 0x0},
-       44: {lang: 0x3d3, script: 0x52, flags: 0x0},
-       45: {lang: 0x4a4, script: 0x1e, flags: 0x0},
-       46: {lang: 0x2f6, script: 0x1e, flags: 0x0},
-       47: {lang: 0x427, script: 0x52, flags: 0x0},
-       48: {lang: 0x328, script: 0x6b, flags: 0x0},
-       49: {lang: 0x20b, script: 0x52, flags: 0x0},
-       50: {lang: 0x302, script: 0x1e, flags: 0x0},
-       51: {lang: 0x23a, script: 0x5, flags: 0x0},
-       52: {lang: 0x51f, script: 0x35, flags: 0x0},
-       53: {lang: 0x3b7, script: 0x52, flags: 0x0},
-       54: {lang: 0x39, script: 0x5, flags: 0x0},
-       55: {lang: 0x159, script: 0x52, flags: 0x0},
-       56: {lang: 0x2e4, script: 0x52, flags: 0x0},
-       57: {lang: 0x4aa, script: 0x5, flags: 0x0},
-       58: {lang: 0x87, script: 0x20, flags: 0x0},
-       59: {lang: 0x4aa, script: 0x5, flags: 0x0},
-       60: {lang: 0x4aa, script: 0x5, flags: 0x0},
-       61: {lang: 0xbc, script: 0x20, flags: 0x0},
-       62: {lang: 0x3aa, script: 0x52, flags: 0x0},
-       63: {lang: 0x70, script: 0x1e, flags: 0x0},
-       64: {lang: 0x3d3, script: 0x52, flags: 0x0},
-       65: {lang: 0x7d, script: 0x1e, flags: 0x0},
-       66: {lang: 0x3d9, script: 0x1e, flags: 0x0},
-       67: {lang: 0x25e, script: 0x52, flags: 0x0},
-       68: {lang: 0x43a, script: 0x52, flags: 0x0},
-       69: {lang: 0x508, script: 0x37, flags: 0x0},
-       70: {lang: 0x408, script: 0x52, flags: 0x0},
-       71: {lang: 0x4a4, script: 0x1e, flags: 0x0},
-       72: {lang: 0x39, script: 0x5, flags: 0x0},
-       73: {lang: 0x159, script: 0x52, flags: 0x0},
-       74: {lang: 0x159, script: 0x52, flags: 0x0},
-       75: {lang: 0x34, script: 0x5, flags: 0x0},
-       76: {lang: 0x461, script: 0xd5, flags: 0x0},
-       77: {lang: 0x2e3, script: 0x5, flags: 0x0},
-       78: {lang: 0x306, script: 0x6b, flags: 0x0},
-       79: {lang: 0x45d, script: 0x1e, flags: 0x0},
-       80: {lang: 0x143, script: 0x5, flags: 0x0},
-       81: {lang: 0x39, script: 0x5, flags: 0x0},
-       82: {lang: 0x159, script: 0x52, flags: 0x0},
-       83: {lang: 0x480, script: 0x52, flags: 0x0},
-       84: {lang: 0x57, script: 0x5, flags: 0x0},
-       85: {lang: 0x211, script: 0x1e, flags: 0x0},
-       86: {lang: 0x80, script: 0x2d, flags: 0x0},
-       87: {lang: 0x51f, script: 0x35, flags: 0x0},
-       88: {lang: 0x482, script: 0x52, flags: 0x0},
-       89: {lang: 0x4a4, script: 0x1e, flags: 0x0},
-       90: {lang: 0x508, script: 0x37, flags: 0x0},
-       91: {lang: 0x3aa, script: 0x52, flags: 0x0},
-       92: {lang: 0x427, script: 0x52, flags: 0x0},
-       93: {lang: 0x428, script: 0x1e, flags: 0x0},
-       94: {lang: 0x159, script: 0x52, flags: 0x0},
-       95: {lang: 0x43c, script: 0x5, flags: 0x0},
+       25: {lang: 0x272, script: 0x52, flags: 0x0},
+       26: {lang: 0x135, script: 0x2d, flags: 0x0},
+       27: {lang: 0x2fd, script: 0x1e, flags: 0x0},
+       28: {lang: 0x1df, script: 0x52, flags: 0x0},
+       29: {lang: 0x31d, script: 0x5, flags: 0x0},
+       30: {lang: 0x1bc, script: 0x20, flags: 0x0},
+       31: {lang: 0x4b2, script: 0x5, flags: 0x0},
+       32: {lang: 0x234, script: 0x6b, flags: 0x0},
+       33: {lang: 0x147, script: 0x5, flags: 0x0},
+       34: {lang: 0x474, script: 0x52, flags: 0x0},
+       35: {lang: 0x248, script: 0x46, flags: 0x0},
+       36: {lang: 0xe6, script: 0x5, flags: 0x0},
+       37: {lang: 0x224, script: 0xd5, flags: 0x0},
+       38: {lang: 0x3a, script: 0x5, flags: 0x0},
+       39: {lang: 0x15d, script: 0x52, flags: 0x0},
+       40: {lang: 0x2b6, script: 0x4f, flags: 0x0},
+       41: {lang: 0x224, script: 0xd5, flags: 0x0},
+       42: {lang: 0x3a, script: 0x5, flags: 0x0},
+       43: {lang: 0x15d, script: 0x52, flags: 0x0},
+       44: {lang: 0x3da, script: 0x52, flags: 0x0},
+       45: {lang: 0x4ac, script: 0x1e, flags: 0x0},
+       46: {lang: 0x2fd, script: 0x1e, flags: 0x0},
+       47: {lang: 0x42f, script: 0x52, flags: 0x0},
+       48: {lang: 0x32f, script: 0x6b, flags: 0x0},
+       49: {lang: 0x211, script: 0x52, flags: 0x0},
+       50: {lang: 0x309, script: 0x1e, flags: 0x0},
+       51: {lang: 0x240, script: 0x5, flags: 0x0},
+       52: {lang: 0x527, script: 0x35, flags: 0x0},
+       53: {lang: 0x3be, script: 0x52, flags: 0x0},
+       54: {lang: 0x3a, script: 0x5, flags: 0x0},
+       55: {lang: 0x15d, script: 0x52, flags: 0x0},
+       56: {lang: 0x2eb, script: 0x52, flags: 0x0},
+       57: {lang: 0x4b2, script: 0x5, flags: 0x0},
+       58: {lang: 0x88, script: 0x20, flags: 0x0},
+       59: {lang: 0x4b2, script: 0x5, flags: 0x0},
+       60: {lang: 0x4b2, script: 0x5, flags: 0x0},
+       61: {lang: 0xbe, script: 0x20, flags: 0x0},
+       62: {lang: 0x3da, script: 0x52, flags: 0x0},
+       63: {lang: 0x7e, script: 0x1e, flags: 0x0},
+       64: {lang: 0x3e0, script: 0x1e, flags: 0x0},
+       65: {lang: 0x265, script: 0x52, flags: 0x0},
+       66: {lang: 0x442, script: 0x52, flags: 0x0},
+       67: {lang: 0x510, script: 0x37, flags: 0x0},
+       68: {lang: 0x410, script: 0x52, flags: 0x0},
+       69: {lang: 0x4ac, script: 0x1e, flags: 0x0},
+       70: {lang: 0x3a, script: 0x5, flags: 0x0},
+       71: {lang: 0x15d, script: 0x52, flags: 0x0},
+       72: {lang: 0x15d, script: 0x52, flags: 0x0},
+       73: {lang: 0x35, script: 0x5, flags: 0x0},
+       74: {lang: 0x469, script: 0xd5, flags: 0x0},
+       75: {lang: 0x2ea, script: 0x5, flags: 0x0},
+       76: {lang: 0x30d, script: 0x6b, flags: 0x0},
+       77: {lang: 0x465, script: 0x1e, flags: 0x0},
+       78: {lang: 0x147, script: 0x5, flags: 0x0},
+       79: {lang: 0x3a, script: 0x5, flags: 0x0},
+       80: {lang: 0x15d, script: 0x52, flags: 0x0},
+       81: {lang: 0x488, script: 0x52, flags: 0x0},
+       82: {lang: 0x58, script: 0x5, flags: 0x0},
+       83: {lang: 0x217, script: 0x1e, flags: 0x0},
+       84: {lang: 0x81, script: 0x2d, flags: 0x0},
+       85: {lang: 0x527, script: 0x35, flags: 0x0},
+       86: {lang: 0x48a, script: 0x52, flags: 0x0},
+       87: {lang: 0x4ac, script: 0x1e, flags: 0x0},
+       88: {lang: 0x510, script: 0x37, flags: 0x0},
+       89: {lang: 0x3b1, script: 0x52, flags: 0x0},
+       90: {lang: 0x42f, script: 0x52, flags: 0x0},
+       91: {lang: 0x430, script: 0x1e, flags: 0x0},
+       92: {lang: 0x15d, script: 0x52, flags: 0x0},
+       93: {lang: 0x444, script: 0x5, flags: 0x0},
 }
 
 type likelyTag struct {
@@ -3230,186 +3236,287 @@ type likelyTag struct {
 
 // Size: 192 bytes, 32 elements
 var likelyRegionGroup = [32]likelyTag{
-       1:  {lang: 0x134, region: 0xd5, script: 0x52},
-       2:  {lang: 0x134, region: 0x134, script: 0x52},
-       3:  {lang: 0x3b7, region: 0x40, script: 0x52},
-       4:  {lang: 0x134, region: 0x2e, script: 0x52},
-       5:  {lang: 0x134, region: 0xd5, script: 0x52},
-       6:  {lang: 0x139, region: 0xce, script: 0x52},
-       7:  {lang: 0x43b, region: 0x12e, script: 0x52},
-       8:  {lang: 0x39, region: 0x6a, script: 0x5},
-       9:  {lang: 0x43b, region: 0x4a, script: 0x52},
-       10: {lang: 0x134, region: 0x160, script: 0x52},
-       11: {lang: 0x134, region: 0x134, script: 0x52},
-       12: {lang: 0x134, region: 0x134, script: 0x52},
-       13: {lang: 0x139, region: 0x58, script: 0x52},
-       14: {lang: 0x51f, region: 0x52, script: 0x34},
-       15: {lang: 0x1b7, region: 0x98, script: 0x20},
-       16: {lang: 0x1da, region: 0x94, script: 0x52},
-       17: {lang: 0x1f1, region: 0x9d, script: 0x52},
-       18: {lang: 0x134, region: 0x2e, script: 0x52},
-       19: {lang: 0x134, region: 0xe5, script: 0x52},
-       20: {lang: 0x134, region: 0x89, script: 0x52},
-       21: {lang: 0x411, region: 0x141, script: 0x52},
-       22: {lang: 0x51f, region: 0x52, script: 0x34},
-       23: {lang: 0x4b2, region: 0x136, script: 0x52},
-       24: {lang: 0x39, region: 0x107, script: 0x5},
-       25: {lang: 0x3d9, region: 0x105, script: 0x1e},
-       26: {lang: 0x3d9, region: 0x105, script: 0x1e},
-       27: {lang: 0x134, region: 0x7a, script: 0x52},
-       28: {lang: 0x109, region: 0x5f, script: 0x52},
-       29: {lang: 0x139, region: 0x1e, script: 0x52},
-       30: {lang: 0x134, region: 0x99, script: 0x52},
-       31: {lang: 0x134, region: 0x7a, script: 0x52},
+       1:  {lang: 0x138, region: 0xd5, script: 0x52},
+       2:  {lang: 0x138, region: 0x134, script: 0x52},
+       3:  {lang: 0x3be, region: 0x40, script: 0x52},
+       4:  {lang: 0x138, region: 0x2e, script: 0x52},
+       5:  {lang: 0x138, region: 0xd5, script: 0x52},
+       6:  {lang: 0x13d, region: 0xce, script: 0x52},
+       7:  {lang: 0x443, region: 0x12e, script: 0x52},
+       8:  {lang: 0x3a, region: 0x6a, script: 0x5},
+       9:  {lang: 0x443, region: 0x4a, script: 0x52},
+       10: {lang: 0x138, region: 0x160, script: 0x52},
+       11: {lang: 0x138, region: 0x134, script: 0x52},
+       12: {lang: 0x138, region: 0x134, script: 0x52},
+       13: {lang: 0x13d, region: 0x58, script: 0x52},
+       14: {lang: 0x527, region: 0x52, script: 0x34},
+       15: {lang: 0x1bc, region: 0x98, script: 0x20},
+       16: {lang: 0x1df, region: 0x94, script: 0x52},
+       17: {lang: 0x1f7, region: 0x9d, script: 0x52},
+       18: {lang: 0x138, region: 0x2e, script: 0x52},
+       19: {lang: 0x138, region: 0xe5, script: 0x52},
+       20: {lang: 0x138, region: 0x89, script: 0x52},
+       21: {lang: 0x419, region: 0x141, script: 0x52},
+       22: {lang: 0x527, region: 0x52, script: 0x34},
+       23: {lang: 0x4ba, region: 0x136, script: 0x52},
+       24: {lang: 0x3a, region: 0x107, script: 0x5},
+       25: {lang: 0x3e0, region: 0x105, script: 0x1e},
+       26: {lang: 0x3e0, region: 0x105, script: 0x1e},
+       27: {lang: 0x138, region: 0x7a, script: 0x52},
+       28: {lang: 0x10c, region: 0x5f, script: 0x52},
+       29: {lang: 0x13d, region: 0x1e, script: 0x52},
+       30: {lang: 0x138, region: 0x99, script: 0x52},
+       31: {lang: 0x138, region: 0x7a, script: 0x52},
+}
+
+// Size: 357 bytes, 357 elements
+var regionToGroups = [357]uint8{
+       // Entry 0 - 3F
+       0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04,
+       0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00,
+       0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x04,
+       0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x04, 0x04,
+       // Entry 40 - 7F
+       0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+       0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x04, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00,
+       0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x08, 0x00,
+       0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00,
+       // Entry 80 - BF
+       0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+       0x04, 0x01, 0x00, 0x04, 0x02, 0x00, 0x04, 0x00,
+       0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+       0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x08, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01,
+       // Entry C0 - FF
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x04,
+       0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x04, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
+       0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       // Entry 100 - 13F
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+       0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
+       0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x01, 0x00, 0x05, 0x04, 0x00, 0x00,
+       0x04, 0x00, 0x04, 0x04, 0x05, 0x00, 0x00, 0x00,
+       // Entry 140 - 17F
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00,
 }
 
 type mutualIntelligibility struct {
-       want   uint16
-       have   uint16
-       conf   uint8
-       oneway bool
+       want     uint16
+       have     uint16
+       distance uint8
+       oneway   bool
 }
 
 type scriptIntelligibility struct {
-       lang uint16
-       want uint8
-       have uint8
-       conf uint8
+       wantLang   uint16
+       haveLang   uint16
+       wantScript uint8
+       haveScript uint8
+       distance   uint8
+}
+
+type regionIntelligibility struct {
+       lang     uint16
+       script   uint8
+       group    uint8
+       distance uint8
 }
 
 // matchLang holds pairs of langIDs of base languages that are typically
 // mutually intelligible. Each pair is associated with a confidence and
 // whether the intelligibility goes one or both ways.
-// Size: 708 bytes, 118 elements
-var matchLang = [118]mutualIntelligibility{
-       0:   {want: 0x366, have: 0x33e, conf: 0x2, oneway: false},
-       1:   {want: 0x26b, have: 0xe7, conf: 0x2, oneway: false},
-       2:   {want: 0x1ca, have: 0xb5, conf: 0x2, oneway: false},
-       3:   {want: 0x3fd, have: 0xb5, conf: 0x2, oneway: false},
-       4:   {want: 0x428, have: 0xb5, conf: 0x2, oneway: false},
-       5:   {want: 0x3fd, have: 0x1ca, conf: 0x2, oneway: false},
-       6:   {want: 0x428, have: 0x1ca, conf: 0x2, oneway: false},
-       7:   {want: 0x3fd, have: 0x428, conf: 0x2, oneway: false},
-       8:   {want: 0x430, have: 0x1, conf: 0x2, oneway: false},
-       9:   {want: 0x19c, have: 0x109, conf: 0x2, oneway: true},
-       10:  {want: 0x28c, have: 0x109, conf: 0x2, oneway: true},
-       11:  {want: 0xfd, have: 0x366, conf: 0x2, oneway: false},
-       12:  {want: 0xfd, have: 0x33e, conf: 0x2, oneway: false},
-       13:  {want: 0xe7, have: 0x26b, conf: 0x2, oneway: false},
-       14:  {want: 0x5, have: 0x3d9, conf: 0x2, oneway: true},
-       15:  {want: 0xc, have: 0x134, conf: 0x2, oneway: true},
-       16:  {want: 0x15, have: 0x35e, conf: 0x2, oneway: true},
-       17:  {want: 0x20, have: 0x134, conf: 0x2, oneway: true},
-       18:  {want: 0x55, have: 0x139, conf: 0x2, oneway: true},
-       19:  {want: 0x57, have: 0x3d9, conf: 0x2, oneway: true},
-       20:  {want: 0x70, have: 0x3d9, conf: 0x2, oneway: true},
-       21:  {want: 0x74, have: 0x134, conf: 0x2, oneway: true},
-       22:  {want: 0x81, have: 0x1b7, conf: 0x2, oneway: true},
-       23:  {want: 0xa3, have: 0x134, conf: 0x2, oneway: true},
-       24:  {want: 0xb0, have: 0x159, conf: 0x2, oneway: true},
-       25:  {want: 0xdb, have: 0x14e, conf: 0x2, oneway: true},
-       26:  {want: 0xe3, have: 0x134, conf: 0x2, oneway: true},
-       27:  {want: 0xe7, have: 0x39, conf: 0x2, oneway: true},
-       28:  {want: 0xed, have: 0x159, conf: 0x2, oneway: true},
-       29:  {want: 0xf5, have: 0x159, conf: 0x2, oneway: true},
-       30:  {want: 0xfc, have: 0x134, conf: 0x2, oneway: true},
-       31:  {want: 0x12c, have: 0x134, conf: 0x2, oneway: true},
-       32:  {want: 0x137, have: 0x134, conf: 0x2, oneway: true},
-       33:  {want: 0x13b, have: 0x14c, conf: 0x2, oneway: true},
-       34:  {want: 0x140, have: 0x139, conf: 0x2, oneway: true},
-       35:  {want: 0x153, have: 0xfd, conf: 0x2, oneway: true},
-       36:  {want: 0x168, have: 0x35e, conf: 0x2, oneway: true},
-       37:  {want: 0x169, have: 0x134, conf: 0x2, oneway: true},
-       38:  {want: 0x16a, have: 0x134, conf: 0x2, oneway: true},
-       39:  {want: 0x178, have: 0x134, conf: 0x2, oneway: true},
-       40:  {want: 0x18a, have: 0x139, conf: 0x2, oneway: true},
-       41:  {want: 0x18e, have: 0x139, conf: 0x2, oneway: true},
-       42:  {want: 0x19d, have: 0x1b7, conf: 0x2, oneway: true},
-       43:  {want: 0x1ad, have: 0x134, conf: 0x2, oneway: true},
-       44:  {want: 0x1b1, have: 0x134, conf: 0x2, oneway: true},
-       45:  {want: 0x1cd, have: 0x159, conf: 0x2, oneway: true},
-       46:  {want: 0x1d0, have: 0x3d9, conf: 0x2, oneway: true},
-       47:  {want: 0x1d2, have: 0x134, conf: 0x2, oneway: true},
-       48:  {want: 0x1df, have: 0x134, conf: 0x2, oneway: true},
-       49:  {want: 0x1f0, have: 0x134, conf: 0x2, oneway: true},
-       50:  {want: 0x206, have: 0x1da, conf: 0x2, oneway: true},
-       51:  {want: 0x208, have: 0x134, conf: 0x2, oneway: true},
-       52:  {want: 0x225, have: 0x159, conf: 0x2, oneway: true},
-       53:  {want: 0x23a, have: 0x3d9, conf: 0x2, oneway: true},
-       54:  {want: 0x242, have: 0x134, conf: 0x2, oneway: true},
-       55:  {want: 0x249, have: 0x134, conf: 0x2, oneway: true},
-       56:  {want: 0x25c, have: 0x134, conf: 0x2, oneway: true},
-       57:  {want: 0x26b, have: 0x480, conf: 0x2, oneway: true},
-       58:  {want: 0x281, have: 0x3d9, conf: 0x2, oneway: true},
-       59:  {want: 0x285, have: 0x1f1, conf: 0x2, oneway: true},
-       60:  {want: 0x29a, have: 0x134, conf: 0x2, oneway: true},
-       61:  {want: 0x2ac, have: 0x159, conf: 0x2, oneway: true},
-       62:  {want: 0x2af, have: 0x134, conf: 0x2, oneway: true},
-       63:  {want: 0x2b5, have: 0x134, conf: 0x2, oneway: true},
-       64:  {want: 0x2ba, have: 0x159, conf: 0x2, oneway: true},
-       65:  {want: 0x2e4, have: 0x134, conf: 0x2, oneway: true},
-       66:  {want: 0x2e8, have: 0x159, conf: 0x2, oneway: true},
-       67:  {want: 0x2f1, have: 0x134, conf: 0x2, oneway: true},
-       68:  {want: 0x2f6, have: 0x7d, conf: 0x2, oneway: true},
-       69:  {want: 0x2fb, have: 0x134, conf: 0x2, oneway: true},
-       70:  {want: 0x302, have: 0x3d9, conf: 0x2, oneway: true},
-       71:  {want: 0x312, have: 0x1b7, conf: 0x2, oneway: true},
-       72:  {want: 0x316, have: 0x1da, conf: 0x2, oneway: true},
-       73:  {want: 0x317, have: 0x134, conf: 0x2, oneway: true},
-       74:  {want: 0x328, have: 0x134, conf: 0x2, oneway: true},
-       75:  {want: 0x348, have: 0x134, conf: 0x2, oneway: true},
-       76:  {want: 0x361, have: 0x33e, conf: 0x2, oneway: false},
-       77:  {want: 0x361, have: 0x366, conf: 0x2, oneway: true},
-       78:  {want: 0x371, have: 0x134, conf: 0x2, oneway: true},
-       79:  {want: 0x37e, have: 0x134, conf: 0x2, oneway: true},
-       80:  {want: 0x380, have: 0x134, conf: 0x2, oneway: true},
-       81:  {want: 0x382, have: 0x159, conf: 0x2, oneway: true},
-       82:  {want: 0x387, have: 0x134, conf: 0x2, oneway: true},
-       83:  {want: 0x38c, have: 0x134, conf: 0x2, oneway: true},
-       84:  {want: 0x394, have: 0x134, conf: 0x2, oneway: true},
-       85:  {want: 0x39c, have: 0x134, conf: 0x2, oneway: true},
-       86:  {want: 0x3b5, have: 0x134, conf: 0x2, oneway: true},
-       87:  {want: 0x3bb, have: 0x139, conf: 0x2, oneway: true},
-       88:  {want: 0x3cb, have: 0x109, conf: 0x2, oneway: true},
-       89:  {want: 0x3d0, have: 0x134, conf: 0x2, oneway: true},
-       90:  {want: 0x3dc, have: 0x159, conf: 0x2, oneway: true},
-       91:  {want: 0x3e0, have: 0x1b7, conf: 0x2, oneway: true},
-       92:  {want: 0x3f0, have: 0x134, conf: 0x2, oneway: true},
-       93:  {want: 0x402, have: 0x134, conf: 0x2, oneway: true},
-       94:  {want: 0x419, have: 0x134, conf: 0x2, oneway: true},
-       95:  {want: 0x41f, have: 0x134, conf: 0x2, oneway: true},
-       96:  {want: 0x427, have: 0x134, conf: 0x2, oneway: true},
-       97:  {want: 0x431, have: 0x134, conf: 0x2, oneway: true},
-       98:  {want: 0x434, have: 0x1da, conf: 0x2, oneway: true},
-       99:  {want: 0x43b, have: 0x134, conf: 0x2, oneway: true},
-       100: {want: 0x446, have: 0x134, conf: 0x2, oneway: true},
-       101: {want: 0x457, have: 0x134, conf: 0x2, oneway: true},
-       102: {want: 0x45d, have: 0x3d9, conf: 0x2, oneway: true},
-       103: {want: 0x465, have: 0x134, conf: 0x2, oneway: true},
-       104: {want: 0x46c, have: 0x3d9, conf: 0x2, oneway: true},
-       105: {want: 0x3878, have: 0x134, conf: 0x2, oneway: true},
-       106: {want: 0x476, have: 0x134, conf: 0x2, oneway: true},
-       107: {want: 0x478, have: 0x134, conf: 0x2, oneway: true},
-       108: {want: 0x48a, have: 0x3d9, conf: 0x2, oneway: true},
-       109: {want: 0x493, have: 0x134, conf: 0x2, oneway: true},
-       110: {want: 0x4a2, have: 0x51f, conf: 0x2, oneway: true},
-       111: {want: 0x4aa, have: 0x134, conf: 0x2, oneway: true},
-       112: {want: 0x4b2, have: 0x3d9, conf: 0x2, oneway: true},
-       113: {want: 0x4db, have: 0x159, conf: 0x2, oneway: true},
-       114: {want: 0x4e8, have: 0x134, conf: 0x2, oneway: true},
-       115: {want: 0x508, have: 0x134, conf: 0x2, oneway: true},
-       116: {want: 0x50e, have: 0x134, conf: 0x2, oneway: true},
-       117: {want: 0x524, have: 0x134, conf: 0x2, oneway: true},
+// Size: 690 bytes, 115 elements
+var matchLang = [115]mutualIntelligibility{
+       0:   {want: 0x1cf, have: 0xb7, distance: 0x4, oneway: false},
+       1:   {want: 0x405, have: 0xb7, distance: 0x4, oneway: false},
+       2:   {want: 0x405, have: 0x1cf, distance: 0x4, oneway: false},
+       3:   {want: 0x405, have: 0x430, distance: 0x4, oneway: false},
+       4:   {want: 0x438, have: 0x1, distance: 0x4, oneway: false},
+       5:   {want: 0x1a1, have: 0x10c, distance: 0x4, oneway: true},
+       6:   {want: 0x293, have: 0x10c, distance: 0x4, oneway: true},
+       7:   {want: 0x430, have: 0x1cf, distance: 0x5, oneway: false},
+       8:   {want: 0x430, have: 0xb7, distance: 0x5, oneway: false},
+       9:   {want: 0x100, have: 0x36d, distance: 0x8, oneway: false},
+       10:  {want: 0x100, have: 0x345, distance: 0x8, oneway: false},
+       11:  {want: 0x5, have: 0x3e0, distance: 0xa, oneway: true},
+       12:  {want: 0xd, have: 0x138, distance: 0xa, oneway: true},
+       13:  {want: 0x16, have: 0x365, distance: 0xa, oneway: true},
+       14:  {want: 0x21, have: 0x138, distance: 0xa, oneway: true},
+       15:  {want: 0x56, have: 0x13d, distance: 0xa, oneway: true},
+       16:  {want: 0x58, have: 0x3e0, distance: 0xa, oneway: true},
+       17:  {want: 0x71, have: 0x3e0, distance: 0xa, oneway: true},
+       18:  {want: 0x75, have: 0x138, distance: 0xa, oneway: true},
+       19:  {want: 0x82, have: 0x1bc, distance: 0xa, oneway: true},
+       20:  {want: 0xa5, have: 0x138, distance: 0xa, oneway: true},
+       21:  {want: 0xb2, have: 0x15d, distance: 0xa, oneway: true},
+       22:  {want: 0xdd, have: 0x152, distance: 0xa, oneway: true},
+       23:  {want: 0xe5, have: 0x138, distance: 0xa, oneway: true},
+       24:  {want: 0xe9, have: 0x3a, distance: 0xa, oneway: true},
+       25:  {want: 0xef, have: 0x15d, distance: 0xa, oneway: true},
+       26:  {want: 0xf8, have: 0x15d, distance: 0xa, oneway: true},
+       27:  {want: 0xff, have: 0x138, distance: 0xa, oneway: true},
+       28:  {want: 0x12f, have: 0x138, distance: 0xa, oneway: true},
+       29:  {want: 0x13b, have: 0x138, distance: 0xa, oneway: true},
+       30:  {want: 0x13f, have: 0x150, distance: 0xa, oneway: true},
+       31:  {want: 0x144, have: 0x13d, distance: 0xa, oneway: true},
+       32:  {want: 0x157, have: 0x100, distance: 0xa, oneway: true},
+       33:  {want: 0x16c, have: 0x365, distance: 0xa, oneway: true},
+       34:  {want: 0x16d, have: 0x138, distance: 0xa, oneway: true},
+       35:  {want: 0x16e, have: 0x138, distance: 0xa, oneway: true},
+       36:  {want: 0x17c, have: 0x138, distance: 0xa, oneway: true},
+       37:  {want: 0x18e, have: 0x13d, distance: 0xa, oneway: true},
+       38:  {want: 0x192, have: 0x13d, distance: 0xa, oneway: true},
+       39:  {want: 0x1a2, have: 0x1bc, distance: 0xa, oneway: true},
+       40:  {want: 0x1b2, have: 0x138, distance: 0xa, oneway: true},
+       41:  {want: 0x1b6, have: 0x138, distance: 0xa, oneway: true},
+       42:  {want: 0x1d2, have: 0x15d, distance: 0xa, oneway: true},
+       43:  {want: 0x1d5, have: 0x3e0, distance: 0xa, oneway: true},
+       44:  {want: 0x1d7, have: 0x138, distance: 0xa, oneway: true},
+       45:  {want: 0x1e5, have: 0x138, distance: 0xa, oneway: true},
+       46:  {want: 0x1f6, have: 0x138, distance: 0xa, oneway: true},
+       47:  {want: 0x20c, have: 0x1df, distance: 0xa, oneway: true},
+       48:  {want: 0x20e, have: 0x138, distance: 0xa, oneway: true},
+       49:  {want: 0x22b, have: 0x15d, distance: 0xa, oneway: true},
+       50:  {want: 0x240, have: 0x3e0, distance: 0xa, oneway: true},
+       51:  {want: 0x248, have: 0x138, distance: 0xa, oneway: true},
+       52:  {want: 0x24f, have: 0x138, distance: 0xa, oneway: true},
+       53:  {want: 0x263, have: 0x138, distance: 0xa, oneway: true},
+       54:  {want: 0x272, have: 0x488, distance: 0xa, oneway: true},
+       55:  {want: 0x288, have: 0x3e0, distance: 0xa, oneway: true},
+       56:  {want: 0x28c, have: 0x1f7, distance: 0xa, oneway: true},
+       57:  {want: 0x2a1, have: 0x138, distance: 0xa, oneway: true},
+       58:  {want: 0x2b3, have: 0x15d, distance: 0xa, oneway: true},
+       59:  {want: 0x2b6, have: 0x138, distance: 0xa, oneway: true},
+       60:  {want: 0x2bc, have: 0x138, distance: 0xa, oneway: true},
+       61:  {want: 0x2c1, have: 0x15d, distance: 0xa, oneway: true},
+       62:  {want: 0x2eb, have: 0x138, distance: 0xa, oneway: true},
+       63:  {want: 0x2ef, have: 0x15d, distance: 0xa, oneway: true},
+       64:  {want: 0x2f8, have: 0x138, distance: 0xa, oneway: true},
+       65:  {want: 0x2fd, have: 0x7e, distance: 0xa, oneway: true},
+       66:  {want: 0x302, have: 0x138, distance: 0xa, oneway: true},
+       67:  {want: 0x309, have: 0x3e0, distance: 0xa, oneway: true},
+       68:  {want: 0x319, have: 0x1bc, distance: 0xa, oneway: true},
+       69:  {want: 0x31d, have: 0x1df, distance: 0xa, oneway: true},
+       70:  {want: 0x31e, have: 0x138, distance: 0xa, oneway: true},
+       71:  {want: 0x32f, have: 0x138, distance: 0xa, oneway: true},
+       72:  {want: 0x34f, have: 0x138, distance: 0xa, oneway: true},
+       73:  {want: 0x368, have: 0x345, distance: 0xa, oneway: false},
+       74:  {want: 0x368, have: 0x36d, distance: 0xa, oneway: true},
+       75:  {want: 0x378, have: 0x138, distance: 0xa, oneway: true},
+       76:  {want: 0x385, have: 0x138, distance: 0xa, oneway: true},
+       77:  {want: 0x387, have: 0x138, distance: 0xa, oneway: true},
+       78:  {want: 0x389, have: 0x15d, distance: 0xa, oneway: true},
+       79:  {want: 0x38e, have: 0x138, distance: 0xa, oneway: true},
+       80:  {want: 0x393, have: 0x138, distance: 0xa, oneway: true},
+       81:  {want: 0x39b, have: 0x138, distance: 0xa, oneway: true},
+       82:  {want: 0x3a3, have: 0x138, distance: 0xa, oneway: true},
+       83:  {want: 0x3bc, have: 0x138, distance: 0xa, oneway: true},
+       84:  {want: 0x3c2, have: 0x13d, distance: 0xa, oneway: true},
+       85:  {want: 0x3d2, have: 0x10c, distance: 0xa, oneway: true},
+       86:  {want: 0x3d7, have: 0x138, distance: 0xa, oneway: true},
+       87:  {want: 0x3e3, have: 0x15d, distance: 0xa, oneway: true},
+       88:  {want: 0x3e7, have: 0x1bc, distance: 0xa, oneway: true},
+       89:  {want: 0x3f8, have: 0x138, distance: 0xa, oneway: true},
+       90:  {want: 0x40a, have: 0x138, distance: 0xa, oneway: true},
+       91:  {want: 0x421, have: 0x138, distance: 0xa, oneway: true},
+       92:  {want: 0x427, have: 0x138, distance: 0xa, oneway: true},
+       93:  {want: 0x42f, have: 0x138, distance: 0xa, oneway: true},
+       94:  {want: 0x439, have: 0x138, distance: 0xa, oneway: true},
+       95:  {want: 0x43c, have: 0x1df, distance: 0xa, oneway: true},
+       96:  {want: 0x443, have: 0x138, distance: 0xa, oneway: true},
+       97:  {want: 0x44e, have: 0x138, distance: 0xa, oneway: true},
+       98:  {want: 0x45f, have: 0x138, distance: 0xa, oneway: true},
+       99:  {want: 0x465, have: 0x3e0, distance: 0xa, oneway: true},
+       100: {want: 0x46d, have: 0x138, distance: 0xa, oneway: true},
+       101: {want: 0x474, have: 0x3e0, distance: 0xa, oneway: true},
+       102: {want: 0x3880, have: 0x138, distance: 0xa, oneway: true},
+       103: {want: 0x47e, have: 0x138, distance: 0xa, oneway: true},
+       104: {want: 0x480, have: 0x138, distance: 0xa, oneway: true},
+       105: {want: 0x492, have: 0x3e0, distance: 0xa, oneway: true},
+       106: {want: 0x49b, have: 0x138, distance: 0xa, oneway: true},
+       107: {want: 0x4aa, have: 0x527, distance: 0xa, oneway: true},
+       108: {want: 0x4b2, have: 0x138, distance: 0xa, oneway: true},
+       109: {want: 0x4ba, have: 0x3e0, distance: 0xa, oneway: true},
+       110: {want: 0x4e3, have: 0x15d, distance: 0xa, oneway: true},
+       111: {want: 0x4f0, have: 0x138, distance: 0xa, oneway: true},
+       112: {want: 0x510, have: 0x138, distance: 0xa, oneway: true},
+       113: {want: 0x516, have: 0x138, distance: 0xa, oneway: true},
+       114: {want: 0x52c, have: 0x138, distance: 0xa, oneway: true},
 }
 
 // matchScript holds pairs of scriptIDs where readers of one script
 // can typically also read the other. Each is associated with a confidence.
-// Size: 24 bytes, 4 elements
-var matchScript = [4]scriptIntelligibility{
-       0: {lang: 0x428, want: 0x52, have: 0x1e, conf: 0x2},
-       1: {lang: 0x428, want: 0x1e, have: 0x52, conf: 0x2},
-       2: {lang: 0x0, want: 0x34, have: 0x35, conf: 0x1},
-       3: {lang: 0x0, want: 0x35, have: 0x34, conf: 0x1},
+// Size: 208 bytes, 26 elements
+var matchScript = [26]scriptIntelligibility{
+       0:  {wantLang: 0x430, haveLang: 0x430, wantScript: 0x52, haveScript: 0x1e, distance: 0x5},
+       1:  {wantLang: 0x430, haveLang: 0x430, wantScript: 0x1e, haveScript: 0x52, distance: 0x5},
+       2:  {wantLang: 0x58, haveLang: 0x3e0, wantScript: 0x52, haveScript: 0x1e, distance: 0xa},
+       3:  {wantLang: 0xa5, haveLang: 0x138, wantScript: 0xe, haveScript: 0x52, distance: 0xa},
+       4:  {wantLang: 0x1d5, haveLang: 0x3e0, wantScript: 0x8, haveScript: 0x1e, distance: 0xa},
+       5:  {wantLang: 0x20e, haveLang: 0x138, wantScript: 0x29, haveScript: 0x52, distance: 0xa},
+       6:  {wantLang: 0x248, haveLang: 0x138, wantScript: 0x46, haveScript: 0x52, distance: 0xa},
+       7:  {wantLang: 0x24f, haveLang: 0x138, wantScript: 0x4a, haveScript: 0x52, distance: 0xa},
+       8:  {wantLang: 0x2b6, haveLang: 0x138, wantScript: 0x4f, haveScript: 0x52, distance: 0xa},
+       9:  {wantLang: 0x302, haveLang: 0x138, wantScript: 0x64, haveScript: 0x52, distance: 0xa},
+       10: {wantLang: 0x32f, haveLang: 0x138, wantScript: 0x6b, haveScript: 0x52, distance: 0xa},
+       11: {wantLang: 0x34f, haveLang: 0x138, wantScript: 0x20, haveScript: 0x52, distance: 0xa},
+       12: {wantLang: 0x393, haveLang: 0x138, wantScript: 0x75, haveScript: 0x52, distance: 0xa},
+       13: {wantLang: 0x39b, haveLang: 0x138, wantScript: 0x2f, haveScript: 0x52, distance: 0xa},
+       14: {wantLang: 0x3bc, haveLang: 0x138, wantScript: 0x5, haveScript: 0x52, distance: 0xa},
+       15: {wantLang: 0x3f8, haveLang: 0x138, wantScript: 0x5, haveScript: 0x52, distance: 0xa},
+       16: {wantLang: 0x40a, haveLang: 0x138, wantScript: 0xc1, haveScript: 0x52, distance: 0xa},
+       17: {wantLang: 0x44e, haveLang: 0x138, wantScript: 0xcd, haveScript: 0x52, distance: 0xa},
+       18: {wantLang: 0x45f, haveLang: 0x138, wantScript: 0xd0, haveScript: 0x52, distance: 0xa},
+       19: {wantLang: 0x46d, haveLang: 0x138, wantScript: 0x27, haveScript: 0x52, distance: 0xa},
+       20: {wantLang: 0x474, haveLang: 0x3e0, wantScript: 0x52, haveScript: 0x1e, distance: 0xa},
+       21: {wantLang: 0x4b2, haveLang: 0x138, wantScript: 0x5, haveScript: 0x52, distance: 0xa},
+       22: {wantLang: 0x4ba, haveLang: 0x3e0, wantScript: 0x52, haveScript: 0x1e, distance: 0xa},
+       23: {wantLang: 0x510, haveLang: 0x138, wantScript: 0x37, haveScript: 0x52, distance: 0xa},
+       24: {wantLang: 0x527, haveLang: 0x527, wantScript: 0x34, haveScript: 0x35, distance: 0xf},
+       25: {wantLang: 0x527, haveLang: 0x527, wantScript: 0x35, haveScript: 0x34, distance: 0x13},
+}
+
+// Size: 90 bytes, 15 elements
+var matchRegion = [15]regionIntelligibility{
+       0:  {lang: 0x3a, script: 0x0, group: 0x4, distance: 0x4},
+       1:  {lang: 0x3a, script: 0x0, group: 0x84, distance: 0x4},
+       2:  {lang: 0x138, script: 0x0, group: 0x1, distance: 0x4},
+       3:  {lang: 0x138, script: 0x0, group: 0x81, distance: 0x4},
+       4:  {lang: 0x13d, script: 0x0, group: 0x3, distance: 0x4},
+       5:  {lang: 0x13d, script: 0x0, group: 0x83, distance: 0x4},
+       6:  {lang: 0x3be, script: 0x0, group: 0x3, distance: 0x4},
+       7:  {lang: 0x3be, script: 0x0, group: 0x83, distance: 0x4},
+       8:  {lang: 0x527, script: 0x35, group: 0x2, distance: 0x4},
+       9:  {lang: 0x527, script: 0x35, group: 0x82, distance: 0x4},
+       10: {lang: 0x3a, script: 0x0, group: 0x80, distance: 0x5},
+       11: {lang: 0x138, script: 0x0, group: 0x80, distance: 0x5},
+       12: {lang: 0x13d, script: 0x0, group: 0x80, distance: 0x5},
+       13: {lang: 0x3be, script: 0x0, group: 0x80, distance: 0x5},
+       14: {lang: 0x527, script: 0x35, group: 0x80, distance: 0x5},
 }
 
 // Size: 128 bytes, 32 elements
@@ -3535,13 +3642,13 @@ type parentRel struct {
        fromRegion []uint16
 }
 
-// Size: 412 bytes, 5 elements
+// Size: 414 bytes, 5 elements
 var parents = [5]parentRel{
-       0: {lang: 0x134, script: 0x0, maxScript: 0x52, toRegion: 0x1, fromRegion: []uint16{0x1a, 0x24, 0x25, 0x2e, 0x33, 0x35, 0x3c, 0x41, 0x45, 0x47, 0x48, 0x49, 0x4f, 0x51, 0x5b, 0x5c, 0x60, 0x63, 0x6c, 0x72, 0x73, 0x74, 0x7a, 0x7b, 0x7e, 0x7f, 0x80, 0x82, 0x8b, 0x8c, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9e, 0x9f, 0xa3, 0xa6, 0xa8, 0xac, 0xb0, 0xb3, 0xb4, 0xbe, 0xc5, 0xc9, 0xca, 0xcb, 0xcd, 0xcf, 0xd1, 0xd4, 0xd5, 0xdc, 0xde, 0xdf, 0xe5, 0xe6, 0xe7, 0xea, 0xef, 0x106, 0x108, 0x109, 0x10a, 0x10c, 0x10d, 0x111, 0x116, 0x11a, 0x11c, 0x11e, 0x124, 0x128, 0x12b, 0x12c, 0x12e, 0x130, 0x138, 0x13b, 0x13e, 0x141, 0x160, 0x161, 0x163}},
-       1: {lang: 0x134, script: 0x0, maxScript: 0x52, toRegion: 0x1a, fromRegion: []uint16{0x2d, 0x4d, 0x5f, 0x62, 0x71, 0xd8, 0x10b, 0x10e}},
-       2: {lang: 0x139, script: 0x0, maxScript: 0x52, toRegion: 0x1e, fromRegion: []uint16{0x2b, 0x3e, 0x40, 0x50, 0x53, 0x55, 0x58, 0x64, 0x68, 0x88, 0x8e, 0xce, 0xd7, 0xe1, 0xe3, 0xeb, 0xf0, 0x119, 0x134, 0x135, 0x13a}},
-       3: {lang: 0x3b7, script: 0x0, maxScript: 0x52, toRegion: 0xed, fromRegion: []uint16{0x29, 0x4d, 0x59, 0x85, 0x8a, 0xb6, 0xc5, 0xd0, 0x117, 0x125}},
-       4: {lang: 0x51f, script: 0x35, maxScript: 0x35, toRegion: 0x8c, fromRegion: []uint16{0xc5}},
+       0: {lang: 0x138, script: 0x0, maxScript: 0x52, toRegion: 0x1, fromRegion: []uint16{0x1a, 0x24, 0x25, 0x2e, 0x33, 0x35, 0x3c, 0x41, 0x45, 0x47, 0x48, 0x49, 0x4f, 0x51, 0x5b, 0x5c, 0x60, 0x63, 0x6c, 0x72, 0x73, 0x74, 0x7a, 0x7b, 0x7e, 0x7f, 0x80, 0x82, 0x8b, 0x8c, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9e, 0x9f, 0xa3, 0xa6, 0xa8, 0xac, 0xb0, 0xb3, 0xb4, 0xbe, 0xc5, 0xc9, 0xca, 0xcb, 0xcd, 0xcf, 0xd1, 0xd4, 0xd5, 0xdc, 0xde, 0xdf, 0xe5, 0xe6, 0xe7, 0xea, 0xef, 0x106, 0x108, 0x109, 0x10a, 0x10c, 0x10d, 0x111, 0x116, 0x11a, 0x11c, 0x11e, 0x124, 0x128, 0x12b, 0x12c, 0x12e, 0x130, 0x138, 0x13b, 0x13e, 0x141, 0x160, 0x161, 0x163}},
+       1: {lang: 0x138, script: 0x0, maxScript: 0x52, toRegion: 0x1a, fromRegion: []uint16{0x2d, 0x4d, 0x5f, 0x62, 0x71, 0xd8, 0x10b, 0x10e}},
+       2: {lang: 0x13d, script: 0x0, maxScript: 0x52, toRegion: 0x1e, fromRegion: []uint16{0x2b, 0x3e, 0x40, 0x47, 0x50, 0x53, 0x55, 0x58, 0x64, 0x68, 0x88, 0x8e, 0xce, 0xd7, 0xe1, 0xe3, 0xeb, 0xf0, 0x119, 0x134, 0x135, 0x13a}},
+       3: {lang: 0x3be, script: 0x0, maxScript: 0x52, toRegion: 0xed, fromRegion: []uint16{0x29, 0x4d, 0x59, 0x85, 0x8a, 0xb6, 0xc5, 0xd0, 0x117, 0x125}},
+       4: {lang: 0x527, script: 0x35, maxScript: 0x35, toRegion: 0x8c, fromRegion: []uint16{0xc5}},
 }
 
-// Total table size 25825 bytes (25KiB); checksum: 4E97CC5E
+// Total table size 26496 bytes (25KiB); checksum: 6E24B15A
diff --git a/vendor/golang.org/x/text/unicode/norm/maketables.go b/vendor/golang.org/x/text/unicode/norm/maketables.go
deleted file mode 100644 (file)
index 8d41816..0000000
+++ /dev/null
@@ -1,976 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore
-
-// Normalization table generator.
-// Data read from the web.
-// See forminfo.go for a description of the trie values associated with each rune.
-
-package main
-
-import (
-       "bytes"
-       "flag"
-       "fmt"
-       "io"
-       "log"
-       "sort"
-       "strconv"
-       "strings"
-
-       "golang.org/x/text/internal/gen"
-       "golang.org/x/text/internal/triegen"
-       "golang.org/x/text/internal/ucd"
-)
-
-func main() {
-       gen.Init()
-       loadUnicodeData()
-       compactCCC()
-       loadCompositionExclusions()
-       completeCharFields(FCanonical)
-       completeCharFields(FCompatibility)
-       computeNonStarterCounts()
-       verifyComputed()
-       printChars()
-       testDerived()
-       printTestdata()
-       makeTables()
-}
-
-var (
-       tablelist = flag.String("tables",
-               "all",
-               "comma-separated list of which tables to generate; "+
-                       "can be 'decomp', 'recomp', 'info' and 'all'")
-       test = flag.Bool("test",
-               false,
-               "test existing tables against DerivedNormalizationProps and generate test data for regression testing")
-       verbose = flag.Bool("verbose",
-               false,
-               "write data to stdout as it is parsed")
-)
-
-const MaxChar = 0x10FFFF // anything above this shouldn't exist
-
-// Quick Check properties of runes allow us to quickly
-// determine whether a rune may occur in a normal form.
-// For a given normal form, a rune may be guaranteed to occur
-// verbatim (QC=Yes), may or may not combine with another
-// rune (QC=Maybe), or may not occur (QC=No).
-type QCResult int
-
-const (
-       QCUnknown QCResult = iota
-       QCYes
-       QCNo
-       QCMaybe
-)
-
-func (r QCResult) String() string {
-       switch r {
-       case QCYes:
-               return "Yes"
-       case QCNo:
-               return "No"
-       case QCMaybe:
-               return "Maybe"
-       }
-       return "***UNKNOWN***"
-}
-
-const (
-       FCanonical     = iota // NFC or NFD
-       FCompatibility        // NFKC or NFKD
-       FNumberOfFormTypes
-)
-
-const (
-       MComposed   = iota // NFC or NFKC
-       MDecomposed        // NFD or NFKD
-       MNumberOfModes
-)
-
-// This contains only the properties we're interested in.
-type Char struct {
-       name          string
-       codePoint     rune  // if zero, this index is not a valid code point.
-       ccc           uint8 // canonical combining class
-       origCCC       uint8
-       excludeInComp bool // from CompositionExclusions.txt
-       compatDecomp  bool // it has a compatibility expansion
-
-       nTrailingNonStarters uint8
-       nLeadingNonStarters  uint8 // must be equal to trailing if non-zero
-
-       forms [FNumberOfFormTypes]FormInfo // For FCanonical and FCompatibility
-
-       state State
-}
-
-var chars = make([]Char, MaxChar+1)
-var cccMap = make(map[uint8]uint8)
-
-func (c Char) String() string {
-       buf := new(bytes.Buffer)
-
-       fmt.Fprintf(buf, "%U [%s]:\n", c.codePoint, c.name)
-       fmt.Fprintf(buf, "  ccc: %v\n", c.ccc)
-       fmt.Fprintf(buf, "  excludeInComp: %v\n", c.excludeInComp)
-       fmt.Fprintf(buf, "  compatDecomp: %v\n", c.compatDecomp)
-       fmt.Fprintf(buf, "  state: %v\n", c.state)
-       fmt.Fprintf(buf, "  NFC:\n")
-       fmt.Fprint(buf, c.forms[FCanonical])
-       fmt.Fprintf(buf, "  NFKC:\n")
-       fmt.Fprint(buf, c.forms[FCompatibility])
-
-       return buf.String()
-}
-
-// In UnicodeData.txt, some ranges are marked like this:
-//     3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;
-//     4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
-// parseCharacter keeps a state variable indicating the weirdness.
-type State int
-
-const (
-       SNormal State = iota // known to be zero for the type
-       SFirst
-       SLast
-       SMissing
-)
-
-var lastChar = rune('\u0000')
-
-func (c Char) isValid() bool {
-       return c.codePoint != 0 && c.state != SMissing
-}
-
-type FormInfo struct {
-       quickCheck [MNumberOfModes]QCResult // index: MComposed or MDecomposed
-       verified   [MNumberOfModes]bool     // index: MComposed or MDecomposed
-
-       combinesForward  bool // May combine with rune on the right
-       combinesBackward bool // May combine with rune on the left
-       isOneWay         bool // Never appears in result
-       inDecomp         bool // Some decompositions result in this char.
-       decomp           Decomposition
-       expandedDecomp   Decomposition
-}
-
-func (f FormInfo) String() string {
-       buf := bytes.NewBuffer(make([]byte, 0))
-
-       fmt.Fprintf(buf, "    quickCheck[C]: %v\n", f.quickCheck[MComposed])
-       fmt.Fprintf(buf, "    quickCheck[D]: %v\n", f.quickCheck[MDecomposed])
-       fmt.Fprintf(buf, "    cmbForward: %v\n", f.combinesForward)
-       fmt.Fprintf(buf, "    cmbBackward: %v\n", f.combinesBackward)
-       fmt.Fprintf(buf, "    isOneWay: %v\n", f.isOneWay)
-       fmt.Fprintf(buf, "    inDecomp: %v\n", f.inDecomp)
-       fmt.Fprintf(buf, "    decomposition: %X\n", f.decomp)
-       fmt.Fprintf(buf, "    expandedDecomp: %X\n", f.expandedDecomp)
-
-       return buf.String()
-}
-
-type Decomposition []rune
-
-func parseDecomposition(s string, skipfirst bool) (a []rune, err error) {
-       decomp := strings.Split(s, " ")
-       if len(decomp) > 0 && skipfirst {
-               decomp = decomp[1:]
-       }
-       for _, d := range decomp {
-               point, err := strconv.ParseUint(d, 16, 64)
-               if err != nil {
-                       return a, err
-               }
-               a = append(a, rune(point))
-       }
-       return a, nil
-}
-
-func loadUnicodeData() {
-       f := gen.OpenUCDFile("UnicodeData.txt")
-       defer f.Close()
-       p := ucd.New(f)
-       for p.Next() {
-               r := p.Rune(ucd.CodePoint)
-               char := &chars[r]
-
-               char.ccc = uint8(p.Uint(ucd.CanonicalCombiningClass))
-               decmap := p.String(ucd.DecompMapping)
-
-               exp, err := parseDecomposition(decmap, false)
-               isCompat := false
-               if err != nil {
-                       if len(decmap) > 0 {
-                               exp, err = parseDecomposition(decmap, true)
-                               if err != nil {
-                                       log.Fatalf(`%U: bad decomp |%v|: "%s"`, r, decmap, err)
-                               }
-                               isCompat = true
-                       }
-               }
-
-               char.name = p.String(ucd.Name)
-               char.codePoint = r
-               char.forms[FCompatibility].decomp = exp
-               if !isCompat {
-                       char.forms[FCanonical].decomp = exp
-               } else {
-                       char.compatDecomp = true
-               }
-               if len(decmap) > 0 {
-                       char.forms[FCompatibility].decomp = exp
-               }
-       }
-       if err := p.Err(); err != nil {
-               log.Fatal(err)
-       }
-}
-
-// compactCCC converts the sparse set of CCC values to a continguous one,
-// reducing the number of bits needed from 8 to 6.
-func compactCCC() {
-       m := make(map[uint8]uint8)
-       for i := range chars {
-               c := &chars[i]
-               m[c.ccc] = 0
-       }
-       cccs := []int{}
-       for v, _ := range m {
-               cccs = append(cccs, int(v))
-       }
-       sort.Ints(cccs)
-       for i, c := range cccs {
-               cccMap[uint8(i)] = uint8(c)
-               m[uint8(c)] = uint8(i)
-       }
-       for i := range chars {
-               c := &chars[i]
-               c.origCCC = c.ccc
-               c.ccc = m[c.ccc]
-       }
-       if len(m) >= 1<<6 {
-               log.Fatalf("too many difference CCC values: %d >= 64", len(m))
-       }
-}
-
-// CompositionExclusions.txt has form:
-// 0958    # ...
-// See http://unicode.org/reports/tr44/ for full explanation
-func loadCompositionExclusions() {
-       f := gen.OpenUCDFile("CompositionExclusions.txt")
-       defer f.Close()
-       p := ucd.New(f)
-       for p.Next() {
-               c := &chars[p.Rune(0)]
-               if c.excludeInComp {
-                       log.Fatalf("%U: Duplicate entry in exclusions.", c.codePoint)
-               }
-               c.excludeInComp = true
-       }
-       if e := p.Err(); e != nil {
-               log.Fatal(e)
-       }
-}
-
-// hasCompatDecomp returns true if any of the recursive
-// decompositions contains a compatibility expansion.
-// In this case, the character may not occur in NFK*.
-func hasCompatDecomp(r rune) bool {
-       c := &chars[r]
-       if c.compatDecomp {
-               return true
-       }
-       for _, d := range c.forms[FCompatibility].decomp {
-               if hasCompatDecomp(d) {
-                       return true
-               }
-       }
-       return false
-}
-
-// Hangul related constants.
-const (
-       HangulBase = 0xAC00
-       HangulEnd  = 0xD7A4 // hangulBase + Jamo combinations (19 * 21 * 28)
-
-       JamoLBase = 0x1100
-       JamoLEnd  = 0x1113
-       JamoVBase = 0x1161
-       JamoVEnd  = 0x1176
-       JamoTBase = 0x11A8
-       JamoTEnd  = 0x11C3
-
-       JamoLVTCount = 19 * 21 * 28
-       JamoTCount   = 28
-)
-
-func isHangul(r rune) bool {
-       return HangulBase <= r && r < HangulEnd
-}
-
-func isHangulWithoutJamoT(r rune) bool {
-       if !isHangul(r) {
-               return false
-       }
-       r -= HangulBase
-       return r < JamoLVTCount && r%JamoTCount == 0
-}
-
-func ccc(r rune) uint8 {
-       return chars[r].ccc
-}
-
-// Insert a rune in a buffer, ordered by Canonical Combining Class.
-func insertOrdered(b Decomposition, r rune) Decomposition {
-       n := len(b)
-       b = append(b, 0)
-       cc := ccc(r)
-       if cc > 0 {
-               // Use bubble sort.
-               for ; n > 0; n-- {
-                       if ccc(b[n-1]) <= cc {
-                               break
-                       }
-                       b[n] = b[n-1]
-               }
-       }
-       b[n] = r
-       return b
-}
-
-// Recursively decompose.
-func decomposeRecursive(form int, r rune, d Decomposition) Decomposition {
-       dcomp := chars[r].forms[form].decomp
-       if len(dcomp) == 0 {
-               return insertOrdered(d, r)
-       }
-       for _, c := range dcomp {
-               d = decomposeRecursive(form, c, d)
-       }
-       return d
-}
-
-func completeCharFields(form int) {
-       // Phase 0: pre-expand decomposition.
-       for i := range chars {
-               f := &chars[i].forms[form]
-               if len(f.decomp) == 0 {
-                       continue
-               }
-               exp := make(Decomposition, 0)
-               for _, c := range f.decomp {
-                       exp = decomposeRecursive(form, c, exp)
-               }
-               f.expandedDecomp = exp
-       }
-
-       // Phase 1: composition exclusion, mark decomposition.
-       for i := range chars {
-               c := &chars[i]
-               f := &c.forms[form]
-
-               // Marks script-specific exclusions and version restricted.
-               f.isOneWay = c.excludeInComp
-
-               // Singletons
-               f.isOneWay = f.isOneWay || len(f.decomp) == 1
-
-               // Non-starter decompositions
-               if len(f.decomp) > 1 {
-                       chk := c.ccc != 0 || chars[f.decomp[0]].ccc != 0
-                       f.isOneWay = f.isOneWay || chk
-               }
-
-               // Runes that decompose into more than two runes.
-               f.isOneWay = f.isOneWay || len(f.decomp) > 2
-
-               if form == FCompatibility {
-                       f.isOneWay = f.isOneWay || hasCompatDecomp(c.codePoint)
-               }
-
-               for _, r := range f.decomp {
-                       chars[r].forms[form].inDecomp = true
-               }
-       }
-
-       // Phase 2: forward and backward combining.
-       for i := range chars {
-               c := &chars[i]
-               f := &c.forms[form]
-
-               if !f.isOneWay && len(f.decomp) == 2 {
-                       f0 := &chars[f.decomp[0]].forms[form]
-                       f1 := &chars[f.decomp[1]].forms[form]
-                       if !f0.isOneWay {
-                               f0.combinesForward = true
-                       }
-                       if !f1.isOneWay {
-                               f1.combinesBackward = true
-                       }
-               }
-               if isHangulWithoutJamoT(rune(i)) {
-                       f.combinesForward = true
-               }
-       }
-
-       // Phase 3: quick check values.
-       for i := range chars {
-               c := &chars[i]
-               f := &c.forms[form]
-
-               switch {
-               case len(f.decomp) > 0:
-                       f.quickCheck[MDecomposed] = QCNo
-               case isHangul(rune(i)):
-                       f.quickCheck[MDecomposed] = QCNo
-               default:
-                       f.quickCheck[MDecomposed] = QCYes
-               }
-               switch {
-               case f.isOneWay:
-                       f.quickCheck[MComposed] = QCNo
-               case (i & 0xffff00) == JamoLBase:
-                       f.quickCheck[MComposed] = QCYes
-                       if JamoLBase <= i && i < JamoLEnd {
-                               f.combinesForward = true
-                       }
-                       if JamoVBase <= i && i < JamoVEnd {
-                               f.quickCheck[MComposed] = QCMaybe
-                               f.combinesBackward = true
-                               f.combinesForward = true
-                       }
-                       if JamoTBase <= i && i < JamoTEnd {
-                               f.quickCheck[MComposed] = QCMaybe
-                               f.combinesBackward = true
-                       }
-               case !f.combinesBackward:
-                       f.quickCheck[MComposed] = QCYes
-               default:
-                       f.quickCheck[MComposed] = QCMaybe
-               }
-       }
-}
-
-func computeNonStarterCounts() {
-       // Phase 4: leading and trailing non-starter count
-       for i := range chars {
-               c := &chars[i]
-
-               runes := []rune{rune(i)}
-               // We always use FCompatibility so that the CGJ insertion points do not
-               // change for repeated normalizations with different forms.
-               if exp := c.forms[FCompatibility].expandedDecomp; len(exp) > 0 {
-                       runes = exp
-               }
-               // We consider runes that combine backwards to be non-starters for the
-               // purpose of Stream-Safe Text Processing.
-               for _, r := range runes {
-                       if cr := &chars[r]; cr.ccc == 0 && !cr.forms[FCompatibility].combinesBackward {
-                               break
-                       }
-                       c.nLeadingNonStarters++
-               }
-               for i := len(runes) - 1; i >= 0; i-- {
-                       if cr := &chars[runes[i]]; cr.ccc == 0 && !cr.forms[FCompatibility].combinesBackward {
-                               break
-                       }
-                       c.nTrailingNonStarters++
-               }
-               if c.nTrailingNonStarters > 3 {
-                       log.Fatalf("%U: Decomposition with more than 3 (%d) trailing modifiers (%U)", i, c.nTrailingNonStarters, runes)
-               }
-
-               if isHangul(rune(i)) {
-                       c.nTrailingNonStarters = 2
-                       if isHangulWithoutJamoT(rune(i)) {
-                               c.nTrailingNonStarters = 1
-                       }
-               }
-
-               if l, t := c.nLeadingNonStarters, c.nTrailingNonStarters; l > 0 && l != t {
-                       log.Fatalf("%U: number of leading and trailing non-starters should be equal (%d vs %d)", i, l, t)
-               }
-               if t := c.nTrailingNonStarters; t > 3 {
-                       log.Fatalf("%U: number of trailing non-starters is %d > 3", t)
-               }
-       }
-}
-
-func printBytes(w io.Writer, b []byte, name string) {
-       fmt.Fprintf(w, "// %s: %d bytes\n", name, len(b))
-       fmt.Fprintf(w, "var %s = [...]byte {", name)
-       for i, c := range b {
-               switch {
-               case i%64 == 0:
-                       fmt.Fprintf(w, "\n// Bytes %x - %x\n", i, i+63)
-               case i%8 == 0:
-                       fmt.Fprintf(w, "\n")
-               }
-               fmt.Fprintf(w, "0x%.2X, ", c)
-       }
-       fmt.Fprint(w, "\n}\n\n")
-}
-
-// See forminfo.go for format.
-func makeEntry(f *FormInfo, c *Char) uint16 {
-       e := uint16(0)
-       if r := c.codePoint; HangulBase <= r && r < HangulEnd {
-               e |= 0x40
-       }
-       if f.combinesForward {
-               e |= 0x20
-       }
-       if f.quickCheck[MDecomposed] == QCNo {
-               e |= 0x4
-       }
-       switch f.quickCheck[MComposed] {
-       case QCYes:
-       case QCNo:
-               e |= 0x10
-       case QCMaybe:
-               e |= 0x18
-       default:
-               log.Fatalf("Illegal quickcheck value %v.", f.quickCheck[MComposed])
-       }
-       e |= uint16(c.nTrailingNonStarters)
-       return e
-}
-
-// decompSet keeps track of unique decompositions, grouped by whether
-// the decomposition is followed by a trailing and/or leading CCC.
-type decompSet [7]map[string]bool
-
-const (
-       normalDecomp = iota
-       firstMulti
-       firstCCC
-       endMulti
-       firstLeadingCCC
-       firstCCCZeroExcept
-       firstStarterWithNLead
-       lastDecomp
-)
-
-var cname = []string{"firstMulti", "firstCCC", "endMulti", "firstLeadingCCC", "firstCCCZeroExcept", "firstStarterWithNLead", "lastDecomp"}
-
-func makeDecompSet() decompSet {
-       m := decompSet{}
-       for i := range m {
-               m[i] = make(map[string]bool)
-       }
-       return m
-}
-func (m *decompSet) insert(key int, s string) {
-       m[key][s] = true
-}
-
-func printCharInfoTables(w io.Writer) int {
-       mkstr := func(r rune, f *FormInfo) (int, string) {
-               d := f.expandedDecomp
-               s := string([]rune(d))
-               if max := 1 << 6; len(s) >= max {
-                       const msg = "%U: too many bytes in decomposition: %d >= %d"
-                       log.Fatalf(msg, r, len(s), max)
-               }
-               head := uint8(len(s))
-               if f.quickCheck[MComposed] != QCYes {
-                       head |= 0x40
-               }
-               if f.combinesForward {
-                       head |= 0x80
-               }
-               s = string([]byte{head}) + s
-
-               lccc := ccc(d[0])
-               tccc := ccc(d[len(d)-1])
-               cc := ccc(r)
-               if cc != 0 && lccc == 0 && tccc == 0 {
-                       log.Fatalf("%U: trailing and leading ccc are 0 for non-zero ccc %d", r, cc)
-               }
-               if tccc < lccc && lccc != 0 {
-                       const msg = "%U: lccc (%d) must be <= tcc (%d)"
-                       log.Fatalf(msg, r, lccc, tccc)
-               }
-               index := normalDecomp
-               nTrail := chars[r].nTrailingNonStarters
-               nLead := chars[r].nLeadingNonStarters
-               if tccc > 0 || lccc > 0 || nTrail > 0 {
-                       tccc <<= 2
-                       tccc |= nTrail
-                       s += string([]byte{tccc})
-                       index = endMulti
-                       for _, r := range d[1:] {
-                               if ccc(r) == 0 {
-                                       index = firstCCC
-                               }
-                       }
-                       if lccc > 0 || nLead > 0 {
-                               s += string([]byte{lccc})
-                               if index == firstCCC {
-                                       log.Fatalf("%U: multi-segment decomposition not supported for decompositions with leading CCC != 0", r)
-                               }
-                               index = firstLeadingCCC
-                       }
-                       if cc != lccc {
-                               if cc != 0 {
-                                       log.Fatalf("%U: for lccc != ccc, expected ccc to be 0; was %d", r, cc)
-                               }
-                               index = firstCCCZeroExcept
-                       }
-               } else if len(d) > 1 {
-                       index = firstMulti
-               }
-               return index, s
-       }
-
-       decompSet := makeDecompSet()
-       const nLeadStr = "\x00\x01" // 0-byte length and tccc with nTrail.
-       decompSet.insert(firstStarterWithNLead, nLeadStr)
-
-       // Store the uniqued decompositions in a byte buffer,
-       // preceded by their byte length.
-       for _, c := range chars {
-               for _, f := range c.forms {
-                       if len(f.expandedDecomp) == 0 {
-                               continue
-                       }
-                       if f.combinesBackward {
-                               log.Fatalf("%U: combinesBackward and decompose", c.codePoint)
-                       }
-                       index, s := mkstr(c.codePoint, &f)
-                       decompSet.insert(index, s)
-               }
-       }
-
-       decompositions := bytes.NewBuffer(make([]byte, 0, 10000))
-       size := 0
-       positionMap := make(map[string]uint16)
-       decompositions.WriteString("\000")
-       fmt.Fprintln(w, "const (")
-       for i, m := range decompSet {
-               sa := []string{}
-               for s := range m {
-                       sa = append(sa, s)
-               }
-               sort.Strings(sa)
-               for _, s := range sa {
-                       p := decompositions.Len()
-                       decompositions.WriteString(s)
-                       positionMap[s] = uint16(p)
-               }
-               if cname[i] != "" {
-                       fmt.Fprintf(w, "%s = 0x%X\n", cname[i], decompositions.Len())
-               }
-       }
-       fmt.Fprintln(w, "maxDecomp = 0x8000")
-       fmt.Fprintln(w, ")")
-       b := decompositions.Bytes()
-       printBytes(w, b, "decomps")
-       size += len(b)
-
-       varnames := []string{"nfc", "nfkc"}
-       for i := 0; i < FNumberOfFormTypes; i++ {
-               trie := triegen.NewTrie(varnames[i])
-
-               for r, c := range chars {
-                       f := c.forms[i]
-                       d := f.expandedDecomp
-                       if len(d) != 0 {
-                               _, key := mkstr(c.codePoint, &f)
-                               trie.Insert(rune(r), uint64(positionMap[key]))
-                               if c.ccc != ccc(d[0]) {
-                                       // We assume the lead ccc of a decomposition !=0 in this case.
-                                       if ccc(d[0]) == 0 {
-                                               log.Fatalf("Expected leading CCC to be non-zero; ccc is %d", c.ccc)
-                                       }
-                               }
-                       } else if c.nLeadingNonStarters > 0 && len(f.expandedDecomp) == 0 && c.ccc == 0 && !f.combinesBackward {
-                               // Handle cases where it can't be detected that the nLead should be equal
-                               // to nTrail.
-                               trie.Insert(c.codePoint, uint64(positionMap[nLeadStr]))
-                       } else if v := makeEntry(&f, &c)<<8 | uint16(c.ccc); v != 0 {
-                               trie.Insert(c.codePoint, uint64(0x8000|v))
-                       }
-               }
-               sz, err := trie.Gen(w, triegen.Compact(&normCompacter{name: varnames[i]}))
-               if err != nil {
-                       log.Fatal(err)
-               }
-               size += sz
-       }
-       return size
-}
-
-func contains(sa []string, s string) bool {
-       for _, a := range sa {
-               if a == s {
-                       return true
-               }
-       }
-       return false
-}
-
-func makeTables() {
-       w := &bytes.Buffer{}
-
-       size := 0
-       if *tablelist == "" {
-               return
-       }
-       list := strings.Split(*tablelist, ",")
-       if *tablelist == "all" {
-               list = []string{"recomp", "info"}
-       }
-
-       // Compute maximum decomposition size.
-       max := 0
-       for _, c := range chars {
-               if n := len(string(c.forms[FCompatibility].expandedDecomp)); n > max {
-                       max = n
-               }
-       }
-
-       fmt.Fprintln(w, "const (")
-       fmt.Fprintln(w, "\t// Version is the Unicode edition from which the tables are derived.")
-       fmt.Fprintf(w, "\tVersion = %q\n", gen.UnicodeVersion())
-       fmt.Fprintln(w)
-       fmt.Fprintln(w, "\t// MaxTransformChunkSize indicates the maximum number of bytes that Transform")
-       fmt.Fprintln(w, "\t// may need to write atomically for any Form. Making a destination buffer at")
-       fmt.Fprintln(w, "\t// least this size ensures that Transform can always make progress and that")
-       fmt.Fprintln(w, "\t// the user does not need to grow the buffer on an ErrShortDst.")
-       fmt.Fprintf(w, "\tMaxTransformChunkSize = %d+maxNonStarters*4\n", len(string(0x034F))+max)
-       fmt.Fprintln(w, ")\n")
-
-       // Print the CCC remap table.
-       size += len(cccMap)
-       fmt.Fprintf(w, "var ccc = [%d]uint8{", len(cccMap))
-       for i := 0; i < len(cccMap); i++ {
-               if i%8 == 0 {
-                       fmt.Fprintln(w)
-               }
-               fmt.Fprintf(w, "%3d, ", cccMap[uint8(i)])
-       }
-       fmt.Fprintln(w, "\n}\n")
-
-       if contains(list, "info") {
-               size += printCharInfoTables(w)
-       }
-
-       if contains(list, "recomp") {
-               // Note that we use 32 bit keys, instead of 64 bit.
-               // This clips the bits of three entries, but we know
-               // this won't cause a collision. The compiler will catch
-               // any changes made to UnicodeData.txt that introduces
-               // a collision.
-               // Note that the recomposition map for NFC and NFKC
-               // are identical.
-
-               // Recomposition map
-               nrentries := 0
-               for _, c := range chars {
-                       f := c.forms[FCanonical]
-                       if !f.isOneWay && len(f.decomp) > 0 {
-                               nrentries++
-                       }
-               }
-               sz := nrentries * 8
-               size += sz
-               fmt.Fprintf(w, "// recompMap: %d bytes (entries only)\n", sz)
-               fmt.Fprintln(w, "var recompMap = map[uint32]rune{")
-               for i, c := range chars {
-                       f := c.forms[FCanonical]
-                       d := f.decomp
-                       if !f.isOneWay && len(d) > 0 {
-                               key := uint32(uint16(d[0]))<<16 + uint32(uint16(d[1]))
-                               fmt.Fprintf(w, "0x%.8X: 0x%.4X,\n", key, i)
-                       }
-               }
-               fmt.Fprintf(w, "}\n\n")
-       }
-
-       fmt.Fprintf(w, "// Total size of tables: %dKB (%d bytes)\n", (size+512)/1024, size)
-       gen.WriteGoFile("tables.go", "norm", w.Bytes())
-}
-
-func printChars() {
-       if *verbose {
-               for _, c := range chars {
-                       if !c.isValid() || c.state == SMissing {
-                               continue
-                       }
-                       fmt.Println(c)
-               }
-       }
-}
-
-// verifyComputed does various consistency tests.
-func verifyComputed() {
-       for i, c := range chars {
-               for _, f := range c.forms {
-                       isNo := (f.quickCheck[MDecomposed] == QCNo)
-                       if (len(f.decomp) > 0) != isNo && !isHangul(rune(i)) {
-                               log.Fatalf("%U: NF*D QC must be No if rune decomposes", i)
-                       }
-
-                       isMaybe := f.quickCheck[MComposed] == QCMaybe
-                       if f.combinesBackward != isMaybe {
-                               log.Fatalf("%U: NF*C QC must be Maybe if combinesBackward", i)
-                       }
-                       if len(f.decomp) > 0 && f.combinesForward && isMaybe {
-                               log.Fatalf("%U: NF*C QC must be Yes or No if combinesForward and decomposes", i)
-                       }
-
-                       if len(f.expandedDecomp) != 0 {
-                               continue
-                       }
-                       if a, b := c.nLeadingNonStarters > 0, (c.ccc > 0 || f.combinesBackward); a != b {
-                               // We accept these runes to be treated differently (it only affects
-                               // segment breaking in iteration, most likely on improper use), but
-                               // reconsider if more characters are added.
-                               // U+FF9E HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;;;;
-                               // U+FF9F HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;;;;
-                               // U+3133 HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
-                               // U+318E HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
-                               // U+FFA3 HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
-                               // U+FFDC HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
-                               if i != 0xFF9E && i != 0xFF9F && !(0x3133 <= i && i <= 0x318E) && !(0xFFA3 <= i && i <= 0xFFDC) {
-                                       log.Fatalf("%U: nLead was %v; want %v", i, a, b)
-                               }
-                       }
-               }
-               nfc := c.forms[FCanonical]
-               nfkc := c.forms[FCompatibility]
-               if nfc.combinesBackward != nfkc.combinesBackward {
-                       log.Fatalf("%U: Cannot combine combinesBackward\n", c.codePoint)
-               }
-       }
-}
-
-// Use values in DerivedNormalizationProps.txt to compare against the
-// values we computed.
-// DerivedNormalizationProps.txt has form:
-// 00C0..00C5    ; NFD_QC; N # ...
-// 0374          ; NFD_QC; N # ...
-// See http://unicode.org/reports/tr44/ for full explanation
-func testDerived() {
-       f := gen.OpenUCDFile("DerivedNormalizationProps.txt")
-       defer f.Close()
-       p := ucd.New(f)
-       for p.Next() {
-               r := p.Rune(0)
-               c := &chars[r]
-
-               var ftype, mode int
-               qt := p.String(1)
-               switch qt {
-               case "NFC_QC":
-                       ftype, mode = FCanonical, MComposed
-               case "NFD_QC":
-                       ftype, mode = FCanonical, MDecomposed
-               case "NFKC_QC":
-                       ftype, mode = FCompatibility, MComposed
-               case "NFKD_QC":
-                       ftype, mode = FCompatibility, MDecomposed
-               default:
-                       continue
-               }
-               var qr QCResult
-               switch p.String(2) {
-               case "Y":
-                       qr = QCYes
-               case "N":
-                       qr = QCNo
-               case "M":
-                       qr = QCMaybe
-               default:
-                       log.Fatalf(`Unexpected quick check value "%s"`, p.String(2))
-               }
-               if got := c.forms[ftype].quickCheck[mode]; got != qr {
-                       log.Printf("%U: FAILED %s (was %v need %v)\n", r, qt, got, qr)
-               }
-               c.forms[ftype].verified[mode] = true
-       }
-       if err := p.Err(); err != nil {
-               log.Fatal(err)
-       }
-       // Any unspecified value must be QCYes. Verify this.
-       for i, c := range chars {
-               for j, fd := range c.forms {
-                       for k, qr := range fd.quickCheck {
-                               if !fd.verified[k] && qr != QCYes {
-                                       m := "%U: FAIL F:%d M:%d (was %v need Yes) %s\n"
-                                       log.Printf(m, i, j, k, qr, c.name)
-                               }
-                       }
-               }
-       }
-}
-
-var testHeader = `const (
-       Yes = iota
-       No
-       Maybe
-)
-
-type formData struct {
-       qc              uint8
-       combinesForward bool
-       decomposition   string
-}
-
-type runeData struct {
-       r      rune
-       ccc    uint8
-       nLead  uint8
-       nTrail uint8
-       f      [2]formData // 0: canonical; 1: compatibility
-}
-
-func f(qc uint8, cf bool, dec string) [2]formData {
-       return [2]formData{{qc, cf, dec}, {qc, cf, dec}}
-}
-
-func g(qc, qck uint8, cf, cfk bool, d, dk string) [2]formData {
-       return [2]formData{{qc, cf, d}, {qck, cfk, dk}}
-}
-
-var testData = []runeData{
-`
-
-func printTestdata() {
-       type lastInfo struct {
-               ccc    uint8
-               nLead  uint8
-               nTrail uint8
-               f      string
-       }
-
-       last := lastInfo{}
-       w := &bytes.Buffer{}
-       fmt.Fprintf(w, testHeader)
-       for r, c := range chars {
-               f := c.forms[FCanonical]
-               qc, cf, d := f.quickCheck[MComposed], f.combinesForward, string(f.expandedDecomp)
-               f = c.forms[FCompatibility]
-               qck, cfk, dk := f.quickCheck[MComposed], f.combinesForward, string(f.expandedDecomp)
-               s := ""
-               if d == dk && qc == qck && cf == cfk {
-                       s = fmt.Sprintf("f(%s, %v, %q)", qc, cf, d)
-               } else {
-                       s = fmt.Sprintf("g(%s, %s, %v, %v, %q, %q)", qc, qck, cf, cfk, d, dk)
-               }
-               current := lastInfo{c.ccc, c.nLeadingNonStarters, c.nTrailingNonStarters, s}
-               if last != current {
-                       fmt.Fprintf(w, "\t{0x%x, %d, %d, %d, %s},\n", r, c.origCCC, c.nLeadingNonStarters, c.nTrailingNonStarters, s)
-                       last = current
-               }
-       }
-       fmt.Fprintln(w, "}")
-       gen.WriteGoFile("data_test.go", "norm", w.Bytes())
-}
diff --git a/vendor/golang.org/x/text/unicode/norm/triegen.go b/vendor/golang.org/x/text/unicode/norm/triegen.go
deleted file mode 100644 (file)
index 45d7119..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore
-
-// Trie table generator.
-// Used by make*tables tools to generate a go file with trie data structures
-// for mapping UTF-8 to a 16-bit value. All but the last byte in a UTF-8 byte
-// sequence are used to lookup offsets in the index table to be used for the
-// next byte. The last byte is used to index into a table with 16-bit values.
-
-package main
-
-import (
-       "fmt"
-       "io"
-)
-
-const maxSparseEntries = 16
-
-type normCompacter struct {
-       sparseBlocks [][]uint64
-       sparseOffset []uint16
-       sparseCount  int
-       name         string
-}
-
-func mostFrequentStride(a []uint64) int {
-       counts := make(map[int]int)
-       var v int
-       for _, x := range a {
-               if stride := int(x) - v; v != 0 && stride >= 0 {
-                       counts[stride]++
-               }
-               v = int(x)
-       }
-       var maxs, maxc int
-       for stride, cnt := range counts {
-               if cnt > maxc || (cnt == maxc && stride < maxs) {
-                       maxs, maxc = stride, cnt
-               }
-       }
-       return maxs
-}
-
-func countSparseEntries(a []uint64) int {
-       stride := mostFrequentStride(a)
-       var v, count int
-       for _, tv := range a {
-               if int(tv)-v != stride {
-                       if tv != 0 {
-                               count++
-                       }
-               }
-               v = int(tv)
-       }
-       return count
-}
-
-func (c *normCompacter) Size(v []uint64) (sz int, ok bool) {
-       if n := countSparseEntries(v); n <= maxSparseEntries {
-               return (n+1)*4 + 2, true
-       }
-       return 0, false
-}
-
-func (c *normCompacter) Store(v []uint64) uint32 {
-       h := uint32(len(c.sparseOffset))
-       c.sparseBlocks = append(c.sparseBlocks, v)
-       c.sparseOffset = append(c.sparseOffset, uint16(c.sparseCount))
-       c.sparseCount += countSparseEntries(v) + 1
-       return h
-}
-
-func (c *normCompacter) Handler() string {
-       return c.name + "Sparse.lookup"
-}
-
-func (c *normCompacter) Print(w io.Writer) (retErr error) {
-       p := func(f string, x ...interface{}) {
-               if _, err := fmt.Fprintf(w, f, x...); retErr == nil && err != nil {
-                       retErr = err
-               }
-       }
-
-       ls := len(c.sparseBlocks)
-       p("// %sSparseOffset: %d entries, %d bytes\n", c.name, ls, ls*2)
-       p("var %sSparseOffset = %#v\n\n", c.name, c.sparseOffset)
-
-       ns := c.sparseCount
-       p("// %sSparseValues: %d entries, %d bytes\n", c.name, ns, ns*4)
-       p("var %sSparseValues = [%d]valueRange {", c.name, ns)
-       for i, b := range c.sparseBlocks {
-               p("\n// Block %#x, offset %#x", i, c.sparseOffset[i])
-               var v int
-               stride := mostFrequentStride(b)
-               n := countSparseEntries(b)
-               p("\n{value:%#04x,lo:%#02x},", stride, uint8(n))
-               for i, nv := range b {
-                       if int(nv)-v != stride {
-                               if v != 0 {
-                                       p(",hi:%#02x},", 0x80+i-1)
-                               }
-                               if nv != 0 {
-                                       p("\n{value:%#04x,lo:%#02x", nv, 0x80+i)
-                               }
-                       }
-                       v = int(nv)
-               }
-               if v != 0 {
-                       p(",hi:%#02x},", 0x80+len(b)-1)
-               }
-       }
-       p("\n}\n\n")
-       return
-}
index 162963b77de9b17660d5f4d78ea0925821500c5b..c0d4a502324235596c5e1f34e82d104010b9f7c3 100644 (file)
                {
                        "checksumSHA1": "Mr4ur60bgQJnQFfJY0dGtwWwMPE=",
                        "path": "golang.org/x/text/encoding",
-                       "revision": "a8b38433e35b65ba247bb267317037dee1b70cea",
-                       "revisionTime": "2016-10-19T13:35:53Z"
+                       "revision": "2bf8f2a19ec09c670e931282edfe6567f6be21c9",
+                       "revisionTime": "2017-06-27T21:03:49Z"
                },
                {
-                       "checksumSHA1": "gJG/5S8KrCA1QGkIkpa5a/wnmy4=",
+                       "checksumSHA1": "DSdlK4MKI/a3U8Zaee2XKBe01Fo=",
                        "path": "golang.org/x/text/encoding/charmap",
-                       "revision": "a8b38433e35b65ba247bb267317037dee1b70cea",
-                       "revisionTime": "2016-10-19T13:35:53Z"
+                       "revision": "2bf8f2a19ec09c670e931282edfe6567f6be21c9",
+                       "revisionTime": "2017-06-27T21:03:49Z"
                },
                {
-                       "checksumSHA1": "mI8YM2LehMxYDcauq5loMZr1pP8=",
+                       "checksumSHA1": "z7tgTCQT62mHxtNMi/AXui/FAfQ=",
                        "path": "golang.org/x/text/encoding/htmlindex",
-                       "revision": "a8b38433e35b65ba247bb267317037dee1b70cea",
-                       "revisionTime": "2016-10-19T13:35:53Z"
+                       "revision": "2bf8f2a19ec09c670e931282edfe6567f6be21c9",
+                       "revisionTime": "2017-06-27T21:03:49Z"
                },
                {
                        "checksumSHA1": "zeHyHebIZl1tGuwGllIhjfci+wI=",
                        "path": "golang.org/x/text/encoding/internal",
-                       "revision": "a8b38433e35b65ba247bb267317037dee1b70cea",
-                       "revisionTime": "2016-10-19T13:35:53Z"
+                       "revision": "2bf8f2a19ec09c670e931282edfe6567f6be21c9",
+                       "revisionTime": "2017-06-27T21:03:49Z"
                },
                {
-                       "checksumSHA1": "TF4hoIqHVEAvOq67rfnSLSkcZ1Y=",
+                       "checksumSHA1": "7kYqxy64WhMjFIFZgN7tJ3lbKxM=",
                        "path": "golang.org/x/text/encoding/internal/identifier",
-                       "revision": "a8b38433e35b65ba247bb267317037dee1b70cea",
-                       "revisionTime": "2016-10-19T13:35:53Z"
+                       "revision": "2bf8f2a19ec09c670e931282edfe6567f6be21c9",
+                       "revisionTime": "2017-06-27T21:03:49Z"
                },
                {
-                       "checksumSHA1": "HeZV82ktrmgyAaYLtNFS0qYgspI=",
+                       "checksumSHA1": "2YqVpmvjWGEBATyUphTP1MS34JE=",
                        "path": "golang.org/x/text/encoding/japanese",
-                       "revision": "a8b38433e35b65ba247bb267317037dee1b70cea",
-                       "revisionTime": "2016-10-19T13:35:53Z"
+                       "revision": "2bf8f2a19ec09c670e931282edfe6567f6be21c9",
+                       "revisionTime": "2017-06-27T21:03:49Z"
                },
                {
-                       "checksumSHA1": "8y87WJz3OkDWtPCIXxJcYpo+OY8=",
+                       "checksumSHA1": "+ErWCAdaMwO4PLtrk9D/Hh+7oQM=",
                        "path": "golang.org/x/text/encoding/korean",
-                       "revision": "a8b38433e35b65ba247bb267317037dee1b70cea",
-                       "revisionTime": "2016-10-19T13:35:53Z"
+                       "revision": "2bf8f2a19ec09c670e931282edfe6567f6be21c9",
+                       "revisionTime": "2017-06-27T21:03:49Z"
                },
                {
-                       "checksumSHA1": "WYfmebIyX5Zae8NUfu9PsQjQff0=",
+                       "checksumSHA1": "mTuZi5urYwgDIO8+Gfql2pv8Vwg=",
                        "path": "golang.org/x/text/encoding/simplifiedchinese",
-                       "revision": "a8b38433e35b65ba247bb267317037dee1b70cea",
-                       "revisionTime": "2016-10-19T13:35:53Z"
+                       "revision": "2bf8f2a19ec09c670e931282edfe6567f6be21c9",
+                       "revisionTime": "2017-06-27T21:03:49Z"
                },
                {
-                       "checksumSHA1": "KKqYmi6fxt3r3uo4lExss2yTMbs=",
+                       "checksumSHA1": "D+VI4j0Wjzr8SeupWdOB5KBdFOw=",
                        "path": "golang.org/x/text/encoding/traditionalchinese",
-                       "revision": "a8b38433e35b65ba247bb267317037dee1b70cea",
-                       "revisionTime": "2016-10-19T13:35:53Z"
+                       "revision": "2bf8f2a19ec09c670e931282edfe6567f6be21c9",
+                       "revisionTime": "2017-06-27T21:03:49Z"
                },
                {
                        "checksumSHA1": "G9LfJI9gySazd+MyyC6QbTHx4to=",
                        "path": "golang.org/x/text/encoding/unicode",
-                       "revision": "a8b38433e35b65ba247bb267317037dee1b70cea",
-                       "revisionTime": "2016-10-19T13:35:53Z"
+                       "revision": "2bf8f2a19ec09c670e931282edfe6567f6be21c9",
+                       "revisionTime": "2017-06-27T21:03:49Z"
                },
                {
                        "checksumSHA1": "hyNCcTwMQnV6/MK8uUW9E5H0J0M=",
                        "path": "golang.org/x/text/internal/tag",
-                       "revision": "a8b38433e35b65ba247bb267317037dee1b70cea",
-                       "revisionTime": "2016-10-19T13:35:53Z"
+                       "revision": "2bf8f2a19ec09c670e931282edfe6567f6be21c9",
+                       "revisionTime": "2017-06-27T21:03:49Z"
                },
                {
                        "checksumSHA1": "Qk7dljcrEK1BJkAEZguxAbG9dSo=",
                        "path": "golang.org/x/text/internal/utf8internal",
-                       "revision": "a8b38433e35b65ba247bb267317037dee1b70cea",
-                       "revisionTime": "2016-10-19T13:35:53Z"
+                       "revision": "2bf8f2a19ec09c670e931282edfe6567f6be21c9",
+                       "revisionTime": "2017-06-27T21:03:49Z"
                },
                {
-                       "checksumSHA1": "bsNFI/kfmF0p43jLKiMYRqw9Dfs=",
+                       "checksumSHA1": "SnP28TAvq7k08OmkHClZDYFEWww=",
                        "path": "golang.org/x/text/language",
-                       "revision": "a8b38433e35b65ba247bb267317037dee1b70cea",
-                       "revisionTime": "2016-10-19T13:35:53Z"
+                       "revision": "2bf8f2a19ec09c670e931282edfe6567f6be21c9",
+                       "revisionTime": "2017-06-27T21:03:49Z"
                },
                {
                        "checksumSHA1": "IV4MN7KGBSocu/5NR3le3sxup4Y=",
                        "path": "golang.org/x/text/runes",
-                       "revision": "a8b38433e35b65ba247bb267317037dee1b70cea",
-                       "revisionTime": "2016-10-19T13:35:53Z"
+                       "revision": "2bf8f2a19ec09c670e931282edfe6567f6be21c9",
+                       "revisionTime": "2017-06-27T21:03:49Z"
                },
                {
                        "checksumSHA1": "ziMb9+ANGRJSSIuxYdRbA+cDRBQ=",
                        "path": "golang.org/x/text/transform",
-                       "revision": "a8b38433e35b65ba247bb267317037dee1b70cea",
-                       "revisionTime": "2016-10-19T13:35:53Z"
+                       "revision": "2bf8f2a19ec09c670e931282edfe6567f6be21c9",
+                       "revisionTime": "2017-06-27T21:03:49Z"
                },
                {
-                       "checksumSHA1": "Anof4bt0AU+Sa3R8Rq0KBnlpbaQ=",
+                       "checksumSHA1": "kKylzIrLEnH8NKyeVAL0dq5gjVQ=",
                        "path": "golang.org/x/text/unicode/norm",
                        "revision": "2bf8f2a19ec09c670e931282edfe6567f6be21c9",
                        "revisionTime": "2017-06-27T21:03:49Z"