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
12namespace unibrow {
13
14static const int kStartBit = (1 << 30);
15static const int kChunkBits = (1 << 13);
16static const uchar kSentinel = static_cast<uchar>(-1);
17
18/**
19 * \file
20 * Implementations of functions for working with unicode.
21 */
22
23typedef signed short int16_t;  // NOLINT
24typedef unsigned short uint16_t;  // NOLINT
25typedef int int32_t;  // NOLINT
26
27
28// All access to the character table should go through this function.
29template <int D>
30static inline uchar TableGet(const int32_t* table, int index) {
31  return table[D * index];
32}
33
34
35static inline uchar GetEntry(int32_t entry) {
36  return entry & (kStartBit - 1);
37}
38
39
40static 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 */
55static 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
85template <int kW>
86struct 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.
103template <bool ranges_are_linear, int kW>
104static 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
194static 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
224static 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.
230uchar 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
308bool 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
325static const uint16_t kUppercaseTable0Size = 455;
326static 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
441static const uint16_t kUppercaseTable1Size = 86;
442static 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
454static const uint16_t kUppercaseTable5Size = 101;
455static 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
469static const uint16_t kUppercaseTable7Size = 2;
470static const int32_t kUppercaseTable7[2] = {
471  1073749793, 7994 };  // NOLINT
472bool 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
494static const uint16_t kLowercaseTable0Size = 467;
495static 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
613static const uint16_t kLowercaseTable1Size = 84;
614static 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
626static const uint16_t kLowercaseTable5Size = 105;
627static 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
655static const uint16_t kLowercaseTable7Size = 6;
656static const int32_t kLowercaseTable7[6] = {
657  1073748736, 6918, 1073748755, 6935, 1073749825, 8026 };  // NOLINT
658bool 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
680static const uint16_t kLetterTable0Size = 431;
681static 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
790static const uint16_t kLetterTable1Size = 87;
791static 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
803static const uint16_t kLetterTable2Size = 4;
804static const int32_t kLetterTable2[4] = {
805  1073741824, 3509, 1073745408, 8191 };  // NOLINT
806static const uint16_t kLetterTable3Size = 2;
807static const int32_t kLetterTable3[2] = {
808  1073741824, 8191 };  // NOLINT
809static const uint16_t kLetterTable4Size = 2;
810static const int32_t kLetterTable4[2] = {
811  1073741824, 8140 };  // NOLINT
812static const uint16_t kLetterTable5Size = 100;
813static 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
839static const uint16_t kLetterTable6Size = 6;
840static const int32_t kLetterTable6[6] = {
841  1073741824, 6051, 1073747888, 6086, 1073747915, 6139 };  // NOLINT
842static const uint16_t kLetterTable7Size = 48;
843static 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
850bool 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
887static const uint16_t kID_StartTable0Size = 434;
888static 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
998static const uint16_t kID_StartTable1Size = 84;
999static 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
1021static const uint16_t kID_StartTable2Size = 4;
1022static const int32_t kID_StartTable2[4] = {1073741824, 3509, 1073745408,
1023                                           8191};  // NOLINT
1024static const uint16_t kID_StartTable3Size = 2;
1025static const int32_t kID_StartTable3[2] = {1073741824, 8191};  // NOLINT
1026static const uint16_t kID_StartTable4Size = 2;
1027static const int32_t kID_StartTable4[2] = {1073741824, 8140};  // NOLINT
1028static const uint16_t kID_StartTable5Size = 100;
1029static 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
1055static const uint16_t kID_StartTable6Size = 6;
1056static const int32_t kID_StartTable6[6] = {1073741824, 6051, 1073747888, 6086,
1057                                           1073747915, 6139};  // NOLINT
1058static const uint16_t kID_StartTable7Size = 48;
1059static 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
1072bool 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
1101static const uint16_t kID_ContinueTable0Size = 315;
1102static 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
1182static const uint16_t kID_ContinueTable1Size = 19;
1183static 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
1189static const uint16_t kID_ContinueTable5Size = 63;
1190static 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
1207static const uint16_t kID_ContinueTable7Size = 12;
1208static const int32_t kID_ContinueTable7[12] = {
1209    6942, 1073749504, 7695, 1073749536,
1210    7725, 1073749555, 7732, 1073749581,  // NOLINT
1211    7759, 1073749776, 7961, 7999};       // NOLINT
1212bool 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
1231static const uint16_t kWhiteSpaceTable0Size = 7;
1232static const int32_t kWhiteSpaceTable0[7] = {9,   1073741835, 12,  32,
1233                                             160, 5760,       6158};  // NOLINT
1234static const uint16_t kWhiteSpaceTable1Size = 5;
1235static const int32_t kWhiteSpaceTable1[5] = {
1236  1073741824, 10, 47, 95, 4096 };  // NOLINT
1237static const uint16_t kWhiteSpaceTable7Size = 1;
1238static const int32_t kWhiteSpaceTable7[1] = {7935};  // NOLINT
1239bool 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
1257static const uint16_t kLineTerminatorTable0Size = 2;
1258static const int32_t kLineTerminatorTable0[2] = {
1259  10, 13 };  // NOLINT
1260static const uint16_t kLineTerminatorTable1Size = 2;
1261static const int32_t kLineTerminatorTable1[2] = {
1262  1073741864, 41 };  // NOLINT
1263bool 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
1276static const MultiCharacterSpecialCase<2> kToLowercaseMultiStrings0[2] = {  // NOLINT
1277  {{105, 775}}, {{kSentinel}} }; // NOLINT
1278static const uint16_t kToLowercaseTable0Size = 488;  // NOLINT
1279static 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
1463static const uint16_t kToLowercaseMultiStrings0Size = 2;  // NOLINT
1464static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings1[1] = {  // NOLINT
1465  {{kSentinel}} }; // NOLINT
1466static const uint16_t kToLowercaseTable1Size = 79;  // NOLINT
1467static 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
1478static const uint16_t kToLowercaseMultiStrings1Size = 1;  // NOLINT
1479static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings5[1] = {  // NOLINT
1480  {{kSentinel}} }; // NOLINT
1481static const uint16_t kToLowercaseTable5Size = 103;  // NOLINT
1482static 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
1509static const uint16_t kToLowercaseMultiStrings5Size = 1;  // NOLINT
1510static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings7[1] = {  // NOLINT
1511  {{kSentinel}} }; // NOLINT
1512static const uint16_t kToLowercaseTable7Size = 2;  // NOLINT
1513static const int32_t kToLowercaseTable7[4] = {
1514  1073749793, 128, 7994, 128 };  // NOLINT
1515static const uint16_t kToLowercaseMultiStrings7Size = 1;  // NOLINT
1516int 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
1554static 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
1571static const uint16_t kToUppercaseTable0Size = 590;  // NOLINT
1572static 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
1794static const uint16_t kToUppercaseMultiStrings0Size = 62;  // NOLINT
1795static const MultiCharacterSpecialCase<1> kToUppercaseMultiStrings1[1] = {  // NOLINT
1796  {{kSentinel}} }; // NOLINT
1797static const uint16_t kToUppercaseTable1Size = 73;  // NOLINT
1798static 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
1809static const uint16_t kToUppercaseMultiStrings1Size = 1;  // NOLINT
1810static const MultiCharacterSpecialCase<1> kToUppercaseMultiStrings5[1] = {  // NOLINT
1811  {{kSentinel}} }; // NOLINT
1812static const uint16_t kToUppercaseTable5Size = 95;  // NOLINT
1813static 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
1838static const uint16_t kToUppercaseMultiStrings5Size = 1;  // NOLINT
1839static 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
1843static const uint16_t kToUppercaseTable7Size = 14;  // NOLINT
1844static 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
1847static const uint16_t kToUppercaseMultiStrings7Size = 12;  // NOLINT
1848int 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
1886static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings0[1] = {  // NOLINT
1887  {{kSentinel}} }; // NOLINT
1888static const uint16_t kEcma262CanonicalizeTable0Size = 498;  // NOLINT
1889static 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
2077static const uint16_t kEcma262CanonicalizeMultiStrings0Size = 1;  // NOLINT
2078static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings1[1] = {  // NOLINT
2079  {{kSentinel}} }; // NOLINT
2080static const uint16_t kEcma262CanonicalizeTable1Size = 73;  // NOLINT
2081static 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
2092static const uint16_t kEcma262CanonicalizeMultiStrings1Size = 1;  // NOLINT
2093static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings5[1] = {  // NOLINT
2094  {{kSentinel}} }; // NOLINT
2095static const uint16_t kEcma262CanonicalizeTable5Size = 95;  // NOLINT
2096static 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
2121static const uint16_t kEcma262CanonicalizeMultiStrings5Size = 1;  // NOLINT
2122static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings7[1] = {  // NOLINT
2123  {{kSentinel}} }; // NOLINT
2124static const uint16_t kEcma262CanonicalizeTable7Size = 2;  // NOLINT
2125static const int32_t kEcma262CanonicalizeTable7[4] = {
2126  1073749825, -128, 8026, -128 };  // NOLINT
2127static const uint16_t kEcma262CanonicalizeMultiStrings7Size = 1;  // NOLINT
2128int 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
2166static 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
2675static const uint16_t kEcma262UnCanonicalizeTable0Size = 1005;  // NOLINT
2676static 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
3054static const uint16_t kEcma262UnCanonicalizeMultiStrings0Size = 507;  // NOLINT
3055static 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
3077static const uint16_t kEcma262UnCanonicalizeTable1Size = 149;  // NOLINT
3078static 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
3098static const uint16_t kEcma262UnCanonicalizeMultiStrings1Size = 83;  // NOLINT
3099static 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
3205static const uint16_t kEcma262UnCanonicalizeTable5Size = 198;  // NOLINT
3206static 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
3257static const uint16_t kEcma262UnCanonicalizeMultiStrings5Size = 104;  // NOLINT
3258static const MultiCharacterSpecialCase<2> kEcma262UnCanonicalizeMultiStrings7[3] = {  // NOLINT
3259  {{65313, 65345}}, {{65338, 65370}}, {{kSentinel}} }; // NOLINT
3260static const uint16_t kEcma262UnCanonicalizeTable7Size = 4;  // NOLINT
3261static const int32_t kEcma262UnCanonicalizeTable7[8] = {
3262  1073749793, 1, 7994, 5, 1073749825, 1, 8026, 5 };  // NOLINT
3263static const uint16_t kEcma262UnCanonicalizeMultiStrings7Size = 3;  // NOLINT
3264int 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
3302static const MultiCharacterSpecialCase<1> kCanonicalizationRangeMultiStrings0[1] = {  // NOLINT
3303  {{kSentinel}} }; // NOLINT
3304static const uint16_t kCanonicalizationRangeTable0Size = 70;  // NOLINT
3305static 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
3315static const uint16_t kCanonicalizationRangeMultiStrings0Size = 1;  // NOLINT
3316static const MultiCharacterSpecialCase<1> kCanonicalizationRangeMultiStrings1[1] = {  // NOLINT
3317  {{kSentinel}} }; // NOLINT
3318static const uint16_t kCanonicalizationRangeTable1Size = 14;  // NOLINT
3319static 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
3322static const uint16_t kCanonicalizationRangeMultiStrings1Size = 1;  // NOLINT
3323static const MultiCharacterSpecialCase<1> kCanonicalizationRangeMultiStrings7[1] = {  // NOLINT
3324  {{kSentinel}} }; // NOLINT
3325static const uint16_t kCanonicalizationRangeTable7Size = 4;  // NOLINT
3326static const int32_t kCanonicalizationRangeTable7[8] = {
3327  1073749793, 100, 7994, 0, 1073749825, 100, 8026, 0 };  // NOLINT
3328static const uint16_t kCanonicalizationRangeMultiStrings7Size = 1;  // NOLINT
3329int 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
3361const uchar UnicodeData::kMaxCodePoint = 65533;
3362
3363int 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