// Copyright 2025 International Digital Economy Academy
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

///|
/// Language tag data (minimal subset of swash `text` module).
///
/// Ported from `swash/src/text/lang_data.rs`.

///|
const TEXT_LANG_ZHT_TAG : Tag = 0x5A485420 // "ZHT "

///|
const TEXT_LANG_ZHS_TAG : Tag = 0x5A485320 // "ZHS "

///|
let text_lang_tags : ReadOnlyArray[Tag] = [
  0x41424120, 0x41424B20, 0x41434820, 0x41435220, 0x41445920, 0x41464B20, 0x41465220,
  0x41475720, 0x41494F20, 0x414B4120, 0x414C5320, 0x414C5420, 0x414C5420, 0x414D4820,
  0x414E4720, 0x41524120, 0x41524720, 0x41524920, 0x41524B20, 0x41524B20, 0x41534D20,
  0x41535420, 0x41544820, 0x41544820, 0x41544820, 0x41544820, 0x41544820, 0x41544820,
  0x41544820, 0x41544820, 0x41544820, 0x41544820, 0x41544820, 0x41544820, 0x41544820,
  0x41544820, 0x41544820, 0x41544820, 0x41544820, 0x41544820, 0x41544820, 0x41544820,
  0x41544820, 0x41544820, 0x41544820, 0x41544820, 0x41544820, 0x41544820, 0x41544820,
  0x41544820, 0x41544820, 0x41544820, 0x41544820, 0x41544820, 0x41544820, 0x41544820,
  0x41544820, 0x41544820, 0x41544820, 0x41544820, 0x41544820, 0x41544820, 0x41544820,
  0x41544820, 0x41544820, 0x41565220, 0x41574120, 0x41594D20, 0x415A4220, 0x415A4520,
  0x42414420, 0x42414720, 0x42414C20, 0x42414E20, 0x42415220, 0x42415520, 0x42424320,
  0x42434820, 0x42445920, 0x42454C20, 0x42454D20, 0x42454E20, 0x42474320, 0x42475120,
  0x42475220, 0x42484920, 0x42484920, 0x42484F20, 0x42494B20, 0x42494B20, 0x42494B20,
  0x42494B20, 0x42494B20, 0x42494B20, 0x42494B20, 0x42494B20, 0x42494B20, 0x42494C20,
  0x42495320, 0x424A4A20, 0x424B4620, 0x424C4920, 0x424C4B20, 0x424C4E20, 0x424C4E20,
  0x424C5420, 0x424D4220, 0x424F5320, 0x42505920, 0x42524520, 0x42524820, 0x42524920,
  0x42524D20, 0x42525820, 0x42534820, 0x42534B20, 0x42544920, 0x42544920, 0x42544920,
  0x42544920, 0x42544920, 0x42544920, 0x42545320, 0x42554720, 0x42595620, 0x43414B20,
  0x43415420, 0x43424B20, 0x4343484E, 0x4343484E, 0x4343484E, 0x4343484E, 0x4343484E,
  0x4343484E, 0x4343484E, 0x4343484E, 0x4343484E, 0x4343484E, 0x4343484E, 0x4343484E,
  0x4343484E, 0x4343484E, 0x43454220, 0x43474720, 0x43484120, 0x43484520, 0x43484720,
  0x43484820, 0x43484920, 0x43484B20, 0x43484B30, 0x43484F20, 0x43485020, 0x43485220,
  0x43485520, 0x43485920, 0x434A4120, 0x434A4D20, 0x434D5220, 0x434D5220, 0x434D5220,
  0x434D5220, 0x434F5020, 0x434F5220, 0x434F5320, 0x43524520, 0x43525220, 0x43525220,
  0x43525420, 0x43534220, 0x43534C20, 0x43535920, 0x43544720, 0x43554B20, 0x44414E20,
  0x44415220, 0x44415820, 0x44435220, 0x44455520, 0x44474F20, 0x44475220, 0x44484720,
  0x44495120, 0x44495620, 0x444A5220, 0x444A5230, 0x444E4720, 0x444E4A20, 0x444E4B20,
  0x44524920, 0x44554A20, 0x44554A20, 0x44554E20, 0x445A4E20, 0x45424920, 0x45435220,
  0x45435220, 0x45444F20, 0x45464920, 0x454C4C20, 0x454D4B20, 0x454E4720, 0x45525A20,
  0x45535020, 0x45535520, 0x45544920, 0x45555120, 0x45564B20, 0x45564E20, 0x45574520,
  0x46414E20, 0x46414E30, 0x46415220, 0x46415420, 0x46494E20, 0x464A4920, 0x464C4520,
  0x464D5020, 0x464E4520, 0x464E4520, 0x464F4E20, 0x464F5320, 0x46524120, 0x46524320,
  0x46524920, 0x46524C20, 0x46525020, 0x46544120, 0x46554C20, 0x46555620, 0x47414420,
  0x47414520, 0x47414720, 0x47414C20, 0x47415720, 0x47455A20, 0x47494820, 0x47494C20,
  0x47494C30, 0x474B5020, 0x474C4B20, 0x474D5A20, 0x474E4E20, 0x474F4720, 0x474F4E20,
  0x47524E20, 0x47524F20, 0x47554120, 0x47554320, 0x47554620, 0x47554A20, 0x47555A20,
  0x48414920, 0x48414C20, 0x48414C20, 0x48415220, 0x48415520, 0x48415720, 0x48415920,
  0x48415A20, 0x48424E20, 0x48455220, 0x48494C20, 0x48494E20, 0x484D4120, 0x484D4E20,
  0x484D4F20, 0x484E4420, 0x484E4420, 0x48524920, 0x48525620, 0x48554E20, 0x48594520,
  0x48594530, 0x49424120, 0x49424220, 0x49424F20, 0x49444F20, 0x494A4F20, 0x494C4520,
  0x494C4F20, 0x494E4120, 0x494E4420, 0x494E4720, 0x494E5520, 0x49504B20, 0x49524920,
  0x49525420, 0x49534C20, 0x49534D20, 0x49544120, 0x49575220, 0x4A414D20, 0x4A414E20,
  0x4A415620, 0x4A424F20, 0x4A435420, 0x4A494920, 0x4A554420, 0x4A554C20, 0x4B414220,
  0x4B414230, 0x4B414320, 0x4B414C20, 0x4B414E20, 0x4B415220, 0x4B415420, 0x4B415A20,
  0x4B444520, 0x4B454120, 0x4B454220, 0x4B454B20, 0x4B474520, 0x4B484120, 0x4B484B20,
  0x4B484D20, 0x4B485320, 0x4B485420, 0x4B485620, 0x4B485720, 0x4B494B20, 0x4B495220,
  0x4B495320, 0x4B495320, 0x4B495520, 0x4B4A4420, 0x4B4A5020, 0x4B4A5A20, 0x4B4B4E20,
  0x4B4C4D20, 0x4B4D4220, 0x4B4D4E20, 0x4B4D4F20, 0x4B4D5320, 0x4B4D5A20, 0x4B4E5220,
  0x4B4F4420, 0x4B4F4820, 0x4B4F4B20, 0x4B4F4D20, 0x4B4F4E20, 0x4B4F4E30, 0x4B4F5020,
  0x4B4F5220, 0x4B4F5320, 0x4B4F5A20, 0x4B504C20, 0x4B524920, 0x4B524B20, 0x4B524C20,
  0x4B524D20, 0x4B525420, 0x4B534820, 0x4B534830, 0x4B534920, 0x4B534D20, 0x4B535720,
  0x4B554120, 0x4B554920, 0x4B554C20, 0x4B554D20, 0x4B555220, 0x4B555520, 0x4B555920,
  0x4B594B20, 0x4B595520, 0x4C414420, 0x4C414820, 0x4C414B20, 0x4C414D20, 0x4C414F20,
  0x4C415420, 0x4C415A20, 0x4C435220, 0x4C444B20, 0x4C455A20, 0x4C494A20, 0x4C494D20,
  0x4C494E20, 0x4C495320, 0x4C4A5020, 0x4C4B4920, 0x4C4D4120, 0x4C4D4220, 0x4C4D4F20,
  0x4C4D5720, 0x4C4F4D20, 0x4C524320, 0x4C524320, 0x4C524320, 0x4C524320, 0x4C534220,
  0x4C534D20, 0x4C544820, 0x4C545A20, 0x4C554120, 0x4C554220, 0x4C554720, 0x4C554820,
  0x4C554F20, 0x4C564920, 0x4D414420, 0x4D414720, 0x4D414820, 0x4D414A20, 0x4D414B20,
  0x4D414C20, 0x4D414D20, 0x4D414E20, 0x4D415020, 0x4D415220, 0x4D415720, 0x4D415720,
  0x4D415720, 0x4D415720, 0x4D415720, 0x4D415720, 0x4D415720, 0x4D424E20, 0x4D424F20,
  0x4D434820, 0x4D435220, 0x4D444520, 0x4D445220, 0x4D454E20, 0x4D455220, 0x4D464120,
  0x4D464520, 0x4D494E20, 0x4D495A20, 0x4D4B4420, 0x4D4B5220, 0x4D4B5720, 0x4D4C4520,
  0x4D4C4720, 0x4D4C4E20, 0x4D4C5220, 0x4D4C5920, 0x4D4E4420, 0x4D4E4720, 0x4D4E4920,
  0x4D4E4B20, 0x4D4E4B20, 0x4D4E4B20, 0x4D4E4B20, 0x4D4E4B20, 0x4D4E4B20, 0x4D4E4B20,
  0x4D4E5820, 0x4D4F4820, 0x4D4F4B20, 0x4D4F4E20, 0x4D4F5320, 0x4D524920, 0x4D544820,
  0x4D545320, 0x4D554E20, 0x4D555320, 0x4D574C20, 0x4D575720, 0x4D5A4E20, 0x4E414720,
  0x4E414E20, 0x4E415020, 0x4E415320, 0x4E415520, 0x4E415620, 0x4E435220, 0x4E444220,
  0x4E444220, 0x4E444320, 0x4E444720, 0x4E445320, 0x4E455020, 0x4E455720, 0x4E474120,
  0x4E484320, 0x4E495320, 0x4E495320, 0x4E495520, 0x4E4B4C20, 0x4E4B4F20, 0x4E4C4420,
  0x4E4F4520, 0x4E4F4720, 0x4E4F5220, 0x4E4F5620, 0x4E534D20, 0x4E534F20, 0x4E544120,
  0x4E544F20, 0x4E594D20, 0x4E594E20, 0x4E5A4120, 0x4F434920, 0x4F435220, 0x4F4A4220,
  0x4F524920, 0x4F524F20, 0x4F535320, 0x50414120, 0x50414720, 0x50414C20, 0x50414D20,
  0x50414E20, 0x50415020, 0x50415030, 0x50415320, 0x50415520, 0x50434320, 0x50434420,
  0x50444320, 0x50475220, 0x50484B20, 0x50494820, 0x50494C20, 0x504C4720, 0x504C4720,
  0x504C4720, 0x504C4B20, 0x504D5320, 0x504E4220, 0x504F4820, 0x504F4E20, 0x50524F20,
  0x50544720, 0x50574F20, 0x51494E20, 0x51494E20, 0x51494E20, 0x51494E20, 0x51494E20,
  0x51494E20, 0x51494E20, 0x51494E20, 0x51494E20, 0x51494E20, 0x51494E20, 0x51494E20,
  0x51494E20, 0x51494E20, 0x51494E20, 0x51494E20, 0x51494E20, 0x51494E20, 0x51494E20,
  0x51554320, 0x51554820, 0x51555A20, 0x51564920, 0x51574820, 0x52414A20, 0x52415220,
  0x52425520, 0x52435220, 0x52454A20, 0x52494120, 0x52494620, 0x52495420, 0x524B5720,
  0x524D5320, 0x524D5920, 0x524F4D20, 0x524F5920, 0x52535920, 0x52544D20, 0x52554120,
  0x52554E20, 0x52555020, 0x52555320, 0x53414420, 0x53414E20, 0x53415320, 0x53415420,
  0x53415920, 0x53434E20, 0x53434F20, 0x53435320, 0x53454B20, 0x53454C20, 0x53474120,
  0x53474F20, 0x53475320, 0x53484920, 0x53484E20, 0x53494220, 0x53494420, 0x53494720,
  0x53494720, 0x534B5320, 0x534B5920, 0x534C4120, 0x534C4120, 0x534C5620, 0x534D4C20,
  0x534D4F20, 0x534E4120, 0x534E4130, 0x534E4420, 0x534E4820, 0x534E4B20, 0x534F4720,
  0x534F5020, 0x534F5420, 0x53514920, 0x53524220, 0x53524420, 0x53524B20, 0x53525220,
  0x53534C20, 0x53534D20, 0x53545120, 0x53554B20, 0x53554E20, 0x53555220, 0x53564120,
  0x53564520, 0x53574120, 0x53574B20, 0x53575A20, 0x53585420, 0x53585520, 0x53594C20,
  0x53595220, 0x53595220, 0x53595220, 0x53595220, 0x53595220, 0x53595220, 0x53595245,
  0x53595245, 0x5359524A, 0x5359524A, 0x5359524E, 0x5359524E, 0x535A4C20, 0x54414220,
  0x54414A20, 0x54414D20, 0x54415420, 0x54435220, 0x54444420, 0x54454C20, 0x54455420,
  0x54474C20, 0x54474E20, 0x54475220, 0x54475920, 0x54484120, 0x54485420, 0x54494220,
  0x54495620, 0x544B4D20, 0x544D4820, 0x544D4E20, 0x544E4120, 0x544E4520, 0x544E4520,
  0x544E4720, 0x544F4420, 0x544F4430, 0x54504920, 0x54524B20, 0x54534720, 0x54534A20,
  0x54554120, 0x54554C20, 0x54554D20, 0x54555620, 0x54564C20, 0x54574920, 0x54595A20,
  0x545A4D20, 0x545A4F20, 0x55444D20, 0x554B5220, 0x554D4220, 0x55524420, 0x55534220,
  0x55594720, 0x555A4220, 0x56454320, 0x56454E20, 0x56495420, 0x564F4C20, 0x56524F20,
  0x57414720, 0x57415220, 0x57435220, 0x57454C20, 0x574C4620, 0x574C4E20, 0x57544D20,
  0x58424420, 0x58485320, 0x584A4220, 0x584B4620, 0x584F4720, 0x58504520, 0x59414B20,
  0x59414F20, 0x59415020, 0x59424120, 0x59435220, 0x59494D20, 0x5A454120, 0x5A474820,
  0x5A484120, 0x5A484820, 0x5A485020, 0x5A485320, 0x5A485420, 0x5A4E4420, 0x5A554C20,
  0x5A5A4120,
]

