Home | History | Annotate | Download | only in src
      1 // Copyright 2012 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 //
      5 // This file was generated at 2014-10-08 15:25:47.940335
      6 
      7 #include "src/unicode.h"
      8 #include "src/unicode-inl.h"
      9 #include <stdio.h>
     10 #include <stdlib.h>
     11 
     12 namespace unibrow {
     13 
     14 static const int kStartBit = (1 << 30);
     15 static const int kChunkBits = (1 << 13);
     16 static const uchar kSentinel = static_cast<uchar>(-1);
     17 
     18 /**
     19  * \file
     20  * Implementations of functions for working with unicode.
     21  */
     22 
     23 typedef signed short int16_t;  // NOLINT
     24 typedef unsigned short uint16_t;  // NOLINT
     25 typedef int int32_t;  // NOLINT
     26 
     27 
     28 // All access to the character table should go through this function.
     29 template <int D>
     30 static inline uchar TableGet(const int32_t* table, int index) {
     31   return table[D * index];
     32 }
     33 
     34 
     35 static inline uchar GetEntry(int32_t entry) {
     36   return entry & (kStartBit - 1);
     37 }
     38 
     39 
     40 static inline bool IsStart(int32_t entry) {
     41   return (entry & kStartBit) != 0;
     42 }
     43 
     44 
     45 /**
     46  * Look up a character in the unicode table using a mix of binary and
     47  * interpolation search.  For a uniformly distributed array
     48  * interpolation search beats binary search by a wide margin.  However,
     49  * in this case interpolation search degenerates because of some very
     50  * high values in the lower end of the table so this function uses a
     51  * combination.  The average number of steps to look up the information
     52  * about a character is around 10, slightly higher if there is no
     53  * information available about the character.
     54  */
     55 static bool LookupPredicate(const int32_t* table, uint16_t size, uchar chr) {
     56   static const int kEntryDist = 1;
     57   uint16_t value = chr & (kChunkBits - 1);
     58   unsigned int low = 0;
     59   unsigned int high = size - 1;
     60   while (high != low) {
     61     unsigned int mid = low + ((high - low) >> 1);
     62     uchar current_value = GetEntry(TableGet<kEntryDist>(table, mid));
     63     // If we've found an entry less than or equal to this one, and the
     64     // next one is not also less than this one, we've arrived.
     65     if ((current_value <= value) &&
     66         (mid + 1 == size ||
     67          GetEntry(TableGet<kEntryDist>(table, mid + 1)) > value)) {
     68       low = mid;
     69       break;
     70     } else if (current_value < value) {
     71       low = mid + 1;
     72     } else if (current_value > value) {
     73       // If we've just checked the bottom-most value and it's not
     74       // the one we're looking for, we're done.
     75       if (mid == 0) break;
     76       high = mid - 1;
     77     }
     78   }
     79   int32_t field = TableGet<kEntryDist>(table, low);
     80   uchar entry = GetEntry(field);
     81   bool is_start = IsStart(field);
     82   return (entry == value) || (entry < value && is_start);
     83 }
     84 
     85 template <int kW>
     86 struct MultiCharacterSpecialCase {
     87   static const uchar kEndOfEncoding = kSentinel;
     88   uchar chars[kW];
     89 };
     90 
     91 
     92 // Look up the mapping for the given character in the specified table,
     93 // which is of the specified length and uses the specified special case
     94 // mapping for multi-char mappings.  The next parameter is the character
     95 // following the one to map.  The result will be written in to the result
     96 // buffer and the number of characters written will be returned.  Finally,
     97 // if the allow_caching_ptr is non-null then false will be stored in
     98 // it if the result contains multiple characters or depends on the
     99 // context.
    100 // If ranges are linear, a match between a start and end point is
    101 // offset by the distance between the match and the start. Otherwise
    102 // the result is the same as for the start point on the entire range.
    103 template <bool ranges_are_linear, int kW>
    104 static int LookupMapping(const int32_t* table,
    105                          uint16_t size,
    106                          const MultiCharacterSpecialCase<kW>* multi_chars,
    107                          uchar chr,
    108                          uchar next,
    109                          uchar* result,
    110                          bool* allow_caching_ptr) {
    111   static const int kEntryDist = 2;
    112   uint16_t key = chr & (kChunkBits - 1);
    113   uint16_t chunk_start = chr - key;
    114   unsigned int low = 0;
    115   unsigned int high = size - 1;
    116   while (high != low) {
    117     unsigned int mid = low + ((high - low) >> 1);
    118     uchar current_value = GetEntry(TableGet<kEntryDist>(table, mid));
    119     // If we've found an entry less than or equal to this one, and the next one
    120     // is not also less than this one, we've arrived.
    121     if ((current_value <= key) &&
    122         (mid + 1 == size ||
    123          GetEntry(TableGet<kEntryDist>(table, mid + 1)) > key)) {
    124       low = mid;
    125       break;
    126     } else if (current_value < key) {
    127       low = mid + 1;
    128     } else if (current_value > key) {
    129       // If we've just checked the bottom-most value and it's not
    130       // the one we're looking for, we're done.
    131       if (mid == 0) break;
    132       high = mid - 1;
    133     }
    134   }
    135   int32_t field = TableGet<kEntryDist>(table, low);
    136   uchar entry = GetEntry(field);
    137   bool is_start = IsStart(field);
    138   bool found = (entry == key) || (entry < key && is_start);
    139   if (found) {
    140     int32_t value = table[2 * low + 1];
    141     if (value == 0) {
    142       // 0 means not present
    143       return 0;
    144     } else if ((value & 3) == 0) {
    145       // Low bits 0 means a constant offset from the given character.
    146       if (ranges_are_linear) {
    147         result[0] = chr + (value >> 2);
    148       } else {
    149         result[0] = entry + chunk_start + (value >> 2);
    150       }
    151       return 1;
    152     } else if ((value & 3) == 1) {
    153       // Low bits 1 means a special case mapping
    154       if (allow_caching_ptr) *allow_caching_ptr = false;
    155       const MultiCharacterSpecialCase<kW>& mapping = multi_chars[value >> 2];
    156       int length = 0;
    157       for (length = 0; length < kW; length++) {
    158         uchar mapped = mapping.chars[length];
    159         if (mapped == MultiCharacterSpecialCase<kW>::kEndOfEncoding) break;
    160         if (ranges_are_linear) {
    161           result[length] = mapped + (key - entry);
    162         } else {
    163           result[length] = mapped;
    164         }
    165       }
    166       return length;
    167     } else {
    168       // Low bits 2 means a really really special case
    169       if (allow_caching_ptr) *allow_caching_ptr = false;
    170       // The cases of this switch are defined in unicode.py in the
    171       // really_special_cases mapping.
    172       switch (value >> 2) {
    173         case 1:
    174           // Really special case 1: upper case sigma.  This letter
    175           // converts to two different lower case sigmas depending on
    176           // whether or not it occurs at the end of a word.
    177           if (next != 0 && Letter::Is(next)) {
    178             result[0] = 0x03C3;
    179           } else {
    180             result[0] = 0x03C2;
    181           }
    182           return 1;
    183         default:
    184           return 0;
    185       }
    186       return -1;
    187     }
    188   } else {
    189     return 0;
    190   }
    191 }
    192 
    193 
    194 static inline size_t NonASCIISequenceLength(byte first) {
    195   // clang-format off
    196   static const uint8_t lengths[256] = {
    197       // The first 128 entries correspond to ASCII characters.
    198       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    199       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    200       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    201       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    202       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    203       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    204       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    205       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    206       // The following 64 entries correspond to continuation bytes.
    207       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    208       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    209       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    210       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    211       // The next are two invalid overlong encodings and 30 two-byte sequences.
    212       0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    213       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    214       // 16 three-byte sequences.
    215       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    216       // 5 four-byte sequences, followed by sequences that could only encode
    217       // code points outside of the unicode range.
    218       4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    219   // clang-format on
    220   return lengths[first];
    221 }
    222 
    223 
    224 static inline bool IsContinuationCharacter(byte chr) {
    225   return chr >= 0x80 && chr <= 0xBF;
    226 }
    227 
    228 
    229 // This method decodes an UTF-8 value according to RFC 3629.
    230 uchar Utf8::CalculateValue(const byte* str, size_t max_length, size_t* cursor) {
    231   size_t length = NonASCIISequenceLength(str[0]);
    232   if (length == 0 || max_length < length) {
    233     *cursor += 1;
    234     return kBadChar;
    235   }
    236   if (length == 2) {
    237     if (!IsContinuationCharacter(str[1])) {
    238       *cursor += 1;
    239       return kBadChar;
    240     }
    241     *cursor += 2;
    242     return ((str[0] << 6) + str[1]) - 0x00003080;
    243   }
    244   if (length == 3) {
    245     switch (str[0]) {
    246       case 0xE0:
    247         // Overlong three-byte sequence.
    248         if (str[1] < 0xA0 || str[1] > 0xBF) {
    249           *cursor += 1;
    250           return kBadChar;
    251         }
    252         break;
    253       case 0xED:
    254         // High and low surrogate halves.
    255         if (str[1] < 0x80 || str[1] > 0x9F) {
    256           *cursor += 1;
    257           return kBadChar;
    258         }
    259         break;
    260       default:
    261         if (!IsContinuationCharacter(str[1])) {
    262           *cursor += 1;
    263           return kBadChar;
    264         }
    265     }
    266     if (!IsContinuationCharacter(str[2])) {
    267       *cursor += 1;
    268       return kBadChar;
    269     }
    270     *cursor += 3;
    271     return ((str[0] << 12) + (str[1] << 6) + str[2]) - 0x000E2080;
    272   }
    273   DCHECK(length == 4);
    274   switch (str[0]) {
    275     case 0xF0:
    276       // Overlong four-byte sequence.
    277       if (str[1] < 0x90 || str[1] > 0xBF) {
    278         *cursor += 1;
    279         return kBadChar;
    280       }
    281       break;
    282     case 0xF4:
    283       // Code points outside of the unicode range.
    284       if (str[1] < 0x80 || str[1] > 0x8F) {
    285         *cursor += 1;
    286         return kBadChar;
    287       }
    288       break;
    289     default:
    290       if (!IsContinuationCharacter(str[1])) {
    291         *cursor += 1;
    292         return kBadChar;
    293       }
    294   }
    295   if (!IsContinuationCharacter(str[2])) {
    296     *cursor += 1;
    297     return kBadChar;
    298   }
    299   if (!IsContinuationCharacter(str[3])) {
    300     *cursor += 1;
    301     return kBadChar;
    302   }
    303   *cursor += 4;
    304   return ((str[0] << 18) + (str[1] << 12) + (str[2] << 6) + str[3]) -
    305          0x03C82080;
    306 }
    307 
    308 bool Utf8::Validate(const byte* bytes, size_t length) {
    309   size_t cursor = 0;
    310 
    311   // Performance optimization: Skip over single-byte values first.
    312   while (cursor < length && bytes[cursor] <= kMaxOneByteChar) {
    313     ++cursor;
    314   }
    315 
    316   while (cursor < length) {
    317     uchar c = ValueOf(bytes + cursor, length - cursor, &cursor);
    318     if (!IsValidCharacter(c)) return false;
    319   }
    320   return true;
    321 }
    322 
    323 // Uppercase:            point.category == 'Lu'
    324 
    325 static const uint16_t kUppercaseTable0Size = 455;
    326 static const int32_t kUppercaseTable0[455] = {
    327     1073741889, 90,         1073742016, 214,
    328     1073742040, 222,        256,        258,  // NOLINT
    329     260,        262,        264,        266,
    330     268,        270,        272,        274,  // NOLINT
    331     276,        278,        280,        282,
    332     284,        286,        288,        290,  // NOLINT
    333     292,        294,        296,        298,
    334     300,        302,        304,        306,  // NOLINT
    335     308,        310,        313,        315,
    336     317,        319,        321,        323,  // NOLINT
    337     325,        327,        330,        332,
    338     334,        336,        338,        340,  // NOLINT
    339     342,        344,        346,        348,
    340     350,        352,        354,        356,  // NOLINT
    341     358,        360,        362,        364,
    342     366,        368,        370,        372,  // NOLINT
    343     374,        1073742200, 377,        379,
    344     381,        1073742209, 386,        388,  // NOLINT
    345     1073742214, 391,        1073742217, 395,
    346     1073742222, 401,        1073742227, 404,  // NOLINT
    347     1073742230, 408,        1073742236, 413,
    348     1073742239, 416,        418,        420,  // NOLINT
    349     1073742246, 423,        425,        428,
    350     1073742254, 431,        1073742257, 435,  // NOLINT
    351     437,        1073742263, 440,        444,
    352     452,        455,        458,        461,  // NOLINT
    353     463,        465,        467,        469,
    354     471,        473,        475,        478,  // NOLINT
    355     480,        482,        484,        486,
    356     488,        490,        492,        494,  // NOLINT
    357     497,        500,        1073742326, 504,
    358     506,        508,        510,        512,  // NOLINT
    359     514,        516,        518,        520,
    360     522,        524,        526,        528,  // NOLINT
    361     530,        532,        534,        536,
    362     538,        540,        542,        544,  // NOLINT
    363     546,        548,        550,        552,
    364     554,        556,        558,        560,  // NOLINT
    365     562,        1073742394, 571,        1073742397,
    366     574,        577,        1073742403, 582,  // NOLINT
    367     584,        586,        588,        590,
    368     880,        882,        886,        895,  // NOLINT
    369     902,        1073742728, 906,        908,
    370     1073742734, 911,        1073742737, 929,  // NOLINT
    371     1073742755, 939,        975,        1073742802,
    372     980,        984,        986,        988,  // NOLINT
    373     990,        992,        994,        996,
    374     998,        1000,       1002,       1004,  // NOLINT
    375     1006,       1012,       1015,       1073742841,
    376     1018,       1073742845, 1071,       1120,  // NOLINT
    377     1122,       1124,       1126,       1128,
    378     1130,       1132,       1134,       1136,  // NOLINT
    379     1138,       1140,       1142,       1144,
    380     1146,       1148,       1150,       1152,  // NOLINT
    381     1162,       1164,       1166,       1168,
    382     1170,       1172,       1174,       1176,  // NOLINT
    383     1178,       1180,       1182,       1184,
    384     1186,       1188,       1190,       1192,  // NOLINT
    385     1194,       1196,       1198,       1200,
    386     1202,       1204,       1206,       1208,  // NOLINT
    387     1210,       1212,       1214,       1073743040,
    388     1217,       1219,       1221,       1223,  // NOLINT
    389     1225,       1227,       1229,       1232,
    390     1234,       1236,       1238,       1240,  // NOLINT
    391     1242,       1244,       1246,       1248,
    392     1250,       1252,       1254,       1256,  // NOLINT
    393     1258,       1260,       1262,       1264,
    394     1266,       1268,       1270,       1272,  // NOLINT
    395     1274,       1276,       1278,       1280,
    396     1282,       1284,       1286,       1288,  // NOLINT
    397     1290,       1292,       1294,       1296,
    398     1298,       1300,       1302,       1304,  // NOLINT
    399     1306,       1308,       1310,       1312,
    400     1314,       1316,       1318,       1320,  // NOLINT
    401     1322,       1324,       1326,       1073743153,
    402     1366,       1073746080, 4293,       4295,  // NOLINT
    403     4301,       7680,       7682,       7684,
    404     7686,       7688,       7690,       7692,  // NOLINT
    405     7694,       7696,       7698,       7700,
    406     7702,       7704,       7706,       7708,  // NOLINT
    407     7710,       7712,       7714,       7716,
    408     7718,       7720,       7722,       7724,  // NOLINT
    409     7726,       7728,       7730,       7732,
    410     7734,       7736,       7738,       7740,  // NOLINT
    411     7742,       7744,       7746,       7748,
    412     7750,       7752,       7754,       7756,  // NOLINT
    413     7758,       7760,       7762,       7764,
    414     7766,       7768,       7770,       7772,  // NOLINT
    415     7774,       7776,       7778,       7780,
    416     7782,       7784,       7786,       7788,  // NOLINT
    417     7790,       7792,       7794,       7796,
    418     7798,       7800,       7802,       7804,  // NOLINT
    419     7806,       7808,       7810,       7812,
    420     7814,       7816,       7818,       7820,  // NOLINT
    421     7822,       7824,       7826,       7828,
    422     7838,       7840,       7842,       7844,  // NOLINT
    423     7846,       7848,       7850,       7852,
    424     7854,       7856,       7858,       7860,  // NOLINT
    425     7862,       7864,       7866,       7868,
    426     7870,       7872,       7874,       7876,  // NOLINT
    427     7878,       7880,       7882,       7884,
    428     7886,       7888,       7890,       7892,  // NOLINT
    429     7894,       7896,       7898,       7900,
    430     7902,       7904,       7906,       7908,  // NOLINT
    431     7910,       7912,       7914,       7916,
    432     7918,       7920,       7922,       7924,  // NOLINT
    433     7926,       7928,       7930,       7932,
    434     7934,       1073749768, 7951,       1073749784,  // NOLINT
    435     7965,       1073749800, 7983,       1073749816,
    436     7999,       1073749832, 8013,       8025,  // NOLINT
    437     8027,       8029,       8031,       1073749864,
    438     8047,       1073749944, 8123,       1073749960,  // NOLINT
    439     8139,       1073749976, 8155,       1073749992,
    440     8172,       1073750008, 8187};  // NOLINT
    441 static const uint16_t kUppercaseTable1Size = 86;
    442 static const int32_t kUppercaseTable1[86] = {
    443   258, 263, 1073742091, 269, 1073742096, 274, 277, 1073742105,  // NOLINT
    444   285, 292, 294, 296, 1073742122, 301, 1073742128, 307,  // NOLINT
    445   1073742142, 319, 325, 387, 1073744896, 3118, 3168, 1073744994,  // NOLINT
    446   3172, 3175, 3177, 3179, 1073745005, 3184, 3186, 3189,  // NOLINT
    447   1073745022, 3200, 3202, 3204, 3206, 3208, 3210, 3212,  // NOLINT
    448   3214, 3216, 3218, 3220, 3222, 3224, 3226, 3228,  // NOLINT
    449   3230, 3232, 3234, 3236, 3238, 3240, 3242, 3244,  // NOLINT
    450   3246, 3248, 3250, 3252, 3254, 3256, 3258, 3260,  // NOLINT
    451   3262, 3264, 3266, 3268, 3270, 3272, 3274, 3276,  // NOLINT
    452   3278, 3280, 3282, 3284, 3286, 3288, 3290, 3292,  // NOLINT
    453   3294, 3296, 3298, 3307, 3309, 3314 };  // NOLINT
    454 static const uint16_t kUppercaseTable5Size = 101;
    455 static const int32_t kUppercaseTable5[101] = {
    456     1600, 1602,       1604, 1606,       1608, 1610,       1612, 1614,  // NOLINT
    457     1616, 1618,       1620, 1622,       1624, 1626,       1628, 1630,  // NOLINT
    458     1632, 1634,       1636, 1638,       1640, 1642,       1644, 1664,  // NOLINT
    459     1666, 1668,       1670, 1672,       1674, 1676,       1678, 1680,  // NOLINT
    460     1682, 1684,       1686, 1688,       1690, 1826,       1828, 1830,  // NOLINT
    461     1832, 1834,       1836, 1838,       1842, 1844,       1846, 1848,  // NOLINT
    462     1850, 1852,       1854, 1856,       1858, 1860,       1862, 1864,  // NOLINT
    463     1866, 1868,       1870, 1872,       1874, 1876,       1878, 1880,  // NOLINT
    464     1882, 1884,       1886, 1888,       1890, 1892,       1894, 1896,  // NOLINT
    465     1898, 1900,       1902, 1913,       1915, 1073743741, 1918, 1920,  // NOLINT
    466     1922, 1924,       1926, 1931,       1933, 1936,       1938, 1942,  // NOLINT
    467     1944, 1946,       1948, 1950,       1952, 1954,       1956, 1958,  // NOLINT
    468     1960, 1073743786, 1965, 1073743792, 1969};                         // NOLINT
    469 static const uint16_t kUppercaseTable7Size = 2;
    470 static const int32_t kUppercaseTable7[2] = {
    471   1073749793, 7994 };  // NOLINT
    472 bool Uppercase::Is(uchar c) {
    473   int chunk_index = c >> 13;
    474   switch (chunk_index) {
    475     case 0: return LookupPredicate(kUppercaseTable0,
    476                                        kUppercaseTable0Size,
    477                                        c);
    478     case 1: return LookupPredicate(kUppercaseTable1,
    479                                        kUppercaseTable1Size,
    480                                        c);
    481     case 5: return LookupPredicate(kUppercaseTable5,
    482                                        kUppercaseTable5Size,
    483                                        c);
    484     case 7: return LookupPredicate(kUppercaseTable7,
    485                                        kUppercaseTable7Size,
    486                                        c);
    487     default: return false;
    488   }
    489 }
    490 
    491 
    492 // Lowercase:            point.category == 'Ll'
    493 
    494 static const uint16_t kLowercaseTable0Size = 467;
    495 static const int32_t kLowercaseTable0[467] = {
    496     1073741921, 122,        181,        1073742047,
    497     246,        1073742072, 255,        257,  // NOLINT
    498     259,        261,        263,        265,
    499     267,        269,        271,        273,  // NOLINT
    500     275,        277,        279,        281,
    501     283,        285,        287,        289,  // NOLINT
    502     291,        293,        295,        297,
    503     299,        301,        303,        305,  // NOLINT
    504     307,        309,        1073742135, 312,
    505     314,        316,        318,        320,  // NOLINT
    506     322,        324,        326,        1073742152,
    507     329,        331,        333,        335,  // NOLINT
    508     337,        339,        341,        343,
    509     345,        347,        349,        351,  // NOLINT
    510     353,        355,        357,        359,
    511     361,        363,        365,        367,  // NOLINT
    512     369,        371,        373,        375,
    513     378,        380,        1073742206, 384,  // NOLINT
    514     387,        389,        392,        1073742220,
    515     397,        402,        405,        1073742233,  // NOLINT
    516     411,        414,        417,        419,
    517     421,        424,        1073742250, 427,  // NOLINT
    518     429,        432,        436,        438,
    519     1073742265, 442,        1073742269, 447,  // NOLINT
    520     454,        457,        460,        462,
    521     464,        466,        468,        470,  // NOLINT
    522     472,        474,        1073742300, 477,
    523     479,        481,        483,        485,  // NOLINT
    524     487,        489,        491,        493,
    525     1073742319, 496,        499,        501,  // NOLINT
    526     505,        507,        509,        511,
    527     513,        515,        517,        519,  // NOLINT
    528     521,        523,        525,        527,
    529     529,        531,        533,        535,  // NOLINT
    530     537,        539,        541,        543,
    531     545,        547,        549,        551,  // NOLINT
    532     553,        555,        557,        559,
    533     561,        1073742387, 569,        572,  // NOLINT
    534     1073742399, 576,        578,        583,
    535     585,        587,        589,        1073742415,  // NOLINT
    536     659,        1073742485, 687,        881,
    537     883,        887,        1073742715, 893,  // NOLINT
    538     912,        1073742764, 974,        1073742800,
    539     977,        1073742805, 983,        985,  // NOLINT
    540     987,        989,        991,        993,
    541     995,        997,        999,        1001,  // NOLINT
    542     1003,       1005,       1073742831, 1011,
    543     1013,       1016,       1073742843, 1020,  // NOLINT
    544     1073742896, 1119,       1121,       1123,
    545     1125,       1127,       1129,       1131,  // NOLINT
    546     1133,       1135,       1137,       1139,
    547     1141,       1143,       1145,       1147,  // NOLINT
    548     1149,       1151,       1153,       1163,
    549     1165,       1167,       1169,       1171,  // NOLINT
    550     1173,       1175,       1177,       1179,
    551     1181,       1183,       1185,       1187,  // NOLINT
    552     1189,       1191,       1193,       1195,
    553     1197,       1199,       1201,       1203,  // NOLINT
    554     1205,       1207,       1209,       1211,
    555     1213,       1215,       1218,       1220,  // NOLINT
    556     1222,       1224,       1226,       1228,
    557     1073743054, 1231,       1233,       1235,  // NOLINT
    558     1237,       1239,       1241,       1243,
    559     1245,       1247,       1249,       1251,  // NOLINT
    560     1253,       1255,       1257,       1259,
    561     1261,       1263,       1265,       1267,  // NOLINT
    562     1269,       1271,       1273,       1275,
    563     1277,       1279,       1281,       1283,  // NOLINT
    564     1285,       1287,       1289,       1291,
    565     1293,       1295,       1297,       1299,  // NOLINT
    566     1301,       1303,       1305,       1307,
    567     1309,       1311,       1313,       1315,  // NOLINT
    568     1317,       1319,       1321,       1323,
    569     1325,       1327,       1073743201, 1415,  // NOLINT
    570     1073749248, 7467,       1073749355, 7543,
    571     1073749369, 7578,       7681,       7683,  // NOLINT
    572     7685,       7687,       7689,       7691,
    573     7693,       7695,       7697,       7699,  // NOLINT
    574     7701,       7703,       7705,       7707,
    575     7709,       7711,       7713,       7715,  // NOLINT
    576     7717,       7719,       7721,       7723,
    577     7725,       7727,       7729,       7731,  // NOLINT
    578     7733,       7735,       7737,       7739,
    579     7741,       7743,       7745,       7747,  // NOLINT
    580     7749,       7751,       7753,       7755,
    581     7757,       7759,       7761,       7763,  // NOLINT
    582     7765,       7767,       7769,       7771,
    583     7773,       7775,       7777,       7779,  // NOLINT
    584     7781,       7783,       7785,       7787,
    585     7789,       7791,       7793,       7795,  // NOLINT
    586     7797,       7799,       7801,       7803,
    587     7805,       7807,       7809,       7811,  // NOLINT
    588     7813,       7815,       7817,       7819,
    589     7821,       7823,       7825,       7827,  // NOLINT
    590     1073749653, 7837,       7839,       7841,
    591     7843,       7845,       7847,       7849,  // NOLINT
    592     7851,       7853,       7855,       7857,
    593     7859,       7861,       7863,       7865,  // NOLINT
    594     7867,       7869,       7871,       7873,
    595     7875,       7877,       7879,       7881,  // NOLINT
    596     7883,       7885,       7887,       7889,
    597     7891,       7893,       7895,       7897,  // NOLINT
    598     7899,       7901,       7903,       7905,
    599     7907,       7909,       7911,       7913,  // NOLINT
    600     7915,       7917,       7919,       7921,
    601     7923,       7925,       7927,       7929,  // NOLINT
    602     7931,       7933,       1073749759, 7943,
    603     1073749776, 7957,       1073749792, 7975,  // NOLINT
    604     1073749808, 7991,       1073749824, 8005,
    605     1073749840, 8023,       1073749856, 8039,  // NOLINT
    606     1073749872, 8061,       1073749888, 8071,
    607     1073749904, 8087,       1073749920, 8103,  // NOLINT
    608     1073749936, 8116,       1073749942, 8119,
    609     8126,       1073749954, 8132,       1073749958,  // NOLINT
    610     8135,       1073749968, 8147,       1073749974,
    611     8151,       1073749984, 8167,       1073750002,  // NOLINT
    612     8180,       1073750006, 8183};                   // NOLINT
    613 static const uint16_t kLowercaseTable1Size = 84;
    614 static const int32_t kLowercaseTable1[84] = {
    615   266, 1073742094, 271, 275, 303, 308, 313, 1073742140,  // NOLINT
    616   317, 1073742150, 329, 334, 388, 1073744944, 3166, 3169,  // NOLINT
    617   1073744997, 3174, 3176, 3178, 3180, 3185, 1073745011, 3188,  // NOLINT
    618   1073745014, 3195, 3201, 3203, 3205, 3207, 3209, 3211,  // NOLINT
    619   3213, 3215, 3217, 3219, 3221, 3223, 3225, 3227,  // NOLINT
    620   3229, 3231, 3233, 3235, 3237, 3239, 3241, 3243,  // NOLINT
    621   3245, 3247, 3249, 3251, 3253, 3255, 3257, 3259,  // NOLINT
    622   3261, 3263, 3265, 3267, 3269, 3271, 3273, 3275,  // NOLINT
    623   3277, 3279, 3281, 3283, 3285, 3287, 3289, 3291,  // NOLINT
    624   3293, 3295, 3297, 1073745123, 3300, 3308, 3310, 3315,  // NOLINT
    625   1073745152, 3365, 3367, 3373 };  // NOLINT
    626 static const uint16_t kLowercaseTable5Size = 105;
    627 static const int32_t kLowercaseTable5[105] = {
    628     1601,       1603,       1605, 1607,
    629     1609,       1611,       1613, 1615,  // NOLINT
    630     1617,       1619,       1621, 1623,
    631     1625,       1627,       1629, 1631,  // NOLINT
    632     1633,       1635,       1637, 1639,
    633     1641,       1643,       1645, 1665,  // NOLINT
    634     1667,       1669,       1671, 1673,
    635     1675,       1677,       1679, 1681,  // NOLINT
    636     1683,       1685,       1687, 1689,
    637     1691,       1827,       1829, 1831,  // NOLINT
    638     1833,       1835,       1837, 1073743663,
    639     1841,       1843,       1845, 1847,  // NOLINT
    640     1849,       1851,       1853, 1855,
    641     1857,       1859,       1861, 1863,  // NOLINT
    642     1865,       1867,       1869, 1871,
    643     1873,       1875,       1877, 1879,  // NOLINT
    644     1881,       1883,       1885, 1887,
    645     1889,       1891,       1893, 1895,  // NOLINT
    646     1897,       1899,       1901, 1903,
    647     1073743729, 1912,       1914, 1916,  // NOLINT
    648     1919,       1921,       1923, 1925,
    649     1927,       1932,       1934, 1937,  // NOLINT
    650     1073743763, 1941,       1943, 1945,
    651     1947,       1949,       1951, 1953,  // NOLINT
    652     1955,       1957,       1959, 1961,
    653     2042,       1073744688, 2906, 1073744740,  // NOLINT
    654     2917};                                     // NOLINT
    655 static const uint16_t kLowercaseTable7Size = 6;
    656 static const int32_t kLowercaseTable7[6] = {
    657   1073748736, 6918, 1073748755, 6935, 1073749825, 8026 };  // NOLINT
    658 bool Lowercase::Is(uchar c) {
    659   int chunk_index = c >> 13;
    660   switch (chunk_index) {
    661     case 0: return LookupPredicate(kLowercaseTable0,
    662                                        kLowercaseTable0Size,
    663                                        c);
    664     case 1: return LookupPredicate(kLowercaseTable1,
    665                                        kLowercaseTable1Size,
    666                                        c);
    667     case 5: return LookupPredicate(kLowercaseTable5,
    668                                        kLowercaseTable5Size,
    669                                        c);
    670     case 7: return LookupPredicate(kLowercaseTable7,
    671                                        kLowercaseTable7Size,
    672                                        c);
    673     default: return false;
    674   }
    675 }
    676 
    677 
    678 // Letter:               point.category in ['Lu', 'Ll', 'Lt', 'Lm', 'Lo', 'Nl']
    679 
    680 static const uint16_t kLetterTable0Size = 431;
    681 static const int32_t kLetterTable0[431] = {
    682     1073741889, 90,         1073741921, 122,
    683     170,        181,        186,        1073742016,  // NOLINT
    684     214,        1073742040, 246,        1073742072,
    685     705,        1073742534, 721,        1073742560,  // NOLINT
    686     740,        748,        750,        1073742704,
    687     884,        1073742710, 887,        1073742714,  // NOLINT
    688     893,        895,        902,        1073742728,
    689     906,        908,        1073742734, 929,  // NOLINT
    690     1073742755, 1013,       1073742839, 1153,
    691     1073742986, 1327,       1073743153, 1366,  // NOLINT
    692     1369,       1073743201, 1415,       1073743312,
    693     1514,       1073743344, 1522,       1073743392,  // NOLINT
    694     1610,       1073743470, 1647,       1073743473,
    695     1747,       1749,       1073743589, 1766,  // NOLINT
    696     1073743598, 1775,       1073743610, 1788,
    697     1791,       1808,       1073743634, 1839,  // NOLINT
    698     1073743693, 1957,       1969,       1073743818,
    699     2026,       1073743860, 2037,       2042,  // NOLINT
    700     1073743872, 2069,       2074,       2084,
    701     2088,       1073743936, 2136,       1073744032,  // NOLINT
    702     2226,       1073744132, 2361,       2365,
    703     2384,       1073744216, 2401,       1073744241,  // NOLINT
    704     2432,       1073744261, 2444,       1073744271,
    705     2448,       1073744275, 2472,       1073744298,  // NOLINT
    706     2480,       2482,       1073744310, 2489,
    707     2493,       2510,       1073744348, 2525,  // NOLINT
    708     1073744351, 2529,       1073744368, 2545,
    709     1073744389, 2570,       1073744399, 2576,  // NOLINT
    710     1073744403, 2600,       1073744426, 2608,
    711     1073744434, 2611,       1073744437, 2614,  // NOLINT
    712     1073744440, 2617,       1073744473, 2652,
    713     2654,       1073744498, 2676,       1073744517,  // NOLINT
    714     2701,       1073744527, 2705,       1073744531,
    715     2728,       1073744554, 2736,       1073744562,  // NOLINT
    716     2739,       1073744565, 2745,       2749,
    717     2768,       1073744608, 2785,       1073744645,  // NOLINT
    718     2828,       1073744655, 2832,       1073744659,
    719     2856,       1073744682, 2864,       1073744690,  // NOLINT
    720     2867,       1073744693, 2873,       2877,
    721     1073744732, 2909,       1073744735, 2913,  // NOLINT
    722     2929,       2947,       1073744773, 2954,
    723     1073744782, 2960,       1073744786, 2965,  // NOLINT
    724     1073744793, 2970,       2972,       1073744798,
    725     2975,       1073744803, 2980,       1073744808,  // NOLINT
    726     2986,       1073744814, 3001,       3024,
    727     1073744901, 3084,       1073744910, 3088,  // NOLINT
    728     1073744914, 3112,       1073744938, 3129,
    729     3133,       1073744984, 3161,       1073744992,  // NOLINT
    730     3169,       1073745029, 3212,       1073745038,
    731     3216,       1073745042, 3240,       1073745066,  // NOLINT
    732     3251,       1073745077, 3257,       3261,
    733     3294,       1073745120, 3297,       1073745137,  // NOLINT
    734     3314,       1073745157, 3340,       1073745166,
    735     3344,       1073745170, 3386,       3389,  // NOLINT
    736     3406,       1073745248, 3425,       1073745274,
    737     3455,       1073745285, 3478,       1073745306,  // NOLINT
    738     3505,       1073745331, 3515,       3517,
    739     1073745344, 3526,       1073745409, 3632,  // NOLINT
    740     1073745458, 3635,       1073745472, 3654,
    741     1073745537, 3714,       3716,       1073745543,  // NOLINT
    742     3720,       3722,       3725,       1073745556,
    743     3735,       1073745561, 3743,       1073745569,  // NOLINT
    744     3747,       3749,       3751,       1073745578,
    745     3755,       1073745581, 3760,       1073745586,  // NOLINT
    746     3763,       3773,       1073745600, 3780,
    747     3782,       1073745628, 3807,       3840,  // NOLINT
    748     1073745728, 3911,       1073745737, 3948,
    749     1073745800, 3980,       1073745920, 4138,  // NOLINT
    750     4159,       1073746000, 4181,       1073746010,
    751     4189,       4193,       1073746021, 4198,  // NOLINT
    752     1073746030, 4208,       1073746037, 4225,
    753     4238,       1073746080, 4293,       4295,  // NOLINT
    754     4301,       1073746128, 4346,       1073746172,
    755     4680,       1073746506, 4685,       1073746512,  // NOLINT
    756     4694,       4696,       1073746522, 4701,
    757     1073746528, 4744,       1073746570, 4749,  // NOLINT
    758     1073746576, 4784,       1073746610, 4789,
    759     1073746616, 4798,       4800,       1073746626,  // NOLINT
    760     4805,       1073746632, 4822,       1073746648,
    761     4880,       1073746706, 4885,       1073746712,  // NOLINT
    762     4954,       1073746816, 5007,       1073746848,
    763     5108,       1073746945, 5740,       1073747567,  // NOLINT
    764     5759,       1073747585, 5786,       1073747616,
    765     5866,       1073747694, 5880,       1073747712,  // NOLINT
    766     5900,       1073747726, 5905,       1073747744,
    767     5937,       1073747776, 5969,       1073747808,  // NOLINT
    768     5996,       1073747822, 6000,       1073747840,
    769     6067,       6103,       6108,       1073748000,  // NOLINT
    770     6263,       1073748096, 6312,       6314,
    771     1073748144, 6389,       1073748224, 6430,  // NOLINT
    772     1073748304, 6509,       1073748336, 6516,
    773     1073748352, 6571,       1073748417, 6599,  // NOLINT
    774     1073748480, 6678,       1073748512, 6740,
    775     6823,       1073748741, 6963,       1073748805,  // NOLINT
    776     6987,       1073748867, 7072,       1073748910,
    777     7087,       1073748922, 7141,       1073748992,  // NOLINT
    778     7203,       1073749069, 7247,       1073749082,
    779     7293,       1073749225, 7404,       1073749230,  // NOLINT
    780     7409,       1073749237, 7414,       1073749248,
    781     7615,       1073749504, 7957,       1073749784,  // NOLINT
    782     7965,       1073749792, 8005,       1073749832,
    783     8013,       1073749840, 8023,       8025,  // NOLINT
    784     8027,       8029,       1073749855, 8061,
    785     1073749888, 8116,       1073749942, 8124,  // NOLINT
    786     8126,       1073749954, 8132,       1073749958,
    787     8140,       1073749968, 8147,       1073749974,  // NOLINT
    788     8155,       1073749984, 8172,       1073750002,
    789     8180,       1073750006, 8188};  // NOLINT
    790 static const uint16_t kLetterTable1Size = 87;
    791 static const int32_t kLetterTable1[87] = {
    792   113, 127, 1073741968, 156, 258, 263, 1073742090, 275,  // NOLINT
    793   277, 1073742105, 285, 292, 294, 296, 1073742122, 301,  // NOLINT
    794   1073742127, 313, 1073742140, 319, 1073742149, 329, 334, 1073742176,  // NOLINT
    795   392, 1073744896, 3118, 1073744944, 3166, 1073744992, 3300, 1073745131,  // NOLINT
    796   3310, 1073745138, 3315, 1073745152, 3365, 3367, 3373, 1073745200,  // NOLINT
    797   3431, 3439, 1073745280, 3478, 1073745312, 3494, 1073745320, 3502,  // NOLINT
    798   1073745328, 3510, 1073745336, 3518, 1073745344, 3526, 1073745352, 3534,  // NOLINT
    799   1073745360, 3542, 1073745368, 3550, 3631, 1073745925, 4103, 1073745953,  // NOLINT
    800   4137, 1073745969, 4149, 1073745976, 4156, 1073745985, 4246, 1073746077,  // NOLINT
    801   4255, 1073746081, 4346, 1073746172, 4351, 1073746181, 4397, 1073746225,  // NOLINT
    802   4494, 1073746336, 4538, 1073746416, 4607, 1073746944, 8191 };  // NOLINT
    803 static const uint16_t kLetterTable2Size = 4;
    804 static const int32_t kLetterTable2[4] = {
    805   1073741824, 3509, 1073745408, 8191 };  // NOLINT
    806 static const uint16_t kLetterTable3Size = 2;
    807 static const int32_t kLetterTable3[2] = {
    808   1073741824, 8191 };  // NOLINT
    809 static const uint16_t kLetterTable4Size = 2;
    810 static const int32_t kLetterTable4[2] = {
    811   1073741824, 8140 };  // NOLINT
    812 static const uint16_t kLetterTable5Size = 100;
    813 static const int32_t kLetterTable5[100] = {
    814     1073741824, 1164,       1073743056, 1277,
    815     1073743104, 1548,       1073743376, 1567,  // NOLINT
    816     1073743402, 1579,       1073743424, 1646,
    817     1073743487, 1693,       1073743520, 1775,  // NOLINT
    818     1073743639, 1823,       1073743650, 1928,
    819     1073743755, 1934,       1073743760, 1965,  // NOLINT
    820     1073743792, 1969,       1073743863, 2049,
    821     1073743875, 2053,       1073743879, 2058,  // NOLINT
    822     1073743884, 2082,       1073743936, 2163,
    823     1073744002, 2227,       1073744114, 2295,  // NOLINT
    824     2299,       1073744138, 2341,       1073744176,
    825     2374,       1073744224, 2428,       1073744260,  // NOLINT
    826     2482,       2511,       1073744352, 2532,
    827     1073744358, 2543,       1073744378, 2558,  // NOLINT
    828     1073744384, 2600,       1073744448, 2626,
    829     1073744452, 2635,       1073744480, 2678,  // NOLINT
    830     2682,       1073744510, 2735,       2737,
    831     1073744565, 2742,       1073744569, 2749,  // NOLINT
    832     2752,       2754,       1073744603, 2781,
    833     1073744608, 2794,       1073744626, 2804,  // NOLINT
    834     1073744641, 2822,       1073744649, 2830,
    835     1073744657, 2838,       1073744672, 2854,  // NOLINT
    836     1073744680, 2862,       1073744688, 2906,
    837     1073744732, 2911,       1073744740, 2917,   // NOLINT
    838     1073744832, 3042,       1073744896, 8191};  // NOLINT
    839 static const uint16_t kLetterTable6Size = 6;
    840 static const int32_t kLetterTable6[6] = {
    841   1073741824, 6051, 1073747888, 6086, 1073747915, 6139 };  // NOLINT
    842 static const uint16_t kLetterTable7Size = 48;
    843 static const int32_t kLetterTable7[48] = {
    844   1073748224, 6765, 1073748592, 6873, 1073748736, 6918, 1073748755, 6935,  // NOLINT
    845   6941, 1073748767, 6952, 1073748778, 6966, 1073748792, 6972, 6974,  // NOLINT
    846   1073748800, 6977, 1073748803, 6980, 1073748806, 7089, 1073748947, 7485,  // NOLINT
    847   1073749328, 7567, 1073749394, 7623, 1073749488, 7675, 1073749616, 7796,  // NOLINT
    848   1073749622, 7932, 1073749793, 7994, 1073749825, 8026, 1073749862, 8126,  // NOLINT
    849   1073749954, 8135, 1073749962, 8143, 1073749970, 8151, 1073749978, 8156 };  // NOLINT
    850 bool Letter::Is(uchar c) {
    851   int chunk_index = c >> 13;
    852   switch (chunk_index) {
    853     case 0: return LookupPredicate(kLetterTable0,
    854                                        kLetterTable0Size,
    855                                        c);
    856     case 1: return LookupPredicate(kLetterTable1,
    857                                        kLetterTable1Size,
    858                                        c);
    859     case 2: return LookupPredicate(kLetterTable2,
    860                                        kLetterTable2Size,
    861                                        c);
    862     case 3: return LookupPredicate(kLetterTable3,
    863                                        kLetterTable3Size,
    864                                        c);
    865     case 4: return LookupPredicate(kLetterTable4,
    866                                        kLetterTable4Size,
    867                                        c);
    868     case 5: return LookupPredicate(kLetterTable5,
    869                                        kLetterTable5Size,
    870                                        c);
    871     case 6: return LookupPredicate(kLetterTable6,
    872                                        kLetterTable6Size,
    873                                        c);
    874     case 7: return LookupPredicate(kLetterTable7,
    875                                        kLetterTable7Size,
    876                                        c);
    877     default: return false;
    878   }
    879 }
    880 
    881 
    882 // ID_Start:             ((point.category in ['Lu', 'Ll', 'Lt', 'Lm', 'Lo',
    883 // 'Nl'] or 'Other_ID_Start' in point.properties) and ('Pattern_Syntax' not in
    884 // point.properties) and ('Pattern_White_Space' not in point.properties)) or
    885 // ('JS_ID_Start' in point.properties)
    886 
    887 static const uint16_t kID_StartTable0Size = 434;
    888 static const int32_t kID_StartTable0[434] = {
    889     36,         1073741889, 90,         92,
    890     95,         1073741921, 122,        170,  // NOLINT
    891     181,        186,        1073742016, 214,
    892     1073742040, 246,        1073742072, 705,  // NOLINT
    893     1073742534, 721,        1073742560, 740,
    894     748,        750,        1073742704, 884,  // NOLINT
    895     1073742710, 887,        1073742714, 893,
    896     895,        902,        1073742728, 906,  // NOLINT
    897     908,        1073742734, 929,        1073742755,
    898     1013,       1073742839, 1153,       1073742986,  // NOLINT
    899     1327,       1073743153, 1366,       1369,
    900     1073743201, 1415,       1073743312, 1514,  // NOLINT
    901     1073743344, 1522,       1073743392, 1610,
    902     1073743470, 1647,       1073743473, 1747,  // NOLINT
    903     1749,       1073743589, 1766,       1073743598,
    904     1775,       1073743610, 1788,       1791,  // NOLINT
    905     1808,       1073743634, 1839,       1073743693,
    906     1957,       1969,       1073743818, 2026,  // NOLINT
    907     1073743860, 2037,       2042,       1073743872,
    908     2069,       2074,       2084,       2088,  // NOLINT
    909     1073743936, 2136,       1073744032, 2226,
    910     1073744132, 2361,       2365,       2384,  // NOLINT
    911     1073744216, 2401,       1073744241, 2432,
    912     1073744261, 2444,       1073744271, 2448,  // NOLINT
    913     1073744275, 2472,       1073744298, 2480,
    914     2482,       1073744310, 2489,       2493,  // NOLINT
    915     2510,       1073744348, 2525,       1073744351,
    916     2529,       1073744368, 2545,       1073744389,  // NOLINT
    917     2570,       1073744399, 2576,       1073744403,
    918     2600,       1073744426, 2608,       1073744434,  // NOLINT
    919     2611,       1073744437, 2614,       1073744440,
    920     2617,       1073744473, 2652,       2654,  // NOLINT
    921     1073744498, 2676,       1073744517, 2701,
    922     1073744527, 2705,       1073744531, 2728,  // NOLINT
    923     1073744554, 2736,       1073744562, 2739,
    924     1073744565, 2745,       2749,       2768,  // NOLINT
    925     1073744608, 2785,       1073744645, 2828,
    926     1073744655, 2832,       1073744659, 2856,  // NOLINT
    927     1073744682, 2864,       1073744690, 2867,
    928     1073744693, 2873,       2877,       1073744732,  // NOLINT
    929     2909,       1073744735, 2913,       2929,
    930     2947,       1073744773, 2954,       1073744782,  // NOLINT
    931     2960,       1073744786, 2965,       1073744793,
    932     2970,       2972,       1073744798, 2975,  // NOLINT
    933     1073744803, 2980,       1073744808, 2986,
    934     1073744814, 3001,       3024,       1073744901,  // NOLINT
    935     3084,       1073744910, 3088,       1073744914,
    936     3112,       1073744938, 3129,       3133,  // NOLINT
    937     1073744984, 3161,       1073744992, 3169,
    938     1073745029, 3212,       1073745038, 3216,  // NOLINT
    939     1073745042, 3240,       1073745066, 3251,
    940     1073745077, 3257,       3261,       3294,  // NOLINT
    941     1073745120, 3297,       1073745137, 3314,
    942     1073745157, 3340,       1073745166, 3344,  // NOLINT
    943     1073745170, 3386,       3389,       3406,
    944     1073745248, 3425,       1073745274, 3455,  // NOLINT
    945     1073745285, 3478,       1073745306, 3505,
    946     1073745331, 3515,       3517,       1073745344,  // NOLINT
    947     3526,       1073745409, 3632,       1073745458,
    948     3635,       1073745472, 3654,       1073745537,  // NOLINT
    949     3714,       3716,       1073745543, 3720,
    950     3722,       3725,       1073745556, 3735,  // NOLINT
    951     1073745561, 3743,       1073745569, 3747,
    952     3749,       3751,       1073745578, 3755,  // NOLINT
    953     1073745581, 3760,       1073745586, 3763,
    954     3773,       1073745600, 3780,       3782,  // NOLINT
    955     1073745628, 3807,       3840,       1073745728,
    956     3911,       1073745737, 3948,       1073745800,  // NOLINT
    957     3980,       1073745920, 4138,       4159,
    958     1073746000, 4181,       1073746010, 4189,  // NOLINT
    959     4193,       1073746021, 4198,       1073746030,
    960     4208,       1073746037, 4225,       4238,  // NOLINT
    961     1073746080, 4293,       4295,       4301,
    962     1073746128, 4346,       1073746172, 4680,  // NOLINT
    963     1073746506, 4685,       1073746512, 4694,
    964     4696,       1073746522, 4701,       1073746528,  // NOLINT
    965     4744,       1073746570, 4749,       1073746576,
    966     4784,       1073746610, 4789,       1073746616,  // NOLINT
    967     4798,       4800,       1073746626, 4805,
    968     1073746632, 4822,       1073746648, 4880,  // NOLINT
    969     1073746706, 4885,       1073746712, 4954,
    970     1073746816, 5007,       1073746848, 5108,  // NOLINT
    971     1073746945, 5740,       1073747567, 5759,
    972     1073747585, 5786,       1073747616, 5866,  // NOLINT
    973     1073747694, 5880,       1073747712, 5900,
    974     1073747726, 5905,       1073747744, 5937,  // NOLINT
    975     1073747776, 5969,       1073747808, 5996,
    976     1073747822, 6000,       1073747840, 6067,  // NOLINT
    977     6103,       6108,       1073748000, 6263,
    978     1073748096, 6312,       6314,       1073748144,  // NOLINT
    979     6389,       1073748224, 6430,       1073748304,
    980     6509,       1073748336, 6516,       1073748352,  // NOLINT
    981     6571,       1073748417, 6599,       1073748480,
    982     6678,       1073748512, 6740,       6823,  // NOLINT
    983     1073748741, 6963,       1073748805, 6987,
    984     1073748867, 7072,       1073748910, 7087,  // NOLINT
    985     1073748922, 7141,       1073748992, 7203,
    986     1073749069, 7247,       1073749082, 7293,  // NOLINT
    987     1073749225, 7404,       1073749230, 7409,
    988     1073749237, 7414,       1073749248, 7615,  // NOLINT
    989     1073749504, 7957,       1073749784, 7965,
    990     1073749792, 8005,       1073749832, 8013,  // NOLINT
    991     1073749840, 8023,       8025,       8027,
    992     8029,       1073749855, 8061,       1073749888,  // NOLINT
    993     8116,       1073749942, 8124,       8126,
    994     1073749954, 8132,       1073749958, 8140,  // NOLINT
    995     1073749968, 8147,       1073749974, 8155,
    996     1073749984, 8172,       1073750002, 8180,  // NOLINT
    997     1073750006, 8188};                         // NOLINT
    998 static const uint16_t kID_StartTable1Size = 84;
    999 static const int32_t kID_StartTable1[84] = {
   1000     113,        127,        1073741968, 156,
   1001     258,        263,        1073742090, 275,  // NOLINT
   1002     277,        1073742104, 285,        292,
   1003     294,        296,        1073742122, 313,  // NOLINT
   1004     1073742140, 319,        1073742149, 329,
   1005     334,        1073742176, 392,        1073744896,  // NOLINT
   1006     3118,       1073744944, 3166,       1073744992,
   1007     3300,       1073745131, 3310,       1073745138,  // NOLINT
   1008     3315,       1073745152, 3365,       3367,
   1009     3373,       1073745200, 3431,       3439,  // NOLINT
   1010     1073745280, 3478,       1073745312, 3494,
   1011     1073745320, 3502,       1073745328, 3510,  // NOLINT
   1012     1073745336, 3518,       1073745344, 3526,
   1013     1073745352, 3534,       1073745360, 3542,  // NOLINT
   1014     1073745368, 3550,       1073745925, 4103,
   1015     1073745953, 4137,       1073745969, 4149,  // NOLINT
   1016     1073745976, 4156,       1073745985, 4246,
   1017     1073746075, 4255,       1073746081, 4346,  // NOLINT
   1018     1073746172, 4351,       1073746181, 4397,
   1019     1073746225, 4494,       1073746336, 4538,   // NOLINT
   1020     1073746416, 4607,       1073746944, 8191};  // NOLINT
   1021 static const uint16_t kID_StartTable2Size = 4;
   1022 static const int32_t kID_StartTable2[4] = {1073741824, 3509, 1073745408,
   1023                                            8191};  // NOLINT
   1024 static const uint16_t kID_StartTable3Size = 2;
   1025 static const int32_t kID_StartTable3[2] = {1073741824, 8191};  // NOLINT
   1026 static const uint16_t kID_StartTable4Size = 2;
   1027 static const int32_t kID_StartTable4[2] = {1073741824, 8140};  // NOLINT
   1028 static const uint16_t kID_StartTable5Size = 100;
   1029 static const int32_t kID_StartTable5[100] = {
   1030     1073741824, 1164,       1073743056, 1277,
   1031     1073743104, 1548,       1073743376, 1567,  // NOLINT
   1032     1073743402, 1579,       1073743424, 1646,
   1033     1073743487, 1693,       1073743520, 1775,  // NOLINT
   1034     1073743639, 1823,       1073743650, 1928,
   1035     1073743755, 1934,       1073743760, 1965,  // NOLINT
   1036     1073743792, 1969,       1073743863, 2049,
   1037     1073743875, 2053,       1073743879, 2058,  // NOLINT
   1038     1073743884, 2082,       1073743936, 2163,
   1039     1073744002, 2227,       1073744114, 2295,  // NOLINT
   1040     2299,       1073744138, 2341,       1073744176,
   1041     2374,       1073744224, 2428,       1073744260,  // NOLINT
   1042     2482,       2511,       1073744352, 2532,
   1043     1073744358, 2543,       1073744378, 2558,  // NOLINT
   1044     1073744384, 2600,       1073744448, 2626,
   1045     1073744452, 2635,       1073744480, 2678,  // NOLINT
   1046     2682,       1073744510, 2735,       2737,
   1047     1073744565, 2742,       1073744569, 2749,  // NOLINT
   1048     2752,       2754,       1073744603, 2781,
   1049     1073744608, 2794,       1073744626, 2804,  // NOLINT
   1050     1073744641, 2822,       1073744649, 2830,
   1051     1073744657, 2838,       1073744672, 2854,  // NOLINT
   1052     1073744680, 2862,       1073744688, 2906,
   1053     1073744732, 2911,       1073744740, 2917,   // NOLINT
   1054     1073744832, 3042,       1073744896, 8191};  // NOLINT
   1055 static const uint16_t kID_StartTable6Size = 6;
   1056 static const int32_t kID_StartTable6[6] = {1073741824, 6051, 1073747888, 6086,
   1057                                            1073747915, 6139};  // NOLINT
   1058 static const uint16_t kID_StartTable7Size = 48;
   1059 static const int32_t kID_StartTable7[48] = {
   1060     1073748224, 6765,       1073748592, 6873,
   1061     1073748736, 6918,       1073748755, 6935,  // NOLINT
   1062     6941,       1073748767, 6952,       1073748778,
   1063     6966,       1073748792, 6972,       6974,  // NOLINT
   1064     1073748800, 6977,       1073748803, 6980,
   1065     1073748806, 7089,       1073748947, 7485,  // NOLINT
   1066     1073749328, 7567,       1073749394, 7623,
   1067     1073749488, 7675,       1073749616, 7796,  // NOLINT
   1068     1073749622, 7932,       1073749793, 7994,
   1069     1073749825, 8026,       1073749862, 8126,  // NOLINT
   1070     1073749954, 8135,       1073749962, 8143,
   1071     1073749970, 8151,       1073749978, 8156};  // NOLINT
   1072 bool ID_Start::Is(uchar c) {
   1073   int chunk_index = c >> 13;
   1074   switch (chunk_index) {
   1075     case 0:
   1076       return LookupPredicate(kID_StartTable0, kID_StartTable0Size, c);
   1077     case 1:
   1078       return LookupPredicate(kID_StartTable1, kID_StartTable1Size, c);
   1079     case 2:
   1080       return LookupPredicate(kID_StartTable2, kID_StartTable2Size, c);
   1081     case 3:
   1082       return LookupPredicate(kID_StartTable3, kID_StartTable3Size, c);
   1083     case 4:
   1084       return LookupPredicate(kID_StartTable4, kID_StartTable4Size, c);
   1085     case 5:
   1086       return LookupPredicate(kID_StartTable5, kID_StartTable5Size, c);
   1087     case 6:
   1088       return LookupPredicate(kID_StartTable6, kID_StartTable6Size, c);
   1089     case 7:
   1090       return LookupPredicate(kID_StartTable7, kID_StartTable7Size, c);
   1091     default:
   1092       return false;
   1093   }
   1094 }
   1095 
   1096 
   1097 // ID_Continue:          point.category in ['Nd', 'Mn', 'Mc', 'Pc'] or
   1098 // 'Other_ID_Continue' in point.properties or 'JS_ID_Continue' in
   1099 // point.properties
   1100 
   1101 static const uint16_t kID_ContinueTable0Size = 315;
   1102 static const int32_t kID_ContinueTable0[315] = {
   1103     1073741872, 57,         95,         183,
   1104     1073742592, 879,        903,        1073742979,  // NOLINT
   1105     1159,       1073743249, 1469,       1471,
   1106     1073743297, 1474,       1073743300, 1477,  // NOLINT
   1107     1479,       1073743376, 1562,       1073743435,
   1108     1641,       1648,       1073743574, 1756,  // NOLINT
   1109     1073743583, 1764,       1073743591, 1768,
   1110     1073743594, 1773,       1073743600, 1785,  // NOLINT
   1111     1809,       1073743664, 1866,       1073743782,
   1112     1968,       1073743808, 1993,       1073743851,  // NOLINT
   1113     2035,       1073743894, 2073,       1073743899,
   1114     2083,       1073743909, 2087,       1073743913,  // NOLINT
   1115     2093,       1073743961, 2139,       1073744100,
   1116     2307,       1073744186, 2364,       1073744190,  // NOLINT
   1117     2383,       1073744209, 2391,       1073744226,
   1118     2403,       1073744230, 2415,       1073744257,  // NOLINT
   1119     2435,       2492,       1073744318, 2500,
   1120     1073744327, 2504,       1073744331, 2509,  // NOLINT
   1121     2519,       1073744354, 2531,       1073744358,
   1122     2543,       1073744385, 2563,       2620,  // NOLINT
   1123     1073744446, 2626,       1073744455, 2632,
   1124     1073744459, 2637,       2641,       1073744486,  // NOLINT
   1125     2673,       2677,       1073744513, 2691,
   1126     2748,       1073744574, 2757,       1073744583,  // NOLINT
   1127     2761,       1073744587, 2765,       1073744610,
   1128     2787,       1073744614, 2799,       1073744641,  // NOLINT
   1129     2819,       2876,       1073744702, 2884,
   1130     1073744711, 2888,       1073744715, 2893,  // NOLINT
   1131     1073744726, 2903,       1073744738, 2915,
   1132     1073744742, 2927,       2946,       1073744830,  // NOLINT
   1133     3010,       1073744838, 3016,       1073744842,
   1134     3021,       3031,       1073744870, 3055,  // NOLINT
   1135     1073744896, 3075,       1073744958, 3140,
   1136     1073744966, 3144,       1073744970, 3149,  // NOLINT
   1137     1073744981, 3158,       1073744994, 3171,
   1138     1073744998, 3183,       1073745025, 3203,  // NOLINT
   1139     3260,       1073745086, 3268,       1073745094,
   1140     3272,       1073745098, 3277,       1073745109,  // NOLINT
   1141     3286,       1073745122, 3299,       1073745126,
   1142     3311,       1073745153, 3331,       1073745214,  // NOLINT
   1143     3396,       1073745222, 3400,       1073745226,
   1144     3405,       3415,       1073745250, 3427,  // NOLINT
   1145     1073745254, 3439,       1073745282, 3459,
   1146     3530,       1073745359, 3540,       3542,  // NOLINT
   1147     1073745368, 3551,       1073745382, 3567,
   1148     1073745394, 3571,       3633,       1073745460,  // NOLINT
   1149     3642,       1073745479, 3662,       1073745488,
   1150     3673,       3761,       1073745588, 3769,  // NOLINT
   1151     1073745595, 3772,       1073745608, 3789,
   1152     1073745616, 3801,       1073745688, 3865,  // NOLINT
   1153     1073745696, 3881,       3893,       3895,
   1154     3897,       1073745726, 3903,       1073745777,  // NOLINT
   1155     3972,       1073745798, 3975,       1073745805,
   1156     3991,       1073745817, 4028,       4038,  // NOLINT
   1157     1073745963, 4158,       1073745984, 4169,
   1158     1073746006, 4185,       1073746014, 4192,  // NOLINT
   1159     1073746018, 4196,       1073746023, 4205,
   1160     1073746033, 4212,       1073746050, 4237,  // NOLINT
   1161     1073746063, 4253,       1073746781, 4959,
   1162     1073746793, 4977,       1073747730, 5908,  // NOLINT
   1163     1073747762, 5940,       1073747794, 5971,
   1164     1073747826, 6003,       1073747892, 6099,  // NOLINT
   1165     6109,       1073747936, 6121,       1073747979,
   1166     6157,       1073747984, 6169,       6313,  // NOLINT
   1167     1073748256, 6443,       1073748272, 6459,
   1168     1073748294, 6479,       1073748400, 6592,  // NOLINT
   1169     1073748424, 6601,       1073748432, 6618,
   1170     1073748503, 6683,       1073748565, 6750,  // NOLINT
   1171     1073748576, 6780,       1073748607, 6793,
   1172     1073748624, 6809,       1073748656, 6845,  // NOLINT
   1173     1073748736, 6916,       1073748788, 6980,
   1174     1073748816, 7001,       1073748843, 7027,  // NOLINT
   1175     1073748864, 7042,       1073748897, 7085,
   1176     1073748912, 7097,       1073748966, 7155,  // NOLINT
   1177     1073749028, 7223,       1073749056, 7241,
   1178     1073749072, 7257,       1073749200, 7378,  // NOLINT
   1179     1073749204, 7400,       7405,       1073749234,
   1180     7412,       1073749240, 7417,       1073749440,  // NOLINT
   1181     7669,       1073749500, 7679};                   // NOLINT
   1182 static const uint16_t kID_ContinueTable1Size = 19;
   1183 static const int32_t kID_ContinueTable1[19] = {
   1184     1073741836, 13,         1073741887, 64,
   1185     84,         1073742032, 220,        225,  // NOLINT
   1186     1073742053, 240,        1073745135, 3313,
   1187     3455,       1073745376, 3583,       1073745962,  // NOLINT
   1188     4143,       1073746073, 4250};                   // NOLINT
   1189 static const uint16_t kID_ContinueTable5Size = 63;
   1190 static const int32_t kID_ContinueTable5[63] = {
   1191     1073743392, 1577,       1647,       1073743476,
   1192     1661,       1695,       1073743600, 1777,  // NOLINT
   1193     2050,       2054,       2059,       1073743907,
   1194     2087,       1073744000, 2177,       1073744052,  // NOLINT
   1195     2244,       1073744080, 2265,       1073744096,
   1196     2289,       1073744128, 2313,       1073744166,  // NOLINT
   1197     2349,       1073744199, 2387,       1073744256,
   1198     2435,       1073744307, 2496,       1073744336,  // NOLINT
   1199     2521,       2533,       1073744368, 2553,
   1200     1073744425, 2614,       2627,       1073744460,  // NOLINT
   1201     2637,       1073744464, 2649,       1073744507,
   1202     2685,       2736,       1073744562, 2740,  // NOLINT
   1203     1073744567, 2744,       1073744574, 2751,
   1204     2753,       1073744619, 2799,       1073744629,  // NOLINT
   1205     2806,       1073744867, 3050,       1073744876,
   1206     3053,       1073744880, 3065};  // NOLINT
   1207 static const uint16_t kID_ContinueTable7Size = 12;
   1208 static const int32_t kID_ContinueTable7[12] = {
   1209     6942, 1073749504, 7695, 1073749536,
   1210     7725, 1073749555, 7732, 1073749581,  // NOLINT
   1211     7759, 1073749776, 7961, 7999};       // NOLINT
   1212 bool ID_Continue::Is(uchar c) {
   1213   int chunk_index = c >> 13;
   1214   switch (chunk_index) {
   1215     case 0:
   1216       return LookupPredicate(kID_ContinueTable0, kID_ContinueTable0Size, c);
   1217     case 1:
   1218       return LookupPredicate(kID_ContinueTable1, kID_ContinueTable1Size, c);
   1219     case 5:
   1220       return LookupPredicate(kID_ContinueTable5, kID_ContinueTable5Size, c);
   1221     case 7:
   1222       return LookupPredicate(kID_ContinueTable7, kID_ContinueTable7Size, c);
   1223     default: return false;
   1224   }
   1225 }
   1226 
   1227 
   1228 // WhiteSpace:           (point.category == 'Zs') or ('JS_White_Space' in
   1229 // point.properties)
   1230 
   1231 static const uint16_t kWhiteSpaceTable0Size = 7;
   1232 static const int32_t kWhiteSpaceTable0[7] = {9,   1073741835, 12,  32,
   1233                                              160, 5760,       6158};  // NOLINT
   1234 static const uint16_t kWhiteSpaceTable1Size = 5;
   1235 static const int32_t kWhiteSpaceTable1[5] = {
   1236   1073741824, 10, 47, 95, 4096 };  // NOLINT
   1237 static const uint16_t kWhiteSpaceTable7Size = 1;
   1238 static const int32_t kWhiteSpaceTable7[1] = {7935};  // NOLINT
   1239 bool WhiteSpace::Is(uchar c) {
   1240   int chunk_index = c >> 13;
   1241   switch (chunk_index) {
   1242     case 0: return LookupPredicate(kWhiteSpaceTable0,
   1243                                        kWhiteSpaceTable0Size,
   1244                                        c);
   1245     case 1: return LookupPredicate(kWhiteSpaceTable1,
   1246                                        kWhiteSpaceTable1Size,
   1247                                        c);
   1248     case 7:
   1249       return LookupPredicate(kWhiteSpaceTable7, kWhiteSpaceTable7Size, c);
   1250     default: return false;
   1251   }
   1252 }
   1253 
   1254 
   1255 // LineTerminator:       'JS_Line_Terminator' in point.properties
   1256 
   1257 static const uint16_t kLineTerminatorTable0Size = 2;
   1258 static const int32_t kLineTerminatorTable0[2] = {
   1259   10, 13 };  // NOLINT
   1260 static const uint16_t kLineTerminatorTable1Size = 2;
   1261 static const int32_t kLineTerminatorTable1[2] = {
   1262   1073741864, 41 };  // NOLINT
   1263 bool LineTerminator::Is(uchar c) {
   1264   int chunk_index = c >> 13;
   1265   switch (chunk_index) {
   1266     case 0: return LookupPredicate(kLineTerminatorTable0,
   1267                                        kLineTerminatorTable0Size,
   1268                                        c);
   1269     case 1: return LookupPredicate(kLineTerminatorTable1,
   1270                                        kLineTerminatorTable1Size,
   1271                                        c);
   1272     default: return false;
   1273   }
   1274 }
   1275 
   1276 static const MultiCharacterSpecialCase<2> kToLowercaseMultiStrings0[2] = {  // NOLINT
   1277   {{105, 775}}, {{kSentinel}} }; // NOLINT
   1278 static const uint16_t kToLowercaseTable0Size = 488;  // NOLINT
   1279 static const int32_t kToLowercaseTable0[976] = {
   1280     1073741889, 128,    90,         128,   1073742016, 128,
   1281     214,        128,    1073742040, 128,   222,        128,
   1282     256,        4,      258,        4,  // NOLINT
   1283     260,        4,      262,        4,     264,        4,
   1284     266,        4,      268,        4,     270,        4,
   1285     272,        4,      274,        4,  // NOLINT
   1286     276,        4,      278,        4,     280,        4,
   1287     282,        4,      284,        4,     286,        4,
   1288     288,        4,      290,        4,  // NOLINT
   1289     292,        4,      294,        4,     296,        4,
   1290     298,        4,      300,        4,     302,        4,
   1291     304,        1,      306,        4,  // NOLINT
   1292     308,        4,      310,        4,     313,        4,
   1293     315,        4,      317,        4,     319,        4,
   1294     321,        4,      323,        4,  // NOLINT
   1295     325,        4,      327,        4,     330,        4,
   1296     332,        4,      334,        4,     336,        4,
   1297     338,        4,      340,        4,  // NOLINT
   1298     342,        4,      344,        4,     346,        4,
   1299     348,        4,      350,        4,     352,        4,
   1300     354,        4,      356,        4,  // NOLINT
   1301     358,        4,      360,        4,     362,        4,
   1302     364,        4,      366,        4,     368,        4,
   1303     370,        4,      372,        4,  // NOLINT
   1304     374,        4,      376,        -484,  377,        4,
   1305     379,        4,      381,        4,     385,        840,
   1306     386,        4,      388,        4,  // NOLINT
   1307     390,        824,    391,        4,     1073742217, 820,
   1308     394,        820,    395,        4,     398,        316,
   1309     399,        808,    400,        812,  // NOLINT
   1310     401,        4,      403,        820,   404,        828,
   1311     406,        844,    407,        836,   408,        4,
   1312     412,        844,    413,        852,  // NOLINT
   1313     415,        856,    416,        4,     418,        4,
   1314     420,        4,      422,        872,   423,        4,
   1315     425,        872,    428,        4,  // NOLINT
   1316     430,        872,    431,        4,     1073742257, 868,
   1317     434,        868,    435,        4,     437,        4,
   1318     439,        876,    440,        4,  // NOLINT
   1319     444,        4,      452,        8,     453,        4,
   1320     455,        8,      456,        4,     458,        8,
   1321     459,        4,      461,        4,  // NOLINT
   1322     463,        4,      465,        4,     467,        4,
   1323     469,        4,      471,        4,     473,        4,
   1324     475,        4,      478,        4,  // NOLINT
   1325     480,        4,      482,        4,     484,        4,
   1326     486,        4,      488,        4,     490,        4,
   1327     492,        4,      494,        4,  // NOLINT
   1328     497,        8,      498,        4,     500,        4,
   1329     502,        -388,   503,        -224,  504,        4,
   1330     506,        4,      508,        4,  // NOLINT
   1331     510,        4,      512,        4,     514,        4,
   1332     516,        4,      518,        4,     520,        4,
   1333     522,        4,      524,        4,  // NOLINT
   1334     526,        4,      528,        4,     530,        4,
   1335     532,        4,      534,        4,     536,        4,
   1336     538,        4,      540,        4,  // NOLINT
   1337     542,        4,      544,        -520,  546,        4,
   1338     548,        4,      550,        4,     552,        4,
   1339     554,        4,      556,        4,  // NOLINT
   1340     558,        4,      560,        4,     562,        4,
   1341     570,        43180,  571,        4,     573,        -652,
   1342     574,        43168,  577,        4,  // NOLINT
   1343     579,        -780,   580,        276,   581,        284,
   1344     582,        4,      584,        4,     586,        4,
   1345     588,        4,      590,        4,  // NOLINT
   1346     880,        4,      882,        4,     886,        4,
   1347     895,        464,    902,        152,   1073742728, 148,
   1348     906,        148,    908,        256,  // NOLINT
   1349     1073742734, 252,    911,        252,   1073742737, 128,
   1350     929,        128,    931,        6,     1073742756, 128,
   1351     939,        128,    975,        32,  // NOLINT
   1352     984,        4,      986,        4,     988,        4,
   1353     990,        4,      992,        4,     994,        4,
   1354     996,        4,      998,        4,  // NOLINT
   1355     1000,       4,      1002,       4,     1004,       4,
   1356     1006,       4,      1012,       -240,  1015,       4,
   1357     1017,       -28,    1018,       4,  // NOLINT
   1358     1073742845, -520,   1023,       -520,  1073742848, 320,
   1359     1039,       320,    1073742864, 128,   1071,       128,
   1360     1120,       4,      1122,       4,  // NOLINT
   1361     1124,       4,      1126,       4,     1128,       4,
   1362     1130,       4,      1132,       4,     1134,       4,
   1363     1136,       4,      1138,       4,  // NOLINT
   1364     1140,       4,      1142,       4,     1144,       4,
   1365     1146,       4,      1148,       4,     1150,       4,
   1366     1152,       4,      1162,       4,  // NOLINT
   1367     1164,       4,      1166,       4,     1168,       4,
   1368     1170,       4,      1172,       4,     1174,       4,
   1369     1176,       4,      1178,       4,  // NOLINT
   1370     1180,       4,      1182,       4,     1184,       4,
   1371     1186,       4,      1188,       4,     1190,       4,
   1372     1192,       4,      1194,       4,  // NOLINT
   1373     1196,       4,      1198,       4,     1200,       4,
   1374     1202,       4,      1204,       4,     1206,       4,
   1375     1208,       4,      1210,       4,  // NOLINT
   1376     1212,       4,      1214,       4,     1216,       60,
   1377     1217,       4,      1219,       4,     1221,       4,
   1378     1223,       4,      1225,       4,  // NOLINT
   1379     1227,       4,      1229,       4,     1232,       4,
   1380     1234,       4,      1236,       4,     1238,       4,
   1381     1240,       4,      1242,       4,  // NOLINT
   1382     1244,       4,      1246,       4,     1248,       4,
   1383     1250,       4,      1252,       4,     1254,       4,
   1384     1256,       4,      1258,       4,  // NOLINT
   1385     1260,       4,      1262,       4,     1264,       4,
   1386     1266,       4,      1268,       4,     1270,       4,
   1387     1272,       4,      1274,       4,  // NOLINT
   1388     1276,       4,      1278,       4,     1280,       4,
   1389     1282,       4,      1284,       4,     1286,       4,
   1390     1288,       4,      1290,       4,  // NOLINT
   1391     1292,       4,      1294,       4,     1296,       4,
   1392     1298,       4,      1300,       4,     1302,       4,
   1393     1304,       4,      1306,       4,  // NOLINT
   1394     1308,       4,      1310,       4,     1312,       4,
   1395     1314,       4,      1316,       4,     1318,       4,
   1396     1320,       4,      1322,       4,  // NOLINT
   1397     1324,       4,      1326,       4,     1073743153, 192,
   1398     1366,       192,    1073746080, 29056, 4293,       29056,
   1399     4295,       29056,  4301,       29056,  // NOLINT
   1400     7680,       4,      7682,       4,     7684,       4,
   1401     7686,       4,      7688,       4,     7690,       4,
   1402     7692,       4,      7694,       4,  // NOLINT
   1403     7696,       4,      7698,       4,     7700,       4,
   1404     7702,       4,      7704,       4,     7706,       4,
   1405     7708,       4,      7710,       4,  // NOLINT
   1406     7712,       4,      7714,       4,     7716,       4,
   1407     7718,       4,      7720,       4,     7722,       4,
   1408     7724,       4,      7726,       4,  // NOLINT
   1409     7728,       4,      7730,       4,     7732,       4,
   1410     7734,       4,      7736,       4,     7738,       4,
   1411     7740,       4,      7742,       4,  // NOLINT
   1412     7744,       4,      7746,       4,     7748,       4,
   1413     7750,       4,      7752,       4,     7754,       4,
   1414     7756,       4,      7758,       4,  // NOLINT
   1415     7760,       4,      7762,       4,     7764,       4,
   1416     7766,       4,      7768,       4,     7770,       4,
   1417     7772,       4,      7774,       4,  // NOLINT
   1418     7776,       4,      7778,       4,     7780,       4,
   1419     7782,       4,      7784,       4,     7786,       4,
   1420     7788,       4,      7790,       4,  // NOLINT
   1421     7792,       4,      7794,       4,     7796,       4,
   1422     7798,       4,      7800,       4,     7802,       4,
   1423     7804,       4,      7806,       4,  // NOLINT
   1424     7808,       4,      7810,       4,     7812,       4,
   1425     7814,       4,      7816,       4,     7818,       4,
   1426     7820,       4,      7822,       4,  // NOLINT
   1427     7824,       4,      7826,       4,     7828,       4,
   1428     7838,       -30460, 7840,       4,     7842,       4,
   1429     7844,       4,      7846,       4,  // NOLINT
   1430     7848,       4,      7850,       4,     7852,       4,
   1431     7854,       4,      7856,       4,     7858,       4,
   1432     7860,       4,      7862,       4,  // NOLINT
   1433     7864,       4,      7866,       4,     7868,       4,
   1434     7870,       4,      7872,       4,     7874,       4,
   1435     7876,       4,      7878,       4,  // NOLINT
   1436     7880,       4,      7882,       4,     7884,       4,
   1437     7886,       4,      7888,       4,     7890,       4,
   1438     7892,       4,      7894,       4,  // NOLINT
   1439     7896,       4,      7898,       4,     7900,       4,
   1440     7902,       4,      7904,       4,     7906,       4,
   1441     7908,       4,      7910,       4,  // NOLINT
   1442     7912,       4,      7914,       4,     7916,       4,
   1443     7918,       4,      7920,       4,     7922,       4,
   1444     7924,       4,      7926,       4,  // NOLINT
   1445     7928,       4,      7930,       4,     7932,       4,
   1446     7934,       4,      1073749768, -32,   7951,       -32,
   1447     1073749784, -32,    7965,       -32,  // NOLINT
   1448     1073749800, -32,    7983,       -32,   1073749816, -32,
   1449     7999,       -32,    1073749832, -32,   8013,       -32,
   1450     8025,       -32,    8027,       -32,  // NOLINT
   1451     8029,       -32,    8031,       -32,   1073749864, -32,
   1452     8047,       -32,    1073749896, -32,   8079,       -32,
   1453     1073749912, -32,    8095,       -32,  // NOLINT
   1454     1073749928, -32,    8111,       -32,   1073749944, -32,
   1455     8121,       -32,    1073749946, -296,  8123,       -296,
   1456     8124,       -36,    1073749960, -344,  // NOLINT
   1457     8139,       -344,   8140,       -36,   1073749976, -32,
   1458     8153,       -32,    1073749978, -400,  8155,       -400,
   1459     1073749992, -32,    8169,       -32,  // NOLINT
   1460     1073749994, -448,   8171,       -448,  8172,       -28,
   1461     1073750008, -512,   8185,       -512,  1073750010, -504,
   1462     8187,       -504,   8188,       -36};                 // NOLINT
   1463 static const uint16_t kToLowercaseMultiStrings0Size = 2;  // NOLINT
   1464 static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings1[1] = {  // NOLINT
   1465   {{kSentinel}} }; // NOLINT
   1466 static const uint16_t kToLowercaseTable1Size = 79;  // NOLINT
   1467 static const int32_t kToLowercaseTable1[158] = {
   1468   294, -30068, 298, -33532, 299, -33048, 306, 112, 1073742176, 64, 367, 64, 387, 4, 1073743030, 104,  // NOLINT
   1469   1231, 104, 1073744896, 192, 3118, 192, 3168, 4, 3170, -42972, 3171, -15256, 3172, -42908, 3175, 4,  // NOLINT
   1470   3177, 4, 3179, 4, 3181, -43120, 3182, -42996, 3183, -43132, 3184, -43128, 3186, 4, 3189, 4,  // NOLINT
   1471   1073745022, -43260, 3199, -43260, 3200, 4, 3202, 4, 3204, 4, 3206, 4, 3208, 4, 3210, 4,  // NOLINT
   1472   3212, 4, 3214, 4, 3216, 4, 3218, 4, 3220, 4, 3222, 4, 3224, 4, 3226, 4,  // NOLINT
   1473   3228, 4, 3230, 4, 3232, 4, 3234, 4, 3236, 4, 3238, 4, 3240, 4, 3242, 4,  // NOLINT
   1474   3244, 4, 3246, 4, 3248, 4, 3250, 4, 3252, 4, 3254, 4, 3256, 4, 3258, 4,  // NOLINT
   1475   3260, 4, 3262, 4, 3264, 4, 3266, 4, 3268, 4, 3270, 4, 3272, 4, 3274, 4,  // NOLINT
   1476   3276, 4, 3278, 4, 3280, 4, 3282, 4, 3284, 4, 3286, 4, 3288, 4, 3290, 4,  // NOLINT
   1477   3292, 4, 3294, 4, 3296, 4, 3298, 4, 3307, 4, 3309, 4, 3314, 4 };  // NOLINT
   1478 static const uint16_t kToLowercaseMultiStrings1Size = 1;  // NOLINT
   1479 static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings5[1] = {  // NOLINT
   1480   {{kSentinel}} }; // NOLINT
   1481 static const uint16_t kToLowercaseTable5Size = 103;  // NOLINT
   1482 static const int32_t kToLowercaseTable5[206] = {
   1483     1600, 4,       1602, 4,       1604, 4,       1606, 4,
   1484     1608, 4,       1610, 4,       1612, 4,       1614, 4,  // NOLINT
   1485     1616, 4,       1618, 4,       1620, 4,       1622, 4,
   1486     1624, 4,       1626, 4,       1628, 4,       1630, 4,  // NOLINT
   1487     1632, 4,       1634, 4,       1636, 4,       1638, 4,
   1488     1640, 4,       1642, 4,       1644, 4,       1664, 4,  // NOLINT
   1489     1666, 4,       1668, 4,       1670, 4,       1672, 4,
   1490     1674, 4,       1676, 4,       1678, 4,       1680, 4,  // NOLINT
   1491     1682, 4,       1684, 4,       1686, 4,       1688, 4,
   1492     1690, 4,       1826, 4,       1828, 4,       1830, 4,  // NOLINT
   1493     1832, 4,       1834, 4,       1836, 4,       1838, 4,
   1494     1842, 4,       1844, 4,       1846, 4,       1848, 4,  // NOLINT
   1495     1850, 4,       1852, 4,       1854, 4,       1856, 4,
   1496     1858, 4,       1860, 4,       1862, 4,       1864, 4,  // NOLINT
   1497     1866, 4,       1868, 4,       1870, 4,       1872, 4,
   1498     1874, 4,       1876, 4,       1878, 4,       1880, 4,  // NOLINT
   1499     1882, 4,       1884, 4,       1886, 4,       1888, 4,
   1500     1890, 4,       1892, 4,       1894, 4,       1896, 4,  // NOLINT
   1501     1898, 4,       1900, 4,       1902, 4,       1913, 4,
   1502     1915, 4,       1917, -141328, 1918, 4,       1920, 4,  // NOLINT
   1503     1922, 4,       1924, 4,       1926, 4,       1931, 4,
   1504     1933, -169120, 1936, 4,       1938, 4,       1942, 4,  // NOLINT
   1505     1944, 4,       1946, 4,       1948, 4,       1950, 4,
   1506     1952, 4,       1954, 4,       1956, 4,       1958, 4,  // NOLINT
   1507     1960, 4,       1962, -169232, 1963, -169276, 1964, -169260,
   1508     1965, -169220, 1968, -169032, 1969, -169128};         // NOLINT
   1509 static const uint16_t kToLowercaseMultiStrings5Size = 1;  // NOLINT
   1510 static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings7[1] = {  // NOLINT
   1511   {{kSentinel}} }; // NOLINT
   1512 static const uint16_t kToLowercaseTable7Size = 2;  // NOLINT
   1513 static const int32_t kToLowercaseTable7[4] = {
   1514   1073749793, 128, 7994, 128 };  // NOLINT
   1515 static const uint16_t kToLowercaseMultiStrings7Size = 1;  // NOLINT
   1516 int ToLowercase::Convert(uchar c,
   1517                       uchar n,
   1518                       uchar* result,
   1519                       bool* allow_caching_ptr) {
   1520   int chunk_index = c >> 13;
   1521   switch (chunk_index) {
   1522     case 0: return LookupMapping<true>(kToLowercaseTable0,
   1523                                            kToLowercaseTable0Size,
   1524                                            kToLowercaseMultiStrings0,
   1525                                            c,
   1526                                            n,
   1527                                            result,
   1528                                            allow_caching_ptr);
   1529     case 1: return LookupMapping<true>(kToLowercaseTable1,
   1530                                            kToLowercaseTable1Size,
   1531                                            kToLowercaseMultiStrings1,
   1532                                            c,
   1533                                            n,
   1534                                            result,
   1535                                            allow_caching_ptr);
   1536     case 5: return LookupMapping<true>(kToLowercaseTable5,
   1537                                            kToLowercaseTable5Size,
   1538                                            kToLowercaseMultiStrings5,
   1539                                            c,
   1540                                            n,
   1541                                            result,
   1542                                            allow_caching_ptr);
   1543     case 7: return LookupMapping<true>(kToLowercaseTable7,
   1544                                            kToLowercaseTable7Size,
   1545                                            kToLowercaseMultiStrings7,
   1546                                            c,
   1547                                            n,
   1548                                            result,
   1549                                            allow_caching_ptr);
   1550     default: return 0;
   1551   }
   1552 }
   1553 
   1554 static const MultiCharacterSpecialCase<3> kToUppercaseMultiStrings0[62] = {  // NOLINT
   1555   {{83, 83, kSentinel}}, {{700, 78, kSentinel}}, {{74, 780, kSentinel}}, {{921, 776, 769}},  // NOLINT
   1556   {{933, 776, 769}}, {{1333, 1362, kSentinel}}, {{72, 817, kSentinel}}, {{84, 776, kSentinel}},  // NOLINT
   1557   {{87, 778, kSentinel}}, {{89, 778, kSentinel}}, {{65, 702, kSentinel}}, {{933, 787, kSentinel}},  // NOLINT
   1558   {{933, 787, 768}}, {{933, 787, 769}}, {{933, 787, 834}}, {{7944, 921, kSentinel}},  // NOLINT
   1559   {{7945, 921, kSentinel}}, {{7946, 921, kSentinel}}, {{7947, 921, kSentinel}}, {{7948, 921, kSentinel}},  // NOLINT
   1560   {{7949, 921, kSentinel}}, {{7950, 921, kSentinel}}, {{7951, 921, kSentinel}}, {{7976, 921, kSentinel}},  // NOLINT
   1561   {{7977, 921, kSentinel}}, {{7978, 921, kSentinel}}, {{7979, 921, kSentinel}}, {{7980, 921, kSentinel}},  // NOLINT
   1562   {{7981, 921, kSentinel}}, {{7982, 921, kSentinel}}, {{7983, 921, kSentinel}}, {{8040, 921, kSentinel}},  // NOLINT
   1563   {{8041, 921, kSentinel}}, {{8042, 921, kSentinel}}, {{8043, 921, kSentinel}}, {{8044, 921, kSentinel}},  // NOLINT
   1564   {{8045, 921, kSentinel}}, {{8046, 921, kSentinel}}, {{8047, 921, kSentinel}}, {{8122, 921, kSentinel}},  // NOLINT
   1565   {{913, 921, kSentinel}}, {{902, 921, kSentinel}}, {{913, 834, kSentinel}}, {{913, 834, 921}},  // NOLINT
   1566   {{8138, 921, kSentinel}}, {{919, 921, kSentinel}}, {{905, 921, kSentinel}}, {{919, 834, kSentinel}},  // NOLINT
   1567   {{919, 834, 921}}, {{921, 776, 768}}, {{921, 834, kSentinel}}, {{921, 776, 834}},  // NOLINT
   1568   {{933, 776, 768}}, {{929, 787, kSentinel}}, {{933, 834, kSentinel}}, {{933, 776, 834}},  // NOLINT
   1569   {{8186, 921, kSentinel}}, {{937, 921, kSentinel}}, {{911, 921, kSentinel}}, {{937, 834, kSentinel}},  // NOLINT
   1570   {{937, 834, 921}}, {{kSentinel}} }; // NOLINT
   1571 static const uint16_t kToUppercaseTable0Size = 590;  // NOLINT
   1572 static const int32_t kToUppercaseTable0[1180] = {
   1573     1073741921, -128,   122,        -128,   181,        2972,
   1574     223,        1,      1073742048, -128,   246,        -128,
   1575     1073742072, -128,   254,        -128,  // NOLINT
   1576     255,        484,    257,        -4,     259,        -4,
   1577     261,        -4,     263,        -4,     265,        -4,
   1578     267,        -4,     269,        -4,  // NOLINT
   1579     271,        -4,     273,        -4,     275,        -4,
   1580     277,        -4,     279,        -4,     281,        -4,
   1581     283,        -4,     285,        -4,  // NOLINT
   1582     287,        -4,     289,        -4,     291,        -4,
   1583     293,        -4,     295,        -4,     297,        -4,
   1584     299,        -4,     301,        -4,  // NOLINT
   1585     303,        -4,     305,        -928,   307,        -4,
   1586     309,        -4,     311,        -4,     314,        -4,
   1587     316,        -4,     318,        -4,  // NOLINT
   1588     320,        -4,     322,        -4,     324,        -4,
   1589     326,        -4,     328,        -4,     329,        5,
   1590     331,        -4,     333,        -4,  // NOLINT
   1591     335,        -4,     337,        -4,     339,        -4,
   1592     341,        -4,     343,        -4,     345,        -4,
   1593     347,        -4,     349,        -4,  // NOLINT
   1594     351,        -4,     353,        -4,     355,        -4,
   1595     357,        -4,     359,        -4,     361,        -4,
   1596     363,        -4,     365,        -4,  // NOLINT
   1597     367,        -4,     369,        -4,     371,        -4,
   1598     373,        -4,     375,        -4,     378,        -4,
   1599     380,        -4,     382,        -4,  // NOLINT
   1600     383,        -1200,  384,        780,    387,        -4,
   1601     389,        -4,     392,        -4,     396,        -4,
   1602     402,        -4,     405,        388,  // NOLINT
   1603     409,        -4,     410,        652,    414,        520,
   1604     417,        -4,     419,        -4,     421,        -4,
   1605     424,        -4,     429,        -4,  // NOLINT
   1606     432,        -4,     436,        -4,     438,        -4,
   1607     441,        -4,     445,        -4,     447,        224,
   1608     453,        -4,     454,        -8,  // NOLINT
   1609     456,        -4,     457,        -8,     459,        -4,
   1610     460,        -8,     462,        -4,     464,        -4,
   1611     466,        -4,     468,        -4,  // NOLINT
   1612     470,        -4,     472,        -4,     474,        -4,
   1613     476,        -4,     477,        -316,   479,        -4,
   1614     481,        -4,     483,        -4,  // NOLINT
   1615     485,        -4,     487,        -4,     489,        -4,
   1616     491,        -4,     493,        -4,     495,        -4,
   1617     496,        9,      498,        -4,  // NOLINT
   1618     499,        -8,     501,        -4,     505,        -4,
   1619     507,        -4,     509,        -4,     511,        -4,
   1620     513,        -4,     515,        -4,  // NOLINT
   1621     517,        -4,     519,        -4,     521,        -4,
   1622     523,        -4,     525,        -4,     527,        -4,
   1623     529,        -4,     531,        -4,  // NOLINT
   1624     533,        -4,     535,        -4,     537,        -4,
   1625     539,        -4,     541,        -4,     543,        -4,
   1626     547,        -4,     549,        -4,  // NOLINT
   1627     551,        -4,     553,        -4,     555,        -4,
   1628     557,        -4,     559,        -4,     561,        -4,
   1629     563,        -4,     572,        -4,  // NOLINT
   1630     1073742399, 43260,  576,        43260,  578,        -4,
   1631     583,        -4,     585,        -4,     587,        -4,
   1632     589,        -4,     591,        -4,  // NOLINT
   1633     592,        43132,  593,        43120,  594,        43128,
   1634     595,        -840,   596,        -824,   1073742422, -820,
   1635     599,        -820,   601,        -808,  // NOLINT
   1636     603,        -812,   604,        169276, 608,        -820,
   1637     609,        169260, 611,        -828,   613,        169120,
   1638     614,        169232, 616,        -836,  // NOLINT
   1639     617,        -844,   619,        42972,  620,        169220,
   1640     623,        -844,   625,        42996,  626,        -852,
   1641     629,        -856,   637,        42908,  // NOLINT
   1642     640,        -872,   643,        -872,   647,        169128,
   1643     648,        -872,   649,        -276,   1073742474, -868,
   1644     651,        -868,   652,        -284,  // NOLINT
   1645     658,        -876,   670,        169032, 837,        336,
   1646     881,        -4,     883,        -4,     887,        -4,
   1647     1073742715, 520,    893,        520,  // NOLINT
   1648     912,        13,     940,        -152,   1073742765, -148,
   1649     943,        -148,   944,        17,     1073742769, -128,
   1650     961,        -128,   962,        -124,  // NOLINT
   1651     1073742787, -128,   971,        -128,   972,        -256,
   1652     1073742797, -252,   974,        -252,   976,        -248,
   1653     977,        -228,   981,        -188,  // NOLINT
   1654     982,        -216,   983,        -32,    985,        -4,
   1655     987,        -4,     989,        -4,     991,        -4,
   1656     993,        -4,     995,        -4,  // NOLINT
   1657     997,        -4,     999,        -4,     1001,       -4,
   1658     1003,       -4,     1005,       -4,     1007,       -4,
   1659     1008,       -344,   1009,       -320,  // NOLINT
   1660     1010,       28,     1011,       -464,   1013,       -384,
   1661     1016,       -4,     1019,       -4,     1073742896, -128,
   1662     1103,       -128,   1073742928, -320,  // NOLINT
   1663     1119,       -320,   1121,       -4,     1123,       -4,
   1664     1125,       -4,     1127,       -4,     1129,       -4,
   1665     1131,       -4,     1133,       -4,  // NOLINT
   1666     1135,       -4,     1137,       -4,     1139,       -4,
   1667     1141,       -4,     1143,       -4,     1145,       -4,
   1668     1147,       -4,     1149,       -4,  // NOLINT
   1669     1151,       -4,     1153,       -4,     1163,       -4,
   1670     1165,       -4,     1167,       -4,     1169,       -4,
   1671     1171,       -4,     1173,       -4,  // NOLINT
   1672     1175,       -4,     1177,       -4,     1179,       -4,
   1673     1181,       -4,     1183,       -4,     1185,       -4,
   1674     1187,       -4,     1189,       -4,  // NOLINT
   1675     1191,       -4,     1193,       -4,     1195,       -4,
   1676     1197,       -4,     1199,       -4,     1201,       -4,
   1677     1203,       -4,     1205,       -4,  // NOLINT
   1678     1207,       -4,     1209,       -4,     1211,       -4,
   1679     1213,       -4,     1215,       -4,     1218,       -4,
   1680     1220,       -4,     1222,       -4,  // NOLINT
   1681     1224,       -4,     1226,       -4,     1228,       -4,
   1682     1230,       -4,     1231,       -60,    1233,       -4,
   1683     1235,       -4,     1237,       -4,  // NOLINT
   1684     1239,       -4,     1241,       -4,     1243,       -4,
   1685     1245,       -4,     1247,       -4,     1249,       -4,
   1686     1251,       -4,     1253,       -4,  // NOLINT
   1687     1255,       -4,     1257,       -4,     1259,       -4,
   1688     1261,       -4,     1263,       -4,     1265,       -4,
   1689     1267,       -4,     1269,       -4,  // NOLINT
   1690     1271,       -4,     1273,       -4,     1275,       -4,
   1691     1277,       -4,     1279,       -4,     1281,       -4,
   1692     1283,       -4,     1285,       -4,  // NOLINT
   1693     1287,       -4,     1289,       -4,     1291,       -4,
   1694     1293,       -4,     1295,       -4,     1297,       -4,
   1695     1299,       -4,     1301,       -4,  // NOLINT
   1696     1303,       -4,     1305,       -4,     1307,       -4,
   1697     1309,       -4,     1311,       -4,     1313,       -4,
   1698     1315,       -4,     1317,       -4,  // NOLINT
   1699     1319,       -4,     1321,       -4,     1323,       -4,
   1700     1325,       -4,     1327,       -4,     1073743201, -192,
   1701     1414,       -192,   1415,       21,  // NOLINT
   1702     7545,       141328, 7549,       15256,  7681,       -4,
   1703     7683,       -4,     7685,       -4,     7687,       -4,
   1704     7689,       -4,     7691,       -4,  // NOLINT
   1705     7693,       -4,     7695,       -4,     7697,       -4,
   1706     7699,       -4,     7701,       -4,     7703,       -4,
   1707     7705,       -4,     7707,       -4,  // NOLINT
   1708     7709,       -4,     7711,       -4,     7713,       -4,
   1709     7715,       -4,     7717,       -4,     7719,       -4,
   1710     7721,       -4,     7723,       -4,  // NOLINT
   1711     7725,       -4,     7727,       -4,     7729,       -4,
   1712     7731,       -4,     7733,       -4,     7735,       -4,
   1713     7737,       -4,     7739,       -4,  // NOLINT
   1714     7741,       -4,     7743,       -4,     7745,       -4,
   1715     7747,       -4,     7749,       -4,     7751,       -4,
   1716     7753,       -4,     7755,       -4,  // NOLINT
   1717     7757,       -4,     7759,       -4,     7761,       -4,
   1718     7763,       -4,     7765,       -4,     7767,       -4,
   1719     7769,       -4,     7771,       -4,  // NOLINT
   1720     7773,       -4,     7775,       -4,     7777,       -4,
   1721     7779,       -4,     7781,       -4,     7783,       -4,
   1722     7785,       -4,     7787,       -4,  // NOLINT
   1723     7789,       -4,     7791,       -4,     7793,       -4,
   1724     7795,       -4,     7797,       -4,     7799,       -4,
   1725     7801,       -4,     7803,       -4,  // NOLINT
   1726     7805,       -4,     7807,       -4,     7809,       -4,
   1727     7811,       -4,     7813,       -4,     7815,       -4,
   1728     7817,       -4,     7819,       -4,  // NOLINT
   1729     7821,       -4,     7823,       -4,     7825,       -4,
   1730     7827,       -4,     7829,       -4,     7830,       25,
   1731     7831,       29,     7832,       33,  // NOLINT
   1732     7833,       37,     7834,       41,     7835,       -236,
   1733     7841,       -4,     7843,       -4,     7845,       -4,
   1734     7847,       -4,     7849,       -4,  // NOLINT
   1735     7851,       -4,     7853,       -4,     7855,       -4,
   1736     7857,       -4,     7859,       -4,     7861,       -4,
   1737     7863,       -4,     7865,       -4,  // NOLINT
   1738     7867,       -4,     7869,       -4,     7871,       -4,
   1739     7873,       -4,     7875,       -4,     7877,       -4,
   1740     7879,       -4,     7881,       -4,  // NOLINT
   1741     7883,       -4,     7885,       -4,     7887,       -4,
   1742     7889,       -4,     7891,       -4,     7893,       -4,
   1743     7895,       -4,     7897,       -4,  // NOLINT
   1744     7899,       -4,     7901,       -4,     7903,       -4,
   1745     7905,       -4,     7907,       -4,     7909,       -4,
   1746     7911,       -4,     7913,       -4,  // NOLINT
   1747     7915,       -4,     7917,       -4,     7919,       -4,
   1748     7921,       -4,     7923,       -4,     7925,       -4,
   1749     7927,       -4,     7929,       -4,  // NOLINT
   1750     7931,       -4,     7933,       -4,     7935,       -4,
   1751     1073749760, 32,     7943,       32,     1073749776, 32,
   1752     7957,       32,     1073749792, 32,  // NOLINT
   1753     7975,       32,     1073749808, 32,     7991,       32,
   1754     1073749824, 32,     8005,       32,     8016,       45,
   1755     8017,       32,     8018,       49,  // NOLINT
   1756     8019,       32,     8020,       53,     8021,       32,
   1757     8022,       57,     8023,       32,     1073749856, 32,
   1758     8039,       32,     1073749872, 296,  // NOLINT
   1759     8049,       296,    1073749874, 344,    8053,       344,
   1760     1073749878, 400,    8055,       400,    1073749880, 512,
   1761     8057,       512,    1073749882, 448,  // NOLINT
   1762     8059,       448,    1073749884, 504,    8061,       504,
   1763     8064,       61,     8065,       65,     8066,       69,
   1764     8067,       73,     8068,       77,  // NOLINT
   1765     8069,       81,     8070,       85,     8071,       89,
   1766     8072,       61,     8073,       65,     8074,       69,
   1767     8075,       73,     8076,       77,  // NOLINT
   1768     8077,       81,     8078,       85,     8079,       89,
   1769     8080,       93,     8081,       97,     8082,       101,
   1770     8083,       105,    8084,       109,  // NOLINT
   1771     8085,       113,    8086,       117,    8087,       121,
   1772     8088,       93,     8089,       97,     8090,       101,
   1773     8091,       105,    8092,       109,  // NOLINT
   1774     8093,       113,    8094,       117,    8095,       121,
   1775     8096,       125,    8097,       129,    8098,       133,
   1776     8099,       137,    8100,       141,  // NOLINT
   1777     8101,       145,    8102,       149,    8103,       153,
   1778     8104,       125,    8105,       129,    8106,       133,
   1779     8107,       137,    8108,       141,  // NOLINT
   1780     8109,       145,    8110,       149,    8111,       153,
   1781     1073749936, 32,     8113,       32,     8114,       157,
   1782     8115,       161,    8116,       165,  // NOLINT
   1783     8118,       169,    8119,       173,    8124,       161,
   1784     8126,       -28820, 8130,       177,    8131,       181,
   1785     8132,       185,    8134,       189,  // NOLINT
   1786     8135,       193,    8140,       181,    1073749968, 32,
   1787     8145,       32,     8146,       197,    8147,       13,
   1788     8150,       201,    8151,       205,  // NOLINT
   1789     1073749984, 32,     8161,       32,     8162,       209,
   1790     8163,       17,     8164,       213,    8165,       28,
   1791     8166,       217,    8167,       221,  // NOLINT
   1792     8178,       225,    8179,       229,    8180,       233,
   1793     8182,       237,    8183,       241,    8188,       229};  // NOLINT
   1794 static const uint16_t kToUppercaseMultiStrings0Size = 62;  // NOLINT
   1795 static const MultiCharacterSpecialCase<1> kToUppercaseMultiStrings1[1] = {  // NOLINT
   1796   {{kSentinel}} }; // NOLINT
   1797 static const uint16_t kToUppercaseTable1Size = 73;  // NOLINT
   1798 static const int32_t kToUppercaseTable1[146] = {
   1799   334, -112, 1073742192, -64, 383, -64, 388, -4, 1073743056, -104, 1257, -104, 1073744944, -192, 3166, -192,  // NOLINT
   1800   3169, -4, 3173, -43180, 3174, -43168, 3176, -4, 3178, -4, 3180, -4, 3187, -4, 3190, -4,  // NOLINT
   1801   3201, -4, 3203, -4, 3205, -4, 3207, -4, 3209, -4, 3211, -4, 3213, -4, 3215, -4,  // NOLINT
   1802   3217, -4, 3219, -4, 3221, -4, 3223, -4, 3225, -4, 3227, -4, 3229, -4, 3231, -4,  // NOLINT
   1803   3233, -4, 3235, -4, 3237, -4, 3239, -4, 3241, -4, 3243, -4, 3245, -4, 3247, -4,  // NOLINT
   1804   3249, -4, 3251, -4, 3253, -4, 3255, -4, 3257, -4, 3259, -4, 3261, -4, 3263, -4,  // NOLINT
   1805   3265, -4, 3267, -4, 3269, -4, 3271, -4, 3273, -4, 3275, -4, 3277, -4, 3279, -4,  // NOLINT
   1806   3281, -4, 3283, -4, 3285, -4, 3287, -4, 3289, -4, 3291, -4, 3293, -4, 3295, -4,  // NOLINT
   1807   3297, -4, 3299, -4, 3308, -4, 3310, -4, 3315, -4, 1073745152, -29056, 3365, -29056, 3367, -29056,  // NOLINT
   1808   3373, -29056 };  // NOLINT
   1809 static const uint16_t kToUppercaseMultiStrings1Size = 1;  // NOLINT
   1810 static const MultiCharacterSpecialCase<1> kToUppercaseMultiStrings5[1] = {  // NOLINT
   1811   {{kSentinel}} }; // NOLINT
   1812 static const uint16_t kToUppercaseTable5Size = 95;  // NOLINT
   1813 static const int32_t
   1814     kToUppercaseTable5[190] = {1601, -4, 1603, -4, 1605, -4, 1607, -4, 1609, -4,
   1815                                1611, -4, 1613, -4, 1615, -4,  // NOLINT
   1816                                1617, -4, 1619, -4, 1621, -4, 1623, -4, 1625, -4,
   1817                                1627, -4, 1629, -4, 1631, -4,  // NOLINT
   1818                                1633, -4, 1635, -4, 1637, -4, 1639, -4, 1641, -4,
   1819                                1643, -4, 1645, -4, 1665, -4,  // NOLINT
   1820                                1667, -4, 1669, -4, 1671, -4, 1673, -4, 1675, -4,
   1821                                1677, -4, 1679, -4, 1681, -4,  // NOLINT
   1822                                1683, -4, 1685, -4, 1687, -4, 1689, -4, 1691, -4,
   1823                                1827, -4, 1829, -4, 1831, -4,  // NOLINT
   1824                                1833, -4, 1835, -4, 1837, -4, 1839, -4, 1843, -4,
   1825                                1845, -4, 1847, -4, 1849, -4,  // NOLINT
   1826                                1851, -4, 1853, -4, 1855, -4, 1857, -4, 1859, -4,
   1827                                1861, -4, 1863, -4, 1865, -4,  // NOLINT
   1828                                1867, -4, 1869, -4, 1871, -4, 1873, -4, 1875, -4,
   1829                                1877, -4, 1879, -4, 1881, -4,  // NOLINT
   1830                                1883, -4, 1885, -4, 1887, -4, 1889, -4, 1891, -4,
   1831                                1893, -4, 1895, -4, 1897, -4,  // NOLINT
   1832                                1899, -4, 1901, -4, 1903, -4, 1914, -4, 1916, -4,
   1833                                1919, -4, 1921, -4, 1923, -4,  // NOLINT
   1834                                1925, -4, 1927, -4, 1932, -4, 1937, -4, 1939, -4,
   1835                                1943, -4, 1945, -4, 1947, -4,  // NOLINT
   1836                                1949, -4, 1951, -4, 1953, -4, 1955, -4, 1957, -4,
   1837                                1959, -4, 1961, -4};       // NOLINT
   1838 static const uint16_t kToUppercaseMultiStrings5Size = 1;  // NOLINT
   1839 static const MultiCharacterSpecialCase<3> kToUppercaseMultiStrings7[12] = {  // NOLINT
   1840   {{70, 70, kSentinel}}, {{70, 73, kSentinel}}, {{70, 76, kSentinel}}, {{70, 70, 73}},  // NOLINT
   1841   {{70, 70, 76}}, {{83, 84, kSentinel}}, {{1348, 1350, kSentinel}}, {{1348, 1333, kSentinel}},  // NOLINT
   1842   {{1348, 1339, kSentinel}}, {{1358, 1350, kSentinel}}, {{1348, 1341, kSentinel}}, {{kSentinel}} }; // NOLINT
   1843 static const uint16_t kToUppercaseTable7Size = 14;  // NOLINT
   1844 static const int32_t kToUppercaseTable7[28] = {
   1845   6912, 1, 6913, 5, 6914, 9, 6915, 13, 6916, 17, 6917, 21, 6918, 21, 6931, 25,  // NOLINT
   1846   6932, 29, 6933, 33, 6934, 37, 6935, 41, 1073749825, -128, 8026, -128 };  // NOLINT
   1847 static const uint16_t kToUppercaseMultiStrings7Size = 12;  // NOLINT
   1848 int ToUppercase::Convert(uchar c,
   1849                       uchar n,
   1850                       uchar* result,
   1851                       bool* allow_caching_ptr) {
   1852   int chunk_index = c >> 13;
   1853   switch (chunk_index) {
   1854     case 0: return LookupMapping<true>(kToUppercaseTable0,
   1855                                            kToUppercaseTable0Size,
   1856                                            kToUppercaseMultiStrings0,
   1857                                            c,
   1858                                            n,
   1859                                            result,
   1860                                            allow_caching_ptr);
   1861     case 1: return LookupMapping<true>(kToUppercaseTable1,
   1862                                            kToUppercaseTable1Size,
   1863                                            kToUppercaseMultiStrings1,
   1864                                            c,
   1865                                            n,
   1866                                            result,
   1867                                            allow_caching_ptr);
   1868     case 5: return LookupMapping<true>(kToUppercaseTable5,
   1869                                            kToUppercaseTable5Size,
   1870                                            kToUppercaseMultiStrings5,
   1871                                            c,
   1872                                            n,
   1873                                            result,
   1874                                            allow_caching_ptr);
   1875     case 7: return LookupMapping<true>(kToUppercaseTable7,
   1876                                            kToUppercaseTable7Size,
   1877                                            kToUppercaseMultiStrings7,
   1878                                            c,
   1879                                            n,
   1880                                            result,
   1881                                            allow_caching_ptr);
   1882     default: return 0;
   1883   }
   1884 }
   1885 
   1886 static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings0[1] = {  // NOLINT
   1887   {{kSentinel}} }; // NOLINT
   1888 static const uint16_t kEcma262CanonicalizeTable0Size = 498;  // NOLINT
   1889 static const int32_t kEcma262CanonicalizeTable0[996] = {
   1890     1073741921, -128,   122,        -128,   181,        2972,
   1891     1073742048, -128,   246,        -128,   1073742072, -128,
   1892     254,        -128,   255,        484,  // NOLINT
   1893     257,        -4,     259,        -4,     261,        -4,
   1894     263,        -4,     265,        -4,     267,        -4,
   1895     269,        -4,     271,        -4,  // NOLINT
   1896     273,        -4,     275,        -4,     277,        -4,
   1897     279,        -4,     281,        -4,     283,        -4,
   1898     285,        -4,     287,        -4,  // NOLINT
   1899     289,        -4,     291,        -4,     293,        -4,
   1900     295,        -4,     297,        -4,     299,        -4,
   1901     301,        -4,     303,        -4,  // NOLINT
   1902     307,        -4,     309,        -4,     311,        -4,
   1903     314,        -4,     316,        -4,     318,        -4,
   1904     320,        -4,     322,        -4,  // NOLINT
   1905     324,        -4,     326,        -4,     328,        -4,
   1906     331,        -4,     333,        -4,     335,        -4,
   1907     337,        -4,     339,        -4,  // NOLINT
   1908     341,        -4,     343,        -4,     345,        -4,
   1909     347,        -4,     349,        -4,     351,        -4,
   1910     353,        -4,     355,        -4,  // NOLINT
   1911     357,        -4,     359,        -4,     361,        -4,
   1912     363,        -4,     365,        -4,     367,        -4,
   1913     369,        -4,     371,        -4,  // NOLINT
   1914     373,        -4,     375,        -4,     378,        -4,
   1915     380,        -4,     382,        -4,     384,        780,
   1916     387,        -4,     389,        -4,  // NOLINT
   1917     392,        -4,     396,        -4,     402,        -4,
   1918     405,        388,    409,        -4,     410,        652,
   1919     414,        520,    417,        -4,  // NOLINT
   1920     419,        -4,     421,        -4,     424,        -4,
   1921     429,        -4,     432,        -4,     436,        -4,
   1922     438,        -4,     441,        -4,  // NOLINT
   1923     445,        -4,     447,        224,    453,        -4,
   1924     454,        -8,     456,        -4,     457,        -8,
   1925     459,        -4,     460,        -8,  // NOLINT
   1926     462,        -4,     464,        -4,     466,        -4,
   1927     468,        -4,     470,        -4,     472,        -4,
   1928     474,        -4,     476,        -4,  // NOLINT
   1929     477,        -316,   479,        -4,     481,        -4,
   1930     483,        -4,     485,        -4,     487,        -4,
   1931     489,        -4,     491,        -4,  // NOLINT
   1932     493,        -4,     495,        -4,     498,        -4,
   1933     499,        -8,     501,        -4,     505,        -4,
   1934     507,        -4,     509,        -4,  // NOLINT
   1935     511,        -4,     513,        -4,     515,        -4,
   1936     517,        -4,     519,        -4,     521,        -4,
   1937     523,        -4,     525,        -4,  // NOLINT
   1938     527,        -4,     529,        -4,     531,        -4,
   1939     533,        -4,     535,        -4,     537,        -4,
   1940     539,        -4,     541,        -4,  // NOLINT
   1941     543,        -4,     547,        -4,     549,        -4,
   1942     551,        -4,     553,        -4,     555,        -4,
   1943     557,        -4,     559,        -4,  // NOLINT
   1944     561,        -4,     563,        -4,     572,        -4,
   1945     1073742399, 43260,  576,        43260,  578,        -4,
   1946     583,        -4,     585,        -4,  // NOLINT
   1947     587,        -4,     589,        -4,     591,        -4,
   1948     592,        43132,  593,        43120,  594,        43128,
   1949     595,        -840,   596,        -824,  // NOLINT
   1950     1073742422, -820,   599,        -820,   601,        -808,
   1951     603,        -812,   604,        169276, 608,        -820,
   1952     609,        169260, 611,        -828,  // NOLINT
   1953     613,        169120, 614,        169232, 616,        -836,
   1954     617,        -844,   619,        42972,  620,        169220,
   1955     623,        -844,   625,        42996,  // NOLINT
   1956     626,        -852,   629,        -856,   637,        42908,
   1957     640,        -872,   643,        -872,   647,        169128,
   1958     648,        -872,   649,        -276,  // NOLINT
   1959     1073742474, -868,   651,        -868,   652,        -284,
   1960     658,        -876,   670,        169032, 837,        336,
   1961     881,        -4,     883,        -4,  // NOLINT
   1962     887,        -4,     1073742715, 520,    893,        520,
   1963     940,        -152,   1073742765, -148,   943,        -148,
   1964     1073742769, -128,   961,        -128,  // NOLINT
   1965     962,        -124,   1073742787, -128,   971,        -128,
   1966     972,        -256,   1073742797, -252,   974,        -252,
   1967     976,        -248,   977,        -228,  // NOLINT
   1968     981,        -188,   982,        -216,   983,        -32,
   1969     985,        -4,     987,        -4,     989,        -4,
   1970     991,        -4,     993,        -4,  // NOLINT
   1971     995,        -4,     997,        -4,     999,        -4,
   1972     1001,       -4,     1003,       -4,     1005,       -4,
   1973     1007,       -4,     1008,       -344,  // NOLINT
   1974     1009,       -320,   1010,       28,     1011,       -464,
   1975     1013,       -384,   1016,       -4,     1019,       -4,
   1976     1073742896, -128,   1103,       -128,  // NOLINT
   1977     1073742928, -320,   1119,       -320,   1121,       -4,
   1978     1123,       -4,     1125,       -4,     1127,       -4,
   1979     1129,       -4,     1131,       -4,  // NOLINT
   1980     1133,       -4,     1135,       -4,     1137,       -4,
   1981     1139,       -4,     1141,       -4,     1143,       -4,
   1982     1145,       -4,     1147,       -4,  // NOLINT
   1983     1149,       -4,     1151,       -4,     1153,       -4,
   1984     1163,       -4,     1165,       -4,     1167,       -4,
   1985     1169,       -4,     1171,       -4,  // NOLINT
   1986     1173,       -4,     1175,       -4,     1177,       -4,
   1987     1179,       -4,     1181,       -4,     1183,       -4,
   1988     1185,       -4,     1187,       -4,  // NOLINT
   1989     1189,       -4,     1191,       -4,     1193,       -4,
   1990     1195,       -4,     1197,       -4,     1199,       -4,
   1991     1201,       -4,     1203,       -4,  // NOLINT
   1992     1205,       -4,     1207,       -4,     1209,       -4,
   1993     1211,       -4,     1213,       -4,     1215,       -4,
   1994     1218,       -4,     1220,       -4,  // NOLINT
   1995     1222,       -4,     1224,       -4,     1226,       -4,
   1996     1228,       -4,     1230,       -4,     1231,       -60,
   1997     1233,       -4,     1235,       -4,  // NOLINT
   1998     1237,       -4,     1239,       -4,     1241,       -4,
   1999     1243,       -4,     1245,       -4,     1247,       -4,
   2000     1249,       -4,     1251,       -4,  // NOLINT
   2001     1253,       -4,     1255,       -4,     1257,       -4,
   2002     1259,       -4,     1261,       -4,     1263,       -4,
   2003     1265,       -4,     1267,       -4,  // NOLINT
   2004     1269,       -4,     1271,       -4,     1273,       -4,
   2005     1275,       -4,     1277,       -4,     1279,       -4,
   2006     1281,       -4,     1283,       -4,  // NOLINT
   2007     1285,       -4,     1287,       -4,     1289,       -4,
   2008     1291,       -4,     1293,       -4,     1295,       -4,
   2009     1297,       -4,     1299,       -4,  // NOLINT
   2010     1301,       -4,     1303,       -4,     1305,       -4,
   2011     1307,       -4,     1309,       -4,     1311,       -4,
   2012     1313,       -4,     1315,       -4,  // NOLINT
   2013     1317,       -4,     1319,       -4,     1321,       -4,
   2014     1323,       -4,     1325,       -4,     1327,       -4,
   2015     1073743201, -192,   1414,       -192,  // NOLINT
   2016     7545,       141328, 7549,       15256,  7681,       -4,
   2017     7683,       -4,     7685,       -4,     7687,       -4,
   2018     7689,       -4,     7691,       -4,  // NOLINT
   2019     7693,       -4,     7695,       -4,     7697,       -4,
   2020     7699,       -4,     7701,       -4,     7703,       -4,
   2021     7705,       -4,     7707,       -4,  // NOLINT
   2022     7709,       -4,     7711,       -4,     7713,       -4,
   2023     7715,       -4,     7717,       -4,     7719,       -4,
   2024     7721,       -4,     7723,       -4,  // NOLINT
   2025     7725,       -4,     7727,       -4,     7729,       -4,
   2026     7731,       -4,     7733,       -4,     7735,       -4,
   2027     7737,       -4,     7739,       -4,  // NOLINT
   2028     7741,       -4,     7743,       -4,     7745,       -4,
   2029     7747,       -4,     7749,       -4,     7751,       -4,
   2030     7753,       -4,     7755,       -4,  // NOLINT
   2031     7757,       -4,     7759,       -4,     7761,       -4,
   2032     7763,       -4,     7765,       -4,     7767,       -4,
   2033     7769,       -4,     7771,       -4,  // NOLINT
   2034     7773,       -4,     7775,       -4,     7777,       -4,
   2035     7779,       -4,     7781,       -4,     7783,       -4,
   2036     7785,       -4,     7787,       -4,  // NOLINT
   2037     7789,       -4,     7791,       -4,     7793,       -4,
   2038     7795,       -4,     7797,       -4,     7799,       -4,
   2039     7801,       -4,     7803,       -4,  // NOLINT
   2040     7805,       -4,     7807,       -4,     7809,       -4,
   2041     7811,       -4,     7813,       -4,     7815,       -4,
   2042     7817,       -4,     7819,       -4,  // NOLINT
   2043     7821,       -4,     7823,       -4,     7825,       -4,
   2044     7827,       -4,     7829,       -4,     7835,       -236,
   2045     7841,       -4,     7843,       -4,  // NOLINT
   2046     7845,       -4,     7847,       -4,     7849,       -4,
   2047     7851,       -4,     7853,       -4,     7855,       -4,
   2048     7857,       -4,     7859,       -4,  // NOLINT
   2049     7861,       -4,     7863,       -4,     7865,       -4,
   2050     7867,       -4,     7869,       -4,     7871,       -4,
   2051     7873,       -4,     7875,       -4,  // NOLINT
   2052     7877,       -4,     7879,       -4,     7881,       -4,
   2053     7883,       -4,     7885,       -4,     7887,       -4,
   2054     7889,       -4,     7891,       -4,  // NOLINT
   2055     7893,       -4,     7895,       -4,     7897,       -4,
   2056     7899,       -4,     7901,       -4,     7903,       -4,
   2057     7905,       -4,     7907,       -4,  // NOLINT
   2058     7909,       -4,     7911,       -4,     7913,       -4,
   2059     7915,       -4,     7917,       -4,     7919,       -4,
   2060     7921,       -4,     7923,       -4,  // NOLINT
   2061     7925,       -4,     7927,       -4,     7929,       -4,
   2062     7931,       -4,     7933,       -4,     7935,       -4,
   2063     1073749760, 32,     7943,       32,  // NOLINT
   2064     1073749776, 32,     7957,       32,     1073749792, 32,
   2065     7975,       32,     1073749808, 32,     7991,       32,
   2066     1073749824, 32,     8005,       32,  // NOLINT
   2067     8017,       32,     8019,       32,     8021,       32,
   2068     8023,       32,     1073749856, 32,     8039,       32,
   2069     1073749872, 296,    8049,       296,  // NOLINT
   2070     1073749874, 344,    8053,       344,    1073749878, 400,
   2071     8055,       400,    1073749880, 512,    8057,       512,
   2072     1073749882, 448,    8059,       448,  // NOLINT
   2073     1073749884, 504,    8061,       504,    1073749936, 32,
   2074     8113,       32,     8126,       -28820, 1073749968, 32,
   2075     8145,       32,     1073749984, 32,                           // NOLINT
   2076     8161,       32,     8165,       28};                          // NOLINT
   2077 static const uint16_t kEcma262CanonicalizeMultiStrings0Size = 1;  // NOLINT
   2078 static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings1[1] = {  // NOLINT
   2079   {{kSentinel}} }; // NOLINT
   2080 static const uint16_t kEcma262CanonicalizeTable1Size = 73;  // NOLINT
   2081 static const int32_t kEcma262CanonicalizeTable1[146] = {
   2082   334, -112, 1073742192, -64, 383, -64, 388, -4, 1073743056, -104, 1257, -104, 1073744944, -192, 3166, -192,  // NOLINT
   2083   3169, -4, 3173, -43180, 3174, -43168, 3176, -4, 3178, -4, 3180, -4, 3187, -4, 3190, -4,  // NOLINT
   2084   3201, -4, 3203, -4, 3205, -4, 3207, -4, 3209, -4, 3211, -4, 3213, -4, 3215, -4,  // NOLINT
   2085   3217, -4, 3219, -4, 3221, -4, 3223, -4, 3225, -4, 3227, -4, 3229, -4, 3231, -4,  // NOLINT
   2086   3233, -4, 3235, -4, 3237, -4, 3239, -4, 3241, -4, 3243, -4, 3245, -4, 3247, -4,  // NOLINT
   2087   3249, -4, 3251, -4, 3253, -4, 3255, -4, 3257, -4, 3259, -4, 3261, -4, 3263, -4,  // NOLINT
   2088   3265, -4, 3267, -4, 3269, -4, 3271, -4, 3273, -4, 3275, -4, 3277, -4, 3279, -4,  // NOLINT
   2089   3281, -4, 3283, -4, 3285, -4, 3287, -4, 3289, -4, 3291, -4, 3293, -4, 3295, -4,  // NOLINT
   2090   3297, -4, 3299, -4, 3308, -4, 3310, -4, 3315, -4, 1073745152, -29056, 3365, -29056, 3367, -29056,  // NOLINT
   2091   3373, -29056 };  // NOLINT
   2092 static const uint16_t kEcma262CanonicalizeMultiStrings1Size = 1;  // NOLINT
   2093 static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings5[1] = {  // NOLINT
   2094   {{kSentinel}} }; // NOLINT
   2095 static const uint16_t kEcma262CanonicalizeTable5Size = 95;  // NOLINT
   2096 static const int32_t kEcma262CanonicalizeTable5
   2097     [190] = {1601, -4, 1603, -4, 1605, -4, 1607, -4,
   2098              1609, -4, 1611, -4, 1613, -4, 1615, -4,  // NOLINT
   2099              1617, -4, 1619, -4, 1621, -4, 1623, -4,
   2100              1625, -4, 1627, -4, 1629, -4, 1631, -4,  // NOLINT
   2101              1633, -4, 1635, -4, 1637, -4, 1639, -4,
   2102              1641, -4, 1643, -4, 1645, -4, 1665, -4,  // NOLINT
   2103              1667, -4, 1669, -4, 1671, -4, 1673, -4,
   2104              1675, -4, 1677, -4, 1679, -4, 1681, -4,  // NOLINT
   2105              1683, -4, 1685, -4, 1687, -4, 1689, -4,
   2106              1691, -4, 1827, -4, 1829, -4, 1831, -4,  // NOLINT
   2107              1833, -4, 1835, -4, 1837, -4, 1839, -4,
   2108              1843, -4, 1845, -4, 1847, -4, 1849, -4,  // NOLINT
   2109              1851, -4, 1853, -4, 1855, -4, 1857, -4,
   2110              1859, -4, 1861, -4, 1863, -4, 1865, -4,  // NOLINT
   2111              1867, -4, 1869, -4, 1871, -4, 1873, -4,
   2112              1875, -4, 1877, -4, 1879, -4, 1881, -4,  // NOLINT
   2113              1883, -4, 1885, -4, 1887, -4, 1889, -4,
   2114              1891, -4, 1893, -4, 1895, -4, 1897, -4,  // NOLINT
   2115              1899, -4, 1901, -4, 1903, -4, 1914, -4,
   2116              1916, -4, 1919, -4, 1921, -4, 1923, -4,  // NOLINT
   2117              1925, -4, 1927, -4, 1932, -4, 1937, -4,
   2118              1939, -4, 1943, -4, 1945, -4, 1947, -4,  // NOLINT
   2119              1949, -4, 1951, -4, 1953, -4, 1955, -4,
   2120              1957, -4, 1959, -4, 1961, -4};                       // NOLINT
   2121 static const uint16_t kEcma262CanonicalizeMultiStrings5Size = 1;  // NOLINT
   2122 static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings7[1] = {  // NOLINT
   2123   {{kSentinel}} }; // NOLINT
   2124 static const uint16_t kEcma262CanonicalizeTable7Size = 2;  // NOLINT
   2125 static const int32_t kEcma262CanonicalizeTable7[4] = {
   2126   1073749825, -128, 8026, -128 };  // NOLINT
   2127 static const uint16_t kEcma262CanonicalizeMultiStrings7Size = 1;  // NOLINT
   2128 int Ecma262Canonicalize::Convert(uchar c,
   2129                       uchar n,
   2130                       uchar* result,
   2131                       bool* allow_caching_ptr) {
   2132   int chunk_index = c >> 13;
   2133   switch (chunk_index) {
   2134     case 0: return LookupMapping<true>(kEcma262CanonicalizeTable0,
   2135                                            kEcma262CanonicalizeTable0Size,
   2136                                            kEcma262CanonicalizeMultiStrings0,
   2137                                            c,
   2138                                            n,
   2139                                            result,
   2140                                            allow_caching_ptr);
   2141     case 1: return LookupMapping<true>(kEcma262CanonicalizeTable1,
   2142                                            kEcma262CanonicalizeTable1Size,
   2143                                            kEcma262CanonicalizeMultiStrings1,
   2144                                            c,
   2145                                            n,
   2146                                            result,
   2147                                            allow_caching_ptr);
   2148     case 5: return LookupMapping<true>(kEcma262CanonicalizeTable5,
   2149                                            kEcma262CanonicalizeTable5Size,
   2150                                            kEcma262CanonicalizeMultiStrings5,
   2151                                            c,
   2152                                            n,
   2153                                            result,
   2154                                            allow_caching_ptr);
   2155     case 7: return LookupMapping<true>(kEcma262CanonicalizeTable7,
   2156                                            kEcma262CanonicalizeTable7Size,
   2157                                            kEcma262CanonicalizeMultiStrings7,
   2158                                            c,
   2159                                            n,
   2160                                            result,
   2161                                            allow_caching_ptr);
   2162     default: return 0;
   2163   }
   2164 }
   2165 
   2166 static const MultiCharacterSpecialCase<4>
   2167     kEcma262UnCanonicalizeMultiStrings0[507] = {  // NOLINT
   2168         {{65, 97, kSentinel}},
   2169         {{90, 122, kSentinel}},
   2170         {{181, 924, 956, kSentinel}},
   2171         {{192, 224, kSentinel}},  // NOLINT
   2172         {{214, 246, kSentinel}},
   2173         {{216, 248, kSentinel}},
   2174         {{222, 254, kSentinel}},
   2175         {{255, 376, kSentinel}},  // NOLINT
   2176         {{256, 257, kSentinel}},
   2177         {{258, 259, kSentinel}},
   2178         {{260, 261, kSentinel}},
   2179         {{262, 263, kSentinel}},  // NOLINT
   2180         {{264, 265, kSentinel}},
   2181         {{266, 267, kSentinel}},
   2182         {{268, 269, kSentinel}},
   2183         {{270, 271, kSentinel}},  // NOLINT
   2184         {{272, 273, kSentinel}},
   2185         {{274, 275, kSentinel}},
   2186         {{276, 277, kSentinel}},
   2187         {{278, 279, kSentinel}},  // NOLINT
   2188         {{280, 281, kSentinel}},
   2189         {{282, 283, kSentinel}},
   2190         {{284, 285, kSentinel}},
   2191         {{286, 287, kSentinel}},  // NOLINT
   2192         {{288, 289, kSentinel}},
   2193         {{290, 291, kSentinel}},
   2194         {{292, 293, kSentinel}},
   2195         {{294, 295, kSentinel}},  // NOLINT
   2196         {{296, 297, kSentinel}},
   2197         {{298, 299, kSentinel}},
   2198         {{300, 301, kSentinel}},
   2199         {{302, 303, kSentinel}},  // NOLINT
   2200         {{306, 307, kSentinel}},
   2201         {{308, 309, kSentinel}},
   2202         {{310, 311, kSentinel}},
   2203         {{313, 314, kSentinel}},  // NOLINT
   2204         {{315, 316, kSentinel}},
   2205         {{317, 318, kSentinel}},
   2206         {{319, 320, kSentinel}},
   2207         {{321, 322, kSentinel}},  // NOLINT
   2208         {{323, 324, kSentinel}},
   2209         {{325, 326, kSentinel}},
   2210         {{327, 328, kSentinel}},
   2211         {{330, 331, kSentinel}},  // NOLINT
   2212         {{332, 333, kSentinel}},
   2213         {{334, 335, kSentinel}},
   2214         {{336, 337, kSentinel}},
   2215         {{338, 339, kSentinel}},  // NOLINT
   2216         {{340, 341, kSentinel}},
   2217         {{342, 343, kSentinel}},
   2218         {{344, 345, kSentinel}},
   2219         {{346, 347, kSentinel}},  // NOLINT
   2220         {{348, 349, kSentinel}},
   2221         {{350, 351, kSentinel}},
   2222         {{352, 353, kSentinel}},
   2223         {{354, 355, kSentinel}},  // NOLINT
   2224         {{356, 357, kSentinel}},
   2225         {{358, 359, kSentinel}},
   2226         {{360, 361, kSentinel}},
   2227         {{362, 363, kSentinel}},  // NOLINT
   2228         {{364, 365, kSentinel}},
   2229         {{366, 367, kSentinel}},
   2230         {{368, 369, kSentinel}},
   2231         {{370, 371, kSentinel}},  // NOLINT
   2232         {{372, 373, kSentinel}},
   2233         {{374, 375, kSentinel}},
   2234         {{377, 378, kSentinel}},
   2235         {{379, 380, kSentinel}},  // NOLINT
   2236         {{381, 382, kSentinel}},
   2237         {{384, 579, kSentinel}},
   2238         {{385, 595, kSentinel}},
   2239         {{386, 387, kSentinel}},  // NOLINT
   2240         {{388, 389, kSentinel}},
   2241         {{390, 596, kSentinel}},
   2242         {{391, 392, kSentinel}},
   2243         {{393, 598, kSentinel}},  // NOLINT
   2244         {{394, 599, kSentinel}},
   2245         {{395, 396, kSentinel}},
   2246         {{398, 477, kSentinel}},
   2247         {{399, 601, kSentinel}},  // NOLINT
   2248         {{400, 603, kSentinel}},
   2249         {{401, 402, kSentinel}},
   2250         {{403, 608, kSentinel}},
   2251         {{404, 611, kSentinel}},  // NOLINT
   2252         {{405, 502, kSentinel}},
   2253         {{406, 617, kSentinel}},
   2254         {{407, 616, kSentinel}},
   2255         {{408, 409, kSentinel}},  // NOLINT
   2256         {{410, 573, kSentinel}},
   2257         {{412, 623, kSentinel}},
   2258         {{413, 626, kSentinel}},
   2259         {{414, 544, kSentinel}},  // NOLINT
   2260         {{415, 629, kSentinel}},
   2261         {{416, 417, kSentinel}},
   2262         {{418, 419, kSentinel}},
   2263         {{420, 421, kSentinel}},  // NOLINT
   2264         {{422, 640, kSentinel}},
   2265         {{423, 424, kSentinel}},
   2266         {{425, 643, kSentinel}},
   2267         {{428, 429, kSentinel}},  // NOLINT
   2268         {{430, 648, kSentinel}},
   2269         {{431, 432, kSentinel}},
   2270         {{433, 650, kSentinel}},
   2271         {{434, 651, kSentinel}},  // NOLINT
   2272         {{435, 436, kSentinel}},
   2273         {{437, 438, kSentinel}},
   2274         {{439, 658, kSentinel}},
   2275         {{440, 441, kSentinel}},  // NOLINT
   2276         {{444, 445, kSentinel}},
   2277         {{447, 503, kSentinel}},
   2278         {{452, 453, 454, kSentinel}},
   2279         {{455, 456, 457, kSentinel}},  // NOLINT
   2280         {{458, 459, 460, kSentinel}},
   2281         {{461, 462, kSentinel}},
   2282         {{463, 464, kSentinel}},
   2283         {{465, 466, kSentinel}},  // NOLINT
   2284         {{467, 468, kSentinel}},
   2285         {{469, 470, kSentinel}},
   2286         {{471, 472, kSentinel}},
   2287         {{473, 474, kSentinel}},  // NOLINT
   2288         {{475, 476, kSentinel}},
   2289         {{478, 479, kSentinel}},
   2290         {{480, 481, kSentinel}},
   2291         {{482, 483, kSentinel}},  // NOLINT
   2292         {{484, 485, kSentinel}},
   2293         {{486, 487, kSentinel}},
   2294         {{488, 489, kSentinel}},
   2295         {{490, 491, kSentinel}},  // NOLINT
   2296         {{492, 493, kSentinel}},
   2297         {{494, 495, kSentinel}},
   2298         {{497, 498, 499, kSentinel}},
   2299         {{500, 501, kSentinel}},  // NOLINT
   2300         {{504, 505, kSentinel}},
   2301         {{506, 507, kSentinel}},
   2302         {{508, 509, kSentinel}},
   2303         {{510, 511, kSentinel}},  // NOLINT
   2304         {{512, 513, kSentinel}},
   2305         {{514, 515, kSentinel}},
   2306         {{516, 517, kSentinel}},
   2307         {{518, 519, kSentinel}},  // NOLINT
   2308         {{520, 521, kSentinel}},
   2309         {{522, 523, kSentinel}},
   2310         {{524, 525, kSentinel}},
   2311         {{526, 527, kSentinel}},  // NOLINT
   2312         {{528, 529, kSentinel}},
   2313         {{530, 531, kSentinel}},
   2314         {{532, 533, kSentinel}},
   2315         {{534, 535, kSentinel}},  // NOLINT
   2316         {{536, 537, kSentinel}},
   2317         {{538, 539, kSentinel}},
   2318         {{540, 541, kSentinel}},
   2319         {{542, 543, kSentinel}},  // NOLINT
   2320         {{546, 547, kSentinel}},
   2321         {{548, 549, kSentinel}},
   2322         {{550, 551, kSentinel}},
   2323         {{552, 553, kSentinel}},  // NOLINT
   2324         {{554, 555, kSentinel}},
   2325         {{556, 557, kSentinel}},
   2326         {{558, 559, kSentinel}},
   2327         {{560, 561, kSentinel}},  // NOLINT
   2328         {{562, 563, kSentinel}},
   2329         {{570, 11365, kSentinel}},
   2330         {{571, 572, kSentinel}},
   2331         {{574, 11366, kSentinel}},  // NOLINT
   2332         {{575, 11390, kSentinel}},
   2333         {{576, 11391, kSentinel}},
   2334         {{577, 578, kSentinel}},
   2335         {{580, 649, kSentinel}},  // NOLINT
   2336         {{581, 652, kSentinel}},
   2337         {{582, 583, kSentinel}},
   2338         {{584, 585, kSentinel}},
   2339         {{586, 587, kSentinel}},  // NOLINT
   2340         {{588, 589, kSentinel}},
   2341         {{590, 591, kSentinel}},
   2342         {{592, 11375, kSentinel}},
   2343         {{593, 11373, kSentinel}},  // NOLINT
   2344         {{594, 11376, kSentinel}},
   2345         {{604, 42923, kSentinel}},
   2346         {{609, 42924, kSentinel}},
   2347         {{613, 42893, kSentinel}},  // NOLINT
   2348         {{614, 42922, kSentinel}},
   2349         {{619, 11362, kSentinel}},
   2350         {{620, 42925, kSentinel}},
   2351         {{625, 11374, kSentinel}},  // NOLINT
   2352         {{637, 11364, kSentinel}},
   2353         {{647, 42929, kSentinel}},
   2354         {{670, 42928, kSentinel}},
   2355         {{837, 921, 953, 8126}},  // NOLINT
   2356         {{880, 881, kSentinel}},
   2357         {{882, 883, kSentinel}},
   2358         {{886, 887, kSentinel}},
   2359         {{891, 1021, kSentinel}},  // NOLINT
   2360         {{893, 1023, kSentinel}},
   2361         {{895, 1011, kSentinel}},
   2362         {{902, 940, kSentinel}},
   2363         {{904, 941, kSentinel}},  // NOLINT
   2364         {{906, 943, kSentinel}},
   2365         {{908, 972, kSentinel}},
   2366         {{910, 973, kSentinel}},
   2367         {{911, 974, kSentinel}},  // NOLINT
   2368         {{913, 945, kSentinel}},
   2369         {{914, 946, 976, kSentinel}},
   2370         {{915, 947, kSentinel}},
   2371         {{916, 948, kSentinel}},  // NOLINT
   2372         {{917, 949, 1013, kSentinel}},
   2373         {{918, 950, kSentinel}},
   2374         {{919, 951, kSentinel}},
   2375         {{920, 952, 977, kSentinel}},  // NOLINT
   2376         {{922, 954, 1008, kSentinel}},
   2377         {{923, 955, kSentinel}},
   2378         {{925, 957, kSentinel}},
   2379         {{927, 959, kSentinel}},  // NOLINT
   2380         {{928, 960, 982, kSentinel}},
   2381         {{929, 961, 1009, kSentinel}},
   2382         {{931, 962, 963, kSentinel}},
   2383         {{932, 964, kSentinel}},  // NOLINT
   2384         {{933, 965, kSentinel}},
   2385         {{934, 966, 981, kSentinel}},
   2386         {{935, 967, kSentinel}},
   2387         {{939, 971, kSentinel}},  // NOLINT
   2388         {{975, 983, kSentinel}},
   2389         {{984, 985, kSentinel}},
   2390         {{986, 987, kSentinel}},
   2391         {{988, 989, kSentinel}},  // NOLINT
   2392         {{990, 991, kSentinel}},
   2393         {{992, 993, kSentinel}},
   2394         {{994, 995, kSentinel}},
   2395         {{996, 997, kSentinel}},  // NOLINT
   2396         {{998, 999, kSentinel}},
   2397         {{1000, 1001, kSentinel}},
   2398         {{1002, 1003, kSentinel}},
   2399         {{1004, 1005, kSentinel}},  // NOLINT
   2400         {{1006, 1007, kSentinel}},
   2401         {{1010, 1017, kSentinel}},
   2402         {{1015, 1016, kSentinel}},
   2403         {{1018, 1019, kSentinel}},  // NOLINT
   2404         {{1024, 1104, kSentinel}},
   2405         {{1039, 1119, kSentinel}},
   2406         {{1040, 1072, kSentinel}},
   2407         {{1071, 1103, kSentinel}},  // NOLINT
   2408         {{1120, 1121, kSentinel}},
   2409         {{1122, 1123, kSentinel}},
   2410         {{1124, 1125, kSentinel}},
   2411         {{1126, 1127, kSentinel}},  // NOLINT
   2412         {{1128, 1129, kSentinel}},
   2413         {{1130, 1131, kSentinel}},
   2414         {{1132, 1133, kSentinel}},
   2415         {{1134, 1135, kSentinel}},  // NOLINT
   2416         {{1136, 1137, kSentinel}},
   2417         {{1138, 1139, kSentinel}},
   2418         {{1140, 1141, kSentinel}},
   2419         {{1142, 1143, kSentinel}},  // NOLINT
   2420         {{1144, 1145, kSentinel}},
   2421         {{1146, 1147, kSentinel}},
   2422         {{1148, 1149, kSentinel}},
   2423         {{1150, 1151, kSentinel}},  // NOLINT
   2424         {{1152, 1153, kSentinel}},
   2425         {{1162, 1163, kSentinel}},
   2426         {{1164, 1165, kSentinel}},
   2427         {{1166, 1167, kSentinel}},  // NOLINT
   2428         {{1168, 1169, kSentinel}},
   2429         {{1170, 1171, kSentinel}},
   2430         {{1172, 1173, kSentinel}},
   2431         {{1174, 1175, kSentinel}},  // NOLINT
   2432         {{1176, 1177, kSentinel}},
   2433         {{1178, 1179, kSentinel}},
   2434         {{1180, 1181, kSentinel}},
   2435         {{1182, 1183, kSentinel}},  // NOLINT
   2436         {{1184, 1185, kSentinel}},
   2437         {{1186, 1187, kSentinel}},
   2438         {{1188, 1189, kSentinel}},
   2439         {{1190, 1191, kSentinel}},  // NOLINT
   2440         {{1192, 1193, kSentinel}},
   2441         {{1194, 1195, kSentinel}},
   2442         {{1196, 1197, kSentinel}},
   2443         {{1198, 1199, kSentinel}},  // NOLINT
   2444         {{1200, 1201, kSentinel}},
   2445         {{1202, 1203, kSentinel}},
   2446         {{1204, 1205, kSentinel}},
   2447         {{1206, 1207, kSentinel}},  // NOLINT
   2448         {{1208, 1209, kSentinel}},
   2449         {{1210, 1211, kSentinel}},
   2450         {{1212, 1213, kSentinel}},
   2451         {{1214, 1215, kSentinel}},  // NOLINT
   2452         {{1216, 1231, kSentinel}},
   2453         {{1217, 1218, kSentinel}},
   2454         {{1219, 1220, kSentinel}},
   2455         {{1221, 1222, kSentinel}},  // NOLINT
   2456         {{1223, 1224, kSentinel}},
   2457         {{1225, 1226, kSentinel}},
   2458         {{1227, 1228, kSentinel}},
   2459         {{1229, 1230, kSentinel}},  // NOLINT
   2460         {{1232, 1233, kSentinel}},
   2461         {{1234, 1235, kSentinel}},
   2462         {{1236, 1237, kSentinel}},
   2463         {{1238, 1239, kSentinel}},  // NOLINT
   2464         {{1240, 1241, kSentinel}},
   2465         {{1242, 1243, kSentinel}},
   2466         {{1244, 1245, kSentinel}},
   2467         {{1246, 1247, kSentinel}},  // NOLINT
   2468         {{1248, 1249, kSentinel}},
   2469         {{1250, 1251, kSentinel}},
   2470         {{1252, 1253, kSentinel}},
   2471         {{1254, 1255, kSentinel}},  // NOLINT
   2472         {{1256, 1257, kSentinel}},
   2473         {{1258, 1259, kSentinel}},
   2474         {{1260, 1261, kSentinel}},
   2475         {{1262, 1263, kSentinel}},  // NOLINT
   2476         {{1264, 1265, kSentinel}},
   2477         {{1266, 1267, kSentinel}},
   2478         {{1268, 1269, kSentinel}},
   2479         {{1270, 1271, kSentinel}},  // NOLINT
   2480         {{1272, 1273, kSentinel}},
   2481         {{1274, 1275, kSentinel}},
   2482         {{1276, 1277, kSentinel}},
   2483         {{1278, 1279, kSentinel}},  // NOLINT
   2484         {{1280, 1281, kSentinel}},
   2485         {{1282, 1283, kSentinel}},
   2486         {{1284, 1285, kSentinel}},
   2487         {{1286, 1287, kSentinel}},  // NOLINT
   2488         {{1288, 1289, kSentinel}},
   2489         {{1290, 1291, kSentinel}},
   2490         {{1292, 1293, kSentinel}},
   2491         {{1294, 1295, kSentinel}},  // NOLINT
   2492         {{1296, 1297, kSentinel}},
   2493         {{1298, 1299, kSentinel}},
   2494         {{1300, 1301, kSentinel}},
   2495         {{1302, 1303, kSentinel}},  // NOLINT
   2496         {{1304, 1305, kSentinel}},
   2497         {{1306, 1307, kSentinel}},
   2498         {{1308, 1309, kSentinel}},
   2499         {{1310, 1311, kSentinel}},  // NOLINT
   2500         {{1312, 1313, kSentinel}},
   2501         {{1314, 1315, kSentinel}},
   2502         {{1316, 1317, kSentinel}},
   2503         {{1318, 1319, kSentinel}},  // NOLINT
   2504         {{1320, 1321, kSentinel}},
   2505         {{1322, 1323, kSentinel}},
   2506         {{1324, 1325, kSentinel}},
   2507         {{1326, 1327, kSentinel}},  // NOLINT
   2508         {{1329, 1377, kSentinel}},
   2509         {{1366, 1414, kSentinel}},
   2510         {{4256, 11520, kSentinel}},
   2511         {{4293, 11557, kSentinel}},  // NOLINT
   2512         {{4295, 11559, kSentinel}},
   2513         {{4301, 11565, kSentinel}},
   2514         {{7545, 42877, kSentinel}},
   2515         {{7549, 11363, kSentinel}},  // NOLINT
   2516         {{7680, 7681, kSentinel}},
   2517         {{7682, 7683, kSentinel}},
   2518         {{7684, 7685, kSentinel}},
   2519         {{7686, 7687, kSentinel}},  // NOLINT
   2520         {{7688, 7689, kSentinel}},
   2521         {{7690, 7691, kSentinel}},
   2522         {{7692, 7693, kSentinel}},
   2523         {{7694, 7695, kSentinel}},  // NOLINT
   2524         {{7696, 7697, kSentinel}},
   2525         {{7698, 7699, kSentinel}},
   2526         {{7700, 7701, kSentinel}},
   2527         {{7702, 7703, kSentinel}},  // NOLINT
   2528         {{7704, 7705, kSentinel}},
   2529         {{7706, 7707, kSentinel}},
   2530         {{7708, 7709, kSentinel}},
   2531         {{7710, 7711, kSentinel}},  // NOLINT
   2532         {{7712, 7713, kSentinel}},
   2533         {{7714, 7715, kSentinel}},
   2534         {{7716, 7717, kSentinel}},
   2535         {{7718, 7719, kSentinel}},  // NOLINT
   2536         {{7720, 7721, kSentinel}},
   2537         {{7722, 7723, kSentinel}},
   2538         {{7724, 7725, kSentinel}},
   2539         {{7726, 7727, kSentinel}},  // NOLINT
   2540         {{7728, 7729, kSentinel}},
   2541         {{7730, 7731, kSentinel}},
   2542         {{7732, 7733, kSentinel}},
   2543         {{7734, 7735, kSentinel}},  // NOLINT
   2544         {{7736, 7737, kSentinel}},
   2545         {{7738, 7739, kSentinel}},
   2546         {{7740, 7741, kSentinel}},
   2547         {{7742, 7743, kSentinel}},  // NOLINT
   2548         {{7744, 7745, kSentinel}},
   2549         {{7746, 7747, kSentinel}},
   2550         {{7748, 7749, kSentinel}},
   2551         {{7750, 7751, kSentinel}},  // NOLINT
   2552         {{7752, 7753, kSentinel}},
   2553         {{7754, 7755, kSentinel}},
   2554         {{7756, 7757, kSentinel}},
   2555         {{7758, 7759, kSentinel}},  // NOLINT
   2556         {{7760, 7761, kSentinel}},
   2557         {{7762, 7763, kSentinel}},
   2558         {{7764, 7765, kSentinel}},
   2559         {{7766, 7767, kSentinel}},  // NOLINT
   2560         {{7768, 7769, kSentinel}},
   2561         {{7770, 7771, kSentinel}},
   2562         {{7772, 7773, kSentinel}},
   2563         {{7774, 7775, kSentinel}},  // NOLINT
   2564         {{7776, 7777, 7835, kSentinel}},
   2565         {{7778, 7779, kSentinel}},
   2566         {{7780, 7781, kSentinel}},
   2567         {{7782, 7783, kSentinel}},  // NOLINT
   2568         {{7784, 7785, kSentinel}},
   2569         {{7786, 7787, kSentinel}},
   2570         {{7788, 7789, kSentinel}},
   2571         {{7790, 7791, kSentinel}},  // NOLINT
   2572         {{7792, 7793, kSentinel}},
   2573         {{7794, 7795, kSentinel}},
   2574         {{7796, 7797, kSentinel}},
   2575         {{7798, 7799, kSentinel}},  // NOLINT
   2576         {{7800, 7801, kSentinel}},
   2577         {{7802, 7803, kSentinel}},
   2578         {{7804, 7805, kSentinel}},
   2579         {{7806, 7807, kSentinel}},  // NOLINT
   2580         {{7808, 7809, kSentinel}},
   2581         {{7810, 7811, kSentinel}},
   2582         {{7812, 7813, kSentinel}},
   2583         {{7814, 7815, kSentinel}},  // NOLINT
   2584         {{7816, 7817, kSentinel}},
   2585         {{7818, 7819, kSentinel}},
   2586         {{7820, 7821, kSentinel}},
   2587         {{7822, 7823, kSentinel}},  // NOLINT
   2588         {{7824, 7825, kSentinel}},
   2589         {{7826, 7827, kSentinel}},
   2590         {{7828, 7829, kSentinel}},
   2591         {{7840, 7841, kSentinel}},  // NOLINT
   2592         {{7842, 7843, kSentinel}},
   2593         {{7844, 7845, kSentinel}},
   2594         {{7846, 7847, kSentinel}},
   2595         {{7848, 7849, kSentinel}},  // NOLINT
   2596         {{7850, 7851, kSentinel}},
   2597         {{7852, 7853, kSentinel}},
   2598         {{7854, 7855, kSentinel}},
   2599         {{7856, 7857, kSentinel}},  // NOLINT
   2600         {{7858, 7859, kSentinel}},
   2601         {{7860, 7861, kSentinel}},
   2602         {{7862, 7863, kSentinel}},
   2603         {{7864, 7865, kSentinel}},  // NOLINT
   2604         {{7866, 7867, kSentinel}},
   2605         {{7868, 7869, kSentinel}},
   2606         {{7870, 7871, kSentinel}},
   2607         {{7872, 7873, kSentinel}},  // NOLINT
   2608         {{7874, 7875, kSentinel}},
   2609         {{7876, 7877, kSentinel}},
   2610         {{7878, 7879, kSentinel}},
   2611         {{7880, 7881, kSentinel}},  // NOLINT
   2612         {{7882, 7883, kSentinel}},
   2613         {{7884, 7885, kSentinel}},
   2614         {{7886, 7887, kSentinel}},
   2615         {{7888, 7889, kSentinel}},  // NOLINT
   2616         {{7890, 7891, kSentinel}},
   2617         {{7892, 7893, kSentinel}},
   2618         {{7894, 7895, kSentinel}},
   2619         {{7896, 7897, kSentinel}},  // NOLINT
   2620         {{7898, 7899, kSentinel}},
   2621         {{7900, 7901, kSentinel}},
   2622         {{7902, 7903, kSentinel}},
   2623         {{7904, 7905, kSentinel}},  // NOLINT
   2624         {{7906, 7907, kSentinel}},
   2625         {{7908, 7909, kSentinel}},
   2626         {{7910, 7911, kSentinel}},
   2627         {{7912, 7913, kSentinel}},  // NOLINT
   2628         {{7914, 7915, kSentinel}},
   2629         {{7916, 7917, kSentinel}},
   2630         {{7918, 7919, kSentinel}},
   2631         {{7920, 7921, kSentinel}},  // NOLINT
   2632         {{7922, 7923, kSentinel}},
   2633         {{7924, 7925, kSentinel}},
   2634         {{7926, 7927, kSentinel}},
   2635         {{7928, 7929, kSentinel}},  // NOLINT
   2636         {{7930, 7931, kSentinel}},
   2637         {{7932, 7933, kSentinel}},
   2638         {{7934, 7935, kSentinel}},
   2639         {{7936, 7944, kSentinel}},  // NOLINT
   2640         {{7943, 7951, kSentinel}},
   2641         {{7952, 7960, kSentinel}},
   2642         {{7957, 7965, kSentinel}},
   2643         {{7968, 7976, kSentinel}},  // NOLINT
   2644         {{7975, 7983, kSentinel}},
   2645         {{7984, 7992, kSentinel}},
   2646         {{7991, 7999, kSentinel}},
   2647         {{8000, 8008, kSentinel}},  // NOLINT
   2648         {{8005, 8013, kSentinel}},
   2649         {{8017, 8025, kSentinel}},
   2650         {{8019, 8027, kSentinel}},
   2651         {{8021, 8029, kSentinel}},  // NOLINT
   2652         {{8023, 8031, kSentinel}},
   2653         {{8032, 8040, kSentinel}},
   2654         {{8039, 8047, kSentinel}},
   2655         {{8048, 8122, kSentinel}},  // NOLINT
   2656         {{8049, 8123, kSentinel}},
   2657         {{8050, 8136, kSentinel}},
   2658         {{8053, 8139, kSentinel}},
   2659         {{8054, 8154, kSentinel}},  // NOLINT
   2660         {{8055, 8155, kSentinel}},
   2661         {{8056, 8184, kSentinel}},
   2662         {{8057, 8185, kSentinel}},
   2663         {{8058, 8170, kSentinel}},  // NOLINT
   2664         {{8059, 8171, kSentinel}},
   2665         {{8060, 8186, kSentinel}},
   2666         {{8061, 8187, kSentinel}},
   2667         {{8112, 8120, kSentinel}},  // NOLINT
   2668         {{8113, 8121, kSentinel}},
   2669         {{8144, 8152, kSentinel}},
   2670         {{8145, 8153, kSentinel}},
   2671         {{8160, 8168, kSentinel}},  // NOLINT
   2672         {{8161, 8169, kSentinel}},
   2673         {{8165, 8172, kSentinel}},
   2674         {{kSentinel}}};                                         // NOLINT
   2675 static const uint16_t kEcma262UnCanonicalizeTable0Size = 1005;  // NOLINT
   2676 static const int32_t kEcma262UnCanonicalizeTable0[2010] = {
   2677     1073741889, 1,    90,         5,    1073741921, 1,
   2678     122,        5,    181,        9,    1073742016, 13,
   2679     214,        17,   1073742040, 21,  // NOLINT
   2680     222,        25,   1073742048, 13,   246,        17,
   2681     1073742072, 21,   254,        25,   255,        29,
   2682     256,        33,   257,        33,  // NOLINT
   2683     258,        37,   259,        37,   260,        41,
   2684     261,        41,   262,        45,   263,        45,
   2685     264,        49,   265,        49,  // NOLINT
   2686     266,        53,   267,        53,   268,        57,
   2687     269,        57,   270,        61,   271,        61,
   2688     272,        65,   273,        65,  // NOLINT
   2689     274,        69,   275,        69,   276,        73,
   2690     277,        73,   278,        77,   279,        77,
   2691     280,        81,   281,        81,  // NOLINT
   2692     282,        85,   283,        85,   284,        89,
   2693     285,        89,   286,        93,   287,        93,
   2694     288,        97,   289,        97,  // NOLINT
   2695     290,        101,  291,        101,  292,        105,
   2696     293,        105,  294,        109,  295,        109,
   2697     296,        113,  297,        113,  // NOLINT
   2698     298,        117,  299,        117,  300,        121,
   2699     301,        121,  302,        125,  303,        125,
   2700     306,        129,  307,        129,  // NOLINT
   2701     308,        133,  309,        133,  310,        137,
   2702     311,        137,  313,        141,  314,        141,
   2703     315,        145,  316,        145,  // NOLINT
   2704     317,        149,  318,        149,  319,        153,
   2705     320,        153,  321,        157,  322,        157,
   2706     323,        161,  324,        161,  // NOLINT
   2707     325,        165,  326,        165,  327,        169,
   2708     328,        169,  330,        173,  331,        173,
   2709     332,        177,  333,        177,  // NOLINT
   2710     334,        181,  335,        181,  336,        185,
   2711     337,        185,  338,        189,  339,        189,
   2712     340,        193,  341,        193,  // NOLINT
   2713     342,        197,  343,        197,  344,        201,
   2714     345,        201,  346,        205,  347,        205,
   2715     348,        209,  349,        209,  // NOLINT
   2716     350,        213,  351,        213,  352,        217,
   2717     353,        217,  354,        221,  355,        221,
   2718     356,        225,  357,        225,  // NOLINT
   2719     358,        229,  359,        229,  360,        233,
   2720     361,        233,  362,        237,  363,        237,
   2721     364,        241,  365,        241,  // NOLINT
   2722     366,        245,  367,        245,  368,        249,
   2723     369,        249,  370,        253,  371,        253,
   2724     372,        257,  373,        257,  // NOLINT
   2725     374,        261,  375,        261,  376,        29,
   2726     377,        265,  378,        265,  379,        269,
   2727     380,        269,  381,        273,  // NOLINT
   2728     382,        273,  384,        277,  385,        281,
   2729     386,        285,  387,        285,  388,        289,
   2730     389,        289,  390,        293,  // NOLINT
   2731     391,        297,  392,        297,  1073742217, 301,
   2732     394,        305,  395,        309,  396,        309,
   2733     398,        313,  399,        317,  // NOLINT
   2734     400,        321,  401,        325,  402,        325,
   2735     403,        329,  404,        333,  405,        337,
   2736     406,        341,  407,        345,  // NOLINT
   2737     408,        349,  409,        349,  410,        353,
   2738     412,        357,  413,        361,  414,        365,
   2739     415,        369,  416,        373,  // NOLINT
   2740     417,        373,  418,        377,  419,        377,
   2741     420,        381,  421,        381,  422,        385,
   2742     423,        389,  424,        389,  // NOLINT
   2743     425,        393,  428,        397,  429,        397,
   2744     430,        401,  431,        405,  432,        405,
   2745     1073742257, 409,  434,        413,  // NOLINT
   2746     435,        417,  436,        417,  437,        421,
   2747     438,        421,  439,        425,  440,        429,
   2748     441,        429,  444,        433,  // NOLINT
   2749     445,        433,  447,        437,  452,        441,
   2750     453,        441,  454,        441,  455,        445,
   2751     456,        445,  457,        445,  // NOLINT
   2752     458,        449,  459,        449,  460,        449,
   2753     461,        453,  462,        453,  463,        457,
   2754     464,        457,  465,        461,  // NOLINT
   2755     466,        461,  467,        465,  468,        465,
   2756     469,        469,  470,        469,  471,        473,
   2757     472,        473,  473,        477,  // NOLINT
   2758     474,        477,  475,        481,  476,        481,
   2759     477,        313,  478,        485,  479,        485,
   2760     480,        489,  481,        489,  // NOLINT
   2761     482,        493,  483,        493,  484,        497,
   2762     485,        497,  486,        501,  487,        501,
   2763     488,        505,  489,        505,  // NOLINT
   2764     490,        509,  491,        509,  492,        513,
   2765     493,        513,  494,        517,  495,        517,
   2766     497,        521,  498,        521,  // NOLINT
   2767     499,        521,  500,        525,  501,        525,
   2768     502,        337,  503,        437,  504,        529,
   2769     505,        529,  506,        533,  // NOLINT
   2770     507,        533,  508,        537,  509,        537,
   2771     510,        541,  511,        541,  512,        545,
   2772     513,        545,  514,        549,  // NOLINT
   2773     515,        549,  516,        553,  517,        553,
   2774     518,        557,  519,        557,  520,        561,
   2775     521,        561,  522,        565,  // NOLINT
   2776     523,        565,  524,        569,  525,        569,
   2777     526,        573,  527,        573,  528,        577,
   2778     529,        577,  530,        581,  // NOLINT
   2779     531,        581,  532,        585,  533,        585,
   2780     534,        589,  535,        589,  536,        593,
   2781     537,        593,  538,        597,  // NOLINT
   2782     539,        597,  540,        601,  541,        601,
   2783     542,        605,  543,        605,  544,        365,
   2784     546,        609,  547,        609,  // NOLINT
   2785     548,        613,  549,        613,  550,        617,
   2786     551,        617,  552,        621,  553,        621,
   2787     554,        625,  555,        625,  // NOLINT
   2788     556,        629,  557,        629,  558,        633,
   2789     559,        633,  560,        637,  561,        637,
   2790     562,        641,  563,        641,  // NOLINT
   2791     570,        645,  571,        649,  572,        649,
   2792     573,        353,  574,        653,  1073742399, 657,
   2793     576,        661,  577,        665,  // NOLINT
   2794     578,        665,  579,        277,  580,        669,
   2795     581,        673,  582,        677,  583,        677,
   2796     584,        681,  585,        681,  // NOLINT
   2797     586,        685,  587,        685,  588,        689,
   2798     589,        689,  590,        693,  591,        693,
   2799     592,        697,  593,        701,  // NOLINT
   2800     594,        705,  595,        281,  596,        293,
   2801     1073742422, 301,  599,        305,  601,        317,
   2802     603,        321,  604,        709,  // NOLINT
   2803     608,        329,  609,        713,  611,        333,
   2804     613,        717,  614,        721,  616,        345,
   2805     617,        341,  619,        725,  // NOLINT
   2806     620,        729,  623,        357,  625,        733,
   2807     626,        361,  629,        369,  637,        737,
   2808     640,        385,  643,        393,  // NOLINT
   2809     647,        741,  648,        401,  649,        669,
   2810     1073742474, 409,  651,        413,  652,        673,
   2811     658,        425,  670,        745,  // NOLINT
   2812     837,        749,  880,        753,  881,        753,
   2813     882,        757,  883,        757,  886,        761,
   2814     887,        761,  1073742715, 765,  // NOLINT
   2815     893,        769,  895,        773,  902,        777,
   2816     1073742728, 781,  906,        785,  908,        789,
   2817     1073742734, 793,  911,        797,  // NOLINT
   2818     913,        801,  914,        805,  1073742739, 809,
   2819     916,        813,  917,        817,  1073742742, 821,
   2820     919,        825,  920,        829,  // NOLINT
   2821     921,        749,  922,        833,  923,        837,
   2822     924,        9,    1073742749, 841,  927,        845,
   2823     928,        849,  929,        853,  // NOLINT
   2824     931,        857,  1073742756, 861,  933,        865,
   2825     934,        869,  1073742759, 873,  939,        877,
   2826     940,        777,  1073742765, 781,  // NOLINT
   2827     943,        785,  945,        801,  946,        805,
   2828     1073742771, 809,  948,        813,  949,        817,
   2829     1073742774, 821,  951,        825,  // NOLINT
   2830     952,        829,  953,        749,  954,        833,
   2831     955,        837,  956,        9,    1073742781, 841,
   2832     959,        845,  960,        849,  // NOLINT
   2833     961,        853,  962,        857,  963,        857,
   2834     1073742788, 861,  965,        865,  966,        869,
   2835     1073742791, 873,  971,        877,  // NOLINT
   2836     972,        789,  1073742797, 793,  974,        797,
   2837     975,        881,  976,        805,  977,        829,
   2838     981,        869,  982,        849,  // NOLINT
   2839     983,        881,  984,        885,  985,        885,
   2840     986,        889,  987,        889,  988,        893,
   2841     989,        893,  990,        897,  // NOLINT
   2842     991,        897,  992,        901,  993,        901,
   2843     994,        905,  995,        905,  996,        909,
   2844     997,        909,  998,        913,  // NOLINT
   2845     999,        913,  1000,       917,  1001,       917,
   2846     1002,       921,  1003,       921,  1004,       925,
   2847     1005,       925,  1006,       929,  // NOLINT
   2848     1007,       929,  1008,       833,  1009,       853,
   2849     1010,       933,  1011,       773,  1013,       817,
   2850     1015,       937,  1016,       937,  // NOLINT
   2851     1017,       933,  1018,       941,  1019,       941,
   2852     1073742845, 765,  1023,       769,  1073742848, 945,
   2853     1039,       949,  1073742864, 953,  // NOLINT
   2854     1071,       957,  1073742896, 953,  1103,       957,
   2855     1073742928, 945,  1119,       949,  1120,       961,
   2856     1121,       961,  1122,       965,  // NOLINT
   2857     1123,       965,  1124,       969,  1125,       969,
   2858     1126,       973,  1127,       973,  1128,       977,
   2859     1129,       977,  1130,       981,  // NOLINT
   2860     1131,       981,  1132,       985,  1133,       985,
   2861     1134,       989,  1135,       989,  1136,       993,
   2862     1137,       993,  1138,       997,  // NOLINT
   2863     1139,       997,  1140,       1001, 1141,       1001,
   2864     1142,       1005, 1143,       1005, 1144,       1009,
   2865     1145,       1009, 1146,       1013,  // NOLINT
   2866     1147,       1013, 1148,       1017, 1149,       1017,
   2867     1150,       1021, 1151,       1021, 1152,       1025,
   2868     1153,       1025, 1162,       1029,  // NOLINT
   2869     1163,       1029, 1164,       1033, 1165,       1033,
   2870     1166,       1037, 1167,       1037, 1168,       1041,
   2871     1169,       1041, 1170,       1045,  // NOLINT
   2872     1171,       1045, 1172,       1049, 1173,       1049,
   2873     1174,       1053, 1175,       1053, 1176,       1057,
   2874     1177,       1057, 1178,       1061,  // NOLINT
   2875     1179,       1061, 1180,       1065, 1181,       1065,
   2876     1182,       1069, 1183,       1069, 1184,       1073,
   2877     1185,       1073, 1186,       1077,  // NOLINT
   2878     1187,       1077, 1188,       1081, 1189,       1081,
   2879     1190,       1085, 1191,       1085, 1192,       1089,
   2880     1193,       1089, 1194,       1093,  // NOLINT
   2881     1195,       1093, 1196,       1097, 1197,       1097,
   2882     1198,       1101, 1199,       1101, 1200,       1105,
   2883     1201,       1105, 1202,       1109,  // NOLINT
   2884     1203,       1109, 1204,       1113, 1205,       1113,
   2885     1206,       1117, 1207,       1117, 1208,       1121,
   2886     1209,       1121, 1210,       1125,  // NOLINT
   2887     1211,       1125, 1212,       1129, 1213,       1129,
   2888     1214,       1133, 1215,       1133, 1216,       1137,
   2889     1217,       1141, 1218,       1141,  // NOLINT
   2890     1219,       1145, 1220,       1145, 1221,       1149,
   2891     1222,       1149, 1223,       1153, 1224,       1153,
   2892     1225,       1157, 1226,       1157,  // NOLINT
   2893     1227,       1161, 1228,       1161, 1229,       1165,
   2894     1230,       1165, 1231,       1137, 1232,       1169,
   2895     1233,       1169, 1234,       1173,  // NOLINT
   2896     1235,       1173, 1236,       1177, 1237,       1177,
   2897     1238,       1181, 1239,       1181, 1240,       1185,
   2898     1241,       1185, 1242,       1189,  // NOLINT
   2899     1243,       1189, 1244,       1193, 1245,       1193,
   2900     1246,       1197, 1247,       1197, 1248,       1201,
   2901     1249,       1201, 1250,       1205,  // NOLINT
   2902     1251,       1205, 1252,       1209, 1253,       1209,
   2903     1254,       1213, 1255,       1213, 1256,       1217,
   2904     1257,       1217, 1258,       1221,  // NOLINT
   2905     1259,       1221, 1260,       1225, 1261,       1225,
   2906     1262,       1229, 1263,       1229, 1264,       1233,
   2907     1265,       1233, 1266,       1237,  // NOLINT
   2908     1267,       1237, 1268,       1241, 1269,       1241,
   2909     1270,       1245, 1271,       1245, 1272,       1249,
   2910     1273,       1249, 1274,       1253,  // NOLINT
   2911     1275,       1253, 1276,       1257, 1277,       1257,
   2912     1278,       1261, 1279,       1261, 1280,       1265,
   2913     1281,       1265, 1282,       1269,  // NOLINT
   2914     1283,       1269, 1284,       1273, 1285,       1273,
   2915     1286,       1277, 1287,       1277, 1288,       1281,
   2916     1289,       1281, 1290,       1285,  // NOLINT
   2917     1291,       1285, 1292,       1289, 1293,       1289,
   2918     1294,       1293, 1295,       1293, 1296,       1297,
   2919     1297,       1297, 1298,       1301,  // NOLINT
   2920     1299,       1301, 1300,       1305, 1301,       1305,
   2921     1302,       1309, 1303,       1309, 1304,       1313,
   2922     1305,       1313, 1306,       1317,  // NOLINT
   2923     1307,       1317, 1308,       1321, 1309,       1321,
   2924     1310,       1325, 1311,       1325, 1312,       1329,
   2925     1313,       1329, 1314,       1333,  // NOLINT
   2926     1315,       1333, 1316,       1337, 1317,       1337,
   2927     1318,       1341, 1319,       1341, 1320,       1345,
   2928     1321,       1345, 1322,       1349,  // NOLINT
   2929     1323,       1349, 1324,       1353, 1325,       1353,
   2930     1326,       1357, 1327,       1357, 1073743153, 1361,
   2931     1366,       1365, 1073743201, 1361,  // NOLINT
   2932     1414,       1365, 1073746080, 1369, 4293,       1373,
   2933     4295,       1377, 4301,       1381, 7545,       1385,
   2934     7549,       1389, 7680,       1393,  // NOLINT
   2935     7681,       1393, 7682,       1397, 7683,       1397,
   2936     7684,       1401, 7685,       1401, 7686,       1405,
   2937     7687,       1405, 7688,       1409,  // NOLINT
   2938     7689,       1409, 7690,       1413, 7691,       1413,
   2939     7692,       1417, 7693,       1417, 7694,       1421,
   2940     7695,       1421, 7696,       1425,  // NOLINT
   2941     7697,       1425, 7698,       1429, 7699,       1429,
   2942     7700,       1433, 7701,       1433, 7702,       1437,
   2943     7703,       1437, 7704,       1441,  // NOLINT
   2944     7705,       1441, 7706,       1445, 7707,       1445,
   2945     7708,       1449, 7709,       1449, 7710,       1453,
   2946     7711,       1453, 7712,       1457,  // NOLINT
   2947     7713,       1457, 7714,       1461, 7715,       1461,
   2948     7716,       1465, 7717,       1465, 7718,       1469,
   2949     7719,       1469, 7720,       1473,  // NOLINT
   2950     7721,       1473, 7722,       1477, 7723,       1477,
   2951     7724,       1481, 7725,       1481, 7726,       1485,
   2952     7727,       1485, 7728,       1489,  // NOLINT
   2953     7729,       1489, 7730,       1493, 7731,       1493,
   2954     7732,       1497, 7733,       1497, 7734,       1501,
   2955     7735,       1501, 7736,       1505,  // NOLINT
   2956     7737,       1505, 7738,       1509, 7739,       1509,
   2957     7740,       1513, 7741,       1513, 7742,       1517,
   2958     7743,       1517, 7744,       1521,  // NOLINT
   2959     7745,       1521, 7746,       1525, 7747,       1525,
   2960     7748,       1529, 7749,       1529, 7750,       1533,
   2961     7751,       1533, 7752,       1537,  // NOLINT
   2962     7753,       1537, 7754,       1541, 7755,       1541,
   2963     7756,       1545, 7757,       1545, 7758,       1549,
   2964     7759,       1549, 7760,       1553,  // NOLINT
   2965     7761,       1553, 7762,       1557, 7763,       1557,
   2966     7764,       1561, 7765,       1561, 7766,       1565,
   2967     7767,       1565, 7768,       1569,  // NOLINT
   2968     7769,       1569, 7770,       1573, 7771,       1573,
   2969     7772,       1577, 7773,       1577, 7774,       1581,
   2970     7775,       1581, 7776,       1585,  // NOLINT
   2971     7777,       1585, 7778,       1589, 7779,       1589,
   2972     7780,       1593, 7781,       1593, 7782,       1597,
   2973     7783,       1597, 7784,       1601,  // NOLINT
   2974     7785,       1601, 7786,       1605, 7787,       1605,
   2975     7788,       1609, 7789,       1609, 7790,       1613,
   2976     7791,       1613, 7792,       1617,  // NOLINT
   2977     7793,       1617, 7794,       1621, 7795,       1621,
   2978     7796,       1625, 7797,       1625, 7798,       1629,
   2979     7799,       1629, 7800,       1633,  // NOLINT
   2980     7801,       1633, 7802,       1637, 7803,       1637,
   2981     7804,       1641, 7805,       1641, 7806,       1645,
   2982     7807,       1645, 7808,       1649,  // NOLINT
   2983     7809,       1649, 7810,       1653, 7811,       1653,
   2984     7812,       1657, 7813,       1657, 7814,       1661,
   2985     7815,       1661, 7816,       1665,  // NOLINT
   2986     7817,       1665, 7818,       1669, 7819,       1669,
   2987     7820,       1673, 7821,       1673, 7822,       1677,
   2988     7823,       1677, 7824,       1681,  // NOLINT
   2989     7825,       1681, 7826,       1685, 7827,       1685,
   2990     7828,       1689, 7829,       1689, 7835,       1585,
   2991     7840,       1693, 7841,       1693,  // NOLINT
   2992     7842,       1697, 7843,       1697, 7844,       1701,
   2993     7845,       1701, 7846,       1705, 7847,       1705,
   2994     7848,       1709, 7849,       1709,  // NOLINT
   2995     7850,       1713, 7851,       1713, 7852,       1717,
   2996     7853,       1717, 7854,       1721, 7855,       1721,
   2997     7856,       1725, 7857,       1725,  // NOLINT
   2998     7858,       1729, 7859,       1729, 7860,       1733,
   2999     7861,       1733, 7862,       1737, 7863,       1737,
   3000     7864,       1741, 7865,       1741,  // NOLINT
   3001     7866,       1745, 7867,       1745, 7868,       1749,
   3002     7869,       1749, 7870,       1753, 7871,       1753,
   3003     7872,       1757, 7873,       1757,  // NOLINT
   3004     7874,       1761, 7875,       1761, 7876,       1765,
   3005     7877,       1765, 7878,       1769, 7879,       1769,
   3006     7880,       1773, 7881,       1773,  // NOLINT
   3007     7882,       1777, 7883,       1777, 7884,       1781,
   3008     7885,       1781, 7886,       1785, 7887,       1785,
   3009     7888,       1789, 7889,       1789,  // NOLINT
   3010     7890,       1793, 7891,       1793, 7892,       1797,
   3011     7893,       1797, 7894,       1801, 7895,       1801,
   3012     7896,       1805, 7897,       1805,  // NOLINT
   3013     7898,       1809, 7899,       1809, 7900,       1813,
   3014     7901,       1813, 7902,       1817, 7903,       1817,
   3015     7904,       1821, 7905,       1821,  // NOLINT
   3016     7906,       1825, 7907,       1825, 7908,       1829,
   3017     7909,       1829, 7910,       1833, 7911,       1833,
   3018     7912,       1837, 7913,       1837,  // NOLINT
   3019     7914,       1841, 7915,       1841, 7916,       1845,
   3020     7917,       1845, 7918,       1849, 7919,       1849,
   3021     7920,       1853, 7921,       1853,  // NOLINT
   3022     7922,       1857, 7923,       1857, 7924,       1861,
   3023     7925,       1861, 7926,       1865, 7927,       1865,
   3024     7928,       1869, 7929,       1869,  // NOLINT
   3025     7930,       1873, 7931,       1873, 7932,       1877,
   3026     7933,       1877, 7934,       1881, 7935,       1881,
   3027     1073749760, 1885, 7943,       1889,  // NOLINT
   3028     1073749768, 1885, 7951,       1889, 1073749776, 1893,
   3029     7957,       1897, 1073749784, 1893, 7965,       1897,
   3030     1073749792, 1901, 7975,       1905,  // NOLINT
   3031     1073749800, 1901, 7983,       1905, 1073749808, 1909,
   3032     7991,       1913, 1073749816, 1909, 7999,       1913,
   3033     1073749824, 1917, 8005,       1921,  // NOLINT
   3034     1073749832, 1917, 8013,       1921, 8017,       1925,
   3035     8019,       1929, 8021,       1933, 8023,       1937,
   3036     8025,       1925, 8027,       1929,  // NOLINT
   3037     8029,       1933, 8031,       1937, 1073749856, 1941,
   3038     8039,       1945, 1073749864, 1941, 8047,       1945,
   3039     1073749872, 1949, 8049,       1953,  // NOLINT
   3040     1073749874, 1957, 8053,       1961, 1073749878, 1965,
   3041     8055,       1969, 1073749880, 1973, 8057,       1977,
   3042     1073749882, 1981, 8059,       1985,  // NOLINT
   3043     1073749884, 1989, 8061,       1993, 1073749936, 1997,
   3044     8113,       2001, 1073749944, 1997, 8121,       2001,
   3045     1073749946, 1949, 8123,       1953,  // NOLINT
   3046     8126,       749,  1073749960, 1957, 8139,       1961,
   3047     1073749968, 2005, 8145,       2009, 1073749976, 2005,
   3048     8153,       2009, 1073749978, 1965,  // NOLINT
   3049     8155,       1969, 1073749984, 2013, 8161,       2017,
   3050     8165,       2021, 1073749992, 2013, 8169,       2017,
   3051     1073749994, 1981, 8171,       1985,  // NOLINT
   3052     8172,       2021, 1073750008, 1973, 8185,       1977,
   3053     1073750010, 1989, 8187,       1993};                              // NOLINT
   3054 static const uint16_t kEcma262UnCanonicalizeMultiStrings0Size = 507;  // NOLINT
   3055 static const MultiCharacterSpecialCase<2> kEcma262UnCanonicalizeMultiStrings1[83] = {  // NOLINT
   3056   {{8498, 8526}}, {{8544, 8560}}, {{8559, 8575}}, {{8579, 8580}},  // NOLINT
   3057   {{9398, 9424}}, {{9423, 9449}}, {{11264, 11312}}, {{11310, 11358}},  // NOLINT
   3058   {{11360, 11361}}, {{619, 11362}}, {{7549, 11363}}, {{637, 11364}},  // NOLINT
   3059   {{570, 11365}}, {{574, 11366}}, {{11367, 11368}}, {{11369, 11370}},  // NOLINT
   3060   {{11371, 11372}}, {{593, 11373}}, {{625, 11374}}, {{592, 11375}},  // NOLINT
   3061   {{594, 11376}}, {{11378, 11379}}, {{11381, 11382}}, {{575, 11390}},  // NOLINT
   3062   {{576, 11391}}, {{11392, 11393}}, {{11394, 11395}}, {{11396, 11397}},  // NOLINT
   3063   {{11398, 11399}}, {{11400, 11401}}, {{11402, 11403}}, {{11404, 11405}},  // NOLINT
   3064   {{11406, 11407}}, {{11408, 11409}}, {{11410, 11411}}, {{11412, 11413}},  // NOLINT
   3065   {{11414, 11415}}, {{11416, 11417}}, {{11418, 11419}}, {{11420, 11421}},  // NOLINT
   3066   {{11422, 11423}}, {{11424, 11425}}, {{11426, 11427}}, {{11428, 11429}},  // NOLINT
   3067   {{11430, 11431}}, {{11432, 11433}}, {{11434, 11435}}, {{11436, 11437}},  // NOLINT
   3068   {{11438, 11439}}, {{11440, 11441}}, {{11442, 11443}}, {{11444, 11445}},  // NOLINT
   3069   {{11446, 11447}}, {{11448, 11449}}, {{11450, 11451}}, {{11452, 11453}},  // NOLINT
   3070   {{11454, 11455}}, {{11456, 11457}}, {{11458, 11459}}, {{11460, 11461}},  // NOLINT
   3071   {{11462, 11463}}, {{11464, 11465}}, {{11466, 11467}}, {{11468, 11469}},  // NOLINT
   3072   {{11470, 11471}}, {{11472, 11473}}, {{11474, 11475}}, {{11476, 11477}},  // NOLINT
   3073   {{11478, 11479}}, {{11480, 11481}}, {{11482, 11483}}, {{11484, 11485}},  // NOLINT
   3074   {{11486, 11487}}, {{11488, 11489}}, {{11490, 11491}}, {{11499, 11500}},  // NOLINT
   3075   {{11501, 11502}}, {{11506, 11507}}, {{4256, 11520}}, {{4293, 11557}},  // NOLINT
   3076   {{4295, 11559}}, {{4301, 11565}}, {{kSentinel}} }; // NOLINT
   3077 static const uint16_t kEcma262UnCanonicalizeTable1Size = 149;  // NOLINT
   3078 static const int32_t kEcma262UnCanonicalizeTable1[298] = {
   3079   306, 1, 334, 1, 1073742176, 5, 367, 9, 1073742192, 5, 383, 9, 387, 13, 388, 13,  // NOLINT
   3080   1073743030, 17, 1231, 21, 1073743056, 17, 1257, 21, 1073744896, 25, 3118, 29, 1073744944, 25, 3166, 29,  // NOLINT
   3081   3168, 33, 3169, 33, 3170, 37, 3171, 41, 3172, 45, 3173, 49, 3174, 53, 3175, 57,  // NOLINT
   3082   3176, 57, 3177, 61, 3178, 61, 3179, 65, 3180, 65, 3181, 69, 3182, 73, 3183, 77,  // NOLINT
   3083   3184, 81, 3186, 85, 3187, 85, 3189, 89, 3190, 89, 1073745022, 93, 3199, 97, 3200, 101,  // NOLINT
   3084   3201, 101, 3202, 105, 3203, 105, 3204, 109, 3205, 109, 3206, 113, 3207, 113, 3208, 117,  // NOLINT
   3085   3209, 117, 3210, 121, 3211, 121, 3212, 125, 3213, 125, 3214, 129, 3215, 129, 3216, 133,  // NOLINT
   3086   3217, 133, 3218, 137, 3219, 137, 3220, 141, 3221, 141, 3222, 145, 3223, 145, 3224, 149,  // NOLINT
   3087   3225, 149, 3226, 153, 3227, 153, 3228, 157, 3229, 157, 3230, 161, 3231, 161, 3232, 165,  // NOLINT
   3088   3233, 165, 3234, 169, 3235, 169, 3236, 173, 3237, 173, 3238, 177, 3239, 177, 3240, 181,  // NOLINT
   3089   3241, 181, 3242, 185, 3243, 185, 3244, 189, 3245, 189, 3246, 193, 3247, 193, 3248, 197,  // NOLINT
   3090   3249, 197, 3250, 201, 3251, 201, 3252, 205, 3253, 205, 3254, 209, 3255, 209, 3256, 213,  // NOLINT
   3091   3257, 213, 3258, 217, 3259, 217, 3260, 221, 3261, 221, 3262, 225, 3263, 225, 3264, 229,  // NOLINT
   3092   3265, 229, 3266, 233, 3267, 233, 3268, 237, 3269, 237, 3270, 241, 3271, 241, 3272, 245,  // NOLINT
   3093   3273, 245, 3274, 249, 3275, 249, 3276, 253, 3277, 253, 3278, 257, 3279, 257, 3280, 261,  // NOLINT
   3094   3281, 261, 3282, 265, 3283, 265, 3284, 269, 3285, 269, 3286, 273, 3287, 273, 3288, 277,  // NOLINT
   3095   3289, 277, 3290, 281, 3291, 281, 3292, 285, 3293, 285, 3294, 289, 3295, 289, 3296, 293,  // NOLINT
   3096   3297, 293, 3298, 297, 3299, 297, 3307, 301, 3308, 301, 3309, 305, 3310, 305, 3314, 309,  // NOLINT
   3097   3315, 309, 1073745152, 313, 3365, 317, 3367, 321, 3373, 325 };  // NOLINT
   3098 static const uint16_t kEcma262UnCanonicalizeMultiStrings1Size = 83;  // NOLINT
   3099 static const MultiCharacterSpecialCase<2>
   3100     kEcma262UnCanonicalizeMultiStrings5[104] = {  // NOLINT
   3101         {{42560, 42561}},
   3102         {{42562, 42563}},
   3103         {{42564, 42565}},
   3104         {{42566, 42567}},  // NOLINT
   3105         {{42568, 42569}},
   3106         {{42570, 42571}},
   3107         {{42572, 42573}},
   3108         {{42574, 42575}},  // NOLINT
   3109         {{42576, 42577}},
   3110         {{42578, 42579}},
   3111         {{42580, 42581}},
   3112         {{42582, 42583}},  // NOLINT
   3113         {{42584, 42585}},
   3114         {{42586, 42587}},
   3115         {{42588, 42589}},
   3116         {{42590, 42591}},  // NOLINT
   3117         {{42592, 42593}},
   3118         {{42594, 42595}},
   3119         {{42596, 42597}},
   3120         {{42598, 42599}},  // NOLINT
   3121         {{42600, 42601}},
   3122         {{42602, 42603}},
   3123         {{42604, 42605}},
   3124         {{42624, 42625}},  // NOLINT
   3125         {{42626, 42627}},
   3126         {{42628, 42629}},
   3127         {{42630, 42631}},
   3128         {{42632, 42633}},  // NOLINT
   3129         {{42634, 42635}},
   3130         {{42636, 42637}},
   3131         {{42638, 42639}},
   3132         {{42640, 42641}},  // NOLINT
   3133         {{42642, 42643}},
   3134         {{42644, 42645}},
   3135         {{42646, 42647}},
   3136         {{42648, 42649}},  // NOLINT
   3137         {{42650, 42651}},
   3138         {{42786, 42787}},
   3139         {{42788, 42789}},
   3140         {{42790, 42791}},  // NOLINT
   3141         {{42792, 42793}},
   3142         {{42794, 42795}},
   3143         {{42796, 42797}},
   3144         {{42798, 42799}},  // NOLINT
   3145         {{42802, 42803}},
   3146         {{42804, 42805}},
   3147         {{42806, 42807}},
   3148         {{42808, 42809}},  // NOLINT
   3149         {{42810, 42811}},
   3150         {{42812, 42813}},
   3151         {{42814, 42815}},
   3152         {{42816, 42817}},  // NOLINT
   3153         {{42818, 42819}},
   3154         {{42820, 42821}},
   3155         {{42822, 42823}},
   3156         {{42824, 42825}},  // NOLINT
   3157         {{42826, 42827}},
   3158         {{42828, 42829}},
   3159         {{42830, 42831}},
   3160         {{42832, 42833}},  // NOLINT
   3161         {{42834, 42835}},
   3162         {{42836, 42837}},
   3163         {{42838, 42839}},
   3164         {{42840, 42841}},  // NOLINT
   3165         {{42842, 42843}},
   3166         {{42844, 42845}},
   3167         {{42846, 42847}},
   3168         {{42848, 42849}},  // NOLINT
   3169         {{42850, 42851}},
   3170         {{42852, 42853}},
   3171         {{42854, 42855}},
   3172         {{42856, 42857}},  // NOLINT
   3173         {{42858, 42859}},
   3174         {{42860, 42861}},
   3175         {{42862, 42863}},
   3176         {{42873, 42874}},  // NOLINT
   3177         {{42875, 42876}},
   3178         {{7545, 42877}},
   3179         {{42878, 42879}},
   3180         {{42880, 42881}},  // NOLINT
   3181         {{42882, 42883}},
   3182         {{42884, 42885}},
   3183         {{42886, 42887}},
   3184         {{42891, 42892}},  // NOLINT
   3185         {{613, 42893}},
   3186         {{42896, 42897}},
   3187         {{42898, 42899}},
   3188         {{42902, 42903}},  // NOLINT
   3189         {{42904, 42905}},
   3190         {{42906, 42907}},
   3191         {{42908, 42909}},
   3192         {{42910, 42911}},  // NOLINT
   3193         {{42912, 42913}},
   3194         {{42914, 42915}},
   3195         {{42916, 42917}},
   3196         {{42918, 42919}},  // NOLINT
   3197         {{42920, 42921}},
   3198         {{614, 42922}},
   3199         {{604, 42923}},
   3200         {{609, 42924}},  // NOLINT
   3201         {{620, 42925}},
   3202         {{670, 42928}},
   3203         {{647, 42929}},
   3204         {{kSentinel}}};                                        // NOLINT
   3205 static const uint16_t kEcma262UnCanonicalizeTable5Size = 198;  // NOLINT
   3206 static const int32_t kEcma262UnCanonicalizeTable5
   3207     [396] = {1600, 1,   1601, 1,   1602, 5,   1603, 5,
   3208              1604, 9,   1605, 9,   1606, 13,  1607, 13,  // NOLINT
   3209              1608, 17,  1609, 17,  1610, 21,  1611, 21,
   3210              1612, 25,  1613, 25,  1614, 29,  1615, 29,  // NOLINT
   3211              1616, 33,  1617, 33,  1618, 37,  1619, 37,
   3212              1620, 41,  1621, 41,  1622, 45,  1623, 45,  // NOLINT
   3213              1624, 49,  1625, 49,  1626, 53,  1627, 53,
   3214              1628, 57,  1629, 57,  1630, 61,  1631, 61,  // NOLINT
   3215              1632, 65,  1633, 65,  1634, 69,  1635, 69,
   3216              1636, 73,  1637, 73,  1638, 77,  1639, 77,  // NOLINT
   3217              1640, 81,  1641, 81,  1642, 85,  1643, 85,
   3218              1644, 89,  1645, 89,  1664, 93,  1665, 93,  // NOLINT
   3219              1666, 97,  1667, 97,  1668, 101, 1669, 101,
   3220              1670, 105, 1671, 105, 1672, 109, 1673, 109,  // NOLINT
   3221              1674, 113, 1675, 113, 1676, 117, 1677, 117,
   3222              1678, 121, 1679, 121, 1680, 125, 1681, 125,  // NOLINT
   3223              1682, 129, 1683, 129, 1684, 133, 1685, 133,
   3224              1686, 137, 1687, 137, 1688, 141, 1689, 141,  // NOLINT
   3225              1690, 145, 1691, 145, 1826, 149, 1827, 149,
   3226              1828, 153, 1829, 153, 1830, 157, 1831, 157,  // NOLINT
   3227              1832, 161, 1833, 161, 1834, 165, 1835, 165,
   3228              1836, 169, 1837, 169, 1838, 173, 1839, 173,  // NOLINT
   3229              1842, 177, 1843, 177, 1844, 181, 1845, 181,
   3230              1846, 185, 1847, 185, 1848, 189, 1849, 189,  // NOLINT
   3231              1850, 193, 1851, 193, 1852, 197, 1853, 197,
   3232              1854, 201, 1855, 201, 1856, 205, 1857, 205,  // NOLINT
   3233              1858, 209, 1859, 209, 1860, 213, 1861, 213,
   3234              1862, 217, 1863, 217, 1864, 221, 1865, 221,  // NOLINT
   3235              1866, 225, 1867, 225, 1868, 229, 1869, 229,
   3236              1870, 233, 1871, 233, 1872, 237, 1873, 237,  // NOLINT
   3237              1874, 241, 1875, 241, 1876, 245, 1877, 245,
   3238              1878, 249, 1879, 249, 1880, 253, 1881, 253,  // NOLINT
   3239              1882, 257, 1883, 257, 1884, 261, 1885, 261,
   3240              1886, 265, 1887, 265, 1888, 269, 1889, 269,  // NOLINT
   3241              1890, 273, 1891, 273, 1892, 277, 1893, 277,
   3242              1894, 281, 1895, 281, 1896, 285, 1897, 285,  // NOLINT
   3243              1898, 289, 1899, 289, 1900, 293, 1901, 293,
   3244              1902, 297, 1903, 297, 1913, 301, 1914, 301,  // NOLINT
   3245              1915, 305, 1916, 305, 1917, 309, 1918, 313,
   3246              1919, 313, 1920, 317, 1921, 317, 1922, 321,  // NOLINT
   3247              1923, 321, 1924, 325, 1925, 325, 1926, 329,
   3248              1927, 329, 1931, 333, 1932, 333, 1933, 337,  // NOLINT
   3249              1936, 341, 1937, 341, 1938, 345, 1939, 345,
   3250              1942, 349, 1943, 349, 1944, 353, 1945, 353,  // NOLINT
   3251              1946, 357, 1947, 357, 1948, 361, 1949, 361,
   3252              1950, 365, 1951, 365, 1952, 369, 1953, 369,  // NOLINT
   3253              1954, 373, 1955, 373, 1956, 377, 1957, 377,
   3254              1958, 381, 1959, 381, 1960, 385, 1961, 385,  // NOLINT
   3255              1962, 389, 1963, 393, 1964, 397, 1965, 401,
   3256              1968, 405, 1969, 409};                                   // NOLINT
   3257 static const uint16_t kEcma262UnCanonicalizeMultiStrings5Size = 104;  // NOLINT
   3258 static const MultiCharacterSpecialCase<2> kEcma262UnCanonicalizeMultiStrings7[3] = {  // NOLINT
   3259   {{65313, 65345}}, {{65338, 65370}}, {{kSentinel}} }; // NOLINT
   3260 static const uint16_t kEcma262UnCanonicalizeTable7Size = 4;  // NOLINT
   3261 static const int32_t kEcma262UnCanonicalizeTable7[8] = {
   3262   1073749793, 1, 7994, 5, 1073749825, 1, 8026, 5 };  // NOLINT
   3263 static const uint16_t kEcma262UnCanonicalizeMultiStrings7Size = 3;  // NOLINT
   3264 int Ecma262UnCanonicalize::Convert(uchar c,
   3265                       uchar n,
   3266                       uchar* result,
   3267                       bool* allow_caching_ptr) {
   3268   int chunk_index = c >> 13;
   3269   switch (chunk_index) {
   3270     case 0: return LookupMapping<true>(kEcma262UnCanonicalizeTable0,
   3271                                            kEcma262UnCanonicalizeTable0Size,
   3272                                            kEcma262UnCanonicalizeMultiStrings0,
   3273                                            c,
   3274                                            n,
   3275                                            result,
   3276                                            allow_caching_ptr);
   3277     case 1: return LookupMapping<true>(kEcma262UnCanonicalizeTable1,
   3278                                            kEcma262UnCanonicalizeTable1Size,
   3279                                            kEcma262UnCanonicalizeMultiStrings1,
   3280                                            c,
   3281                                            n,
   3282                                            result,
   3283                                            allow_caching_ptr);
   3284     case 5: return LookupMapping<true>(kEcma262UnCanonicalizeTable5,
   3285                                            kEcma262UnCanonicalizeTable5Size,
   3286                                            kEcma262UnCanonicalizeMultiStrings5,
   3287                                            c,
   3288                                            n,
   3289                                            result,
   3290                                            allow_caching_ptr);
   3291     case 7: return LookupMapping<true>(kEcma262UnCanonicalizeTable7,
   3292                                            kEcma262UnCanonicalizeTable7Size,
   3293                                            kEcma262UnCanonicalizeMultiStrings7,
   3294                                            c,
   3295                                            n,
   3296                                            result,
   3297                                            allow_caching_ptr);
   3298     default: return 0;
   3299   }
   3300 }
   3301 
   3302 static const MultiCharacterSpecialCase<1> kCanonicalizationRangeMultiStrings0[1] = {  // NOLINT
   3303   {{kSentinel}} }; // NOLINT
   3304 static const uint16_t kCanonicalizationRangeTable0Size = 70;  // NOLINT
   3305 static const int32_t kCanonicalizationRangeTable0[140] = {
   3306   1073741889, 100, 90, 0, 1073741921, 100, 122, 0, 1073742016, 88, 214, 0, 1073742040, 24, 222, 0,  // NOLINT
   3307   1073742048, 88, 246, 0, 1073742072, 24, 254, 0, 1073742715, 8, 893, 0, 1073742728, 8, 906, 0,  // NOLINT
   3308   1073742749, 8, 927, 0, 1073742759, 16, 939, 0, 1073742765, 8, 943, 0, 1073742781, 8, 959, 0,  // NOLINT
   3309   1073742791, 16, 971, 0, 1073742845, 8, 1023, 0, 1073742848, 60, 1039, 0, 1073742864, 124, 1071, 0,  // NOLINT
   3310   1073742896, 124, 1103, 0, 1073742928, 60, 1119, 0, 1073743153, 148, 1366, 0, 1073743201, 148, 1414, 0,  // NOLINT
   3311   1073746080, 148, 4293, 0, 1073749760, 28, 7943, 0, 1073749768, 28, 7951, 0, 1073749776, 20, 7957, 0,  // NOLINT
   3312   1073749784, 20, 7965, 0, 1073749792, 28, 7975, 0, 1073749800, 28, 7983, 0, 1073749808, 28, 7991, 0,  // NOLINT
   3313   1073749816, 28, 7999, 0, 1073749824, 20, 8005, 0, 1073749832, 20, 8013, 0, 1073749856, 28, 8039, 0,  // NOLINT
   3314   1073749864, 28, 8047, 0, 1073749874, 12, 8053, 0, 1073749960, 12, 8139, 0 };  // NOLINT
   3315 static const uint16_t kCanonicalizationRangeMultiStrings0Size = 1;  // NOLINT
   3316 static const MultiCharacterSpecialCase<1> kCanonicalizationRangeMultiStrings1[1] = {  // NOLINT
   3317   {{kSentinel}} }; // NOLINT
   3318 static const uint16_t kCanonicalizationRangeTable1Size = 14;  // NOLINT
   3319 static const int32_t kCanonicalizationRangeTable1[28] = {
   3320   1073742176, 60, 367, 0, 1073742192, 60, 383, 0, 1073743030, 100, 1231, 0, 1073743056, 100, 1257, 0,  // NOLINT
   3321   1073744896, 184, 3118, 0, 1073744944, 184, 3166, 0, 1073745152, 148, 3365, 0 };  // NOLINT
   3322 static const uint16_t kCanonicalizationRangeMultiStrings1Size = 1;  // NOLINT
   3323 static const MultiCharacterSpecialCase<1> kCanonicalizationRangeMultiStrings7[1] = {  // NOLINT
   3324   {{kSentinel}} }; // NOLINT
   3325 static const uint16_t kCanonicalizationRangeTable7Size = 4;  // NOLINT
   3326 static const int32_t kCanonicalizationRangeTable7[8] = {
   3327   1073749793, 100, 7994, 0, 1073749825, 100, 8026, 0 };  // NOLINT
   3328 static const uint16_t kCanonicalizationRangeMultiStrings7Size = 1;  // NOLINT
   3329 int CanonicalizationRange::Convert(uchar c,
   3330                       uchar n,
   3331                       uchar* result,
   3332                       bool* allow_caching_ptr) {
   3333   int chunk_index = c >> 13;
   3334   switch (chunk_index) {
   3335     case 0: return LookupMapping<false>(kCanonicalizationRangeTable0,
   3336                                            kCanonicalizationRangeTable0Size,
   3337                                            kCanonicalizationRangeMultiStrings0,
   3338                                            c,
   3339                                            n,
   3340                                            result,
   3341                                            allow_caching_ptr);
   3342     case 1: return LookupMapping<false>(kCanonicalizationRangeTable1,
   3343                                            kCanonicalizationRangeTable1Size,
   3344                                            kCanonicalizationRangeMultiStrings1,
   3345                                            c,
   3346                                            n,
   3347                                            result,
   3348                                            allow_caching_ptr);
   3349     case 7: return LookupMapping<false>(kCanonicalizationRangeTable7,
   3350                                            kCanonicalizationRangeTable7Size,
   3351                                            kCanonicalizationRangeMultiStrings7,
   3352                                            c,
   3353                                            n,
   3354                                            result,
   3355                                            allow_caching_ptr);
   3356     default: return 0;
   3357   }
   3358 }
   3359 
   3360 
   3361 const uchar UnicodeData::kMaxCodePoint = 65533;
   3362 
   3363 int UnicodeData::GetByteCount() {
   3364   return kUppercaseTable0Size * sizeof(int32_t)         // NOLINT
   3365          + kUppercaseTable1Size * sizeof(int32_t)       // NOLINT
   3366          + kUppercaseTable5Size * sizeof(int32_t)       // NOLINT
   3367          + kUppercaseTable7Size * sizeof(int32_t)       // NOLINT
   3368          + kLowercaseTable0Size * sizeof(int32_t)       // NOLINT
   3369          + kLowercaseTable1Size * sizeof(int32_t)       // NOLINT
   3370          + kLowercaseTable5Size * sizeof(int32_t)       // NOLINT
   3371          + kLowercaseTable7Size * sizeof(int32_t)       // NOLINT
   3372          + kLetterTable0Size * sizeof(int32_t)          // NOLINT
   3373          + kLetterTable1Size * sizeof(int32_t)          // NOLINT
   3374          + kLetterTable2Size * sizeof(int32_t)          // NOLINT
   3375          + kLetterTable3Size * sizeof(int32_t)          // NOLINT
   3376          + kLetterTable4Size * sizeof(int32_t)          // NOLINT
   3377          + kLetterTable5Size * sizeof(int32_t)          // NOLINT
   3378          + kLetterTable6Size * sizeof(int32_t)          // NOLINT
   3379          + kLetterTable7Size * sizeof(int32_t)          // NOLINT
   3380          + kID_StartTable0Size * sizeof(int32_t)        // NOLINT
   3381          + kID_StartTable1Size * sizeof(int32_t)        // NOLINT
   3382          + kID_StartTable2Size * sizeof(int32_t)        // NOLINT
   3383          + kID_StartTable3Size * sizeof(int32_t)        // NOLINT
   3384          + kID_StartTable4Size * sizeof(int32_t)        // NOLINT
   3385          + kID_StartTable5Size * sizeof(int32_t)        // NOLINT
   3386          + kID_StartTable6Size * sizeof(int32_t)        // NOLINT
   3387          + kID_StartTable7Size * sizeof(int32_t)        // NOLINT
   3388          + kID_ContinueTable0Size * sizeof(int32_t)     // NOLINT
   3389          + kID_ContinueTable1Size * sizeof(int32_t)     // NOLINT
   3390          + kID_ContinueTable5Size * sizeof(int32_t)     // NOLINT
   3391          + kID_ContinueTable7Size * sizeof(int32_t)     // NOLINT
   3392          + kWhiteSpaceTable0Size * sizeof(int32_t)      // NOLINT
   3393          + kWhiteSpaceTable1Size * sizeof(int32_t)      // NOLINT
   3394          + kWhiteSpaceTable7Size * sizeof(int32_t)      // NOLINT
   3395          + kLineTerminatorTable0Size * sizeof(int32_t)  // NOLINT
   3396          + kLineTerminatorTable1Size * sizeof(int32_t)  // NOLINT
   3397          +
   3398          kToLowercaseMultiStrings0Size *
   3399              sizeof(MultiCharacterSpecialCase<2>)  // NOLINT
   3400          +
   3401          kToLowercaseMultiStrings1Size *
   3402              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3403          +
   3404          kToLowercaseMultiStrings5Size *
   3405              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3406          +
   3407          kToLowercaseMultiStrings7Size *
   3408              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3409          +
   3410          kToUppercaseMultiStrings0Size *
   3411              sizeof(MultiCharacterSpecialCase<3>)  // NOLINT
   3412          +
   3413          kToUppercaseMultiStrings1Size *
   3414              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3415          +
   3416          kToUppercaseMultiStrings5Size *
   3417              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3418          +
   3419          kToUppercaseMultiStrings7Size *
   3420              sizeof(MultiCharacterSpecialCase<3>)  // NOLINT
   3421          +
   3422          kEcma262CanonicalizeMultiStrings0Size *
   3423              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3424          +
   3425          kEcma262CanonicalizeMultiStrings1Size *
   3426              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3427          +
   3428          kEcma262CanonicalizeMultiStrings5Size *
   3429              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3430          +
   3431          kEcma262CanonicalizeMultiStrings7Size *
   3432              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3433          +
   3434          kEcma262UnCanonicalizeMultiStrings0Size *
   3435              sizeof(MultiCharacterSpecialCase<4>)  // NOLINT
   3436          +
   3437          kEcma262UnCanonicalizeMultiStrings1Size *
   3438              sizeof(MultiCharacterSpecialCase<2>)  // NOLINT
   3439          +
   3440          kEcma262UnCanonicalizeMultiStrings5Size *
   3441              sizeof(MultiCharacterSpecialCase<2>)  // NOLINT
   3442          +
   3443          kEcma262UnCanonicalizeMultiStrings7Size *
   3444              sizeof(MultiCharacterSpecialCase<2>)  // NOLINT
   3445          +
   3446          kCanonicalizationRangeMultiStrings0Size *
   3447              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3448          +
   3449          kCanonicalizationRangeMultiStrings1Size *
   3450              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3451          +
   3452          kCanonicalizationRangeMultiStrings7Size *
   3453              sizeof(MultiCharacterSpecialCase<1>);  // NOLINT
   3454 }
   3455 
   3456 }  // namespace unibrow
   3457