///|
let text_lang_by_tag2 : ReadOnlyArray[(UInt, Int)] = [
  (0x6161, 6),
  (0x6162, 1),
  (0x6166, 5),
  (0x616B, 9),
  (0x616B, 670),
  (0x616D, 13),
  (0x616E, 16),
  (0x6172, 15),
  (0x6173, 20),
  (0x6176, 65),
  (0x6179, 67),
  (0x617A, 69),
  (0x6261, 114),
  (0x6265, 79),
  (0x6267, 84),
  (0x6269, 98),
  (0x626D, 106),
  (0x626E, 81),
  (0x626F, 650),
  (0x6272, 109),
  (0x6273, 107),
  (0x6361, 126),
  (0x6365, 145),
  (0x6368, 144),
  (0x636F, 164),
  (0x6372, 703),
  (0x6372, 165),
  (0x6373, 171),
  (0x6375, 170),
  (0x6376, 154),
  (0x6379, 689),
  (0x6461, 174),
  (0x6465, 178),
  (0x6476, 183),
  (0x647A, 193),
  (0x6565, 209),
  (0x656C, 199),
  (0x656C, 512),
  (0x656E, 201),
  (0x656F, 490),
  (0x6573, 203),
  (0x6574, 205),
  (0x6575, 206),
  (0x6661, 212),
  (0x6666, 228),
  (0x6669, 214),
  (0x666A, 215),
  (0x666F, 221),
  (0x6672, 222),
  (0x6679, 224),
  (0x6761, 287),
  (0x6761, 286),
  (0x6764, 231),
  (0x676C, 233),
  (0x676E, 247),
  (0x6775, 250),
  (0x6776, 448),
  (0x6861, 256),
  (0x6865, 291),
  (0x6869, 263),
  (0x686F, 266),
  (0x6872, 270),
  (0x6874, 252),
  (0x6875, 271),
  (0x6879, 273),
  (0x6879, 272),
  (0x687A, 261),
  (0x6961, 281),
  (0x6964, 282),
  (0x6965, 279),
  (0x6967, 276),
  (0x6969, 704),
  (0x696B, 285),
  (0x696F, 277),
  (0x6973, 288),
  (0x6974, 290),
  (0x6975, 284),
  (0x6A61, 293),
  (0x6A76, 294),
  (0x6B61, 312),
  (0x6B61, 306),
  (0x6B67, 341),
  (0x6B69, 320),
  (0x6B6A, 357),
  (0x6B6B, 307),
  (0x6B6C, 245),
  (0x6B6D, 315),
  (0x6B6E, 304),
  (0x6B6F, 343),
  (0x6B72, 335),
  (0x6B73, 352),
  (0x6B75, 361),
  (0x6B76, 339),
  (0x6B77, 163),
  (0x6B79, 321),
  (0x6C61, 371),
  (0x6C62, 394),
  (0x6C67, 397),
  (0x6C69, 377),
  (0x6C6E, 378),
  (0x6C6F, 370),
  (0x6C74, 393),
  (0x6C75, 396),
  (0x6C76, 400),
  (0x6D67, 434),
  (0x6D68, 403),
  (0x6D69, 453),
  (0x6D6B, 430),
  (0x6D6C, 406),
  (0x6D6C, 436),
  (0x6D6E, 439),
  (0x6D72, 410),
  (0x6D73, 437),
  (0x6D74, 455),
  (0x6D79, 112),
  (0x6E61, 465),
  (0x6E62, 485),
  (0x6E64, 469),
  (0x6E65, 473),
  (0x6E67, 471),
  (0x6E6C, 482),
  (0x6E6E, 492),
  (0x6E72, 468),
  (0x6E76, 50),
  (0x6E76, 466),
  (0x6E79, 148),
  (0x6F63, 494),
  (0x6F6A, 496),
  (0x6F6D, 498),
  (0x6F72, 497),
  (0x6F73, 499),
  (0x7061, 504),
  (0x7069, 502),
  (0x706C, 519),
  (0x7073, 507),
  (0x7074, 525),
  (0x726D, 560),
  (0x726E, 567),
  (0x726F, 562),
  (0x7275, 569),
  (0x7277, 566),
  (0x7361, 571),
  (0x7363, 606),
  (0x7364, 598),
  (0x7365, 487),
  (0x7367, 581),
  (0x7369, 599),
  (0x736B, 590),
  (0x736C, 593),
  (0x736D, 595),
  (0x736E, 597),
  (0x736F, 594),
  (0x7371, 604),
  (0x7372, 605),
  (0x7373, 619),
  (0x7374, 603),
  (0x7375, 613),
  (0x7376, 616),
  (0x7377, 618),
  (0x7461, 638),
  (0x7465, 642),
  (0x7467, 637),
  (0x7468, 648),
  (0x7469, 647),
  (0x746B, 652),
  (0x746C, 644),
  (0x746E, 655),
  (0x746F, 645),
  (0x7472, 662),
  (0x7473, 663),
  (0x7474, 639),
  (0x7479, 649),
  (0x7567, 679),
  (0x756B, 675),
  (0x7572, 677),
  (0x757A, 680),
  (0x7665, 682),
  (0x7669, 683),
  (0x766F, 684),
  (0x7761, 691),
  (0x776F, 690),
  (0x7868, 694),
  (0x7969, 297),
  (0x796F, 702),
  (0x7A61, 707),
  (0x7A75, 713),
]

///|
let text_lang_by_tag3 : ReadOnlyArray[(UInt, Int)] = [
  (0x616172, 6),
  (0x61626B, 1),
  (0x616271, 0),
  (0x616366, 210),
  (0x616368, 2),
  (0x616372, 3),
  (0x616461, 186),
  (0x616479, 4),
  (0x616672, 5),
  (0x616867, 7),
  (0x616874, 33),
  (0x616969, 617),
  (0x616969, 628),
  (0x61696F, 8),
  (0x616977, 17),
  (0x616B61, 670),
  (0x616B61, 9),
  (0x616C74, 12),
  (0x616D66, 260),
  (0x616D68, 13),
  (0x616D77, 627),
  (0x616E67, 14),
  (0x61706A, 46),
  (0x61706B, 45),
  (0x61706C, 47),
  (0x61706D, 48),
  (0x617077, 49),
  (0x617261, 15),
  (0x617267, 16),
  (0x61726E, 409),
  (0x61736D, 20),
  (0x617374, 21),
  (0x61746A, 554),
  (0x617476, 11),
  (0x617661, 65),
  (0x617761, 66),
  (0x61796D, 67),
  (0x617A62, 68),
  (0x617A65, 69),
  (0x62616B, 114),
  (0x62616C, 101),
  (0x62616D, 106),
  (0x62616E, 73),
  (0x626172, 74),
  (0x626263, 76),
  (0x626369, 75),
  (0x62636C, 94),
  (0x626371, 77),
  (0x626372, 53),
  (0x626479, 78),
  (0x626561, 51),
  (0x626562, 116),
  (0x62656C, 79),
  (0x62656D, 80),
  (0x62656E, 81),
  (0x626671, 70),
  (0x626674, 105),
  (0x626675, 367),
  (0x626679, 71),
  (0x626763, 82),
  (0x626771, 83),
  (0x626772, 545),
  (0x626862, 86),
  (0x626869, 85),
  (0x62686F, 87),
  (0x62696B, 92),
  (0x62696E, 197),
  (0x626973, 98),
  (0x626A6A, 99),
  (0x626A74, 104),
  (0x626C61, 100),
  (0x626C65, 103),
  (0x626C6B, 102),
  (0x626C6E, 95),
  (0x626F64, 650),
  (0x626F73, 107),
  (0x627079, 108),
  (0x627169, 388),
  (0x627261, 111),
  (0x627265, 109),
  (0x627268, 110),
  (0x627278, 113),
  (0x62736B, 115),
  (0x62746F, 96),
  (0x627473, 122),
  (0x627567, 123),
  (0x62756C, 84),
  (0x62756D, 117),
  (0x627870, 118),
  (0x627872, 553),
  (0x62796E, 97),
  (0x627976, 124),
  (0x636166, 54),
  (0x636166, 166),
  (0x63616B, 125),
  (0x636174, 126),
  (0x63626B, 127),
  (0x63626C, 529),
  (0x63636F, 140),
  (0x636562, 142),
  (0x636573, 171),
  (0x63666D, 253),
  (0x636767, 143),
  (0x636861, 144),
  (0x636865, 145),
  (0x63686A, 139),
  (0x63686B, 150),
  (0x63686F, 151),
  (0x636870, 574),
  (0x636870, 152),
  (0x636870, 58),
  (0x636871, 138),
  (0x636872, 153),
  (0x636875, 170),
  (0x636876, 154),
  (0x636879, 155),
  (0x63687A, 137),
  (0x636A61, 156),
  (0x636A6D, 157),
  (0x636B74, 149),
  (0x636C63, 55),
  (0x636C64, 626),
  (0x636C65, 136),
  (0x636D72, 534),
  (0x636E62, 528),
  (0x636E68, 544),
  (0x636E6B, 531),
  (0x636E6C, 135),
  (0x636E74, 141),
  (0x636E77, 543),
  (0x636F70, 162),
  (0x636F71, 25),
  (0x636F72, 163),
  (0x636F73, 164),
  (0x637061, 134),
  (0x637265, 165),
  (0x637265, 703),
  (0x637268, 168),
  (0x63726A, 195),
  (0x63726B, 688),
  (0x63726C, 196),
  (0x63726D, 421),
  (0x63726D, 373),
  (0x637278, 167),
  (0x637278, 64),
  (0x637361, 132),
  (0x637362, 169),
  (0x637368, 527),
  (0x63736F, 131),
  (0x637377, 476),
  (0x637377, 467),
  (0x637379, 539),
  (0x637463, 26),
  (0x637464, 538),
  (0x637465, 130),
  (0x637467, 172),
  (0x63746C, 129),
  (0x637473, 93),
  (0x637563, 128),
  (0x63756B, 173),
  (0x63766E, 133),
  (0x637764, 640),
  (0x637764, 177),
  (0x63796D, 689),
  (0x637A74, 542),
  (0x64616E, 174),
  (0x64616F, 533),
  (0x646172, 175),
  (0x646178, 176),
  (0x646575, 178),
  (0x64676F, 179),
  (0x646772, 59),
  (0x646864, 416),
  (0x646867, 181),
  (0x64696E, 188),
  (0x646971, 182),
  (0x646976, 183),
  (0x646A65, 184),
  (0x646A72, 185),
  (0x646E67, 192),
  (0x646E6A, 187),
  (0x646F69, 180),
  (0x647362, 391),
  (0x647775, 190),
  (0x647779, 191),
  (0x647975, 299),
  (0x647A6F, 193),
  (0x656669, 198),
  (0x656C6C, 199),
  (0x656C6C, 512),
  (0x656D6B, 200),
  (0x656D6B, 442),
  (0x656E66, 218),
  (0x656E67, 201),
  (0x656E68, 656),
  (0x65706F, 490),
  (0x657374, 205),
  (0x657375, 204),
  (0x65746F, 119),
  (0x657573, 206),
  (0x657665, 208),
  (0x65766E, 207),
  (0x657765, 209),
  (0x65776F, 120),
  (0x66616E, 211),
  (0x66616F, 221),
  (0x666173, 212),
  (0x666174, 213),
  (0x66626C, 91),
  (0x66696A, 215),
  (0x66696C, 515),
  (0x66696E, 214),
  (0x666D70, 217),
  (0x666F6E, 220),
  (0x667261, 222),
  (0x667263, 223),
  (0x667270, 226),
  (0x667279, 224),
  (0x667566, 227),
  (0x66756C, 228),
  (0x667572, 225),
  (0x667576, 229),
  (0x676161, 230),
  (0x676167, 232),
  (0x67626D, 234),
  (0x676365, 27),
  (0x67657A, 235),
  (0x676968, 236),
  (0x67696C, 238),
  (0x676B70, 239),
  (0x676C61, 231),
  (0x676C64, 462),
  (0x676C65, 287),
  (0x676C65, 286),
  (0x676C67, 233),
  (0x676C6B, 240),
  (0x676C76, 448),
  (0x676E6E, 242),
  (0x676F67, 243),
  (0x676F6E, 244),
  (0x67726E, 247),
  (0x677274, 246),
  (0x677275, 601),
  (0x677377, 10),
  (0x677563, 248),
  (0x677566, 249),
  (0x67756A, 250),
  (0x67756B, 241),
  (0x67757A, 251),
  (0x677769, 56),
  (0x686161, 57),
  (0x686172, 269),
  (0x686174, 252),
  (0x686175, 256),
  (0x686177, 257),
  (0x686179, 258),
  (0x68617A, 259),
  (0x686562, 291),
  (0x686572, 261),
  (0x68696C, 262),
  (0x68696E, 263),
  (0x686C74, 532),
  (0x686D6E, 265),
  (0x686D6F, 266),
  (0x686E64, 267),
  (0x686E65, 147),
  (0x686E6F, 268),
  (0x686F69, 63),
  (0x686F6A, 255),
  (0x687276, 270),
  (0x687362, 678),
  (0x68756E, 271),
  (0x687570, 31),
  (0x687965, 273),
  (0x687965, 272),
  (0x696261, 274),
  (0x696262, 275),
  (0x69626F, 276),
  (0x69646F, 277),
  (0x696762, 194),
  (0x696969, 704),
  (0x696A63, 278),
  (0x696B75, 284),
  (0x696C65, 279),
  (0x696C6F, 280),
  (0x696E61, 281),
  (0x696E64, 282),
  (0x696E67, 44),
  (0x696E68, 283),
  (0x69706B, 285),
  (0x69736C, 288),
  (0x697461, 290),
  (0x6A616D, 292),
  (0x6A6176, 294),
  (0x6A626F, 295),
  (0x6A6374, 296),
  (0x6A706E, 293),
  (0x6B6161, 348),
  (0x6B6162, 301),
  (0x6B616C, 245),
  (0x6B616D, 330),
  (0x6B616E, 304),
  (0x6B6173, 352),
  (0x6B6174, 312),
  (0x6B6174, 306),
  (0x6B6175, 335),
  (0x6B617A, 307),
  (0x6B6264, 300),
  (0x6B6361, 314),
  (0x6B6361, 318),
  (0x6B6361, 316),
  (0x6B6465, 308),
  (0x6B6472, 350),
  (0x6B6474, 363),
  (0x6B6561, 309),
  (0x6B656B, 311),
  (0x6B6578, 328),
  (0x6B6661, 336),
  (0x6B6672, 302),
  (0x6B6678, 359),
  (0x6B6679, 331),
  (0x6B6861, 354),
  (0x6B6862, 693),
  (0x6B686D, 315),
  (0x6B6874, 317),
  (0x6B6877, 319),
  (0x6B696B, 320),
  (0x6B696E, 566),
  (0x6B6972, 321),
  (0x6B6975, 324),
  (0x6B6A64, 325),
  (0x6B6A68, 313),
  (0x6B6A70, 326),
  (0x6B6A7A, 327),
  (0x6B6B7A, 30),
  (0x6B6C6E, 303),
  (0x6B6D62, 418),
  (0x6B6D77, 332),
  (0x6B6D7A, 334),
  (0x6B6F69, 342),
  (0x6B6F6B, 338),
  (0x6B6F6D, 339),
  (0x6B6F6E, 341),
  (0x6B6F72, 343),
  (0x6B6F73, 344),
  (0x6B6F79, 42),
  (0x6B7065, 346),
  (0x6B7076, 345),
  (0x6B7079, 364),
  (0x6B7173, 323),
  (0x6B7179, 351),
  (0x6B7263, 305),
  (0x6B7263, 72),
  (0x6B7269, 347),
  (0x6B726C, 349),
  (0x6B7275, 362),
  (0x6B7368, 353),
  (0x6B7373, 322),
  (0x6B7377, 356),
  (0x6B7462, 310),
  (0x6B7475, 340),
  (0x6B7477, 43),
  (0x6B7561, 357),
  (0x6B756D, 360),
  (0x6B7572, 361),
  (0x6B7575, 38),
  (0x6B7863, 333),
  (0x6B7875, 358),
  (0x6B7975, 365),
  (0x6C6164, 298),
  (0x6C616F, 370),
  (0x6C6174, 371),
  (0x6C6176, 400),
  (0x6C6265, 368),
  (0x6C626A, 374),
  (0x6C626C, 90),
  (0x6C657A, 375),
  (0x6C6966, 383),
  (0x6C696A, 376),
  (0x6C696D, 377),
  (0x6C696E, 378),
  (0x6C6973, 379),
  (0x6C6974, 393),
  (0x6C6A70, 380),
  (0x6C6B69, 381),
  (0x6C6C64, 366),
  (0x6C6D6E, 369),
  (0x6C6D6F, 384),
  (0x6C6F6D, 386),
  (0x6C7263, 389),
  (0x6C747A, 394),
  (0x6C7561, 395),
  (0x6C7562, 396),
  (0x6C7567, 397),
  (0x6C756F, 399),
  (0x6C7573, 429),
  (0x6C7579, 398),
  (0x6C757A, 390),
  (0x6C7A7A, 372),
  (0x6D6164, 401),
  (0x6D6167, 402),
  (0x6D6168, 403),
  (0x6D6169, 454),
  (0x6D616B, 431),
  (0x6D616C, 436),
  (0x6D616C, 406),
  (0x6D616D, 407),
  (0x6D616E, 447),
  (0x6D6172, 410),
  (0x6D626F, 419),
  (0x6D6374, 121),
  (0x6D6466, 450),
  (0x6D6472, 423),
  (0x6D6479, 433),
  (0x6D656E, 422),
  (0x6D6572, 425),
  (0x6D6661, 426),
  (0x6D6665, 427),
  (0x6D6872, 382),
  (0x6D696E, 428),
  (0x6D6B64, 430),
  (0x6D6B75, 446),
  (0x6D6B77, 432),
  (0x6D6C67, 434),
  (0x6D6C71, 441),
  (0x6D6C71, 435),
  (0x6D6C74, 455),
  (0x6D6E63, 420),
  (0x6D6E69, 440),
  (0x6D6E6B, 445),
  (0x6D6E6B, 438),
  (0x6D6E73, 408),
  (0x6D6E77, 451),
  (0x6D6F68, 449),
  (0x6D6F6E, 439),
  (0x6D6F73, 452),
  (0x6D7065, 404),
  (0x6D7268, 530),
  (0x6D7269, 453),
  (0x6D726A, 264),
  (0x6D7361, 437),
  (0x6D7363, 443),
  (0x6D7472, 412),
  (0x6D7573, 457),
  (0x6D7662, 23),
  (0x6D7665, 417),
  (0x6D776B, 444),
  (0x6D776C, 458),
  (0x6D7772, 414),
  (0x6D7777, 459),
  (0x6D7961, 112),
  (0x6D796D, 424),
  (0x6D7976, 202),
  (0x6D7A6E, 460),
  (0x6E6167, 461),
  (0x6E6170, 463),
  (0x6E6175, 465),
  (0x6E6176, 466),
  (0x6E6176, 50),
  (0x6E626C, 468),
  (0x6E6463, 470),
  (0x6E6465, 469),
  (0x6E646F, 471),
  (0x6E6473, 472),
  (0x6E6570, 473),
  (0x6E6577, 474),
  (0x6E6761, 475),
  (0x6E676C, 385),
  (0x6E676F, 620),
  (0x6E6975, 479),
  (0x6E6976, 237),
  (0x6E6A7A, 478),
  (0x6E6C64, 482),
  (0x6E6E6F, 492),
  (0x6E6F62, 485),
  (0x6E6F64, 489),
  (0x6E6F65, 483),
  (0x6E6F67, 484),
  (0x6E6F76, 486),
  (0x6E716F, 481),
  (0x6E736B, 464),
  (0x6E736F, 488),
  (0x6E7961, 148),
  (0x6E796D, 491),
  (0x6E796E, 480),
  (0x6E7A61, 493),
  (0x6F6369, 494),
  (0x6F6A69, 496),
  (0x6F6A73, 495),
  (0x6F6B6D, 337),
  (0x6F7269, 497),
  (0x6F726D, 498),
  (0x6F7373, 499),
  (0x706167, 501),
  (0x70616D, 503),
  (0x70616E, 504),
  (0x706170, 506),
  (0x706175, 508),
  (0x706363, 509),
  (0x706364, 510),
  (0x706365, 516),
  (0x70636B, 537),
  (0x706463, 511),
  (0x70686B, 513),
  (0x706968, 514),
  (0x706C69, 502),
  (0x706C6C, 518),
  (0x706C70, 505),
  (0x706D73, 520),
  (0x706E62, 521),
  (0x706F68, 522),
  (0x706F6C, 519),
  (0x706F6E, 523),
  (0x706F72, 525),
  (0x70726F, 524),
  (0x707273, 189),
  (0x707573, 507),
  (0x70776F, 526),
  (0x717563, 546),
  (0x717568, 547),
  (0x71757A, 548),
  (0x717669, 549),
  (0x717768, 550),
  (0x72616A, 551),
  (0x726172, 552),
  (0x726262, 517),
  (0x72626C, 89),
  (0x72656A, 555),
  (0x726961, 556),
  (0x726966, 557),
  (0x726974, 558),
  (0x726B69, 19),
  (0x726B77, 559),
  (0x726D79, 561),
  (0x726D7A, 18),
  (0x726E6C, 254),
  (0x726F68, 560),
  (0x726F6D, 563),
  (0x726F6E, 562),
  (0x72746D, 565),
  (0x727565, 564),
  (0x72756E, 567),
  (0x727570, 568),
  (0x727573, 569),
  (0x727772, 415),
  (0x736167, 581),
  (0x736168, 699),
  (0x73616D, 500),
  (0x73616E, 571),
  (0x736173, 572),
  (0x736174, 573),
  (0x73636B, 570),
  (0x73636E, 575),
  (0x73636F, 576),
  (0x736373, 60),
  (0x736373, 577),
  (0x736373, 591),
  (0x736568, 596),
  (0x73656B, 52),
  (0x73656C, 579),
  (0x73657A, 541),
  (0x736761, 580),
  (0x736773, 582),
  (0x736777, 146),
  (0x736869, 583),
  (0x73686E, 584),
  (0x736964, 586),
  (0x73696E, 599),
  (0x736A64, 355),
  (0x736A6F, 585),
  (0x736B72, 607),
  (0x736C6B, 590),
  (0x736C76, 593),
  (0x736D61, 610),
  (0x736D65, 487),
  (0x736D6A, 392),
  (0x736D6E, 289),
  (0x736D6F, 595),
  (0x736D73, 589),
  (0x736E61, 597),
  (0x736E64, 598),
  (0x736E6B, 600),
  (0x736F6D, 594),
  (0x736F70, 602),
  (0x736F74, 603),
  (0x737061, 203),
  (0x737169, 604),
  (0x737264, 606),
  (0x737270, 605),
  (0x737272, 608),
  (0x737273, 62),
  (0x737377, 619),
  (0x737471, 611),
  (0x737476, 587),
  (0x73756B, 612),
  (0x73756E, 613),
  (0x737571, 614),
  (0x737661, 615),
  (0x737761, 618),
  (0x737762, 158),
  (0x737765, 616),
  (0x737776, 411),
  (0x737875, 621),
  (0x737963, 631),
  (0x737963, 629),
  (0x737963, 625),
  (0x737963, 633),
  (0x73796C, 622),
  (0x737972, 632),
  (0x737972, 634),
  (0x737972, 624),
  (0x737972, 630),
  (0x737A6C, 635),
  (0x746161, 35),
  (0x746162, 636),
  (0x746168, 649),
  (0x74616D, 638),
  (0x746174, 639),
  (0x746175, 36),
  (0x746362, 37),
  (0x746365, 39),
  (0x746370, 540),
  (0x746379, 666),
  (0x74637A, 536),
  (0x746464, 641),
  (0x74656C, 642),
  (0x74656D, 654),
  (0x746574, 643),
  (0x74666E, 34),
  (0x74676A, 477),
  (0x74676B, 637),
  (0x74676C, 644),
  (0x746778, 32),
  (0x746861, 648),
  (0x746874, 41),
  (0x746967, 646),
  (0x746972, 647),
  (0x746976, 651),
  (0x746D68, 653),
  (0x746F64, 660),
  (0x746F69, 658),
  (0x746F6C, 28),
  (0x746F6E, 645),
  (0x747069, 661),
  (0x747275, 623),
  (0x747275, 665),
  (0x74736A, 664),
  (0x74736E, 655),
  (0x74736F, 663),
  (0x74746D, 40),
  (0x74756B, 652),
  (0x74756D, 667),
  (0x747572, 662),
  (0x747575, 29),
  (0x74766C, 669),
  (0x747863, 22),
  (0x747976, 668),
  (0x74797A, 671),
  (0x747A6D, 672),
  (0x747A6F, 673),
  (0x75626C, 88),
  (0x75646D, 674),
  (0x756967, 679),
  (0x756B72, 675),
  (0x756D62, 676),
  (0x756E72, 456),
  (0x757264, 677),
  (0x757A62, 680),
  (0x766563, 681),
  (0x76656E, 682),
  (0x766965, 683),
  (0x766C73, 216),
  (0x766D77, 405),
  (0x766F6C, 684),
  (0x76726F, 685),
  (0x776172, 687),
  (0x776272, 686),
  (0x776C63, 159),
  (0x776C65, 588),
  (0x776C6B, 24),
  (0x776C6E, 691),
  (0x776E69, 160),
  (0x776F6C, 690),
  (0x777279, 413),
  (0x77746D, 692),
  (0x78616C, 329),
  (0x78616C, 659),
  (0x78616E, 578),
  (0x78686F, 694),
  (0x786A62, 695),
  (0x786B66, 696),
  (0x786F67, 697),
  (0x787065, 698),
  (0x78736C, 592),
  (0x78736C, 609),
  (0x78736C, 61),
  (0x79616F, 700),
  (0x796170, 701),
  (0x796964, 297),
  (0x796F72, 702),
  (0x79726B, 657),
  (0x79726B, 219),
  (0x7A646A, 161),
  (0x7A6561, 705),
  (0x7A6768, 706),
  (0x7A6861, 707),
  (0x7A6E65, 712),
  (0x7A6F6D, 535),
  (0x7A756C, 713),
  (0x7A756D, 387),
  (0x7A7A61, 714),
]

///|
let text_lang_entries : ReadOnlyArray[(String, String)] = [
  ("Abaza", "abq"),
  ("Abkhazian", "ab"),
  ("Acoli", "ach"),
  ("Achi", "acr"),
  ("Adyghe", "ady"),
  ("Afrikaans", "af"),
  ("Afar", "aa"),
  ("Qimant", "ahg"),
  ("Aiton", "aio"),
  ("Akan", "ak"),
  ("Swiss German", "gsw"),
  ("Northern Altai", "atv"),
  ("Southern Altai", "alt"),
  ("Amharic", "am"),
  ("Old English (ca. 450-1100)", "ang"),
  ("Arabic", "ar"),
  ("Aragonese", "an"),
  ("Aari", "aiw"),
  ("Marma", "rmz"),
  ("Rakhine", "rki"),
  ("Assamese", "as"),
  ("Asturian", "ast"),
  ("Tsetsaut", "txc"),
  ("Mattole", "mvb"),
  ("Wailaki", "wlk"),
  ("Coquille", "coq"),
  ("Chetco", "ctc"),
  ("Galice", "gce"),
  ("Tolowa", "tol"),
  ("Tututni", "tuu"),
  ("Kaska", "kkz"),
  ("Hupa", "hup"),
  ("Tagish", "tgx"),
  ("Ahtena", "aht"),
  ("Tanaina", "tfn"),
  ("Lower Tanana", "taa"),
  ("Upper Tanana", "tau"),
  ("Tanacross", "tcb"),
  ("Upper Kuskokwim", "kuu"),
  ("Southern Tutchone", "tce"),
  ("Northern Tutchone", "ttm"),
  ("Tahltan", "tht"),
  ("Koyukon", "koy"),
  ("Kato", "ktw"),
  ("Degexit'an", "ing"),
  ("Kiowa Apache", "apk"),
  ("Jicarilla Apache", "apj"),
  ("Lipan Apache", "apl"),
  ("Mescalero-Chiricahua Apache", "apm"),
  ("Western Apache", "apw"),
  ("Navajo", "nv"),
  ("Beaver", "bea"),
  ("Sekani", "sek"),
  ("Babine", "bcr"),
  ("Southern Carrier", "caf"),
  ("Chilcotin", "clc"),
  ("Gwichʼin", "gwi"),
  ("Han", "haa"),
  ("Chipewyan", "chp"),
  ("Dogrib", "dgr"),
  ("North Slavey", "scs"),
  ("South Slavey", "xsl"),
  ("Sarsi", "srs"),
  ("Holikachuk", "hoi"),
  ("Carrier", "crx"),
  ("Avaric", "av"),
  ("Awadhi", "awa"),
  ("Aymara", "ay"),
  ("South Azerbaijani", "azb"),
  ("Azerbaijani", "az"),
  ("Badaga", "bfq"),
  ("Bagheli", "bfy"),
  ("Karachay-Balkar", "krc"),
  ("Balinese", "ban"),
  ("Bavarian", "bar"),
  ("Baoulé", "bci"),
  ("Batak Toba", "bbc"),
  ("Bench", "bcq"),
  ("Bandjalang", "bdy"),
  ("Belarusian", "be"),
  ("Bemba (Zambia)", "bem"),
  ("Bengali", "bn"),
  ("Haryanvi", "bgc"),
  ("Bagri", "bgq"),
  ("Bulgarian", "bg"),
  ("Bhilali", "bhi"),
  ("Bhili", "bhb"),
  ("Bhojpuri", "bho"),
  ("Buhi'non Bikol", "ubl"),
  ("Miraya Bikol", "rbl"),
  ("Libon Bikol", "lbl"),
  ("West Albay Bikol", "fbl"),
  ("Bikol", "bik"),
  ("Northern Catanduanes Bikol", "cts"),
  ("Central Bikol", "bcl"),
  ("Southern Catanduanes Bikol", "bln"),
  ("Rinconada Bikol", "bto"),
  ("Bilin", "byn"),
  ("Bislama", "bi"),
  ("Kanauji", "bjj"),
  ("Siksika", "bla"),
  ("Baluchi", "bal"),
  ("Pa'o Karen", "blk"),
  ("Balanta-Kentohe", "ble"),
  ("Balanta-Ganja", "bjt"),
  ("Balti", "bft"),
  ("Bambara", "bm"),
  ("Bosnian", "bs"),
  ("Bishnupriya", "bpy"),
  ("Breton", "br"),
  ("Brahui", "brh"),
  ("Braj", "bra"),
  ("Burmese", "my"),
  ("Bodo (India)", "brx"),
  ("Bashkir", "ba"),
  ("Burushaski", "bsk"),
  ("Bebele", "beb"),
  ("Bulu (Cameroon)", "bum"),
  ("Bebil", "bxp"),
  ("Eton (Cameroon)", "eto"),
  ("Ewondo", "ewo"),
  ("Mengisa", "mct"),
  ("Batak Simalungun", "bts"),
  ("Buginese", "bug"),
  ("Medumba", "byv"),
  ("Kaqchikel", "cak"),
  ("Catalan", "ca"),
  ("Chavacano", "cbk"),
  ("Usila Chinantec", "cuc"),
  ("Tlacoatzintepec Chinantec", "ctl"),
  ("Tepinapa Chinantec", "cte"),
  ("Sochiapam Chinantec", "cso"),
  ("Chiltepec Chinantec", "csa"),
  ("Valle Nacional Chinantec", "cvn"),
  ("Palantla Chinantec", "cpa"),
  ("Lalana Chinantec", "cnl"),
  ("Lealao Chinantec", "cle"),
  ("Ozumacín Chinantec", "chz"),
  ("Quiotepec Chinantec", "chq"),
  ("Ojitlán Chinantec", "chj"),
  ("Comaltepec Chinantec", "cco"),
  ("Tepetotutla Chinantec", "cnt"),
  ("Cebuano", "ceb"),
  ("Chiga", "cgg"),
  ("Chamorro", "ch"),
  ("Chechen", "ce"),
  ("Sebat Bet Gurage", "sgw"),
  ("Chhattisgarhi", "hne"),
  ("Nyanja", "ny"),
  ("Chukot", "ckt"),
  ("Chuukese", "chk"),
  ("Choctaw", "cho"),
  ("Chipewyan", "chp"),
  ("Cherokee", "chr"),
  ("Chuvash", "cv"),
  ("Cheyenne", "chy"),
  ("Western Cham", "cja"),
  ("Eastern Cham", "cjm"),
  ("Maore Comorian", "swb"),
  ("Mwali Comorian", "wlc"),
  ("Ndzwani Comorian", "wni"),
  ("Ngazidja Comorian", "zdj"),
  ("Coptic", "cop"),
  ("Cornish", "kw"),
  ("Corsican", "co"),
  ("Cree", "cr"),
  ("Southern Carrier", "caf"),
  ("Carrier", "crx"),
  ("Crimean Tatar", "crh"),
  ("Kashubian", "csb"),
  ("Church Slavic", "cu"),
  ("Czech", "cs"),
  ("Chittagonian", "ctg"),
  ("San Blas Kuna", "cuk"),
  ("Danish", "da"),
  ("Dargwa", "dar"),
  ("Dayi", "dax"),
  ("Woods Cree", "cwd"),
  ("German", "de"),
  ("Dogri (individual language)", "dgo"),
  ("Dogri (macrolanguage)", "doi"),
  ("Dhangu-Djangu", "dhg"),
  ("Dimli (individual language)", "diq"),
  ("Dhivehi", "dv"),
  ("Zarma", "dje"),
  ("Djambarrpuyngu", "djr"),
  ("Adangme", "ada"),
  ("Dan", "dnj"),
  ("Dinka", "din"),
  ("Dari", "prs"),
  ("Dhuwal", "dwu"),
  ("Dhuwaya", "dwy"),
  ("Dungan", "dng"),
  ("Dzongkha", "dz"),
  ("Ebira", "igb"),
  ("Southern East Cree", "crj"),
  ("Northern East Cree", "crl"),
  ("Bini", "bin"),
  ("Efik", "efi"),
  ("Modern Greek (1453-)", "el"),
  ("Eastern Maninkakan", "emk"),
  ("English", "en"),
  ("Erzya", "myv"),
  ("Spanish", "es"),
  ("Central Yupik", "esu"),
  ("Estonian", "et"),
  ("Basque", "eu"),
  ("Evenki", "evn"),
  ("Even", "eve"),
  ("Ewe", "ee"),
  ("Saint Lucian Creole French", "acf"),
  ("Fang (Equatorial Guinea)", "fan"),
  ("Persian", "fa"),
  ("Fanti", "fat"),
  ("Finnish", "fi"),
  ("Fijian", "fj"),
  ("Vlaams", "vls"),
  ("Fe'fe'", "fmp"),
  ("Forest Enets", "enf"),
  ("Nenets", "yrk"),
  ("Fon", "fon"),
  ("Faroese", "fo"),
  ("French", "fr"),
  ("Cajun French", "frc"),
  ("Western Frisian", "fy"),
  ("Friulian", "fur"),
  ("Arpitan", "frp"),
  ("Pular", "fuf"),
  ("Fulah", "ff"),
  ("Nigerian Fulfulde", "fuv"),
  ("Ga", "gaa"),
  ("Scottish Gaelic", "gd"),
  ("Gagauz", "gag"),
  ("Galician", "gl"),
  ("Garhwali", "gbm"),
  ("Geez", "gez"),
  ("Githabul", "gih"),
  ("Gilyak", "niv"),
  ("Gilbertese", "gil"),
  ("Guinea Kpelle", "gkp"),
  ("Gilaki", "glk"),
  ("Gumuz", "guk"),
  ("Gumatj", "gnn"),
  ("Gogo", "gog"),
  ("Gondi", "gon"),
  ("Kalaallisut", "kl"),
  ("Garo", "grt"),
  ("Guarani", "gn"),
  ("Wayuu", "guc"),
  ("Gupapuyngu", "guf"),
  ("Gujarati", "gu"),
  ("Gusii", "guz"),
  ("Haitian", "ht"),
  ("Falam Chin", "cfm"),
  ("Ranglong", "rnl"),
  ("Hadothi", "hoj"),
  ("Hausa", "ha"),
  ("Hawaiian", "haw"),
  ("Haya", "hay"),
  ("Hazaragi", "haz"),
  ("Hamer-Banna", "amf"),
  ("Herero", "hz"),
  ("Hiligaynon", "hil"),
  ("Hindi", "hi"),
  ("Western Mari", "mrj"),
  ("Hmong", "hmn"),
  ("Hiri Motu", "ho"),
  ("Southern Hindko", "hnd"),
  ("Northern Hindko", "hno"),
  ("Harari", "har"),
  ("Croatian", "hr"),
  ("Hungarian", "hu"),
  ("Armenian", "hy"),
  ("Armenian", "hy"),
  ("Iban", "iba"),
  ("Ibibio", "ibb"),
  ("Igbo", "ig"),
  ("Ido", "io"),
  ("Izon", "ijc"),
  ("Interlingue", "ie"),
  ("Iloko", "ilo"),
  ("Interlingua (International Auxiliary Language Association)", "ia"),
  ("Indonesian", "id"),
  ("Ingush", "inh"),
  ("Inuktitut", "iu"),
  ("Inupiaq", "ik"),
  ("Irish", "ga"),
  ("Irish", "ga"),
  ("Icelandic", "is"),
  ("Inari Sami", "smn"),
  ("Italian", "it"),
  ("Hebrew", "he"),
  ("Jamaican Creole English", "jam"),
  ("Japanese", "ja"),
  ("Javanese", "jv"),
  ("Lojban", "jbo"),
  ("Krymchak", "jct"),
  ("Yiddish", "yi"),
  ("Ladino", "lad"),
  ("Dyula", "dyu"),
  ("Kabardian", "kbd"),
  ("Kabyle", "kab"),
  ("Kachhi", "kfr"),
  ("Kalenjin", "kln"),
  ("Kannada", "kn"),
  ("Karachay-Balkar", "krc"),
  ("Georgian", "ka"),
  ("Kazakh", "kk"),
  ("Makonde", "kde"),
  ("Kabuverdianu", "kea"),
  ("Kambaata", "ktb"),
  ("Kekchí", "kek"),
  ("Georgian", "ka"),
  ("Khakas", "kjh"),
  ("Khanty", "kca"),
  ("Central Khmer", "km"),
  ("Khanty", "kca"),
  ("Khamti", "kht"),
  ("Khanty", "kca"),
  ("Khowar", "khw"),
  ("Kikuyu", "ki"),
  ("Kirghiz", "ky"),
  ("Southern Kisi", "kss"),
  ("Northern Kissi", "kqs"),
  ("Kirmanjki (individual language)", "kiu"),
  ("Southern Kiwai", "kjd"),
  ("Pwo Eastern Karen", "kjp"),
  ("Bumthangkha", "kjz"),
  ("Kukna", "kex"),
  ("Kalmyk", "xal"),
  ("Kamba (Kenya)", "kam"),
  ("Kumaoni", "kfy"),
  ("Komo (Democratic Republic of Congo)", "kmw"),
  ("Konso", "kxc"),
  ("Khorasani Turkish", "kmz"),
  ("Kanuri", "kr"),
  ("Kodava", "kfa"),
  ("Middle Korean (10th-16th cent.)", "okm"),
  ("Konkani (macrolanguage)", "kok"),
  ("Komi", "kv"),
  ("Kituba (Democratic Republic of Congo)", "ktu"),
  ("Kongo", "kg"),
  ("Komi-Permyak", "koi"),
  ("Korean", "ko"),
  ("Kosraean", "kos"),
  ("Komi-Zyrian", "kpv"),
  ("Kpelle", "kpe"),
  ("Krio", "kri"),
  ("Kara-Kalpak", "kaa"),
  ("Karelian", "krl"),
  ("Karaim", "kdr"),
  ("Koorete", "kqy"),
  ("Kashmiri", "ks"),
  ("Kölsch", "ksh"),
  ("Khasi", "kha"),
  ("Kildin Sami", "sjd"),
  ("S'gaw Karen", "ksw"),
  ("Kuanyama", "kj"),
  ("Kui (India)", "kxu"),
  ("Kullu Pahari", "kfx"),
  ("Kumyk", "kum"),
  ("Kurdish", "ku"),
  ("Kurukh", "kru"),
  ("Kuy", "kdt"),
  ("Koryak", "kpy"),
  ("Western Kayah", "kyu"),
  ("Ladin", "lld"),
  ("Gahri", "bfu"),
  ("Lak", "lbe"),
  ("Lambadi", "lmn"),
  ("Lao", "lo"),
  ("Latin", "la"),
  ("Laz", "lzz"),
  ("Moose Cree", "crm"),
  ("Ladakhi", "lbj"),
  ("Lezghian", "lez"),
  ("Ligurian", "lij"),
  ("Limburgan", "li"),
  ("Lingala", "ln"),
  ("Lisu", "lis"),
  ("Lampung Api", "ljp"),
  ("Laki", "lki"),
  ("Eastern Mari", "mhr"),
  ("Limbu", "lif"),
  ("Lombard", "lmo"),
  ("Lomwe", "ngl"),
  ("Loma (Liberia)", "lom"),
  ("Kumzari", "zum"),
  ("Bakhtiari", "bqi"),
  ("Northern Luri", "lrc"),
  ("Southern Luri", "luz"),
  ("Lower Sorbian", "dsb"),
  ("Lule Sami", "smj"),
  ("Lithuanian", "lt"),
  ("Luxembourgish", "lb"),
  ("Luba-Lulua", "lua"),
  ("Luba-Katanga", "lu"),
  ("Ganda", "lg"),
  ("Luyia", "luy"),
  ("Luo (Kenya and Tanzania)", "luo"),
  ("Latvian", "lv"),
  ("Madurese", "mad"),
  ("Magahi", "mag"),
  ("Marshallese", "mh"),
  ("Majang", "mpe"),
  ("Makhuwa", "vmw"),
  ("Malayalam", "ml"),
  ("Mam", "mam"),
  ("Mansi", "mns"),
  ("Mapudungun", "arn"),
  ("Marathi", "mr"),
  ("Shekhawati", "swv"),
  ("Mewari", "mtr"),
  ("Merwari", "wry"),
  ("Marwari", "mwr"),
  ("Marwari (India)", "rwr"),
  ("Dhundari", "dhd"),
  ("Marwari (Pakistan)", "mve"),
  ("Kimbundu", "kmb"),
  ("Mbo (Cameroon)", "mbo"),
  ("Manchu", "mnc"),
  ("Moose Cree", "crm"),
  ("Mende (Sierra Leone)", "men"),
  ("Mandar", "mdr"),
  ("Me'en", "mym"),
  ("Meru", "mer"),
  ("Pattani Malay", "mfa"),
  ("Morisyen", "mfe"),
  ("Minangkabau", "min"),
  ("Lushai", "lus"),
  ("Macedonian", "mk"),
  ("Makasar", "mak"),
  ("Kituba (Congo)", "mkw"),
  ("Male (Ethiopia)", "mdy"),
  ("Malagasy", "mg"),
  ("Western Maninkakan", "mlq"),
  ("Malayalam", "ml"),
  ("Malay (macrolanguage)", "ms"),
  ("Mandinka", "mnk"),
  ("Mongolian", "mn"),
  ("Manipuri", "mni"),
  ("Western Maninkakan", "mlq"),
  ("Eastern Maninkakan", "emk"),
  ("Sankaran Maninka", "msc"),
  ("Kita Maninkakan", "mwk"),
  ("Mandinka", "mnk"),
  ("Konyanka Maninka", "mku"),
  ("Mandingo", "man"),
  ("Manx", "gv"),
  ("Mohawk", "moh"),
  ("Moksha", "mdf"),
  ("Mon", "mnw"),
  ("Mossi", "mos"),
  ("Maori", "mi"),
  ("Maithili", "mai"),
  ("Maltese", "mt"),
  ("Mundari", "unr"),
  ("Creek", "mus"),
  ("Mirandese", "mwl"),
  ("Hmong Daw", "mww"),
  ("Mazanderani", "mzn"),
  ("Naga Pidgin", "nag"),
  ("Nanai", "gld"),
  ("Neapolitan", "nap"),
  ("Naskapi", "nsk"),
  ("Nauru", "na"),
  ("Navajo", "nv"),
  ("Swampy Cree", "csw"),
  ("South Ndebele", "nr"),
  ("North Ndebele", "nd"),
  ("Ndau", "ndc"),
  ("Ndonga", "ng"),
  ("Low German", "nds"),
  ("Nepali (macrolanguage)", "ne"),
  ("Newari", "new"),
  ("Ngbaka", "nga"),
  ("Swampy Cree", "csw"),
  ("Tagin", "tgj"),
  ("Nyishi", "njz"),
  ("Niuean", "niu"),
  ("Nyankole", "nyn"),
  ("N'Ko", "nqo"),
  ("Dutch", "nl"),
  ("Nimadi", "noe"),
  ("Nogai", "nog"),
  ("Norwegian Bokmål", "nb"),
  ("Novial", "nov"),
  ("Northern Sami", "se"),
  ("Pedi", "nso"),
  ("Northern Thai", "nod"),
  ("Esperanto", "eo"),
  ("Nyamwezi", "nym"),
  ("Norwegian Nynorsk", "nn"),
  ("Tigon Mbembe", "nza"),
  ("Occitan (post 1500)", "oc"),
  ("Severn Ojibwa", "ojs"),
  ("Ojibwa", "oj"),
  ("Oriya (macrolanguage)", "or"),
  ("Oromo", "om"),
  ("Ossetian", "os"),
  ("Samaritan Aramaic", "sam"),
  ("Pangasinan", "pag"),
  ("Pali", "pi"),
  ("Pampanga", "pam"),
  ("Panjabi", "pa"),
  ("Palpa", "plp"),
  ("Papiamento", "pap"),
  ("Pushto", "ps"),
  ("Palauan", "pau"),
  ("Bouyei", "pcc"),
  ("Picard", "pcd"),
  ("Pennsylvania German", "pdc"),
  ("Modern Greek (1453-)", "el"),
  ("Phake", "phk"),
  ("Pitcairn-Norfolk", "pih"),
  ("Filipino", "fil"),
  ("Ruching Palaung", "pce"),
  ("Rumai Palaung", "rbb"),
  ("Shwe Palaung", "pll"),
  ("Polish", "pl"),
  ("Piemontese", "pms"),
  ("Western Panjabi", "pnb"),
  ("Poqomchi'", "poh"),
  ("Pohnpeian", "pon"),
  ("Old Provençal (to 1500)", "pro"),
  ("Portuguese", "pt"),
  ("Pwo Western Karen", "pwo"),
  ("Asho Chin", "csh"),
  ("Chinbon Chin", "cnb"),
  ("Bualkhaw Chin", "cbl"),
  ("Mara Chin", "mrh"),
  ("Khumi Chin", "cnk"),
  ("Matu Chin", "hlt"),
  ("Daai Chin", "dao"),
  ("Mro-Khimi Chin", "cmr"),
  ("Zou", "zom"),
  ("Thado Chin", "tcz"),
  ("Paite Chin", "pck"),
  ("Tedim Chin", "ctd"),
  ("Siyin Chin", "csy"),
  ("Tawr Chin", "tcp"),
  ("Senthang Chin", "sez"),
  ("Zotung Chin", "czt"),
  ("Ngawn Chin", "cnw"),
  ("Hakha Chin", "cnh"),
  ("Bawm Chin", "bgr"),
  ("K'iche'", "quc"),
  ("South Bolivian Quechua", "quh"),
  ("Cusco Quechua", "quz"),
  ("Imbabura Highland Quichua", "qvi"),
  ("Huaylas Ancash Quechua", "qwh"),
  ("Rajasthani", "raj"),
  ("Rarotongan", "rar"),
  ("Russia Buriat", "bxr"),
  ("Atikamekw", "atj"),
  ("Rejang", "rej"),
  ("Riang (India)", "ria"),
  ("Tarifit", "rif"),
  ("Ritarungo", "rit"),
  ("Arakwal", "rkw"),
  ("Romansh", "rm"),
  ("Vlax Romani", "rmy"),
  ("Romanian", "ro"),
  ("Romany", "rom"),
  ("Rusyn", "rue"),
  ("Rotuman", "rtm"),
  ("Kinyarwanda", "rw"),
  ("Rundi", "rn"),
  ("Macedo-Romanian", "rup"),
  ("Russian", "ru"),
  ("Sadri", "sck"),
  ("Sanskrit", "sa"),
  ("Sasak", "sas"),
  ("Santali", "sat"),
  ("Chipewyan", "chp"),
  ("Sicilian", "scn"),
  ("Scots", "sco"),
  ("North Slavey", "scs"),
  ("Xamtanga", "xan"),
  ("Selkup", "sel"),
  ("Old Irish (to 900)", "sga"),
  ("Sango", "sg"),
  ("Samogitian", "sgs"),
  ("Tachelhit", "shi"),
  ("Shan", "shn"),
  ("Xibe", "sjo"),
  ("Sidamo", "sid"),
  ("Silt'e", "stv"),
  ("Wolane", "wle"),
  ("Skolt Sami", "sms"),
  ("Slovak", "sk"),
  ("North Slavey", "scs"),
  ("South Slavey", "xsl"),
  ("Slovenian", "sl"),
  ("Somali", "so"),
  ("Samoan", "sm"),
  ("Sena", "seh"),
  ("Shona", "sn"),
  ("Sindhi", "sd"),
  ("Sinhala", "si"),
  ("Soninke", "snk"),
  ("Kistane", "gru"),
  ("Songe", "sop"),
  ("Southern Sotho", "st"),
  ("Albanian", "sq"),
  ("Serbian", "sr"),
  ("Sardinian", "sc"),
  ("Saraiki", "skr"),
  ("Serer", "srr"),
  ("South Slavey", "xsl"),
  ("Southern Sami", "sma"),
  ("Saterfriesisch", "stq"),
  ("Sukuma", "suk"),
  ("Sundanese", "su"),
  ("Suri", "suq"),
  ("Svan", "sva"),
  ("Swedish", "sv"),
  ("Assyrian Neo-Aramaic", "aii"),
  ("Swahili (macrolanguage)", "sw"),
  ("Swati", "ss"),
  ("Ngoni", "ngo"),
  ("Upper Saxon", "sxu"),
  ("Sylheti", "syl"),
  ("Turoyo", "tru"),
  ("Syriac", "syr"),
  ("Classical Syriac", "syc"),
  ("Chaldean Neo-Aramaic", "cld"),
  ("Western Neo-Aramaic", "amw"),
  ("Assyrian Neo-Aramaic", "aii"),
  ("Classical Syriac", "syc"),
  ("Syriac", "syr"),
  ("Classical Syriac", "syc"),
  ("Syriac", "syr"),
  ("Classical Syriac", "syc"),
  ("Syriac", "syr"),
  ("Silesian", "szl"),
  ("Tabassaran", "tab"),
  ("Tajik", "tg"),
  ("Tamil", "ta"),
  ("Tatar", "tt"),
  ("Woods Cree", "cwd"),
  ("Tai Nüa", "tdd"),
  ("Telugu", "te"),
  ("Tetum", "tet"),
  ("Tagalog", "tl"),
  ("Tonga (Tonga Islands)", "to"),
  ("Tigre", "tig"),
  ("Tigrinya", "ti"),
  ("Thai", "th"),
  ("Tahitian", "ty"),
  ("Tibetan", "bo"),
  ("Tiv", "tiv"),
  ("Turkmen", "tk"),
  ("Tamashek", "tmh"),
  ("Timne", "tem"),
  ("Tswana", "tn"),
  ("Tundra Enets", "enh"),
  ("Nenets", "yrk"),
  ("Tonga (Zambia)", "toi"),
  ("Kalmyk", "xal"),
  ("Toma", "tod"),
  ("Tok Pisin", "tpi"),
  ("Turkish", "tr"),
  ("Tsonga", "ts"),
  ("Tshangla", "tsj"),
  ("Turoyo", "tru"),
  ("Tulu", "tcy"),
  ("Tumbuka", "tum"),
  ("Tuvinian", "tyv"),
  ("Tuvalu", "tvl"),
  ("Akan", "ak"),
  ("Tày", "tyz"),
  ("Central Atlas Tamazight", "tzm"),
  ("Tzotzil", "tzo"),
  ("Udmurt", "udm"),
  ("Ukrainian", "uk"),
  ("Umbundu", "umb"),
  ("Urdu", "ur"),
  ("Upper Sorbian", "hsb"),
  ("Uighur", "ug"),
  ("Uzbek", "uz"),
  ("Venetian", "vec"),
  ("Venda", "ve"),
  ("Vietnamese", "vi"),
  ("Volapük", "vo"),
  ("Võro", "vro"),
  ("Wagdi", "wbr"),
  ("Waray (Philippines)", "war"),
  ("Plains Cree", "crk"),
  ("Welsh", "cy"),
  ("Wolof", "wo"),
  ("Walloon", "wa"),
  ("Mewati", "wtm"),
  ("Lü", "khb"),
  ("Xhosa", "xh"),
  ("Minjungbal", "xjb"),
  ("Khengkha", "xkf"),
  ("Soga", "xog"),
  ("Liberia Kpelle", "xpe"),
  ("Yakut", "sah"),
  ("Yao", "yao"),
  ("Yapese", "yap"),
  ("Yoruba", "yo"),
  ("Cree", "cr"),
  ("Sichuan Yi", "ii"),
  ("Zeeuws", "zea"),
  ("Standard Moroccan Tamazight", "zgh"),
  ("Zhuang", "za"),
  ("Chinese", "zh"),
  ("Chinese", "zh"),
  ("Chinese", "zh"),
  ("Chinese", "zh"),
  ("Zande (individual language)", "zne"),
  ("Zulu", "zu"),
  ("Zaza", "zza"),
]