diff --git a/.php_cs.dist b/.php_cs.dist index 22b4c1d..8b8dfd6 100644 --- a/.php_cs.dist +++ b/.php_cs.dist @@ -1,4 +1,5 @@ false]): Result { - $t = $this->taskExec(norm(BASE."vendor/bin/php-cs-fixer")); - $t->arg("fix"); + $t = $this->taskExec(realpath(BASE."vendor/bin/php-cs-fixer")); + $t->arg("fix")->arg("--allow-risky=yes"); if ($opts['demo']) { $t->args("--dry-run", "--diff")->option("--diff-format", "udiff"); } diff --git a/composer.json b/composer.json index 0896247..b6a63e7 100644 --- a/composer.json +++ b/composer.json @@ -13,7 +13,7 @@ ], "require": { - "php": "^7.0" + "php": "^7.1" }, "require-dev": { "ext-intl": "*", diff --git a/lib/Encoding.php b/lib/Encoding.php index b613742..a2ff2c4 100644 --- a/lib/Encoding.php +++ b/lib/Encoding.php @@ -6,11 +6,25 @@ declare(strict_types=1); namespace MensBeam\Intl; +use MensBeam\Intl\Encoding\Decoder; +use MensBeam\Intl\Encoding\Coder; +use MensBeam\Intl\Encoding\Encoder; +use MensBeam\Intl\Encoding\EncoderException; + abstract class Encoding { - const LABEL_MAP = ['big5'=>"Big5",'big5-hkscs'=>"Big5",'cn-big5'=>"Big5",'csbig5'=>"Big5",'x-x-big5'=>"Big5",'cseuckr'=>"EUC-KR",'csksc56011987'=>"EUC-KR",'euc-kr'=>"EUC-KR",'iso-ir-149'=>"EUC-KR",'korean'=>"EUC-KR",'ks_c_5601-1987'=>"EUC-KR",'ks_c_5601-1989'=>"EUC-KR",'ksc5601'=>"EUC-KR",'ksc_5601'=>"EUC-KR",'windows-949'=>"EUC-KR",'gb18030'=>"gb18030",'chinese'=>"GBK",'csgb2312'=>"GBK",'csiso58gb231280'=>"GBK",'gb2312'=>"GBK",'gb_2312'=>"GBK",'gb_2312-80'=>"GBK",'gbk'=>"GBK",'iso-ir-58'=>"GBK",'x-gbk'=>"GBK",'866'=>"IBM866",'cp866'=>"IBM866",'csibm866'=>"IBM866",'ibm866'=>"IBM866",'csisolatin6'=>"ISO-8859-10",'iso-8859-10'=>"ISO-8859-10",'iso-ir-157'=>"ISO-8859-10",'iso8859-10'=>"ISO-8859-10",'iso885910'=>"ISO-8859-10",'l6'=>"ISO-8859-10",'latin6'=>"ISO-8859-10",'iso-8859-13'=>"ISO-8859-13",'iso8859-13'=>"ISO-8859-13",'iso885913'=>"ISO-8859-13",'iso-8859-14'=>"ISO-8859-14",'iso8859-14'=>"ISO-8859-14",'iso885914'=>"ISO-8859-14",'csisolatin9'=>"ISO-8859-15",'iso-8859-15'=>"ISO-8859-15",'iso8859-15'=>"ISO-8859-15",'iso885915'=>"ISO-8859-15",'iso_8859-15'=>"ISO-8859-15",'l9'=>"ISO-8859-15",'iso-8859-16'=>"ISO-8859-16",'csisolatin2'=>"ISO-8859-2",'iso-8859-2'=>"ISO-8859-2",'iso-ir-101'=>"ISO-8859-2",'iso8859-2'=>"ISO-8859-2",'iso88592'=>"ISO-8859-2",'iso_8859-2'=>"ISO-8859-2",'iso_8859-2:1987'=>"ISO-8859-2",'l2'=>"ISO-8859-2",'latin2'=>"ISO-8859-2",'csisolatin3'=>"ISO-8859-3",'iso-8859-3'=>"ISO-8859-3",'iso-ir-109'=>"ISO-8859-3",'iso8859-3'=>"ISO-8859-3",'iso88593'=>"ISO-8859-3",'iso_8859-3'=>"ISO-8859-3",'iso_8859-3:1988'=>"ISO-8859-3",'l3'=>"ISO-8859-3",'latin3'=>"ISO-8859-3",'csisolatin4'=>"ISO-8859-4",'iso-8859-4'=>"ISO-8859-4",'iso-ir-110'=>"ISO-8859-4",'iso8859-4'=>"ISO-8859-4",'iso88594'=>"ISO-8859-4",'iso_8859-4'=>"ISO-8859-4",'iso_8859-4:1988'=>"ISO-8859-4",'l4'=>"ISO-8859-4",'latin4'=>"ISO-8859-4",'csisolatincyrillic'=>"ISO-8859-5",'cyrillic'=>"ISO-8859-5",'iso-8859-5'=>"ISO-8859-5",'iso-ir-144'=>"ISO-8859-5",'iso8859-5'=>"ISO-8859-5",'iso88595'=>"ISO-8859-5",'iso_8859-5'=>"ISO-8859-5",'iso_8859-5:1988'=>"ISO-8859-5",'arabic'=>"ISO-8859-6",'asmo-708'=>"ISO-8859-6",'csiso88596e'=>"ISO-8859-6",'csiso88596i'=>"ISO-8859-6",'csisolatinarabic'=>"ISO-8859-6",'ecma-114'=>"ISO-8859-6",'iso-8859-6'=>"ISO-8859-6",'iso-8859-6-e'=>"ISO-8859-6",'iso-8859-6-i'=>"ISO-8859-6",'iso-ir-127'=>"ISO-8859-6",'iso8859-6'=>"ISO-8859-6",'iso88596'=>"ISO-8859-6",'iso_8859-6'=>"ISO-8859-6",'iso_8859-6:1987'=>"ISO-8859-6",'csisolatingreek'=>"ISO-8859-7",'ecma-118'=>"ISO-8859-7",'elot_928'=>"ISO-8859-7",'greek'=>"ISO-8859-7",'greek8'=>"ISO-8859-7",'iso-8859-7'=>"ISO-8859-7",'iso-ir-126'=>"ISO-8859-7",'iso8859-7'=>"ISO-8859-7",'iso88597'=>"ISO-8859-7",'iso_8859-7'=>"ISO-8859-7",'iso_8859-7:1987'=>"ISO-8859-7",'sun_eu_greek'=>"ISO-8859-7",'csiso88598e'=>"ISO-8859-8",'csisolatinhebrew'=>"ISO-8859-8",'hebrew'=>"ISO-8859-8",'iso-8859-8'=>"ISO-8859-8",'iso-8859-8-e'=>"ISO-8859-8",'iso-ir-138'=>"ISO-8859-8",'iso8859-8'=>"ISO-8859-8",'iso88598'=>"ISO-8859-8",'iso_8859-8'=>"ISO-8859-8",'iso_8859-8:1988'=>"ISO-8859-8",'visual'=>"ISO-8859-8",'csiso88598i'=>"ISO-8859-8-I",'iso-8859-8-i'=>"ISO-8859-8-I",'logical'=>"ISO-8859-8-I",'cskoi8r'=>"KOI8-R",'koi'=>"KOI8-R",'koi8'=>"KOI8-R",'koi8-r'=>"KOI8-R",'koi8_r'=>"KOI8-R",'koi8-ru'=>"KOI8-U",'koi8-u'=>"KOI8-U",'csmacintosh'=>"macintosh",'mac'=>"macintosh",'macintosh'=>"macintosh",'x-mac-roman'=>"macintosh",'utf-16be'=>"UTF-16BE",'utf-16'=>"UTF-16LE",'utf-16le'=>"UTF-16LE",'unicode-1-1-utf-8'=>"UTF-8",'utf-8'=>"UTF-8",'utf8'=>"UTF-8",'cp1250'=>"windows-1250",'windows-1250'=>"windows-1250",'x-cp1250'=>"windows-1250",'cp1251'=>"windows-1251",'windows-1251'=>"windows-1251",'x-cp1251'=>"windows-1251",'ansi_x3.4-1968'=>"windows-1252",'ascii'=>"windows-1252",'cp1252'=>"windows-1252",'cp819'=>"windows-1252",'csisolatin1'=>"windows-1252",'ibm819'=>"windows-1252",'iso-8859-1'=>"windows-1252",'iso-ir-100'=>"windows-1252",'iso8859-1'=>"windows-1252",'iso88591'=>"windows-1252",'iso_8859-1'=>"windows-1252",'iso_8859-1:1987'=>"windows-1252",'l1'=>"windows-1252",'latin1'=>"windows-1252",'us-ascii'=>"windows-1252",'windows-1252'=>"windows-1252",'x-cp1252'=>"windows-1252",'cp1253'=>"windows-1253",'windows-1253'=>"windows-1253",'x-cp1253'=>"windows-1253",'cp1254'=>"windows-1254",'csisolatin5'=>"windows-1254",'iso-8859-9'=>"windows-1254",'iso-ir-148'=>"windows-1254",'iso8859-9'=>"windows-1254",'iso88599'=>"windows-1254",'iso_8859-9'=>"windows-1254",'iso_8859-9:1989'=>"windows-1254",'l5'=>"windows-1254",'latin5'=>"windows-1254",'windows-1254'=>"windows-1254",'x-cp1254'=>"windows-1254",'cp1255'=>"windows-1255",'windows-1255'=>"windows-1255",'x-cp1255'=>"windows-1255",'cp1256'=>"windows-1256",'windows-1256'=>"windows-1256",'x-cp1256'=>"windows-1256",'cp1257'=>"windows-1257",'windows-1257'=>"windows-1257",'x-cp1257'=>"windows-1257",'cp1258'=>"windows-1258",'windows-1258'=>"windows-1258",'x-cp1258'=>"windows-1258",'dos-874'=>"windows-874",'iso-8859-11'=>"windows-874",'iso8859-11'=>"windows-874",'iso885911'=>"windows-874",'tis-620'=>"windows-874",'windows-874'=>"windows-874",'x-mac-cyrillic'=>"x-mac-cyrillic",'x-mac-ukrainian'=>"x-mac-cyrillic",'x-user-defined'=>"x-user-defined"]; - const NAME_MAP = ['Big5'=>\MensBeam\Intl\Encoding\Big5::class,'EUC-KR'=>\MensBeam\Intl\Encoding\EUCKR::class,'gb18030'=>\MensBeam\Intl\Encoding\GB18030::class,'GBK'=>\MensBeam\Intl\Encoding\GBK::class,'IBM866'=>\MensBeam\Intl\Encoding\IBM866::class,'ISO-8859-10'=>\MensBeam\Intl\Encoding\ISO885910::class,'ISO-8859-13'=>\MensBeam\Intl\Encoding\ISO885913::class,'ISO-8859-14'=>\MensBeam\Intl\Encoding\ISO885914::class,'ISO-8859-15'=>\MensBeam\Intl\Encoding\ISO885915::class,'ISO-8859-16'=>\MensBeam\Intl\Encoding\ISO885916::class,'ISO-8859-2'=>\MensBeam\Intl\Encoding\ISO88592::class,'ISO-8859-3'=>\MensBeam\Intl\Encoding\ISO88593::class,'ISO-8859-4'=>\MensBeam\Intl\Encoding\ISO88594::class,'ISO-8859-5'=>\MensBeam\Intl\Encoding\ISO88595::class,'ISO-8859-6'=>\MensBeam\Intl\Encoding\ISO88596::class,'ISO-8859-7'=>\MensBeam\Intl\Encoding\ISO88597::class,'ISO-8859-8'=>\MensBeam\Intl\Encoding\ISO88598::class,'ISO-8859-8-I'=>\MensBeam\Intl\Encoding\ISO88598I::class,'KOI8-R'=>\MensBeam\Intl\Encoding\KOI8R::class,'KOI8-U'=>\MensBeam\Intl\Encoding\KOI8U::class,'macintosh'=>\MensBeam\Intl\Encoding\Macintosh::class,'UTF-16BE'=>\MensBeam\Intl\Encoding\UTF16BE::class,'UTF-16LE'=>\MensBeam\Intl\Encoding\UTF16LE::class,'UTF-8'=>\MensBeam\Intl\Encoding\UTF8::class,'windows-1250'=>\MensBeam\Intl\Encoding\Windows1250::class,'windows-1251'=>\MensBeam\Intl\Encoding\Windows1251::class,'windows-1252'=>\MensBeam\Intl\Encoding\Windows1252::class,'windows-1253'=>\MensBeam\Intl\Encoding\Windows1253::class,'windows-1254'=>\MensBeam\Intl\Encoding\Windows1254::class,'windows-1255'=>\MensBeam\Intl\Encoding\Windows1255::class,'windows-1256'=>\MensBeam\Intl\Encoding\Windows1256::class,'windows-1257'=>\MensBeam\Intl\Encoding\Windows1257::class,'windows-1258'=>\MensBeam\Intl\Encoding\Windows1258::class,'windows-874'=>\MensBeam\Intl\Encoding\Windows874::class,'x-mac-cyrillic'=>\MensBeam\Intl\Encoding\XMacCyrillic::class,'x-user-defined'=>\MensBeam\Intl\Encoding\XUserDefined::class]; + protected const LABEL_MAP = ['big5'=>"Big5",'big5-hkscs'=>"Big5",'cn-big5'=>"Big5",'csbig5'=>"Big5",'x-x-big5'=>"Big5",'cseucpkdfmtjapanese'=>"EUC-JP",'euc-jp'=>"EUC-JP",'x-euc-jp'=>"EUC-JP",'cseuckr'=>"EUC-KR",'csksc56011987'=>"EUC-KR",'euc-kr'=>"EUC-KR",'iso-ir-149'=>"EUC-KR",'korean'=>"EUC-KR",'ks_c_5601-1987'=>"EUC-KR",'ks_c_5601-1989'=>"EUC-KR",'ksc5601'=>"EUC-KR",'ksc_5601'=>"EUC-KR",'windows-949'=>"EUC-KR",'gb18030'=>"gb18030",'chinese'=>"GBK",'csgb2312'=>"GBK",'csiso58gb231280'=>"GBK",'gb2312'=>"GBK",'gb_2312'=>"GBK",'gb_2312-80'=>"GBK",'gbk'=>"GBK",'iso-ir-58'=>"GBK",'x-gbk'=>"GBK",'866'=>"IBM866",'cp866'=>"IBM866",'csibm866'=>"IBM866",'ibm866'=>"IBM866",'csiso2022jp'=>"ISO-2022-JP",'iso-2022-jp'=>"ISO-2022-JP",'csisolatin6'=>"ISO-8859-10",'iso-8859-10'=>"ISO-8859-10",'iso-ir-157'=>"ISO-8859-10",'iso8859-10'=>"ISO-8859-10",'iso885910'=>"ISO-8859-10",'l6'=>"ISO-8859-10",'latin6'=>"ISO-8859-10",'iso-8859-13'=>"ISO-8859-13",'iso8859-13'=>"ISO-8859-13",'iso885913'=>"ISO-8859-13",'iso-8859-14'=>"ISO-8859-14",'iso8859-14'=>"ISO-8859-14",'iso885914'=>"ISO-8859-14",'csisolatin9'=>"ISO-8859-15",'iso-8859-15'=>"ISO-8859-15",'iso8859-15'=>"ISO-8859-15",'iso885915'=>"ISO-8859-15",'iso_8859-15'=>"ISO-8859-15",'l9'=>"ISO-8859-15",'iso-8859-16'=>"ISO-8859-16",'csisolatin2'=>"ISO-8859-2",'iso-8859-2'=>"ISO-8859-2",'iso-ir-101'=>"ISO-8859-2",'iso8859-2'=>"ISO-8859-2",'iso88592'=>"ISO-8859-2",'iso_8859-2'=>"ISO-8859-2",'iso_8859-2:1987'=>"ISO-8859-2",'l2'=>"ISO-8859-2",'latin2'=>"ISO-8859-2",'csisolatin3'=>"ISO-8859-3",'iso-8859-3'=>"ISO-8859-3",'iso-ir-109'=>"ISO-8859-3",'iso8859-3'=>"ISO-8859-3",'iso88593'=>"ISO-8859-3",'iso_8859-3'=>"ISO-8859-3",'iso_8859-3:1988'=>"ISO-8859-3",'l3'=>"ISO-8859-3",'latin3'=>"ISO-8859-3",'csisolatin4'=>"ISO-8859-4",'iso-8859-4'=>"ISO-8859-4",'iso-ir-110'=>"ISO-8859-4",'iso8859-4'=>"ISO-8859-4",'iso88594'=>"ISO-8859-4",'iso_8859-4'=>"ISO-8859-4",'iso_8859-4:1988'=>"ISO-8859-4",'l4'=>"ISO-8859-4",'latin4'=>"ISO-8859-4",'csisolatincyrillic'=>"ISO-8859-5",'cyrillic'=>"ISO-8859-5",'iso-8859-5'=>"ISO-8859-5",'iso-ir-144'=>"ISO-8859-5",'iso8859-5'=>"ISO-8859-5",'iso88595'=>"ISO-8859-5",'iso_8859-5'=>"ISO-8859-5",'iso_8859-5:1988'=>"ISO-8859-5",'arabic'=>"ISO-8859-6",'asmo-708'=>"ISO-8859-6",'csiso88596e'=>"ISO-8859-6",'csiso88596i'=>"ISO-8859-6",'csisolatinarabic'=>"ISO-8859-6",'ecma-114'=>"ISO-8859-6",'iso-8859-6'=>"ISO-8859-6",'iso-8859-6-e'=>"ISO-8859-6",'iso-8859-6-i'=>"ISO-8859-6",'iso-ir-127'=>"ISO-8859-6",'iso8859-6'=>"ISO-8859-6",'iso88596'=>"ISO-8859-6",'iso_8859-6'=>"ISO-8859-6",'iso_8859-6:1987'=>"ISO-8859-6",'csisolatingreek'=>"ISO-8859-7",'ecma-118'=>"ISO-8859-7",'elot_928'=>"ISO-8859-7",'greek'=>"ISO-8859-7",'greek8'=>"ISO-8859-7",'iso-8859-7'=>"ISO-8859-7",'iso-ir-126'=>"ISO-8859-7",'iso8859-7'=>"ISO-8859-7",'iso88597'=>"ISO-8859-7",'iso_8859-7'=>"ISO-8859-7",'iso_8859-7:1987'=>"ISO-8859-7",'sun_eu_greek'=>"ISO-8859-7",'csiso88598e'=>"ISO-8859-8",'csisolatinhebrew'=>"ISO-8859-8",'hebrew'=>"ISO-8859-8",'iso-8859-8'=>"ISO-8859-8",'iso-8859-8-e'=>"ISO-8859-8",'iso-ir-138'=>"ISO-8859-8",'iso8859-8'=>"ISO-8859-8",'iso88598'=>"ISO-8859-8",'iso_8859-8'=>"ISO-8859-8",'iso_8859-8:1988'=>"ISO-8859-8",'visual'=>"ISO-8859-8",'csiso88598i'=>"ISO-8859-8-I",'iso-8859-8-i'=>"ISO-8859-8-I",'logical'=>"ISO-8859-8-I",'cskoi8r'=>"KOI8-R",'koi'=>"KOI8-R",'koi8'=>"KOI8-R",'koi8-r'=>"KOI8-R",'koi8_r'=>"KOI8-R",'koi8-ru'=>"KOI8-U",'koi8-u'=>"KOI8-U",'csmacintosh'=>"macintosh",'mac'=>"macintosh",'macintosh'=>"macintosh",'x-mac-roman'=>"macintosh",'csiso2022kr'=>"replacement",'hz-gb-2312'=>"replacement",'iso-2022-cn'=>"replacement",'iso-2022-cn-ext'=>"replacement",'iso-2022-kr'=>"replacement",'replacement'=>"replacement",'csshiftjis'=>"Shift_JIS",'ms932'=>"Shift_JIS",'ms_kanji'=>"Shift_JIS",'shift-jis'=>"Shift_JIS",'shift_jis'=>"Shift_JIS",'sjis'=>"Shift_JIS",'windows-31j'=>"Shift_JIS",'x-sjis'=>"Shift_JIS",'unicodefffe'=>"UTF-16BE",'utf-16be'=>"UTF-16BE",'csunicode'=>"UTF-16LE",'iso-10646-ucs-2'=>"UTF-16LE",'ucs-2'=>"UTF-16LE",'unicode'=>"UTF-16LE",'unicodefeff'=>"UTF-16LE",'utf-16'=>"UTF-16LE",'utf-16le'=>"UTF-16LE",'unicode-1-1-utf-8'=>"UTF-8",'unicode11utf8'=>"UTF-8",'unicode20utf8'=>"UTF-8",'utf-8'=>"UTF-8",'utf8'=>"UTF-8",'x-unicode20utf8'=>"UTF-8",'cp1250'=>"windows-1250",'windows-1250'=>"windows-1250",'x-cp1250'=>"windows-1250",'cp1251'=>"windows-1251",'windows-1251'=>"windows-1251",'x-cp1251'=>"windows-1251",'ansi_x3.4-1968'=>"windows-1252",'ascii'=>"windows-1252",'cp1252'=>"windows-1252",'cp819'=>"windows-1252",'csisolatin1'=>"windows-1252",'ibm819'=>"windows-1252",'iso-8859-1'=>"windows-1252",'iso-ir-100'=>"windows-1252",'iso8859-1'=>"windows-1252",'iso88591'=>"windows-1252",'iso_8859-1'=>"windows-1252",'iso_8859-1:1987'=>"windows-1252",'l1'=>"windows-1252",'latin1'=>"windows-1252",'us-ascii'=>"windows-1252",'windows-1252'=>"windows-1252",'x-cp1252'=>"windows-1252",'cp1253'=>"windows-1253",'windows-1253'=>"windows-1253",'x-cp1253'=>"windows-1253",'cp1254'=>"windows-1254",'csisolatin5'=>"windows-1254",'iso-8859-9'=>"windows-1254",'iso-ir-148'=>"windows-1254",'iso8859-9'=>"windows-1254",'iso88599'=>"windows-1254",'iso_8859-9'=>"windows-1254",'iso_8859-9:1989'=>"windows-1254",'l5'=>"windows-1254",'latin5'=>"windows-1254",'windows-1254'=>"windows-1254",'x-cp1254'=>"windows-1254",'cp1255'=>"windows-1255",'windows-1255'=>"windows-1255",'x-cp1255'=>"windows-1255",'cp1256'=>"windows-1256",'windows-1256'=>"windows-1256",'x-cp1256'=>"windows-1256",'cp1257'=>"windows-1257",'windows-1257'=>"windows-1257",'x-cp1257'=>"windows-1257",'cp1258'=>"windows-1258",'windows-1258'=>"windows-1258",'x-cp1258'=>"windows-1258",'dos-874'=>"windows-874",'iso-8859-11'=>"windows-874",'iso8859-11'=>"windows-874",'iso885911'=>"windows-874",'tis-620'=>"windows-874",'windows-874'=>"windows-874",'x-mac-cyrillic'=>"x-mac-cyrillic",'x-mac-ukrainian'=>"x-mac-cyrillic",'x-user-defined'=>"x-user-defined"]; + protected const NAME_MAP = ['Big5'=>\MensBeam\Intl\Encoding\Big5::class,'EUC-JP'=>\MensBeam\Intl\Encoding\EUCJP::class,'EUC-KR'=>\MensBeam\Intl\Encoding\EUCKR::class,'gb18030'=>\MensBeam\Intl\Encoding\GB18030::class,'GBK'=>\MensBeam\Intl\Encoding\GBK::class,'IBM866'=>\MensBeam\Intl\Encoding\IBM866::class,'ISO-2022-JP'=>\MensBeam\Intl\Encoding\ISO2022JP::class,'ISO-8859-10'=>\MensBeam\Intl\Encoding\ISO885910::class,'ISO-8859-13'=>\MensBeam\Intl\Encoding\ISO885913::class,'ISO-8859-14'=>\MensBeam\Intl\Encoding\ISO885914::class,'ISO-8859-15'=>\MensBeam\Intl\Encoding\ISO885915::class,'ISO-8859-16'=>\MensBeam\Intl\Encoding\ISO885916::class,'ISO-8859-2'=>\MensBeam\Intl\Encoding\ISO88592::class,'ISO-8859-3'=>\MensBeam\Intl\Encoding\ISO88593::class,'ISO-8859-4'=>\MensBeam\Intl\Encoding\ISO88594::class,'ISO-8859-5'=>\MensBeam\Intl\Encoding\ISO88595::class,'ISO-8859-6'=>\MensBeam\Intl\Encoding\ISO88596::class,'ISO-8859-7'=>\MensBeam\Intl\Encoding\ISO88597::class,'ISO-8859-8'=>\MensBeam\Intl\Encoding\ISO88598::class,'ISO-8859-8-I'=>\MensBeam\Intl\Encoding\ISO88598I::class,'KOI8-R'=>\MensBeam\Intl\Encoding\KOI8R::class,'KOI8-U'=>\MensBeam\Intl\Encoding\KOI8U::class,'macintosh'=>\MensBeam\Intl\Encoding\Macintosh::class,'replacement'=>\MensBeam\Intl\Encoding\Replacement::class,'Shift_JIS'=>\MensBeam\Intl\Encoding\ShiftJIS::class,'UTF-16BE'=>\MensBeam\Intl\Encoding\UTF16BE::class,'UTF-16LE'=>\MensBeam\Intl\Encoding\UTF16LE::class,'UTF-8'=>\MensBeam\Intl\Encoding\UTF8::class,'windows-1250'=>\MensBeam\Intl\Encoding\Windows1250::class,'windows-1251'=>\MensBeam\Intl\Encoding\Windows1251::class,'windows-1252'=>\MensBeam\Intl\Encoding\Windows1252::class,'windows-1253'=>\MensBeam\Intl\Encoding\Windows1253::class,'windows-1254'=>\MensBeam\Intl\Encoding\Windows1254::class,'windows-1255'=>\MensBeam\Intl\Encoding\Windows1255::class,'windows-1256'=>\MensBeam\Intl\Encoding\Windows1256::class,'windows-1257'=>\MensBeam\Intl\Encoding\Windows1257::class,'windows-1258'=>\MensBeam\Intl\Encoding\Windows1258::class,'windows-874'=>\MensBeam\Intl\Encoding\Windows874::class,'x-mac-cyrillic'=>\MensBeam\Intl\Encoding\XMacCyrillic::class,'x-user-defined'=>\MensBeam\Intl\Encoding\XUserDefined::class]; - public static function createDecoder(string $encodingLabel, string $data, bool $fatal = false, bool $allowSurrogates = false): ?\MensBeam\Intl\Encoding\Encoding { + /** Returns a new decoder for the specified $encodingLabel operating on $data, or null if the label is not valid + * + * @param string $encodingLabel One of the encoding labels listed in the specification e.g. "utf-8", "Latin1", "shift_JIS" + * @param string $data The string to decode + * @param bool $fatal If true, throw enceptions when encountering invalid input. If false, substitute U+FFFD REPLACEMENT CHARACTER instead + * @param bool $allowSurrogates If true, treats surrogate characters as valid input; this only affects UTF-8 and UTF-16 encodings + * + * @see https://encoding.spec.whatwg.org#names-and-labels + */ + public static function createDecoder(string $encodingLabel, string $data, bool $fatal = false, bool $allowSurrogates = false): ?Decoder { $encoding = self::matchLabel($encodingLabel); if ($encoding) { $class = $encoding['class']; @@ -20,14 +34,44 @@ abstract class Encoding { } } + /** Returns a new encoder for the specified $encodingLabel, or null if the label is not valid + * + * @param string $encodingLabel One of the encoding labels listed in the specification e.g. "utf-8", "Latin1", "shift_JIS" + * @param bool $fatal If true (the default) exceptions will be thrown when a character cannot be represented in the target encoding; if false HTML character references will be substituted instead + * + * @see https://encoding.spec.whatwg.org#names-and-labels + */ + public static function createEncoder(string $encodingLabel, bool $fatal = true): ?Encoder { + try { + return new Encoder($encodingLabel, $fatal); + } catch (EncoderException $e) { + return null; + } + } + + /** Returns metadata about the encoding identified by $label, or null if the label is not valid + * + * The returned array will contain the following keys: + * + * - label: The normalized representation of the specified label + * - name: The canonical name of the encoding + * - class: the fully-qualified name of the class which implements the encoding + * - encoder: A boolean denoting whether the encoding includes an encoder + * + * @param string $label One of the encoding labels listed in the specification e.g. "utf-8", "Latin1", "shift_JIS" + * @see https://encoding.spec.whatwg.org#names-and-labels + */ public static function matchLabel(string $label): ?array { $label = strtolower(trim($label)); $name = self::LABEL_MAP[$label] ?? null; if ($name) { + $class = self::NAME_MAP[$name]; + $encoder = method_exists($class, "encode"); return [ 'label' => $label, 'name' => $name, - 'class' => self::NAME_MAP[$name], + 'class' => $class, + 'encoder' => $encoder, ]; } else { return null; diff --git a/lib/Encoding/AbstractEncoding.php b/lib/Encoding/AbstractEncoding.php index 96df32c..c5fc06f 100644 --- a/lib/Encoding/AbstractEncoding.php +++ b/lib/Encoding/AbstractEncoding.php @@ -6,7 +6,11 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; -abstract class AbstractEncoding implements Encoding { +abstract class AbstractEncoding implements Decoder { + protected const MODE_NULL = 0; + protected const MODE_REPLACE = 1; + protected const MODE_FATAL = 2; + /** @var string $string The string being decoded */ protected $string; /** @var int $posByte The current byte position in the string */ @@ -34,6 +38,11 @@ abstract class AbstractEncoding implements Encoding { public $posErr = 0; + /** Seeks backwards through the string the specified number of characters. + * If the beginning of the string is reached before the requested number + * of characters has been skipped over, the number of remaining characters + * is returned. + */ abstract protected function seekBack(int $distance): int; public function __construct(string $string, bool $fatal = false, bool $allowSurrogates = false) { @@ -51,9 +60,12 @@ abstract class AbstractEncoding implements Encoding { return $this->posChar; } - public function rewind() { + public function rewind(): void { $this->posByte = 0; $this->posChar = 0; + $this->errMark = -1; + $this->errSync = -2; + $this->errStack = []; } public function nextChar(): string { @@ -75,12 +87,9 @@ abstract class AbstractEncoding implements Encoding { public function seek(int $distance): int { if ($distance > 0) { - if ($this->posByte == strlen($this->string)) { - return $distance; - } do { $p = $this->nextCode(); - } while (--$distance && $p !== false); + } while ($p !== false && --$distance); return $distance; } elseif ($distance < 0) { $distance = abs($distance); @@ -163,7 +172,7 @@ abstract class AbstractEncoding implements Encoding { } /** Sets the decoder's state to the values specified */ - protected function stateApply(array $state) { + protected function stateApply(array $state): void { while (sizeof($this->errStack) > $state['errCount']) { list($this->errMark, $this->errSync) = array_pop($this->errStack); } @@ -174,8 +183,7 @@ abstract class AbstractEncoding implements Encoding { } /** Handles decoding errors */ - protected function errDec(int $mode, int $charOffset, int $byteOffset) { - assert(in_array($mode, [self::MODE_NULL, self::MODE_REPLACE, self::MODE_FATAL]), "Invalid error mode $mode"); + protected function errDec(int $mode, int $charOffset, int $byteOffset): ?int { if ($mode !== self::MODE_NULL) { // expose the error to the user; this disambiguates a literal replacement character $this->posErr = $this->posChar; @@ -195,12 +203,12 @@ abstract class AbstractEncoding implements Encoding { } /** Handles encoding errors */ - protected static function errEnc(bool $htmlMode, $data = null) { + protected static function errEnc(bool $htmlMode, $data = null): string { if ($htmlMode) { return "&#".(string) $data.";"; } else { // fatal replacement mode for encoders; not applicable to Unicode transformation formats - throw new EncoderException("Code point $data not available in target encoding", self::E_UNAVAILABLE_CODE_POINT); + throw new EncoderException("Code point $data not available in target encoding", Coder::E_UNAVAILABLE_CODE_POINT); } } } diff --git a/lib/Encoding/Big5.php b/lib/Encoding/Big5.php index 64792af..e01f82b 100644 --- a/lib/Encoding/Big5.php +++ b/lib/Encoding/Big5.php @@ -6,19 +6,29 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; -class Big5 extends AbstractEncoding implements StatelessEncoding { - const NAME = "Big5"; - const LABELS = ["big5", "big5-hkscs", "cn-big5", "csbig5", "x-x-big5"]; - const TABLE_DOUBLES = [ +class Big5 extends AbstractEncoding implements Coder, Decoder { + public const NAME = "Big5"; + public const LABELS = [ + "big5", + "big5-hkscs", + "cn-big5", + "csbig5", + "x-x-big5", + ]; + protected const TABLE_DOUBLES = [ 1133 => [0x00CA, 0x0304], 1135 => [0x00CA, 0x030C], 1164 => [0x00EA, 0x0304], 1166 => [0x00EA, 0x030C], ]; - const TABLE_CODES = [942=>17392,19506,17923,17830,17784,160359,19831,17843,162993,19682,163013,15253,18230,18244,19527,19520,148159,144919,160594,159371,159954,19543,172881,18255,17882,19589,162924,19719,19108,18081,158499,29221,154196,137827,146950,147297,26189,22267,981=>32149,22813,166841,15860,38708,162799,23515,138590,23204,13861,171696,23249,23479,23804,26478,34195,170309,29793,29853,14453,138579,145054,155681,16108,153822,15093,31484,40855,147809,166157,143850,133770,143966,17162,33924,40854,37935,18736,34323,22678,38730,37400,31184,31282,26208,27177,34973,29772,31685,26498,31276,21071,36934,13542,29636,155065,29894,40903,22451,18735,21580,16689,145038,22552,31346,162661,35727,18094,159368,16769,155033,31662,140476,40904,140481,140489,140492,40905,34052,144827,16564,40906,17633,175615,25281,28782,40907,1099=>12736,12737,12738,12739,12740,131340,12741,131281,131277,12742,12743,131275,139240,12744,131274,12745,12746,12747,12748,131342,12749,12750,256,193,461,192,274,201,282,200,332,211,465,210,1134=>7870,1136=>7872,202,257,225,462,224,593,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,1165=>7871,1167=>7873,234,609,9178,9179,1256=>172969,135493,1259=>25866,1262=>20029,28381,40270,37343,1268=>161589,25745,20250,20264,20392,20822,20852,20892,20964,21153,21160,21307,21326,21457,21464,22242,22768,22788,22791,22834,22836,23398,23454,23455,23706,24198,24635,25993,26622,26628,26725,27982,28860,30005,32420,32428,32442,32455,32463,32479,32518,32567,33402,33487,33647,35270,35774,35810,36710,36711,36718,29713,31996,32205,26950,31433,21031,1329=>37260,30904,37214,32956,1334=>36107,33014,133607,1339=>32927,40647,19661,40393,40460,19518,171510,159758,40458,172339,13761,1351=>28314,33342,29977,1355=>18705,39532,39567,40857,31111,164972,138698,132560,142054,20004,20097,20096,20103,20159,20203,20279,13388,20413,15944,20483,20616,13437,13459,13477,20870,22789,20955,20988,20997,20105,21113,21136,21287,13767,21417,13649,21424,13651,21442,21539,13677,13682,13953,21651,21667,21684,21689,21712,21743,21784,21795,21800,13720,21823,13733,13759,21975,13765,163204,21797,1416=>134210,134421,151851,21904,142534,14828,131905,36422,150968,169189,16467,164030,30586,142392,14900,18389,164189,158194,151018,25821,134524,135092,134357,135412,25741,36478,134806,134155,135012,142505,164438,148691,1449=>134470,170573,164073,18420,151207,142530,39602,14951,169460,16365,13574,152263,169940,161992,142660,40302,38933,1467=>17369,155813,25780,21731,142668,142282,135287,14843,135279,157402,157462,162208,25834,151634,134211,36456,139681,166732,132913,1487=>18443,131497,16378,22643,142733,1493=>148936,132348,155799,134988,134550,21881,16571,17338,1502=>19124,141926,135325,33194,39157,134556,25465,14846,141173,36288,22177,25724,15939,1516=>173569,134665,142031,142537,1521=>135368,145858,14738,14854,164507,13688,155209,139463,22098,134961,142514,169760,13500,27709,151099,1538=>161140,142987,139784,173659,167117,134778,134196,157724,32659,135375,141315,141625,13819,152035,134796,135053,134826,16275,134960,134471,135503,134732,1561=>134827,134057,134472,135360,135485,16377,140950,25650,135085,144372,161337,142286,134526,134527,142417,142421,14872,134808,135367,134958,173618,158544,167122,167321,167114,38314,21708,33476,21945,1591=>171715,39974,39606,161630,142830,28992,33133,33004,23580,157042,33076,14231,21343,164029,37302,134906,134671,134775,134907,13789,151019,13833,134358,22191,141237,135369,134672,134776,135288,135496,164359,136277,134777,151120,142756,23124,135197,135198,135413,135414,22428,134673,161428,164557,135093,134779,151934,14083,135094,135552,152280,172733,149978,137274,147831,164476,22681,21096,13850,153405,31666,23400,18432,19244,40743,18919,39967,39821,154484,143677,22011,13810,22153,20008,22786,138177,194680,38737,131206,20059,20155,13630,23587,24401,24516,14586,25164,25909,27514,27701,27706,28780,29227,20012,29357,149737,32594,31035,31993,32595,156266,13505,1694=>156491,32770,32896,157202,158033,21341,34916,35265,161970,35744,36125,38021,38264,38271,38376,167439,38886,39029,39118,39134,39267,170000,40060,40479,40644,27503,63751,20023,131207,38429,25143,38050,1727=>20539,28158,171123,40870,15817,34959,147790,28791,23797,19232,152013,13657,154928,24866,166450,36775,37366,29073,26393,29626,144001,172295,15499,137600,19216,30948,29698,20910,165647,16393,27235,172730,16931,34319,133743,31274,170311,166634,38741,28749,21284,139390,37876,30425,166371,40871,30685,20131,20464,20668,20015,20247,40872,21556,32139,22674,22736,138678,24210,24217,24514,141074,25995,144377,26905,27203,146531,27903,1796=>29184,148741,29580,16091,150035,23317,29881,35715,154788,153237,31379,31724,31939,32364,33528,34199,40873,34960,40874,36537,40875,36815,34143,39392,37409,40876,167353,136255,16497,17058,23066,1830=>39016,26475,17014,22333,1835=>34262,149883,33471,160013,19585,159092,23931,158485,159678,40877,40878,23446,40879,26343,32347,28247,31178,15752,17603,143958,141206,17306,17718,1859=>23765,146202,35577,23672,15634,144721,23928,40882,29015,17752,147692,138787,19575,14712,13386,131492,158785,35532,20404,131641,22975,33132,38998,170234,24379,134047,1886=>139713,166253,16642,18107,168057,16135,40883,172469,16632,14294,18167,158790,16764,165554,160767,17773,14548,152730,17761,17691,19849,19579,19830,17898,16328,150287,13921,17630,17597,16877,23870,23880,23894,15868,14351,23972,23993,14368,14392,24130,24253,24357,24451,14600,14612,14655,14669,24791,24893,23781,14729,25015,25017,25039,14776,25132,25232,25317,25368,14840,22193,14851,25570,25595,25607,25690,14923,25792,23829,22049,40863,14999,25990,15037,26111,26195,15090,26258,15138,26390,15170,26532,26624,15192,26698,26756,15218,15217,15227,26889,26947,29276,26980,27039,27013,15292,27094,15325,27237,27252,27249,27266,15340,27289,15346,27307,27317,27348,27382,27521,27585,27626,27765,27818,15563,27906,27910,27942,28033,15599,28068,28081,28181,28184,28201,28294,166336,28347,28386,28378,40831,28392,28393,28452,28468,15686,147265,28545,28606,15722,15733,29111,23705,15754,28716,15761,28752,28756,28783,28799,28809,131877,17345,13809,134872,147159,22462,159443,28990,153568,13902,27042,166889,23412,31305,153825,169177,31333,31357,154028,31419,31408,31426,31427,29137,156813,16842,31450,31453,31466,16879,21682,154625,31499,31573,31529,152334,154878,31650,31599,33692,154548,158847,31696,33825,31634,31672,154912,15789,154725,33938,31738,31750,31797,154817,31812,31875,149634,31910,26237,148856,31945,31943,31974,31860,31987,31989,31950,32359,17693,159300,32093,159446,29837,32137,32171,28981,32179,32210,147543,155689,32228,15635,32245,137209,32229,164717,32285,155937,155994,32366,32402,17195,37996,32295,32576,32577,32583,31030,156368,39393,32663,156497,32675,136801,131176,17756,145254,17667,164666,32762,156809,32773,32776,32797,32808,32815,172167,158915,32827,32828,32865,141076,18825,157222,146915,157416,26405,32935,166472,33031,33050,22704,141046,27775,156824,151480,25831,136330,33304,137310,27219,150117,150165,17530,33321,133901,158290,146814,20473,136445,34018,33634,158474,149927,144688,137075,146936,33450,26907,194964,16859,34123,33488,33562,134678,137140,14017,143741,144730,33403,33506,33560,147083,159139,158469,158615,144846,15807,33565,21996,33669,17675,159141,33708,33729,33747,13438,159444,27223,34138,13462,159298,143087,33880,154596,33905,15827,17636,27303,33866,146613,31064,33960,158614,159351,159299,34014,33807,33681,17568,33939,34020,154769,16960,154816,17731,34100,23282,159385,17703,34163,17686,26559,34326,165413,165435,34241,159880,34306,136578,159949,194994,17770,34344,13896,137378,21495,160666,34430,34673,172280,34798,142375,34737,34778,34831,22113,34412,26710,17935,34885,34886,161248,146873,161252,34910,34972,18011,34996,34997,25537,35013,30583,161551,35207,35210,35238,35241,35239,35260,166437,35303,162084,162493,35484,30611,37374,35472,162393,31465,162618,147343,18195,162616,29052,35596,35615,152624,152933,35647,35660,35661,35497,150138,35728,35739,35503,136927,17941,34895,35995,163156,163215,195028,14117,163155,36054,163224,163261,36114,36099,137488,36059,28764,36113,150729,16080,36215,36265,163842,135188,149898,15228,164284,160012,31463,36525,36534,36547,37588,36633,36653,164709,164882,36773,37635,172703,133712,36787,18730,166366,165181,146875,24312,143970,36857,172052,165564,165121,140069,14720,159447,36919,165180,162494,36961,165228,165387,37032,165651,37060,165606,37038,37117,37223,15088,37289,37316,31916,166195,138889,37390,27807,37441,37474,153017,37561,166598,146587,166668,153051,134449,37676,37739,166625,166891,28815,23235,166626,166629,18789,37444,166892,166969,166911,37747,37979,36540,38277,38310,37926,38304,28662,17081,140922,165592,135804,146990,18911,27676,38523,38550,16748,38563,159445,25050,38582,30965,166624,38589,21452,18849,158904,131700,156688,168111,168165,150225,137493,144138,38705,34370,38710,18959,17725,17797,150249,28789,23361,38683,38748,168405,38743,23370,168427,38751,37925,20688,143543,143548,38793,38815,38833,38846,38848,38866,38880,152684,38894,29724,169011,38911,38901,168989,162170,19153,38964,38963,38987,39014,15118,160117,15697,132656,147804,153350,39114,39095,39112,39111,19199,159015,136915,21936,39137,39142,39148,37752,39225,150057,19314,170071,170245,39413,39436,39483,39440,39512,153381,14020,168113,170965,39648,39650,170757,39668,19470,39700,39725,165376,20532,39732,158120,14531,143485,39760,39744,171326,23109,137315,39822,148043,39938,39935,39948,171624,40404,171959,172434,172459,172257,172323,172511,40318,40323,172340,40462,26760,40388,139611,172435,172576,137531,172595,40249,172217,172724,40592,40597,40606,40610,19764,40618,40623,148324,40641,15200,14821,15645,20274,14270,166955,40706,40712,19350,37924,159138,40727,40726,40761,22175,22154,40773,39352,168075,38898,33919,40802,40809,31452,40846,29206,19390,149877,149947,29047,150008,148296,150097,29598,166874,137466,31135,166270,167478,37737,37875,166468,37612,37761,37835,166252,148665,29207,16107,30578,31299,28880,148595,148472,29054,137199,28835,137406,144793,16071,137349,152623,137208,14114,136955,137273,14049,137076,137425,155467,14115,136896,22363,150053,136190,135848,136134,136374,34051,145062,34051,33877,149908,160101,146993,152924,147195,159826,17652,145134,170397,159526,26617,14131,15381,15847,22636,137506,26640,16471,145215,147681,147595,147727,158753,21707,22174,157361,22162,135135,134056,134669,37830,166675,37788,20216,20779,14361,148534,20156,132197,131967,20299,20362,153169,23144,131499,132043,14745,131850,132116,13365,20265,131776,167603,131701,35546,131596,20120,20685,20749,20386,20227,150030,147082,20290,20526,20588,20609,20428,20453,20568,20732,20825,20827,20829,20830,28278,144789,147001,147135,28018,137348,147081,20904,20931,132576,17629,132259,132242,132241,36218,166556,132878,21081,21156,133235,21217,37742,18042,29068,148364,134176,149932,135396,27089,134685,29817,16094,29849,29716,29782,29592,19342,150204,147597,21456,13700,29199,147657,21940,131909,21709,134086,22301,37469,38644,37734,22493,22413,22399,13886,22731,23193,166470,136954,137071,136976,23084,22968,37519,23166,23247,23058,153926,137715,137313,148117,14069,27909,29763,23073,155267,23169,166871,132115,37856,29836,135939,28933,18802,37896,166395,37821,14240,23582,23710,24158,24136,137622,137596,146158,24269,23375,137475,137476,14081,137376,14045,136958,14035,33066,166471,138682,144498,166312,24332,24334,137511,137131,23147,137019,23364,34324,161277,34912,24702,141408,140843,24539,16056,140719,140734,168072,159603,25024,131134,131142,140827,24985,24984,24693,142491,142599,149204,168269,25713,149093,142186,14889,142114,144464,170218,142968,25399,173147,25782,25393,25553,149987,142695,25252,142497,25659,25963,26994,15348,143502,144045,149897,144043,21773,144096,137433,169023,26318,144009,143795,15072,16784,152964,166690,152975,136956,152923,152613,30958,143619,137258,143924,13412,143887,143746,148169,26254,159012,26219,19347,26160,161904,138731,26211,144082,144097,26142,153714,14545,145466,145340,15257,145314,144382,29904,15254,26511,149034,26806,26654,15300,27326,14435,145365,148615,27187,27218,27337,27397,137490,25873,26776,27212,15319,27258,27479,147392,146586,37792,37618,166890,166603,37513,163870,166364,37991,28069,28427,149996,28007,147327,15759,28164,147516,23101,28170,22599,27940,30786,28987,148250,148086,28913,29264,29319,29332,149391,149285,20857,150180,132587,29818,147192,144991,150090,149783,155617,16134,16049,150239,166947,147253,24743,16115,29900,29756,37767,29751,17567,159210,17745,30083,16227,150745,150790,16216,30037,30323,173510,15129,29800,166604,149931,149902,15099,15821,150094,16127,149957,149747,37370,22322,37698,166627,137316,20703,152097,152039,30584,143922,30478,30479,30587,149143,145281,14942,149744,29752,29851,16063,150202,150215,16584,150166,156078,37639,152961,30750,30861,30856,30930,29648,31065,161601,153315,16654,31131,33942,31141,27181,147194,31290,31220,16750,136934,16690,37429,31217,134476,149900,131737,146874,137070,13719,21867,13680,13994,131540,134157,31458,23129,141045,154287,154268,23053,131675,30960,23082,154566,31486,16889,31837,31853,16913,154547,155324,155302,31949,150009,137136,31886,31868,31918,27314,32220,32263,32211,32590,156257,155996,162632,32151,155266,17002,158581,133398,26582,131150,144847,22468,156690,156664,149858,32733,31527,133164,154345,154947,31500,155150,39398,34373,39523,27164,144447,14818,150007,157101,39455,157088,33920,160039,158929,17642,33079,17410,32966,33033,33090,157620,39107,158274,33378,33381,158289,33875,159143,34320,160283,23174,16767,137280,23339,137377,23268,137432,34464,195004,146831,34861,160802,23042,34926,20293,34951,35007,35046,35173,35149,153219,35156,161669,161668,166901,166873,166812,166393,16045,33955,18165,18127,14322,35389,35356,169032,24397,37419,148100,26068,28969,28868,137285,40301,35999,36073,163292,22938,30659,23024,17262,14036,36394,36519,150537,36656,36682,17140,27736,28603,140065,18587,28537,28299,137178,39913,14005,149807,37051,37015,21873,18694,37307,37892,166475,16482,166652,37927,166941,166971,34021,35371,38297,38311,38295,38294,167220,29765,16066,149759,150082,148458,16103,143909,38543,167655,167526,167525,16076,149997,150136,147438,29714,29803,16124,38721,168112,26695,18973,168083,153567,38749,37736,166281,166950,166703,156606,37562,23313,35689,18748,29689,147995,38811,38769,39224,134950,24001,166853,150194,38943,169178,37622,169431,37349,17600,166736,150119,166756,39132,166469,16128,37418,18725,33812,39227,39245,162566,15869,39323,19311,39338,39516,166757,153800,27279,39457,23294,39471,170225,19344,170312,39356,19389,19351,37757,22642,135938,22562,149944,136424,30788,141087,146872,26821,15741,37976,14631,24912,141185,141675,24839,40015,40019,40059,39989,39952,39807,39887,171565,39839,172533,172286,40225,19630,147716,40472,19632,40204,172468,172269,172275,170287,40357,33981,159250,159711,158594,34300,17715,159140,159364,159216,33824,34286,159232,145367,155748,31202,144796,144960,18733,149982,15714,37851,37566,37704,131775,30905,37495,37965,20452,13376,36964,152925,30781,30804,30902,30795,137047,143817,149825,13978,20338,28634,28633,28702,28702,21524,147893,22459,22771,22410,40214,22487,28980,13487,147884,29163,158784,151447,23336,137141,166473,24844,23246,23051,17084,148616,14124,19323,166396,37819,37816,137430,134941,33906,158912,136211,148218,142374,148417,22932,146871,157505,32168,155995,155812,149945,149899,166394,37605,29666,16105,29876,166755,137375,16097,150195,27352,29683,29691,16086,150078,150164,137177,150118,132007,136228,149989,29768,149782,28837,149878,37508,29670,37727,132350,37681,166606,166422,37766,166887,153045,18741,166530,29035,149827,134399,22180,132634,134123,134328,21762,31172,137210,32254,136898,150096,137298,17710,37889,14090,166592,149933,22960,137407,137347,160900,23201,14050,146779,14000,37471,23161,166529,137314,37748,15565,133812,19094,14730,20724,15721,15692,136092,29045,17147,164376,28175,168164,17643,27991,163407,28775,27823,15574,147437,146989,28162,28428,15727,132085,30033,14012,13512,18048,16090,18545,22980,37486,18750,36673,166940,158656,22546,22472,14038,136274,28926,148322,150129,143331,135856,140221,26809,26983,136088,144613,162804,145119,166531,145366,144378,150687,27162,145069,158903,33854,17631,17614,159014,159057,158850,159710,28439,160009,33597,137018,33773,158848,159827,137179,22921,23170,137139,23137,23153,137477,147964,14125,23023,137020,14023,29070,37776,26266,148133,23150,23083,148115,27179,147193,161590,148571,148170,28957,148057,166369,20400,159016,23746,148686,163405,148413,27148,148054,135940,28838,28979,148457,15781,27871,194597,150095,32357,23019,23855,15859,24412,150109,137183,32164,33830,21637,146170,144128,131604,22398,133333,132633,16357,139166,172726,28675,168283,23920,29583,31955,166489,168992,20424,32743,29389,29456,162548,29496,29497,153334,29505,29512,16041,162584,36972,29173,149746,29665,33270,16074,30476,16081,27810,22269,29721,29726,29727,16098,16112,16116,16122,29907,16142,16211,30018,30061,30066,30093,16252,30152,30172,16320,30285,16343,30324,16348,30330,151388,29064,22051,35200,22633,16413,30531,16441,26465,16453,13787,30616,16490,16495,23646,30654,30667,22770,30744,28857,30748,16552,30777,30791,30801,30822,33864,152885,31027,26627,31026,16643,16649,31121,31129,36795,31238,36796,16743,31377,16818,31420,33401,16836,31439,31451,16847,20001,31586,31596,31611,31762,31771,16992,17018,31867,31900,17036,31928,17044,31981,36755,28864,134351,32207,32212,32208,32253,32686,32692,29343,17303,32800,32805,31545,32814,32817,32852,15820,22452,28832,32951,33001,17389,33036,29482,33038,33042,30048,33044,17409,15161,33110,33113,33114,17427,22586,33148,33156,17445,33171,17453,33189,22511,33217,33252,33364,17551,33446,33398,33482,33496,33535,17584,33623,38505,27018,33797,28917,33892,24803,33928,17668,33982,34017,34040,34064,34104,34130,17723,34159,34160,34272,17783,34418,34450,34482,34543,38469,34699,17926,17943,34990,35071,35108,35143,35217,162151,35369,35384,35476,35508,35921,36052,36082,36124,18328,22623,36291,18413,20206,36410,21976,22356,36465,22005,36528,18487,36558,36578,36580,36589,36594,36791,36801,36810,36812,36915,39364,18605,39136,37395,18718,37416,37464,37483,37553,37550,37567,37603,37611,37619,37620,37629,37699,37764,37805,18757,18769,40639,37911,21249,37917,37933,37950,18794,37972,38009,38189,38306,18855,38388,38451,18917,26528,18980,38720,18997,38834,38850,22100,19172,24808,39097,19225,39153,22596,39182,39193,20916,39196,39223,39234,39261,39266,19312,39365,19357,39484,39695,31363,39785,39809,39901,39921,39924,19565,39968,14191,138178,40265,39994,40702,22096,40339,40381,40384,40444,38134,36790,40571,40620,40625,40637,40646,38108,40674,40689,40696,31432,40772,131220,131767,132000,26906,38083,22956,132311,22592,38081,14265,132565,132629,132726,136890,22359,29043,133826,133837,134079,21610,194619,134091,21662,134139,134203,134227,134245,134268,24807,134285,22138,134325,134365,134381,134511,134578,134600,26965,39983,34725,134660,134670,134871,135056,134957,134771,23584,135100,24075,135260,135247,135286,26398,135291,135304,135318,13895,135359,135379,135471,135483,21348,33965,135907,136053,135990,35713,136567,136729,137155,137159,20088,28859,137261,137578,137773,137797,138282,138352,138412,138952,25283,138965,139029,29080,26709,139333,27113,14024,139900,140247,140282,141098,141425,141647,33533,141671,141715,142037,35237,142056,36768,142094,38840,142143,38983,39613,142412,4116=>142472,142519,154600,142600,142610,142775,142741,142914,143220,143308,143411,143462,144159,144350,24497,26184,26303,162425,144743,144883,29185,149946,30679,144922,145174,32391,131910,22709,26382,26904,146087,161367,155618,146961,147129,161278,139418,18640,19128,147737,166554,148206,148237,147515,148276,148374,150085,132554,20946,132625,22943,138920,15294,146687,148484,148694,22408,149108,14747,149295,165352,170441,14178,139715,35678,166734,39382,149522,149755,150037,29193,150208,134264,22885,151205,151430,132985,36570,151596,21135,22335,29041,152217,152601,147274,150183,21948,152646,152686,158546,37332,13427,152895,161330,152926,18200,152930,152934,153543,149823,153693,20582,13563,144332,24798,153859,18300,166216,154286,154505,154630,138640,22433,29009,28598,155906,162834,36950,156082,151450,35682,156674,156746,23899,158711,36662,156804,137500,35562,150006,156808,147439,156946,19392,157119,157365,141083,37989,153569,24981,23079,194765,20411,22201,148769,157436,20074,149812,38486,28047,158909,13848,35191,157593,157806,156689,157790,29151,157895,31554,168128,133649,157990,37124,158009,31301,40432,158202,39462,158253,13919,156777,131105,31107,158260,158555,23852,144665,33743,158621,18128,158884,30011,34917,159150,22710,14108,140685,159819,160205,15444,160384,160389,37505,139642,160395,37680,160486,149968,27705,38047,160848,134904,34855,35061,141606,164979,137137,28344,150058,137248,14756,14009,23568,31203,17727,26294,171181,170148,35139,161740,161880,22230,16607,136714,14753,145199,164072,136133,29101,33638,162269,168360,23143,19639,159919,166315,162301,162314,162571,163174,147834,31555,31102,163849,28597,172767,27139,164632,21410,159239,37823,26678,38749,164207,163875,158133,136173,143919,163912,23941,166960,163971,22293,38947,166217,23979,149896,26046,27093,21458,150181,147329,15377,26422,163984,164084,164142,139169,164175,164233,164271,164378,164614,164655,164746,13770,164968,165546,18682,25574,166230,30728,37461,166328,17394,166375,17375,166376,166726,166868,23032,166921,36619,167877,168172,31569,168208,168252,15863,168286,150218,36816,29327,22155,169191,169449,169392,169400,169778,170193,170313,170346,170435,170536,170766,171354,171419,32415,171768,171811,19620,38215,172691,29090,172799,19857,36882,173515,19868,134300,36798,21953,36794,140464,36793,150163,17673,32383,28502,27313,20202,13540,166700,161949,14138,36480,137205,163876,166764,166809,162366,157359,15851,161365,146615,153141,153942,20122,155265,156248,22207,134765,36366,23405,147080,150686,25566,25296,137206,137339,25904,22061,154698,21530,152337,15814,171416,19581,22050,22046,32585,155352,22901,146752,34672,19996,135146,134473,145082,33047,40286,36120,30267,40005,30286,30649,37701,21554,33096,33527,22053,33074,33816,32957,21994,31074,22083,21526,134813,13774,22021,22001,26353,164578,13869,30004,22000,21946,21655,21874,134209,134294,24272,151880,134774,142434,134818,40619,32090,21982,135285,25245,38765,21652,36045,29174,37238,25596,25529,25598,21865,142147,40050,143027,20890,13535,134567,20903,21581,21790,21779,30310,36397,157834,30129,32950,34820,34694,35015,33206,33820,135361,17644,29444,149254,23440,33547,157843,22139,141044,163119,147875,163187,159440,160438,37232,135641,37384,146684,173737,134828,134905,29286,138402,18254,151490,163833,135147,16634,40029,25887,142752,18675,149472,171388,135148,134666,24674,161187,135149,4628=>155720,135559,29091,32398,40272,19994,19972,13687,23309,27826,21351,13996,14812,21373,13989,149016,22682,150382,33325,21579,22442,154261,133497,4652=>14930,140389,29556,171692,19721,39917,146686,171824,19547,151465,169374,171998,33884,146870,160434,157619,145184,25390,32037,147191,146988,14890,36872,21196,15988,13946,17897,132238,30272,23280,134838,30842,163630,22695,16575,22140,39819,23924,30292,173108,40581,19681,30201,14331,24857,143578,148466,4700=>22109,135849,22439,149859,171526,21044,159918,13741,27722,40316,31830,39737,22494,137068,23635,25811,169168,156469,160100,34477,134440,159010,150242,134513,4725=>20990,139023,23950,38659,138705,40577,36940,31519,39682,23761,31651,25192,25397,39679,31695,39722,31870,39726,31810,31878,39957,31740,39689,40727,39963,149822,40794,21875,23491,20477,40600,20466,21088,15878,21201,22375,20566,22967,24082,38856,40363,36700,21609,38836,39232,38842,21292,24880,26924,21466,39946,40194,19515,38465,27008,20646,30022,137069,39386,21107,4786=>37209,38529,37212,4790=>37201,167575,25471,159011,27338,22033,37262,30074,25221,132092,29519,31856,154657,146685,4805=>149785,30422,39837,20010,134356,33726,34882,4813=>23626,27072,20717,22394,21023,24053,20174,27697,131570,20281,21660,21722,21146,36226,13822,24332,13811,4831=>27474,37244,40869,39831,38958,39092,39610,40616,40580,29050,31508,4843=>27642,34840,32632,4847=>22048,173642,36471,40787,4852=>36308,36431,40476,36353,25218,164733,36392,36469,31443,150135,31294,30936,27882,35431,30215,166490,40742,27854,34774,30147,172722,30803,194624,36108,29410,29553,35629,29442,29937,36075,150203,34351,24506,34976,17591,4888=>137275,159237,4891=>35454,140571,4894=>24829,30311,39639,40260,37742,39823,34805,4902=>34831,36087,29484,38689,39856,13782,29362,19463,31825,39242,155993,24921,19460,40598,24957,4918=>22367,24943,25254,25145,25294,14940,25058,21418,144373,25444,26626,13778,23895,166850,36826,167481,4935=>20697,138566,30982,21298,38456,134971,16485,4943=>30718,4945=>31938,155418,31962,31277,32870,32867,32077,29957,29938,35220,33306,26380,32866,160902,32859,29936,33027,30500,35209,157644,30035,159441,34729,34766,33224,34700,35401,36013,35651,30507,29944,34010,13877,27058,36262,4981=>35241,29800,28089,34753,147473,29927,15835,29046,24740,24988,15569,29026,24695,4995=>32625,166701,29264,24809,19326,21024,15384,146631,155351,161366,152881,137540,135934,170243,159196,159917,23745,156077,166415,145015,131310,157766,151310,17762,23327,156492,40784,40614,156267,12288,65292,12289,12290,65294,8231,65307,65306,65311,65281,65072,8230,8229,65104,65105,65106,183,65108,65109,65110,65111,65372,8211,65073,8212,65075,9588,65076,65103,65288,65289,65077,65078,65371,65373,65079,65080,12308,12309,65081,65082,12304,12305,65083,65084,12298,12299,65085,65086,12296,12297,65087,65088,12300,12301,65089,65090,12302,12303,65091,65092,65113,65114,65115,65116,65117,65118,8216,8217,8220,8221,12317,12318,8245,8242,65283,65286,65290,8251,167,12291,9675,9679,9651,9650,9678,9734,9733,9671,9670,9633,9632,9661,9660,12963,8453,175,65507,65343,717,65097,65098,65101,65102,65099,65100,65119,65120,65121,65291,65293,215,247,177,8730,65308,65310,65309,8806,8807,8800,8734,8786,8801,65122,65123,65124,65125,65126,65374,8745,8746,8869,8736,8735,8895,13266,13265,8747,8750,8757,8756,9792,9794,8853,8857,8593,8595,8592,8594,8598,8599,8601,8600,8741,8739,65295,65340,8725,65128,65284,65509,12306,65504,65505,65285,65312,8451,8457,65129,65130,65131,13269,13212,13213,13214,13262,13217,13198,13199,13252,176,20825,20827,20830,20829,20833,20835,21991,29929,31950,9601,9602,9603,9604,9605,9606,9607,9608,9615,9614,9613,9612,9611,9610,9609,9532,9524,9516,9508,9500,9620,9472,9474,9621,9484,9488,9492,9496,9581,9582,9584,9583,9552,9566,9578,9569,9698,9699,9701,9700,9585,9586,9587,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,12321,12322,12323,12324,12325,12326,12327,12328,12329,21313,21316,21317,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,729,713,714,711,715,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9249,8364,5495=>19968,20057,19969,19971,20035,20061,20102,20108,20154,20799,20837,20843,20960,20992,20993,21147,21269,21313,21340,21448,19977,19979,19976,19978,20011,20024,20961,20037,20040,20063,20062,20110,20129,20800,20995,21242,21315,21449,21475,22303,22763,22805,22823,22899,23376,23377,23379,23544,23567,23586,23608,23665,24029,24037,24049,24050,24051,24062,24178,24318,24331,24339,25165,19985,19984,19981,20013,20016,20025,20043,23609,20104,20113,20117,20114,20116,20130,20161,20160,20163,20166,20167,20173,20170,20171,20164,20803,20801,20839,20845,20846,20844,20887,20982,20998,20999,21000,21243,21246,21247,21270,21305,21320,21319,21317,21342,21380,21451,21450,21453,22764,22825,22827,22826,22829,23380,23569,23588,23610,23663,24052,24187,24319,24340,24341,24515,25096,25142,25163,25166,25903,25991,26007,26020,26041,26085,26352,26376,26408,27424,27490,27513,27595,27604,27611,27663,27700,28779,29226,29238,29243,29255,29273,29275,29356,29579,19993,19990,19989,19988,19992,20027,20045,20047,20046,20197,20184,20180,20181,20182,20183,20195,20196,20185,20190,20805,20804,20873,20874,20908,20985,20986,20984,21002,21152,21151,21253,21254,21271,21277,20191,21322,21321,21345,21344,21359,21358,21435,21487,21476,21491,21484,21486,21481,21480,21500,21496,21493,21483,21478,21482,21490,21489,21488,21477,21485,21499,22235,22234,22806,22830,22833,22900,22902,23381,23427,23612,24040,24039,24038,24066,24067,24179,24188,24321,24344,24343,24517,25098,25171,25172,25170,25169,26021,26086,26414,26412,26410,26411,26413,27491,27597,27665,27664,27704,27713,27712,27710,29359,29572,29577,29916,29926,29976,29983,29992,29993,30000,30001,30002,30003,30091,30333,30382,30399,30446,30683,30690,30707,31034,31166,31348,31435,19998,19999,20050,20051,20073,20121,20132,20134,20133,20223,20233,20249,20234,20245,20237,20240,20241,20239,20210,20214,20219,20208,20211,20221,20225,20235,20809,20807,20806,20808,20840,20849,20877,20912,21015,21009,21010,21006,21014,21155,21256,21281,21280,21360,21361,21513,21519,21516,21514,21520,21505,21515,21508,21521,21517,21512,21507,21518,21510,21522,22240,22238,22237,22323,22320,22312,22317,22316,22319,22313,22809,22810,22839,22840,22916,22904,22915,22909,22905,22914,22913,23383,23384,23431,23432,23429,23433,23546,23574,23673,24030,24070,24182,24180,24335,24347,24537,24534,25102,25100,25101,25104,25187,25179,25176,25910,26089,26088,26092,26093,26354,26355,26377,26429,26420,26417,26421,27425,27492,27515,27670,27741,27735,27737,27743,27744,27728,27733,27745,27739,27725,27726,28784,29279,29277,30334,31481,31859,31992,32566,32650,32701,32769,32771,32780,32786,32819,32895,32905,32907,32908,33251,33258,33267,33276,33292,33307,33311,33390,33394,33406,34411,34880,34892,34915,35199,38433,20018,20136,20301,20303,20295,20311,20318,20276,20315,20309,20272,20304,20305,20285,20282,20280,20291,20308,20284,20294,20323,20316,20320,20271,20302,20278,20313,20317,20296,20314,20812,20811,20813,20853,20918,20919,21029,21028,21033,21034,21032,21163,21161,21162,21164,21283,21363,21365,21533,21549,21534,21566,21542,21582,21543,21574,21571,21555,21576,21570,21531,21545,21578,21561,21563,21560,21550,21557,21558,21536,21564,21568,21553,21547,21535,21548,22250,22256,22244,22251,22346,22353,22336,22349,22343,22350,22334,22352,22351,22331,22767,22846,22941,22930,22952,22942,22947,22937,22934,22925,22948,22931,22922,22949,23389,23388,23386,23387,23436,23435,23439,23596,23616,23617,23615,23614,23696,23697,23700,23692,24043,24076,24207,24199,24202,24311,24324,24351,24420,24418,24439,24441,24536,24524,24535,24525,24561,24555,24568,24554,25106,25105,25220,25239,25238,25216,25206,25225,25197,25226,25212,25214,25209,25203,25234,25199,25240,25198,25237,25235,25233,25222,25913,25915,25912,26097,26356,26463,26446,26447,26448,26449,26460,26454,26462,26441,26438,26464,26451,26455,27493,27599,27714,27742,27801,27777,27784,27785,27781,27803,27754,27770,27792,27760,27788,27752,27798,27794,27773,27779,27762,27774,27764,27782,27766,27789,27796,27800,27778,28790,28796,28797,28792,29282,29281,29280,29380,29378,29590,29996,29995,30007,30008,30338,30447,30691,31169,31168,31167,31350,31995,32597,32918,32915,32925,32920,32923,32922,32946,33391,33426,33419,33421,35211,35282,35328,35895,35910,35925,35997,36196,36208,36275,36523,36554,36763,36784,36802,36806,36805,36804,24033,37009,37026,37034,37030,37027,37193,37318,37324,38450,38446,38449,38442,38444,20006,20054,20083,20107,20123,20126,20139,20140,20335,20381,20365,20339,20351,20332,20379,20363,20358,20355,20336,20341,20360,20329,20347,20374,20350,20367,20369,20346,20820,20818,20821,20841,20855,20854,20856,20925,20989,21051,21048,21047,21050,21040,21038,21046,21057,21182,21179,21330,21332,21331,21329,21350,21367,21368,21369,21462,21460,21463,21619,21621,21654,21624,21653,21632,21627,21623,21636,21650,21638,21628,21648,21617,21622,21644,21658,21602,21608,21643,21629,21646,22266,22403,22391,22378,22377,22369,22374,22372,22396,22812,22857,22855,22856,22852,22868,22974,22971,22996,22969,22958,22993,22982,22992,22989,22987,22995,22986,22959,22963,22994,22981,23391,23396,23395,23447,23450,23448,23452,23449,23451,23578,23624,23621,23622,23735,23713,23736,23721,23723,23729,23731,24088,24090,24086,24085,24091,24081,24184,24218,24215,24220,24213,24214,24310,24358,24359,24361,24448,24449,24447,24444,24541,24544,24573,24565,24575,24591,24596,24623,24629,24598,24618,24597,24609,24615,24617,24619,24603,25110,25109,25151,25150,25152,25215,25289,25292,25284,25279,25282,25273,25298,25307,25259,25299,25300,25291,25288,25256,25277,25276,25296,25305,25287,25293,25269,25306,25265,25304,25302,25303,25286,25260,25294,25918,26023,26044,26106,26132,26131,26124,26118,26114,26126,26112,26127,26133,26122,26119,26381,26379,26477,26507,26517,26481,26524,26483,26487,26503,26525,26519,26479,26480,26495,26505,26494,26512,26485,26522,26515,26492,26474,26482,27427,27494,27495,27519,27667,27675,27875,27880,27891,27825,27852,27877,27827,27837,27838,27836,27874,27819,27861,27859,27832,27844,27833,27841,27822,27863,27845,27889,27839,27835,27873,27867,27850,27820,27887,27868,27862,27872,28821,28814,28818,28810,28825,29228,29229,29240,29256,29287,29289,29376,29390,29401,29399,29392,29609,29608,29599,29611,29605,30013,30109,30105,30106,30340,30402,30450,30452,30693,30717,31038,31040,31041,31177,31176,31354,31353,31482,31998,32596,32652,32651,32773,32954,32933,32930,32945,32929,32939,32937,32948,32938,32943,33253,33278,33293,33459,33437,33433,33453,33469,33439,33465,33457,33452,33445,33455,33464,33443,33456,33470,33463,34382,34417,21021,34920,36555,36814,36820,36817,37045,37048,37041,37046,37319,37329,38263,38272,38428,38464,38463,38459,38468,38466,38585,38632,38738,38750,20127,20141,20142,20449,20405,20399,20415,20448,20433,20431,20445,20419,20406,20440,20447,20426,20439,20398,20432,20420,20418,20442,20430,20446,20407,20823,20882,20881,20896,21070,21059,21066,21069,21068,21067,21063,21191,21193,21187,21185,21261,21335,21371,21402,21467,21676,21696,21672,21710,21705,21688,21670,21683,21703,21698,21693,21674,21697,21700,21704,21679,21675,21681,21691,21673,21671,21695,22271,22402,22411,22432,22435,22434,22478,22446,22419,22869,22865,22863,22862,22864,23004,23000,23039,23011,23016,23043,23013,23018,23002,23014,23041,23035,23401,23459,23462,23460,23458,23461,23553,23630,23631,23629,23627,23769,23762,24055,24093,24101,24095,24189,24224,24230,24314,24328,24365,24421,24456,24453,24458,24459,24455,24460,24457,24594,24605,24608,24613,24590,24616,24653,24688,24680,24674,24646,24643,24684,24683,24682,24676,25153,25308,25366,25353,25340,25325,25345,25326,25341,25351,25329,25335,25327,25324,25342,25332,25361,25346,25919,25925,26027,26045,26082,26149,26157,26144,26151,26159,26143,26152,26161,26148,26359,26623,26579,26609,26580,26576,26604,26550,26543,26613,26601,26607,26564,26577,26548,26586,26597,26552,26575,26590,26611,26544,26585,26594,26589,26578,27498,27523,27526,27573,27602,27607,27679,27849,27915,27954,27946,27969,27941,27916,27953,27934,27927,27963,27965,27966,27958,27931,27893,27961,27943,27960,27945,27950,27957,27918,27947,28843,28858,28851,28844,28847,28845,28856,28846,28836,29232,29298,29295,29300,29417,29408,29409,29623,29642,29627,29618,29645,29632,29619,29978,29997,30031,30028,30030,30027,30123,30116,30117,30114,30115,30328,30342,30343,30344,30408,30406,30403,30405,30465,30457,30456,30473,30475,30462,30460,30471,30684,30722,30740,30732,30733,31046,31049,31048,31047,31161,31162,31185,31186,31179,31359,31361,31487,31485,31869,32002,32005,32000,32009,32007,32004,32006,32568,32654,32703,32772,32784,32781,32785,32822,32982,32997,32986,32963,32964,32972,32993,32987,32974,32990,32996,32989,33268,33314,33511,33539,33541,33507,33499,33510,33540,33509,33538,33545,33490,33495,33521,33537,33500,33492,33489,33502,33491,33503,33519,33542,34384,34425,34427,34426,34893,34923,35201,35284,35336,35330,35331,35998,36000,36212,36211,36276,36557,36556,36848,36838,36834,36842,36837,36845,36843,36836,36840,37066,37070,37057,37059,37195,37194,37325,38274,38480,38475,38476,38477,38754,38761,38859,38893,38899,38913,39080,39131,39135,39318,39321,20056,20147,20492,20493,20515,20463,20518,20517,20472,20521,20502,20486,20540,20511,20506,20498,20497,20474,20480,20500,20520,20465,20513,20491,20505,20504,20467,20462,20525,20522,20478,20523,20489,20860,20900,20901,20898,20941,20940,20934,20939,21078,21084,21076,21083,21085,21290,21375,21407,21405,21471,21736,21776,21761,21815,21756,21733,21746,21766,21754,21780,21737,21741,21729,21769,21742,21738,21734,21799,21767,21757,21775,22275,22276,22466,22484,22475,22467,22537,22799,22871,22872,22874,23057,23064,23068,23071,23067,23059,23020,23072,23075,23081,23077,23052,23049,23403,23640,23472,23475,23478,23476,23470,23477,23481,23480,23556,23633,23637,23632,23789,23805,23803,23786,23784,23792,23798,23809,23796,24046,24109,24107,24235,24237,24231,24369,24466,24465,24464,24665,24675,24677,24656,24661,24685,24681,24687,24708,24735,24730,24717,24724,24716,24709,24726,25159,25331,25352,25343,25422,25406,25391,25429,25410,25414,25423,25417,25402,25424,25405,25386,25387,25384,25421,25420,25928,25929,26009,26049,26053,26178,26185,26191,26179,26194,26188,26181,26177,26360,26388,26389,26391,26657,26680,26696,26694,26707,26681,26690,26708,26665,26803,26647,26700,26705,26685,26612,26704,26688,26684,26691,26666,26693,26643,26648,26689,27530,27529,27575,27683,27687,27688,27686,27684,27888,28010,28053,28040,28039,28006,28024,28023,27993,28051,28012,28041,28014,27994,28020,28009,28044,28042,28025,28037,28005,28052,28874,28888,28900,28889,28872,28879,29241,29305,29436,29433,29437,29432,29431,29574,29677,29705,29678,29664,29674,29662,30036,30045,30044,30042,30041,30142,30149,30151,30130,30131,30141,30140,30137,30146,30136,30347,30384,30410,30413,30414,30505,30495,30496,30504,30697,30768,30759,30776,30749,30772,30775,30757,30765,30752,30751,30770,31061,31056,31072,31071,31062,31070,31069,31063,31066,31204,31203,31207,31199,31206,31209,31192,31364,31368,31449,31494,31505,31881,32033,32023,32011,32010,32032,32034,32020,32016,32021,32026,32028,32013,32025,32027,32570,32607,32660,32709,32705,32774,32792,32789,32793,32791,32829,32831,33009,33026,33008,33029,33005,33012,33030,33016,33011,33032,33021,33034,33020,33007,33261,33260,33280,33296,33322,33323,33320,33324,33467,33579,33618,33620,33610,33592,33616,33609,33589,33588,33615,33586,33593,33590,33559,33600,33585,33576,33603,34388,34442,34474,34451,34468,34473,34444,34467,34460,34928,34935,34945,34946,34941,34937,35352,35344,35342,35340,35349,35338,35351,35347,35350,35343,35345,35912,35962,35961,36001,36002,36215,36524,36562,36564,36559,36785,36865,36870,36855,36864,36858,36852,36867,36861,36869,36856,37013,37089,37085,37090,37202,37197,37196,37336,37341,37335,37340,37337,38275,38498,38499,38497,38491,38493,38500,38488,38494,38587,39138,39340,39592,39640,39717,39730,39740,20094,20602,20605,20572,20551,20547,20556,20570,20553,20581,20598,20558,20565,20597,20596,20599,20559,20495,20591,20589,20828,20885,20976,21098,21103,21202,21209,21208,21205,21264,21263,21273,21311,21312,21310,21443,26364,21830,21866,21862,21828,21854,21857,21827,21834,21809,21846,21839,21845,21807,21860,21816,21806,21852,21804,21859,21811,21825,21847,22280,22283,22281,22495,22533,22538,22534,22496,22500,22522,22530,22581,22519,22521,22816,22882,23094,23105,23113,23142,23146,23104,23100,23138,23130,23110,23114,23408,23495,23493,23492,23490,23487,23494,23561,23560,23559,23648,23644,23645,23815,23814,23822,23835,23830,23842,23825,23849,23828,23833,23844,23847,23831,24034,24120,24118,24115,24119,24247,24248,24246,24245,24254,24373,24375,24407,24428,24425,24427,24471,24473,24478,24472,24481,24480,24476,24703,24739,24713,24736,24744,24779,24756,24806,24765,24773,24763,24757,24796,24764,24792,24789,24774,24799,24760,24794,24775,25114,25115,25160,25504,25511,25458,25494,25506,25509,25463,25447,25496,25514,25457,25513,25481,25475,25499,25451,25512,25476,25480,25497,25505,25516,25490,25487,25472,25467,25449,25448,25466,25949,25942,25937,25945,25943,21855,25935,25944,25941,25940,26012,26011,26028,26063,26059,26060,26062,26205,26202,26212,26216,26214,26206,26361,21207,26395,26753,26799,26786,26771,26805,26751,26742,26801,26791,26775,26800,26755,26820,26797,26758,26757,26772,26781,26792,26783,26785,26754,27442,27578,27627,27628,27691,28046,28092,28147,28121,28082,28129,28108,28132,28155,28154,28165,28103,28107,28079,28113,28078,28126,28153,28088,28151,28149,28101,28114,28186,28085,28122,28139,28120,28138,28145,28142,28136,28102,28100,28074,28140,28095,28134,28921,28937,28938,28925,28911,29245,29309,29313,29468,29467,29462,29459,29465,29575,29701,29706,29699,29702,29694,29709,29920,29942,29943,29980,29986,30053,30054,30050,30064,30095,30164,30165,30133,30154,30157,30350,30420,30418,30427,30519,30526,30524,30518,30520,30522,30827,30787,30798,31077,31080,31085,31227,31378,31381,31520,31528,31515,31532,31526,31513,31518,31534,31890,31895,31893,32070,32067,32113,32046,32057,32060,32064,32048,32051,32068,32047,32066,32050,32049,32573,32670,32666,32716,32718,32722,32796,32842,32838,33071,33046,33059,33067,33065,33072,33060,33282,33333,33335,33334,33337,33678,33694,33688,33656,33698,33686,33725,33707,33682,33674,33683,33673,33696,33655,33659,33660,33670,33703,34389,24426,34503,34496,34486,34500,34485,34502,34507,34481,34479,34505,34899,34974,34952,34987,34962,34966,34957,34955,35219,35215,35370,35357,35363,35365,35377,35373,35359,35355,35362,35913,35930,36009,36012,36011,36008,36010,36007,36199,36198,36286,36282,36571,36575,36889,36877,36890,36887,36899,36895,36893,36880,36885,36894,36896,36879,36898,36886,36891,36884,37096,37101,37117,37207,37326,37365,37350,37347,37351,37357,37353,38281,38506,38517,38515,38520,38512,38516,38518,38519,38508,38592,38634,38633,31456,31455,38914,38915,39770,40165,40565,40575,40613,40635,20642,20621,20613,20633,20625,20608,20630,20632,20634,26368,20977,21106,21108,21109,21097,21214,21213,21211,21338,21413,21883,21888,21927,21884,21898,21917,21912,21890,21916,21930,21908,21895,21899,21891,21939,21934,21919,21822,21938,21914,21947,21932,21937,21886,21897,21931,21913,22285,22575,22570,22580,22564,22576,22577,22561,22557,22560,22777,22778,22880,23159,23194,23167,23186,23195,23207,23411,23409,23506,23500,23507,23504,23562,23563,23601,23884,23888,23860,23879,24061,24133,24125,24128,24131,24190,24266,24257,24258,24260,24380,24429,24489,24490,24488,24785,24801,24754,24758,24800,24860,24867,24826,24853,24816,24827,24820,24936,24817,24846,24822,24841,24832,24850,25119,25161,25507,25484,25551,25536,25577,25545,25542,25549,25554,25571,25552,25569,25558,25581,25582,25462,25588,25578,25563,25682,25562,25593,25950,25958,25954,25955,26001,26000,26031,26222,26224,26228,26230,26223,26257,26234,26238,26231,26366,26367,26399,26397,26874,26837,26848,26840,26839,26885,26847,26869,26862,26855,26873,26834,26866,26851,26827,26829,26893,26898,26894,26825,26842,26990,26875,27454,27450,27453,27544,27542,27580,27631,27694,27695,27692,28207,28216,28244,28193,28210,28263,28234,28192,28197,28195,28187,28251,28248,28196,28246,28270,28205,28198,28271,28212,28237,28218,28204,28227,28189,28222,28363,28297,28185,28238,28259,28228,28274,28265,28255,28953,28954,28966,28976,28961,28982,29038,28956,29260,29316,29312,29494,29477,29492,29481,29754,29738,29747,29730,29733,29749,29750,29748,29743,29723,29734,29736,29989,29990,30059,30058,30178,30171,30179,30169,30168,30174,30176,30331,30332,30358,30355,30388,30428,30543,30701,30813,30828,30831,31245,31240,31243,31237,31232,31384,31383,31382,31461,31459,31561,31574,31558,31568,31570,31572,31565,31563,31567,31569,31903,31909,32094,32080,32104,32085,32043,32110,32114,32097,32102,32098,32112,32115,21892,32724,32725,32779,32850,32901,33109,33108,33099,33105,33102,33081,33094,33086,33100,33107,33140,33298,33308,33769,33795,33784,33805,33760,33733,33803,33729,33775,33777,33780,33879,33802,33776,33804,33740,33789,33778,33738,33848,33806,33796,33756,33799,33748,33759,34395,34527,34521,34541,34516,34523,34532,34512,34526,34903,35009,35010,34993,35203,35222,35387,35424,35413,35422,35388,35393,35412,35419,35408,35398,35380,35386,35382,35414,35937,35970,36015,36028,36019,36029,36033,36027,36032,36020,36023,36022,36031,36024,36234,36229,36225,36302,36317,36299,36314,36305,36300,36315,36294,36603,36600,36604,36764,36910,36917,36913,36920,36914,36918,37122,37109,37129,37118,37219,37221,37327,37396,37397,37411,37385,37406,37389,37392,37383,37393,38292,38287,38283,38289,38291,38290,38286,38538,38542,38539,38525,38533,38534,38541,38514,38532,38593,38597,38596,38598,38599,38639,38642,38860,38917,38918,38920,39143,39146,39151,39145,39154,39149,39342,39341,40643,40653,40657,20098,20653,20661,20658,20659,20677,20670,20652,20663,20667,20655,20679,21119,21111,21117,21215,21222,21220,21218,21219,21295,21983,21992,21971,21990,21966,21980,21959,21969,21987,21988,21999,21978,21985,21957,21958,21989,21961,22290,22291,22622,22609,22616,22615,22618,22612,22635,22604,22637,22602,22626,22610,22603,22887,23233,23241,23244,23230,23229,23228,23219,23234,23218,23913,23919,24140,24185,24265,24264,24338,24409,24492,24494,24858,24847,24904,24863,24819,24859,24825,24833,24840,24910,24908,24900,24909,24894,24884,24871,24845,24838,24887,25121,25122,25619,25662,25630,25642,25645,25661,25644,25615,25628,25620,25613,25654,25622,25623,25606,25964,26015,26032,26263,26249,26247,26248,26262,26244,26264,26253,26371,27028,26989,26970,26999,26976,26964,26997,26928,27010,26954,26984,26987,26974,26963,27001,27014,26973,26979,26971,27463,27506,27584,27583,27603,27645,28322,28335,28371,28342,28354,28304,28317,28359,28357,28325,28312,28348,28346,28331,28369,28310,28316,28356,28372,28330,28327,28340,29006,29017,29033,29028,29001,29031,29020,29036,29030,29004,29029,29022,28998,29032,29014,29242,29266,29495,29509,29503,29502,29807,29786,29781,29791,29790,29761,29759,29785,29787,29788,30070,30072,30208,30192,30209,30194,30193,30202,30207,30196,30195,30430,30431,30555,30571,30566,30558,30563,30585,30570,30572,30556,30565,30568,30562,30702,30862,30896,30871,30872,30860,30857,30844,30865,30867,30847,31098,31103,31105,33836,31165,31260,31258,31264,31252,31263,31262,31391,31392,31607,31680,31584,31598,31591,31921,31923,31925,32147,32121,32145,32129,32143,32091,32622,32617,32618,32626,32681,32680,32676,32854,32856,32902,32900,33137,33136,33144,33125,33134,33139,33131,33145,33146,33126,33285,33351,33922,33911,33853,33841,33909,33894,33899,33865,33900,33883,33852,33845,33889,33891,33897,33901,33862,34398,34396,34399,34553,34579,34568,34567,34560,34558,34555,34562,34563,34566,34570,34905,35039,35028,35033,35036,35032,35037,35041,35018,35029,35026,35228,35299,35435,35442,35443,35430,35433,35440,35463,35452,35427,35488,35441,35461,35437,35426,35438,35436,35449,35451,35390,35432,35938,35978,35977,36042,36039,36040,36036,36018,36035,36034,36037,36321,36319,36328,36335,36339,36346,36330,36324,36326,36530,36611,36617,36606,36618,36767,36786,36939,36938,36947,36930,36948,36924,36949,36944,36935,36943,36942,36941,36945,36926,36929,37138,37143,37228,37226,37225,37321,37431,37463,37432,37437,37440,37438,37467,37451,37476,37457,37428,37449,37453,37445,37433,37439,37466,38296,38552,38548,38549,38605,38603,38601,38602,38647,38651,38649,38646,38742,38772,38774,38928,38929,38931,38922,38930,38924,39164,39156,39165,39166,39347,39345,39348,39649,40169,40578,40718,40723,40736,20711,20718,20709,20694,20717,20698,20693,20687,20689,20721,20686,20713,20834,20979,21123,21122,21297,21421,22014,22016,22043,22039,22013,22036,22022,22025,22029,22030,22007,22038,22047,22024,22032,22006,22296,22294,22645,22654,22659,22675,22666,22649,22661,22653,22781,22821,22818,22820,22890,22889,23265,23270,23273,23255,23254,23256,23267,23413,23518,23527,23521,23525,23526,23528,23522,23524,23519,23565,23650,23940,23943,24155,24163,24149,24151,24148,24275,24278,24330,24390,24432,24505,24903,24895,24907,24951,24930,24931,24927,24922,24920,24949,25130,25735,25688,25684,25764,25720,25695,25722,25681,25703,25652,25709,25723,25970,26017,26071,26070,26274,26280,26269,27036,27048,27029,27073,27054,27091,27083,27035,27063,27067,27051,27060,27088,27085,27053,27084,27046,27075,27043,27465,27468,27699,28467,28436,28414,28435,28404,28457,28478,28448,28460,28431,28418,28450,28415,28399,28422,28465,28472,28466,28451,28437,28459,28463,28552,28458,28396,28417,28402,28364,28407,29076,29081,29053,29066,29060,29074,29246,29330,29334,29508,29520,29796,29795,29802,29808,29805,29956,30097,30247,30221,30219,30217,30227,30433,30435,30596,30589,30591,30561,30913,30879,30887,30899,30889,30883,31118,31119,31117,31278,31281,31402,31401,31469,31471,31649,31637,31627,31605,31639,31645,31636,31631,31672,31623,31620,31929,31933,31934,32187,32176,32156,32189,32190,32160,32202,32180,32178,32177,32186,32162,32191,32181,32184,32173,32210,32199,32172,32624,32736,32737,32735,32862,32858,32903,33104,33152,33167,33160,33162,33151,33154,33255,33274,33287,33300,33310,33355,33993,33983,33990,33988,33945,33950,33970,33948,33995,33976,33984,34003,33936,33980,34001,33994,34623,34588,34619,34594,34597,34612,34584,34645,34615,34601,35059,35074,35060,35065,35064,35069,35048,35098,35055,35494,35468,35486,35491,35469,35489,35475,35492,35498,35493,35496,35480,35473,35482,35495,35946,35981,35980,36051,36049,36050,36203,36249,36245,36348,36628,36626,36629,36627,36771,36960,36952,36956,36963,36953,36958,36962,36957,36955,37145,37144,37150,37237,37240,37239,37236,37496,37504,37509,37528,37526,37499,37523,37532,37544,37500,37521,38305,38312,38313,38307,38309,38308,38553,38556,38555,38604,38610,38656,38780,38789,38902,38935,38936,39087,39089,39171,39173,39180,39177,39361,39599,39600,39654,39745,39746,40180,40182,40179,40636,40763,40778,20740,20736,20731,20725,20729,20738,20744,20745,20741,20956,21127,21128,21129,21133,21130,21232,21426,22062,22075,22073,22066,22079,22068,22057,22099,22094,22103,22132,22070,22063,22064,22656,22687,22686,22707,22684,22702,22697,22694,22893,23305,23291,23307,23285,23308,23304,23534,23532,23529,23531,23652,23653,23965,23956,24162,24159,24161,24290,24282,24287,24285,24291,24288,24392,24433,24503,24501,24950,24935,24942,24925,24917,24962,24956,24944,24939,24958,24999,24976,25003,24974,25004,24986,24996,24980,25006,25134,25705,25711,25721,25758,25778,25736,25744,25776,25765,25747,25749,25769,25746,25774,25773,25771,25754,25772,25753,25762,25779,25973,25975,25976,26286,26283,26292,26289,27171,27167,27112,27137,27166,27161,27133,27169,27155,27146,27123,27138,27141,27117,27153,27472,27470,27556,27589,27590,28479,28540,28548,28497,28518,28500,28550,28525,28507,28536,28526,28558,28538,28528,28516,28567,28504,28373,28527,28512,28511,29087,29100,29105,29096,29270,29339,29518,29527,29801,29835,29827,29822,29824,30079,30240,30249,30239,30244,30246,30241,30242,30362,30394,30436,30606,30599,30604,30609,30603,30923,30917,30906,30922,30910,30933,30908,30928,31295,31292,31296,31293,31287,31291,31407,31406,31661,31665,31684,31668,31686,31687,31681,31648,31692,31946,32224,32244,32239,32251,32216,32236,32221,32232,32227,32218,32222,32233,32158,32217,32242,32249,32629,32631,32687,32745,32806,33179,33180,33181,33184,33178,33176,34071,34109,34074,34030,34092,34093,34067,34065,34083,34081,34068,34028,34085,34047,34054,34690,34676,34678,34656,34662,34680,34664,34649,34647,34636,34643,34907,34909,35088,35079,35090,35091,35093,35082,35516,35538,35527,35524,35477,35531,35576,35506,35529,35522,35519,35504,35542,35533,35510,35513,35547,35916,35918,35948,36064,36062,36070,36068,36076,36077,36066,36067,36060,36074,36065,36205,36255,36259,36395,36368,36381,36386,36367,36393,36383,36385,36382,36538,36637,36635,36639,36649,36646,36650,36636,36638,36645,36969,36974,36968,36973,36983,37168,37165,37159,37169,37255,37257,37259,37251,37573,37563,37559,37610,37548,37604,37569,37555,37564,37586,37575,37616,37554,38317,38321,38660,38662,38663,38665,38752,38797,38795,38799,38945,38955,38940,39091,39178,39187,39186,39192,39389,39376,39391,39387,39377,39381,39378,39385,39607,39662,39663,39719,39749,39748,39799,39791,40198,40201,40195,40617,40638,40654,22696,40786,20754,20760,20756,20752,20757,20864,20906,20957,21137,21139,21235,22105,22123,22137,22121,22116,22136,22122,22120,22117,22129,22127,22124,22114,22134,22721,22718,22727,22725,22894,23325,23348,23416,23536,23566,24394,25010,24977,25001,24970,25037,25014,25022,25034,25032,25136,25797,25793,25803,25787,25788,25818,25796,25799,25794,25805,25791,25810,25812,25790,25972,26310,26313,26297,26308,26311,26296,27197,27192,27194,27225,27243,27224,27193,27204,27234,27233,27211,27207,27189,27231,27208,27481,27511,27653,28610,28593,28577,28611,28580,28609,28583,28595,28608,28601,28598,28582,28576,28596,29118,29129,29136,29138,29128,29141,29113,29134,29145,29148,29123,29124,29544,29852,29859,29848,29855,29854,29922,29964,29965,30260,30264,30266,30439,30437,30624,30622,30623,30629,30952,30938,30956,30951,31142,31309,31310,31302,31308,31307,31418,31705,31761,31689,31716,31707,31713,31721,31718,31957,31958,32266,32273,32264,32283,32291,32286,32285,32265,32272,32633,32690,32752,32753,32750,32808,33203,33193,33192,33275,33288,33368,33369,34122,34137,34120,34152,34153,34115,34121,34157,34154,34142,34691,34719,34718,34722,34701,34913,35114,35122,35109,35115,35105,35242,35238,35558,35578,35563,35569,35584,35548,35559,35566,35582,35585,35586,35575,35565,35571,35574,35580,35947,35949,35987,36084,36420,36401,36404,36418,36409,36405,36667,36655,36664,36659,36776,36774,36981,36980,36984,36978,36988,36986,37172,37266,37664,37686,37624,37683,37679,37666,37628,37675,37636,37658,37648,37670,37665,37653,37678,37657,38331,38567,38568,38570,38613,38670,38673,38678,38669,38675,38671,38747,38748,38758,38808,38960,38968,38971,38967,38957,38969,38948,39184,39208,39198,39195,39201,39194,39405,39394,39409,39608,39612,39675,39661,39720,39825,40213,40227,40230,40232,40210,40219,40664,40660,40845,40860,20778,20767,20769,20786,21237,22158,22144,22160,22149,22151,22159,22741,22739,22737,22734,23344,23338,23332,23418,23607,23656,23996,23994,23997,23992,24171,24396,24509,25033,25026,25031,25062,25035,25138,25140,25806,25802,25816,25824,25840,25830,25836,25841,25826,25837,25986,25987,26329,26326,27264,27284,27268,27298,27292,27355,27299,27262,27287,27280,27296,27484,27566,27610,27656,28632,28657,28639,28640,28635,28644,28651,28655,28544,28652,28641,28649,28629,28654,28656,29159,29151,29166,29158,29157,29165,29164,29172,29152,29237,29254,29552,29554,29865,29872,29862,29864,30278,30274,30284,30442,30643,30634,30640,30636,30631,30637,30703,30967,30970,30964,30959,30977,31143,31146,31319,31423,31751,31757,31742,31735,31756,31712,31968,31964,31966,31970,31967,31961,31965,32302,32318,32326,32311,32306,32323,32299,32317,32305,32325,32321,32308,32313,32328,32309,32319,32303,32580,32755,32764,32881,32882,32880,32879,32883,33222,33219,33210,33218,33216,33215,33213,33225,33214,33256,33289,33393,34218,34180,34174,34204,34193,34196,34223,34203,34183,34216,34186,34407,34752,34769,34739,34770,34758,34731,34747,34746,34760,34763,35131,35126,35140,35128,35133,35244,35598,35607,35609,35611,35594,35616,35613,35588,35600,35905,35903,35955,36090,36093,36092,36088,36091,36264,36425,36427,36424,36426,36676,36670,36674,36677,36671,36991,36989,36996,36993,36994,36992,37177,37283,37278,37276,37709,37762,37672,37749,37706,37733,37707,37656,37758,37740,37723,37744,37722,37716,38346,38347,38348,38344,38342,38577,38584,38614,38684,38686,38816,38867,38982,39094,39221,39425,39423,39854,39851,39850,39853,40251,40255,40587,40655,40670,40668,40669,40667,40766,40779,21474,22165,22190,22745,22744,23352,24413,25059,25139,25844,25842,25854,25862,25850,25851,25847,26039,26332,26406,27315,27308,27331,27323,27320,27330,27310,27311,27487,27512,27567,28681,28683,28670,28678,28666,28689,28687,29179,29180,29182,29176,29559,29557,29863,29887,29973,30294,30296,30290,30653,30655,30651,30652,30990,31150,31329,31330,31328,31428,31429,31787,31783,31786,31774,31779,31777,31975,32340,32341,32350,32346,32353,32338,32345,32584,32761,32763,32887,32886,33229,33231,33290,34255,34217,34253,34256,34249,34224,34234,34233,34214,34799,34796,34802,34784,35206,35250,35316,35624,35641,35628,35627,35920,36101,36441,36451,36454,36452,36447,36437,36544,36681,36685,36999,36995,37000,37291,37292,37328,37780,37770,37782,37794,37811,37806,37804,37808,37784,37786,37783,38356,38358,38352,38357,38626,38620,38617,38619,38622,38692,38819,38822,38829,38905,38989,38991,38988,38990,38995,39098,39230,39231,39229,39214,39333,39438,39617,39683,39686,39759,39758,39757,39882,39881,39933,39880,39872,40273,40285,40288,40672,40725,40748,20787,22181,22750,22751,22754,23541,40848,24300,25074,25079,25078,25077,25856,25871,26336,26333,27365,27357,27354,27347,28699,28703,28712,28698,28701,28693,28696,29190,29197,29272,29346,29560,29562,29885,29898,29923,30087,30086,30303,30305,30663,31001,31153,31339,31337,31806,31807,31800,31805,31799,31808,32363,32365,32377,32361,32362,32645,32371,32694,32697,32696,33240,34281,34269,34282,34261,34276,34277,34295,34811,34821,34829,34809,34814,35168,35167,35158,35166,35649,35676,35672,35657,35674,35662,35663,35654,35673,36104,36106,36476,36466,36487,36470,36460,36474,36468,36692,36686,36781,37002,37003,37297,37294,37857,37841,37855,37827,37832,37852,37853,37846,37858,37837,37848,37860,37847,37864,38364,38580,38627,38698,38695,38753,38876,38907,39006,39000,39003,39100,39237,39241,39446,39449,39693,39912,39911,39894,39899,40329,40289,40306,40298,40300,40594,40599,40595,40628,21240,22184,22199,22198,22196,22204,22756,23360,23363,23421,23542,24009,25080,25082,25880,25876,25881,26342,26407,27372,28734,28720,28722,29200,29563,29903,30306,30309,31014,31018,31020,31019,31431,31478,31820,31811,31821,31983,31984,36782,32381,32380,32386,32588,32768,33242,33382,34299,34297,34321,34298,34310,34315,34311,34314,34836,34837,35172,35258,35320,35696,35692,35686,35695,35679,35691,36111,36109,36489,36481,36485,36482,37300,37323,37912,37891,37885,38369,38704,39108,39250,39249,39336,39467,39472,39479,39477,39955,39949,40569,40629,40680,40751,40799,40803,40801,20791,20792,22209,22208,22210,22804,23660,24013,25084,25086,25885,25884,26005,26345,27387,27396,27386,27570,28748,29211,29351,29910,29908,30313,30675,31824,32399,32396,32700,34327,34349,34330,34851,34850,34849,34847,35178,35180,35261,35700,35703,35709,36115,36490,36493,36491,36703,36783,37306,37934,37939,37941,37946,37944,37938,37931,38370,38712,38713,38706,38911,39015,39013,39255,39493,39491,39488,39486,39631,39764,39761,39981,39973,40367,40372,40386,40376,40605,40687,40729,40796,40806,40807,20796,20795,22216,22218,22217,23423,24020,24018,24398,25087,25892,27402,27489,28753,28760,29568,29924,30090,30318,30316,31155,31840,31839,32894,32893,33247,35186,35183,35324,35712,36118,36119,36497,36499,36705,37192,37956,37969,37970,38717,38718,38851,38849,39019,39253,39509,39501,39634,39706,40009,39985,39998,39995,40403,40407,40756,40812,40810,40852,22220,24022,25088,25891,25899,25898,26348,27408,29914,31434,31844,31843,31845,32403,32406,32404,33250,34360,34367,34865,35722,37008,37007,37987,37984,37988,38760,39023,39260,39514,39515,39511,39635,39636,39633,40020,40023,40022,40421,40607,40692,22225,22761,25900,28766,30321,30322,30679,32592,32648,34870,34873,34914,35731,35730,35734,33399,36123,37312,37994,38722,38728,38724,38854,39024,39519,39714,39768,40031,40441,40442,40572,40573,40711,40823,40818,24307,27414,28771,31852,31854,34875,35264,36513,37313,38002,38000,39025,39262,39638,39715,40652,28772,30682,35738,38007,38857,39522,39525,32412,35740,36522,37317,38013,38014,38012,40055,40056,40695,35924,38015,40474,29224,39530,39729,40475,40478,31858,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,20022,20031,20101,20128,20866,20886,20907,21241,21304,21353,21430,22794,23424,24027,12083,24191,24308,24400,24417,25908,26080,30098,30326,36789,38582,168,710,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,65339,65341,10045,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8679,8632,8633,12751,131276,20058,131210,20994,17553,40880,20872,40881,161287,11254=>65506,65508,65287,65282,12849,8470,8481,12443,12444,11904,11908,11910,11911,11912,11914,11916,11917,11925,11932,11933,11941,11943,11946,11948,11950,11958,11964,11966,11974,11978,11980,11981,11983,11990,11991,11998,12003,11294=>643,592,603,596,629,339,248,331,650,618,20034,20060,20981,21274,21378,19975,19980,20039,20109,22231,64012,23662,24435,19983,20871,19982,20014,20115,20162,20169,20168,20888,21244,21356,21433,22304,22787,22828,23568,24063,26081,27571,27596,27668,29247,20017,20028,20200,20188,20201,20193,20189,20186,21004,21276,21324,22306,22307,22807,22831,23425,23428,23570,23611,23668,23667,24068,24192,24194,24521,25097,25168,27669,27702,27715,27711,27707,29358,29360,29578,31160,32906,38430,20238,20248,20268,20213,20244,20209,20224,20215,20232,20253,20226,20229,20258,20243,20228,20212,20242,20913,21011,21001,21008,21158,21282,21279,21325,21386,21511,22241,22239,22318,22314,22324,22844,22912,22908,22917,22907,22910,22903,22911,23382,23573,23589,23676,23674,23675,23678,24031,24181,24196,24322,24346,24436,24533,24532,24527,25180,25182,25188,25185,25190,25186,25177,25184,25178,25189,26095,26094,26430,26425,26424,26427,26426,26431,26428,26419,27672,27718,27730,27740,27727,27722,27732,27723,27724,28785,29278,29364,29365,29582,29994,30335,31349,32593,33400,33404,33408,33405,33407,34381,35198,37017,37015,37016,37019,37012,38434,38436,38432,38435,20310,20283,20322,20297,20307,20324,20286,20327,20306,20319,20289,20312,20269,20275,20287,20321,20879,20921,21020,21022,21025,21165,21166,21257,21347,21362,21390,21391,21552,21559,21546,21588,21573,21529,21532,21541,21528,21565,21583,21569,21544,21540,21575,22254,22247,22245,22337,22341,22348,22345,22347,22354,22790,22848,22950,22936,22944,22935,22926,22946,22928,22927,22951,22945,23438,23442,23592,23594,23693,23695,23688,23691,23689,23698,23690,23686,23699,23701,24032,24074,24078,24203,24201,24204,24200,24205,24325,24349,24440,24438,24530,24529,24528,24557,24552,24558,24563,24545,24548,24547,24570,24559,24567,24571,24576,24564,25146,25219,25228,25230,25231,25236,25223,25201,25211,25210,25200,25217,25224,25207,25213,25202,25204,25911,26096,26100,26099,26098,26101,26437,26439,26457,26453,26444,26440,26461,26445,26458,26443,27600,27673,27674,27768,27751,27755,27780,27787,27791,27761,27759,27753,27802,27757,27783,27797,27804,27750,27763,27749,27771,27790,28788,28794,29283,29375,29373,29379,29382,29377,29370,29381,29589,29591,29587,29588,29586,30010,30009,30100,30101,30337,31037,32820,32917,32921,32912,32914,32924,33424,33423,33413,33422,33425,33427,33418,33411,33412,35960,36809,36799,37023,37025,37029,37022,37031,37024,38448,38440,38447,38445,20019,20376,20348,20357,20349,20352,20359,20342,20340,20361,20356,20343,20300,20375,20330,20378,20345,20353,20344,20368,20380,20372,20382,20370,20354,20373,20331,20334,20894,20924,20926,21045,21042,21043,21062,21041,21180,21258,21259,21308,21394,21396,21639,21631,21633,21649,21634,21640,21611,21626,21630,21605,21612,21620,21606,21645,21615,21601,21600,21656,21603,21607,21604,22263,22265,22383,22386,22381,22379,22385,22384,22390,22400,22389,22395,22387,22388,22370,22376,22397,22796,22853,22965,22970,22991,22990,22962,22988,22977,22966,22972,22979,22998,22961,22973,22976,22984,22964,22983,23394,23397,23443,23445,23620,23623,23726,23716,23712,23733,23727,23720,23724,23711,23715,23725,23714,23722,23719,23709,23717,23734,23728,23718,24087,24084,24089,24360,24354,24355,24356,24404,24450,24446,24445,24542,24549,24621,24614,24601,24626,24587,24628,24586,24599,24627,24602,24606,24620,24610,24589,24592,24622,24595,24593,24588,24585,24604,25108,25149,25261,25268,25297,25278,25258,25270,25290,25262,25267,25263,25275,25257,25264,25272,25917,26024,26043,26121,26108,26116,26130,26120,26107,26115,26123,26125,26117,26109,26129,26128,26358,26378,26501,26476,26510,26514,26486,26491,26520,26502,26500,26484,26509,26508,26490,26527,26513,26521,26499,26493,26497,26488,26489,26516,27429,27520,27518,27614,27677,27795,27884,27883,27886,27865,27830,27860,27821,27879,27831,27856,27842,27834,27843,27846,27885,27890,27858,27869,27828,27786,27805,27776,27870,27840,27952,27853,27847,27824,27897,27855,27881,27857,28820,28824,28805,28819,28806,28804,28817,28822,28802,28826,28803,29290,29398,29387,29400,29385,29404,29394,29396,29402,29388,29393,29604,29601,29613,29606,29602,29600,29612,29597,29917,29928,30015,30016,30014,30092,30104,30383,30451,30449,30448,30453,30712,30716,30713,30715,30714,30711,31042,31039,31173,31352,31355,31483,31861,31997,32821,32911,32942,32931,32952,32949,32941,33312,33440,33472,33451,33434,33432,33435,33461,33447,33454,33468,33438,33466,33460,33448,33441,33449,33474,33444,33475,33462,33442,34416,34415,34413,34414,35926,36818,36811,36819,36813,36822,36821,36823,37042,37044,37039,37043,37040,38457,38461,38460,38458,38467,20429,20421,20435,20402,20425,20427,20417,20436,20444,20441,20411,20403,20443,20423,20438,20410,20416,20409,20460,21060,21065,21184,21186,21309,21372,21399,21398,21401,21400,21690,21665,21677,21669,21711,21699,33549,21687,21678,21718,21686,21701,21702,21664,21616,21692,21666,21694,21618,21726,21680,22453,22430,22431,22436,22412,22423,22429,22427,22420,22424,22415,22425,22437,22426,22421,22772,22797,22867,23009,23006,23022,23040,23025,23005,23034,23037,23036,23030,23012,23026,23031,23003,23017,23027,23029,23008,23038,23028,23021,23464,23628,23760,23768,23756,23767,23755,23771,23774,23770,23753,23751,23754,23766,23763,23764,23759,23752,23750,23758,23775,23800,24057,24097,24098,24099,24096,24100,24240,24228,24226,24219,24227,24229,24327,24366,24406,24454,24631,24633,24660,24690,24670,24645,24659,24647,24649,24667,24652,24640,24642,24671,24612,24644,24664,24678,24686,25154,25155,25295,25357,25355,25333,25358,25347,25323,25337,25359,25356,25336,25334,25344,25363,25364,25338,25365,25339,25328,25921,25923,26026,26047,26166,26145,26162,26165,26140,26150,26146,26163,26155,26170,26141,26164,26169,26158,26383,26384,26561,26610,26568,26554,26588,26555,26616,26584,26560,26551,26565,26603,26596,26591,26549,26573,26547,26615,26614,26606,26595,26562,26553,26574,26599,26608,26546,26620,26566,26605,26572,26542,26598,26587,26618,26569,26570,26563,26602,26571,27432,27522,27524,27574,27606,27608,27616,27680,27681,27944,27956,27949,27935,27964,27967,27922,27914,27866,27955,27908,27929,27962,27930,27921,27904,27933,27970,27905,27928,27959,27907,27919,27968,27911,27936,27948,27912,27938,27913,27920,28855,28831,28862,28849,28848,28833,28852,28853,28841,29249,29257,29258,29292,29296,29299,29294,29386,29412,29416,29419,29407,29418,29414,29411,29573,29644,29634,29640,29637,29625,29622,29621,29620,29675,29631,29639,29630,29635,29638,29624,29643,29932,29934,29998,30023,30024,30119,30122,30329,30404,30472,30467,30468,30469,30474,30455,30459,30458,30695,30696,30726,30737,30738,30725,30736,30735,30734,30729,30723,30739,31050,31052,31051,31045,31044,31189,31181,31183,31190,31182,31360,31358,31441,31488,31489,31866,31864,31865,31871,31872,31873,32003,32008,32001,32600,32657,32653,32702,32775,32782,32783,32788,32823,32984,32967,32992,32977,32968,32962,32976,32965,32995,32985,32988,32970,32981,32969,32975,32983,32998,32973,33279,33313,33428,33497,33534,33529,33543,33512,33536,33493,33594,33515,33494,33524,33516,33505,33522,33525,33548,33531,33526,33520,33514,33508,33504,33530,33523,33517,34423,34420,34428,34419,34881,34894,34919,34922,34921,35283,35332,35335,36210,36835,36833,36846,36832,37105,37053,37055,37077,37061,37054,37063,37067,37064,37332,37331,38484,38479,38481,38483,38474,38478,20510,20485,20487,20499,20514,20528,20507,20469,20468,20531,20535,20524,20470,20471,20503,20508,20512,20519,20533,20527,20529,20494,20826,20884,20883,20938,20932,20933,20936,20942,21089,21082,21074,21086,21087,21077,21090,21197,21262,21406,21798,21730,21783,21778,21735,21747,21732,21786,21759,21764,21768,21739,21777,21765,21745,21770,21755,21751,21752,21728,21774,21763,21771,22273,22274,22476,22578,22485,22482,22458,22470,22461,22460,22456,22454,22463,22471,22480,22457,22465,22798,22858,23065,23062,23085,23086,23061,23055,23063,23050,23070,23091,23404,23463,23469,23468,23555,23638,23636,23788,23807,23790,23793,23799,23808,23801,24105,24104,24232,24238,24234,24236,24371,24368,24423,24669,24666,24679,24641,24738,24712,24704,24722,24705,24733,24707,24725,24731,24727,24711,24732,24718,25113,25158,25330,25360,25430,25388,25412,25413,25398,25411,25572,25401,25419,25418,25404,25385,25409,25396,25432,25428,25433,25389,25415,25395,25434,25425,25400,25431,25408,25416,25930,25926,26054,26051,26052,26050,26186,26207,26183,26193,26386,26387,26655,26650,26697,26674,26675,26683,26699,26703,26646,26673,26652,26677,26667,26669,26671,26702,26692,26676,26653,26642,26644,26662,26664,26670,26701,26682,26661,26656,27436,27439,27437,27441,27444,27501,32898,27528,27622,27620,27624,27619,27618,27623,27685,28026,28003,28004,28022,27917,28001,28050,27992,28002,28013,28015,28049,28045,28143,28031,28038,27998,28007,28000,28055,28016,28028,27999,28034,28056,27951,28008,28043,28030,28032,28036,27926,28035,28027,28029,28021,28048,28892,28883,28881,28893,28875,32569,28898,28887,28882,28894,28896,28884,28877,28869,28870,28871,28890,28878,28897,29250,29304,29303,29302,29440,29434,29428,29438,29430,29427,29435,29441,29651,29657,29669,29654,29628,29671,29667,29673,29660,29650,29659,29652,29661,29658,29655,29656,29672,29918,29919,29940,29941,29985,30043,30047,30128,30145,30139,30148,30144,30143,30134,30138,30346,30409,30493,30491,30480,30483,30482,30499,30481,30485,30489,30490,30498,30503,30755,30764,30754,30773,30767,30760,30766,30763,30753,30761,30771,30762,30769,31060,31067,31055,31068,31059,31058,31057,31211,31212,31200,31214,31213,31210,31196,31198,31197,31366,31369,31365,31371,31372,31370,31367,31448,31504,31492,31507,31493,31503,31496,31498,31502,31497,31506,31876,31889,31882,31884,31880,31885,31877,32030,32029,32017,32014,32024,32022,32019,32031,32018,32015,32012,32604,32609,32606,32608,32605,32603,32662,32658,32707,32706,32704,32790,32830,32825,33018,33010,33017,33013,33025,33019,33024,33281,33327,33317,33587,33581,33604,33561,33617,33573,33622,33599,33601,33574,33564,33570,33602,33614,33563,33578,33544,33596,33613,33558,33572,33568,33591,33583,33577,33607,33605,33612,33619,33566,33580,33611,33575,33608,34387,34386,34466,34472,34454,34445,34449,34462,34439,34455,34438,34443,34458,34437,34469,34457,34465,34471,34453,34456,34446,34461,34448,34452,34883,34884,34925,34933,34934,34930,34944,34929,34943,34927,34947,34942,34932,34940,35346,35911,35927,35963,36004,36003,36214,36216,36277,36279,36278,36561,36563,36862,36853,36866,36863,36859,36868,36860,36854,37078,37088,37081,37082,37091,37087,37093,37080,37083,37079,37084,37092,37200,37198,37199,37333,37346,37338,38492,38495,38588,39139,39647,39727,20095,20592,20586,20577,20574,20576,20563,20555,20573,20594,20552,20557,20545,20571,20554,20578,20501,20549,20575,20585,20587,20579,20580,20550,20544,20590,20595,20567,20561,20944,21099,21101,21100,21102,21206,21203,21293,21404,21877,21878,21820,21837,21840,21812,21802,21841,21858,21814,21813,21808,21842,21829,21772,21810,21861,21838,21817,21832,21805,21819,21824,21835,22282,22279,22523,22548,22498,22518,22492,22516,22528,22509,22525,22536,22520,22539,22515,22479,22535,22510,22499,22514,22501,22508,22497,22542,22524,22544,22503,22529,22540,22513,22505,22512,22541,22532,22876,23136,23128,23125,23143,23134,23096,23093,23149,23120,23135,23141,23148,23123,23140,23127,23107,23133,23122,23108,23131,23112,23182,23102,23117,23097,23116,23152,23145,23111,23121,23126,23106,23132,23410,23406,23489,23488,23641,23838,23819,23837,23834,23840,23820,23848,23821,23846,23845,23823,23856,23826,23843,23839,23854,24126,24116,24241,24244,24249,24242,24243,24374,24376,24475,24470,24479,24714,24720,24710,24766,24752,24762,24787,24788,24783,24804,24793,24797,24776,24753,24795,24759,24778,24767,24771,24781,24768,25394,25445,25482,25474,25469,25533,25502,25517,25501,25495,25515,25486,25455,25479,25488,25454,25519,25461,25500,25453,25518,25468,25508,25403,25503,25464,25477,25473,25489,25485,25456,25939,26061,26213,26209,26203,26201,26204,26210,26392,26745,26759,26768,26780,26733,26734,26798,26795,26966,26735,26787,26796,26793,26741,26740,26802,26767,26743,26770,26748,26731,26738,26794,26752,26737,26750,26779,26774,26763,26784,26761,26788,26744,26747,26769,26764,26762,26749,27446,27443,27447,27448,27537,27535,27533,27534,27532,27690,28096,28075,28084,28083,28276,28076,28137,28130,28087,28150,28116,28160,28104,28128,28127,28118,28094,28133,28124,28125,28123,28148,28106,28093,28141,28144,28090,28117,28098,28111,28105,28112,28146,28115,28157,28119,28109,28131,28091,28922,28941,28919,28951,28916,28940,28912,28932,28915,28944,28924,28927,28934,28947,28928,28920,28918,28939,28930,28942,29310,29307,29308,29311,29469,29463,29447,29457,29464,29450,29448,29439,29455,29470,29576,29686,29688,29685,29700,29697,29693,29703,29696,29690,29692,29695,29708,29707,29684,29704,30052,30051,30158,30162,30159,30155,30156,30161,30160,30351,30345,30419,30521,30511,30509,30513,30514,30516,30515,30525,30501,30523,30517,30792,30802,30793,30797,30794,30796,30758,30789,30800,31076,31079,31081,31082,31075,31083,31073,31163,31226,31224,31222,31223,31375,31380,31376,31541,31559,31540,31525,31536,31522,31524,31539,31512,31530,31517,31537,31531,31533,31535,31538,31544,31514,31523,31892,31896,31894,31907,32053,32061,32056,32054,32058,32069,32044,32041,32065,32071,32062,32063,32074,32059,32040,32611,32661,32668,32669,32667,32714,32715,32717,32720,32721,32711,32719,32713,32799,32798,32795,32839,32835,32840,33048,33061,33049,33051,33069,33055,33068,33054,33057,33045,33063,33053,33058,33297,33336,33331,33338,33332,33330,33396,33680,33699,33704,33677,33658,33651,33700,33652,33679,33665,33685,33689,33653,33684,33705,33661,33667,33676,33693,33691,33706,33675,33662,33701,33711,33672,33687,33712,33663,33702,33671,33710,33654,33690,34393,34390,34495,34487,34498,34497,34501,34490,34480,34504,34489,34483,34488,34508,34484,34491,34492,34499,34493,34494,34898,34953,34965,34984,34978,34986,34970,34961,34977,34975,34968,34983,34969,34971,34967,34980,34988,34956,34963,34958,35202,35286,35289,35285,35376,35367,35372,35358,35897,35899,35932,35933,35965,36005,36221,36219,36217,36284,36290,36281,36287,36289,36568,36574,36573,36572,36567,36576,36577,36900,36875,36881,36892,36876,36897,37103,37098,37104,37108,37106,37107,37076,37099,37100,37097,37206,37208,37210,37203,37205,37356,37364,37361,37363,37368,37348,37369,37354,37355,37367,37352,37358,38266,38278,38280,38524,38509,38507,38513,38511,38591,38762,38916,39141,39319,20635,20629,20628,20638,20619,20643,20611,20620,20622,20637,20584,20636,20626,20610,20615,20831,20948,21266,21265,21412,21415,21905,21928,21925,21933,21879,22085,21922,21907,21896,21903,21941,21889,21923,21906,21924,21885,21900,21926,21887,21909,21921,21902,22284,22569,22583,22553,22558,22567,22563,22568,22517,22600,22565,22556,22555,22579,22591,22582,22574,22585,22584,22573,22572,22587,22881,23215,23188,23199,23162,23202,23198,23160,23206,23164,23205,23212,23189,23214,23095,23172,23178,23191,23171,23179,23209,23163,23165,23180,23196,23183,23187,23197,23530,23501,23499,23508,23505,23498,23502,23564,23600,23863,23875,23915,23873,23883,23871,23861,23889,23886,23893,23859,23866,23890,23869,23857,23897,23874,23865,23881,23864,23868,23858,23862,23872,23877,24132,24129,24408,24486,24485,24491,24777,24761,24780,24802,24782,24772,24852,24818,24842,24854,24837,24821,24851,24824,24828,24830,24769,24835,24856,24861,24848,24831,24836,24843,25162,25492,25521,25520,25550,25573,25576,25583,25539,25757,25587,25546,25568,25590,25557,25586,25589,25697,25567,25534,25565,25564,25540,25560,25555,25538,25543,25548,25547,25544,25584,25559,25561,25906,25959,25962,25956,25948,25960,25957,25996,26013,26014,26030,26064,26066,26236,26220,26235,26240,26225,26233,26218,26226,26369,26892,26835,26884,26844,26922,26860,26858,26865,26895,26838,26871,26859,26852,26870,26899,26896,26867,26849,26887,26828,26888,26992,26804,26897,26863,26822,26900,26872,26832,26877,26876,26856,26891,26890,26903,26830,26824,26845,26846,26854,26868,26833,26886,26836,26857,26901,26917,26823,27449,27451,27455,27452,27540,27543,27545,27541,27581,27632,27634,27635,27696,28156,28230,28231,28191,28233,28296,28220,28221,28229,28258,28203,28223,28225,28253,28275,28188,28211,28235,28224,28241,28219,28163,28206,28254,28264,28252,28257,28209,28200,28256,28273,28267,28217,28194,28208,28243,28261,28199,28280,28260,28279,28245,28281,28242,28262,28213,28214,28250,28960,28958,28975,28923,28974,28977,28963,28965,28962,28978,28959,28968,28986,28955,29259,29274,29320,29321,29318,29317,29323,29458,29451,29488,29474,29489,29491,29479,29490,29485,29478,29475,29493,29452,29742,29740,29744,29739,29718,29722,29729,29741,29745,29732,29731,29725,29737,29728,29746,29947,29999,30063,30060,30183,30170,30177,30182,30173,30175,30180,30167,30357,30354,30426,30534,30535,30532,30541,30533,30538,30542,30539,30540,30686,30700,30816,30820,30821,30812,30829,30833,30826,30830,30832,30825,30824,30814,30818,31092,31091,31090,31088,31234,31242,31235,31244,31236,31385,31462,31460,31562,31547,31556,31560,31564,31566,31552,31576,31557,31906,31902,31912,31905,32088,32111,32099,32083,32086,32103,32106,32079,32109,32092,32107,32082,32084,32105,32081,32095,32078,32574,32575,32613,32614,32674,32672,32673,32727,32849,32847,32848,33022,32980,33091,33098,33106,33103,33095,33085,33101,33082,33254,33262,33271,33272,33273,33284,33340,33341,33343,33397,33595,33743,33785,33827,33728,33768,33810,33767,33764,33788,33782,33808,33734,33736,33771,33763,33727,33793,33757,33765,33752,33791,33761,33739,33742,33750,33781,33737,33801,33807,33758,33809,33798,33730,33779,33749,33786,33735,33745,33770,33811,33731,33772,33774,33732,33787,33751,33762,33819,33755,33790,34520,34530,34534,34515,34531,34522,34538,34525,34539,34524,34540,34537,34519,34536,34513,34888,34902,34901,35002,35031,35001,35000,35008,35006,34998,35004,34999,35005,34994,35073,35017,35221,35224,35223,35293,35290,35291,35406,35405,35385,35417,35392,35415,35416,35396,35397,35410,35400,35409,35402,35404,35407,35935,35969,35968,36026,36030,36016,36025,36021,36228,36224,36233,36312,36307,36301,36295,36310,36316,36303,36309,36313,36296,36311,36293,36591,36599,36602,36601,36582,36590,36581,36597,36583,36584,36598,36587,36593,36588,36596,36585,36909,36916,36911,37126,37164,37124,37119,37116,37128,37113,37115,37121,37120,37127,37125,37123,37217,37220,37215,37218,37216,37377,37386,37413,37379,37402,37414,37391,37388,37376,37394,37375,37373,37382,37380,37415,37378,37404,37412,37401,37399,37381,37398,38267,38285,38284,38288,38535,38526,38536,38537,38531,38528,38594,38600,38595,38641,38640,38764,38768,38766,38919,39081,39147,40166,40697,20099,20100,20150,20669,20671,20678,20654,20676,20682,20660,20680,20674,20656,20673,20666,20657,20683,20681,20662,20664,20951,21114,21112,21115,21116,21955,21979,21964,21968,21963,21962,21981,21952,21972,21956,21993,21951,21970,21901,21967,21973,21986,21974,21960,22002,21965,21977,21954,22292,22611,22632,22628,22607,22605,22601,22639,22613,22606,22621,22617,22629,22619,22589,22627,22641,22780,23239,23236,23243,23226,23224,23217,23221,23216,23231,23240,23227,23238,23223,23232,23242,23220,23222,23245,23225,23184,23510,23512,23513,23583,23603,23921,23907,23882,23909,23922,23916,23902,23912,23911,23906,24048,24143,24142,24138,24141,24139,24261,24268,24262,24267,24263,24384,24495,24493,24823,24905,24906,24875,24901,24886,24882,24878,24902,24879,24911,24873,24896,25120,37224,25123,25125,25124,25541,25585,25579,25616,25618,25609,25632,25636,25651,25667,25631,25621,25624,25657,25655,25634,25635,25612,25638,25648,25640,25665,25653,25647,25610,25626,25664,25637,25639,25611,25575,25627,25646,25633,25614,25967,26002,26067,26246,26252,26261,26256,26251,26250,26265,26260,26232,26400,26982,26975,26936,26958,26978,26993,26943,26949,26986,26937,26946,26967,26969,27002,26952,26953,26933,26988,26931,26941,26981,26864,27000,26932,26985,26944,26991,26948,26998,26968,26945,26996,26956,26939,26955,26935,26972,26959,26961,26930,26962,26927,27003,26940,27462,27461,27459,27458,27464,27457,27547,64013,27643,27644,27641,27639,27640,28315,28374,28360,28303,28352,28319,28307,28308,28320,28337,28345,28358,28370,28349,28353,28318,28361,28343,28336,28365,28326,28367,28338,28350,28355,28380,28376,28313,28306,28302,28301,28324,28321,28351,28339,28368,28362,28311,28334,28323,28999,29012,29010,29027,29024,28993,29021,29026,29042,29048,29034,29025,28994,29016,28995,29003,29040,29023,29008,29011,28996,29005,29018,29263,29325,29324,29329,29328,29326,29500,29506,29499,29498,29504,29514,29513,29764,29770,29771,29778,29777,29783,29760,29775,29776,29774,29762,29766,29773,29780,29921,29951,29950,29949,29981,30073,30071,27011,30191,30223,30211,30199,30206,30204,30201,30200,30224,30203,30198,30189,30197,30205,30361,30389,30429,30549,30559,30560,30546,30550,30554,30569,30567,30548,30553,30573,30688,30855,30874,30868,30863,30852,30869,30853,30854,30881,30851,30841,30873,30848,30870,30843,31100,31106,31101,31097,31249,31256,31257,31250,31255,31253,31266,31251,31259,31248,31395,31394,31390,31467,31590,31588,31597,31604,31593,31602,31589,31603,31601,31600,31585,31608,31606,31587,31922,31924,31919,32136,32134,32128,32141,32127,32133,32122,32142,32123,32131,32124,32140,32148,32132,32125,32146,32621,32619,32615,32616,32620,32678,32677,32679,32731,32732,32801,33124,33120,33143,33116,33129,33115,33122,33138,26401,33118,33142,33127,33135,33092,33121,33309,33353,33348,33344,33346,33349,34033,33855,33878,33910,33913,33935,33933,33893,33873,33856,33926,33895,33840,33869,33917,33882,33881,33908,33907,33885,34055,33886,33847,33850,33844,33914,33859,33912,33842,33861,33833,33753,33867,33839,33858,33837,33887,33904,33849,33870,33868,33874,33903,33989,33934,33851,33863,33846,33843,33896,33918,33860,33835,33888,33876,33902,33872,34571,34564,34551,34572,34554,34518,34549,34637,34552,34574,34569,34561,34550,34573,34565,35030,35019,35021,35022,35038,35035,35034,35020,35024,35205,35227,35295,35301,35300,35297,35296,35298,35292,35302,35446,35462,35455,35425,35391,35447,35458,35460,35445,35459,35457,35444,35450,35900,35915,35914,35941,35940,35942,35974,35972,35973,36044,36200,36201,36241,36236,36238,36239,36237,36243,36244,36240,36242,36336,36320,36332,36337,36334,36304,36329,36323,36322,36327,36338,36331,36340,36614,36607,36609,36608,36613,36615,36616,36610,36619,36946,36927,36932,36937,36925,37136,37133,37135,37137,37142,37140,37131,37134,37230,37231,37448,37458,37424,37434,37478,37427,37477,37470,37507,37422,37450,37446,37485,37484,37455,37472,37479,37487,37430,37473,37488,37425,37460,37475,37456,37490,37454,37459,37452,37462,37426,38303,38300,38302,38299,38546,38547,38545,38551,38606,38650,38653,38648,38645,38771,38775,38776,38770,38927,38925,38926,39084,39158,39161,39343,39346,39344,39349,39597,39595,39771,40170,40173,40167,40576,40701,20710,20692,20695,20712,20723,20699,20714,20701,20708,20691,20716,20720,20719,20707,20704,20952,21120,21121,21225,21227,21296,21420,22055,22037,22028,22034,22012,22031,22044,22017,22035,22018,22010,22045,22020,22015,22009,22665,22652,22672,22680,22662,22657,22655,22644,22667,22650,22663,22673,22670,22646,22658,22664,22651,22676,22671,22782,22891,23260,23278,23269,23253,23274,23258,23277,23275,23283,23266,23264,23259,23276,23262,23261,23257,23272,23263,23415,23520,23523,23651,23938,23936,23933,23942,23930,23937,23927,23946,23945,23944,23934,23932,23949,23929,23935,24152,24153,24147,24280,24273,24279,24270,24284,24277,24281,24274,24276,24388,24387,24431,24502,24876,24872,24897,24926,24945,24947,24914,24915,24946,24940,24960,24948,24916,24954,24923,24933,24891,24938,24929,24918,25129,25127,25131,25643,25677,25691,25693,25716,25718,25714,25715,25725,25717,25702,25766,25678,25730,25694,25692,25675,25683,25696,25680,25727,25663,25708,25707,25689,25701,25719,25971,26016,26273,26272,26271,26373,26372,26402,27057,27062,27081,27040,27086,27030,27056,27052,27068,27025,27033,27022,27047,27021,27049,27070,27055,27071,27076,27069,27044,27092,27065,27082,27034,27087,27059,27027,27050,27041,27038,27097,27031,27024,27074,27061,27045,27078,27466,27469,27467,27550,27551,27552,27587,27588,27646,28366,28405,28401,28419,28453,28408,28471,28411,28462,28425,28494,28441,28442,28455,28440,28475,28434,28397,28426,28470,28531,28409,28398,28461,28480,28464,28476,28469,28395,28423,28430,28483,28421,28413,28406,28473,28444,28412,28474,28447,28429,28446,28424,28449,29063,29072,29065,29056,29061,29058,29071,29051,29062,29057,29079,29252,29267,29335,29333,29331,29507,29517,29521,29516,29794,29811,29809,29813,29810,29799,29806,29952,29954,29955,30077,30096,30230,30216,30220,30229,30225,30218,30228,30392,30593,30588,30597,30594,30574,30592,30575,30590,30595,30898,30890,30900,30893,30888,30846,30891,30878,30885,30880,30892,30882,30884,31128,31114,31115,31126,31125,31124,31123,31127,31112,31122,31120,31275,31306,31280,31279,31272,31270,31400,31403,31404,31470,31624,31644,31626,31633,31632,31638,31629,31628,31643,31630,31621,31640,21124,31641,31652,31618,31931,31935,31932,31930,32167,32183,32194,32163,32170,32193,32192,32197,32157,32206,32196,32198,32203,32204,32175,32185,32150,32188,32159,32166,32174,32169,32161,32201,32627,32738,32739,32741,32734,32804,32861,32860,33161,33158,33155,33159,33165,33164,33163,33301,33943,33956,33953,33951,33978,33998,33986,33964,33966,33963,33977,33972,33985,33997,33962,33946,33969,34000,33949,33959,33979,33954,33940,33991,33996,33947,33961,33967,33960,34006,33944,33974,33999,33952,34007,34004,34002,34011,33968,33937,34401,34611,34595,34600,34667,34624,34606,34590,34593,34585,34587,34627,34604,34625,34622,34630,34592,34610,34602,34605,34620,34578,34618,34609,34613,34626,34598,34599,34616,34596,34586,34608,34577,35063,35047,35057,35058,35066,35070,35054,35068,35062,35067,35056,35052,35051,35229,35233,35231,35230,35305,35307,35304,35499,35481,35467,35474,35471,35478,35901,35944,35945,36053,36047,36055,36246,36361,36354,36351,36365,36349,36362,36355,36359,36358,36357,36350,36352,36356,36624,36625,36622,36621,37155,37148,37152,37154,37151,37149,37146,37156,37153,37147,37242,37234,37241,37235,37541,37540,37494,37531,37498,37536,37524,37546,37517,37542,37530,37547,37497,37527,37503,37539,37614,37518,37506,37525,37538,37501,37512,37537,37514,37510,37516,37529,37543,37502,37511,37545,37533,37515,37421,38558,38561,38655,38744,38781,38778,38782,38787,38784,38786,38779,38788,38785,38783,38862,38861,38934,39085,39086,39170,39168,39175,39325,39324,39363,39353,39355,39354,39362,39357,39367,39601,39651,39655,39742,39743,39776,39777,39775,40177,40178,40181,40615,20735,20739,20784,20728,20742,20743,20726,20734,20747,20748,20733,20746,21131,21132,21233,21231,22088,22082,22092,22069,22081,22090,22089,22086,22104,22106,22080,22067,22077,22060,22078,22072,22058,22074,22298,22699,22685,22705,22688,22691,22703,22700,22693,22689,22783,23295,23284,23293,23287,23286,23299,23288,23298,23289,23297,23303,23301,23311,23655,23961,23959,23967,23954,23970,23955,23957,23968,23964,23969,23962,23966,24169,24157,24160,24156,32243,24283,24286,24289,24393,24498,24971,24963,24953,25009,25008,24994,24969,24987,24979,25007,25005,24991,24978,25002,24993,24973,24934,25011,25133,25710,25712,25750,25760,25733,25751,25756,25743,25739,25738,25740,25763,25759,25704,25777,25752,25974,25978,25977,25979,26034,26035,26293,26288,26281,26290,26295,26282,26287,27136,27142,27159,27109,27128,27157,27121,27108,27168,27135,27116,27106,27163,27165,27134,27175,27122,27118,27156,27127,27111,27200,27144,27110,27131,27149,27132,27115,27145,27140,27160,27173,27151,27126,27174,27143,27124,27158,27473,27557,27555,27554,27558,27649,27648,27647,27650,28481,28454,28542,28551,28614,28562,28557,28553,28556,28514,28495,28549,28506,28566,28534,28524,28546,28501,28530,28498,28496,28503,28564,28563,28509,28416,28513,28523,28541,28519,28560,28499,28555,28521,28543,28565,28515,28535,28522,28539,29106,29103,29083,29104,29088,29082,29097,29109,29085,29093,29086,29092,29089,29098,29084,29095,29107,29336,29338,29528,29522,29534,29535,29536,29533,29531,29537,29530,29529,29538,29831,29833,29834,29830,29825,29821,29829,29832,29820,29817,29960,29959,30078,30245,30238,30233,30237,30236,30243,30234,30248,30235,30364,30365,30366,30363,30605,30607,30601,30600,30925,30907,30927,30924,30929,30926,30932,30920,30915,30916,30921,31130,31137,31136,31132,31138,31131,27510,31289,31410,31412,31411,31671,31691,31678,31660,31694,31663,31673,31690,31669,31941,31944,31948,31947,32247,32219,32234,32231,32215,32225,32259,32250,32230,32246,32241,32240,32238,32223,32630,32684,32688,32685,32749,32747,32746,32748,32742,32744,32868,32871,33187,33183,33182,33173,33186,33177,33175,33302,33359,33363,33362,33360,33358,33361,34084,34107,34063,34048,34089,34062,34057,34061,34079,34058,34087,34076,34043,34091,34042,34056,34060,34036,34090,34034,34069,34039,34027,34035,34044,34066,34026,34025,34070,34046,34088,34077,34094,34050,34045,34078,34038,34097,34086,34023,34024,34032,34031,34041,34072,34080,34096,34059,34073,34095,34402,34646,34659,34660,34679,34785,34675,34648,34644,34651,34642,34657,34650,34641,34654,34669,34666,34640,34638,34655,34653,34671,34668,34682,34670,34652,34661,34639,34683,34677,34658,34663,34665,34906,35077,35084,35092,35083,35095,35096,35097,35078,35094,35089,35086,35081,35234,35236,35235,35309,35312,35308,35535,35526,35512,35539,35537,35540,35541,35515,35543,35518,35520,35525,35544,35523,35514,35517,35545,35902,35917,35983,36069,36063,36057,36072,36058,36061,36071,36256,36252,36257,36251,36384,36387,36389,36388,36398,36373,36379,36374,36369,36377,36390,36391,36372,36370,36376,36371,36380,36375,36378,36652,36644,36632,36634,36640,36643,36630,36631,36979,36976,36975,36967,36971,37167,37163,37161,37162,37170,37158,37166,37253,37254,37258,37249,37250,37252,37248,37584,37571,37572,37568,37593,37558,37583,37617,37599,37592,37609,37591,37597,37580,37615,37570,37608,37578,37576,37582,37606,37581,37589,37577,37600,37598,37607,37585,37587,37557,37601,37574,37556,38268,38316,38315,38318,38320,38564,38562,38611,38661,38664,38658,38746,38794,38798,38792,38864,38863,38942,38941,38950,38953,38952,38944,38939,38951,39090,39176,39162,39185,39188,39190,39191,39189,39388,39373,39375,39379,39380,39374,39369,39382,39384,39371,39383,39372,39603,39660,39659,39667,39666,39665,39750,39747,39783,39796,39793,39782,39798,39797,39792,39784,39780,39788,40188,40186,40189,40191,40183,40199,40192,40185,40187,40200,40197,40196,40579,40659,40719,40720,20764,20755,20759,20762,20753,20958,21300,21473,22128,22112,22126,22131,22118,22115,22125,22130,22110,22135,22300,22299,22728,22717,22729,22719,22714,22722,22716,22726,23319,23321,23323,23329,23316,23315,23312,23318,23336,23322,23328,23326,23535,23980,23985,23977,23975,23989,23984,23982,23978,23976,23986,23981,23983,23988,24167,24168,24166,24175,24297,24295,24294,24296,24293,24395,24508,24989,25000,24982,25029,25012,25030,25025,25036,25018,25023,25016,24972,25815,25814,25808,25807,25801,25789,25737,25795,25819,25843,25817,25907,25983,25980,26018,26312,26302,26304,26314,26315,26319,26301,26299,26298,26316,26403,27188,27238,27209,27239,27186,27240,27198,27229,27245,27254,27227,27217,27176,27226,27195,27199,27201,27242,27236,27216,27215,27220,27247,27241,27232,27196,27230,27222,27221,27213,27214,27206,27477,27476,27478,27559,27562,27563,27592,27591,27652,27651,27654,28589,28619,28579,28615,28604,28622,28616,28510,28612,28605,28574,28618,28584,28676,28581,28590,28602,28588,28586,28623,28607,28600,28578,28617,28587,28621,28591,28594,28592,29125,29122,29119,29112,29142,29120,29121,29131,29140,29130,29127,29135,29117,29144,29116,29126,29146,29147,29341,29342,29545,29542,29543,29548,29541,29547,29546,29823,29850,29856,29844,29842,29845,29857,29963,30080,30255,30253,30257,30269,30259,30268,30261,30258,30256,30395,30438,30618,30621,30625,30620,30619,30626,30627,30613,30617,30615,30941,30953,30949,30954,30942,30947,30939,30945,30946,30957,30943,30944,31140,31300,31304,31303,31414,31416,31413,31409,31415,31710,31715,31719,31709,31701,31717,31706,31720,31737,31700,31722,31714,31708,31723,31704,31711,31954,31956,31959,31952,31953,32274,32289,32279,32268,32287,32288,32275,32270,32284,32277,32282,32290,32267,32271,32278,32269,32276,32293,32292,32579,32635,32636,32634,32689,32751,32810,32809,32876,33201,33190,33198,33209,33205,33195,33200,33196,33204,33202,33207,33191,33266,33365,33366,33367,34134,34117,34155,34125,34131,34145,34136,34112,34118,34148,34113,34146,34116,34129,34119,34147,34110,34139,34161,34126,34158,34165,34133,34151,34144,34188,34150,34141,34132,34149,34156,34403,34405,34404,34715,34703,34711,34707,34706,34696,34689,34710,34712,34681,34695,34723,34693,34704,34705,34717,34692,34708,34716,34714,34697,35102,35110,35120,35117,35118,35111,35121,35106,35113,35107,35119,35116,35103,35313,35552,35554,35570,35572,35573,35549,35604,35556,35551,35568,35528,35550,35553,35560,35583,35567,35579,35985,35986,35984,36085,36078,36081,36080,36083,36204,36206,36261,36263,36403,36414,36408,36416,36421,36406,36412,36413,36417,36400,36415,36541,36662,36654,36661,36658,36665,36663,36660,36982,36985,36987,36998,37114,37171,37173,37174,37267,37264,37265,37261,37263,37671,37662,37640,37663,37638,37647,37754,37688,37692,37659,37667,37650,37633,37702,37677,37646,37645,37579,37661,37626,37669,37651,37625,37623,37684,37634,37668,37631,37673,37689,37685,37674,37652,37644,37643,37630,37641,37632,37627,37654,38332,38349,38334,38329,38330,38326,38335,38325,38333,38569,38612,38667,38674,38672,38809,38807,38804,38896,38904,38965,38959,38962,39204,39199,39207,39209,39326,39406,39404,39397,39396,39408,39395,39402,39401,39399,39609,39615,39604,39611,39670,39674,39673,39671,39731,39808,39813,39815,39804,39806,39803,39810,39827,39826,39824,39802,39829,39805,39816,40229,40215,40224,40222,40212,40233,40221,40216,40226,40208,40217,40223,40584,40582,40583,40622,40621,40661,40662,40698,40722,40765,20774,20773,20770,20772,20768,20777,21236,22163,22156,22157,22150,22148,22147,22142,22146,22143,22145,22742,22740,22735,22738,23341,23333,23346,23331,23340,23335,23334,23343,23342,23419,23537,23538,23991,24172,24170,24510,24507,25027,25013,25020,25063,25056,25061,25060,25064,25054,25839,25833,25827,25835,25828,25832,25985,25984,26038,26074,26322,27277,27286,27265,27301,27273,27295,27291,27297,27294,27271,27283,27278,27285,27267,27304,27300,27281,27263,27302,27290,27269,27276,27282,27483,27565,27657,28620,28585,28660,28628,28643,28636,28653,28647,28646,28638,28658,28637,28642,28648,29153,29169,29160,29170,29156,29168,29154,29555,29550,29551,29847,29874,29867,29840,29866,29869,29873,29861,29871,29968,29969,29970,29967,30084,30275,30280,30281,30279,30372,30441,30645,30635,30642,30647,30646,30644,30641,30632,30704,30963,30973,30978,30971,30972,30962,30981,30969,30974,30980,31147,31144,31324,31323,31318,31320,31316,31322,31422,31424,31425,31749,31759,31730,31744,31743,31739,31758,31732,31755,31731,31746,31753,31747,31745,31736,31741,31750,31728,31729,31760,31754,31976,32301,32316,32322,32307,38984,32312,32298,32329,32320,32327,32297,32332,32304,32315,32310,32324,32314,32581,32639,32638,32637,32756,32754,32812,33211,33220,33228,33226,33221,33223,33212,33257,33371,33370,33372,34179,34176,34191,34215,34197,34208,34187,34211,34171,34212,34202,34206,34167,34172,34185,34209,34170,34168,34135,34190,34198,34182,34189,34201,34205,34177,34210,34178,34184,34181,34169,34166,34200,34192,34207,34408,34750,34730,34733,34757,34736,34732,34745,34741,34748,34734,34761,34755,34754,34764,34743,34735,34756,34762,34740,34742,34751,34744,34749,34782,34738,35125,35123,35132,35134,35137,35154,35127,35138,35245,35247,35246,35314,35315,35614,35608,35606,35601,35589,35595,35618,35599,35602,35605,35591,35597,35592,35590,35612,35603,35610,35919,35952,35954,35953,35951,35989,35988,36089,36207,36430,36429,36435,36432,36428,36423,36675,36672,36997,36990,37176,37274,37282,37275,37273,37279,37281,37277,37280,37793,37763,37807,37732,37718,37703,37756,37720,37724,37750,37705,37712,37713,37728,37741,37775,37708,37738,37753,37719,37717,37714,37711,37745,37751,37755,37729,37726,37731,37735,37760,37710,37721,38343,38336,38345,38339,38341,38327,38574,38576,38572,38688,38687,38680,38685,38681,38810,38817,38812,38814,38813,38869,38868,38897,38977,38980,38986,38985,38981,38979,39205,39211,39212,39210,39219,39218,39215,39213,39217,39216,39320,39331,39329,39426,39418,39412,39415,39417,39416,39414,39419,39421,39422,39420,39427,39614,39678,39677,39681,39676,39752,39834,39848,39838,39835,39846,39841,39845,39844,39814,39842,39840,39855,40243,40257,40295,40246,40238,40239,40241,40248,40240,40261,40258,40259,40254,40247,40256,40253,32757,40237,40586,40585,40589,40624,40648,40666,40699,40703,40740,40739,40738,40788,40864,20785,20781,20782,22168,22172,22167,22170,22173,22169,22896,23356,23657,23658,24000,24173,24174,25048,25055,25069,25070,25073,25066,25072,25067,25046,25065,25855,25860,25853,25848,25857,25859,25852,26004,26075,26330,26331,26328,27333,27321,27325,27361,27334,27322,27318,27319,27335,27316,27309,27486,27593,27659,28679,28684,28685,28673,28677,28692,28686,28671,28672,28667,28710,28668,28663,28682,29185,29183,29177,29187,29181,29558,29880,29888,29877,29889,29886,29878,29883,29890,29972,29971,30300,30308,30297,30288,30291,30295,30298,30374,30397,30444,30658,30650,30975,30988,30995,30996,30985,30992,30994,30993,31149,31148,31327,31772,31785,31769,31776,31775,31789,31773,31782,31784,31778,31781,31792,32348,32336,32342,32355,32344,32354,32351,32337,32352,32343,32339,32693,32691,32759,32760,32885,33233,33234,33232,33375,33374,34228,34246,34240,34243,34242,34227,34229,34237,34247,34244,34239,34251,34254,34248,34245,34225,34230,34258,34340,34232,34231,34238,34409,34791,34790,34786,34779,34795,34794,34789,34783,34803,34788,34772,34780,34771,34797,34776,34787,34724,34775,34777,34817,34804,34792,34781,35155,35147,35151,35148,35142,35152,35153,35145,35626,35623,35619,35635,35632,35637,35655,35631,35644,35646,35633,35621,35639,35622,35638,35630,35620,35643,35645,35642,35906,35957,35993,35992,35991,36094,36100,36098,36096,36444,36450,36448,36439,36438,36446,36453,36455,36443,36442,36449,36445,36457,36436,36678,36679,36680,36683,37160,37178,37179,37182,37288,37285,37287,37295,37290,37813,37772,37778,37815,37787,37789,37769,37799,37774,37802,37790,37798,37781,37768,37785,37791,37773,37809,37777,37810,37796,37800,37812,37795,37797,38354,38355,38353,38579,38615,38618,24002,38623,38616,38621,38691,38690,38693,38828,38830,38824,38827,38820,38826,38818,38821,38871,38873,38870,38872,38906,38992,38993,38994,39096,39233,39228,39226,39439,39435,39433,39437,39428,39441,39434,39429,39431,39430,39616,39644,39688,39684,39685,39721,39733,39754,39756,39755,39879,39878,39875,39871,39873,39861,39864,39891,39862,39876,39865,39869,40284,40275,40271,40266,40283,40267,40281,40278,40268,40279,40274,40276,40287,40280,40282,40590,40588,40671,40705,40704,40726,40741,40747,40746,40745,40744,40780,40789,20788,20789,21142,21239,21428,22187,22189,22182,22183,22186,22188,22746,22749,22747,22802,23357,23358,23359,24003,24176,24511,25083,25863,25872,25869,25865,25868,25870,25988,26078,26077,26334,27367,27360,27340,27345,27353,27339,27359,27356,27344,27371,27343,27341,27358,27488,27568,27660,28697,28711,28704,28694,28715,28705,28706,28707,28713,28695,28708,28700,28714,29196,29194,29191,29186,29189,29349,29350,29348,29347,29345,29899,29893,29879,29891,29974,30304,30665,30666,30660,30705,31005,31003,31009,31004,30999,31006,31152,31335,31336,31795,31804,31801,31788,31803,31980,31978,32374,32373,32376,32368,32375,32367,32378,32370,32372,32360,32587,32586,32643,32646,32695,32765,32766,32888,33239,33237,33380,33377,33379,34283,34289,34285,34265,34273,34280,34266,34263,34284,34290,34296,34264,34271,34275,34268,34257,34288,34278,34287,34270,34274,34816,34810,34819,34806,34807,34825,34828,34827,34822,34812,34824,34815,34826,34818,35170,35162,35163,35159,35169,35164,35160,35165,35161,35208,35255,35254,35318,35664,35656,35658,35648,35667,35670,35668,35659,35669,35665,35650,35666,35671,35907,35959,35958,35994,36102,36103,36105,36268,36266,36269,36267,36461,36472,36467,36458,36463,36475,36546,36690,36689,36687,36688,36691,36788,37184,37183,37296,37293,37854,37831,37839,37826,37850,37840,37881,37868,37836,37849,37801,37862,37834,37844,37870,37859,37845,37828,37838,37824,37842,37863,38269,38362,38363,38625,38697,38699,38700,38696,38694,38835,38839,38838,38877,38878,38879,39004,39001,39005,38999,39103,39101,39099,39102,39240,39239,39235,39334,39335,39450,39445,39461,39453,39460,39451,39458,39456,39463,39459,39454,39452,39444,39618,39691,39690,39694,39692,39735,39914,39915,39904,39902,39908,39910,39906,39920,39892,39895,39916,39900,39897,39909,39893,39905,39898,40311,40321,40330,40324,40328,40305,40320,40312,40326,40331,40332,40317,40299,40308,40309,40304,40297,40325,40307,40315,40322,40303,40313,40319,40327,40296,40596,40593,40640,40700,40749,40768,40769,40781,40790,40791,40792,21303,22194,22197,22195,22755,23365,24006,24007,24302,24303,24512,24513,25081,25879,25878,25877,25875,26079,26344,26339,26340,27379,27376,27370,27368,27385,27377,27374,27375,28732,28725,28719,28727,28724,28721,28738,28728,28735,28730,28729,28736,28731,28723,28737,29203,29204,29352,29565,29564,29882,30379,30378,30398,30445,30668,30670,30671,30669,30706,31013,31011,31015,31016,31012,31017,31154,31342,31340,31341,31479,31817,31816,31818,31815,31813,31982,32379,32382,32385,32384,32698,32767,32889,33243,33241,33291,33384,33385,34338,34303,34305,34302,34331,34304,34294,34308,34313,34309,34316,34301,34841,34832,34833,34839,34835,34838,35171,35174,35257,35319,35680,35690,35677,35688,35683,35685,35687,35693,36270,36486,36488,36484,36697,36694,36695,36693,36696,36698,37005,37187,37185,37303,37301,37298,37299,37899,37907,37883,37920,37903,37908,37886,37909,37904,37928,37913,37901,37877,37888,37879,37895,37902,37910,37906,37882,37897,37880,37898,37887,37884,37900,37878,37905,37894,38366,38368,38367,38702,38703,38841,38843,38909,38910,39008,39010,39011,39007,39105,39106,39248,39246,39257,39244,39243,39251,39474,39476,39473,39468,39466,39478,39465,39470,39480,39469,39623,39626,39622,39696,39698,39697,39947,39944,39927,39941,39954,39928,40000,39943,39950,39942,39959,39956,39945,40351,40345,40356,40349,40338,40344,40336,40347,40352,40340,40348,40362,40343,40353,40346,40354,40360,40350,40355,40383,40361,40342,40358,40359,40601,40603,40602,40677,40676,40679,40678,40752,40750,40795,40800,40798,40797,40793,40849,20794,20793,21144,21143,22211,22205,22206,23368,23367,24011,24015,24305,25085,25883,27394,27388,27395,27384,27392,28739,28740,28746,28744,28745,28741,28742,29213,29210,29209,29566,29975,30314,30672,31021,31025,31023,31828,31827,31986,32394,32391,32392,32395,32390,32397,32589,32699,32816,33245,34328,34346,34342,34335,34339,34332,34329,34343,34350,34337,34336,34345,34334,34341,34857,34845,34843,34848,34852,34844,34859,34890,35181,35177,35182,35179,35322,35705,35704,35653,35706,35707,36112,36116,36271,36494,36492,36702,36699,36701,37190,37188,37189,37305,37951,37947,37942,37929,37949,37948,37936,37945,37930,37943,37932,37952,37937,38373,38372,38371,38709,38714,38847,38881,39012,39113,39110,39104,39256,39254,39481,39485,39494,39492,39490,39489,39482,39487,39629,39701,39703,39704,39702,39738,39762,39979,39965,39964,39980,39971,39976,39977,39972,39969,40375,40374,40380,40385,40391,40394,40399,40382,40389,40387,40379,40373,40398,40377,40378,40364,40392,40369,40365,40396,40371,40397,40370,40570,40604,40683,40686,40685,40731,40728,40730,40753,40782,40805,40804,40850,20153,22214,22213,22219,22897,23371,23372,24021,24017,24306,25889,25888,25894,25890,27403,27400,27401,27661,28757,28758,28759,28754,29214,29215,29353,29567,29912,29909,29913,29911,30317,30381,31029,31156,31344,31345,31831,31836,31833,31835,31834,31988,31985,32401,32591,32647,33246,33387,34356,34357,34355,34348,34354,34358,34860,34856,34854,34858,34853,35185,35263,35262,35323,35710,35716,35714,35718,35717,35711,36117,36501,36500,36506,36498,36496,36502,36503,36704,36706,37191,37964,37968,37962,37963,37967,37959,37957,37960,37961,37958,38719,38883,39018,39017,39115,39252,39259,39502,39507,39508,39500,39503,39496,39498,39497,39506,39504,39632,39705,39723,39739,39766,39765,40006,40008,39999,40004,39993,39987,40001,39996,39991,39988,39986,39997,39990,40411,40402,40414,40410,40395,40400,40412,40401,40415,40425,40409,40408,40406,40437,40405,40413,40630,40688,40757,40755,40754,40770,40811,40853,40866,20797,21145,22760,22759,22898,23373,24024,34863,24399,25089,25091,25092,25897,25893,26006,26347,27409,27410,27407,27594,28763,28762,29218,29570,29569,29571,30320,30676,31847,31846,32405,33388,34362,34368,34361,34364,34353,34363,34366,34864,34866,34862,34867,35190,35188,35187,35326,35724,35726,35723,35720,35909,36121,36504,36708,36707,37308,37986,37973,37981,37975,37982,38852,38853,38912,39510,39513,39710,39711,39712,40018,40024,40016,40010,40013,40011,40021,40025,40012,40014,40443,40439,40431,40419,40427,40440,40420,40438,40417,40430,40422,40434,40432,40418,40428,40436,40435,40424,40429,40642,40656,40690,40691,40710,40732,40760,40759,40758,40771,40783,40817,40816,40814,40815,22227,22221,23374,23661,25901,26349,26350,27411,28767,28769,28765,28768,29219,29915,29925,30677,31032,31159,31158,31850,32407,32649,33389,34371,34872,34871,34869,34891,35732,35733,36510,36511,36512,36509,37310,37309,37314,37995,37992,37993,38629,38726,38723,38727,38855,38885,39518,39637,39769,40035,40039,40038,40034,40030,40032,40450,40446,40455,40451,40454,40453,40448,40449,40457,40447,40445,40452,40608,40734,40774,40820,40821,40822,22228,25902,26040,27416,27417,27415,27418,28770,29222,29354,30680,30681,31033,31849,31851,31990,32410,32408,32411,32409,33248,33249,34374,34375,34376,35193,35194,35196,35195,35327,35736,35737,36517,36516,36515,37998,37997,37999,38001,38003,38729,39026,39263,40040,40046,40045,40459,40461,40464,40463,40466,40465,40609,40693,40713,40775,40824,40827,40826,40825,22302,28774,31855,34876,36274,36518,37315,38004,38008,38006,38005,39520,40052,40051,40049,40053,40468,40467,40694,40714,40868,28776,28773,31991,34410,34878,34877,34879,35742,35996,36521,36553,38731,39027,39028,39116,39265,39339,39524,39526,39527,39716,40469,40471,40776,25095,27422,29223,34380,36520,38018,38016,38017,39529,39528,39726,40473,29225,34379,35743,38019,40057,40631,30325,39531,40058,40477,28777,28778,40612,40830,40777,40856,30849,37561,35023,22715,24658,31911,23290,9556,9574,9559,9568,9580,9571,9562,9577,9565,9554,9572,9557,9566,9578,9569,9560,9575,9563,9555,9573,9558,9567,9579,9570,9561,9576,9564,9553,9552,9581,9582,9584,9583,65517,132423,37595,132575,147397,34124,17077,29679,20917,13897,149826,166372,37700,137691,33518,146632,30780,26436,25311,149811,166314,131744,158643,135941,20395,140525,20488,159017,162436,144896,150193,140563,20521,131966,24484,131968,131911,28379,132127,20605,20737,13434,20750,39020,14147,33814,149924,132231,20832,144308,20842,134143,139516,131813,140592,132494,143923,137603,23426,34685,132531,146585,20914,20920,40244,20937,20943,20945,15580,20947,150182,20915,20962,21314,20973,33741,26942,145197,24443,21003,21030,21052,21173,21079,21140,21177,21189,31765,34114,21216,34317,158483,21253,166622,21833,28377,147328,133460,147436,21299,21316,134114,27851,136998,26651,29653,24650,16042,14540,136936,29149,17570,21357,21364,165547,21374,21375,136598,136723,30694,21395,166555,21408,21419,21422,29607,153458,16217,29596,21441,21445,27721,20041,22526,21465,15019,134031,21472,147435,142755,21494,134263,21523,28793,21803,26199,27995,21613,158547,134516,21853,21647,21668,18342,136973,134877,15796,134477,166332,140952,21831,19693,21551,29719,21894,21929,22021,137431,147514,17746,148533,26291,135348,22071,26317,144010,26276,26285,22093,22095,30961,22257,38791,21502,22272,22255,22253,166758,13859,135759,22342,147877,27758,28811,22338,14001,158846,22502,136214,22531,136276,148323,22566,150517,22620,22698,13665,22752,22748,135740,22779,23551,22339,172368,148088,37843,13729,22815,26790,14019,28249,136766,23076,21843,136850,34053,22985,134478,158849,159018,137180,23001,137211,137138,159142,28017,137256,136917,23033,159301,23211,23139,14054,149929,23159,14088,23190,29797,23251,159649,140628,15749,137489,14130,136888,24195,21200,23414,25992,23420,162318,16388,18525,131588,23509,24928,137780,154060,132517,23539,23453,19728,23557,138052,23571,29646,23572,138405,158504,23625,18653,23685,23785,23791,23947,138745,138807,23824,23832,23878,138916,23738,24023,33532,14381,149761,139337,139635,33415,14390,15298,24110,27274,24181,24186,148668,134355,21414,20151,24272,21416,137073,24073,24308,164994,24313,24315,14496,24316,26686,37915,24333,131521,194708,15070,18606,135994,24378,157832,140240,24408,140401,24419,38845,159342,24434,37696,166454,24487,23990,15711,152144,139114,159992,140904,37334,131742,166441,24625,26245,137335,14691,15815,13881,22416,141236,31089,15936,24734,24740,24755,149890,149903,162387,29860,20705,23200,24932,33828,24898,194726,159442,24961,20980,132694,24967,23466,147383,141407,25043,166813,170333,25040,14642,141696,141505,24611,24924,25886,25483,131352,25285,137072,25301,142861,25452,149983,14871,25656,25592,136078,137212,25744,28554,142902,38932,147596,153373,25825,25829,38011,14950,25658,14935,25933,28438,150056,150051,25989,25965,25951,143486,26037,149824,19255,26065,16600,137257,26080,26083,24543,144384,26136,143863,143864,26180,143780,143781,26187,134773,26215,152038,26227,26228,138813,143921,165364,143816,152339,30661,141559,39332,26370,148380,150049,15147,27130,145346,26462,26471,26466,147917,168173,26583,17641,26658,28240,37436,26625,144358,159136,26717,144495,27105,27147,166623,26995,26819,144845,26881,26880,15666,14849,144956,15232,26540,26977,166474,17148,26934,27032,15265,132041,33635,20624,27129,144985,139562,27205,145155,27293,15347,26545,27336,168348,15373,27421,133411,24798,27445,27508,141261,28341,146139,132021,137560,14144,21537,146266,27617,147196,27612,27703,140427,149745,158545,27738,33318,27769,146876,17605,146877,147876,149772,149760,146633,14053,15595,134450,39811,143865,140433,32655,26679,159013,159137,159211,28054,27996,28284,28420,149887,147589,159346,34099,159604,20935,27804,28189,33838,166689,28207,146991,29779,147330,31180,28239,23185,143435,28664,14093,28573,146992,28410,136343,147517,17749,37872,28484,28508,15694,28532,168304,15675,28575,147780,28627,147601,147797,147513,147440,147380,147775,20959,147798,147799,147776,156125,28747,28798,28839,28801,28876,28885,28886,28895,16644,15848,29108,29078,148087,28971,28997,23176,29002,29038,23708,148325,29007,37730,148161,28972,148570,150055,150050,29114,166888,28861,29198,37954,29205,22801,37955,29220,37697,153093,29230,29248,149876,26813,29269,29271,15957,143428,26637,28477,29314,29482,29483,149539,165931,18669,165892,29480,29486,29647,29610,134202,158254,29641,29769,147938,136935,150052,26147,14021,149943,149901,150011,29687,29717,26883,150054,29753,132547,16087,29788,141485,29792,167602,29767,29668,29814,33721,29804,14128,29812,37873,27180,29826,18771,150156,147807,150137,166799,23366,166915,137374,29896,137608,29966,29929,29982,167641,137803,23511,167596,37765,30029,30026,30055,30062,151426,16132,150803,30094,29789,30110,30132,30210,30252,30289,30287,30319,30326,156661,30352,33263,14328,157969,157966,30369,30373,30391,30412,159647,33890,151709,151933,138780,30494,30502,30528,25775,152096,30552,144044,30639,166244,166248,136897,30708,30729,136054,150034,26826,30895,30919,30931,38565,31022,153056,30935,31028,30897,161292,36792,34948,166699,155779,140828,31110,35072,26882,31104,153687,31133,162617,31036,31145,28202,160038,16040,31174,168205,31188]; - const TABLE_ENC = [167=>5103,10951,175=>5120,5205,5137,183=>5040,215=>5135,247=>5136,11300,331=>11301,339=>11299,592=>11295,596=>11297,603=>11296,618=>11303,629=>11298,643=>11294,650=>11302,710=>10952,5430,713=>5428,5429,5431,717=>5123,729=>5427,913=>5342,5343,5344,5345,5346,5347,5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,931=>5359,5360,5361,5362,5363,5364,5365,945=>5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379,5380,5381,5382,963=>5383,5384,5385,5386,5387,5388,5389,1025=>11141,1040=>11135,11136,11137,11138,11139,11140,11142,11143,11144,11145,11146,11147,11148,11149,11150,11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165,11166,11167,11168,11169,11170,11171,11172,11173,11175,11176,11177,11178,11179,11180,11181,11182,11183,11184,11185,11186,11187,11188,11189,11190,11191,11192,11193,11194,11195,11196,11197,11198,11199,11200,1105=>11174,8211=>5046,5048,8216=>5091,5092,8220=>5093,5094,8229=>5036,5035,5029,8242=>5098,8245=>5097,8251=>5102,8364=>5465,8451=>5191,8453=>5119,8457=>5192,8470=>11259,8481=>11260,8544=>5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,8560=>10916,10917,10918,10919,10920,10921,10922,10923,10924,10925,8592=>5172,5170,5173,5171,8598=>5174,5175,5177,5176,8632=>11202,11203,8679=>11201,8725=>5182,8730=>5138,8734=>5145,5158,5157,8739=>5179,8741=>5178,8745=>5154,5155,5162,8750=>5163,8756=>5165,5164,8786=>5146,8800=>5144,5147,8806=>5142,5143,8853=>5168,8857=>5169,8869=>5156,8895=>5159,9216=>5432,5433,5434,5435,5436,5437,5438,5439,5440,5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456,5457,5458,5459,5460,5461,5462,5463,9249=>5464,9312=>10896,10897,10898,10899,10900,10901,10902,10903,10904,10905,9332=>10906,10907,10908,10909,10910,10911,10912,10913,10914,10915,9472=>5236,9474=>5237,9484=>5239,9488=>5240,9492=>5241,9496=>5242,9500=>5234,9508=>5233,9516=>5232,9524=>5231,9532=>5230,9552=>18991,18990,18972,18981,18963,18974,18983,18965,18978,18987,18969,18980,18989,18971,18975,18984,18966,5250,18986,18968,18973,18982,18964,18979,18988,18970,18976,18985,18967,5243,5244,5246,5245,5255,5256,5257,5050,9601=>5215,5216,5217,5218,5219,5220,5221,5222,5229,5228,5227,5226,5225,5224,5223,9620=>5235,5238,9632=>5115,5114,9650=>5108,5107,9660=>5117,5116,9670=>5113,5112,9675=>5105,9678=>5109,5106,9698=>5251,5252,5254,5253,9733=>5111,5110,9792=>5166,9794=>5167,10045=>10965,11904=>11263,11908=>11264,11910=>11265,11266,11267,11914=>11268,11916=>11269,11270,11925=>11271,11932=>11272,11273,11941=>11274,11943=>11275,11946=>11276,11948=>11277,11950=>11278,11958=>11279,11964=>11280,11966=>11281,11974=>11282,11978=>11283,11980=>11284,11285,11983=>11286,11990=>11287,11288,11998=>11289,12003=>11290,12083=>10940,12288=>5024,5026,5027,5104,12293=>10959,10960,10961,5073,5074,5069,5070,5077,5078,5081,5082,5065,5066,5186,12308=>5061,5062,12317=>5095,5096,12321=>5278,5279,5280,5281,5282,5283,5284,5285,5286,12353=>10966,10967,10968,10969,10970,10971,10972,10973,10974,10975,10976,10977,10978,10979,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997,10998,10999,11000,11001,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013,11014,11015,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044,11045,11046,11047,11048,12443=>11261,11262,10955,10956,12449=>11049,11050,11051,11052,11053,11054,11055,11056,11057,11058,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,11072,11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088,11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104,11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115,11116,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,12540=>10962,10953,10954,12549=>5390,5391,5392,5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424,5425,5426,12751=>11204,12849=>11258,12963=>5118,13198=>5202,5203,13212=>5197,5198,5199,13217=>5201,13252=>5204,13262=>5200,13265=>5161,5160,13269=>5196,13434=>19037,13665=>19202,13729=>19212,13859=>19184,13881=>19349,13897=>19005,14001=>19191,14019=>19215,14021=>19661,14053=>19532,19238,14088=>19241,14093=>19566,14128=>19681,14130=>19249,14144=>19512,14147=>19040,14328=>19724,14381=>19290,14390=>19295,14496=>19313,14540=>19104,14642=>19379,14691=>19347,14849=>19478,14871=>19393,14935=>19409,14950=>19407,15019=>19131,15070=>19320,15147=>19451,15232=>19480,15265=>19487,15298=>19296,15347=>19497,15373=>19501,15580=>19064,15595=>19533,15666=>19477,15675=>19579,15694=>19576,15711=>19336,15749=>19247,15796=>19152,15815=>19348,15848=>19603,15936=>19353,15957=>19638,16040=>19778,16042=>19103,16087=>19671,16132=>19709,16217=>19123,16388=>19257,16600=>19422,16644=>19602,17077=>19002,17148=>19484,17553=>11209,17570=>19107,17605=>19526,17641=>19460,17746=>19165,17749=>19572,18342=>19149,18525=>19258,18606=>19321,18653=>19276,18669=>19647,18771=>19686,19255=>19420,19693=>19157,19728=>19267,19968=>5495,5497,19971=>5498,19975=>11309,5517,5515,5518,5516,11310,5560,11319,11317,5559,5558,19988=>5654,5653,5652,19992=>5655,5651,19998=>5778,5779,20006=>6220,20011=>5519,20013=>5561,11320,20016=>5562,11339,5945,11697,20022=>10926,20024=>5520,5563,20027=>5656,11340,20031=>10927,20034=>11304,5499,20037=>5522,20039=>11311,5523,19128,20043=>5564,20045=>5657,5659,5658,20050=>5780,5781,20054=>6221,20056=>6998,5496,11206,20060=>11305,5500,5525,5524,20073=>5782,20083=>6222,20094=>7455,13042,20098=>8418,14366,14367,10928,5501,20104=>5566,20107=>6223,5502,11312,5526,20113=>5567,5569,11321,5570,5568,20121=>5783,20123=>6224,20126=>6225,6599,10929,5527,5571,20132=>5784,5786,5785,20136=>5946,20139=>6226,6227,6600,6601,20147=>6999,20150=>14368,19304,20153=>18485,5503,20160=>5573,5572,11322,5574,5580,20166=>5575,5576,11324,11323,5578,5579,20173=>5577,20180=>5662,5663,5664,5665,5661,5668,11346,20188=>11342,10958,5669,5685,20193=>11344,20195=>5666,5667,5660,20200=>11341,11343,20208=>5799,11382,5796,5800,11392,11380,5797,11384,20219=>5798,20221=>5801,20223=>5787,11383,5802,11387,20228=>11391,11388,20232=>11385,5788,5790,5803,20237=>5792,11377,5795,5793,5794,11393,11390,11381,5791,20248=>11378,5789,20253=>11386,20258=>11389,20268=>11379,11499,20271=>5968,5955,20275=>11500,5952,20278=>5970,20280=>5960,20282=>5959,11488,5963,5958,11493,11501,20289=>11497,20291=>5961,20294=>5964,5949,5973,11490,20300=>11709,5947,5969,5948,5956,5957,11495,11491,5962,5954,11487,5950,11498,5971,5974,5953,5966,5972,5951,11496,5967,11502,11489,5965,11492,20327=>11494,20329=>6241,11711,11723,6233,20334=>11724,6228,6238,20339=>6231,11705,6239,11704,11708,11715,11713,6247,6242,11699,11701,6244,6232,11702,11714,11721,6237,11707,11700,6236,11703,6240,11706,20363=>6235,20365=>6230,20367=>6245,11716,6246,11720,20372=>11718,11722,6243,11710,11698,20378=>11712,6234,11717,6229,11719,20395=>19020,20398=>6616,6604,20402=>12058,12066,20405=>6603,6611,6623,20409=>12072,12070,12065,20415=>6605,12071,12061,6619,6610,6618,12056,20423=>12068,20425=>12059,6614,12060,20429=>12055,6621,6608,6617,6607,20435=>12057,12062,20438=>12069,6615,6612,12064,6620,12067,12063,6609,6622,6613,6606,6602,20460=>12073,20462=>7025,7003,20465=>7019,20467=>7024,12513,12512,12517,12518,7006,20474=>7015,20478=>7028,20480=>7016,20485=>12506,7009,12507,19022,7030,20491=>7021,7000,7001,12526,7472,20497=>7014,7013,12508,7017,13058,7008,12519,7023,7022,7012,12511,12520,20510=>12505,7011,12521,7020,12509,7002,20517=>7005,7004,12522,7018,7007,7027,7029,12516,7026,20527=>12524,12510,12525,20531=>12514,20533=>12523,20535=>12515,20540=>7010,20544=>13066,13054,20547=>7460,20549=>13059,13065,7459,13052,7463,13056,13049,7461,13053,7466,7471,20561=>13070,20563=>13048,20565=>7467,20567=>13069,20570=>7462,13055,7458,13050,13046,13060,13047,13045,13057,13063,13064,7464,20584=>13686,13061,13044,13062,20589=>7474,13067,7473,13043,20594=>13051,13068,7469,7468,7465,7470,20602=>7456,20605=>7457,20608=>7952,20610=>13689,13682,20613=>7949,20615=>13690,20619=>13680,13683,7948,13684,20624=>19490,7951,13688,20628=>13678,13677,7953,20632=>7954,7950,7955,13676,13687,13685,13679,20642=>7947,13681,20652=>8425,8419,14372,8428,14378,14381,8421,8422,14375,8420,14384,8426,14385,20666=>14380,8427,20669=>14369,8424,14370,20673=>14379,14377,20676=>14373,8423,14371,8429,14376,14383,14374,14382,20686=>8876,8873,20689=>8874,20691=>15066,15058,8872,8869,15059,20698=>8871,15062,20701=>15064,20704=>15071,19361,20707=>15070,15065,8868,15057,8866,15060,8877,15063,20716=>15067,8870,8867,15069,15068,8875,20723=>15061,20725=>9256,15681,20728=>15678,9257,20731=>9255,20733=>15685,15682,15675,9254,19036,9258,15676,9253,9261,15679,15680,9259,9260,15686,15683,15684,20750=>19038,20752=>9649,16321,9646,16318,9648,9650,20759=>16319,9647,20762=>16320,20764=>16317,20767=>9945,16890,9946,16888,20772=>16889,16887,16886,20777=>16891,9944,20781=>17356,17357,20784=>15677,17355,9947,10393,17721,17722,20791=>10636,10637,18307,18306,10720,10719,18636,20799=>5504,5528,5582,20803=>5581,5671,5670,5806,5805,5807,5804,20811=>5976,5975,5977,20818=>6249,20820=>6248,6250,20823=>6624,20825=>5206,12527,5207,7475,5209,5208,13691,19044,5210,8878,5211,20837=>5505,20839=>5583,5808,6251,19046,5506,5586,5584,5585,20849=>5809,20853=>5978,6253,6252,6254,20860=>7031,20864=>9651,20866=>10930,20871=>11318,11211,5672,5673,20877=>5810,20879=>11503,20881=>6626,6625,12529,12528,7476,10931,5587,11325,20894=>11725,20896=>6627,20898=>7034,20900=>7032,7033,20906=>9652,10932,5674,20912=>5811,11394,19058,19067,20917=>19004,5979,5980,19059,11504,20924=>11726,6255,11727,20932=>12531,12532,7037,19552,12533,19061,12530,7038,7036,7035,12534,19062,13071,19063,20947=>19065,13692,20951=>14386,15072,20956=>9262,9653,16322,19589,5507,5521,19068,20973=>19070,20976=>7477,7957,20979=>8879,19369,11306,5588,20984=>5677,5675,5676,20989=>6256,20992=>5508,5509,11208,5529,20998=>5589,5590,5591,11396,5678,19075,11347,21006=>5815,21008=>11397,5813,5814,11395,21014=>5816,5812,21020=>11505,6575,11506,21025=>11507,21028=>5982,5981,19076,21032=>5985,5983,5984,21038=>6262,21040=>6261,11732,11729,11730,21045=>11728,6263,6259,6258,21050=>6260,6257,19077,21057=>6264,21059=>6629,12074,21062=>11731,6634,21065=>12075,6630,6633,6632,6631,6628,21074=>12537,21076=>7041,12540,7039,19079,21082=>12536,7042,7040,7043,12538,12539,21089=>12535,12541,21097=>7961,7478,13072,13074,13073,13075,7479,21106=>7958,21108=>7959,7960,21111=>8431,14388,21114=>14387,14389,14390,8432,21119=>8430,15073,15074,8881,8880,15412,21127=>9263,9264,9265,9267,15687,15688,9266,21137=>9654,21139=>9655,19080,21142=>17723,18309,18308,18637,21147=>5510,21151=>5680,5679,21155=>5817,21158=>11398,21161=>5987,5988,5986,5989,11508,11509,21173=>19078,21177=>19081,21179=>6266,11733,21182=>6265,21184=>12076,6638,12077,6637,21189=>19082,21191=>6635,21193=>6636,21197=>12542,21200=>19252,21202=>7480,13077,21205=>7483,13076,7667,7482,7481,21211=>7964,21213=>7963,7962,8433,19085,21218=>8436,8437,8435,21222=>8434,21225=>15075,21227=>15076,21231=>15690,9268,15689,21235=>9656,16892,9948,21239=>17724,10540,10933,5530,5592,11326,21246=>5593,5594,21253=>5681,5682,21256=>5818,11510,11734,11735,21261=>6639,12543,7485,7484,13694,13693,21269=>5511,5595,5683,21273=>7486,11307,21276=>11348,5684,21279=>11400,5820,5819,11399,5990,21290=>7044,21293=>13078,21295=>8438,15077,8882,21299=>19095,16323,21303=>18053,10934,5596,21308=>11736,12078,7489,7487,7488,5512,19069,5531,5288,5599,21319=>5598,5597,5687,5686,21324=>11349,11401,21329=>6270,6267,6269,6268,21335=>6640,21338=>7965,21340=>5513,21342=>5600,21344=>5689,5688,21347=>11511,21350=>6271,21353=>10935,21356=>11327,19108,5691,5690,5821,5822,11512,5991,19109,5992,21367=>6272,6273,6274,21371=>6641,12079,21374=>19111,7045,21378=>11308,21380=>5601,21386=>11402,21390=>11513,11514,21394=>11737,19116,11738,21398=>12081,12080,12083,12082,6642,21404=>13079,7047,12544,7046,19118,21412=>13695,7966,19303,13696,19306,21419=>19119,15078,8883,19120,21426=>9269,21428=>17725,21430=>10936,21433=>11328,21435=>5692,21441=>19125,21443=>7490,21445=>19126,21448=>5514,5532,5603,5602,21453=>5604,21460=>6276,21462=>6275,6277,21465=>19130,21467=>6643,21471=>7048,19133,16324,10220,5533,5694,5709,5704,21480=>5699,5698,5705,5703,5696,5710,5697,5693,5708,5707,5706,5695,21493=>5702,19136,21496=>5701,21499=>5711,5700,21502=>19179,21505=>5828,21507=>5834,5830,21510=>5836,11403,5833,5823,5826,5829,5825,5832,5835,5824,5827,5831,5837,19138,21528=>11523,11520,21531=>6005,11521,5993,5995,6019,6014,19513,21540=>11528,11522,5997,5999,11527,6006,11517,6018,6020,5994,6011,19158,11515,6017,21555=>6002,21557=>6012,6013,11516,6010,6008,21563=>6009,6015,11524,5996,21568=>6016,11526,6004,6001,21573=>11519,6000,11529,6003,21578=>6007,21582=>5998,11525,21588=>11518,21600=>11755,11754,6295,11757,11759,11748,11751,11758,6296,21611=>11745,11749,19143,21615=>11753,12098,6291,12102,6278,11750,6279,6292,6285,6281,21626=>11746,6284,6289,6298,11747,11740,6283,11741,11743,21636=>6286,21638=>6288,11739,11744,21643=>6297,6293,11752,6299,19147,6290,11742,6287,21653=>6282,6280,21656=>11756,21658=>6294,21664=>12097,12085,12100,21668=>19148,12087,6650,6664,6646,6663,6655,6660,6644,12086,12092,6659,12104,6661,21683=>6651,21686=>12094,12091,6649,21690=>12084,6662,12099,6654,12101,6665,6645,6656,6653,12089,6657,12095,12096,6652,6658,6648,21710=>6647,12088,21718=>12093,21726=>12103,21728=>12564,7061,12546,21732=>12551,7054,7065,12549,7049,7059,7064,12556,21741=>7060,7063,21745=>12559,7055,12550,21751=>12562,12563,21754=>7057,12561,7053,7068,21759=>12553,21761=>7051,21763=>12566,12554,12558,7056,7067,12555,7062,12560,12567,13094,21774=>12565,7069,7050,12557,12548,21780=>7058,21783=>12547,21786=>12552,21798=>12545,7066,21802=>13086,19140,7509,13100,7507,7504,13091,7500,13095,7511,13085,13090,13089,7052,7506,13098,21819=>13101,13082,21822=>7984,21824=>13102,7512,21827=>7498,7495,13093,7492,19156,13099,19090,7499,13103,21837=>13083,13097,7502,13084,13087,13092,19219,21845=>7503,7501,7513,21852=>7508,19146,7496,7648,21857=>7497,13088,7510,7505,13096,7494,21866=>7493,21877=>13080,13081,13701,21883=>7967,7970,13712,7990,13715,7968,13708,7974,7980,8255,21894=>19160,7978,13705,7991,7971,7979,13713,14404,13718,13706,21905=>13697,13710,13704,7977,13716,21912=>7973,7993,7986,21916=>7975,7972,21919=>7983,21921=>13717,13703,13709,13711,13699,13714,7969,13698,19161,7976,7992,7988,13700,7982,21937=>7989,7985,7981,21941=>13707,21947=>7987,21951=>14402,14398,21954=>14413,14391,14400,8452,8453,8445,14409,8455,14396,14395,14393,14411,8443,14405,14394,8446,14403,8441,14399,14406,14408,21977=>14412,8450,14392,8444,14397,21983=>8439,21985=>8451,14407,8447,8448,8454,8442,5212,8440,14401,21999=>8449,22002=>14410,22006=>8899,8894,22009=>15093,15089,22012=>15083,8888,8884,15092,8885,15086,15088,22020=>15091,19162,8890,22024=>8897,8891,22028=>15081,8892,8893,15084,8898,22034=>15082,15087,8889,15080,8895,8887,22043=>8886,15085,15090,22047=>8896,22055=>15079,22057=>9276,15707,22060=>15704,22062=>9270,9282,9283,22066=>9273,15702,9275,15694,9281,19169,15706,9272,15708,9271,22077=>15703,15705,9274,15701,15695,15692,22085=>13702,15698,22088=>15691,15697,15696,22092=>15693,19174,9278,19175,22099=>9277,22103=>9279,15699,9657,15700,22110=>16333,22112=>16326,22114=>9669,16330,9661,9665,16329,22120=>9664,9660,9663,9658,9668,16331,16327,9667,16325,9666,16332,16328,9280,22134=>9670,16334,9662,9659,22142=>16899,16901,9950,16902,16900,16898,16897,9952,16896,9953,22156=>16894,16895,9949,9954,9951,22163=>16893,22165=>10221,22167=>17360,17358,17363,17361,22172=>17359,17362,22181=>10394,17728,17729,10541,22186=>17730,17726,17731,17727,10222,22194=>18054,18056,10544,18055,10543,10542,22204=>10545,18311,18312,22208=>10639,10638,10640,18310,22213=>18487,18486,22216=>10721,10723,10722,18488,10778,18751,22225=>10819,22227=>18750,18823,22231=>11313,22234=>5713,5712,22237=>5840,5839,11405,5838,11404,22244=>6023,11532,22247=>11531,22250=>6021,6024,22253=>19182,11530,19181,6022,19177,22263=>11760,22265=>11761,6300,22271=>6666,19180,12568,12569,7070,7071,22279=>13105,7514,7516,13104,7515,13719,7994,22290=>8456,8457,14414,22294=>8901,22296=>8900,22298=>15709,16336,16335,22302=>18883,5534,11329,22306=>11350,11351,22312=>5843,5847,11407,22316=>5845,5844,11406,5846,5842,22323=>5841,11408,22331=>6034,22334=>6031,22336=>6027,11533,19190,19208,22341=>11534,19186,6029,22345=>11536,6025,11537,11535,6028,6030,6033,6032,6026,11538,22369=>6305,11774,22372=>6307,22374=>6306,22376=>11775,6304,6303,11765,22381=>11764,22383=>11762,11767,11766,11763,11772,11773,11770,11768,6302,22395=>11771,6308,11776,22400=>11769,22402=>6667,6301,22411=>6668,12109,22415=>12115,19350,22419=>6674,12113,12119,22423=>12110,12114,12116,12118,12112,22429=>12111,12106,12107,6669,22434=>6671,6670,12108,12117,22446=>6673,22453=>12105,12579,22456=>12578,12583,12574,22460=>12577,12576,22463=>12580,22465=>12584,7072,7075,22470=>12575,12581,22475=>7074,12570,22478=>6672,13119,12582,22482=>12573,22484=>7073,12572,22492=>13110,22495=>7517,7521,13126,13108,13122,7522,13124,19193,13130,22505=>13134,22508=>13125,13113,13121,22512=>13135,13133,13123,13118,13111,13727,13109,7526,13116,7527,7523,13106,13128,13114,19129,22528=>13112,13131,7524,19195,13137,7518,7520,13120,13115,7076,7519,13117,13132,13136,13127,22544=>13129,22548=>13107,22553=>13722,22555=>13731,13730,8002,13723,22560=>8003,8001,22563=>13725,7998,13729,19198,13724,13726,13720,7996,22572=>13739,13738,13735,7995,7999,8000,12571,13732,7997,7525,13734,13721,13737,13736,22587=>13740,22589=>14428,22591=>13733,22600=>13728,14420,8467,8470,8465,14419,14423,14418,22609=>8459,8469,14415,8463,14422,22615=>8461,8460,14425,8462,14427,19200,14424,8458,22626=>8468,14429,14417,14426,22632=>14416,22635=>8464,22637=>8466,22639=>14421,22641=>14430,22644=>15101,8902,15107,22649=>8907,15103,15110,15095,8909,8903,15100,9284,15099,15108,8904,22661=>8908,15098,15104,15109,15094,8906,15102,22670=>15106,15112,15096,15105,22675=>8905,15111,22680=>15097,22684=>9288,15711,9286,9285,15713,15718,22691=>15714,22693=>15717,9291,22696=>9644,9290,19201,15710,15716,22702=>9289,15715,22705=>15712,22707=>9287,22714=>16341,18959,16343,16338,9672,16340,22721=>9671,16342,22725=>9674,16344,9673,16337,16339,22734=>9958,16905,22737=>9957,16906,9956,16904,9955,16903,22744=>10224,10223,17732,17734,19204,17733,10395,10396,19203,22754=>10397,18057,10546,22759=>18639,18638,10820,22763=>5535,5605,22767=>6035,22772=>12120,22777=>8004,8005,19206,14431,8910,15113,15719,22787=>11330,22790=>11539,22794=>10937,22796=>11777,12121,12585,7077,22801=>19627,17735,22804=>10641,5536,5714,11352,22809=>5848,5849,22812=>6309,22815=>19213,7528,22818=>8912,22820=>8913,8911,22823=>5537,22825=>5606,5608,5607,11331,5609,5715,11353,22833=>5716,22839=>5850,5851,22844=>11409,22846=>6036,22848=>11540,22852=>6313,11778,22855=>6311,6312,6310,12586,22862=>6678,6677,6679,6676,22867=>12122,6314,6675,22871=>7078,7079,22874=>7080,22876=>13138,22880=>8006,13741,7529,22887=>8471,22889=>8915,8914,15114,22893=>9292,9675,22896=>17364,18489,18640,5538,5717,22902=>5718,11415,5853,5856,22907=>11413,11411,5855,11414,11416,11410,5858,5857,5854,5852,11412,22922=>6047,22925=>6044,11545,11548,11547,22930=>6038,6046,22934=>6043,11544,11542,6042,22941=>6037,6040,22944=>11543,11550,11546,6041,6045,6048,11541,11549,6039,22958=>6319,6327,22961=>11790,11783,6328,11794,11779,11786,22969=>6318,11780,6316,11787,11791,6315,22976=>11792,11785,22979=>11788,22981=>6330,6321,11795,11793,19222,6326,6324,11784,6323,11782,11781,6322,6320,6329,6325,6317,22998=>11789,23000=>6681,19227,6688,12136,6680,12128,12124,23008=>12140,12123,23011=>6683,12133,6686,6689,23016=>6684,12137,6687,23020=>7087,12143,12125,23025=>12127,12134,12138,12142,12139,12132,12135,23033=>19234,12129,6691,12131,12130,12141,6682,12126,6690,23043=>6685,23049=>7093,12594,23052=>7092,23055=>12592,23057=>7081,23059=>7086,23061=>12591,12588,12593,7082,12587,23067=>7085,7083,23070=>12595,7084,7088,23075=>7089,19218,7091,23081=>7090,23085=>12589,12590,23091=>12596,23093=>13145,7530,13755,13144,13163,23100=>7536,23102=>13161,23104=>7535,7531,13170,13154,13157,23110=>7539,13167,13159,7532,7540,23116=>13164,13162,23120=>13147,13168,13156,13151,23125=>13141,13169,13153,13140,23130=>7538,13158,13171,13155,13143,13148,13139,23138=>7537,19237,13152,13149,7533,13142,23145=>13166,7534,23148=>13150,13146,23152=>13165,23159=>8007,13748,23162=>13745,13762,13750,13763,23167=>8009,23171=>13759,13756,23176=>19609,23178=>13757,13760,13764,23182=>13160,13766,14451,19563,8010,13767,13743,13753,19242,13758,23194=>8008,8011,13765,13768,13747,13744,19362,23202=>13746,23205=>13751,13749,8012,23209=>13761,23211=>19236,13752,23214=>13754,13742,14439,14437,8480,8478,14447,14438,14448,14444,14436,14450,14435,14442,8477,8476,8475,14440,14445,8472,8479,23236=>14433,23238=>14443,14432,14441,8473,14446,14434,8474,14449,23251=>19244,23253=>15118,8920,8919,8921,15130,15120,15126,15115,15129,15128,15132,15125,8916,15124,8922,23269=>15117,8917,23272=>15131,8918,15119,15122,15127,15121,15116,23283=>15123,15721,9296,15724,15723,15726,15728,18962,9294,23293=>15722,23295=>15720,23297=>15729,15727,15725,23301=>15731,23303=>15730,9298,9293,23307=>9295,9297,23311=>15732,16351,23315=>16350,16349,23318=>16352,16345,23321=>16346,16354,16347,23325=>9676,16356,23328=>16355,16348,23331=>16910,9961,16908,16913,16912,16353,23338=>9960,23340=>16911,16907,16915,16914,9959,23346=>16909,23348=>9677,23352=>10225,23356=>17365,17736,17737,17738,10547,23363=>10548,23365=>18058,19691,18314,18313,23371=>18490,18491,18641,18752,23376=>5539,5540,23379=>5541,5610,5719,11417,5859,5860,23386=>6051,6052,6050,6049,23391=>6331,23394=>11796,6333,6332,11797,23401=>6692,23403=>7094,12597,23406=>13173,23408=>7541,8014,13172,8013,23413=>8923,19253,15133,9678,23418=>9962,16916,19255,10549,23423=>10724,10938,11354,19054,5720,11355,5863,23431=>5861,5862,5864,23435=>6054,6053,23438=>11551,6055,23442=>11552,11798,23445=>11799,23447=>6334,6336,6338,6335,6339,6337,19266,23458=>6696,6693,6695,6697,6694,12598,12144,23466=>19372,23468=>12600,12599,7100,23472=>7096,23475=>7097,7099,7101,7098,23480=>7103,7102,23487=>7546,13175,13174,7545,23492=>7544,7543,7547,7542,23498=>13774,13771,8016,13770,13775,23504=>8018,13773,8015,8017,13772,19260,14452,19701,14453,14454,23518=>8924,8932,15134,8926,8930,15135,8931,8927,8928,8925,8929,9301,13769,9302,9300,23534=>9299,16357,9679,16917,16918,19265,23541=>10398,10550,23544=>5542,23546=>5865,23551=>19207,23553=>6698,23555=>12601,7104,19268,23559=>7550,7549,7548,8019,8020,13776,8933,9680,5543,11332,5611,11356,19270,19272,11418,5866,23578=>6340,23583=>14455,23586=>5544,23588=>5612,11419,23592=>11553,23594=>11554,23596=>6056,23600=>13777,8021,23603=>14456,23607=>9963,5545,5565,5613,11357,5721,23614=>6060,6059,6057,6058,23620=>11800,6342,6343,11801,6341,19275,23627=>6702,12145,6701,6699,6700,7107,7105,23636=>12603,7106,12602,23640=>7095,13176,23644=>7552,7553,23648=>7551,23650=>8934,15136,9303,9304,23655=>15733,9964,17366,17367,23660=>10642,18753,11315,5614,23665=>5546,23667=>11359,11358,23673=>5867,11421,11422,11420,23678=>11423,23685=>19277,11562,23688=>11557,11559,11561,11558,6064,11555,23695=>11556,6061,6062,11560,11563,6063,11564,23708=>19612,11815,23711=>11809,11804,6345,11812,11810,11803,11816,11819,11814,11807,6347,11813,6348,11808,11811,11802,11806,11818,6349,23731=>6350,23733=>11805,11817,6344,6346,23738=>19287,23750=>12162,12155,12161,12154,12156,12150,12148,23758=>12163,12160,12146,23762=>6704,12158,12159,23766=>12157,12149,12147,6703,12153,12151,23774=>12152,12164,23784=>7112,19278,7111,23788=>12604,7108,12606,19279,7113,12607,23796=>7116,23798=>7114,12608,12165,12610,23803=>7110,23805=>7109,23807=>12605,12609,7115,23814=>7555,7554,23819=>13178,13182,13184,7556,13187,19283,7560,13189,23828=>7562,23830=>7558,7566,19284,7563,13180,7557,23837=>13179,13177,13191,13181,23842=>7559,13190,7564,13186,13185,7565,13183,7561,23854=>13192,23856=>13188,13792,13799,13788,8024,13784,13800,13778,13797,13795,13789,23868=>13798,13791,23871=>13783,13801,13781,13794,13779,23877=>13802,19285,8025,23881=>13796,14459,13782,8022,23886=>13786,23888=>8023,13785,13790,23893=>13787,23897=>13793,23902=>14463,23906=>14466,14458,23909=>14460,23911=>14465,14464,8481,23915=>13780,14462,23919=>8482,23921=>14457,14461,23927=>15143,23929=>15150,15141,23932=>15148,15139,15147,15151,15138,15142,15137,23940=>8935,23942=>15140,8936,15146,15145,15144,19280,23949=>15149,23954=>15737,15739,9306,15740,23959=>15735,23961=>15734,15744,23964=>15742,9305,15745,15736,15741,15743,15738,23975=>16361,16366,16360,16365,23980=>16358,16368,16364,16369,16363,16359,16367,23988=>16370,16362,19335,16919,9968,23994=>9966,23996=>9965,9967,24000=>17368,24002=>17634,17739,24006=>18059,18060,24009=>10551,24011=>18315,24013=>10643,24015=>18316,24017=>18493,10726,24020=>10725,18492,10779,19288,18642,24027=>10939,24029=>5547,5868,11424,11565,6206,7567,24037=>5548,5724,5723,5722,24043=>6065,24046=>7117,24048=>14467,5549,5550,5551,5615,24055=>6705,24057=>12166,24061=>8026,5552,11333,24066=>5725,5726,11360,24070=>5869,24073=>19308,11566,24076=>6066,24078=>11567,24081=>6356,24084=>11821,6354,6353,11820,6351,11822,6352,6355,24093=>6706,24095=>6708,12170,12167,12168,12169,12171,6707,24104=>12612,12611,24107=>7119,24109=>7118,19297,24115=>7570,13194,24118=>7569,7571,7568,24125=>8028,13193,24128=>8029,13804,24131=>8030,13803,8027,24138=>14470,14472,8483,14471,14469,14468,24147=>15154,8941,8939,24151=>8940,15152,15153,24155=>8937,15749,15747,24159=>9308,15748,9309,9307,8938,24166=>16373,16371,16372,15746,16921,9969,16920,17369,17370,16374,17740,24178=>5553,5727,5871,11425,5870,24184=>6357,8484,19300,5616,5728,6709,8031,10941,11361,24194=>11362,19251,11426,24199=>6068,11571,11569,6069,11568,11570,11572,24207=>6067,24213=>6361,6362,6359,24218=>6358,12175,6360,24224=>6710,24226=>12174,12176,12173,12177,6711,7122,12613,24234=>12615,7120,12616,7121,12614,24240=>12172,13195,13198,13199,13196,7575,7574,7572,7573,13197,24254=>7576,24257=>8033,8034,24260=>8035,14473,14475,14477,8486,8485,8032,14476,14474,24270=>15158,24272=>19305,15156,15162,8942,15163,15160,8943,15157,15155,15161,9311,15751,15159,9313,15752,9312,9315,15753,9310,9314,24293=>16379,16377,16376,16378,16375,24300=>10400,24302=>18061,18062,24305=>18317,18494,10854,10942,24310=>6363,6070,24313=>19311,6712,19312,19314,24318=>5554,5617,24321=>5729,11427,24324=>6071,11573,24327=>12178,6713,24330=>8944,5555,24333=>19317,24335=>5872,24338=>8487,5556,5618,5619,24343=>5731,5730,24346=>11428,5873,24349=>11574,24351=>6072,24354=>11824,11825,11826,24358=>6364,6365,11823,6366,24365=>6714,12179,24368=>12618,7123,24371=>12617,24373=>7577,13200,7578,13201,24378=>19323,24380=>8036,24384=>14478,24387=>15165,15164,24390=>8945,24392=>9316,15754,9681,16380,9970,24398=>10727,18644,10943,24404=>11827,24406=>12180,7579,13805,8488,24413=>10226,24417=>10944,6074,19328,6073,6715,24423=>12619,24425=>7581,7853,7582,7580,8037,24431=>15166,8946,9317,19331,11316,11429,24438=>11576,6075,11575,6076,24443=>19074,6370,11830,11829,6369,6367,6368,11828,24453=>6717,12181,6720,6716,6722,6718,6719,6721,24464=>7126,7125,7124,24470=>13203,7583,7586,7584,24475=>13202,7589,24478=>7585,13204,7588,7587,24484=>19030,13807,13806,19334,8040,8038,8039,13808,8489,14480,8490,14479,24498=>15755,24501=>9319,15167,9318,24505=>8947,24507=>16923,16381,9971,16922,17741,18063,18064,24515=>5620,24517=>5732,24521=>11363,24524=>6078,6080,24527=>11432,11579,11578,11577,24532=>11431,11430,5875,6079,6077,5874,24541=>6371,11831,19426,6372,11584,24547=>11586,11585,11832,24552=>11581,24554=>6084,6082,24557=>11580,11582,11588,24561=>6081,24563=>11583,11592,6374,24567=>11589,6083,24570=>11587,11590,24573=>6373,24575=>6375,11591,24585=>11852,11839,11837,11851,11846,6727,6376,11847,11850,6723,11849,6377,6382,6380,11840,24601=>11835,11842,6387,11853,6724,11843,24608=>6725,6383,11845,19382,12196,6726,11834,6384,6728,6385,6381,6386,11844,11833,11848,6378,24625=>19344,11836,11841,11838,6379,24631=>12182,24633=>12183,24640=>12193,12623,12194,6734,12197,12187,6733,12189,24649=>12190,19102,24652=>12192,6729,24656=>7130,24658=>18960,12188,12184,7131,24664=>12198,7127,12621,12191,24669=>12620,12186,12195,24674=>6732,7128,6738,7129,12199,12622,6731,7133,6737,6736,6735,7132,12200,7134,6730,24690=>12185,24703=>7590,12626,12628,24707=>12630,7135,7141,13207,12634,12625,7592,13205,24716=>7140,7138,12636,24720=>13206,24722=>12627,24724=>7139,12631,7142,12633,24730=>7137,12632,12635,12629,19354,7136,7593,24738=>12624,7591,19355,24744=>7594,24752=>13209,13218,8043,19356,7596,7601,8044,13220,7608,13810,13210,7600,7603,7598,13208,13222,13225,13825,24771=>13223,13814,7599,7606,7610,13217,13809,13221,7595,13811,13224,13813,13213,24785=>8041,24787=>13211,13212,7605,24792=>7604,13215,7609,13219,7602,13216,19504,7607,8045,8042,13812,24804=>13214,24806=>7597,24816=>8050,8054,13816,8495,8052,13820,8056,14481,13822,8497,8048,8051,13823,24830=>13824,13830,8058,8498,24835=>13826,13831,13819,8508,24840=>8499,8057,13817,13832,24845=>8507,8055,8492,13829,24850=>8059,13821,13815,8049,13818,24856=>13827,24858=>8491,8496,8046,13828,24863=>8494,24867=>8047,24871=>8506,15169,14492,24875=>14484,15168,24878=>14488,14490,24882=>14487,24884=>8505,24886=>14486,8509,24891=>15184,24894=>8504,8949,14493,15170,19365,24900=>8502,14485,14489,8948,8493,14482,14483,8950,8501,8503,8500,14491,24914=>15174,15175,15180,9324,15187,24920=>8956,24922=>8955,15182,19383,9323,15171,8954,19261,15186,8952,8953,19363,15183,15772,9321,8053,24938=>15185,9328,15177,24942=>9322,24944=>9327,15172,15176,15173,15179,8957,9320,8951,24953=>15758,15181,24956=>9326,24958=>9329,24960=>15178,19368,9325,15757,24967=>19371,24969=>15762,9685,15756,16393,15771,9333,24976=>9331,9683,15768,15764,9337,24982=>16384,24986=>9335,15763,24989=>16382,24991=>15767,24993=>15770,15761,24996=>9336,24999=>9330,16383,9684,15769,9332,9334,15766,9338,15765,15760,15759,9682,15773,16386,16925,9687,25016=>16392,25018=>16390,25020=>16926,25022=>9688,16391,25025=>16388,9973,16924,25029=>16385,16387,9974,9690,9972,9689,9976,16389,9686,25040=>19378,25043=>19375,25046=>17379,25048=>17371,25054=>16932,17372,16928,25059=>10227,16930,16929,9975,16927,16931,17380,17376,17378,25069=>17373,17374,25072=>17377,17375,10401,25077=>10404,10403,10402,10552,18065,10553,17742,10644,18318,10645,10728,10780,18645,25091=>18646,18647,25095=>18928,5621,11364,5733,25100=>5877,5878,5876,25104=>5879,6086,6085,25108=>11854,6389,6388,25113=>12637,7611,7612,25119=>8060,14494,8510,8511,14496,14498,14497,25127=>15189,25129=>15188,8958,15190,25133=>15774,9339,25136=>9691,25138=>9977,10228,9978,25142=>5622,25146=>11593,25149=>11855,6391,6390,6392,6739,12201,12202,25158=>12638,7143,7613,8061,13833,5623,25165=>5557,5624,25168=>11365,5737,5736,5734,5735,25176=>5882,11439,11441,5881,11433,25182=>11434,25184=>11440,11436,11438,5880,11435,11442,11437,25197=>6093,6102,6100,11603,11600,11608,6098,11609,25206=>6091,11606,25209=>6097,11602,11601,6095,11607,6096,6393,6090,11604,25219=>11594,6087,25222=>6106,11599,11605,6092,6094,25228=>11595,25230=>11596,11597,25233=>6105,6099,6104,11598,6103,6089,6088,6101,25256=>6407,11867,11860,6402,6421,11856,11863,11865,11868,6416,25267=>11864,11857,6414,11861,25272=>11869,6399,25275=>11866,6409,6408,11859,6397,25282=>6398,25284=>6396,19387,6420,6412,6406,6394,11862,6405,6395,6413,6422,12203,6410,11858,6400,6403,6404,19389,6418,6419,6417,6411,6415,6401,6740,25311=>19014,25323=>12209,6752,6744,6746,6751,12221,6749,12639,7144,6754,12206,12214,6750,12213,12210,12218,12220,6743,6747,6753,7146,12215,6745,6756,12208,25351=>6748,7145,6742,25355=>12205,12212,12204,12207,12211,12640,6755,25363=>12216,12217,12219,6741,25384=>7160,12652,7158,7159,12642,12658,25391=>7149,25394=>13226,12660,12654,25398=>12645,25400=>12663,12648,7155,13249,12651,7157,7148,25408=>12665,12653,7151,12646,12643,12644,7152,12659,12666,7154,12650,12649,7162,7161,7147,7153,7156,12662,25428=>12656,7150,12641,12664,12655,12657,12661,25445=>13227,25447=>7621,7641,7640,25451=>7629,19391,13245,13241,13238,13256,7624,7616,25461=>13243,8077,7620,13251,25466=>7642,7639,13247,13230,25472=>7638,13253,13229,7627,7631,13252,25479=>13239,7632,7626,13228,19385,8063,13255,13237,7637,13240,13254,7636,25492=>13834,25494=>7617,13235,7622,7633,25499=>7628,13244,13234,13232,13250,7614,7634,7618,8062,13248,7619,25511=>7615,7630,7625,7623,13236,7635,13233,13246,13242,13836,13835,25533=>13231,13852,25536=>8065,25538=>13858,13841,13855,14499,8068,13859,13862,8067,13844,13861,13860,8069,13837,8064,8072,25554=>8070,13857,25557=>13847,8074,13864,13856,13865,8082,8080,13854,13853,25567=>13851,13845,8073,25571=>8071,12647,13838,25575=>14529,13839,8066,8079,14501,25581=>8075,8076,13840,13863,14500,13848,13843,8078,13849,13846,25592=>19395,8083,25606=>8526,25609=>14504,14523,14528,14516,8522,14533,8519,14502,25618=>14503,8512,8521,14510,8524,8525,14511,25626=>14524,14530,8520,25630=>8514,14509,14505,14532,14514,14515,14506,14526,14517,14527,14519,25642=>8515,15191,8518,8516,14531,14522,14518,25651=>14507,8968,14521,8523,14513,19394,14512,19408,25661=>8517,8513,15212,14525,14520,25667=>14508,25675=>15207,25677=>15192,15203,25680=>15210,8966,8081,15208,8961,25688=>8960,15215,25691=>15193,15206,15194,15205,8964,15209,13850,25701=>15216,15201,8967,15788,9340,25707=>15214,15213,8969,15775,9341,15776,25714=>15197,15198,15195,15200,15196,15217,8963,9342,8965,8970,25725=>15199,25727=>15211,25730=>15204,25733=>15779,25735=>8959,9345,16400,15784,15783,15785,25743=>15782,9346,25746=>9352,9349,25749=>9350,15777,15780,15790,9358,9356,25756=>15781,13842,9343,15787,15778,25762=>9359,15786,8962,9348,15202,25769=>9351,25771=>9355,9357,9354,9353,19739,9347,15789,9344,9360,25787=>9695,9696,16399,9705,9702,25793=>9693,9700,16401,9698,9692,25799=>9699,25801=>16398,9980,9694,25805=>9701,9979,16397,16396,25810=>9703,25812=>9704,25814=>16395,16394,9981,16404,9697,16402,25824=>9982,19404,9987,16935,16937,19405,9984,25832=>16938,16934,25835=>16936,9985,9988,25839=>16933,9983,9986,10230,16403,10229,25847=>10235,17384,25850=>10233,10234,17387,17383,10231,17381,10405,17385,25859=>17386,17382,25862=>10232,17743,25865=>17746,25868=>17747,17745,17748,10406,17744,25875=>18069,10555,18068,18067,18066,10554,10556,25883=>18319,10647,10646,19384,25888=>18496,18495,18498,10781,10729,18649,18497,25897=>18648,10783,10782,10821,18754,18824,5625,25906=>13866,16405,10945,25910=>5883,11610,6109,6107,25915=>6108,25917=>11870,6423,6757,25921=>12222,25923=>12223,25925=>6758,12668,25928=>7163,7164,12667,25933=>19410,25935=>7649,25937=>7645,25939=>13257,7652,7651,7644,7647,7650,7646,25948=>13870,7643,8084,19416,25954=>8086,8087,13869,13872,8085,13867,13871,25962=>13868,25964=>8527,19415,25967=>14534,25970=>8971,15218,9706,9361,15791,9362,9363,15793,15792,15794,16407,25983=>16406,16940,16939,9989,9990,17749,19414,25991=>5626,19254,25996=>13873,26000=>8089,8088,14535,26004=>17388,10648,18650,5627,26009=>7165,26011=>7654,7653,13874,13875,8528,15219,8972,16408,26020=>5628,5738,26023=>6424,11871,26026=>12224,6759,7655,26030=>13876,8090,8529,26034=>15795,15796,26037=>19418,16941,10236,18825,5629,26043=>11872,6425,6760,26047=>12225,26049=>7166,12672,12670,12671,7167,12669,26059=>7657,7658,13258,7659,7656,13877,19421,13878,14536,26070=>8974,8973,26074=>16942,17389,26077=>17751,17750,18070,10946,11334,6761,19425,26085=>5630,5739,26088=>5885,5884,26092=>5886,5887,11444,11443,11611,6110,11614,11613,11612,11615,26106=>6426,11878,11874,11883,26112=>6433,26114=>6431,11879,11875,11882,6430,6437,11877,11873,6436,11880,6429,11881,6432,6434,11885,11884,11876,6428,6427,6435,26136=>19428,26140=>12230,12236,26143=>6767,6764,12227,12232,19660,6770,6762,12231,6765,6768,26155=>12234,26157=>6763,12239,6766,26161=>6769,12228,12233,12237,12229,12226,26169=>12238,12235,26177=>7175,7168,7171,19431,7174,26183=>12675,26185=>7169,12673,19434,7173,26191=>7170,26193=>12676,7172,26199=>19141,26201=>13262,7661,13261,13263,7660,7665,12674,26209=>13260,13264,26212=>7662,13259,7664,19436,7663,26218=>13885,26220=>13880,26222=>8091,8095,8092,13883,13886,19438,8093,26230=>8094,8099,14545,13884,8097,13881,13879,26238=>8098,26240=>13882,26244=>8535,19345,14537,8532,8533,8531,14542,14541,14538,8537,26256=>14540,8096,26260=>14544,14539,8534,8530,8536,14543,26269=>8977,26271=>15222,15221,15220,8975,26276=>19172,26280=>8976,15799,15802,9365,26285=>19173,9364,15803,15798,9367,15800,19167,9366,15797,26295=>15801,9712,9709,16417,16416,26301=>16415,16410,26304=>16411,26308=>9710,26310=>9707,9711,16409,9708,16412,16413,16418,19170,26319=>16414,26322=>16943,26326=>9992,26328=>17392,9991,17390,17391,10237,10408,17752,26336=>10407,26339=>18072,18073,26342=>10557,26344=>18071,10649,26347=>18651,10784,18755,18756,26352=>5631,26354=>5888,5889,6111,26358=>11886,6771,7176,7666,26364=>7491,26366=>8100,8101,7956,13887,19448,8538,15224,15223,26376=>5632,5890,11887,6439,26381=>6438,26383=>12240,12241,26386=>12677,12678,7177,7178,26391=>7179,13265,26395=>7668,26397=>8103,26399=>8102,14546,14816,15225,16419,26406=>10238,10558,5633,26410=>5742,5743,5741,5744,5740,26417=>5893,26419=>11452,5892,5894,26424=>11447,11446,11449,11448,11451,5891,11445,11450,26436=>19013,11616,6121,11617,11621,6120,26443=>11625,11620,11623,6113,6114,6115,6116,26451=>6123,26453=>11619,6118,6124,26457=>11618,11624,26460=>6117,11622,6119,6112,6122,26466=>19456,26471=>19455,26474=>6460,26476=>11889,6440,26479=>6450,6451,6443,6461,6445,11897,6456,11892,6446,11907,11908,11900,11893,6459,11905,6454,6452,26497=>11906,26499=>11904,11896,11888,11895,6447,26505=>6453,26507=>6441,11899,11898,11890,26512=>6455,11902,11891,6458,11909,6442,26519=>6449,11894,11903,6457,26524=>6444,6448,26527=>11901,26540=>19481,26542=>12273,6779,6792,19498,12268,12258,6785,12256,6778,12251,6788,12264,12245,12247,26560=>12250,12242,12263,12279,6783,12252,12270,26568=>12244,12277,12278,12281,12272,12257,12265,6789,6776,6784,6796,6773,6775,26583=>19459,12249,6793,6786,12275,12246,6795,6790,12255,26594=>6794,12262,12254,6787,12274,12266,26601=>6781,12280,12253,6777,12271,12261,6782,12267,6774,12243,6791,7194,6780,12260,12259,12248,26618=>12276,26620=>12269,26623=>6772,26625=>19464,26637=>19640,26642=>12698,7201,12699,26646=>12687,7190,7202,26650=>12680,19100,12689,12697,26655=>12679,12706,7180,19461,26661=>12705,12700,26664=>12701,7188,7199,12691,26669=>12692,12702,12693,26673=>12688,12682,12683,12696,12690,26679=>19539,7181,7185,12704,12684,7197,7193,19315,26688=>7196,7203,7186,7198,12695,7200,7183,26696=>7182,12681,26699=>12685,7191,12703,12694,12686,7195,7192,26707=>7184,7187,26717=>19467,26731=>13286,26733=>13270,13271,13275,26737=>13290,13287,26740=>13280,13279,7675,13283,13298,13266,26747=>13299,13285,13303,13291,7674,13289,7669,7690,7680,26757=>7684,7683,13267,26761=>13296,13302,13294,13301,26767=>13282,13268,13300,13284,7672,7685,26774=>13293,7678,26779=>13292,13269,7686,26783=>7688,13295,7689,7671,13276,13297,26790=>19214,7677,7687,13278,13288,13273,13277,7682,13272,7670,7679,7676,13281,7189,13910,7673,26813=>19635,26819=>19473,7681,26822=>13913,13935,13924,8123,19751,8118,13907,8119,13923,26832=>13916,13929,8115,13889,13931,8105,13897,8108,8107,26842=>8124,26844=>13891,13925,13926,8110,8106,13905,26851=>8117,13900,26854=>13927,8113,13919,13932,13894,13899,13893,26862=>8112,13912,14568,13895,8116,13904,13928,8111,13901,13898,13915,8114,8104,8126,13918,13917,26880=>19476,19475,19769,19667,13890,8109,13930,13906,13908,26890=>13921,13920,13888,8120,8122,13896,13903,13911,8121,13902,13914,13933,26903=>13922,26917=>13934,26922=>13892,26927=>14588,8546,26930=>14586,14565,14570,14563,19485,14582,14549,14556,26939=>14580,14590,14566,19072,14553,14572,14577,14557,26948=>14574,14554,26952=>14561,14562,8548,14581,14579,26958=>14550,14584,26961=>14585,14587,8552,8544,26966=>13274,14558,14576,14559,8541,8557,14583,8555,8551,14548,8543,19482,14551,8556,26981=>14567,14547,26984=>8549,14571,14555,8550,14564,8540,8125,14573,13909,14552,26995=>19472,14578,8545,14575,8542,14569,8553,14560,14589,27010=>8547,14701,27014=>8554,27021=>15239,15237,27024=>15259,15235,27027=>15253,8539,8980,15231,15258,19486,15236,15250,8985,8978,27038=>15256,27040=>15229,15255,27043=>8996,15246,15262,8994,15238,8979,15240,15254,8988,15233,8992,8982,15242,15232,15226,27059=>15252,8989,15261,15227,8986,27065=>15248,27067=>8987,15234,15245,15241,15243,27073=>8981,15260,8995,15244,27078=>15263,27081=>15228,15249,8984,8993,8991,15230,15251,8990,27091=>8983,15247,27097=>15257,27105=>19469,15815,27108=>15811,15807,15827,15824,9370,27115=>15831,15814,9381,15821,27121=>15810,15820,9378,15840,27126=>15837,15823,15808,19491,19452,15828,15830,9374,15818,15813,15804,9371,9379,27140=>15833,9380,15805,15839,15826,15832,9377,19470,27149=>15829,27151=>15836,27153=>9382,27155=>9376,15822,15809,15841,15806,15834,9373,27163=>15816,27165=>15817,9372,9369,15812,9375,27171=>9368,27173=>15835,15838,15819,16432,27180=>19684,27186=>16424,27188=>16420,9725,27192=>9714,9719,9715,16434,16445,9713,16426,16435,15825,16436,27204=>9720,19494,16451,9724,9727,16422,27211=>9723,27213=>16449,16450,16440,16439,16431,27220=>16441,16448,16447,27224=>9718,9716,16433,16430,27229=>16427,16446,9726,16444,9722,9721,27236=>16438,27238=>16421,16423,16425,16443,16437,9717,27245=>16428,27247=>16442,27254=>16429,27262=>10000,16961,9993,16946,27267=>16957,9995,16964,27271=>16953,27273=>16948,19298,27276=>16965,16944,16955,27280=>10002,16960,16966,16954,9994,16956,16945,10001,27290=>16963,16950,9997,19496,16952,16949,10003,16951,9996,9999,16959,16947,16962,27304=>16958,27308=>10240,17403,10245,10246,27315=>10239,17402,27318=>17399,17400,10243,17394,17398,10242,27325=>17395,27330=>10244,10241,27333=>17393,17397,17401,19499,27339=>17758,17755,17764,27343=>17763,17761,17756,27347=>10412,27353=>17757,10411,9998,17760,10410,17765,17759,17754,17396,27365=>10409,27367=>17753,18077,27370=>18076,17762,10559,27374=>18080,18081,18075,18079,27379=>18074,27384=>18323,18078,10652,10650,18321,27392=>18324,27394=>18320,18322,10651,27400=>18500,18501,10730,18499,27407=>18654,10785,18652,18653,18757,27414=>10855,18828,18826,18827,18829,27421=>19502,18929,27424=>5634,5895,27427=>6462,27429=>11910,27432=>12282,27436=>12707,12709,27439=>12708,27441=>12710,7691,13305,12711,19505,13304,13306,13307,13936,8128,13937,13939,8129,8127,13938,27457=>14596,14594,14593,27461=>14592,14591,8558,14595,8997,15264,15266,8998,15265,9384,27472=>9383,15842,27476=>16453,16452,16454,27481=>9728,27483=>16967,10004,27486=>17404,10247,17766,10731,5635,5745,5896,6125,6463,6464,27498=>6797,27501=>12712,27506=>8559,27508=>19506,27510=>15968,9729,10248,5636,27515=>5897,27518=>11912,6465,11911,27522=>12283,6798,12284,27526=>6799,27528=>12714,7205,7204,27532=>13312,13310,13311,13309,27537=>13308,27540=>13940,13943,8131,13941,8130,13942,27547=>14597,27550=>15267,15268,15269,27554=>15845,15844,9385,15843,15846,16455,27562=>16456,16457,27565=>16968,10005,10249,17767,27570=>10653,11335,27573=>6800,12285,7206,27578=>7692,27580=>8132,13944,27583=>8561,8560,27587=>15270,15271,9386,9387,16459,16458,17405,18655,5637,11336,5746,27599=>6126,11626,27602=>6801,8562,5638,27606=>12286,6802,12287,27610=>10006,5639,19517,27614=>11913,27616=>12288,19515,12719,12718,12716,27622=>12715,12720,12717,27627=>7693,7694,27631=>8133,13945,27634=>13946,13947,27639=>14602,14603,14601,27643=>14599,14600,8563,15272,15849,15848,15847,15850,16461,16460,9730,16462,27656=>10007,16969,27659=>17406,17768,18502,27663=>5640,5748,5747,27667=>6466,11337,11366,5898,27672=>11453,11627,11628,6467,27677=>11914,27679=>6803,12289,12290,27683=>7207,7211,12721,7210,7208,7209,27690=>13313,7695,8136,27694=>8134,8135,13948,27699=>8999,5641,27702=>11367,19518,5749,27707=>11370,27710=>5752,11369,5751,5750,6127,11368,27718=>11454,27721=>19127,11458,11460,11461,5908,5909,11457,5904,27730=>11455,27732=>11459,5905,27735=>5900,27737=>5901,19522,5907,11456,5899,6128,5902,5903,5906,27749=>11645,11643,11630,6140,11637,6135,11631,27757=>11639,19188,11636,6138,11635,6145,11644,6147,27766=>6149,27768=>11629,19524,6136,11646,27773=>6143,6146,27776=>11937,6130,6153,6144,11632,6133,6148,11640,6131,6132,11935,11633,6139,6150,11647,11634,6137,27794=>6142,11915,6151,11641,6141,27800=>6152,6129,11638,6134,11642,11936,27819=>6479,6495,11922,6486,27824=>11943,6471,27827=>6474,11934,27830=>11920,11924,6482,6484,11927,6491,6477,6475,6476,6490,11939,6485,11926,11928,6483,6488,11929,11942,27849=>6804,6494,19098,6472,11941,27855=>11945,11925,11947,11932,6481,11921,6480,6498,6487,27865=>11919,12299,6493,6497,11933,11938,27872=>6499,6492,6478,6468,27877=>6473,27879=>11923,6469,11946,27883=>11917,11916,11930,11918,6496,7212,6489,11931,6470,27893=>6819,27897=>11944,27904=>12306,12309,27907=>12312,12301,27911=>12315,12318,12320,12298,6805,6810,12726,6826,12313,12321,12305,12297,27926=>12753,6813,12310,12302,12304,6818,27933=>12307,6812,12294,12316,27938=>12319,27941=>6809,27943=>6821,12291,6823,6807,6827,12317,12293,6824,12747,11940,6811,6806,12300,12292,6825,6817,12311,6822,6820,12303,6814,12295,6815,6816,12296,12314,6808,12308,27992=>12729,7220,7225,19142,19544,27998=>12738,12744,12740,12727,12730,12723,12724,7232,7217,12739,12748,7227,7213,28012=>7222,12731,7224,12732,12742,19231,28020=>7226,12757,12725,7219,7218,7230,12722,12755,12743,12756,12750,12736,12751,28034=>12745,12754,12752,7231,12737,7216,7215,7223,7229,12749,7228,12734,7696,28048=>12758,12733,12728,7221,7233,7214,19543,12741,12746,28074=>7730,13315,13319,28078=>7711,7709,28082=>7700,13317,13316,7720,28087=>13322,7714,28090=>13340,13352,7697,13337,13330,7732,13314,28098=>13342,28100=>7729,7717,7728,7707,13326,13344,13336,7708,7702,13350,28111=>13343,13345,7710,7718,13347,13324,13341,13329,13349,7723,7699,7721,13334,13332,13333,7712,13328,13327,7701,13321,13351,7703,13331,7733,28136=>7727,13320,7724,7722,7731,13338,7726,12735,13339,7725,13346,7698,13335,7716,13323,7715,28153=>7713,7705,7704,13949,13348,28160=>13325,28163=>13970,28165=>7706,28185=>8165,7719,8147,13964,8161,28191=>13952,8144,8140,13982,8146,8150,8145,8154,13986,13977,28202=>19776,13959,8159,8153,13971,8137,13983,13976,8141,13965,8156,13994,13995,28216=>8138,13981,8158,13969,13955,13956,8162,13960,13967,13961,28227=>8160,8168,13957,13950,13951,28233=>13953,8143,13966,28237=>8157,8166,19562,19462,13968,13992,13984,8139,13990,8151,28248=>8149,19216,13996,8148,13974,13962,13972,8171,13978,13975,13958,8167,13988,13985,13993,8142,13973,8170,28267=>13980,28270=>8152,8155,28273=>13979,8169,13963,13318,28279=>13989,13987,13991,28284=>19545,28296=>13954,8164,28301=>14634,14633,14607,8569,28306=>14632,14610,14611,28310=>8579,14641,8574,14631,28315=>14604,8580,8570,14619,14609,14612,14636,8564,14643,14635,8573,14624,8584,28330=>8583,8577,28334=>14642,8565,14622,14613,14626,14638,8585,19508,8567,14621,28345=>14614,8576,28348=>8575,14617,14627,14637,14608,14618,8568,14628,8581,8572,14615,8571,14606,14620,14640,8163,9027,14623,15273,14625,14639,8578,14616,8566,8582,9405,14605,28376=>14630,19091,28379=>19033,14629,28395=>15301,9024,15290,15295,9013,28401=>15275,9026,28404=>9004,15274,15307,9028,15278,15294,19569,15280,15310,15306,9002,9012,15876,9025,9010,15276,19546,15305,9014,15302,15315,15282,15291,28429=>15313,15303,9009,28434=>15289,9003,9001,9019,19411,28440=>15287,15284,15285,28444=>15309,28446=>15314,15312,9007,15316,9011,9018,28453=>15277,15852,15286,28457=>9005,9023,9020,9008,15296,15281,9021,15298,9015,9017,9000,28469=>15300,15292,15279,9016,15308,15311,15288,15299,19641,9006,9388,15297,15851,28483=>15304,19574,28494=>15283,15861,15871,9391,15870,15882,9393,15868,28503=>15872,9404,28506=>15863,9396,19575,15875,16470,9408,9407,15877,15860,15887,9402,28518=>9392,15880,28521=>15884,15889,15878,15866,9395,9398,9406,9401,28530=>15869,15293,19577,28534=>15865,15888,9397,28538=>9400,15890,9389,15879,15853,15885,10016,28546=>15867,28548=>9390,15862,9394,15854,9022,15858,19399,15883,15859,15857,9399,28560=>15881,28562=>15856,15874,15873,15886,15864,9403,28573=>19567,16473,19580,9743,9733,16485,16465,9735,16477,9742,9737,16475,16971,16481,16487,16480,16463,16478,16489,16491,9732,16490,9738,9744,28598=>9741,28600=>16484,9740,16479,28604=>16467,16472,28607=>16483,9739,9736,9731,9734,16471,28614=>15855,16466,16469,16486,16474,16464,16970,16488,16468,16482,28627=>19582,16973,10020,28632=>10008,28635=>10012,16975,16981,16979,10010,10011,10018,16982,16974,10013,28646=>16978,16977,16983,10019,28651=>10014,10017,16976,10021,10015,10022,10009,16980,28660=>16972,28663=>17419,19565,28666=>10254,17416,17418,28670=>10252,17414,17415,17410,28676=>16476,17411,10253,17407,28681=>10250,17420,10251,17408,17409,17413,10256,28689=>10255,28692=>17412,10418,17772,17778,10419,17769,10416,10413,17780,10417,28703=>10414,17771,17774,17775,17776,17779,28710=>17417,17770,10415,17777,17781,17773,28719=>18084,10561,18087,10562,18095,18086,18083,28727=>18085,18089,18092,18091,18094,18082,28734=>10560,18090,18093,18096,18088,18325,18326,18330,18331,28744=>18328,18329,18327,19594,10654,28753=>10732,18506,28757=>18503,18504,18505,10733,28762=>18657,18656,28765=>18760,10822,18758,18761,18759,18830,10856,10870,18905,18884,28776=>18904,18950,18951,5642,28784=>5910,11462,28788=>11648,28790=>6154,28792=>6157,19139,11649,28796=>6155,6156,19595,28801=>19597,11956,11958,11953,11950,11952,28810=>6503,19189,28814=>6501,28817=>11954,6502,11951,11948,6500,11955,28824=>11949,6504,11957,28831=>12323,28833=>12327,28836=>6836,28839=>19596,28841=>12330,28843=>6828,6831,6833,6835,6832,12326,12325,28851=>6830,12328,12329,28855=>12322,6834,28858=>6829,28861=>19623,12324,28869=>12772,12773,12774,7238,28874=>7234,12763,19598,12771,12776,7239,28881=>12761,12767,12760,12770,19599,19600,12766,7235,7237,12775,28892=>12759,12762,12768,19601,12769,12777,12765,28900=>7236,28911=>7738,13359,28915=>13361,13357,28918=>13369,13355,13368,7734,13353,14000,13363,7737,28927=>13364,13367,28930=>13371,28932=>13360,28934=>13365,28937=>7735,7736,13370,13358,13354,13372,28944=>13362,28947=>13366,28951=>13356,28953=>8172,8173,14010,8179,28958=>13998,14007,13997,8176,14005,14003,28965=>14004,8174,28968=>14008,28971=>19607,19617,28974=>14001,13999,8175,14002,14006,28982=>8177,28986=>14009,28993=>14649,14656,14658,14664,19608,8598,14644,29001=>8590,19610,14659,8595,14665,8586,19614,14662,29010=>14646,14663,14645,29014=>8600,29016=>14657,8587,14666,29020=>8592,14650,8597,14661,14648,14655,14651,14647,8589,8596,8594,8591,8599,8588,14654,29036=>8593,29038=>8178,29040=>14660,29042=>14652,29048=>14653,29051=>15324,29053=>9031,29056=>15320,15326,15322,29060=>9033,15321,15325,15317,29065=>15319,9032,29071=>15323,15318,29074=>9034,29076=>9029,29078=>19605,15327,29081=>9030,15896,15893,15905,15899,15901,9409,15895,15903,29092=>15902,15900,29095=>15906,9412,15897,15904,29100=>9410,29103=>15892,15894,9411,15891,15907,19604,15898,29112=>16495,9751,19621,29116=>16506,16504,9745,16494,16497,16498,16493,9755,9756,16492,16507,16502,9749,9746,16501,16499,29134=>9752,16503,9747,29138=>9748,29140=>16500,9750,16496,29144=>16505,9753,16508,16509,9754,19106,29151=>10024,10031,16984,16990,29156=>16988,10027,10026,10023,16986,29164=>10029,10028,10025,29168=>16989,16985,16987,29172=>10030,29176=>10260,17423,29179=>10257,10258,17425,10259,17422,29185=>17421,17785,17424,29189=>17786,10420,17784,29194=>17783,29196=>17782,10421,19624,29200=>10563,29203=>18097,18098,19626,29209=>18334,18333,10655,29213=>18332,18507,18508,29218=>18658,18762,19629,29222=>18831,18930,10890,18940,5643,29228=>6505,6506,19632,29232=>6837,29237=>10032,5644,29240=>6507,7240,8601,5645,29245=>7739,9035,11338,19633,12331,12778,29252=>15328,29254=>10033,5646,6508,12332,12333,14011,8180,29263=>14667,29266=>8602,15329,29269=>19636,9413,19637,10422,5647,14012,5648,29277=>5912,11463,5911,6160,6159,6158,11650,29287=>6509,29289=>6510,11959,29292=>12334,29294=>12337,6839,12335,29298=>6838,12336,6840,29302=>12781,12780,12779,7241,29307=>13374,13375,7740,13373,13376,8182,7741,19642,29316=>8181,14016,14015,29320=>14013,14014,29323=>14017,14669,14668,14672,29328=>14671,14670,9036,15332,29333=>15331,9037,15330,15908,29338=>15909,9414,29341=>16510,16511,29345=>17791,10423,17790,17789,17787,17788,10656,18099,18509,18832,29356=>5649,29358=>11371,5753,11372,29364=>11464,11465,29370=>11656,29373=>11652,29375=>11651,6511,11655,6162,11653,6161,11657,11654,29385=>11963,12338,11961,11968,29390=>6512,29392=>6515,11969,11965,29396=>11966,29398=>11960,6514,11962,6513,11967,29404=>11964,29407=>12342,6842,6843,29411=>12345,12339,29414=>12344,29416=>12340,6841,12343,12341,29427=>12787,12784,29430=>12786,7246,7245,7243,12783,12788,7242,7244,12785,13384,12782,12789,29447=>13379,13383,29450=>13382,14019,14030,29455=>13385,29457=>13380,14018,7745,29462=>7744,13378,13381,7746,29467=>7743,7742,13377,13386,29474=>14021,14028,29477=>8184,14027,14024,19649,8186,19643,19644,29485=>14026,19650,29488=>14020,14022,14025,14023,8185,14029,8183,8603,29498=>14676,14675,14673,29502=>8606,8605,14677,29506=>14674,15333,9038,8604,29513=>14679,14678,29516=>15336,15334,9415,29520=>9039,15335,15911,29527=>9416,15910,15919,15918,15916,29533=>15915,15912,15913,15914,15917,15920,29541=>16516,16513,16514,9757,16512,16518,16517,16515,29550=>16992,16993,10034,29554=>10035,16991,29557=>10262,17426,10261,10424,29562=>10425,10564,18101,18100,18335,18510,10734,18660,18659,18661,5754,12346,7247,7747,13387,5755,11373,5650,29582=>11466,29586=>11662,11660,11661,11658,6163,11659,29596=>19124,11977,29599=>6518,11975,11971,11974,29604=>11970,6520,11973,19121,6517,6516,19652,6519,11976,11972,29618=>6847,6850,12354,12353,12352,6844,12361,12351,29627=>6846,12794,29630=>12358,12356,6849,29634=>12348,12359,29637=>12350,12360,12357,12349,19655,6845,12362,12347,6848,19271,19651,29650=>12799,12790,12801,19101,12793,12804,12805,12791,12803,12800,12798,12802,7253,29664=>7251,29667=>12796,19677,12792,29671=>12795,12806,12797,7252,12355,29677=>7248,7250,19003,29684=>13401,13390,13388,19665,13389,29690=>13396,29692=>13397,13393,7752,13398,13395,13392,29699=>7750,13391,7748,7751,13394,13402,7249,7749,13400,13399,7753,29717=>19666,14035,19159,29722=>14036,8196,29725=>14042,29728=>14044,14037,8190,14041,14040,8191,8197,29736=>8198,14043,8188,14034,14032,14038,14031,8195,14033,14039,14045,8189,8194,8192,8193,29753=>19669,8187,29759=>8613,14686,8612,14690,29764=>14680,29766=>14691,19676,29769=>19656,14681,14682,29773=>14692,14689,14687,14688,14684,14683,19559,14693,8609,29783=>14685,29785=>8614,8608,8615,8616,19712,8611,8610,19674,29794=>15337,9041,9040,19243,29799=>15342,29801=>9417,9042,29804=>19680,9044,15343,8607,9043,15339,15341,15338,19682,15340,19678,29817=>15930,29820=>15929,15926,9420,16519,9421,15925,19685,9419,29829=>15927,15924,15921,15928,15922,15923,9418,29840=>16997,29842=>16523,29844=>16522,16524,29847=>16994,9760,29850=>16520,29852=>9758,29854=>9762,9761,16521,16525,29859=>9759,19360,17001,10038,10263,10039,10036,16998,16996,29869=>16999,29871=>17002,10037,17000,16995,29877=>17429,17432,17794,17427,29882=>18102,17433,29885=>10426,17431,10264,17428,17430,17434,17795,29893=>17793,29896=>19694,29898=>10427,17792,29903=>10565,29908=>10658,18512,10657,18514,18511,18513,10786,18763,5756,11978,12807,12808,7754,14694,9763,10428,10735,18764,5757,29928=>11979,5213,29932=>12363,29934=>12364,29940=>12809,12810,7755,7756,29947=>14046,29949=>14697,14696,14695,15344,29954=>15345,15346,9045,29959=>15932,15931,29963=>16526,9764,9765,19696,17006,17003,17004,17005,17436,17435,10265,17796,18336,5758,29978=>6851,29980=>7757,14698,19698,5759,29985=>12811,7758,29989=>8199,8200,29992=>5760,5761,11467,6165,6164,6852,12365,14047,5762,5763,5764,5765,30007=>6166,6167,11664,11663,30013=>6521,11982,11980,11981,30023=>12366,12367,30026=>19705,6856,6854,19704,6855,6853,30036=>7254,30041=>7258,7257,12812,7256,7255,30047=>12813,30050=>7761,13404,13403,7759,7760,19706,30058=>8202,8201,14049,30062=>19707,14048,7762,30070=>8617,14700,8618,14699,30077=>15347,15933,9422,16527,30084=>17007,30086=>10430,10429,30090=>10736,5766,11983,30094=>19711,7763,15348,9046,10947,30100=>11665,11666,30104=>11984,6523,6524,30109=>6522,19713,30114=>6860,6861,6858,6859,30119=>12368,30122=>12369,6857,30128=>12814,30130=>7262,7263,19714,7766,12820,30136=>7268,7266,12821,12816,7265,7264,7259,12819,12818,12815,7267,30148=>12817,7260,30151=>7261,30154=>7767,13408,13409,7768,13405,13407,13411,13410,13406,30164=>7764,7765,30167=>14057,8207,8206,14051,8204,30173=>14054,8208,14055,8209,14052,8203,8205,14056,30182=>14053,14050,30189=>14713,30191=>14702,8620,8623,8622,8627,8626,14714,14712,14705,14709,14708,8624,14711,14707,14715,14706,8625,8619,8621,19715,14704,30216=>15350,9050,15354,9049,15351,9048,30223=>14703,14710,15353,30227=>9051,15355,15352,15349,30233=>15936,15940,15942,15938,15937,15935,9425,9423,9428,9429,15939,9426,15934,9427,9047,15941,9424,30252=>19716,16529,30255=>16528,16536,16530,16535,16532,9766,16534,30264=>9767,30266=>9768,30268=>16533,16531,30274=>10041,17008,30278=>10040,17011,17009,17010,30284=>10042,30287=>19718,17440,19717,10268,17441,30294=>10266,17442,10267,17439,17443,30300=>17437,30303=>10431,17797,10432,10566,30308=>17438,10567,30313=>10659,18337,30316=>10738,18515,10737,19719,18662,10823,10824,30325=>18946,10948,30328=>6862,12370,30331=>8210,8211,5767,5913,11468,30337=>11667,6168,30340=>6525,30342=>6863,6864,6865,13413,12822,7269,30350=>7769,13412,19722,30354=>14059,8213,30357=>14058,8212,30361=>14716,9430,15946,15943,15944,15945,30369=>19727,30372=>17012,19728,17444,30378=>18104,18103,30381=>18516,5768,11985,7270,30388=>8214,14717,30391=>19729,15356,30394=>9431,16537,30397=>17445,18105,5769,30402=>6526,6868,12371,6869,6867,30408=>6866,12823,7271,30412=>19730,7272,7273,30418=>7771,13414,7770,30426=>14060,7772,8215,14718,8628,8629,30433=>9052,30435=>9053,9432,9770,16538,9769,30441=>17013,10043,30444=>17446,18106,5770,6169,11988,11987,6527,11986,6528,11989,30455=>12377,6872,6871,12379,12378,6876,30462=>6875,30465=>6870,30467=>12373,12374,12375,30471=>6877,12372,6873,12376,6874,30480=>12826,12830,12828,12827,30485=>12831,30489=>12832,12833,12825,30493=>12824,19736,7275,7276,30498=>12834,12829,30501=>13423,19737,12835,7277,7274,30509=>13417,30511=>13416,30513=>13418,13419,13421,13420,13425,7776,7773,7777,13415,7778,13424,7775,13422,7774,30528=>19738,30532=>14063,14065,14061,14062,30538=>14066,14068,14069,14064,14067,8216,30546=>14722,30548=>14727,14719,14723,30552=>19741,14728,14724,8630,8638,30558=>8633,14720,14721,9057,8641,8634,30565=>8639,8632,14726,8640,14725,8636,8631,8637,14729,15361,15363,30585=>8635,30588=>15358,9055,15364,9056,15362,15357,15360,15365,9054,15359,30599=>9434,15950,15949,30603=>9437,9435,15947,9433,15948,30609=>9436,30613=>16546,30615=>16548,30617=>16547,16539,16543,16542,16540,9772,9773,9771,16541,16544,16545,30629=>9774,30631=>10048,17021,30634=>10045,17015,10047,10049,30639=>19743,10046,17020,17016,10044,17019,17014,17018,17017,30650=>17448,10271,10272,10269,30655=>10270,30658=>17447,30660=>17800,19445,30663=>10433,30665=>17798,17799,30668=>18107,18110,18108,18109,18338,30675=>10660,18663,18765,30679=>10825,18833,18834,10871,5771,6878,30686=>14070,30688=>14730,30690=>5772,6170,30693=>6529,19115,12380,12381,7278,30700=>14071,8217,8642,10050,17022,17801,18111,5773,19747,30711=>11995,11990,11992,11994,11993,11991,6530,30722=>6879,12390,30725=>12385,12382,30729=>12389,30732=>6881,6882,12388,12387,12386,12383,12384,12391,6880,30749=>7282,30751=>7288,7287,12844,12838,12836,30757=>7285,13432,7280,12841,12845,12847,12843,12837,7286,12842,12840,7279,12848,7289,12846,7283,12839,30775=>7284,7281,30780=>19012,30787=>7780,30789=>13433,30792=>13426,13428,13430,30796=>13431,13429,7781,30800=>13434,30802=>13427,30812=>14075,8218,14083,30816=>14072,30818=>14084,30820=>14073,14074,30824=>14082,14081,14078,7779,8219,14076,14079,8220,14080,14077,30841=>14741,30843=>14745,8649,30846=>15371,8652,14743,18956,30851=>14740,14735,14737,14738,14731,30857=>8648,30860=>8647,30862=>8643,14734,30865=>8650,30867=>8651,14733,14736,14744,8645,8646,14742,14732,30878=>15373,9059,15375,14739,15377,9063,15378,15374,30887=>9060,15370,9062,15367,15372,15376,15369,30895=>19752,8644,19760,15366,9061,15368,30906=>9440,15952,9444,30910=>9442,30913=>9058,30915=>15959,15960,9439,30919=>19753,15958,15961,9441,9438,15954,15951,15956,15953,9445,15955,30931=>19754,15957,9443,30935=>19758,30938=>9776,16555,30941=>16549,16553,16559,16560,16556,16557,16554,30949=>16551,30951=>9778,9775,16550,16552,30956=>9777,16558,30959=>10054,30961=>19176,17028,17023,10053,30967=>10051,30969=>17030,10052,17026,17027,17024,17031,17449,30977=>10055,17025,30980=>17032,17029,30985=>17453,30988=>17450,30990=>10273,30992=>17454,17456,17455,17451,17452,30999=>17806,31001=>10434,31003=>17803,17805,17802,17807,31009=>17804,31011=>18113,18116,18112,10568,18114,18115,18117,10569,10571,10570,18339,19756,18341,31025=>18340,31028=>19759,18517,31032=>18766,18835,5774,31036=>19774,11668,6531,11997,6532,6533,11996,31044=>12396,12395,6883,6886,6885,6884,12392,12394,12393,31055=>12851,7291,12855,12854,12853,12849,7290,7294,7297,31066=>7298,12850,12852,7296,7295,7293,7292,13441,31075=>13439,13435,7782,31079=>13436,7783,13437,13438,13440,31085=>7784,31088=>14088,19352,14087,14086,14085,31097=>14749,8653,31100=>14746,14748,31103=>8654,19770,8655,14747,31110=>19767,31112=>15387,31114=>15380,15381,31117=>9066,9064,9065,15389,31122=>15388,15385,15384,15383,15382,15386,15379,31130=>15962,15967,15965,19772,31136=>15964,15963,15966,31140=>16561,31142=>9779,10056,17034,19775,10057,17033,17458,17457,10274,31152=>17808,10435,18118,10739,18518,31158=>18768,18767,11374,6887,6888,13442,31165=>8657,5775,6173,6172,6171,31173=>11998,19779,31176=>6535,6534,31179=>6891,19561,12398,12401,12399,31185=>6889,6890,31188=>19781,12397,12400,31192=>7305,31196=>12862,12864,12863,7302,12858,31203=>7300,7299,31206=>7303,7301,31209=>7304,12861,12856,12857,12860,12859,31222=>13445,13446,13444,31226=>13443,7785,31232=>8225,31234=>14089,14091,14093,8224,31240=>8222,31242=>14090,8223,14092,8221,31248=>14759,14750,14753,14757,8661,14755,31255=>14754,14751,14752,8659,14758,8658,31262=>8663,8662,8660,31266=>14756,31270=>15395,31272=>15394,31275=>15390,31278=>9067,15393,15392,9068,31287=>9450,31289=>15969,31291=>9451,9447,9449,31295=>9446,9448,31300=>16562,31302=>9782,16564,16563,31306=>15391,9784,9783,9780,9781,31316=>17039,31318=>17037,10058,17038,31322=>17040,17036,17035,31327=>17459,10277,10275,10276,31335=>17809,17810,10437,31339=>10436,18120,18121,18119,31344=>18519,18520,31348=>5776,11469,6174,31352=>11999,6537,6536,12000,31358=>12403,6892,12402,6893,31364=>7306,12867,12865,12871,7307,12866,12870,12868,12869,31375=>13447,13449,31378=>7786,31380=>13448,7787,8228,8227,8226,14094,31390=>14762,8664,8665,31394=>14761,14760,31400=>15396,9070,9069,15397,15398,31406=>9453,9452,31409=>16568,15970,15972,15971,16567,16565,16569,16566,31418=>9785,31422=>17041,10059,17042,17043,31428=>10278,10279,31431=>10572,31434=>10787,5777,31441=>12404,31448=>12872,7308,31455=>7938,7937,31459=>8230,14096,8229,14095,31467=>14763,31469=>9071,15399,9072,31478=>10573,18122,31481=>5914,6538,12001,31485=>6895,31487=>6894,12405,12406,31492=>12874,12876,7309,31496=>12878,12881,12879,31502=>12880,12877,12873,7310,12882,12875,31512=>13458,7793,13467,7790,31517=>13460,7794,31520=>7788,31522=>13455,13468,13456,13453,7792,31528=>7789,31530=>13459,13462,7791,13463,7795,13464,13454,13461,13465,13457,13452,13450,31544=>13466,31547=>14098,31552=>14103,31556=>14099,14105,8233,13451,14100,8231,14097,8238,14101,8237,14102,8239,8234,8240,8235,31572=>8236,31574=>8232,31576=>14104,31584=>8668,14774,31587=>14777,14765,14770,14764,8670,31593=>14768,31597=>14766,8669,31600=>14773,14772,14769,14771,14767,9076,14776,8666,14775,31618=>15415,31620=>9083,15410,31623=>9082,15400,31626=>15402,9075,15407,15406,15409,9080,15404,15403,31636=>9079,9074,15405,9077,15411,15413,31643=>15408,15401,9078,31648=>9461,9073,31652=>15414,31660=>15976,9454,31663=>15978,31665=>9455,31668=>9457,15981,31671=>15973,9081,15979,31678=>15975,31680=>8667,9460,31684=>9456,31686=>9458,9459,31689=>9788,15980,15974,9462,31694=>15977,31700=>16579,16574,31704=>16584,9786,16576,9790,16582,16573,16570,16585,10065,9791,16581,16571,9789,16575,9793,16572,16577,9792,16580,16583,31728=>17061,17062,17046,17053,17051,31735=>10063,17058,16578,31739=>17049,31741=>17059,10062,17048,17047,17057,17054,17056,31749=>17044,17060,10060,31753=>17055,17064,17052,10064,10061,17050,17045,17063,9787,31765=>19083,31769=>17462,31772=>17460,17466,10283,17464,17463,10285,17469,10284,31781=>17470,17467,10281,17468,17461,10282,10280,17814,17465,31792=>17471,31795=>17811,31799=>10442,10440,17813,31803=>17815,17812,10441,10438,10439,10443,31811=>10575,31813=>18127,31815=>18126,18124,18123,18125,31820=>10574,10576,31824=>10661,31827=>18343,18342,31831=>18521,31833=>18523,18525,18524,18522,31839=>10741,10740,31843=>10789,10788,10790,18665,18664,31849=>18836,18769,18837,10857,31854=>10858,18885,31858=>10895,5915,31861=>12002,31864=>12408,12409,12407,31869=>6896,31871=>12410,12411,12412,31876=>12883,12889,31880=>12887,7311,12885,31884=>12886,12888,31889=>12884,7796,31892=>13469,7798,13471,7797,13470,31902=>14107,8241,31905=>14109,14106,13472,31909=>8242,31911=>18961,14108,31919=>14780,31921=>8671,14778,8672,14779,8673,31929=>9084,15419,15416,15418,9085,9086,15417,31941=>15982,31944=>15983,31946=>9463,15985,15984,31950=>5214,31952=>16589,16590,16586,31956=>16587,9794,9795,16588,31961=>10071,31964=>10067,10072,10068,10070,10066,31970=>10069,31975=>10286,17065,31978=>17817,31980=>17816,31982=>18128,10577,10578,18527,18344,31988=>18526,31990=>18838,18906,5916,31995=>6175,31997=>12003,6539,32000=>6899,12415,6897,12413,6902,6898,6903,6901,12414,6900,7315,7314,12900,7323,12893,12899,7319,12892,12898,12896,7318,7320,12895,7313,12894,7324,7321,7325,7322,12891,12890,12897,7316,7312,7317,32040=>13487,13480,32043=>8247,13479,32046=>7802,7809,7806,7812,7811,7807,32053=>13473,13476,32056=>13475,7803,13477,13486,7804,13474,13483,13484,7805,13481,7810,7800,7808,13478,7799,13482,32074=>13485,32078=>14126,14117,8244,14124,14121,14113,14122,8246,14114,32088=>14110,32091=>8679,14119,32094=>8243,14125,32097=>8250,8252,14112,32102=>8251,14115,8245,14123,14116,14120,32109=>14118,8248,14111,8253,7801,8249,8254,32121=>8675,14787,14789,14791,14795,32127=>14785,14783,8677,32131=>14790,14794,14786,14782,32136=>14781,32140=>14792,14784,14788,8678,32145=>8676,14796,8674,14793,32150=>15436,32156=>9089,15428,9476,15438,9092,15442,9098,15423,32166=>15439,15420,32169=>15441,15424,32172=>9105,9102,15440,15434,9088,9096,9095,32180=>9094,9100,32183=>15421,9101,15435,9097,9087,15437,9090,9091,9099,15426,15425,15422,32196=>15430,15427,15431,9104,32201=>15443,9093,15432,15433,32206=>15429,32210=>9103,32215=>15990,9468,9477,9473,15987,32221=>9470,9474,15999,9464,15991,32227=>9472,32230=>15994,15989,9471,9475,15988,32236=>9469,32238=>15998,9466,15997,15996,9478,15750,9465,32246=>15995,15986,32249=>9479,15993,9467,32259=>15992,32264=>9798,9803,9796,16603,16594,16606,16598,16604,9804,9797,16591,16597,16607,16600,16605,16593,32282=>16601,9799,16599,9802,9801,16595,16596,16592,16602,9800,16609,16608,32297=>17076,17072,10079,32301=>17066,10073,10089,17078,10081,10077,17069,10084,10087,17080,10076,17071,10085,17082,17079,17067,10080,10074,10088,17074,10083,17068,10078,17081,10082,10075,17075,10086,17073,32332=>17077,32336=>17473,17479,10292,17482,10287,10288,17474,17481,17476,10293,10290,32348=>17472,32350=>10289,17478,17480,10291,17477,17475,32360=>17827,10447,10448,10444,32365=>10445,32367=>17823,17821,32370=>17825,10450,17826,17819,17818,17822,17820,10446,17824,18129,10581,10580,18130,32384=>18132,18131,10582,32390=>18349,18346,18347,32394=>18345,18348,10663,18350,32399=>10662,32401=>18528,32403=>10791,10793,18666,10792,18770,18840,18842,18839,18841,10877,32566=>5917,32568=>6904,12764,7326,32573=>7813,14127,14128,32579=>16610,10090,17083,32584=>10294,32586=>17829,17828,10583,18351,32591=>18529,10826,11470,32596=>6540,6176,32600=>12416,32603=>12906,12901,12905,12903,7327,12904,12902,32611=>13488,32613=>14129,14130,14799,14800,8681,8682,14798,14801,14797,8680,32624=>9106,32626=>8683,15444,32629=>9480,16000,9481,32633=>9805,16613,16611,16612,17086,17085,17084,32643=>17830,32645=>10449,17831,18530,10827,18771,5918,6542,6541,12418,6905,19538,32657=>12417,12908,32660=>7328,13489,12907,32666=>7815,13492,13490,13491,7814,32672=>14132,14133,14131,32676=>8686,14803,14802,14804,8685,8684,32684=>16001,16003,32687=>9482,16002,16614,9806,17484,32693=>17483,10451,17832,10453,10452,18133,18352,10664,5919,12419,6906,12911,7330,12910,12909,32709=>7329,32711=>13498,32713=>13500,13493,13494,7816,13495,7817,13499,13496,13497,7818,32724=>8256,8257,32727=>14134,32731=>14805,14806,32734=>15448,9109,9107,9108,15445,15446,32741=>15447,16008,32744=>16009,9483,16006,16005,16007,16004,9809,16615,9807,9808,17088,10091,17087,17340,32759=>17485,17486,10295,32763=>10296,10092,17833,17834,18134,10584,5920,32771=>5921,6907,6543,7331,12420,32779=>8258,5922,6909,12421,12422,6908,6910,5923,32788=>12423,7333,12912,7335,7332,7334,32795=>13503,7819,32798=>13502,13501,32801=>14807,32804=>15449,32806=>9484,32808=>9810,16617,16616,32812=>17089,32816=>18353,32819=>5924,11669,12004,6911,12424,32825=>12914,32829=>7336,12913,7337,32835=>13505,32838=>7821,13504,13506,32842=>7820,32847=>14136,14137,14135,8259,32854=>8687,32856=>8688,32858=>9111,32860=>15451,15450,9110,32868=>16010,32871=>16011,32876=>16618,32879=>10096,10095,10093,10094,10097,32885=>17487,10298,10297,17835,18135,32893=>10743,10742,5925,32898=>12713,32900=>8690,8260,8689,9112,32905=>5926,11375,5927,5928,32911=>12005,11672,32914=>11673,6178,32917=>11670,6177,32920=>6180,11671,6182,6181,11674,6179,32929=>6548,6546,12007,32933=>6545,32937=>6550,6552,6549,32941=>12010,12006,6553,32945=>6547,6183,32948=>6551,12009,32952=>12008,32954=>6544,32962=>12430,6915,6916,12432,32967=>12426,12429,12438,12436,32972=>6917,12442,6920,12439,12431,12428,32980=>14139,12437,6912,12440,12425,12434,6914,6919,12435,6923,6921,32992=>12427,6918,32995=>12433,6922,6913,12441,33005=>7342,33007=>7351,7340,7338,12916,7346,7343,12918,33016=>7345,12917,12915,12920,7350,7348,14138,33024=>12921,12919,7339,33029=>7341,7344,33032=>7347,33034=>7349,33045=>13516,7823,33048=>13507,13509,33051=>13510,33053=>13518,13514,13512,33057=>13515,13519,7824,7828,13508,33063=>13517,33065=>7826,33067=>7825,13513,13511,33071=>7822,7827,33081=>8266,14147,33085=>14145,8268,33091=>14140,14821,33094=>8267,14144,33098=>14141,8263,8269,14146,8265,14143,9113,8264,14142,8270,8262,8261,33115=>14813,14811,33118=>14817,33120=>14809,14822,14814,33124=>14808,8694,8700,14819,33129=>14812,33131=>8697,33134=>8695,14820,8692,8691,14815,8696,8271,33142=>14818,14810,8693,8698,8699,33151=>9118,9114,33154=>9119,15454,33158=>15453,15455,9116,15452,9117,15458,15457,15456,33167=>9115,33173=>16015,33175=>16018,9490,16017,9489,9485,9486,9487,16014,16013,9488,33186=>16016,16012,33190=>16620,16630,9813,9812,33195=>16624,16626,33198=>16621,33200=>16625,16619,16628,9811,16627,16623,33207=>16629,33209=>16622,10100,17090,17096,10104,10106,10103,10102,33218=>10101,10099,17091,17094,10098,17095,33225=>10105,17093,33228=>17092,10299,33231=>10300,17490,17488,17489,33237=>17837,33239=>17836,10454,18137,10585,18136,33245=>18354,18531,10744,18843,18844,10794,5929,33253=>6554,14148,9120,10107,17097,5930,33260=>7353,7352,14149,19723,33266=>16631,5931,6924,33271=>14150,14151,14152,9121,9814,5932,33278=>6555,12443,7354,12922,7829,33284=>14153,8701,33287=>9122,9815,10108,10301,18138,5933,6556,33296=>7355,13520,8272,33300=>9123,15459,16019,33307=>5934,8273,14823,9124,5935,12011,12444,6925,33317=>12924,19523,33320=>7358,33322=>7356,7357,7359,33327=>12923,33330=>13525,13522,13524,7830,7832,7831,13521,7833,13523,33340=>14154,14155,33343=>14156,14826,33346=>14827,33348=>14825,14828,33351=>8702,33353=>14824,33355=>9125,33358=>16024,16020,16023,16025,16022,16021,33365=>16632,16633,16634,9816,9817,17099,17098,17100,33374=>17492,17491,33377=>17839,33379=>17840,17838,33382=>10586,33384=>18139,18140,33387=>18532,18667,18772,5936,6184,33393=>10109,5937,33396=>13526,14157,33399=>10834,11471,33404=>11472,11474,5938,11475,11473,33411=>11682,11683,11677,33415=>19294,33418=>11681,6186,33421=>6187,11678,11676,11675,11679,6185,11680,12445,33432=>12016,6559,12015,12017,33437=>6558,12022,6562,12012,12026,12032,6569,12029,6566,33447=>12019,12025,12027,33451=>12014,6565,6560,12020,6567,6570,6564,33459=>6557,12024,12018,12031,6572,6568,6563,12023,7360,12021,6561,6571,33472=>12013,33474=>12028,12030,33489=>6942,6936,6944,6941,12452,12455,6937,33497=>12446,33499=>6930,6940,33502=>6943,6945,12467,12458,33507=>6929,12466,6933,6931,6926,12450,33514=>12465,12454,12457,12470,19010,6946,12464,6938,12459,12469,12456,12460,12463,33529=>12448,12468,12462,19289,33534=>12447,33536=>12451,6939,6934,6927,6932,6928,6947,12449,12941,6935,33548=>12461,12090,33558=>12944,7374,33561=>12928,33563=>12939,12935,33566=>12954,33568=>12946,33570=>12936,33572=>12945,12930,12934,12957,7377,12949,12940,7361,12955,12926,33583=>12948,33585=>7376,7371,12925,7369,7368,7373,12947,7365,7372,12453,14158,12942,33599=>12932,7375,12933,12937,7378,12927,12951,33607=>12950,12958,7367,7364,12956,12952,12943,12938,7370,7366,12929,7362,12953,7363,33622=>12931,33635=>19489,33651=>13532,13534,13539,13559,7847,7837,33658=>13531,7848,7849,13542,13549,13555,33665=>13536,33667=>13543,33670=>7850,13557,13552,7845,7843,13548,13544,13530,7834,13535,13527,33682=>7842,7844,13540,13537,7839,13553,7836,13538,13560,13546,33693=>13545,7835,33696=>7846,33698=>7838,13528,13533,13550,13556,7851,13529,13541,13547,7841,33710=>13558,13551,13554,33721=>19679,33725=>7840,33727=>14174,14162,8281,14191,14199,14202,8279,14170,14195,14171,14185,8292,14181,8289,19071,14182,14159,33745=>14196,33748=>8298,14193,14183,14204,14178,14860,33755=>14207,8296,14176,14188,8299,8278,14180,14205,14173,14166,14177,33767=>14165,14163,8274,14197,14172,14200,33774=>14201,8282,8287,8283,8291,14192,8284,14184,14168,33784=>8276,14160,14194,14203,14167,8290,14208,14179,33793=>14175,33795=>8275,8295,33798=>14190,8297,33801=>14186,8286,8280,8288,8277,8294,14187,14169,14189,14164,14198,33814=>19041,33819=>14206,33827=>14161,19364,33833=>14859,33835=>14881,8656,14864,19555,14862,14841,8706,14857,14877,14853,8714,14876,14851,8293,14867,14852,14874,8713,8705,33855=>14830,14838,33858=>14863,14855,14880,14858,8719,14875,33865=>8710,33867=>14861,14869,14842,14868,33872=>14885,14837,14870,33876=>14883,33878=>14831,8285,33881=>14845,14844,8712,33885=>14848,14850,14865,14882,8715,19732,8716,33893=>14836,8708,14840,14878,8717,33899=>8709,8711,8718,14884,14871,14866,33907=>14847,14846,8707,14832,8704,14856,14833,14854,33917=>14843,14879,33922=>8703,33926=>14839,33933=>14835,14873,14834,9138,15499,33940=>15482,33943=>15460,15490,9130,15475,15485,9133,15478,9131,15463,15493,15462,15481,33956=>15461,33959=>15479,15488,15486,15474,15469,15467,33966=>15468,15487,15498,15476,9132,33972=>15471,33974=>15491,33976=>9135,15470,15464,15480,9139,33983=>9127,9136,15472,15466,33988=>9129,14872,9128,15483,33993=>9126,9141,9134,15484,15473,15465,15492,15477,9140,15496,9137,15495,34006=>15489,15494,34011=>15497,34023=>16065,16066,16053,16052,16048,9502,34030=>9494,16068,16067,14829,16045,16049,16043,34038=>16062,16047,34041=>16069,16040,16038,16050,16060,16055,9504,16029,34050=>16059,34053=>19221,9505,14849,16041,16032,16035,16073,16042,16033,16031,16028,34065=>9498,16051,9497,9501,16046,16054,9491,16070,16074,9493,34076=>16037,16057,16061,16034,16071,9500,34083=>9499,16026,9503,16064,16036,16056,16030,16044,16039,9495,9496,16058,16075,16072,16063,34099=>19550,34107=>16027,34109=>9492,16651,34112=>16642,16645,19084,9823,16647,16636,16643,16649,9820,9824,9818,34124=>19001,16638,16654,34129=>16648,34131=>16639,16663,16657,16635,17119,16641,9819,34139=>16652,34141=>16662,9827,34144=>16659,16640,16646,16650,16644,16664,16661,16658,9821,9822,9826,16637,16665,9825,16655,34161=>16653,34165=>16656,17132,17113,17118,17131,17117,17109,17114,34174=>10112,34176=>17102,17126,17128,17101,10111,17130,17122,10118,17129,17115,10120,17107,16660,17123,17120,17103,17134,10114,34196=>10115,17105,17121,34200=>17133,17124,17111,10117,10113,17125,17112,17135,17106,17116,17127,17108,17110,34214=>10310,17104,10119,10303,10110,34223=>10116,10307,17508,34227=>17498,17493,17499,17509,17513,17512,10309,10308,34237=>17500,17514,17503,17495,34242=>17497,17496,17502,17507,17494,17501,17506,10306,34251=>17504,34253=>10304,17505,10302,10305,17856,17510,34261=>10458,34263=>17848,17852,17844,17847,34268=>17855,10456,17860,17853,34273=>17845,17861,17854,10459,10460,17858,34280=>17846,10455,10457,17841,17849,17843,34287=>17859,17857,17842,17850,34294=>18147,10461,17851,10588,10590,10587,34301=>18152,18144,18142,18146,18143,34308=>18148,18150,10591,10593,34313=>18149,10594,10592,18151,19086,34321=>10589,34327=>10665,18355,18361,10667,18145,18360,34334=>18367,18358,18365,18364,18141,18359,17511,18368,18357,18362,34345=>18366,18356,34348=>18536,10666,18363,34353=>18672,18537,18535,18533,18534,18538,34360=>10795,18670,18668,18673,18671,34366=>18674,10796,18669,34371=>18773,34374=>18845,18846,18847,34379=>18941,18931,11476,6573,34384=>6948,34386=>12960,12959,7379,7852,13562,34393=>13561,34395=>8300,8721,34398=>8720,8722,34401=>15500,16076,16666,16668,16667,34407=>10121,17136,17515,18907,5939,34413=>12035,12036,12034,12033,6574,34419=>12474,12472,34423=>12471,34425=>6949,6951,6950,12473,34437=>12972,12969,12967,34442=>7380,12970,7385,12964,12979,34448=>12981,12965,34451=>7382,12982,12977,12963,12968,12978,12974,12971,34460=>7387,12980,12966,34465=>12975,12961,7386,7383,12973,34471=>12976,12962,7384,7381,34479=>7862,13569,7861,34483=>13572,13575,7858,7856,13564,13573,13571,13568,13576,13577,13579,13580,13563,7855,13566,13565,13578,7857,13567,7859,7854,13570,7863,34507=>7860,13574,34512=>8307,14223,34515=>14212,8304,34518=>14891,14221,14209,8302,14214,8305,14218,14216,8308,8301,34530=>14210,14213,8306,34534=>14211,34536=>14222,14220,14215,14217,14219,8303,34549=>14892,14898,14888,14894,8723,14890,8729,34558=>8728,34560=>8727,14897,8730,8731,14887,14900,8732,8726,8725,14896,8733,14886,14889,14899,14895,34577=>15532,15521,8724,34584=>9148,15509,15530,15510,9143,34590=>15507,34592=>15516,15508,9145,15502,15529,9146,15526,15527,15503,9151,15518,34604=>15512,15519,15506,34608=>15531,15523,15517,15501,9147,15524,34615=>9150,15528,34618=>15522,9144,15520,34622=>15514,9142,15505,15513,15525,15511,34630=>15515,34636=>9515,14893,16094,16103,16093,16089,16086,9516,16084,9149,16077,9514,16083,9513,16088,16085,16101,16096,16090,16095,9509,16087,16106,16078,16079,16102,9510,16107,9512,16108,16092,15504,16098,16091,16100,16097,34675=>16082,9507,16105,9508,16080,9511,16678,16099,16104,34685=>19055,34689=>16675,9506,9828,16685,16681,34695=>16679,16674,16689,34701=>9832,34703=>16670,16682,16683,16673,16672,16686,34710=>16676,16671,16677,34714=>16688,16669,16687,16684,9830,9829,34722=>9831,16680,17532,34730=>17138,10127,17142,17139,17146,17152,17141,34738=>17161,10124,17155,17144,17156,17151,17158,17143,10129,10128,17145,17159,17137,17157,10122,34754=>17149,17148,17153,17140,10126,34760=>10130,17147,17154,10131,17150,34769=>10123,10125,17528,17526,34775=>17533,17530,17534,34779=>17519,17527,17538,17160,17523,10314,16081,17518,17531,17525,17522,17517,17516,17537,34794=>17521,17520,10312,17529,34799=>10311,34802=>10313,17524,17536,34806=>17865,17866,34809=>10465,17863,10462,17871,34814=>10466,17873,17862,17535,17875,17864,34821=>10463,17870,34824=>17872,17867,17874,17869,17868,10464,34832=>18154,18155,34835=>18157,10595,10596,18158,18156,34841=>18153,34843=>18371,18374,18370,34847=>10671,18372,10670,10669,10668,18373,18543,18541,34856=>18540,18369,18542,18375,18539,34862=>18677,18643,18675,10797,18676,18678,34869=>18776,10828,18775,18774,10829,34875=>10859,18886,18909,18908,18910,5940,12475,34883=>12983,12984,34888=>14224,34890=>18376,18777,5941,6952,12476,34898=>13581,7864,34901=>14226,14225,8309,34905=>8734,16109,9517,34909=>9518,34913=>9833,10830,5942,34919=>12477,6576,12479,12478,6953,34925=>12985,34927=>12992,7388,12990,12988,34932=>12995,12986,12987,7389,34937=>7393,34940=>12996,7392,12994,12991,12989,7390,7391,12993,19763,34952=>7866,13582,34955=>7871,13598,7870,13600,34961=>13588,7868,13599,34965=>13583,7869,13595,13591,13593,13587,13594,34974=>7865,13590,34977=>13589,13585,34980=>13596,34983=>13592,13584,34986=>13586,7867,13597,34993=>8312,14237,34998=>14233,14235,14230,14229,14227,35004=>14234,14236,14232,35008=>14231,8310,8311,35017=>14239,8742,14902,14908,14903,14904,18958,14909,35026=>8744,35028=>8736,8743,14901,14228,8739,8737,14907,14906,8738,8740,14905,8735,35041=>8741,35047=>15534,9158,35051=>15545,15544,35054=>15539,9160,15543,15535,15536,9152,9154,35062=>15541,15533,9156,9155,15537,15542,15540,9157,15538,35072=>19768,14238,9153,35077=>16110,16117,9520,35081=>16121,9524,16113,16111,35086=>16120,35088=>9519,16119,9521,9522,16112,9523,16118,16114,16115,16116,9159,35102=>16690,16702,35105=>9838,16697,16699,35109=>9836,16691,16695,35113=>16698,9834,9837,16701,16693,16694,16700,16692,16696,9835,17163,35125=>17162,10133,17168,10135,35131=>10132,17164,10136,17165,35137=>17166,17169,35140=>10134,35142=>17543,35145=>17546,35147=>17540,17542,35151=>17541,17544,17545,17167,17539,35158=>10469,17879,17882,17884,17877,17878,17881,17883,10470,10468,10467,17880,17876,18159,10597,35174=>18160,35177=>18378,10672,18380,10673,18377,18379,10746,35185=>18544,10745,18681,18680,35190=>18679,35193=>18848,18849,18851,18850,35198=>11477,5943,35201=>6954,13601,8313,35205=>14910,10315,35208=>17885,35211=>6188,35215=>7873,35219=>7872,35221=>14240,8314,14242,14241,35227=>14911,8745,15546,15549,15548,35233=>15547,16122,16124,16123,35238=>9840,35242=>9839,35244=>10137,17170,17172,17171,35250=>10316,35254=>17887,17886,35257=>18161,10598,35261=>10674,18546,18545,10860,35282=>6189,12480,6955,13604,13602,35289=>13603,14244,14245,14918,14243,35295=>14912,14916,14915,14917,8746,14914,14913,14919,35304=>15552,15550,35307=>15551,16127,16125,35312=>16126,16703,17173,17174,10317,35318=>17888,18162,10599,35322=>18381,18547,10747,35326=>18682,18852,6190,35330=>6957,6958,12481,35335=>12482,6956,35338=>7399,35340=>7397,35342=>7396,7403,7395,7404,12997,7401,35349=>7398,7402,7400,7394,35355=>7881,35357=>7875,13608,7880,35362=>7882,7876,35365=>7877,35367=>13606,35370=>7874,35372=>13607,7879,35376=>13605,7878,35380=>8325,35382=>8327,35385=>14248,8326,8315,8319,35390=>8765,14924,14250,8320,35396=>14253,14254,8324,35400=>14256,35402=>14258,35404=>14259,14247,14246,14260,8323,14257,14255,35412=>8321,8317,8328,14251,14252,14249,35419=>8322,35422=>8318,35424=>8316,14923,8760,8755,35430=>8750,35432=>8766,8751,35435=>8747,8762,8759,8761,35440=>8752,8757,8748,8749,14931,14928,14920,14925,35449=>8763,14932,8764,8754,35455=>14922,35457=>14930,14926,14929,14927,8758,14921,8753,35467=>15555,9162,9165,35471=>15557,35473=>9173,15556,9167,35477=>9529,15558,35480=>9172,15554,9174,35486=>9163,35488=>8756,9166,35491=>9164,9168,9170,9161,9175,9171,35498=>9169,15553,35504=>9536,35506=>9532,35510=>9539,35512=>16130,9540,16142,16135,9525,16143,16137,9535,16138,35522=>9534,16141,9528,16139,16129,9527,16714,9533,35531=>9530,35533=>9538,35535=>16128,35537=>16132,9526,16131,16133,16134,9537,16136,16140,16144,35547=>9541,9846,16709,16715,16712,16704,16716,16705,35556=>16711,35558=>9841,9847,16717,35563=>9843,35565=>9853,9848,16719,16713,9844,16706,9854,16707,16708,9855,9852,9531,35578=>9842,16720,9856,35582=>9849,16718,9845,9850,9851,35588=>10145,17179,17188,17185,17187,35594=>10142,17180,35597=>17186,10138,17182,10146,17178,17183,17190,16710,17184,17177,10139,17176,10140,17191,10141,17189,10144,17175,35616=>10143,35618=>17181,17549,17563,17558,17560,17548,10318,35626=>17547,10321,10320,35630=>17562,17554,17551,17557,35635=>17550,35637=>17552,17561,17559,35641=>10319,17566,17564,17555,17565,17556,35648=>17892,10471,17899,35653=>18384,10478,17553,17890,10474,17891,17896,35662=>10476,10477,17889,17898,17900,17893,17895,17897,17894,17901,10473,10479,10475,35676=>10472,18165,35679=>10604,18163,35683=>18167,35685=>18168,10602,18169,18166,35690=>18164,10605,10601,18170,35695=>10603,10600,35700=>10675,35703=>10676,18383,18382,18385,18386,35709=>10677,18548,18553,10748,35714=>18550,35716=>18549,18552,18551,35720=>18686,35722=>10798,18685,18683,35726=>18684,35730=>10832,10831,18778,18779,10833,35736=>18853,18854,10872,35740=>10878,35742=>18911,18942,35895=>6191,35897=>13609,35899=>13610,14933,15559,16145,10148,35905=>10147,17567,17902,35909=>18687,6192,12998,7405,7883,14935,14934,9542,16146,9543,17192,10322,35924=>10887,6193,12037,12999,35930=>7884,35932=>13611,13612,35935=>14261,35937=>8329,8767,35940=>14937,14936,14938,35944=>15560,15561,9176,9857,9544,9858,35951=>17196,17193,17195,17194,10149,35957=>17568,17904,17903,11684,7407,7406,13000,35965=>13613,35968=>14263,14262,8330,35972=>14940,14941,14939,35977=>8769,8768,35980=>9178,9177,35983=>16147,16723,16721,16722,9859,17198,17197,35991=>17571,17570,17569,17905,35996=>18912,6194,6959,36000=>6960,7408,7409,13002,13001,13614,36007=>7890,7888,7885,7889,7887,7886,36015=>8331,14266,36018=>8774,8333,8338,14268,8340,8339,8342,14267,14264,8336,8332,8334,14265,8341,8337,8335,8776,8775,8773,8777,36039=>8771,8772,36042=>8770,36044=>14942,36047=>15563,36049=>9180,9181,9179,36053=>15562,36055=>15564,36057=>16150,16152,36060=>9553,16153,9546,16149,9545,9555,9551,9552,9548,16148,9547,16154,16151,36074=>9554,36076=>9549,9550,16725,36080=>16727,16726,36083=>16728,9860,16724,36088=>10153,17199,10150,10154,10152,10151,17572,36096=>17575,36098=>17574,36100=>17573,10323,17906,17907,10480,17908,10481,36109=>10607,36111=>10606,18387,36115=>10678,18388,18554,10749,10750,36121=>18688,36123=>10835,36196=>6195,36198=>7892,7891,14943,14944,36203=>9182,16729,9556,16730,17200,6196,36210=>12483,6962,6961,36214=>13003,7410,13004,13617,36219=>13616,36221=>13615,36224=>14270,8345,36228=>14269,8344,36233=>14271,8343,36236=>14946,14949,14947,14948,14952,14945,14953,14950,14951,9184,15565,36249=>9183,36251=>16158,16156,36255=>9557,16155,16157,36259=>9558,36261=>16731,36263=>16732,10155,36266=>17910,17912,17909,17911,18171,18389,36274=>18887,6197,6963,13005,13007,13006,36281=>13620,7894,36284=>13618,36286=>7893,13621,36289=>13622,13619,36293=>14283,8353,14275,14281,36299=>8348,8351,14274,8346,14278,14959,8350,36307=>14273,36309=>14279,14276,14282,14272,14280,8349,8352,14277,8347,36319=>8779,14955,8778,14962,14961,8785,36326=>8786,14963,8780,14960,8784,14965,14956,36334=>14958,8781,14954,14957,14964,8782,14966,36346=>8783,36348=>9185,15570,15576,15568,15577,36354=>15567,15572,15578,15575,15574,15573,36361=>15566,15571,36365=>15569,36367=>9563,9560,16167,16172,16174,16171,16164,16166,16176,16173,16168,16177,16165,16175,9561,9567,9565,16159,9566,9562,16160,16162,16161,16169,16170,36393=>9564,36395=>9559,36398=>16163,36400=>16742,9862,36403=>16733,9863,9866,16738,36408=>16735,9865,36412=>16739,16740,16734,16743,16736,16741,9864,36420=>9861,16737,36423=>17206,10158,10156,10159,10157,17205,17202,17201,36432=>17204,36435=>17203,17589,10329,17580,17579,36441=>10324,17585,17584,17576,17587,17581,10328,17578,17586,17577,10325,10327,17582,10326,17583,36457=>17588,17916,36460=>10486,17913,36463=>17917,36466=>10483,17915,10488,36470=>10485,36472=>17914,36474=>10487,17918,10482,36481=>10609,10611,36484=>18174,10610,18172,10484,18173,10608,10679,10681,18391,10680,18390,36496=>18559,10751,18558,10752,18556,18555,18560,18561,18689,36506=>18557,36509=>18783,18780,18781,18782,10861,36515=>18857,18856,18855,18888,36520=>18932,18913,10879,6198,7411,36530=>8787,36538=>9568,36541=>16744,36544=>10330,36546=>17919,36553=>18914,6199,6577,6965,6964,36559=>7414,36561=>13008,7412,13009,7413,36567=>13627,13623,36571=>7895,13626,13625,13624,7896,13628,13629,36581=>14290,14288,14292,14293,14299,36587=>14295,14297,36590=>14289,14284,36593=>14296,36596=>14298,14291,14294,14285,8355,14287,14286,8354,8356,36606=>8790,14968,14970,14969,14974,8788,36613=>14971,14967,14972,14973,8789,8791,14975,36621=>15582,15581,36624=>15579,15580,9187,9189,9186,9188,16184,16185,16180,36634=>16181,9570,9575,9569,9576,9571,16182,36643=>16183,16179,9577,9573,36649=>9572,9574,36652=>16178,36654=>16746,9868,36658=>16748,9870,16751,16747,16745,16750,9869,16749,36667=>9867,36670=>10161,10164,17208,36674=>10162,17207,10160,10163,17590,17591,17592,10331,36683=>17593,36685=>10332,10490,17922,17923,17921,17920,17924,10489,18178,18176,18177,18179,18175,18180,18393,36701=>18394,18392,10682,18562,10753,18563,18691,18690,36763=>6200,8357,36767=>8792,36771=>9190,36774=>9872,36776=>9871,36781=>10491,10579,10683,6201,7415,8793,36788=>17925,10949,36792=>19762,36799=>11686,36802=>6202,36804=>6205,6204,6203,36809=>11685,36811=>12039,36813=>12041,6578,36817=>6580,12038,12040,6579,12043,12042,12044,36832=>12487,12485,6968,12484,6973,6970,6967,36840=>6974,36842=>6969,6972,36845=>6971,12486,36848=>6966,36852=>7421,13011,13017,7418,7425,36858=>7420,13014,13016,7423,13010,13013,7419,7416,13012,7422,13015,7424,7417,36875=>13631,13634,7898,36879=>7908,7904,13632,36884=>7912,7905,7910,7900,36889=>7897,7899,7911,13633,7903,7906,7902,7907,13635,7909,7901,13630,36909=>14300,8358,14302,36913=>8360,8362,36916=>14301,8359,8363,36920=>8361,36924=>8799,14980,8807,14977,36929=>8808,8797,36932=>14978,36935=>8802,36937=>14979,8795,8794,36941=>8805,8804,8803,8801,8806,14976,8796,8798,8800,36952=>9192,9195,36955=>9199,9193,9198,9196,36960=>9191,36962=>9197,9194,36967=>16189,9580,9578,36971=>16190,36973=>9581,9579,16188,16187,36978=>9876,16186,9874,9873,16752,9582,9875,16753,9878,16754,9877,10166,17210,10165,10170,10168,10169,10334,10167,17209,16755,10333,10335,37002=>10492,10493,37005=>18181,37007=>10800,10799,6207,37012=>11482,7426,37015=>11479,11480,11478,37019=>11481,37022=>11690,11687,11692,11688,6208,6211,37029=>11689,6210,11691,37034=>6209,37039=>12047,12049,6583,12045,12048,12046,6581,6584,37048=>6582,37053=>12489,12493,12490,37057=>6977,37059=>6978,37061=>12492,37063=>12494,12496,37066=>6975,12495,37070=>6976,37076=>13642,12491,13018,13027,13025,13020,13021,13026,13028,7428,37087=>13023,13019,7427,7429,13022,13029,13024,37096=>7913,13645,13637,13643,13644,7914,37103=>13636,13638,12488,13640,13641,13639,8365,37113=>14309,16756,14310,14307,7915,8367,14306,14312,14311,8364,14315,14305,14314,14303,14313,14308,8366,37131=>14987,37133=>14982,14988,14983,14981,14984,8809,37140=>14986,37142=>14985,8810,9201,9200,15589,15592,15584,15588,9202,15587,15585,15591,15586,15583,15590,37158=>16196,9585,17594,16193,16194,16192,14304,9584,16197,16191,9583,9586,16195,16757,9879,16758,16759,37176=>17211,10171,17595,17596,37182=>17597,17927,17926,18183,37187=>18182,18396,18397,18395,18564,10754,6212,6980,6979,7432,7431,13031,13032,13030,37202=>7430,13649,37205=>13650,13646,7916,13647,37210=>13648,37215=>14318,14320,14316,14319,8368,14317,8369,37224=>14495,8813,8812,37228=>8811,37230=>14989,14990,37234=>15594,15596,9206,9203,37239=>9205,9204,15595,15593,37248=>16204,16201,16202,9590,16203,16198,16199,9587,37257=>9588,16200,9589,37261=>16763,37263=>16764,16761,16762,9880,16760,37273=>17215,17212,17214,10174,17218,10173,17216,17219,17217,17213,10172,37285=>17599,37287=>17600,17598,37290=>17602,10336,10337,17929,10495,17601,17928,10494,18186,18187,10612,18185,37303=>18184,37305=>18398,10684,37308=>18692,18785,18784,37312=>10836,10862,18786,18889,37317=>10880,6213,6585,37321=>8814,37323=>10613,6214,6981,7917,8370,10338,6586,37331=>12498,12497,13033,19341,7435,7433,7437,13035,37340=>7436,7434,37346=>13034,7920,13656,37350=>7919,7921,13661,7923,13658,13659,13651,7922,13662,37361=>13653,37363=>13654,13652,7918,37367=>13660,13655,13657,37373=>14332,37375=>14331,14329,14321,14336,14324,14334,14341,14333,8378,37385=>8374,14322,37388=>14328,8376,37391=>14327,8377,8379,14330,37396=>8371,8372,14342,14340,37401=>14339,14325,37404=>14337,37406=>8375,37411=>8373,14338,14323,14326,14335,37421=>15631,15000,37424=>14993,15012,15021,14996,8825,37430=>15009,8815,8817,8829,14994,37436=>19463,8818,8820,8830,8819,37445=>8828,15002,37448=>14991,8826,15001,8822,15019,8827,15017,15005,15015,8824,14992,15018,15013,37462=>15020,8816,37466=>8831,8821,37470=>14998,37472=>15006,15010,37475=>15014,8823,14997,14995,15007,37484=>15004,15003,37487=>15008,15011,37490=>15016,37494=>15599,37496=>9207,15609,15601,9212,9216,15618,15626,15611,9208,37506=>15615,14999,37509=>9209,15622,15627,15619,37514=>15621,15630,15623,15605,15614,37521=>9217,37523=>9213,15603,15616,9211,15610,9210,15624,15607,15600,9214,15629,37536=>15602,15620,15617,15612,15598,15597,15606,15625,9215,15628,15604,15608,9595,37554=>9603,9598,16237,16234,16210,9593,37561=>18957,37563=>9592,9599,37568=>16208,9597,16220,16206,16207,9591,16236,9601,16223,16228,16222,16782,16218,16226,16224,16211,16205,16232,9600,16233,37589=>16227,37591=>16216,16214,16209,37595=>18998,37597=>16217,16230,16213,16229,16235,37604=>9596,37606=>16225,16231,16221,16215,9594,37614=>15613,16219,9602,16212,37623=>16788,9883,16787,16784,16803,9887,37630=>16800,16792,16802,16777,16790,37636=>9889,37638=>16769,37640=>16767,16801,37643=>16799,16798,16781,16780,16770,9891,37650=>16776,16786,16797,9894,16804,37656=>10182,9896,9890,16774,37661=>16783,16766,16768,9881,9893,9886,16775,16791,16785,9892,16765,10177,16793,16796,9888,37677=>16779,9895,9885,37683=>9884,16789,16795,9882,37688=>16772,16794,37692=>16773,37696=>19332,19630,37700=>19008,37702=>16778,17225,37705=>17230,10179,10181,17236,10175,17251,17242,17231,17232,17241,37716=>10188,17240,17224,17239,17227,17252,10187,10185,17228,37726=>17247,37728=>17233,17246,19615,17248,17223,10180,37735=>17249,37738=>17237,37740=>10184,17234,37744=>10186,17243,37749=>10178,17229,17244,37753=>17238,16771,17245,17226,37758=>10183,37760=>17250,37762=>10176,17221,37765=>19703,37768=>17616,17609,10340,37772=>17604,17619,17611,17235,37777=>17621,17605,37780=>10339,17615,10341,10349,10347,17617,10348,17607,37789=>17608,17613,17618,37793=>17220,10342,17626,17623,17627,17614,17610,17624,17940,17612,37804=>10345,37806=>10344,17222,10346,17620,17622,10343,17625,17603,37815=>17606,37824=>17949,37826=>17933,10499,17947,37831=>17931,10500,37834=>17942,37836=>17938,10505,17948,17932,17935,10497,17950,19211,17943,17946,10503,10508,10506,17939,17934,37852=>10501,10502,17930,10498,37857=>10496,10504,17945,10507,37862=>17941,17951,10509,37868=>17937,37870=>17944,37872=>19573,19683,37877=>18200,18214,18202,18209,17936,18207,18190,18212,10616,18194,18211,18201,37891=>10615,37894=>18216,18203,37897=>18208,18210,18188,18213,18199,18204,18192,18196,18215,18206,18189,18193,18195,18205,37912=>10614,18198,37915=>19316,37920=>18191,37928=>18197,18402,18407,10691,18409,37934=>10685,37936=>18405,18411,10690,10686,37941=>10687,18401,18408,10689,18406,10688,18400,18404,18403,37951=>18399,18410,37954=>19625,19628,10755,18571,18574,18570,18572,18573,18567,18568,18565,37967=>18569,18566,10756,10757,37973=>18694,37975=>18696,37981=>18695,18697,37984=>10802,37986=>18693,10801,10803,37992=>18788,18789,10837,18787,37997=>18859,18858,18860,10864,18861,10863,18862,18890,18893,18892,10873,18891,38011=>19406,10883,10881,10882,10888,18934,18935,18933,18943,38263=>6587,38266=>13663,14343,16238,17952,38272=>6588,38274=>6982,7438,38278=>13664,38280=>13665,7924,38283=>8382,14345,14344,8386,8381,14346,8383,8385,8384,8380,38296=>8832,38299=>15025,15023,38302=>15024,15022,38305=>9218,38307=>9221,9223,9222,38312=>9219,9220,38315=>16240,16239,9604,16241,38320=>16242,9605,38325=>16812,16810,17258,38329=>16808,16809,9897,16805,16813,16807,16811,17254,38339=>17256,38341=>17257,10193,17253,10192,17255,10189,10190,10191,16806,38352=>10352,17630,17628,17629,10350,10353,10351,38362=>17953,17954,10510,38366=>18217,18219,18218,10617,10692,18414,18413,18412,38428=>6589,38430=>11376,38432=>11485,5944,11483,11486,11484,38440=>11694,38442=>6218,38444=>6219,11696,6216,11695,11693,6217,6215,38457=>12050,12053,6592,12052,12051,38463=>6591,6590,38466=>6594,12054,6593,38474=>12503,6984,6985,6986,12504,12500,6983,12501,38483=>12502,12499,38488=>7445,38491=>7442,13036,7443,7446,13037,38497=>7441,7439,7440,7444,38506=>7925,13668,7933,13667,38511=>13670,7929,13669,8394,7927,7930,7926,7931,7932,7928,38524=>13666,8390,14348,38528=>14352,38531=>14351,8395,8391,8392,14347,14349,14350,8387,8389,38541=>8393,8388,38545=>15028,15026,15027,8834,8835,38551=>15029,8833,9224,38555=>9226,9225,38558=>15632,38561=>15633,16244,38564=>16243,19755,38567=>9898,9899,16814,9900,38572=>17261,38574=>17259,38576=>17260,10194,38579=>17631,10511,38582=>10950,38584=>10195,6595,38587=>7447,13038,38591=>13671,7934,8396,14353,14355,8398,8397,8399,8400,14354,8838,8839,8837,9227,8836,15030,38610=>9228,16245,16815,9901,10196,17632,17636,10356,17633,10357,10355,17637,10358,17635,38625=>17955,10354,10512,38629=>18790,38632=>6596,7936,7935,38639=>8401,14357,14356,8402,38645=>15034,8843,8840,15033,8842,15031,8841,38653=>15032,38655=>15634,9229,38658=>16248,38660=>9606,16246,9607,9608,16247,9609,38667=>16816,38669=>9905,9902,9907,16818,9903,16817,9906,38678=>9904,38680=>17264,17266,38684=>10197,17265,10198,17263,17262,38690=>17639,17638,10359,17640,17960,10514,17959,17956,10513,17957,17958,38702=>18220,18221,10618,38706=>10695,38709=>18415,38712=>10693,10694,18416,38717=>10758,10759,18575,38722=>10838,18792,10840,38726=>18791,18793,10839,18863,38731=>18915,38738=>6597,38742=>8844,38744=>15635,38746=>16249,9908,9909,38750=>6598,38752=>9610,10515,6987,38758=>9910,38760=>10804,6988,13672,38764=>14358,38766=>14360,38768=>14359,38770=>15038,15035,8845,38774=>8846,15036,15037,38778=>15637,15642,9230,15636,15638,15645,15640,15644,15641,15639,15643,9231,38791=>19178,16252,38794=>16250,9612,38797=>9611,16251,9613,38804=>16821,38807=>16820,9911,16819,17267,38812=>17269,17271,17270,38816=>10199,17268,17647,10360,17645,17648,10361,38824=>17643,38826=>17646,17644,17641,10362,17642,38835=>17961,38838=>17963,17962,38841=>18222,38843=>18223,38845=>19329,38847=>18417,38849=>10761,38851=>10760,18698,18699,10841,18794,38857=>10874,38859=>6989,8403,15647,15646,16254,16253,38867=>10200,17273,17272,17651,17649,17652,17650,38876=>10516,17964,17965,17966,38881=>18418,38883=>18576,38885=>18795,38893=>6990,38896=>16822,17274,38899=>6991,38902=>9232,38904=>16823,10363,17653,10517,38909=>18224,18225,10696,18700,6992,7939,7940,13673,8404,8405,14361,8406,38922=>8850,38924=>8852,15040,15041,15039,8847,8848,8851,8849,19401,38934=>15648,9233,9234,38939=>16261,9616,16256,16255,38944=>16260,9614,38948=>9918,38950=>16257,16262,16259,16258,38955=>9615,38957=>9916,38959=>16825,9912,38962=>16826,38965=>16824,38967=>9915,9913,9917,38971=>9914,38977=>17275,38979=>17280,17276,17279,10201,38984=>17070,17278,17277,38988=>10366,10364,10367,10365,17654,17655,17656,10368,38999=>17970,10519,17968,39003=>10520,17967,17969,10518,18229,18226,39010=>18227,18228,18419,10698,39015=>10697,39017=>18578,18577,10762,19039,39023=>10805,10842,10865,18864,18916,18917,39080=>6993,14362,39084=>15042,15649,15650,9235,39089=>9236,16263,9617,39094=>10202,39096=>17657,39098=>10369,17973,10521,17972,17974,17971,18422,18230,18231,39108=>10619,39110=>18421,39113=>18420,39115=>18579,18918,39131=>6994,39135=>6995,39138=>7448,13039,39141=>13674,39143=>8407,39145=>8410,8408,14363,39149=>8412,39151=>8409,39154=>8411,39156=>8854,39158=>15043,39161=>15044,16265,39164=>8853,8855,8856,39168=>15652,39170=>15651,9237,39173=>9238,39175=>15653,16264,9240,9618,39180=>9239,39184=>9919,16266,9620,9619,16267,16270,16268,16269,9621,39194=>9924,9922,39198=>9921,16828,39201=>9923,39204=>16827,17281,39207=>16829,9920,16830,17284,17282,17283,17288,10373,17287,17290,17289,17286,17285,39221=>10203,39226=>17660,39228=>17659,10372,10370,10371,39233=>17658,39235=>17977,39237=>10522,39239=>17976,17975,10523,39243=>18236,18235,39246=>18233,39248=>18232,10621,10620,18237,18580,10763,18424,10699,18423,18234,39259=>18581,10806,39262=>10866,18865,39265=>18919,39318=>6996,13675,17291,6997,39324=>15655,15654,16831,39329=>17293,39331=>17292,19447,10374,17978,17979,10622,39339=>18920,7449,8414,8413,15045,15047,8858,15046,8857,8859,15048,39353=>15657,15659,15658,39357=>15661,39361=>9241,15660,15656,39367=>15662,39369=>16277,39371=>16280,16282,16272,16276,16273,9623,9626,9628,16274,16275,9627,16278,16281,16279,9629,39387=>9625,16271,9622,39391=>9624,39394=>9926,16837,16835,16834,39399=>16840,39401=>16839,16838,39404=>16833,9925,16832,39408=>16836,9927,39412=>17296,39414=>17300,17297,17299,17298,17295,17301,17304,17302,17303,10205,39425=>10204,17294,17305,17665,17668,17670,17669,39433=>17663,17667,17662,39437=>17664,10375,17661,39441=>17666,39444=>17992,17981,10524,39449=>10525,17980,17985,17991,17983,17990,39456=>17987,39458=>17986,17989,17984,17982,39463=>17988,39465=>18244,18242,10623,18241,18247,18245,39472=>10624,18240,18238,39476=>18239,10626,18243,10625,18246,18425,18431,39485=>18426,10703,18432,10702,18430,18429,10701,18428,10700,18427,39496=>18587,18589,18588,39500=>18585,10765,18582,18586,18591,39506=>18590,18583,18584,10764,18701,10809,39513=>18702,10807,10808,39518=>18796,10843,18894,39522=>10875,39524=>18921,10876,18922,18923,18937,18936,10891,18947,39592=>7450,39595=>15050,39597=>15049,39599=>9242,9243,15663,39603=>16283,16843,39607=>9630,9928,16841,39611=>16844,9929,39614=>17306,16842,17671,10376,17993,39622=>18250,18248,39626=>18249,39629=>18433,39631=>10704,18592,10812,10766,10810,10811,18797,10867,39640=>7451,39644=>17672,39647=>13040,39649=>8860,39651=>15664,39654=>9244,15665,39659=>16285,16284,9931,9631,9632,39665=>16288,16287,16286,39670=>16845,16848,39673=>16847,16846,9930,17310,17308,17307,39681=>17309,39683=>10377,17674,17675,10378,39688=>17673,39690=>17995,17994,17997,10526,17996,39696=>18251,18253,18252,39701=>18434,18437,18435,18436,18593,10767,39710=>18703,18704,18705,39714=>10844,10868,18924,7452,39719=>9633,9932,17676,39723=>18594,39726=>18938,13041,39729=>10892,7453,16849,39733=>17677,39735=>17998,39738=>18438,18595,7454,39742=>15666,15667,39745=>9245,9246,16290,9635,9634,16289,39752=>17311,39754=>17678,17680,17679,10381,10380,10379,39761=>10706,18439,39764=>10705,18597,18596,39768=>10845,18798,7941,15051,39775=>15670,15668,15669,39780=>16299,39782=>16294,16291,16298,39788=>16300,39791=>9637,16297,16293,39796=>16292,16296,16295,9636,39802=>16860,16855,16853,16862,16854,39808=>16850,39810=>16856,19535,39813=>16851,17320,16852,16863,39824=>16859,9933,16858,16857,39829=>16861,39834=>17312,17315,39838=>17314,39840=>17322,17317,17321,39844=>17319,17318,17316,39848=>17313,39850=>10208,10207,39853=>10209,10206,17323,39861=>17686,17689,39864=>17687,17691,39869=>17692,39871=>17684,10386,17685,39875=>17683,17690,39878=>17682,17681,10385,10383,10382,39891=>17688,18007,18013,10529,18008,39897=>18011,18015,10530,18010,39902=>18002,39904=>18001,18014,18005,39908=>18003,18012,18004,10528,10527,39914=>17999,18000,18009,39920=>18006,39927=>18256,18259,39933=>10384,39941=>18257,18263,18261,18255,18266,39947=>18254,39949=>10628,18262,39954=>18258,10627,18265,39959=>18264,39964=>18442,18441,39969=>18448,39971=>18444,18447,10708,39976=>18445,18446,39979=>18440,18443,10707,39985=>10769,18608,18603,18607,39990=>18610,18606,39993=>18602,39995=>10771,18605,18609,10770,18600,18260,18604,40004=>18601,40006=>18598,40008=>18599,10768,18709,18711,18714,18710,18715,40016=>18708,40018=>18706,40020=>10813,18712,10815,10814,18707,18713,40030=>18803,10846,18804,40034=>18802,18799,40038=>18801,18800,18866,40045=>18868,18867,40049=>18897,40051=>18896,18895,18898,40055=>10884,10885,18944,18948,40165=>7942,14364,15054,40169=>8861,15052,40173=>15053,40177=>15671,15672,9249,9247,15673,9248,16305,40185=>16308,16302,16309,16301,16303,40191=>16304,16307,40195=>9640,16312,16311,9638,16306,16310,9639,40208=>16873,40210=>9938,40212=>16868,9934,40215=>16865,16871,16874,40219=>9939,40221=>16870,16867,16875,16866,40226=>16872,9935,40229=>16864,9936,40232=>9937,16869,40237=>17341,17328,17329,17332,17330,40243=>17324,19060,40246=>17327,17337,17331,40251=>10210,40253=>17339,17336,10211,17338,17325,17334,17335,40261=>17333,40266=>17696,17698,17701,40271=>17695,40273=>10387,17703,17694,17704,40278=>17700,17702,17706,17699,17707,17697,17693,10388,40287=>17705,10389,10532,40295=>17326,18041,18032,10534,18028,10535,40303=>18037,18031,18021,10533,18034,18029,18030,40311=>18016,18023,18038,40315=>18035,40317=>18027,40319=>18039,18022,18017,18036,40324=>18019,18033,18024,18040,18020,10531,18018,18025,18026,40336=>18273,40338=>18271,40340=>18276,40342=>18288,18279,18272,18268,18281,18274,18277,18270,18284,18267,18275,18280,18282,18285,18269,40358=>18289,18290,18283,18287,18278,40364=>18464,18467,40367=>10709,40369=>18466,18471,18469,10710,18460,18450,18449,10712,18462,18463,18459,18451,40382=>18456,18286,40385=>18452,10711,18458,40389=>18457,40391=>18453,18465,40394=>18454,18615,18468,18470,18461,18455,18616,18618,18612,10772,40405=>18625,18623,10773,18622,18621,18614,18611,18617,18626,18613,18619,40417=>18724,18729,18719,18722,10816,18726,40424=>18733,18620,40427=>18720,18730,18734,18725,18718,18728,40434=>18727,18732,18731,18624,18723,18717,18721,10847,10848,18716,40445=>18815,18806,18814,18811,18812,18805,18808,18816,18810,18809,18807,40457=>18813,40459=>18869,40461=>18870,40463=>18872,18871,18874,18873,18900,18899,18925,40471=>18926,40473=>18939,10889,10893,40477=>18949,10894,40565=>7943,40569=>10629,18472,40572=>10849,10850,40575=>7944,15055,40578=>8862,16313,40582=>16877,16878,16876,17343,17342,10212,17709,17344,17708,40593=>18043,10536,10538,18042,40599=>10537,40601=>18291,18293,18292,18473,10713,40607=>10817,18817,18875,40612=>18952,7945,40615=>15674,40617=>9641,40621=>16880,16879,40624=>17345,40628=>10539,10630,18627,18945,40635=>7946,9250,40638=>9642,40640=>18044,40642=>18735,8415,40648=>17346,40652=>10869,8416,9643,10213,18736,8417,40659=>16314,9941,16881,16882,40664=>9940,40666=>17347,10217,10215,10216,10214,17710,10390,40676=>18295,18294,18297,18296,10631,40683=>18474,40685=>18476,18475,10714,18628,40690=>18737,18738,10818,18876,18901,10886,40697=>14365,16883,17348,18045,15056,40703=>17349,17712,17711,40710=>18739,10851,40713=>18877,18902,40718=>8863,16315,16316,40722=>16884,8864,40725=>10391,17713,40728=>18478,10715,18479,18477,18740,40734=>18818,40736=>8865,40738=>17352,17351,17350,17714,40744=>17718,17717,17716,17715,10392,18046,18299,10632,18298,18480,18631,18630,10774,18629,18743,18742,18741,40763=>9251,40765=>16885,10218,40768=>18047,18048,18632,18744,40774=>18819,18878,18927,18954,9252,10219,17719,18049,18481,18745,40786=>9645,40788=>17353,17720,18050,18051,18052,18304,40795=>18300,10716,18303,18302,10633,18301,10635,40803=>10634,18483,18482,10717,10718,40810=>10776,18633,10775,40814=>18748,18749,18747,18746,10853,40820=>18820,18821,18822,10852,18879,18882,18881,18880,40830=>18953,40845=>9942,40848=>10399,18305,18484,40852=>10777,18634,40856=>18955,40860=>9943,40864=>17354,40866=>18635,40868=>18903,40880=>11210,11212,64012=>11314,14598,65072=>5034,5047,65075=>5049,5051,5055,5056,5059,5060,5063,5064,5067,5068,5071,5072,5075,5076,5079,5080,5083,5084,65097=>5124,5125,5128,5129,5126,5127,5052,5037,5038,5039,65108=>5041,5042,5043,5044,65113=>5085,5086,5087,5088,5089,5090,5130,5131,5132,5148,5149,5150,5151,5152,65128=>5183,5193,5194,5195,65281=>5033,11257,5099,5184,5189,5100,11256,5053,5054,5101,5133,5025,5134,5028,5180,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267,5031,5030,5139,5141,5140,5032,5190,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299,5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315,10963,5181,10964,65343=>5122,65345=>5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5057,5045,5058,5153,65504=>5187,5188,11254,5121,11255,5185,65517=>18996,131210=>11207,131276=>11205,131352=>19386,131521=>19318,131588=>19259,131742=>19342,131744=>19017,131813=>19049,131911=>19032,131966=>19029,131968=>19031,132021=>19510,132041=>19488,132127=>19034,132231=>19043,132423=>18997,132494=>19051,132517=>19264,132531=>19056,132547=>19670,132575=>18999,132694=>19370,133411=>19503,133460=>19093,134031=>19132,134114=>19097,134143=>19047,134202=>19653,134263=>19137,134355=>19302,134450=>19534,134477=>19153,19223,134516=>19145,134773=>19435,134877=>19151,135348=>19168,135740=>19205,135759=>19185,135941=>19019,135994=>19322,136054=>19749,136078=>19396,136214=>19194,136276=>19196,136343=>19570,136598=>19113,136723=>19114,136766=>19217,136850=>19220,136888=>19250,136897=>19746,136917=>19233,136935=>19658,19105,136973=>19150,136998=>19099,137072=>19388,19307,137138=>19229,137180=>19226,137211=>19228,19397,137256=>19232,19423,137335=>19346,137374=>19693,137431=>19163,137489=>19248,137560=>19511,137603=>19053,137608=>19695,137691=>19009,137780=>19262,137803=>19700,138052=>19269,138405=>19273,138745=>19281,138780=>19735,138807=>19282,138813=>19440,138916=>19286,139114=>19338,139337=>19292,139516=>19048,139562=>19493,139635=>19293,140240=>19325,140401=>19327,140427=>19519,140433=>19537,140525=>19021,140563=>19027,140592=>19050,140628=>19246,140828=>19766,140904=>19340,140952=>19155,141236=>19351,141261=>19507,141407=>19374,141485=>19673,141505=>19381,141559=>19446,141696=>19380,142755=>19135,142861=>19390,142902=>19400,143428=>19639,143435=>19564,143486=>19417,143780=>19432,19433,143816=>19443,143863=>19429,19430,19536,143921=>19441,143923=>19052,144010=>19171,144044=>19742,144308=>19045,144358=>19465,144384=>19427,144495=>19468,144845=>19474,144896=>19025,144956=>19479,144985=>19492,145155=>19495,145197=>19073,145346=>19453,146139=>19509,146266=>19514,146585=>19057,146632=>19011,19531,146876=>19525,19527,146991=>19558,19568,147196=>19516,147328=>19092,147330=>19560,147380=>19587,147383=>19373,147397=>19000,147435=>19134,19094,147440=>19586,147513=>19585,19164,147517=>19571,147589=>19548,147596=>19402,147601=>19583,147775=>19588,19592,147780=>19581,147797=>19584,19590,19591,147807=>19688,147876=>19528,19187,147917=>19457,147938=>19657,148087=>19606,19210,148161=>19616,148323=>19197,148325=>19613,148380=>19449,148533=>19166,148570=>19618,148668=>19301,149539=>19645,149745=>19520,149760=>19530,19291,149772=>19529,149811=>19015,149824=>19419,149826=>19006,149876=>19634,149887=>19547,149890=>19357,149901=>19663,149903=>19358,149924=>19042,149929=>19239,149943=>19662,149983=>19392,150011=>19664,150034=>19750,150049=>19450,19620,19413,19659,150054=>19668,19619,19412,150137=>19689,150156=>19687,150182=>19066,150193=>19026,150517=>19199,150803=>19710,151426=>19708,151709=>19733,151933=>19734,152038=>19437,152096=>19740,152144=>19337,152339=>19444,153056=>19757,153093=>19631,153373=>19403,153458=>19122,153687=>19771,154060=>19263,155779=>19765,156125=>19593,156661=>19721,157832=>19324,157966=>19726,157969=>19725,158254=>19654,158483=>19087,158504=>19274,158545=>19521,158547=>19144,158643=>19018,158846=>19192,158849=>19224,159013=>19540,159017=>19023,19225,159136=>19466,19541,159142=>19230,159211=>19542,159301=>19235,159342=>19330,159346=>19549,159442=>19367,159604=>19551,159647=>19731,159649=>19245,159992=>19339,160038=>19777,161287=>11213,161292=>19761,162318=>19256,162387=>19359,162436=>19024,162617=>19773,164994=>19310,165364=>19442,165547=>19110,165892=>19648,165931=>19646,166244=>19744,166248=>19745,166314=>19016,166332=>19154,166372=>19007,166441=>19343,166454=>19333,166474=>19483,166555=>19117,166622=>19089,19471,166689=>19556,166699=>19764,166758=>19183,166799=>19690,166813=>19376,166888=>19622,166915=>19692,167596=>19702,167602=>19675,167641=>19699,168173=>19458,168205=>19780,168304=>19578,168348=>19500,170333=>19377,172368=>19209,194708=>19319,194726=>19366]; + protected const TABLE_CODES_TW = [5024=>12288,65292,12289,12290,65294,8231,65307,65306,65311,65281,65072,8230,8229,65104,65105,65106,183,65108,65109,65110,65111,65372,8211,65073,8212,65075,9588,65076,65103,65288,65289,65077,65078,65371,65373,65079,65080,12308,12309,65081,65082,12304,12305,65083,65084,12298,12299,65085,65086,12296,12297,65087,65088,12300,12301,65089,65090,12302,12303,65091,65092,65113,65114,65115,65116,65117,65118,8216,8217,8220,8221,12317,12318,8245,8242,65283,65286,65290,8251,167,12291,9675,9679,9651,9650,9678,9734,9733,9671,9670,9633,9632,9661,9660,12963,8453,175,65507,65343,717,65097,65098,65101,65102,65099,65100,65119,65120,65121,65291,65293,215,247,177,8730,65308,65310,65309,8806,8807,8800,8734,8786,8801,65122,65123,65124,65125,65126,65374,8745,8746,8869,8736,8735,8895,13266,13265,8747,8750,8757,8756,9792,9794,8853,8857,8593,8595,8592,8594,8598,8599,8601,8600,8741,8739,65295,65340,8725,65128,65284,65509,12306,65504,65505,65285,65312,8451,8457,65129,65130,65131,13269,13212,13213,13214,13262,13217,13198,13199,13252,176,20825,20827,20830,20829,20833,20835,21991,29929,31950,9601,9602,9603,9604,9605,9606,9607,9608,9615,9614,9613,9612,9611,9610,9609,9532,9524,9516,9508,9500,9620,9472,9474,9621,9484,9488,9492,9496,9581,9582,9584,9583,9552,9566,9578,9569,9698,9699,9701,9700,9585,9586,9587,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,12321,12322,12323,12324,12325,12326,12327,12328,12329,21313,21316,21317,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,729,713,714,711,715,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9249,8364,5495=>19968,20057,19969,19971,20035,20061,20102,20108,20154,20799,20837,20843,20960,20992,20993,21147,21269,21313,21340,21448,19977,19979,19976,19978,20011,20024,20961,20037,20040,20063,20062,20110,20129,20800,20995,21242,21315,21449,21475,22303,22763,22805,22823,22899,23376,23377,23379,23544,23567,23586,23608,23665,24029,24037,24049,24050,24051,24062,24178,24318,24331,24339,25165,19985,19984,19981,20013,20016,20025,20043,23609,20104,20113,20117,20114,20116,20130,20161,20160,20163,20166,20167,20173,20170,20171,20164,20803,20801,20839,20845,20846,20844,20887,20982,20998,20999,21000,21243,21246,21247,21270,21305,21320,21319,21317,21342,21380,21451,21450,21453,22764,22825,22827,22826,22829,23380,23569,23588,23610,23663,24052,24187,24319,24340,24341,24515,25096,25142,25163,25166,25903,25991,26007,26020,26041,26085,26352,26376,26408,27424,27490,27513,27595,27604,27611,27663,27700,28779,29226,29238,29243,29255,29273,29275,29356,29579,19993,19990,19989,19988,19992,20027,20045,20047,20046,20197,20184,20180,20181,20182,20183,20195,20196,20185,20190,20805,20804,20873,20874,20908,20985,20986,20984,21002,21152,21151,21253,21254,21271,21277,20191,21322,21321,21345,21344,21359,21358,21435,21487,21476,21491,21484,21486,21481,21480,21500,21496,21493,21483,21478,21482,21490,21489,21488,21477,21485,21499,22235,22234,22806,22830,22833,22900,22902,23381,23427,23612,24040,24039,24038,24066,24067,24179,24188,24321,24344,24343,24517,25098,25171,25172,25170,25169,26021,26086,26414,26412,26410,26411,26413,27491,27597,27665,27664,27704,27713,27712,27710,29359,29572,29577,29916,29926,29976,29983,29992,29993,30000,30001,30002,30003,30091,30333,30382,30399,30446,30683,30690,30707,31034,31166,31348,31435,19998,19999,20050,20051,20073,20121,20132,20134,20133,20223,20233,20249,20234,20245,20237,20240,20241,20239,20210,20214,20219,20208,20211,20221,20225,20235,20809,20807,20806,20808,20840,20849,20877,20912,21015,21009,21010,21006,21014,21155,21256,21281,21280,21360,21361,21513,21519,21516,21514,21520,21505,21515,21508,21521,21517,21512,21507,21518,21510,21522,22240,22238,22237,22323,22320,22312,22317,22316,22319,22313,22809,22810,22839,22840,22916,22904,22915,22909,22905,22914,22913,23383,23384,23431,23432,23429,23433,23546,23574,23673,24030,24070,24182,24180,24335,24347,24537,24534,25102,25100,25101,25104,25187,25179,25176,25910,26089,26088,26092,26093,26354,26355,26377,26429,26420,26417,26421,27425,27492,27515,27670,27741,27735,27737,27743,27744,27728,27733,27745,27739,27725,27726,28784,29279,29277,30334,31481,31859,31992,32566,32650,32701,32769,32771,32780,32786,32819,32895,32905,32907,32908,33251,33258,33267,33276,33292,33307,33311,33390,33394,33406,34411,34880,34892,34915,35199,38433,20018,20136,20301,20303,20295,20311,20318,20276,20315,20309,20272,20304,20305,20285,20282,20280,20291,20308,20284,20294,20323,20316,20320,20271,20302,20278,20313,20317,20296,20314,20812,20811,20813,20853,20918,20919,21029,21028,21033,21034,21032,21163,21161,21162,21164,21283,21363,21365,21533,21549,21534,21566,21542,21582,21543,21574,21571,21555,21576,21570,21531,21545,21578,21561,21563,21560,21550,21557,21558,21536,21564,21568,21553,21547,21535,21548,22250,22256,22244,22251,22346,22353,22336,22349,22343,22350,22334,22352,22351,22331,22767,22846,22941,22930,22952,22942,22947,22937,22934,22925,22948,22931,22922,22949,23389,23388,23386,23387,23436,23435,23439,23596,23616,23617,23615,23614,23696,23697,23700,23692,24043,24076,24207,24199,24202,24311,24324,24351,24420,24418,24439,24441,24536,24524,24535,24525,24561,24555,24568,24554,25106,25105,25220,25239,25238,25216,25206,25225,25197,25226,25212,25214,25209,25203,25234,25199,25240,25198,25237,25235,25233,25222,25913,25915,25912,26097,26356,26463,26446,26447,26448,26449,26460,26454,26462,26441,26438,26464,26451,26455,27493,27599,27714,27742,27801,27777,27784,27785,27781,27803,27754,27770,27792,27760,27788,27752,27798,27794,27773,27779,27762,27774,27764,27782,27766,27789,27796,27800,27778,28790,28796,28797,28792,29282,29281,29280,29380,29378,29590,29996,29995,30007,30008,30338,30447,30691,31169,31168,31167,31350,31995,32597,32918,32915,32925,32920,32923,32922,32946,33391,33426,33419,33421,35211,35282,35328,35895,35910,35925,35997,36196,36208,36275,36523,36554,36763,36784,36802,36806,36805,36804,24033,37009,37026,37034,37030,37027,37193,37318,37324,38450,38446,38449,38442,38444,20006,20054,20083,20107,20123,20126,20139,20140,20335,20381,20365,20339,20351,20332,20379,20363,20358,20355,20336,20341,20360,20329,20347,20374,20350,20367,20369,20346,20820,20818,20821,20841,20855,20854,20856,20925,20989,21051,21048,21047,21050,21040,21038,21046,21057,21182,21179,21330,21332,21331,21329,21350,21367,21368,21369,21462,21460,21463,21619,21621,21654,21624,21653,21632,21627,21623,21636,21650,21638,21628,21648,21617,21622,21644,21658,21602,21608,21643,21629,21646,22266,22403,22391,22378,22377,22369,22374,22372,22396,22812,22857,22855,22856,22852,22868,22974,22971,22996,22969,22958,22993,22982,22992,22989,22987,22995,22986,22959,22963,22994,22981,23391,23396,23395,23447,23450,23448,23452,23449,23451,23578,23624,23621,23622,23735,23713,23736,23721,23723,23729,23731,24088,24090,24086,24085,24091,24081,24184,24218,24215,24220,24213,24214,24310,24358,24359,24361,24448,24449,24447,24444,24541,24544,24573,24565,24575,24591,24596,24623,24629,24598,24618,24597,24609,24615,24617,24619,24603,25110,25109,25151,25150,25152,25215,25289,25292,25284,25279,25282,25273,25298,25307,25259,25299,25300,25291,25288,25256,25277,25276,25296,25305,25287,25293,25269,25306,25265,25304,25302,25303,25286,25260,25294,25918,26023,26044,26106,26132,26131,26124,26118,26114,26126,26112,26127,26133,26122,26119,26381,26379,26477,26507,26517,26481,26524,26483,26487,26503,26525,26519,26479,26480,26495,26505,26494,26512,26485,26522,26515,26492,26474,26482,27427,27494,27495,27519,27667,27675,27875,27880,27891,27825,27852,27877,27827,27837,27838,27836,27874,27819,27861,27859,27832,27844,27833,27841,27822,27863,27845,27889,27839,27835,27873,27867,27850,27820,27887,27868,27862,27872,28821,28814,28818,28810,28825,29228,29229,29240,29256,29287,29289,29376,29390,29401,29399,29392,29609,29608,29599,29611,29605,30013,30109,30105,30106,30340,30402,30450,30452,30693,30717,31038,31040,31041,31177,31176,31354,31353,31482,31998,32596,32652,32651,32773,32954,32933,32930,32945,32929,32939,32937,32948,32938,32943,33253,33278,33293,33459,33437,33433,33453,33469,33439,33465,33457,33452,33445,33455,33464,33443,33456,33470,33463,34382,34417,21021,34920,36555,36814,36820,36817,37045,37048,37041,37046,37319,37329,38263,38272,38428,38464,38463,38459,38468,38466,38585,38632,38738,38750,20127,20141,20142,20449,20405,20399,20415,20448,20433,20431,20445,20419,20406,20440,20447,20426,20439,20398,20432,20420,20418,20442,20430,20446,20407,20823,20882,20881,20896,21070,21059,21066,21069,21068,21067,21063,21191,21193,21187,21185,21261,21335,21371,21402,21467,21676,21696,21672,21710,21705,21688,21670,21683,21703,21698,21693,21674,21697,21700,21704,21679,21675,21681,21691,21673,21671,21695,22271,22402,22411,22432,22435,22434,22478,22446,22419,22869,22865,22863,22862,22864,23004,23000,23039,23011,23016,23043,23013,23018,23002,23014,23041,23035,23401,23459,23462,23460,23458,23461,23553,23630,23631,23629,23627,23769,23762,24055,24093,24101,24095,24189,24224,24230,24314,24328,24365,24421,24456,24453,24458,24459,24455,24460,24457,24594,24605,24608,24613,24590,24616,24653,24688,24680,24674,24646,24643,24684,24683,24682,24676,25153,25308,25366,25353,25340,25325,25345,25326,25341,25351,25329,25335,25327,25324,25342,25332,25361,25346,25919,25925,26027,26045,26082,26149,26157,26144,26151,26159,26143,26152,26161,26148,26359,26623,26579,26609,26580,26576,26604,26550,26543,26613,26601,26607,26564,26577,26548,26586,26597,26552,26575,26590,26611,26544,26585,26594,26589,26578,27498,27523,27526,27573,27602,27607,27679,27849,27915,27954,27946,27969,27941,27916,27953,27934,27927,27963,27965,27966,27958,27931,27893,27961,27943,27960,27945,27950,27957,27918,27947,28843,28858,28851,28844,28847,28845,28856,28846,28836,29232,29298,29295,29300,29417,29408,29409,29623,29642,29627,29618,29645,29632,29619,29978,29997,30031,30028,30030,30027,30123,30116,30117,30114,30115,30328,30342,30343,30344,30408,30406,30403,30405,30465,30457,30456,30473,30475,30462,30460,30471,30684,30722,30740,30732,30733,31046,31049,31048,31047,31161,31162,31185,31186,31179,31359,31361,31487,31485,31869,32002,32005,32000,32009,32007,32004,32006,32568,32654,32703,32772,32784,32781,32785,32822,32982,32997,32986,32963,32964,32972,32993,32987,32974,32990,32996,32989,33268,33314,33511,33539,33541,33507,33499,33510,33540,33509,33538,33545,33490,33495,33521,33537,33500,33492,33489,33502,33491,33503,33519,33542,34384,34425,34427,34426,34893,34923,35201,35284,35336,35330,35331,35998,36000,36212,36211,36276,36557,36556,36848,36838,36834,36842,36837,36845,36843,36836,36840,37066,37070,37057,37059,37195,37194,37325,38274,38480,38475,38476,38477,38754,38761,38859,38893,38899,38913,39080,39131,39135,39318,39321,20056,20147,20492,20493,20515,20463,20518,20517,20472,20521,20502,20486,20540,20511,20506,20498,20497,20474,20480,20500,20520,20465,20513,20491,20505,20504,20467,20462,20525,20522,20478,20523,20489,20860,20900,20901,20898,20941,20940,20934,20939,21078,21084,21076,21083,21085,21290,21375,21407,21405,21471,21736,21776,21761,21815,21756,21733,21746,21766,21754,21780,21737,21741,21729,21769,21742,21738,21734,21799,21767,21757,21775,22275,22276,22466,22484,22475,22467,22537,22799,22871,22872,22874,23057,23064,23068,23071,23067,23059,23020,23072,23075,23081,23077,23052,23049,23403,23640,23472,23475,23478,23476,23470,23477,23481,23480,23556,23633,23637,23632,23789,23805,23803,23786,23784,23792,23798,23809,23796,24046,24109,24107,24235,24237,24231,24369,24466,24465,24464,24665,24675,24677,24656,24661,24685,24681,24687,24708,24735,24730,24717,24724,24716,24709,24726,25159,25331,25352,25343,25422,25406,25391,25429,25410,25414,25423,25417,25402,25424,25405,25386,25387,25384,25421,25420,25928,25929,26009,26049,26053,26178,26185,26191,26179,26194,26188,26181,26177,26360,26388,26389,26391,26657,26680,26696,26694,26707,26681,26690,26708,26665,26803,26647,26700,26705,26685,26612,26704,26688,26684,26691,26666,26693,26643,26648,26689,27530,27529,27575,27683,27687,27688,27686,27684,27888,28010,28053,28040,28039,28006,28024,28023,27993,28051,28012,28041,28014,27994,28020,28009,28044,28042,28025,28037,28005,28052,28874,28888,28900,28889,28872,28879,29241,29305,29436,29433,29437,29432,29431,29574,29677,29705,29678,29664,29674,29662,30036,30045,30044,30042,30041,30142,30149,30151,30130,30131,30141,30140,30137,30146,30136,30347,30384,30410,30413,30414,30505,30495,30496,30504,30697,30768,30759,30776,30749,30772,30775,30757,30765,30752,30751,30770,31061,31056,31072,31071,31062,31070,31069,31063,31066,31204,31203,31207,31199,31206,31209,31192,31364,31368,31449,31494,31505,31881,32033,32023,32011,32010,32032,32034,32020,32016,32021,32026,32028,32013,32025,32027,32570,32607,32660,32709,32705,32774,32792,32789,32793,32791,32829,32831,33009,33026,33008,33029,33005,33012,33030,33016,33011,33032,33021,33034,33020,33007,33261,33260,33280,33296,33322,33323,33320,33324,33467,33579,33618,33620,33610,33592,33616,33609,33589,33588,33615,33586,33593,33590,33559,33600,33585,33576,33603,34388,34442,34474,34451,34468,34473,34444,34467,34460,34928,34935,34945,34946,34941,34937,35352,35344,35342,35340,35349,35338,35351,35347,35350,35343,35345,35912,35962,35961,36001,36002,36215,36524,36562,36564,36559,36785,36865,36870,36855,36864,36858,36852,36867,36861,36869,36856,37013,37089,37085,37090,37202,37197,37196,37336,37341,37335,37340,37337,38275,38498,38499,38497,38491,38493,38500,38488,38494,38587,39138,39340,39592,39640,39717,39730,39740,20094,20602,20605,20572,20551,20547,20556,20570,20553,20581,20598,20558,20565,20597,20596,20599,20559,20495,20591,20589,20828,20885,20976,21098,21103,21202,21209,21208,21205,21264,21263,21273,21311,21312,21310,21443,26364,21830,21866,21862,21828,21854,21857,21827,21834,21809,21846,21839,21845,21807,21860,21816,21806,21852,21804,21859,21811,21825,21847,22280,22283,22281,22495,22533,22538,22534,22496,22500,22522,22530,22581,22519,22521,22816,22882,23094,23105,23113,23142,23146,23104,23100,23138,23130,23110,23114,23408,23495,23493,23492,23490,23487,23494,23561,23560,23559,23648,23644,23645,23815,23814,23822,23835,23830,23842,23825,23849,23828,23833,23844,23847,23831,24034,24120,24118,24115,24119,24247,24248,24246,24245,24254,24373,24375,24407,24428,24425,24427,24471,24473,24478,24472,24481,24480,24476,24703,24739,24713,24736,24744,24779,24756,24806,24765,24773,24763,24757,24796,24764,24792,24789,24774,24799,24760,24794,24775,25114,25115,25160,25504,25511,25458,25494,25506,25509,25463,25447,25496,25514,25457,25513,25481,25475,25499,25451,25512,25476,25480,25497,25505,25516,25490,25487,25472,25467,25449,25448,25466,25949,25942,25937,25945,25943,21855,25935,25944,25941,25940,26012,26011,26028,26063,26059,26060,26062,26205,26202,26212,26216,26214,26206,26361,21207,26395,26753,26799,26786,26771,26805,26751,26742,26801,26791,26775,26800,26755,26820,26797,26758,26757,26772,26781,26792,26783,26785,26754,27442,27578,27627,27628,27691,28046,28092,28147,28121,28082,28129,28108,28132,28155,28154,28165,28103,28107,28079,28113,28078,28126,28153,28088,28151,28149,28101,28114,28186,28085,28122,28139,28120,28138,28145,28142,28136,28102,28100,28074,28140,28095,28134,28921,28937,28938,28925,28911,29245,29309,29313,29468,29467,29462,29459,29465,29575,29701,29706,29699,29702,29694,29709,29920,29942,29943,29980,29986,30053,30054,30050,30064,30095,30164,30165,30133,30154,30157,30350,30420,30418,30427,30519,30526,30524,30518,30520,30522,30827,30787,30798,31077,31080,31085,31227,31378,31381,31520,31528,31515,31532,31526,31513,31518,31534,31890,31895,31893,32070,32067,32113,32046,32057,32060,32064,32048,32051,32068,32047,32066,32050,32049,32573,32670,32666,32716,32718,32722,32796,32842,32838,33071,33046,33059,33067,33065,33072,33060,33282,33333,33335,33334,33337,33678,33694,33688,33656,33698,33686,33725,33707,33682,33674,33683,33673,33696,33655,33659,33660,33670,33703,34389,24426,34503,34496,34486,34500,34485,34502,34507,34481,34479,34505,34899,34974,34952,34987,34962,34966,34957,34955,35219,35215,35370,35357,35363,35365,35377,35373,35359,35355,35362,35913,35930,36009,36012,36011,36008,36010,36007,36199,36198,36286,36282,36571,36575,36889,36877,36890,36887,36899,36895,36893,36880,36885,36894,36896,36879,36898,36886,36891,36884,37096,37101,37117,37207,37326,37365,37350,37347,37351,37357,37353,38281,38506,38517,38515,38520,38512,38516,38518,38519,38508,38592,38634,38633,31456,31455,38914,38915,39770,40165,40565,40575,40613,40635,20642,20621,20613,20633,20625,20608,20630,20632,20634,26368,20977,21106,21108,21109,21097,21214,21213,21211,21338,21413,21883,21888,21927,21884,21898,21917,21912,21890,21916,21930,21908,21895,21899,21891,21939,21934,21919,21822,21938,21914,21947,21932,21937,21886,21897,21931,21913,22285,22575,22570,22580,22564,22576,22577,22561,22557,22560,22777,22778,22880,23159,23194,23167,23186,23195,23207,23411,23409,23506,23500,23507,23504,23562,23563,23601,23884,23888,23860,23879,24061,24133,24125,24128,24131,24190,24266,24257,24258,24260,24380,24429,24489,24490,24488,24785,24801,24754,24758,24800,24860,24867,24826,24853,24816,24827,24820,24936,24817,24846,24822,24841,24832,24850,25119,25161,25507,25484,25551,25536,25577,25545,25542,25549,25554,25571,25552,25569,25558,25581,25582,25462,25588,25578,25563,25682,25562,25593,25950,25958,25954,25955,26001,26000,26031,26222,26224,26228,26230,26223,26257,26234,26238,26231,26366,26367,26399,26397,26874,26837,26848,26840,26839,26885,26847,26869,26862,26855,26873,26834,26866,26851,26827,26829,26893,26898,26894,26825,26842,26990,26875,27454,27450,27453,27544,27542,27580,27631,27694,27695,27692,28207,28216,28244,28193,28210,28263,28234,28192,28197,28195,28187,28251,28248,28196,28246,28270,28205,28198,28271,28212,28237,28218,28204,28227,28189,28222,28363,28297,28185,28238,28259,28228,28274,28265,28255,28953,28954,28966,28976,28961,28982,29038,28956,29260,29316,29312,29494,29477,29492,29481,29754,29738,29747,29730,29733,29749,29750,29748,29743,29723,29734,29736,29989,29990,30059,30058,30178,30171,30179,30169,30168,30174,30176,30331,30332,30358,30355,30388,30428,30543,30701,30813,30828,30831,31245,31240,31243,31237,31232,31384,31383,31382,31461,31459,31561,31574,31558,31568,31570,31572,31565,31563,31567,31569,31903,31909,32094,32080,32104,32085,32043,32110,32114,32097,32102,32098,32112,32115,21892,32724,32725,32779,32850,32901,33109,33108,33099,33105,33102,33081,33094,33086,33100,33107,33140,33298,33308,33769,33795,33784,33805,33760,33733,33803,33729,33775,33777,33780,33879,33802,33776,33804,33740,33789,33778,33738,33848,33806,33796,33756,33799,33748,33759,34395,34527,34521,34541,34516,34523,34532,34512,34526,34903,35009,35010,34993,35203,35222,35387,35424,35413,35422,35388,35393,35412,35419,35408,35398,35380,35386,35382,35414,35937,35970,36015,36028,36019,36029,36033,36027,36032,36020,36023,36022,36031,36024,36234,36229,36225,36302,36317,36299,36314,36305,36300,36315,36294,36603,36600,36604,36764,36910,36917,36913,36920,36914,36918,37122,37109,37129,37118,37219,37221,37327,37396,37397,37411,37385,37406,37389,37392,37383,37393,38292,38287,38283,38289,38291,38290,38286,38538,38542,38539,38525,38533,38534,38541,38514,38532,38593,38597,38596,38598,38599,38639,38642,38860,38917,38918,38920,39143,39146,39151,39145,39154,39149,39342,39341,40643,40653,40657,20098,20653,20661,20658,20659,20677,20670,20652,20663,20667,20655,20679,21119,21111,21117,21215,21222,21220,21218,21219,21295,21983,21992,21971,21990,21966,21980,21959,21969,21987,21988,21999,21978,21985,21957,21958,21989,21961,22290,22291,22622,22609,22616,22615,22618,22612,22635,22604,22637,22602,22626,22610,22603,22887,23233,23241,23244,23230,23229,23228,23219,23234,23218,23913,23919,24140,24185,24265,24264,24338,24409,24492,24494,24858,24847,24904,24863,24819,24859,24825,24833,24840,24910,24908,24900,24909,24894,24884,24871,24845,24838,24887,25121,25122,25619,25662,25630,25642,25645,25661,25644,25615,25628,25620,25613,25654,25622,25623,25606,25964,26015,26032,26263,26249,26247,26248,26262,26244,26264,26253,26371,27028,26989,26970,26999,26976,26964,26997,26928,27010,26954,26984,26987,26974,26963,27001,27014,26973,26979,26971,27463,27506,27584,27583,27603,27645,28322,28335,28371,28342,28354,28304,28317,28359,28357,28325,28312,28348,28346,28331,28369,28310,28316,28356,28372,28330,28327,28340,29006,29017,29033,29028,29001,29031,29020,29036,29030,29004,29029,29022,28998,29032,29014,29242,29266,29495,29509,29503,29502,29807,29786,29781,29791,29790,29761,29759,29785,29787,29788,30070,30072,30208,30192,30209,30194,30193,30202,30207,30196,30195,30430,30431,30555,30571,30566,30558,30563,30585,30570,30572,30556,30565,30568,30562,30702,30862,30896,30871,30872,30860,30857,30844,30865,30867,30847,31098,31103,31105,33836,31165,31260,31258,31264,31252,31263,31262,31391,31392,31607,31680,31584,31598,31591,31921,31923,31925,32147,32121,32145,32129,32143,32091,32622,32617,32618,32626,32681,32680,32676,32854,32856,32902,32900,33137,33136,33144,33125,33134,33139,33131,33145,33146,33126,33285,33351,33922,33911,33853,33841,33909,33894,33899,33865,33900,33883,33852,33845,33889,33891,33897,33901,33862,34398,34396,34399,34553,34579,34568,34567,34560,34558,34555,34562,34563,34566,34570,34905,35039,35028,35033,35036,35032,35037,35041,35018,35029,35026,35228,35299,35435,35442,35443,35430,35433,35440,35463,35452,35427,35488,35441,35461,35437,35426,35438,35436,35449,35451,35390,35432,35938,35978,35977,36042,36039,36040,36036,36018,36035,36034,36037,36321,36319,36328,36335,36339,36346,36330,36324,36326,36530,36611,36617,36606,36618,36767,36786,36939,36938,36947,36930,36948,36924,36949,36944,36935,36943,36942,36941,36945,36926,36929,37138,37143,37228,37226,37225,37321,37431,37463,37432,37437,37440,37438,37467,37451,37476,37457,37428,37449,37453,37445,37433,37439,37466,38296,38552,38548,38549,38605,38603,38601,38602,38647,38651,38649,38646,38742,38772,38774,38928,38929,38931,38922,38930,38924,39164,39156,39165,39166,39347,39345,39348,39649,40169,40578,40718,40723,40736,20711,20718,20709,20694,20717,20698,20693,20687,20689,20721,20686,20713,20834,20979,21123,21122,21297,21421,22014,22016,22043,22039,22013,22036,22022,22025,22029,22030,22007,22038,22047,22024,22032,22006,22296,22294,22645,22654,22659,22675,22666,22649,22661,22653,22781,22821,22818,22820,22890,22889,23265,23270,23273,23255,23254,23256,23267,23413,23518,23527,23521,23525,23526,23528,23522,23524,23519,23565,23650,23940,23943,24155,24163,24149,24151,24148,24275,24278,24330,24390,24432,24505,24903,24895,24907,24951,24930,24931,24927,24922,24920,24949,25130,25735,25688,25684,25764,25720,25695,25722,25681,25703,25652,25709,25723,25970,26017,26071,26070,26274,26280,26269,27036,27048,27029,27073,27054,27091,27083,27035,27063,27067,27051,27060,27088,27085,27053,27084,27046,27075,27043,27465,27468,27699,28467,28436,28414,28435,28404,28457,28478,28448,28460,28431,28418,28450,28415,28399,28422,28465,28472,28466,28451,28437,28459,28463,28552,28458,28396,28417,28402,28364,28407,29076,29081,29053,29066,29060,29074,29246,29330,29334,29508,29520,29796,29795,29802,29808,29805,29956,30097,30247,30221,30219,30217,30227,30433,30435,30596,30589,30591,30561,30913,30879,30887,30899,30889,30883,31118,31119,31117,31278,31281,31402,31401,31469,31471,31649,31637,31627,31605,31639,31645,31636,31631,31672,31623,31620,31929,31933,31934,32187,32176,32156,32189,32190,32160,32202,32180,32178,32177,32186,32162,32191,32181,32184,32173,32210,32199,32172,32624,32736,32737,32735,32862,32858,32903,33104,33152,33167,33160,33162,33151,33154,33255,33274,33287,33300,33310,33355,33993,33983,33990,33988,33945,33950,33970,33948,33995,33976,33984,34003,33936,33980,34001,33994,34623,34588,34619,34594,34597,34612,34584,34645,34615,34601,35059,35074,35060,35065,35064,35069,35048,35098,35055,35494,35468,35486,35491,35469,35489,35475,35492,35498,35493,35496,35480,35473,35482,35495,35946,35981,35980,36051,36049,36050,36203,36249,36245,36348,36628,36626,36629,36627,36771,36960,36952,36956,36963,36953,36958,36962,36957,36955,37145,37144,37150,37237,37240,37239,37236,37496,37504,37509,37528,37526,37499,37523,37532,37544,37500,37521,38305,38312,38313,38307,38309,38308,38553,38556,38555,38604,38610,38656,38780,38789,38902,38935,38936,39087,39089,39171,39173,39180,39177,39361,39599,39600,39654,39745,39746,40180,40182,40179,40636,40763,40778,20740,20736,20731,20725,20729,20738,20744,20745,20741,20956,21127,21128,21129,21133,21130,21232,21426,22062,22075,22073,22066,22079,22068,22057,22099,22094,22103,22132,22070,22063,22064,22656,22687,22686,22707,22684,22702,22697,22694,22893,23305,23291,23307,23285,23308,23304,23534,23532,23529,23531,23652,23653,23965,23956,24162,24159,24161,24290,24282,24287,24285,24291,24288,24392,24433,24503,24501,24950,24935,24942,24925,24917,24962,24956,24944,24939,24958,24999,24976,25003,24974,25004,24986,24996,24980,25006,25134,25705,25711,25721,25758,25778,25736,25744,25776,25765,25747,25749,25769,25746,25774,25773,25771,25754,25772,25753,25762,25779,25973,25975,25976,26286,26283,26292,26289,27171,27167,27112,27137,27166,27161,27133,27169,27155,27146,27123,27138,27141,27117,27153,27472,27470,27556,27589,27590,28479,28540,28548,28497,28518,28500,28550,28525,28507,28536,28526,28558,28538,28528,28516,28567,28504,28373,28527,28512,28511,29087,29100,29105,29096,29270,29339,29518,29527,29801,29835,29827,29822,29824,30079,30240,30249,30239,30244,30246,30241,30242,30362,30394,30436,30606,30599,30604,30609,30603,30923,30917,30906,30922,30910,30933,30908,30928,31295,31292,31296,31293,31287,31291,31407,31406,31661,31665,31684,31668,31686,31687,31681,31648,31692,31946,32224,32244,32239,32251,32216,32236,32221,32232,32227,32218,32222,32233,32158,32217,32242,32249,32629,32631,32687,32745,32806,33179,33180,33181,33184,33178,33176,34071,34109,34074,34030,34092,34093,34067,34065,34083,34081,34068,34028,34085,34047,34054,34690,34676,34678,34656,34662,34680,34664,34649,34647,34636,34643,34907,34909,35088,35079,35090,35091,35093,35082,35516,35538,35527,35524,35477,35531,35576,35506,35529,35522,35519,35504,35542,35533,35510,35513,35547,35916,35918,35948,36064,36062,36070,36068,36076,36077,36066,36067,36060,36074,36065,36205,36255,36259,36395,36368,36381,36386,36367,36393,36383,36385,36382,36538,36637,36635,36639,36649,36646,36650,36636,36638,36645,36969,36974,36968,36973,36983,37168,37165,37159,37169,37255,37257,37259,37251,37573,37563,37559,37610,37548,37604,37569,37555,37564,37586,37575,37616,37554,38317,38321,38660,38662,38663,38665,38752,38797,38795,38799,38945,38955,38940,39091,39178,39187,39186,39192,39389,39376,39391,39387,39377,39381,39378,39385,39607,39662,39663,39719,39749,39748,39799,39791,40198,40201,40195,40617,40638,40654,22696,40786,20754,20760,20756,20752,20757,20864,20906,20957,21137,21139,21235,22105,22123,22137,22121,22116,22136,22122,22120,22117,22129,22127,22124,22114,22134,22721,22718,22727,22725,22894,23325,23348,23416,23536,23566,24394,25010,24977,25001,24970,25037,25014,25022,25034,25032,25136,25797,25793,25803,25787,25788,25818,25796,25799,25794,25805,25791,25810,25812,25790,25972,26310,26313,26297,26308,26311,26296,27197,27192,27194,27225,27243,27224,27193,27204,27234,27233,27211,27207,27189,27231,27208,27481,27511,27653,28610,28593,28577,28611,28580,28609,28583,28595,28608,28601,28598,28582,28576,28596,29118,29129,29136,29138,29128,29141,29113,29134,29145,29148,29123,29124,29544,29852,29859,29848,29855,29854,29922,29964,29965,30260,30264,30266,30439,30437,30624,30622,30623,30629,30952,30938,30956,30951,31142,31309,31310,31302,31308,31307,31418,31705,31761,31689,31716,31707,31713,31721,31718,31957,31958,32266,32273,32264,32283,32291,32286,32285,32265,32272,32633,32690,32752,32753,32750,32808,33203,33193,33192,33275,33288,33368,33369,34122,34137,34120,34152,34153,34115,34121,34157,34154,34142,34691,34719,34718,34722,34701,34913,35114,35122,35109,35115,35105,35242,35238,35558,35578,35563,35569,35584,35548,35559,35566,35582,35585,35586,35575,35565,35571,35574,35580,35947,35949,35987,36084,36420,36401,36404,36418,36409,36405,36667,36655,36664,36659,36776,36774,36981,36980,36984,36978,36988,36986,37172,37266,37664,37686,37624,37683,37679,37666,37628,37675,37636,37658,37648,37670,37665,37653,37678,37657,38331,38567,38568,38570,38613,38670,38673,38678,38669,38675,38671,38747,38748,38758,38808,38960,38968,38971,38967,38957,38969,38948,39184,39208,39198,39195,39201,39194,39405,39394,39409,39608,39612,39675,39661,39720,39825,40213,40227,40230,40232,40210,40219,40664,40660,40845,40860,20778,20767,20769,20786,21237,22158,22144,22160,22149,22151,22159,22741,22739,22737,22734,23344,23338,23332,23418,23607,23656,23996,23994,23997,23992,24171,24396,24509,25033,25026,25031,25062,25035,25138,25140,25806,25802,25816,25824,25840,25830,25836,25841,25826,25837,25986,25987,26329,26326,27264,27284,27268,27298,27292,27355,27299,27262,27287,27280,27296,27484,27566,27610,27656,28632,28657,28639,28640,28635,28644,28651,28655,28544,28652,28641,28649,28629,28654,28656,29159,29151,29166,29158,29157,29165,29164,29172,29152,29237,29254,29552,29554,29865,29872,29862,29864,30278,30274,30284,30442,30643,30634,30640,30636,30631,30637,30703,30967,30970,30964,30959,30977,31143,31146,31319,31423,31751,31757,31742,31735,31756,31712,31968,31964,31966,31970,31967,31961,31965,32302,32318,32326,32311,32306,32323,32299,32317,32305,32325,32321,32308,32313,32328,32309,32319,32303,32580,32755,32764,32881,32882,32880,32879,32883,33222,33219,33210,33218,33216,33215,33213,33225,33214,33256,33289,33393,34218,34180,34174,34204,34193,34196,34223,34203,34183,34216,34186,34407,34752,34769,34739,34770,34758,34731,34747,34746,34760,34763,35131,35126,35140,35128,35133,35244,35598,35607,35609,35611,35594,35616,35613,35588,35600,35905,35903,35955,36090,36093,36092,36088,36091,36264,36425,36427,36424,36426,36676,36670,36674,36677,36671,36991,36989,36996,36993,36994,36992,37177,37283,37278,37276,37709,37762,37672,37749,37706,37733,37707,37656,37758,37740,37723,37744,37722,37716,38346,38347,38348,38344,38342,38577,38584,38614,38684,38686,38816,38867,38982,39094,39221,39425,39423,39854,39851,39850,39853,40251,40255,40587,40655,40670,40668,40669,40667,40766,40779,21474,22165,22190,22745,22744,23352,24413,25059,25139,25844,25842,25854,25862,25850,25851,25847,26039,26332,26406,27315,27308,27331,27323,27320,27330,27310,27311,27487,27512,27567,28681,28683,28670,28678,28666,28689,28687,29179,29180,29182,29176,29559,29557,29863,29887,29973,30294,30296,30290,30653,30655,30651,30652,30990,31150,31329,31330,31328,31428,31429,31787,31783,31786,31774,31779,31777,31975,32340,32341,32350,32346,32353,32338,32345,32584,32761,32763,32887,32886,33229,33231,33290,34255,34217,34253,34256,34249,34224,34234,34233,34214,34799,34796,34802,34784,35206,35250,35316,35624,35641,35628,35627,35920,36101,36441,36451,36454,36452,36447,36437,36544,36681,36685,36999,36995,37000,37291,37292,37328,37780,37770,37782,37794,37811,37806,37804,37808,37784,37786,37783,38356,38358,38352,38357,38626,38620,38617,38619,38622,38692,38819,38822,38829,38905,38989,38991,38988,38990,38995,39098,39230,39231,39229,39214,39333,39438,39617,39683,39686,39759,39758,39757,39882,39881,39933,39880,39872,40273,40285,40288,40672,40725,40748,20787,22181,22750,22751,22754,23541,40848,24300,25074,25079,25078,25077,25856,25871,26336,26333,27365,27357,27354,27347,28699,28703,28712,28698,28701,28693,28696,29190,29197,29272,29346,29560,29562,29885,29898,29923,30087,30086,30303,30305,30663,31001,31153,31339,31337,31806,31807,31800,31805,31799,31808,32363,32365,32377,32361,32362,32645,32371,32694,32697,32696,33240,34281,34269,34282,34261,34276,34277,34295,34811,34821,34829,34809,34814,35168,35167,35158,35166,35649,35676,35672,35657,35674,35662,35663,35654,35673,36104,36106,36476,36466,36487,36470,36460,36474,36468,36692,36686,36781,37002,37003,37297,37294,37857,37841,37855,37827,37832,37852,37853,37846,37858,37837,37848,37860,37847,37864,38364,38580,38627,38698,38695,38753,38876,38907,39006,39000,39003,39100,39237,39241,39446,39449,39693,39912,39911,39894,39899,40329,40289,40306,40298,40300,40594,40599,40595,40628,21240,22184,22199,22198,22196,22204,22756,23360,23363,23421,23542,24009,25080,25082,25880,25876,25881,26342,26407,27372,28734,28720,28722,29200,29563,29903,30306,30309,31014,31018,31020,31019,31431,31478,31820,31811,31821,31983,31984,36782,32381,32380,32386,32588,32768,33242,33382,34299,34297,34321,34298,34310,34315,34311,34314,34836,34837,35172,35258,35320,35696,35692,35686,35695,35679,35691,36111,36109,36489,36481,36485,36482,37300,37323,37912,37891,37885,38369,38704,39108,39250,39249,39336,39467,39472,39479,39477,39955,39949,40569,40629,40680,40751,40799,40803,40801,20791,20792,22209,22208,22210,22804,23660,24013,25084,25086,25885,25884,26005,26345,27387,27396,27386,27570,28748,29211,29351,29910,29908,30313,30675,31824,32399,32396,32700,34327,34349,34330,34851,34850,34849,34847,35178,35180,35261,35700,35703,35709,36115,36490,36493,36491,36703,36783,37306,37934,37939,37941,37946,37944,37938,37931,38370,38712,38713,38706,38911,39015,39013,39255,39493,39491,39488,39486,39631,39764,39761,39981,39973,40367,40372,40386,40376,40605,40687,40729,40796,40806,40807,20796,20795,22216,22218,22217,23423,24020,24018,24398,25087,25892,27402,27489,28753,28760,29568,29924,30090,30318,30316,31155,31840,31839,32894,32893,33247,35186,35183,35324,35712,36118,36119,36497,36499,36705,37192,37956,37969,37970,38717,38718,38851,38849,39019,39253,39509,39501,39634,39706,40009,39985,39998,39995,40403,40407,40756,40812,40810,40852,22220,24022,25088,25891,25899,25898,26348,27408,29914,31434,31844,31843,31845,32403,32406,32404,33250,34360,34367,34865,35722,37008,37007,37987,37984,37988,38760,39023,39260,39514,39515,39511,39635,39636,39633,40020,40023,40022,40421,40607,40692,22225,22761,25900,28766,30321,30322,30679,32592,32648,34870,34873,34914,35731,35730,35734,33399,36123,37312,37994,38722,38728,38724,38854,39024,39519,39714,39768,40031,40441,40442,40572,40573,40711,40823,40818,24307,27414,28771,31852,31854,34875,35264,36513,37313,38002,38000,39025,39262,39638,39715,40652,28772,30682,35738,38007,38857,39522,39525,32412,35740,36522,37317,38013,38014,38012,40055,40056,40695,35924,38015,40474,29224,39530,39729,40475,40478,31858,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,20022,20031,20101,20128,20866,20886,20907,21241,21304,21353,21430,22794,23424,24027,12083,24191,24308,24400,24417,25908,26080,30098,30326,36789,38582,168,710,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,65339,65341,10045,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8679,8632,8633,12751,131276,20058,131210,20994,17553,40880,20872,40881,161287,11254=>65506,65508,65287,65282,12849,8470,8481,12443,12444,11904,11908,11910,11911,11912,11914,11916,11917,11925,11932,11933,11941,11943,11946,11948,11950,11958,11964,11966,11974,11978,11980,11981,11983,11990,11991,11998,12003,11294=>643,592,603,596,629,339,248,331,650,618,20034,20060,20981,21274,21378,19975,19980,20039,20109,22231,64012,23662,24435,19983,20871,19982,20014,20115,20162,20169,20168,20888,21244,21356,21433,22304,22787,22828,23568,24063,26081,27571,27596,27668,29247,20017,20028,20200,20188,20201,20193,20189,20186,21004,21276,21324,22306,22307,22807,22831,23425,23428,23570,23611,23668,23667,24068,24192,24194,24521,25097,25168,27669,27702,27715,27711,27707,29358,29360,29578,31160,32906,38430,20238,20248,20268,20213,20244,20209,20224,20215,20232,20253,20226,20229,20258,20243,20228,20212,20242,20913,21011,21001,21008,21158,21282,21279,21325,21386,21511,22241,22239,22318,22314,22324,22844,22912,22908,22917,22907,22910,22903,22911,23382,23573,23589,23676,23674,23675,23678,24031,24181,24196,24322,24346,24436,24533,24532,24527,25180,25182,25188,25185,25190,25186,25177,25184,25178,25189,26095,26094,26430,26425,26424,26427,26426,26431,26428,26419,27672,27718,27730,27740,27727,27722,27732,27723,27724,28785,29278,29364,29365,29582,29994,30335,31349,32593,33400,33404,33408,33405,33407,34381,35198,37017,37015,37016,37019,37012,38434,38436,38432,38435,20310,20283,20322,20297,20307,20324,20286,20327,20306,20319,20289,20312,20269,20275,20287,20321,20879,20921,21020,21022,21025,21165,21166,21257,21347,21362,21390,21391,21552,21559,21546,21588,21573,21529,21532,21541,21528,21565,21583,21569,21544,21540,21575,22254,22247,22245,22337,22341,22348,22345,22347,22354,22790,22848,22950,22936,22944,22935,22926,22946,22928,22927,22951,22945,23438,23442,23592,23594,23693,23695,23688,23691,23689,23698,23690,23686,23699,23701,24032,24074,24078,24203,24201,24204,24200,24205,24325,24349,24440,24438,24530,24529,24528,24557,24552,24558,24563,24545,24548,24547,24570,24559,24567,24571,24576,24564,25146,25219,25228,25230,25231,25236,25223,25201,25211,25210,25200,25217,25224,25207,25213,25202,25204,25911,26096,26100,26099,26098,26101,26437,26439,26457,26453,26444,26440,26461,26445,26458,26443,27600,27673,27674,27768,27751,27755,27780,27787,27791,27761,27759,27753,27802,27757,27783,27797,27804,27750,27763,27749,27771,27790,28788,28794,29283,29375,29373,29379,29382,29377,29370,29381,29589,29591,29587,29588,29586,30010,30009,30100,30101,30337,31037,32820,32917,32921,32912,32914,32924,33424,33423,33413,33422,33425,33427,33418,33411,33412,35960,36809,36799,37023,37025,37029,37022,37031,37024,38448,38440,38447,38445,20019,20376,20348,20357,20349,20352,20359,20342,20340,20361,20356,20343,20300,20375,20330,20378,20345,20353,20344,20368,20380,20372,20382,20370,20354,20373,20331,20334,20894,20924,20926,21045,21042,21043,21062,21041,21180,21258,21259,21308,21394,21396,21639,21631,21633,21649,21634,21640,21611,21626,21630,21605,21612,21620,21606,21645,21615,21601,21600,21656,21603,21607,21604,22263,22265,22383,22386,22381,22379,22385,22384,22390,22400,22389,22395,22387,22388,22370,22376,22397,22796,22853,22965,22970,22991,22990,22962,22988,22977,22966,22972,22979,22998,22961,22973,22976,22984,22964,22983,23394,23397,23443,23445,23620,23623,23726,23716,23712,23733,23727,23720,23724,23711,23715,23725,23714,23722,23719,23709,23717,23734,23728,23718,24087,24084,24089,24360,24354,24355,24356,24404,24450,24446,24445,24542,24549,24621,24614,24601,24626,24587,24628,24586,24599,24627,24602,24606,24620,24610,24589,24592,24622,24595,24593,24588,24585,24604,25108,25149,25261,25268,25297,25278,25258,25270,25290,25262,25267,25263,25275,25257,25264,25272,25917,26024,26043,26121,26108,26116,26130,26120,26107,26115,26123,26125,26117,26109,26129,26128,26358,26378,26501,26476,26510,26514,26486,26491,26520,26502,26500,26484,26509,26508,26490,26527,26513,26521,26499,26493,26497,26488,26489,26516,27429,27520,27518,27614,27677,27795,27884,27883,27886,27865,27830,27860,27821,27879,27831,27856,27842,27834,27843,27846,27885,27890,27858,27869,27828,27786,27805,27776,27870,27840,27952,27853,27847,27824,27897,27855,27881,27857,28820,28824,28805,28819,28806,28804,28817,28822,28802,28826,28803,29290,29398,29387,29400,29385,29404,29394,29396,29402,29388,29393,29604,29601,29613,29606,29602,29600,29612,29597,29917,29928,30015,30016,30014,30092,30104,30383,30451,30449,30448,30453,30712,30716,30713,30715,30714,30711,31042,31039,31173,31352,31355,31483,31861,31997,32821,32911,32942,32931,32952,32949,32941,33312,33440,33472,33451,33434,33432,33435,33461,33447,33454,33468,33438,33466,33460,33448,33441,33449,33474,33444,33475,33462,33442,34416,34415,34413,34414,35926,36818,36811,36819,36813,36822,36821,36823,37042,37044,37039,37043,37040,38457,38461,38460,38458,38467,20429,20421,20435,20402,20425,20427,20417,20436,20444,20441,20411,20403,20443,20423,20438,20410,20416,20409,20460,21060,21065,21184,21186,21309,21372,21399,21398,21401,21400,21690,21665,21677,21669,21711,21699,33549,21687,21678,21718,21686,21701,21702,21664,21616,21692,21666,21694,21618,21726,21680,22453,22430,22431,22436,22412,22423,22429,22427,22420,22424,22415,22425,22437,22426,22421,22772,22797,22867,23009,23006,23022,23040,23025,23005,23034,23037,23036,23030,23012,23026,23031,23003,23017,23027,23029,23008,23038,23028,23021,23464,23628,23760,23768,23756,23767,23755,23771,23774,23770,23753,23751,23754,23766,23763,23764,23759,23752,23750,23758,23775,23800,24057,24097,24098,24099,24096,24100,24240,24228,24226,24219,24227,24229,24327,24366,24406,24454,24631,24633,24660,24690,24670,24645,24659,24647,24649,24667,24652,24640,24642,24671,24612,24644,24664,24678,24686,25154,25155,25295,25357,25355,25333,25358,25347,25323,25337,25359,25356,25336,25334,25344,25363,25364,25338,25365,25339,25328,25921,25923,26026,26047,26166,26145,26162,26165,26140,26150,26146,26163,26155,26170,26141,26164,26169,26158,26383,26384,26561,26610,26568,26554,26588,26555,26616,26584,26560,26551,26565,26603,26596,26591,26549,26573,26547,26615,26614,26606,26595,26562,26553,26574,26599,26608,26546,26620,26566,26605,26572,26542,26598,26587,26618,26569,26570,26563,26602,26571,27432,27522,27524,27574,27606,27608,27616,27680,27681,27944,27956,27949,27935,27964,27967,27922,27914,27866,27955,27908,27929,27962,27930,27921,27904,27933,27970,27905,27928,27959,27907,27919,27968,27911,27936,27948,27912,27938,27913,27920,28855,28831,28862,28849,28848,28833,28852,28853,28841,29249,29257,29258,29292,29296,29299,29294,29386,29412,29416,29419,29407,29418,29414,29411,29573,29644,29634,29640,29637,29625,29622,29621,29620,29675,29631,29639,29630,29635,29638,29624,29643,29932,29934,29998,30023,30024,30119,30122,30329,30404,30472,30467,30468,30469,30474,30455,30459,30458,30695,30696,30726,30737,30738,30725,30736,30735,30734,30729,30723,30739,31050,31052,31051,31045,31044,31189,31181,31183,31190,31182,31360,31358,31441,31488,31489,31866,31864,31865,31871,31872,31873,32003,32008,32001,32600,32657,32653,32702,32775,32782,32783,32788,32823,32984,32967,32992,32977,32968,32962,32976,32965,32995,32985,32988,32970,32981,32969,32975,32983,32998,32973,33279,33313,33428,33497,33534,33529,33543,33512,33536,33493,33594,33515,33494,33524,33516,33505,33522,33525,33548,33531,33526,33520,33514,33508,33504,33530,33523,33517,34423,34420,34428,34419,34881,34894,34919,34922,34921,35283,35332,35335,36210,36835,36833,36846,36832,37105,37053,37055,37077,37061,37054,37063,37067,37064,37332,37331,38484,38479,38481,38483,38474,38478,20510,20485,20487,20499,20514,20528,20507,20469,20468,20531,20535,20524,20470,20471,20503,20508,20512,20519,20533,20527,20529,20494,20826,20884,20883,20938,20932,20933,20936,20942,21089,21082,21074,21086,21087,21077,21090,21197,21262,21406,21798,21730,21783,21778,21735,21747,21732,21786,21759,21764,21768,21739,21777,21765,21745,21770,21755,21751,21752,21728,21774,21763,21771,22273,22274,22476,22578,22485,22482,22458,22470,22461,22460,22456,22454,22463,22471,22480,22457,22465,22798,22858,23065,23062,23085,23086,23061,23055,23063,23050,23070,23091,23404,23463,23469,23468,23555,23638,23636,23788,23807,23790,23793,23799,23808,23801,24105,24104,24232,24238,24234,24236,24371,24368,24423,24669,24666,24679,24641,24738,24712,24704,24722,24705,24733,24707,24725,24731,24727,24711,24732,24718,25113,25158,25330,25360,25430,25388,25412,25413,25398,25411,25572,25401,25419,25418,25404,25385,25409,25396,25432,25428,25433,25389,25415,25395,25434,25425,25400,25431,25408,25416,25930,25926,26054,26051,26052,26050,26186,26207,26183,26193,26386,26387,26655,26650,26697,26674,26675,26683,26699,26703,26646,26673,26652,26677,26667,26669,26671,26702,26692,26676,26653,26642,26644,26662,26664,26670,26701,26682,26661,26656,27436,27439,27437,27441,27444,27501,32898,27528,27622,27620,27624,27619,27618,27623,27685,28026,28003,28004,28022,27917,28001,28050,27992,28002,28013,28015,28049,28045,28143,28031,28038,27998,28007,28000,28055,28016,28028,27999,28034,28056,27951,28008,28043,28030,28032,28036,27926,28035,28027,28029,28021,28048,28892,28883,28881,28893,28875,32569,28898,28887,28882,28894,28896,28884,28877,28869,28870,28871,28890,28878,28897,29250,29304,29303,29302,29440,29434,29428,29438,29430,29427,29435,29441,29651,29657,29669,29654,29628,29671,29667,29673,29660,29650,29659,29652,29661,29658,29655,29656,29672,29918,29919,29940,29941,29985,30043,30047,30128,30145,30139,30148,30144,30143,30134,30138,30346,30409,30493,30491,30480,30483,30482,30499,30481,30485,30489,30490,30498,30503,30755,30764,30754,30773,30767,30760,30766,30763,30753,30761,30771,30762,30769,31060,31067,31055,31068,31059,31058,31057,31211,31212,31200,31214,31213,31210,31196,31198,31197,31366,31369,31365,31371,31372,31370,31367,31448,31504,31492,31507,31493,31503,31496,31498,31502,31497,31506,31876,31889,31882,31884,31880,31885,31877,32030,32029,32017,32014,32024,32022,32019,32031,32018,32015,32012,32604,32609,32606,32608,32605,32603,32662,32658,32707,32706,32704,32790,32830,32825,33018,33010,33017,33013,33025,33019,33024,33281,33327,33317,33587,33581,33604,33561,33617,33573,33622,33599,33601,33574,33564,33570,33602,33614,33563,33578,33544,33596,33613,33558,33572,33568,33591,33583,33577,33607,33605,33612,33619,33566,33580,33611,33575,33608,34387,34386,34466,34472,34454,34445,34449,34462,34439,34455,34438,34443,34458,34437,34469,34457,34465,34471,34453,34456,34446,34461,34448,34452,34883,34884,34925,34933,34934,34930,34944,34929,34943,34927,34947,34942,34932,34940,35346,35911,35927,35963,36004,36003,36214,36216,36277,36279,36278,36561,36563,36862,36853,36866,36863,36859,36868,36860,36854,37078,37088,37081,37082,37091,37087,37093,37080,37083,37079,37084,37092,37200,37198,37199,37333,37346,37338,38492,38495,38588,39139,39647,39727,20095,20592,20586,20577,20574,20576,20563,20555,20573,20594,20552,20557,20545,20571,20554,20578,20501,20549,20575,20585,20587,20579,20580,20550,20544,20590,20595,20567,20561,20944,21099,21101,21100,21102,21206,21203,21293,21404,21877,21878,21820,21837,21840,21812,21802,21841,21858,21814,21813,21808,21842,21829,21772,21810,21861,21838,21817,21832,21805,21819,21824,21835,22282,22279,22523,22548,22498,22518,22492,22516,22528,22509,22525,22536,22520,22539,22515,22479,22535,22510,22499,22514,22501,22508,22497,22542,22524,22544,22503,22529,22540,22513,22505,22512,22541,22532,22876,23136,23128,23125,23143,23134,23096,23093,23149,23120,23135,23141,23148,23123,23140,23127,23107,23133,23122,23108,23131,23112,23182,23102,23117,23097,23116,23152,23145,23111,23121,23126,23106,23132,23410,23406,23489,23488,23641,23838,23819,23837,23834,23840,23820,23848,23821,23846,23845,23823,23856,23826,23843,23839,23854,24126,24116,24241,24244,24249,24242,24243,24374,24376,24475,24470,24479,24714,24720,24710,24766,24752,24762,24787,24788,24783,24804,24793,24797,24776,24753,24795,24759,24778,24767,24771,24781,24768,25394,25445,25482,25474,25469,25533,25502,25517,25501,25495,25515,25486,25455,25479,25488,25454,25519,25461,25500,25453,25518,25468,25508,25403,25503,25464,25477,25473,25489,25485,25456,25939,26061,26213,26209,26203,26201,26204,26210,26392,26745,26759,26768,26780,26733,26734,26798,26795,26966,26735,26787,26796,26793,26741,26740,26802,26767,26743,26770,26748,26731,26738,26794,26752,26737,26750,26779,26774,26763,26784,26761,26788,26744,26747,26769,26764,26762,26749,27446,27443,27447,27448,27537,27535,27533,27534,27532,27690,28096,28075,28084,28083,28276,28076,28137,28130,28087,28150,28116,28160,28104,28128,28127,28118,28094,28133,28124,28125,28123,28148,28106,28093,28141,28144,28090,28117,28098,28111,28105,28112,28146,28115,28157,28119,28109,28131,28091,28922,28941,28919,28951,28916,28940,28912,28932,28915,28944,28924,28927,28934,28947,28928,28920,28918,28939,28930,28942,29310,29307,29308,29311,29469,29463,29447,29457,29464,29450,29448,29439,29455,29470,29576,29686,29688,29685,29700,29697,29693,29703,29696,29690,29692,29695,29708,29707,29684,29704,30052,30051,30158,30162,30159,30155,30156,30161,30160,30351,30345,30419,30521,30511,30509,30513,30514,30516,30515,30525,30501,30523,30517,30792,30802,30793,30797,30794,30796,30758,30789,30800,31076,31079,31081,31082,31075,31083,31073,31163,31226,31224,31222,31223,31375,31380,31376,31541,31559,31540,31525,31536,31522,31524,31539,31512,31530,31517,31537,31531,31533,31535,31538,31544,31514,31523,31892,31896,31894,31907,32053,32061,32056,32054,32058,32069,32044,32041,32065,32071,32062,32063,32074,32059,32040,32611,32661,32668,32669,32667,32714,32715,32717,32720,32721,32711,32719,32713,32799,32798,32795,32839,32835,32840,33048,33061,33049,33051,33069,33055,33068,33054,33057,33045,33063,33053,33058,33297,33336,33331,33338,33332,33330,33396,33680,33699,33704,33677,33658,33651,33700,33652,33679,33665,33685,33689,33653,33684,33705,33661,33667,33676,33693,33691,33706,33675,33662,33701,33711,33672,33687,33712,33663,33702,33671,33710,33654,33690,34393,34390,34495,34487,34498,34497,34501,34490,34480,34504,34489,34483,34488,34508,34484,34491,34492,34499,34493,34494,34898,34953,34965,34984,34978,34986,34970,34961,34977,34975,34968,34983,34969,34971,34967,34980,34988,34956,34963,34958,35202,35286,35289,35285,35376,35367,35372,35358,35897,35899,35932,35933,35965,36005,36221,36219,36217,36284,36290,36281,36287,36289,36568,36574,36573,36572,36567,36576,36577,36900,36875,36881,36892,36876,36897,37103,37098,37104,37108,37106,37107,37076,37099,37100,37097,37206,37208,37210,37203,37205,37356,37364,37361,37363,37368,37348,37369,37354,37355,37367,37352,37358,38266,38278,38280,38524,38509,38507,38513,38511,38591,38762,38916,39141,39319,20635,20629,20628,20638,20619,20643,20611,20620,20622,20637,20584,20636,20626,20610,20615,20831,20948,21266,21265,21412,21415,21905,21928,21925,21933,21879,22085,21922,21907,21896,21903,21941,21889,21923,21906,21924,21885,21900,21926,21887,21909,21921,21902,22284,22569,22583,22553,22558,22567,22563,22568,22517,22600,22565,22556,22555,22579,22591,22582,22574,22585,22584,22573,22572,22587,22881,23215,23188,23199,23162,23202,23198,23160,23206,23164,23205,23212,23189,23214,23095,23172,23178,23191,23171,23179,23209,23163,23165,23180,23196,23183,23187,23197,23530,23501,23499,23508,23505,23498,23502,23564,23600,23863,23875,23915,23873,23883,23871,23861,23889,23886,23893,23859,23866,23890,23869,23857,23897,23874,23865,23881,23864,23868,23858,23862,23872,23877,24132,24129,24408,24486,24485,24491,24777,24761,24780,24802,24782,24772,24852,24818,24842,24854,24837,24821,24851,24824,24828,24830,24769,24835,24856,24861,24848,24831,24836,24843,25162,25492,25521,25520,25550,25573,25576,25583,25539,25757,25587,25546,25568,25590,25557,25586,25589,25697,25567,25534,25565,25564,25540,25560,25555,25538,25543,25548,25547,25544,25584,25559,25561,25906,25959,25962,25956,25948,25960,25957,25996,26013,26014,26030,26064,26066,26236,26220,26235,26240,26225,26233,26218,26226,26369,26892,26835,26884,26844,26922,26860,26858,26865,26895,26838,26871,26859,26852,26870,26899,26896,26867,26849,26887,26828,26888,26992,26804,26897,26863,26822,26900,26872,26832,26877,26876,26856,26891,26890,26903,26830,26824,26845,26846,26854,26868,26833,26886,26836,26857,26901,26917,26823,27449,27451,27455,27452,27540,27543,27545,27541,27581,27632,27634,27635,27696,28156,28230,28231,28191,28233,28296,28220,28221,28229,28258,28203,28223,28225,28253,28275,28188,28211,28235,28224,28241,28219,28163,28206,28254,28264,28252,28257,28209,28200,28256,28273,28267,28217,28194,28208,28243,28261,28199,28280,28260,28279,28245,28281,28242,28262,28213,28214,28250,28960,28958,28975,28923,28974,28977,28963,28965,28962,28978,28959,28968,28986,28955,29259,29274,29320,29321,29318,29317,29323,29458,29451,29488,29474,29489,29491,29479,29490,29485,29478,29475,29493,29452,29742,29740,29744,29739,29718,29722,29729,29741,29745,29732,29731,29725,29737,29728,29746,29947,29999,30063,30060,30183,30170,30177,30182,30173,30175,30180,30167,30357,30354,30426,30534,30535,30532,30541,30533,30538,30542,30539,30540,30686,30700,30816,30820,30821,30812,30829,30833,30826,30830,30832,30825,30824,30814,30818,31092,31091,31090,31088,31234,31242,31235,31244,31236,31385,31462,31460,31562,31547,31556,31560,31564,31566,31552,31576,31557,31906,31902,31912,31905,32088,32111,32099,32083,32086,32103,32106,32079,32109,32092,32107,32082,32084,32105,32081,32095,32078,32574,32575,32613,32614,32674,32672,32673,32727,32849,32847,32848,33022,32980,33091,33098,33106,33103,33095,33085,33101,33082,33254,33262,33271,33272,33273,33284,33340,33341,33343,33397,33595,33743,33785,33827,33728,33768,33810,33767,33764,33788,33782,33808,33734,33736,33771,33763,33727,33793,33757,33765,33752,33791,33761,33739,33742,33750,33781,33737,33801,33807,33758,33809,33798,33730,33779,33749,33786,33735,33745,33770,33811,33731,33772,33774,33732,33787,33751,33762,33819,33755,33790,34520,34530,34534,34515,34531,34522,34538,34525,34539,34524,34540,34537,34519,34536,34513,34888,34902,34901,35002,35031,35001,35000,35008,35006,34998,35004,34999,35005,34994,35073,35017,35221,35224,35223,35293,35290,35291,35406,35405,35385,35417,35392,35415,35416,35396,35397,35410,35400,35409,35402,35404,35407,35935,35969,35968,36026,36030,36016,36025,36021,36228,36224,36233,36312,36307,36301,36295,36310,36316,36303,36309,36313,36296,36311,36293,36591,36599,36602,36601,36582,36590,36581,36597,36583,36584,36598,36587,36593,36588,36596,36585,36909,36916,36911,37126,37164,37124,37119,37116,37128,37113,37115,37121,37120,37127,37125,37123,37217,37220,37215,37218,37216,37377,37386,37413,37379,37402,37414,37391,37388,37376,37394,37375,37373,37382,37380,37415,37378,37404,37412,37401,37399,37381,37398,38267,38285,38284,38288,38535,38526,38536,38537,38531,38528,38594,38600,38595,38641,38640,38764,38768,38766,38919,39081,39147,40166,40697,20099,20100,20150,20669,20671,20678,20654,20676,20682,20660,20680,20674,20656,20673,20666,20657,20683,20681,20662,20664,20951,21114,21112,21115,21116,21955,21979,21964,21968,21963,21962,21981,21952,21972,21956,21993,21951,21970,21901,21967,21973,21986,21974,21960,22002,21965,21977,21954,22292,22611,22632,22628,22607,22605,22601,22639,22613,22606,22621,22617,22629,22619,22589,22627,22641,22780,23239,23236,23243,23226,23224,23217,23221,23216,23231,23240,23227,23238,23223,23232,23242,23220,23222,23245,23225,23184,23510,23512,23513,23583,23603,23921,23907,23882,23909,23922,23916,23902,23912,23911,23906,24048,24143,24142,24138,24141,24139,24261,24268,24262,24267,24263,24384,24495,24493,24823,24905,24906,24875,24901,24886,24882,24878,24902,24879,24911,24873,24896,25120,37224,25123,25125,25124,25541,25585,25579,25616,25618,25609,25632,25636,25651,25667,25631,25621,25624,25657,25655,25634,25635,25612,25638,25648,25640,25665,25653,25647,25610,25626,25664,25637,25639,25611,25575,25627,25646,25633,25614,25967,26002,26067,26246,26252,26261,26256,26251,26250,26265,26260,26232,26400,26982,26975,26936,26958,26978,26993,26943,26949,26986,26937,26946,26967,26969,27002,26952,26953,26933,26988,26931,26941,26981,26864,27000,26932,26985,26944,26991,26948,26998,26968,26945,26996,26956,26939,26955,26935,26972,26959,26961,26930,26962,26927,27003,26940,27462,27461,27459,27458,27464,27457,27547,64013,27643,27644,27641,27639,27640,28315,28374,28360,28303,28352,28319,28307,28308,28320,28337,28345,28358,28370,28349,28353,28318,28361,28343,28336,28365,28326,28367,28338,28350,28355,28380,28376,28313,28306,28302,28301,28324,28321,28351,28339,28368,28362,28311,28334,28323,28999,29012,29010,29027,29024,28993,29021,29026,29042,29048,29034,29025,28994,29016,28995,29003,29040,29023,29008,29011,28996,29005,29018,29263,29325,29324,29329,29328,29326,29500,29506,29499,29498,29504,29514,29513,29764,29770,29771,29778,29777,29783,29760,29775,29776,29774,29762,29766,29773,29780,29921,29951,29950,29949,29981,30073,30071,27011,30191,30223,30211,30199,30206,30204,30201,30200,30224,30203,30198,30189,30197,30205,30361,30389,30429,30549,30559,30560,30546,30550,30554,30569,30567,30548,30553,30573,30688,30855,30874,30868,30863,30852,30869,30853,30854,30881,30851,30841,30873,30848,30870,30843,31100,31106,31101,31097,31249,31256,31257,31250,31255,31253,31266,31251,31259,31248,31395,31394,31390,31467,31590,31588,31597,31604,31593,31602,31589,31603,31601,31600,31585,31608,31606,31587,31922,31924,31919,32136,32134,32128,32141,32127,32133,32122,32142,32123,32131,32124,32140,32148,32132,32125,32146,32621,32619,32615,32616,32620,32678,32677,32679,32731,32732,32801,33124,33120,33143,33116,33129,33115,33122,33138,26401,33118,33142,33127,33135,33092,33121,33309,33353,33348,33344,33346,33349,34033,33855,33878,33910,33913,33935,33933,33893,33873,33856,33926,33895,33840,33869,33917,33882,33881,33908,33907,33885,34055,33886,33847,33850,33844,33914,33859,33912,33842,33861,33833,33753,33867,33839,33858,33837,33887,33904,33849,33870,33868,33874,33903,33989,33934,33851,33863,33846,33843,33896,33918,33860,33835,33888,33876,33902,33872,34571,34564,34551,34572,34554,34518,34549,34637,34552,34574,34569,34561,34550,34573,34565,35030,35019,35021,35022,35038,35035,35034,35020,35024,35205,35227,35295,35301,35300,35297,35296,35298,35292,35302,35446,35462,35455,35425,35391,35447,35458,35460,35445,35459,35457,35444,35450,35900,35915,35914,35941,35940,35942,35974,35972,35973,36044,36200,36201,36241,36236,36238,36239,36237,36243,36244,36240,36242,36336,36320,36332,36337,36334,36304,36329,36323,36322,36327,36338,36331,36340,36614,36607,36609,36608,36613,36615,36616,36610,36619,36946,36927,36932,36937,36925,37136,37133,37135,37137,37142,37140,37131,37134,37230,37231,37448,37458,37424,37434,37478,37427,37477,37470,37507,37422,37450,37446,37485,37484,37455,37472,37479,37487,37430,37473,37488,37425,37460,37475,37456,37490,37454,37459,37452,37462,37426,38303,38300,38302,38299,38546,38547,38545,38551,38606,38650,38653,38648,38645,38771,38775,38776,38770,38927,38925,38926,39084,39158,39161,39343,39346,39344,39349,39597,39595,39771,40170,40173,40167,40576,40701,20710,20692,20695,20712,20723,20699,20714,20701,20708,20691,20716,20720,20719,20707,20704,20952,21120,21121,21225,21227,21296,21420,22055,22037,22028,22034,22012,22031,22044,22017,22035,22018,22010,22045,22020,22015,22009,22665,22652,22672,22680,22662,22657,22655,22644,22667,22650,22663,22673,22670,22646,22658,22664,22651,22676,22671,22782,22891,23260,23278,23269,23253,23274,23258,23277,23275,23283,23266,23264,23259,23276,23262,23261,23257,23272,23263,23415,23520,23523,23651,23938,23936,23933,23942,23930,23937,23927,23946,23945,23944,23934,23932,23949,23929,23935,24152,24153,24147,24280,24273,24279,24270,24284,24277,24281,24274,24276,24388,24387,24431,24502,24876,24872,24897,24926,24945,24947,24914,24915,24946,24940,24960,24948,24916,24954,24923,24933,24891,24938,24929,24918,25129,25127,25131,25643,25677,25691,25693,25716,25718,25714,25715,25725,25717,25702,25766,25678,25730,25694,25692,25675,25683,25696,25680,25727,25663,25708,25707,25689,25701,25719,25971,26016,26273,26272,26271,26373,26372,26402,27057,27062,27081,27040,27086,27030,27056,27052,27068,27025,27033,27022,27047,27021,27049,27070,27055,27071,27076,27069,27044,27092,27065,27082,27034,27087,27059,27027,27050,27041,27038,27097,27031,27024,27074,27061,27045,27078,27466,27469,27467,27550,27551,27552,27587,27588,27646,28366,28405,28401,28419,28453,28408,28471,28411,28462,28425,28494,28441,28442,28455,28440,28475,28434,28397,28426,28470,28531,28409,28398,28461,28480,28464,28476,28469,28395,28423,28430,28483,28421,28413,28406,28473,28444,28412,28474,28447,28429,28446,28424,28449,29063,29072,29065,29056,29061,29058,29071,29051,29062,29057,29079,29252,29267,29335,29333,29331,29507,29517,29521,29516,29794,29811,29809,29813,29810,29799,29806,29952,29954,29955,30077,30096,30230,30216,30220,30229,30225,30218,30228,30392,30593,30588,30597,30594,30574,30592,30575,30590,30595,30898,30890,30900,30893,30888,30846,30891,30878,30885,30880,30892,30882,30884,31128,31114,31115,31126,31125,31124,31123,31127,31112,31122,31120,31275,31306,31280,31279,31272,31270,31400,31403,31404,31470,31624,31644,31626,31633,31632,31638,31629,31628,31643,31630,31621,31640,21124,31641,31652,31618,31931,31935,31932,31930,32167,32183,32194,32163,32170,32193,32192,32197,32157,32206,32196,32198,32203,32204,32175,32185,32150,32188,32159,32166,32174,32169,32161,32201,32627,32738,32739,32741,32734,32804,32861,32860,33161,33158,33155,33159,33165,33164,33163,33301,33943,33956,33953,33951,33978,33998,33986,33964,33966,33963,33977,33972,33985,33997,33962,33946,33969,34000,33949,33959,33979,33954,33940,33991,33996,33947,33961,33967,33960,34006,33944,33974,33999,33952,34007,34004,34002,34011,33968,33937,34401,34611,34595,34600,34667,34624,34606,34590,34593,34585,34587,34627,34604,34625,34622,34630,34592,34610,34602,34605,34620,34578,34618,34609,34613,34626,34598,34599,34616,34596,34586,34608,34577,35063,35047,35057,35058,35066,35070,35054,35068,35062,35067,35056,35052,35051,35229,35233,35231,35230,35305,35307,35304,35499,35481,35467,35474,35471,35478,35901,35944,35945,36053,36047,36055,36246,36361,36354,36351,36365,36349,36362,36355,36359,36358,36357,36350,36352,36356,36624,36625,36622,36621,37155,37148,37152,37154,37151,37149,37146,37156,37153,37147,37242,37234,37241,37235,37541,37540,37494,37531,37498,37536,37524,37546,37517,37542,37530,37547,37497,37527,37503,37539,37614,37518,37506,37525,37538,37501,37512,37537,37514,37510,37516,37529,37543,37502,37511,37545,37533,37515,37421,38558,38561,38655,38744,38781,38778,38782,38787,38784,38786,38779,38788,38785,38783,38862,38861,38934,39085,39086,39170,39168,39175,39325,39324,39363,39353,39355,39354,39362,39357,39367,39601,39651,39655,39742,39743,39776,39777,39775,40177,40178,40181,40615,20735,20739,20784,20728,20742,20743,20726,20734,20747,20748,20733,20746,21131,21132,21233,21231,22088,22082,22092,22069,22081,22090,22089,22086,22104,22106,22080,22067,22077,22060,22078,22072,22058,22074,22298,22699,22685,22705,22688,22691,22703,22700,22693,22689,22783,23295,23284,23293,23287,23286,23299,23288,23298,23289,23297,23303,23301,23311,23655,23961,23959,23967,23954,23970,23955,23957,23968,23964,23969,23962,23966,24169,24157,24160,24156,32243,24283,24286,24289,24393,24498,24971,24963,24953,25009,25008,24994,24969,24987,24979,25007,25005,24991,24978,25002,24993,24973,24934,25011,25133,25710,25712,25750,25760,25733,25751,25756,25743,25739,25738,25740,25763,25759,25704,25777,25752,25974,25978,25977,25979,26034,26035,26293,26288,26281,26290,26295,26282,26287,27136,27142,27159,27109,27128,27157,27121,27108,27168,27135,27116,27106,27163,27165,27134,27175,27122,27118,27156,27127,27111,27200,27144,27110,27131,27149,27132,27115,27145,27140,27160,27173,27151,27126,27174,27143,27124,27158,27473,27557,27555,27554,27558,27649,27648,27647,27650,28481,28454,28542,28551,28614,28562,28557,28553,28556,28514,28495,28549,28506,28566,28534,28524,28546,28501,28530,28498,28496,28503,28564,28563,28509,28416,28513,28523,28541,28519,28560,28499,28555,28521,28543,28565,28515,28535,28522,28539,29106,29103,29083,29104,29088,29082,29097,29109,29085,29093,29086,29092,29089,29098,29084,29095,29107,29336,29338,29528,29522,29534,29535,29536,29533,29531,29537,29530,29529,29538,29831,29833,29834,29830,29825,29821,29829,29832,29820,29817,29960,29959,30078,30245,30238,30233,30237,30236,30243,30234,30248,30235,30364,30365,30366,30363,30605,30607,30601,30600,30925,30907,30927,30924,30929,30926,30932,30920,30915,30916,30921,31130,31137,31136,31132,31138,31131,27510,31289,31410,31412,31411,31671,31691,31678,31660,31694,31663,31673,31690,31669,31941,31944,31948,31947,32247,32219,32234,32231,32215,32225,32259,32250,32230,32246,32241,32240,32238,32223,32630,32684,32688,32685,32749,32747,32746,32748,32742,32744,32868,32871,33187,33183,33182,33173,33186,33177,33175,33302,33359,33363,33362,33360,33358,33361,34084,34107,34063,34048,34089,34062,34057,34061,34079,34058,34087,34076,34043,34091,34042,34056,34060,34036,34090,34034,34069,34039,34027,34035,34044,34066,34026,34025,34070,34046,34088,34077,34094,34050,34045,34078,34038,34097,34086,34023,34024,34032,34031,34041,34072,34080,34096,34059,34073,34095,34402,34646,34659,34660,34679,34785,34675,34648,34644,34651,34642,34657,34650,34641,34654,34669,34666,34640,34638,34655,34653,34671,34668,34682,34670,34652,34661,34639,34683,34677,34658,34663,34665,34906,35077,35084,35092,35083,35095,35096,35097,35078,35094,35089,35086,35081,35234,35236,35235,35309,35312,35308,35535,35526,35512,35539,35537,35540,35541,35515,35543,35518,35520,35525,35544,35523,35514,35517,35545,35902,35917,35983,36069,36063,36057,36072,36058,36061,36071,36256,36252,36257,36251,36384,36387,36389,36388,36398,36373,36379,36374,36369,36377,36390,36391,36372,36370,36376,36371,36380,36375,36378,36652,36644,36632,36634,36640,36643,36630,36631,36979,36976,36975,36967,36971,37167,37163,37161,37162,37170,37158,37166,37253,37254,37258,37249,37250,37252,37248,37584,37571,37572,37568,37593,37558,37583,37617,37599,37592,37609,37591,37597,37580,37615,37570,37608,37578,37576,37582,37606,37581,37589,37577,37600,37598,37607,37585,37587,37557,37601,37574,37556,38268,38316,38315,38318,38320,38564,38562,38611,38661,38664,38658,38746,38794,38798,38792,38864,38863,38942,38941,38950,38953,38952,38944,38939,38951,39090,39176,39162,39185,39188,39190,39191,39189,39388,39373,39375,39379,39380,39374,39369,39382,39384,39371,39383,39372,39603,39660,39659,39667,39666,39665,39750,39747,39783,39796,39793,39782,39798,39797,39792,39784,39780,39788,40188,40186,40189,40191,40183,40199,40192,40185,40187,40200,40197,40196,40579,40659,40719,40720,20764,20755,20759,20762,20753,20958,21300,21473,22128,22112,22126,22131,22118,22115,22125,22130,22110,22135,22300,22299,22728,22717,22729,22719,22714,22722,22716,22726,23319,23321,23323,23329,23316,23315,23312,23318,23336,23322,23328,23326,23535,23980,23985,23977,23975,23989,23984,23982,23978,23976,23986,23981,23983,23988,24167,24168,24166,24175,24297,24295,24294,24296,24293,24395,24508,24989,25000,24982,25029,25012,25030,25025,25036,25018,25023,25016,24972,25815,25814,25808,25807,25801,25789,25737,25795,25819,25843,25817,25907,25983,25980,26018,26312,26302,26304,26314,26315,26319,26301,26299,26298,26316,26403,27188,27238,27209,27239,27186,27240,27198,27229,27245,27254,27227,27217,27176,27226,27195,27199,27201,27242,27236,27216,27215,27220,27247,27241,27232,27196,27230,27222,27221,27213,27214,27206,27477,27476,27478,27559,27562,27563,27592,27591,27652,27651,27654,28589,28619,28579,28615,28604,28622,28616,28510,28612,28605,28574,28618,28584,28676,28581,28590,28602,28588,28586,28623,28607,28600,28578,28617,28587,28621,28591,28594,28592,29125,29122,29119,29112,29142,29120,29121,29131,29140,29130,29127,29135,29117,29144,29116,29126,29146,29147,29341,29342,29545,29542,29543,29548,29541,29547,29546,29823,29850,29856,29844,29842,29845,29857,29963,30080,30255,30253,30257,30269,30259,30268,30261,30258,30256,30395,30438,30618,30621,30625,30620,30619,30626,30627,30613,30617,30615,30941,30953,30949,30954,30942,30947,30939,30945,30946,30957,30943,30944,31140,31300,31304,31303,31414,31416,31413,31409,31415,31710,31715,31719,31709,31701,31717,31706,31720,31737,31700,31722,31714,31708,31723,31704,31711,31954,31956,31959,31952,31953,32274,32289,32279,32268,32287,32288,32275,32270,32284,32277,32282,32290,32267,32271,32278,32269,32276,32293,32292,32579,32635,32636,32634,32689,32751,32810,32809,32876,33201,33190,33198,33209,33205,33195,33200,33196,33204,33202,33207,33191,33266,33365,33366,33367,34134,34117,34155,34125,34131,34145,34136,34112,34118,34148,34113,34146,34116,34129,34119,34147,34110,34139,34161,34126,34158,34165,34133,34151,34144,34188,34150,34141,34132,34149,34156,34403,34405,34404,34715,34703,34711,34707,34706,34696,34689,34710,34712,34681,34695,34723,34693,34704,34705,34717,34692,34708,34716,34714,34697,35102,35110,35120,35117,35118,35111,35121,35106,35113,35107,35119,35116,35103,35313,35552,35554,35570,35572,35573,35549,35604,35556,35551,35568,35528,35550,35553,35560,35583,35567,35579,35985,35986,35984,36085,36078,36081,36080,36083,36204,36206,36261,36263,36403,36414,36408,36416,36421,36406,36412,36413,36417,36400,36415,36541,36662,36654,36661,36658,36665,36663,36660,36982,36985,36987,36998,37114,37171,37173,37174,37267,37264,37265,37261,37263,37671,37662,37640,37663,37638,37647,37754,37688,37692,37659,37667,37650,37633,37702,37677,37646,37645,37579,37661,37626,37669,37651,37625,37623,37684,37634,37668,37631,37673,37689,37685,37674,37652,37644,37643,37630,37641,37632,37627,37654,38332,38349,38334,38329,38330,38326,38335,38325,38333,38569,38612,38667,38674,38672,38809,38807,38804,38896,38904,38965,38959,38962,39204,39199,39207,39209,39326,39406,39404,39397,39396,39408,39395,39402,39401,39399,39609,39615,39604,39611,39670,39674,39673,39671,39731,39808,39813,39815,39804,39806,39803,39810,39827,39826,39824,39802,39829,39805,39816,40229,40215,40224,40222,40212,40233,40221,40216,40226,40208,40217,40223,40584,40582,40583,40622,40621,40661,40662,40698,40722,40765,20774,20773,20770,20772,20768,20777,21236,22163,22156,22157,22150,22148,22147,22142,22146,22143,22145,22742,22740,22735,22738,23341,23333,23346,23331,23340,23335,23334,23343,23342,23419,23537,23538,23991,24172,24170,24510,24507,25027,25013,25020,25063,25056,25061,25060,25064,25054,25839,25833,25827,25835,25828,25832,25985,25984,26038,26074,26322,27277,27286,27265,27301,27273,27295,27291,27297,27294,27271,27283,27278,27285,27267,27304,27300,27281,27263,27302,27290,27269,27276,27282,27483,27565,27657,28620,28585,28660,28628,28643,28636,28653,28647,28646,28638,28658,28637,28642,28648,29153,29169,29160,29170,29156,29168,29154,29555,29550,29551,29847,29874,29867,29840,29866,29869,29873,29861,29871,29968,29969,29970,29967,30084,30275,30280,30281,30279,30372,30441,30645,30635,30642,30647,30646,30644,30641,30632,30704,30963,30973,30978,30971,30972,30962,30981,30969,30974,30980,31147,31144,31324,31323,31318,31320,31316,31322,31422,31424,31425,31749,31759,31730,31744,31743,31739,31758,31732,31755,31731,31746,31753,31747,31745,31736,31741,31750,31728,31729,31760,31754,31976,32301,32316,32322,32307,38984,32312,32298,32329,32320,32327,32297,32332,32304,32315,32310,32324,32314,32581,32639,32638,32637,32756,32754,32812,33211,33220,33228,33226,33221,33223,33212,33257,33371,33370,33372,34179,34176,34191,34215,34197,34208,34187,34211,34171,34212,34202,34206,34167,34172,34185,34209,34170,34168,34135,34190,34198,34182,34189,34201,34205,34177,34210,34178,34184,34181,34169,34166,34200,34192,34207,34408,34750,34730,34733,34757,34736,34732,34745,34741,34748,34734,34761,34755,34754,34764,34743,34735,34756,34762,34740,34742,34751,34744,34749,34782,34738,35125,35123,35132,35134,35137,35154,35127,35138,35245,35247,35246,35314,35315,35614,35608,35606,35601,35589,35595,35618,35599,35602,35605,35591,35597,35592,35590,35612,35603,35610,35919,35952,35954,35953,35951,35989,35988,36089,36207,36430,36429,36435,36432,36428,36423,36675,36672,36997,36990,37176,37274,37282,37275,37273,37279,37281,37277,37280,37793,37763,37807,37732,37718,37703,37756,37720,37724,37750,37705,37712,37713,37728,37741,37775,37708,37738,37753,37719,37717,37714,37711,37745,37751,37755,37729,37726,37731,37735,37760,37710,37721,38343,38336,38345,38339,38341,38327,38574,38576,38572,38688,38687,38680,38685,38681,38810,38817,38812,38814,38813,38869,38868,38897,38977,38980,38986,38985,38981,38979,39205,39211,39212,39210,39219,39218,39215,39213,39217,39216,39320,39331,39329,39426,39418,39412,39415,39417,39416,39414,39419,39421,39422,39420,39427,39614,39678,39677,39681,39676,39752,39834,39848,39838,39835,39846,39841,39845,39844,39814,39842,39840,39855,40243,40257,40295,40246,40238,40239,40241,40248,40240,40261,40258,40259,40254,40247,40256,40253,32757,40237,40586,40585,40589,40624,40648,40666,40699,40703,40740,40739,40738,40788,40864,20785,20781,20782,22168,22172,22167,22170,22173,22169,22896,23356,23657,23658,24000,24173,24174,25048,25055,25069,25070,25073,25066,25072,25067,25046,25065,25855,25860,25853,25848,25857,25859,25852,26004,26075,26330,26331,26328,27333,27321,27325,27361,27334,27322,27318,27319,27335,27316,27309,27486,27593,27659,28679,28684,28685,28673,28677,28692,28686,28671,28672,28667,28710,28668,28663,28682,29185,29183,29177,29187,29181,29558,29880,29888,29877,29889,29886,29878,29883,29890,29972,29971,30300,30308,30297,30288,30291,30295,30298,30374,30397,30444,30658,30650,30975,30988,30995,30996,30985,30992,30994,30993,31149,31148,31327,31772,31785,31769,31776,31775,31789,31773,31782,31784,31778,31781,31792,32348,32336,32342,32355,32344,32354,32351,32337,32352,32343,32339,32693,32691,32759,32760,32885,33233,33234,33232,33375,33374,34228,34246,34240,34243,34242,34227,34229,34237,34247,34244,34239,34251,34254,34248,34245,34225,34230,34258,34340,34232,34231,34238,34409,34791,34790,34786,34779,34795,34794,34789,34783,34803,34788,34772,34780,34771,34797,34776,34787,34724,34775,34777,34817,34804,34792,34781,35155,35147,35151,35148,35142,35152,35153,35145,35626,35623,35619,35635,35632,35637,35655,35631,35644,35646,35633,35621,35639,35622,35638,35630,35620,35643,35645,35642,35906,35957,35993,35992,35991,36094,36100,36098,36096,36444,36450,36448,36439,36438,36446,36453,36455,36443,36442,36449,36445,36457,36436,36678,36679,36680,36683,37160,37178,37179,37182,37288,37285,37287,37295,37290,37813,37772,37778,37815,37787,37789,37769,37799,37774,37802,37790,37798,37781,37768,37785,37791,37773,37809,37777,37810,37796,37800,37812,37795,37797,38354,38355,38353,38579,38615,38618,24002,38623,38616,38621,38691,38690,38693,38828,38830,38824,38827,38820,38826,38818,38821,38871,38873,38870,38872,38906,38992,38993,38994,39096,39233,39228,39226,39439,39435,39433,39437,39428,39441,39434,39429,39431,39430,39616,39644,39688,39684,39685,39721,39733,39754,39756,39755,39879,39878,39875,39871,39873,39861,39864,39891,39862,39876,39865,39869,40284,40275,40271,40266,40283,40267,40281,40278,40268,40279,40274,40276,40287,40280,40282,40590,40588,40671,40705,40704,40726,40741,40747,40746,40745,40744,40780,40789,20788,20789,21142,21239,21428,22187,22189,22182,22183,22186,22188,22746,22749,22747,22802,23357,23358,23359,24003,24176,24511,25083,25863,25872,25869,25865,25868,25870,25988,26078,26077,26334,27367,27360,27340,27345,27353,27339,27359,27356,27344,27371,27343,27341,27358,27488,27568,27660,28697,28711,28704,28694,28715,28705,28706,28707,28713,28695,28708,28700,28714,29196,29194,29191,29186,29189,29349,29350,29348,29347,29345,29899,29893,29879,29891,29974,30304,30665,30666,30660,30705,31005,31003,31009,31004,30999,31006,31152,31335,31336,31795,31804,31801,31788,31803,31980,31978,32374,32373,32376,32368,32375,32367,32378,32370,32372,32360,32587,32586,32643,32646,32695,32765,32766,32888,33239,33237,33380,33377,33379,34283,34289,34285,34265,34273,34280,34266,34263,34284,34290,34296,34264,34271,34275,34268,34257,34288,34278,34287,34270,34274,34816,34810,34819,34806,34807,34825,34828,34827,34822,34812,34824,34815,34826,34818,35170,35162,35163,35159,35169,35164,35160,35165,35161,35208,35255,35254,35318,35664,35656,35658,35648,35667,35670,35668,35659,35669,35665,35650,35666,35671,35907,35959,35958,35994,36102,36103,36105,36268,36266,36269,36267,36461,36472,36467,36458,36463,36475,36546,36690,36689,36687,36688,36691,36788,37184,37183,37296,37293,37854,37831,37839,37826,37850,37840,37881,37868,37836,37849,37801,37862,37834,37844,37870,37859,37845,37828,37838,37824,37842,37863,38269,38362,38363,38625,38697,38699,38700,38696,38694,38835,38839,38838,38877,38878,38879,39004,39001,39005,38999,39103,39101,39099,39102,39240,39239,39235,39334,39335,39450,39445,39461,39453,39460,39451,39458,39456,39463,39459,39454,39452,39444,39618,39691,39690,39694,39692,39735,39914,39915,39904,39902,39908,39910,39906,39920,39892,39895,39916,39900,39897,39909,39893,39905,39898,40311,40321,40330,40324,40328,40305,40320,40312,40326,40331,40332,40317,40299,40308,40309,40304,40297,40325,40307,40315,40322,40303,40313,40319,40327,40296,40596,40593,40640,40700,40749,40768,40769,40781,40790,40791,40792,21303,22194,22197,22195,22755,23365,24006,24007,24302,24303,24512,24513,25081,25879,25878,25877,25875,26079,26344,26339,26340,27379,27376,27370,27368,27385,27377,27374,27375,28732,28725,28719,28727,28724,28721,28738,28728,28735,28730,28729,28736,28731,28723,28737,29203,29204,29352,29565,29564,29882,30379,30378,30398,30445,30668,30670,30671,30669,30706,31013,31011,31015,31016,31012,31017,31154,31342,31340,31341,31479,31817,31816,31818,31815,31813,31982,32379,32382,32385,32384,32698,32767,32889,33243,33241,33291,33384,33385,34338,34303,34305,34302,34331,34304,34294,34308,34313,34309,34316,34301,34841,34832,34833,34839,34835,34838,35171,35174,35257,35319,35680,35690,35677,35688,35683,35685,35687,35693,36270,36486,36488,36484,36697,36694,36695,36693,36696,36698,37005,37187,37185,37303,37301,37298,37299,37899,37907,37883,37920,37903,37908,37886,37909,37904,37928,37913,37901,37877,37888,37879,37895,37902,37910,37906,37882,37897,37880,37898,37887,37884,37900,37878,37905,37894,38366,38368,38367,38702,38703,38841,38843,38909,38910,39008,39010,39011,39007,39105,39106,39248,39246,39257,39244,39243,39251,39474,39476,39473,39468,39466,39478,39465,39470,39480,39469,39623,39626,39622,39696,39698,39697,39947,39944,39927,39941,39954,39928,40000,39943,39950,39942,39959,39956,39945,40351,40345,40356,40349,40338,40344,40336,40347,40352,40340,40348,40362,40343,40353,40346,40354,40360,40350,40355,40383,40361,40342,40358,40359,40601,40603,40602,40677,40676,40679,40678,40752,40750,40795,40800,40798,40797,40793,40849,20794,20793,21144,21143,22211,22205,22206,23368,23367,24011,24015,24305,25085,25883,27394,27388,27395,27384,27392,28739,28740,28746,28744,28745,28741,28742,29213,29210,29209,29566,29975,30314,30672,31021,31025,31023,31828,31827,31986,32394,32391,32392,32395,32390,32397,32589,32699,32816,33245,34328,34346,34342,34335,34339,34332,34329,34343,34350,34337,34336,34345,34334,34341,34857,34845,34843,34848,34852,34844,34859,34890,35181,35177,35182,35179,35322,35705,35704,35653,35706,35707,36112,36116,36271,36494,36492,36702,36699,36701,37190,37188,37189,37305,37951,37947,37942,37929,37949,37948,37936,37945,37930,37943,37932,37952,37937,38373,38372,38371,38709,38714,38847,38881,39012,39113,39110,39104,39256,39254,39481,39485,39494,39492,39490,39489,39482,39487,39629,39701,39703,39704,39702,39738,39762,39979,39965,39964,39980,39971,39976,39977,39972,39969,40375,40374,40380,40385,40391,40394,40399,40382,40389,40387,40379,40373,40398,40377,40378,40364,40392,40369,40365,40396,40371,40397,40370,40570,40604,40683,40686,40685,40731,40728,40730,40753,40782,40805,40804,40850,20153,22214,22213,22219,22897,23371,23372,24021,24017,24306,25889,25888,25894,25890,27403,27400,27401,27661,28757,28758,28759,28754,29214,29215,29353,29567,29912,29909,29913,29911,30317,30381,31029,31156,31344,31345,31831,31836,31833,31835,31834,31988,31985,32401,32591,32647,33246,33387,34356,34357,34355,34348,34354,34358,34860,34856,34854,34858,34853,35185,35263,35262,35323,35710,35716,35714,35718,35717,35711,36117,36501,36500,36506,36498,36496,36502,36503,36704,36706,37191,37964,37968,37962,37963,37967,37959,37957,37960,37961,37958,38719,38883,39018,39017,39115,39252,39259,39502,39507,39508,39500,39503,39496,39498,39497,39506,39504,39632,39705,39723,39739,39766,39765,40006,40008,39999,40004,39993,39987,40001,39996,39991,39988,39986,39997,39990,40411,40402,40414,40410,40395,40400,40412,40401,40415,40425,40409,40408,40406,40437,40405,40413,40630,40688,40757,40755,40754,40770,40811,40853,40866,20797,21145,22760,22759,22898,23373,24024,34863,24399,25089,25091,25092,25897,25893,26006,26347,27409,27410,27407,27594,28763,28762,29218,29570,29569,29571,30320,30676,31847,31846,32405,33388,34362,34368,34361,34364,34353,34363,34366,34864,34866,34862,34867,35190,35188,35187,35326,35724,35726,35723,35720,35909,36121,36504,36708,36707,37308,37986,37973,37981,37975,37982,38852,38853,38912,39510,39513,39710,39711,39712,40018,40024,40016,40010,40013,40011,40021,40025,40012,40014,40443,40439,40431,40419,40427,40440,40420,40438,40417,40430,40422,40434,40432,40418,40428,40436,40435,40424,40429,40642,40656,40690,40691,40710,40732,40760,40759,40758,40771,40783,40817,40816,40814,40815,22227,22221,23374,23661,25901,26349,26350,27411,28767,28769,28765,28768,29219,29915,29925,30677,31032,31159,31158,31850,32407,32649,33389,34371,34872,34871,34869,34891,35732,35733,36510,36511,36512,36509,37310,37309,37314,37995,37992,37993,38629,38726,38723,38727,38855,38885,39518,39637,39769,40035,40039,40038,40034,40030,40032,40450,40446,40455,40451,40454,40453,40448,40449,40457,40447,40445,40452,40608,40734,40774,40820,40821,40822,22228,25902,26040,27416,27417,27415,27418,28770,29222,29354,30680,30681,31033,31849,31851,31990,32410,32408,32411,32409,33248,33249,34374,34375,34376,35193,35194,35196,35195,35327,35736,35737,36517,36516,36515,37998,37997,37999,38001,38003,38729,39026,39263,40040,40046,40045,40459,40461,40464,40463,40466,40465,40609,40693,40713,40775,40824,40827,40826,40825,22302,28774,31855,34876,36274,36518,37315,38004,38008,38006,38005,39520,40052,40051,40049,40053,40468,40467,40694,40714,40868,28776,28773,31991,34410,34878,34877,34879,35742,35996,36521,36553,38731,39027,39028,39116,39265,39339,39524,39526,39527,39716,40469,40471,40776,25095,27422,29223,34380,36520,38018,38016,38017,39529,39528,39726,40473,29225,34379,35743,38019,40057,40631,30325,39531,40058,40477,28777,28778,40612,40830,40777,40856,30849,37561,35023,22715,24658,31911,23290,9556,9574,9559,9568,9580,9571,9562,9577,9565,9554,9572,9557,9566,9578,9569,9560,9575,9563,9555,9573,9558,9567,9579,9570,9561,9576,9564,9553,9552,9581,9582,9584,9583,65517,132423,37595,132575,147397,34124,17077,29679,20917,13897,149826,166372,37700,137691,33518,146632,30780,26436,25311,149811,166314,131744,158643,135941,20395,140525,20488,159017,162436,144896,150193,140563,20521,131966,24484,131968,131911,28379,132127,20605,20737,13434,20750,39020,14147,33814,149924,132231,20832,144308,20842,134143,139516,131813,140592,132494,143923,137603,23426,34685,132531,146585,20914,20920,40244,20937,20943,20945,15580,20947,150182,20915,20962,21314,20973,33741,26942,145197,24443,21003,21030,21052,21173,21079,21140,21177,21189,31765,34114,21216,34317,158483,21253,166622,21833,28377,147328,133460,147436,21299,21316,134114,27851,136998,26651,29653,24650,16042,14540,136936,29149,17570,21357,21364,165547,21374,21375,136598,136723,30694,21395,166555,21408,21419,21422,29607,153458,16217,29596,21441,21445,27721,20041,22526,21465,15019,134031,21472,147435,142755,21494,134263,21523,28793,21803,26199,27995,21613,158547,134516,21853,21647,21668,18342,136973,134877,15796,134477,166332,140952,21831,19693,21551,29719,21894,21929,22021,137431,147514,17746,148533,26291,135348,22071,26317,144010,26276,26285,22093,22095,30961,22257,38791,21502,22272,22255,22253,166758,13859,135759,22342,147877,27758,28811,22338,14001,158846,22502,136214,22531,136276,148323,22566,150517,22620,22698,13665,22752,22748,135740,22779,23551,22339,172368,148088,37843,13729,22815,26790,14019,28249,136766,23076,21843,136850,34053,22985,134478,158849,159018,137180,23001,137211,137138,159142,28017,137256,136917,23033,159301,23211,23139,14054,149929,23159,14088,23190,29797,23251,159649,140628,15749,137489,14130,136888,24195,21200,23414,25992,23420,162318,16388,18525,131588,23509,24928,137780,154060,132517,23539,23453,19728,23557,138052,23571,29646,23572,138405,158504,23625,18653,23685,23785,23791,23947,138745,138807,23824,23832,23878,138916,23738,24023,33532,14381,149761,139337,139635,33415,14390,15298,24110,27274,24181,24186,148668,134355,21414,20151,24272,21416,137073,24073,24308,164994,24313,24315,14496,24316,26686,37915,24333,131521,194708,15070,18606,135994,24378,157832,140240,24408,140401,24419,38845,159342,24434,37696,166454,24487,23990,15711,152144,139114,159992,140904,37334,131742,166441,24625,26245,137335,14691,15815,13881,22416,141236,31089,15936,24734,24740,24755,149890,149903,162387,29860,20705,23200,24932,33828,24898,194726,159442,24961,20980,132694,24967,23466,147383,141407,25043,166813,170333,25040,14642,141696,141505,24611,24924,25886,25483,131352,25285,137072,25301,142861,25452,149983,14871,25656,25592,136078,137212,25744,28554,142902,38932,147596,153373,25825,25829,38011,14950,25658,14935,25933,28438,150056,150051,25989,25965,25951,143486,26037,149824,19255,26065,16600,137257,26080,26083,24543,144384,26136,143863,143864,26180,143780,143781,26187,134773,26215,152038,26227,26228,138813,143921,165364,143816,152339,30661,141559,39332,26370,148380,150049,15147,27130,145346,26462,26471,26466,147917,168173,26583,17641,26658,28240,37436,26625,144358,159136,26717,144495,27105,27147,166623,26995,26819,144845,26881,26880,15666,14849,144956,15232,26540,26977,166474,17148,26934,27032,15265,132041,33635,20624,27129,144985,139562,27205,145155,27293,15347,26545,27336,168348,15373,27421,133411,24798,27445,27508,141261,28341,146139,132021,137560,14144,21537,146266,27617,147196,27612,27703,140427,149745,158545,27738,33318,27769,146876,17605,146877,147876,149772,149760,146633,14053,15595,134450,39811,143865,140433,32655,26679,159013,159137,159211,28054,27996,28284,28420,149887,147589,159346,34099,159604,20935,27804,28189,33838,166689,28207,146991,29779,147330,31180,28239,23185,143435,28664,14093,28573,146992,28410,136343,147517,17749,37872,28484,28508,15694,28532,168304,15675,28575,147780,28627,147601,147797,147513,147440,147380,147775,20959,147798,147799,147776,156125,28747,28798,28839,28801,28876,28885,28886,28895,16644,15848,29108,29078,148087,28971,28997,23176,29002,29038,23708,148325,29007,37730,148161,28972,148570,150055,150050,29114,166888,28861,29198,37954,29205,22801,37955,29220,37697,153093,29230,29248,149876,26813,29269,29271,15957,143428,26637,28477,29314,29482,29483,149539,165931,18669,165892,29480,29486,29647,29610,134202,158254,29641,29769,147938,136935,150052,26147,14021,149943,149901,150011,29687,29717,26883,150054,29753,132547,16087,29788,141485,29792,167602,29767,29668,29814,33721,29804,14128,29812,37873,27180,29826,18771,150156,147807,150137,166799,23366,166915,137374,29896,137608,29966,29929,29982,167641,137803,23511,167596,37765,30029,30026,30055,30062,151426,16132,150803,30094,29789,30110,30132,30210,30252,30289,30287,30319,30326,156661,30352,33263,14328,157969,157966,30369,30373,30391,30412,159647,33890,151709,151933,138780,30494,30502,30528,25775,152096,30552,144044,30639,166244,166248,136897,30708,30729,136054,150034,26826,30895,30919,30931,38565,31022,153056,30935,31028,30897,161292,36792,34948,166699,155779,140828,31110,35072,26882,31104,153687,31133,162617,31036,31145,28202,160038,16040,31174,168205,31188]; + protected const TABLE_CODES_HK = [942=>17392,19506,17923,17830,17784,160359,19831,17843,162993,19682,163013,15253,18230,18244,19527,19520,148159,144919,160594,159371,159954,19543,172881,18255,17882,19589,162924,19719,19108,18081,158499,29221,154196,137827,146950,147297,26189,22267,981=>32149,22813,166841,15860,38708,162799,23515,138590,23204,13861,171696,23249,23479,23804,26478,34195,170309,29793,29853,14453,138579,145054,155681,16108,153822,15093,31484,40855,147809,166157,143850,133770,143966,17162,33924,40854,37935,18736,34323,22678,38730,37400,31184,31282,26208,27177,34973,29772,31685,26498,31276,21071,36934,13542,29636,155065,29894,40903,22451,18735,21580,16689,145038,22552,31346,162661,35727,18094,159368,16769,155033,31662,140476,40904,140481,140489,140492,40905,34052,144827,16564,40906,17633,175615,25281,28782,40907,1099=>12736,12737,12738,12739,12740,131340,12741,131281,131277,12742,12743,131275,139240,12744,131274,12745,12746,12747,12748,131342,12749,12750,256,193,461,192,274,201,282,200,332,211,465,210,1134=>7870,1136=>7872,202,257,225,462,224,593,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,1165=>7871,1167=>7873,234,609,9178,9179,1256=>172969,135493,1259=>25866,1262=>20029,28381,40270,37343,1268=>161589,25745,20250,20264,20392,20822,20852,20892,20964,21153,21160,21307,21326,21457,21464,22242,22768,22788,22791,22834,22836,23398,23454,23455,23706,24198,24635,25993,26622,26628,26725,27982,28860,30005,32420,32428,32442,32455,32463,32479,32518,32567,33402,33487,33647,35270,35774,35810,36710,36711,36718,29713,31996,32205,26950,31433,21031,1329=>37260,30904,37214,32956,1334=>36107,33014,133607,1339=>32927,40647,19661,40393,40460,19518,171510,159758,40458,172339,13761,1351=>28314,33342,29977,1355=>18705,39532,39567,40857,31111,164972,138698,132560,142054,20004,20097,20096,20103,20159,20203,20279,13388,20413,15944,20483,20616,13437,13459,13477,20870,22789,20955,20988,20997,20105,21113,21136,21287,13767,21417,13649,21424,13651,21442,21539,13677,13682,13953,21651,21667,21684,21689,21712,21743,21784,21795,21800,13720,21823,13733,13759,21975,13765,163204,21797,1416=>134210,134421,151851,21904,142534,14828,131905,36422,150968,169189,16467,164030,30586,142392,14900,18389,164189,158194,151018,25821,134524,135092,134357,135412,25741,36478,134806,134155,135012,142505,164438,148691,1449=>134470,170573,164073,18420,151207,142530,39602,14951,169460,16365,13574,152263,169940,161992,142660,40302,38933,1467=>17369,155813,25780,21731,142668,142282,135287,14843,135279,157402,157462,162208,25834,151634,134211,36456,139681,166732,132913,1487=>18443,131497,16378,22643,142733,1493=>148936,132348,155799,134988,134550,21881,16571,17338,1502=>19124,141926,135325,33194,39157,134556,25465,14846,141173,36288,22177,25724,15939,1516=>173569,134665,142031,142537,1521=>135368,145858,14738,14854,164507,13688,155209,139463,22098,134961,142514,169760,13500,27709,151099,1538=>161140,142987,139784,173659,167117,134778,134196,157724,32659,135375,141315,141625,13819,152035,134796,135053,134826,16275,134960,134471,135503,134732,1561=>134827,134057,134472,135360,135485,16377,140950,25650,135085,144372,161337,142286,134526,134527,142417,142421,14872,134808,135367,134958,173618,158544,167122,167321,167114,38314,21708,33476,21945,1591=>171715,39974,39606,161630,142830,28992,33133,33004,23580,157042,33076,14231,21343,164029,37302,134906,134671,134775,134907,13789,151019,13833,134358,22191,141237,135369,134672,134776,135288,135496,164359,136277,134777,151120,142756,23124,135197,135198,135413,135414,22428,134673,161428,164557,135093,134779,151934,14083,135094,135552,152280,172733,149978,137274,147831,164476,22681,21096,13850,153405,31666,23400,18432,19244,40743,18919,39967,39821,154484,143677,22011,13810,22153,20008,22786,138177,194680,38737,131206,20059,20155,13630,23587,24401,24516,14586,25164,25909,27514,27701,27706,28780,29227,20012,29357,149737,32594,31035,31993,32595,156266,13505,1694=>156491,32770,32896,157202,158033,21341,34916,35265,161970,35744,36125,38021,38264,38271,38376,167439,38886,39029,39118,39134,39267,170000,40060,40479,40644,27503,63751,20023,131207,38429,25143,38050,1727=>20539,28158,171123,40870,15817,34959,147790,28791,23797,19232,152013,13657,154928,24866,166450,36775,37366,29073,26393,29626,144001,172295,15499,137600,19216,30948,29698,20910,165647,16393,27235,172730,16931,34319,133743,31274,170311,166634,38741,28749,21284,139390,37876,30425,166371,40871,30685,20131,20464,20668,20015,20247,40872,21556,32139,22674,22736,138678,24210,24217,24514,141074,25995,144377,26905,27203,146531,27903,1796=>29184,148741,29580,16091,150035,23317,29881,35715,154788,153237,31379,31724,31939,32364,33528,34199,40873,34960,40874,36537,40875,36815,34143,39392,37409,40876,167353,136255,16497,17058,23066,1830=>39016,26475,17014,22333,1835=>34262,149883,33471,160013,19585,159092,23931,158485,159678,40877,40878,23446,40879,26343,32347,28247,31178,15752,17603,143958,141206,17306,17718,1859=>23765,146202,35577,23672,15634,144721,23928,40882,29015,17752,147692,138787,19575,14712,13386,131492,158785,35532,20404,131641,22975,33132,38998,170234,24379,134047,1886=>139713,166253,16642,18107,168057,16135,40883,172469,16632,14294,18167,158790,16764,165554,160767,17773,14548,152730,17761,17691,19849,19579,19830,17898,16328,150287,13921,17630,17597,16877,23870,23880,23894,15868,14351,23972,23993,14368,14392,24130,24253,24357,24451,14600,14612,14655,14669,24791,24893,23781,14729,25015,25017,25039,14776,25132,25232,25317,25368,14840,22193,14851,25570,25595,25607,25690,14923,25792,23829,22049,40863,14999,25990,15037,26111,26195,15090,26258,15138,26390,15170,26532,26624,15192,26698,26756,15218,15217,15227,26889,26947,29276,26980,27039,27013,15292,27094,15325,27237,27252,27249,27266,15340,27289,15346,27307,27317,27348,27382,27521,27585,27626,27765,27818,15563,27906,27910,27942,28033,15599,28068,28081,28181,28184,28201,28294,166336,28347,28386,28378,40831,28392,28393,28452,28468,15686,147265,28545,28606,15722,15733,29111,23705,15754,28716,15761,28752,28756,28783,28799,28809,131877,17345,13809,134872,147159,22462,159443,28990,153568,13902,27042,166889,23412,31305,153825,169177,31333,31357,154028,31419,31408,31426,31427,29137,156813,16842,31450,31453,31466,16879,21682,154625,31499,31573,31529,152334,154878,31650,31599,33692,154548,158847,31696,33825,31634,31672,154912,15789,154725,33938,31738,31750,31797,154817,31812,31875,149634,31910,26237,148856,31945,31943,31974,31860,31987,31989,31950,32359,17693,159300,32093,159446,29837,32137,32171,28981,32179,32210,147543,155689,32228,15635,32245,137209,32229,164717,32285,155937,155994,32366,32402,17195,37996,32295,32576,32577,32583,31030,156368,39393,32663,156497,32675,136801,131176,17756,145254,17667,164666,32762,156809,32773,32776,32797,32808,32815,172167,158915,32827,32828,32865,141076,18825,157222,146915,157416,26405,32935,166472,33031,33050,22704,141046,27775,156824,151480,25831,136330,33304,137310,27219,150117,150165,17530,33321,133901,158290,146814,20473,136445,34018,33634,158474,149927,144688,137075,146936,33450,26907,194964,16859,34123,33488,33562,134678,137140,14017,143741,144730,33403,33506,33560,147083,159139,158469,158615,144846,15807,33565,21996,33669,17675,159141,33708,33729,33747,13438,159444,27223,34138,13462,159298,143087,33880,154596,33905,15827,17636,27303,33866,146613,31064,33960,158614,159351,159299,34014,33807,33681,17568,33939,34020,154769,16960,154816,17731,34100,23282,159385,17703,34163,17686,26559,34326,165413,165435,34241,159880,34306,136578,159949,194994,17770,34344,13896,137378,21495,160666,34430,34673,172280,34798,142375,34737,34778,34831,22113,34412,26710,17935,34885,34886,161248,146873,161252,34910,34972,18011,34996,34997,25537,35013,30583,161551,35207,35210,35238,35241,35239,35260,166437,35303,162084,162493,35484,30611,37374,35472,162393,31465,162618,147343,18195,162616,29052,35596,35615,152624,152933,35647,35660,35661,35497,150138,35728,35739,35503,136927,17941,34895,35995,163156,163215,195028,14117,163155,36054,163224,163261,36114,36099,137488,36059,28764,36113,150729,16080,36215,36265,163842,135188,149898,15228,164284,160012,31463,36525,36534,36547,37588,36633,36653,164709,164882,36773,37635,172703,133712,36787,18730,166366,165181,146875,24312,143970,36857,172052,165564,165121,140069,14720,159447,36919,165180,162494,36961,165228,165387,37032,165651,37060,165606,37038,37117,37223,15088,37289,37316,31916,166195,138889,37390,27807,37441,37474,153017,37561,166598,146587,166668,153051,134449,37676,37739,166625,166891,28815,23235,166626,166629,18789,37444,166892,166969,166911,37747,37979,36540,38277,38310,37926,38304,28662,17081,140922,165592,135804,146990,18911,27676,38523,38550,16748,38563,159445,25050,38582,30965,166624,38589,21452,18849,158904,131700,156688,168111,168165,150225,137493,144138,38705,34370,38710,18959,17725,17797,150249,28789,23361,38683,38748,168405,38743,23370,168427,38751,37925,20688,143543,143548,38793,38815,38833,38846,38848,38866,38880,152684,38894,29724,169011,38911,38901,168989,162170,19153,38964,38963,38987,39014,15118,160117,15697,132656,147804,153350,39114,39095,39112,39111,19199,159015,136915,21936,39137,39142,39148,37752,39225,150057,19314,170071,170245,39413,39436,39483,39440,39512,153381,14020,168113,170965,39648,39650,170757,39668,19470,39700,39725,165376,20532,39732,158120,14531,143485,39760,39744,171326,23109,137315,39822,148043,39938,39935,39948,171624,40404,171959,172434,172459,172257,172323,172511,40318,40323,172340,40462,26760,40388,139611,172435,172576,137531,172595,40249,172217,172724,40592,40597,40606,40610,19764,40618,40623,148324,40641,15200,14821,15645,20274,14270,166955,40706,40712,19350,37924,159138,40727,40726,40761,22175,22154,40773,39352,168075,38898,33919,40802,40809,31452,40846,29206,19390,149877,149947,29047,150008,148296,150097,29598,166874,137466,31135,166270,167478,37737,37875,166468,37612,37761,37835,166252,148665,29207,16107,30578,31299,28880,148595,148472,29054,137199,28835,137406,144793,16071,137349,152623,137208,14114,136955,137273,14049,137076,137425,155467,14115,136896,22363,150053,136190,135848,136134,136374,34051,145062,34051,33877,149908,160101,146993,152924,147195,159826,17652,145134,170397,159526,26617,14131,15381,15847,22636,137506,26640,16471,145215,147681,147595,147727,158753,21707,22174,157361,22162,135135,134056,134669,37830,166675,37788,20216,20779,14361,148534,20156,132197,131967,20299,20362,153169,23144,131499,132043,14745,131850,132116,13365,20265,131776,167603,131701,35546,131596,20120,20685,20749,20386,20227,150030,147082,20290,20526,20588,20609,20428,20453,20568,20732,20825,20827,20829,20830,28278,144789,147001,147135,28018,137348,147081,20904,20931,132576,17629,132259,132242,132241,36218,166556,132878,21081,21156,133235,21217,37742,18042,29068,148364,134176,149932,135396,27089,134685,29817,16094,29849,29716,29782,29592,19342,150204,147597,21456,13700,29199,147657,21940,131909,21709,134086,22301,37469,38644,37734,22493,22413,22399,13886,22731,23193,166470,136954,137071,136976,23084,22968,37519,23166,23247,23058,153926,137715,137313,148117,14069,27909,29763,23073,155267,23169,166871,132115,37856,29836,135939,28933,18802,37896,166395,37821,14240,23582,23710,24158,24136,137622,137596,146158,24269,23375,137475,137476,14081,137376,14045,136958,14035,33066,166471,138682,144498,166312,24332,24334,137511,137131,23147,137019,23364,34324,161277,34912,24702,141408,140843,24539,16056,140719,140734,168072,159603,25024,131134,131142,140827,24985,24984,24693,142491,142599,149204,168269,25713,149093,142186,14889,142114,144464,170218,142968,25399,173147,25782,25393,25553,149987,142695,25252,142497,25659,25963,26994,15348,143502,144045,149897,144043,21773,144096,137433,169023,26318,144009,143795,15072,16784,152964,166690,152975,136956,152923,152613,30958,143619,137258,143924,13412,143887,143746,148169,26254,159012,26219,19347,26160,161904,138731,26211,144082,144097,26142,153714,14545,145466,145340,15257,145314,144382,29904,15254,26511,149034,26806,26654,15300,27326,14435,145365,148615,27187,27218,27337,27397,137490,25873,26776,27212,15319,27258,27479,147392,146586,37792,37618,166890,166603,37513,163870,166364,37991,28069,28427,149996,28007,147327,15759,28164,147516,23101,28170,22599,27940,30786,28987,148250,148086,28913,29264,29319,29332,149391,149285,20857,150180,132587,29818,147192,144991,150090,149783,155617,16134,16049,150239,166947,147253,24743,16115,29900,29756,37767,29751,17567,159210,17745,30083,16227,150745,150790,16216,30037,30323,173510,15129,29800,166604,149931,149902,15099,15821,150094,16127,149957,149747,37370,22322,37698,166627,137316,20703,152097,152039,30584,143922,30478,30479,30587,149143,145281,14942,149744,29752,29851,16063,150202,150215,16584,150166,156078,37639,152961,30750,30861,30856,30930,29648,31065,161601,153315,16654,31131,33942,31141,27181,147194,31290,31220,16750,136934,16690,37429,31217,134476,149900,131737,146874,137070,13719,21867,13680,13994,131540,134157,31458,23129,141045,154287,154268,23053,131675,30960,23082,154566,31486,16889,31837,31853,16913,154547,155324,155302,31949,150009,137136,31886,31868,31918,27314,32220,32263,32211,32590,156257,155996,162632,32151,155266,17002,158581,133398,26582,131150,144847,22468,156690,156664,149858,32733,31527,133164,154345,154947,31500,155150,39398,34373,39523,27164,144447,14818,150007,157101,39455,157088,33920,160039,158929,17642,33079,17410,32966,33033,33090,157620,39107,158274,33378,33381,158289,33875,159143,34320,160283,23174,16767,137280,23339,137377,23268,137432,34464,195004,146831,34861,160802,23042,34926,20293,34951,35007,35046,35173,35149,153219,35156,161669,161668,166901,166873,166812,166393,16045,33955,18165,18127,14322,35389,35356,169032,24397,37419,148100,26068,28969,28868,137285,40301,35999,36073,163292,22938,30659,23024,17262,14036,36394,36519,150537,36656,36682,17140,27736,28603,140065,18587,28537,28299,137178,39913,14005,149807,37051,37015,21873,18694,37307,37892,166475,16482,166652,37927,166941,166971,34021,35371,38297,38311,38295,38294,167220,29765,16066,149759,150082,148458,16103,143909,38543,167655,167526,167525,16076,149997,150136,147438,29714,29803,16124,38721,168112,26695,18973,168083,153567,38749,37736,166281,166950,166703,156606,37562,23313,35689,18748,29689,147995,38811,38769,39224,134950,24001,166853,150194,38943,169178,37622,169431,37349,17600,166736,150119,166756,39132,166469,16128,37418,18725,33812,39227,39245,162566,15869,39323,19311,39338,39516,166757,153800,27279,39457,23294,39471,170225,19344,170312,39356,19389,19351,37757,22642,135938,22562,149944,136424,30788,141087,146872,26821,15741,37976,14631,24912,141185,141675,24839,40015,40019,40059,39989,39952,39807,39887,171565,39839,172533,172286,40225,19630,147716,40472,19632,40204,172468,172269,172275,170287,40357,33981,159250,159711,158594,34300,17715,159140,159364,159216,33824,34286,159232,145367,155748,31202,144796,144960,18733,149982,15714,37851,37566,37704,131775,30905,37495,37965,20452,13376,36964,152925,30781,30804,30902,30795,137047,143817,149825,13978,20338,28634,28633,28702,28702,21524,147893,22459,22771,22410,40214,22487,28980,13487,147884,29163,158784,151447,23336,137141,166473,24844,23246,23051,17084,148616,14124,19323,166396,37819,37816,137430,134941,33906,158912,136211,148218,142374,148417,22932,146871,157505,32168,155995,155812,149945,149899,166394,37605,29666,16105,29876,166755,137375,16097,150195,27352,29683,29691,16086,150078,150164,137177,150118,132007,136228,149989,29768,149782,28837,149878,37508,29670,37727,132350,37681,166606,166422,37766,166887,153045,18741,166530,29035,149827,134399,22180,132634,134123,134328,21762,31172,137210,32254,136898,150096,137298,17710,37889,14090,166592,149933,22960,137407,137347,160900,23201,14050,146779,14000,37471,23161,166529,137314,37748,15565,133812,19094,14730,20724,15721,15692,136092,29045,17147,164376,28175,168164,17643,27991,163407,28775,27823,15574,147437,146989,28162,28428,15727,132085,30033,14012,13512,18048,16090,18545,22980,37486,18750,36673,166940,158656,22546,22472,14038,136274,28926,148322,150129,143331,135856,140221,26809,26983,136088,144613,162804,145119,166531,145366,144378,150687,27162,145069,158903,33854,17631,17614,159014,159057,158850,159710,28439,160009,33597,137018,33773,158848,159827,137179,22921,23170,137139,23137,23153,137477,147964,14125,23023,137020,14023,29070,37776,26266,148133,23150,23083,148115,27179,147193,161590,148571,148170,28957,148057,166369,20400,159016,23746,148686,163405,148413,27148,148054,135940,28838,28979,148457,15781,27871,194597,150095,32357,23019,23855,15859,24412,150109,137183,32164,33830,21637,146170,144128,131604,22398,133333,132633,16357,139166,172726,28675,168283,23920,29583,31955,166489,168992,20424,32743,29389,29456,162548,29496,29497,153334,29505,29512,16041,162584,36972,29173,149746,29665,33270,16074,30476,16081,27810,22269,29721,29726,29727,16098,16112,16116,16122,29907,16142,16211,30018,30061,30066,30093,16252,30152,30172,16320,30285,16343,30324,16348,30330,151388,29064,22051,35200,22633,16413,30531,16441,26465,16453,13787,30616,16490,16495,23646,30654,30667,22770,30744,28857,30748,16552,30777,30791,30801,30822,33864,152885,31027,26627,31026,16643,16649,31121,31129,36795,31238,36796,16743,31377,16818,31420,33401,16836,31439,31451,16847,20001,31586,31596,31611,31762,31771,16992,17018,31867,31900,17036,31928,17044,31981,36755,28864,134351,32207,32212,32208,32253,32686,32692,29343,17303,32800,32805,31545,32814,32817,32852,15820,22452,28832,32951,33001,17389,33036,29482,33038,33042,30048,33044,17409,15161,33110,33113,33114,17427,22586,33148,33156,17445,33171,17453,33189,22511,33217,33252,33364,17551,33446,33398,33482,33496,33535,17584,33623,38505,27018,33797,28917,33892,24803,33928,17668,33982,34017,34040,34064,34104,34130,17723,34159,34160,34272,17783,34418,34450,34482,34543,38469,34699,17926,17943,34990,35071,35108,35143,35217,162151,35369,35384,35476,35508,35921,36052,36082,36124,18328,22623,36291,18413,20206,36410,21976,22356,36465,22005,36528,18487,36558,36578,36580,36589,36594,36791,36801,36810,36812,36915,39364,18605,39136,37395,18718,37416,37464,37483,37553,37550,37567,37603,37611,37619,37620,37629,37699,37764,37805,18757,18769,40639,37911,21249,37917,37933,37950,18794,37972,38009,38189,38306,18855,38388,38451,18917,26528,18980,38720,18997,38834,38850,22100,19172,24808,39097,19225,39153,22596,39182,39193,20916,39196,39223,39234,39261,39266,19312,39365,19357,39484,39695,31363,39785,39809,39901,39921,39924,19565,39968,14191,138178,40265,39994,40702,22096,40339,40381,40384,40444,38134,36790,40571,40620,40625,40637,40646,38108,40674,40689,40696,31432,40772,131220,131767,132000,26906,38083,22956,132311,22592,38081,14265,132565,132629,132726,136890,22359,29043,133826,133837,134079,21610,194619,134091,21662,134139,134203,134227,134245,134268,24807,134285,22138,134325,134365,134381,134511,134578,134600,26965,39983,34725,134660,134670,134871,135056,134957,134771,23584,135100,24075,135260,135247,135286,26398,135291,135304,135318,13895,135359,135379,135471,135483,21348,33965,135907,136053,135990,35713,136567,136729,137155,137159,20088,28859,137261,137578,137773,137797,138282,138352,138412,138952,25283,138965,139029,29080,26709,139333,27113,14024,139900,140247,140282,141098,141425,141647,33533,141671,141715,142037,35237,142056,36768,142094,38840,142143,38983,39613,142412,4116=>142472,142519,154600,142600,142610,142775,142741,142914,143220,143308,143411,143462,144159,144350,24497,26184,26303,162425,144743,144883,29185,149946,30679,144922,145174,32391,131910,22709,26382,26904,146087,161367,155618,146961,147129,161278,139418,18640,19128,147737,166554,148206,148237,147515,148276,148374,150085,132554,20946,132625,22943,138920,15294,146687,148484,148694,22408,149108,14747,149295,165352,170441,14178,139715,35678,166734,39382,149522,149755,150037,29193,150208,134264,22885,151205,151430,132985,36570,151596,21135,22335,29041,152217,152601,147274,150183,21948,152646,152686,158546,37332,13427,152895,161330,152926,18200,152930,152934,153543,149823,153693,20582,13563,144332,24798,153859,18300,166216,154286,154505,154630,138640,22433,29009,28598,155906,162834,36950,156082,151450,35682,156674,156746,23899,158711,36662,156804,137500,35562,150006,156808,147439,156946,19392,157119,157365,141083,37989,153569,24981,23079,194765,20411,22201,148769,157436,20074,149812,38486,28047,158909,13848,35191,157593,157806,156689,157790,29151,157895,31554,168128,133649,157990,37124,158009,31301,40432,158202,39462,158253,13919,156777,131105,31107,158260,158555,23852,144665,33743,158621,18128,158884,30011,34917,159150,22710,14108,140685,159819,160205,15444,160384,160389,37505,139642,160395,37680,160486,149968,27705,38047,160848,134904,34855,35061,141606,164979,137137,28344,150058,137248,14756,14009,23568,31203,17727,26294,171181,170148,35139,161740,161880,22230,16607,136714,14753,145199,164072,136133,29101,33638,162269,168360,23143,19639,159919,166315,162301,162314,162571,163174,147834,31555,31102,163849,28597,172767,27139,164632,21410,159239,37823,26678,38749,164207,163875,158133,136173,143919,163912,23941,166960,163971,22293,38947,166217,23979,149896,26046,27093,21458,150181,147329,15377,26422,163984,164084,164142,139169,164175,164233,164271,164378,164614,164655,164746,13770,164968,165546,18682,25574,166230,30728,37461,166328,17394,166375,17375,166376,166726,166868,23032,166921,36619,167877,168172,31569,168208,168252,15863,168286,150218,36816,29327,22155,169191,169449,169392,169400,169778,170193,170313,170346,170435,170536,170766,171354,171419,32415,171768,171811,19620,38215,172691,29090,172799,19857,36882,173515,19868,134300,36798,21953,36794,140464,36793,150163,17673,32383,28502,27313,20202,13540,166700,161949,14138,36480,137205,163876,166764,166809,162366,157359,15851,161365,146615,153141,153942,20122,155265,156248,22207,134765,36366,23405,147080,150686,25566,25296,137206,137339,25904,22061,154698,21530,152337,15814,171416,19581,22050,22046,32585,155352,22901,146752,34672,19996,135146,134473,145082,33047,40286,36120,30267,40005,30286,30649,37701,21554,33096,33527,22053,33074,33816,32957,21994,31074,22083,21526,134813,13774,22021,22001,26353,164578,13869,30004,22000,21946,21655,21874,134209,134294,24272,151880,134774,142434,134818,40619,32090,21982,135285,25245,38765,21652,36045,29174,37238,25596,25529,25598,21865,142147,40050,143027,20890,13535,134567,20903,21581,21790,21779,30310,36397,157834,30129,32950,34820,34694,35015,33206,33820,135361,17644,29444,149254,23440,33547,157843,22139,141044,163119,147875,163187,159440,160438,37232,135641,37384,146684,173737,134828,134905,29286,138402,18254,151490,163833,135147,16634,40029,25887,142752,18675,149472,171388,135148,134666,24674,161187,135149,4628=>155720,135559,29091,32398,40272,19994,19972,13687,23309,27826,21351,13996,14812,21373,13989,149016,22682,150382,33325,21579,22442,154261,133497,4652=>14930,140389,29556,171692,19721,39917,146686,171824,19547,151465,169374,171998,33884,146870,160434,157619,145184,25390,32037,147191,146988,14890,36872,21196,15988,13946,17897,132238,30272,23280,134838,30842,163630,22695,16575,22140,39819,23924,30292,173108,40581,19681,30201,14331,24857,143578,148466,4700=>22109,135849,22439,149859,171526,21044,159918,13741,27722,40316,31830,39737,22494,137068,23635,25811,169168,156469,160100,34477,134440,159010,150242,134513,4725=>20990,139023,23950,38659,138705,40577,36940,31519,39682,23761,31651,25192,25397,39679,31695,39722,31870,39726,31810,31878,39957,31740,39689,40727,39963,149822,40794,21875,23491,20477,40600,20466,21088,15878,21201,22375,20566,22967,24082,38856,40363,36700,21609,38836,39232,38842,21292,24880,26924,21466,39946,40194,19515,38465,27008,20646,30022,137069,39386,21107,4786=>37209,38529,37212,4790=>37201,167575,25471,159011,27338,22033,37262,30074,25221,132092,29519,31856,154657,146685,4805=>149785,30422,39837,20010,134356,33726,34882,4813=>23626,27072,20717,22394,21023,24053,20174,27697,131570,20281,21660,21722,21146,36226,13822,24332,13811,4831=>27474,37244,40869,39831,38958,39092,39610,40616,40580,29050,31508,4843=>27642,34840,32632,4847=>22048,173642,36471,40787,4852=>36308,36431,40476,36353,25218,164733,36392,36469,31443,150135,31294,30936,27882,35431,30215,166490,40742,27854,34774,30147,172722,30803,194624,36108,29410,29553,35629,29442,29937,36075,150203,34351,24506,34976,17591,4888=>137275,159237,4891=>35454,140571,4894=>24829,30311,39639,40260,37742,39823,34805,4902=>34831,36087,29484,38689,39856,13782,29362,19463,31825,39242,155993,24921,19460,40598,24957,4918=>22367,24943,25254,25145,25294,14940,25058,21418,144373,25444,26626,13778,23895,166850,36826,167481,4935=>20697,138566,30982,21298,38456,134971,16485,4943=>30718,4945=>31938,155418,31962,31277,32870,32867,32077,29957,29938,35220,33306,26380,32866,160902,32859,29936,33027,30500,35209,157644,30035,159441,34729,34766,33224,34700,35401,36013,35651,30507,29944,34010,13877,27058,36262,4981=>35241,29800,28089,34753,147473,29927,15835,29046,24740,24988,15569,29026,24695,4995=>32625,166701,29264,24809,19326,21024,15384,146631,155351,161366,152881,137540,135934,170243,159196,159917,23745,156077,166415,145015,131310,157766,151310,17762,23327,156492,40784,40614,156267]; + protected const TABLE_POINTERS = [9581=>5243,5244,5246,5245,12291=>5104,20189=>10958,20521=>7007,20605=>7457,21253=>5681,21316=>5288,21375=>7045,23159=>8007,24181=>11425,24308=>10942,24408=>13805,25744=>9346,26080=>10946,26228=>8093,26462=>6119,27804=>11642,28189=>8161,28207=>8137,29038=>8178,29788=>8616,29929=>5213,30326=>10948,30729=>12389]; + /** @var int $bufferedCode Certain byte sequences encode two Unicode characters. When this occurs the second of the two code points is buffered here */ protected $bufferedCode = 0; + /** @var array $pointerCache A cached result of flipping the pointer-to-code-point table */ + protected static $pointerCache; public function __construct(string $string, bool $fatal = false, bool $allowSurrogates = false) { $this->stateProps[] = "bufferedCode"; @@ -60,7 +70,7 @@ class Big5 extends AbstractEncoding implements StatelessEncoding { $this->bufferedCode = self::TABLE_DOUBLES[$pointer][1]; return self::TABLE_DOUBLES[$pointer][0]; } - $code = self::TABLE_CODES[$pointer] ?? null; + $code = self::TABLE_CODES_HK[$pointer] ?? self::TABLE_CODES_TW[$pointer] ?? null; if (isset($code)) { return $code; } else { @@ -89,7 +99,7 @@ class Big5 extends AbstractEncoding implements StatelessEncoding { } elseif ($codePoint < 128) { return chr($codePoint); } else { - $pointer = self::TABLE_ENC[$codePoint] ?? null; + $pointer = self::TABLE_POINTERS[$codePoint] ?? (self::$pointerCache ?? (self::$pointerCache = array_flip(self::TABLE_CODES_TW)))[$codePoint] ?? null; if (isset($pointer)) { $lead = (int) ($pointer / 157) + 0x81; $trail = $pointer % 157; @@ -101,7 +111,6 @@ class Big5 extends AbstractEncoding implements StatelessEncoding { } } - /** Implements backward seeking $distance characters */ protected function seekBack(int $distance): int { while ($distance > 0 && ($this->posByte > 0 || $this->bufferedCode > 0)) { $distance--; diff --git a/lib/Encoding/Coder.php b/lib/Encoding/Coder.php new file mode 100644 index 0000000..e2d26c9 --- /dev/null +++ b/lib/Encoding/Coder.php @@ -0,0 +1,20 @@ +8712,8715,8838,8839,8834,8835,8746,8745,135=>8743,8744,65506,8658,8660,8704,8707,153=>8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,175=>8491,8240,9839,9837,9834,8224,8225,182,187=>9711,203=>65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,220=>65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,252=>65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,282=>12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,376=>12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,470=>913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,502=>945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,564=>1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,612=>1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,658=>9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,1128=>9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,1159=>13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,1190=>13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,1410=>20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21000,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39000,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32000,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,30000,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26000,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36000,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,4418=>24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27000,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34000,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38000,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,8272=>32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,8634=>8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282,10716=>8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657]; + protected const TABLE_JIS0212 = [108=>728,711,184,729,733,175,731,730,65374,900,901,127=>161,166,191,168=>186,170,169,174,8482,164,8470,534=>902,904,905,906,938,540=>908,542=>910,939,545=>911,550=>940,941,942,943,970,912,972,962,973,971,944,974,597=>1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,645=>1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1118,1119,752=>198,272,755=>294,757=>306,759=>321,319,762=>330,216,338,766=>358,222,784=>230,273,240,295,305,307,312,322,320,329,331,248,339,223,359,254,846=>193,192,196,194,258,461,256,260,197,195,262,264,268,199,266,270,201,200,203,202,282,278,274,280,871=>284,286,290,288,292,205,204,207,206,463,304,298,302,296,308,310,313,317,315,323,327,325,209,211,210,214,212,465,336,332,213,340,344,342,346,348,352,350,356,354,218,217,220,219,364,467,368,362,370,366,360,471,475,473,469,372,221,376,374,377,381,379,940=>225,224,228,226,259,462,257,261,229,227,263,265,269,231,267,271,233,232,235,234,283,279,275,281,501,285,287,968=>289,293,237,236,239,238,464,976=>299,303,297,309,311,314,318,316,324,328,326,241,243,242,246,244,466,337,333,245,341,345,343,347,349,353,351,357,355,250,249,252,251,365,468,369,363,371,367,361,472,476,474,470,373,253,255,375,378,382,380,1410=>19970,19972,19973,19980,19986,19999,20003,20004,20008,20011,20014,20015,20016,20021,20032,20033,20036,20039,20049,20058,20060,20067,20072,20073,20084,20085,20089,20095,20109,20118,20119,20125,20143,20153,20163,20176,20186,20187,20192,20193,20194,20200,20207,20209,20211,20213,20221,20222,20223,20224,20226,20227,20232,20235,20236,20242,20245,20246,20247,20249,20270,20273,20320,20275,20277,20279,20281,20283,20286,20288,20290,20296,20297,20299,20300,20306,20308,20310,20312,20319,20323,20330,20332,20334,20337,20343,20344,20345,20346,20349,20350,20353,20354,20356,20357,20361,20362,20364,20366,20368,20370,20371,20372,20375,20377,20378,20382,20383,20402,20407,20409,20411,20412,20413,20414,20416,20417,20421,20422,20424,20425,20427,20428,20429,20431,20434,20444,20448,20450,20464,20466,20476,20477,20479,20480,20481,20484,20487,20490,20492,20494,20496,20499,20503,20504,20507,20508,20509,20510,20514,20519,20526,20528,20530,20531,20533,20544,20545,20546,20549,20550,20554,20556,20558,20561,20562,20563,20567,20569,20575,20576,20578,20579,20582,20583,20586,20589,20592,20593,20539,20609,20611,20612,20614,20618,20622,20623,20624,20626,20627,20628,20630,20635,20636,20638,20639,20640,20641,20642,20650,20655,20656,20665,20666,20669,20672,20675,20676,20679,20684,20686,20688,20691,20692,20696,20700,20701,20703,20706,20708,20710,20712,20713,20719,20721,20726,20730,20734,20739,20742,20743,20744,20747,20748,20749,20750,20722,20752,20759,20761,20763,20764,20765,20766,20771,20775,20776,20780,20781,20783,20785,20787,20788,20789,20792,20793,20802,20810,20815,20819,20821,20823,20824,20831,20836,20838,20862,20867,20868,20875,20878,20888,20893,20897,20899,20909,20920,20922,20924,20926,20927,20930,20936,20943,20945,20946,20947,20949,20952,20958,20962,20965,20974,20978,20979,20980,20983,20993,20994,20997,21010,21011,21013,21014,21016,21026,21032,21041,21042,21045,21052,21061,21065,21077,21079,21080,21082,21084,21087,21088,21089,21094,21102,21111,21112,21113,21120,21122,21125,21130,21132,21139,21141,21142,21143,21144,21146,21148,21156,21157,21158,21159,21167,21168,21174,21175,21176,21178,21179,21181,21184,21188,21190,21192,21196,21199,21201,21204,21206,21211,21212,21217,21221,21224,21225,21226,21228,21232,21233,21236,21238,21239,21248,21251,21258,21259,21260,21265,21267,21272,21275,21276,21278,21279,21285,21287,21288,21289,21291,21292,21293,21296,21298,21301,21308,21309,21310,21314,21324,21323,21337,21339,21345,21347,21349,21356,21357,21362,21369,21374,21379,21383,21384,21390,21395,21396,21401,21405,21409,21412,21418,21419,21423,21426,21428,21429,21431,21432,21434,21437,21440,21445,21455,21458,21459,21461,21466,21469,21470,21472,21478,21479,21493,21506,21523,21530,21537,21543,21544,21546,21551,21553,21556,21557,21571,21572,21575,21581,21583,21598,21602,21604,21606,21607,21609,21611,21613,21614,21620,21631,21633,21635,21637,21640,21641,21645,21649,21653,21654,21660,21663,21665,21670,21671,21673,21674,21677,21678,21681,21687,21689,21690,21691,21695,21702,21706,21709,21710,21728,21738,21740,21743,21750,21756,21758,21759,21760,21761,21765,21768,21769,21772,21773,21774,21781,21802,21803,21810,21813,21814,21819,21820,21821,21825,21831,21833,21834,21837,21840,21841,21848,21850,21851,21854,21856,21857,21860,21862,21887,21889,21890,21894,21896,21902,21903,21905,21906,21907,21908,21911,21923,21924,21933,21938,21951,21953,21955,21958,21961,21963,21964,21966,21969,21970,21971,21975,21976,21979,21982,21986,21993,22006,22015,22021,22024,22026,22029,22030,22031,22032,22033,22034,22041,22060,22064,22067,22069,22071,22073,22075,22076,22077,22079,22080,22081,22083,22084,22086,22089,22091,22093,22095,22100,22110,22112,22113,22114,22115,22118,22121,22125,22127,22129,22130,22133,22148,22149,22152,22155,22156,22165,22169,22170,22173,22174,22175,22182,22183,22184,22185,22187,22188,22189,22193,22195,22199,22206,22213,22217,22218,22219,22223,22224,22220,22221,22233,22236,22237,22239,22241,22244,22245,22246,22247,22248,22257,22251,22253,22262,22263,22273,22274,22279,22282,22284,22289,22293,22298,22299,22301,22304,22306,22307,22308,22309,22313,22314,22316,22318,22319,22323,22324,22333,22334,22335,22341,22342,22348,22349,22354,22370,22373,22375,22376,22379,22381,22382,22383,22384,22385,22387,22388,22389,22391,22393,22394,22395,22396,22398,22401,22403,22412,22420,22423,22425,22426,22428,22429,22430,22431,22433,22421,22439,22440,22441,22444,22456,22461,22471,22472,22476,22479,22485,22493,22494,22500,22502,22503,22505,22509,22512,22517,22518,22520,22525,22526,22527,22531,22532,22536,22537,22497,22540,22541,22555,22558,22559,22560,22566,22567,22573,22578,22585,22591,22601,22604,22605,22607,22608,22613,22623,22625,22628,22631,22632,22648,22652,22655,22656,22657,22663,22664,22665,22666,22668,22669,22671,22672,22676,22678,22685,22688,22689,22690,22694,22697,22705,22706,22724,22716,22722,22728,22733,22734,22736,22738,22740,22742,22746,22749,22753,22754,22761,22771,22789,22790,22795,22796,22802,22803,22804,34369,22813,22817,22819,22820,22824,22831,22832,22835,22837,22838,22847,22851,22854,22866,22867,22873,22875,22877,22878,22879,22881,22883,22891,22893,22895,22898,22901,22902,22905,22907,22908,22923,22924,22926,22930,22933,22935,22943,22948,22951,22957,22958,22959,22960,22963,22967,22970,22972,22977,22979,22980,22984,22986,22989,22994,23005,23006,23007,23011,23012,23015,23022,23023,23025,23026,23028,23031,23040,23044,23052,23053,23054,23058,23059,23070,23075,23076,23079,23080,23082,23085,23088,23108,23109,23111,23112,23116,23120,23125,23134,23139,23141,23143,23149,23159,23162,23163,23166,23179,23184,23187,23190,23193,23196,23198,23199,23200,23202,23207,23212,23217,23218,23219,23221,23224,23226,23227,23231,23236,23238,23240,23247,23258,23260,23264,23269,23274,23278,23285,23286,23293,23296,23297,23304,23319,23348,23321,23323,23325,23329,23333,23341,23352,23361,23371,23372,23378,23382,23390,23400,23406,23407,23420,23421,23422,23423,23425,23428,23430,23434,23438,23440,23441,23443,23444,23446,23464,23465,23468,23469,23471,23473,23474,23479,23482,23484,23488,23489,23501,23503,23510,23511,23512,23513,23514,23520,23535,23537,23540,23549,23564,23575,23582,23583,23587,23590,23593,23595,23596,23598,23600,23602,23605,23606,23641,23642,23644,23650,23651,23655,23656,23657,23661,23664,23668,23669,23674,23675,23676,23677,23687,23688,23690,23695,23698,23709,23711,23712,23714,23715,23718,23722,23730,23732,23733,23738,23753,23755,23762,23773,23767,23790,23793,23794,23796,23809,23814,23821,23826,23851,23843,23844,23846,23847,23857,23860,23865,23869,23871,23874,23875,23878,23880,23893,23889,23897,23882,23903,23904,23905,23906,23908,23914,23917,23920,23929,23930,23934,23935,23937,23939,23944,23946,23954,23955,23956,23957,23961,23963,23967,23968,23975,23979,23984,23988,23992,23993,24003,24007,24011,24016,24014,24024,24025,24032,24036,24041,24056,24057,24064,24071,24077,24082,24084,24085,24088,24095,24096,24110,24104,24114,24117,24126,24139,24144,24137,24145,24150,24152,24155,24156,24158,24168,24170,24171,24172,24173,24174,24176,24192,24203,24206,24226,24228,24229,24232,24234,24236,24241,24243,24253,24254,24255,24262,24268,24267,24270,24273,24274,24276,24277,24284,24286,24293,24299,24322,24326,24327,24328,24334,24345,24348,24349,24353,24354,24355,24356,24360,24363,24364,24366,24368,24372,24374,24379,24381,24383,24384,24388,24389,24391,24397,24400,24404,24408,24411,24416,24419,24420,24423,24431,24434,24436,24437,24440,24442,24445,24446,24457,24461,24463,24470,24476,24477,24482,24487,24491,24484,24492,24495,24496,24497,24504,24516,24519,24520,24521,24523,24528,24529,24530,24531,24532,24542,24545,24546,24552,24553,24554,24556,24557,24558,24559,24562,24563,24566,24570,24572,24583,24586,24589,24595,24596,24599,24600,24602,24607,24612,24621,24627,24629,24640,24647,24648,24649,24652,24657,24660,24662,24663,24669,24673,24679,24689,24702,24703,24706,24710,24712,24714,24718,24721,24723,24725,24728,24733,24734,24738,24740,24741,24744,24752,24753,24759,24763,24766,24770,24772,24776,24777,24778,24779,24782,24783,24788,24789,24793,24795,24797,24798,24802,24805,24818,24821,24824,24828,24829,24834,24839,24842,24844,24848,24849,24850,24851,24852,24854,24855,24857,24860,24862,24866,24874,24875,24880,24881,24885,24886,24887,24889,24897,24901,24902,24905,24926,24928,24940,24946,24952,24955,24956,24959,24960,24961,24963,24964,24971,24973,24978,24979,24983,24984,24988,24989,24991,24992,24997,25000,25002,25005,25016,25017,25020,25024,25025,25026,25038,25039,25045,25052,25053,25054,25055,25057,25058,25063,25065,25061,25068,25069,25071,25089,25091,25092,25095,25107,25109,25116,25120,25122,25123,25127,25129,25131,25145,25149,25154,25155,25156,25158,25164,25168,25169,25170,25172,25174,25178,25180,25188,25197,25199,25203,25210,25213,25229,25230,25231,25232,25254,25256,25267,25270,25271,25274,25278,25279,25284,25294,25301,25302,25306,25322,25330,25332,25340,25341,25347,25348,25354,25355,25357,25360,25363,25366,25368,25385,25386,25389,25397,25398,25401,25404,25409,25410,25411,25412,25414,25418,25419,25422,25426,25427,25428,25432,25435,25445,25446,25452,25453,25457,25460,25461,25464,25468,25469,25471,25474,25476,25479,25482,25488,25492,25493,25497,25498,25502,25508,25510,25517,25518,25519,25533,25537,25541,25544,25550,25553,25555,25556,25557,25564,25568,25573,25578,25580,25586,25587,25589,25592,25593,25609,25610,25616,25618,25620,25624,25630,25632,25634,25636,25637,25641,25642,25647,25648,25653,25661,25663,25675,25679,25681,25682,25683,25684,25690,25691,25692,25693,25695,25696,25697,25699,25709,25715,25716,25723,25725,25733,25735,25743,25744,25745,25752,25753,25755,25757,25759,25761,25763,25766,25768,25772,25779,25789,25790,25791,25796,25801,25802,25803,25804,25806,25808,25809,25813,25815,25828,25829,25833,25834,25837,25840,25845,25847,25851,25855,25857,25860,25864,25865,25866,25871,25875,25876,25878,25881,25883,25886,25887,25890,25894,25897,25902,25905,25914,25916,25917,25923,25927,25929,25936,25938,25940,25951,25952,25959,25963,25978,25981,25985,25989,25994,26002,26005,26008,26013,26016,26019,26022,26030,26034,26035,26036,26047,26050,26056,26057,26062,26064,26068,26070,26072,26079,26096,26098,26100,26101,26105,26110,26111,26112,26116,26120,26121,26125,26129,26130,26133,26134,26141,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26161,26163,26169,26167,26176,26181,26182,26186,26188,26193,26190,26199,26200,26201,26203,26204,26208,26209,26363,26218,26219,26220,26238,26227,26229,26239,26231,26232,26233,26235,26240,26236,26251,26252,26253,26256,26258,26265,26266,26267,26268,26271,26272,26276,26285,26289,26290,26293,26299,26303,26304,26306,26307,26312,26316,26318,26319,26324,26331,26335,26344,26347,26348,26350,26362,26373,26375,26382,26387,26393,26396,26400,26402,26419,26430,26437,26439,26440,26444,26452,26453,26461,26470,26476,26478,26484,26486,26491,26497,26500,26510,26511,26513,26515,26518,26520,26521,26523,26544,26545,26546,26549,26555,26556,26557,26617,26560,26562,26563,26565,26568,26569,26578,26583,26585,26588,26593,26598,26608,26610,26614,26615,26706,26644,26649,26653,26655,26664,26663,26668,26669,26671,26672,26673,26675,26683,26687,26692,26693,26698,26700,26709,26711,26712,26715,26731,26734,26735,26736,26737,26738,26741,26745,26746,26747,26748,26754,26756,26758,26760,26774,26776,26778,26780,26785,26787,26789,26793,26794,26798,26802,26811,26821,26824,26828,26831,26832,26833,26835,26838,26841,26844,26845,26853,26856,26858,26859,26860,26861,26864,26865,26869,26870,26875,26876,26877,26886,26889,26890,26896,26897,26899,26902,26903,26929,26931,26933,26936,26939,26946,26949,26953,26958,26967,26971,26979,26980,26981,26982,26984,26985,26988,26992,26993,26994,27002,27003,27007,27008,27021,27026,27030,27032,27041,27045,27046,27048,27051,27053,27055,27063,27064,27066,27068,27077,27080,27089,27094,27095,27106,27109,27118,27119,27121,27123,27125,27134,27136,27137,27139,27151,27153,27157,27162,27165,27168,27172,27176,27184,27186,27188,27191,27195,27198,27199,27205,27206,27209,27210,27214,27216,27217,27218,27221,27222,27227,27236,27239,27242,27249,27251,27262,27265,27267,27270,27271,27273,27275,27281,27291,27293,27294,27295,27301,27307,27311,27312,27313,27316,27325,27326,27327,27334,27337,27336,27340,27344,27348,27349,27350,27356,27357,27364,27367,27372,27376,27377,27378,27388,27389,27394,27395,27398,27399,27401,27407,27408,27409,27415,27419,27422,27428,27432,27435,27436,27439,27445,27446,27451,27455,27462,27466,27469,27474,27478,27480,27485,27488,27495,27499,27502,27504,27509,27517,27518,27522,27525,27543,27547,27551,27552,27554,27555,27560,27561,27564,27565,27566,27568,27576,27577,27581,27582,27587,27588,27593,27596,27606,27610,27617,27619,27622,27623,27630,27633,27639,27641,27647,27650,27652,27653,27657,27661,27662,27664,27666,27673,27679,27686,27687,27688,27692,27694,27699,27701,27702,27706,27707,27711,27722,27723,27725,27727,27730,27732,27737,27739,27740,27755,27757,27759,27764,27766,27768,27769,27771,27781,27782,27783,27785,27796,27797,27799,27800,27804,27807,27824,27826,27828,27842,27846,27853,27855,27856,27857,27858,27860,27862,27866,27868,27872,27879,27881,27883,27884,27886,27890,27892,27908,27911,27914,27918,27919,27921,27923,27930,27942,27943,27944,27751,27950,27951,27953,27961,27964,27967,27991,27998,27999,28001,28005,28007,28015,28016,28028,28034,28039,28049,28050,28052,28054,28055,28056,28074,28076,28084,28087,28089,28093,28095,28100,28104,28106,28110,28111,28118,28123,28125,28127,28128,28130,28133,28137,28143,28144,28148,28150,28156,28160,28164,28190,28194,28199,28210,28214,28217,28219,28220,28228,28229,28232,28233,28235,28239,28241,28242,28243,28244,28247,28252,28253,28254,28258,28259,28264,28275,28283,28285,28301,28307,28313,28320,28327,28333,28334,28337,28339,28347,28351,28352,28353,28355,28359,28360,28362,28365,28366,28367,28395,28397,28398,28409,28411,28413,28420,28424,28426,28428,28429,28438,28440,28442,28443,28454,28457,28458,28463,28464,28467,28470,28475,28476,28461,28495,28497,28498,28499,28503,28505,28506,28509,28510,28513,28514,28520,28524,28541,28542,28547,28551,28552,28555,28556,28557,28560,28562,28563,28564,28566,28570,28575,28576,28581,28582,28583,28584,28590,28591,28592,28597,28598,28604,28613,28615,28616,28618,28634,28638,28648,28649,28656,28661,28665,28668,28669,28672,28677,28678,28679,28685,28695,28704,28707,28719,28724,28727,28729,28732,28739,28740,28744,28745,28746,28747,28756,28757,28765,28766,28750,28772,28773,28780,28782,28789,28790,28798,28801,28805,28806,28820,28821,28822,28823,28824,28827,28836,28843,28848,28849,28852,28855,28874,28881,28883,28884,28885,28886,28888,28892,28900,28922,28931,28932,28933,28934,28935,28939,28940,28943,28958,28960,28971,28973,28975,28976,28977,28984,28993,28997,28998,28999,29002,29003,29008,29010,29015,29018,29020,29022,29024,29032,29049,29056,29061,29063,29068,29074,29082,29083,29088,29090,29103,29104,29106,29107,29114,29119,29120,29121,29124,29131,29132,29139,29142,29145,29146,29148,29176,29182,29184,29191,29192,29193,29203,29207,29210,29213,29215,29220,29227,29231,29236,29240,29241,29249,29250,29251,29253,29262,29263,29264,29267,29269,29270,29274,29276,29278,29280,29283,29288,29291,29294,29295,29297,29303,29304,29307,29308,29311,29316,29321,29325,29326,29331,29339,29352,29357,29358,29361,29364,29374,29377,29383,29385,29388,29397,29398,29400,29407,29413,29427,29428,29434,29435,29438,29442,29444,29445,29447,29451,29453,29458,29459,29464,29465,29470,29474,29476,29479,29480,29484,29489,29490,29493,29498,29499,29501,29507,29517,29520,29522,29526,29528,29533,29534,29535,29536,29542,29543,29545,29547,29548,29550,29551,29553,29559,29561,29564,29568,29569,29571,29573,29574,29582,29584,29587,29589,29591,29592,29596,29598,29599,29600,29602,29605,29606,29610,29611,29613,29621,29623,29625,29628,29629,29631,29637,29638,29641,29643,29644,29647,29650,29651,29654,29657,29661,29665,29667,29670,29671,29673,29684,29685,29687,29689,29690,29691,29693,29695,29696,29697,29700,29703,29706,29713,29722,29723,29732,29734,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29753,29760,29763,29764,29766,29767,29771,29773,29777,29778,29783,29789,29794,29798,29799,29800,29803,29805,29806,29809,29810,29824,29825,29829,29830,29831,29833,29839,29840,29841,29842,29848,29849,29850,29852,29855,29856,29857,29859,29862,29864,29865,29866,29867,29870,29871,29873,29874,29877,29881,29883,29887,29896,29897,29900,29904,29907,29912,29914,29915,29918,29919,29924,29928,29930,29931,29935,29940,29946,29947,29948,29951,29958,29970,29974,29975,29984,29985,29988,29991,29993,29994,29999,30006,30009,30013,30014,30015,30016,30019,30023,30024,30030,30032,30034,30039,30046,30047,30049,30063,30065,30073,30074,30075,30076,30077,30078,30081,30085,30096,30098,30099,30101,30105,30108,30114,30116,30132,30138,30143,30144,30145,30148,30150,30156,30158,30159,30167,30172,30175,30176,30177,30180,30183,30188,30190,30191,30193,30201,30208,30210,30211,30212,30215,30216,30218,30220,30223,30226,30227,30229,30230,30233,30235,30236,30237,30238,30243,30245,30246,30249,30253,30258,30259,30261,30264,30265,30266,30268,30282,30272,30273,30275,30276,30277,30281,30283,30293,30297,30303,30308,30309,30317,30318,30319,30321,30324,30337,30341,30348,30349,30357,30363,30364,30365,30367,30368,30370,30371,30372,30373,30374,30375,30376,30378,30381,30397,30401,30405,30409,30411,30412,30414,30420,30425,30432,30438,30440,30444,30448,30449,30454,30457,30460,30464,30470,30474,30478,30482,30484,30485,30487,30489,30490,30492,30498,30504,30509,30510,30511,30516,30517,30518,30521,30525,30526,30530,30533,30534,30538,30541,30542,30543,30546,30550,30551,30556,30558,30559,30560,30562,30564,30567,30570,30572,30576,30578,30579,30580,30586,30589,30592,30596,30604,30605,30612,30613,30614,30618,30623,30626,30631,30634,30638,30639,30641,30645,30654,30659,30665,30673,30674,30677,30681,30686,30687,30688,30692,30694,30698,30700,30704,30705,30708,30712,30715,30725,30726,30729,30733,30734,30737,30749,30753,30754,30755,30765,30766,30768,30773,30775,30787,30788,30791,30792,30796,30798,30802,30812,30814,30816,30817,30819,30820,30824,30826,30830,30842,30846,30858,30863,30868,30872,30881,30877,30878,30879,30884,30888,30892,30893,30896,30897,30898,30899,30907,30909,30911,30919,30920,30921,30924,30926,30930,30931,30933,30934,30948,30939,30943,30944,30945,30950,30954,30962,30963,30976,30966,30967,30970,30971,30975,30982,30988,30992,31002,31004,31006,31007,31008,31013,31015,31017,31021,31025,31028,31029,31035,31037,31039,31044,31045,31046,31050,31051,31055,31057,31060,31064,31067,31068,31079,31081,31083,31090,31097,31099,31100,31102,31115,31116,31121,31123,31124,31125,31126,31128,31131,31132,31137,31144,31145,31147,31151,31153,31156,31160,31163,31170,31172,31175,31176,31178,31183,31188,31190,31194,31197,31198,31200,31202,31205,31210,31211,31213,31217,31224,31228,31234,31235,31239,31241,31242,31244,31249,31253,31259,31262,31265,31271,31275,31277,31279,31280,31284,31285,31288,31289,31290,31300,31301,31303,31304,31308,31317,31318,31321,31324,31325,31327,31328,31333,31335,31338,31341,31349,31352,31358,31360,31362,31365,31366,31370,31371,31376,31377,31380,31390,31392,31395,31404,31411,31413,31417,31419,31420,31430,31433,31436,31438,31441,31451,31464,31465,31467,31468,31473,31476,31483,31485,31486,31495,31508,31519,31523,31527,31529,31530,31531,31533,31534,31535,31536,31537,31540,31549,31551,31552,31553,31559,31566,31573,31584,31588,31590,31593,31594,31597,31599,31602,31603,31607,31620,31625,31630,31632,31633,31638,31643,31646,31648,31653,31660,31663,31664,31666,31669,31670,31674,31675,31676,31677,31682,31685,31688,31690,31700,31702,31703,31705,31706,31707,31720,31722,31730,31732,31733,31736,31737,31738,31740,31742,31745,31746,31747,31748,31750,31753,31755,31756,31758,31759,31769,31771,31776,31781,31782,31784,31788,31793,31795,31796,31798,31801,31802,31814,31818,31829,31825,31826,31827,31833,31834,31835,31836,31837,31838,31841,31843,31847,31849,31853,31854,31856,31858,31865,31868,31869,31878,31879,31887,31892,31902,31904,31910,31920,31926,31927,31930,31931,31932,31935,31940,31943,31944,31945,31949,31951,31955,31956,31957,31959,31961,31962,31965,31974,31977,31979,31989,32003,32007,32008,32009,32015,32017,32018,32019,32022,32029,32030,32035,32038,32042,32045,32049,32060,32061,32062,32064,32065,32071,32072,32077,32081,32083,32087,32089,32090,32092,32093,32101,32103,32106,32112,32120,32122,32123,32127,32129,32130,32131,32133,32134,32136,32139,32140,32141,32145,32150,32151,32157,32158,32166,32167,32170,32179,32182,32183,32185,32194,32195,32196,32197,32198,32204,32205,32206,32215,32217,32256,32226,32229,32230,32234,32235,32237,32241,32245,32246,32249,32250,32264,32272,32273,32277,32279,32284,32285,32288,32295,32296,32300,32301,32303,32307,32310,32319,32324,32325,32327,32334,32336,32338,32344,32351,32353,32354,32357,32363,32366,32367,32371,32376,32382,32385,32390,32391,32394,32397,32401,32405,32408,32410,32413,32414,32572,32571,32573,32574,32575,32579,32580,32583,32591,32594,32595,32603,32604,32605,32609,32611,32612,32613,32614,32621,32625,32637,32638,32639,32640,32651,32653,32655,32656,32657,32662,32663,32668,32673,32674,32678,32682,32685,32692,32700,32703,32704,32707,32712,32718,32719,32731,32735,32739,32741,32744,32748,32750,32751,32754,32762,32765,32766,32767,32775,32776,32778,32781,32782,32783,32785,32787,32788,32790,32797,32798,32799,32800,32804,32806,32812,32814,32816,32820,32821,32823,32825,32826,32828,32830,32832,32836,32864,32868,32870,32877,32881,32885,32897,32904,32910,32924,32926,32934,32935,32939,32952,32953,32968,32973,32975,32978,32980,32981,32983,32984,32992,33005,33006,33008,33010,33011,33014,33017,33018,33022,33027,33035,33046,33047,33048,33052,33054,33056,33060,33063,33068,33072,33077,33082,33084,33093,33095,33098,33100,33106,33111,33120,33121,33127,33128,33129,33133,33135,33143,33153,33168,33156,33157,33158,33163,33166,33174,33176,33179,33182,33186,33198,33202,33204,33211,33227,33219,33221,33226,33230,33231,33237,33239,33243,33245,33246,33249,33252,33259,33260,33264,33265,33266,33269,33270,33272,33273,33277,33279,33280,33283,33295,33299,33300,33305,33306,33309,33313,33314,33320,33330,33332,33338,33347,33348,33349,33350,33355,33358,33359,33361,33366,33372,33376,33379,33383,33389,33396,33403,33405,33407,33408,33409,33411,33412,33415,33417,33418,33422,33425,33428,33430,33432,33434,33435,33440,33441,33443,33444,33447,33448,33449,33450,33454,33456,33458,33460,33463,33466,33468,33470,33471,33478,33488,33493,33498,33504,33506,33508,33512,33514,33517,33519,33526,33527,33533,33534,33536,33537,33543,33544,33546,33547,33620,33563,33565,33566,33567,33569,33570,33580,33581,33582,33584,33587,33591,33594,33596,33597,33602,33603,33604,33607,33613,33614,33617,33621,33622,33623,33648,33656,33661,33663,33664,33666,33668,33670,33677,33682,33684,33685,33688,33689,33691,33692,33693,33702,33703,33705,33708,33726,33727,33728,33735,33737,33743,33744,33745,33748,33757,33619,33768,33770,33782,33784,33785,33788,33793,33798,33802,33807,33809,33813,33817,33709,33839,33849,33861,33863,33864,33866,33869,33871,33873,33874,33878,33880,33881,33882,33884,33888,33892,33893,33895,33898,33904,33907,33908,33910,33912,33916,33917,33921,33925,33938,33939,33941,33950,33958,33960,33961,33962,33967,33969,33972,33978,33981,33982,33984,33986,33991,33992,33996,33999,34003,34012,34023,34026,34031,34032,34033,34034,34039,34098,34042,34043,34045,34050,34051,34055,34060,34062,34064,34076,34078,34082,34083,34084,34085,34087,34090,34091,34095,34099,34100,34102,34111,34118,34127,34128,34129,34130,34131,34134,34137,34140,34141,34142,34143,34144,34145,34146,34148,34155,34159,34169,34170,34171,34173,34175,34177,34181,34182,34185,34187,34188,34191,34195,34200,34205,34207,34208,34210,34213,34215,34228,34230,34231,34232,34236,34237,34238,34239,34242,34247,34250,34251,34254,34221,34264,34266,34271,34272,34278,34280,34285,34291,34294,34300,34303,34304,34308,34309,34317,34318,34320,34321,34322,34328,34329,34331,34334,34337,34343,34345,34358,34360,34362,34364,34365,34368,34370,34374,34386,34387,34390,34391,34392,34393,34397,34400,34401,34402,34403,34404,34409,34412,34415,34421,34422,34423,34426,34445,34449,34454,34456,34458,34460,34465,34470,34471,34472,34477,34481,34483,34484,34485,34487,34488,34489,34495,34496,34497,34499,34501,34513,34514,34517,34519,34522,34524,34528,34531,34533,34535,34440,34554,34556,34557,34564,34565,34567,34571,34574,34575,34576,34579,34580,34585,34590,34591,34593,34595,34600,34606,34607,34609,34610,34617,34618,34620,34621,34622,34624,34627,34629,34637,34648,34653,34657,34660,34661,34671,34673,34674,34683,34691,34692,34693,34694,34695,34696,34697,34699,34700,34704,34707,34709,34711,34712,34713,34718,34720,34723,34727,34732,34733,34734,34737,34741,34750,34751,34753,34760,34761,34762,34766,34773,34774,34777,34778,34780,34783,34786,34787,34788,34794,34795,34797,34801,34803,34808,34810,34815,34817,34819,34822,34825,34826,34827,34832,34841,34834,34835,34836,34840,34842,34843,34844,34846,34847,34856,34861,34862,34864,34866,34869,34874,34876,34881,34883,34885,34888,34889,34890,34891,34894,34897,34901,34902,34904,34906,34908,34911,34912,34916,34921,34929,34937,34939,34944,34968,34970,34971,34972,34975,34976,34984,34986,35002,35005,35006,35008,35018,35019,35020,35021,35022,35025,35026,35027,35035,35038,35047,35055,35056,35057,35061,35063,35073,35078,35085,35086,35087,35093,35094,35096,35097,35098,35100,35104,35110,35111,35112,35120,35121,35122,35125,35129,35130,35134,35136,35138,35141,35142,35145,35151,35154,35159,35162,35163,35164,35169,35170,35171,35179,35182,35184,35187,35189,35194,35195,35196,35197,35209,35213,35216,35220,35221,35227,35228,35231,35232,35237,35248,35252,35253,35254,35255,35260,35284,35285,35286,35287,35288,35301,35305,35307,35309,35313,35315,35318,35321,35325,35327,35332,35333,35335,35343,35345,35346,35348,35349,35358,35360,35362,35364,35366,35371,35372,35375,35381,35383,35389,35390,35392,35395,35397,35399,35401,35405,35406,35411,35414,35415,35416,35420,35421,35425,35429,35431,35445,35446,35447,35449,35450,35451,35454,35455,35456,35459,35462,35467,35471,35472,35474,35478,35479,35481,35487,35495,35497,35502,35503,35507,35510,35511,35515,35518,35523,35526,35528,35529,35530,35537,35539,35540,35541,35543,35549,35551,35564,35568,35572,35573,35574,35580,35583,35589,35590,35595,35601,35612,35614,35615,35594,35629,35632,35639,35644,35650,35651,35652,35653,35654,35656,35666,35667,35668,35673,35661,35678,35683,35693,35702,35704,35705,35708,35710,35713,35716,35717,35723,35725,35727,35732,35733,35740,35742,35743,35896,35897,35901,35902,35909,35911,35913,35915,35919,35921,35923,35924,35927,35928,35931,35933,35929,35939,35940,35942,35944,35945,35949,35955,35957,35958,35963,35966,35974,35975,35979,35984,35986,35987,35993,35995,35996,36004,36025,36026,36037,36038,36041,36043,36047,36054,36053,36057,36061,36065,36072,36076,36079,36080,36082,36085,36087,36088,36094,36095,36097,36099,36105,36114,36119,36123,36197,36201,36204,36206,36223,36226,36228,36232,36237,36240,36241,36245,36254,36255,36256,36262,36267,36268,36271,36274,36277,36279,36281,36283,36288,36293,36294,36295,36296,36298,36302,36305,36308,36309,36311,36313,36324,36325,36327,36332,36336,36284,36337,36338,36340,36349,36353,36356,36357,36358,36363,36369,36372,36374,36384,36385,36386,36387,36390,36391,36401,36403,36406,36407,36408,36409,36413,36416,36417,36427,36429,36430,36431,36436,36443,36444,36445,36446,36449,36450,36457,36460,36461,36463,36464,36465,36473,36474,36475,36482,36483,36489,36496,36498,36501,36506,36507,36509,36510,36514,36519,36521,36525,36526,36531,36533,36538,36539,36544,36545,36547,36548,36551,36559,36561,36564,36572,36584,36590,36592,36593,36599,36601,36602,36589,36608,36610,36615,36616,36623,36624,36630,36631,36632,36638,36640,36641,36643,36645,36647,36648,36652,36653,36654,36660,36661,36662,36663,36666,36672,36673,36675,36679,36687,36689,36690,36691,36692,36693,36696,36701,36702,36709,36765,36768,36769,36772,36773,36774,36789,36790,36792,36798,36800,36801,36806,36810,36811,36813,36816,36818,36819,36821,36832,36835,36836,36840,36846,36849,36853,36854,36859,36862,36866,36868,36872,36876,36888,36891,36904,36905,36911,36906,36908,36909,36915,36916,36919,36927,36931,36932,36940,36955,36957,36962,36966,36967,36972,36976,36980,36985,36997,37000,37003,37004,37006,37008,37013,37015,37016,37017,37019,37024,37025,37026,37029,37040,37042,37043,37044,37046,37053,37068,37054,37059,37060,37061,37063,37064,37077,37079,37080,37081,37084,37085,37087,37093,37074,37110,37099,37103,37104,37108,37118,37119,37120,37124,37125,37126,37128,37133,37136,37140,37142,37143,37144,37146,37148,37150,37152,37157,37154,37155,37159,37161,37166,37167,37169,37172,37174,37175,37177,37178,37180,37181,37187,37191,37192,37199,37203,37207,37209,37210,37211,37217,37220,37223,37229,37236,37241,37242,37243,37249,37251,37253,37254,37258,37262,37265,37267,37268,37269,37272,37278,37281,37286,37288,37292,37293,37294,37296,37297,37298,37299,37302,37307,37308,37309,37311,37314,37315,37317,37331,37332,37335,37337,37338,37342,37348,37349,37353,37354,37356,37357,37358,37359,37360,37361,37367,37369,37371,37373,37376,37377,37380,37381,37382,37383,37385,37386,37388,37392,37394,37395,37398,37400,37404,37405,37411,37412,37413,37414,37416,37422,37423,37424,37427,37429,37430,37432,37433,37434,37436,37438,37440,37442,37443,37446,37447,37450,37453,37454,37455,37457,37464,37465,37468,37469,37472,37473,37477,37479,37480,37481,37486,37487,37488,37493,37494,37495,37496,37497,37499,37500,37501,37503,37512,37513,37514,37517,37518,37522,37527,37529,37535,37536,37540,37541,37543,37544,37547,37551,37554,37558,37560,37562,37563,37564,37565,37567,37568,37569,37570,37571,37573,37574,37575,37576,37579,37580,37581,37582,37584,37587,37589,37591,37592,37593,37596,37597,37599,37600,37601,37603,37605,37607,37608,37612,37614,37616,37625,37627,37631,37632,37634,37640,37645,37649,37652,37653,37660,37661,37662,37663,37665,37668,37669,37671,37673,37674,37683,37684,37686,37687,37703,37704,37705,37712,37713,37714,37717,37719,37720,37722,37726,37732,37733,37735,37737,37738,37741,37743,37744,37745,37747,37748,37750,37754,37757,37759,37760,37761,37762,37768,37770,37771,37773,37775,37778,37781,37784,37787,37790,37793,37795,37796,37798,37800,37803,37812,37813,37814,37818,37801,37825,37828,37829,37830,37831,37833,37834,37835,37836,37837,37843,37849,37852,37854,37855,37858,37862,37863,37881,37879,37880,37882,37883,37885,37889,37890,37892,37896,37897,37901,37902,37903,37909,37910,37911,37919,37934,37935,37937,37938,37939,37940,37947,37951,37949,37955,37957,37960,37962,37964,37973,37977,37980,37983,37985,37987,37992,37995,37997,37998,37999,38001,38002,38020,38019,38264,38265,38270,38276,38280,38284,38285,38286,38301,38302,38303,38305,38310,38313,38315,38316,38324,38326,38330,38333,38335,38342,38344,38345,38347,38352,38353,38354,38355,38361,38362,38365,38366,38367,38368,38372,38374,38429,38430,38434,38436,38437,38438,38444,38449,38451,38455,38456,38457,38458,38460,38461,38465,38482,38484,38486,38487,38488,38497,38510,38516,38523,38524,38526,38527,38529,38530,38531,38532,38537,38545,38550,38554,38557,38559,38564,38565,38566,38569,38574,38575,38579,38586,38602,38610,23986,38616,38618,38621,38622,38623,38633,38639,38641,38650,38658,38659,38661,38665,38682,38683,38685,38689,38690,38691,38696,38705,38707,38721,38723,38730,38734,38735,38741,38743,38744,38746,38747,38755,38759,38762,38766,38771,38774,38775,38776,38779,38781,38783,38784,38793,38805,38806,38807,38809,38810,38814,38815,38818,38828,38830,38833,38834,38837,38838,38840,38841,38842,38844,38846,38847,38849,38852,38853,38855,38857,38858,38860,38861,38862,38864,38865,38868,38871,38872,38873,38877,38878,38880,38875,38881,38884,38895,38897,38900,38903,38904,38906,38919,38922,38937,38925,38926,38932,38934,38940,38942,38944,38947,38950,38955,38958,38959,38960,38962,38963,38965,38949,38974,38980,38983,38986,38993,38994,38995,38998,38999,39001,39002,39010,39011,39013,39014,39018,39020,39083,39085,39086,39088,39092,39095,39096,39098,39099,39103,39106,39109,39112,39116,39137,39139,39141,39142,39143,39146,39155,39158,39170,39175,39176,39185,39189,39190,39191,39194,39195,39196,39199,39202,39206,39207,39211,39217,39218,39219,39220,39221,39225,39226,39227,39228,39232,39233,39238,39239,39240,39245,39246,39252,39256,39257,39259,39260,39262,39263,39264,39323,39325,39327,39334,39344,39345,39346,39349,39353,39354,39357,39359,39363,39369,39379,39380,39385,39386,39388,39390,39399,39402,39403,39404,39408,39412,39413,39417,39421,39422,39426,39427,39428,39435,39436,39440,39441,39446,39454,39456,39458,39459,39460,39463,39469,39470,39475,39477,39478,39480,39495,39489,39492,39498,39499,39500,39502,39505,39508,39510,39517,39594,39596,39598,39599,39602,39604,39605,39606,39609,39611,39614,39615,39617,39619,39622,39624,39630,39632,39634,39637,39638,39639,39643,39644,39648,39652,39653,39655,39657,39660,39666,39667,39669,39673,39674,39677,39679,39680,39681,39682,39683,39684,39685,39688,39689,39691,39692,39693,39694,39696,39698,39702,39705,39707,39708,39712,39718,39723,39725,39731,39732,39733,39735,39737,39738,39741,39752,39755,39756,39765,39766,39767,39771,39774,39777,39779,39781,39782,39784,39786,39787,39788,39789,39790,39795,39797,39799,39800,39801,39807,39808,39812,39813,39814,39815,39817,39818,39819,39821,39823,39824,39828,39834,39837,39838,39846,39847,39849,39852,39856,39857,39858,39863,39864,39867,39868,39870,39871,39873,39879,39880,39886,39888,39895,39896,39901,39903,39909,39911,39914,39915,39919,39923,39927,39928,39929,39930,39933,39935,39936,39938,39947,39951,39953,39958,39960,39961,39962,39964,39966,39970,39971,39974,39975,39976,39977,39978,39985,39989,39990,39991,39997,40001,40003,40004,40005,40009,40010,40014,40015,40016,40019,40020,40022,40024,40027,40029,40030,40031,40035,40041,40042,40028,40043,40040,40046,40048,40050,40053,40055,40059,40166,40178,40183,40185,40203,40194,40209,40215,40216,40220,40221,40222,40239,40240,40242,40243,40244,40250,40252,40261,40253,40258,40259,40263,40266,40275,40276,40287,40291,40290,40293,40297,40298,40299,40304,40310,40311,40315,40316,40318,40323,40324,40326,40330,40333,40334,40338,40339,40341,40342,40343,40344,40353,40362,40364,40366,40369,40373,40377,40380,40383,40387,40391,40393,40394,40404,40405,40406,40407,40410,40414,40415,40416,40421,40423,40425,40427,40430,40432,40435,40436,40446,40458,40450,40455,40462,40464,40465,40466,40469,40470,40473,40476,40477,40570,40571,40572,40576,40578,40579,40580,40581,40583,40590,40591,40598,40600,40603,40606,40612,40616,40620,40622,40623,40624,40627,40628,40629,40646,40648,40651,40661,40671,40676,40679,40684,40685,40686,40688,40689,40690,40693,40696,40703,40706,40707,40713,40719,40720,40721,40722,40724,40726,40727,40729,40730,40731,40735,40738,40742,40746,40747,40751,40753,40754,40756,40759,40761,40762,40764,40765,40767,40769,40771,40772,40773,40774,40775,40787,40789,40790,40791,40792,40794,40797,40798,40808,40809,40813,40814,40815,40816,40817,40819,40821,40826,40829,40847,40848,40849,40850,40852,40854,40855,40862,40865,40866,40867,40869]; + protected const TABLE_POINTERS = [8470=>1193,8481=>1195,8544=>1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,8560=>8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8730=>162,8736=>153,8745=>126,125,166,8757=>165,8786=>159,8801=>158,8869=>154,12849=>1201,20008=>8284,20193=>8285,20220=>8286,20224=>8287,20227=>8288,20281=>8289,20310=>8290,20362=>8292,20370=>8291,20372=>8294,20378=>8293,20425=>8277,20429=>8295,20479=>8298,20510=>8299,20514=>8297,20544=>8296,20546=>8302,20550=>8300,20592=>8301,20628=>8303,20696=>8305,20724=>8304,20810=>8306,20836=>8307,20893=>8308,20926=>8309,20972=>8310,21013=>8311,21148=>8312,21158=>8313,21167=>8487,21184=>8314,21211=>8315,21248=>8316,21255=>8317,21284=>8318,21362=>8319,21395=>8320,21426=>8321,21469=>8322,21642=>8325,21660=>8324,21673=>8326,21759=>8327,21894=>8328,22361=>8329,22373=>8330,22444=>8331,22471=>8333,8332,22686=>8336,22706=>8337,22795=>8338,22867=>8339,22875=>8340,22877=>8341,22883=>8342,22948=>8343,22970=>8344,23382=>8345,23488=>8346,23512=>8348,23532=>8349,23582=>8350,23718=>8351,23738=>8352,23797=>8353,23847=>8354,23874=>8357,23891=>8355,23917=>8358,23992=>8359,8360,24016=>8361,24353=>8362,24372=>8363,24389=>8283,24423=>8364,24503=>8365,24542=>8366,24669=>8367,24709=>8368,24714=>8369,24789=>8371,24798=>8370,24818=>8373,24849=>8374,24864=>8372,24880=>8376,24887=>8375,24984=>8377,25107=>8378,25254=>8379,25589=>8380,25696=>8381,25757=>8382,25806=>8383,25934=>8384,26112=>8385,26121=>8388,26133=>8386,26142=>8390,26148=>8391,26158=>8389,26161=>8279,26171=>8387,26199=>8393,26201=>8394,26213=>8392,26227=>8396,26265=>8397,26272=>8398,26290=>8399,26303=>8400,26362=>8401,8282,26382=>8402,26470=>8404,26555=>8405,26560=>8407,26625=>8408,26692=>8409,26706=>8406,26824=>8280,26831=>8410,26984=>8412,27032=>8414,27106=>8415,27184=>8416,27206=>8418,27243=>8417,27251=>8419,27262=>8420,27362=>8421,27364=>8422,27606=>8423,27711=>8424,27740=>8425,27759=>8427,27782=>8426,27866=>8428,27908=>8429,28015=>8431,28039=>8430,28054=>8432,28076=>8433,28111=>8434,28146=>8436,28152=>8435,28156=>8437,28199=>8440,28217=>8438,28220=>8441,28252=>8439,28351=>8442,28552=>8443,28597=>8444,28661=>8445,28677=>8446,28679=>8447,28712=>8448,28805=>8449,28843=>8450,28859=>8278,28932=>8452,28943=>8451,28998=>8454,8455,29020=>8453,29121=>8457,29182=>8458,29361=>8459,29374=>8460,29476=>8461,29559=>8463,29629=>8464,29641=>8465,29650=>8468,29654=>8466,29667=>8467,29685=>8470,29703=>8469,29734=>8471,29737=>8473,8472,29742=>8474,29794=>8475,29833=>8476,29855=>8477,29953=>8478,29999=>8347,30063=>8479,30338=>8480,30363=>8483,8481,30366=>8482,30374=>8484,30534=>8486,30753=>8488,30798=>8489,30820=>8490,30842=>8491,31024=>8492,31124=>8496,31131=>8498,31441=>8499,31463=>8500,31467=>8502,31646=>8503,32072=>8505,32092=>8506,32160=>8508,32183=>8507,32214=>8509,32338=>8510,32394=>8272,32583=>8511,32673=>8512,33537=>8514,33634=>8515,33663=>8516,33735=>8517,33782=>8518,33864=>8519,33972=>8520,34012=>8276,34131=>8521,34137=>8522,34155=>8523,34224=>8525,34823=>8528,35061=>8529,35100=>8273,35346=>8530,35383=>8531,35449=>8532,35495=>8533,35518=>8534,35551=>8535,35574=>8537,35667=>8538,35711=>8539,36080=>8540,36084=>8541,36114=>8542,36214=>8543,36559=>8545,36967=>8548,37086=>8549,37141=>8551,37159=>8552,37335=>8554,37338=>8553,37342=>8555,37348=>8558,8559,37357=>8556,8557,37382=>8560,37386=>8562,37392=>8561,37433=>8569,8563,37436=>8565,37440=>8564,37454=>8566,37457=>8568,37465=>8567,37479=>8570,37495=>8572,8573,37512=>8275,37543=>8571,37584=>8577,37587=>8581,37589=>8579,37591=>8575,37593=>8576,37600=>8580,37607=>8574,37625=>8281,37627=>8584,37631=>8587,37634=>8589,37661=>8588,8586,37665=>8583,37669=>8582,37704=>8274,37719=>8591,37744=>8590,37796=>8592,37830=>8593,37854=>8594,37880=>8595,37937=>8596,37957=>8597,37960=>8598,38290=>8599,38557=>8602,38575=>8603,38707=>8604,38715=>8605,38723=>8606,38733=>8607,38735=>8608,38737=>8609,38741=>8610,38999=>8611,39013=>8612,39207=>8615,39326=>8617,39502=>8618,39641=>8619,39644=>8620,39794=>8622,39797=>8621,39823=>8623,39857=>8624,39867=>8625,39936=>8626,40299=>8628,40304=>8627,40473=>8630,40657=>8631,63785=>8403,63964=>8600,64014=>8323,8334,8335,8356,8395,8411,8413,8456,8462,8485,8493,8494,8495,8497,8501,8504,8513,8524,8526,8527,8536,8544,8546,8547,8550,8578,8585,8601,8613,8614,8616,8629,65282=>8647,65287=>8646,65506=>137,65508=>8645]; + + /** @var array $pointerCache A cached result of flipping the pointer-to-code-point table */ + protected static $pointerCache; + + /** Decodes the next character from the string and returns its code point number + * + * If the end of the string has been reached, false is returned + * + * @return int|bool + */ + public function nextCode() { + $this->posChar++; + $lead = 0x00; + $jis0212 = false; + while (($b = @$this->string[$this->posByte++]) !== "") { + $b = ord($b); + if ($lead == 0) { + if ($b < 0x80) { + return $b; + } elseif ($b < 0x8E || ($b > 0x8F && $b < 0xA1) || $b == 0xFF) { + return $this->errDec($this->errMode, $this->posChar -1, $this->posByte - 1); + } else { + $lead = $b; + continue; + } + } else { + if ($lead == 0x8E && $b >= 0xA1 && $b <= 0xDF) { // JIS X 0201 character + return 0xFF61 - 0xA1 + $b; + } elseif ($lead == 0x8F && $b >= 0xA1 && $b <= 0xFE) { // three-byte JIS X 0212 character + $jis0212 = true; + $lead = $b; + continue; + } + $pointer = null; + if (($lead >= 0xA1 && $lead <= 0xFE) && ($b >= 0xA1 && $b <= 0xFE)) { + $pointer = ($lead - 0xA1) * 94 + $b - 0xA1; + } + $code = ($jis0212 ? (self::TABLE_JIS0212[$pointer] ?? null) : (self::TABLE_JIS0208[$pointer]) ?? null); + if (isset($code)) { + return $code; + } else { + if ($b < 0x80) { + return $this->errDec($this->errMode, $this->posChar -1, --$this->posByte - (1 + (int) $jis0212)); + } else { + return $this->errDec($this->errMode, $this->posChar -1, $this->posByte - (2 + (int) $jis0212)); + } + } + } + } + $this->posByte--; + if ($lead == 0) { + // clean EOF + $this->posChar--; + return false; + } else { + // dirty EOF + return $this->errDec($this->errMode, $this->posChar - 1, $this->posByte - (1 + (int) $jis0212)); + } + } + + public static function encode(int $codePoint, bool $fatal = true): string { + if ($codePoint < 0 || $codePoint > 0x10FFFF) { + throw new EncoderException("Encountered code point outside Unicode range ($codePoint)", self::E_INVALID_CODE_POINT); + } elseif ($codePoint < 128) { + return chr($codePoint); + } elseif ($codePoint >= 0xFF61 && $codePoint <= 0xFF9F) { + return chr(0x8E).chr($codePoint - 0xFF61 + 0xA1); + } else { + switch ($codePoint) { + case 0xA5: + return chr(0x5C); + case 0x203E: + return chr(0x7E); + case 0x2212: + $codePoint = 0xFF0D; + // no break; + default: + $pointer = self::TABLE_POINTERS[$codePoint] ?? (self::$pointerCache ?? (self::$pointerCache = array_flip(self::TABLE_JIS0208)))[$codePoint] ?? null; + if (isset($pointer)) { + $lead = (int) ($pointer / 94) + 0xA1; + $trail = ($pointer % 94) + 0xA1; + return chr($lead).chr($trail); + } else { + return self::errEnc(!$fatal, $codePoint); + } + } + } + } + + protected function seekBack(int $distance): int { + while ($distance > 0 && $this->posByte > 0) { + $this->posChar--; + $distance--; + if ($this->posByte === $this->errMark) { // the previous character was malformed + // move to the correct sync position, pop the error stack, and continue + $this->posByte = $this->errSync; + list($this->errMark, $this->errSync) = array_pop($this->errStack); + continue; + } + // go back one byte + $b1 = ord(@$this->string[--$this->posByte]); + // if the byte is an ASCII byte or the first byte in the string, this is a character + if ($b1 < 0x80 || $this->posByte === 0) { // ASCII bytes are always isolate in EUC-JP + // the byte is a character + continue; + } + // go back a second byte + $b2 = ord(@$this->string[--$this->posByte]); + if ($b2 === 0x8E) { // JIS X 0201 character + // the two bytes form a character + continue; + } elseif ($this->errMark === $this->posByte || $this->posByte === 0) { // an error mark or start of string confirms the start of the character + // the two bytes form a character + continue; + } + // go back a third byte + $b3 = ord(@$this->string[--$this->posByte]); + if ($b3 === 0x8F) { // JIS X 0212 character + // the three bytes form a character + continue; + } else { // JIS X 0208 character + // the previous two bytes formed a character + $this->posByte++; + continue; + } + } + return $distance; + } +} diff --git a/lib/Encoding/EUCKR.php b/lib/Encoding/EUCKR.php index e68393a..b9b2a74 100644 --- a/lib/Encoding/EUCKR.php +++ b/lib/Encoding/EUCKR.php @@ -6,9 +6,9 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; -class EUCKR extends AbstractEncoding implements StatelessEncoding { - const NAME = "EUC-KR"; - const LABELS = [ +class EUCKR extends AbstractEncoding implements Coder, Decoder { + public const NAME = "EUC-KR"; + public const LABELS = [ "cseuckr", "csksc56011987", "euc-kr", @@ -20,7 +20,10 @@ class EUCKR extends AbstractEncoding implements StatelessEncoding { "ksc_5601", "windows-949", ]; - const TABLE_CODES = [44034,44035,44037,44038,44043,44044,44045,44046,44047,44056,44062,44063,44065,44066,44067,44069,44070,44071,44072,44073,44074,44075,44078,44082,44083,44084,32=>44085,44086,44087,44090,44091,44093,44094,44095,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44108,44110,44111,44112,44113,44114,44115,44117,64=>44118,44119,44121,44122,44123,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44146,44147,44149,44150,44153,44155,44156,44157,44158,44159,44162,44167,44168,44173,44174,44175,44177,44178,44179,44181,44182,44183,44184,44185,44186,44187,44190,44194,44195,44196,44197,44198,44199,44203,44205,44206,44209,44210,44211,44212,44213,44214,44215,44218,44222,44223,44224,44226,44227,44229,44230,44231,44233,44234,44235,44237,44238,44239,44240,44241,44242,44243,44244,44246,44248,44249,44250,44251,44252,44253,44254,44255,44258,44259,44261,44262,44265,44267,44269,44270,44274,44276,44279,44280,44281,44282,44283,44286,44287,44289,44290,44291,44293,44295,44296,44297,44298,44299,44302,44304,44306,44307,44308,44309,44310,44311,44313,44314,44315,44317,44318,44319,44321,44322,44323,44324,44325,44326,44327,44328,44330,44331,44334,44335,44336,44337,44338,44339,222=>44342,44343,44345,44346,44347,44349,44350,44351,44352,44353,44354,44355,44358,44360,44362,44363,44364,44365,44366,44367,44369,44370,44371,44373,44374,44375,254=>44377,44378,44379,44380,44381,44382,44383,44384,44386,44388,44389,44390,44391,44392,44393,44394,44395,44398,44399,44401,44402,44407,44408,44409,44410,44414,44416,44419,44420,44421,44422,44423,44426,44427,44429,44430,44431,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44446,44447,44448,44449,44450,44451,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44472,44473,44474,44475,44476,44477,44478,44479,44482,44483,44485,44486,44487,44489,44490,44491,44492,44493,44494,44495,44498,44500,44501,44502,44503,44504,44505,44506,44507,44509,44510,44511,44513,44514,44515,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44538,44539,44541,44542,44546,44547,44548,44549,44550,44551,44554,44556,44558,44559,44560,44561,44562,44563,44565,44566,44567,44568,44569,44570,44571,44572,412=>44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44594,44595,44597,44598,44601,44603,44604,444=>44605,44606,44607,44610,44612,44615,44616,44617,44619,44623,44625,44626,44627,44629,44631,44632,44633,44634,44635,44638,44642,44643,44644,44646,44647,44650,44651,44653,44654,44655,44657,44658,44659,44660,44661,44662,44663,44666,44670,44671,44672,44673,44674,44675,44678,44679,44680,44681,44682,44683,44685,44686,44687,44688,44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44735,44737,44738,44739,44741,44742,44743,44744,44745,44746,44747,44750,44754,44755,44756,44757,44758,44759,44762,44763,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44777,44778,44780,44782,44783,44784,44785,44786,44787,44789,44790,44791,44793,44794,44795,44797,44798,44799,44800,44801,44802,44803,44804,44805,602=>44806,44809,44810,44811,44812,44814,44815,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,634=>44836,44837,44838,44839,44840,44841,44842,44843,44846,44847,44849,44851,44853,44854,44855,44856,44857,44858,44859,44862,44864,44868,44869,44870,44871,44874,44875,44876,44877,44878,44879,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44894,44895,44896,44897,44898,44899,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44922,44923,44924,44925,44926,44927,44929,44930,44931,44933,44934,44935,44937,44938,44939,44940,44941,44942,44943,44946,44947,44948,44950,44951,44952,44953,44954,44955,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44986,44987,44989,44990,44991,44993,44994,44995,44996,44997,44998,45002,45004,45007,45008,45009,45010,45011,45013,45014,45015,45016,45017,45018,45019,45021,45022,45023,45024,45025,792=>45026,45027,45028,45029,45030,45031,45034,45035,45036,45037,45038,45039,45042,45043,45045,45046,45047,45049,45050,45051,45052,45053,45054,45055,45058,45059,824=>45061,45062,45063,45064,45065,45066,45067,45069,45070,45071,45073,45074,45075,45077,45078,45079,45080,45081,45082,45083,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45126,45127,45129,45131,45133,45135,45136,45137,45138,45142,45144,45146,45147,45148,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45182,45183,45185,45186,45187,45189,45190,45191,45192,45193,45194,45195,45198,45200,45202,45203,45204,45205,45206,45207,45211,45213,45214,45219,45220,45221,45222,45223,45226,45232,45234,45238,45239,45241,45242,45243,45245,45246,45247,45248,45249,45250,45251,45254,45258,45259,45260,45261,45262,45263,45266,982=>45267,45269,45270,45271,45273,45274,45275,45276,45277,45278,45279,45281,45282,45283,45284,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296,1014=>45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45322,45325,45326,45327,45329,45332,45333,45334,45335,45338,45342,45343,45344,45345,45346,45350,45351,45353,45354,45355,45357,45358,45359,45360,45361,45362,45363,45366,45370,45371,45372,45373,45374,45375,45378,45379,45381,45382,45383,45385,45386,45387,45388,45389,45390,45391,45394,45395,45398,45399,45401,45402,45403,45405,45406,45407,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45434,45435,45437,45438,45439,45441,45443,45444,45445,45446,45447,45450,45452,45454,45455,45456,45457,45461,45462,45463,45465,45466,45467,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,1172=>45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45517,45518,45519,45521,45522,45523,45525,1204=>45526,45527,45528,45529,45530,45531,45534,45536,45537,45538,45539,45540,45541,45542,45543,45546,45547,45549,45550,45551,45553,45554,45555,45556,45557,45558,45559,45560,45562,45564,45566,45567,45568,45569,45570,45571,45574,45575,45577,45578,45581,45582,45583,45584,45585,45586,45587,45590,45592,45594,45595,45596,45597,45598,45599,45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45621,45622,45623,45624,45625,45626,45627,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45657,45658,45659,45661,45662,45663,45665,45666,45667,45668,45669,45670,45671,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45686,45687,45688,45689,45690,45691,45693,45694,45695,45696,45697,45698,45699,45702,45703,45704,45706,45707,45708,45709,45710,1362=>45711,45714,45715,45717,45718,45719,45723,45724,45725,45726,45727,45730,45732,45735,45736,45737,45739,45741,45742,45743,45745,45746,45747,45749,45750,45751,1394=>45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45770,45771,45773,45774,45775,45777,45779,45780,45781,45782,45783,45786,45788,45790,45791,45792,45793,45795,45799,45801,45802,45808,45809,45810,45814,45820,45821,45822,45826,45827,45829,45830,45831,45833,45834,45835,45836,45837,45838,45839,45842,45846,45847,45848,45849,45850,45851,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904,45905,45906,45907,45911,45913,45914,45917,45920,45921,45922,45923,45926,45928,45930,45932,45933,45935,45938,45939,45941,45942,45943,45945,45946,45947,45948,45949,45950,45951,45954,45958,45959,45960,45961,45962,45963,45965,1552=>45966,45967,45969,45970,45971,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45986,45987,45988,45989,45990,45991,45993,45994,45995,45997,1584=>45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46022,46023,46025,46026,46029,46031,46033,46034,46035,46038,46040,46042,46044,46046,46047,46049,46050,46051,46053,46054,46055,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46097,46098,46099,46100,46101,46102,46103,46105,46106,46107,46109,46110,46111,46113,46114,46115,46116,46117,46118,46119,46122,46124,46125,46126,46127,46128,46129,46130,46131,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46162,46163,46165,46166,46167,46169,46170,46171,46172,46173,46174,46175,46178,46180,46182,1742=>46183,46184,46185,46186,46187,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46209,46210,1774=>46211,46212,46213,46214,46215,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46238,46239,46240,46241,46242,46243,46245,46246,46247,46249,46250,46251,46253,46254,46255,46256,46257,46258,46259,46260,46262,46264,46266,46267,46268,46269,46270,46271,46273,46274,46275,46277,46278,46279,46281,46282,46283,46284,46285,46286,46287,46289,46290,46291,46292,46294,46295,46296,46297,46298,46299,46302,46303,46305,46306,46309,46311,46312,46313,46314,46315,46318,46320,46322,46323,46324,46325,46326,46327,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46358,46359,46361,46362,46365,46366,46367,46368,46369,46370,46371,46374,46379,46380,46381,46382,46383,46386,46387,46389,46390,46391,46393,46394,46395,46396,46397,46398,46399,46402,46406,1932=>46407,46408,46409,46410,46414,46415,46417,46418,46419,46421,46422,46423,46424,46425,46426,46427,46430,46434,46435,46436,46437,46438,46439,46440,46441,46442,1964=>46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46498,46499,46501,46502,46503,46505,46508,46509,46510,46511,46514,46518,46519,46520,46521,46522,46526,46527,46529,46530,46531,46533,46534,46535,46536,46537,46538,46539,46542,46546,46547,46548,46549,46550,46551,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46610,46611,46613,46614,46615,46617,46618,46619,46620,46621,2122=>46622,46623,46624,46625,46626,46627,46628,46630,46631,46632,46633,46634,46635,46637,46638,46639,46640,46641,46642,46643,46645,46646,46647,46648,46649,46650,2154=>46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46693,46694,46695,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46750,46751,46753,46754,46755,46757,46758,46759,46760,46761,46762,46765,46766,46767,46768,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46805,46806,46807,46808,46809,46810,46811,46812,46813,2312=>46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46833,46834,46835,46837,46838,46839,46841,46842,2344=>46843,46844,46845,46846,46847,46850,46851,46852,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46890,46891,46893,46894,46897,46898,46899,46900,46901,46902,46903,46906,46908,46909,46910,46911,46912,46913,46914,46915,46917,46918,46919,46921,46922,46923,46925,46926,46927,46928,46929,46930,46931,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46945,46946,46947,46949,46950,46951,46953,46954,46955,46956,46957,46958,46959,46962,46964,46966,46967,46968,46969,46970,46971,46974,46975,46977,46978,46979,46981,46982,46983,46984,46985,46986,46987,46990,46995,46996,46997,47002,47003,47005,47006,47007,47009,47010,47011,47012,47013,47014,47015,47018,47022,47023,47024,47025,47026,47027,47030,47031,47033,47034,47035,47036,47037,47038,47039,47040,47041,2502=>47042,47043,47044,47045,47046,47048,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,2534=>47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47086,47087,47089,47090,47091,47093,47094,47095,47096,47097,47098,47099,47102,47106,47107,47108,47109,47110,47114,47115,47117,47118,47119,47121,47122,47123,47124,47125,47126,47127,47130,47132,47134,47135,47136,47137,47138,47139,47142,47143,47145,47146,47147,47149,47150,47151,47152,47153,47154,47155,47158,47162,47163,47164,47165,47166,47167,47169,47170,47171,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47186,47188,47189,47190,47191,47192,47193,47194,47195,47198,47199,47201,47202,47203,47205,47206,47207,47208,47209,47210,47211,47214,47216,47218,47219,47220,47221,47222,47223,47225,47226,47227,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,2692=>47264,47265,47266,47267,47268,47269,47270,47271,47273,47274,47275,47276,47277,47278,47279,47281,47282,47283,47285,47286,47287,47289,47290,47291,47292,47293,2724=>47294,47295,47298,47300,47302,47303,47304,47305,47306,47307,47309,47310,47311,47313,47314,47315,47317,47318,47319,47320,47321,47322,47323,47324,47326,47328,47330,47331,47332,47333,47334,47335,47338,47339,47341,47342,47343,47345,47346,47347,47348,47349,47350,47351,47354,47356,47358,47359,47360,47361,47362,47363,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47385,47386,47387,47388,47389,47390,47391,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47422,47423,47425,47426,47427,47429,47430,47431,47432,47433,47434,47435,47437,47438,47440,47442,47443,47444,47445,47446,47447,47450,47451,47453,47454,47455,47457,47458,47459,47460,47461,47462,47463,47466,47468,47470,47471,47472,47473,47474,47475,47478,47479,47481,47482,47483,47485,2882=>47486,47487,47488,47489,47490,47491,47494,47496,47499,47500,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,2914=>47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47534,47535,47537,47538,47539,47541,47542,47543,47544,47545,47546,47547,47550,47552,47554,47555,47556,47557,47558,47559,47562,47563,47565,47571,47572,47573,47574,47575,47578,47580,47583,47584,47586,47590,47591,47593,47594,47595,47597,47598,47599,47600,47601,47602,47603,47606,47611,47612,47613,47614,47615,47618,47619,47620,47621,47622,47623,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47674,47675,47677,47678,47679,47681,47683,47684,47685,47686,47687,47690,47692,47695,47696,47697,47698,47702,47703,47705,47706,47707,47709,47710,47711,47712,47713,47714,47715,47718,47722,47723,47724,47725,47726,47727,3072=>47730,47731,47733,47734,47735,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47750,47752,47753,47754,47755,47757,47758,47759,47760,47761,47762,3104=>47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47786,47789,47790,47791,47793,47795,47796,47797,47798,47799,47802,47804,47806,47807,47808,47809,47810,47811,47813,47814,47815,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47869,47870,47871,47873,47874,47875,47877,47878,47879,47880,47881,47882,47883,47884,47886,47888,47890,47891,47892,47893,47894,47895,47897,47898,47899,47901,47902,47903,47905,47906,47907,47908,47909,47910,47911,47912,47914,47916,47917,47918,47919,47920,47921,47922,47923,47927,47929,47930,47935,47936,47937,47938,47939,47942,47944,47946,47947,47948,47950,47953,47954,3262=>47955,47957,47958,47959,47961,47962,47963,47964,47965,47966,47967,47968,47970,47972,47973,47974,47975,47976,47977,47978,47979,47981,47982,47983,47984,47985,3294=>47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48009,48010,48011,48013,48014,48015,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48037,48038,48039,48041,48042,48043,48045,48046,48047,48048,48049,48050,48051,48053,48054,48056,48057,48058,48059,48060,48061,48062,48063,48065,48066,48067,48069,48070,48071,48073,48074,48075,48076,48077,48078,48079,48081,48082,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48122,48123,48125,48126,48129,48131,48132,48133,48134,48135,48138,48142,48144,48146,48147,48153,48154,48160,48161,48162,48163,48166,48168,48170,48171,48172,48174,48175,48178,48179,48181,3452=>48182,48183,48185,48186,48187,48188,48189,48190,48191,48194,48198,48199,48200,48202,48203,48206,48207,48209,48210,48211,48212,48213,48214,48215,48216,48217,3484=>48218,48219,48220,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48262,48263,48265,48266,48269,48271,48272,48273,48274,48275,48278,48280,48283,48284,48285,48286,48287,48290,48291,48293,48294,48297,48298,48299,48300,48301,48302,48303,48306,48310,48311,48312,48313,48314,48315,48318,48319,48321,48322,48323,48325,48326,48327,48328,48329,48330,48331,48332,48334,48338,48339,48340,48342,48343,48345,48346,48347,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48375,48377,48378,48379,48381,48382,48383,48384,48385,48386,48387,48390,48392,48394,48395,48396,48397,48398,48399,48401,48402,48403,48405,48406,48407,48408,48409,48410,48411,48412,48413,3642=>48414,48415,48416,48417,48418,48419,48421,48422,48423,48424,48425,48426,48427,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,3674=>48442,48443,48444,48445,48446,48447,48449,48450,48451,48452,48453,48454,48455,48458,48459,48461,48462,48463,48465,48466,48467,48468,48469,48470,48471,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48485,48486,48487,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48514,48515,48517,48518,48523,48524,48525,48526,48527,48530,48532,48534,48535,48536,48539,48541,48542,48543,48544,48545,48546,48547,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48561,48562,48563,48564,48565,48566,48567,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48598,48599,48601,48602,48603,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48618,48619,48620,48621,48622,48623,48625,3832=>48626,48627,48629,48630,48631,48633,48634,48635,48636,48637,48638,48639,48641,48642,48644,48646,48647,48648,48649,48650,48651,48654,48655,48657,48658,48659,3864=>48661,48662,48663,48664,48665,48666,48667,48670,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48710,48711,48713,48714,48715,48717,48719,48720,48721,48722,48723,48726,48728,48732,48733,48734,48735,48738,48739,48741,48742,48743,48745,48747,48748,48749,48750,48751,48754,48758,48759,48760,48761,48762,48766,48767,48769,48770,48771,48773,48774,48775,48776,48777,48778,48779,48782,48786,48787,48788,48789,48790,48791,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48850,48851,4022=>48853,48854,48857,48858,48859,48860,48861,48862,48863,48865,48866,48870,48871,48872,48873,48874,48875,48877,48878,48879,48880,48881,48882,48883,48884,48885,4054=>48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48898,48899,48900,48901,48902,48903,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48922,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48962,48963,48965,48966,48967,48969,48970,48971,48972,48973,48974,48975,48978,48979,48980,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49045,49046,49047,49048,49049,49050,49051,49052,49053,4212=>49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49073,49074,49075,49076,49077,49078,49079,49080,4244=>49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49094,49095,49096,49097,49098,49099,49102,49103,49105,49106,49107,49109,49110,49111,49112,49113,49114,49115,49117,49118,49120,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49234,49235,49236,49237,49238,49239,49241,49242,49243,4402=>49245,49246,49247,49249,49250,49251,49252,49253,49254,49255,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,4434=>49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49298,49299,49301,49302,49303,49305,49306,49307,49308,49309,49310,49311,49314,49316,49318,49319,49320,49321,49322,49323,49326,49329,49330,49335,49336,49337,49338,49339,49342,49346,49347,49348,49350,49351,49354,49355,49357,49358,49359,49361,49362,49363,49364,49365,49366,49367,49370,49374,49375,49376,49377,49378,49379,49382,49383,49385,49386,49387,49389,49390,49391,49392,49393,49394,49395,49398,49400,49402,49403,49404,49405,49406,49407,49409,49410,49411,49413,49414,49415,49417,49418,49419,49420,49421,49422,49423,49425,49426,49427,49428,49430,49431,49432,49433,49434,49435,49441,49442,49445,49448,49449,49450,49451,49454,49458,49459,49460,49461,49463,49466,49467,49469,49470,49471,49473,49474,49475,49476,49477,49478,49479,49482,49486,49487,49488,49489,49490,49491,49494,49495,4592=>49497,49498,49499,49501,49502,49503,49504,49505,49506,49507,49510,49514,49515,49516,49517,49518,49519,49521,49522,49523,49525,49526,49527,49529,49530,49531,4624=>49532,49533,49534,49535,49536,49537,49538,49539,49540,49542,49543,49544,49545,49546,49547,49551,49553,49554,49555,49557,49559,49560,49561,49562,49563,49566,49568,49570,49571,49572,49574,49575,49578,49579,49581,49582,49583,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49598,49599,49600,49601,49602,49603,49605,49606,49607,49609,49610,49611,49613,49614,49615,49616,49617,49618,49619,49621,49622,49625,49626,49627,49628,49629,49630,49631,49633,49634,49635,49637,49638,49639,49641,49642,49643,49644,49645,49646,49647,49650,49652,49653,49654,49655,49656,49657,49658,49659,49662,49663,49665,49666,49667,49669,49670,49671,49672,49673,49674,49675,49678,49680,49682,49683,49684,49685,49686,49687,49690,49691,49693,49694,49697,49698,49699,49700,49701,49702,49703,49706,49708,49710,49712,49715,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,4782=>49734,49735,49737,49738,49739,49740,49741,49742,49743,49746,49747,49749,49750,49751,49753,49754,49755,49756,49757,49758,49759,49761,49762,49763,49764,49766,4814=>49767,49768,49769,49770,49771,49774,49775,49777,49778,49779,49781,49782,49783,49784,49785,49786,49787,49790,49792,49794,49795,49796,49797,49798,49799,49802,49803,49804,49805,49806,49807,49809,49810,49811,49812,49813,49814,49815,49817,49818,49820,49822,49823,49824,49825,49826,49827,49830,49831,49833,49834,49835,49838,49839,49840,49841,49842,49843,49846,49848,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49886,49887,49889,49890,49893,49894,49895,49896,49897,49898,49902,49904,49906,49907,49908,49909,49911,49914,49917,49918,49919,49921,49922,49923,49924,49925,49926,49927,49930,49931,49934,49935,49936,49937,49938,49942,49943,49945,49946,49947,49949,49950,49951,49952,49953,49954,49955,49958,49959,49962,49963,49964,49965,49966,49967,49968,49969,49970,4972=>49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49990,49991,49992,49993,49994,49995,49996,49997,5004=>49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50026,50027,50029,50030,50031,50033,50035,50036,50037,50038,50039,50042,50043,50046,50047,50048,50049,50050,50051,50053,50054,50055,50057,50058,50059,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50138,50139,50141,50142,50145,50147,50148,50149,50150,50151,50154,50155,50156,50158,50159,50160,50161,50162,50163,50166,50167,50169,50170,50171,50172,50173,50174,5162=>50175,50176,50177,50178,50179,50180,50181,50182,50183,50185,50186,50187,50188,50189,50190,50191,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,5194=>50203,50204,50205,50206,50207,50208,50209,50210,50211,50213,50214,50215,50216,50217,50218,50219,50221,50222,50223,50225,50226,50227,50229,50230,50231,50232,50233,50234,50235,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50278,50279,50281,50282,50283,50285,50286,50287,50288,50289,50290,50291,50294,50295,50296,50298,50299,50300,50301,50302,50303,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50325,50326,50327,50328,50329,50330,50331,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50361,50362,50363,50365,50366,50367,50368,50369,50370,50371,50372,50373,5352=>50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,5384=>50400,50401,50402,50403,50404,50405,50406,50407,50408,50410,50411,50412,50413,50414,50415,50418,50419,50421,50422,50423,50425,50427,50428,50429,50430,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50445,50446,50447,50449,50450,50451,50453,50454,50455,50456,50457,50458,50459,50461,50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50474,50475,50477,50478,50479,50481,50482,50483,50484,50485,50486,50487,50490,50492,50494,50495,50496,50497,50498,50499,50502,50503,50507,50511,50512,50513,50514,50518,50522,50523,50524,50527,50530,50531,50533,50534,50535,50537,50538,50539,50540,50541,50542,50543,50546,50550,50551,50552,50553,50554,50555,50558,50559,50561,50562,50563,50565,50566,50568,50569,50570,50571,50574,50576,50578,50579,50580,50582,50585,50586,50587,50589,50590,50591,50593,50594,50595,50596,50597,50598,50599,50600,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50614,5542=>50615,50618,50623,50624,50625,50626,50627,50635,50637,50639,50642,50643,50645,50646,50647,50649,50650,50651,50652,50653,50654,50655,50658,50660,50662,50663,5574=>50664,50665,50666,50667,50671,50673,50674,50675,50677,50680,50681,50682,50683,50690,50691,50692,50697,50698,50699,50701,50702,50703,50705,50706,50707,50708,50709,50710,50711,50714,50717,50718,50719,50720,50721,50722,50723,50726,50727,50729,50730,50731,50735,50737,50738,50742,50744,50746,50748,50749,50750,50751,50754,50755,50757,50758,50759,50761,50762,50763,50764,50765,50766,50767,50770,50774,50775,50776,50777,50778,50779,50782,50783,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50797,50798,50800,50802,50803,50804,50805,50806,50807,50810,50811,50813,50814,50815,50817,50818,50819,50820,50821,50822,50823,50826,50828,50830,50831,50832,50833,50834,50835,50838,50839,50841,50842,50843,50845,50846,50847,50848,50849,50850,50851,50854,50856,50858,50859,50860,50861,50862,50863,50866,50867,50869,50870,50871,50875,50876,50877,50878,50879,50882,50884,50886,50887,50888,50889,50890,50891,50894,5732=>50895,50897,50898,50899,50901,50902,50903,50904,50905,50906,50907,50910,50911,50914,50915,50916,50917,50918,50919,50922,50923,50925,50926,50927,50929,50930,5764=>50931,50932,50933,50934,50935,50938,50939,50940,50942,50943,50944,50945,50946,50947,50950,50951,50953,50954,50955,50957,50958,50959,50960,50961,50962,50963,50966,50968,50970,50971,50972,50973,50974,50975,50978,50979,50981,50982,50983,50985,50986,50987,50988,50989,50990,50991,50994,50996,50998,51000,51001,51002,51003,51006,51007,51009,51010,51011,51013,51014,51015,51016,51017,51019,51022,51024,51033,51034,51035,51037,51038,51039,51041,51042,51043,51044,51045,51046,51047,51049,51050,51052,51053,51054,51055,51056,51057,51058,51059,51062,51063,51065,51066,51067,51071,51072,51073,51074,51078,51083,51084,51085,51087,51090,51091,51093,51097,51099,51100,51101,51102,51103,51106,51111,51112,51113,51114,51115,51118,51119,51121,51122,51123,51125,51126,51127,51128,51129,51130,51131,51134,51138,51139,51140,51141,51142,51143,51146,51147,51149,51151,51153,51154,51155,51156,51157,51158,51159,51161,51162,51163,51164,5922=>51166,51167,51168,51169,51170,51171,51173,51174,51175,51177,51178,51179,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,5954=>51195,51196,51197,51198,51199,51202,51203,51205,51206,51207,51209,51211,51212,51213,51214,51215,51218,51220,51223,51224,51225,51226,51227,51230,51231,51233,51234,51235,51237,51238,51239,51240,51241,51242,51243,51246,51248,51250,51251,51252,51253,51254,51255,51257,51258,51259,51261,51262,51263,51265,51266,51267,51268,51269,51270,51271,51274,51275,51278,51279,51280,51281,51282,51283,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51314,51315,51317,51318,51319,51321,51323,51324,51325,51326,51327,51330,51332,51336,51337,51338,51342,51343,51344,51345,51346,51347,51349,51350,51351,51352,51353,51354,51355,51356,51358,51360,51362,51363,51364,51365,51366,51367,51369,51370,51371,51372,51373,51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51390,51391,51392,51393,6112=>51394,51395,51397,51398,51399,51401,51402,51403,51405,51406,51407,51408,51409,51410,51411,51414,51416,51418,51419,51420,51421,51422,51423,51426,51427,51429,6144=>51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51446,51447,51448,51449,51450,51451,51454,51455,51457,51458,51459,51463,51464,51465,51466,51467,51470,12288,12289,12290,183,8229,8230,168,12291,173,8213,8741,65340,8764,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,177,215,247,8800,8804,8805,8734,8756,176,8242,8243,8451,8491,65504,65505,65509,9794,9792,8736,8869,8978,8706,8711,8801,8786,167,8251,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8594,8592,8593,8595,8596,12307,8810,8811,8730,8765,8733,8757,8747,8748,8712,8715,8838,8839,8834,8835,8746,8745,8743,8744,65506,51472,51474,51475,51476,51477,51478,51479,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,6302=>51501,51502,51503,51504,51505,51506,51507,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,6334=>51528,51529,51530,51531,51532,51533,51534,51535,51538,51539,51541,51542,51543,51545,51546,51547,51548,51549,51550,51551,51554,51556,51557,51558,51559,51560,51561,51562,51563,51565,51566,51567,8658,8660,8704,8707,180,65374,711,728,733,730,729,184,731,161,191,720,8750,8721,8719,164,8457,8240,9665,9664,9655,9654,9828,9824,9825,9829,9831,9827,8857,9672,9635,9680,9681,9618,9636,9637,9640,9639,9638,9641,9832,9743,9742,9756,9758,182,8224,8225,8597,8599,8601,8598,8600,9837,9833,9834,9836,12927,12828,8470,13255,8482,13250,13272,8481,8364,174,6460=>51569,51570,51571,51573,51574,51575,51576,51577,51578,51579,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51594,51595,51597,51598,51599,6492=>51601,51602,51603,51604,51605,51606,51607,51610,51612,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,6524=>51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51650,51651,51653,51654,51657,51659,51660,51661,51662,51663,51666,51668,51671,51672,51675,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65510,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,51678,51679,51681,51683,51685,51686,51688,51689,51690,51691,51694,51698,51699,51700,51701,51702,51703,51706,51707,51709,51710,51711,51713,51714,51715,51716,6682=>51717,51718,51719,51722,51726,51727,51728,51729,51730,51731,51733,51734,51735,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,6714=>51750,51751,51752,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,51783,51784,51785,51786,51787,51790,51791,51793,51794,51795,51797,51798,51799,51800,51801,51802,51803,51806,51810,51811,51812,51813,51814,51815,51817,51818,6872=>51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51838,51839,51840,51841,51842,51843,51845,51846,6904=>51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,6951=>8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,6968=>913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,7000=>945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,7030=>51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51902,51903,51905,51906,51907,51909,7062=>51910,51911,51912,51913,51914,51915,51918,51920,51922,51924,51925,51926,51927,51930,51931,51932,51933,51934,51935,51937,51938,51939,51940,51941,51942,51943,7094=>51944,51945,51946,51947,51949,51950,51951,51952,51953,51954,51955,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51977,51978,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,9490,9489,9498,9497,9494,9493,9486,9485,9502,9503,9505,9506,9510,9511,9513,9514,9517,9518,9521,9522,9525,9526,9529,9530,9533,9534,9536,9537,9539,9540,9541,9542,9543,9544,9545,9546,7220=>51979,51980,51981,51982,51983,51985,51986,51987,51989,51990,51991,51993,51994,51995,51996,51997,51998,51999,52002,52003,52004,52005,52006,52007,52008,52009,7252=>52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52034,52035,52036,7284=>52037,52038,52039,52042,52043,52045,52046,52047,52049,52050,52051,52052,52053,52054,52055,52058,52059,52060,52062,52063,52064,52065,52066,52067,52069,52070,52071,52072,52073,52074,52075,52076,13205,13206,13207,8467,13208,13252,13219,13220,13221,13222,13209,13210,13211,13212,13213,13214,13215,13216,13217,13218,13258,13197,13198,13199,13263,13192,13193,13256,13223,13224,13232,13233,13234,13235,13236,13237,13238,13239,13240,13241,13184,13185,13186,13187,13188,13242,13243,13244,13245,13246,13247,13200,13201,13202,13203,13204,8486,13248,13249,13194,13195,13196,13270,13253,13229,13230,13231,13275,13225,13226,13227,13228,13277,13264,13267,13251,13257,13276,13254,7410=>52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,7442=>52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52125,52126,52127,52128,52129,52130,52131,7474=>52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,198,208,170,294,7511=>306,7513=>319,321,216,338,186,222,358,330,7522=>12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,189,8531,8532,188,190,8539,8540,8541,8542,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,7632=>52192,52193,52194,52195,52197,52198,52200,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,7664=>52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52238,52239,52241,52242,52243,52245,52246,52247,52248,52249,52250,52251,52254,52255,52256,52259,52260,230,273,240,295,305,307,312,320,322,248,339,223,254,359,331,329,12800,12801,12802,12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,12827,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,185,178,179,8308,8319,8321,8322,8323,8324,52261,52262,52266,52267,52269,52271,52273,52274,52275,52276,52277,52278,52279,52282,52287,52288,52289,52290,52291,52294,52295,52297,52298,52299,52301,52302,7822=>52303,52304,52305,52306,52307,52310,52314,52315,52316,52317,52318,52319,52321,52322,52323,52325,52327,52329,52330,52331,52332,52333,52334,52335,52337,52338,7854=>52339,52340,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,7980=>52372,52373,52374,52375,52378,52379,52381,52382,52383,52385,52386,52387,52388,52389,52390,52391,52394,52398,52399,52400,52401,52402,52403,52406,52407,52409,8012=>52410,52411,52413,52414,52415,52416,52417,52418,52419,52422,52424,52426,52427,52428,52429,52430,52431,52433,52434,52435,52437,52438,52439,52440,52441,52442,8044=>52443,52444,52445,52446,52447,52448,52449,52450,52451,52453,52454,52455,52456,52457,52458,52459,52461,52462,52463,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,8170=>52478,52479,52480,52482,52483,52484,52485,52486,52487,52490,52491,52493,52494,52495,52497,52498,52499,52500,52501,52502,52503,52506,52508,52510,52511,52512,8202=>52513,52514,52515,52517,52518,52519,52521,52522,52523,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52538,52539,52540,52541,52542,8234=>52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52573,52574,52575,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8314=>1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8360=>52577,52578,52579,52581,52582,52583,52584,52585,52586,52587,52590,52592,52594,52595,52596,52597,52598,52599,52601,52602,52603,52604,52605,52606,52607,52608,8392=>52609,52610,52611,52612,52613,52614,52615,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52630,52631,52633,52634,52635,52637,52638,52639,8424=>52640,52641,52642,52643,52646,52648,52650,52651,52652,52653,52654,52655,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52677,8550=>52678,52679,52680,52681,52682,52683,52685,52686,52687,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,8582=>52706,52707,52708,52709,52710,52711,52713,52714,52715,52717,52718,52719,52721,52722,52723,52724,52725,52726,52727,52730,52732,52734,52735,52736,52737,52738,8614=>52739,52741,52742,52743,52745,52746,52747,52749,52750,52751,52752,52753,52754,52755,52757,52758,52759,52760,52762,52763,52764,52765,52766,52767,52770,52771,52773,52774,52775,52777,52778,52779,8740=>52780,52781,52782,52783,52786,52788,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,8772=>52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52826,52827,52829,52830,52834,52835,52836,52837,52838,52839,52842,52844,8804=>52846,52847,52848,52849,52850,52851,52854,52855,52857,52858,52859,52861,52862,52863,52864,52865,52866,52867,52870,52872,52874,52875,52876,52877,52878,52879,52882,52883,52885,52886,52887,52889,8930=>52890,52891,52892,52893,52894,52895,52898,52902,52903,52904,52905,52906,52907,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,8962=>52923,52924,52925,52926,52927,52928,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,8994=>52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52966,52967,52969,52970,52973,52974,52975,52976,52977,52978,52979,52982,52986,52987,52988,52989,52990,52991,44032,44033,44036,44039,44040,44041,44042,44048,44049,44050,44051,44052,44053,44054,44055,44057,44058,44059,44060,44061,44064,44068,44076,44077,44079,44080,44081,44088,44089,44092,44096,44107,44109,44116,44120,44124,44144,44145,44148,44151,44152,44154,44160,44161,44163,44164,44165,44166,44169,44170,44171,44172,44176,44180,44188,44189,44191,44192,44193,44200,44201,44202,44204,44207,44208,44216,44217,44219,44220,44221,44225,44228,44232,44236,44245,44247,44256,44257,44260,44263,44264,44266,44268,44271,44272,44273,44275,44277,44278,44284,44285,44288,44292,44294,52994,52995,52997,52998,52999,53001,53002,53003,53004,53005,53006,53007,53010,53012,53014,53015,53016,53017,53018,53019,53021,53022,53023,53025,53026,53027,9152=>53029,53030,53031,53032,53033,53034,53035,53038,53042,53043,53044,53045,53046,53047,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,9184=>53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53078,53079,53081,53082,53083,53085,53086,53087,53088,53089,53090,53091,53094,53096,53098,53099,53100,44300,44301,44303,44305,44312,44316,44320,44329,44332,44333,44340,44341,44344,44348,44356,44357,44359,44361,44368,44372,44376,44385,44387,44396,44397,44400,44403,44404,44405,44406,44411,44412,44413,44415,44417,44418,44424,44425,44428,44432,44444,44445,44452,44471,44480,44481,44484,44488,44496,44497,44499,44508,44512,44516,44536,44537,44540,44543,44544,44545,44552,44553,44555,44557,44564,44592,44593,44596,44599,44600,44602,44608,44609,44611,44613,44614,44618,44620,44621,44622,44624,44628,44630,44636,44637,44639,44640,44641,44645,44648,44649,44652,44656,44664,53101,53102,53103,53106,53107,53109,53110,53111,53113,53114,53115,53116,53117,53118,53119,53121,53122,53123,53124,53126,53127,53128,53129,53130,53131,53133,9342=>53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53154,53155,53156,53157,53158,53159,53161,9374=>53162,53163,53164,53165,53166,53167,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53189,53190,53191,53192,53193,53194,53195,44665,44667,44668,44669,44676,44677,44684,44732,44733,44734,44736,44740,44748,44749,44751,44752,44753,44760,44761,44764,44776,44779,44781,44788,44792,44796,44807,44808,44813,44816,44844,44845,44848,44850,44852,44860,44861,44863,44865,44866,44867,44872,44873,44880,44892,44893,44900,44901,44921,44928,44932,44936,44944,44945,44949,44956,44984,44985,44988,44992,44999,45000,45001,45003,45005,45006,45012,45020,45032,45033,45040,45041,45044,45048,45056,45057,45060,45068,45072,45076,45084,45085,45096,45124,45125,45128,45130,45132,45134,45139,45140,45141,45143,45145,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53218,53219,53221,53222,53223,53225,9532=>53226,53227,53228,53229,53230,53231,53234,53236,53238,53239,53240,53241,53242,53243,53245,53246,53247,53249,53250,53251,53253,53254,53255,53256,53257,53258,9564=>53259,53260,53261,53262,53263,53264,53266,53267,53268,53269,53270,53271,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,45149,45180,45181,45184,45188,45196,45197,45199,45201,45208,45209,45210,45212,45215,45216,45217,45218,45224,45225,45227,45228,45229,45230,45231,45233,45235,45236,45237,45240,45244,45252,45253,45255,45256,45257,45264,45265,45268,45272,45280,45285,45320,45321,45323,45324,45328,45330,45331,45336,45337,45339,45340,45341,45347,45348,45349,45352,45356,45364,45365,45367,45368,45369,45376,45377,45380,45384,45392,45393,45396,45397,45400,45404,45408,45432,45433,45436,45440,45442,45448,45449,45451,45453,45458,45459,45460,45464,45468,45480,45516,45520,45524,45532,45533,53294,53295,53296,53297,53298,53299,53302,53303,53305,53306,53307,53309,53310,53311,53312,53313,53314,53315,53318,53320,53322,53323,53324,53325,53326,53327,9722=>53329,53330,53331,53333,53334,53335,53337,53338,53339,53340,53341,53342,53343,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53358,53359,9754=>53361,53362,53363,53365,53366,53367,53368,53369,53370,53371,53374,53375,53376,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,45535,45544,45545,45548,45552,45561,45563,45565,45572,45573,45576,45579,45580,45588,45589,45591,45593,45600,45620,45628,45656,45660,45664,45672,45673,45684,45685,45692,45700,45701,45705,45712,45713,45716,45720,45721,45722,45728,45729,45731,45733,45734,45738,45740,45744,45748,45768,45769,45772,45776,45778,45784,45785,45787,45789,45794,45796,45797,45798,45800,45803,45804,45805,45806,45807,45811,45812,45813,45815,45816,45817,45818,45819,45823,45824,45825,45828,45832,45840,45841,45843,45844,45845,45852,45908,45909,45910,45912,45915,45916,45918,45919,45924,45925,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53414,53415,53417,53418,53419,53421,53422,53423,53424,53425,53426,9912=>53427,53430,53432,53434,53435,53436,53437,53438,53439,53442,53443,53445,53446,53447,53450,53451,53452,53453,53454,53455,53458,53462,53463,53464,53465,53466,9944=>53467,53470,53471,53473,53474,53475,53477,53478,53479,53480,53481,53482,53483,53486,53490,53491,53492,53493,53494,53495,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,45927,45929,45931,45934,45936,45937,45940,45944,45952,45953,45955,45956,45957,45964,45968,45972,45984,45985,45992,45996,46020,46021,46024,46027,46028,46030,46032,46036,46037,46039,46041,46043,46045,46048,46052,46056,46076,46096,46104,46108,46112,46120,46121,46123,46132,46160,46161,46164,46168,46176,46177,46179,46181,46188,46208,46216,46237,46244,46248,46252,46261,46263,46265,46272,46276,46280,46288,46293,46300,46301,46304,46307,46308,46310,46316,46317,46319,46321,46328,46356,46357,46360,46363,46364,46372,46373,46375,46376,46377,46378,46384,46385,46388,46392,53509,53510,53511,53512,53513,53514,53515,53516,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,10102=>53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53554,53555,53557,53558,53559,53561,53563,53564,53565,53566,10134=>53567,53570,53574,53575,53576,53577,53578,53579,53582,53583,53585,53586,53587,53589,53590,53591,53592,53593,53594,53595,53598,53600,53602,53603,53604,53605,53606,53607,53609,53610,53611,53613,46400,46401,46403,46404,46405,46411,46412,46413,46416,46420,46428,46429,46431,46432,46433,46496,46497,46500,46504,46506,46507,46512,46513,46515,46516,46517,46523,46524,46525,46528,46532,46540,46541,46543,46544,46545,46552,46572,46608,46609,46612,46616,46629,46636,46644,46664,46692,46696,46748,46749,46752,46756,46763,46764,46769,46804,46832,46836,46840,46848,46849,46853,46888,46889,46892,46895,46896,46904,46905,46907,46916,46920,46924,46932,46933,46944,46948,46952,46960,46961,46963,46965,46972,46973,46976,46980,46988,46989,46991,46992,46993,46994,46998,46999,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53629,53630,53631,53632,53633,53634,53635,53637,53638,53639,53641,53642,10292=>53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53666,53667,53669,53670,53671,10324=>53673,53674,53675,53676,53677,53678,53679,53682,53684,53686,53687,53688,53689,53691,53693,53694,53695,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,47000,47001,47004,47008,47016,47017,47019,47020,47021,47028,47029,47032,47047,47049,47084,47085,47088,47092,47100,47101,47103,47104,47105,47111,47112,47113,47116,47120,47128,47129,47131,47133,47140,47141,47144,47148,47156,47157,47159,47160,47161,47168,47172,47185,47187,47196,47197,47200,47204,47212,47213,47215,47217,47224,47228,47245,47272,47280,47284,47288,47296,47297,47299,47301,47308,47312,47316,47325,47327,47329,47336,47337,47340,47344,47352,47353,47355,47357,47364,47384,47392,47420,47421,47424,47428,47436,47439,47441,47448,47449,47452,47456,47464,47465,53712,53713,53714,53715,53716,53717,53718,53719,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,10482=>53739,53740,53741,53742,53743,53744,53745,53746,53747,53749,53750,53751,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,10514=>53768,53770,53771,53772,53773,53774,53775,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,47467,47469,47476,47477,47480,47484,47492,47493,47495,47497,47498,47501,47502,47532,47533,47536,47540,47548,47549,47551,47553,47560,47561,47564,47566,47567,47568,47569,47570,47576,47577,47579,47581,47582,47585,47587,47588,47589,47592,47596,47604,47605,47607,47608,47609,47610,47616,47617,47624,47637,47672,47673,47676,47680,47682,47688,47689,47691,47693,47694,47699,47700,47701,47704,47708,47716,47717,47719,47720,47721,47728,47729,47732,47736,47747,47748,47749,47751,47756,47784,47785,47787,47788,47792,47794,47800,47801,47803,47805,47812,47816,47832,47833,47868,53802,53803,53806,53807,53809,53810,53811,53813,53814,53815,53816,53817,53818,53819,53822,53824,53826,53827,53828,53829,53830,53831,53833,53834,53835,53836,10672=>53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53853,53854,53855,53856,53857,53858,53859,53861,53862,53863,53864,10704=>53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53890,53891,53893,53894,53895,53897,53898,53899,53900,47872,47876,47885,47887,47889,47896,47900,47904,47913,47915,47924,47925,47926,47928,47931,47932,47933,47934,47940,47941,47943,47945,47949,47951,47952,47956,47960,47969,47971,47980,48008,48012,48016,48036,48040,48044,48052,48055,48064,48068,48072,48080,48083,48120,48121,48124,48127,48128,48130,48136,48137,48139,48140,48141,48143,48145,48148,48149,48150,48151,48152,48155,48156,48157,48158,48159,48164,48165,48167,48169,48173,48176,48177,48180,48184,48192,48193,48195,48196,48197,48201,48204,48205,48208,48221,48260,48261,48264,48267,48268,48270,48276,48277,48279,53901,53902,53903,53906,53907,53908,53910,53911,53912,53913,53914,53915,53917,53918,53919,53921,53922,53923,53925,53926,53927,53928,53929,53930,53931,53933,10862=>53934,53935,53936,53938,53939,53940,53941,53942,53943,53946,53947,53949,53950,53953,53955,53956,53957,53958,53959,53962,53964,53965,53966,53967,53968,53969,10894=>53970,53971,53973,53974,53975,53977,53978,53979,53981,53982,53983,53984,53985,53986,53987,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54002,54003,54005,54006,54007,54009,54010,48281,48282,48288,48289,48292,48295,48296,48304,48305,48307,48308,48309,48316,48317,48320,48324,48333,48335,48336,48337,48341,48344,48348,48372,48373,48374,48376,48380,48388,48389,48391,48393,48400,48404,48420,48428,48448,48456,48457,48460,48464,48472,48473,48484,48488,48512,48513,48516,48519,48520,48521,48522,48528,48529,48531,48533,48537,48538,48540,48548,48560,48568,48596,48597,48600,48604,48617,48624,48628,48632,48640,48643,48645,48652,48653,48656,48660,48668,48669,48671,48708,48709,48712,48716,48718,48724,48725,48727,48729,48730,48731,48736,48737,48740,54011,54012,54013,54014,54015,54018,54020,54022,54023,54024,54025,54026,54027,54031,54033,54034,54035,54037,54039,54040,54041,54042,54043,54046,54050,54051,11052=>54052,54054,54055,54058,54059,54061,54062,54063,54065,54066,54067,54068,54069,54070,54071,54074,54078,54079,54080,54081,54082,54083,54086,54087,54088,54089,11084=>54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121,48744,48746,48752,48753,48755,48756,48757,48763,48764,48765,48768,48772,48780,48781,48783,48784,48785,48792,48793,48808,48848,48849,48852,48855,48856,48864,48867,48868,48869,48876,48897,48904,48905,48920,48921,48923,48924,48925,48960,48961,48964,48968,48976,48977,48981,49044,49072,49093,49100,49101,49104,49108,49116,49119,49121,49212,49233,49240,49244,49248,49256,49257,49296,49297,49300,49304,49312,49313,49315,49317,49324,49325,49327,49328,49331,49332,49333,49334,49340,49341,49343,49344,49345,49349,49352,49353,49356,49360,49368,49369,49371,49372,49373,49380,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54142,54143,54145,54146,54147,54149,54150,54151,11242=>54152,54153,54154,54155,54158,54162,54163,54164,54165,54166,54167,54170,54171,54173,54174,54175,54177,54178,54179,54180,54181,54182,54183,54186,54188,54190,11274=>54191,54192,54193,54194,54195,54197,54198,54199,54201,54202,54203,54205,54206,54207,54208,54209,54210,54211,54214,54215,54218,54219,54220,54221,54222,54223,54225,54226,54227,54228,54229,54230,49381,49384,49388,49396,49397,49399,49401,49408,49412,49416,49424,49429,49436,49437,49438,49439,49440,49443,49444,49446,49447,49452,49453,49455,49456,49457,49462,49464,49465,49468,49472,49480,49481,49483,49484,49485,49492,49493,49496,49500,49508,49509,49511,49512,49513,49520,49524,49528,49541,49548,49549,49550,49552,49556,49558,49564,49565,49567,49569,49573,49576,49577,49580,49584,49597,49604,49608,49612,49620,49623,49624,49632,49636,49640,49648,49649,49651,49660,49661,49664,49668,49676,49677,49679,49681,49688,49689,49692,49695,49696,49704,49705,49707,49709,54231,54233,54234,54235,54236,54237,54238,54239,54240,54242,54244,54245,54246,54247,54248,54249,54250,54251,54254,54255,54257,54258,54259,54261,54262,54263,11432=>54264,54265,54266,54267,54270,54272,54274,54275,54276,54277,54278,54279,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,11464=>54295,54296,54297,54298,54299,54300,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,49711,49713,49714,49716,49736,49744,49745,49748,49752,49760,49765,49772,49773,49776,49780,49788,49789,49791,49793,49800,49801,49808,49816,49819,49821,49828,49829,49832,49836,49837,49844,49845,49847,49849,49884,49885,49888,49891,49892,49899,49900,49901,49903,49905,49910,49912,49913,49915,49916,49920,49928,49929,49932,49933,49939,49940,49941,49944,49948,49956,49957,49960,49961,49989,50024,50025,50028,50032,50034,50040,50041,50044,50045,50052,50056,50060,50112,50136,50137,50140,50143,50144,50146,50152,50153,50157,50164,50165,50168,50184,50192,50212,50220,50224,54328,54329,54330,54331,54332,54333,54334,54335,54337,54338,54339,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,11622=>54356,54357,54358,54359,54360,54361,54362,54363,54365,54366,54367,54369,54370,54371,54373,54374,54375,54376,54377,54378,54379,54380,54382,54384,54385,54386,11654=>54387,54388,54389,54390,54391,54394,54395,54397,54398,54401,54403,54404,54405,54406,54407,54410,54412,54414,54415,54416,54417,54418,54419,54421,54422,54423,54424,54425,54426,54427,54428,54429,50228,50236,50237,50248,50276,50277,50280,50284,50292,50293,50297,50304,50324,50332,50360,50364,50409,50416,50417,50420,50424,50426,50431,50432,50433,50444,50448,50452,50460,50472,50473,50476,50480,50488,50489,50491,50493,50500,50501,50504,50505,50506,50508,50509,50510,50515,50516,50517,50519,50520,50521,50525,50526,50528,50529,50532,50536,50544,50545,50547,50548,50549,50556,50557,50560,50564,50567,50572,50573,50575,50577,50581,50583,50584,50588,50592,50601,50612,50613,50616,50617,50619,50620,50621,50622,50628,50629,50630,50631,50632,50633,50634,50636,50638,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,11812=>54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54477,54478,54479,54481,54482,54483,54485,11844=>54486,54487,54488,54489,54490,54491,54493,54494,54496,54497,54498,54499,54500,54501,54502,54503,54505,54506,54507,54509,54510,54511,54513,54514,54515,54516,54517,54518,54519,54521,54522,54524,50640,50641,50644,50648,50656,50657,50659,50661,50668,50669,50670,50672,50676,50678,50679,50684,50685,50686,50687,50688,50689,50693,50694,50695,50696,50700,50704,50712,50713,50715,50716,50724,50725,50728,50732,50733,50734,50736,50739,50740,50741,50743,50745,50747,50752,50753,50756,50760,50768,50769,50771,50772,50773,50780,50781,50784,50796,50799,50801,50808,50809,50812,50816,50824,50825,50827,50829,50836,50837,50840,50844,50852,50853,50855,50857,50864,50865,50868,50872,50873,50874,50880,50881,50883,50885,50892,50893,50896,50900,50908,50909,50912,50913,50920,54526,54527,54528,54529,54530,54531,54533,54534,54535,54537,54538,54539,54541,54542,54543,54544,54545,54546,54547,54550,54552,54553,54554,54555,54556,54557,12002=>54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,12034=>54584,54585,54586,54587,54590,54591,54593,54594,54595,54597,54598,54599,54600,54601,54602,54603,54606,54608,54610,54611,54612,54613,54614,54615,54618,54619,54621,54622,54623,54625,54626,54627,50921,50924,50928,50936,50937,50941,50948,50949,50952,50956,50964,50965,50967,50969,50976,50977,50980,50984,50992,50993,50995,50997,50999,51004,51005,51008,51012,51018,51020,51021,51023,51025,51026,51027,51028,51029,51030,51031,51032,51036,51040,51048,51051,51060,51061,51064,51068,51069,51070,51075,51076,51077,51079,51080,51081,51082,51086,51088,51089,51092,51094,51095,51096,51098,51104,51105,51107,51108,51109,51110,51116,51117,51120,51124,51132,51133,51135,51136,51137,51144,51145,51148,51150,51152,51160,51165,51172,51176,51180,51200,51201,51204,51208,51210,54628,54630,54631,54634,54636,54638,54639,54640,54641,54642,54643,54646,54647,54649,54650,54651,54653,54654,54655,54656,54657,54658,54659,54662,54666,54667,12192=>54668,54669,54670,54671,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54694,54695,12224=>54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721,54722,54723,54724,54725,54726,54727,51216,51217,51219,51221,51222,51228,51229,51232,51236,51244,51245,51247,51249,51256,51260,51264,51272,51273,51276,51277,51284,51312,51313,51316,51320,51322,51328,51329,51331,51333,51334,51335,51339,51340,51341,51348,51357,51359,51361,51368,51388,51389,51396,51400,51404,51412,51413,51415,51417,51424,51425,51428,51445,51452,51453,51456,51460,51461,51462,51468,51469,51471,51473,51480,51500,51508,51536,51537,51540,51544,51552,51553,51555,51564,51568,51572,51580,51592,51593,51596,51600,51608,51609,51611,51613,51648,51649,51652,51655,51656,51658,51664,51665,51667,54730,54731,54733,54734,54735,54737,54739,54740,54741,54742,54743,54746,54748,54750,54751,54752,54753,54754,54755,54758,54759,54761,54762,54763,54765,54766,12382=>54767,54768,54769,54770,54771,54774,54776,54778,54779,54780,54781,54782,54783,54786,54787,54789,54790,54791,54793,54794,54795,54796,54797,54798,54799,54802,12414=>54806,54807,54808,54809,54810,54811,54813,54814,54815,54817,54818,54819,54821,54822,54823,54824,54825,54826,54827,54828,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54842,54843,51669,51670,51673,51674,51676,51677,51680,51682,51684,51687,51692,51693,51695,51696,51697,51704,51705,51708,51712,51720,51721,51723,51724,51725,51732,51736,51753,51788,51789,51792,51796,51804,51805,51807,51808,51809,51816,51837,51844,51864,51900,51901,51904,51908,51916,51917,51919,51921,51923,51928,51929,51936,51948,51956,51976,51984,51988,51992,52000,52001,52033,52040,52041,52044,52048,52056,52057,52061,52068,52088,52089,52124,52152,52180,52196,52199,52201,52236,52237,52240,52244,52252,52253,52257,52258,52263,52264,52265,52268,52270,52272,52280,52281,52283,54845,54846,54847,54849,54850,54851,54852,54854,54855,54858,54860,54862,54863,54864,54866,54867,54870,54871,54873,54874,54875,54877,54878,54879,54880,54881,12572=>54882,54883,54884,54885,54886,54888,54890,54891,54892,54893,54894,54895,54898,54899,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,12604=>54913,54914,54916,54918,54919,54920,54921,54922,54923,54926,54927,54929,54930,54931,54933,54934,54935,54936,54937,54938,54939,54940,54942,54944,54946,54947,54948,54949,54950,54951,54953,54954,52284,52285,52286,52292,52293,52296,52300,52308,52309,52311,52312,52313,52320,52324,52326,52328,52336,52341,52376,52377,52380,52384,52392,52393,52395,52396,52397,52404,52405,52408,52412,52420,52421,52423,52425,52432,52436,52452,52460,52464,52481,52488,52489,52492,52496,52504,52505,52507,52509,52516,52520,52524,52537,52572,52576,52580,52588,52589,52591,52593,52600,52616,52628,52629,52632,52636,52644,52645,52647,52649,52656,52676,52684,52688,52712,52716,52720,52728,52729,52731,52733,52740,52744,52748,52756,52761,52768,52769,52772,52776,52784,52785,52787,52789,54955,54957,54958,54959,54961,54962,54963,54964,54965,54966,54967,54968,54970,54972,54973,54974,54975,54976,54977,54978,54979,54982,54983,54985,54986,54987,12762=>54989,54990,54991,54992,54994,54995,54997,54998,55000,55002,55003,55004,55005,55006,55007,55009,55010,55011,55013,55014,55015,55017,55018,55019,55020,55021,12794=>55022,55023,55025,55026,55027,55028,55030,55031,55032,55033,55034,55035,55038,55039,55041,55042,55043,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55058,55059,55060,52824,52825,52828,52831,52832,52833,52840,52841,52843,52845,52852,52853,52856,52860,52868,52869,52871,52873,52880,52881,52884,52888,52896,52897,52899,52900,52901,52908,52909,52929,52964,52965,52968,52971,52972,52980,52981,52983,52984,52985,52992,52993,52996,53000,53008,53009,53011,53013,53020,53024,53028,53036,53037,53039,53040,53041,53048,53076,53077,53080,53084,53092,53093,53095,53097,53104,53105,53108,53112,53120,53125,53132,53153,53160,53168,53188,53216,53217,53220,53224,53232,53233,53235,53237,53244,53248,53252,53265,53272,53293,53300,53301,53304,53308,55061,55062,55063,55066,55067,55069,55070,55071,55073,55074,55075,55076,55077,55078,55079,55082,55084,55086,55087,55088,55089,55090,55091,55094,55095,55097,12952=>55098,55099,55101,55102,55103,55104,55105,55106,55107,55109,55110,55112,55114,55115,55116,55117,55118,55119,55122,55123,55125,55130,55131,55132,55133,55134,12984=>55135,55138,55140,55142,55143,55144,55146,55147,55149,55150,55151,55153,55154,55155,55157,55158,55159,55160,55161,55162,55163,55166,55167,55168,55170,55171,55172,55173,55174,55175,55178,55179,53316,53317,53319,53321,53328,53332,53336,53344,53356,53357,53360,53364,53372,53373,53377,53412,53413,53416,53420,53428,53429,53431,53433,53440,53441,53444,53448,53449,53456,53457,53459,53460,53461,53468,53469,53472,53476,53484,53485,53487,53488,53489,53496,53517,53552,53553,53556,53560,53562,53568,53569,53571,53572,53573,53580,53581,53584,53588,53596,53597,53599,53601,53608,53612,53628,53636,53640,53664,53665,53668,53672,53680,53681,53683,53685,53690,53692,53696,53720,53748,53752,53767,53769,53776,53804,53805,53808,53812,53820,53821,53823,53825,53832,53852,55181,55182,55183,55185,55186,55187,55188,55189,55190,55191,55194,55196,55198,55199,55200,55201,55202,55203,13206=>53860,53888,53889,53892,53896,53904,53905,53909,53916,53920,53924,53932,53937,53944,53945,53948,53951,53952,53954,53960,53961,53963,53972,53976,53980,53988,53989,54000,54001,54004,54008,54016,54017,54019,54021,54028,54029,54030,54032,54036,54038,54044,54045,54047,54048,54049,54053,54056,54057,54060,54064,54072,54073,54075,54076,54077,54084,54085,54140,54141,54144,54148,54156,54157,54159,54160,54161,54168,54169,54172,54176,54184,54185,54187,54189,54196,54200,54204,54212,54213,54216,54217,54224,54232,54241,54243,54252,54253,54256,54260,54268,54269,54271,54273,13396=>54280,54301,54336,54340,54364,54368,54372,54381,54383,54392,54393,54396,54399,54400,54402,54408,54409,54411,54413,54420,54441,54476,54480,54484,54492,54495,54504,54508,54512,54520,54523,54525,54532,54536,54540,54548,54549,54551,54588,54589,54592,54596,54604,54605,54607,54609,54616,54617,54620,54624,54629,54632,54633,54635,54637,54644,54645,54648,54652,54660,54661,54663,54664,54665,54672,54693,54728,54729,54732,54736,54738,54744,54745,54747,54749,54756,54757,54760,54764,54772,54773,54775,54777,54784,54785,54788,54792,54800,54801,54803,54804,54805,54812,54816,13586=>54820,54829,54840,54841,54844,54848,54853,54856,54857,54859,54861,54865,54868,54869,54872,54876,54887,54889,54896,54897,54900,54915,54917,54924,54925,54928,54932,54941,54943,54945,54952,54956,54960,54969,54971,54980,54981,54984,54988,54993,54996,54999,55001,55008,55012,55016,55024,55029,55036,55037,55040,55044,55057,55064,55065,55068,55072,55080,55081,55083,55085,55092,55093,55096,55100,55108,55111,55113,55120,55121,55124,55126,55127,55128,55129,55136,55137,55139,55141,55145,55148,55152,55156,55164,55165,55169,55176,55177,55180,55184,55192,55193,55195,55197,13966=>20285,20339,20551,20729,21152,21487,21621,21733,22025,23233,23478,26247,26550,26551,26607,27468,29634,30146,31292,33499,33540,34903,34952,35382,36040,36303,36603,36838,39381,21051,21364,21508,24682,24932,27580,29647,33050,35258,35282,38307,20355,21002,22718,22904,23014,24178,24185,25031,25536,26438,26604,26751,28567,30286,30475,30965,31240,31487,31777,32925,33390,33393,35563,38291,20075,21917,26359,28212,30883,31469,33883,35088,34638,38824,21208,22350,22570,23884,24863,25022,25121,25954,26577,27204,28187,29976,30131,30435,30640,32058,37039,37969,37970,40853,14156=>21283,23724,30002,32987,37440,38296,21083,22536,23004,23713,23831,24247,24378,24394,24951,27743,30074,30086,31968,32115,32177,32652,33108,33313,34193,35137,35611,37628,38477,40007,20171,20215,20491,20977,22607,24887,24894,24936,25913,27114,28433,30117,30342,30422,31623,33445,33995,63744,37799,38283,21888,23458,22353,63745,31923,32697,37301,20520,21435,23621,24040,25298,25454,25818,25831,28192,28844,31067,36317,36382,63746,36989,37445,37624,20094,20214,20581,24062,24314,24838,26967,33137,34388,36423,37749,39467,20062,20625,26480,26688,20745,21133,21138,27298,14346=>30652,37392,40660,21163,24623,36850,20552,25001,25581,25802,26684,27268,28608,33160,35233,38548,22533,29309,29356,29956,32121,32365,32937,35211,35700,36963,40273,25225,27770,28500,32080,32570,35363,20860,24906,31645,35609,37463,37772,20140,20435,20510,20670,20742,21185,21197,21375,22384,22659,24218,24465,24950,25004,25806,25964,26223,26299,26356,26775,28039,28805,28913,29855,29861,29898,30169,30828,30956,31455,31478,32069,32147,32789,32831,33051,33686,35686,36629,36885,37857,38915,38968,39514,39912,20418,21843,22586,22865,23395,23622,24760,25106,26690,26800,14536=>26856,28330,30028,30328,30926,31293,31995,32363,32380,35336,35489,35903,38542,40388,21476,21481,21578,21617,22266,22993,23396,23611,24235,25335,25911,25925,25970,26272,26543,27073,27837,30204,30352,30590,31295,32660,32771,32929,33167,33510,33533,33776,34241,34865,34996,35493,63747,36764,37678,38599,39015,39640,40723,21741,26011,26354,26767,31296,35895,40288,22256,22372,23825,26118,26801,26829,28414,29736,34974,39908,27752,63748,39592,20379,20844,20849,21151,23380,24037,24656,24685,25329,25511,25915,29657,31354,34467,36002,38799,20018,23521,25096,26524,29916,14726=>31185,33747,35463,35506,36328,36942,37707,38982,24275,27112,34303,37101,63749,20896,23448,23532,24931,26874,27454,28748,29743,29912,31649,32592,33733,35264,36011,38364,39208,21038,24669,25324,36866,20362,20809,21281,22745,24291,26336,27960,28826,29378,29654,31568,33009,37979,21350,25499,32619,20054,20608,22602,22750,24618,24871,25296,27088,39745,23439,32024,32945,36703,20132,20689,21676,21932,23308,23968,24039,25898,25934,26657,27211,29409,30350,30703,32094,32761,33184,34126,34527,36611,36686,37066,39171,39509,39851,19992,20037,20061,20167,20465,20855,21246,14916=>21312,21475,21477,21646,22036,22389,22434,23495,23943,24272,25084,25304,25937,26552,26601,27083,27472,27590,27628,27714,28317,28792,29399,29590,29699,30655,30697,31350,32127,32777,33276,33285,33290,33503,34914,35635,36092,36544,36881,37041,37476,37558,39378,39493,40169,40407,40860,22283,23616,33738,38816,38827,40628,21531,31384,32676,35033,36557,37089,22528,23624,25496,31391,23470,24339,31353,31406,33422,36524,20518,21048,21240,21367,22280,25331,25458,27402,28099,30519,21413,29527,34152,36470,38357,26426,27331,28528,35437,36556,39243,63750,26231,27512,36020,15106=>39740,63751,21483,22317,22862,25542,27131,29674,30789,31418,31429,31998,33909,35215,36211,36917,38312,21243,22343,30023,31584,33740,37406,63752,27224,20811,21067,21127,25119,26840,26997,38553,20677,21156,21220,25027,26020,26681,27135,29822,31563,33465,33771,35250,35641,36817,39241,63753,20170,22935,25810,26129,27278,29748,31105,31165,33449,34942,34943,35167,63754,37670,20235,21450,24613,25201,27762,32026,32102,20120,20834,30684,32943,20225,20238,20854,20864,21980,22120,22331,22522,22524,22804,22855,22931,23492,23696,23822,24049,24190,24524,25216,26071,26083,15296=>26398,26399,26462,26827,26820,27231,27450,27683,27773,27778,28103,29592,29734,29738,29826,29859,30072,30079,30849,30959,31041,31047,31048,31098,31637,32000,32186,32648,32774,32813,32908,35352,35663,35912,36215,37665,37668,39138,39249,39438,39439,39525,40594,32202,20342,21513,25326,26708,37329,21931,20794,63755,63756,23068,25062,63757,25295,25343,63758,63759,63760,63761,63762,63763,37027,63764,63765,63766,63767,63768,35582,63769,63770,63771,63772,26262,63773,29014,63774,63775,38627,63776,25423,25466,21335,63777,26511,26976,28275,63778,30007,63779,63780,63781,15486=>32013,63782,63783,34930,22218,23064,63784,63785,63786,63787,63788,20035,63789,20839,22856,26608,32784,63790,22899,24180,25754,31178,24565,24684,25288,25467,23527,23511,21162,63791,22900,24361,24594,63792,63793,63794,29785,63795,63796,63797,63798,63799,63800,39377,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,28611,63812,63813,33215,36786,24817,63814,63815,33126,63816,63817,23615,63818,63819,63820,63821,63822,63823,63824,63825,23273,35365,26491,32016,63826,63827,63828,63829,63830,63831,33021,63832,63833,23612,27877,21311,28346,22810,33590,15676=>20025,20150,20294,21934,22296,22727,24406,26039,26086,27264,27573,28237,30701,31471,31774,32222,34507,34962,37170,37723,25787,28606,29562,30136,36948,21846,22349,25018,25812,26311,28129,28251,28525,28601,30192,32835,33213,34113,35203,35527,35674,37663,27795,30035,31572,36367,36957,21776,22530,22616,24162,25095,25758,26848,30070,31958,34739,40680,20195,22408,22382,22823,23565,23729,24118,24453,25140,25825,29619,33274,34955,36024,38538,40667,23429,24503,24755,20498,20992,21040,22294,22581,22615,23566,23648,23798,23947,24230,24466,24764,25361,25481,25623,26691,15866=>26873,27330,28120,28193,28372,28644,29182,30428,30585,31153,31291,33796,35241,36077,36339,36424,36867,36884,36947,37117,37709,38518,38876,27602,28678,29272,29346,29544,30563,31167,31716,32411,35712,22697,24775,25958,26109,26302,27788,28958,29129,35930,38931,20077,31361,20189,20908,20941,21205,21516,24999,26481,26704,26847,27934,28540,30140,30643,31461,33012,33891,37509,20828,26007,26460,26515,30168,31431,33651,63834,35910,36887,38957,23663,33216,33434,36929,36975,37389,24471,23965,27225,29128,30331,31561,34276,35588,37159,39472,21895,25078,63835,30313,32645,16056=>34367,34746,35064,37007,63836,27931,28889,29662,32097,33853,63837,37226,39409,63838,20098,21365,27396,27410,28734,29211,34349,40478,21068,36771,23888,25829,25900,27414,28651,31811,32412,34253,35172,35261,25289,33240,34847,24266,26391,28010,29436,29701,29807,34690,37086,20358,23821,24480,33802,20919,25504,30053,20142,20486,20841,20937,26753,27153,31918,31921,31975,33391,35538,36635,37327,20406,20791,21237,21570,24300,24942,25150,26053,27354,28670,31018,34268,34851,38317,39522,39530,40599,40654,21147,26310,27511,28701,31019,36706,38722,24976,25088,25891,28451,16246=>29001,29833,32244,32879,34030,36646,36899,37706,20925,21015,21155,27916,28872,35010,24265,25986,27566,28610,31806,29557,20196,20278,22265,63839,23738,23994,24604,29618,31533,32666,32718,32838,36894,37428,38646,38728,38936,40801,20363,28583,31150,37300,38583,21214,63840,25736,25796,27347,28510,28696,29200,30439,32769,34310,34396,36335,36613,38706,39791,40442,40565,30860,31103,32160,33737,37636,40575,40595,35542,22751,24324,26407,28711,29903,31840,32894,20769,28712,29282,30922,36034,36058,36084,38647,20102,20698,23534,24278,26009,29134,30274,30637,32842,34044,16436=>36988,39719,40845,22744,23105,23650,27155,28122,28431,30267,32047,32311,34078,35128,37860,38475,21129,26066,26611,27060,27969,28316,28687,29705,29792,30041,30244,30827,35628,39006,20845,25134,38520,20374,20523,23833,28138,32184,36650,24459,24900,26647,63841,38534,21202,32907,20956,20940,26974,31260,32190,33777,38517,20442,21033,21400,21519,21774,23653,24743,26446,26792,28012,29313,29432,29702,29827,63842,30178,31852,32633,32696,33673,35023,35041,37324,37328,38626,39881,21533,28542,29136,29848,34298,36522,38563,40023,40607,26519,28107,29747,33256,38678,30764,16626=>31435,31520,31890,25705,29802,30194,30908,30952,39340,39764,40635,23518,24149,28448,33180,33707,37000,19975,21325,23081,24018,24398,24930,25405,26217,26364,28415,28459,28771,30622,33836,34067,34875,36627,39237,39995,21788,25273,26411,27819,33545,35178,38778,20129,22916,24536,24537,26395,32178,32596,33426,33579,33725,36638,37017,22475,22969,23186,23504,26151,26522,26757,27599,29028,32629,36023,36067,36993,39749,33032,35978,38476,39488,40613,23391,27667,29467,30450,30431,33804,20906,35219,20813,20885,21193,26825,27796,30468,30496,32191,32236,38754,40629,28357,16816=>34065,20901,21517,21629,26126,26269,26919,28319,30399,30609,33559,33986,34719,37225,37528,40180,34946,20398,20882,21215,22982,24125,24917,25720,25721,26286,26576,27169,27597,27611,29279,29281,29761,30520,30683,32791,33468,33541,35584,35624,35980,26408,27792,29287,30446,30566,31302,40361,27519,27794,22818,26406,33945,21359,22675,22937,24287,25551,26164,26483,28218,29483,31447,33495,37672,21209,24043,25006,25035,25098,25287,25771,26080,26969,27494,27595,28961,29687,30045,32326,33310,33538,34154,35491,36031,38695,40289,22696,40664,20497,21006,21563,21839,25991,17006=>27766,32010,32011,32862,34442,38272,38639,21247,27797,29289,21619,23194,23614,23883,24396,24494,26410,26806,26979,28220,28228,30473,31859,32654,34183,35598,36855,38753,40692,23735,24758,24845,25003,25935,26107,26108,27665,27887,29599,29641,32225,38292,23494,34588,35600,21085,21338,25293,25615,25778,26420,27192,27850,29632,29854,31636,31893,32283,33162,33334,34180,36843,38649,39361,20276,21322,21453,21467,25292,25644,25856,26001,27075,27886,28504,29677,30036,30242,30436,30460,30928,30971,31020,32070,33324,34784,36820,38930,39151,21187,25300,25765,28196,28497,17196=>30332,36299,37297,37474,39662,39747,20515,20621,22346,22952,23592,24135,24439,25151,25918,26041,26049,26121,26507,27036,28354,30917,32033,32938,33152,33323,33459,33953,34444,35370,35607,37030,38450,40848,20493,20467,63843,22521,24472,25308,25490,26479,28227,28953,30403,32972,32986,35060,35061,35097,36064,36649,37197,38506,20271,20336,24091,26575,26658,30333,30334,39748,24161,27146,29033,29140,30058,63844,32321,34115,34281,39132,20240,31567,32624,38309,20961,24070,26805,27710,27726,27867,29359,31684,33539,27861,29754,20731,21128,22721,25816,27287,29863,30294,17386=>30887,34327,38370,38713,63845,21342,24321,35722,36776,36783,37002,21029,30629,40009,40712,19993,20482,20853,23643,24183,26142,26170,26564,26821,28851,29953,30149,31177,31453,36647,39200,39432,20445,22561,22577,23542,26222,27493,27921,28282,28541,29668,29995,33769,35036,35091,35676,36628,20239,20693,21264,21340,23443,24489,26381,31119,33145,33583,34068,35079,35206,36665,36667,39333,39954,26412,20086,20472,22857,23553,23791,23792,25447,26834,28925,29090,29739,32299,34028,34562,36898,37586,40179,19981,20184,20463,20613,21078,21103,21542,21648,22496,22827,23142,17576=>23386,23413,23500,24220,63846,25206,25975,26023,28014,28325,29238,31526,31807,32566,33104,33105,33178,33344,33433,33705,35331,36000,36070,36091,36212,36282,37096,37340,38428,38468,39385,40167,21271,20998,21545,22132,22707,22868,22894,24575,24996,25198,26128,27774,28954,30406,31881,31966,32027,33452,36033,38640,63847,20315,24343,24447,25282,23849,26379,26842,30844,32323,40300,19989,20633,21269,21290,21329,22915,23138,24199,24754,24970,25161,25209,26000,26503,27047,27604,27606,27607,27608,27832,63848,29749,30202,30738,30865,31189,31192,31875,32203,32737,32933,17766=>33086,33218,33778,34586,35048,35513,35692,36027,37145,38750,39131,40763,22188,23338,24428,25996,27315,27567,27996,28657,28693,29277,29613,36007,36051,38971,24977,27703,32856,39425,20045,20107,20123,20181,20282,20284,20351,20447,20735,21490,21496,21766,21987,22235,22763,22882,23057,23531,23546,23556,24051,24107,24473,24605,25448,26012,26031,26614,26619,26797,27515,27801,27863,28195,28681,29509,30722,31038,31040,31072,31169,31721,32023,32114,32902,33293,33678,34001,34503,35039,35408,35422,35613,36060,36198,36781,37034,39164,39391,40605,21066,63849,26388,63850,17956=>20632,21034,23665,25955,27733,29642,29987,30109,31639,33948,37240,38704,20087,25746,27578,29022,34217,19977,63851,26441,26862,28183,33439,34072,34923,25591,28545,37394,39087,19978,20663,20687,20767,21830,21930,22039,23360,23577,23776,24120,24202,24224,24258,24819,26705,27233,28248,29245,29248,29376,30456,31077,31665,32724,35059,35316,35443,35937,36062,38684,22622,29885,36093,21959,63852,31329,32034,33394,29298,29983,29989,63853,31513,22661,22779,23996,24207,24246,24464,24661,25234,25471,25933,26257,26329,26360,26646,26866,29312,29790,31598,32110,32214,32626,18146=>32997,33298,34223,35199,35475,36893,37604,40653,40736,22805,22893,24109,24796,26132,26227,26512,27728,28101,28511,30707,30889,33990,37323,37675,20185,20682,20808,21892,23307,23459,25159,25982,26059,28210,29053,29697,29764,29831,29887,30316,31146,32218,32341,32680,33146,33203,33337,34330,34796,35445,36323,36984,37521,37925,39245,39854,21352,23633,26964,27844,27945,28203,33292,34203,35131,35373,35498,38634,40807,21089,26297,27570,32406,34814,36109,38275,38493,25885,28041,29166,63854,22478,22995,23468,24615,24826,25104,26143,26207,29481,29689,30427,30465,31596,18336=>32854,32882,33125,35488,37266,19990,21218,27506,27927,31237,31545,32048,63855,36016,21484,22063,22609,23477,23567,23569,24034,25152,25475,25620,26157,26803,27836,28040,28335,28703,28836,29138,29990,30095,30094,30233,31505,31712,31787,32032,32057,34092,34157,34311,35380,36877,36961,37045,37559,38902,39479,20439,23660,26463,28049,31903,32396,35606,36118,36895,23403,24061,25613,33984,36956,39137,29575,23435,24730,26494,28126,35359,35494,36865,38924,21047,63856,28753,30862,37782,34928,37335,20462,21463,22013,22234,22402,22781,23234,23432,23723,23744,24101,24833,18526=>25101,25163,25480,25628,25910,25976,27193,27530,27700,27929,28465,29159,29417,29560,29703,29874,30246,30561,31168,31319,31466,31929,32143,32172,32353,32670,33065,33585,33936,34010,34282,34966,35504,35728,36664,36930,36995,37228,37526,37561,38539,38567,38568,38614,38656,38920,39318,39635,39706,21460,22654,22809,23408,23487,28113,28506,29087,29729,29881,32901,33789,24033,24455,24490,24642,26092,26642,26991,27219,27529,27957,28147,29667,30462,30636,31565,32020,33059,33308,33600,34036,34147,35426,35524,37255,37662,38918,39348,25100,34899,36848,37477,23815,23847,18716=>23913,29791,33181,34664,28629,25342,32722,35126,35186,19998,20056,20711,21213,21319,25215,26119,32361,34821,38494,20365,21273,22070,22987,23204,23608,23630,23629,24066,24337,24643,26045,26159,26178,26558,26612,29468,30690,31034,32709,33940,33997,35222,35430,35433,35553,35925,35962,22516,23508,24335,24687,25325,26893,27542,28252,29060,31698,34645,35672,36606,39135,39166,20280,20353,20449,21627,23072,23480,24892,26032,26216,29180,30003,31070,32051,33102,33251,33688,34218,34254,34563,35338,36523,36763,63857,36805,22833,23460,23526,24713,23529,23563,24515,27777,18906=>63858,28145,28683,29978,33455,35574,20160,21313,63859,38617,27663,20126,20420,20818,21854,23077,23784,25105,29273,33469,33706,34558,34905,35357,38463,38597,39187,40201,40285,22538,23731,23997,24132,24801,24853,25569,27138,28197,37122,37716,38990,39952,40823,23433,23736,25353,26191,26696,30524,38593,38797,38996,39839,26017,35585,36555,38332,21813,23721,24022,24245,26263,30284,33780,38343,22739,25276,29390,40232,20208,22830,24591,26171,27523,31207,40230,21395,21696,22467,23830,24859,26326,28079,30861,33406,38552,38724,21380,25212,25494,28082,32266,33099,38989,19096=>27387,32588,40367,40474,20063,20539,20918,22812,24825,25590,26928,29242,32822,63860,37326,24369,63861,63862,32004,33509,33903,33979,34277,36493,63863,20335,63864,63865,22756,23363,24665,25562,25880,25965,26264,63866,26954,27171,27915,28673,29036,30162,30221,31155,31344,63867,32650,63868,35140,63869,35731,37312,38525,63870,39178,22276,24481,26044,28417,30208,31142,35486,39341,39770,40812,20740,25014,25233,27277,33222,20547,22576,24422,28937,35328,35578,23420,34326,20474,20796,22196,22852,25513,28153,23978,26989,20870,20104,20313,63871,63872,63873,22914,63874,19286=>63875,27487,27741,63876,29877,30998,63877,33287,33349,33593,36671,36701,63878,39192,63879,63880,63881,20134,63882,22495,24441,26131,63883,63884,30123,32377,35695,63885,36870,39515,22181,22567,23032,23071,23476,63886,24310,63887,63888,25424,25403,63889,26941,27783,27839,28046,28051,28149,28436,63890,28895,28982,29017,63891,29123,29141,63892,30799,30831,63893,31605,32227,63894,32303,63895,34893,36575,63896,63897,63898,37467,63899,40182,63900,63901,63902,24709,28037,63903,29105,63904,63905,38321,21421,63906,63907,63908,26579,63909,28814,28976,29744,33398,33490,19476=>63910,38331,39653,40573,26308,63911,29121,33865,63912,63913,22603,63914,63915,23992,24433,63916,26144,26254,27001,27054,27704,27891,28214,28481,28634,28699,28719,29008,29151,29552,63917,29787,63918,29908,30408,31310,32403,63919,63920,33521,35424,36814,63921,37704,63922,38681,63923,63924,20034,20522,63925,21000,21473,26355,27757,28618,29450,30591,31330,33454,34269,34306,63926,35028,35427,35709,35947,63927,37555,63928,38675,38928,20116,20237,20425,20658,21320,21566,21555,21978,22626,22714,22887,23067,23524,24735,63929,25034,25942,26111,26212,26791,27738,28595,19666=>28879,29100,29522,31613,34568,35492,39986,40711,23627,27779,29508,29577,37434,28331,29797,30239,31337,32277,34314,20800,22725,25793,29934,29973,30320,32705,37013,38605,39252,28198,29926,31401,31402,33253,34521,34680,35355,23113,23436,23451,26785,26880,28003,29609,29715,29740,30871,32233,32747,33048,33109,33694,35916,38446,38929,26352,24448,26106,26505,27754,29579,20525,23043,27498,30702,22806,23916,24013,29477,30031,63930,63931,20709,20985,22575,22829,22934,23002,23525,63932,63933,23970,25303,25622,25747,25854,63934,26332,63935,27208,63936,29183,29796,63937,19856=>31368,31407,32327,32350,32768,33136,63938,34799,35201,35616,36953,63939,36992,39250,24958,27442,28020,32287,35109,36785,20433,20653,20887,21191,22471,22665,23481,24248,24898,27029,28044,28263,28342,29076,29794,29992,29996,32883,33592,33993,36362,37780,37854,63940,20110,20305,20598,20778,21448,21451,21491,23431,23507,23588,24858,24962,26100,29275,29591,29760,30402,31056,31121,31161,32006,32701,33419,34261,34398,36802,36935,37109,37354,38533,38632,38633,21206,24423,26093,26161,26671,29020,31286,37057,38922,20113,63941,27218,27550,28560,29065,32792,33464,34131,20046=>36939,38549,38642,38907,34074,39729,20112,29066,38596,20803,21407,21729,22291,22290,22435,23195,23236,23491,24616,24895,25588,27781,27961,28274,28304,29232,29503,29783,33489,34945,36677,36960,63942,38498,39000,40219,26376,36234,37470,20301,20553,20702,21361,22285,22996,23041,23561,24944,26256,28205,29234,29771,32239,32963,33806,33894,34111,34655,34907,35096,35586,36949,38859,39759,20083,20369,20754,20842,63943,21807,21929,23418,23461,24188,24189,24254,24736,24799,24840,24841,25540,25912,26377,63944,26580,26586,63945,26977,26978,27833,27943,63946,28216,63947,20236=>28641,29494,29495,63948,29788,30001,63949,30290,63950,63951,32173,33278,33848,35029,35480,35547,35565,36400,36418,36938,36926,36986,37193,37321,37742,63952,63953,22537,63954,27603,32905,32946,63955,63956,20801,22891,23609,63957,63958,28516,29607,32996,36103,63959,37399,38287,63960,63961,63962,63963,32895,25102,28700,32104,34701,63964,22432,24681,24903,27575,35518,37504,38577,20057,21535,28139,34093,38512,38899,39150,25558,27875,37009,20957,25033,33210,40441,20381,20506,20736,23452,24847,25087,25836,26885,27589,30097,30691,32681,33380,34191,34811,34915,35516,20426=>35696,37291,20108,20197,20234,63965,63966,22839,23016,63967,24050,24347,24411,24609,63968,63969,63970,63971,29246,29669,63972,30064,30157,63973,31227,63974,32780,32819,32900,33505,33617,63975,63976,36029,36019,36999,63977,63978,39156,39180,63979,63980,28727,30410,32714,32716,32764,35610,20154,20161,20995,21360,63981,21693,22240,23035,23493,24341,24525,28270,63982,63983,32106,33589,63984,34451,35469,63985,38765,38775,63986,63987,19968,20314,20350,22777,26085,28322,36920,37808,39353,20219,22764,22922,23001,24641,63988,63989,31252,63990,33615,36035,20837,21316,20616=>63991,63992,63993,20173,21097,23381,33471,20180,21050,21672,22985,23039,23376,23383,23388,24675,24904,28363,28825,29038,29574,29943,30133,30913,32043,32773,33258,33576,34071,34249,35566,36039,38604,20316,21242,22204,26027,26152,28796,28856,29237,32189,33421,37196,38592,40306,23409,26855,27544,28538,30430,23697,26283,28507,31668,31786,34870,38620,19976,20183,21280,22580,22715,22767,22892,23559,24115,24196,24373,25484,26290,26454,27167,27299,27404,28479,29254,63994,29520,29835,31456,31911,33144,33247,33255,33674,33900,34083,34196,34255,35037,36115,37292,38263,20806=>38556,20877,21705,22312,23472,25165,26448,26685,26771,28221,28371,28797,32289,35009,36001,36617,40779,40782,29229,31631,35533,37658,20295,20302,20786,21632,22992,24213,25269,26485,26990,27159,27822,28186,29401,29482,30141,31672,32053,33511,33785,33879,34295,35419,36015,36487,36889,37048,38606,40799,21219,21514,23265,23490,25688,25973,28404,29380,63995,30340,31309,31515,31821,32318,32735,33659,35627,36042,36196,36321,36447,36842,36857,36969,37841,20291,20346,20659,20840,20856,21069,21098,22625,22652,22880,23560,23637,24283,24731,25136,26643,27583,27656,28593,20996=>29006,29728,30000,30008,30033,30322,31564,31627,31661,31686,32399,35438,36670,36681,37439,37523,37666,37931,38651,39002,39019,39198,20999,25130,25240,27993,30308,31434,31680,32118,21344,23742,24215,28472,28857,31896,38673,39822,40670,25509,25722,34678,19969,20117,20141,20572,20597,21576,22979,23450,24128,24237,24311,24449,24773,25402,25919,25972,26060,26230,26232,26622,26984,27273,27491,27712,28096,28136,28191,28254,28702,28833,29582,29693,30010,30555,30855,31118,31243,31357,31934,32142,33351,35330,35562,35998,37165,37194,37336,37478,37580,37664,38662,38742,21186=>38748,38914,40718,21046,21137,21884,22564,24093,24351,24716,25552,26799,28639,31085,31532,33229,34234,35069,35576,36420,37261,38500,38555,38717,38988,40778,20430,20806,20939,21161,22066,24340,24427,25514,25805,26089,26177,26362,26361,26397,26781,26839,27133,28437,28526,29031,29157,29226,29866,30522,31062,31066,31199,31264,31381,31895,31967,32068,32368,32903,34299,34468,35412,35519,36249,36481,36896,36973,37347,38459,38613,40165,26063,31751,36275,37827,23384,23562,21330,25305,29469,20519,23447,24478,24752,24939,26837,28121,29742,31278,32066,32156,32305,33131,21376=>36394,36405,37758,37912,20304,22352,24038,24231,25387,32618,20027,20303,20367,20570,23005,32964,21610,21608,22014,22863,23449,24030,24282,26205,26417,26609,26666,27880,27954,28234,28557,28855,29664,30087,31820,32002,32044,32162,33311,34523,35387,35461,36208,36490,36659,36913,37198,37202,37956,39376,31481,31909,20426,20737,20934,22472,23535,23803,26201,27197,27994,28310,28652,28940,30063,31459,34850,36897,36981,38603,39423,33537,20013,20210,34886,37325,21373,27355,26987,27713,33914,22686,24974,26366,25327,28893,29969,30151,32338,33976,35657,36104,20043,21482,21566=>21675,22320,22336,24535,25345,25351,25711,25903,26088,26234,26525,26547,27490,27744,27802,28460,30693,30757,31049,31063,32025,32930,33026,33267,33437,33463,34584,35468,63996,36100,36286,36978,30452,31257,31287,32340,32887,21767,21972,22645,25391,25634,26185,26187,26733,27035,27524,27941,28337,29645,29800,29857,30043,30137,30433,30494,30603,31206,32265,32285,33275,34095,34967,35386,36049,36587,36784,36914,37805,38499,38515,38663,20356,21489,23018,23241,24089,26702,29894,30142,31209,31378,33187,34541,36074,36300,36845,26015,26389,63997,22519,28503,32221,36655,21756=>37878,38598,24501,25074,28548,19988,20376,20511,21449,21983,23919,24046,27425,27492,30923,31642,63998,36425,36554,36974,25417,25662,30528,31364,37679,38015,40810,25776,28591,29158,29864,29914,31428,31762,32386,31922,32408,35738,36106,38013,39184,39244,21049,23519,25830,26413,32046,20717,21443,22649,24920,24921,25082,26028,31449,35730,35734,20489,20513,21109,21809,23100,24288,24432,24884,25950,26124,26166,26274,27085,28356,28466,29462,30241,31379,33081,33369,33750,33980,20661,22512,23488,23528,24425,25505,30758,32181,33756,34081,37319,37365,20874,26613,31574,21946=>36012,20932,22971,24765,34389,20508,63999,21076,23610,24957,25114,25299,25842,26021,28364,30240,33034,36448,38495,38587,20191,21315,21912,22825,24029,25797,27849,28154,29588,31359,33307,34214,36068,36368,36983,37351,38369,38433,38854,20984,21746,21894,24505,25764,28552,32180,36639,36685,37941,20681,23574,27838,28155,29979,30651,31805,31844,35449,35522,22558,22974,24086,25463,29266,30090,30571,35548,36028,36626,24307,26228,28152,32893,33729,35531,38737,39894,64000,21059,26367,28053,28399,32224,35558,36910,36958,39636,21021,21119,21736,24980,25220,25307,26786,22136=>26898,26970,27189,28818,28966,30813,30977,30990,31186,31245,32918,33400,33493,33609,34121,35970,36229,37218,37259,37294,20419,22225,29165,30679,34560,35320,23544,24534,26449,37032,21474,22618,23541,24740,24961,25696,32317,32880,34085,37507,25774,20652,23828,26368,22684,25277,25512,26894,27000,27166,28267,30394,31179,33467,33833,35535,36264,36861,37138,37195,37276,37648,37656,37786,38619,39478,39949,19985,30044,31069,31482,31569,31689,32302,33988,36441,36468,36600,36880,26149,26943,29763,20986,26414,40668,20805,24544,27798,34802,34909,34935,24756,33205,33795,22326=>36101,21462,21561,22068,23094,23601,28810,32736,32858,33030,33261,36259,37257,39519,40434,20596,20164,21408,24827,28204,23652,20360,20516,21988,23769,24159,24677,26772,27835,28100,29118,30164,30196,30305,31258,31305,32199,32251,32622,33268,34473,36636,38601,39347,40786,21063,21189,39149,35242,19971,26578,28422,20405,23522,26517,27784,28024,29723,30759,37341,37756,34756,31204,31281,24555,20182,21668,21822,22702,22949,24816,25171,25302,26422,26965,33333,38464,39345,39389,20524,21331,21828,22396,64001,25176,64002,25826,26219,26589,28609,28655,29730,29752,35351,22516=>37944,21585,22022,22374,24392,24986,27470,28760,28845,32187,35477,22890,33067,25506,30472,32829,36010,22612,25645,27067,23445,24081,28271,64003,34153,20812,21488,22826,24608,24907,27526,27760,27888,31518,32974,33492,36294,37040,39089,64004,25799,28580,25745,25860,20814,21520,22303,35342,24927,26742,64005,30171,31570,32113,36890,22534,27084,33151,35114,36864,38969,20600,22871,22956,25237,36879,39722,24925,29305,38358,22369,23110,24052,25226,25773,25850,26487,27874,27966,29228,29750,30772,32631,33453,36315,38935,21028,22338,26495,29256,29923,36009,36774,37393,22706=>38442,20843,21485,25420,20329,21764,24726,25943,27803,28031,29260,29437,31255,35207,35997,24429,28558,28921,33192,24846,20415,20559,25153,29255,31687,32232,32745,36941,38829,39449,36022,22378,24179,26544,33805,35413,21536,23318,24163,24290,24330,25987,32954,34109,38281,38491,20296,21253,21261,21263,21638,21754,22275,24067,24598,25243,25265,25429,64006,27873,28006,30129,30770,32990,33071,33502,33889,33970,34957,35090,36875,37610,39165,39825,24133,26292,26333,28689,29190,64007,20469,21117,24426,24915,26451,27161,28418,29922,31080,34920,35961,39111,39108,39491,22896=>21697,31263,26963,35575,35914,39080,39342,24444,25259,30130,30382,34987,36991,38466,21305,24380,24517,27852,29644,30050,30091,31558,33534,39325,20047,36924,19979,20309,21414,22799,24264,26160,27827,29781,33655,34662,36032,36944,38686,39957,22737,23416,34384,35604,40372,23506,24680,24717,26097,27735,28450,28579,28698,32597,32752,38289,38290,38480,38867,21106,36676,20989,21547,21688,21859,21898,27323,28085,32216,33382,37532,38519,40569,21512,21704,30418,34532,38308,38356,38492,20130,20233,23022,23270,24055,24658,25239,26477,26689,27782,28207,32568,32923,33322,23086=>64008,64009,38917,20133,20565,21683,22419,22874,23401,23475,25032,26999,28023,28707,34809,35299,35442,35559,36994,39405,39608,21182,26680,20502,24184,26447,33607,34892,20139,21521,22190,29670,37141,38911,39177,39255,39321,22099,22687,34395,35377,25010,27382,29563,36562,27463,38570,39511,22869,29184,36203,38761,20436,23796,24358,25080,26203,27883,28843,29572,29625,29694,30505,30541,32067,32098,32291,33335,34898,64010,36066,37449,39023,23377,31348,34880,38913,23244,20448,21332,22846,23805,25406,28025,29433,33029,33031,33698,37583,38960,20136,20804,21009,22411,23276=>24418,27842,28366,28677,28752,28847,29074,29673,29801,33610,34722,34913,36872,37026,37795,39336,20846,24407,24800,24935,26291,34137,36426,37295,38795,20046,20114,21628,22741,22778,22909,23733,24359,25142,25160,26122,26215,27627,28009,28111,28246,28408,28564,28640,28649,28765,29392,29733,29786,29920,30355,31068,31946,32286,32993,33446,33899,33983,34382,34399,34676,35703,35946,37804,38912,39013,24785,25110,37239,23130,26127,28151,28222,29759,39746,24573,24794,31503,21700,24344,27742,27859,27946,28888,32005,34425,35340,40251,21270,21644,23301,27194,28779,30069,23466=>31117,31166,33457,33775,35441,35649,36008,38772,64011,25844,25899,30906,30907,31339,20024,21914,22864,23462,24187,24739,25563,27489,26213,26707,28185,29029,29872,32008,36996,39529,39973,27963,28369,29502,35905,38346,20976,24140,24488,24653,24822,24880,24908,26179,26180,27045,27841,28255,28361,28514,29004,29852,30343,31681,31783,33618,34647,36945,38541,40643,21295,22238,24315,24458,24674,24724,25079,26214,26371,27292,28142,28590,28784,29546,32362,33214,33588,34516,35496,36036,21123,29554,23446,27243,37892,21742,22150,23389,25928,25989,26313,26783,28045,28102,23656=>29243,32948,37237,39501,20399,20505,21402,21518,21564,21897,21957,24127,24460,26429,29030,29661,36869,21211,21235,22628,22734,28932,29071,29179,34224,35347,26248,34216,21927,26244,29002,33841,21321,21913,27585,24409,24509,25582,26249,28999,35569,36637,40638,20241,25658,28875,30054,34407,24676,35662,40440,20807,20982,21256,27958,33016,40657,26133,27427,28824,30165,21507,23673,32007,35350,27424,27453,27462,21560,24688,27965,32725,33288,20694,20958,21916,22123,22221,23020,23305,24076,24985,24984,25137,26206,26342,29081,29113,29114,29351,31143,31232,32690,35440]; + protected const TABLE_CODES = [44034,44035,44037,44038,44043,44044,44045,44046,44047,44056,44062,44063,44065,44066,44067,44069,44070,44071,44072,44073,44074,44075,44078,44082,44083,44084,32=>44085,44086,44087,44090,44091,44093,44094,44095,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44108,44110,44111,44112,44113,44114,44115,44117,64=>44118,44119,44121,44122,44123,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44146,44147,44149,44150,44153,44155,44156,44157,44158,44159,44162,44167,44168,44173,44174,44175,44177,44178,44179,44181,44182,44183,44184,44185,44186,44187,44190,44194,44195,44196,44197,44198,44199,44203,44205,44206,44209,44210,44211,44212,44213,44214,44215,44218,44222,44223,44224,44226,44227,44229,44230,44231,44233,44234,44235,44237,44238,44239,44240,44241,44242,44243,44244,44246,44248,44249,44250,44251,44252,44253,44254,44255,44258,44259,44261,44262,44265,44267,44269,44270,44274,44276,44279,44280,44281,44282,44283,44286,44287,44289,44290,44291,44293,44295,44296,44297,44298,44299,44302,44304,44306,44307,44308,44309,44310,44311,44313,44314,44315,44317,44318,44319,44321,44322,44323,44324,44325,44326,44327,44328,44330,44331,44334,44335,44336,44337,44338,44339,222=>44342,44343,44345,44346,44347,44349,44350,44351,44352,44353,44354,44355,44358,44360,44362,44363,44364,44365,44366,44367,44369,44370,44371,44373,44374,44375,254=>44377,44378,44379,44380,44381,44382,44383,44384,44386,44388,44389,44390,44391,44392,44393,44394,44395,44398,44399,44401,44402,44407,44408,44409,44410,44414,44416,44419,44420,44421,44422,44423,44426,44427,44429,44430,44431,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44446,44447,44448,44449,44450,44451,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44472,44473,44474,44475,44476,44477,44478,44479,44482,44483,44485,44486,44487,44489,44490,44491,44492,44493,44494,44495,44498,44500,44501,44502,44503,44504,44505,44506,44507,44509,44510,44511,44513,44514,44515,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44538,44539,44541,44542,44546,44547,44548,44549,44550,44551,44554,44556,44558,44559,44560,44561,44562,44563,44565,44566,44567,44568,44569,44570,44571,44572,412=>44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44594,44595,44597,44598,44601,44603,44604,444=>44605,44606,44607,44610,44612,44615,44616,44617,44619,44623,44625,44626,44627,44629,44631,44632,44633,44634,44635,44638,44642,44643,44644,44646,44647,44650,44651,44653,44654,44655,44657,44658,44659,44660,44661,44662,44663,44666,44670,44671,44672,44673,44674,44675,44678,44679,44680,44681,44682,44683,44685,44686,44687,44688,44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44735,44737,44738,44739,44741,44742,44743,44744,44745,44746,44747,44750,44754,44755,44756,44757,44758,44759,44762,44763,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44777,44778,44780,44782,44783,44784,44785,44786,44787,44789,44790,44791,44793,44794,44795,44797,44798,44799,44800,44801,44802,44803,44804,44805,602=>44806,44809,44810,44811,44812,44814,44815,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,634=>44836,44837,44838,44839,44840,44841,44842,44843,44846,44847,44849,44851,44853,44854,44855,44856,44857,44858,44859,44862,44864,44868,44869,44870,44871,44874,44875,44876,44877,44878,44879,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44894,44895,44896,44897,44898,44899,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44922,44923,44924,44925,44926,44927,44929,44930,44931,44933,44934,44935,44937,44938,44939,44940,44941,44942,44943,44946,44947,44948,44950,44951,44952,44953,44954,44955,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44986,44987,44989,44990,44991,44993,44994,44995,44996,44997,44998,45002,45004,45007,45008,45009,45010,45011,45013,45014,45015,45016,45017,45018,45019,45021,45022,45023,45024,45025,792=>45026,45027,45028,45029,45030,45031,45034,45035,45036,45037,45038,45039,45042,45043,45045,45046,45047,45049,45050,45051,45052,45053,45054,45055,45058,45059,824=>45061,45062,45063,45064,45065,45066,45067,45069,45070,45071,45073,45074,45075,45077,45078,45079,45080,45081,45082,45083,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45126,45127,45129,45131,45133,45135,45136,45137,45138,45142,45144,45146,45147,45148,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45182,45183,45185,45186,45187,45189,45190,45191,45192,45193,45194,45195,45198,45200,45202,45203,45204,45205,45206,45207,45211,45213,45214,45219,45220,45221,45222,45223,45226,45232,45234,45238,45239,45241,45242,45243,45245,45246,45247,45248,45249,45250,45251,45254,45258,45259,45260,45261,45262,45263,45266,982=>45267,45269,45270,45271,45273,45274,45275,45276,45277,45278,45279,45281,45282,45283,45284,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296,1014=>45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45322,45325,45326,45327,45329,45332,45333,45334,45335,45338,45342,45343,45344,45345,45346,45350,45351,45353,45354,45355,45357,45358,45359,45360,45361,45362,45363,45366,45370,45371,45372,45373,45374,45375,45378,45379,45381,45382,45383,45385,45386,45387,45388,45389,45390,45391,45394,45395,45398,45399,45401,45402,45403,45405,45406,45407,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45434,45435,45437,45438,45439,45441,45443,45444,45445,45446,45447,45450,45452,45454,45455,45456,45457,45461,45462,45463,45465,45466,45467,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,1172=>45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45517,45518,45519,45521,45522,45523,45525,1204=>45526,45527,45528,45529,45530,45531,45534,45536,45537,45538,45539,45540,45541,45542,45543,45546,45547,45549,45550,45551,45553,45554,45555,45556,45557,45558,45559,45560,45562,45564,45566,45567,45568,45569,45570,45571,45574,45575,45577,45578,45581,45582,45583,45584,45585,45586,45587,45590,45592,45594,45595,45596,45597,45598,45599,45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45621,45622,45623,45624,45625,45626,45627,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45657,45658,45659,45661,45662,45663,45665,45666,45667,45668,45669,45670,45671,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45686,45687,45688,45689,45690,45691,45693,45694,45695,45696,45697,45698,45699,45702,45703,45704,45706,45707,45708,45709,45710,1362=>45711,45714,45715,45717,45718,45719,45723,45724,45725,45726,45727,45730,45732,45735,45736,45737,45739,45741,45742,45743,45745,45746,45747,45749,45750,45751,1394=>45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45770,45771,45773,45774,45775,45777,45779,45780,45781,45782,45783,45786,45788,45790,45791,45792,45793,45795,45799,45801,45802,45808,45809,45810,45814,45820,45821,45822,45826,45827,45829,45830,45831,45833,45834,45835,45836,45837,45838,45839,45842,45846,45847,45848,45849,45850,45851,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904,45905,45906,45907,45911,45913,45914,45917,45920,45921,45922,45923,45926,45928,45930,45932,45933,45935,45938,45939,45941,45942,45943,45945,45946,45947,45948,45949,45950,45951,45954,45958,45959,45960,45961,45962,45963,45965,1552=>45966,45967,45969,45970,45971,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45986,45987,45988,45989,45990,45991,45993,45994,45995,45997,1584=>45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46022,46023,46025,46026,46029,46031,46033,46034,46035,46038,46040,46042,46044,46046,46047,46049,46050,46051,46053,46054,46055,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46097,46098,46099,46100,46101,46102,46103,46105,46106,46107,46109,46110,46111,46113,46114,46115,46116,46117,46118,46119,46122,46124,46125,46126,46127,46128,46129,46130,46131,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46162,46163,46165,46166,46167,46169,46170,46171,46172,46173,46174,46175,46178,46180,46182,1742=>46183,46184,46185,46186,46187,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46209,46210,1774=>46211,46212,46213,46214,46215,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46238,46239,46240,46241,46242,46243,46245,46246,46247,46249,46250,46251,46253,46254,46255,46256,46257,46258,46259,46260,46262,46264,46266,46267,46268,46269,46270,46271,46273,46274,46275,46277,46278,46279,46281,46282,46283,46284,46285,46286,46287,46289,46290,46291,46292,46294,46295,46296,46297,46298,46299,46302,46303,46305,46306,46309,46311,46312,46313,46314,46315,46318,46320,46322,46323,46324,46325,46326,46327,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46358,46359,46361,46362,46365,46366,46367,46368,46369,46370,46371,46374,46379,46380,46381,46382,46383,46386,46387,46389,46390,46391,46393,46394,46395,46396,46397,46398,46399,46402,46406,1932=>46407,46408,46409,46410,46414,46415,46417,46418,46419,46421,46422,46423,46424,46425,46426,46427,46430,46434,46435,46436,46437,46438,46439,46440,46441,46442,1964=>46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46498,46499,46501,46502,46503,46505,46508,46509,46510,46511,46514,46518,46519,46520,46521,46522,46526,46527,46529,46530,46531,46533,46534,46535,46536,46537,46538,46539,46542,46546,46547,46548,46549,46550,46551,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46610,46611,46613,46614,46615,46617,46618,46619,46620,46621,2122=>46622,46623,46624,46625,46626,46627,46628,46630,46631,46632,46633,46634,46635,46637,46638,46639,46640,46641,46642,46643,46645,46646,46647,46648,46649,46650,2154=>46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46693,46694,46695,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46750,46751,46753,46754,46755,46757,46758,46759,46760,46761,46762,46765,46766,46767,46768,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46805,46806,46807,46808,46809,46810,46811,46812,46813,2312=>46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46833,46834,46835,46837,46838,46839,46841,46842,2344=>46843,46844,46845,46846,46847,46850,46851,46852,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46890,46891,46893,46894,46897,46898,46899,46900,46901,46902,46903,46906,46908,46909,46910,46911,46912,46913,46914,46915,46917,46918,46919,46921,46922,46923,46925,46926,46927,46928,46929,46930,46931,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46945,46946,46947,46949,46950,46951,46953,46954,46955,46956,46957,46958,46959,46962,46964,46966,46967,46968,46969,46970,46971,46974,46975,46977,46978,46979,46981,46982,46983,46984,46985,46986,46987,46990,46995,46996,46997,47002,47003,47005,47006,47007,47009,47010,47011,47012,47013,47014,47015,47018,47022,47023,47024,47025,47026,47027,47030,47031,47033,47034,47035,47036,47037,47038,47039,47040,47041,2502=>47042,47043,47044,47045,47046,47048,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,2534=>47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47086,47087,47089,47090,47091,47093,47094,47095,47096,47097,47098,47099,47102,47106,47107,47108,47109,47110,47114,47115,47117,47118,47119,47121,47122,47123,47124,47125,47126,47127,47130,47132,47134,47135,47136,47137,47138,47139,47142,47143,47145,47146,47147,47149,47150,47151,47152,47153,47154,47155,47158,47162,47163,47164,47165,47166,47167,47169,47170,47171,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47186,47188,47189,47190,47191,47192,47193,47194,47195,47198,47199,47201,47202,47203,47205,47206,47207,47208,47209,47210,47211,47214,47216,47218,47219,47220,47221,47222,47223,47225,47226,47227,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,2692=>47264,47265,47266,47267,47268,47269,47270,47271,47273,47274,47275,47276,47277,47278,47279,47281,47282,47283,47285,47286,47287,47289,47290,47291,47292,47293,2724=>47294,47295,47298,47300,47302,47303,47304,47305,47306,47307,47309,47310,47311,47313,47314,47315,47317,47318,47319,47320,47321,47322,47323,47324,47326,47328,47330,47331,47332,47333,47334,47335,47338,47339,47341,47342,47343,47345,47346,47347,47348,47349,47350,47351,47354,47356,47358,47359,47360,47361,47362,47363,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47385,47386,47387,47388,47389,47390,47391,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47422,47423,47425,47426,47427,47429,47430,47431,47432,47433,47434,47435,47437,47438,47440,47442,47443,47444,47445,47446,47447,47450,47451,47453,47454,47455,47457,47458,47459,47460,47461,47462,47463,47466,47468,47470,47471,47472,47473,47474,47475,47478,47479,47481,47482,47483,47485,2882=>47486,47487,47488,47489,47490,47491,47494,47496,47499,47500,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,2914=>47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47534,47535,47537,47538,47539,47541,47542,47543,47544,47545,47546,47547,47550,47552,47554,47555,47556,47557,47558,47559,47562,47563,47565,47571,47572,47573,47574,47575,47578,47580,47583,47584,47586,47590,47591,47593,47594,47595,47597,47598,47599,47600,47601,47602,47603,47606,47611,47612,47613,47614,47615,47618,47619,47620,47621,47622,47623,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47674,47675,47677,47678,47679,47681,47683,47684,47685,47686,47687,47690,47692,47695,47696,47697,47698,47702,47703,47705,47706,47707,47709,47710,47711,47712,47713,47714,47715,47718,47722,47723,47724,47725,47726,47727,3072=>47730,47731,47733,47734,47735,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47750,47752,47753,47754,47755,47757,47758,47759,47760,47761,47762,3104=>47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47786,47789,47790,47791,47793,47795,47796,47797,47798,47799,47802,47804,47806,47807,47808,47809,47810,47811,47813,47814,47815,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47869,47870,47871,47873,47874,47875,47877,47878,47879,47880,47881,47882,47883,47884,47886,47888,47890,47891,47892,47893,47894,47895,47897,47898,47899,47901,47902,47903,47905,47906,47907,47908,47909,47910,47911,47912,47914,47916,47917,47918,47919,47920,47921,47922,47923,47927,47929,47930,47935,47936,47937,47938,47939,47942,47944,47946,47947,47948,47950,47953,47954,3262=>47955,47957,47958,47959,47961,47962,47963,47964,47965,47966,47967,47968,47970,47972,47973,47974,47975,47976,47977,47978,47979,47981,47982,47983,47984,47985,3294=>47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48009,48010,48011,48013,48014,48015,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48037,48038,48039,48041,48042,48043,48045,48046,48047,48048,48049,48050,48051,48053,48054,48056,48057,48058,48059,48060,48061,48062,48063,48065,48066,48067,48069,48070,48071,48073,48074,48075,48076,48077,48078,48079,48081,48082,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48122,48123,48125,48126,48129,48131,48132,48133,48134,48135,48138,48142,48144,48146,48147,48153,48154,48160,48161,48162,48163,48166,48168,48170,48171,48172,48174,48175,48178,48179,48181,3452=>48182,48183,48185,48186,48187,48188,48189,48190,48191,48194,48198,48199,48200,48202,48203,48206,48207,48209,48210,48211,48212,48213,48214,48215,48216,48217,3484=>48218,48219,48220,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48262,48263,48265,48266,48269,48271,48272,48273,48274,48275,48278,48280,48283,48284,48285,48286,48287,48290,48291,48293,48294,48297,48298,48299,48300,48301,48302,48303,48306,48310,48311,48312,48313,48314,48315,48318,48319,48321,48322,48323,48325,48326,48327,48328,48329,48330,48331,48332,48334,48338,48339,48340,48342,48343,48345,48346,48347,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48375,48377,48378,48379,48381,48382,48383,48384,48385,48386,48387,48390,48392,48394,48395,48396,48397,48398,48399,48401,48402,48403,48405,48406,48407,48408,48409,48410,48411,48412,48413,3642=>48414,48415,48416,48417,48418,48419,48421,48422,48423,48424,48425,48426,48427,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,3674=>48442,48443,48444,48445,48446,48447,48449,48450,48451,48452,48453,48454,48455,48458,48459,48461,48462,48463,48465,48466,48467,48468,48469,48470,48471,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48485,48486,48487,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48514,48515,48517,48518,48523,48524,48525,48526,48527,48530,48532,48534,48535,48536,48539,48541,48542,48543,48544,48545,48546,48547,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48561,48562,48563,48564,48565,48566,48567,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48598,48599,48601,48602,48603,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48618,48619,48620,48621,48622,48623,48625,3832=>48626,48627,48629,48630,48631,48633,48634,48635,48636,48637,48638,48639,48641,48642,48644,48646,48647,48648,48649,48650,48651,48654,48655,48657,48658,48659,3864=>48661,48662,48663,48664,48665,48666,48667,48670,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48710,48711,48713,48714,48715,48717,48719,48720,48721,48722,48723,48726,48728,48732,48733,48734,48735,48738,48739,48741,48742,48743,48745,48747,48748,48749,48750,48751,48754,48758,48759,48760,48761,48762,48766,48767,48769,48770,48771,48773,48774,48775,48776,48777,48778,48779,48782,48786,48787,48788,48789,48790,48791,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48850,48851,4022=>48853,48854,48857,48858,48859,48860,48861,48862,48863,48865,48866,48870,48871,48872,48873,48874,48875,48877,48878,48879,48880,48881,48882,48883,48884,48885,4054=>48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48898,48899,48900,48901,48902,48903,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48922,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48962,48963,48965,48966,48967,48969,48970,48971,48972,48973,48974,48975,48978,48979,48980,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49045,49046,49047,49048,49049,49050,49051,49052,49053,4212=>49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49073,49074,49075,49076,49077,49078,49079,49080,4244=>49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49094,49095,49096,49097,49098,49099,49102,49103,49105,49106,49107,49109,49110,49111,49112,49113,49114,49115,49117,49118,49120,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49234,49235,49236,49237,49238,49239,49241,49242,49243,4402=>49245,49246,49247,49249,49250,49251,49252,49253,49254,49255,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,4434=>49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49298,49299,49301,49302,49303,49305,49306,49307,49308,49309,49310,49311,49314,49316,49318,49319,49320,49321,49322,49323,49326,49329,49330,49335,49336,49337,49338,49339,49342,49346,49347,49348,49350,49351,49354,49355,49357,49358,49359,49361,49362,49363,49364,49365,49366,49367,49370,49374,49375,49376,49377,49378,49379,49382,49383,49385,49386,49387,49389,49390,49391,49392,49393,49394,49395,49398,49400,49402,49403,49404,49405,49406,49407,49409,49410,49411,49413,49414,49415,49417,49418,49419,49420,49421,49422,49423,49425,49426,49427,49428,49430,49431,49432,49433,49434,49435,49441,49442,49445,49448,49449,49450,49451,49454,49458,49459,49460,49461,49463,49466,49467,49469,49470,49471,49473,49474,49475,49476,49477,49478,49479,49482,49486,49487,49488,49489,49490,49491,49494,49495,4592=>49497,49498,49499,49501,49502,49503,49504,49505,49506,49507,49510,49514,49515,49516,49517,49518,49519,49521,49522,49523,49525,49526,49527,49529,49530,49531,4624=>49532,49533,49534,49535,49536,49537,49538,49539,49540,49542,49543,49544,49545,49546,49547,49551,49553,49554,49555,49557,49559,49560,49561,49562,49563,49566,49568,49570,49571,49572,49574,49575,49578,49579,49581,49582,49583,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49598,49599,49600,49601,49602,49603,49605,49606,49607,49609,49610,49611,49613,49614,49615,49616,49617,49618,49619,49621,49622,49625,49626,49627,49628,49629,49630,49631,49633,49634,49635,49637,49638,49639,49641,49642,49643,49644,49645,49646,49647,49650,49652,49653,49654,49655,49656,49657,49658,49659,49662,49663,49665,49666,49667,49669,49670,49671,49672,49673,49674,49675,49678,49680,49682,49683,49684,49685,49686,49687,49690,49691,49693,49694,49697,49698,49699,49700,49701,49702,49703,49706,49708,49710,49712,49715,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,4782=>49734,49735,49737,49738,49739,49740,49741,49742,49743,49746,49747,49749,49750,49751,49753,49754,49755,49756,49757,49758,49759,49761,49762,49763,49764,49766,4814=>49767,49768,49769,49770,49771,49774,49775,49777,49778,49779,49781,49782,49783,49784,49785,49786,49787,49790,49792,49794,49795,49796,49797,49798,49799,49802,49803,49804,49805,49806,49807,49809,49810,49811,49812,49813,49814,49815,49817,49818,49820,49822,49823,49824,49825,49826,49827,49830,49831,49833,49834,49835,49838,49839,49840,49841,49842,49843,49846,49848,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49886,49887,49889,49890,49893,49894,49895,49896,49897,49898,49902,49904,49906,49907,49908,49909,49911,49914,49917,49918,49919,49921,49922,49923,49924,49925,49926,49927,49930,49931,49934,49935,49936,49937,49938,49942,49943,49945,49946,49947,49949,49950,49951,49952,49953,49954,49955,49958,49959,49962,49963,49964,49965,49966,49967,49968,49969,49970,4972=>49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49990,49991,49992,49993,49994,49995,49996,49997,5004=>49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50026,50027,50029,50030,50031,50033,50035,50036,50037,50038,50039,50042,50043,50046,50047,50048,50049,50050,50051,50053,50054,50055,50057,50058,50059,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50138,50139,50141,50142,50145,50147,50148,50149,50150,50151,50154,50155,50156,50158,50159,50160,50161,50162,50163,50166,50167,50169,50170,50171,50172,50173,50174,5162=>50175,50176,50177,50178,50179,50180,50181,50182,50183,50185,50186,50187,50188,50189,50190,50191,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,5194=>50203,50204,50205,50206,50207,50208,50209,50210,50211,50213,50214,50215,50216,50217,50218,50219,50221,50222,50223,50225,50226,50227,50229,50230,50231,50232,50233,50234,50235,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50278,50279,50281,50282,50283,50285,50286,50287,50288,50289,50290,50291,50294,50295,50296,50298,50299,50300,50301,50302,50303,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50325,50326,50327,50328,50329,50330,50331,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50361,50362,50363,50365,50366,50367,50368,50369,50370,50371,50372,50373,5352=>50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,5384=>50400,50401,50402,50403,50404,50405,50406,50407,50408,50410,50411,50412,50413,50414,50415,50418,50419,50421,50422,50423,50425,50427,50428,50429,50430,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50445,50446,50447,50449,50450,50451,50453,50454,50455,50456,50457,50458,50459,50461,50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50474,50475,50477,50478,50479,50481,50482,50483,50484,50485,50486,50487,50490,50492,50494,50495,50496,50497,50498,50499,50502,50503,50507,50511,50512,50513,50514,50518,50522,50523,50524,50527,50530,50531,50533,50534,50535,50537,50538,50539,50540,50541,50542,50543,50546,50550,50551,50552,50553,50554,50555,50558,50559,50561,50562,50563,50565,50566,50568,50569,50570,50571,50574,50576,50578,50579,50580,50582,50585,50586,50587,50589,50590,50591,50593,50594,50595,50596,50597,50598,50599,50600,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50614,5542=>50615,50618,50623,50624,50625,50626,50627,50635,50637,50639,50642,50643,50645,50646,50647,50649,50650,50651,50652,50653,50654,50655,50658,50660,50662,50663,5574=>50664,50665,50666,50667,50671,50673,50674,50675,50677,50680,50681,50682,50683,50690,50691,50692,50697,50698,50699,50701,50702,50703,50705,50706,50707,50708,50709,50710,50711,50714,50717,50718,50719,50720,50721,50722,50723,50726,50727,50729,50730,50731,50735,50737,50738,50742,50744,50746,50748,50749,50750,50751,50754,50755,50757,50758,50759,50761,50762,50763,50764,50765,50766,50767,50770,50774,50775,50776,50777,50778,50779,50782,50783,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50797,50798,50800,50802,50803,50804,50805,50806,50807,50810,50811,50813,50814,50815,50817,50818,50819,50820,50821,50822,50823,50826,50828,50830,50831,50832,50833,50834,50835,50838,50839,50841,50842,50843,50845,50846,50847,50848,50849,50850,50851,50854,50856,50858,50859,50860,50861,50862,50863,50866,50867,50869,50870,50871,50875,50876,50877,50878,50879,50882,50884,50886,50887,50888,50889,50890,50891,50894,5732=>50895,50897,50898,50899,50901,50902,50903,50904,50905,50906,50907,50910,50911,50914,50915,50916,50917,50918,50919,50922,50923,50925,50926,50927,50929,50930,5764=>50931,50932,50933,50934,50935,50938,50939,50940,50942,50943,50944,50945,50946,50947,50950,50951,50953,50954,50955,50957,50958,50959,50960,50961,50962,50963,50966,50968,50970,50971,50972,50973,50974,50975,50978,50979,50981,50982,50983,50985,50986,50987,50988,50989,50990,50991,50994,50996,50998,51000,51001,51002,51003,51006,51007,51009,51010,51011,51013,51014,51015,51016,51017,51019,51022,51024,51033,51034,51035,51037,51038,51039,51041,51042,51043,51044,51045,51046,51047,51049,51050,51052,51053,51054,51055,51056,51057,51058,51059,51062,51063,51065,51066,51067,51071,51072,51073,51074,51078,51083,51084,51085,51087,51090,51091,51093,51097,51099,51100,51101,51102,51103,51106,51111,51112,51113,51114,51115,51118,51119,51121,51122,51123,51125,51126,51127,51128,51129,51130,51131,51134,51138,51139,51140,51141,51142,51143,51146,51147,51149,51151,51153,51154,51155,51156,51157,51158,51159,51161,51162,51163,51164,5922=>51166,51167,51168,51169,51170,51171,51173,51174,51175,51177,51178,51179,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,5954=>51195,51196,51197,51198,51199,51202,51203,51205,51206,51207,51209,51211,51212,51213,51214,51215,51218,51220,51223,51224,51225,51226,51227,51230,51231,51233,51234,51235,51237,51238,51239,51240,51241,51242,51243,51246,51248,51250,51251,51252,51253,51254,51255,51257,51258,51259,51261,51262,51263,51265,51266,51267,51268,51269,51270,51271,51274,51275,51278,51279,51280,51281,51282,51283,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51314,51315,51317,51318,51319,51321,51323,51324,51325,51326,51327,51330,51332,51336,51337,51338,51342,51343,51344,51345,51346,51347,51349,51350,51351,51352,51353,51354,51355,51356,51358,51360,51362,51363,51364,51365,51366,51367,51369,51370,51371,51372,51373,51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51390,51391,51392,51393,6112=>51394,51395,51397,51398,51399,51401,51402,51403,51405,51406,51407,51408,51409,51410,51411,51414,51416,51418,51419,51420,51421,51422,51423,51426,51427,51429,6144=>51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51446,51447,51448,51449,51450,51451,51454,51455,51457,51458,51459,51463,51464,51465,51466,51467,51470,12288,12289,12290,183,8229,8230,168,12291,173,8213,8741,65340,8764,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,177,215,247,8800,8804,8805,8734,8756,176,8242,8243,8451,8491,65504,65505,65509,9794,9792,8736,8869,8978,8706,8711,8801,8786,167,8251,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8594,8592,8593,8595,8596,12307,8810,8811,8730,8765,8733,8757,8747,8748,8712,8715,8838,8839,8834,8835,8746,8745,8743,8744,65506,51472,51474,51475,51476,51477,51478,51479,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,6302=>51501,51502,51503,51504,51505,51506,51507,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,6334=>51528,51529,51530,51531,51532,51533,51534,51535,51538,51539,51541,51542,51543,51545,51546,51547,51548,51549,51550,51551,51554,51556,51557,51558,51559,51560,51561,51562,51563,51565,51566,51567,8658,8660,8704,8707,180,65374,711,728,733,730,729,184,731,161,191,720,8750,8721,8719,164,8457,8240,9665,9664,9655,9654,9828,9824,9825,9829,9831,9827,8857,9672,9635,9680,9681,9618,9636,9637,9640,9639,9638,9641,9832,9743,9742,9756,9758,182,8224,8225,8597,8599,8601,8598,8600,9837,9833,9834,9836,12927,12828,8470,13255,8482,13250,13272,8481,8364,174,6460=>51569,51570,51571,51573,51574,51575,51576,51577,51578,51579,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51594,51595,51597,51598,51599,6492=>51601,51602,51603,51604,51605,51606,51607,51610,51612,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,6524=>51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51650,51651,51653,51654,51657,51659,51660,51661,51662,51663,51666,51668,51671,51672,51675,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65510,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,51678,51679,51681,51683,51685,51686,51688,51689,51690,51691,51694,51698,51699,51700,51701,51702,51703,51706,51707,51709,51710,51711,51713,51714,51715,51716,6682=>51717,51718,51719,51722,51726,51727,51728,51729,51730,51731,51733,51734,51735,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,6714=>51750,51751,51752,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,51783,51784,51785,51786,51787,51790,51791,51793,51794,51795,51797,51798,51799,51800,51801,51802,51803,51806,51810,51811,51812,51813,51814,51815,51817,51818,6872=>51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51838,51839,51840,51841,51842,51843,51845,51846,6904=>51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,6951=>8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,6968=>913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,7000=>945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,7030=>51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51902,51903,51905,51906,51907,51909,7062=>51910,51911,51912,51913,51914,51915,51918,51920,51922,51924,51925,51926,51927,51930,51931,51932,51933,51934,51935,51937,51938,51939,51940,51941,51942,51943,7094=>51944,51945,51946,51947,51949,51950,51951,51952,51953,51954,51955,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51977,51978,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,9490,9489,9498,9497,9494,9493,9486,9485,9502,9503,9505,9506,9510,9511,9513,9514,9517,9518,9521,9522,9525,9526,9529,9530,9533,9534,9536,9537,9539,9540,9541,9542,9543,9544,9545,9546,7220=>51979,51980,51981,51982,51983,51985,51986,51987,51989,51990,51991,51993,51994,51995,51996,51997,51998,51999,52002,52003,52004,52005,52006,52007,52008,52009,7252=>52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52034,52035,52036,7284=>52037,52038,52039,52042,52043,52045,52046,52047,52049,52050,52051,52052,52053,52054,52055,52058,52059,52060,52062,52063,52064,52065,52066,52067,52069,52070,52071,52072,52073,52074,52075,52076,13205,13206,13207,8467,13208,13252,13219,13220,13221,13222,13209,13210,13211,13212,13213,13214,13215,13216,13217,13218,13258,13197,13198,13199,13263,13192,13193,13256,13223,13224,13232,13233,13234,13235,13236,13237,13238,13239,13240,13241,13184,13185,13186,13187,13188,13242,13243,13244,13245,13246,13247,13200,13201,13202,13203,13204,8486,13248,13249,13194,13195,13196,13270,13253,13229,13230,13231,13275,13225,13226,13227,13228,13277,13264,13267,13251,13257,13276,13254,7410=>52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,7442=>52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52125,52126,52127,52128,52129,52130,52131,7474=>52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,198,208,170,294,7511=>306,7513=>319,321,216,338,186,222,358,330,7522=>12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,189,8531,8532,188,190,8539,8540,8541,8542,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,7632=>52192,52193,52194,52195,52197,52198,52200,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,7664=>52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52238,52239,52241,52242,52243,52245,52246,52247,52248,52249,52250,52251,52254,52255,52256,52259,52260,230,273,240,295,305,307,312,320,322,248,339,223,254,359,331,329,12800,12801,12802,12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,12827,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,185,178,179,8308,8319,8321,8322,8323,8324,52261,52262,52266,52267,52269,52271,52273,52274,52275,52276,52277,52278,52279,52282,52287,52288,52289,52290,52291,52294,52295,52297,52298,52299,52301,52302,7822=>52303,52304,52305,52306,52307,52310,52314,52315,52316,52317,52318,52319,52321,52322,52323,52325,52327,52329,52330,52331,52332,52333,52334,52335,52337,52338,7854=>52339,52340,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,7980=>52372,52373,52374,52375,52378,52379,52381,52382,52383,52385,52386,52387,52388,52389,52390,52391,52394,52398,52399,52400,52401,52402,52403,52406,52407,52409,8012=>52410,52411,52413,52414,52415,52416,52417,52418,52419,52422,52424,52426,52427,52428,52429,52430,52431,52433,52434,52435,52437,52438,52439,52440,52441,52442,8044=>52443,52444,52445,52446,52447,52448,52449,52450,52451,52453,52454,52455,52456,52457,52458,52459,52461,52462,52463,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,8170=>52478,52479,52480,52482,52483,52484,52485,52486,52487,52490,52491,52493,52494,52495,52497,52498,52499,52500,52501,52502,52503,52506,52508,52510,52511,52512,8202=>52513,52514,52515,52517,52518,52519,52521,52522,52523,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52538,52539,52540,52541,52542,8234=>52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52573,52574,52575,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8314=>1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8360=>52577,52578,52579,52581,52582,52583,52584,52585,52586,52587,52590,52592,52594,52595,52596,52597,52598,52599,52601,52602,52603,52604,52605,52606,52607,52608,8392=>52609,52610,52611,52612,52613,52614,52615,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52630,52631,52633,52634,52635,52637,52638,52639,8424=>52640,52641,52642,52643,52646,52648,52650,52651,52652,52653,52654,52655,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52677,8550=>52678,52679,52680,52681,52682,52683,52685,52686,52687,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,8582=>52706,52707,52708,52709,52710,52711,52713,52714,52715,52717,52718,52719,52721,52722,52723,52724,52725,52726,52727,52730,52732,52734,52735,52736,52737,52738,8614=>52739,52741,52742,52743,52745,52746,52747,52749,52750,52751,52752,52753,52754,52755,52757,52758,52759,52760,52762,52763,52764,52765,52766,52767,52770,52771,52773,52774,52775,52777,52778,52779,8740=>52780,52781,52782,52783,52786,52788,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,8772=>52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52826,52827,52829,52830,52834,52835,52836,52837,52838,52839,52842,52844,8804=>52846,52847,52848,52849,52850,52851,52854,52855,52857,52858,52859,52861,52862,52863,52864,52865,52866,52867,52870,52872,52874,52875,52876,52877,52878,52879,52882,52883,52885,52886,52887,52889,8930=>52890,52891,52892,52893,52894,52895,52898,52902,52903,52904,52905,52906,52907,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,8962=>52923,52924,52925,52926,52927,52928,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,8994=>52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52966,52967,52969,52970,52973,52974,52975,52976,52977,52978,52979,52982,52986,52987,52988,52989,52990,52991,44032,44033,44036,44039,44040,44041,44042,44048,44049,44050,44051,44052,44053,44054,44055,44057,44058,44059,44060,44061,44064,44068,44076,44077,44079,44080,44081,44088,44089,44092,44096,44107,44109,44116,44120,44124,44144,44145,44148,44151,44152,44154,44160,44161,44163,44164,44165,44166,44169,44170,44171,44172,44176,44180,44188,44189,44191,44192,44193,44200,44201,44202,44204,44207,44208,44216,44217,44219,44220,44221,44225,44228,44232,44236,44245,44247,44256,44257,44260,44263,44264,44266,44268,44271,44272,44273,44275,44277,44278,44284,44285,44288,44292,44294,52994,52995,52997,52998,52999,53001,53002,53003,53004,53005,53006,53007,53010,53012,53014,53015,53016,53017,53018,53019,53021,53022,53023,53025,53026,53027,9152=>53029,53030,53031,53032,53033,53034,53035,53038,53042,53043,53044,53045,53046,53047,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,9184=>53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53078,53079,53081,53082,53083,53085,53086,53087,53088,53089,53090,53091,53094,53096,53098,53099,53100,44300,44301,44303,44305,44312,44316,44320,44329,44332,44333,44340,44341,44344,44348,44356,44357,44359,44361,44368,44372,44376,44385,44387,44396,44397,44400,44403,44404,44405,44406,44411,44412,44413,44415,44417,44418,44424,44425,44428,44432,44444,44445,44452,44471,44480,44481,44484,44488,44496,44497,44499,44508,44512,44516,44536,44537,44540,44543,44544,44545,44552,44553,44555,44557,44564,44592,44593,44596,44599,44600,44602,44608,44609,44611,44613,44614,44618,44620,44621,44622,44624,44628,44630,44636,44637,44639,44640,44641,44645,44648,44649,44652,44656,44664,53101,53102,53103,53106,53107,53109,53110,53111,53113,53114,53115,53116,53117,53118,53119,53121,53122,53123,53124,53126,53127,53128,53129,53130,53131,53133,9342=>53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53154,53155,53156,53157,53158,53159,53161,9374=>53162,53163,53164,53165,53166,53167,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53189,53190,53191,53192,53193,53194,53195,44665,44667,44668,44669,44676,44677,44684,44732,44733,44734,44736,44740,44748,44749,44751,44752,44753,44760,44761,44764,44776,44779,44781,44788,44792,44796,44807,44808,44813,44816,44844,44845,44848,44850,44852,44860,44861,44863,44865,44866,44867,44872,44873,44880,44892,44893,44900,44901,44921,44928,44932,44936,44944,44945,44949,44956,44984,44985,44988,44992,44999,45000,45001,45003,45005,45006,45012,45020,45032,45033,45040,45041,45044,45048,45056,45057,45060,45068,45072,45076,45084,45085,45096,45124,45125,45128,45130,45132,45134,45139,45140,45141,45143,45145,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53218,53219,53221,53222,53223,53225,9532=>53226,53227,53228,53229,53230,53231,53234,53236,53238,53239,53240,53241,53242,53243,53245,53246,53247,53249,53250,53251,53253,53254,53255,53256,53257,53258,9564=>53259,53260,53261,53262,53263,53264,53266,53267,53268,53269,53270,53271,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,45149,45180,45181,45184,45188,45196,45197,45199,45201,45208,45209,45210,45212,45215,45216,45217,45218,45224,45225,45227,45228,45229,45230,45231,45233,45235,45236,45237,45240,45244,45252,45253,45255,45256,45257,45264,45265,45268,45272,45280,45285,45320,45321,45323,45324,45328,45330,45331,45336,45337,45339,45340,45341,45347,45348,45349,45352,45356,45364,45365,45367,45368,45369,45376,45377,45380,45384,45392,45393,45396,45397,45400,45404,45408,45432,45433,45436,45440,45442,45448,45449,45451,45453,45458,45459,45460,45464,45468,45480,45516,45520,45524,45532,45533,53294,53295,53296,53297,53298,53299,53302,53303,53305,53306,53307,53309,53310,53311,53312,53313,53314,53315,53318,53320,53322,53323,53324,53325,53326,53327,9722=>53329,53330,53331,53333,53334,53335,53337,53338,53339,53340,53341,53342,53343,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53358,53359,9754=>53361,53362,53363,53365,53366,53367,53368,53369,53370,53371,53374,53375,53376,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,45535,45544,45545,45548,45552,45561,45563,45565,45572,45573,45576,45579,45580,45588,45589,45591,45593,45600,45620,45628,45656,45660,45664,45672,45673,45684,45685,45692,45700,45701,45705,45712,45713,45716,45720,45721,45722,45728,45729,45731,45733,45734,45738,45740,45744,45748,45768,45769,45772,45776,45778,45784,45785,45787,45789,45794,45796,45797,45798,45800,45803,45804,45805,45806,45807,45811,45812,45813,45815,45816,45817,45818,45819,45823,45824,45825,45828,45832,45840,45841,45843,45844,45845,45852,45908,45909,45910,45912,45915,45916,45918,45919,45924,45925,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53414,53415,53417,53418,53419,53421,53422,53423,53424,53425,53426,9912=>53427,53430,53432,53434,53435,53436,53437,53438,53439,53442,53443,53445,53446,53447,53450,53451,53452,53453,53454,53455,53458,53462,53463,53464,53465,53466,9944=>53467,53470,53471,53473,53474,53475,53477,53478,53479,53480,53481,53482,53483,53486,53490,53491,53492,53493,53494,53495,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,45927,45929,45931,45934,45936,45937,45940,45944,45952,45953,45955,45956,45957,45964,45968,45972,45984,45985,45992,45996,46020,46021,46024,46027,46028,46030,46032,46036,46037,46039,46041,46043,46045,46048,46052,46056,46076,46096,46104,46108,46112,46120,46121,46123,46132,46160,46161,46164,46168,46176,46177,46179,46181,46188,46208,46216,46237,46244,46248,46252,46261,46263,46265,46272,46276,46280,46288,46293,46300,46301,46304,46307,46308,46310,46316,46317,46319,46321,46328,46356,46357,46360,46363,46364,46372,46373,46375,46376,46377,46378,46384,46385,46388,46392,53509,53510,53511,53512,53513,53514,53515,53516,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,10102=>53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53554,53555,53557,53558,53559,53561,53563,53564,53565,53566,10134=>53567,53570,53574,53575,53576,53577,53578,53579,53582,53583,53585,53586,53587,53589,53590,53591,53592,53593,53594,53595,53598,53600,53602,53603,53604,53605,53606,53607,53609,53610,53611,53613,46400,46401,46403,46404,46405,46411,46412,46413,46416,46420,46428,46429,46431,46432,46433,46496,46497,46500,46504,46506,46507,46512,46513,46515,46516,46517,46523,46524,46525,46528,46532,46540,46541,46543,46544,46545,46552,46572,46608,46609,46612,46616,46629,46636,46644,46664,46692,46696,46748,46749,46752,46756,46763,46764,46769,46804,46832,46836,46840,46848,46849,46853,46888,46889,46892,46895,46896,46904,46905,46907,46916,46920,46924,46932,46933,46944,46948,46952,46960,46961,46963,46965,46972,46973,46976,46980,46988,46989,46991,46992,46993,46994,46998,46999,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53629,53630,53631,53632,53633,53634,53635,53637,53638,53639,53641,53642,10292=>53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53666,53667,53669,53670,53671,10324=>53673,53674,53675,53676,53677,53678,53679,53682,53684,53686,53687,53688,53689,53691,53693,53694,53695,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,47000,47001,47004,47008,47016,47017,47019,47020,47021,47028,47029,47032,47047,47049,47084,47085,47088,47092,47100,47101,47103,47104,47105,47111,47112,47113,47116,47120,47128,47129,47131,47133,47140,47141,47144,47148,47156,47157,47159,47160,47161,47168,47172,47185,47187,47196,47197,47200,47204,47212,47213,47215,47217,47224,47228,47245,47272,47280,47284,47288,47296,47297,47299,47301,47308,47312,47316,47325,47327,47329,47336,47337,47340,47344,47352,47353,47355,47357,47364,47384,47392,47420,47421,47424,47428,47436,47439,47441,47448,47449,47452,47456,47464,47465,53712,53713,53714,53715,53716,53717,53718,53719,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,10482=>53739,53740,53741,53742,53743,53744,53745,53746,53747,53749,53750,53751,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,10514=>53768,53770,53771,53772,53773,53774,53775,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,47467,47469,47476,47477,47480,47484,47492,47493,47495,47497,47498,47501,47502,47532,47533,47536,47540,47548,47549,47551,47553,47560,47561,47564,47566,47567,47568,47569,47570,47576,47577,47579,47581,47582,47585,47587,47588,47589,47592,47596,47604,47605,47607,47608,47609,47610,47616,47617,47624,47637,47672,47673,47676,47680,47682,47688,47689,47691,47693,47694,47699,47700,47701,47704,47708,47716,47717,47719,47720,47721,47728,47729,47732,47736,47747,47748,47749,47751,47756,47784,47785,47787,47788,47792,47794,47800,47801,47803,47805,47812,47816,47832,47833,47868,53802,53803,53806,53807,53809,53810,53811,53813,53814,53815,53816,53817,53818,53819,53822,53824,53826,53827,53828,53829,53830,53831,53833,53834,53835,53836,10672=>53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53853,53854,53855,53856,53857,53858,53859,53861,53862,53863,53864,10704=>53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53890,53891,53893,53894,53895,53897,53898,53899,53900,47872,47876,47885,47887,47889,47896,47900,47904,47913,47915,47924,47925,47926,47928,47931,47932,47933,47934,47940,47941,47943,47945,47949,47951,47952,47956,47960,47969,47971,47980,48008,48012,48016,48036,48040,48044,48052,48055,48064,48068,48072,48080,48083,48120,48121,48124,48127,48128,48130,48136,48137,48139,48140,48141,48143,48145,48148,48149,48150,48151,48152,48155,48156,48157,48158,48159,48164,48165,48167,48169,48173,48176,48177,48180,48184,48192,48193,48195,48196,48197,48201,48204,48205,48208,48221,48260,48261,48264,48267,48268,48270,48276,48277,48279,53901,53902,53903,53906,53907,53908,53910,53911,53912,53913,53914,53915,53917,53918,53919,53921,53922,53923,53925,53926,53927,53928,53929,53930,53931,53933,10862=>53934,53935,53936,53938,53939,53940,53941,53942,53943,53946,53947,53949,53950,53953,53955,53956,53957,53958,53959,53962,53964,53965,53966,53967,53968,53969,10894=>53970,53971,53973,53974,53975,53977,53978,53979,53981,53982,53983,53984,53985,53986,53987,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54002,54003,54005,54006,54007,54009,54010,48281,48282,48288,48289,48292,48295,48296,48304,48305,48307,48308,48309,48316,48317,48320,48324,48333,48335,48336,48337,48341,48344,48348,48372,48373,48374,48376,48380,48388,48389,48391,48393,48400,48404,48420,48428,48448,48456,48457,48460,48464,48472,48473,48484,48488,48512,48513,48516,48519,48520,48521,48522,48528,48529,48531,48533,48537,48538,48540,48548,48560,48568,48596,48597,48600,48604,48617,48624,48628,48632,48640,48643,48645,48652,48653,48656,48660,48668,48669,48671,48708,48709,48712,48716,48718,48724,48725,48727,48729,48730,48731,48736,48737,48740,54011,54012,54013,54014,54015,54018,54020,54022,54023,54024,54025,54026,54027,54031,54033,54034,54035,54037,54039,54040,54041,54042,54043,54046,54050,54051,11052=>54052,54054,54055,54058,54059,54061,54062,54063,54065,54066,54067,54068,54069,54070,54071,54074,54078,54079,54080,54081,54082,54083,54086,54087,54088,54089,11084=>54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121,48744,48746,48752,48753,48755,48756,48757,48763,48764,48765,48768,48772,48780,48781,48783,48784,48785,48792,48793,48808,48848,48849,48852,48855,48856,48864,48867,48868,48869,48876,48897,48904,48905,48920,48921,48923,48924,48925,48960,48961,48964,48968,48976,48977,48981,49044,49072,49093,49100,49101,49104,49108,49116,49119,49121,49212,49233,49240,49244,49248,49256,49257,49296,49297,49300,49304,49312,49313,49315,49317,49324,49325,49327,49328,49331,49332,49333,49334,49340,49341,49343,49344,49345,49349,49352,49353,49356,49360,49368,49369,49371,49372,49373,49380,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54142,54143,54145,54146,54147,54149,54150,54151,11242=>54152,54153,54154,54155,54158,54162,54163,54164,54165,54166,54167,54170,54171,54173,54174,54175,54177,54178,54179,54180,54181,54182,54183,54186,54188,54190,11274=>54191,54192,54193,54194,54195,54197,54198,54199,54201,54202,54203,54205,54206,54207,54208,54209,54210,54211,54214,54215,54218,54219,54220,54221,54222,54223,54225,54226,54227,54228,54229,54230,49381,49384,49388,49396,49397,49399,49401,49408,49412,49416,49424,49429,49436,49437,49438,49439,49440,49443,49444,49446,49447,49452,49453,49455,49456,49457,49462,49464,49465,49468,49472,49480,49481,49483,49484,49485,49492,49493,49496,49500,49508,49509,49511,49512,49513,49520,49524,49528,49541,49548,49549,49550,49552,49556,49558,49564,49565,49567,49569,49573,49576,49577,49580,49584,49597,49604,49608,49612,49620,49623,49624,49632,49636,49640,49648,49649,49651,49660,49661,49664,49668,49676,49677,49679,49681,49688,49689,49692,49695,49696,49704,49705,49707,49709,54231,54233,54234,54235,54236,54237,54238,54239,54240,54242,54244,54245,54246,54247,54248,54249,54250,54251,54254,54255,54257,54258,54259,54261,54262,54263,11432=>54264,54265,54266,54267,54270,54272,54274,54275,54276,54277,54278,54279,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,11464=>54295,54296,54297,54298,54299,54300,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,49711,49713,49714,49716,49736,49744,49745,49748,49752,49760,49765,49772,49773,49776,49780,49788,49789,49791,49793,49800,49801,49808,49816,49819,49821,49828,49829,49832,49836,49837,49844,49845,49847,49849,49884,49885,49888,49891,49892,49899,49900,49901,49903,49905,49910,49912,49913,49915,49916,49920,49928,49929,49932,49933,49939,49940,49941,49944,49948,49956,49957,49960,49961,49989,50024,50025,50028,50032,50034,50040,50041,50044,50045,50052,50056,50060,50112,50136,50137,50140,50143,50144,50146,50152,50153,50157,50164,50165,50168,50184,50192,50212,50220,50224,54328,54329,54330,54331,54332,54333,54334,54335,54337,54338,54339,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,11622=>54356,54357,54358,54359,54360,54361,54362,54363,54365,54366,54367,54369,54370,54371,54373,54374,54375,54376,54377,54378,54379,54380,54382,54384,54385,54386,11654=>54387,54388,54389,54390,54391,54394,54395,54397,54398,54401,54403,54404,54405,54406,54407,54410,54412,54414,54415,54416,54417,54418,54419,54421,54422,54423,54424,54425,54426,54427,54428,54429,50228,50236,50237,50248,50276,50277,50280,50284,50292,50293,50297,50304,50324,50332,50360,50364,50409,50416,50417,50420,50424,50426,50431,50432,50433,50444,50448,50452,50460,50472,50473,50476,50480,50488,50489,50491,50493,50500,50501,50504,50505,50506,50508,50509,50510,50515,50516,50517,50519,50520,50521,50525,50526,50528,50529,50532,50536,50544,50545,50547,50548,50549,50556,50557,50560,50564,50567,50572,50573,50575,50577,50581,50583,50584,50588,50592,50601,50612,50613,50616,50617,50619,50620,50621,50622,50628,50629,50630,50631,50632,50633,50634,50636,50638,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,11812=>54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54477,54478,54479,54481,54482,54483,54485,11844=>54486,54487,54488,54489,54490,54491,54493,54494,54496,54497,54498,54499,54500,54501,54502,54503,54505,54506,54507,54509,54510,54511,54513,54514,54515,54516,54517,54518,54519,54521,54522,54524,50640,50641,50644,50648,50656,50657,50659,50661,50668,50669,50670,50672,50676,50678,50679,50684,50685,50686,50687,50688,50689,50693,50694,50695,50696,50700,50704,50712,50713,50715,50716,50724,50725,50728,50732,50733,50734,50736,50739,50740,50741,50743,50745,50747,50752,50753,50756,50760,50768,50769,50771,50772,50773,50780,50781,50784,50796,50799,50801,50808,50809,50812,50816,50824,50825,50827,50829,50836,50837,50840,50844,50852,50853,50855,50857,50864,50865,50868,50872,50873,50874,50880,50881,50883,50885,50892,50893,50896,50900,50908,50909,50912,50913,50920,54526,54527,54528,54529,54530,54531,54533,54534,54535,54537,54538,54539,54541,54542,54543,54544,54545,54546,54547,54550,54552,54553,54554,54555,54556,54557,12002=>54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,12034=>54584,54585,54586,54587,54590,54591,54593,54594,54595,54597,54598,54599,54600,54601,54602,54603,54606,54608,54610,54611,54612,54613,54614,54615,54618,54619,54621,54622,54623,54625,54626,54627,50921,50924,50928,50936,50937,50941,50948,50949,50952,50956,50964,50965,50967,50969,50976,50977,50980,50984,50992,50993,50995,50997,50999,51004,51005,51008,51012,51018,51020,51021,51023,51025,51026,51027,51028,51029,51030,51031,51032,51036,51040,51048,51051,51060,51061,51064,51068,51069,51070,51075,51076,51077,51079,51080,51081,51082,51086,51088,51089,51092,51094,51095,51096,51098,51104,51105,51107,51108,51109,51110,51116,51117,51120,51124,51132,51133,51135,51136,51137,51144,51145,51148,51150,51152,51160,51165,51172,51176,51180,51200,51201,51204,51208,51210,54628,54630,54631,54634,54636,54638,54639,54640,54641,54642,54643,54646,54647,54649,54650,54651,54653,54654,54655,54656,54657,54658,54659,54662,54666,54667,12192=>54668,54669,54670,54671,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54694,54695,12224=>54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721,54722,54723,54724,54725,54726,54727,51216,51217,51219,51221,51222,51228,51229,51232,51236,51244,51245,51247,51249,51256,51260,51264,51272,51273,51276,51277,51284,51312,51313,51316,51320,51322,51328,51329,51331,51333,51334,51335,51339,51340,51341,51348,51357,51359,51361,51368,51388,51389,51396,51400,51404,51412,51413,51415,51417,51424,51425,51428,51445,51452,51453,51456,51460,51461,51462,51468,51469,51471,51473,51480,51500,51508,51536,51537,51540,51544,51552,51553,51555,51564,51568,51572,51580,51592,51593,51596,51600,51608,51609,51611,51613,51648,51649,51652,51655,51656,51658,51664,51665,51667,54730,54731,54733,54734,54735,54737,54739,54740,54741,54742,54743,54746,54748,54750,54751,54752,54753,54754,54755,54758,54759,54761,54762,54763,54765,54766,12382=>54767,54768,54769,54770,54771,54774,54776,54778,54779,54780,54781,54782,54783,54786,54787,54789,54790,54791,54793,54794,54795,54796,54797,54798,54799,54802,12414=>54806,54807,54808,54809,54810,54811,54813,54814,54815,54817,54818,54819,54821,54822,54823,54824,54825,54826,54827,54828,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54842,54843,51669,51670,51673,51674,51676,51677,51680,51682,51684,51687,51692,51693,51695,51696,51697,51704,51705,51708,51712,51720,51721,51723,51724,51725,51732,51736,51753,51788,51789,51792,51796,51804,51805,51807,51808,51809,51816,51837,51844,51864,51900,51901,51904,51908,51916,51917,51919,51921,51923,51928,51929,51936,51948,51956,51976,51984,51988,51992,52000,52001,52033,52040,52041,52044,52048,52056,52057,52061,52068,52088,52089,52124,52152,52180,52196,52199,52201,52236,52237,52240,52244,52252,52253,52257,52258,52263,52264,52265,52268,52270,52272,52280,52281,52283,54845,54846,54847,54849,54850,54851,54852,54854,54855,54858,54860,54862,54863,54864,54866,54867,54870,54871,54873,54874,54875,54877,54878,54879,54880,54881,12572=>54882,54883,54884,54885,54886,54888,54890,54891,54892,54893,54894,54895,54898,54899,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,12604=>54913,54914,54916,54918,54919,54920,54921,54922,54923,54926,54927,54929,54930,54931,54933,54934,54935,54936,54937,54938,54939,54940,54942,54944,54946,54947,54948,54949,54950,54951,54953,54954,52284,52285,52286,52292,52293,52296,52300,52308,52309,52311,52312,52313,52320,52324,52326,52328,52336,52341,52376,52377,52380,52384,52392,52393,52395,52396,52397,52404,52405,52408,52412,52420,52421,52423,52425,52432,52436,52452,52460,52464,52481,52488,52489,52492,52496,52504,52505,52507,52509,52516,52520,52524,52537,52572,52576,52580,52588,52589,52591,52593,52600,52616,52628,52629,52632,52636,52644,52645,52647,52649,52656,52676,52684,52688,52712,52716,52720,52728,52729,52731,52733,52740,52744,52748,52756,52761,52768,52769,52772,52776,52784,52785,52787,52789,54955,54957,54958,54959,54961,54962,54963,54964,54965,54966,54967,54968,54970,54972,54973,54974,54975,54976,54977,54978,54979,54982,54983,54985,54986,54987,12762=>54989,54990,54991,54992,54994,54995,54997,54998,55000,55002,55003,55004,55005,55006,55007,55009,55010,55011,55013,55014,55015,55017,55018,55019,55020,55021,12794=>55022,55023,55025,55026,55027,55028,55030,55031,55032,55033,55034,55035,55038,55039,55041,55042,55043,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55058,55059,55060,52824,52825,52828,52831,52832,52833,52840,52841,52843,52845,52852,52853,52856,52860,52868,52869,52871,52873,52880,52881,52884,52888,52896,52897,52899,52900,52901,52908,52909,52929,52964,52965,52968,52971,52972,52980,52981,52983,52984,52985,52992,52993,52996,53000,53008,53009,53011,53013,53020,53024,53028,53036,53037,53039,53040,53041,53048,53076,53077,53080,53084,53092,53093,53095,53097,53104,53105,53108,53112,53120,53125,53132,53153,53160,53168,53188,53216,53217,53220,53224,53232,53233,53235,53237,53244,53248,53252,53265,53272,53293,53300,53301,53304,53308,55061,55062,55063,55066,55067,55069,55070,55071,55073,55074,55075,55076,55077,55078,55079,55082,55084,55086,55087,55088,55089,55090,55091,55094,55095,55097,12952=>55098,55099,55101,55102,55103,55104,55105,55106,55107,55109,55110,55112,55114,55115,55116,55117,55118,55119,55122,55123,55125,55130,55131,55132,55133,55134,12984=>55135,55138,55140,55142,55143,55144,55146,55147,55149,55150,55151,55153,55154,55155,55157,55158,55159,55160,55161,55162,55163,55166,55167,55168,55170,55171,55172,55173,55174,55175,55178,55179,53316,53317,53319,53321,53328,53332,53336,53344,53356,53357,53360,53364,53372,53373,53377,53412,53413,53416,53420,53428,53429,53431,53433,53440,53441,53444,53448,53449,53456,53457,53459,53460,53461,53468,53469,53472,53476,53484,53485,53487,53488,53489,53496,53517,53552,53553,53556,53560,53562,53568,53569,53571,53572,53573,53580,53581,53584,53588,53596,53597,53599,53601,53608,53612,53628,53636,53640,53664,53665,53668,53672,53680,53681,53683,53685,53690,53692,53696,53720,53748,53752,53767,53769,53776,53804,53805,53808,53812,53820,53821,53823,53825,53832,53852,55181,55182,55183,55185,55186,55187,55188,55189,55190,55191,55194,55196,55198,55199,55200,55201,55202,55203,13206=>53860,53888,53889,53892,53896,53904,53905,53909,53916,53920,53924,53932,53937,53944,53945,53948,53951,53952,53954,53960,53961,53963,53972,53976,53980,53988,53989,54000,54001,54004,54008,54016,54017,54019,54021,54028,54029,54030,54032,54036,54038,54044,54045,54047,54048,54049,54053,54056,54057,54060,54064,54072,54073,54075,54076,54077,54084,54085,54140,54141,54144,54148,54156,54157,54159,54160,54161,54168,54169,54172,54176,54184,54185,54187,54189,54196,54200,54204,54212,54213,54216,54217,54224,54232,54241,54243,54252,54253,54256,54260,54268,54269,54271,54273,13396=>54280,54301,54336,54340,54364,54368,54372,54381,54383,54392,54393,54396,54399,54400,54402,54408,54409,54411,54413,54420,54441,54476,54480,54484,54492,54495,54504,54508,54512,54520,54523,54525,54532,54536,54540,54548,54549,54551,54588,54589,54592,54596,54604,54605,54607,54609,54616,54617,54620,54624,54629,54632,54633,54635,54637,54644,54645,54648,54652,54660,54661,54663,54664,54665,54672,54693,54728,54729,54732,54736,54738,54744,54745,54747,54749,54756,54757,54760,54764,54772,54773,54775,54777,54784,54785,54788,54792,54800,54801,54803,54804,54805,54812,54816,13586=>54820,54829,54840,54841,54844,54848,54853,54856,54857,54859,54861,54865,54868,54869,54872,54876,54887,54889,54896,54897,54900,54915,54917,54924,54925,54928,54932,54941,54943,54945,54952,54956,54960,54969,54971,54980,54981,54984,54988,54993,54996,54999,55001,55008,55012,55016,55024,55029,55036,55037,55040,55044,55057,55064,55065,55068,55072,55080,55081,55083,55085,55092,55093,55096,55100,55108,55111,55113,55120,55121,55124,55126,55127,55128,55129,55136,55137,55139,55141,55145,55148,55152,55156,55164,55165,55169,55176,55177,55180,55184,55192,55193,55195,55197,13966=>20285,20339,20551,20729,21152,21487,21621,21733,22025,23233,23478,26247,26550,26551,26607,27468,29634,30146,31292,33499,33540,34903,34952,35382,36040,36303,36603,36838,39381,21051,21364,21508,24682,24932,27580,29647,33050,35258,35282,38307,20355,21002,22718,22904,23014,24178,24185,25031,25536,26438,26604,26751,28567,30286,30475,30965,31240,31487,31777,32925,33390,33393,35563,38291,20075,21917,26359,28212,30883,31469,33883,35088,34638,38824,21208,22350,22570,23884,24863,25022,25121,25954,26577,27204,28187,29976,30131,30435,30640,32058,37039,37969,37970,40853,14156=>21283,23724,30002,32987,37440,38296,21083,22536,23004,23713,23831,24247,24378,24394,24951,27743,30074,30086,31968,32115,32177,32652,33108,33313,34193,35137,35611,37628,38477,40007,20171,20215,20491,20977,22607,24887,24894,24936,25913,27114,28433,30117,30342,30422,31623,33445,33995,63744,37799,38283,21888,23458,22353,63745,31923,32697,37301,20520,21435,23621,24040,25298,25454,25818,25831,28192,28844,31067,36317,36382,63746,36989,37445,37624,20094,20214,20581,24062,24314,24838,26967,33137,34388,36423,37749,39467,20062,20625,26480,26688,20745,21133,21138,27298,14346=>30652,37392,40660,21163,24623,36850,20552,25001,25581,25802,26684,27268,28608,33160,35233,38548,22533,29309,29356,29956,32121,32365,32937,35211,35700,36963,40273,25225,27770,28500,32080,32570,35363,20860,24906,31645,35609,37463,37772,20140,20435,20510,20670,20742,21185,21197,21375,22384,22659,24218,24465,24950,25004,25806,25964,26223,26299,26356,26775,28039,28805,28913,29855,29861,29898,30169,30828,30956,31455,31478,32069,32147,32789,32831,33051,33686,35686,36629,36885,37857,38915,38968,39514,39912,20418,21843,22586,22865,23395,23622,24760,25106,26690,26800,14536=>26856,28330,30028,30328,30926,31293,31995,32363,32380,35336,35489,35903,38542,40388,21476,21481,21578,21617,22266,22993,23396,23611,24235,25335,25911,25925,25970,26272,26543,27073,27837,30204,30352,30590,31295,32660,32771,32929,33167,33510,33533,33776,34241,34865,34996,35493,63747,36764,37678,38599,39015,39640,40723,21741,26011,26354,26767,31296,35895,40288,22256,22372,23825,26118,26801,26829,28414,29736,34974,39908,27752,63748,39592,20379,20844,20849,21151,23380,24037,24656,24685,25329,25511,25915,29657,31354,34467,36002,38799,20018,23521,25096,26524,29916,14726=>31185,33747,35463,35506,36328,36942,37707,38982,24275,27112,34303,37101,63749,20896,23448,23532,24931,26874,27454,28748,29743,29912,31649,32592,33733,35264,36011,38364,39208,21038,24669,25324,36866,20362,20809,21281,22745,24291,26336,27960,28826,29378,29654,31568,33009,37979,21350,25499,32619,20054,20608,22602,22750,24618,24871,25296,27088,39745,23439,32024,32945,36703,20132,20689,21676,21932,23308,23968,24039,25898,25934,26657,27211,29409,30350,30703,32094,32761,33184,34126,34527,36611,36686,37066,39171,39509,39851,19992,20037,20061,20167,20465,20855,21246,14916=>21312,21475,21477,21646,22036,22389,22434,23495,23943,24272,25084,25304,25937,26552,26601,27083,27472,27590,27628,27714,28317,28792,29399,29590,29699,30655,30697,31350,32127,32777,33276,33285,33290,33503,34914,35635,36092,36544,36881,37041,37476,37558,39378,39493,40169,40407,40860,22283,23616,33738,38816,38827,40628,21531,31384,32676,35033,36557,37089,22528,23624,25496,31391,23470,24339,31353,31406,33422,36524,20518,21048,21240,21367,22280,25331,25458,27402,28099,30519,21413,29527,34152,36470,38357,26426,27331,28528,35437,36556,39243,63750,26231,27512,36020,15106=>39740,63751,21483,22317,22862,25542,27131,29674,30789,31418,31429,31998,33909,35215,36211,36917,38312,21243,22343,30023,31584,33740,37406,63752,27224,20811,21067,21127,25119,26840,26997,38553,20677,21156,21220,25027,26020,26681,27135,29822,31563,33465,33771,35250,35641,36817,39241,63753,20170,22935,25810,26129,27278,29748,31105,31165,33449,34942,34943,35167,63754,37670,20235,21450,24613,25201,27762,32026,32102,20120,20834,30684,32943,20225,20238,20854,20864,21980,22120,22331,22522,22524,22804,22855,22931,23492,23696,23822,24049,24190,24524,25216,26071,26083,15296=>26398,26399,26462,26827,26820,27231,27450,27683,27773,27778,28103,29592,29734,29738,29826,29859,30072,30079,30849,30959,31041,31047,31048,31098,31637,32000,32186,32648,32774,32813,32908,35352,35663,35912,36215,37665,37668,39138,39249,39438,39439,39525,40594,32202,20342,21513,25326,26708,37329,21931,20794,63755,63756,23068,25062,63757,25295,25343,63758,63759,63760,63761,63762,63763,37027,63764,63765,63766,63767,63768,35582,63769,63770,63771,63772,26262,63773,29014,63774,63775,38627,63776,25423,25466,21335,63777,26511,26976,28275,63778,30007,63779,63780,63781,15486=>32013,63782,63783,34930,22218,23064,63784,63785,63786,63787,63788,20035,63789,20839,22856,26608,32784,63790,22899,24180,25754,31178,24565,24684,25288,25467,23527,23511,21162,63791,22900,24361,24594,63792,63793,63794,29785,63795,63796,63797,63798,63799,63800,39377,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,28611,63812,63813,33215,36786,24817,63814,63815,33126,63816,63817,23615,63818,63819,63820,63821,63822,63823,63824,63825,23273,35365,26491,32016,63826,63827,63828,63829,63830,63831,33021,63832,63833,23612,27877,21311,28346,22810,33590,15676=>20025,20150,20294,21934,22296,22727,24406,26039,26086,27264,27573,28237,30701,31471,31774,32222,34507,34962,37170,37723,25787,28606,29562,30136,36948,21846,22349,25018,25812,26311,28129,28251,28525,28601,30192,32835,33213,34113,35203,35527,35674,37663,27795,30035,31572,36367,36957,21776,22530,22616,24162,25095,25758,26848,30070,31958,34739,40680,20195,22408,22382,22823,23565,23729,24118,24453,25140,25825,29619,33274,34955,36024,38538,40667,23429,24503,24755,20498,20992,21040,22294,22581,22615,23566,23648,23798,23947,24230,24466,24764,25361,25481,25623,26691,15866=>26873,27330,28120,28193,28372,28644,29182,30428,30585,31153,31291,33796,35241,36077,36339,36424,36867,36884,36947,37117,37709,38518,38876,27602,28678,29272,29346,29544,30563,31167,31716,32411,35712,22697,24775,25958,26109,26302,27788,28958,29129,35930,38931,20077,31361,20189,20908,20941,21205,21516,24999,26481,26704,26847,27934,28540,30140,30643,31461,33012,33891,37509,20828,26007,26460,26515,30168,31431,33651,63834,35910,36887,38957,23663,33216,33434,36929,36975,37389,24471,23965,27225,29128,30331,31561,34276,35588,37159,39472,21895,25078,63835,30313,32645,16056=>34367,34746,35064,37007,63836,27931,28889,29662,32097,33853,63837,37226,39409,63838,20098,21365,27396,27410,28734,29211,34349,40478,21068,36771,23888,25829,25900,27414,28651,31811,32412,34253,35172,35261,25289,33240,34847,24266,26391,28010,29436,29701,29807,34690,37086,20358,23821,24480,33802,20919,25504,30053,20142,20486,20841,20937,26753,27153,31918,31921,31975,33391,35538,36635,37327,20406,20791,21237,21570,24300,24942,25150,26053,27354,28670,31018,34268,34851,38317,39522,39530,40599,40654,21147,26310,27511,28701,31019,36706,38722,24976,25088,25891,28451,16246=>29001,29833,32244,32879,34030,36646,36899,37706,20925,21015,21155,27916,28872,35010,24265,25986,27566,28610,31806,29557,20196,20278,22265,63839,23738,23994,24604,29618,31533,32666,32718,32838,36894,37428,38646,38728,38936,40801,20363,28583,31150,37300,38583,21214,63840,25736,25796,27347,28510,28696,29200,30439,32769,34310,34396,36335,36613,38706,39791,40442,40565,30860,31103,32160,33737,37636,40575,40595,35542,22751,24324,26407,28711,29903,31840,32894,20769,28712,29282,30922,36034,36058,36084,38647,20102,20698,23534,24278,26009,29134,30274,30637,32842,34044,16436=>36988,39719,40845,22744,23105,23650,27155,28122,28431,30267,32047,32311,34078,35128,37860,38475,21129,26066,26611,27060,27969,28316,28687,29705,29792,30041,30244,30827,35628,39006,20845,25134,38520,20374,20523,23833,28138,32184,36650,24459,24900,26647,63841,38534,21202,32907,20956,20940,26974,31260,32190,33777,38517,20442,21033,21400,21519,21774,23653,24743,26446,26792,28012,29313,29432,29702,29827,63842,30178,31852,32633,32696,33673,35023,35041,37324,37328,38626,39881,21533,28542,29136,29848,34298,36522,38563,40023,40607,26519,28107,29747,33256,38678,30764,16626=>31435,31520,31890,25705,29802,30194,30908,30952,39340,39764,40635,23518,24149,28448,33180,33707,37000,19975,21325,23081,24018,24398,24930,25405,26217,26364,28415,28459,28771,30622,33836,34067,34875,36627,39237,39995,21788,25273,26411,27819,33545,35178,38778,20129,22916,24536,24537,26395,32178,32596,33426,33579,33725,36638,37017,22475,22969,23186,23504,26151,26522,26757,27599,29028,32629,36023,36067,36993,39749,33032,35978,38476,39488,40613,23391,27667,29467,30450,30431,33804,20906,35219,20813,20885,21193,26825,27796,30468,30496,32191,32236,38754,40629,28357,16816=>34065,20901,21517,21629,26126,26269,26919,28319,30399,30609,33559,33986,34719,37225,37528,40180,34946,20398,20882,21215,22982,24125,24917,25720,25721,26286,26576,27169,27597,27611,29279,29281,29761,30520,30683,32791,33468,33541,35584,35624,35980,26408,27792,29287,30446,30566,31302,40361,27519,27794,22818,26406,33945,21359,22675,22937,24287,25551,26164,26483,28218,29483,31447,33495,37672,21209,24043,25006,25035,25098,25287,25771,26080,26969,27494,27595,28961,29687,30045,32326,33310,33538,34154,35491,36031,38695,40289,22696,40664,20497,21006,21563,21839,25991,17006=>27766,32010,32011,32862,34442,38272,38639,21247,27797,29289,21619,23194,23614,23883,24396,24494,26410,26806,26979,28220,28228,30473,31859,32654,34183,35598,36855,38753,40692,23735,24758,24845,25003,25935,26107,26108,27665,27887,29599,29641,32225,38292,23494,34588,35600,21085,21338,25293,25615,25778,26420,27192,27850,29632,29854,31636,31893,32283,33162,33334,34180,36843,38649,39361,20276,21322,21453,21467,25292,25644,25856,26001,27075,27886,28504,29677,30036,30242,30436,30460,30928,30971,31020,32070,33324,34784,36820,38930,39151,21187,25300,25765,28196,28497,17196=>30332,36299,37297,37474,39662,39747,20515,20621,22346,22952,23592,24135,24439,25151,25918,26041,26049,26121,26507,27036,28354,30917,32033,32938,33152,33323,33459,33953,34444,35370,35607,37030,38450,40848,20493,20467,63843,22521,24472,25308,25490,26479,28227,28953,30403,32972,32986,35060,35061,35097,36064,36649,37197,38506,20271,20336,24091,26575,26658,30333,30334,39748,24161,27146,29033,29140,30058,63844,32321,34115,34281,39132,20240,31567,32624,38309,20961,24070,26805,27710,27726,27867,29359,31684,33539,27861,29754,20731,21128,22721,25816,27287,29863,30294,17386=>30887,34327,38370,38713,63845,21342,24321,35722,36776,36783,37002,21029,30629,40009,40712,19993,20482,20853,23643,24183,26142,26170,26564,26821,28851,29953,30149,31177,31453,36647,39200,39432,20445,22561,22577,23542,26222,27493,27921,28282,28541,29668,29995,33769,35036,35091,35676,36628,20239,20693,21264,21340,23443,24489,26381,31119,33145,33583,34068,35079,35206,36665,36667,39333,39954,26412,20086,20472,22857,23553,23791,23792,25447,26834,28925,29090,29739,32299,34028,34562,36898,37586,40179,19981,20184,20463,20613,21078,21103,21542,21648,22496,22827,23142,17576=>23386,23413,23500,24220,63846,25206,25975,26023,28014,28325,29238,31526,31807,32566,33104,33105,33178,33344,33433,33705,35331,36000,36070,36091,36212,36282,37096,37340,38428,38468,39385,40167,21271,20998,21545,22132,22707,22868,22894,24575,24996,25198,26128,27774,28954,30406,31881,31966,32027,33452,36033,38640,63847,20315,24343,24447,25282,23849,26379,26842,30844,32323,40300,19989,20633,21269,21290,21329,22915,23138,24199,24754,24970,25161,25209,26000,26503,27047,27604,27606,27607,27608,27832,63848,29749,30202,30738,30865,31189,31192,31875,32203,32737,32933,17766=>33086,33218,33778,34586,35048,35513,35692,36027,37145,38750,39131,40763,22188,23338,24428,25996,27315,27567,27996,28657,28693,29277,29613,36007,36051,38971,24977,27703,32856,39425,20045,20107,20123,20181,20282,20284,20351,20447,20735,21490,21496,21766,21987,22235,22763,22882,23057,23531,23546,23556,24051,24107,24473,24605,25448,26012,26031,26614,26619,26797,27515,27801,27863,28195,28681,29509,30722,31038,31040,31072,31169,31721,32023,32114,32902,33293,33678,34001,34503,35039,35408,35422,35613,36060,36198,36781,37034,39164,39391,40605,21066,63849,26388,63850,17956=>20632,21034,23665,25955,27733,29642,29987,30109,31639,33948,37240,38704,20087,25746,27578,29022,34217,19977,63851,26441,26862,28183,33439,34072,34923,25591,28545,37394,39087,19978,20663,20687,20767,21830,21930,22039,23360,23577,23776,24120,24202,24224,24258,24819,26705,27233,28248,29245,29248,29376,30456,31077,31665,32724,35059,35316,35443,35937,36062,38684,22622,29885,36093,21959,63852,31329,32034,33394,29298,29983,29989,63853,31513,22661,22779,23996,24207,24246,24464,24661,25234,25471,25933,26257,26329,26360,26646,26866,29312,29790,31598,32110,32214,32626,18146=>32997,33298,34223,35199,35475,36893,37604,40653,40736,22805,22893,24109,24796,26132,26227,26512,27728,28101,28511,30707,30889,33990,37323,37675,20185,20682,20808,21892,23307,23459,25159,25982,26059,28210,29053,29697,29764,29831,29887,30316,31146,32218,32341,32680,33146,33203,33337,34330,34796,35445,36323,36984,37521,37925,39245,39854,21352,23633,26964,27844,27945,28203,33292,34203,35131,35373,35498,38634,40807,21089,26297,27570,32406,34814,36109,38275,38493,25885,28041,29166,63854,22478,22995,23468,24615,24826,25104,26143,26207,29481,29689,30427,30465,31596,18336=>32854,32882,33125,35488,37266,19990,21218,27506,27927,31237,31545,32048,63855,36016,21484,22063,22609,23477,23567,23569,24034,25152,25475,25620,26157,26803,27836,28040,28335,28703,28836,29138,29990,30095,30094,30233,31505,31712,31787,32032,32057,34092,34157,34311,35380,36877,36961,37045,37559,38902,39479,20439,23660,26463,28049,31903,32396,35606,36118,36895,23403,24061,25613,33984,36956,39137,29575,23435,24730,26494,28126,35359,35494,36865,38924,21047,63856,28753,30862,37782,34928,37335,20462,21463,22013,22234,22402,22781,23234,23432,23723,23744,24101,24833,18526=>25101,25163,25480,25628,25910,25976,27193,27530,27700,27929,28465,29159,29417,29560,29703,29874,30246,30561,31168,31319,31466,31929,32143,32172,32353,32670,33065,33585,33936,34010,34282,34966,35504,35728,36664,36930,36995,37228,37526,37561,38539,38567,38568,38614,38656,38920,39318,39635,39706,21460,22654,22809,23408,23487,28113,28506,29087,29729,29881,32901,33789,24033,24455,24490,24642,26092,26642,26991,27219,27529,27957,28147,29667,30462,30636,31565,32020,33059,33308,33600,34036,34147,35426,35524,37255,37662,38918,39348,25100,34899,36848,37477,23815,23847,18716=>23913,29791,33181,34664,28629,25342,32722,35126,35186,19998,20056,20711,21213,21319,25215,26119,32361,34821,38494,20365,21273,22070,22987,23204,23608,23630,23629,24066,24337,24643,26045,26159,26178,26558,26612,29468,30690,31034,32709,33940,33997,35222,35430,35433,35553,35925,35962,22516,23508,24335,24687,25325,26893,27542,28252,29060,31698,34645,35672,36606,39135,39166,20280,20353,20449,21627,23072,23480,24892,26032,26216,29180,30003,31070,32051,33102,33251,33688,34218,34254,34563,35338,36523,36763,63857,36805,22833,23460,23526,24713,23529,23563,24515,27777,18906=>63858,28145,28683,29978,33455,35574,20160,21313,63859,38617,27663,20126,20420,20818,21854,23077,23784,25105,29273,33469,33706,34558,34905,35357,38463,38597,39187,40201,40285,22538,23731,23997,24132,24801,24853,25569,27138,28197,37122,37716,38990,39952,40823,23433,23736,25353,26191,26696,30524,38593,38797,38996,39839,26017,35585,36555,38332,21813,23721,24022,24245,26263,30284,33780,38343,22739,25276,29390,40232,20208,22830,24591,26171,27523,31207,40230,21395,21696,22467,23830,24859,26326,28079,30861,33406,38552,38724,21380,25212,25494,28082,32266,33099,38989,19096=>27387,32588,40367,40474,20063,20539,20918,22812,24825,25590,26928,29242,32822,63860,37326,24369,63861,63862,32004,33509,33903,33979,34277,36493,63863,20335,63864,63865,22756,23363,24665,25562,25880,25965,26264,63866,26954,27171,27915,28673,29036,30162,30221,31155,31344,63867,32650,63868,35140,63869,35731,37312,38525,63870,39178,22276,24481,26044,28417,30208,31142,35486,39341,39770,40812,20740,25014,25233,27277,33222,20547,22576,24422,28937,35328,35578,23420,34326,20474,20796,22196,22852,25513,28153,23978,26989,20870,20104,20313,63871,63872,63873,22914,63874,19286=>63875,27487,27741,63876,29877,30998,63877,33287,33349,33593,36671,36701,63878,39192,63879,63880,63881,20134,63882,22495,24441,26131,63883,63884,30123,32377,35695,63885,36870,39515,22181,22567,23032,23071,23476,63886,24310,63887,63888,25424,25403,63889,26941,27783,27839,28046,28051,28149,28436,63890,28895,28982,29017,63891,29123,29141,63892,30799,30831,63893,31605,32227,63894,32303,63895,34893,36575,63896,63897,63898,37467,63899,40182,63900,63901,63902,24709,28037,63903,29105,63904,63905,38321,21421,63906,63907,63908,26579,63909,28814,28976,29744,33398,33490,19476=>63910,38331,39653,40573,26308,63911,29121,33865,63912,63913,22603,63914,63915,23992,24433,63916,26144,26254,27001,27054,27704,27891,28214,28481,28634,28699,28719,29008,29151,29552,63917,29787,63918,29908,30408,31310,32403,63919,63920,33521,35424,36814,63921,37704,63922,38681,63923,63924,20034,20522,63925,21000,21473,26355,27757,28618,29450,30591,31330,33454,34269,34306,63926,35028,35427,35709,35947,63927,37555,63928,38675,38928,20116,20237,20425,20658,21320,21566,21555,21978,22626,22714,22887,23067,23524,24735,63929,25034,25942,26111,26212,26791,27738,28595,19666=>28879,29100,29522,31613,34568,35492,39986,40711,23627,27779,29508,29577,37434,28331,29797,30239,31337,32277,34314,20800,22725,25793,29934,29973,30320,32705,37013,38605,39252,28198,29926,31401,31402,33253,34521,34680,35355,23113,23436,23451,26785,26880,28003,29609,29715,29740,30871,32233,32747,33048,33109,33694,35916,38446,38929,26352,24448,26106,26505,27754,29579,20525,23043,27498,30702,22806,23916,24013,29477,30031,63930,63931,20709,20985,22575,22829,22934,23002,23525,63932,63933,23970,25303,25622,25747,25854,63934,26332,63935,27208,63936,29183,29796,63937,19856=>31368,31407,32327,32350,32768,33136,63938,34799,35201,35616,36953,63939,36992,39250,24958,27442,28020,32287,35109,36785,20433,20653,20887,21191,22471,22665,23481,24248,24898,27029,28044,28263,28342,29076,29794,29992,29996,32883,33592,33993,36362,37780,37854,63940,20110,20305,20598,20778,21448,21451,21491,23431,23507,23588,24858,24962,26100,29275,29591,29760,30402,31056,31121,31161,32006,32701,33419,34261,34398,36802,36935,37109,37354,38533,38632,38633,21206,24423,26093,26161,26671,29020,31286,37057,38922,20113,63941,27218,27550,28560,29065,32792,33464,34131,20046=>36939,38549,38642,38907,34074,39729,20112,29066,38596,20803,21407,21729,22291,22290,22435,23195,23236,23491,24616,24895,25588,27781,27961,28274,28304,29232,29503,29783,33489,34945,36677,36960,63942,38498,39000,40219,26376,36234,37470,20301,20553,20702,21361,22285,22996,23041,23561,24944,26256,28205,29234,29771,32239,32963,33806,33894,34111,34655,34907,35096,35586,36949,38859,39759,20083,20369,20754,20842,63943,21807,21929,23418,23461,24188,24189,24254,24736,24799,24840,24841,25540,25912,26377,63944,26580,26586,63945,26977,26978,27833,27943,63946,28216,63947,20236=>28641,29494,29495,63948,29788,30001,63949,30290,63950,63951,32173,33278,33848,35029,35480,35547,35565,36400,36418,36938,36926,36986,37193,37321,37742,63952,63953,22537,63954,27603,32905,32946,63955,63956,20801,22891,23609,63957,63958,28516,29607,32996,36103,63959,37399,38287,63960,63961,63962,63963,32895,25102,28700,32104,34701,63964,22432,24681,24903,27575,35518,37504,38577,20057,21535,28139,34093,38512,38899,39150,25558,27875,37009,20957,25033,33210,40441,20381,20506,20736,23452,24847,25087,25836,26885,27589,30097,30691,32681,33380,34191,34811,34915,35516,20426=>35696,37291,20108,20197,20234,63965,63966,22839,23016,63967,24050,24347,24411,24609,63968,63969,63970,63971,29246,29669,63972,30064,30157,63973,31227,63974,32780,32819,32900,33505,33617,63975,63976,36029,36019,36999,63977,63978,39156,39180,63979,63980,28727,30410,32714,32716,32764,35610,20154,20161,20995,21360,63981,21693,22240,23035,23493,24341,24525,28270,63982,63983,32106,33589,63984,34451,35469,63985,38765,38775,63986,63987,19968,20314,20350,22777,26085,28322,36920,37808,39353,20219,22764,22922,23001,24641,63988,63989,31252,63990,33615,36035,20837,21316,20616=>63991,63992,63993,20173,21097,23381,33471,20180,21050,21672,22985,23039,23376,23383,23388,24675,24904,28363,28825,29038,29574,29943,30133,30913,32043,32773,33258,33576,34071,34249,35566,36039,38604,20316,21242,22204,26027,26152,28796,28856,29237,32189,33421,37196,38592,40306,23409,26855,27544,28538,30430,23697,26283,28507,31668,31786,34870,38620,19976,20183,21280,22580,22715,22767,22892,23559,24115,24196,24373,25484,26290,26454,27167,27299,27404,28479,29254,63994,29520,29835,31456,31911,33144,33247,33255,33674,33900,34083,34196,34255,35037,36115,37292,38263,20806=>38556,20877,21705,22312,23472,25165,26448,26685,26771,28221,28371,28797,32289,35009,36001,36617,40779,40782,29229,31631,35533,37658,20295,20302,20786,21632,22992,24213,25269,26485,26990,27159,27822,28186,29401,29482,30141,31672,32053,33511,33785,33879,34295,35419,36015,36487,36889,37048,38606,40799,21219,21514,23265,23490,25688,25973,28404,29380,63995,30340,31309,31515,31821,32318,32735,33659,35627,36042,36196,36321,36447,36842,36857,36969,37841,20291,20346,20659,20840,20856,21069,21098,22625,22652,22880,23560,23637,24283,24731,25136,26643,27583,27656,28593,20996=>29006,29728,30000,30008,30033,30322,31564,31627,31661,31686,32399,35438,36670,36681,37439,37523,37666,37931,38651,39002,39019,39198,20999,25130,25240,27993,30308,31434,31680,32118,21344,23742,24215,28472,28857,31896,38673,39822,40670,25509,25722,34678,19969,20117,20141,20572,20597,21576,22979,23450,24128,24237,24311,24449,24773,25402,25919,25972,26060,26230,26232,26622,26984,27273,27491,27712,28096,28136,28191,28254,28702,28833,29582,29693,30010,30555,30855,31118,31243,31357,31934,32142,33351,35330,35562,35998,37165,37194,37336,37478,37580,37664,38662,38742,21186=>38748,38914,40718,21046,21137,21884,22564,24093,24351,24716,25552,26799,28639,31085,31532,33229,34234,35069,35576,36420,37261,38500,38555,38717,38988,40778,20430,20806,20939,21161,22066,24340,24427,25514,25805,26089,26177,26362,26361,26397,26781,26839,27133,28437,28526,29031,29157,29226,29866,30522,31062,31066,31199,31264,31381,31895,31967,32068,32368,32903,34299,34468,35412,35519,36249,36481,36896,36973,37347,38459,38613,40165,26063,31751,36275,37827,23384,23562,21330,25305,29469,20519,23447,24478,24752,24939,26837,28121,29742,31278,32066,32156,32305,33131,21376=>36394,36405,37758,37912,20304,22352,24038,24231,25387,32618,20027,20303,20367,20570,23005,32964,21610,21608,22014,22863,23449,24030,24282,26205,26417,26609,26666,27880,27954,28234,28557,28855,29664,30087,31820,32002,32044,32162,33311,34523,35387,35461,36208,36490,36659,36913,37198,37202,37956,39376,31481,31909,20426,20737,20934,22472,23535,23803,26201,27197,27994,28310,28652,28940,30063,31459,34850,36897,36981,38603,39423,33537,20013,20210,34886,37325,21373,27355,26987,27713,33914,22686,24974,26366,25327,28893,29969,30151,32338,33976,35657,36104,20043,21482,21566=>21675,22320,22336,24535,25345,25351,25711,25903,26088,26234,26525,26547,27490,27744,27802,28460,30693,30757,31049,31063,32025,32930,33026,33267,33437,33463,34584,35468,63996,36100,36286,36978,30452,31257,31287,32340,32887,21767,21972,22645,25391,25634,26185,26187,26733,27035,27524,27941,28337,29645,29800,29857,30043,30137,30433,30494,30603,31206,32265,32285,33275,34095,34967,35386,36049,36587,36784,36914,37805,38499,38515,38663,20356,21489,23018,23241,24089,26702,29894,30142,31209,31378,33187,34541,36074,36300,36845,26015,26389,63997,22519,28503,32221,36655,21756=>37878,38598,24501,25074,28548,19988,20376,20511,21449,21983,23919,24046,27425,27492,30923,31642,63998,36425,36554,36974,25417,25662,30528,31364,37679,38015,40810,25776,28591,29158,29864,29914,31428,31762,32386,31922,32408,35738,36106,38013,39184,39244,21049,23519,25830,26413,32046,20717,21443,22649,24920,24921,25082,26028,31449,35730,35734,20489,20513,21109,21809,23100,24288,24432,24884,25950,26124,26166,26274,27085,28356,28466,29462,30241,31379,33081,33369,33750,33980,20661,22512,23488,23528,24425,25505,30758,32181,33756,34081,37319,37365,20874,26613,31574,21946=>36012,20932,22971,24765,34389,20508,63999,21076,23610,24957,25114,25299,25842,26021,28364,30240,33034,36448,38495,38587,20191,21315,21912,22825,24029,25797,27849,28154,29588,31359,33307,34214,36068,36368,36983,37351,38369,38433,38854,20984,21746,21894,24505,25764,28552,32180,36639,36685,37941,20681,23574,27838,28155,29979,30651,31805,31844,35449,35522,22558,22974,24086,25463,29266,30090,30571,35548,36028,36626,24307,26228,28152,32893,33729,35531,38737,39894,64000,21059,26367,28053,28399,32224,35558,36910,36958,39636,21021,21119,21736,24980,25220,25307,26786,22136=>26898,26970,27189,28818,28966,30813,30977,30990,31186,31245,32918,33400,33493,33609,34121,35970,36229,37218,37259,37294,20419,22225,29165,30679,34560,35320,23544,24534,26449,37032,21474,22618,23541,24740,24961,25696,32317,32880,34085,37507,25774,20652,23828,26368,22684,25277,25512,26894,27000,27166,28267,30394,31179,33467,33833,35535,36264,36861,37138,37195,37276,37648,37656,37786,38619,39478,39949,19985,30044,31069,31482,31569,31689,32302,33988,36441,36468,36600,36880,26149,26943,29763,20986,26414,40668,20805,24544,27798,34802,34909,34935,24756,33205,33795,22326=>36101,21462,21561,22068,23094,23601,28810,32736,32858,33030,33261,36259,37257,39519,40434,20596,20164,21408,24827,28204,23652,20360,20516,21988,23769,24159,24677,26772,27835,28100,29118,30164,30196,30305,31258,31305,32199,32251,32622,33268,34473,36636,38601,39347,40786,21063,21189,39149,35242,19971,26578,28422,20405,23522,26517,27784,28024,29723,30759,37341,37756,34756,31204,31281,24555,20182,21668,21822,22702,22949,24816,25171,25302,26422,26965,33333,38464,39345,39389,20524,21331,21828,22396,64001,25176,64002,25826,26219,26589,28609,28655,29730,29752,35351,22516=>37944,21585,22022,22374,24392,24986,27470,28760,28845,32187,35477,22890,33067,25506,30472,32829,36010,22612,25645,27067,23445,24081,28271,64003,34153,20812,21488,22826,24608,24907,27526,27760,27888,31518,32974,33492,36294,37040,39089,64004,25799,28580,25745,25860,20814,21520,22303,35342,24927,26742,64005,30171,31570,32113,36890,22534,27084,33151,35114,36864,38969,20600,22871,22956,25237,36879,39722,24925,29305,38358,22369,23110,24052,25226,25773,25850,26487,27874,27966,29228,29750,30772,32631,33453,36315,38935,21028,22338,26495,29256,29923,36009,36774,37393,22706=>38442,20843,21485,25420,20329,21764,24726,25943,27803,28031,29260,29437,31255,35207,35997,24429,28558,28921,33192,24846,20415,20559,25153,29255,31687,32232,32745,36941,38829,39449,36022,22378,24179,26544,33805,35413,21536,23318,24163,24290,24330,25987,32954,34109,38281,38491,20296,21253,21261,21263,21638,21754,22275,24067,24598,25243,25265,25429,64006,27873,28006,30129,30770,32990,33071,33502,33889,33970,34957,35090,36875,37610,39165,39825,24133,26292,26333,28689,29190,64007,20469,21117,24426,24915,26451,27161,28418,29922,31080,34920,35961,39111,39108,39491,22896=>21697,31263,26963,35575,35914,39080,39342,24444,25259,30130,30382,34987,36991,38466,21305,24380,24517,27852,29644,30050,30091,31558,33534,39325,20047,36924,19979,20309,21414,22799,24264,26160,27827,29781,33655,34662,36032,36944,38686,39957,22737,23416,34384,35604,40372,23506,24680,24717,26097,27735,28450,28579,28698,32597,32752,38289,38290,38480,38867,21106,36676,20989,21547,21688,21859,21898,27323,28085,32216,33382,37532,38519,40569,21512,21704,30418,34532,38308,38356,38492,20130,20233,23022,23270,24055,24658,25239,26477,26689,27782,28207,32568,32923,33322,23086=>64008,64009,38917,20133,20565,21683,22419,22874,23401,23475,25032,26999,28023,28707,34809,35299,35442,35559,36994,39405,39608,21182,26680,20502,24184,26447,33607,34892,20139,21521,22190,29670,37141,38911,39177,39255,39321,22099,22687,34395,35377,25010,27382,29563,36562,27463,38570,39511,22869,29184,36203,38761,20436,23796,24358,25080,26203,27883,28843,29572,29625,29694,30505,30541,32067,32098,32291,33335,34898,64010,36066,37449,39023,23377,31348,34880,38913,23244,20448,21332,22846,23805,25406,28025,29433,33029,33031,33698,37583,38960,20136,20804,21009,22411,23276=>24418,27842,28366,28677,28752,28847,29074,29673,29801,33610,34722,34913,36872,37026,37795,39336,20846,24407,24800,24935,26291,34137,36426,37295,38795,20046,20114,21628,22741,22778,22909,23733,24359,25142,25160,26122,26215,27627,28009,28111,28246,28408,28564,28640,28649,28765,29392,29733,29786,29920,30355,31068,31946,32286,32993,33446,33899,33983,34382,34399,34676,35703,35946,37804,38912,39013,24785,25110,37239,23130,26127,28151,28222,29759,39746,24573,24794,31503,21700,24344,27742,27859,27946,28888,32005,34425,35340,40251,21270,21644,23301,27194,28779,30069,23466=>31117,31166,33457,33775,35441,35649,36008,38772,64011,25844,25899,30906,30907,31339,20024,21914,22864,23462,24187,24739,25563,27489,26213,26707,28185,29029,29872,32008,36996,39529,39973,27963,28369,29502,35905,38346,20976,24140,24488,24653,24822,24880,24908,26179,26180,27045,27841,28255,28361,28514,29004,29852,30343,31681,31783,33618,34647,36945,38541,40643,21295,22238,24315,24458,24674,24724,25079,26214,26371,27292,28142,28590,28784,29546,32362,33214,33588,34516,35496,36036,21123,29554,23446,27243,37892,21742,22150,23389,25928,25989,26313,26783,28045,28102,23656=>29243,32948,37237,39501,20399,20505,21402,21518,21564,21897,21957,24127,24460,26429,29030,29661,36869,21211,21235,22628,22734,28932,29071,29179,34224,35347,26248,34216,21927,26244,29002,33841,21321,21913,27585,24409,24509,25582,26249,28999,35569,36637,40638,20241,25658,28875,30054,34407,24676,35662,40440,20807,20982,21256,27958,33016,40657,26133,27427,28824,30165,21507,23673,32007,35350,27424,27453,27462,21560,24688,27965,32725,33288,20694,20958,21916,22123,22221,23020,23305,24076,24985,24984,25137,26206,26342,29081,29113,29114,29351,31143,31232,32690,35440]; + + /** @var array $pointerCache A cached result of flipping the pointer-to-code-point table */ + protected static $pointerCache; public function nextCode() { $this->posChar++; @@ -71,7 +74,7 @@ class EUCKR extends AbstractEncoding implements StatelessEncoding { } elseif ($codePoint < 128) { return chr($codePoint); } else { - $pointer = array_flip(self::TABLE_CODES)[$codePoint] ?? null; + $pointer = (self::$pointerCache ?? (self::$pointerCache = array_flip(self::TABLE_CODES)))[$codePoint] ?? null; // this is safe: the EUC-KR index has no duplicates if (isset($pointer)) { $lead = (int) ($pointer / 190) + 0x81; $trail = ($pointer % 190) + 0x41; @@ -82,7 +85,6 @@ class EUCKR extends AbstractEncoding implements StatelessEncoding { } } - /** Implements backward seeking $distance characters */ protected function seekBack(int $distance): int { while ($distance > 0 && $this->posByte > 0) { $distance--; diff --git a/lib/Encoding/Encoder.php b/lib/Encoding/Encoder.php new file mode 100644 index 0000000..f79ed0c --- /dev/null +++ b/lib/Encoding/Encoder.php @@ -0,0 +1,321 @@ +name = $l['name']; + $this->fatal = $fatal; + } + } + + /** Encodes a series of code point numbers into a string + * + * @param iterable $codePoints An iterable set of integers representing code points in the Unicode range + */ + public function encode(iterable $codePoints): string { + $out = ""; + switch ($this->name) { + case "UTF-8": + foreach ($codePoints as $codePoint) { + $out .= UTF8::encode($codePoint, $this->fatal); + } + break; + case "Big5": + foreach ($codePoints as $codePoint) { + $out .= Big5::encode($codePoint, $this->fatal); + } + break; + case "EUC-JP": + foreach ($codePoints as $codePoint) { + $out .= EUCJP::encode($codePoint, $this->fatal); + } + break; + case "EUC-KR": + foreach ($codePoints as $codePoint) { + $out .= EUCKR::encode($codePoint, $this->fatal); + } + break; + case "gb18030": + foreach ($codePoints as $codePoint) { + $out .= GB18030::encode($codePoint, $this->fatal); + } + break; + case "GBK": + foreach ($codePoints as $codePoint) { + $out .= GBK::encode($codePoint, $this->fatal); + } + break; + case "IBM866": + foreach ($codePoints as $codePoint) { + $out .= IBM866::encode($codePoint, $this->fatal); + } + break; + case "ISO-2022-JP": + foreach ($codePoints as $codePoint) { + $out .= ISO2022JP::encode($codePoint, $this->fatal, $mode); + } + $out .= ISO2022JP::encode(null, $this->fatal, $mode); + break; + case "ISO-8859-2": + foreach ($codePoints as $codePoint) { + $out .= ISO88592::encode($codePoint, $this->fatal); + } + break; + case "ISO-8859-3": + foreach ($codePoints as $codePoint) { + $out .= ISO88593::encode($codePoint, $this->fatal); + } + break; + case "ISO-8859-4": + foreach ($codePoints as $codePoint) { + $out .= ISO88594::encode($codePoint, $this->fatal); + } + break; + case "ISO-8859-5": + foreach ($codePoints as $codePoint) { + $out .= ISO88595::encode($codePoint, $this->fatal); + } + break; + case "ISO-8859-6": + foreach ($codePoints as $codePoint) { + $out .= ISO88596::encode($codePoint, $this->fatal); + } + break; + case "ISO-8859-7": + foreach ($codePoints as $codePoint) { + $out .= ISO88597::encode($codePoint, $this->fatal); + } + break; + case "ISO-8859-8": + foreach ($codePoints as $codePoint) { + $out .= ISO88598::encode($codePoint, $this->fatal); + } + break; + case "ISO-8859-8-I": + foreach ($codePoints as $codePoint) { + $out .= ISO88598I::encode($codePoint, $this->fatal); + } + break; + case "ISO-8859-10": + foreach ($codePoints as $codePoint) { + $out .= ISO885910::encode($codePoint, $this->fatal); + } + break; + case "ISO-8859-13": + foreach ($codePoints as $codePoint) { + $out .= ISO885913::encode($codePoint, $this->fatal); + } + break; + case "ISO-8859-14": + foreach ($codePoints as $codePoint) { + $out .= ISO885914::encode($codePoint, $this->fatal); + } + break; + case "ISO-8859-15": + foreach ($codePoints as $codePoint) { + $out .= ISO885915::encode($codePoint, $this->fatal); + } + break; + case "ISO-8859-16": + foreach ($codePoints as $codePoint) { + $out .= ISO885916::encode($codePoint, $this->fatal); + } + break; + case "KOI8-R": + foreach ($codePoints as $codePoint) { + $out .= KOI8R::encode($codePoint, $this->fatal); + } + break; + case "KOI8-U": + foreach ($codePoints as $codePoint) { + $out .= KOI8U::encode($codePoint, $this->fatal); + } + break; + case "macintosh": + foreach ($codePoints as $codePoint) { + $out .= Macintosh::encode($codePoint, $this->fatal); + } + break; + case "Shift_JIS": + foreach ($codePoints as $codePoint) { + $out .= ShiftJIS::encode($codePoint, $this->fatal); + } + break; + case "windows-1250": + foreach ($codePoints as $codePoint) { + $out .= Windows1250::encode($codePoint, $this->fatal); + } + break; + case "windows-1251": + foreach ($codePoints as $codePoint) { + $out .= Windows1251::encode($codePoint, $this->fatal); + } + break; + case "windows-1252": + foreach ($codePoints as $codePoint) { + $out .= Windows1252::encode($codePoint, $this->fatal); + } + break; + case "windows-1253": + foreach ($codePoints as $codePoint) { + $out .= Windows1253::encode($codePoint, $this->fatal); + } + break; + case "windows-1254": + foreach ($codePoints as $codePoint) { + $out .= Windows1254::encode($codePoint, $this->fatal); + } + break; + case "windows-1255": + foreach ($codePoints as $codePoint) { + $out .= Windows1255::encode($codePoint, $this->fatal); + } + break; + case "windows-1256": + foreach ($codePoints as $codePoint) { + $out .= Windows1256::encode($codePoint, $this->fatal); + } + break; + case "windows-1257": + foreach ($codePoints as $codePoint) { + $out .= Windows1257::encode($codePoint, $this->fatal); + } + break; + case "windows-1258": + foreach ($codePoints as $codePoint) { + $out .= Windows1258::encode($codePoint, $this->fatal); + } + break; + case "windows-874": + foreach ($codePoints as $codePoint) { + $out .= Windows874::encode($codePoint, $this->fatal); + } + break; + case "x-mac-cyrillic": + foreach ($codePoints as $codePoint) { + $out .= XMacCyrillic::encode($codePoint, $this->fatal); + } + break; + case "x-user-defined": + foreach ($codePoints as $codePoint) { + $out .= XUserDefined::encode($codePoint, $this->fatal); + } + break; + } + return $out; + } + + /** Encodes a single character into a string + * + * When using this method to encode a string, the finalize() method should be called to terminate the string + * + * @param int $codePoint An integer representing the Unicode code point number to encode + */ + public function encodeChar(int $codePoint): string { + switch ($this->name) { + case "UTF-8": + return UTF8::encode($codePoint, $this->fatal); + case "Big5": + return Big5::encode($codePoint, $this->fatal); + case "EUC-JP": + return EUCJP::encode($codePoint, $this->fatal); + case "EUC-KR": + return EUCKR::encode($codePoint, $this->fatal); + case "gb18030": + return GB18030::encode($codePoint, $this->fatal); + case "GBK": + return GBK::encode($codePoint, $this->fatal); + case "IBM866": + return IBM866::encode($codePoint, $this->fatal); + case "ISO-8859-2": + return ISO88592::encode($codePoint, $this->fatal); + case "ISO-8859-3": + return ISO88593::encode($codePoint, $this->fatal); + case "ISO-8859-4": + return ISO88594::encode($codePoint, $this->fatal); + case "ISO-8859-5": + return ISO88595::encode($codePoint, $this->fatal); + case "ISO-8859-6": + return ISO88596::encode($codePoint, $this->fatal); + case "ISO-8859-7": + return ISO88597::encode($codePoint, $this->fatal); + case "ISO-8859-8": + return ISO88598::encode($codePoint, $this->fatal); + case "ISO-8859-8-I": + return ISO88598I::encode($codePoint, $this->fatal); + case "ISO-8859-10": + return ISO885910::encode($codePoint, $this->fatal); + case "ISO-8859-13": + return ISO885913::encode($codePoint, $this->fatal); + case "ISO-8859-14": + return ISO885914::encode($codePoint, $this->fatal); + case "ISO-8859-15": + return ISO885915::encode($codePoint, $this->fatal); + case "ISO-8859-16": + return ISO885916::encode($codePoint, $this->fatal); + case "KOI8-R": + return KOI8R::encode($codePoint, $this->fatal); + case "KOI8-U": + return KOI8U::encode($codePoint, $this->fatal); + case "macintosh": + return Macintosh::encode($codePoint, $this->fatal); + case "Shift_JIS": + return ShiftJIS::encode($codePoint, $this->fatal); + case "windows-1250": + return Windows1250::encode($codePoint, $this->fatal); + case "windows-1251": + return Windows1251::encode($codePoint, $this->fatal); + case "windows-1252": + return Windows1252::encode($codePoint, $this->fatal); + case "windows-1253": + return Windows1253::encode($codePoint, $this->fatal); + case "windows-1254": + return Windows1254::encode($codePoint, $this->fatal); + case "windows-1255": + return Windows1255::encode($codePoint, $this->fatal); + case "windows-1256": + return Windows1256::encode($codePoint, $this->fatal); + case "windows-1257": + return Windows1257::encode($codePoint, $this->fatal); + case "windows-1258": + return Windows1258::encode($codePoint, $this->fatal); + case "windows-874": + return Windows874::encode($codePoint, $this->fatal); + case "x-mac-cyrillic": + return XMacCyrillic::encode($codePoint, $this->fatal); + case "x-user-defined": + return XUserDefined::encode($codePoint, $this->fatal); + case "ISO-2022-JP": + return ISO2022JP::encode($codePoint, $this->fatal, $this->mode); + } + } // @codeCoverageIgnore + + /** Finalizes a string, returning any terminal bytes to append to the output + * + * For the ISO-2022-JP encoding, this method must be called fater the last character is encoded to correctly encode a string; for other encodings this is a no-op + */ + public function finalize(): string { + return ISO2022JP::encode(null, $this->fatal, $this->mode); + } +} diff --git a/lib/Encoding/GB18030.php b/lib/Encoding/GB18030.php index c543d2f..424d520 100644 --- a/lib/Encoding/GB18030.php +++ b/lib/Encoding/GB18030.php @@ -7,7 +7,7 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class GB18030 extends GBCommon { - const GBK = false; - const NAME = "gb18030"; - const LABELS = ["gb18030"]; + protected const GBK = false; + public const NAME = "gb18030"; + public const LABELS = ["gb18030"]; } diff --git a/lib/Encoding/GBCommon.php b/lib/Encoding/GBCommon.php index 0228509..1a401f9 100644 --- a/lib/Encoding/GBCommon.php +++ b/lib/Encoding/GBCommon.php @@ -6,10 +6,14 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; -abstract class GBCommon extends AbstractEncoding implements StatelessEncoding { - const TABLE_GBK = [19970,19972,19973,19974,19983,19986,19991,19999,20000,20001,20003,20006,20009,20014,20015,20017,20019,20021,20023,20028,20032,20033,20034,20036,20038,20042,20049,20053,20055,20058,20059,20066,20067,20068,20069,20071,20072,20074,20075,20076,20077,20078,20079,20082,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20095,20096,20097,20098,20099,20100,20101,20103,20106,20112,20118,20119,20121,20124,20125,20126,20131,20138,20143,20144,20145,20148,20150,20151,20152,20153,20156,20157,20158,20168,20172,20175,20176,20178,20186,20187,20188,20192,20194,20198,20199,20201,20205,20206,20207,20209,20212,20216,20217,20218,20220,20222,20224,20226,20227,20228,20229,20230,20231,20232,20235,20236,20242,20243,20244,20245,20246,20252,20253,20257,20259,20264,20265,20268,20269,20270,20273,20275,20277,20279,20281,20283,20286,20287,20288,20289,20290,20292,20293,20295,20296,20297,20298,20299,20300,20306,20308,20310,20321,20322,20326,20328,20330,20331,20333,20334,20337,20338,20341,20343,20344,20345,20346,20349,20352,20353,20354,20357,20358,20359,20362,20364,20366,20368,20370,20371,20373,20374,20376,20377,20378,20380,20382,20383,20385,20386,20388,20395,20397,20400,20401,20402,20403,20404,20406,20407,20408,20409,20410,20411,20412,20413,20414,20416,20417,20418,20422,20423,20424,20425,20427,20428,20429,20434,20435,20436,20437,20438,20441,20443,20448,20450,20452,20453,20455,20459,20460,20464,20466,20468,20469,20470,20471,20473,20475,20476,20477,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20494,20496,20497,20499,20501,20502,20503,20507,20509,20510,20512,20514,20515,20516,20519,20523,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20539,20541,20543,20544,20545,20546,20548,20549,20550,20553,20554,20555,20557,20560,20561,20562,20563,20564,20566,20567,20568,20569,20571,20573,20574,20575,20576,20577,20578,20579,20580,20582,20583,20584,20585,20586,20587,20589,20590,20591,20592,20593,20594,20595,20596,20597,20600,20601,20602,20604,20605,20609,20610,20611,20612,20614,20615,20617,20618,20619,20620,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20644,20646,20650,20651,20653,20654,20655,20656,20657,20659,20660,20661,20662,20663,20664,20665,20668,20669,20670,20671,20672,20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20688,20689,20690,20691,20692,20693,20695,20696,20697,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20712,20713,20714,20715,20719,20720,20721,20722,20724,20726,20727,20728,20729,20730,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20744,20745,20746,20748,20749,20750,20751,20752,20753,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20802,20807,20810,20812,20814,20815,20816,20818,20819,20823,20824,20825,20827,20829,20830,20831,20832,20833,20835,20836,20838,20839,20841,20842,20847,20850,20858,20862,20863,20867,20868,20870,20871,20874,20875,20878,20879,20880,20881,20883,20884,20888,20890,20893,20894,20895,20897,20899,20902,20903,20904,20905,20906,20909,20910,20916,20920,20921,20922,20926,20927,20929,20930,20931,20933,20936,20938,20941,20942,20944,20946,20947,20948,20949,20950,20951,20952,20953,20954,20956,20958,20959,20962,20963,20965,20966,20967,20968,20969,20970,20972,20974,20977,20978,20980,20983,20990,20996,20997,21001,21003,21004,21007,21008,21011,21012,21013,21020,21022,21023,21025,21026,21027,21029,21030,21031,21034,21036,21039,21041,21042,21044,21045,21052,21054,21060,21061,21062,21063,21064,21065,21067,21070,21071,21074,21075,21077,21079,21080,21081,21082,21083,21085,21087,21088,21090,21091,21092,21094,21096,21099,21100,21101,21102,21104,21105,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21118,21120,21123,21124,21125,21126,21127,21129,21130,21131,21132,21133,21134,21135,21137,21138,21140,21141,21142,21143,21144,21145,21146,21148,21156,21157,21158,21159,21166,21167,21168,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21184,21185,21186,21188,21189,21190,21192,21194,21196,21197,21198,21199,21201,21203,21204,21205,21207,21209,21210,21211,21212,21213,21214,21216,21217,21218,21219,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21233,21234,21235,21236,21237,21238,21239,21240,21243,21244,21245,21249,21250,21251,21252,21255,21257,21258,21259,21260,21262,21265,21266,21267,21268,21272,21275,21276,21278,21279,21282,21284,21285,21287,21288,21289,21291,21292,21293,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21308,21309,21312,21314,21316,21318,21323,21324,21325,21328,21332,21336,21337,21339,21341,21349,21352,21354,21356,21357,21362,21366,21369,21371,21372,21373,21374,21376,21377,21379,21383,21384,21386,21390,21391,21392,21393,21394,21395,21396,21398,21399,21401,21403,21404,21406,21408,21409,21412,21415,21418,21419,21420,21421,21423,21424,21425,21426,21427,21428,21429,21431,21432,21433,21434,21436,21437,21438,21440,21443,21444,21445,21446,21447,21454,21455,21456,21458,21459,21461,21466,21468,21469,21470,21473,21474,21479,21492,21498,21502,21503,21504,21506,21509,21511,21515,21524,21528,21529,21530,21532,21538,21540,21541,21546,21552,21555,21558,21559,21562,21565,21567,21569,21570,21572,21573,21575,21577,21580,21581,21582,21583,21585,21594,21597,21598,21599,21600,21601,21603,21605,21607,21609,21610,21611,21612,21613,21614,21615,21616,21620,21625,21626,21630,21631,21633,21635,21637,21639,21640,21641,21642,21645,21649,21651,21655,21656,21660,21662,21663,21664,21665,21666,21669,21678,21680,21682,21685,21686,21687,21689,21690,21692,21694,21699,21701,21706,21707,21718,21720,21723,21728,21729,21730,21731,21732,21739,21740,21743,21744,21745,21748,21749,21750,21751,21752,21753,21755,21758,21760,21762,21763,21764,21765,21768,21770,21771,21772,21773,21774,21778,21779,21781,21782,21783,21784,21785,21786,21788,21789,21790,21791,21793,21797,21798,21800,21801,21803,21805,21810,21812,21813,21814,21816,21817,21818,21819,21821,21824,21826,21829,21831,21832,21835,21836,21837,21838,21839,21841,21842,21843,21844,21847,21848,21849,21850,21851,21853,21854,21855,21856,21858,21859,21864,21865,21867,21871,21872,21873,21874,21875,21876,21881,21882,21885,21887,21893,21894,21900,21901,21902,21904,21906,21907,21909,21910,21911,21914,21915,21918,21920,21921,21922,21923,21924,21925,21926,21928,21929,21930,21931,21932,21933,21934,21935,21936,21938,21940,21942,21944,21946,21948,21951,21952,21953,21954,21955,21958,21959,21960,21962,21963,21966,21967,21968,21973,21975,21976,21977,21978,21979,21982,21984,21986,21991,21993,21997,21998,22000,22001,22004,22006,22008,22009,22010,22011,22012,22015,22018,22019,22020,22021,22022,22023,22026,22027,22029,22032,22033,22034,22035,22036,22037,22038,22039,22041,22042,22044,22045,22048,22049,22050,22053,22054,22056,22057,22058,22059,22062,22063,22064,22067,22069,22071,22072,22074,22076,22077,22078,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22095,22096,22097,22098,22099,22101,22102,22106,22107,22109,22110,22111,22112,22113,22115,22117,22118,22119,22125,22126,22127,22128,22130,22131,22132,22133,22135,22136,22137,22138,22141,22142,22143,22144,22145,22146,22147,22148,22151,22152,22153,22154,22155,22156,22157,22160,22161,22162,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22192,22193,22194,22195,22196,22197,22198,22200,22201,22202,22203,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22219,22220,22221,22222,22223,22224,22225,22226,22227,22229,22230,22232,22233,22236,22243,22245,22246,22247,22248,22249,22250,22252,22254,22255,22258,22259,22262,22263,22264,22267,22268,22272,22273,22274,22277,22279,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22301,22302,22304,22305,22306,22308,22309,22310,22311,22315,22321,22322,22324,22325,22326,22327,22328,22332,22333,22335,22337,22339,22340,22341,22342,22344,22345,22347,22354,22355,22356,22357,22358,22360,22361,22370,22371,22373,22375,22380,22382,22384,22385,22386,22388,22389,22392,22393,22394,22397,22398,22399,22400,22401,22407,22408,22409,22410,22413,22414,22415,22416,22417,22420,22421,22422,22423,22424,22425,22426,22428,22429,22430,22431,22437,22440,22442,22444,22447,22448,22449,22451,22453,22454,22455,22457,22458,22459,22460,22461,22462,22463,22464,22465,22468,22469,22470,22471,22472,22473,22474,22476,22477,22480,22481,22483,22486,22487,22491,22492,22494,22497,22498,22499,22501,22502,22503,22504,22505,22506,22507,22508,22510,22512,22513,22514,22515,22517,22518,22519,22523,22524,22526,22527,22529,22531,22532,22533,22536,22537,22538,22540,22542,22543,22544,22546,22547,22548,22550,22551,22552,22554,22555,22556,22557,22559,22562,22563,22565,22566,22567,22568,22569,22571,22572,22573,22574,22575,22577,22578,22579,22580,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22597,22598,22599,22600,22601,22602,22603,22606,22607,22608,22610,22611,22613,22614,22615,22617,22618,22619,22620,22621,22623,22624,22625,22626,22627,22628,22630,22631,22632,22633,22634,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22655,22658,22660,22662,22663,22664,22666,22667,22668,22669,22670,22671,22672,22673,22676,22677,22678,22679,22680,22683,22684,22685,22688,22689,22690,22691,22692,22693,22694,22695,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22717,22718,22719,22720,22722,22723,22724,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22738,22739,22740,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22757,22758,22759,22760,22761,22762,22765,22767,22769,22770,22772,22773,22775,22776,22778,22779,22780,22781,22782,22783,22784,22785,22787,22789,22790,22792,22793,22794,22795,22796,22798,22800,22801,22802,22803,22807,22808,22811,22813,22814,22816,22817,22818,22819,22822,22824,22828,22832,22834,22835,22837,22838,22843,22845,22846,22847,22848,22851,22853,22854,22858,22860,22861,22864,22866,22867,22873,22875,22876,22877,22878,22879,22881,22883,22884,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22901,22903,22906,22907,22908,22910,22911,22912,22917,22921,22923,22924,22926,22927,22928,22929,22932,22933,22936,22938,22939,22940,22941,22943,22944,22945,22946,22950,22951,22956,22957,22960,22961,22963,22964,22965,22966,22967,22968,22970,22972,22973,22975,22976,22977,22978,22979,22980,22981,22983,22984,22985,22988,22989,22990,22991,22997,22998,23001,23003,23006,23007,23008,23009,23010,23012,23014,23015,23017,23018,23019,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23034,23036,23037,23038,23040,23042,23050,23051,23053,23054,23055,23056,23058,23060,23061,23062,23063,23065,23066,23067,23069,23070,23073,23074,23076,23078,23079,23080,23082,23083,23084,23085,23086,23087,23088,23091,23093,23095,23096,23097,23098,23099,23101,23102,23103,23105,23106,23107,23108,23109,23111,23112,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23126,23127,23128,23129,23131,23132,23133,23134,23135,23136,23137,23139,23140,23141,23142,23144,23145,23147,23148,23149,23150,23151,23152,23153,23154,23155,23160,23161,23163,23164,23165,23166,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23187,23188,23189,23190,23191,23192,23193,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23211,23212,23213,23214,23215,23216,23217,23220,23222,23223,23225,23226,23227,23228,23229,23231,23232,23235,23236,23237,23238,23239,23240,23242,23243,23245,23246,23247,23248,23249,23251,23253,23255,23257,23258,23259,23261,23262,23263,23266,23268,23269,23271,23272,23274,23276,23277,23278,23279,23280,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23347,23349,23350,23352,23353,23354,23355,23356,23357,23358,23359,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23378,23382,23390,23392,23393,23399,23400,23403,23405,23406,23407,23410,23412,23414,23415,23416,23417,23419,23420,23422,23423,23426,23430,23434,23437,23438,23440,23441,23442,23444,23446,23455,23463,23464,23465,23468,23469,23470,23471,23473,23474,23479,23482,23483,23484,23488,23489,23491,23496,23497,23498,23499,23501,23502,23503,23505,23508,23509,23510,23511,23512,23513,23514,23515,23516,23520,23522,23523,23526,23527,23529,23530,23531,23532,23533,23535,23537,23538,23539,23540,23541,23542,23543,23549,23550,23552,23554,23555,23557,23559,23560,23563,23564,23565,23566,23568,23570,23571,23575,23577,23579,23582,23583,23584,23585,23587,23590,23592,23593,23594,23595,23597,23598,23599,23600,23602,23603,23605,23606,23607,23619,23620,23622,23623,23628,23629,23634,23635,23636,23638,23639,23640,23642,23643,23644,23645,23647,23650,23652,23655,23656,23657,23658,23659,23660,23661,23664,23666,23667,23668,23669,23670,23671,23672,23675,23676,23677,23678,23680,23683,23684,23685,23686,23687,23689,23690,23691,23694,23695,23698,23699,23701,23709,23710,23711,23712,23713,23716,23717,23718,23719,23720,23722,23726,23727,23728,23730,23732,23734,23737,23738,23739,23740,23742,23744,23746,23747,23749,23750,23751,23752,23753,23754,23756,23757,23758,23759,23760,23761,23763,23764,23765,23766,23767,23768,23770,23771,23772,23773,23774,23775,23776,23778,23779,23783,23785,23787,23788,23790,23791,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23804,23805,23806,23807,23808,23809,23812,23813,23816,23817,23818,23819,23820,23821,23823,23824,23825,23826,23827,23829,23831,23832,23833,23834,23836,23837,23839,23840,23841,23842,23843,23845,23848,23850,23851,23852,23855,23856,23857,23858,23859,23861,23862,23863,23864,23865,23866,23867,23868,23871,23872,23873,23874,23875,23876,23877,23878,23880,23881,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23897,23898,23900,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23914,23917,23918,23920,23921,23922,23923,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23962,23963,23964,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,23999,24000,24001,24002,24003,24004,24006,24007,24008,24009,24010,24011,24012,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24028,24031,24032,24035,24036,24042,24044,24045,24048,24053,24054,24056,24057,24058,24059,24060,24063,24064,24068,24071,24073,24074,24075,24077,24078,24082,24083,24087,24094,24095,24096,24097,24098,24099,24100,24101,24104,24105,24106,24107,24108,24111,24112,24114,24115,24116,24117,24118,24121,24122,24126,24127,24128,24129,24131,24134,24135,24136,24137,24138,24139,24141,24142,24143,24144,24145,24146,24147,24150,24151,24152,24153,24154,24156,24157,24159,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24181,24183,24185,24190,24193,24194,24195,24197,24200,24201,24204,24205,24206,24210,24216,24219,24221,24225,24226,24227,24228,24232,24233,24234,24235,24236,24238,24239,24240,24241,24242,24244,24250,24251,24252,24253,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24267,24268,24269,24270,24271,24272,24276,24277,24279,24280,24281,24282,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24297,24299,24300,24301,24302,24303,24304,24305,24306,24307,24309,24312,24313,24315,24316,24317,24325,24326,24327,24329,24332,24333,24334,24336,24338,24340,24342,24345,24346,24348,24349,24350,24353,24354,24355,24356,24360,24363,24364,24366,24368,24370,24371,24372,24373,24374,24375,24376,24379,24381,24382,24383,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24401,24404,24409,24410,24411,24412,24414,24415,24416,24419,24421,24423,24424,24427,24430,24431,24434,24436,24437,24438,24440,24442,24445,24446,24447,24451,24454,24461,24462,24463,24465,24467,24468,24470,24474,24475,24477,24478,24479,24480,24482,24483,24484,24485,24486,24487,24489,24491,24492,24495,24496,24497,24498,24499,24500,24502,24504,24505,24506,24507,24510,24511,24512,24513,24514,24519,24520,24522,24523,24526,24531,24532,24533,24538,24539,24540,24542,24543,24546,24547,24549,24550,24552,24553,24556,24559,24560,24562,24563,24564,24566,24567,24569,24570,24572,24583,24584,24585,24587,24588,24592,24593,24595,24599,24600,24602,24606,24607,24610,24611,24612,24620,24621,24622,24624,24625,24626,24627,24628,24630,24631,24632,24633,24634,24637,24638,24640,24644,24645,24646,24647,24648,24649,24650,24652,24654,24655,24657,24659,24660,24662,24663,24664,24667,24668,24670,24671,24672,24673,24677,24678,24686,24689,24690,24692,24693,24695,24702,24704,24705,24706,24709,24710,24711,24712,24714,24715,24718,24719,24720,24721,24723,24725,24727,24728,24729,24732,24734,24737,24738,24740,24741,24743,24745,24746,24750,24752,24755,24757,24758,24759,24761,24762,24765,24766,24767,24768,24769,24770,24771,24772,24775,24776,24777,24780,24781,24782,24783,24784,24786,24787,24788,24790,24791,24793,24795,24798,24801,24802,24803,24804,24805,24810,24817,24818,24821,24823,24824,24827,24828,24829,24830,24831,24834,24835,24836,24837,24839,24842,24843,24844,24848,24849,24850,24851,24852,24854,24855,24856,24857,24859,24860,24861,24862,24865,24866,24869,24872,24873,24874,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901,24902,24903,24905,24907,24909,24911,24912,24914,24915,24916,24918,24919,24920,24921,24922,24923,24924,24926,24927,24928,24929,24931,24932,24933,24934,24937,24938,24939,24940,24941,24942,24943,24945,24946,24947,24948,24950,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24972,24973,24975,24976,24977,24978,24979,24981,24982,24983,24984,24985,24986,24987,24988,24990,24991,24992,24993,24994,24995,24996,24997,24998,25002,25003,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25016,25017,25018,25019,25020,25021,25023,25024,25025,25027,25028,25029,25030,25031,25033,25036,25037,25038,25039,25040,25043,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25078,25079,25080,25081,25082,25083,25084,25085,25086,25088,25089,25090,25091,25092,25093,25095,25097,25107,25108,25113,25116,25117,25118,25120,25123,25126,25127,25128,25129,25131,25133,25135,25136,25137,25138,25141,25142,25144,25145,25146,25147,25148,25154,25156,25157,25158,25162,25167,25168,25173,25174,25175,25177,25178,25180,25181,25182,25183,25184,25185,25186,25188,25189,25192,25201,25202,25204,25205,25207,25208,25210,25211,25213,25217,25218,25219,25221,25222,25223,25224,25227,25228,25229,25230,25231,25232,25236,25241,25244,25245,25246,25251,25254,25255,25257,25258,25261,25262,25263,25264,25266,25267,25268,25270,25271,25272,25274,25278,25280,25281,25283,25291,25295,25297,25301,25309,25310,25312,25313,25316,25322,25323,25328,25330,25333,25336,25337,25338,25339,25344,25347,25348,25349,25350,25354,25355,25356,25357,25359,25360,25362,25363,25364,25365,25367,25368,25369,25372,25382,25383,25385,25388,25389,25390,25392,25393,25395,25396,25397,25398,25399,25400,25403,25404,25406,25407,25408,25409,25412,25415,25416,25418,25425,25426,25427,25428,25430,25431,25432,25433,25434,25435,25436,25437,25440,25444,25445,25446,25448,25450,25451,25452,25455,25456,25458,25459,25460,25461,25464,25465,25468,25469,25470,25471,25473,25475,25476,25477,25478,25483,25485,25489,25491,25492,25493,25495,25497,25498,25499,25500,25501,25502,25503,25505,25508,25510,25515,25519,25521,25522,25525,25526,25529,25531,25533,25535,25536,25537,25538,25539,25541,25543,25544,25546,25547,25548,25553,25555,25556,25557,25559,25560,25561,25562,25563,25564,25565,25567,25570,25572,25573,25574,25575,25576,25579,25580,25582,25583,25584,25585,25587,25589,25591,25593,25594,25595,25596,25598,25603,25604,25606,25607,25608,25609,25610,25613,25614,25617,25618,25621,25622,25623,25624,25625,25626,25629,25631,25634,25635,25636,25637,25639,25640,25641,25643,25646,25647,25648,25649,25650,25651,25653,25654,25655,25656,25657,25659,25660,25662,25664,25666,25667,25673,25675,25676,25677,25678,25679,25680,25681,25683,25685,25686,25687,25689,25690,25691,25692,25693,25695,25696,25697,25698,25699,25700,25701,25702,25704,25706,25707,25708,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25723,25724,25725,25726,25727,25728,25729,25731,25734,25736,25737,25738,25739,25740,25741,25742,25743,25744,25747,25748,25751,25752,25754,25755,25756,25757,25759,25760,25761,25762,25763,25765,25766,25767,25768,25770,25771,25775,25777,25778,25779,25780,25782,25785,25787,25789,25790,25791,25793,25795,25796,25798,25799,25800,25801,25802,25803,25804,25807,25809,25811,25812,25813,25814,25817,25818,25819,25820,25821,25823,25824,25825,25827,25829,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25857,25858,25859,25860,25861,25862,25863,25864,25866,25867,25868,25869,25870,25871,25872,25873,25875,25876,25877,25878,25879,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25894,25895,25896,25897,25898,25900,25901,25904,25905,25906,25907,25911,25914,25916,25917,25920,25921,25922,25923,25924,25926,25927,25930,25931,25933,25934,25936,25938,25939,25940,25943,25944,25946,25948,25951,25952,25953,25956,25957,25959,25960,25961,25962,25965,25966,25967,25969,25971,25973,25974,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25992,25993,25994,25997,25998,25999,26002,26004,26005,26006,26008,26010,26013,26014,26016,26018,26019,26022,26024,26026,26028,26030,26033,26034,26035,26036,26037,26038,26039,26040,26042,26043,26046,26047,26048,26050,26055,26056,26057,26058,26061,26064,26065,26067,26068,26069,26072,26073,26074,26075,26076,26077,26078,26079,26081,26083,26084,26090,26091,26098,26099,26100,26101,26104,26105,26107,26108,26109,26110,26111,26113,26116,26117,26119,26120,26121,26123,26125,26128,26129,26130,26134,26135,26136,26138,26139,26140,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26162,26163,26167,26168,26169,26170,26171,26173,26175,26176,26178,26180,26181,26182,26183,26184,26185,26186,26189,26190,26192,26193,26200,26201,26203,26204,26205,26206,26208,26210,26211,26213,26215,26217,26218,26219,26220,26221,26225,26226,26227,26229,26232,26233,26235,26236,26237,26239,26240,26241,26243,26245,26246,26248,26249,26250,26251,26253,26254,26255,26256,26258,26259,26260,26261,26264,26265,26266,26267,26268,26270,26271,26272,26273,26274,26275,26276,26277,26278,26281,26282,26283,26284,26285,26287,26288,26289,26290,26291,26293,26294,26295,26296,26298,26299,26300,26301,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26330,26334,26335,26336,26337,26338,26339,26340,26341,26343,26344,26346,26347,26348,26349,26350,26351,26353,26357,26358,26360,26362,26363,26365,26369,26370,26371,26372,26373,26374,26375,26380,26382,26383,26385,26386,26387,26390,26392,26393,26394,26396,26398,26400,26401,26402,26403,26404,26405,26407,26409,26414,26416,26418,26419,26422,26423,26424,26425,26427,26428,26430,26431,26433,26436,26437,26439,26442,26443,26445,26450,26452,26453,26455,26456,26457,26458,26459,26461,26466,26467,26468,26470,26471,26475,26476,26478,26481,26484,26486,26488,26489,26490,26491,26493,26496,26498,26499,26501,26502,26504,26506,26508,26509,26510,26511,26513,26514,26515,26516,26518,26521,26523,26527,26528,26529,26532,26534,26537,26540,26542,26545,26546,26548,26553,26554,26555,26556,26557,26558,26559,26560,26562,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26581,26582,26583,26587,26591,26593,26595,26596,26598,26599,26600,26602,26603,26605,26606,26610,26613,26614,26615,26616,26617,26618,26619,26620,26622,26625,26626,26627,26628,26630,26637,26640,26642,26644,26645,26648,26649,26650,26651,26652,26654,26655,26656,26658,26659,26660,26661,26662,26663,26664,26667,26668,26669,26670,26671,26672,26673,26676,26677,26678,26682,26683,26687,26695,26699,26701,26703,26706,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26730,26732,26733,26734,26735,26736,26737,26738,26739,26741,26744,26745,26746,26747,26748,26749,26750,26751,26752,26754,26756,26759,26760,26761,26762,26763,26764,26765,26766,26768,26769,26770,26772,26773,26774,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26787,26788,26789,26793,26794,26795,26796,26798,26801,26802,26804,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26817,26819,26820,26821,26822,26823,26824,26826,26828,26830,26831,26832,26833,26835,26836,26838,26839,26841,26843,26844,26845,26846,26847,26849,26850,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26863,26866,26867,26868,26870,26871,26872,26875,26877,26878,26879,26880,26882,26883,26884,26886,26887,26888,26889,26890,26892,26895,26897,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26913,26914,26915,26917,26918,26919,26920,26921,26922,26923,26924,26926,26927,26929,26930,26931,26933,26934,26935,26936,26938,26939,26940,26942,26944,26945,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26965,26966,26968,26969,26971,26972,26975,26977,26978,26980,26981,26983,26984,26985,26986,26988,26989,26991,26992,26994,26995,26996,26997,26998,27002,27003,27005,27006,27007,27009,27011,27013,27018,27019,27020,27022,27023,27024,27025,27026,27027,27030,27031,27033,27034,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27049,27050,27052,27054,27055,27056,27058,27059,27061,27062,27064,27065,27066,27068,27069,27070,27071,27072,27074,27075,27076,27077,27078,27079,27080,27081,27083,27085,27087,27089,27090,27091,27093,27094,27095,27096,27097,27098,27100,27101,27102,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27118,27119,27120,27121,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27134,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27161,27162,27163,27164,27165,27166,27168,27170,27171,27172,27173,27174,27175,27177,27179,27180,27181,27182,27184,27186,27187,27188,27190,27191,27192,27193,27194,27195,27196,27199,27200,27201,27202,27203,27205,27206,27208,27209,27210,27211,27212,27213,27214,27215,27217,27218,27219,27220,27221,27222,27223,27226,27228,27229,27230,27231,27232,27234,27235,27236,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27250,27251,27252,27253,27254,27255,27256,27258,27259,27261,27262,27263,27265,27266,27267,27269,27270,27271,27272,27273,27274,27275,27276,27277,27279,27282,27283,27284,27285,27286,27288,27289,27290,27291,27292,27293,27294,27295,27297,27298,27299,27300,27301,27302,27303,27304,27306,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27429,27430,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27443,27444,27445,27446,27448,27451,27452,27453,27455,27456,27457,27458,27460,27461,27464,27466,27467,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27482,27483,27484,27485,27486,27487,27488,27489,27496,27497,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27514,27517,27518,27519,27520,27525,27528,27532,27534,27535,27536,27537,27540,27541,27543,27544,27545,27548,27549,27550,27551,27552,27554,27555,27556,27557,27558,27559,27560,27561,27563,27564,27565,27566,27567,27568,27569,27570,27574,27576,27577,27578,27579,27580,27581,27582,27584,27587,27588,27590,27591,27592,27593,27594,27596,27598,27600,27601,27608,27610,27612,27613,27614,27615,27616,27618,27619,27620,27621,27622,27623,27624,27625,27628,27629,27630,27632,27633,27634,27636,27638,27639,27640,27642,27643,27644,27646,27647,27648,27649,27650,27651,27652,27656,27657,27658,27659,27660,27662,27666,27671,27676,27677,27678,27680,27683,27685,27691,27692,27693,27697,27699,27702,27703,27705,27706,27707,27708,27710,27711,27715,27716,27717,27720,27723,27724,27725,27726,27727,27729,27730,27731,27734,27736,27737,27738,27746,27747,27749,27750,27751,27755,27756,27757,27758,27759,27761,27763,27765,27767,27768,27770,27771,27772,27775,27776,27780,27783,27786,27787,27789,27790,27793,27794,27797,27798,27799,27800,27802,27804,27805,27806,27808,27810,27816,27820,27823,27824,27828,27829,27830,27831,27834,27840,27841,27842,27843,27846,27847,27848,27851,27853,27854,27855,27857,27858,27864,27865,27866,27868,27869,27871,27876,27878,27879,27881,27884,27885,27890,27892,27897,27903,27904,27906,27907,27909,27910,27912,27913,27914,27917,27919,27920,27921,27923,27924,27925,27926,27928,27932,27933,27935,27936,27937,27938,27939,27940,27942,27944,27945,27948,27949,27951,27952,27956,27958,27959,27960,27962,27967,27968,27970,27972,27977,27980,27984,27989,27990,27991,27992,27995,27997,27999,28001,28002,28004,28005,28007,28008,28011,28012,28013,28016,28017,28018,28019,28021,28022,28025,28026,28027,28029,28030,28031,28032,28033,28035,28036,28038,28039,28042,28043,28045,28047,28048,28050,28054,28055,28056,28057,28058,28060,28066,28069,28076,28077,28080,28081,28083,28084,28086,28087,28089,28090,28091,28092,28093,28094,28097,28098,28099,28104,28105,28106,28109,28110,28111,28112,28114,28115,28116,28117,28119,28122,28123,28124,28127,28130,28131,28133,28135,28136,28137,28138,28141,28143,28144,28146,28148,28149,28150,28152,28154,28157,28158,28159,28160,28161,28162,28163,28164,28166,28167,28168,28169,28171,28175,28178,28179,28181,28184,28185,28187,28188,28190,28191,28194,28198,28199,28200,28202,28204,28206,28208,28209,28211,28213,28214,28215,28217,28219,28220,28221,28222,28223,28224,28225,28226,28229,28230,28231,28232,28233,28234,28235,28236,28239,28240,28241,28242,28245,28247,28249,28250,28252,28253,28254,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28268,28269,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28288,28289,28290,28292,28295,28296,28298,28299,28300,28301,28302,28305,28306,28307,28308,28309,28310,28311,28313,28314,28315,28317,28318,28320,28321,28323,28324,28326,28328,28329,28331,28332,28333,28334,28336,28339,28341,28344,28345,28348,28350,28351,28352,28355,28356,28357,28358,28360,28361,28362,28364,28365,28366,28368,28370,28374,28376,28377,28379,28380,28381,28387,28391,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28405,28406,28407,28408,28410,28411,28412,28413,28414,28415,28416,28417,28419,28420,28421,28423,28424,28426,28427,28428,28429,28430,28432,28433,28434,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28449,28450,28451,28453,28454,28455,28456,28460,28462,28464,28466,28468,28469,28471,28472,28473,28474,28475,28476,28477,28479,28480,28481,28482,28483,28484,28485,28488,28489,28490,28492,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28505,28506,28507,28509,28511,28512,28513,28515,28516,28517,28519,28520,28521,28522,28523,28524,28527,28528,28529,28531,28533,28534,28535,28537,28539,28541,28542,28543,28544,28545,28546,28547,28549,28550,28551,28554,28555,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28573,28574,28575,28576,28578,28579,28580,28581,28582,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28596,28597,28599,28600,28602,28603,28604,28605,28606,28607,28609,28611,28612,28613,28614,28615,28616,28618,28619,28620,28621,28622,28623,28624,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28639,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28690,28691,28692,28693,28694,28695,28696,28697,28700,28701,28702,28703,28704,28705,28706,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28726,28727,28728,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28749,28750,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28782,28785,28786,28787,28788,28791,28793,28794,28795,28797,28801,28802,28803,28804,28806,28807,28808,28811,28812,28813,28815,28816,28817,28819,28823,28824,28826,28827,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28848,28850,28852,28853,28854,28858,28862,28863,28868,28869,28870,28871,28873,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28890,28892,28893,28894,28896,28897,28898,28899,28901,28906,28910,28912,28913,28914,28915,28916,28917,28918,28920,28922,28923,28924,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28939,28940,28941,28942,28943,28945,28946,28948,28951,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28967,28968,28969,28970,28971,28972,28973,28974,28978,28979,28980,28981,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28998,28999,29000,29001,29003,29005,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29021,29023,29024,29025,29026,29027,29029,29033,29034,29035,29036,29037,29039,29040,29041,29044,29045,29046,29047,29049,29051,29052,29054,29055,29056,29057,29058,29059,29061,29062,29063,29064,29065,29067,29068,29069,29070,29072,29073,29074,29075,29077,29078,29079,29082,29083,29084,29085,29086,29089,29090,29091,29092,29093,29094,29095,29097,29098,29099,29101,29102,29103,29104,29105,29106,29108,29110,29111,29112,29114,29115,29116,29117,29118,29119,29120,29121,29122,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29135,29136,29137,29138,29139,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29153,29154,29155,29156,29158,29160,29161,29162,29163,29164,29165,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29178,29179,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29225,29227,29229,29230,29231,29234,29235,29236,29242,29244,29246,29248,29249,29250,29251,29252,29253,29254,29257,29258,29259,29262,29263,29264,29265,29267,29268,29269,29271,29272,29274,29276,29278,29280,29283,29284,29285,29288,29290,29291,29292,29293,29296,29297,29299,29300,29302,29303,29304,29307,29308,29309,29314,29315,29317,29318,29319,29320,29321,29324,29326,29328,29329,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29358,29361,29362,29363,29365,29370,29371,29372,29373,29374,29375,29376,29381,29382,29383,29385,29386,29387,29388,29391,29393,29395,29396,29397,29398,29400,29402,29403,58566,58567,58568,58569,58570,58571,58572,58573,58574,58575,58576,58577,58578,58579,58580,58581,58582,58583,58584,58585,58586,58587,58588,58589,58590,58591,58592,58593,58594,58595,58596,58597,58598,58599,58600,58601,58602,58603,58604,58605,58606,58607,58608,58609,58610,58611,58612,58613,58614,58615,58616,58617,58618,58619,58620,58621,58622,58623,58624,58625,58626,58627,58628,58629,58630,58631,58632,58633,58634,58635,58636,58637,58638,58639,58640,58641,58642,58643,58644,58645,58646,58647,58648,58649,58650,58651,58652,58653,58654,58655,58656,58657,58658,58659,58660,58661,12288,12289,12290,183,713,711,168,12291,12293,8212,65374,8214,8230,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12310,12311,12304,12305,177,215,247,8758,8743,8744,8721,8719,8746,8745,8712,8759,8730,8869,8741,8736,8978,8857,8747,8750,8801,8780,8776,8765,8733,8800,8814,8815,8804,8805,8734,8757,8756,9794,9792,176,8242,8243,8451,65284,164,65504,65505,8240,167,8470,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,8251,8594,8592,8593,8595,12307,58662,58663,58664,58665,58666,58667,58668,58669,58670,58671,58672,58673,58674,58675,58676,58677,58678,58679,58680,58681,58682,58683,58684,58685,58686,58687,58688,58689,58690,58691,58692,58693,58694,58695,58696,58697,58698,58699,58700,58701,58702,58703,58704,58705,58706,58707,58708,58709,58710,58711,58712,58713,58714,58715,58716,58717,58718,58719,58720,58721,58722,58723,58724,58725,58726,58727,58728,58729,58730,58731,58732,58733,58734,58735,58736,58737,58738,58739,58740,58741,58742,58743,58744,58745,58746,58747,58748,58749,58750,58751,58752,58753,58754,58755,58756,58757,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,59238,59239,59240,59241,59242,59243,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,8364,59245,12832,12833,12834,12835,12836,12837,12838,12839,12840,12841,59246,59247,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,59248,59249,58758,58759,58760,58761,58762,58763,58764,58765,58766,58767,58768,58769,58770,58771,58772,58773,58774,58775,58776,58777,58778,58779,58780,58781,58782,58783,58784,58785,58786,58787,58788,58789,58790,58791,58792,58793,58794,58795,58796,58797,58798,58799,58800,58801,58802,58803,58804,58805,58806,58807,58808,58809,58810,58811,58812,58813,58814,58815,58816,58817,58818,58819,58820,58821,58822,58823,58824,58825,58826,58827,58828,58829,58830,58831,58832,58833,58834,58835,58836,58837,58838,58839,58840,58841,58842,58843,58844,58845,58846,58847,58848,58849,58850,58851,58852,12288,65281,65282,65283,65509,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,58854,58855,58856,58857,58858,58859,58860,58861,58862,58863,58864,58865,58866,58867,58868,58869,58870,58871,58872,58873,58874,58875,58876,58877,58878,58879,58880,58881,58882,58883,58884,58885,58886,58887,58888,58889,58890,58891,58892,58893,58894,58895,58896,58897,58898,58899,58900,58901,58902,58903,58904,58905,58906,58907,58908,58909,58910,58911,58912,58913,58914,58915,58916,58917,58918,58919,58920,58921,58922,58923,58924,58925,58926,58927,58928,58929,58930,58931,58932,58933,58934,58935,58936,58937,58938,58939,58940,58941,58942,58943,58944,58945,58946,58947,58948,58949,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,59250,59251,59252,59253,59254,59255,59256,59257,59258,59259,59260,58950,58951,58952,58953,58954,58955,58956,58957,58958,58959,58960,58961,58962,58963,58964,58965,58966,58967,58968,58969,58970,58971,58972,58973,58974,58975,58976,58977,58978,58979,58980,58981,58982,58983,58984,58985,58986,58987,58988,58989,58990,58991,58992,58993,58994,58995,58996,58997,58998,58999,59000,59001,59002,59003,59004,59005,59006,59007,59008,59009,59010,59011,59012,59013,59014,59015,59016,59017,59018,59019,59020,59021,59022,59023,59024,59025,59026,59027,59028,59029,59030,59031,59032,59033,59034,59035,59036,59037,59038,59039,59040,59041,59042,59043,59044,59045,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,59261,59262,59263,59264,59265,59266,59267,59268,59046,59047,59048,59049,59050,59051,59052,59053,59054,59055,59056,59057,59058,59059,59060,59061,59062,59063,59064,59065,59066,59067,59068,59069,59070,59071,59072,59073,59074,59075,59076,59077,59078,59079,59080,59081,59082,59083,59084,59085,59086,59087,59088,59089,59090,59091,59092,59093,59094,59095,59096,59097,59098,59099,59100,59101,59102,59103,59104,59105,59106,59107,59108,59109,59110,59111,59112,59113,59114,59115,59116,59117,59118,59119,59120,59121,59122,59123,59124,59125,59126,59127,59128,59129,59130,59131,59132,59133,59134,59135,59136,59137,59138,59139,59140,59141,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,59269,59270,59271,59272,59273,59274,59275,59276,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,59277,59278,59279,59280,59281,59282,59283,65077,65078,65081,65082,65087,65088,65085,65086,65089,65090,65091,65092,59284,59285,65083,65084,65079,65080,65073,59286,65075,65076,59287,59288,59289,59290,59291,59292,59293,59294,59295,59142,59143,59144,59145,59146,59147,59148,59149,59150,59151,59152,59153,59154,59155,59156,59157,59158,59159,59160,59161,59162,59163,59164,59165,59166,59167,59168,59169,59170,59171,59172,59173,59174,59175,59176,59177,59178,59179,59180,59181,59182,59183,59184,59185,59186,59187,59188,59189,59190,59191,59192,59193,59194,59195,59196,59197,59198,59199,59200,59201,59202,59203,59204,59205,59206,59207,59208,59209,59210,59211,59212,59213,59214,59215,59216,59217,59218,59219,59220,59221,59222,59223,59224,59225,59226,59227,59228,59229,59230,59231,59232,59233,59234,59235,59236,59237,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,59296,59297,59298,59299,59300,59301,59302,59303,59304,59305,59306,59307,59308,59309,59310,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,59311,59312,59313,59314,59315,59316,59317,59318,59319,59320,59321,59322,59323,714,715,729,8211,8213,8229,8245,8453,8457,8598,8599,8600,8601,8725,8735,8739,8786,8806,8807,8895,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9619,9620,9621,9660,9661,9698,9699,9700,9701,9737,8853,12306,12317,12318,59324,59325,59326,59327,59328,59329,59330,59331,59332,59333,59334,257,225,462,224,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,234,593,7743,324,328,505,609,59337,59338,59339,59340,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,59341,59342,59343,59344,59345,59346,59347,59348,59349,59350,59351,59352,59353,59354,59355,59356,59357,59358,59359,59360,59361,12321,12322,12323,12324,12325,12326,12327,12328,12329,12963,13198,13199,13212,13213,13214,13217,13252,13262,13265,13266,13269,65072,65506,65508,59362,8481,12849,59363,8208,59364,59365,59366,12540,12443,12444,12541,12542,12294,12445,12446,65097,65098,65099,65100,65101,65102,65103,65104,65105,65106,65108,65109,65110,65111,65113,65114,65115,65116,65117,65118,65119,65120,65121,65122,65123,65124,65125,65126,65128,65129,65130,65131,12350,12272,12273,12274,12275,12276,12277,12278,12279,12280,12281,12282,12283,12295,59380,59381,59382,59383,59384,59385,59386,59387,59388,59389,59390,59391,59392,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,59393,59394,59395,59396,59397,59398,59399,59400,59401,59402,59403,59404,59405,59406,59407,29404,29405,29407,29410,29411,29412,29413,29414,29415,29418,29419,29429,29430,29433,29437,29438,29439,29440,29442,29444,29445,29446,29447,29448,29449,29451,29452,29453,29455,29456,29457,29458,29460,29464,29465,29466,29471,29472,29475,29476,29478,29479,29480,29485,29487,29488,29490,29491,29493,29494,29498,29499,29500,29501,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29518,29519,29521,29523,29524,29525,29526,29528,29529,29530,29531,29532,29533,29534,29535,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29550,29552,29553,57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359,57360,57361,57362,57363,57364,57365,57366,57367,57368,57369,57370,57371,57372,57373,57374,57375,57376,57377,57378,57379,57380,57381,57382,57383,57384,57385,57386,57387,57388,57389,57390,57391,57392,57393,57394,57395,57396,57397,57398,57399,57400,57401,57402,57403,57404,57405,57406,57407,57408,57409,57410,57411,57412,57413,57414,57415,57416,57417,57418,57419,57420,57421,57422,57423,57424,57425,57426,57427,57428,57429,57430,57431,57432,57433,57434,57435,57436,57437,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29567,29568,29569,29570,29571,29573,29574,29576,29578,29580,29581,29583,29584,29586,29587,29588,29589,29591,29592,29593,29594,29596,29597,29598,29600,29601,29603,29604,29605,29606,29607,29608,29610,29612,29613,29617,29620,29621,29622,29624,29625,29628,29629,29630,29631,29633,29635,29636,29637,29638,29639,29643,29644,29646,29650,29651,29652,29653,29654,29655,29656,29658,29659,29660,29661,29663,29665,29666,29667,29668,29670,29672,29674,29675,29676,29678,29679,29680,29681,29683,29684,29685,29686,29687,57438,57439,57440,57441,57442,57443,57444,57445,57446,57447,57448,57449,57450,57451,57452,57453,57454,57455,57456,57457,57458,57459,57460,57461,57462,57463,57464,57465,57466,57467,57468,57469,57470,57471,57472,57473,57474,57475,57476,57477,57478,57479,57480,57481,57482,57483,57484,57485,57486,57487,57488,57489,57490,57491,57492,57493,57494,57495,57496,57497,57498,57499,57500,57501,57502,57503,57504,57505,57506,57507,57508,57509,57510,57511,57512,57513,57514,57515,57516,57517,57518,57519,57520,57521,57522,57523,57524,57525,57526,57527,57528,57529,57530,57531,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29700,29703,29704,29707,29708,29709,29710,29713,29714,29715,29716,29717,29718,29719,29720,29721,29724,29725,29726,29727,29728,29729,29731,29732,29735,29737,29739,29741,29743,29745,29746,29751,29752,29753,29754,29755,29757,29758,29759,29760,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29782,29784,29789,29792,29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29806,29807,29809,29810,29811,29812,29813,29816,29817,29818,57532,57533,57534,57535,57536,57537,57538,57539,57540,57541,57542,57543,57544,57545,57546,57547,57548,57549,57550,57551,57552,57553,57554,57555,57556,57557,57558,57559,57560,57561,57562,57563,57564,57565,57566,57567,57568,57569,57570,57571,57572,57573,57574,57575,57576,57577,57578,57579,57580,57581,57582,57583,57584,57585,57586,57587,57588,57589,57590,57591,57592,57593,57594,57595,57596,57597,57598,57599,57600,57601,57602,57603,57604,57605,57606,57607,57608,57609,57610,57611,57612,57613,57614,57615,57616,57617,57618,57619,57620,57621,57622,57623,57624,57625,29819,29820,29821,29823,29826,29828,29829,29830,29832,29833,29834,29836,29837,29839,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29853,29855,29856,29857,29858,29859,29860,29861,29862,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29907,29908,29909,29910,29911,29912,29913,29914,29915,29917,29919,29921,29925,29927,29928,29929,29930,29931,29932,29933,29936,29937,29938,57626,57627,57628,57629,57630,57631,57632,57633,57634,57635,57636,57637,57638,57639,57640,57641,57642,57643,57644,57645,57646,57647,57648,57649,57650,57651,57652,57653,57654,57655,57656,57657,57658,57659,57660,57661,57662,57663,57664,57665,57666,57667,57668,57669,57670,57671,57672,57673,57674,57675,57676,57677,57678,57679,57680,57681,57682,57683,57684,57685,57686,57687,57688,57689,57690,57691,57692,57693,57694,57695,57696,57697,57698,57699,57700,57701,57702,57703,57704,57705,57706,57707,57708,57709,57710,57711,57712,57713,57714,57715,57716,57717,57718,57719,29939,29941,29944,29945,29946,29947,29948,29949,29950,29952,29953,29954,29955,29957,29958,29959,29960,29961,29962,29963,29964,29966,29968,29970,29972,29973,29974,29975,29979,29981,29982,29984,29985,29986,29987,29988,29990,29991,29994,29998,30004,30006,30009,30012,30013,30015,30017,30018,30019,30020,30022,30023,30025,30026,30029,30032,30033,30034,30035,30037,30038,30039,30040,30045,30046,30047,30048,30049,30050,30051,30052,30055,30056,30057,30059,30060,30061,30062,30063,30064,30065,30067,30069,30070,30071,30074,30075,30076,30077,30078,30080,30081,30082,30084,30085,30087,57720,57721,57722,57723,57724,57725,57726,57727,57728,57729,57730,57731,57732,57733,57734,57735,57736,57737,57738,57739,57740,57741,57742,57743,57744,57745,57746,57747,57748,57749,57750,57751,57752,57753,57754,57755,57756,57757,57758,57759,57760,57761,57762,57763,57764,57765,57766,57767,57768,57769,57770,57771,57772,57773,57774,57775,57776,57777,57778,57779,57780,57781,57782,57783,57784,57785,57786,57787,57788,57789,57790,57791,57792,57793,57794,57795,57796,57797,57798,57799,57800,57801,57802,57803,57804,57805,57806,57807,57808,57809,57810,57811,57812,57813,30088,30089,30090,30092,30093,30094,30096,30099,30101,30104,30107,30108,30110,30114,30118,30119,30120,30121,30122,30125,30134,30135,30138,30139,30143,30144,30145,30150,30155,30156,30158,30159,30160,30161,30163,30167,30169,30170,30172,30173,30175,30176,30177,30181,30185,30188,30189,30190,30191,30194,30195,30197,30198,30199,30200,30202,30203,30205,30206,30210,30212,30214,30215,30216,30217,30219,30221,30222,30223,30225,30226,30227,30228,30230,30234,30236,30237,30238,30241,30243,30247,30248,30252,30254,30255,30257,30258,30262,30263,30265,30266,30267,30269,30273,30274,30276,57814,57815,57816,57817,57818,57819,57820,57821,57822,57823,57824,57825,57826,57827,57828,57829,57830,57831,57832,57833,57834,57835,57836,57837,57838,57839,57840,57841,57842,57843,57844,57845,57846,57847,57848,57849,57850,57851,57852,57853,57854,57855,57856,57857,57858,57859,57860,57861,57862,57863,57864,57865,57866,57867,57868,57869,57870,57871,57872,57873,57874,57875,57876,57877,57878,57879,57880,57881,57882,57883,57884,57885,57886,57887,57888,57889,57890,57891,57892,57893,57894,57895,57896,57897,57898,57899,57900,57901,57902,57903,57904,57905,57906,57907,30277,30278,30279,30280,30281,30282,30283,30286,30287,30288,30289,30290,30291,30293,30295,30296,30297,30298,30299,30301,30303,30304,30305,30306,30308,30309,30310,30311,30312,30313,30314,30316,30317,30318,30320,30321,30322,30323,30324,30325,30326,30327,30329,30330,30332,30335,30336,30337,30339,30341,30345,30346,30348,30349,30351,30352,30354,30356,30357,30359,30360,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30373,30374,30375,30376,30377,30378,30379,30380,30381,30383,30384,30387,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30400,30401,30403,21834,38463,22467,25384,21710,21769,21696,30353,30284,34108,30702,33406,30861,29233,38552,38797,27688,23433,20474,25353,26263,23736,33018,26696,32942,26114,30414,20985,25942,29100,32753,34948,20658,22885,25034,28595,33453,25420,25170,21485,21543,31494,20843,30116,24052,25300,36299,38774,25226,32793,22365,38712,32610,29240,30333,26575,30334,25670,20336,36133,25308,31255,26001,29677,25644,25203,33324,39041,26495,29256,25198,25292,20276,29923,21322,21150,32458,37030,24110,26758,27036,33152,32465,26834,30917,34444,38225,20621,35876,33502,32990,21253,35090,21093,30404,30407,30409,30411,30412,30419,30421,30425,30426,30428,30429,30430,30432,30433,30434,30435,30436,30438,30439,30440,30441,30442,30443,30444,30445,30448,30451,30453,30454,30455,30458,30459,30461,30463,30464,30466,30467,30469,30470,30474,30476,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30491,30492,30493,30494,30497,30499,30500,30501,30503,30506,30507,30508,30510,30512,30513,30514,30515,30516,30521,30523,30525,30526,30527,30530,30532,30533,30534,30536,30537,30538,30539,30540,30541,30542,30543,30546,30547,30548,30549,30550,30551,30552,30553,30556,34180,38649,20445,22561,39281,23453,25265,25253,26292,35961,40077,29190,26479,30865,24754,21329,21271,36744,32972,36125,38049,20493,29384,22791,24811,28953,34987,22868,33519,26412,31528,23849,32503,29997,27893,36454,36856,36924,40763,27604,37145,31508,24444,30887,34006,34109,27605,27609,27606,24065,24199,30201,38381,25949,24330,24517,36767,22721,33218,36991,38491,38829,36793,32534,36140,25153,20415,21464,21342,36776,36777,36779,36941,26631,24426,33176,34920,40150,24971,21035,30250,24428,25996,28626,28392,23486,25672,20853,20912,26564,19993,31177,39292,28851,30557,30558,30559,30560,30564,30567,30569,30570,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30586,30587,30588,30593,30594,30595,30598,30599,30600,30601,30602,30603,30607,30608,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30625,30627,30628,30630,30632,30635,30637,30638,30639,30641,30642,30644,30646,30647,30648,30649,30650,30652,30654,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30670,30671,30672,30673,30674,30675,30676,30677,30678,30680,30681,30682,30685,30686,30687,30688,30689,30692,30149,24182,29627,33760,25773,25320,38069,27874,21338,21187,25615,38082,31636,20271,24091,33334,33046,33162,28196,27850,39539,25429,21340,21754,34917,22496,19981,24067,27493,31807,37096,24598,25830,29468,35009,26448,25165,36130,30572,36393,37319,24425,33756,34081,39184,21442,34453,27531,24813,24808,28799,33485,33329,20179,27815,34255,25805,31961,27133,26361,33609,21397,31574,20391,20876,27979,23618,36461,25554,21449,33580,33590,26597,30900,25661,23519,23700,24046,35815,25286,26612,35962,25600,25530,34633,39307,35863,32544,38130,20135,38416,39076,26124,29462,30694,30696,30698,30703,30704,30705,30706,30708,30709,30711,30713,30714,30715,30716,30723,30724,30725,30726,30727,30728,30730,30731,30734,30735,30736,30739,30741,30745,30747,30750,30752,30753,30754,30756,30760,30762,30763,30766,30767,30769,30770,30771,30773,30774,30781,30783,30785,30786,30787,30788,30790,30792,30793,30794,30795,30797,30799,30801,30803,30804,30808,30809,30810,30811,30812,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30831,30832,30833,30834,30835,30836,30837,30838,30840,30841,30842,30843,30845,30846,30847,30848,30849,30850,30851,22330,23581,24120,38271,20607,32928,21378,25950,30021,21809,20513,36229,25220,38046,26397,22066,28526,24034,21557,28818,36710,25199,25764,25507,24443,28552,37108,33251,36784,23576,26216,24561,27785,38472,36225,34924,25745,31216,22478,27225,25104,21576,20056,31243,24809,28548,35802,25215,36894,39563,31204,21507,30196,25345,21273,27744,36831,24347,39536,32827,40831,20360,23610,36196,32709,26021,28861,20805,20914,34411,23815,23456,25277,37228,30068,36364,31264,24833,31609,20167,32504,30597,19985,33261,21021,20986,27249,21416,36487,38148,38607,28353,38500,26970,30852,30853,30854,30856,30858,30859,30863,30864,30866,30868,30869,30870,30873,30877,30878,30880,30882,30884,30886,30888,30889,30890,30891,30892,30893,30894,30895,30901,30902,30903,30904,30906,30907,30908,30909,30911,30912,30914,30915,30916,30918,30919,30920,30924,30925,30926,30927,30929,30930,30931,30934,30935,30936,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30953,30954,30955,30957,30958,30959,30960,30961,30963,30965,30966,30968,30969,30971,30972,30973,30974,30975,30976,30978,30979,30980,30982,30983,30984,30985,30986,30987,30988,30784,20648,30679,25616,35302,22788,25571,24029,31359,26941,20256,33337,21912,20018,30126,31383,24162,24202,38383,21019,21561,28810,25462,38180,22402,26149,26943,37255,21767,28147,32431,34850,25139,32496,30133,33576,30913,38604,36766,24904,29943,35789,27492,21050,36176,27425,32874,33905,22257,21254,20174,19995,20945,31895,37259,31751,20419,36479,31713,31388,25703,23828,20652,33030,30209,31929,28140,32736,26449,23384,23544,30923,25774,25619,25514,25387,38169,25645,36798,31572,30249,25171,22823,21574,27513,20643,25140,24102,27526,20195,36151,34955,24453,36910,30989,30990,30991,30992,30993,30994,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31007,31008,31009,31010,31011,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31029,31030,31031,31032,31033,31037,31039,31042,31043,31044,31045,31047,31050,31051,31052,31053,31054,31055,31056,31057,31058,31060,31061,31064,31065,31073,31075,31076,31078,31081,31082,31083,31084,31086,31088,31089,31090,31091,31092,31093,31094,31097,31099,31100,31101,31102,31103,31106,31107,31110,31111,31112,31113,31115,31116,31117,31118,31120,31121,31122,24608,32829,25285,20025,21333,37112,25528,32966,26086,27694,20294,24814,28129,35806,24377,34507,24403,25377,20826,33633,26723,20992,25443,36424,20498,23707,31095,23548,21040,31291,24764,36947,30423,24503,24471,30340,36460,28783,30331,31561,30634,20979,37011,22564,20302,28404,36842,25932,31515,29380,28068,32735,23265,25269,24213,22320,33922,31532,24093,24351,36882,32532,39072,25474,28359,30872,28857,20856,38747,22443,30005,20291,30008,24215,24806,22880,28096,27583,30857,21500,38613,20939,20993,25481,21514,38035,35843,36300,29241,30879,34678,36845,35853,21472,31123,31124,31125,31126,31127,31128,31129,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31156,31157,31158,31159,31160,31164,31167,31170,31172,31173,31175,31176,31178,31180,31182,31183,31184,31187,31188,31190,31191,31193,31194,31195,31196,31197,31198,31200,31201,31202,31205,31208,31210,31212,31214,31217,31218,31219,31220,31221,31222,31223,31225,31226,31228,31230,31231,31233,31236,31237,31239,31240,31241,31242,31244,31247,31248,31249,31250,31251,31253,31254,31256,31257,31259,31260,19969,30447,21486,38025,39030,40718,38189,23450,35746,20002,19996,20908,33891,25026,21160,26635,20375,24683,20923,27934,20828,25238,26007,38497,35910,36887,30168,37117,30563,27602,29322,29420,35835,22581,30585,36172,26460,38208,32922,24230,28193,22930,31471,30701,38203,27573,26029,32526,22534,20817,38431,23545,22697,21544,36466,25958,39039,22244,38045,30462,36929,25479,21702,22810,22842,22427,36530,26421,36346,33333,21057,24816,22549,34558,23784,40517,20420,39069,35769,23077,24694,21380,25212,36943,37122,39295,24681,32780,20799,32819,23572,39285,27953,20108,31261,31263,31265,31266,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31284,31285,31286,31288,31290,31294,31296,31297,31298,31299,31300,31301,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312,31314,31315,31316,31317,31318,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31345,31346,31347,31349,31355,31356,31357,31358,31362,31365,31367,31369,31370,31371,31372,31374,31375,31376,31379,31380,31385,31386,31387,31390,31393,31394,36144,21457,32602,31567,20240,20047,38400,27861,29648,34281,24070,30058,32763,27146,30718,38034,32321,20961,28902,21453,36820,33539,36137,29359,39277,27867,22346,33459,26041,32938,25151,38450,22952,20223,35775,32442,25918,33778,38750,21857,39134,32933,21290,35837,21536,32954,24223,27832,36153,33452,37210,21545,27675,20998,32439,22367,28954,27774,31881,22859,20221,24575,24868,31914,20016,23553,26539,34562,23792,38155,39118,30127,28925,36898,20911,32541,35773,22857,20964,20315,21542,22827,25975,32932,23413,25206,25282,36752,24133,27679,31526,20239,20440,26381,31395,31396,31399,31401,31402,31403,31406,31407,31408,31409,31410,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31447,31448,31450,31451,31452,31453,31457,31458,31460,31463,31464,31465,31466,31467,31468,31470,31472,31473,31474,31475,31476,31477,31478,31479,31480,31483,31484,31486,31488,31489,31490,31493,31495,31497,31500,31501,31502,31504,31506,31507,31510,31511,31512,31514,31516,31517,31519,31521,31522,31523,31527,31529,31533,28014,28074,31119,34993,24343,29995,25242,36741,20463,37340,26023,33071,33105,24220,33104,36212,21103,35206,36171,22797,20613,20184,38428,29238,33145,36127,23500,35747,38468,22919,32538,21648,22134,22030,35813,25913,27010,38041,30422,28297,24178,29976,26438,26577,31487,32925,36214,24863,31174,25954,36195,20872,21018,38050,32568,32923,32434,23703,28207,26464,31705,30347,39640,33167,32660,31957,25630,38224,31295,21578,21733,27468,25601,25096,40509,33011,30105,21106,38761,33883,26684,34532,38401,38548,38124,20010,21508,32473,26681,36319,32789,26356,24218,32697,31535,31536,31538,31540,31541,31542,31543,31545,31547,31549,31551,31552,31553,31554,31555,31556,31558,31560,31562,31565,31566,31571,31573,31575,31577,31580,31582,31583,31585,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31599,31600,31603,31604,31606,31608,31610,31612,31613,31615,31617,31618,31619,31620,31622,31623,31624,31625,31626,31627,31628,31630,31631,31633,31634,31635,31638,31640,31641,31642,31643,31646,31647,31648,31651,31652,31653,31662,31663,31664,31666,31667,31669,31670,31671,31673,31674,31675,31676,31677,31678,31679,31680,31682,31683,31684,22466,32831,26775,24037,25915,21151,24685,40858,20379,36524,20844,23467,24339,24041,27742,25329,36129,20849,38057,21246,27807,33503,29399,22434,26500,36141,22815,36764,33735,21653,31629,20272,27837,23396,22993,40723,21476,34506,39592,35895,32929,25925,39038,22266,38599,21038,29916,21072,23521,25346,35074,20054,25296,24618,26874,20851,23448,20896,35266,31649,39302,32592,24815,28748,36143,20809,24191,36891,29808,35268,22317,30789,24402,40863,38394,36712,39740,35809,30328,26690,26588,36330,36149,21053,36746,28378,26829,38149,37101,22269,26524,35065,36807,21704,31685,31688,31689,31690,31691,31693,31694,31695,31696,31698,31700,31701,31702,31703,31704,31707,31708,31710,31711,31712,31714,31715,31716,31719,31720,31721,31723,31724,31725,31727,31728,31730,31731,31732,31733,31734,31736,31737,31738,31739,31741,31743,31744,31745,31746,31747,31748,31749,31750,31752,31753,31754,31757,31758,31760,31761,31762,31763,31764,31765,31767,31768,31769,31770,31771,31772,31773,31774,31776,31777,31778,31779,31780,31781,31784,31785,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31801,31802,31803,31804,31805,31806,31810,39608,23401,28023,27686,20133,23475,39559,37219,25000,37039,38889,21547,28085,23506,20989,21898,32597,32752,25788,25421,26097,25022,24717,28938,27735,27721,22831,26477,33322,22741,22158,35946,27627,37085,22909,32791,21495,28009,21621,21917,33655,33743,26680,31166,21644,20309,21512,30418,35977,38402,27827,28088,36203,35088,40548,36154,22079,40657,30165,24456,29408,24680,21756,20136,27178,34913,24658,36720,21700,28888,34425,40511,27946,23439,24344,32418,21897,20399,29492,21564,21402,20505,21518,21628,20046,24573,29786,22774,33899,32993,34676,29392,31946,28246,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31861,31862,31863,31864,31865,31866,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31882,31883,31884,31885,31886,31887,31888,31891,31892,31894,31897,31898,31899,31904,31905,31907,31910,31911,31912,31913,31915,31916,31917,31919,31920,31924,31925,31926,31927,31928,31930,31931,24359,34382,21804,25252,20114,27818,25143,33457,21719,21326,29502,28369,30011,21010,21270,35805,27088,24458,24576,28142,22351,27426,29615,26707,36824,32531,25442,24739,21796,30186,35938,28949,28067,23462,24187,33618,24908,40644,30970,34647,31783,30343,20976,24822,29004,26179,24140,24653,35854,28784,25381,36745,24509,24674,34516,22238,27585,24724,24935,21321,24800,26214,36159,31229,20250,28905,27719,35763,35826,32472,33636,26127,23130,39746,27985,28151,35905,27963,20249,28779,33719,25110,24785,38669,36135,31096,20987,22334,22522,26426,30072,31293,31215,31637,31935,31936,31938,31939,31940,31942,31945,31947,31950,31951,31952,31953,31954,31955,31956,31960,31962,31963,31965,31966,31969,31970,31971,31972,31973,31974,31975,31977,31978,31979,31980,31981,31982,31984,31985,31986,31987,31988,31989,31990,31991,31993,31994,31996,31997,31998,31999,32000,32001,32002,32003,32004,32005,32006,32007,32008,32009,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32033,32035,32036,32037,32038,32040,32041,32042,32044,32045,32046,32048,32049,32050,32051,32052,32053,32054,32908,39269,36857,28608,35749,40481,23020,32489,32521,21513,26497,26840,36753,31821,38598,21450,24613,30142,27762,21363,23241,32423,25380,20960,33034,24049,34015,25216,20864,23395,20238,31085,21058,24760,27982,23492,23490,35745,35760,26082,24524,38469,22931,32487,32426,22025,26551,22841,20339,23478,21152,33626,39050,36158,30002,38078,20551,31292,20215,26550,39550,23233,27516,30417,22362,23574,31546,38388,29006,20860,32937,33392,22904,32516,33575,26816,26604,30897,30839,25315,25441,31616,20461,21098,20943,33616,27099,37492,36341,36145,35265,38190,31661,20214,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32111,32112,32113,32114,32115,32116,32117,32118,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,20581,33328,21073,39279,28176,28293,28071,24314,20725,23004,23558,27974,27743,30086,33931,26728,22870,35762,21280,37233,38477,34121,26898,30977,28966,33014,20132,37066,27975,39556,23047,22204,25605,38128,30699,20389,33050,29409,35282,39290,32564,32478,21119,25945,37237,36735,36739,21483,31382,25581,25509,30342,31224,34903,38454,25130,21163,33410,26708,26480,25463,30571,31469,27905,32467,35299,22992,25106,34249,33445,30028,20511,20171,30117,35819,23626,24062,31563,26020,37329,20170,27941,35167,32039,38182,20165,35880,36827,38771,26187,31105,36817,28908,28024,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32167,32168,32169,32170,32171,32172,32173,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,23613,21170,33606,20834,33550,30555,26230,40120,20140,24778,31934,31923,32463,20117,35686,26223,39048,38745,22659,25964,38236,24452,30153,38742,31455,31454,20928,28847,31384,25578,31350,32416,29590,38893,20037,28792,20061,37202,21417,25937,26087,33276,33285,21646,23601,30106,38816,25304,29401,30141,23621,39545,33738,23616,21632,30697,20030,27822,32858,25298,25454,24040,20855,36317,36382,38191,20465,21477,24807,28844,21095,25424,40515,23071,20518,30519,21367,32482,25733,25899,25225,25496,20500,29237,35273,20915,35776,32477,22343,33740,38055,20891,21531,23803,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32316,32317,32318,32319,32320,32322,32323,32324,32325,32326,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,20426,31459,27994,37089,39567,21888,21654,21345,21679,24320,25577,26999,20975,24936,21002,22570,21208,22350,30733,30475,24247,24951,31968,25179,25239,20130,28821,32771,25335,28900,38752,22391,33499,26607,26869,30933,39063,31185,22771,21683,21487,28212,20811,21051,23458,35838,32943,21827,22438,24691,22353,21549,31354,24656,23380,25511,25248,21475,25187,23495,26543,21741,31391,33510,37239,24211,35044,22840,22446,25358,36328,33007,22359,31607,20393,24555,23485,27454,21281,31568,29378,26694,30719,30518,26103,20917,20111,30420,23743,31397,33909,22862,39745,20608,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32412,32413,32414,32430,32436,32443,32444,32470,32484,32492,32505,32522,32528,32542,32567,32569,32571,32572,32573,32574,32575,32576,32577,32579,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32594,32595,39304,24871,28291,22372,26118,25414,22256,25324,25193,24275,38420,22403,25289,21895,34593,33098,36771,21862,33713,26469,36182,34013,23146,26639,25318,31726,38417,20848,28572,35888,25597,35272,25042,32518,28866,28389,29701,27028,29436,24266,37070,26391,28010,25438,21171,29282,32769,20332,23013,37226,28889,28061,21202,20048,38647,38253,34174,30922,32047,20769,22418,25794,32907,31867,27882,26865,26974,20919,21400,26792,29313,40654,31729,29432,31163,28435,29702,26446,37324,40100,31036,33673,33620,21519,26647,20029,21385,21169,30782,21382,21033,20616,20363,20432,32598,32601,32603,32604,32605,32606,32608,32611,32612,32613,32614,32615,32619,32620,32621,32623,32624,32627,32629,32630,32631,32632,32634,32635,32636,32637,32639,32640,32642,32643,32644,32645,32646,32647,32648,32649,32651,32653,32655,32656,32657,32658,32659,32661,32662,32663,32664,32665,32667,32668,32672,32674,32675,32677,32678,32680,32681,32682,32683,32684,32685,32686,32689,32691,32692,32693,32694,32695,32698,32699,32702,32704,32706,32707,32708,32710,32711,32712,32713,32715,32717,32719,32720,32721,32722,32723,32726,32727,32729,32730,32731,32732,32733,32734,32738,32739,30178,31435,31890,27813,38582,21147,29827,21737,20457,32852,33714,36830,38256,24265,24604,28063,24088,25947,33080,38142,24651,28860,32451,31918,20937,26753,31921,33391,20004,36742,37327,26238,20142,35845,25769,32842,20698,30103,29134,23525,36797,28518,20102,25730,38243,24278,26009,21015,35010,28872,21155,29454,29747,26519,30967,38678,20020,37051,40158,28107,20955,36161,21533,25294,29618,33777,38646,40836,38083,20278,32666,20940,28789,38517,23725,39046,21478,20196,28316,29705,27060,30827,39311,30041,21016,30244,27969,26611,20845,40857,32843,21657,31548,31423,32740,32743,32744,32746,32747,32748,32749,32751,32754,32756,32757,32758,32759,32760,32761,32762,32765,32766,32767,32770,32775,32776,32777,32778,32782,32783,32785,32787,32794,32795,32797,32798,32799,32801,32803,32804,32811,32812,32813,32814,32815,32816,32818,32820,32825,32826,32828,32830,32832,32833,32836,32837,32839,32840,32841,32846,32847,32848,32849,32851,32853,32854,32855,32857,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32875,32876,32877,32878,32879,32880,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,38534,22404,25314,38471,27004,23044,25602,31699,28431,38475,33446,21346,39045,24208,28809,25523,21348,34383,40065,40595,30860,38706,36335,36162,40575,28510,31108,24405,38470,25134,39540,21525,38109,20387,26053,23653,23649,32533,34385,27695,24459,29575,28388,32511,23782,25371,23402,28390,21365,20081,25504,30053,25249,36718,20262,20177,27814,32438,35770,33821,34746,32599,36923,38179,31657,39585,35064,33853,27931,39558,32476,22920,40635,29595,30721,34434,39532,39554,22043,21527,22475,20080,40614,21334,36808,33033,30610,39314,34542,28385,34067,26364,24930,28459,32894,32897,32898,32901,32904,32906,32909,32910,32911,32912,32913,32914,32916,32917,32919,32921,32926,32931,32934,32935,32936,32940,32944,32947,32949,32950,32952,32953,32955,32965,32967,32968,32969,32970,32971,32975,32976,32977,32978,32979,32980,32981,32984,32991,32992,32994,32995,32998,33006,33013,33015,33017,33019,33022,33023,33024,33025,33027,33028,33029,33031,33032,33035,33036,33045,33047,33049,33051,33052,33053,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33069,33070,33072,33075,33076,33077,33079,33081,33082,33083,33084,33085,33087,35881,33426,33579,30450,27667,24537,33725,29483,33541,38170,27611,30683,38086,21359,33538,20882,24125,35980,36152,20040,29611,26522,26757,37238,38665,29028,27809,30473,23186,38209,27599,32654,26151,23504,22969,23194,38376,38391,20204,33804,33945,27308,30431,38192,29467,26790,23391,30511,37274,38753,31964,36855,35868,24357,31859,31192,35269,27852,34588,23494,24130,26825,30496,32501,20885,20813,21193,23081,32517,38754,33495,25551,30596,34256,31186,28218,24217,22937,34065,28781,27665,25279,30399,25935,24751,38397,26126,34719,40483,38125,21517,21629,35884,25720,33088,33089,33090,33091,33092,33093,33095,33097,33101,33102,33103,33106,33110,33111,33112,33115,33116,33117,33118,33119,33121,33122,33123,33124,33126,33128,33130,33131,33132,33135,33138,33139,33141,33142,33143,33144,33153,33155,33156,33157,33158,33159,33161,33163,33164,33165,33166,33168,33170,33171,33172,33173,33174,33175,33177,33178,33182,33183,33184,33185,33186,33188,33189,33191,33193,33195,33196,33197,33198,33199,33200,33201,33202,33204,33205,33206,33207,33208,33209,33212,33213,33214,33215,33220,33221,33223,33224,33225,33227,33229,33230,33231,33232,33233,33234,33235,25721,34321,27169,33180,30952,25705,39764,25273,26411,33707,22696,40664,27819,28448,23518,38476,35851,29279,26576,25287,29281,20137,22982,27597,22675,26286,24149,21215,24917,26408,30446,30566,29287,31302,25343,21738,21584,38048,37027,23068,32435,27670,20035,22902,32784,22856,21335,30007,38590,22218,25376,33041,24700,38393,28118,21602,39297,20869,23273,33021,22958,38675,20522,27877,23612,25311,20320,21311,33147,36870,28346,34091,25288,24180,30910,25781,25467,24565,23064,37247,40479,23615,25423,32834,23421,21870,38218,38221,28037,24744,26592,29406,20957,23425,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33252,33253,33254,33256,33257,33259,33262,33263,33264,33265,33266,33269,33270,33271,33272,33273,33274,33277,33279,33283,33287,33288,33289,33290,33291,33294,33295,33297,33299,33301,33302,33303,33304,33305,33306,33309,33312,33316,33317,33318,33319,33321,33326,33330,33338,33340,33341,33343,33344,33345,33346,33347,33349,33350,33352,33354,33356,33357,33358,33360,33361,33362,33363,33364,33365,33366,33367,33369,33371,33372,33373,33374,33376,33377,33378,33379,33380,33381,33382,33383,33385,25319,27870,29275,25197,38062,32445,33043,27987,20892,24324,22900,21162,24594,22899,26262,34384,30111,25386,25062,31983,35834,21734,27431,40485,27572,34261,21589,20598,27812,21866,36276,29228,24085,24597,29750,25293,25490,29260,24472,28227,27966,25856,28504,30424,30928,30460,30036,21028,21467,20051,24222,26049,32810,32982,25243,21638,21032,28846,34957,36305,27873,21624,32986,22521,35060,36180,38506,37197,20329,27803,21943,30406,30768,25256,28921,28558,24429,34028,26842,30844,31735,33192,26379,40527,25447,30896,22383,30738,38713,25209,25259,21128,29749,27607,33386,33387,33388,33389,33393,33397,33398,33399,33400,33403,33404,33408,33409,33411,33413,33414,33415,33417,33420,33424,33427,33428,33429,33430,33434,33435,33438,33440,33442,33443,33447,33458,33461,33462,33466,33467,33468,33471,33472,33474,33475,33477,33478,33481,33488,33494,33497,33498,33501,33506,33511,33512,33513,33514,33516,33517,33518,33520,33522,33523,33525,33526,33528,33530,33532,33533,33534,33535,33536,33546,33547,33549,33552,33554,33555,33558,33560,33561,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33577,33578,33582,33584,33586,33591,33595,33597,21860,33086,30130,30382,21305,30174,20731,23617,35692,31687,20559,29255,39575,39128,28418,29922,31080,25735,30629,25340,39057,36139,21697,32856,20050,22378,33529,33805,24179,20973,29942,35780,23631,22369,27900,39047,23110,30772,39748,36843,31893,21078,25169,38138,20166,33670,33889,33769,33970,22484,26420,22275,26222,28006,35889,26333,28689,26399,27450,26646,25114,22971,19971,20932,28422,26578,27791,20854,26827,22855,27495,30054,23822,33040,40784,26071,31048,31041,39569,36215,23682,20062,20225,21551,22865,30732,22120,27668,36804,24323,27773,27875,35755,25488,33598,33599,33601,33602,33604,33605,33608,33610,33611,33612,33613,33614,33619,33621,33622,33623,33624,33625,33629,33634,33648,33649,33650,33651,33652,33653,33654,33657,33658,33662,33663,33664,33665,33666,33667,33668,33671,33672,33674,33675,33676,33677,33679,33680,33681,33684,33685,33686,33687,33689,33690,33693,33695,33697,33698,33699,33700,33701,33702,33703,33708,33709,33710,33711,33717,33723,33726,33727,33730,33731,33732,33734,33736,33737,33739,33741,33742,33744,33745,33746,33747,33749,33751,33753,33754,33755,33758,33762,33763,33764,33766,33767,33768,33771,33772,33773,24688,27965,29301,25190,38030,38085,21315,36801,31614,20191,35878,20094,40660,38065,38067,21069,28508,36963,27973,35892,22545,23884,27424,27465,26538,21595,33108,32652,22681,34103,24378,25250,27207,38201,25970,24708,26725,30631,20052,20392,24039,38808,25772,32728,23789,20431,31373,20999,33540,19988,24623,31363,38054,20405,20146,31206,29748,21220,33465,25810,31165,23517,27777,38738,36731,27682,20542,21375,28165,25806,26228,27696,24773,39031,35831,24198,29756,31351,31179,19992,37041,29699,27714,22234,37195,27845,36235,21306,34502,26354,36527,23624,39537,28192,33774,33775,33779,33780,33781,33782,33783,33786,33787,33788,33790,33791,33792,33794,33797,33799,33800,33801,33802,33808,33810,33811,33812,33813,33814,33815,33817,33818,33819,33822,33823,33824,33825,33826,33827,33833,33834,33835,33836,33837,33838,33839,33840,33842,33843,33844,33845,33846,33847,33849,33850,33851,33854,33855,33856,33857,33858,33859,33860,33861,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33874,33875,33876,33877,33878,33880,33885,33886,33887,33888,33890,33892,33893,33894,33895,33896,33898,33902,33903,33904,33906,33908,33911,33913,33915,33916,21462,23094,40843,36259,21435,22280,39079,26435,37275,27849,20840,30154,25331,29356,21048,21149,32570,28820,30264,21364,40522,27063,30830,38592,35033,32676,28982,29123,20873,26579,29924,22756,25880,22199,35753,39286,25200,32469,24825,28909,22764,20161,20154,24525,38887,20219,35748,20995,22922,32427,25172,20173,26085,25102,33592,33993,33635,34701,29076,28342,23481,32466,20887,25545,26580,32905,33593,34837,20754,23418,22914,36785,20083,27741,20837,35109,36719,38446,34122,29790,38160,38384,28070,33509,24369,25746,27922,33832,33134,40131,22622,36187,19977,21441,33917,33918,33919,33920,33921,33923,33924,33925,33926,33930,33933,33935,33936,33937,33938,33939,33940,33941,33942,33944,33946,33947,33949,33950,33951,33952,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33968,33969,33971,33973,33974,33975,33979,33980,33982,33984,33986,33987,33989,33990,33991,33992,33995,33996,33998,33999,34002,34004,34005,34007,34008,34009,34010,34011,34012,34014,34017,34018,34020,34023,34024,34025,34026,34027,34029,34030,34031,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34045,34046,34048,34049,34050,20254,25955,26705,21971,20007,25620,39578,25195,23234,29791,33394,28073,26862,20711,33678,30722,26432,21049,27801,32433,20667,21861,29022,31579,26194,29642,33515,26441,23665,21024,29053,34923,38378,38485,25797,36193,33203,21892,27733,25159,32558,22674,20260,21830,36175,26188,19978,23578,35059,26786,25422,31245,28903,33421,21242,38902,23569,21736,37045,32461,22882,36170,34503,33292,33293,36198,25668,23556,24913,28041,31038,35774,30775,30003,21627,20280,36523,28145,23072,32453,31070,27784,23457,23158,29978,32958,24910,28183,22768,29983,29989,29298,21319,32499,34051,34052,34053,34054,34055,34056,34057,34058,34059,34061,34062,34063,34064,34066,34068,34069,34070,34072,34073,34075,34076,34077,34078,34080,34082,34083,34084,34085,34086,34087,34088,34089,34090,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34110,34111,34112,34113,34114,34116,34117,34118,34119,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34135,34136,34138,34139,34140,34141,34143,34144,34145,34146,34147,34149,34150,34151,34153,34154,34155,34156,34157,34158,34159,34160,34161,34163,34165,34166,34167,34168,34172,34173,34175,34176,34177,30465,30427,21097,32988,22307,24072,22833,29422,26045,28287,35799,23608,34417,21313,30707,25342,26102,20160,39135,34432,23454,35782,21490,30690,20351,23630,39542,22987,24335,31034,22763,19990,26623,20107,25325,35475,36893,21183,26159,21980,22124,36866,20181,20365,37322,39280,27663,24066,24643,23460,35270,35797,25910,25163,39318,23432,23551,25480,21806,21463,30246,20861,34092,26530,26803,27530,25234,36755,21460,33298,28113,30095,20070,36174,23408,29087,34223,26257,26329,32626,34560,40653,40736,23646,26415,36848,26641,26463,25101,31446,22661,24246,25968,28465,34178,34179,34182,34184,34185,34186,34187,34188,34189,34190,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34205,34206,34207,34208,34209,34210,34211,34213,34214,34215,34217,34219,34220,34221,34225,34226,34227,34228,34229,34230,34232,34234,34235,34236,34237,34238,34239,34240,34242,34243,34244,34245,34246,34247,34248,34250,34251,34252,34253,34254,34257,34258,34260,34262,34263,34264,34265,34266,34267,34269,34270,34271,34272,34273,34274,34275,34277,34278,34279,34280,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,24661,21047,32781,25684,34928,29993,24069,26643,25332,38684,21452,29245,35841,27700,30561,31246,21550,30636,39034,33308,35828,30805,26388,28865,26031,25749,22070,24605,31169,21496,19997,27515,32902,23546,21987,22235,20282,20284,39282,24051,26494,32824,24578,39042,36865,23435,35772,35829,25628,33368,25822,22013,33487,37221,20439,32032,36895,31903,20723,22609,28335,23487,35785,32899,37240,33948,31639,34429,38539,38543,32485,39635,30862,23681,31319,36930,38567,31071,23385,25439,31499,34001,26797,21766,32553,29712,32034,38145,25152,22604,20182,23427,22905,22612,34297,34298,34300,34301,34302,34304,34305,34306,34307,34308,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34322,34323,34324,34325,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34344,34346,34347,34348,34349,34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34361,34362,34363,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34386,34387,34389,34390,34391,34392,34393,34395,34396,34397,34399,34400,34401,34403,34404,34405,34406,34407,34408,34409,34410,29549,25374,36427,36367,32974,33492,25260,21488,27888,37214,22826,24577,27760,22349,25674,36138,30251,28393,22363,27264,30192,28525,35885,35848,22374,27631,34962,30899,25506,21497,28845,27748,22616,25642,22530,26848,33179,21776,31958,20504,36538,28108,36255,28907,25487,28059,28372,32486,33796,26691,36867,28120,38518,35752,22871,29305,34276,33150,30140,35466,26799,21076,36386,38161,25552,39064,36420,21884,20307,26367,22159,24789,28053,21059,23625,22825,28155,22635,30000,29980,24684,33300,33094,25361,26465,36834,30522,36339,36148,38081,24086,21381,21548,28867,34413,34415,34416,34418,34419,34420,34421,34422,34423,34424,34435,34436,34437,34438,34439,34440,34441,34446,34447,34448,34449,34450,34452,34454,34455,34456,34457,34458,34459,34462,34463,34464,34465,34466,34469,34470,34475,34477,34478,34482,34483,34487,34488,34489,34491,34492,34493,34494,34495,34497,34498,34499,34501,34504,34508,34509,34514,34515,34517,34518,34519,34522,34524,34525,34528,34529,34530,34531,34533,34534,34535,34536,34538,34539,34540,34543,34549,34550,34551,34554,34555,34556,34557,34559,34561,34564,34565,34566,34571,34572,34574,34575,34576,34577,34580,34582,27712,24311,20572,20141,24237,25402,33351,36890,26704,37230,30643,21516,38108,24420,31461,26742,25413,31570,32479,30171,20599,25237,22836,36879,20984,31171,31361,22270,24466,36884,28034,23648,22303,21520,20820,28237,22242,25512,39059,33151,34581,35114,36864,21534,23663,33216,25302,25176,33073,40501,38464,39534,39548,26925,22949,25299,21822,25366,21703,34521,27964,23043,29926,34972,27498,22806,35916,24367,28286,29609,39037,20024,28919,23436,30871,25405,26202,30358,24779,23451,23113,19975,33109,27754,29579,20129,26505,32593,24448,26106,26395,24536,22916,23041,34585,34587,34589,34591,34592,34596,34598,34599,34600,34602,34603,34604,34605,34607,34608,34610,34611,34613,34614,34616,34617,34618,34620,34621,34624,34625,34626,34627,34628,34629,34630,34634,34635,34637,34639,34640,34641,34642,34644,34645,34646,34648,34650,34651,34652,34653,34654,34655,34657,34658,34662,34663,34664,34665,34666,34667,34668,34669,34671,34673,34674,34675,34677,34679,34680,34681,34682,34687,34688,34689,34692,34694,34695,34697,34698,34700,34702,34703,34704,34705,34706,34708,34709,34710,34712,34713,34714,34715,34716,34717,34718,34720,34721,34722,34723,34724,24013,24494,21361,38886,36829,26693,22260,21807,24799,20026,28493,32500,33479,33806,22996,20255,20266,23614,32428,26410,34074,21619,30031,32963,21890,39759,20301,28205,35859,23561,24944,21355,30239,28201,34442,25991,38395,32441,21563,31283,32010,38382,21985,32705,29934,25373,34583,28065,31389,25105,26017,21351,25569,27779,24043,21596,38056,20044,27745,35820,23627,26080,33436,26791,21566,21556,27595,27494,20116,25410,21320,33310,20237,20398,22366,25098,38654,26212,29289,21247,21153,24735,35823,26132,29081,26512,35199,30802,30717,26224,22075,21560,38177,29306,34725,34726,34727,34729,34730,34734,34736,34737,34738,34740,34742,34743,34744,34745,34747,34748,34750,34751,34753,34754,34755,34756,34757,34759,34760,34761,34764,34765,34766,34767,34768,34772,34773,34774,34775,34776,34777,34778,34780,34781,34782,34783,34785,34786,34787,34788,34790,34791,34792,34793,34795,34796,34797,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34810,34811,34812,34813,34815,34816,34817,34818,34820,34821,34822,34823,34824,34825,34827,34828,34829,34830,34831,34832,34833,34834,34836,34839,34840,34841,34842,34844,34845,34846,34847,34848,34851,31232,24687,24076,24713,33181,22805,24796,29060,28911,28330,27728,29312,27268,34989,24109,20064,23219,21916,38115,27927,31995,38553,25103,32454,30606,34430,21283,38686,36758,26247,23777,20384,29421,19979,21414,22799,21523,25472,38184,20808,20185,40092,32420,21688,36132,34900,33335,38386,28046,24358,23244,26174,38505,29616,29486,21439,33146,39301,32673,23466,38519,38480,32447,30456,21410,38262,39321,31665,35140,28248,20065,32724,31077,35814,24819,21709,20139,39033,24055,27233,20687,21521,35937,33831,30813,38660,21066,21742,22179,38144,28040,23477,28102,26195,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34867,34868,34869,34870,34871,34872,34874,34875,34877,34878,34879,34881,34882,34883,34886,34887,34888,34889,34890,34891,34894,34895,34896,34897,34898,34899,34901,34902,34904,34906,34907,34908,34909,34910,34911,34912,34918,34919,34922,34925,34927,34929,34931,34932,34933,34934,34936,34937,34938,34939,34940,34944,34947,34950,34951,34953,34954,34956,34958,34959,34960,34961,34963,34964,34965,34967,34968,34969,34970,34971,34973,34974,34975,34976,34977,34979,34981,34982,34983,34984,34985,34986,23567,23389,26657,32918,21880,31505,25928,26964,20123,27463,34638,38795,21327,25375,25658,37034,26012,32961,35856,20889,26800,21368,34809,25032,27844,27899,35874,23633,34218,33455,38156,27427,36763,26032,24571,24515,20449,34885,26143,33125,29481,24826,20852,21009,22411,24418,37026,34892,37266,24184,26447,24615,22995,20804,20982,33016,21256,27769,38596,29066,20241,20462,32670,26429,21957,38152,31168,34966,32483,22687,25100,38656,34394,22040,39035,24464,35768,33988,37207,21465,26093,24207,30044,24676,32110,23167,32490,32493,36713,21927,23459,24748,26059,29572,34988,34990,34991,34992,34994,34995,34996,34997,34998,35000,35001,35002,35003,35005,35006,35007,35008,35011,35012,35015,35016,35018,35019,35020,35021,35023,35024,35025,35027,35030,35031,35034,35035,35036,35037,35038,35040,35041,35046,35047,35049,35050,35051,35052,35053,35054,35055,35058,35061,35062,35063,35066,35067,35069,35071,35072,35073,35075,35076,35077,35078,35079,35080,35081,35083,35084,35085,35086,35087,35089,35092,35093,35094,35095,35096,35100,35101,35102,35103,35104,35106,35107,35108,35110,35111,35112,35113,35116,35117,35118,35119,35121,35122,35123,35125,35127,36873,30307,30505,32474,38772,34203,23398,31348,38634,34880,21195,29071,24490,26092,35810,23547,39535,24033,27529,27739,35757,35759,36874,36805,21387,25276,40486,40493,21568,20011,33469,29273,34460,23830,34905,28079,38597,21713,20122,35766,28937,21693,38409,28895,28153,30416,20005,30740,34578,23721,24310,35328,39068,38414,28814,27839,22852,25513,30524,34893,28436,33395,22576,29141,21388,30746,38593,21761,24422,28976,23476,35866,39564,27523,22830,40495,31207,26472,25196,20335,30113,32650,27915,38451,27687,20208,30162,20859,26679,28478,36992,33136,22934,29814,35128,35129,35130,35131,35132,35133,35134,35135,35136,35138,35139,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35168,35169,35170,35171,35172,35173,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35196,35197,35198,35200,35202,35204,35205,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,25671,23591,36965,31377,35875,23002,21676,33280,33647,35201,32768,26928,22094,32822,29239,37326,20918,20063,39029,25494,19994,21494,26355,33099,22812,28082,19968,22777,21307,25558,38129,20381,20234,34915,39056,22839,36951,31227,20202,33008,30097,27778,23452,23016,24413,26885,34433,20506,24050,20057,30691,20197,33402,25233,26131,37009,23673,20159,24441,33222,36920,32900,30123,20134,35028,24847,27589,24518,20041,30410,28322,35811,35758,35850,35793,24322,32764,32716,32462,33589,33643,22240,27575,38899,38452,23035,21535,38134,28139,23493,39278,23609,24341,38544,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35267,35277,35283,35284,35285,35287,35288,35289,35291,35293,35295,35296,35297,35298,35300,35303,35304,35305,35306,35308,35309,35310,35312,35313,35314,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35329,35330,35331,35332,35333,35334,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,21360,33521,27185,23156,40560,24212,32552,33721,33828,33829,33639,34631,36814,36194,30408,24433,39062,30828,26144,21727,25317,20323,33219,30152,24248,38605,36362,34553,21647,27891,28044,27704,24703,21191,29992,24189,20248,24736,24551,23588,30001,37038,38080,29369,27833,28216,37193,26377,21451,21491,20305,37321,35825,21448,24188,36802,28132,20110,30402,27014,34398,24858,33286,20313,20446,36926,40060,24841,28189,28180,38533,20104,23089,38632,19982,23679,31161,23431,35821,32701,29577,22495,33419,37057,21505,36935,21947,23786,24481,24840,27442,29425,32946,35465,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35391,35392,35393,35394,35395,35396,35397,35398,35399,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35450,35451,35452,35453,35454,35455,35456,28020,23507,35029,39044,35947,39533,40499,28170,20900,20803,22435,34945,21407,25588,36757,22253,21592,22278,29503,28304,32536,36828,33489,24895,24616,38498,26352,32422,36234,36291,38053,23731,31908,26376,24742,38405,32792,20113,37095,21248,38504,20801,36816,34164,37213,26197,38901,23381,21277,30776,26434,26685,21705,28798,23472,36733,20877,22312,21681,25874,26242,36190,36163,33039,33900,36973,31967,20991,34299,26531,26089,28577,34468,36481,22122,36896,30338,28790,29157,36131,25321,21017,27901,36156,24590,22686,24974,26366,36192,25166,21939,28195,26413,36711,35457,35458,35459,35460,35461,35462,35463,35464,35467,35468,35469,35470,35471,35472,35473,35474,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,38113,38392,30504,26629,27048,21643,20045,28856,35784,25688,25995,23429,31364,20538,23528,30651,27617,35449,31896,27838,30415,26025,36759,23853,23637,34360,26632,21344,25112,31449,28251,32509,27167,31456,24432,28467,24352,25484,28072,26454,19976,24080,36134,20183,32960,30260,38556,25307,26157,25214,27836,36213,29031,32617,20806,32903,21484,36974,25240,21746,34544,36761,32773,38167,34071,36825,27993,29645,26015,30495,29956,30759,33275,36126,38024,20390,26517,30137,35786,38663,25391,38215,38453,33976,25379,30529,24449,29424,20105,24596,25972,25327,27491,25919,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,24103,30151,37073,35777,33437,26525,25903,21553,34584,30693,32930,33026,27713,20043,32455,32844,30452,26893,27542,25191,20540,20356,22336,25351,27490,36286,21482,26088,32440,24535,25370,25527,33267,33268,32622,24092,23769,21046,26234,31209,31258,36136,28825,30164,28382,27835,31378,20013,30405,24544,38047,34935,32456,31181,32959,37325,20210,20247,33311,21608,24030,27954,35788,31909,36724,32920,24090,21650,30385,23449,26172,39588,29664,26666,34523,26417,29482,35832,35803,36880,31481,28891,29038,25284,30633,22065,20027,33879,26609,21161,34496,36142,38136,31569,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35687,35688,35689,35690,35691,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35756,35761,35771,35783,35792,35818,35849,35870,20303,27880,31069,39547,25235,29226,25341,19987,30742,36716,25776,36186,31686,26729,24196,35013,22918,25758,22766,29366,26894,38181,36861,36184,22368,32512,35846,20934,25417,25305,21331,26700,29730,33537,37196,21828,30528,28796,27978,20857,21672,36164,23039,28363,28100,23388,32043,20180,31869,28371,23376,33258,28173,23383,39683,26837,36394,23447,32508,24635,32437,37049,36208,22863,25549,31199,36275,21330,26063,31062,35781,38459,32452,38075,32386,22068,37257,26368,32618,23562,36981,26152,24038,20304,26590,20570,20316,22352,24231,59408,59409,59410,59411,59412,35896,35897,35898,35899,35900,35901,35902,35903,35904,35906,35907,35908,35909,35912,35914,35915,35917,35918,35919,35920,35921,35922,35923,35924,35926,35927,35928,35929,35931,35932,35933,35934,35935,35936,35939,35940,35941,35942,35943,35944,35945,35948,35949,35950,35951,35952,35953,35954,35956,35957,35958,35959,35963,35964,35965,35966,35967,35968,35969,35971,35972,35974,35975,35976,35979,35981,35982,35983,35984,35985,35986,35987,35989,35990,35991,35993,35994,35995,35996,35997,35998,35999,36000,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,20109,19980,20800,19984,24319,21317,19989,20120,19998,39730,23404,22121,20008,31162,20031,21269,20039,22829,29243,21358,27664,22239,32996,39319,27603,30590,40727,20022,20127,40720,20060,20073,20115,33416,23387,21868,22031,20164,21389,21405,21411,21413,21422,38757,36189,21274,21493,21286,21294,21310,36188,21350,21347,20994,21000,21006,21037,21043,21055,21056,21068,21086,21089,21084,33967,21117,21122,21121,21136,21139,20866,32596,20155,20163,20169,20162,20200,20193,20203,20190,20251,20211,20258,20324,20213,20261,20263,20233,20267,20318,20327,25912,20314,20317,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,20319,20311,20274,20285,20342,20340,20369,20361,20355,20367,20350,20347,20394,20348,20396,20372,20454,20456,20458,20421,20442,20451,20444,20433,20447,20472,20521,20556,20467,20524,20495,20526,20525,20478,20508,20492,20517,20520,20606,20547,20565,20552,20558,20588,20603,20645,20647,20649,20666,20694,20742,20717,20716,20710,20718,20743,20747,20189,27709,20312,20325,20430,40864,27718,31860,20846,24061,40649,39320,20865,22804,21241,21261,35335,21264,20971,22809,20821,20128,20822,20147,34926,34980,20149,33044,35026,31104,23348,34819,32696,20907,20913,20925,20924,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36128,36177,36178,36183,36191,36197,36200,36201,36202,36204,36206,36207,36209,36210,36216,36217,36218,36219,36220,36221,36222,36223,36224,36226,36227,36230,36231,36232,36233,36236,36237,36238,36239,36240,36242,36243,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36256,36257,36258,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36274,36278,36279,36281,36283,36285,36288,36289,36290,36293,36295,36296,36297,36298,36301,36304,36306,36307,36308,20935,20886,20898,20901,35744,35750,35751,35754,35764,35765,35767,35778,35779,35787,35791,35790,35794,35795,35796,35798,35800,35801,35804,35807,35808,35812,35816,35817,35822,35824,35827,35830,35833,35836,35839,35840,35842,35844,35847,35852,35855,35857,35858,35860,35861,35862,35865,35867,35864,35869,35871,35872,35873,35877,35879,35882,35883,35886,35887,35890,35891,35893,35894,21353,21370,38429,38434,38433,38449,38442,38461,38460,38466,38473,38484,38495,38503,38508,38514,38516,38536,38541,38551,38576,37015,37019,37021,37017,37036,37025,37044,37043,37046,37050,36309,36312,36313,36316,36320,36321,36322,36325,36326,36327,36329,36333,36334,36336,36337,36338,36340,36342,36348,36350,36351,36352,36353,36354,36355,36356,36358,36359,36360,36363,36365,36366,36368,36369,36370,36371,36373,36374,36375,36376,36377,36378,36379,36380,36384,36385,36388,36389,36390,36391,36392,36395,36397,36400,36402,36403,36404,36406,36407,36408,36411,36412,36414,36415,36419,36421,36422,36428,36429,36430,36431,36432,36435,36436,36437,36438,36439,36440,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36455,36456,36458,36459,36462,36465,37048,37040,37071,37061,37054,37072,37060,37063,37075,37094,37090,37084,37079,37083,37099,37103,37118,37124,37154,37150,37155,37169,37167,37177,37187,37190,21005,22850,21154,21164,21165,21182,21759,21200,21206,21232,21471,29166,30669,24308,20981,20988,39727,21430,24321,30042,24047,22348,22441,22433,22654,22716,22725,22737,22313,22316,22314,22323,22329,22318,22319,22364,22331,22338,22377,22405,22379,22406,22396,22395,22376,22381,22390,22387,22445,22436,22412,22450,22479,22439,22452,22419,22432,22485,22488,22490,22489,22482,22456,22516,22511,22520,22500,22493,36467,36469,36471,36472,36473,36474,36475,36477,36478,36480,36482,36483,36484,36486,36488,36489,36490,36491,36492,36493,36494,36497,36498,36499,36501,36502,36503,36504,36505,36506,36507,36509,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36525,36526,36528,36529,36531,36532,36533,36534,36535,36536,36537,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,22539,22541,22525,22509,22528,22558,22553,22596,22560,22629,22636,22657,22665,22682,22656,39336,40729,25087,33401,33405,33407,33423,33418,33448,33412,33422,33425,33431,33433,33451,33464,33470,33456,33480,33482,33507,33432,33463,33454,33483,33484,33473,33449,33460,33441,33450,33439,33476,33486,33444,33505,33545,33527,33508,33551,33543,33500,33524,33490,33496,33548,33531,33491,33553,33562,33542,33556,33557,33504,33493,33564,33617,33627,33628,33544,33682,33596,33588,33585,33691,33630,33583,33615,33607,33603,33631,33600,33559,33632,33581,33594,33587,33638,33637,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,33640,33563,33641,33644,33642,33645,33646,33712,33656,33715,33716,33696,33706,33683,33692,33669,33660,33718,33705,33661,33720,33659,33688,33694,33704,33722,33724,33729,33793,33765,33752,22535,33816,33803,33757,33789,33750,33820,33848,33809,33798,33748,33759,33807,33795,33784,33785,33770,33733,33728,33830,33776,33761,33884,33873,33882,33881,33907,33927,33928,33914,33929,33912,33852,33862,33897,33910,33932,33934,33841,33901,33985,33997,34000,34022,33981,34003,33994,33983,33978,34016,33953,33977,33972,33943,34021,34019,34060,29965,34104,34032,34105,34079,34106,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36714,36736,36748,36754,36765,36768,36769,36770,36772,36773,36774,36775,36778,36780,36781,36782,36783,36786,36787,36788,36789,36791,36792,36794,36795,36796,36799,36800,36803,36806,36809,36810,36811,36812,36813,36815,36818,36822,36823,36826,36832,36833,36835,36839,36844,36847,36849,36850,36852,36853,36854,36858,36859,36860,36862,36863,36871,36872,36876,36878,36883,36885,36888,34134,34107,34047,34044,34137,34120,34152,34148,34142,34170,30626,34115,34162,34171,34212,34216,34183,34191,34169,34222,34204,34181,34233,34231,34224,34259,34241,34268,34303,34343,34309,34345,34326,34364,24318,24328,22844,22849,32823,22869,22874,22872,21263,23586,23589,23596,23604,25164,25194,25247,25275,25290,25306,25303,25326,25378,25334,25401,25419,25411,25517,25590,25457,25466,25486,25524,25453,25516,25482,25449,25518,25532,25586,25592,25568,25599,25540,25566,25550,25682,25542,25534,25669,25665,25611,25627,25632,25612,25638,25633,25694,25732,25709,25750,36889,36892,36899,36900,36901,36903,36904,36905,36906,36907,36908,36912,36913,36914,36915,36916,36919,36921,36922,36925,36927,36928,36931,36933,36934,36936,36937,36938,36939,36940,36942,36948,36949,36950,36953,36954,36956,36957,36958,36959,36960,36961,36964,36966,36967,36969,36970,36971,36972,36975,36976,36977,36978,36979,36982,36983,36984,36985,36986,36987,36988,36990,36993,36996,36997,36998,36999,37001,37002,37004,37005,37006,37007,37008,37010,37012,37014,37016,37018,37020,37022,37023,37024,37028,37029,37031,37032,37033,37035,37037,37042,37047,37052,37053,37055,37056,25722,25783,25784,25753,25786,25792,25808,25815,25828,25826,25865,25893,25902,24331,24530,29977,24337,21343,21489,21501,21481,21480,21499,21522,21526,21510,21579,21586,21587,21588,21590,21571,21537,21591,21593,21539,21554,21634,21652,21623,21617,21604,21658,21659,21636,21622,21606,21661,21712,21677,21698,21684,21714,21671,21670,21715,21716,21618,21667,21717,21691,21695,21708,21721,21722,21724,21673,21674,21668,21725,21711,21726,21787,21735,21792,21757,21780,21747,21794,21795,21775,21777,21799,21802,21863,21903,21941,21833,21869,21825,21845,21823,21840,21820,37058,37059,37062,37064,37065,37067,37068,37069,37074,37076,37077,37078,37080,37081,37082,37086,37087,37088,37091,37092,37093,37097,37098,37100,37102,37104,37105,37106,37107,37109,37110,37111,37113,37114,37115,37116,37119,37120,37121,37123,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37146,37147,37148,37149,37151,37152,37153,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37168,37170,37171,37172,37173,37174,37175,37176,37178,37179,37180,37181,37182,37183,37184,37185,37186,37188,21815,21846,21877,21878,21879,21811,21808,21852,21899,21970,21891,21937,21945,21896,21889,21919,21886,21974,21905,21883,21983,21949,21950,21908,21913,21994,22007,21961,22047,21969,21995,21996,21972,21990,21981,21956,21999,21989,22002,22003,21964,21965,21992,22005,21988,36756,22046,22024,22028,22017,22052,22051,22014,22016,22055,22061,22104,22073,22103,22060,22093,22114,22105,22108,22092,22100,22150,22116,22129,22123,22139,22140,22149,22163,22191,22228,22231,22237,22241,22261,22251,22265,22271,22276,22282,22281,22300,24079,24089,24084,24081,24113,24123,24124,37189,37191,37192,37201,37203,37204,37205,37206,37208,37209,37211,37212,37215,37216,37222,37223,37224,37227,37229,37235,37242,37243,37244,37248,37249,37250,37251,37252,37254,37256,37258,37262,37263,37267,37268,37269,37270,37271,37272,37273,37276,37277,37278,37279,37280,37281,37284,37285,37286,37287,37288,37289,37291,37292,37296,37297,37298,37299,37302,37303,37304,37305,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37320,37323,37328,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37341,37342,37343,37344,37345,37346,37347,37348,37349,24119,24132,24148,24155,24158,24161,23692,23674,23693,23696,23702,23688,23704,23705,23697,23706,23708,23733,23714,23741,23724,23723,23729,23715,23745,23735,23748,23762,23780,23755,23781,23810,23811,23847,23846,23854,23844,23838,23814,23835,23896,23870,23860,23869,23916,23899,23919,23901,23915,23883,23882,23913,23924,23938,23961,23965,35955,23991,24005,24435,24439,24450,24455,24457,24460,24469,24473,24476,24488,24493,24501,24508,34914,24417,29357,29360,29364,29367,29368,29379,29377,29390,29389,29394,29416,29423,29417,29426,29428,29431,29441,29427,29443,29434,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392,37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,29435,29463,29459,29473,29450,29470,29469,29461,29474,29497,29477,29484,29496,29489,29520,29517,29527,29536,29548,29551,29566,33307,22821,39143,22820,22786,39267,39271,39272,39273,39274,39275,39276,39284,39287,39293,39296,39300,39303,39306,39309,39312,39313,39315,39316,39317,24192,24209,24203,24214,24229,24224,24249,24245,24254,24243,36179,24274,24273,24283,24296,24298,33210,24516,24521,24534,24527,24579,24558,24580,24545,24548,24574,24581,24582,24554,24557,24568,24601,24629,24614,24603,24591,24589,24617,24619,24586,24639,24609,24696,24697,24699,24698,24642,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,24682,24701,24726,24730,24749,24733,24707,24722,24716,24731,24812,24763,24753,24797,24792,24774,24794,24756,24864,24870,24853,24867,24820,24832,24846,24875,24906,24949,25004,24980,24999,25015,25044,25077,24541,38579,38377,38379,38385,38387,38389,38390,38396,38398,38403,38404,38406,38408,38410,38411,38412,38413,38415,38418,38421,38422,38423,38425,38426,20012,29247,25109,27701,27732,27740,27722,27811,27781,27792,27796,27788,27752,27753,27764,27766,27782,27817,27856,27860,27821,27895,27896,27889,27863,27826,27872,27862,27898,27883,27886,27825,27859,27887,27902,37544,37545,37546,37547,37548,37549,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,27961,27943,27916,27971,27976,27911,27908,27929,27918,27947,27981,27950,27957,27930,27983,27986,27988,27955,28049,28015,28062,28064,27998,28051,28052,27996,28000,28028,28003,28186,28103,28101,28126,28174,28095,28128,28177,28134,28125,28121,28182,28075,28172,28078,28203,28270,28238,28267,28338,28255,28294,28243,28244,28210,28197,28228,28383,28337,28312,28384,28461,28386,28325,28327,28349,28347,28343,28375,28340,28367,28303,28354,28319,28514,28486,28487,28452,28437,28409,28463,28470,28491,28532,28458,28425,28457,28553,28557,28556,28536,28530,28540,28538,28625,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37695,37696,37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37739,28617,28583,28601,28598,28610,28641,28654,28638,28640,28655,28698,28707,28699,28729,28725,28751,28766,23424,23428,23445,23443,23461,23480,29999,39582,25652,23524,23534,35120,23536,36423,35591,36790,36819,36821,36837,36846,36836,36841,36838,36851,36840,36869,36868,36875,36902,36881,36877,36886,36897,36917,36918,36909,36911,36932,36945,36946,36944,36968,36952,36962,36955,26297,36980,36989,36994,37000,36995,37003,24400,24407,24406,24408,23611,21675,23632,23641,23409,23651,23654,32700,24362,24361,24365,33396,24380,39739,23662,22913,22915,22925,22953,22954,22947,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37835,37836,37837,22935,22986,22955,22942,22948,22994,22962,22959,22999,22974,23045,23046,23005,23048,23011,23000,23033,23052,23049,23090,23092,23057,23075,23059,23104,23143,23114,23125,23100,23138,23157,33004,23210,23195,23159,23162,23230,23275,23218,23250,23252,23224,23264,23267,23281,23254,23270,23256,23260,23305,23319,23318,23346,23351,23360,23573,23580,23386,23397,23411,23377,23379,23394,39541,39543,39544,39546,39551,39549,39552,39553,39557,39560,39562,39568,39570,39571,39574,39576,39579,39580,39581,39583,39584,39586,39587,39589,39591,32415,32417,32419,32421,32424,32425,37838,37839,37840,37841,37842,37843,37844,37845,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,32429,32432,32446,32448,32449,32450,32457,32459,32460,32464,32468,32471,32475,32480,32481,32488,32491,32494,32495,32497,32498,32525,32502,32506,32507,32510,32513,32514,32515,32519,32520,32523,32524,32527,32529,32530,32535,32537,32540,32539,32543,32545,32546,32547,32548,32549,32550,32551,32554,32555,32556,32557,32559,32560,32561,32562,32563,32565,24186,30079,24027,30014,37013,29582,29585,29614,29602,29599,29647,29634,29649,29623,29619,29632,29641,29640,29669,29657,39036,29706,29673,29671,29662,29626,29682,29711,29738,29787,29734,29733,29736,29744,29742,29740,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37996,37997,37998,37999,38000,38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38033,38038,38040,38087,38095,38099,38100,38106,38118,38139,38172,38176,29723,29722,29761,29788,29783,29781,29785,29815,29805,29822,29852,29838,29824,29825,29831,29835,29854,29864,29865,29840,29863,29906,29882,38890,38891,38892,26444,26451,26462,26440,26473,26533,26503,26474,26483,26520,26535,26485,26536,26526,26541,26507,26487,26492,26608,26633,26584,26634,26601,26544,26636,26585,26549,26586,26547,26589,26624,26563,26552,26594,26638,26561,26621,26674,26675,26720,26721,26702,26722,26692,26724,26755,26653,26709,26726,26689,26727,26688,26686,26698,26697,26665,26805,26767,26740,26743,26771,26731,26818,26990,26876,26911,26912,26873,38183,38195,38205,38211,38216,38219,38229,38234,38240,38254,38260,38261,38263,38264,38265,38266,38267,38268,38269,38270,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,26916,26864,26891,26881,26967,26851,26896,26993,26937,26976,26946,26973,27012,26987,27008,27032,27000,26932,27084,27015,27016,27086,27017,26982,26979,27001,27035,27047,27067,27051,27053,27092,27057,27073,27082,27103,27029,27104,27021,27135,27183,27117,27159,27160,27237,27122,27204,27198,27296,27216,27227,27189,27278,27257,27197,27176,27224,27260,27281,27280,27305,27287,27307,29495,29522,27521,27522,27527,27524,27538,27539,27533,27546,27547,27553,27562,36715,36717,36721,36722,36723,36725,36726,36728,36727,36729,36730,36732,36734,36737,36738,36740,36743,36747,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38380,38399,38407,38419,38424,38427,38430,38432,38435,38436,38437,38438,38439,38440,38441,38443,38444,38445,38447,38448,38455,38456,38457,38458,38462,38465,38467,38474,38478,38479,38481,38482,38483,38486,38487,38488,38489,38490,38492,38493,38494,38496,38499,38501,38502,38507,38509,38510,38511,38512,38513,38515,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38535,38537,38538,36749,36750,36751,36760,36762,36558,25099,25111,25115,25119,25122,25121,25125,25124,25132,33255,29935,29940,29951,29967,29969,29971,25908,26094,26095,26096,26122,26137,26482,26115,26133,26112,28805,26359,26141,26164,26161,26166,26165,32774,26207,26196,26177,26191,26198,26209,26199,26231,26244,26252,26279,26269,26302,26331,26332,26342,26345,36146,36147,36150,36155,36157,36160,36165,36166,36168,36169,36167,36173,36181,36185,35271,35274,35275,35276,35278,35279,35280,35281,29294,29343,29277,29286,29295,29310,29311,29316,29323,29325,29327,29330,25352,25394,25520,38540,38542,38545,38546,38547,38549,38550,38554,38555,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38568,38569,38570,38571,38572,38573,38574,38575,38577,38578,38580,38581,38583,38584,38586,38587,38591,38594,38595,38600,38602,38603,38608,38609,38611,38612,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38625,38626,38627,38628,38629,38630,38631,38635,38636,38637,38638,38640,38641,38642,38644,38645,38648,38650,38651,38652,38653,38655,38658,38659,38661,38666,38667,38668,38672,38673,38674,38676,38677,38679,38680,38681,38682,38683,38685,38687,38688,25663,25816,32772,27626,27635,27645,27637,27641,27653,27655,27654,27661,27669,27672,27673,27674,27681,27689,27684,27690,27698,25909,25941,25963,29261,29266,29270,29232,34402,21014,32927,32924,32915,32956,26378,32957,32945,32939,32941,32948,32951,32999,33000,33001,33002,32987,32962,32964,32985,32973,32983,26384,32989,33003,33009,33012,33005,33037,33038,33010,33020,26389,33042,35930,33078,33054,33068,33048,33074,33096,33100,33107,33140,33113,33114,33137,33120,33129,33148,33149,33133,33127,22605,23221,33160,33154,33169,28373,33187,33194,33228,26406,33226,33211,38689,38690,38691,38692,38693,38694,38695,38696,38697,38699,38700,38702,38703,38705,38707,38708,38709,38710,38711,38714,38715,38716,38717,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38740,38741,38743,38744,38746,38748,38749,38751,38755,38756,38758,38759,38760,38762,38763,38764,38765,38766,38767,38768,38769,38770,38773,38775,38776,38777,38778,38779,38781,38782,38783,38784,38785,38786,38787,38788,38790,38791,38792,38793,38794,38796,38798,38799,38800,38803,38805,38806,38807,38809,38810,38811,38812,38813,33217,33190,27428,27447,27449,27459,27462,27481,39121,39122,39123,39125,39129,39130,27571,24384,27586,35315,26000,40785,26003,26044,26054,26052,26051,26060,26062,26066,26070,28800,28828,28822,28829,28859,28864,28855,28843,28849,28904,28874,28944,28947,28950,28975,28977,29043,29020,29032,28997,29042,29002,29048,29050,29080,29107,29109,29096,29088,29152,29140,29159,29177,29213,29224,28780,28952,29030,29113,25150,25149,25155,25160,25161,31035,31040,31046,31049,31067,31068,31059,31066,31074,31063,31072,31087,31079,31098,31109,31114,31130,31143,31155,24529,24528,38814,38815,38817,38818,38820,38821,38822,38823,38824,38825,38826,38828,38830,38832,38833,38835,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38888,38894,38895,38896,38897,38898,38900,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,24636,24669,24666,24679,24641,24665,24675,24747,24838,24845,24925,25001,24989,25035,25041,25094,32896,32895,27795,27894,28156,30710,30712,30720,30729,30743,30744,30737,26027,30765,30748,30749,30777,30778,30779,30751,30780,30757,30764,30755,30761,30798,30829,30806,30807,30758,30800,30791,30796,30826,30875,30867,30874,30855,30876,30881,30883,30898,30905,30885,30932,30937,30921,30956,30962,30981,30964,30995,31012,31006,31028,40859,40697,40699,40700,30449,30468,30477,30457,30471,30472,30490,30498,30489,30509,30502,30517,30520,30544,30545,30535,30531,30554,30568,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,30562,30565,30591,30605,30589,30592,30604,30609,30623,30624,30640,30645,30653,30010,30016,30030,30027,30024,30043,30066,30073,30083,32600,32609,32607,35400,32616,32628,32625,32633,32641,32638,30413,30437,34866,38021,38022,38023,38027,38026,38028,38029,38031,38032,38036,38039,38037,38042,38043,38044,38051,38052,38059,38058,38061,38060,38063,38064,38066,38068,38070,38071,38072,38073,38074,38076,38077,38079,38084,38088,38089,38090,38091,38092,38093,38094,38096,38097,38098,38101,38102,38103,38105,38104,38107,38110,38111,38112,38114,38116,38117,38119,38120,38122,39023,39024,39025,39026,39027,39028,39051,39054,39058,39061,39065,39075,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39119,39120,39124,39126,39127,39131,39132,39133,39136,39137,39138,39139,39140,39141,39142,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,38121,38123,38126,38127,38131,38132,38133,38135,38137,38140,38141,38143,38147,38146,38150,38151,38153,38154,38157,38158,38159,38162,38163,38164,38165,38166,38168,38171,38173,38174,38175,38178,38186,38187,38185,38188,38193,38194,38196,38198,38199,38200,38204,38206,38207,38210,38197,38212,38213,38214,38217,38220,38222,38223,38226,38227,38228,38230,38231,38232,38233,38235,38238,38239,38237,38241,38242,38244,38245,38246,38247,38248,38249,38250,38251,38252,38255,38257,38258,38259,38202,30695,30700,38601,31189,31213,31203,31211,31238,23879,31235,31234,31262,31252,39176,39177,39178,39179,39180,39182,39183,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39215,39216,39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39268,39270,39283,39288,39289,39291,39294,39298,39299,39305,31289,31287,31313,40655,39333,31344,30344,30350,30355,30361,30372,29918,29920,29996,40480,40482,40488,40489,40490,40491,40492,40498,40497,40502,40504,40503,40505,40506,40510,40513,40514,40516,40518,40519,40520,40521,40523,40524,40526,40529,40533,40535,40538,40539,40540,40542,40547,40550,40551,40552,40553,40554,40555,40556,40561,40557,40563,30098,30100,30102,30112,30109,30124,30115,30131,30132,30136,30148,30129,30128,30147,30146,30166,30157,30179,30184,30182,30180,30187,30183,30211,30193,30204,30207,30224,30208,30213,30220,30231,30218,30245,30232,30229,30233,39308,39310,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39334,39335,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,30235,30268,30242,30240,30272,30253,30256,30271,30261,30275,30270,30259,30285,30302,30292,30300,30294,30315,30319,32714,31462,31352,31353,31360,31366,31368,31381,31398,31392,31404,31400,31405,31411,34916,34921,34930,34941,34943,34946,34978,35014,34999,35004,35017,35042,35022,35043,35045,35057,35098,35068,35048,35070,35056,35105,35097,35091,35099,35082,35124,35115,35126,35137,35174,35195,30091,32997,30386,30388,30684,32786,32788,32790,32796,32800,32802,32805,32806,32807,32809,32808,32817,32779,32821,32835,32838,32845,32850,32873,32881,35203,39032,39040,39043,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39049,39052,39053,39055,39060,39066,39067,39070,39071,39073,39074,39077,39078,34381,34388,34412,34414,34431,34426,34428,34427,34472,34445,34443,34476,34461,34471,34467,34474,34451,34473,34486,34500,34485,34510,34480,34490,34481,34479,34505,34511,34484,34537,34545,34546,34541,34547,34512,34579,34526,34548,34527,34520,34513,34563,34567,34552,34568,34570,34573,34569,34595,34619,34590,34597,34606,34586,34622,34632,34612,34609,34601,34615,34623,34690,34594,34685,34686,34683,34656,34672,34636,34670,34699,34643,34659,34684,34660,34649,34661,34707,34735,34728,34770,39514,39515,39516,39517,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39538,39555,39561,39565,39566,39572,39573,39577,39590,39593,39594,39595,39596,39597,39598,39599,39602,39603,39604,39605,39609,39611,39613,39614,39615,39619,39620,39622,39623,39624,39625,39626,39629,39630,39631,39632,39634,39636,39637,39638,39639,39641,39642,39643,39644,39645,39646,39648,39650,39651,39652,39653,39655,39656,39657,39658,39660,39662,39664,39665,39666,39667,39668,39669,39670,39671,39672,39674,39676,39677,39678,39679,39680,39681,39682,39684,39685,39686,34758,34696,34693,34733,34711,34691,34731,34789,34732,34741,34739,34763,34771,34749,34769,34752,34762,34779,34794,34784,34798,34838,34835,34814,34826,34843,34849,34873,34876,32566,32578,32580,32581,33296,31482,31485,31496,31491,31492,31509,31498,31531,31503,31559,31544,31530,31513,31534,31537,31520,31525,31524,31539,31550,31518,31576,31578,31557,31605,31564,31581,31584,31598,31611,31586,31602,31601,31632,31654,31655,31672,31660,31645,31656,31621,31658,31644,31650,31659,31668,31697,31681,31692,31709,31706,31717,31718,31722,31756,31742,31740,31759,31766,31755,39687,39689,39690,39691,39692,39693,39694,39696,39697,39698,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39712,39713,39714,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39728,39729,39731,39732,39733,39734,39735,39736,39737,39738,39741,39742,39743,39744,39750,39754,39755,39756,39758,39760,39762,39763,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,31775,31786,31782,31800,31809,31808,33278,33281,33282,33284,33260,34884,33313,33314,33315,33325,33327,33320,33323,33336,33339,33331,33332,33342,33348,33353,33355,33359,33370,33375,33384,34942,34949,34952,35032,35039,35166,32669,32671,32679,32687,32688,32690,31868,25929,31889,31901,31900,31902,31906,31922,31932,31933,31937,31943,31948,31949,31944,31941,31959,31976,33390,26280,32703,32718,32725,32741,32737,32742,32745,32750,32755,31992,32119,32166,32174,32327,32411,40632,40628,36211,36228,36244,36241,36273,36199,36205,35911,35913,37194,37200,37198,37199,37220,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,37218,37217,37232,37225,37231,37245,37246,37234,37236,37241,37260,37253,37264,37261,37265,37282,37283,37290,37293,37294,37295,37301,37300,37306,35925,40574,36280,36331,36357,36441,36457,36277,36287,36284,36282,36292,36310,36311,36314,36318,36302,36303,36315,36294,36332,36343,36344,36323,36345,36347,36324,36361,36349,36372,36381,36383,36396,36398,36387,36399,36410,36416,36409,36405,36413,36401,36425,36417,36418,36433,36434,36426,36464,36470,36476,36463,36468,36485,36495,36500,36496,36508,36510,35960,35970,35978,35973,35992,35988,26011,35286,35294,35290,35292,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,35301,35307,35311,35390,35622,38739,38633,38643,38639,38662,38657,38664,38671,38670,38698,38701,38704,38718,40832,40835,40837,40838,40839,40840,40841,40842,40844,40702,40715,40717,38585,38588,38589,38606,38610,30655,38624,37518,37550,37576,37694,37738,37834,37775,37950,37995,40063,40066,40069,40070,40071,40072,31267,40075,40078,40080,40081,40082,40084,40085,40090,40091,40094,40095,40096,40097,40098,40099,40101,40102,40103,40104,40105,40107,40109,40110,40112,40113,40114,40115,40116,40117,40118,40119,40122,40123,40124,40125,40132,40133,40134,40135,40138,40139,39996,39997,39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40061,40062,40064,40067,40068,40073,40074,40076,40079,40083,40086,40087,40088,40089,40093,40106,40108,40111,40121,40126,40127,40128,40129,40130,40136,40137,40145,40146,40154,40155,40160,40161,40140,40141,40142,40143,40144,40147,40148,40149,40151,40152,40153,40156,40157,40159,40162,38780,38789,38801,38802,38804,38831,38827,38819,38834,38836,39601,39600,39607,40536,39606,39610,39612,39617,39616,39621,39618,39627,39628,39633,39749,39747,39751,39753,39752,39757,39761,39144,39181,39214,39253,39252,39647,39649,39654,39663,39659,39675,39661,39673,39688,39695,39699,39711,39715,40637,40638,32315,40578,40583,40584,40587,40594,37846,40605,40607,40667,40668,40669,40672,40671,40674,40681,40679,40677,40682,40687,40738,40748,40751,40761,40759,40765,40766,40772,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,57908,57909,57910,57911,57912,57913,57914,57915,57916,57917,57918,57919,57920,57921,57922,57923,57924,57925,57926,57927,57928,57929,57930,57931,57932,57933,57934,57935,57936,57937,57938,57939,57940,57941,57942,57943,57944,57945,57946,57947,57948,57949,57950,57951,57952,57953,57954,57955,57956,57957,57958,57959,57960,57961,57962,57963,57964,57965,57966,57967,57968,57969,57970,57971,57972,57973,57974,57975,57976,57977,57978,57979,57980,57981,57982,57983,57984,57985,57986,57987,57988,57989,57990,57991,57992,57993,57994,57995,57996,57997,57998,57999,58000,58001,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,58002,58003,58004,58005,58006,58007,58008,58009,58010,58011,58012,58013,58014,58015,58016,58017,58018,58019,58020,58021,58022,58023,58024,58025,58026,58027,58028,58029,58030,58031,58032,58033,58034,58035,58036,58037,58038,58039,58040,58041,58042,58043,58044,58045,58046,58047,58048,58049,58050,58051,58052,58053,58054,58055,58056,58057,58058,58059,58060,58061,58062,58063,58064,58065,58066,58067,58068,58069,58070,58071,58072,58073,58074,58075,58076,58077,58078,58079,58080,58081,58082,58083,58084,58085,58086,58087,58088,58089,58090,58091,58092,58093,58094,58095,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432,40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,58096,58097,58098,58099,58100,58101,58102,58103,58104,58105,58106,58107,58108,58109,58110,58111,58112,58113,58114,58115,58116,58117,58118,58119,58120,58121,58122,58123,58124,58125,58126,58127,58128,58129,58130,58131,58132,58133,58134,58135,58136,58137,58138,58139,58140,58141,58142,58143,58144,58145,58146,58147,58148,58149,58150,58151,58152,58153,58154,58155,58156,58157,58158,58159,58160,58161,58162,58163,58164,58165,58166,58167,58168,58169,58170,58171,58172,58173,58174,58175,58176,58177,58178,58179,58180,58181,58182,58183,58184,58185,58186,58187,58188,58189,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40484,40487,40494,40496,40500,40507,40508,40512,40525,40528,40530,40531,40532,40534,40537,40541,40543,40544,40545,40546,40549,40558,40559,40562,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40576,40577,40579,40580,40581,40582,40585,40586,40588,40589,40590,40591,40592,40593,40596,40597,40598,40599,40600,40601,40602,40603,40604,40606,40608,40609,40610,40611,40612,40613,40615,40616,40617,40618,58190,58191,58192,58193,58194,58195,58196,58197,58198,58199,58200,58201,58202,58203,58204,58205,58206,58207,58208,58209,58210,58211,58212,58213,58214,58215,58216,58217,58218,58219,58220,58221,58222,58223,58224,58225,58226,58227,58228,58229,58230,58231,58232,58233,58234,58235,58236,58237,58238,58239,58240,58241,58242,58243,58244,58245,58246,58247,58248,58249,58250,58251,58252,58253,58254,58255,58256,58257,58258,58259,58260,58261,58262,58263,58264,58265,58266,58267,58268,58269,58270,58271,58272,58273,58274,58275,58276,58277,58278,58279,58280,58281,58282,58283,40619,40620,40621,40622,40623,40624,40625,40626,40627,40629,40630,40631,40633,40634,40636,40639,40640,40641,40642,40643,40645,40646,40647,40648,40650,40651,40652,40656,40658,40659,40661,40662,40663,40665,40666,40670,40673,40675,40676,40678,40680,40683,40684,40685,40686,40688,40689,40690,40691,40692,40693,40694,40695,40696,40698,40701,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40716,40719,40721,40722,40724,40725,40726,40728,40730,40731,40732,40733,40734,40735,40737,40739,40740,40741,40742,40743,40744,40745,40746,40747,40749,40750,40752,40753,58284,58285,58286,58287,58288,58289,58290,58291,58292,58293,58294,58295,58296,58297,58298,58299,58300,58301,58302,58303,58304,58305,58306,58307,58308,58309,58310,58311,58312,58313,58314,58315,58316,58317,58318,58319,58320,58321,58322,58323,58324,58325,58326,58327,58328,58329,58330,58331,58332,58333,58334,58335,58336,58337,58338,58339,58340,58341,58342,58343,58344,58345,58346,58347,58348,58349,58350,58351,58352,58353,58354,58355,58356,58357,58358,58359,58360,58361,58362,58363,58364,58365,58366,58367,58368,58369,58370,58371,58372,58373,58374,58375,58376,58377,40754,40755,40756,40757,40758,40760,40762,40764,40767,40768,40769,40770,40771,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40833,40834,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40860,40861,40862,40865,40866,40867,40868,40869,63788,63865,63893,63975,63985,58378,58379,58380,58381,58382,58383,58384,58385,58386,58387,58388,58389,58390,58391,58392,58393,58394,58395,58396,58397,58398,58399,58400,58401,58402,58403,58404,58405,58406,58407,58408,58409,58410,58411,58412,58413,58414,58415,58416,58417,58418,58419,58420,58421,58422,58423,58424,58425,58426,58427,58428,58429,58430,58431,58432,58433,58434,58435,58436,58437,58438,58439,58440,58441,58442,58443,58444,58445,58446,58447,58448,58449,58450,58451,58452,58453,58454,58455,58456,58457,58458,58459,58460,58461,58462,58463,58464,58465,58466,58467,58468,58469,58470,58471,64012,64013,64014,64015,64017,64019,64020,64024,64031,64032,64033,64035,64036,64039,64040,64041,11905,59414,59415,59416,11908,13427,13383,11912,11915,59422,13726,13850,13838,11916,11927,14702,14616,59430,14799,14815,14963,14800,59435,59436,15182,15470,15584,11943,59441,59442,11946,16470,16735,11950,17207,11955,11958,11959,59451,17329,17324,11963,17373,17622,18017,17996,59459,18211,18217,18300,18317,11978,18759,18810,18813,18818,18819,18821,18822,18847,18843,18871,18870,59476,59477,19619,19615,19616,19617,19575,19618,19731,19732,19733,19734,19735,19736,19737,19886,59492,58472,58473,58474,58475,58476,58477,58478,58479,58480,58481,58482,58483,58484,58485,58486,58487,58488,58489,58490,58491,58492,58493,58494,58495,58496,58497,58498,58499,58500,58501,58502,58503,58504,58505,58506,58507,58508,58509,58510,58511,58512,58513,58514,58515,58516,58517,58518,58519,58520,58521,58522,58523,58524,58525,58526,58527,58528,58529,58530,58531,58532,58533,58534,58535,58536,58537,58538,58539,58540,58541,58542,58543,58544,58545,58546,58547,58548,58549,58550,58551,58552,58553,58554,58555,58556,58557,58558,58559,58560,58561,58562,58563,58564,58565]; - const TABLE_RANGES = [0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,39420,189000,1237576]; - const TABLE_OFFSETS = [128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,null,65536,1114112]; +abstract class GBCommon extends AbstractEncoding implements Coder, Decoder { + protected const TABLE_CODES = [19970,19972,19973,19974,19983,19986,19991,19999,20000,20001,20003,20006,20009,20014,20015,20017,20019,20021,20023,20028,20032,20033,20034,20036,20038,20042,20049,20053,20055,20058,20059,20066,20067,20068,20069,20071,20072,20074,20075,20076,20077,20078,20079,20082,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20095,20096,20097,20098,20099,20100,20101,20103,20106,20112,20118,20119,20121,20124,20125,20126,20131,20138,20143,20144,20145,20148,20150,20151,20152,20153,20156,20157,20158,20168,20172,20175,20176,20178,20186,20187,20188,20192,20194,20198,20199,20201,20205,20206,20207,20209,20212,20216,20217,20218,20220,20222,20224,20226,20227,20228,20229,20230,20231,20232,20235,20236,20242,20243,20244,20245,20246,20252,20253,20257,20259,20264,20265,20268,20269,20270,20273,20275,20277,20279,20281,20283,20286,20287,20288,20289,20290,20292,20293,20295,20296,20297,20298,20299,20300,20306,20308,20310,20321,20322,20326,20328,20330,20331,20333,20334,20337,20338,20341,20343,20344,20345,20346,20349,20352,20353,20354,20357,20358,20359,20362,20364,20366,20368,20370,20371,20373,20374,20376,20377,20378,20380,20382,20383,20385,20386,20388,20395,20397,20400,20401,20402,20403,20404,20406,20407,20408,20409,20410,20411,20412,20413,20414,20416,20417,20418,20422,20423,20424,20425,20427,20428,20429,20434,20435,20436,20437,20438,20441,20443,20448,20450,20452,20453,20455,20459,20460,20464,20466,20468,20469,20470,20471,20473,20475,20476,20477,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20494,20496,20497,20499,20501,20502,20503,20507,20509,20510,20512,20514,20515,20516,20519,20523,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20539,20541,20543,20544,20545,20546,20548,20549,20550,20553,20554,20555,20557,20560,20561,20562,20563,20564,20566,20567,20568,20569,20571,20573,20574,20575,20576,20577,20578,20579,20580,20582,20583,20584,20585,20586,20587,20589,20590,20591,20592,20593,20594,20595,20596,20597,20600,20601,20602,20604,20605,20609,20610,20611,20612,20614,20615,20617,20618,20619,20620,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20644,20646,20650,20651,20653,20654,20655,20656,20657,20659,20660,20661,20662,20663,20664,20665,20668,20669,20670,20671,20672,20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20688,20689,20690,20691,20692,20693,20695,20696,20697,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20712,20713,20714,20715,20719,20720,20721,20722,20724,20726,20727,20728,20729,20730,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20744,20745,20746,20748,20749,20750,20751,20752,20753,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20802,20807,20810,20812,20814,20815,20816,20818,20819,20823,20824,20825,20827,20829,20830,20831,20832,20833,20835,20836,20838,20839,20841,20842,20847,20850,20858,20862,20863,20867,20868,20870,20871,20874,20875,20878,20879,20880,20881,20883,20884,20888,20890,20893,20894,20895,20897,20899,20902,20903,20904,20905,20906,20909,20910,20916,20920,20921,20922,20926,20927,20929,20930,20931,20933,20936,20938,20941,20942,20944,20946,20947,20948,20949,20950,20951,20952,20953,20954,20956,20958,20959,20962,20963,20965,20966,20967,20968,20969,20970,20972,20974,20977,20978,20980,20983,20990,20996,20997,21001,21003,21004,21007,21008,21011,21012,21013,21020,21022,21023,21025,21026,21027,21029,21030,21031,21034,21036,21039,21041,21042,21044,21045,21052,21054,21060,21061,21062,21063,21064,21065,21067,21070,21071,21074,21075,21077,21079,21080,21081,21082,21083,21085,21087,21088,21090,21091,21092,21094,21096,21099,21100,21101,21102,21104,21105,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21118,21120,21123,21124,21125,21126,21127,21129,21130,21131,21132,21133,21134,21135,21137,21138,21140,21141,21142,21143,21144,21145,21146,21148,21156,21157,21158,21159,21166,21167,21168,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21184,21185,21186,21188,21189,21190,21192,21194,21196,21197,21198,21199,21201,21203,21204,21205,21207,21209,21210,21211,21212,21213,21214,21216,21217,21218,21219,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21233,21234,21235,21236,21237,21238,21239,21240,21243,21244,21245,21249,21250,21251,21252,21255,21257,21258,21259,21260,21262,21265,21266,21267,21268,21272,21275,21276,21278,21279,21282,21284,21285,21287,21288,21289,21291,21292,21293,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21308,21309,21312,21314,21316,21318,21323,21324,21325,21328,21332,21336,21337,21339,21341,21349,21352,21354,21356,21357,21362,21366,21369,21371,21372,21373,21374,21376,21377,21379,21383,21384,21386,21390,21391,21392,21393,21394,21395,21396,21398,21399,21401,21403,21404,21406,21408,21409,21412,21415,21418,21419,21420,21421,21423,21424,21425,21426,21427,21428,21429,21431,21432,21433,21434,21436,21437,21438,21440,21443,21444,21445,21446,21447,21454,21455,21456,21458,21459,21461,21466,21468,21469,21470,21473,21474,21479,21492,21498,21502,21503,21504,21506,21509,21511,21515,21524,21528,21529,21530,21532,21538,21540,21541,21546,21552,21555,21558,21559,21562,21565,21567,21569,21570,21572,21573,21575,21577,21580,21581,21582,21583,21585,21594,21597,21598,21599,21600,21601,21603,21605,21607,21609,21610,21611,21612,21613,21614,21615,21616,21620,21625,21626,21630,21631,21633,21635,21637,21639,21640,21641,21642,21645,21649,21651,21655,21656,21660,21662,21663,21664,21665,21666,21669,21678,21680,21682,21685,21686,21687,21689,21690,21692,21694,21699,21701,21706,21707,21718,21720,21723,21728,21729,21730,21731,21732,21739,21740,21743,21744,21745,21748,21749,21750,21751,21752,21753,21755,21758,21760,21762,21763,21764,21765,21768,21770,21771,21772,21773,21774,21778,21779,21781,21782,21783,21784,21785,21786,21788,21789,21790,21791,21793,21797,21798,21800,21801,21803,21805,21810,21812,21813,21814,21816,21817,21818,21819,21821,21824,21826,21829,21831,21832,21835,21836,21837,21838,21839,21841,21842,21843,21844,21847,21848,21849,21850,21851,21853,21854,21855,21856,21858,21859,21864,21865,21867,21871,21872,21873,21874,21875,21876,21881,21882,21885,21887,21893,21894,21900,21901,21902,21904,21906,21907,21909,21910,21911,21914,21915,21918,21920,21921,21922,21923,21924,21925,21926,21928,21929,21930,21931,21932,21933,21934,21935,21936,21938,21940,21942,21944,21946,21948,21951,21952,21953,21954,21955,21958,21959,21960,21962,21963,21966,21967,21968,21973,21975,21976,21977,21978,21979,21982,21984,21986,21991,21993,21997,21998,22000,22001,22004,22006,22008,22009,22010,22011,22012,22015,22018,22019,22020,22021,22022,22023,22026,22027,22029,22032,22033,22034,22035,22036,22037,22038,22039,22041,22042,22044,22045,22048,22049,22050,22053,22054,22056,22057,22058,22059,22062,22063,22064,22067,22069,22071,22072,22074,22076,22077,22078,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22095,22096,22097,22098,22099,22101,22102,22106,22107,22109,22110,22111,22112,22113,22115,22117,22118,22119,22125,22126,22127,22128,22130,22131,22132,22133,22135,22136,22137,22138,22141,22142,22143,22144,22145,22146,22147,22148,22151,22152,22153,22154,22155,22156,22157,22160,22161,22162,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22192,22193,22194,22195,22196,22197,22198,22200,22201,22202,22203,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22219,22220,22221,22222,22223,22224,22225,22226,22227,22229,22230,22232,22233,22236,22243,22245,22246,22247,22248,22249,22250,22252,22254,22255,22258,22259,22262,22263,22264,22267,22268,22272,22273,22274,22277,22279,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22301,22302,22304,22305,22306,22308,22309,22310,22311,22315,22321,22322,22324,22325,22326,22327,22328,22332,22333,22335,22337,22339,22340,22341,22342,22344,22345,22347,22354,22355,22356,22357,22358,22360,22361,22370,22371,22373,22375,22380,22382,22384,22385,22386,22388,22389,22392,22393,22394,22397,22398,22399,22400,22401,22407,22408,22409,22410,22413,22414,22415,22416,22417,22420,22421,22422,22423,22424,22425,22426,22428,22429,22430,22431,22437,22440,22442,22444,22447,22448,22449,22451,22453,22454,22455,22457,22458,22459,22460,22461,22462,22463,22464,22465,22468,22469,22470,22471,22472,22473,22474,22476,22477,22480,22481,22483,22486,22487,22491,22492,22494,22497,22498,22499,22501,22502,22503,22504,22505,22506,22507,22508,22510,22512,22513,22514,22515,22517,22518,22519,22523,22524,22526,22527,22529,22531,22532,22533,22536,22537,22538,22540,22542,22543,22544,22546,22547,22548,22550,22551,22552,22554,22555,22556,22557,22559,22562,22563,22565,22566,22567,22568,22569,22571,22572,22573,22574,22575,22577,22578,22579,22580,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22597,22598,22599,22600,22601,22602,22603,22606,22607,22608,22610,22611,22613,22614,22615,22617,22618,22619,22620,22621,22623,22624,22625,22626,22627,22628,22630,22631,22632,22633,22634,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22655,22658,22660,22662,22663,22664,22666,22667,22668,22669,22670,22671,22672,22673,22676,22677,22678,22679,22680,22683,22684,22685,22688,22689,22690,22691,22692,22693,22694,22695,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22717,22718,22719,22720,22722,22723,22724,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22738,22739,22740,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22757,22758,22759,22760,22761,22762,22765,22767,22769,22770,22772,22773,22775,22776,22778,22779,22780,22781,22782,22783,22784,22785,22787,22789,22790,22792,22793,22794,22795,22796,22798,22800,22801,22802,22803,22807,22808,22811,22813,22814,22816,22817,22818,22819,22822,22824,22828,22832,22834,22835,22837,22838,22843,22845,22846,22847,22848,22851,22853,22854,22858,22860,22861,22864,22866,22867,22873,22875,22876,22877,22878,22879,22881,22883,22884,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22901,22903,22906,22907,22908,22910,22911,22912,22917,22921,22923,22924,22926,22927,22928,22929,22932,22933,22936,22938,22939,22940,22941,22943,22944,22945,22946,22950,22951,22956,22957,22960,22961,22963,22964,22965,22966,22967,22968,22970,22972,22973,22975,22976,22977,22978,22979,22980,22981,22983,22984,22985,22988,22989,22990,22991,22997,22998,23001,23003,23006,23007,23008,23009,23010,23012,23014,23015,23017,23018,23019,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23034,23036,23037,23038,23040,23042,23050,23051,23053,23054,23055,23056,23058,23060,23061,23062,23063,23065,23066,23067,23069,23070,23073,23074,23076,23078,23079,23080,23082,23083,23084,23085,23086,23087,23088,23091,23093,23095,23096,23097,23098,23099,23101,23102,23103,23105,23106,23107,23108,23109,23111,23112,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23126,23127,23128,23129,23131,23132,23133,23134,23135,23136,23137,23139,23140,23141,23142,23144,23145,23147,23148,23149,23150,23151,23152,23153,23154,23155,23160,23161,23163,23164,23165,23166,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23187,23188,23189,23190,23191,23192,23193,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23211,23212,23213,23214,23215,23216,23217,23220,23222,23223,23225,23226,23227,23228,23229,23231,23232,23235,23236,23237,23238,23239,23240,23242,23243,23245,23246,23247,23248,23249,23251,23253,23255,23257,23258,23259,23261,23262,23263,23266,23268,23269,23271,23272,23274,23276,23277,23278,23279,23280,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23347,23349,23350,23352,23353,23354,23355,23356,23357,23358,23359,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23378,23382,23390,23392,23393,23399,23400,23403,23405,23406,23407,23410,23412,23414,23415,23416,23417,23419,23420,23422,23423,23426,23430,23434,23437,23438,23440,23441,23442,23444,23446,23455,23463,23464,23465,23468,23469,23470,23471,23473,23474,23479,23482,23483,23484,23488,23489,23491,23496,23497,23498,23499,23501,23502,23503,23505,23508,23509,23510,23511,23512,23513,23514,23515,23516,23520,23522,23523,23526,23527,23529,23530,23531,23532,23533,23535,23537,23538,23539,23540,23541,23542,23543,23549,23550,23552,23554,23555,23557,23559,23560,23563,23564,23565,23566,23568,23570,23571,23575,23577,23579,23582,23583,23584,23585,23587,23590,23592,23593,23594,23595,23597,23598,23599,23600,23602,23603,23605,23606,23607,23619,23620,23622,23623,23628,23629,23634,23635,23636,23638,23639,23640,23642,23643,23644,23645,23647,23650,23652,23655,23656,23657,23658,23659,23660,23661,23664,23666,23667,23668,23669,23670,23671,23672,23675,23676,23677,23678,23680,23683,23684,23685,23686,23687,23689,23690,23691,23694,23695,23698,23699,23701,23709,23710,23711,23712,23713,23716,23717,23718,23719,23720,23722,23726,23727,23728,23730,23732,23734,23737,23738,23739,23740,23742,23744,23746,23747,23749,23750,23751,23752,23753,23754,23756,23757,23758,23759,23760,23761,23763,23764,23765,23766,23767,23768,23770,23771,23772,23773,23774,23775,23776,23778,23779,23783,23785,23787,23788,23790,23791,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23804,23805,23806,23807,23808,23809,23812,23813,23816,23817,23818,23819,23820,23821,23823,23824,23825,23826,23827,23829,23831,23832,23833,23834,23836,23837,23839,23840,23841,23842,23843,23845,23848,23850,23851,23852,23855,23856,23857,23858,23859,23861,23862,23863,23864,23865,23866,23867,23868,23871,23872,23873,23874,23875,23876,23877,23878,23880,23881,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23897,23898,23900,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23914,23917,23918,23920,23921,23922,23923,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23962,23963,23964,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,23999,24000,24001,24002,24003,24004,24006,24007,24008,24009,24010,24011,24012,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24028,24031,24032,24035,24036,24042,24044,24045,24048,24053,24054,24056,24057,24058,24059,24060,24063,24064,24068,24071,24073,24074,24075,24077,24078,24082,24083,24087,24094,24095,24096,24097,24098,24099,24100,24101,24104,24105,24106,24107,24108,24111,24112,24114,24115,24116,24117,24118,24121,24122,24126,24127,24128,24129,24131,24134,24135,24136,24137,24138,24139,24141,24142,24143,24144,24145,24146,24147,24150,24151,24152,24153,24154,24156,24157,24159,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24181,24183,24185,24190,24193,24194,24195,24197,24200,24201,24204,24205,24206,24210,24216,24219,24221,24225,24226,24227,24228,24232,24233,24234,24235,24236,24238,24239,24240,24241,24242,24244,24250,24251,24252,24253,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24267,24268,24269,24270,24271,24272,24276,24277,24279,24280,24281,24282,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24297,24299,24300,24301,24302,24303,24304,24305,24306,24307,24309,24312,24313,24315,24316,24317,24325,24326,24327,24329,24332,24333,24334,24336,24338,24340,24342,24345,24346,24348,24349,24350,24353,24354,24355,24356,24360,24363,24364,24366,24368,24370,24371,24372,24373,24374,24375,24376,24379,24381,24382,24383,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24401,24404,24409,24410,24411,24412,24414,24415,24416,24419,24421,24423,24424,24427,24430,24431,24434,24436,24437,24438,24440,24442,24445,24446,24447,24451,24454,24461,24462,24463,24465,24467,24468,24470,24474,24475,24477,24478,24479,24480,24482,24483,24484,24485,24486,24487,24489,24491,24492,24495,24496,24497,24498,24499,24500,24502,24504,24505,24506,24507,24510,24511,24512,24513,24514,24519,24520,24522,24523,24526,24531,24532,24533,24538,24539,24540,24542,24543,24546,24547,24549,24550,24552,24553,24556,24559,24560,24562,24563,24564,24566,24567,24569,24570,24572,24583,24584,24585,24587,24588,24592,24593,24595,24599,24600,24602,24606,24607,24610,24611,24612,24620,24621,24622,24624,24625,24626,24627,24628,24630,24631,24632,24633,24634,24637,24638,24640,24644,24645,24646,24647,24648,24649,24650,24652,24654,24655,24657,24659,24660,24662,24663,24664,24667,24668,24670,24671,24672,24673,24677,24678,24686,24689,24690,24692,24693,24695,24702,24704,24705,24706,24709,24710,24711,24712,24714,24715,24718,24719,24720,24721,24723,24725,24727,24728,24729,24732,24734,24737,24738,24740,24741,24743,24745,24746,24750,24752,24755,24757,24758,24759,24761,24762,24765,24766,24767,24768,24769,24770,24771,24772,24775,24776,24777,24780,24781,24782,24783,24784,24786,24787,24788,24790,24791,24793,24795,24798,24801,24802,24803,24804,24805,24810,24817,24818,24821,24823,24824,24827,24828,24829,24830,24831,24834,24835,24836,24837,24839,24842,24843,24844,24848,24849,24850,24851,24852,24854,24855,24856,24857,24859,24860,24861,24862,24865,24866,24869,24872,24873,24874,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901,24902,24903,24905,24907,24909,24911,24912,24914,24915,24916,24918,24919,24920,24921,24922,24923,24924,24926,24927,24928,24929,24931,24932,24933,24934,24937,24938,24939,24940,24941,24942,24943,24945,24946,24947,24948,24950,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24972,24973,24975,24976,24977,24978,24979,24981,24982,24983,24984,24985,24986,24987,24988,24990,24991,24992,24993,24994,24995,24996,24997,24998,25002,25003,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25016,25017,25018,25019,25020,25021,25023,25024,25025,25027,25028,25029,25030,25031,25033,25036,25037,25038,25039,25040,25043,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25078,25079,25080,25081,25082,25083,25084,25085,25086,25088,25089,25090,25091,25092,25093,25095,25097,25107,25108,25113,25116,25117,25118,25120,25123,25126,25127,25128,25129,25131,25133,25135,25136,25137,25138,25141,25142,25144,25145,25146,25147,25148,25154,25156,25157,25158,25162,25167,25168,25173,25174,25175,25177,25178,25180,25181,25182,25183,25184,25185,25186,25188,25189,25192,25201,25202,25204,25205,25207,25208,25210,25211,25213,25217,25218,25219,25221,25222,25223,25224,25227,25228,25229,25230,25231,25232,25236,25241,25244,25245,25246,25251,25254,25255,25257,25258,25261,25262,25263,25264,25266,25267,25268,25270,25271,25272,25274,25278,25280,25281,25283,25291,25295,25297,25301,25309,25310,25312,25313,25316,25322,25323,25328,25330,25333,25336,25337,25338,25339,25344,25347,25348,25349,25350,25354,25355,25356,25357,25359,25360,25362,25363,25364,25365,25367,25368,25369,25372,25382,25383,25385,25388,25389,25390,25392,25393,25395,25396,25397,25398,25399,25400,25403,25404,25406,25407,25408,25409,25412,25415,25416,25418,25425,25426,25427,25428,25430,25431,25432,25433,25434,25435,25436,25437,25440,25444,25445,25446,25448,25450,25451,25452,25455,25456,25458,25459,25460,25461,25464,25465,25468,25469,25470,25471,25473,25475,25476,25477,25478,25483,25485,25489,25491,25492,25493,25495,25497,25498,25499,25500,25501,25502,25503,25505,25508,25510,25515,25519,25521,25522,25525,25526,25529,25531,25533,25535,25536,25537,25538,25539,25541,25543,25544,25546,25547,25548,25553,25555,25556,25557,25559,25560,25561,25562,25563,25564,25565,25567,25570,25572,25573,25574,25575,25576,25579,25580,25582,25583,25584,25585,25587,25589,25591,25593,25594,25595,25596,25598,25603,25604,25606,25607,25608,25609,25610,25613,25614,25617,25618,25621,25622,25623,25624,25625,25626,25629,25631,25634,25635,25636,25637,25639,25640,25641,25643,25646,25647,25648,25649,25650,25651,25653,25654,25655,25656,25657,25659,25660,25662,25664,25666,25667,25673,25675,25676,25677,25678,25679,25680,25681,25683,25685,25686,25687,25689,25690,25691,25692,25693,25695,25696,25697,25698,25699,25700,25701,25702,25704,25706,25707,25708,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25723,25724,25725,25726,25727,25728,25729,25731,25734,25736,25737,25738,25739,25740,25741,25742,25743,25744,25747,25748,25751,25752,25754,25755,25756,25757,25759,25760,25761,25762,25763,25765,25766,25767,25768,25770,25771,25775,25777,25778,25779,25780,25782,25785,25787,25789,25790,25791,25793,25795,25796,25798,25799,25800,25801,25802,25803,25804,25807,25809,25811,25812,25813,25814,25817,25818,25819,25820,25821,25823,25824,25825,25827,25829,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25857,25858,25859,25860,25861,25862,25863,25864,25866,25867,25868,25869,25870,25871,25872,25873,25875,25876,25877,25878,25879,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25894,25895,25896,25897,25898,25900,25901,25904,25905,25906,25907,25911,25914,25916,25917,25920,25921,25922,25923,25924,25926,25927,25930,25931,25933,25934,25936,25938,25939,25940,25943,25944,25946,25948,25951,25952,25953,25956,25957,25959,25960,25961,25962,25965,25966,25967,25969,25971,25973,25974,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25992,25993,25994,25997,25998,25999,26002,26004,26005,26006,26008,26010,26013,26014,26016,26018,26019,26022,26024,26026,26028,26030,26033,26034,26035,26036,26037,26038,26039,26040,26042,26043,26046,26047,26048,26050,26055,26056,26057,26058,26061,26064,26065,26067,26068,26069,26072,26073,26074,26075,26076,26077,26078,26079,26081,26083,26084,26090,26091,26098,26099,26100,26101,26104,26105,26107,26108,26109,26110,26111,26113,26116,26117,26119,26120,26121,26123,26125,26128,26129,26130,26134,26135,26136,26138,26139,26140,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26162,26163,26167,26168,26169,26170,26171,26173,26175,26176,26178,26180,26181,26182,26183,26184,26185,26186,26189,26190,26192,26193,26200,26201,26203,26204,26205,26206,26208,26210,26211,26213,26215,26217,26218,26219,26220,26221,26225,26226,26227,26229,26232,26233,26235,26236,26237,26239,26240,26241,26243,26245,26246,26248,26249,26250,26251,26253,26254,26255,26256,26258,26259,26260,26261,26264,26265,26266,26267,26268,26270,26271,26272,26273,26274,26275,26276,26277,26278,26281,26282,26283,26284,26285,26287,26288,26289,26290,26291,26293,26294,26295,26296,26298,26299,26300,26301,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26330,26334,26335,26336,26337,26338,26339,26340,26341,26343,26344,26346,26347,26348,26349,26350,26351,26353,26357,26358,26360,26362,26363,26365,26369,26370,26371,26372,26373,26374,26375,26380,26382,26383,26385,26386,26387,26390,26392,26393,26394,26396,26398,26400,26401,26402,26403,26404,26405,26407,26409,26414,26416,26418,26419,26422,26423,26424,26425,26427,26428,26430,26431,26433,26436,26437,26439,26442,26443,26445,26450,26452,26453,26455,26456,26457,26458,26459,26461,26466,26467,26468,26470,26471,26475,26476,26478,26481,26484,26486,26488,26489,26490,26491,26493,26496,26498,26499,26501,26502,26504,26506,26508,26509,26510,26511,26513,26514,26515,26516,26518,26521,26523,26527,26528,26529,26532,26534,26537,26540,26542,26545,26546,26548,26553,26554,26555,26556,26557,26558,26559,26560,26562,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26581,26582,26583,26587,26591,26593,26595,26596,26598,26599,26600,26602,26603,26605,26606,26610,26613,26614,26615,26616,26617,26618,26619,26620,26622,26625,26626,26627,26628,26630,26637,26640,26642,26644,26645,26648,26649,26650,26651,26652,26654,26655,26656,26658,26659,26660,26661,26662,26663,26664,26667,26668,26669,26670,26671,26672,26673,26676,26677,26678,26682,26683,26687,26695,26699,26701,26703,26706,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26730,26732,26733,26734,26735,26736,26737,26738,26739,26741,26744,26745,26746,26747,26748,26749,26750,26751,26752,26754,26756,26759,26760,26761,26762,26763,26764,26765,26766,26768,26769,26770,26772,26773,26774,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26787,26788,26789,26793,26794,26795,26796,26798,26801,26802,26804,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26817,26819,26820,26821,26822,26823,26824,26826,26828,26830,26831,26832,26833,26835,26836,26838,26839,26841,26843,26844,26845,26846,26847,26849,26850,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26863,26866,26867,26868,26870,26871,26872,26875,26877,26878,26879,26880,26882,26883,26884,26886,26887,26888,26889,26890,26892,26895,26897,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26913,26914,26915,26917,26918,26919,26920,26921,26922,26923,26924,26926,26927,26929,26930,26931,26933,26934,26935,26936,26938,26939,26940,26942,26944,26945,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26965,26966,26968,26969,26971,26972,26975,26977,26978,26980,26981,26983,26984,26985,26986,26988,26989,26991,26992,26994,26995,26996,26997,26998,27002,27003,27005,27006,27007,27009,27011,27013,27018,27019,27020,27022,27023,27024,27025,27026,27027,27030,27031,27033,27034,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27049,27050,27052,27054,27055,27056,27058,27059,27061,27062,27064,27065,27066,27068,27069,27070,27071,27072,27074,27075,27076,27077,27078,27079,27080,27081,27083,27085,27087,27089,27090,27091,27093,27094,27095,27096,27097,27098,27100,27101,27102,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27118,27119,27120,27121,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27134,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27161,27162,27163,27164,27165,27166,27168,27170,27171,27172,27173,27174,27175,27177,27179,27180,27181,27182,27184,27186,27187,27188,27190,27191,27192,27193,27194,27195,27196,27199,27200,27201,27202,27203,27205,27206,27208,27209,27210,27211,27212,27213,27214,27215,27217,27218,27219,27220,27221,27222,27223,27226,27228,27229,27230,27231,27232,27234,27235,27236,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27250,27251,27252,27253,27254,27255,27256,27258,27259,27261,27262,27263,27265,27266,27267,27269,27270,27271,27272,27273,27274,27275,27276,27277,27279,27282,27283,27284,27285,27286,27288,27289,27290,27291,27292,27293,27294,27295,27297,27298,27299,27300,27301,27302,27303,27304,27306,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27429,27430,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27443,27444,27445,27446,27448,27451,27452,27453,27455,27456,27457,27458,27460,27461,27464,27466,27467,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27482,27483,27484,27485,27486,27487,27488,27489,27496,27497,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27514,27517,27518,27519,27520,27525,27528,27532,27534,27535,27536,27537,27540,27541,27543,27544,27545,27548,27549,27550,27551,27552,27554,27555,27556,27557,27558,27559,27560,27561,27563,27564,27565,27566,27567,27568,27569,27570,27574,27576,27577,27578,27579,27580,27581,27582,27584,27587,27588,27590,27591,27592,27593,27594,27596,27598,27600,27601,27608,27610,27612,27613,27614,27615,27616,27618,27619,27620,27621,27622,27623,27624,27625,27628,27629,27630,27632,27633,27634,27636,27638,27639,27640,27642,27643,27644,27646,27647,27648,27649,27650,27651,27652,27656,27657,27658,27659,27660,27662,27666,27671,27676,27677,27678,27680,27683,27685,27691,27692,27693,27697,27699,27702,27703,27705,27706,27707,27708,27710,27711,27715,27716,27717,27720,27723,27724,27725,27726,27727,27729,27730,27731,27734,27736,27737,27738,27746,27747,27749,27750,27751,27755,27756,27757,27758,27759,27761,27763,27765,27767,27768,27770,27771,27772,27775,27776,27780,27783,27786,27787,27789,27790,27793,27794,27797,27798,27799,27800,27802,27804,27805,27806,27808,27810,27816,27820,27823,27824,27828,27829,27830,27831,27834,27840,27841,27842,27843,27846,27847,27848,27851,27853,27854,27855,27857,27858,27864,27865,27866,27868,27869,27871,27876,27878,27879,27881,27884,27885,27890,27892,27897,27903,27904,27906,27907,27909,27910,27912,27913,27914,27917,27919,27920,27921,27923,27924,27925,27926,27928,27932,27933,27935,27936,27937,27938,27939,27940,27942,27944,27945,27948,27949,27951,27952,27956,27958,27959,27960,27962,27967,27968,27970,27972,27977,27980,27984,27989,27990,27991,27992,27995,27997,27999,28001,28002,28004,28005,28007,28008,28011,28012,28013,28016,28017,28018,28019,28021,28022,28025,28026,28027,28029,28030,28031,28032,28033,28035,28036,28038,28039,28042,28043,28045,28047,28048,28050,28054,28055,28056,28057,28058,28060,28066,28069,28076,28077,28080,28081,28083,28084,28086,28087,28089,28090,28091,28092,28093,28094,28097,28098,28099,28104,28105,28106,28109,28110,28111,28112,28114,28115,28116,28117,28119,28122,28123,28124,28127,28130,28131,28133,28135,28136,28137,28138,28141,28143,28144,28146,28148,28149,28150,28152,28154,28157,28158,28159,28160,28161,28162,28163,28164,28166,28167,28168,28169,28171,28175,28178,28179,28181,28184,28185,28187,28188,28190,28191,28194,28198,28199,28200,28202,28204,28206,28208,28209,28211,28213,28214,28215,28217,28219,28220,28221,28222,28223,28224,28225,28226,28229,28230,28231,28232,28233,28234,28235,28236,28239,28240,28241,28242,28245,28247,28249,28250,28252,28253,28254,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28268,28269,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28288,28289,28290,28292,28295,28296,28298,28299,28300,28301,28302,28305,28306,28307,28308,28309,28310,28311,28313,28314,28315,28317,28318,28320,28321,28323,28324,28326,28328,28329,28331,28332,28333,28334,28336,28339,28341,28344,28345,28348,28350,28351,28352,28355,28356,28357,28358,28360,28361,28362,28364,28365,28366,28368,28370,28374,28376,28377,28379,28380,28381,28387,28391,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28405,28406,28407,28408,28410,28411,28412,28413,28414,28415,28416,28417,28419,28420,28421,28423,28424,28426,28427,28428,28429,28430,28432,28433,28434,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28449,28450,28451,28453,28454,28455,28456,28460,28462,28464,28466,28468,28469,28471,28472,28473,28474,28475,28476,28477,28479,28480,28481,28482,28483,28484,28485,28488,28489,28490,28492,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28505,28506,28507,28509,28511,28512,28513,28515,28516,28517,28519,28520,28521,28522,28523,28524,28527,28528,28529,28531,28533,28534,28535,28537,28539,28541,28542,28543,28544,28545,28546,28547,28549,28550,28551,28554,28555,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28573,28574,28575,28576,28578,28579,28580,28581,28582,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28596,28597,28599,28600,28602,28603,28604,28605,28606,28607,28609,28611,28612,28613,28614,28615,28616,28618,28619,28620,28621,28622,28623,28624,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28639,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28690,28691,28692,28693,28694,28695,28696,28697,28700,28701,28702,28703,28704,28705,28706,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28726,28727,28728,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28749,28750,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28782,28785,28786,28787,28788,28791,28793,28794,28795,28797,28801,28802,28803,28804,28806,28807,28808,28811,28812,28813,28815,28816,28817,28819,28823,28824,28826,28827,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28848,28850,28852,28853,28854,28858,28862,28863,28868,28869,28870,28871,28873,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28890,28892,28893,28894,28896,28897,28898,28899,28901,28906,28910,28912,28913,28914,28915,28916,28917,28918,28920,28922,28923,28924,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28939,28940,28941,28942,28943,28945,28946,28948,28951,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28967,28968,28969,28970,28971,28972,28973,28974,28978,28979,28980,28981,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28998,28999,29000,29001,29003,29005,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29021,29023,29024,29025,29026,29027,29029,29033,29034,29035,29036,29037,29039,29040,29041,29044,29045,29046,29047,29049,29051,29052,29054,29055,29056,29057,29058,29059,29061,29062,29063,29064,29065,29067,29068,29069,29070,29072,29073,29074,29075,29077,29078,29079,29082,29083,29084,29085,29086,29089,29090,29091,29092,29093,29094,29095,29097,29098,29099,29101,29102,29103,29104,29105,29106,29108,29110,29111,29112,29114,29115,29116,29117,29118,29119,29120,29121,29122,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29135,29136,29137,29138,29139,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29153,29154,29155,29156,29158,29160,29161,29162,29163,29164,29165,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29178,29179,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29225,29227,29229,29230,29231,29234,29235,29236,29242,29244,29246,29248,29249,29250,29251,29252,29253,29254,29257,29258,29259,29262,29263,29264,29265,29267,29268,29269,29271,29272,29274,29276,29278,29280,29283,29284,29285,29288,29290,29291,29292,29293,29296,29297,29299,29300,29302,29303,29304,29307,29308,29309,29314,29315,29317,29318,29319,29320,29321,29324,29326,29328,29329,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29358,29361,29362,29363,29365,29370,29371,29372,29373,29374,29375,29376,29381,29382,29383,29385,29386,29387,29388,29391,29393,29395,29396,29397,29398,29400,29402,29403,58566,58567,58568,58569,58570,58571,58572,58573,58574,58575,58576,58577,58578,58579,58580,58581,58582,58583,58584,58585,58586,58587,58588,58589,58590,58591,58592,58593,58594,58595,58596,58597,58598,58599,58600,58601,58602,58603,58604,58605,58606,58607,58608,58609,58610,58611,58612,58613,58614,58615,58616,58617,58618,58619,58620,58621,58622,58623,58624,58625,58626,58627,58628,58629,58630,58631,58632,58633,58634,58635,58636,58637,58638,58639,58640,58641,58642,58643,58644,58645,58646,58647,58648,58649,58650,58651,58652,58653,58654,58655,58656,58657,58658,58659,58660,58661,12288,12289,12290,183,713,711,168,12291,12293,8212,65374,8214,8230,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12310,12311,12304,12305,177,215,247,8758,8743,8744,8721,8719,8746,8745,8712,8759,8730,8869,8741,8736,8978,8857,8747,8750,8801,8780,8776,8765,8733,8800,8814,8815,8804,8805,8734,8757,8756,9794,9792,176,8242,8243,8451,65284,164,65504,65505,8240,167,8470,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,8251,8594,8592,8593,8595,12307,58662,58663,58664,58665,58666,58667,58668,58669,58670,58671,58672,58673,58674,58675,58676,58677,58678,58679,58680,58681,58682,58683,58684,58685,58686,58687,58688,58689,58690,58691,58692,58693,58694,58695,58696,58697,58698,58699,58700,58701,58702,58703,58704,58705,58706,58707,58708,58709,58710,58711,58712,58713,58714,58715,58716,58717,58718,58719,58720,58721,58722,58723,58724,58725,58726,58727,58728,58729,58730,58731,58732,58733,58734,58735,58736,58737,58738,58739,58740,58741,58742,58743,58744,58745,58746,58747,58748,58749,58750,58751,58752,58753,58754,58755,58756,58757,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,59238,59239,59240,59241,59242,59243,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,8364,59245,12832,12833,12834,12835,12836,12837,12838,12839,12840,12841,59246,59247,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,59248,59249,58758,58759,58760,58761,58762,58763,58764,58765,58766,58767,58768,58769,58770,58771,58772,58773,58774,58775,58776,58777,58778,58779,58780,58781,58782,58783,58784,58785,58786,58787,58788,58789,58790,58791,58792,58793,58794,58795,58796,58797,58798,58799,58800,58801,58802,58803,58804,58805,58806,58807,58808,58809,58810,58811,58812,58813,58814,58815,58816,58817,58818,58819,58820,58821,58822,58823,58824,58825,58826,58827,58828,58829,58830,58831,58832,58833,58834,58835,58836,58837,58838,58839,58840,58841,58842,58843,58844,58845,58846,58847,58848,58849,58850,58851,58852,12288,65281,65282,65283,65509,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,58854,58855,58856,58857,58858,58859,58860,58861,58862,58863,58864,58865,58866,58867,58868,58869,58870,58871,58872,58873,58874,58875,58876,58877,58878,58879,58880,58881,58882,58883,58884,58885,58886,58887,58888,58889,58890,58891,58892,58893,58894,58895,58896,58897,58898,58899,58900,58901,58902,58903,58904,58905,58906,58907,58908,58909,58910,58911,58912,58913,58914,58915,58916,58917,58918,58919,58920,58921,58922,58923,58924,58925,58926,58927,58928,58929,58930,58931,58932,58933,58934,58935,58936,58937,58938,58939,58940,58941,58942,58943,58944,58945,58946,58947,58948,58949,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,59250,59251,59252,59253,59254,59255,59256,59257,59258,59259,59260,58950,58951,58952,58953,58954,58955,58956,58957,58958,58959,58960,58961,58962,58963,58964,58965,58966,58967,58968,58969,58970,58971,58972,58973,58974,58975,58976,58977,58978,58979,58980,58981,58982,58983,58984,58985,58986,58987,58988,58989,58990,58991,58992,58993,58994,58995,58996,58997,58998,58999,59000,59001,59002,59003,59004,59005,59006,59007,59008,59009,59010,59011,59012,59013,59014,59015,59016,59017,59018,59019,59020,59021,59022,59023,59024,59025,59026,59027,59028,59029,59030,59031,59032,59033,59034,59035,59036,59037,59038,59039,59040,59041,59042,59043,59044,59045,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,59261,59262,59263,59264,59265,59266,59267,59268,59046,59047,59048,59049,59050,59051,59052,59053,59054,59055,59056,59057,59058,59059,59060,59061,59062,59063,59064,59065,59066,59067,59068,59069,59070,59071,59072,59073,59074,59075,59076,59077,59078,59079,59080,59081,59082,59083,59084,59085,59086,59087,59088,59089,59090,59091,59092,59093,59094,59095,59096,59097,59098,59099,59100,59101,59102,59103,59104,59105,59106,59107,59108,59109,59110,59111,59112,59113,59114,59115,59116,59117,59118,59119,59120,59121,59122,59123,59124,59125,59126,59127,59128,59129,59130,59131,59132,59133,59134,59135,59136,59137,59138,59139,59140,59141,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,59269,59270,59271,59272,59273,59274,59275,59276,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,59277,59278,59279,59280,59281,59282,59283,65077,65078,65081,65082,65087,65088,65085,65086,65089,65090,65091,65092,59284,59285,65083,65084,65079,65080,65073,59286,65075,65076,59287,59288,59289,59290,59291,59292,59293,59294,59295,59142,59143,59144,59145,59146,59147,59148,59149,59150,59151,59152,59153,59154,59155,59156,59157,59158,59159,59160,59161,59162,59163,59164,59165,59166,59167,59168,59169,59170,59171,59172,59173,59174,59175,59176,59177,59178,59179,59180,59181,59182,59183,59184,59185,59186,59187,59188,59189,59190,59191,59192,59193,59194,59195,59196,59197,59198,59199,59200,59201,59202,59203,59204,59205,59206,59207,59208,59209,59210,59211,59212,59213,59214,59215,59216,59217,59218,59219,59220,59221,59222,59223,59224,59225,59226,59227,59228,59229,59230,59231,59232,59233,59234,59235,59236,59237,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,59296,59297,59298,59299,59300,59301,59302,59303,59304,59305,59306,59307,59308,59309,59310,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,59311,59312,59313,59314,59315,59316,59317,59318,59319,59320,59321,59322,59323,714,715,729,8211,8213,8229,8245,8453,8457,8598,8599,8600,8601,8725,8735,8739,8786,8806,8807,8895,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9619,9620,9621,9660,9661,9698,9699,9700,9701,9737,8853,12306,12317,12318,59324,59325,59326,59327,59328,59329,59330,59331,59332,59333,59334,257,225,462,224,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,234,593,7743,324,328,505,609,59337,59338,59339,59340,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,59341,59342,59343,59344,59345,59346,59347,59348,59349,59350,59351,59352,59353,59354,59355,59356,59357,59358,59359,59360,59361,12321,12322,12323,12324,12325,12326,12327,12328,12329,12963,13198,13199,13212,13213,13214,13217,13252,13262,13265,13266,13269,65072,65506,65508,59362,8481,12849,59363,8208,59364,59365,59366,12540,12443,12444,12541,12542,12294,12445,12446,65097,65098,65099,65100,65101,65102,65103,65104,65105,65106,65108,65109,65110,65111,65113,65114,65115,65116,65117,65118,65119,65120,65121,65122,65123,65124,65125,65126,65128,65129,65130,65131,12350,12272,12273,12274,12275,12276,12277,12278,12279,12280,12281,12282,12283,12295,59380,59381,59382,59383,59384,59385,59386,59387,59388,59389,59390,59391,59392,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,59393,59394,59395,59396,59397,59398,59399,59400,59401,59402,59403,59404,59405,59406,59407,29404,29405,29407,29410,29411,29412,29413,29414,29415,29418,29419,29429,29430,29433,29437,29438,29439,29440,29442,29444,29445,29446,29447,29448,29449,29451,29452,29453,29455,29456,29457,29458,29460,29464,29465,29466,29471,29472,29475,29476,29478,29479,29480,29485,29487,29488,29490,29491,29493,29494,29498,29499,29500,29501,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29518,29519,29521,29523,29524,29525,29526,29528,29529,29530,29531,29532,29533,29534,29535,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29550,29552,29553,57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359,57360,57361,57362,57363,57364,57365,57366,57367,57368,57369,57370,57371,57372,57373,57374,57375,57376,57377,57378,57379,57380,57381,57382,57383,57384,57385,57386,57387,57388,57389,57390,57391,57392,57393,57394,57395,57396,57397,57398,57399,57400,57401,57402,57403,57404,57405,57406,57407,57408,57409,57410,57411,57412,57413,57414,57415,57416,57417,57418,57419,57420,57421,57422,57423,57424,57425,57426,57427,57428,57429,57430,57431,57432,57433,57434,57435,57436,57437,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29567,29568,29569,29570,29571,29573,29574,29576,29578,29580,29581,29583,29584,29586,29587,29588,29589,29591,29592,29593,29594,29596,29597,29598,29600,29601,29603,29604,29605,29606,29607,29608,29610,29612,29613,29617,29620,29621,29622,29624,29625,29628,29629,29630,29631,29633,29635,29636,29637,29638,29639,29643,29644,29646,29650,29651,29652,29653,29654,29655,29656,29658,29659,29660,29661,29663,29665,29666,29667,29668,29670,29672,29674,29675,29676,29678,29679,29680,29681,29683,29684,29685,29686,29687,57438,57439,57440,57441,57442,57443,57444,57445,57446,57447,57448,57449,57450,57451,57452,57453,57454,57455,57456,57457,57458,57459,57460,57461,57462,57463,57464,57465,57466,57467,57468,57469,57470,57471,57472,57473,57474,57475,57476,57477,57478,57479,57480,57481,57482,57483,57484,57485,57486,57487,57488,57489,57490,57491,57492,57493,57494,57495,57496,57497,57498,57499,57500,57501,57502,57503,57504,57505,57506,57507,57508,57509,57510,57511,57512,57513,57514,57515,57516,57517,57518,57519,57520,57521,57522,57523,57524,57525,57526,57527,57528,57529,57530,57531,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29700,29703,29704,29707,29708,29709,29710,29713,29714,29715,29716,29717,29718,29719,29720,29721,29724,29725,29726,29727,29728,29729,29731,29732,29735,29737,29739,29741,29743,29745,29746,29751,29752,29753,29754,29755,29757,29758,29759,29760,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29782,29784,29789,29792,29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29806,29807,29809,29810,29811,29812,29813,29816,29817,29818,57532,57533,57534,57535,57536,57537,57538,57539,57540,57541,57542,57543,57544,57545,57546,57547,57548,57549,57550,57551,57552,57553,57554,57555,57556,57557,57558,57559,57560,57561,57562,57563,57564,57565,57566,57567,57568,57569,57570,57571,57572,57573,57574,57575,57576,57577,57578,57579,57580,57581,57582,57583,57584,57585,57586,57587,57588,57589,57590,57591,57592,57593,57594,57595,57596,57597,57598,57599,57600,57601,57602,57603,57604,57605,57606,57607,57608,57609,57610,57611,57612,57613,57614,57615,57616,57617,57618,57619,57620,57621,57622,57623,57624,57625,29819,29820,29821,29823,29826,29828,29829,29830,29832,29833,29834,29836,29837,29839,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29853,29855,29856,29857,29858,29859,29860,29861,29862,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29907,29908,29909,29910,29911,29912,29913,29914,29915,29917,29919,29921,29925,29927,29928,29929,29930,29931,29932,29933,29936,29937,29938,57626,57627,57628,57629,57630,57631,57632,57633,57634,57635,57636,57637,57638,57639,57640,57641,57642,57643,57644,57645,57646,57647,57648,57649,57650,57651,57652,57653,57654,57655,57656,57657,57658,57659,57660,57661,57662,57663,57664,57665,57666,57667,57668,57669,57670,57671,57672,57673,57674,57675,57676,57677,57678,57679,57680,57681,57682,57683,57684,57685,57686,57687,57688,57689,57690,57691,57692,57693,57694,57695,57696,57697,57698,57699,57700,57701,57702,57703,57704,57705,57706,57707,57708,57709,57710,57711,57712,57713,57714,57715,57716,57717,57718,57719,29939,29941,29944,29945,29946,29947,29948,29949,29950,29952,29953,29954,29955,29957,29958,29959,29960,29961,29962,29963,29964,29966,29968,29970,29972,29973,29974,29975,29979,29981,29982,29984,29985,29986,29987,29988,29990,29991,29994,29998,30004,30006,30009,30012,30013,30015,30017,30018,30019,30020,30022,30023,30025,30026,30029,30032,30033,30034,30035,30037,30038,30039,30040,30045,30046,30047,30048,30049,30050,30051,30052,30055,30056,30057,30059,30060,30061,30062,30063,30064,30065,30067,30069,30070,30071,30074,30075,30076,30077,30078,30080,30081,30082,30084,30085,30087,57720,57721,57722,57723,57724,57725,57726,57727,57728,57729,57730,57731,57732,57733,57734,57735,57736,57737,57738,57739,57740,57741,57742,57743,57744,57745,57746,57747,57748,57749,57750,57751,57752,57753,57754,57755,57756,57757,57758,57759,57760,57761,57762,57763,57764,57765,57766,57767,57768,57769,57770,57771,57772,57773,57774,57775,57776,57777,57778,57779,57780,57781,57782,57783,57784,57785,57786,57787,57788,57789,57790,57791,57792,57793,57794,57795,57796,57797,57798,57799,57800,57801,57802,57803,57804,57805,57806,57807,57808,57809,57810,57811,57812,57813,30088,30089,30090,30092,30093,30094,30096,30099,30101,30104,30107,30108,30110,30114,30118,30119,30120,30121,30122,30125,30134,30135,30138,30139,30143,30144,30145,30150,30155,30156,30158,30159,30160,30161,30163,30167,30169,30170,30172,30173,30175,30176,30177,30181,30185,30188,30189,30190,30191,30194,30195,30197,30198,30199,30200,30202,30203,30205,30206,30210,30212,30214,30215,30216,30217,30219,30221,30222,30223,30225,30226,30227,30228,30230,30234,30236,30237,30238,30241,30243,30247,30248,30252,30254,30255,30257,30258,30262,30263,30265,30266,30267,30269,30273,30274,30276,57814,57815,57816,57817,57818,57819,57820,57821,57822,57823,57824,57825,57826,57827,57828,57829,57830,57831,57832,57833,57834,57835,57836,57837,57838,57839,57840,57841,57842,57843,57844,57845,57846,57847,57848,57849,57850,57851,57852,57853,57854,57855,57856,57857,57858,57859,57860,57861,57862,57863,57864,57865,57866,57867,57868,57869,57870,57871,57872,57873,57874,57875,57876,57877,57878,57879,57880,57881,57882,57883,57884,57885,57886,57887,57888,57889,57890,57891,57892,57893,57894,57895,57896,57897,57898,57899,57900,57901,57902,57903,57904,57905,57906,57907,30277,30278,30279,30280,30281,30282,30283,30286,30287,30288,30289,30290,30291,30293,30295,30296,30297,30298,30299,30301,30303,30304,30305,30306,30308,30309,30310,30311,30312,30313,30314,30316,30317,30318,30320,30321,30322,30323,30324,30325,30326,30327,30329,30330,30332,30335,30336,30337,30339,30341,30345,30346,30348,30349,30351,30352,30354,30356,30357,30359,30360,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30373,30374,30375,30376,30377,30378,30379,30380,30381,30383,30384,30387,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30400,30401,30403,21834,38463,22467,25384,21710,21769,21696,30353,30284,34108,30702,33406,30861,29233,38552,38797,27688,23433,20474,25353,26263,23736,33018,26696,32942,26114,30414,20985,25942,29100,32753,34948,20658,22885,25034,28595,33453,25420,25170,21485,21543,31494,20843,30116,24052,25300,36299,38774,25226,32793,22365,38712,32610,29240,30333,26575,30334,25670,20336,36133,25308,31255,26001,29677,25644,25203,33324,39041,26495,29256,25198,25292,20276,29923,21322,21150,32458,37030,24110,26758,27036,33152,32465,26834,30917,34444,38225,20621,35876,33502,32990,21253,35090,21093,30404,30407,30409,30411,30412,30419,30421,30425,30426,30428,30429,30430,30432,30433,30434,30435,30436,30438,30439,30440,30441,30442,30443,30444,30445,30448,30451,30453,30454,30455,30458,30459,30461,30463,30464,30466,30467,30469,30470,30474,30476,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30491,30492,30493,30494,30497,30499,30500,30501,30503,30506,30507,30508,30510,30512,30513,30514,30515,30516,30521,30523,30525,30526,30527,30530,30532,30533,30534,30536,30537,30538,30539,30540,30541,30542,30543,30546,30547,30548,30549,30550,30551,30552,30553,30556,34180,38649,20445,22561,39281,23453,25265,25253,26292,35961,40077,29190,26479,30865,24754,21329,21271,36744,32972,36125,38049,20493,29384,22791,24811,28953,34987,22868,33519,26412,31528,23849,32503,29997,27893,36454,36856,36924,40763,27604,37145,31508,24444,30887,34006,34109,27605,27609,27606,24065,24199,30201,38381,25949,24330,24517,36767,22721,33218,36991,38491,38829,36793,32534,36140,25153,20415,21464,21342,36776,36777,36779,36941,26631,24426,33176,34920,40150,24971,21035,30250,24428,25996,28626,28392,23486,25672,20853,20912,26564,19993,31177,39292,28851,30557,30558,30559,30560,30564,30567,30569,30570,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30586,30587,30588,30593,30594,30595,30598,30599,30600,30601,30602,30603,30607,30608,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30625,30627,30628,30630,30632,30635,30637,30638,30639,30641,30642,30644,30646,30647,30648,30649,30650,30652,30654,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30670,30671,30672,30673,30674,30675,30676,30677,30678,30680,30681,30682,30685,30686,30687,30688,30689,30692,30149,24182,29627,33760,25773,25320,38069,27874,21338,21187,25615,38082,31636,20271,24091,33334,33046,33162,28196,27850,39539,25429,21340,21754,34917,22496,19981,24067,27493,31807,37096,24598,25830,29468,35009,26448,25165,36130,30572,36393,37319,24425,33756,34081,39184,21442,34453,27531,24813,24808,28799,33485,33329,20179,27815,34255,25805,31961,27133,26361,33609,21397,31574,20391,20876,27979,23618,36461,25554,21449,33580,33590,26597,30900,25661,23519,23700,24046,35815,25286,26612,35962,25600,25530,34633,39307,35863,32544,38130,20135,38416,39076,26124,29462,30694,30696,30698,30703,30704,30705,30706,30708,30709,30711,30713,30714,30715,30716,30723,30724,30725,30726,30727,30728,30730,30731,30734,30735,30736,30739,30741,30745,30747,30750,30752,30753,30754,30756,30760,30762,30763,30766,30767,30769,30770,30771,30773,30774,30781,30783,30785,30786,30787,30788,30790,30792,30793,30794,30795,30797,30799,30801,30803,30804,30808,30809,30810,30811,30812,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30831,30832,30833,30834,30835,30836,30837,30838,30840,30841,30842,30843,30845,30846,30847,30848,30849,30850,30851,22330,23581,24120,38271,20607,32928,21378,25950,30021,21809,20513,36229,25220,38046,26397,22066,28526,24034,21557,28818,36710,25199,25764,25507,24443,28552,37108,33251,36784,23576,26216,24561,27785,38472,36225,34924,25745,31216,22478,27225,25104,21576,20056,31243,24809,28548,35802,25215,36894,39563,31204,21507,30196,25345,21273,27744,36831,24347,39536,32827,40831,20360,23610,36196,32709,26021,28861,20805,20914,34411,23815,23456,25277,37228,30068,36364,31264,24833,31609,20167,32504,30597,19985,33261,21021,20986,27249,21416,36487,38148,38607,28353,38500,26970,30852,30853,30854,30856,30858,30859,30863,30864,30866,30868,30869,30870,30873,30877,30878,30880,30882,30884,30886,30888,30889,30890,30891,30892,30893,30894,30895,30901,30902,30903,30904,30906,30907,30908,30909,30911,30912,30914,30915,30916,30918,30919,30920,30924,30925,30926,30927,30929,30930,30931,30934,30935,30936,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30953,30954,30955,30957,30958,30959,30960,30961,30963,30965,30966,30968,30969,30971,30972,30973,30974,30975,30976,30978,30979,30980,30982,30983,30984,30985,30986,30987,30988,30784,20648,30679,25616,35302,22788,25571,24029,31359,26941,20256,33337,21912,20018,30126,31383,24162,24202,38383,21019,21561,28810,25462,38180,22402,26149,26943,37255,21767,28147,32431,34850,25139,32496,30133,33576,30913,38604,36766,24904,29943,35789,27492,21050,36176,27425,32874,33905,22257,21254,20174,19995,20945,31895,37259,31751,20419,36479,31713,31388,25703,23828,20652,33030,30209,31929,28140,32736,26449,23384,23544,30923,25774,25619,25514,25387,38169,25645,36798,31572,30249,25171,22823,21574,27513,20643,25140,24102,27526,20195,36151,34955,24453,36910,30989,30990,30991,30992,30993,30994,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31007,31008,31009,31010,31011,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31029,31030,31031,31032,31033,31037,31039,31042,31043,31044,31045,31047,31050,31051,31052,31053,31054,31055,31056,31057,31058,31060,31061,31064,31065,31073,31075,31076,31078,31081,31082,31083,31084,31086,31088,31089,31090,31091,31092,31093,31094,31097,31099,31100,31101,31102,31103,31106,31107,31110,31111,31112,31113,31115,31116,31117,31118,31120,31121,31122,24608,32829,25285,20025,21333,37112,25528,32966,26086,27694,20294,24814,28129,35806,24377,34507,24403,25377,20826,33633,26723,20992,25443,36424,20498,23707,31095,23548,21040,31291,24764,36947,30423,24503,24471,30340,36460,28783,30331,31561,30634,20979,37011,22564,20302,28404,36842,25932,31515,29380,28068,32735,23265,25269,24213,22320,33922,31532,24093,24351,36882,32532,39072,25474,28359,30872,28857,20856,38747,22443,30005,20291,30008,24215,24806,22880,28096,27583,30857,21500,38613,20939,20993,25481,21514,38035,35843,36300,29241,30879,34678,36845,35853,21472,31123,31124,31125,31126,31127,31128,31129,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31156,31157,31158,31159,31160,31164,31167,31170,31172,31173,31175,31176,31178,31180,31182,31183,31184,31187,31188,31190,31191,31193,31194,31195,31196,31197,31198,31200,31201,31202,31205,31208,31210,31212,31214,31217,31218,31219,31220,31221,31222,31223,31225,31226,31228,31230,31231,31233,31236,31237,31239,31240,31241,31242,31244,31247,31248,31249,31250,31251,31253,31254,31256,31257,31259,31260,19969,30447,21486,38025,39030,40718,38189,23450,35746,20002,19996,20908,33891,25026,21160,26635,20375,24683,20923,27934,20828,25238,26007,38497,35910,36887,30168,37117,30563,27602,29322,29420,35835,22581,30585,36172,26460,38208,32922,24230,28193,22930,31471,30701,38203,27573,26029,32526,22534,20817,38431,23545,22697,21544,36466,25958,39039,22244,38045,30462,36929,25479,21702,22810,22842,22427,36530,26421,36346,33333,21057,24816,22549,34558,23784,40517,20420,39069,35769,23077,24694,21380,25212,36943,37122,39295,24681,32780,20799,32819,23572,39285,27953,20108,31261,31263,31265,31266,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31284,31285,31286,31288,31290,31294,31296,31297,31298,31299,31300,31301,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312,31314,31315,31316,31317,31318,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31345,31346,31347,31349,31355,31356,31357,31358,31362,31365,31367,31369,31370,31371,31372,31374,31375,31376,31379,31380,31385,31386,31387,31390,31393,31394,36144,21457,32602,31567,20240,20047,38400,27861,29648,34281,24070,30058,32763,27146,30718,38034,32321,20961,28902,21453,36820,33539,36137,29359,39277,27867,22346,33459,26041,32938,25151,38450,22952,20223,35775,32442,25918,33778,38750,21857,39134,32933,21290,35837,21536,32954,24223,27832,36153,33452,37210,21545,27675,20998,32439,22367,28954,27774,31881,22859,20221,24575,24868,31914,20016,23553,26539,34562,23792,38155,39118,30127,28925,36898,20911,32541,35773,22857,20964,20315,21542,22827,25975,32932,23413,25206,25282,36752,24133,27679,31526,20239,20440,26381,31395,31396,31399,31401,31402,31403,31406,31407,31408,31409,31410,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31447,31448,31450,31451,31452,31453,31457,31458,31460,31463,31464,31465,31466,31467,31468,31470,31472,31473,31474,31475,31476,31477,31478,31479,31480,31483,31484,31486,31488,31489,31490,31493,31495,31497,31500,31501,31502,31504,31506,31507,31510,31511,31512,31514,31516,31517,31519,31521,31522,31523,31527,31529,31533,28014,28074,31119,34993,24343,29995,25242,36741,20463,37340,26023,33071,33105,24220,33104,36212,21103,35206,36171,22797,20613,20184,38428,29238,33145,36127,23500,35747,38468,22919,32538,21648,22134,22030,35813,25913,27010,38041,30422,28297,24178,29976,26438,26577,31487,32925,36214,24863,31174,25954,36195,20872,21018,38050,32568,32923,32434,23703,28207,26464,31705,30347,39640,33167,32660,31957,25630,38224,31295,21578,21733,27468,25601,25096,40509,33011,30105,21106,38761,33883,26684,34532,38401,38548,38124,20010,21508,32473,26681,36319,32789,26356,24218,32697,31535,31536,31538,31540,31541,31542,31543,31545,31547,31549,31551,31552,31553,31554,31555,31556,31558,31560,31562,31565,31566,31571,31573,31575,31577,31580,31582,31583,31585,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31599,31600,31603,31604,31606,31608,31610,31612,31613,31615,31617,31618,31619,31620,31622,31623,31624,31625,31626,31627,31628,31630,31631,31633,31634,31635,31638,31640,31641,31642,31643,31646,31647,31648,31651,31652,31653,31662,31663,31664,31666,31667,31669,31670,31671,31673,31674,31675,31676,31677,31678,31679,31680,31682,31683,31684,22466,32831,26775,24037,25915,21151,24685,40858,20379,36524,20844,23467,24339,24041,27742,25329,36129,20849,38057,21246,27807,33503,29399,22434,26500,36141,22815,36764,33735,21653,31629,20272,27837,23396,22993,40723,21476,34506,39592,35895,32929,25925,39038,22266,38599,21038,29916,21072,23521,25346,35074,20054,25296,24618,26874,20851,23448,20896,35266,31649,39302,32592,24815,28748,36143,20809,24191,36891,29808,35268,22317,30789,24402,40863,38394,36712,39740,35809,30328,26690,26588,36330,36149,21053,36746,28378,26829,38149,37101,22269,26524,35065,36807,21704,31685,31688,31689,31690,31691,31693,31694,31695,31696,31698,31700,31701,31702,31703,31704,31707,31708,31710,31711,31712,31714,31715,31716,31719,31720,31721,31723,31724,31725,31727,31728,31730,31731,31732,31733,31734,31736,31737,31738,31739,31741,31743,31744,31745,31746,31747,31748,31749,31750,31752,31753,31754,31757,31758,31760,31761,31762,31763,31764,31765,31767,31768,31769,31770,31771,31772,31773,31774,31776,31777,31778,31779,31780,31781,31784,31785,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31801,31802,31803,31804,31805,31806,31810,39608,23401,28023,27686,20133,23475,39559,37219,25000,37039,38889,21547,28085,23506,20989,21898,32597,32752,25788,25421,26097,25022,24717,28938,27735,27721,22831,26477,33322,22741,22158,35946,27627,37085,22909,32791,21495,28009,21621,21917,33655,33743,26680,31166,21644,20309,21512,30418,35977,38402,27827,28088,36203,35088,40548,36154,22079,40657,30165,24456,29408,24680,21756,20136,27178,34913,24658,36720,21700,28888,34425,40511,27946,23439,24344,32418,21897,20399,29492,21564,21402,20505,21518,21628,20046,24573,29786,22774,33899,32993,34676,29392,31946,28246,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31861,31862,31863,31864,31865,31866,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31882,31883,31884,31885,31886,31887,31888,31891,31892,31894,31897,31898,31899,31904,31905,31907,31910,31911,31912,31913,31915,31916,31917,31919,31920,31924,31925,31926,31927,31928,31930,31931,24359,34382,21804,25252,20114,27818,25143,33457,21719,21326,29502,28369,30011,21010,21270,35805,27088,24458,24576,28142,22351,27426,29615,26707,36824,32531,25442,24739,21796,30186,35938,28949,28067,23462,24187,33618,24908,40644,30970,34647,31783,30343,20976,24822,29004,26179,24140,24653,35854,28784,25381,36745,24509,24674,34516,22238,27585,24724,24935,21321,24800,26214,36159,31229,20250,28905,27719,35763,35826,32472,33636,26127,23130,39746,27985,28151,35905,27963,20249,28779,33719,25110,24785,38669,36135,31096,20987,22334,22522,26426,30072,31293,31215,31637,31935,31936,31938,31939,31940,31942,31945,31947,31950,31951,31952,31953,31954,31955,31956,31960,31962,31963,31965,31966,31969,31970,31971,31972,31973,31974,31975,31977,31978,31979,31980,31981,31982,31984,31985,31986,31987,31988,31989,31990,31991,31993,31994,31996,31997,31998,31999,32000,32001,32002,32003,32004,32005,32006,32007,32008,32009,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32033,32035,32036,32037,32038,32040,32041,32042,32044,32045,32046,32048,32049,32050,32051,32052,32053,32054,32908,39269,36857,28608,35749,40481,23020,32489,32521,21513,26497,26840,36753,31821,38598,21450,24613,30142,27762,21363,23241,32423,25380,20960,33034,24049,34015,25216,20864,23395,20238,31085,21058,24760,27982,23492,23490,35745,35760,26082,24524,38469,22931,32487,32426,22025,26551,22841,20339,23478,21152,33626,39050,36158,30002,38078,20551,31292,20215,26550,39550,23233,27516,30417,22362,23574,31546,38388,29006,20860,32937,33392,22904,32516,33575,26816,26604,30897,30839,25315,25441,31616,20461,21098,20943,33616,27099,37492,36341,36145,35265,38190,31661,20214,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32111,32112,32113,32114,32115,32116,32117,32118,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,20581,33328,21073,39279,28176,28293,28071,24314,20725,23004,23558,27974,27743,30086,33931,26728,22870,35762,21280,37233,38477,34121,26898,30977,28966,33014,20132,37066,27975,39556,23047,22204,25605,38128,30699,20389,33050,29409,35282,39290,32564,32478,21119,25945,37237,36735,36739,21483,31382,25581,25509,30342,31224,34903,38454,25130,21163,33410,26708,26480,25463,30571,31469,27905,32467,35299,22992,25106,34249,33445,30028,20511,20171,30117,35819,23626,24062,31563,26020,37329,20170,27941,35167,32039,38182,20165,35880,36827,38771,26187,31105,36817,28908,28024,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32167,32168,32169,32170,32171,32172,32173,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,23613,21170,33606,20834,33550,30555,26230,40120,20140,24778,31934,31923,32463,20117,35686,26223,39048,38745,22659,25964,38236,24452,30153,38742,31455,31454,20928,28847,31384,25578,31350,32416,29590,38893,20037,28792,20061,37202,21417,25937,26087,33276,33285,21646,23601,30106,38816,25304,29401,30141,23621,39545,33738,23616,21632,30697,20030,27822,32858,25298,25454,24040,20855,36317,36382,38191,20465,21477,24807,28844,21095,25424,40515,23071,20518,30519,21367,32482,25733,25899,25225,25496,20500,29237,35273,20915,35776,32477,22343,33740,38055,20891,21531,23803,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32316,32317,32318,32319,32320,32322,32323,32324,32325,32326,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,20426,31459,27994,37089,39567,21888,21654,21345,21679,24320,25577,26999,20975,24936,21002,22570,21208,22350,30733,30475,24247,24951,31968,25179,25239,20130,28821,32771,25335,28900,38752,22391,33499,26607,26869,30933,39063,31185,22771,21683,21487,28212,20811,21051,23458,35838,32943,21827,22438,24691,22353,21549,31354,24656,23380,25511,25248,21475,25187,23495,26543,21741,31391,33510,37239,24211,35044,22840,22446,25358,36328,33007,22359,31607,20393,24555,23485,27454,21281,31568,29378,26694,30719,30518,26103,20917,20111,30420,23743,31397,33909,22862,39745,20608,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32412,32413,32414,32430,32436,32443,32444,32470,32484,32492,32505,32522,32528,32542,32567,32569,32571,32572,32573,32574,32575,32576,32577,32579,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32594,32595,39304,24871,28291,22372,26118,25414,22256,25324,25193,24275,38420,22403,25289,21895,34593,33098,36771,21862,33713,26469,36182,34013,23146,26639,25318,31726,38417,20848,28572,35888,25597,35272,25042,32518,28866,28389,29701,27028,29436,24266,37070,26391,28010,25438,21171,29282,32769,20332,23013,37226,28889,28061,21202,20048,38647,38253,34174,30922,32047,20769,22418,25794,32907,31867,27882,26865,26974,20919,21400,26792,29313,40654,31729,29432,31163,28435,29702,26446,37324,40100,31036,33673,33620,21519,26647,20029,21385,21169,30782,21382,21033,20616,20363,20432,32598,32601,32603,32604,32605,32606,32608,32611,32612,32613,32614,32615,32619,32620,32621,32623,32624,32627,32629,32630,32631,32632,32634,32635,32636,32637,32639,32640,32642,32643,32644,32645,32646,32647,32648,32649,32651,32653,32655,32656,32657,32658,32659,32661,32662,32663,32664,32665,32667,32668,32672,32674,32675,32677,32678,32680,32681,32682,32683,32684,32685,32686,32689,32691,32692,32693,32694,32695,32698,32699,32702,32704,32706,32707,32708,32710,32711,32712,32713,32715,32717,32719,32720,32721,32722,32723,32726,32727,32729,32730,32731,32732,32733,32734,32738,32739,30178,31435,31890,27813,38582,21147,29827,21737,20457,32852,33714,36830,38256,24265,24604,28063,24088,25947,33080,38142,24651,28860,32451,31918,20937,26753,31921,33391,20004,36742,37327,26238,20142,35845,25769,32842,20698,30103,29134,23525,36797,28518,20102,25730,38243,24278,26009,21015,35010,28872,21155,29454,29747,26519,30967,38678,20020,37051,40158,28107,20955,36161,21533,25294,29618,33777,38646,40836,38083,20278,32666,20940,28789,38517,23725,39046,21478,20196,28316,29705,27060,30827,39311,30041,21016,30244,27969,26611,20845,40857,32843,21657,31548,31423,32740,32743,32744,32746,32747,32748,32749,32751,32754,32756,32757,32758,32759,32760,32761,32762,32765,32766,32767,32770,32775,32776,32777,32778,32782,32783,32785,32787,32794,32795,32797,32798,32799,32801,32803,32804,32811,32812,32813,32814,32815,32816,32818,32820,32825,32826,32828,32830,32832,32833,32836,32837,32839,32840,32841,32846,32847,32848,32849,32851,32853,32854,32855,32857,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32875,32876,32877,32878,32879,32880,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,38534,22404,25314,38471,27004,23044,25602,31699,28431,38475,33446,21346,39045,24208,28809,25523,21348,34383,40065,40595,30860,38706,36335,36162,40575,28510,31108,24405,38470,25134,39540,21525,38109,20387,26053,23653,23649,32533,34385,27695,24459,29575,28388,32511,23782,25371,23402,28390,21365,20081,25504,30053,25249,36718,20262,20177,27814,32438,35770,33821,34746,32599,36923,38179,31657,39585,35064,33853,27931,39558,32476,22920,40635,29595,30721,34434,39532,39554,22043,21527,22475,20080,40614,21334,36808,33033,30610,39314,34542,28385,34067,26364,24930,28459,32894,32897,32898,32901,32904,32906,32909,32910,32911,32912,32913,32914,32916,32917,32919,32921,32926,32931,32934,32935,32936,32940,32944,32947,32949,32950,32952,32953,32955,32965,32967,32968,32969,32970,32971,32975,32976,32977,32978,32979,32980,32981,32984,32991,32992,32994,32995,32998,33006,33013,33015,33017,33019,33022,33023,33024,33025,33027,33028,33029,33031,33032,33035,33036,33045,33047,33049,33051,33052,33053,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33069,33070,33072,33075,33076,33077,33079,33081,33082,33083,33084,33085,33087,35881,33426,33579,30450,27667,24537,33725,29483,33541,38170,27611,30683,38086,21359,33538,20882,24125,35980,36152,20040,29611,26522,26757,37238,38665,29028,27809,30473,23186,38209,27599,32654,26151,23504,22969,23194,38376,38391,20204,33804,33945,27308,30431,38192,29467,26790,23391,30511,37274,38753,31964,36855,35868,24357,31859,31192,35269,27852,34588,23494,24130,26825,30496,32501,20885,20813,21193,23081,32517,38754,33495,25551,30596,34256,31186,28218,24217,22937,34065,28781,27665,25279,30399,25935,24751,38397,26126,34719,40483,38125,21517,21629,35884,25720,33088,33089,33090,33091,33092,33093,33095,33097,33101,33102,33103,33106,33110,33111,33112,33115,33116,33117,33118,33119,33121,33122,33123,33124,33126,33128,33130,33131,33132,33135,33138,33139,33141,33142,33143,33144,33153,33155,33156,33157,33158,33159,33161,33163,33164,33165,33166,33168,33170,33171,33172,33173,33174,33175,33177,33178,33182,33183,33184,33185,33186,33188,33189,33191,33193,33195,33196,33197,33198,33199,33200,33201,33202,33204,33205,33206,33207,33208,33209,33212,33213,33214,33215,33220,33221,33223,33224,33225,33227,33229,33230,33231,33232,33233,33234,33235,25721,34321,27169,33180,30952,25705,39764,25273,26411,33707,22696,40664,27819,28448,23518,38476,35851,29279,26576,25287,29281,20137,22982,27597,22675,26286,24149,21215,24917,26408,30446,30566,29287,31302,25343,21738,21584,38048,37027,23068,32435,27670,20035,22902,32784,22856,21335,30007,38590,22218,25376,33041,24700,38393,28118,21602,39297,20869,23273,33021,22958,38675,20522,27877,23612,25311,20320,21311,33147,36870,28346,34091,25288,24180,30910,25781,25467,24565,23064,37247,40479,23615,25423,32834,23421,21870,38218,38221,28037,24744,26592,29406,20957,23425,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33252,33253,33254,33256,33257,33259,33262,33263,33264,33265,33266,33269,33270,33271,33272,33273,33274,33277,33279,33283,33287,33288,33289,33290,33291,33294,33295,33297,33299,33301,33302,33303,33304,33305,33306,33309,33312,33316,33317,33318,33319,33321,33326,33330,33338,33340,33341,33343,33344,33345,33346,33347,33349,33350,33352,33354,33356,33357,33358,33360,33361,33362,33363,33364,33365,33366,33367,33369,33371,33372,33373,33374,33376,33377,33378,33379,33380,33381,33382,33383,33385,25319,27870,29275,25197,38062,32445,33043,27987,20892,24324,22900,21162,24594,22899,26262,34384,30111,25386,25062,31983,35834,21734,27431,40485,27572,34261,21589,20598,27812,21866,36276,29228,24085,24597,29750,25293,25490,29260,24472,28227,27966,25856,28504,30424,30928,30460,30036,21028,21467,20051,24222,26049,32810,32982,25243,21638,21032,28846,34957,36305,27873,21624,32986,22521,35060,36180,38506,37197,20329,27803,21943,30406,30768,25256,28921,28558,24429,34028,26842,30844,31735,33192,26379,40527,25447,30896,22383,30738,38713,25209,25259,21128,29749,27607,33386,33387,33388,33389,33393,33397,33398,33399,33400,33403,33404,33408,33409,33411,33413,33414,33415,33417,33420,33424,33427,33428,33429,33430,33434,33435,33438,33440,33442,33443,33447,33458,33461,33462,33466,33467,33468,33471,33472,33474,33475,33477,33478,33481,33488,33494,33497,33498,33501,33506,33511,33512,33513,33514,33516,33517,33518,33520,33522,33523,33525,33526,33528,33530,33532,33533,33534,33535,33536,33546,33547,33549,33552,33554,33555,33558,33560,33561,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33577,33578,33582,33584,33586,33591,33595,33597,21860,33086,30130,30382,21305,30174,20731,23617,35692,31687,20559,29255,39575,39128,28418,29922,31080,25735,30629,25340,39057,36139,21697,32856,20050,22378,33529,33805,24179,20973,29942,35780,23631,22369,27900,39047,23110,30772,39748,36843,31893,21078,25169,38138,20166,33670,33889,33769,33970,22484,26420,22275,26222,28006,35889,26333,28689,26399,27450,26646,25114,22971,19971,20932,28422,26578,27791,20854,26827,22855,27495,30054,23822,33040,40784,26071,31048,31041,39569,36215,23682,20062,20225,21551,22865,30732,22120,27668,36804,24323,27773,27875,35755,25488,33598,33599,33601,33602,33604,33605,33608,33610,33611,33612,33613,33614,33619,33621,33622,33623,33624,33625,33629,33634,33648,33649,33650,33651,33652,33653,33654,33657,33658,33662,33663,33664,33665,33666,33667,33668,33671,33672,33674,33675,33676,33677,33679,33680,33681,33684,33685,33686,33687,33689,33690,33693,33695,33697,33698,33699,33700,33701,33702,33703,33708,33709,33710,33711,33717,33723,33726,33727,33730,33731,33732,33734,33736,33737,33739,33741,33742,33744,33745,33746,33747,33749,33751,33753,33754,33755,33758,33762,33763,33764,33766,33767,33768,33771,33772,33773,24688,27965,29301,25190,38030,38085,21315,36801,31614,20191,35878,20094,40660,38065,38067,21069,28508,36963,27973,35892,22545,23884,27424,27465,26538,21595,33108,32652,22681,34103,24378,25250,27207,38201,25970,24708,26725,30631,20052,20392,24039,38808,25772,32728,23789,20431,31373,20999,33540,19988,24623,31363,38054,20405,20146,31206,29748,21220,33465,25810,31165,23517,27777,38738,36731,27682,20542,21375,28165,25806,26228,27696,24773,39031,35831,24198,29756,31351,31179,19992,37041,29699,27714,22234,37195,27845,36235,21306,34502,26354,36527,23624,39537,28192,33774,33775,33779,33780,33781,33782,33783,33786,33787,33788,33790,33791,33792,33794,33797,33799,33800,33801,33802,33808,33810,33811,33812,33813,33814,33815,33817,33818,33819,33822,33823,33824,33825,33826,33827,33833,33834,33835,33836,33837,33838,33839,33840,33842,33843,33844,33845,33846,33847,33849,33850,33851,33854,33855,33856,33857,33858,33859,33860,33861,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33874,33875,33876,33877,33878,33880,33885,33886,33887,33888,33890,33892,33893,33894,33895,33896,33898,33902,33903,33904,33906,33908,33911,33913,33915,33916,21462,23094,40843,36259,21435,22280,39079,26435,37275,27849,20840,30154,25331,29356,21048,21149,32570,28820,30264,21364,40522,27063,30830,38592,35033,32676,28982,29123,20873,26579,29924,22756,25880,22199,35753,39286,25200,32469,24825,28909,22764,20161,20154,24525,38887,20219,35748,20995,22922,32427,25172,20173,26085,25102,33592,33993,33635,34701,29076,28342,23481,32466,20887,25545,26580,32905,33593,34837,20754,23418,22914,36785,20083,27741,20837,35109,36719,38446,34122,29790,38160,38384,28070,33509,24369,25746,27922,33832,33134,40131,22622,36187,19977,21441,33917,33918,33919,33920,33921,33923,33924,33925,33926,33930,33933,33935,33936,33937,33938,33939,33940,33941,33942,33944,33946,33947,33949,33950,33951,33952,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33968,33969,33971,33973,33974,33975,33979,33980,33982,33984,33986,33987,33989,33990,33991,33992,33995,33996,33998,33999,34002,34004,34005,34007,34008,34009,34010,34011,34012,34014,34017,34018,34020,34023,34024,34025,34026,34027,34029,34030,34031,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34045,34046,34048,34049,34050,20254,25955,26705,21971,20007,25620,39578,25195,23234,29791,33394,28073,26862,20711,33678,30722,26432,21049,27801,32433,20667,21861,29022,31579,26194,29642,33515,26441,23665,21024,29053,34923,38378,38485,25797,36193,33203,21892,27733,25159,32558,22674,20260,21830,36175,26188,19978,23578,35059,26786,25422,31245,28903,33421,21242,38902,23569,21736,37045,32461,22882,36170,34503,33292,33293,36198,25668,23556,24913,28041,31038,35774,30775,30003,21627,20280,36523,28145,23072,32453,31070,27784,23457,23158,29978,32958,24910,28183,22768,29983,29989,29298,21319,32499,34051,34052,34053,34054,34055,34056,34057,34058,34059,34061,34062,34063,34064,34066,34068,34069,34070,34072,34073,34075,34076,34077,34078,34080,34082,34083,34084,34085,34086,34087,34088,34089,34090,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34110,34111,34112,34113,34114,34116,34117,34118,34119,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34135,34136,34138,34139,34140,34141,34143,34144,34145,34146,34147,34149,34150,34151,34153,34154,34155,34156,34157,34158,34159,34160,34161,34163,34165,34166,34167,34168,34172,34173,34175,34176,34177,30465,30427,21097,32988,22307,24072,22833,29422,26045,28287,35799,23608,34417,21313,30707,25342,26102,20160,39135,34432,23454,35782,21490,30690,20351,23630,39542,22987,24335,31034,22763,19990,26623,20107,25325,35475,36893,21183,26159,21980,22124,36866,20181,20365,37322,39280,27663,24066,24643,23460,35270,35797,25910,25163,39318,23432,23551,25480,21806,21463,30246,20861,34092,26530,26803,27530,25234,36755,21460,33298,28113,30095,20070,36174,23408,29087,34223,26257,26329,32626,34560,40653,40736,23646,26415,36848,26641,26463,25101,31446,22661,24246,25968,28465,34178,34179,34182,34184,34185,34186,34187,34188,34189,34190,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34205,34206,34207,34208,34209,34210,34211,34213,34214,34215,34217,34219,34220,34221,34225,34226,34227,34228,34229,34230,34232,34234,34235,34236,34237,34238,34239,34240,34242,34243,34244,34245,34246,34247,34248,34250,34251,34252,34253,34254,34257,34258,34260,34262,34263,34264,34265,34266,34267,34269,34270,34271,34272,34273,34274,34275,34277,34278,34279,34280,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,24661,21047,32781,25684,34928,29993,24069,26643,25332,38684,21452,29245,35841,27700,30561,31246,21550,30636,39034,33308,35828,30805,26388,28865,26031,25749,22070,24605,31169,21496,19997,27515,32902,23546,21987,22235,20282,20284,39282,24051,26494,32824,24578,39042,36865,23435,35772,35829,25628,33368,25822,22013,33487,37221,20439,32032,36895,31903,20723,22609,28335,23487,35785,32899,37240,33948,31639,34429,38539,38543,32485,39635,30862,23681,31319,36930,38567,31071,23385,25439,31499,34001,26797,21766,32553,29712,32034,38145,25152,22604,20182,23427,22905,22612,34297,34298,34300,34301,34302,34304,34305,34306,34307,34308,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34322,34323,34324,34325,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34344,34346,34347,34348,34349,34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34361,34362,34363,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34386,34387,34389,34390,34391,34392,34393,34395,34396,34397,34399,34400,34401,34403,34404,34405,34406,34407,34408,34409,34410,29549,25374,36427,36367,32974,33492,25260,21488,27888,37214,22826,24577,27760,22349,25674,36138,30251,28393,22363,27264,30192,28525,35885,35848,22374,27631,34962,30899,25506,21497,28845,27748,22616,25642,22530,26848,33179,21776,31958,20504,36538,28108,36255,28907,25487,28059,28372,32486,33796,26691,36867,28120,38518,35752,22871,29305,34276,33150,30140,35466,26799,21076,36386,38161,25552,39064,36420,21884,20307,26367,22159,24789,28053,21059,23625,22825,28155,22635,30000,29980,24684,33300,33094,25361,26465,36834,30522,36339,36148,38081,24086,21381,21548,28867,34413,34415,34416,34418,34419,34420,34421,34422,34423,34424,34435,34436,34437,34438,34439,34440,34441,34446,34447,34448,34449,34450,34452,34454,34455,34456,34457,34458,34459,34462,34463,34464,34465,34466,34469,34470,34475,34477,34478,34482,34483,34487,34488,34489,34491,34492,34493,34494,34495,34497,34498,34499,34501,34504,34508,34509,34514,34515,34517,34518,34519,34522,34524,34525,34528,34529,34530,34531,34533,34534,34535,34536,34538,34539,34540,34543,34549,34550,34551,34554,34555,34556,34557,34559,34561,34564,34565,34566,34571,34572,34574,34575,34576,34577,34580,34582,27712,24311,20572,20141,24237,25402,33351,36890,26704,37230,30643,21516,38108,24420,31461,26742,25413,31570,32479,30171,20599,25237,22836,36879,20984,31171,31361,22270,24466,36884,28034,23648,22303,21520,20820,28237,22242,25512,39059,33151,34581,35114,36864,21534,23663,33216,25302,25176,33073,40501,38464,39534,39548,26925,22949,25299,21822,25366,21703,34521,27964,23043,29926,34972,27498,22806,35916,24367,28286,29609,39037,20024,28919,23436,30871,25405,26202,30358,24779,23451,23113,19975,33109,27754,29579,20129,26505,32593,24448,26106,26395,24536,22916,23041,34585,34587,34589,34591,34592,34596,34598,34599,34600,34602,34603,34604,34605,34607,34608,34610,34611,34613,34614,34616,34617,34618,34620,34621,34624,34625,34626,34627,34628,34629,34630,34634,34635,34637,34639,34640,34641,34642,34644,34645,34646,34648,34650,34651,34652,34653,34654,34655,34657,34658,34662,34663,34664,34665,34666,34667,34668,34669,34671,34673,34674,34675,34677,34679,34680,34681,34682,34687,34688,34689,34692,34694,34695,34697,34698,34700,34702,34703,34704,34705,34706,34708,34709,34710,34712,34713,34714,34715,34716,34717,34718,34720,34721,34722,34723,34724,24013,24494,21361,38886,36829,26693,22260,21807,24799,20026,28493,32500,33479,33806,22996,20255,20266,23614,32428,26410,34074,21619,30031,32963,21890,39759,20301,28205,35859,23561,24944,21355,30239,28201,34442,25991,38395,32441,21563,31283,32010,38382,21985,32705,29934,25373,34583,28065,31389,25105,26017,21351,25569,27779,24043,21596,38056,20044,27745,35820,23627,26080,33436,26791,21566,21556,27595,27494,20116,25410,21320,33310,20237,20398,22366,25098,38654,26212,29289,21247,21153,24735,35823,26132,29081,26512,35199,30802,30717,26224,22075,21560,38177,29306,34725,34726,34727,34729,34730,34734,34736,34737,34738,34740,34742,34743,34744,34745,34747,34748,34750,34751,34753,34754,34755,34756,34757,34759,34760,34761,34764,34765,34766,34767,34768,34772,34773,34774,34775,34776,34777,34778,34780,34781,34782,34783,34785,34786,34787,34788,34790,34791,34792,34793,34795,34796,34797,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34810,34811,34812,34813,34815,34816,34817,34818,34820,34821,34822,34823,34824,34825,34827,34828,34829,34830,34831,34832,34833,34834,34836,34839,34840,34841,34842,34844,34845,34846,34847,34848,34851,31232,24687,24076,24713,33181,22805,24796,29060,28911,28330,27728,29312,27268,34989,24109,20064,23219,21916,38115,27927,31995,38553,25103,32454,30606,34430,21283,38686,36758,26247,23777,20384,29421,19979,21414,22799,21523,25472,38184,20808,20185,40092,32420,21688,36132,34900,33335,38386,28046,24358,23244,26174,38505,29616,29486,21439,33146,39301,32673,23466,38519,38480,32447,30456,21410,38262,39321,31665,35140,28248,20065,32724,31077,35814,24819,21709,20139,39033,24055,27233,20687,21521,35937,33831,30813,38660,21066,21742,22179,38144,28040,23477,28102,26195,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34867,34868,34869,34870,34871,34872,34874,34875,34877,34878,34879,34881,34882,34883,34886,34887,34888,34889,34890,34891,34894,34895,34896,34897,34898,34899,34901,34902,34904,34906,34907,34908,34909,34910,34911,34912,34918,34919,34922,34925,34927,34929,34931,34932,34933,34934,34936,34937,34938,34939,34940,34944,34947,34950,34951,34953,34954,34956,34958,34959,34960,34961,34963,34964,34965,34967,34968,34969,34970,34971,34973,34974,34975,34976,34977,34979,34981,34982,34983,34984,34985,34986,23567,23389,26657,32918,21880,31505,25928,26964,20123,27463,34638,38795,21327,25375,25658,37034,26012,32961,35856,20889,26800,21368,34809,25032,27844,27899,35874,23633,34218,33455,38156,27427,36763,26032,24571,24515,20449,34885,26143,33125,29481,24826,20852,21009,22411,24418,37026,34892,37266,24184,26447,24615,22995,20804,20982,33016,21256,27769,38596,29066,20241,20462,32670,26429,21957,38152,31168,34966,32483,22687,25100,38656,34394,22040,39035,24464,35768,33988,37207,21465,26093,24207,30044,24676,32110,23167,32490,32493,36713,21927,23459,24748,26059,29572,34988,34990,34991,34992,34994,34995,34996,34997,34998,35000,35001,35002,35003,35005,35006,35007,35008,35011,35012,35015,35016,35018,35019,35020,35021,35023,35024,35025,35027,35030,35031,35034,35035,35036,35037,35038,35040,35041,35046,35047,35049,35050,35051,35052,35053,35054,35055,35058,35061,35062,35063,35066,35067,35069,35071,35072,35073,35075,35076,35077,35078,35079,35080,35081,35083,35084,35085,35086,35087,35089,35092,35093,35094,35095,35096,35100,35101,35102,35103,35104,35106,35107,35108,35110,35111,35112,35113,35116,35117,35118,35119,35121,35122,35123,35125,35127,36873,30307,30505,32474,38772,34203,23398,31348,38634,34880,21195,29071,24490,26092,35810,23547,39535,24033,27529,27739,35757,35759,36874,36805,21387,25276,40486,40493,21568,20011,33469,29273,34460,23830,34905,28079,38597,21713,20122,35766,28937,21693,38409,28895,28153,30416,20005,30740,34578,23721,24310,35328,39068,38414,28814,27839,22852,25513,30524,34893,28436,33395,22576,29141,21388,30746,38593,21761,24422,28976,23476,35866,39564,27523,22830,40495,31207,26472,25196,20335,30113,32650,27915,38451,27687,20208,30162,20859,26679,28478,36992,33136,22934,29814,35128,35129,35130,35131,35132,35133,35134,35135,35136,35138,35139,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35168,35169,35170,35171,35172,35173,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35196,35197,35198,35200,35202,35204,35205,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,25671,23591,36965,31377,35875,23002,21676,33280,33647,35201,32768,26928,22094,32822,29239,37326,20918,20063,39029,25494,19994,21494,26355,33099,22812,28082,19968,22777,21307,25558,38129,20381,20234,34915,39056,22839,36951,31227,20202,33008,30097,27778,23452,23016,24413,26885,34433,20506,24050,20057,30691,20197,33402,25233,26131,37009,23673,20159,24441,33222,36920,32900,30123,20134,35028,24847,27589,24518,20041,30410,28322,35811,35758,35850,35793,24322,32764,32716,32462,33589,33643,22240,27575,38899,38452,23035,21535,38134,28139,23493,39278,23609,24341,38544,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35267,35277,35283,35284,35285,35287,35288,35289,35291,35293,35295,35296,35297,35298,35300,35303,35304,35305,35306,35308,35309,35310,35312,35313,35314,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35329,35330,35331,35332,35333,35334,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,21360,33521,27185,23156,40560,24212,32552,33721,33828,33829,33639,34631,36814,36194,30408,24433,39062,30828,26144,21727,25317,20323,33219,30152,24248,38605,36362,34553,21647,27891,28044,27704,24703,21191,29992,24189,20248,24736,24551,23588,30001,37038,38080,29369,27833,28216,37193,26377,21451,21491,20305,37321,35825,21448,24188,36802,28132,20110,30402,27014,34398,24858,33286,20313,20446,36926,40060,24841,28189,28180,38533,20104,23089,38632,19982,23679,31161,23431,35821,32701,29577,22495,33419,37057,21505,36935,21947,23786,24481,24840,27442,29425,32946,35465,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35391,35392,35393,35394,35395,35396,35397,35398,35399,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35450,35451,35452,35453,35454,35455,35456,28020,23507,35029,39044,35947,39533,40499,28170,20900,20803,22435,34945,21407,25588,36757,22253,21592,22278,29503,28304,32536,36828,33489,24895,24616,38498,26352,32422,36234,36291,38053,23731,31908,26376,24742,38405,32792,20113,37095,21248,38504,20801,36816,34164,37213,26197,38901,23381,21277,30776,26434,26685,21705,28798,23472,36733,20877,22312,21681,25874,26242,36190,36163,33039,33900,36973,31967,20991,34299,26531,26089,28577,34468,36481,22122,36896,30338,28790,29157,36131,25321,21017,27901,36156,24590,22686,24974,26366,36192,25166,21939,28195,26413,36711,35457,35458,35459,35460,35461,35462,35463,35464,35467,35468,35469,35470,35471,35472,35473,35474,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,38113,38392,30504,26629,27048,21643,20045,28856,35784,25688,25995,23429,31364,20538,23528,30651,27617,35449,31896,27838,30415,26025,36759,23853,23637,34360,26632,21344,25112,31449,28251,32509,27167,31456,24432,28467,24352,25484,28072,26454,19976,24080,36134,20183,32960,30260,38556,25307,26157,25214,27836,36213,29031,32617,20806,32903,21484,36974,25240,21746,34544,36761,32773,38167,34071,36825,27993,29645,26015,30495,29956,30759,33275,36126,38024,20390,26517,30137,35786,38663,25391,38215,38453,33976,25379,30529,24449,29424,20105,24596,25972,25327,27491,25919,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,24103,30151,37073,35777,33437,26525,25903,21553,34584,30693,32930,33026,27713,20043,32455,32844,30452,26893,27542,25191,20540,20356,22336,25351,27490,36286,21482,26088,32440,24535,25370,25527,33267,33268,32622,24092,23769,21046,26234,31209,31258,36136,28825,30164,28382,27835,31378,20013,30405,24544,38047,34935,32456,31181,32959,37325,20210,20247,33311,21608,24030,27954,35788,31909,36724,32920,24090,21650,30385,23449,26172,39588,29664,26666,34523,26417,29482,35832,35803,36880,31481,28891,29038,25284,30633,22065,20027,33879,26609,21161,34496,36142,38136,31569,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35687,35688,35689,35690,35691,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35756,35761,35771,35783,35792,35818,35849,35870,20303,27880,31069,39547,25235,29226,25341,19987,30742,36716,25776,36186,31686,26729,24196,35013,22918,25758,22766,29366,26894,38181,36861,36184,22368,32512,35846,20934,25417,25305,21331,26700,29730,33537,37196,21828,30528,28796,27978,20857,21672,36164,23039,28363,28100,23388,32043,20180,31869,28371,23376,33258,28173,23383,39683,26837,36394,23447,32508,24635,32437,37049,36208,22863,25549,31199,36275,21330,26063,31062,35781,38459,32452,38075,32386,22068,37257,26368,32618,23562,36981,26152,24038,20304,26590,20570,20316,22352,24231,59408,59409,59410,59411,59412,35896,35897,35898,35899,35900,35901,35902,35903,35904,35906,35907,35908,35909,35912,35914,35915,35917,35918,35919,35920,35921,35922,35923,35924,35926,35927,35928,35929,35931,35932,35933,35934,35935,35936,35939,35940,35941,35942,35943,35944,35945,35948,35949,35950,35951,35952,35953,35954,35956,35957,35958,35959,35963,35964,35965,35966,35967,35968,35969,35971,35972,35974,35975,35976,35979,35981,35982,35983,35984,35985,35986,35987,35989,35990,35991,35993,35994,35995,35996,35997,35998,35999,36000,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,20109,19980,20800,19984,24319,21317,19989,20120,19998,39730,23404,22121,20008,31162,20031,21269,20039,22829,29243,21358,27664,22239,32996,39319,27603,30590,40727,20022,20127,40720,20060,20073,20115,33416,23387,21868,22031,20164,21389,21405,21411,21413,21422,38757,36189,21274,21493,21286,21294,21310,36188,21350,21347,20994,21000,21006,21037,21043,21055,21056,21068,21086,21089,21084,33967,21117,21122,21121,21136,21139,20866,32596,20155,20163,20169,20162,20200,20193,20203,20190,20251,20211,20258,20324,20213,20261,20263,20233,20267,20318,20327,25912,20314,20317,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,20319,20311,20274,20285,20342,20340,20369,20361,20355,20367,20350,20347,20394,20348,20396,20372,20454,20456,20458,20421,20442,20451,20444,20433,20447,20472,20521,20556,20467,20524,20495,20526,20525,20478,20508,20492,20517,20520,20606,20547,20565,20552,20558,20588,20603,20645,20647,20649,20666,20694,20742,20717,20716,20710,20718,20743,20747,20189,27709,20312,20325,20430,40864,27718,31860,20846,24061,40649,39320,20865,22804,21241,21261,35335,21264,20971,22809,20821,20128,20822,20147,34926,34980,20149,33044,35026,31104,23348,34819,32696,20907,20913,20925,20924,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36128,36177,36178,36183,36191,36197,36200,36201,36202,36204,36206,36207,36209,36210,36216,36217,36218,36219,36220,36221,36222,36223,36224,36226,36227,36230,36231,36232,36233,36236,36237,36238,36239,36240,36242,36243,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36256,36257,36258,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36274,36278,36279,36281,36283,36285,36288,36289,36290,36293,36295,36296,36297,36298,36301,36304,36306,36307,36308,20935,20886,20898,20901,35744,35750,35751,35754,35764,35765,35767,35778,35779,35787,35791,35790,35794,35795,35796,35798,35800,35801,35804,35807,35808,35812,35816,35817,35822,35824,35827,35830,35833,35836,35839,35840,35842,35844,35847,35852,35855,35857,35858,35860,35861,35862,35865,35867,35864,35869,35871,35872,35873,35877,35879,35882,35883,35886,35887,35890,35891,35893,35894,21353,21370,38429,38434,38433,38449,38442,38461,38460,38466,38473,38484,38495,38503,38508,38514,38516,38536,38541,38551,38576,37015,37019,37021,37017,37036,37025,37044,37043,37046,37050,36309,36312,36313,36316,36320,36321,36322,36325,36326,36327,36329,36333,36334,36336,36337,36338,36340,36342,36348,36350,36351,36352,36353,36354,36355,36356,36358,36359,36360,36363,36365,36366,36368,36369,36370,36371,36373,36374,36375,36376,36377,36378,36379,36380,36384,36385,36388,36389,36390,36391,36392,36395,36397,36400,36402,36403,36404,36406,36407,36408,36411,36412,36414,36415,36419,36421,36422,36428,36429,36430,36431,36432,36435,36436,36437,36438,36439,36440,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36455,36456,36458,36459,36462,36465,37048,37040,37071,37061,37054,37072,37060,37063,37075,37094,37090,37084,37079,37083,37099,37103,37118,37124,37154,37150,37155,37169,37167,37177,37187,37190,21005,22850,21154,21164,21165,21182,21759,21200,21206,21232,21471,29166,30669,24308,20981,20988,39727,21430,24321,30042,24047,22348,22441,22433,22654,22716,22725,22737,22313,22316,22314,22323,22329,22318,22319,22364,22331,22338,22377,22405,22379,22406,22396,22395,22376,22381,22390,22387,22445,22436,22412,22450,22479,22439,22452,22419,22432,22485,22488,22490,22489,22482,22456,22516,22511,22520,22500,22493,36467,36469,36471,36472,36473,36474,36475,36477,36478,36480,36482,36483,36484,36486,36488,36489,36490,36491,36492,36493,36494,36497,36498,36499,36501,36502,36503,36504,36505,36506,36507,36509,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36525,36526,36528,36529,36531,36532,36533,36534,36535,36536,36537,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,22539,22541,22525,22509,22528,22558,22553,22596,22560,22629,22636,22657,22665,22682,22656,39336,40729,25087,33401,33405,33407,33423,33418,33448,33412,33422,33425,33431,33433,33451,33464,33470,33456,33480,33482,33507,33432,33463,33454,33483,33484,33473,33449,33460,33441,33450,33439,33476,33486,33444,33505,33545,33527,33508,33551,33543,33500,33524,33490,33496,33548,33531,33491,33553,33562,33542,33556,33557,33504,33493,33564,33617,33627,33628,33544,33682,33596,33588,33585,33691,33630,33583,33615,33607,33603,33631,33600,33559,33632,33581,33594,33587,33638,33637,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,33640,33563,33641,33644,33642,33645,33646,33712,33656,33715,33716,33696,33706,33683,33692,33669,33660,33718,33705,33661,33720,33659,33688,33694,33704,33722,33724,33729,33793,33765,33752,22535,33816,33803,33757,33789,33750,33820,33848,33809,33798,33748,33759,33807,33795,33784,33785,33770,33733,33728,33830,33776,33761,33884,33873,33882,33881,33907,33927,33928,33914,33929,33912,33852,33862,33897,33910,33932,33934,33841,33901,33985,33997,34000,34022,33981,34003,33994,33983,33978,34016,33953,33977,33972,33943,34021,34019,34060,29965,34104,34032,34105,34079,34106,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36714,36736,36748,36754,36765,36768,36769,36770,36772,36773,36774,36775,36778,36780,36781,36782,36783,36786,36787,36788,36789,36791,36792,36794,36795,36796,36799,36800,36803,36806,36809,36810,36811,36812,36813,36815,36818,36822,36823,36826,36832,36833,36835,36839,36844,36847,36849,36850,36852,36853,36854,36858,36859,36860,36862,36863,36871,36872,36876,36878,36883,36885,36888,34134,34107,34047,34044,34137,34120,34152,34148,34142,34170,30626,34115,34162,34171,34212,34216,34183,34191,34169,34222,34204,34181,34233,34231,34224,34259,34241,34268,34303,34343,34309,34345,34326,34364,24318,24328,22844,22849,32823,22869,22874,22872,21263,23586,23589,23596,23604,25164,25194,25247,25275,25290,25306,25303,25326,25378,25334,25401,25419,25411,25517,25590,25457,25466,25486,25524,25453,25516,25482,25449,25518,25532,25586,25592,25568,25599,25540,25566,25550,25682,25542,25534,25669,25665,25611,25627,25632,25612,25638,25633,25694,25732,25709,25750,36889,36892,36899,36900,36901,36903,36904,36905,36906,36907,36908,36912,36913,36914,36915,36916,36919,36921,36922,36925,36927,36928,36931,36933,36934,36936,36937,36938,36939,36940,36942,36948,36949,36950,36953,36954,36956,36957,36958,36959,36960,36961,36964,36966,36967,36969,36970,36971,36972,36975,36976,36977,36978,36979,36982,36983,36984,36985,36986,36987,36988,36990,36993,36996,36997,36998,36999,37001,37002,37004,37005,37006,37007,37008,37010,37012,37014,37016,37018,37020,37022,37023,37024,37028,37029,37031,37032,37033,37035,37037,37042,37047,37052,37053,37055,37056,25722,25783,25784,25753,25786,25792,25808,25815,25828,25826,25865,25893,25902,24331,24530,29977,24337,21343,21489,21501,21481,21480,21499,21522,21526,21510,21579,21586,21587,21588,21590,21571,21537,21591,21593,21539,21554,21634,21652,21623,21617,21604,21658,21659,21636,21622,21606,21661,21712,21677,21698,21684,21714,21671,21670,21715,21716,21618,21667,21717,21691,21695,21708,21721,21722,21724,21673,21674,21668,21725,21711,21726,21787,21735,21792,21757,21780,21747,21794,21795,21775,21777,21799,21802,21863,21903,21941,21833,21869,21825,21845,21823,21840,21820,37058,37059,37062,37064,37065,37067,37068,37069,37074,37076,37077,37078,37080,37081,37082,37086,37087,37088,37091,37092,37093,37097,37098,37100,37102,37104,37105,37106,37107,37109,37110,37111,37113,37114,37115,37116,37119,37120,37121,37123,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37146,37147,37148,37149,37151,37152,37153,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37168,37170,37171,37172,37173,37174,37175,37176,37178,37179,37180,37181,37182,37183,37184,37185,37186,37188,21815,21846,21877,21878,21879,21811,21808,21852,21899,21970,21891,21937,21945,21896,21889,21919,21886,21974,21905,21883,21983,21949,21950,21908,21913,21994,22007,21961,22047,21969,21995,21996,21972,21990,21981,21956,21999,21989,22002,22003,21964,21965,21992,22005,21988,36756,22046,22024,22028,22017,22052,22051,22014,22016,22055,22061,22104,22073,22103,22060,22093,22114,22105,22108,22092,22100,22150,22116,22129,22123,22139,22140,22149,22163,22191,22228,22231,22237,22241,22261,22251,22265,22271,22276,22282,22281,22300,24079,24089,24084,24081,24113,24123,24124,37189,37191,37192,37201,37203,37204,37205,37206,37208,37209,37211,37212,37215,37216,37222,37223,37224,37227,37229,37235,37242,37243,37244,37248,37249,37250,37251,37252,37254,37256,37258,37262,37263,37267,37268,37269,37270,37271,37272,37273,37276,37277,37278,37279,37280,37281,37284,37285,37286,37287,37288,37289,37291,37292,37296,37297,37298,37299,37302,37303,37304,37305,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37320,37323,37328,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37341,37342,37343,37344,37345,37346,37347,37348,37349,24119,24132,24148,24155,24158,24161,23692,23674,23693,23696,23702,23688,23704,23705,23697,23706,23708,23733,23714,23741,23724,23723,23729,23715,23745,23735,23748,23762,23780,23755,23781,23810,23811,23847,23846,23854,23844,23838,23814,23835,23896,23870,23860,23869,23916,23899,23919,23901,23915,23883,23882,23913,23924,23938,23961,23965,35955,23991,24005,24435,24439,24450,24455,24457,24460,24469,24473,24476,24488,24493,24501,24508,34914,24417,29357,29360,29364,29367,29368,29379,29377,29390,29389,29394,29416,29423,29417,29426,29428,29431,29441,29427,29443,29434,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392,37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,29435,29463,29459,29473,29450,29470,29469,29461,29474,29497,29477,29484,29496,29489,29520,29517,29527,29536,29548,29551,29566,33307,22821,39143,22820,22786,39267,39271,39272,39273,39274,39275,39276,39284,39287,39293,39296,39300,39303,39306,39309,39312,39313,39315,39316,39317,24192,24209,24203,24214,24229,24224,24249,24245,24254,24243,36179,24274,24273,24283,24296,24298,33210,24516,24521,24534,24527,24579,24558,24580,24545,24548,24574,24581,24582,24554,24557,24568,24601,24629,24614,24603,24591,24589,24617,24619,24586,24639,24609,24696,24697,24699,24698,24642,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,24682,24701,24726,24730,24749,24733,24707,24722,24716,24731,24812,24763,24753,24797,24792,24774,24794,24756,24864,24870,24853,24867,24820,24832,24846,24875,24906,24949,25004,24980,24999,25015,25044,25077,24541,38579,38377,38379,38385,38387,38389,38390,38396,38398,38403,38404,38406,38408,38410,38411,38412,38413,38415,38418,38421,38422,38423,38425,38426,20012,29247,25109,27701,27732,27740,27722,27811,27781,27792,27796,27788,27752,27753,27764,27766,27782,27817,27856,27860,27821,27895,27896,27889,27863,27826,27872,27862,27898,27883,27886,27825,27859,27887,27902,37544,37545,37546,37547,37548,37549,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,27961,27943,27916,27971,27976,27911,27908,27929,27918,27947,27981,27950,27957,27930,27983,27986,27988,27955,28049,28015,28062,28064,27998,28051,28052,27996,28000,28028,28003,28186,28103,28101,28126,28174,28095,28128,28177,28134,28125,28121,28182,28075,28172,28078,28203,28270,28238,28267,28338,28255,28294,28243,28244,28210,28197,28228,28383,28337,28312,28384,28461,28386,28325,28327,28349,28347,28343,28375,28340,28367,28303,28354,28319,28514,28486,28487,28452,28437,28409,28463,28470,28491,28532,28458,28425,28457,28553,28557,28556,28536,28530,28540,28538,28625,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37695,37696,37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37739,28617,28583,28601,28598,28610,28641,28654,28638,28640,28655,28698,28707,28699,28729,28725,28751,28766,23424,23428,23445,23443,23461,23480,29999,39582,25652,23524,23534,35120,23536,36423,35591,36790,36819,36821,36837,36846,36836,36841,36838,36851,36840,36869,36868,36875,36902,36881,36877,36886,36897,36917,36918,36909,36911,36932,36945,36946,36944,36968,36952,36962,36955,26297,36980,36989,36994,37000,36995,37003,24400,24407,24406,24408,23611,21675,23632,23641,23409,23651,23654,32700,24362,24361,24365,33396,24380,39739,23662,22913,22915,22925,22953,22954,22947,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37835,37836,37837,22935,22986,22955,22942,22948,22994,22962,22959,22999,22974,23045,23046,23005,23048,23011,23000,23033,23052,23049,23090,23092,23057,23075,23059,23104,23143,23114,23125,23100,23138,23157,33004,23210,23195,23159,23162,23230,23275,23218,23250,23252,23224,23264,23267,23281,23254,23270,23256,23260,23305,23319,23318,23346,23351,23360,23573,23580,23386,23397,23411,23377,23379,23394,39541,39543,39544,39546,39551,39549,39552,39553,39557,39560,39562,39568,39570,39571,39574,39576,39579,39580,39581,39583,39584,39586,39587,39589,39591,32415,32417,32419,32421,32424,32425,37838,37839,37840,37841,37842,37843,37844,37845,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,32429,32432,32446,32448,32449,32450,32457,32459,32460,32464,32468,32471,32475,32480,32481,32488,32491,32494,32495,32497,32498,32525,32502,32506,32507,32510,32513,32514,32515,32519,32520,32523,32524,32527,32529,32530,32535,32537,32540,32539,32543,32545,32546,32547,32548,32549,32550,32551,32554,32555,32556,32557,32559,32560,32561,32562,32563,32565,24186,30079,24027,30014,37013,29582,29585,29614,29602,29599,29647,29634,29649,29623,29619,29632,29641,29640,29669,29657,39036,29706,29673,29671,29662,29626,29682,29711,29738,29787,29734,29733,29736,29744,29742,29740,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37996,37997,37998,37999,38000,38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38033,38038,38040,38087,38095,38099,38100,38106,38118,38139,38172,38176,29723,29722,29761,29788,29783,29781,29785,29815,29805,29822,29852,29838,29824,29825,29831,29835,29854,29864,29865,29840,29863,29906,29882,38890,38891,38892,26444,26451,26462,26440,26473,26533,26503,26474,26483,26520,26535,26485,26536,26526,26541,26507,26487,26492,26608,26633,26584,26634,26601,26544,26636,26585,26549,26586,26547,26589,26624,26563,26552,26594,26638,26561,26621,26674,26675,26720,26721,26702,26722,26692,26724,26755,26653,26709,26726,26689,26727,26688,26686,26698,26697,26665,26805,26767,26740,26743,26771,26731,26818,26990,26876,26911,26912,26873,38183,38195,38205,38211,38216,38219,38229,38234,38240,38254,38260,38261,38263,38264,38265,38266,38267,38268,38269,38270,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,26916,26864,26891,26881,26967,26851,26896,26993,26937,26976,26946,26973,27012,26987,27008,27032,27000,26932,27084,27015,27016,27086,27017,26982,26979,27001,27035,27047,27067,27051,27053,27092,27057,27073,27082,27103,27029,27104,27021,27135,27183,27117,27159,27160,27237,27122,27204,27198,27296,27216,27227,27189,27278,27257,27197,27176,27224,27260,27281,27280,27305,27287,27307,29495,29522,27521,27522,27527,27524,27538,27539,27533,27546,27547,27553,27562,36715,36717,36721,36722,36723,36725,36726,36728,36727,36729,36730,36732,36734,36737,36738,36740,36743,36747,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38380,38399,38407,38419,38424,38427,38430,38432,38435,38436,38437,38438,38439,38440,38441,38443,38444,38445,38447,38448,38455,38456,38457,38458,38462,38465,38467,38474,38478,38479,38481,38482,38483,38486,38487,38488,38489,38490,38492,38493,38494,38496,38499,38501,38502,38507,38509,38510,38511,38512,38513,38515,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38535,38537,38538,36749,36750,36751,36760,36762,36558,25099,25111,25115,25119,25122,25121,25125,25124,25132,33255,29935,29940,29951,29967,29969,29971,25908,26094,26095,26096,26122,26137,26482,26115,26133,26112,28805,26359,26141,26164,26161,26166,26165,32774,26207,26196,26177,26191,26198,26209,26199,26231,26244,26252,26279,26269,26302,26331,26332,26342,26345,36146,36147,36150,36155,36157,36160,36165,36166,36168,36169,36167,36173,36181,36185,35271,35274,35275,35276,35278,35279,35280,35281,29294,29343,29277,29286,29295,29310,29311,29316,29323,29325,29327,29330,25352,25394,25520,38540,38542,38545,38546,38547,38549,38550,38554,38555,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38568,38569,38570,38571,38572,38573,38574,38575,38577,38578,38580,38581,38583,38584,38586,38587,38591,38594,38595,38600,38602,38603,38608,38609,38611,38612,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38625,38626,38627,38628,38629,38630,38631,38635,38636,38637,38638,38640,38641,38642,38644,38645,38648,38650,38651,38652,38653,38655,38658,38659,38661,38666,38667,38668,38672,38673,38674,38676,38677,38679,38680,38681,38682,38683,38685,38687,38688,25663,25816,32772,27626,27635,27645,27637,27641,27653,27655,27654,27661,27669,27672,27673,27674,27681,27689,27684,27690,27698,25909,25941,25963,29261,29266,29270,29232,34402,21014,32927,32924,32915,32956,26378,32957,32945,32939,32941,32948,32951,32999,33000,33001,33002,32987,32962,32964,32985,32973,32983,26384,32989,33003,33009,33012,33005,33037,33038,33010,33020,26389,33042,35930,33078,33054,33068,33048,33074,33096,33100,33107,33140,33113,33114,33137,33120,33129,33148,33149,33133,33127,22605,23221,33160,33154,33169,28373,33187,33194,33228,26406,33226,33211,38689,38690,38691,38692,38693,38694,38695,38696,38697,38699,38700,38702,38703,38705,38707,38708,38709,38710,38711,38714,38715,38716,38717,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38740,38741,38743,38744,38746,38748,38749,38751,38755,38756,38758,38759,38760,38762,38763,38764,38765,38766,38767,38768,38769,38770,38773,38775,38776,38777,38778,38779,38781,38782,38783,38784,38785,38786,38787,38788,38790,38791,38792,38793,38794,38796,38798,38799,38800,38803,38805,38806,38807,38809,38810,38811,38812,38813,33217,33190,27428,27447,27449,27459,27462,27481,39121,39122,39123,39125,39129,39130,27571,24384,27586,35315,26000,40785,26003,26044,26054,26052,26051,26060,26062,26066,26070,28800,28828,28822,28829,28859,28864,28855,28843,28849,28904,28874,28944,28947,28950,28975,28977,29043,29020,29032,28997,29042,29002,29048,29050,29080,29107,29109,29096,29088,29152,29140,29159,29177,29213,29224,28780,28952,29030,29113,25150,25149,25155,25160,25161,31035,31040,31046,31049,31067,31068,31059,31066,31074,31063,31072,31087,31079,31098,31109,31114,31130,31143,31155,24529,24528,38814,38815,38817,38818,38820,38821,38822,38823,38824,38825,38826,38828,38830,38832,38833,38835,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38888,38894,38895,38896,38897,38898,38900,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,24636,24669,24666,24679,24641,24665,24675,24747,24838,24845,24925,25001,24989,25035,25041,25094,32896,32895,27795,27894,28156,30710,30712,30720,30729,30743,30744,30737,26027,30765,30748,30749,30777,30778,30779,30751,30780,30757,30764,30755,30761,30798,30829,30806,30807,30758,30800,30791,30796,30826,30875,30867,30874,30855,30876,30881,30883,30898,30905,30885,30932,30937,30921,30956,30962,30981,30964,30995,31012,31006,31028,40859,40697,40699,40700,30449,30468,30477,30457,30471,30472,30490,30498,30489,30509,30502,30517,30520,30544,30545,30535,30531,30554,30568,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,30562,30565,30591,30605,30589,30592,30604,30609,30623,30624,30640,30645,30653,30010,30016,30030,30027,30024,30043,30066,30073,30083,32600,32609,32607,35400,32616,32628,32625,32633,32641,32638,30413,30437,34866,38021,38022,38023,38027,38026,38028,38029,38031,38032,38036,38039,38037,38042,38043,38044,38051,38052,38059,38058,38061,38060,38063,38064,38066,38068,38070,38071,38072,38073,38074,38076,38077,38079,38084,38088,38089,38090,38091,38092,38093,38094,38096,38097,38098,38101,38102,38103,38105,38104,38107,38110,38111,38112,38114,38116,38117,38119,38120,38122,39023,39024,39025,39026,39027,39028,39051,39054,39058,39061,39065,39075,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39119,39120,39124,39126,39127,39131,39132,39133,39136,39137,39138,39139,39140,39141,39142,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,38121,38123,38126,38127,38131,38132,38133,38135,38137,38140,38141,38143,38147,38146,38150,38151,38153,38154,38157,38158,38159,38162,38163,38164,38165,38166,38168,38171,38173,38174,38175,38178,38186,38187,38185,38188,38193,38194,38196,38198,38199,38200,38204,38206,38207,38210,38197,38212,38213,38214,38217,38220,38222,38223,38226,38227,38228,38230,38231,38232,38233,38235,38238,38239,38237,38241,38242,38244,38245,38246,38247,38248,38249,38250,38251,38252,38255,38257,38258,38259,38202,30695,30700,38601,31189,31213,31203,31211,31238,23879,31235,31234,31262,31252,39176,39177,39178,39179,39180,39182,39183,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39215,39216,39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39268,39270,39283,39288,39289,39291,39294,39298,39299,39305,31289,31287,31313,40655,39333,31344,30344,30350,30355,30361,30372,29918,29920,29996,40480,40482,40488,40489,40490,40491,40492,40498,40497,40502,40504,40503,40505,40506,40510,40513,40514,40516,40518,40519,40520,40521,40523,40524,40526,40529,40533,40535,40538,40539,40540,40542,40547,40550,40551,40552,40553,40554,40555,40556,40561,40557,40563,30098,30100,30102,30112,30109,30124,30115,30131,30132,30136,30148,30129,30128,30147,30146,30166,30157,30179,30184,30182,30180,30187,30183,30211,30193,30204,30207,30224,30208,30213,30220,30231,30218,30245,30232,30229,30233,39308,39310,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39334,39335,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,30235,30268,30242,30240,30272,30253,30256,30271,30261,30275,30270,30259,30285,30302,30292,30300,30294,30315,30319,32714,31462,31352,31353,31360,31366,31368,31381,31398,31392,31404,31400,31405,31411,34916,34921,34930,34941,34943,34946,34978,35014,34999,35004,35017,35042,35022,35043,35045,35057,35098,35068,35048,35070,35056,35105,35097,35091,35099,35082,35124,35115,35126,35137,35174,35195,30091,32997,30386,30388,30684,32786,32788,32790,32796,32800,32802,32805,32806,32807,32809,32808,32817,32779,32821,32835,32838,32845,32850,32873,32881,35203,39032,39040,39043,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39049,39052,39053,39055,39060,39066,39067,39070,39071,39073,39074,39077,39078,34381,34388,34412,34414,34431,34426,34428,34427,34472,34445,34443,34476,34461,34471,34467,34474,34451,34473,34486,34500,34485,34510,34480,34490,34481,34479,34505,34511,34484,34537,34545,34546,34541,34547,34512,34579,34526,34548,34527,34520,34513,34563,34567,34552,34568,34570,34573,34569,34595,34619,34590,34597,34606,34586,34622,34632,34612,34609,34601,34615,34623,34690,34594,34685,34686,34683,34656,34672,34636,34670,34699,34643,34659,34684,34660,34649,34661,34707,34735,34728,34770,39514,39515,39516,39517,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39538,39555,39561,39565,39566,39572,39573,39577,39590,39593,39594,39595,39596,39597,39598,39599,39602,39603,39604,39605,39609,39611,39613,39614,39615,39619,39620,39622,39623,39624,39625,39626,39629,39630,39631,39632,39634,39636,39637,39638,39639,39641,39642,39643,39644,39645,39646,39648,39650,39651,39652,39653,39655,39656,39657,39658,39660,39662,39664,39665,39666,39667,39668,39669,39670,39671,39672,39674,39676,39677,39678,39679,39680,39681,39682,39684,39685,39686,34758,34696,34693,34733,34711,34691,34731,34789,34732,34741,34739,34763,34771,34749,34769,34752,34762,34779,34794,34784,34798,34838,34835,34814,34826,34843,34849,34873,34876,32566,32578,32580,32581,33296,31482,31485,31496,31491,31492,31509,31498,31531,31503,31559,31544,31530,31513,31534,31537,31520,31525,31524,31539,31550,31518,31576,31578,31557,31605,31564,31581,31584,31598,31611,31586,31602,31601,31632,31654,31655,31672,31660,31645,31656,31621,31658,31644,31650,31659,31668,31697,31681,31692,31709,31706,31717,31718,31722,31756,31742,31740,31759,31766,31755,39687,39689,39690,39691,39692,39693,39694,39696,39697,39698,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39712,39713,39714,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39728,39729,39731,39732,39733,39734,39735,39736,39737,39738,39741,39742,39743,39744,39750,39754,39755,39756,39758,39760,39762,39763,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,31775,31786,31782,31800,31809,31808,33278,33281,33282,33284,33260,34884,33313,33314,33315,33325,33327,33320,33323,33336,33339,33331,33332,33342,33348,33353,33355,33359,33370,33375,33384,34942,34949,34952,35032,35039,35166,32669,32671,32679,32687,32688,32690,31868,25929,31889,31901,31900,31902,31906,31922,31932,31933,31937,31943,31948,31949,31944,31941,31959,31976,33390,26280,32703,32718,32725,32741,32737,32742,32745,32750,32755,31992,32119,32166,32174,32327,32411,40632,40628,36211,36228,36244,36241,36273,36199,36205,35911,35913,37194,37200,37198,37199,37220,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,37218,37217,37232,37225,37231,37245,37246,37234,37236,37241,37260,37253,37264,37261,37265,37282,37283,37290,37293,37294,37295,37301,37300,37306,35925,40574,36280,36331,36357,36441,36457,36277,36287,36284,36282,36292,36310,36311,36314,36318,36302,36303,36315,36294,36332,36343,36344,36323,36345,36347,36324,36361,36349,36372,36381,36383,36396,36398,36387,36399,36410,36416,36409,36405,36413,36401,36425,36417,36418,36433,36434,36426,36464,36470,36476,36463,36468,36485,36495,36500,36496,36508,36510,35960,35970,35978,35973,35992,35988,26011,35286,35294,35290,35292,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,35301,35307,35311,35390,35622,38739,38633,38643,38639,38662,38657,38664,38671,38670,38698,38701,38704,38718,40832,40835,40837,40838,40839,40840,40841,40842,40844,40702,40715,40717,38585,38588,38589,38606,38610,30655,38624,37518,37550,37576,37694,37738,37834,37775,37950,37995,40063,40066,40069,40070,40071,40072,31267,40075,40078,40080,40081,40082,40084,40085,40090,40091,40094,40095,40096,40097,40098,40099,40101,40102,40103,40104,40105,40107,40109,40110,40112,40113,40114,40115,40116,40117,40118,40119,40122,40123,40124,40125,40132,40133,40134,40135,40138,40139,39996,39997,39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40061,40062,40064,40067,40068,40073,40074,40076,40079,40083,40086,40087,40088,40089,40093,40106,40108,40111,40121,40126,40127,40128,40129,40130,40136,40137,40145,40146,40154,40155,40160,40161,40140,40141,40142,40143,40144,40147,40148,40149,40151,40152,40153,40156,40157,40159,40162,38780,38789,38801,38802,38804,38831,38827,38819,38834,38836,39601,39600,39607,40536,39606,39610,39612,39617,39616,39621,39618,39627,39628,39633,39749,39747,39751,39753,39752,39757,39761,39144,39181,39214,39253,39252,39647,39649,39654,39663,39659,39675,39661,39673,39688,39695,39699,39711,39715,40637,40638,32315,40578,40583,40584,40587,40594,37846,40605,40607,40667,40668,40669,40672,40671,40674,40681,40679,40677,40682,40687,40738,40748,40751,40761,40759,40765,40766,40772,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,57908,57909,57910,57911,57912,57913,57914,57915,57916,57917,57918,57919,57920,57921,57922,57923,57924,57925,57926,57927,57928,57929,57930,57931,57932,57933,57934,57935,57936,57937,57938,57939,57940,57941,57942,57943,57944,57945,57946,57947,57948,57949,57950,57951,57952,57953,57954,57955,57956,57957,57958,57959,57960,57961,57962,57963,57964,57965,57966,57967,57968,57969,57970,57971,57972,57973,57974,57975,57976,57977,57978,57979,57980,57981,57982,57983,57984,57985,57986,57987,57988,57989,57990,57991,57992,57993,57994,57995,57996,57997,57998,57999,58000,58001,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,58002,58003,58004,58005,58006,58007,58008,58009,58010,58011,58012,58013,58014,58015,58016,58017,58018,58019,58020,58021,58022,58023,58024,58025,58026,58027,58028,58029,58030,58031,58032,58033,58034,58035,58036,58037,58038,58039,58040,58041,58042,58043,58044,58045,58046,58047,58048,58049,58050,58051,58052,58053,58054,58055,58056,58057,58058,58059,58060,58061,58062,58063,58064,58065,58066,58067,58068,58069,58070,58071,58072,58073,58074,58075,58076,58077,58078,58079,58080,58081,58082,58083,58084,58085,58086,58087,58088,58089,58090,58091,58092,58093,58094,58095,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432,40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,58096,58097,58098,58099,58100,58101,58102,58103,58104,58105,58106,58107,58108,58109,58110,58111,58112,58113,58114,58115,58116,58117,58118,58119,58120,58121,58122,58123,58124,58125,58126,58127,58128,58129,58130,58131,58132,58133,58134,58135,58136,58137,58138,58139,58140,58141,58142,58143,58144,58145,58146,58147,58148,58149,58150,58151,58152,58153,58154,58155,58156,58157,58158,58159,58160,58161,58162,58163,58164,58165,58166,58167,58168,58169,58170,58171,58172,58173,58174,58175,58176,58177,58178,58179,58180,58181,58182,58183,58184,58185,58186,58187,58188,58189,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40484,40487,40494,40496,40500,40507,40508,40512,40525,40528,40530,40531,40532,40534,40537,40541,40543,40544,40545,40546,40549,40558,40559,40562,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40576,40577,40579,40580,40581,40582,40585,40586,40588,40589,40590,40591,40592,40593,40596,40597,40598,40599,40600,40601,40602,40603,40604,40606,40608,40609,40610,40611,40612,40613,40615,40616,40617,40618,58190,58191,58192,58193,58194,58195,58196,58197,58198,58199,58200,58201,58202,58203,58204,58205,58206,58207,58208,58209,58210,58211,58212,58213,58214,58215,58216,58217,58218,58219,58220,58221,58222,58223,58224,58225,58226,58227,58228,58229,58230,58231,58232,58233,58234,58235,58236,58237,58238,58239,58240,58241,58242,58243,58244,58245,58246,58247,58248,58249,58250,58251,58252,58253,58254,58255,58256,58257,58258,58259,58260,58261,58262,58263,58264,58265,58266,58267,58268,58269,58270,58271,58272,58273,58274,58275,58276,58277,58278,58279,58280,58281,58282,58283,40619,40620,40621,40622,40623,40624,40625,40626,40627,40629,40630,40631,40633,40634,40636,40639,40640,40641,40642,40643,40645,40646,40647,40648,40650,40651,40652,40656,40658,40659,40661,40662,40663,40665,40666,40670,40673,40675,40676,40678,40680,40683,40684,40685,40686,40688,40689,40690,40691,40692,40693,40694,40695,40696,40698,40701,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40716,40719,40721,40722,40724,40725,40726,40728,40730,40731,40732,40733,40734,40735,40737,40739,40740,40741,40742,40743,40744,40745,40746,40747,40749,40750,40752,40753,58284,58285,58286,58287,58288,58289,58290,58291,58292,58293,58294,58295,58296,58297,58298,58299,58300,58301,58302,58303,58304,58305,58306,58307,58308,58309,58310,58311,58312,58313,58314,58315,58316,58317,58318,58319,58320,58321,58322,58323,58324,58325,58326,58327,58328,58329,58330,58331,58332,58333,58334,58335,58336,58337,58338,58339,58340,58341,58342,58343,58344,58345,58346,58347,58348,58349,58350,58351,58352,58353,58354,58355,58356,58357,58358,58359,58360,58361,58362,58363,58364,58365,58366,58367,58368,58369,58370,58371,58372,58373,58374,58375,58376,58377,40754,40755,40756,40757,40758,40760,40762,40764,40767,40768,40769,40770,40771,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40833,40834,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40860,40861,40862,40865,40866,40867,40868,40869,63788,63865,63893,63975,63985,58378,58379,58380,58381,58382,58383,58384,58385,58386,58387,58388,58389,58390,58391,58392,58393,58394,58395,58396,58397,58398,58399,58400,58401,58402,58403,58404,58405,58406,58407,58408,58409,58410,58411,58412,58413,58414,58415,58416,58417,58418,58419,58420,58421,58422,58423,58424,58425,58426,58427,58428,58429,58430,58431,58432,58433,58434,58435,58436,58437,58438,58439,58440,58441,58442,58443,58444,58445,58446,58447,58448,58449,58450,58451,58452,58453,58454,58455,58456,58457,58458,58459,58460,58461,58462,58463,58464,58465,58466,58467,58468,58469,58470,58471,64012,64013,64014,64015,64017,64019,64020,64024,64031,64032,64033,64035,64036,64039,64040,64041,11905,59414,59415,59416,11908,13427,13383,11912,11915,59422,13726,13850,13838,11916,11927,14702,14616,59430,14799,14815,14963,14800,59435,59436,15182,15470,15584,11943,59441,59442,11946,16470,16735,11950,17207,11955,11958,11959,59451,17329,17324,11963,17373,17622,18017,17996,59459,18211,18217,18300,18317,11978,18759,18810,18813,18818,18819,18821,18822,18847,18843,18871,18870,59476,59477,19619,19615,19616,19617,19575,19618,19731,19732,19733,19734,19735,19736,19737,19886,59492,58472,58473,58474,58475,58476,58477,58478,58479,58480,58481,58482,58483,58484,58485,58486,58487,58488,58489,58490,58491,58492,58493,58494,58495,58496,58497,58498,58499,58500,58501,58502,58503,58504,58505,58506,58507,58508,58509,58510,58511,58512,58513,58514,58515,58516,58517,58518,58519,58520,58521,58522,58523,58524,58525,58526,58527,58528,58529,58530,58531,58532,58533,58534,58535,58536,58537,58538,58539,58540,58541,58542,58543,58544,58545,58546,58547,58548,58549,58550,58551,58552,58553,58554,58555,58556,58557,58558,58559,58560,58561,58562,58563,58564,58565]; + protected const TABLE_POINTERS = [12288=>6176]; + protected const TABLE_RANGES = [0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,39420,189000,1237576]; + protected const TABLE_OFFSETS = [128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,null,65536,1114112]; + + /** @var array $pointerCache A cached result of flipping the pointer-to-code-point table */ + protected static $pointerCache; public function nextCode() { $first = 0; @@ -38,7 +42,7 @@ abstract class GBCommon extends AbstractEncoding implements StatelessEncoding { if (($b > 0x3A && $b < 0x7F) || ($b > 0x7F && $b < 0xFF)) { $offset = ($b < 0x7F) ? 0x40 : 0x41; $pointer = ($first - 0x81) * 190 + ($b - $offset); - $codePoint = self::TABLE_GBK[$pointer] ?? null; + $codePoint = self::TABLE_CODES[$pointer] ?? null; } if (!is_null($codePoint)) { return $codePoint; @@ -102,7 +106,7 @@ abstract class GBCommon extends AbstractEncoding implements StatelessEncoding { } elseif (static::GBK && $codePoint == 0x20AC) { return "\x80"; } else { - $pointer = array_flip(self::TABLE_GBK)[$codePoint] ?? null; + $pointer = self::TABLE_POINTERS[$codePoint] ?? (self::$pointerCache ?? (self::$pointerCache = array_flip(self::TABLE_CODES)))[$codePoint] ?? null; if (isset($pointer)) { $lead = (int) ($pointer / 190) + 0x81; $trail = $pointer % 190; @@ -133,7 +137,6 @@ abstract class GBCommon extends AbstractEncoding implements StatelessEncoding { } } - /** Implements backward seeking $distance characters */ protected function seekBack(int $distance): int { while ($distance > 0 && $this->posByte > 0) { $distance--; diff --git a/lib/Encoding/GBK.php b/lib/Encoding/GBK.php index 20ec481..9ddad36 100644 --- a/lib/Encoding/GBK.php +++ b/lib/Encoding/GBK.php @@ -7,9 +7,9 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class GBK extends GBCommon { - const GBK = true; - const NAME = "GBK"; - const LABELS = [ + protected const GBK = true; + public const NAME = "GBK"; + public const LABELS = [ "chinese", "csgb2312", "csiso58gb231280", diff --git a/lib/Encoding/IBM866.php b/lib/Encoding/IBM866.php index 2a04154..bc0d2ca 100644 --- a/lib/Encoding/IBM866.php +++ b/lib/Encoding/IBM866.php @@ -7,15 +7,15 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class IBM866 extends SingleByteEncoding { - const NAME = "IBM866"; - const LABELS = [ + public const NAME = "IBM866"; + public const LABELS = [ "866", "cp866", "csibm866", "ibm866", ]; - const TABLE_DEC_CHAR = ["\u{410}","\u{411}","\u{412}","\u{413}","\u{414}","\u{415}","\u{416}","\u{417}","\u{418}","\u{419}","\u{41a}","\u{41b}","\u{41c}","\u{41d}","\u{41e}","\u{41f}","\u{420}","\u{421}","\u{422}","\u{423}","\u{424}","\u{425}","\u{426}","\u{427}","\u{428}","\u{429}","\u{42a}","\u{42b}","\u{42c}","\u{42d}","\u{42e}","\u{42f}","\u{430}","\u{431}","\u{432}","\u{433}","\u{434}","\u{435}","\u{436}","\u{437}","\u{438}","\u{439}","\u{43a}","\u{43b}","\u{43c}","\u{43d}","\u{43e}","\u{43f}","\u{2591}","\u{2592}","\u{2593}","\u{2502}","\u{2524}","\u{2561}","\u{2562}","\u{2556}","\u{2555}","\u{2563}","\u{2551}","\u{2557}","\u{255d}","\u{255c}","\u{255b}","\u{2510}","\u{2514}","\u{2534}","\u{252c}","\u{251c}","\u{2500}","\u{253c}","\u{255e}","\u{255f}","\u{255a}","\u{2554}","\u{2569}","\u{2566}","\u{2560}","\u{2550}","\u{256c}","\u{2567}","\u{2568}","\u{2564}","\u{2565}","\u{2559}","\u{2558}","\u{2552}","\u{2553}","\u{256b}","\u{256a}","\u{2518}","\u{250c}","\u{2588}","\u{2584}","\u{258c}","\u{2590}","\u{2580}","\u{440}","\u{441}","\u{442}","\u{443}","\u{444}","\u{445}","\u{446}","\u{447}","\u{448}","\u{449}","\u{44a}","\u{44b}","\u{44c}","\u{44d}","\u{44e}","\u{44f}","\u{401}","\u{451}","\u{404}","\u{454}","\u{407}","\u{457}","\u{40e}","\u{45e}","\u{b0}","\u{2219}","\u{b7}","\u{221a}","\u{2116}","\u{a4}","\u{25a0}","\u{a0}"]; - const TABLE_DEC_CODE = [1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1025,1105,1028,1108,1031,1111,1038,1118,176,8729,183,8730,8470,164,9632,160]; - const TABLE_ENC = [160=>"\xFF",164=>"\xFD",176=>"\xF8",183=>"\xFA",1025=>"\xF0",1028=>"\xF2",1031=>"\xF4",1038=>"\xF6",1040=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0","\xA1","\xA2","\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9","\xAA","\xAB","\xAC","\xAD","\xAE","\xAF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF",1105=>"\xF1",1108=>"\xF3",1111=>"\xF5",1118=>"\xF7",8470=>"\xFC",8729=>"\xF9","\xFB",9472=>"\xC4",9474=>"\xB3",9484=>"\xDA",9488=>"\xBF",9492=>"\xC0",9496=>"\xD9",9500=>"\xC3",9508=>"\xB4",9516=>"\xC2",9524=>"\xC1",9532=>"\xC5",9552=>"\xCD","\xBA","\xD5","\xD6","\xC9","\xB8","\xB7","\xBB","\xD4","\xD3","\xC8","\xBE","\xBD","\xBC","\xC6","\xC7","\xCC","\xB5","\xB6","\xB9","\xD1","\xD2","\xCB","\xCF","\xD0","\xCA","\xD8","\xD7","\xCE",9600=>"\xDF",9604=>"\xDC",9608=>"\xDB",9612=>"\xDD",9616=>"\xDE","\xB0","\xB1","\xB2",9632=>"\xFE"]; + protected const TABLE_DEC_CHAR = ["\u{410}","\u{411}","\u{412}","\u{413}","\u{414}","\u{415}","\u{416}","\u{417}","\u{418}","\u{419}","\u{41a}","\u{41b}","\u{41c}","\u{41d}","\u{41e}","\u{41f}","\u{420}","\u{421}","\u{422}","\u{423}","\u{424}","\u{425}","\u{426}","\u{427}","\u{428}","\u{429}","\u{42a}","\u{42b}","\u{42c}","\u{42d}","\u{42e}","\u{42f}","\u{430}","\u{431}","\u{432}","\u{433}","\u{434}","\u{435}","\u{436}","\u{437}","\u{438}","\u{439}","\u{43a}","\u{43b}","\u{43c}","\u{43d}","\u{43e}","\u{43f}","\u{2591}","\u{2592}","\u{2593}","\u{2502}","\u{2524}","\u{2561}","\u{2562}","\u{2556}","\u{2555}","\u{2563}","\u{2551}","\u{2557}","\u{255d}","\u{255c}","\u{255b}","\u{2510}","\u{2514}","\u{2534}","\u{252c}","\u{251c}","\u{2500}","\u{253c}","\u{255e}","\u{255f}","\u{255a}","\u{2554}","\u{2569}","\u{2566}","\u{2560}","\u{2550}","\u{256c}","\u{2567}","\u{2568}","\u{2564}","\u{2565}","\u{2559}","\u{2558}","\u{2552}","\u{2553}","\u{256b}","\u{256a}","\u{2518}","\u{250c}","\u{2588}","\u{2584}","\u{258c}","\u{2590}","\u{2580}","\u{440}","\u{441}","\u{442}","\u{443}","\u{444}","\u{445}","\u{446}","\u{447}","\u{448}","\u{449}","\u{44a}","\u{44b}","\u{44c}","\u{44d}","\u{44e}","\u{44f}","\u{401}","\u{451}","\u{404}","\u{454}","\u{407}","\u{457}","\u{40e}","\u{45e}","\u{b0}","\u{2219}","\u{b7}","\u{221a}","\u{2116}","\u{a4}","\u{25a0}","\u{a0}"]; + protected const TABLE_DEC_CODE = [1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1025,1105,1028,1108,1031,1111,1038,1118,176,8729,183,8730,8470,164,9632,160]; + protected const TABLE_ENC = [160=>"\xFF",164=>"\xFD",176=>"\xF8",183=>"\xFA",1025=>"\xF0",1028=>"\xF2",1031=>"\xF4",1038=>"\xF6",1040=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0","\xA1","\xA2","\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9","\xAA","\xAB","\xAC","\xAD","\xAE","\xAF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF",1105=>"\xF1",1108=>"\xF3",1111=>"\xF5",1118=>"\xF7",8470=>"\xFC",8729=>"\xF9","\xFB",9472=>"\xC4",9474=>"\xB3",9484=>"\xDA",9488=>"\xBF",9492=>"\xC0",9496=>"\xD9",9500=>"\xC3",9508=>"\xB4",9516=>"\xC2",9524=>"\xC1",9532=>"\xC5",9552=>"\xCD","\xBA","\xD5","\xD6","\xC9","\xB8","\xB7","\xBB","\xD4","\xD3","\xC8","\xBE","\xBD","\xBC","\xC6","\xC7","\xCC","\xB5","\xB6","\xB9","\xD1","\xD2","\xCB","\xCF","\xD0","\xCA","\xD8","\xD7","\xCE",9600=>"\xDF",9604=>"\xDC",9608=>"\xDB",9612=>"\xDD",9616=>"\xDE","\xB0","\xB1","\xB2",9632=>"\xFE"]; } diff --git a/lib/Encoding/ISO2022JP.php b/lib/Encoding/ISO2022JP.php new file mode 100644 index 0000000..40ec71b --- /dev/null +++ b/lib/Encoding/ISO2022JP.php @@ -0,0 +1,281 @@ +8712,8715,8838,8839,8834,8835,8746,8745,135=>8743,8744,65506,8658,8660,8704,8707,153=>8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,175=>8491,8240,9839,9837,9834,8224,8225,182,187=>9711,203=>65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,220=>65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,252=>65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,282=>12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,376=>12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,470=>913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,502=>945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,564=>1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,612=>1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,658=>9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,1128=>9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,1159=>13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,1190=>13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,1410=>20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21000,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39000,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32000,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,30000,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26000,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36000,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,4418=>24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27000,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34000,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38000,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,8272=>32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,8634=>8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282,10716=>8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657]; + protected const TABLE_KATAKANA = [12290,12300,12301,12289,12539,12530,12449,12451,12453,12455,12457,12515,12517,12519,12483,12540,12450,12452,12454,12456,12458,12459,12461,12463,12465,12467,12469,12471,12473,12475,12477,12479,12481,12484,12486,12488,12490,12491,12492,12493,12494,12495,12498,12501,12504,12507,12510,12511,12512,12513,12514,12516,12518,12520,12521,12522,12523,12524,12525,12527,12531,12443,12444]; + protected const TABLE_POINTERS = [8470=>1193,8481=>1195,8544=>1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,8560=>8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8730=>162,8736=>153,8745=>126,125,166,8757=>165,8786=>159,8801=>158,8869=>154,12849=>1201,20008=>8284,20193=>8285,20220=>8286,20224=>8287,20227=>8288,20281=>8289,20310=>8290,20362=>8292,20370=>8291,20372=>8294,20378=>8293,20425=>8277,20429=>8295,20479=>8298,20510=>8299,20514=>8297,20544=>8296,20546=>8302,20550=>8300,20592=>8301,20628=>8303,20696=>8305,20724=>8304,20810=>8306,20836=>8307,20893=>8308,20926=>8309,20972=>8310,21013=>8311,21148=>8312,21158=>8313,21167=>8487,21184=>8314,21211=>8315,21248=>8316,21255=>8317,21284=>8318,21362=>8319,21395=>8320,21426=>8321,21469=>8322,21642=>8325,21660=>8324,21673=>8326,21759=>8327,21894=>8328,22361=>8329,22373=>8330,22444=>8331,22471=>8333,8332,22686=>8336,22706=>8337,22795=>8338,22867=>8339,22875=>8340,22877=>8341,22883=>8342,22948=>8343,22970=>8344,23382=>8345,23488=>8346,23512=>8348,23532=>8349,23582=>8350,23718=>8351,23738=>8352,23797=>8353,23847=>8354,23874=>8357,23891=>8355,23917=>8358,23992=>8359,8360,24016=>8361,24353=>8362,24372=>8363,24389=>8283,24423=>8364,24503=>8365,24542=>8366,24669=>8367,24709=>8368,24714=>8369,24789=>8371,24798=>8370,24818=>8373,24849=>8374,24864=>8372,24880=>8376,24887=>8375,24984=>8377,25107=>8378,25254=>8379,25589=>8380,25696=>8381,25757=>8382,25806=>8383,25934=>8384,26112=>8385,26121=>8388,26133=>8386,26142=>8390,26148=>8391,26158=>8389,26161=>8279,26171=>8387,26199=>8393,26201=>8394,26213=>8392,26227=>8396,26265=>8397,26272=>8398,26290=>8399,26303=>8400,26362=>8401,8282,26382=>8402,26470=>8404,26555=>8405,26560=>8407,26625=>8408,26692=>8409,26706=>8406,26824=>8280,26831=>8410,26984=>8412,27032=>8414,27106=>8415,27184=>8416,27206=>8418,27243=>8417,27251=>8419,27262=>8420,27362=>8421,27364=>8422,27606=>8423,27711=>8424,27740=>8425,27759=>8427,27782=>8426,27866=>8428,27908=>8429,28015=>8431,28039=>8430,28054=>8432,28076=>8433,28111=>8434,28146=>8436,28152=>8435,28156=>8437,28199=>8440,28217=>8438,28220=>8441,28252=>8439,28351=>8442,28552=>8443,28597=>8444,28661=>8445,28677=>8446,28679=>8447,28712=>8448,28805=>8449,28843=>8450,28859=>8278,28932=>8452,28943=>8451,28998=>8454,8455,29020=>8453,29121=>8457,29182=>8458,29361=>8459,29374=>8460,29476=>8461,29559=>8463,29629=>8464,29641=>8465,29650=>8468,29654=>8466,29667=>8467,29685=>8470,29703=>8469,29734=>8471,29737=>8473,8472,29742=>8474,29794=>8475,29833=>8476,29855=>8477,29953=>8478,29999=>8347,30063=>8479,30338=>8480,30363=>8483,8481,30366=>8482,30374=>8484,30534=>8486,30753=>8488,30798=>8489,30820=>8490,30842=>8491,31024=>8492,31124=>8496,31131=>8498,31441=>8499,31463=>8500,31467=>8502,31646=>8503,32072=>8505,32092=>8506,32160=>8508,32183=>8507,32214=>8509,32338=>8510,32394=>8272,32583=>8511,32673=>8512,33537=>8514,33634=>8515,33663=>8516,33735=>8517,33782=>8518,33864=>8519,33972=>8520,34012=>8276,34131=>8521,34137=>8522,34155=>8523,34224=>8525,34823=>8528,35061=>8529,35100=>8273,35346=>8530,35383=>8531,35449=>8532,35495=>8533,35518=>8534,35551=>8535,35574=>8537,35667=>8538,35711=>8539,36080=>8540,36084=>8541,36114=>8542,36214=>8543,36559=>8545,36967=>8548,37086=>8549,37141=>8551,37159=>8552,37335=>8554,37338=>8553,37342=>8555,37348=>8558,8559,37357=>8556,8557,37382=>8560,37386=>8562,37392=>8561,37433=>8569,8563,37436=>8565,37440=>8564,37454=>8566,37457=>8568,37465=>8567,37479=>8570,37495=>8572,8573,37512=>8275,37543=>8571,37584=>8577,37587=>8581,37589=>8579,37591=>8575,37593=>8576,37600=>8580,37607=>8574,37625=>8281,37627=>8584,37631=>8587,37634=>8589,37661=>8588,8586,37665=>8583,37669=>8582,37704=>8274,37719=>8591,37744=>8590,37796=>8592,37830=>8593,37854=>8594,37880=>8595,37937=>8596,37957=>8597,37960=>8598,38290=>8599,38557=>8602,38575=>8603,38707=>8604,38715=>8605,38723=>8606,38733=>8607,38735=>8608,38737=>8609,38741=>8610,38999=>8611,39013=>8612,39207=>8615,39326=>8617,39502=>8618,39641=>8619,39644=>8620,39794=>8622,39797=>8621,39823=>8623,39857=>8624,39867=>8625,39936=>8626,40299=>8628,40304=>8627,40473=>8630,40657=>8631,63785=>8403,63964=>8600,64014=>8323,8334,8335,8356,8395,8411,8413,8456,8462,8485,8493,8494,8495,8497,8501,8504,8513,8524,8526,8527,8536,8544,8546,8547,8550,8578,8585,8601,8613,8614,8616,8629,65282=>8647,65287=>8646,65506=>137,65508=>8645]; + protected const ASCII_STATE = 0; + protected const ROMAN_STATE = 1; + protected const KATAKANA_STATE = 2; + protected const LEAD_BYTE_STATE = 3; + protected const TRAIL_BYTE_STATE = 4; + protected const ESCAPE_START_STATE = 5; + protected const ESCAPE_STATE = 6; + + protected const MODE_ASCII = 0; + protected const MODE_ROMAN = 1; + protected const MODE_JIS = 2; + + + /** @var array $modeStack The stack of previous decoding modes and their effective byte positions; the current mode is kept off the stack */ + protected $modeStack = []; + /** @var int $mode The current decoding mode, a subset of the possible states defined in the specification */ + protected $mode = self::ASCII_STATE; + /** @var int $modeMark The byte position marking theposition where the current mode first applied; it is the position of the first byte AFTER the escape sequence */ + protected $modeMark = \PHP_INT_MIN; + /** @var bool $trailingEscape Whether the string ends in a valid escape sequence */ + protected $trailingEscape = false; + + /** @var array $pointerCache A cached result of flipping the pointer-to-code-point table */ + protected static $pointerCache; + + public function __construct(string $string, bool $fatal = false, bool $allowSurrogates = false) { + parent::__construct($string, $fatal, $allowSurrogates); + $this->stateProps[] = "trailingEscape"; + } + + public function nextChar(): string { + $code = $this->nextCode(); + if ($code !== false) { + return UTF8::encode($code); + } + return ""; + } + + public function nextCode() { + $this->posChar++; + $state = $this->mode; + while (true) { + $b = @$this->string[$this->posByte++]; + $eof = ($b === ""); + $b = ord($b); + // unify handling of basic states where possible + if ($state < self::TRAIL_BYTE_STATE) { + if ($eof) { + $this->posByte--; + $this->posChar--; + return false; + } elseif ($b === 0x1B) { + $state = self::ESCAPE_START_STATE; + continue; + } elseif ($b > 0x7F || $b === 0x0E || $b === 0x0F) { + return $this->errDec($this->errMode, $this->posChar - 1, $this->posByte - 1); + } + } + if ($state === self::ASCII_STATE) { + return $b; + } elseif ($state === self::ROMAN_STATE) { + if ($b === 0x5C) { + return 0xA5; + } elseif ($b === 0x7E) { + return 0x203E; + } else { + return $b; + } + } elseif ($state === self::KATAKANA_STATE) { + if ($b >= 0x21 && $b <= 0x5F) { + return 0xFF61 - 0x21 + $b; + } else { + return $this->errDec($this->errMode, $this->posChar - 1, $this->posByte - 1); + } + } elseif ($state === self::LEAD_BYTE_STATE) { + if ($b >= 0x21 && $b <= 0x7E) { + $lead = $b; + $state = self::TRAIL_BYTE_STATE; + continue; + } else { + return $this->errDec($this->errMode, $this->posChar - 1, $this->posByte - 1); + } + } elseif ($state === self::TRAIL_BYTE_STATE) { + if ($eof || $b === 0x1B) { + return $this->errDec($this->errMode, $this->posChar - 1, --$this->posByte - 1); + } elseif ($b >= 0x21 && $b <= 0x7E) { + $pointer = (($lead - 0x21) * 94) + $b - 0x21; + $codePoint = self::TABLE_JIS0208[$pointer] ?? null; + if (!is_null($codePoint)) { + return $codePoint; + } else { + return $this->errDec($this->errMode, $this->posChar - 1, $this->posByte - 2); + } + } else { + return $this->errDec($this->errMode, $this->posChar - 1, $this->posByte - 2); + } + } elseif ($state === self::ESCAPE_START_STATE) { + if ($b === 0x24 || $b === 0x28) { + $lead = $b; + $state = self::ESCAPE_STATE; + continue; + } else { + return $this->errDec($this->errMode, $this->posChar - 1, --$this->posByte - 1); + } + } elseif ($state === self::ESCAPE_STATE) { + if ($lead === 0x28 && $b === 0x42) { + $newState = self::ASCII_STATE; + } elseif ($lead === 0x28 && $b === 0x4A) { + $newState = self::ROMAN_STATE; + } elseif ($lead === 0x28 && $b === 0x49) { + $newState = self::KATAKANA_STATE; + } elseif ($lead === 0x24 && ($b === 0x40 || $b === 0x42)) { + $newState = self::LEAD_BYTE_STATE; + } else { + $this->posByte -= 2; + return $this->errDec($this->errMode, $this->posChar - 1, $this->posByte - 1); + } + if ($this->modeMark === ($this->posByte - 3)) { + $this->modeSet($newState); + return $this->errDec($this->errMode, $this->posChar - 1, $this->posByte - 3); + } else { + $state = $this->modeSet($newState); + unset($lead); + // if we're at the end of the string, mark the string as dirty + if ($this->posByte === $this->lenByte) { + $this->trailingEscape = true; + } + continue; + } + } + } + } // @codeCoverageIgnore + + protected function modeSet(int $mode): int { + $this->modeStack[] = [$this->modeMark, $this->mode]; + $this->mode = $mode; + $this->modeMark = $this->posByte; + return $mode; + } + + protected function seekBack(int $distance): int { + if ($this->trailingEscape && $this->posByte === $this->lenByte) { + list($this->modeMark, $this->mode) = array_pop($this->modeStack); + $this->posByte -= 3; + $this->trailingEscape = false; + } + while ($distance > 0 && $this->posByte > 0) { + $this->posChar--; + $distance--; + if ($this->posByte === $this->errMark) { // the previous character was malformed + // if the position also marks a mode change, pop the mode stack + if ($this->posByte === $this->modeMark) { + list($this->modeMark, $this->mode) = array_pop($this->modeStack); + } + // move to the correct sync position, pop the error stack, and continue + $this->posByte = $this->errSync; + list($this->errMark, $this->errSync) = array_pop($this->errStack); + } else { + $this->posByte -= ($this->mode === self::LEAD_BYTE_STATE ? 2 : 1); + } + // check for a mode change that is not also an error character + if ($this->posByte === $this->modeMark && $this->posByte !== $this->errMark) { + $this->posByte -= 3; + list($this->modeMark, $this->mode) = array_pop($this->modeStack); + } + } + return $distance; + } + + protected function stateSave(): array { + $out = parent::stateSave(); + $out['modeCount'] = sizeof($this->modeStack); + return $out; + } + + protected function stateApply(array $state): void { + while (sizeof($this->modeStack) > $state['modeCount']) { + list($this->modeMark, $this->mode) = array_pop($this->modeStack); + } + unset($state['modeCount']); + parent::stateApply($state); + } + + public function rewind(): void { + $this->modeStack = []; + $this->modeMark = \PHP_INT_MIN; + $this->mode = self::ASCII_STATE; + $this->trailingEscape = false; + parent::rewind(); + } + + public function eof(): bool { + return $this->posByte === $this->lenByte || ($this->posByte === ($this->lenByte - 3) && $this->peekCode() === false); + } + + public static function encode(?int $codePoint, bool $fatal = true, &$mode = null): string { + $mode = $mode ?? self::MODE_ASCII; + if ($codePoint < 0 || $codePoint > 0x10FFFF) { + throw new EncoderException("Encountered code point outside Unicode range ($codePoint)", Coder::E_INVALID_CODE_POINT); + } elseif ($codePoint === null) { + if ($mode !== self::MODE_ASCII) { + $mode = self::MODE_ASCII; + return "\x1B\x28\x42"; + } + return ""; + } elseif ($codePoint === 0xE || $codePoint === 0xF || $codePoint === 0x1B) { + if (!$fatal) { + $out = "&#".(string) 0xFFFD.";"; + if ($mode === self::MODE_JIS) { + $mode = self::MODE_ASCII; + return "\x1B\x28\x42". $out; + } + return $out; + } else { + throw new EncoderException("Code point $codePoint not available in target encoding", Coder::E_UNAVAILABLE_CODE_POINT); + } + } elseif ($codePoint === 0x5C || $codePoint === 0x7E) { + if ($mode !== self::MODE_ASCII) { + $mode = self::MODE_ASCII; + return "\x1B\x28\x42".chr($codePoint); + } + return chr($codePoint); + } elseif ($codePoint < 0x80) { + if ($mode === self::MODE_JIS) { + $mode = self::MODE_ASCII; + return "\x1B\x28\x42".chr($codePoint); + } + return chr($codePoint); + } elseif ($codePoint === 0xA5 || $codePoint === 0x203E) { + $ord = $codePoint === 0xA5 ? 0x5C : 0x7E; + if ($mode !== self::MODE_ROMAN) { + $mode = self::MODE_ROMAN; + return "\x1B\x28\x4A".chr($ord); + } + return chr($ord); + } else { + if ($codePoint >= 0xFF61 && $codePoint <= 0xFF9F) { + $codePoint = self::TABLE_KATAKANA[$codePoint - 0xFF61]; + } elseif ($codePoint === 0x2212) { + $codePoint = 0xFF0D; + } + $pointer = self::TABLE_POINTERS[$codePoint] ?? (self::$pointerCache ?? (self::$pointerCache = array_flip(self::TABLE_JIS0208)))[$codePoint] ?? null; + if (!is_null($pointer)) { + $lead = chr((int) ($pointer / 94) + 0x21); + $trail = chr(($pointer % 94) + 0x21); + if ($mode !== self::MODE_JIS) { + $mode = self::MODE_JIS; + return "\x1B\x24\x42".$lead.$trail; + } + return $lead.$trail; + } + if (!$fatal) { + $out = "&#".(string) ($codePoint).";"; + if ($mode === self::MODE_JIS) { + $mode = self::MODE_ASCII; + return "\x1B\x28\x42". $out; + } + return $out; + } else { + throw new EncoderException("Code point $codePoint not available in target encoding", Coder::E_UNAVAILABLE_CODE_POINT); + } + } + } +} diff --git a/lib/Encoding/ISO885910.php b/lib/Encoding/ISO885910.php index bfebc6f..3fb61fa 100644 --- a/lib/Encoding/ISO885910.php +++ b/lib/Encoding/ISO885910.php @@ -7,8 +7,8 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class ISO885910 extends SingleByteEncoding { - const NAME = "ISO-8859-10"; - const LABELS = [ + public const NAME = "ISO-8859-10"; + public const LABELS = [ "csisolatin6", "iso-8859-10", "iso-ir-157", @@ -18,7 +18,7 @@ class ISO885910 extends SingleByteEncoding { "latin6", ]; - const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{104}","\u{112}","\u{122}","\u{12a}","\u{128}","\u{136}","\u{a7}","\u{13b}","\u{110}","\u{160}","\u{166}","\u{17d}","\u{ad}","\u{16a}","\u{14a}","\u{b0}","\u{105}","\u{113}","\u{123}","\u{12b}","\u{129}","\u{137}","\u{b7}","\u{13c}","\u{111}","\u{161}","\u{167}","\u{17e}","\u{2015}","\u{16b}","\u{14b}","\u{100}","\u{c1}","\u{c2}","\u{c3}","\u{c4}","\u{c5}","\u{c6}","\u{12e}","\u{10c}","\u{c9}","\u{118}","\u{cb}","\u{116}","\u{cd}","\u{ce}","\u{cf}","\u{d0}","\u{145}","\u{14c}","\u{d3}","\u{d4}","\u{d5}","\u{d6}","\u{168}","\u{d8}","\u{172}","\u{da}","\u{db}","\u{dc}","\u{dd}","\u{de}","\u{df}","\u{101}","\u{e1}","\u{e2}","\u{e3}","\u{e4}","\u{e5}","\u{e6}","\u{12f}","\u{10d}","\u{e9}","\u{119}","\u{eb}","\u{117}","\u{ed}","\u{ee}","\u{ef}","\u{f0}","\u{146}","\u{14d}","\u{f3}","\u{f4}","\u{f5}","\u{f6}","\u{169}","\u{f8}","\u{173}","\u{fa}","\u{fb}","\u{fc}","\u{fd}","\u{fe}","\u{138}"]; - const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,274,290,298,296,310,167,315,272,352,358,381,173,362,330,176,261,275,291,299,297,311,183,316,273,353,359,382,8213,363,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,207,208,325,332,211,212,213,214,360,216,370,218,219,220,221,222,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,239,240,326,333,243,244,245,246,361,248,371,250,251,252,253,254,312]; - const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",167=>"\xA7",173=>"\xAD",176=>"\xB0",183=>"\xB7",193=>"\xC1","\xC2","\xC3","\xC4","\xC5","\xC6",201=>"\xC9",203=>"\xCB",205=>"\xCD","\xCE","\xCF","\xD0",211=>"\xD3","\xD4","\xD5","\xD6",216=>"\xD8",218=>"\xDA","\xDB","\xDC","\xDD","\xDE","\xDF",225=>"\xE1","\xE2","\xE3","\xE4","\xE5","\xE6",233=>"\xE9",235=>"\xEB",237=>"\xED","\xEE","\xEF","\xF0",243=>"\xF3","\xF4","\xF5","\xF6",248=>"\xF8",250=>"\xFA","\xFB","\xFC","\xFD","\xFE",256=>"\xC0","\xE0",260=>"\xA1","\xB1",268=>"\xC8","\xE8",272=>"\xA9","\xB9","\xA2","\xB2",278=>"\xCC","\xEC","\xCA","\xEA",290=>"\xA3","\xB3",296=>"\xA5","\xB5","\xA4","\xB4",302=>"\xC7","\xE7",310=>"\xA6","\xB6","\xFF",315=>"\xA8","\xB8",325=>"\xD1","\xF1",330=>"\xAF","\xBF","\xD2","\xF2",352=>"\xAA","\xBA",358=>"\xAB","\xBB","\xD7","\xF7","\xAE","\xBE",370=>"\xD9","\xF9",381=>"\xAC","\xBC",8213=>"\xBD"]; + protected const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{104}","\u{112}","\u{122}","\u{12a}","\u{128}","\u{136}","\u{a7}","\u{13b}","\u{110}","\u{160}","\u{166}","\u{17d}","\u{ad}","\u{16a}","\u{14a}","\u{b0}","\u{105}","\u{113}","\u{123}","\u{12b}","\u{129}","\u{137}","\u{b7}","\u{13c}","\u{111}","\u{161}","\u{167}","\u{17e}","\u{2015}","\u{16b}","\u{14b}","\u{100}","\u{c1}","\u{c2}","\u{c3}","\u{c4}","\u{c5}","\u{c6}","\u{12e}","\u{10c}","\u{c9}","\u{118}","\u{cb}","\u{116}","\u{cd}","\u{ce}","\u{cf}","\u{d0}","\u{145}","\u{14c}","\u{d3}","\u{d4}","\u{d5}","\u{d6}","\u{168}","\u{d8}","\u{172}","\u{da}","\u{db}","\u{dc}","\u{dd}","\u{de}","\u{df}","\u{101}","\u{e1}","\u{e2}","\u{e3}","\u{e4}","\u{e5}","\u{e6}","\u{12f}","\u{10d}","\u{e9}","\u{119}","\u{eb}","\u{117}","\u{ed}","\u{ee}","\u{ef}","\u{f0}","\u{146}","\u{14d}","\u{f3}","\u{f4}","\u{f5}","\u{f6}","\u{169}","\u{f8}","\u{173}","\u{fa}","\u{fb}","\u{fc}","\u{fd}","\u{fe}","\u{138}"]; + protected const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,274,290,298,296,310,167,315,272,352,358,381,173,362,330,176,261,275,291,299,297,311,183,316,273,353,359,382,8213,363,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,207,208,325,332,211,212,213,214,360,216,370,218,219,220,221,222,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,239,240,326,333,243,244,245,246,361,248,371,250,251,252,253,254,312]; + protected const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",167=>"\xA7",173=>"\xAD",176=>"\xB0",183=>"\xB7",193=>"\xC1","\xC2","\xC3","\xC4","\xC5","\xC6",201=>"\xC9",203=>"\xCB",205=>"\xCD","\xCE","\xCF","\xD0",211=>"\xD3","\xD4","\xD5","\xD6",216=>"\xD8",218=>"\xDA","\xDB","\xDC","\xDD","\xDE","\xDF",225=>"\xE1","\xE2","\xE3","\xE4","\xE5","\xE6",233=>"\xE9",235=>"\xEB",237=>"\xED","\xEE","\xEF","\xF0",243=>"\xF3","\xF4","\xF5","\xF6",248=>"\xF8",250=>"\xFA","\xFB","\xFC","\xFD","\xFE",256=>"\xC0","\xE0",260=>"\xA1","\xB1",268=>"\xC8","\xE8",272=>"\xA9","\xB9","\xA2","\xB2",278=>"\xCC","\xEC","\xCA","\xEA",290=>"\xA3","\xB3",296=>"\xA5","\xB5","\xA4","\xB4",302=>"\xC7","\xE7",310=>"\xA6","\xB6","\xFF",315=>"\xA8","\xB8",325=>"\xD1","\xF1",330=>"\xAF","\xBF","\xD2","\xF2",352=>"\xAA","\xBA",358=>"\xAB","\xBB","\xD7","\xF7","\xAE","\xBE",370=>"\xD9","\xF9",381=>"\xAC","\xBC",8213=>"\xBD"]; } diff --git a/lib/Encoding/ISO885913.php b/lib/Encoding/ISO885913.php index f115f57..746fdbf 100644 --- a/lib/Encoding/ISO885913.php +++ b/lib/Encoding/ISO885913.php @@ -7,14 +7,14 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class ISO885913 extends SingleByteEncoding { - const NAME = "ISO-8859-13"; - const LABELS = [ + public const NAME = "ISO-8859-13"; + public const LABELS = [ "iso-8859-13", "iso8859-13", "iso885913", ]; - const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{201d}","\u{a2}","\u{a3}","\u{a4}","\u{201e}","\u{a6}","\u{a7}","\u{d8}","\u{a9}","\u{156}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{c6}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{201c}","\u{b5}","\u{b6}","\u{b7}","\u{f8}","\u{b9}","\u{157}","\u{bb}","\u{bc}","\u{bd}","\u{be}","\u{e6}","\u{104}","\u{12e}","\u{100}","\u{106}","\u{c4}","\u{c5}","\u{118}","\u{112}","\u{10c}","\u{c9}","\u{179}","\u{116}","\u{122}","\u{136}","\u{12a}","\u{13b}","\u{160}","\u{143}","\u{145}","\u{d3}","\u{14c}","\u{d5}","\u{d6}","\u{d7}","\u{172}","\u{141}","\u{15a}","\u{16a}","\u{dc}","\u{17b}","\u{17d}","\u{df}","\u{105}","\u{12f}","\u{101}","\u{107}","\u{e4}","\u{e5}","\u{119}","\u{113}","\u{10d}","\u{e9}","\u{17a}","\u{117}","\u{123}","\u{137}","\u{12b}","\u{13c}","\u{161}","\u{144}","\u{146}","\u{f3}","\u{14d}","\u{f5}","\u{f6}","\u{f7}","\u{173}","\u{142}","\u{15b}","\u{16b}","\u{fc}","\u{17c}","\u{17e}","\u{2019}"]; - const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8221,162,163,164,8222,166,167,216,169,342,171,172,173,174,198,176,177,178,179,8220,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,8217]; - const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",162=>"\xA2","\xA3","\xA4",166=>"\xA6","\xA7",169=>"\xA9",171=>"\xAB","\xAC","\xAD","\xAE",176=>"\xB0","\xB1","\xB2","\xB3",181=>"\xB5","\xB6","\xB7",185=>"\xB9",187=>"\xBB","\xBC","\xBD","\xBE",196=>"\xC4","\xC5","\xAF",201=>"\xC9",211=>"\xD3",213=>"\xD5","\xD6","\xD7","\xA8",220=>"\xDC",223=>"\xDF",228=>"\xE4","\xE5","\xBF",233=>"\xE9",243=>"\xF3",245=>"\xF5","\xF6","\xF7","\xB8",252=>"\xFC",256=>"\xC2","\xE2",260=>"\xC0","\xE0","\xC3","\xE3",268=>"\xC8","\xE8",274=>"\xC7","\xE7",278=>"\xCB","\xEB","\xC6","\xE6",290=>"\xCC","\xEC",298=>"\xCE","\xEE",302=>"\xC1","\xE1",310=>"\xCD","\xED",315=>"\xCF","\xEF",321=>"\xD9","\xF9","\xD1","\xF1","\xD2","\xF2",332=>"\xD4","\xF4",342=>"\xAA","\xBA",346=>"\xDA","\xFA",352=>"\xD0","\xF0",362=>"\xDB","\xFB",370=>"\xD8","\xF8",377=>"\xCA","\xEA","\xDD","\xFD","\xDE","\xFE",8217=>"\xFF",8220=>"\xB4","\xA1","\xA5"]; + protected const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{201d}","\u{a2}","\u{a3}","\u{a4}","\u{201e}","\u{a6}","\u{a7}","\u{d8}","\u{a9}","\u{156}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{c6}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{201c}","\u{b5}","\u{b6}","\u{b7}","\u{f8}","\u{b9}","\u{157}","\u{bb}","\u{bc}","\u{bd}","\u{be}","\u{e6}","\u{104}","\u{12e}","\u{100}","\u{106}","\u{c4}","\u{c5}","\u{118}","\u{112}","\u{10c}","\u{c9}","\u{179}","\u{116}","\u{122}","\u{136}","\u{12a}","\u{13b}","\u{160}","\u{143}","\u{145}","\u{d3}","\u{14c}","\u{d5}","\u{d6}","\u{d7}","\u{172}","\u{141}","\u{15a}","\u{16a}","\u{dc}","\u{17b}","\u{17d}","\u{df}","\u{105}","\u{12f}","\u{101}","\u{107}","\u{e4}","\u{e5}","\u{119}","\u{113}","\u{10d}","\u{e9}","\u{17a}","\u{117}","\u{123}","\u{137}","\u{12b}","\u{13c}","\u{161}","\u{144}","\u{146}","\u{f3}","\u{14d}","\u{f5}","\u{f6}","\u{f7}","\u{173}","\u{142}","\u{15b}","\u{16b}","\u{fc}","\u{17c}","\u{17e}","\u{2019}"]; + protected const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8221,162,163,164,8222,166,167,216,169,342,171,172,173,174,198,176,177,178,179,8220,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,8217]; + protected const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",162=>"\xA2","\xA3","\xA4",166=>"\xA6","\xA7",169=>"\xA9",171=>"\xAB","\xAC","\xAD","\xAE",176=>"\xB0","\xB1","\xB2","\xB3",181=>"\xB5","\xB6","\xB7",185=>"\xB9",187=>"\xBB","\xBC","\xBD","\xBE",196=>"\xC4","\xC5","\xAF",201=>"\xC9",211=>"\xD3",213=>"\xD5","\xD6","\xD7","\xA8",220=>"\xDC",223=>"\xDF",228=>"\xE4","\xE5","\xBF",233=>"\xE9",243=>"\xF3",245=>"\xF5","\xF6","\xF7","\xB8",252=>"\xFC",256=>"\xC2","\xE2",260=>"\xC0","\xE0","\xC3","\xE3",268=>"\xC8","\xE8",274=>"\xC7","\xE7",278=>"\xCB","\xEB","\xC6","\xE6",290=>"\xCC","\xEC",298=>"\xCE","\xEE",302=>"\xC1","\xE1",310=>"\xCD","\xED",315=>"\xCF","\xEF",321=>"\xD9","\xF9","\xD1","\xF1","\xD2","\xF2",332=>"\xD4","\xF4",342=>"\xAA","\xBA",346=>"\xDA","\xFA",352=>"\xD0","\xF0",362=>"\xDB","\xFB",370=>"\xD8","\xF8",377=>"\xCA","\xEA","\xDD","\xFD","\xDE","\xFE",8217=>"\xFF",8220=>"\xB4","\xA1","\xA5"]; } diff --git a/lib/Encoding/ISO885914.php b/lib/Encoding/ISO885914.php index bf4e51b..4d9d517 100644 --- a/lib/Encoding/ISO885914.php +++ b/lib/Encoding/ISO885914.php @@ -7,14 +7,14 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class ISO885914 extends SingleByteEncoding { - const NAME = "ISO-8859-14"; - const LABELS = [ + public const NAME = "ISO-8859-14"; + public const LABELS = [ "iso-8859-14", "iso8859-14", "iso885914", ]; - const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{1e02}","\u{1e03}","\u{a3}","\u{10a}","\u{10b}","\u{1e0a}","\u{a7}","\u{1e80}","\u{a9}","\u{1e82}","\u{1e0b}","\u{1ef2}","\u{ad}","\u{ae}","\u{178}","\u{1e1e}","\u{1e1f}","\u{120}","\u{121}","\u{1e40}","\u{1e41}","\u{b6}","\u{1e56}","\u{1e81}","\u{1e57}","\u{1e83}","\u{1e60}","\u{1ef3}","\u{1e84}","\u{1e85}","\u{1e61}","\u{c0}","\u{c1}","\u{c2}","\u{c3}","\u{c4}","\u{c5}","\u{c6}","\u{c7}","\u{c8}","\u{c9}","\u{ca}","\u{cb}","\u{cc}","\u{cd}","\u{ce}","\u{cf}","\u{174}","\u{d1}","\u{d2}","\u{d3}","\u{d4}","\u{d5}","\u{d6}","\u{1e6a}","\u{d8}","\u{d9}","\u{da}","\u{db}","\u{dc}","\u{dd}","\u{176}","\u{df}","\u{e0}","\u{e1}","\u{e2}","\u{e3}","\u{e4}","\u{e5}","\u{e6}","\u{e7}","\u{e8}","\u{e9}","\u{ea}","\u{eb}","\u{ec}","\u{ed}","\u{ee}","\u{ef}","\u{175}","\u{f1}","\u{f2}","\u{f3}","\u{f4}","\u{f5}","\u{f6}","\u{1e6b}","\u{f8}","\u{f9}","\u{fa}","\u{fb}","\u{fc}","\u{fd}","\u{177}","\u{ff}"]; - const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,7682,7683,163,266,267,7690,167,7808,169,7810,7691,7922,173,174,376,7710,7711,288,289,7744,7745,182,7766,7809,7767,7811,7776,7923,7812,7813,7777,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,372,209,210,211,212,213,214,7786,216,217,218,219,220,221,374,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,373,241,242,243,244,245,246,7787,248,249,250,251,252,253,375,255]; - const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",163=>"\xA3",167=>"\xA7",169=>"\xA9",173=>"\xAD","\xAE",182=>"\xB6",192=>"\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF",209=>"\xD1","\xD2","\xD3","\xD4","\xD5","\xD6",216=>"\xD8","\xD9","\xDA","\xDB","\xDC","\xDD",223=>"\xDF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF",241=>"\xF1","\xF2","\xF3","\xF4","\xF5","\xF6",248=>"\xF8","\xF9","\xFA","\xFB","\xFC","\xFD",255=>"\xFF",266=>"\xA4","\xA5",288=>"\xB2","\xB3",372=>"\xD0","\xF0","\xDE","\xFE","\xAF",7682=>"\xA1","\xA2",7690=>"\xA6","\xAB",7710=>"\xB0","\xB1",7744=>"\xB4","\xB5",7766=>"\xB7","\xB9",7776=>"\xBB","\xBF",7786=>"\xD7","\xF7",7808=>"\xA8","\xB8","\xAA","\xBA","\xBD","\xBE",7922=>"\xAC","\xBC"]; + protected const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{1e02}","\u{1e03}","\u{a3}","\u{10a}","\u{10b}","\u{1e0a}","\u{a7}","\u{1e80}","\u{a9}","\u{1e82}","\u{1e0b}","\u{1ef2}","\u{ad}","\u{ae}","\u{178}","\u{1e1e}","\u{1e1f}","\u{120}","\u{121}","\u{1e40}","\u{1e41}","\u{b6}","\u{1e56}","\u{1e81}","\u{1e57}","\u{1e83}","\u{1e60}","\u{1ef3}","\u{1e84}","\u{1e85}","\u{1e61}","\u{c0}","\u{c1}","\u{c2}","\u{c3}","\u{c4}","\u{c5}","\u{c6}","\u{c7}","\u{c8}","\u{c9}","\u{ca}","\u{cb}","\u{cc}","\u{cd}","\u{ce}","\u{cf}","\u{174}","\u{d1}","\u{d2}","\u{d3}","\u{d4}","\u{d5}","\u{d6}","\u{1e6a}","\u{d8}","\u{d9}","\u{da}","\u{db}","\u{dc}","\u{dd}","\u{176}","\u{df}","\u{e0}","\u{e1}","\u{e2}","\u{e3}","\u{e4}","\u{e5}","\u{e6}","\u{e7}","\u{e8}","\u{e9}","\u{ea}","\u{eb}","\u{ec}","\u{ed}","\u{ee}","\u{ef}","\u{175}","\u{f1}","\u{f2}","\u{f3}","\u{f4}","\u{f5}","\u{f6}","\u{1e6b}","\u{f8}","\u{f9}","\u{fa}","\u{fb}","\u{fc}","\u{fd}","\u{177}","\u{ff}"]; + protected const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,7682,7683,163,266,267,7690,167,7808,169,7810,7691,7922,173,174,376,7710,7711,288,289,7744,7745,182,7766,7809,7767,7811,7776,7923,7812,7813,7777,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,372,209,210,211,212,213,214,7786,216,217,218,219,220,221,374,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,373,241,242,243,244,245,246,7787,248,249,250,251,252,253,375,255]; + protected const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",163=>"\xA3",167=>"\xA7",169=>"\xA9",173=>"\xAD","\xAE",182=>"\xB6",192=>"\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF",209=>"\xD1","\xD2","\xD3","\xD4","\xD5","\xD6",216=>"\xD8","\xD9","\xDA","\xDB","\xDC","\xDD",223=>"\xDF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF",241=>"\xF1","\xF2","\xF3","\xF4","\xF5","\xF6",248=>"\xF8","\xF9","\xFA","\xFB","\xFC","\xFD",255=>"\xFF",266=>"\xA4","\xA5",288=>"\xB2","\xB3",372=>"\xD0","\xF0","\xDE","\xFE","\xAF",7682=>"\xA1","\xA2",7690=>"\xA6","\xAB",7710=>"\xB0","\xB1",7744=>"\xB4","\xB5",7766=>"\xB7","\xB9",7776=>"\xBB","\xBF",7786=>"\xD7","\xF7",7808=>"\xA8","\xB8","\xAA","\xBA","\xBD","\xBE",7922=>"\xAC","\xBC"]; } diff --git a/lib/Encoding/ISO885915.php b/lib/Encoding/ISO885915.php index 4839f57..f1ba968 100644 --- a/lib/Encoding/ISO885915.php +++ b/lib/Encoding/ISO885915.php @@ -7,8 +7,8 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class ISO885915 extends SingleByteEncoding { - const NAME = "ISO-8859-15"; - const LABELS = [ + public const NAME = "ISO-8859-15"; + public const LABELS = [ "csisolatin9", "iso-8859-15", "iso8859-15", @@ -17,7 +17,7 @@ class ISO885915 extends SingleByteEncoding { "l9", ]; - const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{a1}","\u{a2}","\u{a3}","\u{20ac}","\u{a5}","\u{160}","\u{a7}","\u{161}","\u{a9}","\u{aa}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{af}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{17d}","\u{b5}","\u{b6}","\u{b7}","\u{17e}","\u{b9}","\u{ba}","\u{bb}","\u{152}","\u{153}","\u{178}","\u{bf}","\u{c0}","\u{c1}","\u{c2}","\u{c3}","\u{c4}","\u{c5}","\u{c6}","\u{c7}","\u{c8}","\u{c9}","\u{ca}","\u{cb}","\u{cc}","\u{cd}","\u{ce}","\u{cf}","\u{d0}","\u{d1}","\u{d2}","\u{d3}","\u{d4}","\u{d5}","\u{d6}","\u{d7}","\u{d8}","\u{d9}","\u{da}","\u{db}","\u{dc}","\u{dd}","\u{de}","\u{df}","\u{e0}","\u{e1}","\u{e2}","\u{e3}","\u{e4}","\u{e5}","\u{e6}","\u{e7}","\u{e8}","\u{e9}","\u{ea}","\u{eb}","\u{ec}","\u{ed}","\u{ee}","\u{ef}","\u{f0}","\u{f1}","\u{f2}","\u{f3}","\u{f4}","\u{f5}","\u{f6}","\u{f7}","\u{f8}","\u{f9}","\u{fa}","\u{fb}","\u{fc}","\u{fd}","\u{fe}","\u{ff}"]; - const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,8364,165,352,167,353,169,170,171,172,173,174,175,176,177,178,179,381,181,182,183,382,185,186,187,338,339,376,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255]; - const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0","\xA1","\xA2","\xA3",165=>"\xA5",167=>"\xA7",169=>"\xA9","\xAA","\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB3",181=>"\xB5","\xB6","\xB7",185=>"\xB9","\xBA","\xBB",191=>"\xBF","\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD7","\xD8","\xD9","\xDA","\xDB","\xDC","\xDD","\xDE","\xDF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA","\xFB","\xFC","\xFD","\xFE","\xFF",338=>"\xBC","\xBD",352=>"\xA6","\xA8",376=>"\xBE",381=>"\xB4","\xB8",8364=>"\xA4"]; + protected const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{a1}","\u{a2}","\u{a3}","\u{20ac}","\u{a5}","\u{160}","\u{a7}","\u{161}","\u{a9}","\u{aa}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{af}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{17d}","\u{b5}","\u{b6}","\u{b7}","\u{17e}","\u{b9}","\u{ba}","\u{bb}","\u{152}","\u{153}","\u{178}","\u{bf}","\u{c0}","\u{c1}","\u{c2}","\u{c3}","\u{c4}","\u{c5}","\u{c6}","\u{c7}","\u{c8}","\u{c9}","\u{ca}","\u{cb}","\u{cc}","\u{cd}","\u{ce}","\u{cf}","\u{d0}","\u{d1}","\u{d2}","\u{d3}","\u{d4}","\u{d5}","\u{d6}","\u{d7}","\u{d8}","\u{d9}","\u{da}","\u{db}","\u{dc}","\u{dd}","\u{de}","\u{df}","\u{e0}","\u{e1}","\u{e2}","\u{e3}","\u{e4}","\u{e5}","\u{e6}","\u{e7}","\u{e8}","\u{e9}","\u{ea}","\u{eb}","\u{ec}","\u{ed}","\u{ee}","\u{ef}","\u{f0}","\u{f1}","\u{f2}","\u{f3}","\u{f4}","\u{f5}","\u{f6}","\u{f7}","\u{f8}","\u{f9}","\u{fa}","\u{fb}","\u{fc}","\u{fd}","\u{fe}","\u{ff}"]; + protected const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,8364,165,352,167,353,169,170,171,172,173,174,175,176,177,178,179,381,181,182,183,382,185,186,187,338,339,376,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255]; + protected const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0","\xA1","\xA2","\xA3",165=>"\xA5",167=>"\xA7",169=>"\xA9","\xAA","\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB3",181=>"\xB5","\xB6","\xB7",185=>"\xB9","\xBA","\xBB",191=>"\xBF","\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD7","\xD8","\xD9","\xDA","\xDB","\xDC","\xDD","\xDE","\xDF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA","\xFB","\xFC","\xFD","\xFE","\xFF",338=>"\xBC","\xBD",352=>"\xA6","\xA8",376=>"\xBE",381=>"\xB4","\xB8",8364=>"\xA4"]; } diff --git a/lib/Encoding/ISO885916.php b/lib/Encoding/ISO885916.php index 3d1610d..f6af066 100644 --- a/lib/Encoding/ISO885916.php +++ b/lib/Encoding/ISO885916.php @@ -7,12 +7,12 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class ISO885916 extends SingleByteEncoding { - const NAME = "ISO-8859-16"; - const LABELS = [ + public const NAME = "ISO-8859-16"; + public const LABELS = [ "iso-8859-16", ]; - const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{104}","\u{105}","\u{141}","\u{20ac}","\u{201e}","\u{160}","\u{a7}","\u{161}","\u{a9}","\u{218}","\u{ab}","\u{179}","\u{ad}","\u{17a}","\u{17b}","\u{b0}","\u{b1}","\u{10c}","\u{142}","\u{17d}","\u{201d}","\u{b6}","\u{b7}","\u{17e}","\u{10d}","\u{219}","\u{bb}","\u{152}","\u{153}","\u{178}","\u{17c}","\u{c0}","\u{c1}","\u{c2}","\u{102}","\u{c4}","\u{106}","\u{c6}","\u{c7}","\u{c8}","\u{c9}","\u{ca}","\u{cb}","\u{cc}","\u{cd}","\u{ce}","\u{cf}","\u{110}","\u{143}","\u{d2}","\u{d3}","\u{d4}","\u{150}","\u{d6}","\u{15a}","\u{170}","\u{d9}","\u{da}","\u{db}","\u{dc}","\u{118}","\u{21a}","\u{df}","\u{e0}","\u{e1}","\u{e2}","\u{103}","\u{e4}","\u{107}","\u{e6}","\u{e7}","\u{e8}","\u{e9}","\u{ea}","\u{eb}","\u{ec}","\u{ed}","\u{ee}","\u{ef}","\u{111}","\u{144}","\u{f2}","\u{f3}","\u{f4}","\u{151}","\u{f6}","\u{15b}","\u{171}","\u{f9}","\u{fa}","\u{fb}","\u{fc}","\u{119}","\u{21b}","\u{ff}"]; - const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,261,321,8364,8222,352,167,353,169,536,171,377,173,378,379,176,177,268,322,381,8221,182,183,382,269,537,187,338,339,376,380,192,193,194,258,196,262,198,199,200,201,202,203,204,205,206,207,272,323,210,211,212,336,214,346,368,217,218,219,220,280,538,223,224,225,226,259,228,263,230,231,232,233,234,235,236,237,238,239,273,324,242,243,244,337,246,347,369,249,250,251,252,281,539,255]; - const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",167=>"\xA7",169=>"\xA9",171=>"\xAB",173=>"\xAD",176=>"\xB0","\xB1",182=>"\xB6","\xB7",187=>"\xBB",192=>"\xC0","\xC1","\xC2",196=>"\xC4",198=>"\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF",210=>"\xD2","\xD3","\xD4",214=>"\xD6",217=>"\xD9","\xDA","\xDB","\xDC",223=>"\xDF","\xE0","\xE1","\xE2",228=>"\xE4",230=>"\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF",242=>"\xF2","\xF3","\xF4",246=>"\xF6",249=>"\xF9","\xFA","\xFB","\xFC",255=>"\xFF",258=>"\xC3","\xE3","\xA1","\xA2","\xC5","\xE5",268=>"\xB2","\xB9",272=>"\xD0","\xF0",280=>"\xDD","\xFD",321=>"\xA3","\xB3","\xD1","\xF1",336=>"\xD5","\xF5","\xBC","\xBD",346=>"\xD7","\xF7",352=>"\xA6","\xA8",368=>"\xD8","\xF8",376=>"\xBE","\xAC","\xAE","\xAF","\xBF","\xB4","\xB8",536=>"\xAA","\xBA","\xDE","\xFE",8221=>"\xB5","\xA5",8364=>"\xA4"]; + protected const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{104}","\u{105}","\u{141}","\u{20ac}","\u{201e}","\u{160}","\u{a7}","\u{161}","\u{a9}","\u{218}","\u{ab}","\u{179}","\u{ad}","\u{17a}","\u{17b}","\u{b0}","\u{b1}","\u{10c}","\u{142}","\u{17d}","\u{201d}","\u{b6}","\u{b7}","\u{17e}","\u{10d}","\u{219}","\u{bb}","\u{152}","\u{153}","\u{178}","\u{17c}","\u{c0}","\u{c1}","\u{c2}","\u{102}","\u{c4}","\u{106}","\u{c6}","\u{c7}","\u{c8}","\u{c9}","\u{ca}","\u{cb}","\u{cc}","\u{cd}","\u{ce}","\u{cf}","\u{110}","\u{143}","\u{d2}","\u{d3}","\u{d4}","\u{150}","\u{d6}","\u{15a}","\u{170}","\u{d9}","\u{da}","\u{db}","\u{dc}","\u{118}","\u{21a}","\u{df}","\u{e0}","\u{e1}","\u{e2}","\u{103}","\u{e4}","\u{107}","\u{e6}","\u{e7}","\u{e8}","\u{e9}","\u{ea}","\u{eb}","\u{ec}","\u{ed}","\u{ee}","\u{ef}","\u{111}","\u{144}","\u{f2}","\u{f3}","\u{f4}","\u{151}","\u{f6}","\u{15b}","\u{171}","\u{f9}","\u{fa}","\u{fb}","\u{fc}","\u{119}","\u{21b}","\u{ff}"]; + protected const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,261,321,8364,8222,352,167,353,169,536,171,377,173,378,379,176,177,268,322,381,8221,182,183,382,269,537,187,338,339,376,380,192,193,194,258,196,262,198,199,200,201,202,203,204,205,206,207,272,323,210,211,212,336,214,346,368,217,218,219,220,280,538,223,224,225,226,259,228,263,230,231,232,233,234,235,236,237,238,239,273,324,242,243,244,337,246,347,369,249,250,251,252,281,539,255]; + protected const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",167=>"\xA7",169=>"\xA9",171=>"\xAB",173=>"\xAD",176=>"\xB0","\xB1",182=>"\xB6","\xB7",187=>"\xBB",192=>"\xC0","\xC1","\xC2",196=>"\xC4",198=>"\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF",210=>"\xD2","\xD3","\xD4",214=>"\xD6",217=>"\xD9","\xDA","\xDB","\xDC",223=>"\xDF","\xE0","\xE1","\xE2",228=>"\xE4",230=>"\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF",242=>"\xF2","\xF3","\xF4",246=>"\xF6",249=>"\xF9","\xFA","\xFB","\xFC",255=>"\xFF",258=>"\xC3","\xE3","\xA1","\xA2","\xC5","\xE5",268=>"\xB2","\xB9",272=>"\xD0","\xF0",280=>"\xDD","\xFD",321=>"\xA3","\xB3","\xD1","\xF1",336=>"\xD5","\xF5","\xBC","\xBD",346=>"\xD7","\xF7",352=>"\xA6","\xA8",368=>"\xD8","\xF8",376=>"\xBE","\xAC","\xAE","\xAF","\xBF","\xB4","\xB8",536=>"\xAA","\xBA","\xDE","\xFE",8221=>"\xB5","\xA5",8364=>"\xA4"]; } diff --git a/lib/Encoding/ISO88592.php b/lib/Encoding/ISO88592.php index 4a914c0..67c62a6 100644 --- a/lib/Encoding/ISO88592.php +++ b/lib/Encoding/ISO88592.php @@ -7,8 +7,8 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class ISO88592 extends SingleByteEncoding { - const NAME = "ISO-8859-2"; - const LABELS = [ + public const NAME = "ISO-8859-2"; + public const LABELS = [ "csisolatin2", "iso-8859-2", "iso-ir-101", @@ -20,7 +20,7 @@ class ISO88592 extends SingleByteEncoding { "latin2", ]; - const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{104}","\u{2d8}","\u{141}","\u{a4}","\u{13d}","\u{15a}","\u{a7}","\u{a8}","\u{160}","\u{15e}","\u{164}","\u{179}","\u{ad}","\u{17d}","\u{17b}","\u{b0}","\u{105}","\u{2db}","\u{142}","\u{b4}","\u{13e}","\u{15b}","\u{2c7}","\u{b8}","\u{161}","\u{15f}","\u{165}","\u{17a}","\u{2dd}","\u{17e}","\u{17c}","\u{154}","\u{c1}","\u{c2}","\u{102}","\u{c4}","\u{139}","\u{106}","\u{c7}","\u{10c}","\u{c9}","\u{118}","\u{cb}","\u{11a}","\u{cd}","\u{ce}","\u{10e}","\u{110}","\u{143}","\u{147}","\u{d3}","\u{d4}","\u{150}","\u{d6}","\u{d7}","\u{158}","\u{16e}","\u{da}","\u{170}","\u{dc}","\u{dd}","\u{162}","\u{df}","\u{155}","\u{e1}","\u{e2}","\u{103}","\u{e4}","\u{13a}","\u{107}","\u{e7}","\u{10d}","\u{e9}","\u{119}","\u{eb}","\u{11b}","\u{ed}","\u{ee}","\u{10f}","\u{111}","\u{144}","\u{148}","\u{f3}","\u{f4}","\u{151}","\u{f6}","\u{f7}","\u{159}","\u{16f}","\u{fa}","\u{171}","\u{fc}","\u{fd}","\u{163}","\u{2d9}"]; - const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,728,321,164,317,346,167,168,352,350,356,377,173,381,379,176,261,731,322,180,318,347,711,184,353,351,357,378,733,382,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729]; - const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",164=>"\xA4",167=>"\xA7","\xA8",173=>"\xAD",176=>"\xB0",180=>"\xB4",184=>"\xB8",193=>"\xC1","\xC2",196=>"\xC4",199=>"\xC7",201=>"\xC9",203=>"\xCB",205=>"\xCD","\xCE",211=>"\xD3","\xD4",214=>"\xD6","\xD7",218=>"\xDA",220=>"\xDC","\xDD",223=>"\xDF",225=>"\xE1","\xE2",228=>"\xE4",231=>"\xE7",233=>"\xE9",235=>"\xEB",237=>"\xED","\xEE",243=>"\xF3","\xF4",246=>"\xF6","\xF7",250=>"\xFA",252=>"\xFC","\xFD",258=>"\xC3","\xE3","\xA1","\xB1","\xC6","\xE6",268=>"\xC8","\xE8","\xCF","\xEF","\xD0","\xF0",280=>"\xCA","\xEA","\xCC","\xEC",313=>"\xC5","\xE5",317=>"\xA5","\xB5",321=>"\xA3","\xB3","\xD1","\xF1",327=>"\xD2","\xF2",336=>"\xD5","\xF5",340=>"\xC0","\xE0",344=>"\xD8","\xF8","\xA6","\xB6",350=>"\xAA","\xBA","\xA9","\xB9","\xDE","\xFE","\xAB","\xBB",366=>"\xD9","\xF9","\xDB","\xFB",377=>"\xAC","\xBC","\xAF","\xBF","\xAE","\xBE",711=>"\xB7",728=>"\xA2","\xFF",731=>"\xB2",733=>"\xBD"]; + protected const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{104}","\u{2d8}","\u{141}","\u{a4}","\u{13d}","\u{15a}","\u{a7}","\u{a8}","\u{160}","\u{15e}","\u{164}","\u{179}","\u{ad}","\u{17d}","\u{17b}","\u{b0}","\u{105}","\u{2db}","\u{142}","\u{b4}","\u{13e}","\u{15b}","\u{2c7}","\u{b8}","\u{161}","\u{15f}","\u{165}","\u{17a}","\u{2dd}","\u{17e}","\u{17c}","\u{154}","\u{c1}","\u{c2}","\u{102}","\u{c4}","\u{139}","\u{106}","\u{c7}","\u{10c}","\u{c9}","\u{118}","\u{cb}","\u{11a}","\u{cd}","\u{ce}","\u{10e}","\u{110}","\u{143}","\u{147}","\u{d3}","\u{d4}","\u{150}","\u{d6}","\u{d7}","\u{158}","\u{16e}","\u{da}","\u{170}","\u{dc}","\u{dd}","\u{162}","\u{df}","\u{155}","\u{e1}","\u{e2}","\u{103}","\u{e4}","\u{13a}","\u{107}","\u{e7}","\u{10d}","\u{e9}","\u{119}","\u{eb}","\u{11b}","\u{ed}","\u{ee}","\u{10f}","\u{111}","\u{144}","\u{148}","\u{f3}","\u{f4}","\u{151}","\u{f6}","\u{f7}","\u{159}","\u{16f}","\u{fa}","\u{171}","\u{fc}","\u{fd}","\u{163}","\u{2d9}"]; + protected const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,728,321,164,317,346,167,168,352,350,356,377,173,381,379,176,261,731,322,180,318,347,711,184,353,351,357,378,733,382,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729]; + protected const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",164=>"\xA4",167=>"\xA7","\xA8",173=>"\xAD",176=>"\xB0",180=>"\xB4",184=>"\xB8",193=>"\xC1","\xC2",196=>"\xC4",199=>"\xC7",201=>"\xC9",203=>"\xCB",205=>"\xCD","\xCE",211=>"\xD3","\xD4",214=>"\xD6","\xD7",218=>"\xDA",220=>"\xDC","\xDD",223=>"\xDF",225=>"\xE1","\xE2",228=>"\xE4",231=>"\xE7",233=>"\xE9",235=>"\xEB",237=>"\xED","\xEE",243=>"\xF3","\xF4",246=>"\xF6","\xF7",250=>"\xFA",252=>"\xFC","\xFD",258=>"\xC3","\xE3","\xA1","\xB1","\xC6","\xE6",268=>"\xC8","\xE8","\xCF","\xEF","\xD0","\xF0",280=>"\xCA","\xEA","\xCC","\xEC",313=>"\xC5","\xE5",317=>"\xA5","\xB5",321=>"\xA3","\xB3","\xD1","\xF1",327=>"\xD2","\xF2",336=>"\xD5","\xF5",340=>"\xC0","\xE0",344=>"\xD8","\xF8","\xA6","\xB6",350=>"\xAA","\xBA","\xA9","\xB9","\xDE","\xFE","\xAB","\xBB",366=>"\xD9","\xF9","\xDB","\xFB",377=>"\xAC","\xBC","\xAF","\xBF","\xAE","\xBE",711=>"\xB7",728=>"\xA2","\xFF",731=>"\xB2",733=>"\xBD"]; } diff --git a/lib/Encoding/ISO88593.php b/lib/Encoding/ISO88593.php index 04563ed..58b13c1 100644 --- a/lib/Encoding/ISO88593.php +++ b/lib/Encoding/ISO88593.php @@ -7,8 +7,8 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class ISO88593 extends SingleByteEncoding { - const NAME = "ISO-8859-3"; - const LABELS = [ + public const NAME = "ISO-8859-3"; + public const LABELS = [ "csisolatin3", "iso-8859-3", "iso-ir-109", @@ -20,7 +20,7 @@ class ISO88593 extends SingleByteEncoding { "latin3", ]; - const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{126}","\u{2d8}","\u{a3}","\u{a4}",38=>"\u{124}","\u{a7}","\u{a8}","\u{130}","\u{15e}","\u{11e}","\u{134}","\u{ad}",47=>"\u{17b}","\u{b0}","\u{127}","\u{b2}","\u{b3}","\u{b4}","\u{b5}","\u{125}","\u{b7}","\u{b8}","\u{131}","\u{15f}","\u{11f}","\u{135}","\u{bd}",63=>"\u{17c}","\u{c0}","\u{c1}","\u{c2}",68=>"\u{c4}","\u{10a}","\u{108}","\u{c7}","\u{c8}","\u{c9}","\u{ca}","\u{cb}","\u{cc}","\u{cd}","\u{ce}","\u{cf}",81=>"\u{d1}","\u{d2}","\u{d3}","\u{d4}","\u{120}","\u{d6}","\u{d7}","\u{11c}","\u{d9}","\u{da}","\u{db}","\u{dc}","\u{16c}","\u{15c}","\u{df}","\u{e0}","\u{e1}","\u{e2}",100=>"\u{e4}","\u{10b}","\u{109}","\u{e7}","\u{e8}","\u{e9}","\u{ea}","\u{eb}","\u{ec}","\u{ed}","\u{ee}","\u{ef}",113=>"\u{f1}","\u{f2}","\u{f3}","\u{f4}","\u{121}","\u{f6}","\u{f7}","\u{11d}","\u{f9}","\u{fa}","\u{fb}","\u{fc}","\u{16d}","\u{15d}","\u{2d9}"]; - const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,294,728,163,164,38=>292,167,168,304,350,286,308,173,47=>379,176,295,178,179,180,181,293,183,184,305,351,287,309,189,63=>380,192,193,194,68=>196,266,264,199,200,201,202,203,204,205,206,207,81=>209,210,211,212,288,214,215,284,217,218,219,220,364,348,223,224,225,226,100=>228,267,265,231,232,233,234,235,236,237,238,239,113=>241,242,243,244,289,246,247,285,249,250,251,252,365,349,729]; - const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",163=>"\xA3","\xA4",167=>"\xA7","\xA8",173=>"\xAD",176=>"\xB0",178=>"\xB2","\xB3","\xB4","\xB5",183=>"\xB7","\xB8",189=>"\xBD",192=>"\xC0","\xC1","\xC2",196=>"\xC4",199=>"\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF",209=>"\xD1","\xD2","\xD3","\xD4",214=>"\xD6","\xD7",217=>"\xD9","\xDA","\xDB","\xDC",223=>"\xDF","\xE0","\xE1","\xE2",228=>"\xE4",231=>"\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF",241=>"\xF1","\xF2","\xF3","\xF4",246=>"\xF6","\xF7",249=>"\xF9","\xFA","\xFB","\xFC",264=>"\xC6","\xE6","\xC5","\xE5",284=>"\xD8","\xF8","\xAB","\xBB","\xD5","\xF5",292=>"\xA6","\xB6","\xA1","\xB1",304=>"\xA9","\xB9",308=>"\xAC","\xBC",348=>"\xDE","\xFE","\xAA","\xBA",364=>"\xDD","\xFD",379=>"\xAF","\xBF",728=>"\xA2","\xFF"]; + protected const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{126}","\u{2d8}","\u{a3}","\u{a4}",38=>"\u{124}","\u{a7}","\u{a8}","\u{130}","\u{15e}","\u{11e}","\u{134}","\u{ad}",47=>"\u{17b}","\u{b0}","\u{127}","\u{b2}","\u{b3}","\u{b4}","\u{b5}","\u{125}","\u{b7}","\u{b8}","\u{131}","\u{15f}","\u{11f}","\u{135}","\u{bd}",63=>"\u{17c}","\u{c0}","\u{c1}","\u{c2}",68=>"\u{c4}","\u{10a}","\u{108}","\u{c7}","\u{c8}","\u{c9}","\u{ca}","\u{cb}","\u{cc}","\u{cd}","\u{ce}","\u{cf}",81=>"\u{d1}","\u{d2}","\u{d3}","\u{d4}","\u{120}","\u{d6}","\u{d7}","\u{11c}","\u{d9}","\u{da}","\u{db}","\u{dc}","\u{16c}","\u{15c}","\u{df}","\u{e0}","\u{e1}","\u{e2}",100=>"\u{e4}","\u{10b}","\u{109}","\u{e7}","\u{e8}","\u{e9}","\u{ea}","\u{eb}","\u{ec}","\u{ed}","\u{ee}","\u{ef}",113=>"\u{f1}","\u{f2}","\u{f3}","\u{f4}","\u{121}","\u{f6}","\u{f7}","\u{11d}","\u{f9}","\u{fa}","\u{fb}","\u{fc}","\u{16d}","\u{15d}","\u{2d9}"]; + protected const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,294,728,163,164,38=>292,167,168,304,350,286,308,173,47=>379,176,295,178,179,180,181,293,183,184,305,351,287,309,189,63=>380,192,193,194,68=>196,266,264,199,200,201,202,203,204,205,206,207,81=>209,210,211,212,288,214,215,284,217,218,219,220,364,348,223,224,225,226,100=>228,267,265,231,232,233,234,235,236,237,238,239,113=>241,242,243,244,289,246,247,285,249,250,251,252,365,349,729]; + protected const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",163=>"\xA3","\xA4",167=>"\xA7","\xA8",173=>"\xAD",176=>"\xB0",178=>"\xB2","\xB3","\xB4","\xB5",183=>"\xB7","\xB8",189=>"\xBD",192=>"\xC0","\xC1","\xC2",196=>"\xC4",199=>"\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF",209=>"\xD1","\xD2","\xD3","\xD4",214=>"\xD6","\xD7",217=>"\xD9","\xDA","\xDB","\xDC",223=>"\xDF","\xE0","\xE1","\xE2",228=>"\xE4",231=>"\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF",241=>"\xF1","\xF2","\xF3","\xF4",246=>"\xF6","\xF7",249=>"\xF9","\xFA","\xFB","\xFC",264=>"\xC6","\xE6","\xC5","\xE5",284=>"\xD8","\xF8","\xAB","\xBB","\xD5","\xF5",292=>"\xA6","\xB6","\xA1","\xB1",304=>"\xA9","\xB9",308=>"\xAC","\xBC",348=>"\xDE","\xFE","\xAA","\xBA",364=>"\xDD","\xFD",379=>"\xAF","\xBF",728=>"\xA2","\xFF"]; } diff --git a/lib/Encoding/ISO88594.php b/lib/Encoding/ISO88594.php index b58aea7..e8e8af1 100644 --- a/lib/Encoding/ISO88594.php +++ b/lib/Encoding/ISO88594.php @@ -7,8 +7,8 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class ISO88594 extends SingleByteEncoding { - const NAME = "ISO-8859-4"; - const LABELS = [ + public const NAME = "ISO-8859-4"; + public const LABELS = [ "csisolatin4", "iso-8859-4", "iso-ir-110", @@ -20,7 +20,7 @@ class ISO88594 extends SingleByteEncoding { "latin4", ]; - const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{104}","\u{138}","\u{156}","\u{a4}","\u{128}","\u{13b}","\u{a7}","\u{a8}","\u{160}","\u{112}","\u{122}","\u{166}","\u{ad}","\u{17d}","\u{af}","\u{b0}","\u{105}","\u{2db}","\u{157}","\u{b4}","\u{129}","\u{13c}","\u{2c7}","\u{b8}","\u{161}","\u{113}","\u{123}","\u{167}","\u{14a}","\u{17e}","\u{14b}","\u{100}","\u{c1}","\u{c2}","\u{c3}","\u{c4}","\u{c5}","\u{c6}","\u{12e}","\u{10c}","\u{c9}","\u{118}","\u{cb}","\u{116}","\u{cd}","\u{ce}","\u{12a}","\u{110}","\u{145}","\u{14c}","\u{136}","\u{d4}","\u{d5}","\u{d6}","\u{d7}","\u{d8}","\u{172}","\u{da}","\u{db}","\u{dc}","\u{168}","\u{16a}","\u{df}","\u{101}","\u{e1}","\u{e2}","\u{e3}","\u{e4}","\u{e5}","\u{e6}","\u{12f}","\u{10d}","\u{e9}","\u{119}","\u{eb}","\u{117}","\u{ed}","\u{ee}","\u{12b}","\u{111}","\u{146}","\u{14d}","\u{137}","\u{f4}","\u{f5}","\u{f6}","\u{f7}","\u{f8}","\u{173}","\u{fa}","\u{fb}","\u{fc}","\u{169}","\u{16b}","\u{2d9}"]; - const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,312,342,164,296,315,167,168,352,274,290,358,173,381,175,176,261,731,343,180,297,316,711,184,353,275,291,359,330,382,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,298,272,325,332,310,212,213,214,215,216,370,218,219,220,360,362,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,299,273,326,333,311,244,245,246,247,248,371,250,251,252,361,363,729]; - const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",164=>"\xA4",167=>"\xA7","\xA8",173=>"\xAD",175=>"\xAF","\xB0",180=>"\xB4",184=>"\xB8",193=>"\xC1","\xC2","\xC3","\xC4","\xC5","\xC6",201=>"\xC9",203=>"\xCB",205=>"\xCD","\xCE",212=>"\xD4","\xD5","\xD6","\xD7","\xD8",218=>"\xDA","\xDB","\xDC",223=>"\xDF",225=>"\xE1","\xE2","\xE3","\xE4","\xE5","\xE6",233=>"\xE9",235=>"\xEB",237=>"\xED","\xEE",244=>"\xF4","\xF5","\xF6","\xF7","\xF8",250=>"\xFA","\xFB","\xFC",256=>"\xC0","\xE0",260=>"\xA1","\xB1",268=>"\xC8","\xE8",272=>"\xD0","\xF0","\xAA","\xBA",278=>"\xCC","\xEC","\xCA","\xEA",290=>"\xAB","\xBB",296=>"\xA5","\xB5","\xCF","\xEF",302=>"\xC7","\xE7",310=>"\xD3","\xF3","\xA2",315=>"\xA6","\xB6",325=>"\xD1","\xF1",330=>"\xBD","\xBF","\xD2","\xF2",342=>"\xA3","\xB3",352=>"\xA9","\xB9",358=>"\xAC","\xBC","\xDD","\xFD","\xDE","\xFE",370=>"\xD9","\xF9",381=>"\xAE","\xBE",711=>"\xB7",729=>"\xFF",731=>"\xB2"]; + protected const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{104}","\u{138}","\u{156}","\u{a4}","\u{128}","\u{13b}","\u{a7}","\u{a8}","\u{160}","\u{112}","\u{122}","\u{166}","\u{ad}","\u{17d}","\u{af}","\u{b0}","\u{105}","\u{2db}","\u{157}","\u{b4}","\u{129}","\u{13c}","\u{2c7}","\u{b8}","\u{161}","\u{113}","\u{123}","\u{167}","\u{14a}","\u{17e}","\u{14b}","\u{100}","\u{c1}","\u{c2}","\u{c3}","\u{c4}","\u{c5}","\u{c6}","\u{12e}","\u{10c}","\u{c9}","\u{118}","\u{cb}","\u{116}","\u{cd}","\u{ce}","\u{12a}","\u{110}","\u{145}","\u{14c}","\u{136}","\u{d4}","\u{d5}","\u{d6}","\u{d7}","\u{d8}","\u{172}","\u{da}","\u{db}","\u{dc}","\u{168}","\u{16a}","\u{df}","\u{101}","\u{e1}","\u{e2}","\u{e3}","\u{e4}","\u{e5}","\u{e6}","\u{12f}","\u{10d}","\u{e9}","\u{119}","\u{eb}","\u{117}","\u{ed}","\u{ee}","\u{12b}","\u{111}","\u{146}","\u{14d}","\u{137}","\u{f4}","\u{f5}","\u{f6}","\u{f7}","\u{f8}","\u{173}","\u{fa}","\u{fb}","\u{fc}","\u{169}","\u{16b}","\u{2d9}"]; + protected const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,312,342,164,296,315,167,168,352,274,290,358,173,381,175,176,261,731,343,180,297,316,711,184,353,275,291,359,330,382,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,298,272,325,332,310,212,213,214,215,216,370,218,219,220,360,362,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,299,273,326,333,311,244,245,246,247,248,371,250,251,252,361,363,729]; + protected const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",164=>"\xA4",167=>"\xA7","\xA8",173=>"\xAD",175=>"\xAF","\xB0",180=>"\xB4",184=>"\xB8",193=>"\xC1","\xC2","\xC3","\xC4","\xC5","\xC6",201=>"\xC9",203=>"\xCB",205=>"\xCD","\xCE",212=>"\xD4","\xD5","\xD6","\xD7","\xD8",218=>"\xDA","\xDB","\xDC",223=>"\xDF",225=>"\xE1","\xE2","\xE3","\xE4","\xE5","\xE6",233=>"\xE9",235=>"\xEB",237=>"\xED","\xEE",244=>"\xF4","\xF5","\xF6","\xF7","\xF8",250=>"\xFA","\xFB","\xFC",256=>"\xC0","\xE0",260=>"\xA1","\xB1",268=>"\xC8","\xE8",272=>"\xD0","\xF0","\xAA","\xBA",278=>"\xCC","\xEC","\xCA","\xEA",290=>"\xAB","\xBB",296=>"\xA5","\xB5","\xCF","\xEF",302=>"\xC7","\xE7",310=>"\xD3","\xF3","\xA2",315=>"\xA6","\xB6",325=>"\xD1","\xF1",330=>"\xBD","\xBF","\xD2","\xF2",342=>"\xA3","\xB3",352=>"\xA9","\xB9",358=>"\xAC","\xBC","\xDD","\xFD","\xDE","\xFE",370=>"\xD9","\xF9",381=>"\xAE","\xBE",711=>"\xB7",729=>"\xFF",731=>"\xB2"]; } diff --git a/lib/Encoding/ISO88595.php b/lib/Encoding/ISO88595.php index 0a3c506..4c9acac 100644 --- a/lib/Encoding/ISO88595.php +++ b/lib/Encoding/ISO88595.php @@ -7,8 +7,8 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class ISO88595 extends SingleByteEncoding { - const NAME = "ISO-8859-5"; - const LABELS = [ + public const NAME = "ISO-8859-5"; + public const LABELS = [ "csisolatincyrillic", "cyrillic", "iso-8859-5", @@ -19,7 +19,7 @@ class ISO88595 extends SingleByteEncoding { "iso_8859-5:1988", ]; - const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{401}","\u{402}","\u{403}","\u{404}","\u{405}","\u{406}","\u{407}","\u{408}","\u{409}","\u{40a}","\u{40b}","\u{40c}","\u{ad}","\u{40e}","\u{40f}","\u{410}","\u{411}","\u{412}","\u{413}","\u{414}","\u{415}","\u{416}","\u{417}","\u{418}","\u{419}","\u{41a}","\u{41b}","\u{41c}","\u{41d}","\u{41e}","\u{41f}","\u{420}","\u{421}","\u{422}","\u{423}","\u{424}","\u{425}","\u{426}","\u{427}","\u{428}","\u{429}","\u{42a}","\u{42b}","\u{42c}","\u{42d}","\u{42e}","\u{42f}","\u{430}","\u{431}","\u{432}","\u{433}","\u{434}","\u{435}","\u{436}","\u{437}","\u{438}","\u{439}","\u{43a}","\u{43b}","\u{43c}","\u{43d}","\u{43e}","\u{43f}","\u{440}","\u{441}","\u{442}","\u{443}","\u{444}","\u{445}","\u{446}","\u{447}","\u{448}","\u{449}","\u{44a}","\u{44b}","\u{44c}","\u{44d}","\u{44e}","\u{44f}","\u{2116}","\u{451}","\u{452}","\u{453}","\u{454}","\u{455}","\u{456}","\u{457}","\u{458}","\u{459}","\u{45a}","\u{45b}","\u{45c}","\u{a7}","\u{45e}","\u{45f}"]; - const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,173,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8470,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,167,1118,1119]; - const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",167=>"\xFD",173=>"\xAD",1025=>"\xA1","\xA2","\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9","\xAA","\xAB","\xAC",1038=>"\xAE","\xAF","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9","\xBA","\xBB","\xBC","\xBD","\xBE","\xBF","\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD7","\xD8","\xD9","\xDA","\xDB","\xDC","\xDD","\xDE","\xDF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF",1105=>"\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA","\xFB","\xFC",1118=>"\xFE","\xFF",8470=>"\xF0"]; + protected const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{401}","\u{402}","\u{403}","\u{404}","\u{405}","\u{406}","\u{407}","\u{408}","\u{409}","\u{40a}","\u{40b}","\u{40c}","\u{ad}","\u{40e}","\u{40f}","\u{410}","\u{411}","\u{412}","\u{413}","\u{414}","\u{415}","\u{416}","\u{417}","\u{418}","\u{419}","\u{41a}","\u{41b}","\u{41c}","\u{41d}","\u{41e}","\u{41f}","\u{420}","\u{421}","\u{422}","\u{423}","\u{424}","\u{425}","\u{426}","\u{427}","\u{428}","\u{429}","\u{42a}","\u{42b}","\u{42c}","\u{42d}","\u{42e}","\u{42f}","\u{430}","\u{431}","\u{432}","\u{433}","\u{434}","\u{435}","\u{436}","\u{437}","\u{438}","\u{439}","\u{43a}","\u{43b}","\u{43c}","\u{43d}","\u{43e}","\u{43f}","\u{440}","\u{441}","\u{442}","\u{443}","\u{444}","\u{445}","\u{446}","\u{447}","\u{448}","\u{449}","\u{44a}","\u{44b}","\u{44c}","\u{44d}","\u{44e}","\u{44f}","\u{2116}","\u{451}","\u{452}","\u{453}","\u{454}","\u{455}","\u{456}","\u{457}","\u{458}","\u{459}","\u{45a}","\u{45b}","\u{45c}","\u{a7}","\u{45e}","\u{45f}"]; + protected const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,173,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8470,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,167,1118,1119]; + protected const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",167=>"\xFD",173=>"\xAD",1025=>"\xA1","\xA2","\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9","\xAA","\xAB","\xAC",1038=>"\xAE","\xAF","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9","\xBA","\xBB","\xBC","\xBD","\xBE","\xBF","\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD7","\xD8","\xD9","\xDA","\xDB","\xDC","\xDD","\xDE","\xDF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF",1105=>"\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA","\xFB","\xFC",1118=>"\xFE","\xFF",8470=>"\xF0"]; } diff --git a/lib/Encoding/ISO88596.php b/lib/Encoding/ISO88596.php index bc4d332..cef3f47 100644 --- a/lib/Encoding/ISO88596.php +++ b/lib/Encoding/ISO88596.php @@ -7,8 +7,8 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class ISO88596 extends SingleByteEncoding { - const NAME = "ISO-8859-6"; - const LABELS = [ + public const NAME = "ISO-8859-6"; + public const LABELS = [ "arabic", "asmo-708", "csiso88596e", @@ -25,7 +25,7 @@ class ISO88596 extends SingleByteEncoding { "iso_8859-6:1987", ]; - const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}",36=>"\u{a4}",44=>"\u{60c}","\u{ad}",59=>"\u{61b}",63=>"\u{61f}",65=>"\u{621}","\u{622}","\u{623}","\u{624}","\u{625}","\u{626}","\u{627}","\u{628}","\u{629}","\u{62a}","\u{62b}","\u{62c}","\u{62d}","\u{62e}","\u{62f}","\u{630}","\u{631}","\u{632}","\u{633}","\u{634}","\u{635}","\u{636}","\u{637}","\u{638}","\u{639}","\u{63a}",96=>"\u{640}","\u{641}","\u{642}","\u{643}","\u{644}","\u{645}","\u{646}","\u{647}","\u{648}","\u{649}","\u{64a}","\u{64b}","\u{64c}","\u{64d}","\u{64e}","\u{64f}","\u{650}","\u{651}","\u{652}"]; - const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,36=>164,44=>1548,173,59=>1563,63=>1567,65=>1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,96=>1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618]; - const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",164=>"\xA4",173=>"\xAD",1548=>"\xAC",1563=>"\xBB",1567=>"\xBF",1569=>"\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD7","\xD8","\xD9","\xDA",1600=>"\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2"]; + protected const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}",36=>"\u{a4}",44=>"\u{60c}","\u{ad}",59=>"\u{61b}",63=>"\u{61f}",65=>"\u{621}","\u{622}","\u{623}","\u{624}","\u{625}","\u{626}","\u{627}","\u{628}","\u{629}","\u{62a}","\u{62b}","\u{62c}","\u{62d}","\u{62e}","\u{62f}","\u{630}","\u{631}","\u{632}","\u{633}","\u{634}","\u{635}","\u{636}","\u{637}","\u{638}","\u{639}","\u{63a}",96=>"\u{640}","\u{641}","\u{642}","\u{643}","\u{644}","\u{645}","\u{646}","\u{647}","\u{648}","\u{649}","\u{64a}","\u{64b}","\u{64c}","\u{64d}","\u{64e}","\u{64f}","\u{650}","\u{651}","\u{652}"]; + protected const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,36=>164,44=>1548,173,59=>1563,63=>1567,65=>1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,96=>1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618]; + protected const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",164=>"\xA4",173=>"\xAD",1548=>"\xAC",1563=>"\xBB",1567=>"\xBF",1569=>"\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD7","\xD8","\xD9","\xDA",1600=>"\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2"]; } diff --git a/lib/Encoding/ISO88597.php b/lib/Encoding/ISO88597.php index 1d132a4..180cadb 100644 --- a/lib/Encoding/ISO88597.php +++ b/lib/Encoding/ISO88597.php @@ -7,8 +7,8 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class ISO88597 extends SingleByteEncoding { - const NAME = "ISO-8859-7"; - const LABELS = [ + public const NAME = "ISO-8859-7"; + public const LABELS = [ "csisolatingreek", "ecma-118", "elot_928", @@ -23,7 +23,7 @@ class ISO88597 extends SingleByteEncoding { "sun_eu_greek", ]; - const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{2018}","\u{2019}","\u{a3}","\u{20ac}","\u{20af}","\u{a6}","\u{a7}","\u{a8}","\u{a9}","\u{37a}","\u{ab}","\u{ac}","\u{ad}",47=>"\u{2015}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{384}","\u{385}","\u{386}","\u{b7}","\u{388}","\u{389}","\u{38a}","\u{bb}","\u{38c}","\u{bd}","\u{38e}","\u{38f}","\u{390}","\u{391}","\u{392}","\u{393}","\u{394}","\u{395}","\u{396}","\u{397}","\u{398}","\u{399}","\u{39a}","\u{39b}","\u{39c}","\u{39d}","\u{39e}","\u{39f}","\u{3a0}","\u{3a1}",83=>"\u{3a3}","\u{3a4}","\u{3a5}","\u{3a6}","\u{3a7}","\u{3a8}","\u{3a9}","\u{3aa}","\u{3ab}","\u{3ac}","\u{3ad}","\u{3ae}","\u{3af}","\u{3b0}","\u{3b1}","\u{3b2}","\u{3b3}","\u{3b4}","\u{3b5}","\u{3b6}","\u{3b7}","\u{3b8}","\u{3b9}","\u{3ba}","\u{3bb}","\u{3bc}","\u{3bd}","\u{3be}","\u{3bf}","\u{3c0}","\u{3c1}","\u{3c2}","\u{3c3}","\u{3c4}","\u{3c5}","\u{3c6}","\u{3c7}","\u{3c8}","\u{3c9}","\u{3ca}","\u{3cb}","\u{3cc}","\u{3cd}","\u{3ce}"]; - const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8216,8217,163,8364,8367,166,167,168,169,890,171,172,173,47=>8213,176,177,178,179,900,901,902,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,83=>931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974]; - const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",163=>"\xA3",166=>"\xA6","\xA7","\xA8","\xA9",171=>"\xAB","\xAC","\xAD",176=>"\xB0","\xB1","\xB2","\xB3",183=>"\xB7",187=>"\xBB",189=>"\xBD",890=>"\xAA",900=>"\xB4","\xB5","\xB6",904=>"\xB8","\xB9","\xBA",908=>"\xBC",910=>"\xBE","\xBF","\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1",931=>"\xD3","\xD4","\xD5","\xD6","\xD7","\xD8","\xD9","\xDA","\xDB","\xDC","\xDD","\xDE","\xDF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA","\xFB","\xFC","\xFD","\xFE",8213=>"\xAF",8216=>"\xA1","\xA2",8364=>"\xA4",8367=>"\xA5"]; + protected const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{2018}","\u{2019}","\u{a3}","\u{20ac}","\u{20af}","\u{a6}","\u{a7}","\u{a8}","\u{a9}","\u{37a}","\u{ab}","\u{ac}","\u{ad}",47=>"\u{2015}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{384}","\u{385}","\u{386}","\u{b7}","\u{388}","\u{389}","\u{38a}","\u{bb}","\u{38c}","\u{bd}","\u{38e}","\u{38f}","\u{390}","\u{391}","\u{392}","\u{393}","\u{394}","\u{395}","\u{396}","\u{397}","\u{398}","\u{399}","\u{39a}","\u{39b}","\u{39c}","\u{39d}","\u{39e}","\u{39f}","\u{3a0}","\u{3a1}",83=>"\u{3a3}","\u{3a4}","\u{3a5}","\u{3a6}","\u{3a7}","\u{3a8}","\u{3a9}","\u{3aa}","\u{3ab}","\u{3ac}","\u{3ad}","\u{3ae}","\u{3af}","\u{3b0}","\u{3b1}","\u{3b2}","\u{3b3}","\u{3b4}","\u{3b5}","\u{3b6}","\u{3b7}","\u{3b8}","\u{3b9}","\u{3ba}","\u{3bb}","\u{3bc}","\u{3bd}","\u{3be}","\u{3bf}","\u{3c0}","\u{3c1}","\u{3c2}","\u{3c3}","\u{3c4}","\u{3c5}","\u{3c6}","\u{3c7}","\u{3c8}","\u{3c9}","\u{3ca}","\u{3cb}","\u{3cc}","\u{3cd}","\u{3ce}"]; + protected const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8216,8217,163,8364,8367,166,167,168,169,890,171,172,173,47=>8213,176,177,178,179,900,901,902,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,83=>931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974]; + protected const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",163=>"\xA3",166=>"\xA6","\xA7","\xA8","\xA9",171=>"\xAB","\xAC","\xAD",176=>"\xB0","\xB1","\xB2","\xB3",183=>"\xB7",187=>"\xBB",189=>"\xBD",890=>"\xAA",900=>"\xB4","\xB5","\xB6",904=>"\xB8","\xB9","\xBA",908=>"\xBC",910=>"\xBE","\xBF","\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1",931=>"\xD3","\xD4","\xD5","\xD6","\xD7","\xD8","\xD9","\xDA","\xDB","\xDC","\xDD","\xDE","\xDF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA","\xFB","\xFC","\xFD","\xFE",8213=>"\xAF",8216=>"\xA1","\xA2",8364=>"\xA4",8367=>"\xA5"]; } diff --git a/lib/Encoding/ISO88598.php b/lib/Encoding/ISO88598.php index 1d04bb8..905daff 100644 --- a/lib/Encoding/ISO88598.php +++ b/lib/Encoding/ISO88598.php @@ -7,8 +7,8 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class ISO88598 extends SingleByteEncoding { - const NAME = "ISO-8859-8"; - const LABELS = [ + public const NAME = "ISO-8859-8"; + public const LABELS = [ "csiso88598e", "csisolatinhebrew", "hebrew", @@ -22,7 +22,7 @@ class ISO88598 extends SingleByteEncoding { "visual", ]; - const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}",34=>"\u{a2}","\u{a3}","\u{a4}","\u{a5}","\u{a6}","\u{a7}","\u{a8}","\u{a9}","\u{d7}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{af}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{b4}","\u{b5}","\u{b6}","\u{b7}","\u{b8}","\u{b9}","\u{f7}","\u{bb}","\u{bc}","\u{bd}","\u{be}",95=>"\u{2017}","\u{5d0}","\u{5d1}","\u{5d2}","\u{5d3}","\u{5d4}","\u{5d5}","\u{5d6}","\u{5d7}","\u{5d8}","\u{5d9}","\u{5da}","\u{5db}","\u{5dc}","\u{5dd}","\u{5de}","\u{5df}","\u{5e0}","\u{5e1}","\u{5e2}","\u{5e3}","\u{5e4}","\u{5e5}","\u{5e6}","\u{5e7}","\u{5e8}","\u{5e9}","\u{5ea}",125=>"\u{200e}","\u{200f}"]; - const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,34=>162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,95=>8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,125=>8206,8207]; - const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",162=>"\xA2","\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9",171=>"\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9",187=>"\xBB","\xBC","\xBD","\xBE",215=>"\xAA",247=>"\xBA",1488=>"\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA",8206=>"\xFD","\xFE",8215=>"\xDF"]; + protected const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}",34=>"\u{a2}","\u{a3}","\u{a4}","\u{a5}","\u{a6}","\u{a7}","\u{a8}","\u{a9}","\u{d7}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{af}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{b4}","\u{b5}","\u{b6}","\u{b7}","\u{b8}","\u{b9}","\u{f7}","\u{bb}","\u{bc}","\u{bd}","\u{be}",95=>"\u{2017}","\u{5d0}","\u{5d1}","\u{5d2}","\u{5d3}","\u{5d4}","\u{5d5}","\u{5d6}","\u{5d7}","\u{5d8}","\u{5d9}","\u{5da}","\u{5db}","\u{5dc}","\u{5dd}","\u{5de}","\u{5df}","\u{5e0}","\u{5e1}","\u{5e2}","\u{5e3}","\u{5e4}","\u{5e5}","\u{5e6}","\u{5e7}","\u{5e8}","\u{5e9}","\u{5ea}",125=>"\u{200e}","\u{200f}"]; + protected const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,34=>162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,95=>8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,125=>8206,8207]; + protected const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",162=>"\xA2","\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9",171=>"\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9",187=>"\xBB","\xBC","\xBD","\xBE",215=>"\xAA",247=>"\xBA",1488=>"\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA",8206=>"\xFD","\xFE",8215=>"\xDF"]; } diff --git a/lib/Encoding/ISO88598I.php b/lib/Encoding/ISO88598I.php index 2ec7d74..9edb706 100644 --- a/lib/Encoding/ISO88598I.php +++ b/lib/Encoding/ISO88598I.php @@ -7,14 +7,14 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class ISO88598I extends SingleByteEncoding { - const NAME = "ISO-8859-8-I"; - const LABELS = [ + public const NAME = "ISO-8859-8-I"; + public const LABELS = [ "csiso88598i", "iso-8859-8-i", "logical", ]; - const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}",34=>"\u{a2}","\u{a3}","\u{a4}","\u{a5}","\u{a6}","\u{a7}","\u{a8}","\u{a9}","\u{d7}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{af}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{b4}","\u{b5}","\u{b6}","\u{b7}","\u{b8}","\u{b9}","\u{f7}","\u{bb}","\u{bc}","\u{bd}","\u{be}",95=>"\u{2017}","\u{5d0}","\u{5d1}","\u{5d2}","\u{5d3}","\u{5d4}","\u{5d5}","\u{5d6}","\u{5d7}","\u{5d8}","\u{5d9}","\u{5da}","\u{5db}","\u{5dc}","\u{5dd}","\u{5de}","\u{5df}","\u{5e0}","\u{5e1}","\u{5e2}","\u{5e3}","\u{5e4}","\u{5e5}","\u{5e6}","\u{5e7}","\u{5e8}","\u{5e9}","\u{5ea}",125=>"\u{200e}","\u{200f}"]; - const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,34=>162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,95=>8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,125=>8206,8207]; - const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",162=>"\xA2","\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9",171=>"\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9",187=>"\xBB","\xBC","\xBD","\xBE",215=>"\xAA",247=>"\xBA",1488=>"\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA",8206=>"\xFD","\xFE",8215=>"\xDF"]; + protected const TABLE_DEC_CHAR = ["\u{80}","\u{81}","\u{82}","\u{83}","\u{84}","\u{85}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{91}","\u{92}","\u{93}","\u{94}","\u{95}","\u{96}","\u{97}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}",34=>"\u{a2}","\u{a3}","\u{a4}","\u{a5}","\u{a6}","\u{a7}","\u{a8}","\u{a9}","\u{d7}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{af}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{b4}","\u{b5}","\u{b6}","\u{b7}","\u{b8}","\u{b9}","\u{f7}","\u{bb}","\u{bc}","\u{bd}","\u{be}",95=>"\u{2017}","\u{5d0}","\u{5d1}","\u{5d2}","\u{5d3}","\u{5d4}","\u{5d5}","\u{5d6}","\u{5d7}","\u{5d8}","\u{5d9}","\u{5da}","\u{5db}","\u{5dc}","\u{5dd}","\u{5de}","\u{5df}","\u{5e0}","\u{5e1}","\u{5e2}","\u{5e3}","\u{5e4}","\u{5e5}","\u{5e6}","\u{5e7}","\u{5e8}","\u{5e9}","\u{5ea}",125=>"\u{200e}","\u{200f}"]; + protected const TABLE_DEC_CODE = [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,34=>162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,95=>8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,125=>8206,8207]; + protected const TABLE_ENC = [128=>"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",162=>"\xA2","\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9",171=>"\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9",187=>"\xBB","\xBC","\xBD","\xBE",215=>"\xAA",247=>"\xBA",1488=>"\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA",8206=>"\xFD","\xFE",8215=>"\xDF"]; } diff --git a/lib/Encoding/KOI8R.php b/lib/Encoding/KOI8R.php index f4db670..0cf3b07 100644 --- a/lib/Encoding/KOI8R.php +++ b/lib/Encoding/KOI8R.php @@ -7,8 +7,8 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class KOI8R extends SingleByteEncoding { - const NAME = "KOI8-R"; - const LABELS = [ + public const NAME = "KOI8-R"; + public const LABELS = [ "cskoi8r", "koi", "koi8", @@ -16,7 +16,7 @@ class KOI8R extends SingleByteEncoding { "koi8_r", ]; - const TABLE_DEC_CHAR = ["\u{2500}","\u{2502}","\u{250c}","\u{2510}","\u{2514}","\u{2518}","\u{251c}","\u{2524}","\u{252c}","\u{2534}","\u{253c}","\u{2580}","\u{2584}","\u{2588}","\u{258c}","\u{2590}","\u{2591}","\u{2592}","\u{2593}","\u{2320}","\u{25a0}","\u{2219}","\u{221a}","\u{2248}","\u{2264}","\u{2265}","\u{a0}","\u{2321}","\u{b0}","\u{b2}","\u{b7}","\u{f7}","\u{2550}","\u{2551}","\u{2552}","\u{451}","\u{2553}","\u{2554}","\u{2555}","\u{2556}","\u{2557}","\u{2558}","\u{2559}","\u{255a}","\u{255b}","\u{255c}","\u{255d}","\u{255e}","\u{255f}","\u{2560}","\u{2561}","\u{401}","\u{2562}","\u{2563}","\u{2564}","\u{2565}","\u{2566}","\u{2567}","\u{2568}","\u{2569}","\u{256a}","\u{256b}","\u{256c}","\u{a9}","\u{44e}","\u{430}","\u{431}","\u{446}","\u{434}","\u{435}","\u{444}","\u{433}","\u{445}","\u{438}","\u{439}","\u{43a}","\u{43b}","\u{43c}","\u{43d}","\u{43e}","\u{43f}","\u{44f}","\u{440}","\u{441}","\u{442}","\u{443}","\u{436}","\u{432}","\u{44c}","\u{44b}","\u{437}","\u{448}","\u{44d}","\u{449}","\u{447}","\u{44a}","\u{42e}","\u{410}","\u{411}","\u{426}","\u{414}","\u{415}","\u{424}","\u{413}","\u{425}","\u{418}","\u{419}","\u{41a}","\u{41b}","\u{41c}","\u{41d}","\u{41e}","\u{41f}","\u{42f}","\u{420}","\u{421}","\u{422}","\u{423}","\u{416}","\u{412}","\u{42c}","\u{42b}","\u{417}","\u{428}","\u{42d}","\u{429}","\u{427}","\u{42a}"]; - const TABLE_DEC_CODE = [9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,1025,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066]; - const TABLE_ENC = [160=>"\x9A",169=>"\xBF",176=>"\x9C",178=>"\x9D",183=>"\x9E",247=>"\x9F",1025=>"\xB3",1040=>"\xE1","\xE2","\xF7","\xE7","\xE4","\xE5","\xF6","\xFA","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF2","\xF3","\xF4","\xF5","\xE6","\xE8","\xE3","\xFE","\xFB","\xFD","\xFF","\xF9","\xF8","\xFC","\xE0","\xF1","\xC1","\xC2","\xD7","\xC7","\xC4","\xC5","\xD6","\xDA","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD2","\xD3","\xD4","\xD5","\xC6","\xC8","\xC3","\xDE","\xDB","\xDD","\xDF","\xD9","\xD8","\xDC","\xC0","\xD1",1105=>"\xA3",8729=>"\x95","\x96",8776=>"\x97",8804=>"\x98","\x99",8992=>"\x93","\x9B",9472=>"\x80",9474=>"\x81",9484=>"\x82",9488=>"\x83",9492=>"\x84",9496=>"\x85",9500=>"\x86",9508=>"\x87",9516=>"\x88",9524=>"\x89",9532=>"\x8A",9552=>"\xA0","\xA1","\xA2","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9","\xAA","\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9","\xBA","\xBB","\xBC","\xBD","\xBE",9600=>"\x8B",9604=>"\x8C",9608=>"\x8D",9612=>"\x8E",9616=>"\x8F","\x90","\x91","\x92",9632=>"\x94"]; + protected const TABLE_DEC_CHAR = ["\u{2500}","\u{2502}","\u{250c}","\u{2510}","\u{2514}","\u{2518}","\u{251c}","\u{2524}","\u{252c}","\u{2534}","\u{253c}","\u{2580}","\u{2584}","\u{2588}","\u{258c}","\u{2590}","\u{2591}","\u{2592}","\u{2593}","\u{2320}","\u{25a0}","\u{2219}","\u{221a}","\u{2248}","\u{2264}","\u{2265}","\u{a0}","\u{2321}","\u{b0}","\u{b2}","\u{b7}","\u{f7}","\u{2550}","\u{2551}","\u{2552}","\u{451}","\u{2553}","\u{2554}","\u{2555}","\u{2556}","\u{2557}","\u{2558}","\u{2559}","\u{255a}","\u{255b}","\u{255c}","\u{255d}","\u{255e}","\u{255f}","\u{2560}","\u{2561}","\u{401}","\u{2562}","\u{2563}","\u{2564}","\u{2565}","\u{2566}","\u{2567}","\u{2568}","\u{2569}","\u{256a}","\u{256b}","\u{256c}","\u{a9}","\u{44e}","\u{430}","\u{431}","\u{446}","\u{434}","\u{435}","\u{444}","\u{433}","\u{445}","\u{438}","\u{439}","\u{43a}","\u{43b}","\u{43c}","\u{43d}","\u{43e}","\u{43f}","\u{44f}","\u{440}","\u{441}","\u{442}","\u{443}","\u{436}","\u{432}","\u{44c}","\u{44b}","\u{437}","\u{448}","\u{44d}","\u{449}","\u{447}","\u{44a}","\u{42e}","\u{410}","\u{411}","\u{426}","\u{414}","\u{415}","\u{424}","\u{413}","\u{425}","\u{418}","\u{419}","\u{41a}","\u{41b}","\u{41c}","\u{41d}","\u{41e}","\u{41f}","\u{42f}","\u{420}","\u{421}","\u{422}","\u{423}","\u{416}","\u{412}","\u{42c}","\u{42b}","\u{417}","\u{428}","\u{42d}","\u{429}","\u{427}","\u{42a}"]; + protected const TABLE_DEC_CODE = [9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,1025,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066]; + protected const TABLE_ENC = [160=>"\x9A",169=>"\xBF",176=>"\x9C",178=>"\x9D",183=>"\x9E",247=>"\x9F",1025=>"\xB3",1040=>"\xE1","\xE2","\xF7","\xE7","\xE4","\xE5","\xF6","\xFA","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF2","\xF3","\xF4","\xF5","\xE6","\xE8","\xE3","\xFE","\xFB","\xFD","\xFF","\xF9","\xF8","\xFC","\xE0","\xF1","\xC1","\xC2","\xD7","\xC7","\xC4","\xC5","\xD6","\xDA","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD2","\xD3","\xD4","\xD5","\xC6","\xC8","\xC3","\xDE","\xDB","\xDD","\xDF","\xD9","\xD8","\xDC","\xC0","\xD1",1105=>"\xA3",8729=>"\x95","\x96",8776=>"\x97",8804=>"\x98","\x99",8992=>"\x93","\x9B",9472=>"\x80",9474=>"\x81",9484=>"\x82",9488=>"\x83",9492=>"\x84",9496=>"\x85",9500=>"\x86",9508=>"\x87",9516=>"\x88",9524=>"\x89",9532=>"\x8A",9552=>"\xA0","\xA1","\xA2","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9","\xAA","\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9","\xBA","\xBB","\xBC","\xBD","\xBE",9600=>"\x8B",9604=>"\x8C",9608=>"\x8D",9612=>"\x8E",9616=>"\x8F","\x90","\x91","\x92",9632=>"\x94"]; } diff --git a/lib/Encoding/KOI8U.php b/lib/Encoding/KOI8U.php index 6d3b79b..071994f 100644 --- a/lib/Encoding/KOI8U.php +++ b/lib/Encoding/KOI8U.php @@ -7,13 +7,13 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class KOI8U extends SingleByteEncoding { - const NAME = "KOI8-U"; - const LABELS = [ + public const NAME = "KOI8-U"; + public const LABELS = [ "koi8-ru", "koi8-u", ]; - const TABLE_DEC_CHAR = ["\u{2500}","\u{2502}","\u{250c}","\u{2510}","\u{2514}","\u{2518}","\u{251c}","\u{2524}","\u{252c}","\u{2534}","\u{253c}","\u{2580}","\u{2584}","\u{2588}","\u{258c}","\u{2590}","\u{2591}","\u{2592}","\u{2593}","\u{2320}","\u{25a0}","\u{2219}","\u{221a}","\u{2248}","\u{2264}","\u{2265}","\u{a0}","\u{2321}","\u{b0}","\u{b2}","\u{b7}","\u{f7}","\u{2550}","\u{2551}","\u{2552}","\u{451}","\u{454}","\u{2554}","\u{456}","\u{457}","\u{2557}","\u{2558}","\u{2559}","\u{255a}","\u{255b}","\u{491}","\u{45e}","\u{255e}","\u{255f}","\u{2560}","\u{2561}","\u{401}","\u{404}","\u{2563}","\u{406}","\u{407}","\u{2566}","\u{2567}","\u{2568}","\u{2569}","\u{256a}","\u{490}","\u{40e}","\u{a9}","\u{44e}","\u{430}","\u{431}","\u{446}","\u{434}","\u{435}","\u{444}","\u{433}","\u{445}","\u{438}","\u{439}","\u{43a}","\u{43b}","\u{43c}","\u{43d}","\u{43e}","\u{43f}","\u{44f}","\u{440}","\u{441}","\u{442}","\u{443}","\u{436}","\u{432}","\u{44c}","\u{44b}","\u{437}","\u{448}","\u{44d}","\u{449}","\u{447}","\u{44a}","\u{42e}","\u{410}","\u{411}","\u{426}","\u{414}","\u{415}","\u{424}","\u{413}","\u{425}","\u{418}","\u{419}","\u{41a}","\u{41b}","\u{41c}","\u{41d}","\u{41e}","\u{41f}","\u{42f}","\u{420}","\u{421}","\u{422}","\u{423}","\u{416}","\u{412}","\u{42c}","\u{42b}","\u{417}","\u{428}","\u{42d}","\u{429}","\u{427}","\u{42a}"]; - const TABLE_DEC_CODE = [9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,1108,9556,1110,1111,9559,9560,9561,9562,9563,1169,1118,9566,9567,9568,9569,1025,1028,9571,1030,1031,9574,9575,9576,9577,9578,1168,1038,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066]; - const TABLE_ENC = [160=>"\x9A",169=>"\xBF",176=>"\x9C",178=>"\x9D",183=>"\x9E",247=>"\x9F",1025=>"\xB3",1028=>"\xB4",1030=>"\xB6","\xB7",1038=>"\xBE",1040=>"\xE1","\xE2","\xF7","\xE7","\xE4","\xE5","\xF6","\xFA","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF2","\xF3","\xF4","\xF5","\xE6","\xE8","\xE3","\xFE","\xFB","\xFD","\xFF","\xF9","\xF8","\xFC","\xE0","\xF1","\xC1","\xC2","\xD7","\xC7","\xC4","\xC5","\xD6","\xDA","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD2","\xD3","\xD4","\xD5","\xC6","\xC8","\xC3","\xDE","\xDB","\xDD","\xDF","\xD9","\xD8","\xDC","\xC0","\xD1",1105=>"\xA3",1108=>"\xA4",1110=>"\xA6","\xA7",1118=>"\xAE",1168=>"\xBD","\xAD",8729=>"\x95","\x96",8776=>"\x97",8804=>"\x98","\x99",8992=>"\x93","\x9B",9472=>"\x80",9474=>"\x81",9484=>"\x82",9488=>"\x83",9492=>"\x84",9496=>"\x85",9500=>"\x86",9508=>"\x87",9516=>"\x88",9524=>"\x89",9532=>"\x8A",9552=>"\xA0","\xA1","\xA2",9556=>"\xA5",9559=>"\xA8","\xA9","\xAA","\xAB","\xAC",9566=>"\xAF","\xB0","\xB1","\xB2",9571=>"\xB5",9574=>"\xB8","\xB9","\xBA","\xBB","\xBC",9600=>"\x8B",9604=>"\x8C",9608=>"\x8D",9612=>"\x8E",9616=>"\x8F","\x90","\x91","\x92",9632=>"\x94"]; + protected const TABLE_DEC_CHAR = ["\u{2500}","\u{2502}","\u{250c}","\u{2510}","\u{2514}","\u{2518}","\u{251c}","\u{2524}","\u{252c}","\u{2534}","\u{253c}","\u{2580}","\u{2584}","\u{2588}","\u{258c}","\u{2590}","\u{2591}","\u{2592}","\u{2593}","\u{2320}","\u{25a0}","\u{2219}","\u{221a}","\u{2248}","\u{2264}","\u{2265}","\u{a0}","\u{2321}","\u{b0}","\u{b2}","\u{b7}","\u{f7}","\u{2550}","\u{2551}","\u{2552}","\u{451}","\u{454}","\u{2554}","\u{456}","\u{457}","\u{2557}","\u{2558}","\u{2559}","\u{255a}","\u{255b}","\u{491}","\u{45e}","\u{255e}","\u{255f}","\u{2560}","\u{2561}","\u{401}","\u{404}","\u{2563}","\u{406}","\u{407}","\u{2566}","\u{2567}","\u{2568}","\u{2569}","\u{256a}","\u{490}","\u{40e}","\u{a9}","\u{44e}","\u{430}","\u{431}","\u{446}","\u{434}","\u{435}","\u{444}","\u{433}","\u{445}","\u{438}","\u{439}","\u{43a}","\u{43b}","\u{43c}","\u{43d}","\u{43e}","\u{43f}","\u{44f}","\u{440}","\u{441}","\u{442}","\u{443}","\u{436}","\u{432}","\u{44c}","\u{44b}","\u{437}","\u{448}","\u{44d}","\u{449}","\u{447}","\u{44a}","\u{42e}","\u{410}","\u{411}","\u{426}","\u{414}","\u{415}","\u{424}","\u{413}","\u{425}","\u{418}","\u{419}","\u{41a}","\u{41b}","\u{41c}","\u{41d}","\u{41e}","\u{41f}","\u{42f}","\u{420}","\u{421}","\u{422}","\u{423}","\u{416}","\u{412}","\u{42c}","\u{42b}","\u{417}","\u{428}","\u{42d}","\u{429}","\u{427}","\u{42a}"]; + protected const TABLE_DEC_CODE = [9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,1108,9556,1110,1111,9559,9560,9561,9562,9563,1169,1118,9566,9567,9568,9569,1025,1028,9571,1030,1031,9574,9575,9576,9577,9578,1168,1038,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066]; + protected const TABLE_ENC = [160=>"\x9A",169=>"\xBF",176=>"\x9C",178=>"\x9D",183=>"\x9E",247=>"\x9F",1025=>"\xB3",1028=>"\xB4",1030=>"\xB6","\xB7",1038=>"\xBE",1040=>"\xE1","\xE2","\xF7","\xE7","\xE4","\xE5","\xF6","\xFA","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF2","\xF3","\xF4","\xF5","\xE6","\xE8","\xE3","\xFE","\xFB","\xFD","\xFF","\xF9","\xF8","\xFC","\xE0","\xF1","\xC1","\xC2","\xD7","\xC7","\xC4","\xC5","\xD6","\xDA","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD2","\xD3","\xD4","\xD5","\xC6","\xC8","\xC3","\xDE","\xDB","\xDD","\xDF","\xD9","\xD8","\xDC","\xC0","\xD1",1105=>"\xA3",1108=>"\xA4",1110=>"\xA6","\xA7",1118=>"\xAE",1168=>"\xBD","\xAD",8729=>"\x95","\x96",8776=>"\x97",8804=>"\x98","\x99",8992=>"\x93","\x9B",9472=>"\x80",9474=>"\x81",9484=>"\x82",9488=>"\x83",9492=>"\x84",9496=>"\x85",9500=>"\x86",9508=>"\x87",9516=>"\x88",9524=>"\x89",9532=>"\x8A",9552=>"\xA0","\xA1","\xA2",9556=>"\xA5",9559=>"\xA8","\xA9","\xAA","\xAB","\xAC",9566=>"\xAF","\xB0","\xB1","\xB2",9571=>"\xB5",9574=>"\xB8","\xB9","\xBA","\xBB","\xBC",9600=>"\x8B",9604=>"\x8C",9608=>"\x8D",9612=>"\x8E",9616=>"\x8F","\x90","\x91","\x92",9632=>"\x94"]; } diff --git a/lib/Encoding/Macintosh.php b/lib/Encoding/Macintosh.php index e4b421e..850f789 100644 --- a/lib/Encoding/Macintosh.php +++ b/lib/Encoding/Macintosh.php @@ -7,15 +7,15 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class Macintosh extends SingleByteEncoding { - const NAME = "macintosh"; - const LABELS = [ + public const NAME = "macintosh"; + public const LABELS = [ "csmacintosh", "mac", "macintosh", "x-mac-roman", ]; - const TABLE_DEC_CHAR = ["\u{c4}","\u{c5}","\u{c7}","\u{c9}","\u{d1}","\u{d6}","\u{dc}","\u{e1}","\u{e0}","\u{e2}","\u{e4}","\u{e3}","\u{e5}","\u{e7}","\u{e9}","\u{e8}","\u{ea}","\u{eb}","\u{ed}","\u{ec}","\u{ee}","\u{ef}","\u{f1}","\u{f3}","\u{f2}","\u{f4}","\u{f6}","\u{f5}","\u{fa}","\u{f9}","\u{fb}","\u{fc}","\u{2020}","\u{b0}","\u{a2}","\u{a3}","\u{a7}","\u{2022}","\u{b6}","\u{df}","\u{ae}","\u{a9}","\u{2122}","\u{b4}","\u{a8}","\u{2260}","\u{c6}","\u{d8}","\u{221e}","\u{b1}","\u{2264}","\u{2265}","\u{a5}","\u{b5}","\u{2202}","\u{2211}","\u{220f}","\u{3c0}","\u{222b}","\u{aa}","\u{ba}","\u{3a9}","\u{e6}","\u{f8}","\u{bf}","\u{a1}","\u{ac}","\u{221a}","\u{192}","\u{2248}","\u{2206}","\u{ab}","\u{bb}","\u{2026}","\u{a0}","\u{c0}","\u{c3}","\u{d5}","\u{152}","\u{153}","\u{2013}","\u{2014}","\u{201c}","\u{201d}","\u{2018}","\u{2019}","\u{f7}","\u{25ca}","\u{ff}","\u{178}","\u{2044}","\u{20ac}","\u{2039}","\u{203a}","\u{fb01}","\u{fb02}","\u{2021}","\u{b7}","\u{201a}","\u{201e}","\u{2030}","\u{c2}","\u{ca}","\u{c1}","\u{cb}","\u{c8}","\u{cd}","\u{ce}","\u{cf}","\u{cc}","\u{d3}","\u{d4}","\u{f8ff}","\u{d2}","\u{da}","\u{db}","\u{d9}","\u{131}","\u{2c6}","\u{2dc}","\u{af}","\u{2d8}","\u{2d9}","\u{2da}","\u{b8}","\u{2dd}","\u{2db}","\u{2c7}"]; - const TABLE_DEC_CODE = [196,197,199,201,209,214,220,225,224,226,228,227,229,231,233,232,234,235,237,236,238,239,241,243,242,244,246,245,250,249,251,252,8224,176,162,163,167,8226,182,223,174,169,8482,180,168,8800,198,216,8734,177,8804,8805,165,181,8706,8721,8719,960,8747,170,186,937,230,248,191,161,172,8730,402,8776,8710,171,187,8230,160,192,195,213,338,339,8211,8212,8220,8221,8216,8217,247,9674,255,376,8260,8364,8249,8250,64257,64258,8225,183,8218,8222,8240,194,202,193,203,200,205,206,207,204,211,212,63743,210,218,219,217,305,710,732,175,728,729,730,184,733,731,711]; - const TABLE_ENC = [160=>"\xCA","\xC1","\xA2","\xA3",165=>"\xB4",167=>"\xA4","\xAC","\xA9","\xBB","\xC7","\xC2",174=>"\xA8","\xF8","\xA1","\xB1",180=>"\xAB","\xB5","\xA6","\xE1","\xFC",186=>"\xBC","\xC8",191=>"\xC0","\xCB","\xE7","\xE5","\xCC","\x80","\x81","\xAE","\x82","\xE9","\x83","\xE6","\xE8","\xED","\xEA","\xEB","\xEC",209=>"\x84","\xF1","\xEE","\xEF","\xCD","\x85",216=>"\xAF","\xF4","\xF2","\xF3","\x86",223=>"\xA7","\x88","\x87","\x89","\x8B","\x8A","\x8C","\xBE","\x8D","\x8F","\x8E","\x90","\x91","\x93","\x92","\x94","\x95",241=>"\x96","\x98","\x97","\x99","\x9B","\x9A","\xD6","\xBF","\x9D","\x9C","\x9E","\x9F",255=>"\xD8",305=>"\xF5",338=>"\xCE","\xCF",376=>"\xD9",402=>"\xC4",710=>"\xF6","\xFF",728=>"\xF9","\xFA","\xFB","\xFE","\xF7","\xFD",937=>"\xBD",960=>"\xB9",8211=>"\xD0","\xD1",8216=>"\xD4","\xD5","\xE2",8220=>"\xD2","\xD3","\xE3",8224=>"\xA0","\xE0","\xA5",8230=>"\xC9",8240=>"\xE4",8249=>"\xDC","\xDD",8260=>"\xDA",8364=>"\xDB",8482=>"\xAA",8706=>"\xB6",8710=>"\xC6",8719=>"\xB8",8721=>"\xB7",8730=>"\xC3",8734=>"\xB0",8747=>"\xBA",8776=>"\xC5",8800=>"\xAD",8804=>"\xB2","\xB3",9674=>"\xD7",63743=>"\xF0",64257=>"\xDE","\xDF"]; + protected const TABLE_DEC_CHAR = ["\u{c4}","\u{c5}","\u{c7}","\u{c9}","\u{d1}","\u{d6}","\u{dc}","\u{e1}","\u{e0}","\u{e2}","\u{e4}","\u{e3}","\u{e5}","\u{e7}","\u{e9}","\u{e8}","\u{ea}","\u{eb}","\u{ed}","\u{ec}","\u{ee}","\u{ef}","\u{f1}","\u{f3}","\u{f2}","\u{f4}","\u{f6}","\u{f5}","\u{fa}","\u{f9}","\u{fb}","\u{fc}","\u{2020}","\u{b0}","\u{a2}","\u{a3}","\u{a7}","\u{2022}","\u{b6}","\u{df}","\u{ae}","\u{a9}","\u{2122}","\u{b4}","\u{a8}","\u{2260}","\u{c6}","\u{d8}","\u{221e}","\u{b1}","\u{2264}","\u{2265}","\u{a5}","\u{b5}","\u{2202}","\u{2211}","\u{220f}","\u{3c0}","\u{222b}","\u{aa}","\u{ba}","\u{3a9}","\u{e6}","\u{f8}","\u{bf}","\u{a1}","\u{ac}","\u{221a}","\u{192}","\u{2248}","\u{2206}","\u{ab}","\u{bb}","\u{2026}","\u{a0}","\u{c0}","\u{c3}","\u{d5}","\u{152}","\u{153}","\u{2013}","\u{2014}","\u{201c}","\u{201d}","\u{2018}","\u{2019}","\u{f7}","\u{25ca}","\u{ff}","\u{178}","\u{2044}","\u{20ac}","\u{2039}","\u{203a}","\u{fb01}","\u{fb02}","\u{2021}","\u{b7}","\u{201a}","\u{201e}","\u{2030}","\u{c2}","\u{ca}","\u{c1}","\u{cb}","\u{c8}","\u{cd}","\u{ce}","\u{cf}","\u{cc}","\u{d3}","\u{d4}","\u{f8ff}","\u{d2}","\u{da}","\u{db}","\u{d9}","\u{131}","\u{2c6}","\u{2dc}","\u{af}","\u{2d8}","\u{2d9}","\u{2da}","\u{b8}","\u{2dd}","\u{2db}","\u{2c7}"]; + protected const TABLE_DEC_CODE = [196,197,199,201,209,214,220,225,224,226,228,227,229,231,233,232,234,235,237,236,238,239,241,243,242,244,246,245,250,249,251,252,8224,176,162,163,167,8226,182,223,174,169,8482,180,168,8800,198,216,8734,177,8804,8805,165,181,8706,8721,8719,960,8747,170,186,937,230,248,191,161,172,8730,402,8776,8710,171,187,8230,160,192,195,213,338,339,8211,8212,8220,8221,8216,8217,247,9674,255,376,8260,8364,8249,8250,64257,64258,8225,183,8218,8222,8240,194,202,193,203,200,205,206,207,204,211,212,63743,210,218,219,217,305,710,732,175,728,729,730,184,733,731,711]; + protected const TABLE_ENC = [160=>"\xCA","\xC1","\xA2","\xA3",165=>"\xB4",167=>"\xA4","\xAC","\xA9","\xBB","\xC7","\xC2",174=>"\xA8","\xF8","\xA1","\xB1",180=>"\xAB","\xB5","\xA6","\xE1","\xFC",186=>"\xBC","\xC8",191=>"\xC0","\xCB","\xE7","\xE5","\xCC","\x80","\x81","\xAE","\x82","\xE9","\x83","\xE6","\xE8","\xED","\xEA","\xEB","\xEC",209=>"\x84","\xF1","\xEE","\xEF","\xCD","\x85",216=>"\xAF","\xF4","\xF2","\xF3","\x86",223=>"\xA7","\x88","\x87","\x89","\x8B","\x8A","\x8C","\xBE","\x8D","\x8F","\x8E","\x90","\x91","\x93","\x92","\x94","\x95",241=>"\x96","\x98","\x97","\x99","\x9B","\x9A","\xD6","\xBF","\x9D","\x9C","\x9E","\x9F",255=>"\xD8",305=>"\xF5",338=>"\xCE","\xCF",376=>"\xD9",402=>"\xC4",710=>"\xF6","\xFF",728=>"\xF9","\xFA","\xFB","\xFE","\xF7","\xFD",937=>"\xBD",960=>"\xB9",8211=>"\xD0","\xD1",8216=>"\xD4","\xD5","\xE2",8220=>"\xD2","\xD3","\xE3",8224=>"\xA0","\xE0","\xA5",8230=>"\xC9",8240=>"\xE4",8249=>"\xDC","\xDD",8260=>"\xDA",8364=>"\xDB",8482=>"\xAA",8706=>"\xB6",8710=>"\xC6",8719=>"\xB8",8721=>"\xB7",8730=>"\xC3",8734=>"\xB0",8747=>"\xBA",8776=>"\xC5",8800=>"\xAD",8804=>"\xB2","\xB3",9674=>"\xD7",63743=>"\xF0",64257=>"\xDE","\xDF"]; } diff --git a/lib/Encoding/ModalCoder.php b/lib/Encoding/ModalCoder.php new file mode 100644 index 0000000..685e621 --- /dev/null +++ b/lib/Encoding/ModalCoder.php @@ -0,0 +1,17 @@ +len = strlen($string); + $this->fatal = $fatal; + } + + public function posByte(): int { + return $this->done ? $this->len : 0; + } + + public function posChar(): int { + return $this->done ? 1 : 0; + } + + public function nextChar(): string { + if (!$this->eof()) { + try { + return $this->peekChar(); + } finally { + $this->done = true; + $this->posErr = 1; + } + } + return ""; + } + + public function nextCode() { + if (!$this->eof()) { + try { + return $this->peekCode()[0]; + } finally { + $this->done = true; + $this->posErr = 1; + } + } + return false; + } + + public function seek(int $distance): int { + if ($distance > 0) { + if (!$this->eof()) { + $distance--; + $this->nextCode(); + } + } elseif ($distance < 0) { + if ($this->eof()) { + $distance++; + $this->rewind(); + } + } + return $distance; + } + + public function rewind(): void { + $this->done = false; + } + + public function peekChar(int $num = 1): string { + if (!$this->eof() && $num > 0) { + if ($this->fatal) { + throw new DecoderException("Unable to decode string", self::E_INVALID_BYTE); + } + return "\u{FFFD}"; + } + return ""; + } + + public function peekCode(int $num = 1): array { + if (!$this->eof() && $num > 0) { + if ($this->fatal) { + throw new DecoderException("Unable to decode string", self::E_INVALID_BYTE); + } + return [0xFFFD]; + } + return []; + } + + public function lenByte(): int { + return $this->len; + } + + public function lenChar(): int { + return (int) ($this->len > 0); + } + + public function eof(): bool { + return $this->done || $this->len === 0; + } + + public function chars(): \Generator { + if (!$this->eof()) { + yield 0 => $this->nextChar(); + } + } + + public function codes(): \Generator { + if (!$this->eof()) { + yield 0 => $this->nextCode(); + } + } +} diff --git a/lib/Encoding/ShiftJIS.php b/lib/Encoding/ShiftJIS.php new file mode 100644 index 0000000..e02445a --- /dev/null +++ b/lib/Encoding/ShiftJIS.php @@ -0,0 +1,161 @@ +8712,8715,8838,8839,8834,8835,8746,8745,135=>8743,8744,65506,8658,8660,8704,8707,153=>8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,175=>8491,8240,9839,9837,9834,8224,8225,182,187=>9711,203=>65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,220=>65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,252=>65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,282=>12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,376=>12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,470=>913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,502=>945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,564=>1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,612=>1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,658=>9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,1128=>9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,1159=>13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,1190=>13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,1410=>20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21000,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39000,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32000,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,30000,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26000,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36000,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,4418=>24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27000,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34000,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38000,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,10716=>8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657]; + protected const TABLE_CODES_EXTRA = [8272=>32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,8634=>8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282]; + protected const TABLE_POINTERS = [8470=>1193,8481=>1195,8544=>1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,8730=>162,8736=>153,8745=>126,125,166,8757=>165,8786=>159,8801=>158,8869=>154,12849=>1201,65506=>137]; + + protected static $pointerCache; + + public function nextCode() { + if (($b = @$this->string[$this->posByte++]) === "") { + // clean EOF + $this->posByte--; + return false; + } else { + $this->posChar++; + $b = ord($b); + if ($b < 0x81) { + return $b; + } elseif ($b >= 0xA1 && $b <= 0xDF) { + return 0xFF61 - 0xA1 + $b; + } elseif (($b >= 0x81 && $b <= 0x9F) || ($b >= 0xE0 && $b <= 0xFC)) { + $lead = $b; + if (($b = @$this->string[$this->posByte++]) === "") { + // dirty EOF + return $this->errDec($this->errMode, $this->posChar - 1, --$this->posByte - 1); + } + $b = ord($b); + $offset = ($b < 0x7F) ? 0x40 : 0x41; + $leadOffset = ($lead < 0xA0) ? 0x81 : 0xC1; + $pointer = null; + $codePoint = null; + if (($b >= 0x40 && $b <= 0x7E) || ($b >= 0x80 && $b <= 0xFC)) { + $pointer = ($lead - $leadOffset) * 188 + $b - $offset; + if ($pointer >= 8836 && $pointer <= 10715) { + return 0xE000 - 8836 + $pointer; + } else { + $codePoint = self::TABLE_CODES[$pointer] ?? self::TABLE_CODES_EXTRA[$pointer] ?? null; + } + } + if ($codePoint === null) { + if ($b < 0x80) { + $this->posByte--; + $errOffset = 1; + } else { + $errOffset = 2; + } + return $this->errDec($this->errMode, $this->posChar - 1, $this->posByte - $errOffset); + } else { + return $codePoint; + } + } else { + return $this->errDec($this->errMode, $this->posChar - 1, $this->posByte - 1); + } + } + } + + /** Returns the encoding of $codePoint as a byte string + * + * If $codePoint is less than 0 or greater than 1114111, an exception is thrown + * + * If $fatal is true, an exception will be thrown if the code point cannot be encoded into a character; otherwise HTML character references will be substituted + */ + public static function encode(int $codePoint, bool $fatal = true): string { + if ($codePoint < 0 || $codePoint > 0x10FFFF) { + throw new EncoderException("Encountered code point outside Unicode range ($codePoint)", self::E_INVALID_CODE_POINT); + } elseif ($codePoint <= 0x80) { + return chr($codePoint); + } elseif ($codePoint >= 0xFF61 && $codePoint <= 0xFF9F) { + return chr($codePoint - 0xFF61 + 0xA1); + } else { + switch ($codePoint) { + case 0xA5: + return chr(0x5C); + case 0x203E: + return chr(0x7E); + case 0x2212: + $codePoint = 0xFF0D; + // no break; + default: + $pointer = self::TABLE_POINTERS[$codePoint] ?? (self::$pointerCache ?? (self::$pointerCache = array_flip(self::TABLE_CODES)))[$codePoint] ?? null; + if (isset($pointer)) { + $lead = (int) ($pointer / 188); + $leadOffset = ($lead < 0x1F) ? 0x81 : 0xC1; + $trail = $pointer % 188; + $offset = ($trail < 0x3F) ? 0x40 : 0x41; + return chr($lead + $leadOffset).chr($trail + $offset); + } else { + return self::errEnc(!$fatal, $codePoint); + } + } + } + } + + /** Implements backward seeking $distance characters */ + protected function seekBack(int $distance): int { + while ($distance > 0 && $this->posByte > 0) { + $distance--; + $this->posChar--; + if ($this->posByte === $this->errMark) { // the previous character was malformed + // move to the correct sync position, pop the error stack, and continue + $this->posByte = $this->errSync; + list($this->errMark, $this->errSync) = array_pop($this->errStack); + continue; + } + // go back one byte + $b1 = ord(@$this->string[--$this->posByte]); + if ($b1 < 0x40 || $b1 > 0xFC || $b1 === 0x7F || $this->posByte === 0 || $this->posByte === $this->errMark) { // these bytes never appear in sequences, and the first byte is necessarily the start of a sequence + // the byte is a character + continue; + } + // go back a second byte + $b2 = ord(@$this->string[--$this->posByte]); + if ($b2 < 0x81 || $b2 > 0xFC || ($b2 >= 0xA0 && $b2 <= 0xDF)) { // these bytes never appear in the lead of a sequence + // the first byte was a character + $this->posByte += 1; + continue; + } elseif ($this->posByte === $this->errMark || $this->posByte === 0) { // position is unambiguously the start of a character + // the two bytes form a character + continue; + } else { // the second byte is part of a two-byte sequence, but it's unclear if it's the lead or trail byte + $start = $this->posByte + 2; + $pos = $this->posByte; + // go back bytes until an error mark, a definite byte, or start of string + while ($pos > 0 && $pos > $this->errMark) { + $b = ord(@$this->string[--$pos]); + if ($b < 0x81 || ($b >= 0xA0 && $b <= 0xDF) || $b > 0xFC) { + $pos++; + break; + } + } + if (($start - $pos) % 2) { // the number of bytes is odd + // the first byte was a character + $this->posByte += 1; + continue; + } else { // the number of bytes is even + // the second byte was a character + continue; + } + } + } + return $distance; + } +} diff --git a/lib/Encoding/SingleByteEncoding.php b/lib/Encoding/SingleByteEncoding.php index 7867ebf..2a69090 100644 --- a/lib/Encoding/SingleByteEncoding.php +++ b/lib/Encoding/SingleByteEncoding.php @@ -6,7 +6,7 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; -abstract class SingleByteEncoding extends AbstractEncoding implements StatelessEncoding { +abstract class SingleByteEncoding extends AbstractEncoding implements Coder, Decoder { protected $selfSynchronizing = true; public function nextChar(): string { diff --git a/lib/Encoding/StatefulEncoding.php b/lib/Encoding/StatefulEncoding.php deleted file mode 100644 index c2873e0..0000000 --- a/lib/Encoding/StatefulEncoding.php +++ /dev/null @@ -1,18 +0,0 @@ -"\x81",131=>"\x83",136=>"\x88",144=>"\x90",152=>"\x98",160=>"\xA0",164=>"\xA4",166=>"\xA6","\xA7","\xA8","\xA9",171=>"\xAB","\xAC","\xAD","\xAE",176=>"\xB0","\xB1",180=>"\xB4","\xB5","\xB6","\xB7","\xB8",187=>"\xBB",193=>"\xC1","\xC2",196=>"\xC4",199=>"\xC7",201=>"\xC9",203=>"\xCB",205=>"\xCD","\xCE",211=>"\xD3","\xD4",214=>"\xD6","\xD7",218=>"\xDA",220=>"\xDC","\xDD",223=>"\xDF",225=>"\xE1","\xE2",228=>"\xE4",231=>"\xE7",233=>"\xE9",235=>"\xEB",237=>"\xED","\xEE",243=>"\xF3","\xF4",246=>"\xF6","\xF7",250=>"\xFA",252=>"\xFC","\xFD",258=>"\xC3","\xE3","\xA5","\xB9","\xC6","\xE6",268=>"\xC8","\xE8","\xCF","\xEF","\xD0","\xF0",280=>"\xCA","\xEA","\xCC","\xEC",313=>"\xC5","\xE5",317=>"\xBC","\xBE",321=>"\xA3","\xB3","\xD1","\xF1",327=>"\xD2","\xF2",336=>"\xD5","\xF5",340=>"\xC0","\xE0",344=>"\xD8","\xF8","\x8C","\x9C",350=>"\xAA","\xBA","\x8A","\x9A","\xDE","\xFE","\x8D","\x9D",366=>"\xD9","\xF9","\xDB","\xFB",377=>"\x8F","\x9F","\xAF","\xBF","\x8E","\x9E",711=>"\xA1",728=>"\xA2","\xFF",731=>"\xB2",733=>"\xBD",8211=>"\x96","\x97",8216=>"\x91","\x92","\x82",8220=>"\x93","\x94","\x84",8224=>"\x86","\x87","\x95",8230=>"\x85",8240=>"\x89",8249=>"\x8B","\x9B",8364=>"\x80",8482=>"\x99"]; + protected const TABLE_DEC_CHAR = ["\u{20ac}","\u{81}","\u{201a}","\u{83}","\u{201e}","\u{2026}","\u{2020}","\u{2021}","\u{88}","\u{2030}","\u{160}","\u{2039}","\u{15a}","\u{164}","\u{17d}","\u{179}","\u{90}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{98}","\u{2122}","\u{161}","\u{203a}","\u{15b}","\u{165}","\u{17e}","\u{17a}","\u{a0}","\u{2c7}","\u{2d8}","\u{141}","\u{a4}","\u{104}","\u{a6}","\u{a7}","\u{a8}","\u{a9}","\u{15e}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{17b}","\u{b0}","\u{b1}","\u{2db}","\u{142}","\u{b4}","\u{b5}","\u{b6}","\u{b7}","\u{b8}","\u{105}","\u{15f}","\u{bb}","\u{13d}","\u{2dd}","\u{13e}","\u{17c}","\u{154}","\u{c1}","\u{c2}","\u{102}","\u{c4}","\u{139}","\u{106}","\u{c7}","\u{10c}","\u{c9}","\u{118}","\u{cb}","\u{11a}","\u{cd}","\u{ce}","\u{10e}","\u{110}","\u{143}","\u{147}","\u{d3}","\u{d4}","\u{150}","\u{d6}","\u{d7}","\u{158}","\u{16e}","\u{da}","\u{170}","\u{dc}","\u{dd}","\u{162}","\u{df}","\u{155}","\u{e1}","\u{e2}","\u{103}","\u{e4}","\u{13a}","\u{107}","\u{e7}","\u{10d}","\u{e9}","\u{119}","\u{eb}","\u{11b}","\u{ed}","\u{ee}","\u{10f}","\u{111}","\u{144}","\u{148}","\u{f3}","\u{f4}","\u{151}","\u{f6}","\u{f7}","\u{159}","\u{16f}","\u{fa}","\u{171}","\u{fc}","\u{fd}","\u{163}","\u{2d9}"]; + protected const TABLE_DEC_CODE = [8364,129,8218,131,8222,8230,8224,8225,136,8240,352,8249,346,356,381,377,144,8216,8217,8220,8221,8226,8211,8212,152,8482,353,8250,347,357,382,378,160,711,728,321,164,260,166,167,168,169,350,171,172,173,174,379,176,177,731,322,180,181,182,183,184,261,351,187,317,733,318,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729]; + protected const TABLE_ENC = [129=>"\x81",131=>"\x83",136=>"\x88",144=>"\x90",152=>"\x98",160=>"\xA0",164=>"\xA4",166=>"\xA6","\xA7","\xA8","\xA9",171=>"\xAB","\xAC","\xAD","\xAE",176=>"\xB0","\xB1",180=>"\xB4","\xB5","\xB6","\xB7","\xB8",187=>"\xBB",193=>"\xC1","\xC2",196=>"\xC4",199=>"\xC7",201=>"\xC9",203=>"\xCB",205=>"\xCD","\xCE",211=>"\xD3","\xD4",214=>"\xD6","\xD7",218=>"\xDA",220=>"\xDC","\xDD",223=>"\xDF",225=>"\xE1","\xE2",228=>"\xE4",231=>"\xE7",233=>"\xE9",235=>"\xEB",237=>"\xED","\xEE",243=>"\xF3","\xF4",246=>"\xF6","\xF7",250=>"\xFA",252=>"\xFC","\xFD",258=>"\xC3","\xE3","\xA5","\xB9","\xC6","\xE6",268=>"\xC8","\xE8","\xCF","\xEF","\xD0","\xF0",280=>"\xCA","\xEA","\xCC","\xEC",313=>"\xC5","\xE5",317=>"\xBC","\xBE",321=>"\xA3","\xB3","\xD1","\xF1",327=>"\xD2","\xF2",336=>"\xD5","\xF5",340=>"\xC0","\xE0",344=>"\xD8","\xF8","\x8C","\x9C",350=>"\xAA","\xBA","\x8A","\x9A","\xDE","\xFE","\x8D","\x9D",366=>"\xD9","\xF9","\xDB","\xFB",377=>"\x8F","\x9F","\xAF","\xBF","\x8E","\x9E",711=>"\xA1",728=>"\xA2","\xFF",731=>"\xB2",733=>"\xBD",8211=>"\x96","\x97",8216=>"\x91","\x92","\x82",8220=>"\x93","\x94","\x84",8224=>"\x86","\x87","\x95",8230=>"\x85",8240=>"\x89",8249=>"\x8B","\x9B",8364=>"\x80",8482=>"\x99"]; } diff --git a/lib/Encoding/Windows1251.php b/lib/Encoding/Windows1251.php index 4e9c51c..157f884 100644 --- a/lib/Encoding/Windows1251.php +++ b/lib/Encoding/Windows1251.php @@ -7,14 +7,14 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class Windows1251 extends SingleByteEncoding { - const NAME = "windows-1251"; - const LABELS = [ + public const NAME = "windows-1251"; + public const LABELS = [ "cp1251", "windows-1251", "x-cp1251", ]; - const TABLE_DEC_CHAR = ["\u{402}","\u{403}","\u{201a}","\u{453}","\u{201e}","\u{2026}","\u{2020}","\u{2021}","\u{20ac}","\u{2030}","\u{409}","\u{2039}","\u{40a}","\u{40c}","\u{40b}","\u{40f}","\u{452}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{98}","\u{2122}","\u{459}","\u{203a}","\u{45a}","\u{45c}","\u{45b}","\u{45f}","\u{a0}","\u{40e}","\u{45e}","\u{408}","\u{a4}","\u{490}","\u{a6}","\u{a7}","\u{401}","\u{a9}","\u{404}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{407}","\u{b0}","\u{b1}","\u{406}","\u{456}","\u{491}","\u{b5}","\u{b6}","\u{b7}","\u{451}","\u{2116}","\u{454}","\u{bb}","\u{458}","\u{405}","\u{455}","\u{457}","\u{410}","\u{411}","\u{412}","\u{413}","\u{414}","\u{415}","\u{416}","\u{417}","\u{418}","\u{419}","\u{41a}","\u{41b}","\u{41c}","\u{41d}","\u{41e}","\u{41f}","\u{420}","\u{421}","\u{422}","\u{423}","\u{424}","\u{425}","\u{426}","\u{427}","\u{428}","\u{429}","\u{42a}","\u{42b}","\u{42c}","\u{42d}","\u{42e}","\u{42f}","\u{430}","\u{431}","\u{432}","\u{433}","\u{434}","\u{435}","\u{436}","\u{437}","\u{438}","\u{439}","\u{43a}","\u{43b}","\u{43c}","\u{43d}","\u{43e}","\u{43f}","\u{440}","\u{441}","\u{442}","\u{443}","\u{444}","\u{445}","\u{446}","\u{447}","\u{448}","\u{449}","\u{44a}","\u{44b}","\u{44c}","\u{44d}","\u{44e}","\u{44f}"]; - const TABLE_DEC_CODE = [1026,1027,8218,1107,8222,8230,8224,8225,8364,8240,1033,8249,1034,1036,1035,1039,1106,8216,8217,8220,8221,8226,8211,8212,152,8482,1113,8250,1114,1116,1115,1119,160,1038,1118,1032,164,1168,166,167,1025,169,1028,171,172,173,174,1031,176,177,1030,1110,1169,181,182,183,1105,8470,1108,187,1112,1029,1109,1111,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103]; - const TABLE_ENC = [152=>"\x98",160=>"\xA0",164=>"\xA4",166=>"\xA6","\xA7",169=>"\xA9",171=>"\xAB","\xAC","\xAD","\xAE",176=>"\xB0","\xB1",181=>"\xB5","\xB6","\xB7",187=>"\xBB",1025=>"\xA8","\x80","\x81","\xAA","\xBD","\xB2","\xAF","\xA3","\x8A","\x8C","\x8E","\x8D",1038=>"\xA1","\x8F","\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD7","\xD8","\xD9","\xDA","\xDB","\xDC","\xDD","\xDE","\xDF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA","\xFB","\xFC","\xFD","\xFE","\xFF",1105=>"\xB8","\x90","\x83","\xBA","\xBE","\xB3","\xBF","\xBC","\x9A","\x9C","\x9E","\x9D",1118=>"\xA2","\x9F",1168=>"\xA5","\xB4",8211=>"\x96","\x97",8216=>"\x91","\x92","\x82",8220=>"\x93","\x94","\x84",8224=>"\x86","\x87","\x95",8230=>"\x85",8240=>"\x89",8249=>"\x8B","\x9B",8364=>"\x88",8470=>"\xB9",8482=>"\x99"]; + protected const TABLE_DEC_CHAR = ["\u{402}","\u{403}","\u{201a}","\u{453}","\u{201e}","\u{2026}","\u{2020}","\u{2021}","\u{20ac}","\u{2030}","\u{409}","\u{2039}","\u{40a}","\u{40c}","\u{40b}","\u{40f}","\u{452}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{98}","\u{2122}","\u{459}","\u{203a}","\u{45a}","\u{45c}","\u{45b}","\u{45f}","\u{a0}","\u{40e}","\u{45e}","\u{408}","\u{a4}","\u{490}","\u{a6}","\u{a7}","\u{401}","\u{a9}","\u{404}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{407}","\u{b0}","\u{b1}","\u{406}","\u{456}","\u{491}","\u{b5}","\u{b6}","\u{b7}","\u{451}","\u{2116}","\u{454}","\u{bb}","\u{458}","\u{405}","\u{455}","\u{457}","\u{410}","\u{411}","\u{412}","\u{413}","\u{414}","\u{415}","\u{416}","\u{417}","\u{418}","\u{419}","\u{41a}","\u{41b}","\u{41c}","\u{41d}","\u{41e}","\u{41f}","\u{420}","\u{421}","\u{422}","\u{423}","\u{424}","\u{425}","\u{426}","\u{427}","\u{428}","\u{429}","\u{42a}","\u{42b}","\u{42c}","\u{42d}","\u{42e}","\u{42f}","\u{430}","\u{431}","\u{432}","\u{433}","\u{434}","\u{435}","\u{436}","\u{437}","\u{438}","\u{439}","\u{43a}","\u{43b}","\u{43c}","\u{43d}","\u{43e}","\u{43f}","\u{440}","\u{441}","\u{442}","\u{443}","\u{444}","\u{445}","\u{446}","\u{447}","\u{448}","\u{449}","\u{44a}","\u{44b}","\u{44c}","\u{44d}","\u{44e}","\u{44f}"]; + protected const TABLE_DEC_CODE = [1026,1027,8218,1107,8222,8230,8224,8225,8364,8240,1033,8249,1034,1036,1035,1039,1106,8216,8217,8220,8221,8226,8211,8212,152,8482,1113,8250,1114,1116,1115,1119,160,1038,1118,1032,164,1168,166,167,1025,169,1028,171,172,173,174,1031,176,177,1030,1110,1169,181,182,183,1105,8470,1108,187,1112,1029,1109,1111,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103]; + protected const TABLE_ENC = [152=>"\x98",160=>"\xA0",164=>"\xA4",166=>"\xA6","\xA7",169=>"\xA9",171=>"\xAB","\xAC","\xAD","\xAE",176=>"\xB0","\xB1",181=>"\xB5","\xB6","\xB7",187=>"\xBB",1025=>"\xA8","\x80","\x81","\xAA","\xBD","\xB2","\xAF","\xA3","\x8A","\x8C","\x8E","\x8D",1038=>"\xA1","\x8F","\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD7","\xD8","\xD9","\xDA","\xDB","\xDC","\xDD","\xDE","\xDF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA","\xFB","\xFC","\xFD","\xFE","\xFF",1105=>"\xB8","\x90","\x83","\xBA","\xBE","\xB3","\xBF","\xBC","\x9A","\x9C","\x9E","\x9D",1118=>"\xA2","\x9F",1168=>"\xA5","\xB4",8211=>"\x96","\x97",8216=>"\x91","\x92","\x82",8220=>"\x93","\x94","\x84",8224=>"\x86","\x87","\x95",8230=>"\x85",8240=>"\x89",8249=>"\x8B","\x9B",8364=>"\x88",8470=>"\xB9",8482=>"\x99"]; } diff --git a/lib/Encoding/Windows1252.php b/lib/Encoding/Windows1252.php index 5e81a12..827173e 100644 --- a/lib/Encoding/Windows1252.php +++ b/lib/Encoding/Windows1252.php @@ -7,8 +7,8 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class Windows1252 extends SingleByteEncoding { - const NAME = "windows-1252"; - const LABELS = [ + public const NAME = "windows-1252"; + public const LABELS = [ "ansi_x3.4-1968", "ascii", "cp1252", @@ -28,7 +28,7 @@ class Windows1252 extends SingleByteEncoding { "x-cp1252", ]; - const TABLE_DEC_CHAR = ["\u{20ac}","\u{81}","\u{201a}","\u{192}","\u{201e}","\u{2026}","\u{2020}","\u{2021}","\u{2c6}","\u{2030}","\u{160}","\u{2039}","\u{152}","\u{8d}","\u{17d}","\u{8f}","\u{90}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{2dc}","\u{2122}","\u{161}","\u{203a}","\u{153}","\u{9d}","\u{17e}","\u{178}","\u{a0}","\u{a1}","\u{a2}","\u{a3}","\u{a4}","\u{a5}","\u{a6}","\u{a7}","\u{a8}","\u{a9}","\u{aa}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{af}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{b4}","\u{b5}","\u{b6}","\u{b7}","\u{b8}","\u{b9}","\u{ba}","\u{bb}","\u{bc}","\u{bd}","\u{be}","\u{bf}","\u{c0}","\u{c1}","\u{c2}","\u{c3}","\u{c4}","\u{c5}","\u{c6}","\u{c7}","\u{c8}","\u{c9}","\u{ca}","\u{cb}","\u{cc}","\u{cd}","\u{ce}","\u{cf}","\u{d0}","\u{d1}","\u{d2}","\u{d3}","\u{d4}","\u{d5}","\u{d6}","\u{d7}","\u{d8}","\u{d9}","\u{da}","\u{db}","\u{dc}","\u{dd}","\u{de}","\u{df}","\u{e0}","\u{e1}","\u{e2}","\u{e3}","\u{e4}","\u{e5}","\u{e6}","\u{e7}","\u{e8}","\u{e9}","\u{ea}","\u{eb}","\u{ec}","\u{ed}","\u{ee}","\u{ef}","\u{f0}","\u{f1}","\u{f2}","\u{f3}","\u{f4}","\u{f5}","\u{f6}","\u{f7}","\u{f8}","\u{f9}","\u{fa}","\u{fb}","\u{fc}","\u{fd}","\u{fe}","\u{ff}"]; - const TABLE_DEC_CODE = [8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255]; - const TABLE_ENC = [129=>"\x81",141=>"\x8D",143=>"\x8F","\x90",157=>"\x9D",160=>"\xA0","\xA1","\xA2","\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9","\xAA","\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9","\xBA","\xBB","\xBC","\xBD","\xBE","\xBF","\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD7","\xD8","\xD9","\xDA","\xDB","\xDC","\xDD","\xDE","\xDF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA","\xFB","\xFC","\xFD","\xFE","\xFF",338=>"\x8C","\x9C",352=>"\x8A","\x9A",376=>"\x9F",381=>"\x8E","\x9E",402=>"\x83",710=>"\x88",732=>"\x98",8211=>"\x96","\x97",8216=>"\x91","\x92","\x82",8220=>"\x93","\x94","\x84",8224=>"\x86","\x87","\x95",8230=>"\x85",8240=>"\x89",8249=>"\x8B","\x9B",8364=>"\x80",8482=>"\x99"]; + protected const TABLE_DEC_CHAR = ["\u{20ac}","\u{81}","\u{201a}","\u{192}","\u{201e}","\u{2026}","\u{2020}","\u{2021}","\u{2c6}","\u{2030}","\u{160}","\u{2039}","\u{152}","\u{8d}","\u{17d}","\u{8f}","\u{90}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{2dc}","\u{2122}","\u{161}","\u{203a}","\u{153}","\u{9d}","\u{17e}","\u{178}","\u{a0}","\u{a1}","\u{a2}","\u{a3}","\u{a4}","\u{a5}","\u{a6}","\u{a7}","\u{a8}","\u{a9}","\u{aa}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{af}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{b4}","\u{b5}","\u{b6}","\u{b7}","\u{b8}","\u{b9}","\u{ba}","\u{bb}","\u{bc}","\u{bd}","\u{be}","\u{bf}","\u{c0}","\u{c1}","\u{c2}","\u{c3}","\u{c4}","\u{c5}","\u{c6}","\u{c7}","\u{c8}","\u{c9}","\u{ca}","\u{cb}","\u{cc}","\u{cd}","\u{ce}","\u{cf}","\u{d0}","\u{d1}","\u{d2}","\u{d3}","\u{d4}","\u{d5}","\u{d6}","\u{d7}","\u{d8}","\u{d9}","\u{da}","\u{db}","\u{dc}","\u{dd}","\u{de}","\u{df}","\u{e0}","\u{e1}","\u{e2}","\u{e3}","\u{e4}","\u{e5}","\u{e6}","\u{e7}","\u{e8}","\u{e9}","\u{ea}","\u{eb}","\u{ec}","\u{ed}","\u{ee}","\u{ef}","\u{f0}","\u{f1}","\u{f2}","\u{f3}","\u{f4}","\u{f5}","\u{f6}","\u{f7}","\u{f8}","\u{f9}","\u{fa}","\u{fb}","\u{fc}","\u{fd}","\u{fe}","\u{ff}"]; + protected const TABLE_DEC_CODE = [8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255]; + protected const TABLE_ENC = [129=>"\x81",141=>"\x8D",143=>"\x8F","\x90",157=>"\x9D",160=>"\xA0","\xA1","\xA2","\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9","\xAA","\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9","\xBA","\xBB","\xBC","\xBD","\xBE","\xBF","\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD7","\xD8","\xD9","\xDA","\xDB","\xDC","\xDD","\xDE","\xDF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA","\xFB","\xFC","\xFD","\xFE","\xFF",338=>"\x8C","\x9C",352=>"\x8A","\x9A",376=>"\x9F",381=>"\x8E","\x9E",402=>"\x83",710=>"\x88",732=>"\x98",8211=>"\x96","\x97",8216=>"\x91","\x92","\x82",8220=>"\x93","\x94","\x84",8224=>"\x86","\x87","\x95",8230=>"\x85",8240=>"\x89",8249=>"\x8B","\x9B",8364=>"\x80",8482=>"\x99"]; } diff --git a/lib/Encoding/Windows1253.php b/lib/Encoding/Windows1253.php index 9c335b9..ec17006 100644 --- a/lib/Encoding/Windows1253.php +++ b/lib/Encoding/Windows1253.php @@ -7,14 +7,14 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class Windows1253 extends SingleByteEncoding { - const NAME = "windows-1253"; - const LABELS = [ + public const NAME = "windows-1253"; + public const LABELS = [ "cp1253", "windows-1253", "x-cp1253", ]; - const TABLE_DEC_CHAR = ["\u{20ac}","\u{81}","\u{201a}","\u{192}","\u{201e}","\u{2026}","\u{2020}","\u{2021}","\u{88}","\u{2030}","\u{8a}","\u{2039}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{98}","\u{2122}","\u{9a}","\u{203a}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{385}","\u{386}","\u{a3}","\u{a4}","\u{a5}","\u{a6}","\u{a7}","\u{a8}","\u{a9}",43=>"\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{2015}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{384}","\u{b5}","\u{b6}","\u{b7}","\u{388}","\u{389}","\u{38a}","\u{bb}","\u{38c}","\u{bd}","\u{38e}","\u{38f}","\u{390}","\u{391}","\u{392}","\u{393}","\u{394}","\u{395}","\u{396}","\u{397}","\u{398}","\u{399}","\u{39a}","\u{39b}","\u{39c}","\u{39d}","\u{39e}","\u{39f}","\u{3a0}","\u{3a1}",83=>"\u{3a3}","\u{3a4}","\u{3a5}","\u{3a6}","\u{3a7}","\u{3a8}","\u{3a9}","\u{3aa}","\u{3ab}","\u{3ac}","\u{3ad}","\u{3ae}","\u{3af}","\u{3b0}","\u{3b1}","\u{3b2}","\u{3b3}","\u{3b4}","\u{3b5}","\u{3b6}","\u{3b7}","\u{3b8}","\u{3b9}","\u{3ba}","\u{3bb}","\u{3bc}","\u{3bd}","\u{3be}","\u{3bf}","\u{3c0}","\u{3c1}","\u{3c2}","\u{3c3}","\u{3c4}","\u{3c5}","\u{3c6}","\u{3c7}","\u{3c8}","\u{3c9}","\u{3ca}","\u{3cb}","\u{3cc}","\u{3cd}","\u{3ce}"]; - const TABLE_DEC_CODE = [8364,129,8218,402,8222,8230,8224,8225,136,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,157,158,159,160,901,902,163,164,165,166,167,168,169,43=>171,172,173,174,8213,176,177,178,179,900,181,182,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,83=>931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974]; - const TABLE_ENC = [129=>"\x81",136=>"\x88",138=>"\x8A",140=>"\x8C","\x8D","\x8E","\x8F","\x90",152=>"\x98",154=>"\x9A",156=>"\x9C","\x9D","\x9E","\x9F","\xA0",163=>"\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9",171=>"\xAB","\xAC","\xAD","\xAE",176=>"\xB0","\xB1","\xB2","\xB3",181=>"\xB5","\xB6","\xB7",187=>"\xBB",189=>"\xBD",402=>"\x83",900=>"\xB4","\xA1","\xA2",904=>"\xB8","\xB9","\xBA",908=>"\xBC",910=>"\xBE","\xBF","\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1",931=>"\xD3","\xD4","\xD5","\xD6","\xD7","\xD8","\xD9","\xDA","\xDB","\xDC","\xDD","\xDE","\xDF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA","\xFB","\xFC","\xFD","\xFE",8211=>"\x96","\x97","\xAF",8216=>"\x91","\x92","\x82",8220=>"\x93","\x94","\x84",8224=>"\x86","\x87","\x95",8230=>"\x85",8240=>"\x89",8249=>"\x8B","\x9B",8364=>"\x80",8482=>"\x99"]; + protected const TABLE_DEC_CHAR = ["\u{20ac}","\u{81}","\u{201a}","\u{192}","\u{201e}","\u{2026}","\u{2020}","\u{2021}","\u{88}","\u{2030}","\u{8a}","\u{2039}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{98}","\u{2122}","\u{9a}","\u{203a}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{385}","\u{386}","\u{a3}","\u{a4}","\u{a5}","\u{a6}","\u{a7}","\u{a8}","\u{a9}",43=>"\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{2015}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{384}","\u{b5}","\u{b6}","\u{b7}","\u{388}","\u{389}","\u{38a}","\u{bb}","\u{38c}","\u{bd}","\u{38e}","\u{38f}","\u{390}","\u{391}","\u{392}","\u{393}","\u{394}","\u{395}","\u{396}","\u{397}","\u{398}","\u{399}","\u{39a}","\u{39b}","\u{39c}","\u{39d}","\u{39e}","\u{39f}","\u{3a0}","\u{3a1}",83=>"\u{3a3}","\u{3a4}","\u{3a5}","\u{3a6}","\u{3a7}","\u{3a8}","\u{3a9}","\u{3aa}","\u{3ab}","\u{3ac}","\u{3ad}","\u{3ae}","\u{3af}","\u{3b0}","\u{3b1}","\u{3b2}","\u{3b3}","\u{3b4}","\u{3b5}","\u{3b6}","\u{3b7}","\u{3b8}","\u{3b9}","\u{3ba}","\u{3bb}","\u{3bc}","\u{3bd}","\u{3be}","\u{3bf}","\u{3c0}","\u{3c1}","\u{3c2}","\u{3c3}","\u{3c4}","\u{3c5}","\u{3c6}","\u{3c7}","\u{3c8}","\u{3c9}","\u{3ca}","\u{3cb}","\u{3cc}","\u{3cd}","\u{3ce}"]; + protected const TABLE_DEC_CODE = [8364,129,8218,402,8222,8230,8224,8225,136,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,157,158,159,160,901,902,163,164,165,166,167,168,169,43=>171,172,173,174,8213,176,177,178,179,900,181,182,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,83=>931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974]; + protected const TABLE_ENC = [129=>"\x81",136=>"\x88",138=>"\x8A",140=>"\x8C","\x8D","\x8E","\x8F","\x90",152=>"\x98",154=>"\x9A",156=>"\x9C","\x9D","\x9E","\x9F","\xA0",163=>"\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9",171=>"\xAB","\xAC","\xAD","\xAE",176=>"\xB0","\xB1","\xB2","\xB3",181=>"\xB5","\xB6","\xB7",187=>"\xBB",189=>"\xBD",402=>"\x83",900=>"\xB4","\xA1","\xA2",904=>"\xB8","\xB9","\xBA",908=>"\xBC",910=>"\xBE","\xBF","\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1",931=>"\xD3","\xD4","\xD5","\xD6","\xD7","\xD8","\xD9","\xDA","\xDB","\xDC","\xDD","\xDE","\xDF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA","\xFB","\xFC","\xFD","\xFE",8211=>"\x96","\x97","\xAF",8216=>"\x91","\x92","\x82",8220=>"\x93","\x94","\x84",8224=>"\x86","\x87","\x95",8230=>"\x85",8240=>"\x89",8249=>"\x8B","\x9B",8364=>"\x80",8482=>"\x99"]; } diff --git a/lib/Encoding/Windows1254.php b/lib/Encoding/Windows1254.php index 7e800cb..7a51c96 100644 --- a/lib/Encoding/Windows1254.php +++ b/lib/Encoding/Windows1254.php @@ -7,8 +7,8 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class Windows1254 extends SingleByteEncoding { - const NAME = "windows-1254"; - const LABELS = [ + public const NAME = "windows-1254"; + public const LABELS = [ "cp1254", "csisolatin5", "iso-8859-9", @@ -23,7 +23,7 @@ class Windows1254 extends SingleByteEncoding { "x-cp1254", ]; - const TABLE_DEC_CHAR = ["\u{20ac}","\u{81}","\u{201a}","\u{192}","\u{201e}","\u{2026}","\u{2020}","\u{2021}","\u{2c6}","\u{2030}","\u{160}","\u{2039}","\u{152}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{2dc}","\u{2122}","\u{161}","\u{203a}","\u{153}","\u{9d}","\u{9e}","\u{178}","\u{a0}","\u{a1}","\u{a2}","\u{a3}","\u{a4}","\u{a5}","\u{a6}","\u{a7}","\u{a8}","\u{a9}","\u{aa}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{af}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{b4}","\u{b5}","\u{b6}","\u{b7}","\u{b8}","\u{b9}","\u{ba}","\u{bb}","\u{bc}","\u{bd}","\u{be}","\u{bf}","\u{c0}","\u{c1}","\u{c2}","\u{c3}","\u{c4}","\u{c5}","\u{c6}","\u{c7}","\u{c8}","\u{c9}","\u{ca}","\u{cb}","\u{cc}","\u{cd}","\u{ce}","\u{cf}","\u{11e}","\u{d1}","\u{d2}","\u{d3}","\u{d4}","\u{d5}","\u{d6}","\u{d7}","\u{d8}","\u{d9}","\u{da}","\u{db}","\u{dc}","\u{130}","\u{15e}","\u{df}","\u{e0}","\u{e1}","\u{e2}","\u{e3}","\u{e4}","\u{e5}","\u{e6}","\u{e7}","\u{e8}","\u{e9}","\u{ea}","\u{eb}","\u{ec}","\u{ed}","\u{ee}","\u{ef}","\u{11f}","\u{f1}","\u{f2}","\u{f3}","\u{f4}","\u{f5}","\u{f6}","\u{f7}","\u{f8}","\u{f9}","\u{fa}","\u{fb}","\u{fc}","\u{131}","\u{15f}","\u{ff}"]; - const TABLE_DEC_CODE = [8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,286,209,210,211,212,213,214,215,216,217,218,219,220,304,350,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,287,241,242,243,244,245,246,247,248,249,250,251,252,305,351,255]; - const TABLE_ENC = [129=>"\x81",141=>"\x8D","\x8E","\x8F","\x90",157=>"\x9D","\x9E",160=>"\xA0","\xA1","\xA2","\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9","\xAA","\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9","\xBA","\xBB","\xBC","\xBD","\xBE","\xBF","\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF",209=>"\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD7","\xD8","\xD9","\xDA","\xDB","\xDC",223=>"\xDF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF",241=>"\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA","\xFB","\xFC",255=>"\xFF",286=>"\xD0","\xF0",304=>"\xDD","\xFD",338=>"\x8C","\x9C",350=>"\xDE","\xFE","\x8A","\x9A",376=>"\x9F",402=>"\x83",710=>"\x88",732=>"\x98",8211=>"\x96","\x97",8216=>"\x91","\x92","\x82",8220=>"\x93","\x94","\x84",8224=>"\x86","\x87","\x95",8230=>"\x85",8240=>"\x89",8249=>"\x8B","\x9B",8364=>"\x80",8482=>"\x99"]; + protected const TABLE_DEC_CHAR = ["\u{20ac}","\u{81}","\u{201a}","\u{192}","\u{201e}","\u{2026}","\u{2020}","\u{2021}","\u{2c6}","\u{2030}","\u{160}","\u{2039}","\u{152}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{2dc}","\u{2122}","\u{161}","\u{203a}","\u{153}","\u{9d}","\u{9e}","\u{178}","\u{a0}","\u{a1}","\u{a2}","\u{a3}","\u{a4}","\u{a5}","\u{a6}","\u{a7}","\u{a8}","\u{a9}","\u{aa}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{af}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{b4}","\u{b5}","\u{b6}","\u{b7}","\u{b8}","\u{b9}","\u{ba}","\u{bb}","\u{bc}","\u{bd}","\u{be}","\u{bf}","\u{c0}","\u{c1}","\u{c2}","\u{c3}","\u{c4}","\u{c5}","\u{c6}","\u{c7}","\u{c8}","\u{c9}","\u{ca}","\u{cb}","\u{cc}","\u{cd}","\u{ce}","\u{cf}","\u{11e}","\u{d1}","\u{d2}","\u{d3}","\u{d4}","\u{d5}","\u{d6}","\u{d7}","\u{d8}","\u{d9}","\u{da}","\u{db}","\u{dc}","\u{130}","\u{15e}","\u{df}","\u{e0}","\u{e1}","\u{e2}","\u{e3}","\u{e4}","\u{e5}","\u{e6}","\u{e7}","\u{e8}","\u{e9}","\u{ea}","\u{eb}","\u{ec}","\u{ed}","\u{ee}","\u{ef}","\u{11f}","\u{f1}","\u{f2}","\u{f3}","\u{f4}","\u{f5}","\u{f6}","\u{f7}","\u{f8}","\u{f9}","\u{fa}","\u{fb}","\u{fc}","\u{131}","\u{15f}","\u{ff}"]; + protected const TABLE_DEC_CODE = [8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,286,209,210,211,212,213,214,215,216,217,218,219,220,304,350,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,287,241,242,243,244,245,246,247,248,249,250,251,252,305,351,255]; + protected const TABLE_ENC = [129=>"\x81",141=>"\x8D","\x8E","\x8F","\x90",157=>"\x9D","\x9E",160=>"\xA0","\xA1","\xA2","\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9","\xAA","\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9","\xBA","\xBB","\xBC","\xBD","\xBE","\xBF","\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF",209=>"\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD7","\xD8","\xD9","\xDA","\xDB","\xDC",223=>"\xDF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF",241=>"\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA","\xFB","\xFC",255=>"\xFF",286=>"\xD0","\xF0",304=>"\xDD","\xFD",338=>"\x8C","\x9C",350=>"\xDE","\xFE","\x8A","\x9A",376=>"\x9F",402=>"\x83",710=>"\x88",732=>"\x98",8211=>"\x96","\x97",8216=>"\x91","\x92","\x82",8220=>"\x93","\x94","\x84",8224=>"\x86","\x87","\x95",8230=>"\x85",8240=>"\x89",8249=>"\x8B","\x9B",8364=>"\x80",8482=>"\x99"]; } diff --git a/lib/Encoding/Windows1255.php b/lib/Encoding/Windows1255.php index 3acafa0..c25008c 100644 --- a/lib/Encoding/Windows1255.php +++ b/lib/Encoding/Windows1255.php @@ -7,14 +7,14 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class Windows1255 extends SingleByteEncoding { - const NAME = "windows-1255"; - const LABELS = [ + public const NAME = "windows-1255"; + public const LABELS = [ "cp1255", "windows-1255", "x-cp1255", ]; - const TABLE_DEC_CHAR = ["\u{20ac}","\u{81}","\u{201a}","\u{192}","\u{201e}","\u{2026}","\u{2020}","\u{2021}","\u{2c6}","\u{2030}","\u{8a}","\u{2039}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{2dc}","\u{2122}","\u{9a}","\u{203a}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{a1}","\u{a2}","\u{a3}","\u{20aa}","\u{a5}","\u{a6}","\u{a7}","\u{a8}","\u{a9}","\u{d7}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{af}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{b4}","\u{b5}","\u{b6}","\u{b7}","\u{b8}","\u{b9}","\u{f7}","\u{bb}","\u{bc}","\u{bd}","\u{be}","\u{bf}","\u{5b0}","\u{5b1}","\u{5b2}","\u{5b3}","\u{5b4}","\u{5b5}","\u{5b6}","\u{5b7}","\u{5b8}","\u{5b9}","\u{5ba}","\u{5bb}","\u{5bc}","\u{5bd}","\u{5be}","\u{5bf}","\u{5c0}","\u{5c1}","\u{5c2}","\u{5c3}","\u{5f0}","\u{5f1}","\u{5f2}","\u{5f3}","\u{5f4}",96=>"\u{5d0}","\u{5d1}","\u{5d2}","\u{5d3}","\u{5d4}","\u{5d5}","\u{5d6}","\u{5d7}","\u{5d8}","\u{5d9}","\u{5da}","\u{5db}","\u{5dc}","\u{5dd}","\u{5de}","\u{5df}","\u{5e0}","\u{5e1}","\u{5e2}","\u{5e3}","\u{5e4}","\u{5e5}","\u{5e6}","\u{5e7}","\u{5e8}","\u{5e9}","\u{5ea}",125=>"\u{200e}","\u{200f}"]; - const TABLE_DEC_CODE = [8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,96=>1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,125=>8206,8207]; - const TABLE_ENC = [129=>"\x81",138=>"\x8A",140=>"\x8C","\x8D","\x8E","\x8F","\x90",154=>"\x9A",156=>"\x9C","\x9D","\x9E","\x9F","\xA0","\xA1","\xA2","\xA3",165=>"\xA5","\xA6","\xA7","\xA8","\xA9",171=>"\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9",187=>"\xBB","\xBC","\xBD","\xBE","\xBF",215=>"\xAA",247=>"\xBA",402=>"\x83",710=>"\x88",732=>"\x98",1456=>"\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1","\xD2","\xD3",1488=>"\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA",1520=>"\xD4","\xD5","\xD6","\xD7","\xD8",8206=>"\xFD","\xFE",8211=>"\x96","\x97",8216=>"\x91","\x92","\x82",8220=>"\x93","\x94","\x84",8224=>"\x86","\x87","\x95",8230=>"\x85",8240=>"\x89",8249=>"\x8B","\x9B",8362=>"\xA4",8364=>"\x80",8482=>"\x99"]; + protected const TABLE_DEC_CHAR = ["\u{20ac}","\u{81}","\u{201a}","\u{192}","\u{201e}","\u{2026}","\u{2020}","\u{2021}","\u{2c6}","\u{2030}","\u{8a}","\u{2039}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{2dc}","\u{2122}","\u{9a}","\u{203a}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{a1}","\u{a2}","\u{a3}","\u{20aa}","\u{a5}","\u{a6}","\u{a7}","\u{a8}","\u{a9}","\u{d7}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{af}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{b4}","\u{b5}","\u{b6}","\u{b7}","\u{b8}","\u{b9}","\u{f7}","\u{bb}","\u{bc}","\u{bd}","\u{be}","\u{bf}","\u{5b0}","\u{5b1}","\u{5b2}","\u{5b3}","\u{5b4}","\u{5b5}","\u{5b6}","\u{5b7}","\u{5b8}","\u{5b9}","\u{5ba}","\u{5bb}","\u{5bc}","\u{5bd}","\u{5be}","\u{5bf}","\u{5c0}","\u{5c1}","\u{5c2}","\u{5c3}","\u{5f0}","\u{5f1}","\u{5f2}","\u{5f3}","\u{5f4}",96=>"\u{5d0}","\u{5d1}","\u{5d2}","\u{5d3}","\u{5d4}","\u{5d5}","\u{5d6}","\u{5d7}","\u{5d8}","\u{5d9}","\u{5da}","\u{5db}","\u{5dc}","\u{5dd}","\u{5de}","\u{5df}","\u{5e0}","\u{5e1}","\u{5e2}","\u{5e3}","\u{5e4}","\u{5e5}","\u{5e6}","\u{5e7}","\u{5e8}","\u{5e9}","\u{5ea}",125=>"\u{200e}","\u{200f}"]; + protected const TABLE_DEC_CODE = [8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,96=>1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,125=>8206,8207]; + protected const TABLE_ENC = [129=>"\x81",138=>"\x8A",140=>"\x8C","\x8D","\x8E","\x8F","\x90",154=>"\x9A",156=>"\x9C","\x9D","\x9E","\x9F","\xA0","\xA1","\xA2","\xA3",165=>"\xA5","\xA6","\xA7","\xA8","\xA9",171=>"\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9",187=>"\xBB","\xBC","\xBD","\xBE","\xBF",215=>"\xAA",247=>"\xBA",402=>"\x83",710=>"\x88",732=>"\x98",1456=>"\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1","\xD2","\xD3",1488=>"\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA",1520=>"\xD4","\xD5","\xD6","\xD7","\xD8",8206=>"\xFD","\xFE",8211=>"\x96","\x97",8216=>"\x91","\x92","\x82",8220=>"\x93","\x94","\x84",8224=>"\x86","\x87","\x95",8230=>"\x85",8240=>"\x89",8249=>"\x8B","\x9B",8362=>"\xA4",8364=>"\x80",8482=>"\x99"]; } diff --git a/lib/Encoding/Windows1256.php b/lib/Encoding/Windows1256.php index 863c66a..eaa8039 100644 --- a/lib/Encoding/Windows1256.php +++ b/lib/Encoding/Windows1256.php @@ -7,14 +7,14 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class Windows1256 extends SingleByteEncoding { - const NAME = "windows-1256"; - const LABELS = [ + public const NAME = "windows-1256"; + public const LABELS = [ "cp1256", "windows-1256", "x-cp1256", ]; - const TABLE_DEC_CHAR = ["\u{20ac}","\u{67e}","\u{201a}","\u{192}","\u{201e}","\u{2026}","\u{2020}","\u{2021}","\u{2c6}","\u{2030}","\u{679}","\u{2039}","\u{152}","\u{686}","\u{698}","\u{688}","\u{6af}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{6a9}","\u{2122}","\u{691}","\u{203a}","\u{153}","\u{200c}","\u{200d}","\u{6ba}","\u{a0}","\u{60c}","\u{a2}","\u{a3}","\u{a4}","\u{a5}","\u{a6}","\u{a7}","\u{a8}","\u{a9}","\u{6be}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{af}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{b4}","\u{b5}","\u{b6}","\u{b7}","\u{b8}","\u{b9}","\u{61b}","\u{bb}","\u{bc}","\u{bd}","\u{be}","\u{61f}","\u{6c1}","\u{621}","\u{622}","\u{623}","\u{624}","\u{625}","\u{626}","\u{627}","\u{628}","\u{629}","\u{62a}","\u{62b}","\u{62c}","\u{62d}","\u{62e}","\u{62f}","\u{630}","\u{631}","\u{632}","\u{633}","\u{634}","\u{635}","\u{636}","\u{d7}","\u{637}","\u{638}","\u{639}","\u{63a}","\u{640}","\u{641}","\u{642}","\u{643}","\u{e0}","\u{644}","\u{e2}","\u{645}","\u{646}","\u{647}","\u{648}","\u{e7}","\u{e8}","\u{e9}","\u{ea}","\u{eb}","\u{649}","\u{64a}","\u{ee}","\u{ef}","\u{64b}","\u{64c}","\u{64d}","\u{64e}","\u{f4}","\u{64f}","\u{650}","\u{f7}","\u{651}","\u{f9}","\u{652}","\u{fb}","\u{fc}","\u{200e}","\u{200f}","\u{6d2}"]; - const TABLE_DEC_CODE = [8364,1662,8218,402,8222,8230,8224,8225,710,8240,1657,8249,338,1670,1688,1672,1711,8216,8217,8220,8221,8226,8211,8212,1705,8482,1681,8250,339,8204,8205,1722,160,1548,162,163,164,165,166,167,168,169,1726,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,1563,187,188,189,190,1567,1729,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,215,1591,1592,1593,1594,1600,1601,1602,1603,224,1604,226,1605,1606,1607,1608,231,232,233,234,235,1609,1610,238,239,1611,1612,1613,1614,244,1615,1616,247,1617,249,1618,251,252,8206,8207,1746]; - const TABLE_ENC = [160=>"\xA0",162=>"\xA2","\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9",171=>"\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9",187=>"\xBB","\xBC","\xBD","\xBE",215=>"\xD7",224=>"\xE0",226=>"\xE2",231=>"\xE7","\xE8","\xE9","\xEA","\xEB",238=>"\xEE","\xEF",244=>"\xF4",247=>"\xF7",249=>"\xF9",251=>"\xFB","\xFC",338=>"\x8C","\x9C",402=>"\x83",710=>"\x88",1548=>"\xA1",1563=>"\xBA",1567=>"\xBF",1569=>"\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD8","\xD9","\xDA","\xDB",1600=>"\xDC","\xDD","\xDE","\xDF","\xE1","\xE3","\xE4","\xE5","\xE6","\xEC","\xED","\xF0","\xF1","\xF2","\xF3","\xF5","\xF6","\xF8","\xFA",1657=>"\x8A",1662=>"\x81",1670=>"\x8D",1672=>"\x8F",1681=>"\x9A",1688=>"\x8E",1705=>"\x98",1711=>"\x90",1722=>"\x9F",1726=>"\xAA",1729=>"\xC0",1746=>"\xFF",8204=>"\x9D","\x9E","\xFD","\xFE",8211=>"\x96","\x97",8216=>"\x91","\x92","\x82",8220=>"\x93","\x94","\x84",8224=>"\x86","\x87","\x95",8230=>"\x85",8240=>"\x89",8249=>"\x8B","\x9B",8364=>"\x80",8482=>"\x99"]; + protected const TABLE_DEC_CHAR = ["\u{20ac}","\u{67e}","\u{201a}","\u{192}","\u{201e}","\u{2026}","\u{2020}","\u{2021}","\u{2c6}","\u{2030}","\u{679}","\u{2039}","\u{152}","\u{686}","\u{698}","\u{688}","\u{6af}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{6a9}","\u{2122}","\u{691}","\u{203a}","\u{153}","\u{200c}","\u{200d}","\u{6ba}","\u{a0}","\u{60c}","\u{a2}","\u{a3}","\u{a4}","\u{a5}","\u{a6}","\u{a7}","\u{a8}","\u{a9}","\u{6be}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{af}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{b4}","\u{b5}","\u{b6}","\u{b7}","\u{b8}","\u{b9}","\u{61b}","\u{bb}","\u{bc}","\u{bd}","\u{be}","\u{61f}","\u{6c1}","\u{621}","\u{622}","\u{623}","\u{624}","\u{625}","\u{626}","\u{627}","\u{628}","\u{629}","\u{62a}","\u{62b}","\u{62c}","\u{62d}","\u{62e}","\u{62f}","\u{630}","\u{631}","\u{632}","\u{633}","\u{634}","\u{635}","\u{636}","\u{d7}","\u{637}","\u{638}","\u{639}","\u{63a}","\u{640}","\u{641}","\u{642}","\u{643}","\u{e0}","\u{644}","\u{e2}","\u{645}","\u{646}","\u{647}","\u{648}","\u{e7}","\u{e8}","\u{e9}","\u{ea}","\u{eb}","\u{649}","\u{64a}","\u{ee}","\u{ef}","\u{64b}","\u{64c}","\u{64d}","\u{64e}","\u{f4}","\u{64f}","\u{650}","\u{f7}","\u{651}","\u{f9}","\u{652}","\u{fb}","\u{fc}","\u{200e}","\u{200f}","\u{6d2}"]; + protected const TABLE_DEC_CODE = [8364,1662,8218,402,8222,8230,8224,8225,710,8240,1657,8249,338,1670,1688,1672,1711,8216,8217,8220,8221,8226,8211,8212,1705,8482,1681,8250,339,8204,8205,1722,160,1548,162,163,164,165,166,167,168,169,1726,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,1563,187,188,189,190,1567,1729,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,215,1591,1592,1593,1594,1600,1601,1602,1603,224,1604,226,1605,1606,1607,1608,231,232,233,234,235,1609,1610,238,239,1611,1612,1613,1614,244,1615,1616,247,1617,249,1618,251,252,8206,8207,1746]; + protected const TABLE_ENC = [160=>"\xA0",162=>"\xA2","\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9",171=>"\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9",187=>"\xBB","\xBC","\xBD","\xBE",215=>"\xD7",224=>"\xE0",226=>"\xE2",231=>"\xE7","\xE8","\xE9","\xEA","\xEB",238=>"\xEE","\xEF",244=>"\xF4",247=>"\xF7",249=>"\xF9",251=>"\xFB","\xFC",338=>"\x8C","\x9C",402=>"\x83",710=>"\x88",1548=>"\xA1",1563=>"\xBA",1567=>"\xBF",1569=>"\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD8","\xD9","\xDA","\xDB",1600=>"\xDC","\xDD","\xDE","\xDF","\xE1","\xE3","\xE4","\xE5","\xE6","\xEC","\xED","\xF0","\xF1","\xF2","\xF3","\xF5","\xF6","\xF8","\xFA",1657=>"\x8A",1662=>"\x81",1670=>"\x8D",1672=>"\x8F",1681=>"\x9A",1688=>"\x8E",1705=>"\x98",1711=>"\x90",1722=>"\x9F",1726=>"\xAA",1729=>"\xC0",1746=>"\xFF",8204=>"\x9D","\x9E","\xFD","\xFE",8211=>"\x96","\x97",8216=>"\x91","\x92","\x82",8220=>"\x93","\x94","\x84",8224=>"\x86","\x87","\x95",8230=>"\x85",8240=>"\x89",8249=>"\x8B","\x9B",8364=>"\x80",8482=>"\x99"]; } diff --git a/lib/Encoding/Windows1257.php b/lib/Encoding/Windows1257.php index dd0ea39..fa33c97 100644 --- a/lib/Encoding/Windows1257.php +++ b/lib/Encoding/Windows1257.php @@ -7,14 +7,14 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class Windows1257 extends SingleByteEncoding { - const NAME = "windows-1257"; - const LABELS = [ + public const NAME = "windows-1257"; + public const LABELS = [ "cp1257", "windows-1257", "x-cp1257", ]; - const TABLE_DEC_CHAR = ["\u{20ac}","\u{81}","\u{201a}","\u{83}","\u{201e}","\u{2026}","\u{2020}","\u{2021}","\u{88}","\u{2030}","\u{8a}","\u{2039}","\u{8c}","\u{a8}","\u{2c7}","\u{b8}","\u{90}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{98}","\u{2122}","\u{9a}","\u{203a}","\u{9c}","\u{af}","\u{2db}","\u{9f}","\u{a0}",34=>"\u{a2}","\u{a3}","\u{a4}",38=>"\u{a6}","\u{a7}","\u{d8}","\u{a9}","\u{156}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{c6}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{b4}","\u{b5}","\u{b6}","\u{b7}","\u{f8}","\u{b9}","\u{157}","\u{bb}","\u{bc}","\u{bd}","\u{be}","\u{e6}","\u{104}","\u{12e}","\u{100}","\u{106}","\u{c4}","\u{c5}","\u{118}","\u{112}","\u{10c}","\u{c9}","\u{179}","\u{116}","\u{122}","\u{136}","\u{12a}","\u{13b}","\u{160}","\u{143}","\u{145}","\u{d3}","\u{14c}","\u{d5}","\u{d6}","\u{d7}","\u{172}","\u{141}","\u{15a}","\u{16a}","\u{dc}","\u{17b}","\u{17d}","\u{df}","\u{105}","\u{12f}","\u{101}","\u{107}","\u{e4}","\u{e5}","\u{119}","\u{113}","\u{10d}","\u{e9}","\u{17a}","\u{117}","\u{123}","\u{137}","\u{12b}","\u{13c}","\u{161}","\u{144}","\u{146}","\u{f3}","\u{14d}","\u{f5}","\u{f6}","\u{f7}","\u{173}","\u{142}","\u{15b}","\u{16b}","\u{fc}","\u{17c}","\u{17e}","\u{2d9}"]; - const TABLE_DEC_CODE = [8364,129,8218,131,8222,8230,8224,8225,136,8240,138,8249,140,168,711,184,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,175,731,159,160,34=>162,163,164,38=>166,167,216,169,342,171,172,173,174,198,176,177,178,179,180,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,729]; - const TABLE_ENC = [129=>"\x81",131=>"\x83",136=>"\x88",138=>"\x8A",140=>"\x8C",144=>"\x90",152=>"\x98",154=>"\x9A",156=>"\x9C",159=>"\x9F","\xA0",162=>"\xA2","\xA3","\xA4",166=>"\xA6","\xA7","\x8D","\xA9",171=>"\xAB","\xAC","\xAD","\xAE","\x9D","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\x8F","\xB9",187=>"\xBB","\xBC","\xBD","\xBE",196=>"\xC4","\xC5","\xAF",201=>"\xC9",211=>"\xD3",213=>"\xD5","\xD6","\xD7","\xA8",220=>"\xDC",223=>"\xDF",228=>"\xE4","\xE5","\xBF",233=>"\xE9",243=>"\xF3",245=>"\xF5","\xF6","\xF7","\xB8",252=>"\xFC",256=>"\xC2","\xE2",260=>"\xC0","\xE0","\xC3","\xE3",268=>"\xC8","\xE8",274=>"\xC7","\xE7",278=>"\xCB","\xEB","\xC6","\xE6",290=>"\xCC","\xEC",298=>"\xCE","\xEE",302=>"\xC1","\xE1",310=>"\xCD","\xED",315=>"\xCF","\xEF",321=>"\xD9","\xF9","\xD1","\xF1","\xD2","\xF2",332=>"\xD4","\xF4",342=>"\xAA","\xBA",346=>"\xDA","\xFA",352=>"\xD0","\xF0",362=>"\xDB","\xFB",370=>"\xD8","\xF8",377=>"\xCA","\xEA","\xDD","\xFD","\xDE","\xFE",711=>"\x8E",729=>"\xFF",731=>"\x9E",8211=>"\x96","\x97",8216=>"\x91","\x92","\x82",8220=>"\x93","\x94","\x84",8224=>"\x86","\x87","\x95",8230=>"\x85",8240=>"\x89",8249=>"\x8B","\x9B",8364=>"\x80",8482=>"\x99"]; + protected const TABLE_DEC_CHAR = ["\u{20ac}","\u{81}","\u{201a}","\u{83}","\u{201e}","\u{2026}","\u{2020}","\u{2021}","\u{88}","\u{2030}","\u{8a}","\u{2039}","\u{8c}","\u{a8}","\u{2c7}","\u{b8}","\u{90}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{98}","\u{2122}","\u{9a}","\u{203a}","\u{9c}","\u{af}","\u{2db}","\u{9f}","\u{a0}",34=>"\u{a2}","\u{a3}","\u{a4}",38=>"\u{a6}","\u{a7}","\u{d8}","\u{a9}","\u{156}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{c6}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{b4}","\u{b5}","\u{b6}","\u{b7}","\u{f8}","\u{b9}","\u{157}","\u{bb}","\u{bc}","\u{bd}","\u{be}","\u{e6}","\u{104}","\u{12e}","\u{100}","\u{106}","\u{c4}","\u{c5}","\u{118}","\u{112}","\u{10c}","\u{c9}","\u{179}","\u{116}","\u{122}","\u{136}","\u{12a}","\u{13b}","\u{160}","\u{143}","\u{145}","\u{d3}","\u{14c}","\u{d5}","\u{d6}","\u{d7}","\u{172}","\u{141}","\u{15a}","\u{16a}","\u{dc}","\u{17b}","\u{17d}","\u{df}","\u{105}","\u{12f}","\u{101}","\u{107}","\u{e4}","\u{e5}","\u{119}","\u{113}","\u{10d}","\u{e9}","\u{17a}","\u{117}","\u{123}","\u{137}","\u{12b}","\u{13c}","\u{161}","\u{144}","\u{146}","\u{f3}","\u{14d}","\u{f5}","\u{f6}","\u{f7}","\u{173}","\u{142}","\u{15b}","\u{16b}","\u{fc}","\u{17c}","\u{17e}","\u{2d9}"]; + protected const TABLE_DEC_CODE = [8364,129,8218,131,8222,8230,8224,8225,136,8240,138,8249,140,168,711,184,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,175,731,159,160,34=>162,163,164,38=>166,167,216,169,342,171,172,173,174,198,176,177,178,179,180,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,729]; + protected const TABLE_ENC = [129=>"\x81",131=>"\x83",136=>"\x88",138=>"\x8A",140=>"\x8C",144=>"\x90",152=>"\x98",154=>"\x9A",156=>"\x9C",159=>"\x9F","\xA0",162=>"\xA2","\xA3","\xA4",166=>"\xA6","\xA7","\x8D","\xA9",171=>"\xAB","\xAC","\xAD","\xAE","\x9D","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\x8F","\xB9",187=>"\xBB","\xBC","\xBD","\xBE",196=>"\xC4","\xC5","\xAF",201=>"\xC9",211=>"\xD3",213=>"\xD5","\xD6","\xD7","\xA8",220=>"\xDC",223=>"\xDF",228=>"\xE4","\xE5","\xBF",233=>"\xE9",243=>"\xF3",245=>"\xF5","\xF6","\xF7","\xB8",252=>"\xFC",256=>"\xC2","\xE2",260=>"\xC0","\xE0","\xC3","\xE3",268=>"\xC8","\xE8",274=>"\xC7","\xE7",278=>"\xCB","\xEB","\xC6","\xE6",290=>"\xCC","\xEC",298=>"\xCE","\xEE",302=>"\xC1","\xE1",310=>"\xCD","\xED",315=>"\xCF","\xEF",321=>"\xD9","\xF9","\xD1","\xF1","\xD2","\xF2",332=>"\xD4","\xF4",342=>"\xAA","\xBA",346=>"\xDA","\xFA",352=>"\xD0","\xF0",362=>"\xDB","\xFB",370=>"\xD8","\xF8",377=>"\xCA","\xEA","\xDD","\xFD","\xDE","\xFE",711=>"\x8E",729=>"\xFF",731=>"\x9E",8211=>"\x96","\x97",8216=>"\x91","\x92","\x82",8220=>"\x93","\x94","\x84",8224=>"\x86","\x87","\x95",8230=>"\x85",8240=>"\x89",8249=>"\x8B","\x9B",8364=>"\x80",8482=>"\x99"]; } diff --git a/lib/Encoding/Windows1258.php b/lib/Encoding/Windows1258.php index ca9ceba..85cb85c 100644 --- a/lib/Encoding/Windows1258.php +++ b/lib/Encoding/Windows1258.php @@ -7,14 +7,14 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class Windows1258 extends SingleByteEncoding { - const NAME = "windows-1258"; - const LABELS = [ + public const NAME = "windows-1258"; + public const LABELS = [ "cp1258", "windows-1258", "x-cp1258", ]; - const TABLE_DEC_CHAR = ["\u{20ac}","\u{81}","\u{201a}","\u{192}","\u{201e}","\u{2026}","\u{2020}","\u{2021}","\u{2c6}","\u{2030}","\u{8a}","\u{2039}","\u{152}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{2dc}","\u{2122}","\u{9a}","\u{203a}","\u{153}","\u{9d}","\u{9e}","\u{178}","\u{a0}","\u{a1}","\u{a2}","\u{a3}","\u{a4}","\u{a5}","\u{a6}","\u{a7}","\u{a8}","\u{a9}","\u{aa}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{af}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{b4}","\u{b5}","\u{b6}","\u{b7}","\u{b8}","\u{b9}","\u{ba}","\u{bb}","\u{bc}","\u{bd}","\u{be}","\u{bf}","\u{c0}","\u{c1}","\u{c2}","\u{102}","\u{c4}","\u{c5}","\u{c6}","\u{c7}","\u{c8}","\u{c9}","\u{ca}","\u{cb}","\u{300}","\u{cd}","\u{ce}","\u{cf}","\u{110}","\u{d1}","\u{309}","\u{d3}","\u{d4}","\u{1a0}","\u{d6}","\u{d7}","\u{d8}","\u{d9}","\u{da}","\u{db}","\u{dc}","\u{1af}","\u{303}","\u{df}","\u{e0}","\u{e1}","\u{e2}","\u{103}","\u{e4}","\u{e5}","\u{e6}","\u{e7}","\u{e8}","\u{e9}","\u{ea}","\u{eb}","\u{301}","\u{ed}","\u{ee}","\u{ef}","\u{111}","\u{f1}","\u{323}","\u{f3}","\u{f4}","\u{1a1}","\u{f6}","\u{f7}","\u{f8}","\u{f9}","\u{fa}","\u{fb}","\u{fc}","\u{1b0}","\u{20ab}","\u{ff}"]; - const TABLE_DEC_CODE = [8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,258,196,197,198,199,200,201,202,203,768,205,206,207,272,209,777,211,212,416,214,215,216,217,218,219,220,431,771,223,224,225,226,259,228,229,230,231,232,233,234,235,769,237,238,239,273,241,803,243,244,417,246,247,248,249,250,251,252,432,8363,255]; - const TABLE_ENC = [129=>"\x81",138=>"\x8A",141=>"\x8D","\x8E","\x8F","\x90",154=>"\x9A",157=>"\x9D","\x9E",160=>"\xA0","\xA1","\xA2","\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9","\xAA","\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9","\xBA","\xBB","\xBC","\xBD","\xBE","\xBF","\xC0","\xC1","\xC2",196=>"\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB",205=>"\xCD","\xCE","\xCF",209=>"\xD1",211=>"\xD3","\xD4",214=>"\xD6","\xD7","\xD8","\xD9","\xDA","\xDB","\xDC",223=>"\xDF","\xE0","\xE1","\xE2",228=>"\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB",237=>"\xED","\xEE","\xEF",241=>"\xF1",243=>"\xF3","\xF4",246=>"\xF6","\xF7","\xF8","\xF9","\xFA","\xFB","\xFC",255=>"\xFF",258=>"\xC3","\xE3",272=>"\xD0","\xF0",338=>"\x8C","\x9C",376=>"\x9F",402=>"\x83",416=>"\xD5","\xF5",431=>"\xDD","\xFD",710=>"\x88",732=>"\x98",768=>"\xCC","\xEC",771=>"\xDE",777=>"\xD2",803=>"\xF2",8211=>"\x96","\x97",8216=>"\x91","\x92","\x82",8220=>"\x93","\x94","\x84",8224=>"\x86","\x87","\x95",8230=>"\x85",8240=>"\x89",8249=>"\x8B","\x9B",8363=>"\xFE","\x80",8482=>"\x99"]; + protected const TABLE_DEC_CHAR = ["\u{20ac}","\u{81}","\u{201a}","\u{192}","\u{201e}","\u{2026}","\u{2020}","\u{2021}","\u{2c6}","\u{2030}","\u{8a}","\u{2039}","\u{152}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{2dc}","\u{2122}","\u{9a}","\u{203a}","\u{153}","\u{9d}","\u{9e}","\u{178}","\u{a0}","\u{a1}","\u{a2}","\u{a3}","\u{a4}","\u{a5}","\u{a6}","\u{a7}","\u{a8}","\u{a9}","\u{aa}","\u{ab}","\u{ac}","\u{ad}","\u{ae}","\u{af}","\u{b0}","\u{b1}","\u{b2}","\u{b3}","\u{b4}","\u{b5}","\u{b6}","\u{b7}","\u{b8}","\u{b9}","\u{ba}","\u{bb}","\u{bc}","\u{bd}","\u{be}","\u{bf}","\u{c0}","\u{c1}","\u{c2}","\u{102}","\u{c4}","\u{c5}","\u{c6}","\u{c7}","\u{c8}","\u{c9}","\u{ca}","\u{cb}","\u{300}","\u{cd}","\u{ce}","\u{cf}","\u{110}","\u{d1}","\u{309}","\u{d3}","\u{d4}","\u{1a0}","\u{d6}","\u{d7}","\u{d8}","\u{d9}","\u{da}","\u{db}","\u{dc}","\u{1af}","\u{303}","\u{df}","\u{e0}","\u{e1}","\u{e2}","\u{103}","\u{e4}","\u{e5}","\u{e6}","\u{e7}","\u{e8}","\u{e9}","\u{ea}","\u{eb}","\u{301}","\u{ed}","\u{ee}","\u{ef}","\u{111}","\u{f1}","\u{323}","\u{f3}","\u{f4}","\u{1a1}","\u{f6}","\u{f7}","\u{f8}","\u{f9}","\u{fa}","\u{fb}","\u{fc}","\u{1b0}","\u{20ab}","\u{ff}"]; + protected const TABLE_DEC_CODE = [8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,258,196,197,198,199,200,201,202,203,768,205,206,207,272,209,777,211,212,416,214,215,216,217,218,219,220,431,771,223,224,225,226,259,228,229,230,231,232,233,234,235,769,237,238,239,273,241,803,243,244,417,246,247,248,249,250,251,252,432,8363,255]; + protected const TABLE_ENC = [129=>"\x81",138=>"\x8A",141=>"\x8D","\x8E","\x8F","\x90",154=>"\x9A",157=>"\x9D","\x9E",160=>"\xA0","\xA1","\xA2","\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9","\xAA","\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9","\xBA","\xBB","\xBC","\xBD","\xBE","\xBF","\xC0","\xC1","\xC2",196=>"\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB",205=>"\xCD","\xCE","\xCF",209=>"\xD1",211=>"\xD3","\xD4",214=>"\xD6","\xD7","\xD8","\xD9","\xDA","\xDB","\xDC",223=>"\xDF","\xE0","\xE1","\xE2",228=>"\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB",237=>"\xED","\xEE","\xEF",241=>"\xF1",243=>"\xF3","\xF4",246=>"\xF6","\xF7","\xF8","\xF9","\xFA","\xFB","\xFC",255=>"\xFF",258=>"\xC3","\xE3",272=>"\xD0","\xF0",338=>"\x8C","\x9C",376=>"\x9F",402=>"\x83",416=>"\xD5","\xF5",431=>"\xDD","\xFD",710=>"\x88",732=>"\x98",768=>"\xCC","\xEC",771=>"\xDE",777=>"\xD2",803=>"\xF2",8211=>"\x96","\x97",8216=>"\x91","\x92","\x82",8220=>"\x93","\x94","\x84",8224=>"\x86","\x87","\x95",8230=>"\x85",8240=>"\x89",8249=>"\x8B","\x9B",8363=>"\xFE","\x80",8482=>"\x99"]; } diff --git a/lib/Encoding/Windows874.php b/lib/Encoding/Windows874.php index ea099be..dfdcbc3 100644 --- a/lib/Encoding/Windows874.php +++ b/lib/Encoding/Windows874.php @@ -7,8 +7,8 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class Windows874 extends SingleByteEncoding { - const NAME = "windows-874"; - const LABELS = [ + public const NAME = "windows-874"; + public const LABELS = [ "dos-874", "iso-8859-11", "iso8859-11", @@ -17,7 +17,7 @@ class Windows874 extends SingleByteEncoding { "windows-874", ]; - const TABLE_DEC_CHAR = ["\u{20ac}","\u{81}","\u{82}","\u{83}","\u{84}","\u{2026}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{e01}","\u{e02}","\u{e03}","\u{e04}","\u{e05}","\u{e06}","\u{e07}","\u{e08}","\u{e09}","\u{e0a}","\u{e0b}","\u{e0c}","\u{e0d}","\u{e0e}","\u{e0f}","\u{e10}","\u{e11}","\u{e12}","\u{e13}","\u{e14}","\u{e15}","\u{e16}","\u{e17}","\u{e18}","\u{e19}","\u{e1a}","\u{e1b}","\u{e1c}","\u{e1d}","\u{e1e}","\u{e1f}","\u{e20}","\u{e21}","\u{e22}","\u{e23}","\u{e24}","\u{e25}","\u{e26}","\u{e27}","\u{e28}","\u{e29}","\u{e2a}","\u{e2b}","\u{e2c}","\u{e2d}","\u{e2e}","\u{e2f}","\u{e30}","\u{e31}","\u{e32}","\u{e33}","\u{e34}","\u{e35}","\u{e36}","\u{e37}","\u{e38}","\u{e39}","\u{e3a}",95=>"\u{e3f}","\u{e40}","\u{e41}","\u{e42}","\u{e43}","\u{e44}","\u{e45}","\u{e46}","\u{e47}","\u{e48}","\u{e49}","\u{e4a}","\u{e4b}","\u{e4c}","\u{e4d}","\u{e4e}","\u{e4f}","\u{e50}","\u{e51}","\u{e52}","\u{e53}","\u{e54}","\u{e55}","\u{e56}","\u{e57}","\u{e58}","\u{e59}","\u{e5a}","\u{e5b}"]; - const TABLE_DEC_CODE = [8364,129,130,131,132,8230,134,135,136,137,138,139,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,153,154,155,156,157,158,159,160,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,95=>3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675]; - const TABLE_ENC = [129=>"\x81","\x82","\x83","\x84",134=>"\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90",152=>"\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",3585=>"\xA1","\xA2","\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9","\xAA","\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9","\xBA","\xBB","\xBC","\xBD","\xBE","\xBF","\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD7","\xD8","\xD9","\xDA",3647=>"\xDF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA","\xFB",8211=>"\x96","\x97",8216=>"\x91","\x92",8220=>"\x93","\x94",8226=>"\x95",8230=>"\x85",8364=>"\x80"]; + protected const TABLE_DEC_CHAR = ["\u{20ac}","\u{81}","\u{82}","\u{83}","\u{84}","\u{2026}","\u{86}","\u{87}","\u{88}","\u{89}","\u{8a}","\u{8b}","\u{8c}","\u{8d}","\u{8e}","\u{8f}","\u{90}","\u{2018}","\u{2019}","\u{201c}","\u{201d}","\u{2022}","\u{2013}","\u{2014}","\u{98}","\u{99}","\u{9a}","\u{9b}","\u{9c}","\u{9d}","\u{9e}","\u{9f}","\u{a0}","\u{e01}","\u{e02}","\u{e03}","\u{e04}","\u{e05}","\u{e06}","\u{e07}","\u{e08}","\u{e09}","\u{e0a}","\u{e0b}","\u{e0c}","\u{e0d}","\u{e0e}","\u{e0f}","\u{e10}","\u{e11}","\u{e12}","\u{e13}","\u{e14}","\u{e15}","\u{e16}","\u{e17}","\u{e18}","\u{e19}","\u{e1a}","\u{e1b}","\u{e1c}","\u{e1d}","\u{e1e}","\u{e1f}","\u{e20}","\u{e21}","\u{e22}","\u{e23}","\u{e24}","\u{e25}","\u{e26}","\u{e27}","\u{e28}","\u{e29}","\u{e2a}","\u{e2b}","\u{e2c}","\u{e2d}","\u{e2e}","\u{e2f}","\u{e30}","\u{e31}","\u{e32}","\u{e33}","\u{e34}","\u{e35}","\u{e36}","\u{e37}","\u{e38}","\u{e39}","\u{e3a}",95=>"\u{e3f}","\u{e40}","\u{e41}","\u{e42}","\u{e43}","\u{e44}","\u{e45}","\u{e46}","\u{e47}","\u{e48}","\u{e49}","\u{e4a}","\u{e4b}","\u{e4c}","\u{e4d}","\u{e4e}","\u{e4f}","\u{e50}","\u{e51}","\u{e52}","\u{e53}","\u{e54}","\u{e55}","\u{e56}","\u{e57}","\u{e58}","\u{e59}","\u{e5a}","\u{e5b}"]; + protected const TABLE_DEC_CODE = [8364,129,130,131,132,8230,134,135,136,137,138,139,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,153,154,155,156,157,158,159,160,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,95=>3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675]; + protected const TABLE_ENC = [129=>"\x81","\x82","\x83","\x84",134=>"\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90",152=>"\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xA0",3585=>"\xA1","\xA2","\xA3","\xA4","\xA5","\xA6","\xA7","\xA8","\xA9","\xAA","\xAB","\xAC","\xAD","\xAE","\xAF","\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7","\xB8","\xB9","\xBA","\xBB","\xBC","\xBD","\xBE","\xBF","\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7","\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF","\xD0","\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD7","\xD8","\xD9","\xDA",3647=>"\xDF","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA","\xFB",8211=>"\x96","\x97",8216=>"\x91","\x92",8220=>"\x93","\x94",8226=>"\x95",8230=>"\x85",8364=>"\x80"]; } diff --git a/lib/Encoding/XMacCyrillic.php b/lib/Encoding/XMacCyrillic.php index 06a164a..85b8ac7 100644 --- a/lib/Encoding/XMacCyrillic.php +++ b/lib/Encoding/XMacCyrillic.php @@ -7,13 +7,13 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; class XMacCyrillic extends SingleByteEncoding { - const NAME = "x-mac-cyrillic"; - const LABELS = [ + public const NAME = "x-mac-cyrillic"; + public const LABELS = [ "x-mac-cyrillic", "x-mac-ukrainian", ]; - const TABLE_DEC_CHAR = ["\u{410}","\u{411}","\u{412}","\u{413}","\u{414}","\u{415}","\u{416}","\u{417}","\u{418}","\u{419}","\u{41a}","\u{41b}","\u{41c}","\u{41d}","\u{41e}","\u{41f}","\u{420}","\u{421}","\u{422}","\u{423}","\u{424}","\u{425}","\u{426}","\u{427}","\u{428}","\u{429}","\u{42a}","\u{42b}","\u{42c}","\u{42d}","\u{42e}","\u{42f}","\u{2020}","\u{b0}","\u{490}","\u{a3}","\u{a7}","\u{2022}","\u{b6}","\u{406}","\u{ae}","\u{a9}","\u{2122}","\u{402}","\u{452}","\u{2260}","\u{403}","\u{453}","\u{221e}","\u{b1}","\u{2264}","\u{2265}","\u{456}","\u{b5}","\u{491}","\u{408}","\u{404}","\u{454}","\u{407}","\u{457}","\u{409}","\u{459}","\u{40a}","\u{45a}","\u{458}","\u{405}","\u{ac}","\u{221a}","\u{192}","\u{2248}","\u{2206}","\u{ab}","\u{bb}","\u{2026}","\u{a0}","\u{40b}","\u{45b}","\u{40c}","\u{45c}","\u{455}","\u{2013}","\u{2014}","\u{201c}","\u{201d}","\u{2018}","\u{2019}","\u{f7}","\u{201e}","\u{40e}","\u{45e}","\u{40f}","\u{45f}","\u{2116}","\u{401}","\u{451}","\u{44f}","\u{430}","\u{431}","\u{432}","\u{433}","\u{434}","\u{435}","\u{436}","\u{437}","\u{438}","\u{439}","\u{43a}","\u{43b}","\u{43c}","\u{43d}","\u{43e}","\u{43f}","\u{440}","\u{441}","\u{442}","\u{443}","\u{444}","\u{445}","\u{446}","\u{447}","\u{448}","\u{449}","\u{44a}","\u{44b}","\u{44c}","\u{44d}","\u{44e}","\u{20ac}"]; - const TABLE_DEC_CODE = [1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8224,176,1168,163,167,8226,182,1030,174,169,8482,1026,1106,8800,1027,1107,8734,177,8804,8805,1110,181,1169,1032,1028,1108,1031,1111,1033,1113,1034,1114,1112,1029,172,8730,402,8776,8710,171,187,8230,160,1035,1115,1036,1116,1109,8211,8212,8220,8221,8216,8217,247,8222,1038,1118,1039,1119,8470,1025,1105,1103,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,8364]; - const TABLE_ENC = [160=>"\xCA",163=>"\xA3",167=>"\xA4",169=>"\xA9",171=>"\xC7","\xC2",174=>"\xA8",176=>"\xA1","\xB1",181=>"\xB5","\xA6",187=>"\xC8",247=>"\xD6",402=>"\xC4",1025=>"\xDD","\xAB","\xAE","\xB8","\xC1","\xA7","\xBA","\xB7","\xBC","\xBE","\xCB","\xCD",1038=>"\xD8","\xDA","\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA","\xFB","\xFC","\xFD","\xFE","\xDF",1105=>"\xDE","\xAC","\xAF","\xB9","\xCF","\xB4","\xBB","\xC0","\xBD","\xBF","\xCC","\xCE",1118=>"\xD9","\xDB",1168=>"\xA2","\xB6",8211=>"\xD0","\xD1",8216=>"\xD4","\xD5",8220=>"\xD2","\xD3","\xD7",8224=>"\xA0",8226=>"\xA5",8230=>"\xC9",8364=>"\xFF",8470=>"\xDC",8482=>"\xAA",8710=>"\xC6",8730=>"\xC3",8734=>"\xB0",8776=>"\xC5",8800=>"\xAD",8804=>"\xB2","\xB3"]; + protected const TABLE_DEC_CHAR = ["\u{410}","\u{411}","\u{412}","\u{413}","\u{414}","\u{415}","\u{416}","\u{417}","\u{418}","\u{419}","\u{41a}","\u{41b}","\u{41c}","\u{41d}","\u{41e}","\u{41f}","\u{420}","\u{421}","\u{422}","\u{423}","\u{424}","\u{425}","\u{426}","\u{427}","\u{428}","\u{429}","\u{42a}","\u{42b}","\u{42c}","\u{42d}","\u{42e}","\u{42f}","\u{2020}","\u{b0}","\u{490}","\u{a3}","\u{a7}","\u{2022}","\u{b6}","\u{406}","\u{ae}","\u{a9}","\u{2122}","\u{402}","\u{452}","\u{2260}","\u{403}","\u{453}","\u{221e}","\u{b1}","\u{2264}","\u{2265}","\u{456}","\u{b5}","\u{491}","\u{408}","\u{404}","\u{454}","\u{407}","\u{457}","\u{409}","\u{459}","\u{40a}","\u{45a}","\u{458}","\u{405}","\u{ac}","\u{221a}","\u{192}","\u{2248}","\u{2206}","\u{ab}","\u{bb}","\u{2026}","\u{a0}","\u{40b}","\u{45b}","\u{40c}","\u{45c}","\u{455}","\u{2013}","\u{2014}","\u{201c}","\u{201d}","\u{2018}","\u{2019}","\u{f7}","\u{201e}","\u{40e}","\u{45e}","\u{40f}","\u{45f}","\u{2116}","\u{401}","\u{451}","\u{44f}","\u{430}","\u{431}","\u{432}","\u{433}","\u{434}","\u{435}","\u{436}","\u{437}","\u{438}","\u{439}","\u{43a}","\u{43b}","\u{43c}","\u{43d}","\u{43e}","\u{43f}","\u{440}","\u{441}","\u{442}","\u{443}","\u{444}","\u{445}","\u{446}","\u{447}","\u{448}","\u{449}","\u{44a}","\u{44b}","\u{44c}","\u{44d}","\u{44e}","\u{20ac}"]; + protected const TABLE_DEC_CODE = [1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8224,176,1168,163,167,8226,182,1030,174,169,8482,1026,1106,8800,1027,1107,8734,177,8804,8805,1110,181,1169,1032,1028,1108,1031,1111,1033,1113,1034,1114,1112,1029,172,8730,402,8776,8710,171,187,8230,160,1035,1115,1036,1116,1109,8211,8212,8220,8221,8216,8217,247,8222,1038,1118,1039,1119,8470,1025,1105,1103,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,8364]; + protected const TABLE_ENC = [160=>"\xCA",163=>"\xA3",167=>"\xA4",169=>"\xA9",171=>"\xC7","\xC2",174=>"\xA8",176=>"\xA1","\xB1",181=>"\xB5","\xA6",187=>"\xC8",247=>"\xD6",402=>"\xC4",1025=>"\xDD","\xAB","\xAE","\xB8","\xC1","\xA7","\xBA","\xB7","\xBC","\xBE","\xCB","\xCD",1038=>"\xD8","\xDA","\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F","\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7","\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF","\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7","\xF8","\xF9","\xFA","\xFB","\xFC","\xFD","\xFE","\xDF",1105=>"\xDE","\xAC","\xAF","\xB9","\xCF","\xB4","\xBB","\xC0","\xBD","\xBF","\xCC","\xCE",1118=>"\xD9","\xDB",1168=>"\xA2","\xB6",8211=>"\xD0","\xD1",8216=>"\xD4","\xD5",8220=>"\xD2","\xD3","\xD7",8224=>"\xA0",8226=>"\xA5",8230=>"\xC9",8364=>"\xFF",8470=>"\xDC",8482=>"\xAA",8710=>"\xC6",8730=>"\xC3",8734=>"\xB0",8776=>"\xC5",8800=>"\xAD",8804=>"\xB2","\xB3"]; } diff --git a/lib/Encoding/XUserDefined.php b/lib/Encoding/XUserDefined.php index 8266a35..4f1e840 100644 --- a/lib/Encoding/XUserDefined.php +++ b/lib/Encoding/XUserDefined.php @@ -6,9 +6,9 @@ declare(strict_types=1); namespace MensBeam\Intl\Encoding; -class XUserDefined extends AbstractEncoding implements Encoding { - const NAME = "x-user-defined"; - const LABELS = ["x-user-defined"]; +class XUserDefined extends AbstractEncoding implements Coder, Decoder { + public const NAME = "x-user-defined"; + public const LABELS = ["x-user-defined"]; /** Retrieve the next character in the string, in UTF-8 encoding * @@ -76,7 +76,18 @@ class XUserDefined extends AbstractEncoding implements Encoding { return 0; } } - + + public static function encode(int $codePoint, bool $fatal = true): string { + if ($codePoint < 0 || $codePoint > 0x10FFFF) { + throw new EncoderException("Encountered code point outside Unicode range ($codePoint)", self::E_INVALID_CODE_POINT); + } elseif ($codePoint < 0x80) { + return chr($codePoint); + } elseif ($codePoint >= 0xF780 && $codePoint <= 0xF7FF) { + return chr($codePoint - 0xF780 + 0x80); + } else { + return self::errEnc(!$fatal, $codePoint); + } + } /** @codeCoverageIgnore */ protected function seekBack(int $distance): int { diff --git a/tests/cases/Encoding/TestBig5.php b/tests/cases/Encoding/TestBig5.php index b7b1fce..e5a8268 100644 --- a/tests/cases/Encoding/TestBig5.php +++ b/tests/cases/Encoding/TestBig5.php @@ -7,7 +7,7 @@ declare(strict_types=1); namespace MensBeam\Intl\TestCase\Encoding; use MensBeam\Intl\Encoding\Big5; -use MensBeam\Intl\Encoding\Encoding; +use MensBeam\Intl\Encoding\Coder; use MensBeam\Intl\Encoding\EncoderException; class TestBig5 extends \MensBeam\Intl\Test\CoderDecoderTest { @@ -28,8 +28,51 @@ class TestBig5 extends \MensBeam\Intl\Test\CoderDecoderTest { /* This string contains an invalid character sequence sandwiched between two null characters */ protected $brokenChar = "00 FF 00"; + public function provideCodePoints() { + return [ + 'U+0064 (HTML)' => [false, 0x64, "64"], + 'U+0064 (fatal)' => [true, 0x64, "64"], + 'U+00CA (HTML)' => [false, 0xCA, bin2hex("Ê")], + 'U+00CA (fatal)' => [true, 0xCA, new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)], + 'U+3007 (HTML)' => [false, 0x3007, "C6 E2"], + 'U+3007 (fatal)' => [true, 0x3007, "C6 E2"], + 'U+5341 (HTML)' => [false, 0x5341, "A4 51"], + 'U+5341 (fatal)' => [true, 0x5341, "A4 51"], + 'U+2561 (HTML)' => [false, 0x2561, "F9 EB"], + 'U+2561 (fatal)' => [true, 0x2561, "F9 EB"], + 'U+256D (HTML)' => [false, 0x256D, "A2 7E"], + 'U+256D (fatal)' => [true, 0x256D, "A2 7E"], + '-1 (HTML)' => [false, -1, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '-1 (fatal)' => [true, -1, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '0x110000 (HTML)' => [false, 0x110000, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '0x110000 (fatal)' => [true, 0x110000, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + ]; + } + + public function provideStrings() { + return [ + 'empty string' => ["", []], + 'sanity check' => ["40", [64]], + 'two-byte character' => ["D7 D7", [36290]], + 'EOF after first byte' => ["D7", [65533]], + 'low byte after first byte' => ["D7 39", [65533, 57]], + '0x80 as first byte' => ["80 D7 00", [65533, 65533, 0]], + '0xFF as first byte' => ["FF D7 00", [65533, 65533, 0]], + 'invalid high byte as first byte' => ["81 D7 00", [65533, 0]], + '0x7F after first byte' => ["D7 7F", [65533, 127]], + '0xFF after first byte' => ["D7 FF", [65533]], + 'invalid high byte after first byte' => ["D7 81", [65533]], + 'broken string' => ["00 FF 00", [0, 65533, 0]], + 'double-characters low' => ["88 62 88 64", [202, 772, 202, 780]], + 'double-characters high' => ["88 A3 88 A5", [234, 772, 234, 780]], + 'mixed string' => ["7A D7 AA A4 F4 88 62 88 A5", [122, 34508, 27700, 202, 772, 234, 780]], + 'mixed string 2' => ["62 D7 D7 D7 D7 62", [98, 36290, 36290, 98]], + ]; + } + /** * @dataProvider provideCodePoints + * @covers MensBeam\Intl\Encoding\Encoder * @covers MensBeam\Intl\Encoding\Big5::encode * @covers MensBeam\Intl\Encoding\Big5::errEnc */ @@ -37,6 +80,15 @@ class TestBig5 extends \MensBeam\Intl\Test\CoderDecoderTest { return parent::testEncodeCodePoints($fatal, $input, $exp); } + /** + * @dataProvider provideCodePoints + * @covers MensBeam\Intl\Encoding\Big5::encode + * @covers MensBeam\Intl\Encoding\Big5::errEnc + */ + public function testEncodeCodePointsStatically(bool $fatal, $input, $exp) { + return parent::testEncodeCodePointsStatically($fatal, $input, $exp); + } + /** * @dataProvider provideStrings * @covers MensBeam\Intl\Encoding\Big5::__construct @@ -136,7 +188,6 @@ class TestBig5 extends \MensBeam\Intl\Test\CoderDecoderTest { return parent::testIterateThroughAStringAllowingSurrogates($input, $strictExp, $relaxedExp); } - /** * @covers MensBeam\Intl\Encoding\Big5::seekBack */ @@ -144,42 +195,6 @@ class TestBig5 extends \MensBeam\Intl\Test\CoderDecoderTest { return parent::testSeekBackOverRandomData(); } - public function provideCodePoints() { - return [ - 'U+0064 (HTML)' => [false, 0x64, "64"], - 'U+0064 (fatal)' => [true, 0x64, "64"], - 'U+00CA (HTML)' => [false, 0xCA, bin2hex("Ê")], - 'U+00CA (fatal)' => [true, 0xCA, new EncoderException("", Encoding::E_UNAVAILABLE_CODE_POINT)], - 'U+3007 (HTML)' => [false, 0x3007, "C6 E2"], - 'U+3007 (fatal)' => [true, 0x3007, "C6 E2"], - '-1 (HTML)' => [false, -1, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - '-1 (fatal)' => [true, -1, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - '0x110000 (HTML)' => [false, 0x110000, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - '0x110000 (fatal)' => [true, 0x110000, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - ]; - } - - public function provideStrings() { - return [ - 'empty string' => ["", []], - 'sanity check' => ["40", [64]], - 'two-byte character' => ["D7 D7", [36290]], - 'EOF after first byte' => ["D7", [65533]], - 'low byte after first byte' => ["D7 39", [65533, 57]], - '0x80 as first byte' => ["80 D7 00", [65533, 65533, 0]], - '0xFF as first byte' => ["FF D7 00", [65533, 65533, 0]], - 'invalid high byte as first byte' => ["81 D7 00", [65533, 0]], - '0x7F after first byte' => ["D7 7F", [65533, 127]], - '0xFF after first byte' => ["D7 FF", [65533]], - 'invalid high byte after first byte' => ["D7 81", [65533]], - 'broken string' => ["00 FF 00", [0, 65533, 0]], - 'double-characters low' => ["88 62 88 64", [202, 772, 202, 780]], - 'double-characters high' => ["88 A3 88 A5", [234, 772, 234, 780]], - 'mixed string' => ["7A D7 AA A4 F4 88 62 88 A5", [122, 34508, 27700, 202, 772, 234, 780]], - 'mixed string 2' => ["62 D7 D7 D7 D7 62", [98, 36290, 36290, 98]], - ]; - } - /** * @group optional */ diff --git a/tests/cases/Encoding/TestEUCJP.php b/tests/cases/Encoding/TestEUCJP.php new file mode 100644 index 0000000..96c8d9d --- /dev/null +++ b/tests/cases/Encoding/TestEUCJP.php @@ -0,0 +1,227 @@ + [false, 0x64, "64"], + 'U+0064 (fatal)' => [true, 0x64, "64"], + 'U+00A5 (HTML)' => [false, 0xA5, "5C"], + 'U+00A5 (fatal)' => [true, 0xA5, "5C"], + 'U+203E (HTML)' => [false, 0x203E, "7E"], + 'U+203E (fatal)' => [true, 0x203E, "7E"], + 'U+3088 (HTML)' => [false, 0x3088, "A4 E8"], + 'U+3088 (fatal)' => [true, 0x3088, "A4 E8"], + 'U+FF96 (HTML)' => [false, 0xFF96, "8E D6"], + 'U+FF96 (fatal)' => [true, 0xFF96, "8E D6"], + 'U+2212 (HTML)' => [false, 0x2212, "A1 DD"], + 'U+2212 (fatal)' => [true, 0x2212, "A1 DD"], + 'U+00E6 (HTML)' => [false, 0xE6, bin2hex("æ")], + 'U+00E6 (fatal)' => [true, 0xE6, new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)], + 'U+FFE2 (HTML)' => [false, 0xFFE2, "A2 CC"], + 'U+FFE2 (fatal)' => [true, 0xFFE2, "A2 CC"], + 'U+2116 (HTML)' => [false, 0x2116, "AD E2"], + 'U+2116 (fatal)' => [true, 0x2116, "AD E2"], + '-1 (HTML)' => [false, -1, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '-1 (fatal)' => [true, -1, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '0x110000 (HTML)' => [false, 0x110000, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '0x110000 (fatal)' => [true, 0x110000, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + ]; + } + + public function provideStrings() { + return [ + 'empty string' => ["", []], + 'sanity check' => ["40", [64]], + 'former ASCII deviations' => ["5C 7E", [92, 126]], + 'changed multibyte index' => ["A1DD", [65293]], + 'JIS X 0201 range' => ["8EA1 8EDF", [65377, 65439]], + 'JIS X 0201 bogus range' => ["8EA0 8EE0", [65533, 65533]], + 'JIS X 0201 truncated character 1' => ["8E", [65533]], + 'JIS X 0201 truncated character 2' => ["8E 20", [65533, 32]], + 'JIS X 0201 truncated character 3' => ["8E FF", [65533]], + 'JIS X 0212 assigned range' => ["8FA2AF 8FEDE3", [728, 40869]], + 'JIS X 0212 total range' => ["8FA1A1 8FFEFE", [65533, 65533]], + 'JIS X 0212 bogus range 1' => ["8FA0A1 8FFFFE", [65533, 65533, 65533, 65533]], + 'JIS X 0212 bogus range 2' => ["8FA1A0 8FFEFF", [65533, 65533]], + 'JIS X 0212 truncated character 1' => ["8FA2", [65533]], + 'JIS X 0212 truncated character 2' => ["8FA2 20", [65533, 32]], + 'JIS X 0212 truncated character 3' => ["8FA2 FF", [65533]], + 'JIS X 0208 assigned range' => ["A1A1 FCFE", [12288, 65282]], + 'JIS X 0208 total range' => ["A1A1 FEFE", [12288, 65533]], + 'JIS X 0208 bogus range' => ["A1A0 A0FE", [65533, 65533, 65533]], + 'JIS X 0208 truncated character 1' => ["A1", [65533]], + 'JIS X 0208 truncated character 2' => ["A1 20", [65533, 32]], + 'JIS X 0208 truncated character 3' => ["A1 FF", [65533]], + ]; + } + + /** + * @dataProvider provideCodePoints + * @covers MensBeam\Intl\Encoding\Encoder + * @covers MensBeam\Intl\Encoding\EUCJP::encode + * @covers MensBeam\Intl\Encoding\EUCJP::errEnc + */ + public function testEncodeCodePoints(bool $fatal, $input, $exp) { + return parent::testEncodeCodePoints($fatal, $input, $exp); + } + + /** + * @dataProvider provideCodePoints + * @covers MensBeam\Intl\Encoding\EUCJP::encode + * @covers MensBeam\Intl\Encoding\EUCJP::errEnc + */ + public function testEncodeCodePointsStatically(bool $fatal, $input, $exp) { + return parent::testEncodeCodePointsStatically($fatal, $input, $exp); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\EUCJP::__construct + * @covers MensBeam\Intl\Encoding\EUCJP::nextCode + */ + public function testDecodeMultipleCharactersAsCodePoints(string $input, array $exp) { + return parent::testDecodeMultipleCharactersAsCodePoints($input, $exp); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\EUCJP::__construct + * @covers MensBeam\Intl\Encoding\EUCJP::nextChar + */ + public function testDecodeMultipleCharactersAsStrings(string $input, array $exp) { + return parent::testDecodeMultipleCharactersAsStrings($input, $exp); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\EUCJP::seekBack + */ + public function testSTepBackThroughAString(string $input, array $exp) { + return parent::testSTepBackThroughAString($input, $exp); + } + + /** + * @covers MensBeam\Intl\Encoding\EUCJP::seek + * @covers MensBeam\Intl\Encoding\EUCJP::posChar + * @covers MensBeam\Intl\Encoding\EUCJP::posByte + * @covers MensBeam\Intl\Encoding\EUCJP::rewind + */ + public function testSeekThroughAString() { + return parent::testSeekThroughAString(); + } + + /** + * @covers MensBeam\Intl\Encoding\EUCJP::posChar + * @covers MensBeam\Intl\Encoding\EUCJP::posByte + */ + public function testTraversePastTheEndOfAString() { + return parent::testTraversePastTheEndOfAString(); + } + + /** + * @covers MensBeam\Intl\Encoding\EUCJP::peekChar + * @covers MensBeam\Intl\Encoding\EUCJP::stateSave + * @covers MensBeam\Intl\Encoding\EUCJP::stateApply + */ + public function testPeekAtCharacters() { + return parent::testPeekAtCharacters(); + } + + /** + * @covers MensBeam\Intl\Encoding\EUCJP::peekCode + * @covers MensBeam\Intl\Encoding\EUCJP::stateSave + * @covers MensBeam\Intl\Encoding\EUCJP::stateApply + */ + public function testPeekAtCodePoints() { + return parent::testPeekAtCodePoints(); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\EUCJP::lenChar + * @covers MensBeam\Intl\Encoding\EUCJP::lenByte + * @covers MensBeam\Intl\Encoding\EUCJP::stateSave + * @covers MensBeam\Intl\Encoding\EUCJP::stateApply + */ + public function testGetStringLength(string $input, array $points) { + return parent::testGetStringLength($input, $points); + } + + /** + * @covers MensBeam\Intl\Encoding\EUCJP::errDec + */ + public function testReplacementModes() { + return parent::testReplacementModes(); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\EUCJP::rewind + * @covers MensBeam\Intl\Encoding\EUCJP::chars + * @covers MensBeam\Intl\Encoding\EUCJP::codes + */ + public function testIterateThroughAString(string $input, array $exp) { + return parent::testIterateThroughAString($input, $exp); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\EUCJP::nextCode + */ + public function testIterateThroughAStringAllowingSurrogates(string $input, array $strictExp, array $relaxedExp = null) { + return parent::testIterateThroughAStringAllowingSurrogates($input, $strictExp, $relaxedExp); + } + + /** + * @covers MensBeam\Intl\Encoding\EUCJP::seekBack + */ + public function testSeekBackOverRandomData() { + return parent::testSeekBackOverRandomData(); + } + + /** + * @group optional + */ + public function testPedanticallyDecodeSingleCharactersAsCodePoint() { + $series = [ + 'characters' => [["5C","A1F8","A1AF","A1EB","A1DE","A1AD","A2F9","A1DF","A1E0","A6A1","A6A2","A6A3","A6A4","A6A5","A6A6","A6A7","A6A8","A6A9","A6AA","A6AB","A6AC","A6AD","A6AE","A6AF","A6B0","A6B1","A6B2","A6B3","A6B4","A6B5","A6B6","A6B7","A6B8","A6C1","A6C2","A6C3","A6C4","A6C5","A6C6","A6C7","A6C8","A6C9","A6CA","A6CB","A6CC","A6CD","A6CE","A6CF","A6D0","A6D1","A6D2","A6D3","A6D4","A6D5","A6D6","A6D7","A6D8","A7A7","A7A1","A7A2","A7A3","A7A4","A7A5","A7A6","A7A8","A7A9","A7AA","A7AB","A7AC","A7AD","A7AE","A7AF","A7B0","A7B1","A7B2","A7B3","A7B4","A7B5","A7B6","A7B7","A7B8","A7B9","A7BA","A7BB","A7BC","A7BD","A7BE","A7BF","A7C0","A7C1","A7D1","A7D2","A7D3","A7D4","A7D5","A7D6","A7D8","A7D9","A7DA","A7DB","A7DC","A7DD","A7DE","A7DF","A7E0","A7E1","A7E2","A7E3","A7E4","A7E5","A7E6","A7E7","A7E8","A7E9","A7EA","A7EB","A7EC","A7ED","A7EE","A7EF","A7F0","A7F1","A7D7","A1BE","A1BD","A1C6","A1C7","A1C8","A1C9","A2F7","A2F8","A1C5","A1C4","A2F3","A1EC","A1ED","A2A8","7E","A1EE","ADE2","ADE4","A2F2","ADB5","ADB6","ADB7","ADB8","ADB9","ADBA","ADBB","ADBC","ADBD","ADBE","FCF1","FCF2","FCF3","FCF4","FCF5","FCF6","FCF7","FCF8","FCF9","FCFA","A2AB","A2AC","A2AA","A2AD","A2CD","A2CE","A2CF","A2DF","A2D0","A2E0","A2BA","A2BB","ADF4","A1DD","A2E5","A2E7","A1E7","ADF8","A2DC","A1C2","A2CA","A2CB","A2C1","A2C0","A2E9","A2EA","ADF3","A1E8","A2E8","A2E6","A2E2","A1E2","A2E1","A1E5","A1E6","A2E3","A2E4","A2BE","A2BF","A2BC","A2BD","A2DD","ADF9","A2DE","ADA1","ADA2","ADA3","ADA4","ADA5","ADA6","ADA7","ADA8","ADA9","ADAA","ADAB","ADAC","ADAD","ADAE","ADAF","ADB0","ADB1","ADB2","ADB3","ADB4","A8A1","A8AC","A8A2","A8AD","A8A3","A8AE","A8A4","A8AF","A8A6","A8B1","A8A5","A8B0","A8A7","A8BC","A8B7","A8B2","A8A9","A8BE","A8B9","A8B4","A8A8","A8B8","A8BD","A8B3","A8AA","A8BA","A8BF","A8B5","A8AB","A8BB","A8C0","A8B6","A2A3","A2A2","A2A5","A2A4","A2A7","A2A6","A2A1","A1FE","A1FB","A1FD","A1FC","A2FE","A1FA","A1F9","A1EA","A1E9","A2F6","A2F5","A2F4","A1A1","A1A2","A1A3","A1B7","A1B9","A1BA","A1BB","A1D2","A1D3","A1D4","A1D5","A1D6","A1D7","A1D8","A1D9","A1DA","A1DB","A2A9","A2AE","A1CC","A1CD","ADE0","ADE1","A4A1","A4A2","A4A3","A4A4","A4A5","A4A6","A4A7","A4A8","A4A9","A4AA","A4AB","A4AC","A4AD","A4AE","A4AF","A4B0","A4B1","A4B2","A4B3","A4B4","A4B5","A4B6","A4B7","A4B8","A4B9","A4BA","A4BB","A4BC","A4BD","A4BE","A4BF","A4C0","A4C1","A4C2","A4C3","A4C4","A4C5","A4C6","A4C7","A4C8","A4C9","A4CA","A4CB","A4CC","A4CD","A4CE","A4CF","A4D0","A4D1","A4D2","A4D3","A4D4","A4D5","A4D6","A4D7","A4D8","A4D9","A4DA","A4DB","A4DC","A4DD","A4DE","A4DF","A4E0","A4E1","A4E2","A4E3","A4E4","A4E5","A4E6","A4E7","A4E8","A4E9","A4EA","A4EB","A4EC","A4ED","A4EE","A4EF","A4F0","A4F1","A4F2","A4F3","A1AB","A1AC","A1B5","A1B6","A5A1","A5A2","A5A3","A5A4","A5A5","A5A6","A5A7","A5A8","A5A9","A5AA","A5AB","A5AC","A5AD","A5AE","A5AF","A5B0","A5B1","A5B2","A5B3","A5B4","A5B5","A5B6","A5B7","A5B8","A5B9","A5BA","A5BB","A5BC","A5BD","A5BE","A5BF","A5C0","A5C1","A5C2","A5C3","A5C4","A5C5","A5C6","A5C7","A5C8","A5C9","A5CA","A5CB","A5CC","A5CD","A5CE","A5CF","A5D0","A5D1","A5D2","A5D3","A5D4","A5D5","A5D6","A5D7","A5D8","A5D9","A5DA","A5DB","A5DC","A5DD","A5DE","A5DF","A5E0","A5E1","A5E2","A5E3","A5E4","A5E5","A5E6","A5E7","A5E8","A5E9","A5EA","A5EB","A5EC","A5ED","A5EE","A5EF","A5F0","A5F1","A5F2","A5F3","A5F4","A5F5","A5F6","A1A6","A1BC","A1B3","A1B4","ADEA","ADEB","ADEC","ADE5","ADE6","ADE7","ADE8","ADE9","ADC6","ADCA","ADC1","ADC4","ADC2","ADCC","ADCB","ADC5","ADCD","ADC7","ADCF","ADC0","ADCE","ADC3","ADC8","ADC9","ADDF","ADEF","ADEE","ADED","ADD3","ADD4","ADD0","ADD1","ADD2","ADD6","ADD5","ADE3","B0EC","C3FA","BCB7","CBFC","BEE6","BBB0","BEE5","B2BC","C9D4","CDBF","D0A2","B1AF","B3EE","D0A3","C0A4","D2C2","B5D6","CABA","BEE7","CEBE","CAC2","F9AD","D0A4","C3E6","D0A5","B6FA","D0A6","B4DD","C3B0","BCE7","D0A7","D0A8","D0A9","C7B5","B5D7","C7B7","C6E3","B8C3","CBB3","E9C9","D0AA","BEE8","D0AB","B2B5","B6E5","B8F0","CCE9","D6A6","CDF0","C6FD","B4A5","B5B5","D0AC","D0AD","CEBB","CDBD","C1E8","D0AF","BBF6","C6F3","D0B2","B1BE","B8DF","B8DE","B0E6","CFCB","CFCA","BAB3","B0A1","D0B3","D0B4","D0B5","CBB4","D0B6","B8F2","B0E7","CBF2","B5FC","B5FD","B5FE","C4E2","CEBC","D0B7","D0B8","D0B9","BFCD","BDBA","BFCE","D0BE","D0BC","D0BD","B5D8","BAA3","B2F0","D0BB","D0BA","CAA9","BBC6","BBC5","C2BE","D0BF","C9D5","C0E7","A1B8","D0C0","D0C2","F9AE","C2E5","CEE1","B0CA","D0C1","B2BE","B6C4","C3E7","B7EF","D0C3","C7A4","F9AF","F9B0","B4EB","F9B1","D0C4","B0CB","B8E0","B4EC","C9FA","C8B2","B5D9","B2F1","D0E7","C5C1","C7EC","D0C6","C8BC","CEE2","BFAD","F9B2","BBC7","BBF7","B2C0","C4D1","C3A2","D0CA","B0CC","C4E3","BDBB","BAB4","CDA4","C2CE","B2BF","F9B3","D0C9","CDBE","D0C5","D0C7","BAEE","D0C8","D5A4","D0D0","D0D3","D0D1","B2C2","CABB","D0CB","D0CF","B8F3","BBC8","B4A6","D0D4","D0CC","F9B5","CEE3","BBF8","D0CD","D0D2","F9B4","F9B7","D0D5","D0CE","F9B6","B6A1","B0CD","B6A2","B2C1","D5A5","CBF9","C9EE","B8F4","BFAF","CEB7","CAD8","B7B8","C2A5","B2E4","F9A6","BDD3","F9B8","D0D9","D0DE","D0DC","D0D7","C2AF","D0DA","D0DD","D0DB","CADD","D0D8","BFAE","CBF3","D0DF","D0E0","BDA4","D0ED","C7D0","C9B6","D0E8","CAF0","B2B6","D0EC","F9BB","D0E6","D0EF","C1D2","B8C4","C7DC","E0C7","D0EE","C5DD","D0E3","B8F6","B8F5","D0E1","F9BC","BCDA","D0E9","F9BA","CAEF","C3CD","D0E5","B7F1","D0E2","D0EA","D0E4","CED1","D0EB","CFC1","B6E6","B7F0","F9B9","F9BF","D0F0","F9BD","D0F1","D0F5","B0CE","CAD0","D0F4","D0F3","D0F7","D0F6","C4E4","B7F2","D0F8","F9BE","BCC5","C2A6","C4E5","B6F6","D0F9","B5B6","D0FA","D0FC","CBB5","B7E6","F9C0","BBB1","C8F7","D0FB","BAC5","CDC3","D0FE","D1A3","D0FD","BAC4","BDFD","B7B9","D1A4","B6CF","D1A1","D1A2","C6AF","C1FC","B6A3","CBCD","D1A5","F9C2","CEBD","D1A6","D1A9","D1A7","C1CE","D1A8","D1AA","F9C1","D1AC","D1AB","CAC8","B5B7","D1AE","D1AF","B2AF","D1AD","BCF4","D1B2","D1B1","D1B0","D0D6","D1B3","BDFE","D1B4","CDA5","CCD9","D1B6","D1B5","D1B8","D1B7","D1B9","D1BA","B0F4","B8B5","B7BB","BDBC","C3FB","B6A4","C0E8","B8F7","F9C3","B9EE","D1BC","CCC8","C5C6","BBF9","D1BB","D1BD","C5DE","B3F5","D1BE","F9C4","C6FE","C1B4","D1C0","D1C1","C8AC","B8F8","CFBB","D1C2","B6A6","CABC","C2B6","B6F1","C5B5","B7F3","D1C3","D1C4","C6E2","B1DF","D1C7","BAFD","D1C6","BAC6","D1C8","E6EE","D1C9","CBC1","D1CA","D1CB","D1CC","BEE9","BCCC","F9C5","B4A7","D1CF","D1CD","CCBD","D1CE","C9DA","D1D0","D1D1","D1D2","C5DF","D1D6","D1D4","D1D5","D1D3","BAE3","D1D7","CCEA","CEE4","D1D8","F9C6","C0A8","D1D9","BDDA","D1DA","C3FC","CEBF","C5E0","D2C5","D1DB","F4A5","B6C5","D1DC","CBDE","BDE8","C2FC","D1DE","C6E4","F9C7","D1DF","D1E0","B3AE","D1E1","B6A7","C6CC","B1FA","BDD0","C8A1","D1E2","C5E1","BFCF","D1E3","CAAC","C0DA","B4A2","B4A9","D1E4","D1E6","B7BA","D1E5","F9C8","CEF3","BDE9","C8BD","CACC","D1E7","CDF8","D1E8","D1E9","C5FE","D1EA","C0A9","BAFE","B7F4","D1EB","BBC9","B9EF","C4E6","D1ED","C2A7","BAEF","D1EE","D1EF","C1B0","D1EC","D1F1","CBB6","B9E4","D1F0","B7F5","BADE","C7ED","D1F4","D1F2","C9FB","BEEA","D1FB","B3E4","D1F5","D1F3","C1CF","D1F7","D1F6","B3C4","B7E0","D1FC","CEAD","D1F8","D1FD","D1FA","D1F9","CECF","F9C9","B8F9","B2C3","CEF4","F9CA","BDF5","C5D8","B9E5","D2A2","D2A3","FBBC","CEE5","CFAB","D2A5","B8FA","D2A4","B3AF","F9CB","D2A6","CBD6","C4BC","CDA6","CAD9","D2A7","F0D5","C6B0","D2A8","B4AA","CCB3","F9CC","BEA1","D2A9","CAE7","D2AD","C0AA","D2AA","B6D0","D2AB","B4AB","B7AE","D2AE","D2AF","D2B0","D2B1","BCDB","B8FB","CCDE","F9CD","CCE8","C6F7","CAF1","D2B2","F9CE","D2B3","D2B5","D2B7","D2B6","D2B8","B2BD","CBCC","BAFC","D2B9","C1D9","BEA2","B6A9","D2BA","F9CF","C8DB","D2BB","D2BC","D2BD","D2BE","C9A4","B6E8","B0E5","C6BF","D2BF","BDBD","C0E9","D2C1","D2C0","BEA3","B8E1","D2C3","C8BE","D2C4","C8DC","C2B4","C2EE","B6A8","C6EE","C3B1","C7EE","CBCE","D2C6","C0EA","B7B5","D2C7","D2C8","B1AC","B0F5","B4ED","F9D0","C2A8","B5D1","CDF1","D2CB","B2B7","D2CA","B6AA","D2CC","CCF1","F9D1","D2CD","CED2","B8FC","B8B6","D2CE","D2D0","D2CF","BFDF","B1B9","B1DE","D2D1","D2D2","F9D2","B8B7","D2D3","B5EE","BBB2","D2D4","CBF4","BAB5","B5DA","CDA7","C1D0","C8BF","BCFD","BDC7","BCE8","BCF5","BDF6","C8C0","F9D3","D2D7","B1C3","C1D1","B8FD","B8C5","B6E7","D2DB","C3A1","C2FE","B6AB","BEA4","D2DC","D2DA","B2C4","C2E6","BCB8","BBCB","B1A6","B3F0","B9E6","BBCA","D2DD","D2DE","B5C9","B3C6","B9E7","B5C8","C4DF","B1A5","C6B1","CCBE","B9A1","CDF9","C5C7","B8FE","B7AF","D2E7","B6E3","CBCA","C8DD","D2E6","B4DE","D2E1","D2E2","D2E4","D2E5","B5DB","BFE1","CAAD","D2E3","D2DF","B8E3","D2E0","CFA4","CAF2","C4E8","B8E2","B9F0","D2E8","C6DD","D2EC","BCFE","BCF6","D2EF","D2ED","CCA3","D2EA","D2F3","D2EE","D2F1","B8C6","CCBF","D2F2","D2F4","D2F6","F9D6","BAF0","CFC2","D2EB","D2E9","D2F5","D2F0","F9D5","D2F8","D3A3","D2FA","D2FE","F9D7","D3A1","D2FB","D3BE","BAE9","B3B1","D2F9","D3A5","B0F6","D3A4","B0A5","C9CA","D3A2","D2FC","D2F7","D2FD","BAC8","D3A6","B0F7","D3AF","D3A7","D3A8","BEA5","CBE9","D3AD","D3AC","C5AF","D3AE","D3AB","F9D8","B1B4","BAB6","BFB0","D3A9","C5E2","D3AA","B0A2","D3B4","CDA3","BEA7","D3BA","D3B9","D3B0","C2C3","D3B1","C2EF","D3B6","BEA6","D3B3","CCE4","B7BC","D3B7","D3B8","D3B5","D3BB","D3B2","D3C1","D3C6","D3C2","D3BD","D3C7","C1B1","F9D9","D3C9","B9A2","D3BF","C3FD","D3C3","D3BC","B4AD","B4EE","B3E5","D3C4","D3C0","B7F6","D3CA","D3C8","C1D3","B5CA","B6AC","D3C5","B6F4","B1C4","D3CE","D3CC","D4A7","D3D1","D3CB","D3CF","D3CD","BBCC","D3D0","D3D3","D3D8","D3D6","D3D5","C3B2","B2C5","D3D2","D3D4","BEA8","B1B3","D3D7","B2DE","D3E2","BEFC","D3DE","D3DC","D3DD","D3DF","B1BD","C1B9","D3D9","D3DA","B3FA","D3E1","B4EF","D3E4","D3E0","D3E3","CAAE","C6D5","C8B8","D3E6","D3E5","B3C5","D3E7","D3EA","D3E9","D3E8","C7B9","D3EB","D3EC","D3EE","D3ED","D3F0","D3F3","D3F1","D3EF","D3F2","D3F4","D3F5","D3F6","D3F7","D3F8","D1C5","BCFC","BBCD","B2F3","B0F8","C3C4","D3F9","BAA4","B0CF","BFDE","D3FA","B8C7","B9F1","D3FC","D3FB","CAE0","D3FD","D4A1","D3FE","D4A2","D4A3","B7F7","B1E0","D4A4","D4A6","D4A5","D4A8","C5DA","D4A9","B0B5","BADF","B7BD","C3CF","D4AA","D4AB","D4AD","D4AE","BAE4","B6D1","CBB7","D4AC","D4AF","BAC1","B9A3","F9DA","D4B3","BAA5","F9DB","C3B3","D4B0","C4DA","D4B4","BFE2","D4B2","D4B5","B7BF","D4B6","D4B7","B9A4","B3C0","D4B9","D4BA","F9DC","D4BB","D4B8","D4B1","D4BC","D4BD","F9DE","F9DD","CBE4","BEEB","D4BF","D4C0","D4BE","D4C2","C7B8","B0E8","C9D6","D4C3","BEFD","BCB9","C7DD","B4F0","BAEB","CBD9","C6B2","B7F8","C2CF","D4C1","D4C4","C2C4","D4C5","D4C6","D4C8","C4E9","B4AE","F4A1","B1E1","CAF3","BEEC","C5C8","BAE6","D4CE","CABD","CEDD","B2F4","D4CA","C1BA","D4CD","C5E3","C5C9","C5E4","C8B9","C4CD","BAC9","D4C9","B1F6","C5B6","D4CB","D4C7","BFD0","D4CF","BDCE","B6AD","D4D0","CAE8","C1FD","C4C6","F9E1","D4D2","CBCF","D4D3","D4D8","F9E2","CAAF","D4D7","D4D1","D4D4","D4D6","BAA6","CAC9","D4D9","C3C5","B2F5","BEED","D4DB","D4DA","B9E8","D4DC","D4DE","D4DD","D4E0","D4D5","D4E2","D4E1","D4DF","BBCE","BFD1","C1D4","D4E3","C0BC","B0ED","C7E4","C4DB","D4E5","D4E4","D4E6","D4E7","D4E8","D4E9","CAD1","D4EA","F9E3","B2C6","D4EB","CDBC","B3B0","D2C9","BDC8","C2BF","D4EC","CCEB","CCB4","D4EE","C2E7","C5B7","C2C0","C9D7","D4EF","D4F0","B1FB","BCBA","D4F1","B0D0","D4F2","D4F3","B1E2","B4F1","C6E0","CAF4","D4F7","C1D5","D4F6","B7C0","F9E4","CBDB","D4F5","C5E5","D4F9","D4F8","F9E5","F9E6","D4FB","D4FA","F9E7","B1FC","D4FC","BEA9","D4FE","C3A5","D4FD","CAB3","BDF7","C5DB","D5A1","B9A5","D5A2","C7A1","C8DE","CCD1","C7A5","D5AB","B5B8","CDC5","CCAF","D6AC","D5A3","D5A6","F9E8","C2C5","CBB8","C5CA","D5A7","CBE5","F9E9","BACA","BEAA","D5A8","BBD0","BBCF","B0B9","B8C8","C0AB","B0D1","D5AC","D5AD","D5AA","B1B8","B4AF","D5A9","CCC5","C9B1","B0A8","B0F9","BBD1","B0D2","B0A3","D5B2","D5B0","CCBC","D5B3","D5B1","D5AF","BFB1","D5AE","CADA","B8E4","D5B7","D5B8","BEAB","D5B4","CFAC","C7CC","D5B6","BAA7","D5B9","C9D8","D5BA","D5B5","CCBB","C7DE","D5BB","C9B2","D5BC","D5C0","D5BD","B2C7","D5BF","BCBB","D5BE","B7F9","D5CC","D5C5","D5C2","C3E4","D5C1","D5C3","D5C4","D5C6","D5C7","B4F2","D5C9","D5C8","D5CA","BEEE","D5CD","C4DC","B1C5","D5CB","D5CE","D5CF","D5D2","D5D0","D5D1","BBD2","D5D3","B9A6","D5D4","F9EA","BBFA","C2B8","D5D5","D5D6","BBDA","B9A7","CCD2","B5A8","B8C9","D5D7","B3D8","D5D8","C2B9","D5D9","D6A3","D5DA","D5DB","D5DC","D5DE","D5DF","D5E0","C2F0","B1A7","BCE9","B0C2","C1D7","B4B0","BCB5","B9A8","C5E6","BDA1","B4B1","C3E8","C4EA","B0B8","B5B9","CAF5","BCC2","B5D2","C0EB","BCBC","CDA8","D5E1","B5DC","BACB","B3B2","B1E3","BEAC","B2C8","D5E2","CDC6","BDC9","F9EB","BCE4","D5E3","B4F3","C6D2","CCA9","D5E4","D5E5","C9D9","D5E7","B4A8","B6F7","D5E6","F9ED","B4B2","BFB2","D5EB","BBA1","B2C9","D5EA","D5E8","D5EC","D5E9","C7AB","DCCD","BFB3","D5ED","F9EE","CEC0","D5EE","D5F0","C3FE","D5EF","C0A3","BBFB","C2D0","BCF7","C9F5","C0EC","BCCD","D5F1","BEAD","D5F2","D5F3","B0D3","C2BA","BFD2","D5F4","C6B3","BEAE","BEAF","D5F5","C0ED","BEB0","F9EF","D5F6","D5F7","CCE0","D5F8","B6C6","BDA2","D5F9","D5FA","BCDC","BFAC","C6F4","BFD4","C8F8","C7A2","B6C9","D5FB","B5EF","D5FC","B6FE","C6CF","B2B0","BBD3","D5FD","D6A2","D6A1","B6FD","D5FE","C5B8","C2B0","C5CB","BCC8","C1D8","CDFA","D6A4","D6A5","C6D6","BBB3","D6A7","D6A8","D6A9","B4F4","D6AA","D6AB","B2AC","F9F0","C1BB","B4E4","D6AD","CCA8","C2D2","B3D9","D6AF","D6B1","B4DF","F9F1","D6AE","D6B0","D6B3","D6B2","D6B4","D6B5","C6BD","B6AE","B2E5","D6B6","D6BB","D6B9","CAF7","CAF6","F9F2","C5E7","D6B8","BDD4","D6B7","BFF2","D6BC","BAEA","D6C2","D6C3","D6BD","B3B3","D6BE","D6C7","D6C6","D6C5","D6C1","D6C0","D6C4","F9F3","CAF8","F9F6","D6CB","D6C8","D6CA","CDF2","D6C9","F9F4","D6BF","BFF3","D6CC","F9F7","BAB7","D6CD","D6CE","D6D1","D6D0","D6CF","C5E8","D6BA","D6D7","D6D3","D6D2","D6D4","D6D5","D6D8","F9F8","F9F9","CEE6","D6D9","D6D6","D6DA","B4E0","D6DB","F9FA","D6DD","D6DC","D6DE","D6DF","C0EE","BDA3","BDE4","C1E3","B9A9","BAB8","B9AA","B5F0","D6E0","BAB9","B8CA","D6E1","CCA6","C7C3","D6E2","B9AB","B4AC","C3A7","B6D2","BBD4","C9DB","C8C1","D6E3","B4F5","D6E6","C4A1","D6E5","D6E4","D6E7","C4EB","BFE3","BBD5","C0CA","C2D3","B5A2","C4A2","D6E8","D6E9","BEEF","CBB9","D6EC","D6EB","D6EA","C9FD","D6F3","CBDA","D6ED","D6EF","CBEB","D6EE","D6F0","C8A8","D6F1","CABE","D6F2","B4B3","CABF","C7AF","D6F4","D6F5","B9AC","B4B4","D6F6","B8B8","CDC4","CDA9","B4F6","D6F8","C4A3","B9AD","BEB1","C8DF","BEB2","BDF8","C4EC","CAF9","C5B9","B9AE","C9DC","D6F9","C5D9","BAC2","B8CB","C4ED","B0C3","BDEE","B9AF","CDC7","D6FA","D6FB","C7D1","D6FC","CEF7","CFAD","D6FE","D6FD","B3C7","D7A1","D7A4","D7A5","D7A3","C9C0","BEB3","D7A7","D7A6","D7A2","D7A8","D7A9","D7AA","D7AD","D7AB","D7AC","D7AE","B1E4","C4EE","D7AF","B7FA","B2F6","C7B6","D7B0","C6FB","CADB","D7B1","CFAE","D7B2","CAC0","D7B5","D0A1","D0B1","BCB0","C6F5","D7B6","B5DD","C4A4","B0FA","D7B7","CAA6","B9B0","C3D0","C4EF","F9FB","CCEF","B8B9","B8CC","D7B8","D7B9","D7BF","BCE5","F9FC","C4A5","B6AF","D7BA","C9AB","C3C6","D7BB","F9AC","D7BC","B6B0","D7BD","D7BE","D7C0","C5F6","D7C1","D7C2","D7C3","D7B4","D7B3","D7C4","B7C1","C9A7","F9FD","BACC","C9B7","C4A6","C9CB","D7C5","BEB4","B1C6","D7C6","D7C7","CCF2","C8E0","D7CA","B1FD","C0AC","D7C9","D7C8","B7C2","C2D4","D7CE","D7CC","D7CB","CEA7","B8E5","BDF9","D7CD","C5CC","BDBE","C6C0","D7D1","D7D0","D7CF","D7D2","B8E6","D7D3","C9FC","BDDB","D7D4","C8F9","C6C1","C4A7","F9FE","C5B0","D7D5","B5AB","BFB4","C9AC","B4F7","C7A6","D7D6","BBD6","CBBA","CBBB","B1FE","D7DB","FAA1","C3E9","D7D8","B2F7","D8AD","D7DA","C7B0","D7D9","D7D7","B9FA","D7DD","D7E3","D7E9","D7E1","C5DC","D7E6","C9DD","D7E0","D7E5","CEE7","BBD7","C2D5","D7DE","B5DE","D7E8","C0AD","B1E5","D7E2","B2F8","D7E7","B6B1","D7E4","D7EA","D7EC","D7F6","D7F4","D7F1","D7F0","CEF8","D7F2","B6B2","B9B1","BDFA","D7F9","D7EB","FAA2","D7EF","D7DF","B2FA","D7F3","D7F5","C3D1","BAA8","B2B8","D7ED","D7F8","D7F7","B6B3","C2A9","B3E6","B7C3","D7EE","D7FA","D7FD","D8A1","FAA3","BCBD","FAA4","D8A7","C4F0","D7FB","D8A5","B2F9","D8A3","D8A4","D7FE","D8A2","B8E7","CDAA","B4B5","B1D9","D8A6","C7BA","B0AD","C8E1","D7DC","D8AC","D8B0","CCE5","D8A9","C5E9","D8AE","BEF0","D8AF","C6D7","CFC7","D8AB","FAA6","D8B1","B9FB","C0CB","FAA5","B0D4","D8AA","D8A8","C1DA","D7FC","BBB4","C2C6","D8BD","FAA8","C1DB","D8B8","D8B5","D8B6","BCE6","D8B9","D8BC","D8B7","BDA5","D8BA","D8B4","CCFC","CCFB","D8BE","D8BF","B0D5","FAA9","D8B3","B6F2","B0A6","B4B6","FAA7","D8BB","D8C3","D8C2","D8C7","FAAB","D8C8","FAAA","D8C6","D8C9","D8C1","D8C5","D8CA","D8CB","D8C0","BBFC","D8C4","C2D6","B9B2","D8B2","BFB5","D8D8","CAE9","D8CE","D8CF","D8D0","D8D7","D8D6","CBFD","B4B7","D8D4","B7C5","B3B4","D8D1","CEB8","D8D3","B0D6","D8D5","D8CC","D8D2","D8D9","B7C4","D8CD","CDDD","CDAB","D8DC","D8E0","C1FE","CEF9","D8E1","D8DE","D8DB","FAAC","D8DA","D8DF","CAB0","C6B4","B7C6","D8E2","D8DD","D8E3","B7FB","B2B1","D8EB","B4B8","D8E9","D8EA","BAA9","D8E8","D8E6","D8E5","D8EC","D8E4","D8EE","B2FB","D8F0","D8EF","C4A8","D8F3","D8F1","D8E7","B7FC","D8F2","D8F6","D8F5","D8F7","D8F4","D8F8","D8F9","D8FA","CAEA","D8FC","D8FB","BDBF","C0AE","B2E6","B2FC","FAAD","D8FD","B0BF","C0CC","D8FE","ECC3","D9A1","B7E1","D9A2","C0EF","D9A3","D9A4","B5BA","D9A5","D9A6","D9A7","C2D7","B8CD","CCE1","CBBC","BDEA","D9A8","C0F0","EEBD","C8E2","BCEA","BACD","D9A9","C2C7","CAA7","C2F1","D9AC","D9AA","D9AD","D9AB","D9AE","CAB1","B0B7","C9DE","C8E3","D9AF","D9B2","BEB5","B5BB","D9B0","D9B7","BEB6","D9B1","C7C4","CDDE","D9B3","D9B4","D9B8","C5EA","D9B5","B9B3","C0DE","D9C6","C8B4","C2F2","FAAE","C8E4","DAAD","CAFA","C4F1","CBF5","D9BB","B2A1","C3EA","D9C4","C3B4","D9BE","D9C5","D9C0","D9C7","D9C3","D9C2","C7EF","D9BC","B2FD","D9BA","B5F1","C2F3","D9B6","D9B9","B9B4","C0DB","BEB7","D9C1","C7D2","B5F2","B3C8","B3E7","BFA1","D9C9","D9CE","D9CA","B7FD","D9CF","BBA2","B9E9","BDA6","D9BD","BBFD","D9CC","BBD8","D9CD","B0C4","D9C8","C4A9","B5F3","B6B4","D9CB","B0A7","BAC3","BFB6","C4F2","C8D4","D9D1","C1DE","C2AA","BBAB","D9D2","D9D4","D9D0","CAE1","C4BD","C1DC","CAFB","BCCE","D9E0","D9DF","BFF8","B7FE","D9D9","BEB9","C6E8","C7B1","D9D7","C1DD","BCF8","D9DC","BEB8","D9D6","D9DB","C7D3","D9D5","B7A1","B3DD","D9DD","CEAB","BACE","C3B5","D9DA","C0DC","B9B5","BFE4","B1E6","C1BC","D9D8","B5C5","B7C7","C4CF","D9DE","C1DF","D9E1","D9E3","C2B7","D9E9","D9E4","D9E6","C9C1","C4F3","D9E7","CDAC","CDC8","B4B9","B0AE","D9E5","D9E2","B4F8","B1E7","FAAF","D9E8","CDC9","D9EC","C2BB","D9F3","D9ED","D9EA","D9F1","D9D3","D9EE","D9F2","C8C2","C5EB","D9EB","D9EF","B7C8","BAF1","C0DD","D9F7","C5A6","FAB0","D9F4","CBE0","D9F5","D9F6","CCCE","C0A2","B7E2","D9FD","BBB5","D9FA","D9F9","C7B2","FAB1","C6B5","C5B1","D9FB","D9FC","C9EF","C7C5","BBA3","C0F1","CBD0","B3C9","DAA5","D9FE","CDCA","DAA7","DAA3","DAA4","C1E0","FAB2","DAA2","D9BF","DAA6","DAA1","DAAB","DAAC","C5A7","DAAE","BBA4","DAA9","B5BC","DAAF","DAA8","DAB3","DAB2","DAB1","DAB4","DAB6","BEF1","DAB5","DAB9","DAB7","DAB8","D9F0","DABB","DABA","D9F8","DABC","DAB0","BBD9","DABD","DABE","DAC0","DABF","DAC1","B2FE","B9B6","CAFC","C0AF","B8CE","DAC3","DAC6","FAB3","C9D2","B5DF","DAC5","DAC4","C7D4","DAC7","B6B5","DAC9","DAC8","B4BA","BBB6","C6D8","B7C9","BFF4","DACA","C0B0","C5A8","C9DF","DACB","DACC","DACD","CAB8","D5DD","C0C6","C9CC","BAD8","C8E5","C8C3","C5CD","CEC1","DACF","BCD0","DAD0","B0B6","B6D4","C0CD","C9E0","DAD1","BBC2","C3C7","BBDB","BFB7","DAD2","CAFD","B1F7","BBDC","DAD5","DAD3","DAD6","CEB9","DAD4","C0FB","DAD7","C2B2","DAD8","B4FA","DADA","DAD9","DADB","DADC","B4FB","C6FC","C3B6","B5EC","BBDD","C1E1","BDDC","B0B0","DADD","B2A2","DAE1","FAB4","B9B7","DAE0","BAAB","BEBA","FAB7","DADF","BEBB","CCC0","BAAA","B0D7","C0CE","FAB5","DAE6","FAB9","C0B1","B1C7","FABA","BDD5","CBE6","BAF2","BEBC","FAB8","C0A7","F9A8","DAE5","DAE3","DAE4","FAB6","C3EB","DBA6","DAEA","BBFE","B9B8","DAE8","DAE9","BFB8","DAE7","BBAF","FABC","FABD","DAEC","DAEB","DAF0","DAF1","DAED","FABB","B3A2","DAEE","DAEF","C8D5","C9E1","B7CA","DAF2","FABF","C0B2","BEBD","C3D2","B6C7","DAF3","DAF7","B2CB","DAF4","DAF6","DAF5","BDEB","C3C8","B0C5","DAF8","FAC0","DAF9","FAC1","C4AA","CEF1","BBC3","CAEB","FAC2","CBBD","DBA2","DAFB","DAFE","DAFD","FAC3","DAFA","DBA1","C6DE","DAFC","DBA3","BDEC","DBA4","CDCB","C7F8","DBA5","DBA7","DBA8","DBA9","B6CA","B1C8","B9B9","DBAA","DBAB","BDF1","C1E2","FAC4","F9AB","D2D8","C1BE","C1BD","C2D8","BAC7","D0F2","B7EE","CDAD","CAFE","C9FE","FAC5","DBAC","BAF3","C4BF","DBAD","CFAF","CBBE","C4AB","DBAE","B4FC","DBAF","DBB0","CCDA","CCA4","CBF6","CBDC","BBA5","DBB2","BCEB","CBD1","DBB4","DBB7","DBB6","B4F9","B5E0","DBB3","DBB5","DBB8","BFF9","CDFB","B0C9","BAE0","C2BC","BCDD","BEF3","DBBB","C5CE","DBB9","C2AB","DBBA","BEF2","CCDD","DBBC","DBBD","CDE8","FAC7","DBC2","B9BA","C7D5","DBBF","C5EC","DADE","DAE2","B5CF","C7C7","DBC1","BEBE","C8C4","DBC7","C8FA","DBBE","DBC4","DBC3","C0CF","CBED","CED3","CBE7","B2CC","BBDE","CFC8","DBC6","BFF5","DBC5","DBC0","B8CF","DBCC","DBCA","B2CD","DBC8","DBCE","DBD4","FAC8","FACA","C2C8","CAC1","DBD6","C9A2","DBD5","C7F0","CBBF","B4BB","C0F7","BDC0","C4D3","CDAE","DBD1","DBD0","DBD2","DBCF","DBD7","DBCD","DBCB","DBD3","DBC9","C3EC","CCF8","BCC6","BAF4","BABA","CBEF","B3C1","FACB","C4CE","C6CA","B1C9","C0F2","C0B4","B7AA","DBD9","B9BB","B3FC","DBDB","B3F4","DBE1","DBDE","C0F3","B3CB","BAAC","B3CA","BACF","DBDC","B7E5","B7CB","C5ED","FACC","DBDA","B0C6","DBDD","DBDF","B6CD","B7AC","FAC9","B4BC","B5CB","DBE2","BAF9","CBF1","BBB7","DBE3","C9B0","DBEF","B2B3","DBE4","DBF5","DBE5","CEC2","DBEC","C7DF","DBF4","DBE7","B0B4","DBE9","B9BC","DBEB","DBEA","DBE6","DBF1","BEBF","D4ED","B8E8","CDFC","DBE8","C4F4","B3A3","BAAD","DBE0","DBF0","B3E1","DBEE","DBF2","C5EE","B4FE","DCB2","F9A9","CCC9","DBF7","B4FD","DBFE","FACD","CBC0","DCA1","DCA3","DCA7","DBF9","C3AA","C5EF","DCAB","DBFC","DCA8","DCA2","BFB9","DCAC","C0B3","DCAA","B4BD","CFD0","DBF6","DCA6","B0D8","DBF8","CCBA","DBFD","BFA2","C4C7","DBF3","DCA5","BFFA","DCAF","B3F1","B8A1","DCB1","DBFA","DCB0","DCA9","DBFB","DCAD","DCAE","DCBF","C6CE","DCA4","DCBB","DCBD","C4D8","CDCC","C9F6","DCB8","C2CA","DCBE","C1BF","DCB5","DCC2","DCC1","C6EF","DCC0","C6EA","FACF","DCC4","DCB7","B6C8","DCBA","BDDD","C7E0","DCBC","B6CB","DCB4","DCB6","DCB3","CFB0","B3DA","DCB9","DCC3","B3B5","BAE7","B1DD","DCD4","CFB1","DCD7","FAD1","BFBA","DCD6","DCD5","DCD2","DCC6","DCE3","DCC5","DCD8","DCD0","DCCB","DCC8","DCC9","DCD1","F4A2","DCCE","B9BD","C4C8","C1E4","DCCC","DCC7","DCCA","CDCD","CBEA","DCCF","DCD9","FAD2","DCE1","DCDA","DCE7","DCE5","DCE0","DCDF","C4D0","C1E5","DCDD","DCDB","DCE2","DCE8","C8F5","DCEE","DCE9","DCEC","DCE6","C3F4","C9B8","DCDC","DCE4","BEC0","CCCF","DCF8","DCEB","B8A2","B2A3","B3DF","DCD3","FAD3","BEC1","DCF0","DCF7","BCF9","B3F2","C3AE","DCED","FAD5","DCF2","DCF6","B6B6","B5CC","DCF4","B5A1","C6CB","DCF3","DCF5","FAD4","DCEF","FAD6","DCF1","FAD7","B3E0","C3C9","DCFC","DCFA","B8E9","DCF9","DDA1","DBD8","DCFB","DCFD","DCFE","DDAC","DDA8","DBED","DDA7","DDA6","DDA3","DCEA","DDA5","DDA4","DDAA","CFA6","DDAD","B6FB","DDA9","DDAB","FAD8","FAD9","C8A7","DDAE","DDB2","DDAF","CDF3","DDB0","DCDE","DDB3","DDB4","B1B5","DDB6","B7E7","BCA1","B6D5","B2A4","CDDF","DDB8","DDB7","DDBA","B5BD","B6D6","B4BE","DDBD","DDBC","DDBE","B2CE","C3B7","DDBF","B4BF","DDC1","DDC0","DDC2","DDC3","DDC4","BBDF","C0B5","BAA1","C9F0","CAE2","CFC4","BBF5","BAD0","CEF2","DDC5","DDC6","BBE0","DDC7","DDC8","DDCA","DDC9","CBD8","BDDE","BCEC","BBC4","DDCB","DDCD","BFA3","DDCC","DDCE","DDCF","DDD0","DDD1","DDD2","DDD4","DDD3","DDD5","B2A5","C3CA","DDD6","BBA6","B3CC","DDD7","C5C2","D4CC","B5A3","DDD8","DDD9","CAEC","CBE8","C6C7","DDDA","C8E6","FADA","C8FB","CCD3","DDDB","DDDD","DDDC","DDDF","DDDE","DDE1","BBE1","CCB1","DDE2","DDE3","B5A4","DDE4","DDE6","DDE5","BFE5","C9B9","B1CA","C8C5","FADB","C4F5","BDC1","B5E1","C8C6","BCAE","DDE8","B4C0","B1F8","FADC","C6F2","DDE7","B9BE","C3D3","DDE9","DDF1","DDEA","FADE","C2C1","B5E2","DDF2","B7E8","B5A5","DDF0","DDEE","DDEB","CDE0","FADD","C4C0","C6D9","DDEC","DDF4","DDF3","B7A3","B2AD","BABB","DDED","DDEF","CBD7","C2F4","CBF7","DDFC","DDFD","B2CF","CAA8","CCFD","DEA1","BCA3","BEC2","DDF8","DDFE","B1E8","B6B7","DDF5","DDFA","C0F4","C7F1","C8E7","DDF7","CBA1","DDF9","DEA4","FADF","DEA2","DDFB","CBA2","C7C8","B5E3","C5A5","C3ED","DEA5","DEA3","C2D9","DDF6","B1CB","FAE0","CDCE","DEB0","DEAF","C0F6","DEAC","CDEC","C6B6","DEA6","C4C5","B1CC","B9BF","DEA9","BDA7","DEAE","DEAD","DEA8","DEAB","B3E8","DEAA","C7C9","CEAE","BEF4","C0F5","DEB6","DEB4","C9CD","DEB1","DEB3","B1BA","B9C0","CFB2","B3BD","C9E2","FAE2","CDE1","B3A4","BFBB","DEB5","DEBA","FAE1","BEC3","CDB0","DEB7","DEB2","DEB8","FAE3","CEDE","C5F3","C6C2","FAE4","B3B6","B1D5","DEBE","DEC1","CEC3","CDE4","DEC8","DEC2","DEBF","CED4","DEC5","FAE5","BDCA","DEC7","DECC","C5F1","DECA","DEC4","C3B8","DECB","DEC0","DEC6","DECD","B0FC","DEC3","DECE","BFBC","FAE7","BDDF","CAA5","BAAE","FAE6","DEBB","DEC9","C5BA","FAE8","C0B6","B3E9","BAD1","BEC4","DEBD","BDC2","B7CC","DEBC","DED2","BDED","B8BA","DEE1","DEDB","B5F4","C5CF","DED6","DEDF","B0AF","B1B2","FAEB","B2B9","DED8","C2AC","DECF","DED1","B9C1","DEE2","FAE9","DEDD","FAEC","DED5","DEDC","CCAB","DEDA","DEDE","B8D0","BEC5","C3B9","FAEA","DED4","CDAF","DED7","DED0","C5F2","DED3","DED9","CFD1","BCBE","CBFE","DEE3","C8AE","DEEF","B8BB","BDE0","DEE5","CEAF","B9C2","DEF2","B0EE","DEF0","DEE4","DEEA","DEEC","CDCF","DEE7","C5AE","DEE9","FAED","DEF1","DEEB","CCC7","DEE6","BCA2","DEFE","B3EA","DEE8","DEED","DEEE","C2EC","C2DA","DEF6","DEFC","DEFA","C5A9","DFA3","DEF7","DEF8","DEE0","B5F9","C9BA","BCBF","B9F7","CFB3","DEF4","DFA2","B1E9","C1E6","C7F9","B4C1","CEFA","CCA1","C4D2","DEFB","DEFD","C1B2","DFA1","DEF9","DEF3","B4C3","B7E9","DFAF","DFAA","C0F8","B3E3","BDE1","DFB3","DFAC","C4AC","DFA9","C4D9","DFCC","DFA6","DFA5","DFAE","DFA8","DFA7","DFAD","C0A1","DFA4","FAEE","DFB0","DFB1","B4C2","DFB6","DFB5","DFB7","DFBA","C5C3","DFB4","FAEF","DFB8","B7E3","C2F9","DFB2","C7BB","DFB9","DFBE","DFBC","DFBF","DFC2","DFBB","B9EA","C7A8","DEB9","CDF4","DFBD","DFC1","C2F5","DFC0","DFAB","FAF0","EFE9","DFC5","DFC9","DFC7","FAF1","FAF2","DFC3","DFC4","DFC8","DFC6","C9CE","DFCE","DFCB","DFCA","DFCD","C6D4","DFCF","C3F5","C2ED","FAF3","C0A5","DFD0","DFD2","DFD1","DEF5","DFD3","C6E7","DFD4","B2D0","C5F4","B3A5","B5E4","BCDE","BAD2","FAF4","CFA7","BFE6","B1EA","DFD6","DFD5","FAF5","DFD9","C3BA","DFDC","DFD7","DFDB","DFDA","C5C0","B0D9","F9A7","CEF5","DFDE","B1A8","DFE0","DFDF","DFDD","DFD8","CBA3","DFE2","FAF7","DFE1","FAF6","B1EB","DFE4","CAB2","DFE3","CCB5","BEC7","C1B3","BEC6","FAF9","FAFA","CEFB","DFEA","C0F9","DFE6","DFEB","B1EC","FAF8","DFE9","C7E1","DFE5","DFE8","BEC8","C8D1","DFEC","BCD1","C0FA","DFEF","DFE7","B7A7","DFED","CDD0","DFF0","F4A6","BDCF","DFF1","DFF2","C7AE","DFF4","DFF5","FAFC","C7B3","C5F5","DFF7","DFF9","CED5","DFF6","DFF8","B1ED","DFF3","D3DB","DFFA","C1E7","BBB8","DFFC","DFFB","BFA4","D2D9","DFFD","E0A1","DFEE","DFFE","FAFD","E0A2","C7FA","E0A3","E0A4","E0A5","E0A6","C4DE","E0A8","E0A7","E0A9","E0AA","BCDF","C9E3","CCEC","E0AB","E0AC","C1D6","BCA4","E0AD","E0AE","E0AF","CAD2","C8C7","E0B0","C7D7","C4AD","E0B1","B2E7","B5ED","CCC6","CCB6","B2B4","CFB4","CBD2","CAAA","C0B7","E0B2","C6C3","B8A3","E0B3","BAD4","E0B5","E0B4","E0B6","E0B7","E0B8","B5BE","E0B9","E0BA","B8A4","C8C8","FAFE","E0BC","BEF5","E0BB","FBA1","B6B8","E0BD","E0BF","E0BE","E0C0","B8D1","E0C1","B6E9","C1C0","B9FD","E0C3","E0C4","E0C2","BCED","C6C8","B6B9","E0C6","C3AC","E0C5","CFB5","C7E2","E0C9","E0CB","E0C8","CCD4","E0CA","E0CC","CEC4","FBA2","E0D0","E0CF","C3F6","C7AD","B8A5","E0CE","E0CD","CDB1","CDB2","E0D1","B1EE","B9F6","BBE2","E0D2","E0D3","E0D5","BDC3","E0D7","E0D6","E0D8","B3CD","E0DA","FBA4","E0D9","E0DC","E0DB","B8BC","CEA8","B6CC","B2A6","B6EA","B4E1","CEE8","E0DE","E0E0","FBA5","E0E1","B2D1","E0DD","FBA6","BBB9","C4C1","E0DF","FBA9","FBA7","E0E4","BCEE","FBA8","E0E2","B7BE","C8C9","E0E3","E0FE","FBAB","E0E9","B8BD","B5E5","E0E6","CDFD","FBAA","CEB0","C2F6","E0E8","FBAC","FBAE","FBAD","FBAF","E0EA","CED6","B6D7","C8FC","C7CA","E0EB","E0ED","E0F0","E0EC","E0EF","B8EA","B1CD","E0F1","BFF0","E0EE","CEDC","FBB0","E0F4","F4A4","E0F2","E0F5","E0E7","E0F3","BABC","E0F6","E0F7","CDFE","FBB1","E0F8","E0F9","FBB2","E0E5","E0FA","B4C4","BCA5","E0FB","E0FC","E0FD","B1BB","E1A1","C9BB","E1A2","B4A4","E1A3","E1A4","E1A5","E1A7","E1A8","E1A6","C9D3","E1AA","E1A9","FBB3","E1AC","E1AB","E1AD","E1AE","E1B0","E1AF","B9F9","E1B2","E1B1","B4C5","BFD3","C5BC","E1B3","C0B8","BBBA","B1F9","E1B4","CDD1","CAE3","E1B5","F9EC","C5C4","CDB3","B9C3","BFBD","C3CB","D2B4","C4AE","B2E8","E1B6","E1B7","E1BC","E1BA","E1B9","DAC2","B3A6","E1B8","B0DA","C8AA","C8CA","CEB1","E1BD","E1BB","C3DC","C0A6","C8AB","C9AD","E1BF","CEAC","B7CD","E1C0","E1BE","C8D6","E1C1","E1C2","FBB4","B0DB","BEF6","E1C7","E1C4","C6ED","E1C3","B5A6","E1CA","E1C5","E1C6","E1C9","E1C8","C9A5","C1C2","C1C1","B5BF","E1CB","E1CC","E1CD","E1CF","E1CE","B1D6","E1D7","C8E8","E1D1","E1D3","E1D5","BFBE","E1D6","E1D4","BCC0","E1D0","E1D2","C9C2","BEC9","E1D9","E1D8","E1DA","BCA6","BAAF","C5F7","E1DB","C4CB","E1DD","CEA1","E1DC","C1E9","E1E2","E1E4","E1E5","C3D4","E1E3","E1E0","E1DE","E1DF","E1E1","E1E8","E1E6","E1E7","E1E9","E1EB","E1EC","E1ED","E1EE","E1EA","E1F0","E1EF","E1F1","CEC5","E1F4","E1F2","E1F3","B4E2","CCFE","CACA","E1F6","E1F5","E1F7","E1F8","E1FC","E1F9","E1FA","E1FB","E1FD","E1FE","E2A1","E2A2","E2A3","C8AF","C5D0","E2A4","C7F2","C9B4","E2A5","FBB5","E2A6","C5AA","B3A7","B9C4","E2A7","E2A8","E2A9","BBA9","E2AB","E2AA","E2AC","E2AD","FBB8","FBB6","FBB7","FBB9","C8E9","E2AE","E2AF","F3E9","E2B0","E2B1","E2B2","BBAE","E2B3","C7D6","CBDF","B1CE","B1D7","E2B4","E2B6","E2B5","C5F0","C0B9","DDB9","E2B7","CCC1","E2B8","B4C6","C8D7","E2B9","E2BA","E2BB","CCDC","CCD5","C4BE","C1EA","E2BD","BDE2","BECA","E2C0","E2BF","E2BE","C8FD","B4C7","B8A9","E2C6","E2C3","BFBF","CCB2","E2C2","E2C4","E2C5","E2C1","E2C7","E2C8","C4AF","B4E3","C3E5","FBBB","E2C9","E2CA","E2CD","BFE7","C6C4","E2CE","CBD3","E2CB","E2CC","E2D1","E2D0","E2CF","E2D3","E2D2","E2D4","E2D6","E2D5","CACD","BDD6","CEC6","E2D7","C6B7","E2D8","E2D9","E2DD","E2DB","E2DC","E2DA","E2DE","E2DF","E2E0","E2E1","CCB7","E2E2","CCF0","E2E3","C3CE","C7EA","B6EB","C3BB","E2E4","B6BA","C0D0","E2E5","BABD","E2E6","E2E7","B8A6","BAD5","E2E9","FBBD","C5D6","BAD6","B5CE","CBA4","C7CB","C5D7","B9DC","E2EB","FBBE","BECB","FBBF","CEB2","B9C5","B8A7","C8A3","E2ED","FBC0","E2EF","B8EB","E2EE","C4F6","E2F1","B3B7","E2EC","C8EA","B1B0","BAEC","CFD2","E2F0","E2F2","CACB","C0D9","E2F4","E2F5","E2F3","B3CE","E2FB","E2FA","BCA7","E2FC","E2F7","E2FD","E2F8","C8D8","E2F6","E2F9","E3A2","E3A1","CBE1","E2FE","B0EB","E3A4","E3A3","BECC","E3A5","C1C3","E3A7","E3A6","E3A8","E2E8","E2EA","E3AA","E3A9","FBC1","BCA8","CEE9","BCD2","E3AB","B7B7","B5C0","B5A7","BBE3","CDB4","E3B1","E3B0","C1C4","E3AD","E3AF","BDCB","BFC0","E3AE","E3AC","C7AA","BECD","C9BC","BAD7","C5F8","E3B2","E3B3","E3C9","B6D8","CFBD","C1B5","E3B4","B2D2","C4F7","CAA1","FBC5","FBC7","E3B5","B5FA","E3B6","E3B8","E3B9","C7A9","E3BA","E3BB","E3BC","B6D9","B2D3","C6C5","BDA8","BBE4","E3BD","BDA9","B2CA","C9C3","E3BE","C8EB","C1C5","E3C1","E3C2","C7E9","BFC1","E3BF","C3E1","E3C0","BECE","B0DC","B5A9","E3C3","C4F8","E3C4","C0C7","CCAD","C9A3","E3C5","E3C6","C3D5","CEC7","E3C8","E3C7","BCEF","E3CA","B0F0","E3CD","E3CB","B2D4","B7CE","E3CC","B9C6","B9F2","CAE6","E3CE","CBD4","E3D0","C0D1","B1CF","B2BA","B0AC","E3CF","E3D1","E3D2","BEF7","E3D3","B3CF","E3D5","B7EA","B5E6","E3D6","B6F5","E3D7","C0FC","C6CD","C0E0","BAF5","E3D8","C3E2","C1EB","E3DA","E3DC","E3D9","E3DB","B7A2","E3DD","B7A6","B5E7","CDD2","E3DF","E3E0","B1AE","E3E3","B3F6","E3E2","E3E1","E3E5","E3DE","E3E6","CEA9","E3E7","E3E8","FBC8","D4F4","E3EA","E3E9","E3EB","E3EC","CEB5","E3ED","F0EF","BECF","E3EE","E3EF","BDD7","C6B8","E3F0","FBC9","C3A8","FBCB","E3F1","C3BC","E3F2","B6A5","D1BF","C3DD","BCB3","B4C8","E3F3","E4A2","E3F6","B5E8","E3F5","E4A4","E3F4","BED0","E3F8","E3F9","C5AB","E3FA","B3DE","BFDA","C9E4","E3FC","C2E8","E3F7","E3FB","E3FD","BAFB","E4A6","C9AE","C8A6","C5F9","B6DA","E4A5","E4A3","C8B5","E3FE","C3DE","C5FB","C5FA","BAF6","E4B8","E4A8","E4AA","E4AD","E4AE","E4AB","E4AC","E4A9","E4A7","E4A1","CACF","B2D5","E4B5","E4B2","E4B7","E4B6","C7F3","CCA7","BBBB","E4B0","E4B9","E4B4","E4B3","E4AF","FBCC","E4B1","B4C9","C3BD","C0FD","C8A2","E4BE","C8A4","C0E1","E4BB","C8CF","E4BF","CAD3","C3DB","E4BA","E4BC","E4BD","E4C0","BCC4","C6C6","E4C5","E4C4","E4C1","CFB6","E4CA","E4CE","E4CB","E4C7","E4C8","E4CD","E4C2","D2D5","E4C9","E4C3","E4CC","E4D2","B4CA","E4CF","E4D0","E4D1","E4D4","E4D3","C8F6","E4D5","CEFC","CAED","E4DA","E4D7","E4D6","C0D2","E4D9","E4DB","E4D8","E4DF","E4DC","E4DD","E4C6","E4DE","E4E0","E4E1","CAC6","E4E2","CCE2","B6CE","B7A9","E4E3","CAB4","BFE8","CCB0","E4E4","CEB3","C7F4","C1C6","C7B4","BDCD","B0C0","E4E9","E4E7","E4E5","B4A1","BED1","E4EA","E4E8","E4E6","E4EE","E4ED","E4EC","E4EB","E4EF","E4F0","C0BA","E4F1","E4F3","E4F2","B8D2","C1B8","E4F5","C5FC","E4F4","E4F6","CAB5","C1EC","B9C7","E4F7","CEC8","E4F9","E4FA","E4FB","E4FC","BBE5","E4FD","B7CF","B5EA","B5AA","E5A1","CCF3","B9C8","E4FE","E5A4","CCE6","C7BC","C9B3","BDE3","E5A3","BCD3","B9C9","BBE6","B5E9","CAB6","E5A2","C1C7","CBC2","BAF7","BBE7","C4DD","E5A7","CEDF","BAD9","E5A8","BFC2","E5AA","BED2","BAB0","E5A9","BDAA","B8BE","C1C8","E5A5","E5AB","FBCE","E5A6","B7D0","E5AE","E5B2","B7EB","E5AD","E5B6","FBCF","B9CA","CDED","B0BC","E5B3","B5EB","E5B0","E5B1","C5FD","E5AF","E5AC","B3A8","C0E4","B8A8","E5B8","E5B5","E5B7","E5B4","B7D1","C2B3","E5B9","C1EE","E5C6","FBD1","E5C2","E5BC","E5C0","BCFA","B0DD","E5BB","E5C3","E5C7","B9CB","CCD6","C4D6","E5BD","FBD0","E5C5","E5BA","C3BE","E5BF","B0BD","CCCA","E5BE","B6DB","C8EC","C1ED","CED0","BDEF","E5EE","FBD2","E5C8","C0FE","E5C4","E5C9","E5CB","C4F9","E5CE","E5CA","CAD4","B4CB","CCCB","B0DE","E5CD","CEFD","E5CC","B1EF","C6EC","E5CF","E5D6","E5D0","E5D7","E5D3","C7FB","BCCA","E5D5","E5D2","E5D8","E5D1","BDC4","CBA5","BDCC","E5D4","E5E0","E5DC","E5DF","E5DD","E5E1","E5DB","E5C1","C0D3","C8CB","E5DE","E5D9","C1A1","B7D2","BDAB","FBD3","BFA5","C1B6","E5E4","E5E6","E5E7","E5E3","E5E5","E5DA","E5E2","E5EA","E5E9","CBFA","B7AB","E5E8","E5EC","E5EB","E5EF","E5F1","BBBC","E5ED","E5F2","E5F3","F9A1","E5F4","E5FA","C5BB","E5F6","E5F5","E5F7","E5F8","E5F9","E5FB","E5FC","B4CC","E5FD","E5FE","E6A1","FBD4","E6A2","E6A3","E6A4","E6A5","E6A6","E6A8","E6A7","E6A9","E6AA","E6AB","E6AE","E6AC","E6AD","BAE1","B7D3","C3D6","C8B3","BDF0","C7CD","C8ED","E6AF","D8ED","E6B0","E6B2","CDE5","E6B1","E6B4","E6B3","CDD3","E6B5","C8FE","E6B6","E6B9","E6B8","E6B7","FBD5","E6BA","B7B2","C1A2","B5C1","E6BE","E6BB","E6BC","E6BF","E6C0","E6BD","B1A9","B2A7","E6C2","E6C3","E6C4","CDE2","BDAC","E6C6","E6C5","BFE9","E6C7","E6C8","E6C9","B4E5","B4CD","E6CA","E6CB","CBDD","CDE3","CDD4","CFB7","B9CD","E6CE","BCD4","E6CD","E6CF","BCA9","C2D1","E6D0","B9CC","CCD7","E6D1","E6D2","E6D3","E6D4","E6D5","BCAA","CCED","E6D7","C3BF","E6D6","E6D9","E6D8","E6DA","C0BB","E6DB","E6DC","CAB9","E6DD","C1EF","E6DE","E6DF","CEFE","E6E2","E6E1","E6E0","C4B0","E6E3","BFA6","E6E4","E6E5","CFB8","E6E6","E6E7","E6E9","E6E8","C8A5","C6F9","CFBE","C8A9","E6EB","BED3","C9AA","E6EC","E6EA","B4CE","B8D4","BBE8","C8EE","B8AA","CBC3","E6EF","E6ED","B9CE","B9CF","B0E9","BAE8","C7D9","B0DF","E6F4","C3C0","C7D8","C2DB","E6F6","E6F2","E6F5","E6F0","E6F3","CBA6","B8D5","B0FD","E6F1","E6F8","E6F9","C6B9","B6BB","E7A6","C7BD","BBE9","B6BC","C0C8","CFC6","CCAE","E6F7","C0D4","B5D3","E6FA","E6FC","E6FB","E6FD","C3A6","C7BE","C4B1","E7A3","E7A2","E6FE","BFD5","C9E5","E7A5","E7A4","B9D0","CFD3","E7B5","E7A9","E7AA","BCF0","E7A8","B9F8","E7A7","E7AB","C4B2","CAA2","C1A3","C2DC","E7AF","E7B0","E7AC","E7AD","E7AE","B9D1","E7B6","E7B2","C9E6","CBEC","C9A8","E7B1","E7B4","E7B3","CBC4","E7B7","E7B8","C1B7","E7B9","E7BB","E7BF","E7BC","E7BA","C7BF","E7BD","E7BE","B2B2","E7C5","E7C0","E7C1","E7C2","C2A1","E7C4","E7C3","E7C6","E7C7","E7C8","BFC3","B2E9","E7C9","CED7","BCAB","BDAD","BBEA","C3D7","E7CA","E7CB","B1B1","E7CC","E7CD","E7CE","E7CF","E7D0","B6BD","DAAA","E7D1","C0E5","E7D2","BCCB","E7D3","D0B0","E7D4","CADE","B4DC","C1A4","BDD8","C9F1","BDAE","E7D5","B9D2","E7D6","C8CC","E7E4","E7D8","C2C9","C7F5","B8BF","E7D7","C1A5","E7D9","C4FA","E7DB","E7DA","E7DD","E7DC","E7DE","E7E0","E7DF","B4CF","E7E1","E7E2","E7E3","BAB1","CEC9","E7E5","BFA7","B1F0","E7E6","E7E7","E7E8","B0F2","E7E9","E7EA","C9E7","BCC7","E7EC","B3A9","B0B2","E7EB","E7EE","C7CE","BFC4","B2D6","CBA7","B7DD","B6DC","E7ED","B2EA","B4A3","B1F1","E7F2","CEEA","C2DD","C9C4","E7FE","B2D7","E7FC","E7FA","E7F1","E7EF","E7F0","BCE3","B6EC","C3F7","C6D1","B1D1","E7F4","E7F3","E7F9","E7F5","E7F8","FBD7","CCD0","E7F7","B2D8","B3FD","E7FB","E7FD","B7D4","E8A3","E8AC","E8AD","B0AB","E8B4","B0F1","E8AB","E8AA","E8A5","E8A4","E8A2","E8A1","C3E3","C2FB","E8A7","E8A6","E8A9","C1F0","B7D5","B1C1","E8A8","B9D3","C1F1","FBD8","E8BA","E8BB","B2D9","B2AE","E8B8","FBD9","E8AE","E8B6","E8BD","E8B7","E8B5","E7F6","E8B3","E8AF","B4D0","E8B1","E8BC","E8B2","E8BE","E8B0","C7FC","CDE9","E8B9","E8CF","E8C7","BFFB","FBDA","B5C6","B6DD","E8C2","B2DB","BED4","E8C5","BADA","C5D1","E8CA","CAEE","E8C1","B2DA","B8D6","C9A9","E8CB","E8BF","FBDB","E8C8","E8D2","E8C3","E8C4","C6BA","E8C9","E8C6","CBA8","E8CC","B0E0","E8C0","E8CE","E8CD","C7EB","E8D4","E8DF","B3FE","E8E2","E8D0","E8D5","CDEE","E8DE","FBDC","CDD5","CEAA","C3F8","B3EB","C9F2","E8E4","C6A1","B0B1","E8DD","E8D9","C1F2","E8D3","E8DB","E8E0","C7AC","B0AA","E8D8","E8E1","C9F8","E8DC","E8D7","BED5","BDAF","BCAC","CCD8","C9C7","E8E7","E8F0","E8DA","B3F7","FBDD","BEF8","E8E5","E8EA","C1F3","E8E6","E8ED","C3DF","E8EE","CDD6","E8E3","B3B8","E8E9","E8EC","CCAC","E8EF","E8E8","E8EB","F9A5","CBA9","CFA1","E8F3","E8FA","E8F2","BCC3","E8D1","CACE","CCA2","E8F9","E8F8","E8F4","E8F5","B1B6","E8F7","E8F1","C4D5","E8F6","B0FE","C2A2","CAC3","E8FB","E9A1","C8D9","E8FE","BED6","BCC9","E9A3","B6BE","FBDE","E9A4","C9F9","E8FD","FBDF","E8D6","E8FC","CFCF","C6A2","C9F3","FBE0","E9AB","E9B1","E9B2","E9A5","C7F6","E9AF","E9A7","E9A9","E9B3","E9A8","E9AC","B1F2","C6E5","E9AD","E9B0","E9A6","C1A6","E9AA","BBA7","BFC5","B7B0","CCF4","CCF9","BDF2","FBE2","E9B7","E9B5","CFCE","E9B4","CDF5","E9B6","E9B8","E9B9","E9BC","E9BA","C6A3","E9BB","C8CD","E9AE","BDF3","E9BD","E9C2","C1F4","E9C1","E9A2","E9C3","C1C9","E9BE","E9C0","E9BF","DDB1","DDA2","E9C5","E9C4","CDF6","E2BC","E9C6","E9C7","E9C8","B8D7","B5D4","E9CA","D1DD","B5F5","CEBA","B6F3","E9CB","E9CC","C3EE","E9CD","C6FA","B0BA","B2E3","E9D2","E9D3","E9CE","BBBD","E9CF","C7C2","E9D0","E9D1","E9DB","E9D5","E9D8","E9D4","E9D6","E9D7","BCD8","E9D9","C3C1","B7D6","B3C2","E9DC","B3BF","E9E1","E9DD","E9E0","C8BA","E9DE","E9DF","C9C8","C8DA","E9E2","C2FD","E9EC","E9E8","B2EB","E9E6","CBAA","E9E7","E9E4","E9E5","E9EA","E9ED","E9EB","E9E9","E9E3","C3D8","E9F4","CCAA","E9F2","E9F3","E9EE","E9F0","E9F1","E9EF","C0E6","CFB9","E9F8","E9F9","EAA1","BFAA","E9FB","E9FE","E9F6","E9F5","EAA2","B2DC","E9FC","EAA3","E9FD","E9FA","C4B3","E9F7","C7E8","EAA7","CDBB","EAA6","EAA5","EAAE","EAA8","EAB0","CDE6","EAB3","EAAA","EAAB","EAAF","EAB2","EAB1","EAA9","EAAC","EABD","EAB6","EAB4","EAB5","EABA","EABB","B3AA","B5C2","EAB9","EAA4","FBE5","EAB8","EABC","EAB7","EABE","EAC0","EABF","EAC2","EAC1","E9DA","EAC6","EAC3","EAC4","EAC5","EAC7","B7EC","EAC9","EAC8","BDB0","B9D4","DEA7","EACA","BDD1","B3B9","EACB","B1D2","BED7","EACC","B9D5","EACD","B0E1","C9BD","EACE","BFEA","EAD5","EAD2","C3EF","EAD3","EAD0","B6DE","EACF","EAD6","B7B6","C2DE","EADC","EAD8","C2B5","EAD7","EADA","EAD1","EADB","EADD","C8EF","EAD9","EADE","EAE0","B8D3","EAD4","B0C1","EADF","BADB","CEF6","EAE1","EAE2","C1F5","CEA2","EAE3","CDB5","EAE4","EAE5","CAE4","EAE6","BAC0","CEA3","EAEB","EAEC","BED8","EAEA","FBE6","CDE7","EAE7","EAE9","C0BD","BFFE","EAE8","EAED","CAA3","EAEF","EAEE","B3EC","CBAB","EAF0","F9A2","EAFC","EAF2","EAF3","EAF4","EAF5","EAF9","EAFA","EAF8","EAF6","EAF1","EAF7","EAFB","F0B7","B2A8","EAFE","B6DF","EAFD","EBA2","EBA1","EBA4","EBA3","EBA5","BDB1","EBA6","EBA7","EBA8","C0BE","CDD7","EBA9","CAA4","C7C6","EBAA","EBAB","B8AB","B5AC","EBAC","BBEB","C7C1","EBAD","B3D0","EBAE","EBB0","CDF7","EBAF","BFC6","EBB1","EBB2","EBB3","B4D1","EBB4","EBB5","EBB6","EBB7","B3D1","EBB8","EBB9","EBBA","B2F2","BFA8","EBBB","EBBC","EBBD","B8C0","C4FB","EBBE","B7D7","BFD6","EBC1","C6A4","EBC0","FBE7","B7B1","EBBF","C2F7","B5AD","EBC2","EBC3","BED9","B7ED","EBC4","CBAC","C0DF","B5F6","CCF5","C1CA","EBC5","FBE8","BFC7","C3F0","BEDA","EBC6","EBC9","EBCA","BABE","C2C2","EBC8","BEDB","C9BE","EBC7","BBEC","B1D3","EBCE","B7D8","BBEE","BBED","CFCD","EBCD","EBCC","C1A7","B5CD","CFC3","B3BA","BEDC","FBE9","EBCB","EBD0","EBD1","EBCF","B8D8","CDC0","BBEF","C7A7","EBD4","C0C0","C3C2","CDB6","EBD7","B8EC","C0BF","EBD3","EBD8","B8ED","EBD5","EBD6","FBEA","EBD2","C0E2","C6C9","C3AF","B2DD","C8F0","B5C3","FBEB","C4B4","EBDB","EBD9","C3CC","C0C1","B4D2","EBDA","BFDB","CECA","CFC0","EBDC","EBE7","C4B5","EBE6","FBEC","EBE3","EBEB","EBE4","EBE0","C4FC","EBDF","EBDD","CDA1","BBF0","EBE1","EBDE","FBEE","EBE5","BDF4","B8C1","C2FA","CBC5","B1DA","B0E2","C6A5","EBE9","EBE8","C6E6","EBED","EBE2","EBEC","EBEE","B8AC","EBEA","B9D6","BCD5","EBEF","CDD8","EBF2","EBF5","EBF3","C9B5","EBF0","B6E0","EBF4","EBF6","EBFA","EBF7","EBF9","EBF8","FBEF","EBFB","BCB1","EBFD","EBFC","C9E8","ECA1","B7D9","EBFE","ECA2","ECA3","B5C4","E6C1","BEF9","ECA4","B8EE","ECA5","FBF0","ECA6","BBBE","DACE","ECA7","ECA8","BDB2","ECA9","ECAA","ECAB","ECAC","ECAD","C3AB","ECAE","ECB0","ECAF","C6A6","ECB1","CBAD","ECB2","ECB3","ECB4","ECB5","C6DA","BEDD","ECB6","B9EB","D0AE","ECB7","ECB8","C9BF","ECB9","ECC1","ECBA","ECBC","ECBB","ECBD","CBC6","ECBE","ECBF","ECC0","ECC2","B3AD","C4E7","C9E9","BAE2","B9D7","C9CF","B2DF","C8CE","ECC5","B4D3","C0D5","ECC4","ECC9","C3F9","CCE3","ECC7","ECC8","B5AE","ECCA","C7E3","C2DF","C8F1","C5BD","ECC6","CBC7","B2EC","ECCC","CFA8","C4C2","CFC5","BBF1","ECCB","C2B1","ECDC","C1A8","C6F8","C9D0","ECCF","BBBF","BBF2","BEDE","C7E5","B8AD","ECCE","ECCD","C9EA","BCC1","C5D2","FBF1","FBF2","ECD1","ECD2","B9D8","ECD0","ECD3","ECD4","ECD6","C2A3","ECD5","B4E6","ECD8","ECD7","ECD9","FBF3","ECDB","ECDD","ECDE","C0D6","BCCF","ECDF","B3D2","ECE0","C1F6","ECE1","ECE2","C9EB","FBF4","B5AF","ECE3","C4B6","B1DB","ECE4","BCF1","BFF6","C2AD","ECE7","ECE6","ECE5","ECED","ECEB","ECE8","ECEA","ECE9","ECEC","B5F7","ECF0","C0D7","ECF1","B8D9","ECEE","ECEF","CFA9","C4B7","C1A9","ECF2","ECF5","ECF3","ECF4","CDD9","C6A7","ECF8","ECF6","ECF7","ECF9","EDA9","ECFC","ECFD","ECFB","ECFA","C4FD","EDA1","EDA5","EDA2","ECFE","EDA3","EDA4","EDAB","EDA6","C0D8","EDA8","EDAA","EDA7","EDAD","BDB3","EDAC","EDAE","EDAF","EDB2","EDB1","EDB0","EDB4","EDB3","CCF6","EDB6","EDB5","EDB7","EDB8","EDBA","EDB9","BFC8","EDBB","B6ED","EDBC","EDBE","EDBF","EDC0","EDBD","EDC1","BCD6","EDC2","B5B0","B7B3","FBF6","B8AE","EDC3","C6F0","C5BE","EDC4","EDC7","BCB4","EDC6","EDC5","B7DA","EDC8","B3D3","EDCA","BADC","EDC9","EDD2","EDCC","EDCE","CAE5","EDCB","EDCD","EDD1","EDCF","B5B1","EDD0","EDD3","C7DA","CED8","BDB4","EDD4","CDA2","EDD6","EDD5","EDD9","CDC1","EDD8","B3ED","EDD7","EDDC","EDDB","EDDA","C5B2","EDDD","EDDE","EDDF","B9EC","B7A5","EDE0","EDE1","EDE2","BFC9","EDE3","BCAD","EDE4","EDE5","D2A1","D1FE","EDE6","E5F0","EDE7","C3A4","BFAB","C7C0","EDE8","CAD5","C4D4","B9FE","C3A9","B1AA","CBF8","BFD7","B7DE","B6E1","CAD6","EDE9","EDEB","EDEA","B2E0","C6F6","EDEC","C7F7","C5B3","EDED","BDD2","EDEF","CCC2","EDFE","EDF1","EDF2","C4C9","C2E0","C1F7","C6A8","EDF0","B5D5","EDF9","EDF6","EEA5","C6A9","C3E0","EDF3","C4FE","C5D3","EDF4","EDF8","BFE0","C7E7","C4CC","C0C2","EDF7","C2AE","C2A4","EDF5","B0A9","CFA2","EDFA","C2E1","BDB5","BFCA","EDFC","EDFB","B0EF","EDFD","C9AF","EEA7","C6DB","BFEB","C3D9","B6F8","EEA6","CDB7","B1BF","CAD7","B2E1","EEA1","EEA2","EEA3","EEA4","C6BB","C3A3","B0E3","EEA8","EEA9","F4A3","C2BD","EEAA","B1F3","C1CC","B8AF","CDDA","FBF9","EEAB","C5AC","C1F8","BCD7","EEAC","EEAF","BDE5","EEAD","C1AB","C1AA","B0E4","CECB","EEB1","C8F2","EEB3","EEB2","EEB0","E3E4","B4D4","EDEE","EEB5","EEB4","EEB6","CDB8","C6E1","CBAE","EEB7","BCD9","EEB8","EEB9","EEBA","C5A1","B0EA","B9D9","CFBA","EEBE","FBFA","B7B4","EEBB","EEBC","C9F4","B3D4","CDB9","B6BF","C5D4","EEBF","EEC0","FBFC","EEC1","FBFD","C5A2","EEC3","EEC2","C6D3","EEC4","BDB6","BCE0","C7DB","C3F1","BCF2","BFEC","EEC5","EEC6","BFDD","EEC7","EEC8","EEC9","CDEF","BDB7","EECB","EECA","B9DA","B9F3","BBC0","EECE","BDE6","EECD","EECC","C2E9","B8EF","C0C3","C8B0","BDB9","EECF","BEDF","EED2","EED0","EED1","EED4","EED3","BEFA","EED5","EED6","EED7","C8D0","BAD3","BCE1","EED8","EED9","CEA4","BDC5","CCEE","CECC","EEDA","B6E2","EEDB","FCA1","C5A3","FBFE","EEDE","B3F8","BFCB","FCA2","EEDC","EEDD","C4E0","FCA5","FCA6","CBD5","B6FC","FCA3","FCA4","EEE0","EEE1","EEDF","EEE3","FCA7","FCA9","C6DF","B3C3","FCA8","EEE7","EEE4","EEE6","EEE2","EFCF","EEE5","CEEB","B8DA","FCB0","FCAA","FCAC","EEEF","FCAB","C5B4","EEEA","EEED","EEEB","EEF0","FCAD","EEF1","FCAF","EEE9","FCAE","EEF6","B1F4","EEE8","C8AD","EEEC","BEE0","FCB1","B9DB","FCB3","FCB4","CBC8","B6E4","BDC6","C6BC","F9A4","C1AD","EEF4","EEEE","EEF3","CCC3","C4B8","EEF5","EEF2","FCB2","C1AC","EEF9","EEF8","EEF7","FCB8","CBAF","FCBC","FCBA","FCB6","FCB7","FCBB","BDFB","FCB5","EEFA","CADF","B1D4","C9C6","C3F2","B5F8","F9AA","EEFC","FCBF","B9DD","FCC2","FCC4","BBAC","EEFB","BFED","BFEE","EFA1","EFA3","FCC3","FCC1","BEFB","FCBE","EFA2","EFA4","FCBD","B6D3","C9C5","BCE2","CFA3","EEFE","BAF8","CFBF","EFA6","EFA5","EFA7","EEFD","F9A3","C6E9","C5D5","C4D7","EFAC","FCC6","C3C3","EFA8","EFA9","B7AD","EFAB","FCC5","B8B0","EFAA","BEE1","B3F9","EFB0","BABF","C1F9","C4CA","FCC7","B3BB","EFAE","EFAF","C4C3","EFAD","EFB1","EFB7","FCC8","EFBA","EFB9","C5AD","EFB2","EFB3","EFB6","EFB8","FCC9","B6C0","EFBB","EFB5","EFB4","FCCA","EFBF","EFC0","EFC1","EFBE","EFBD","BEE2","C6AA","EFBC","EFC5","EFC3","FCCB","EFC4","EFC2","C2F8","EFC6","EFC7","EFC9","FCCC","FCCD","B4D5","EFC8","CCFA","EFD4","EFCA","EFCD","EFCB","EFCC","EFCE","EFD0","EFD1","EFD2","EFD5","EFD3","EFD6","EFD8","EFD7","C4B9","CCE7","EFD9","C1AE","EFDA","CAC4","EFDB","B3AB","B1BC","B4D7","FCCE","B4D6","EFDC","EFDD","EFDE","EFDF","EFE0","B4D8","B3D5","B9DE","C8B6","EFE2","EFE1","EFE3","B1DC","EFE6","EFE5","EFE4","EFE7","EFEA","B0C7","EFE8","EFEC","EFEB","EFEE","EFED","EFEF","C6AE","EFF0","EFF1","EFF3","EFF2","C9EC","EFF4","EFF5","BAE5","EFF6","EFF7","CBC9","C1CB","B0A4","C2CB","EFF8","C9ED","EFFB","EFF9","B9DF","EFFA","B8C2","CAC5","EFFD","F0A1","EFFE","F0A2","B1A1","BFD8","BDFC","B4D9","F0A3","C7E6","F0A5","B1A2","F0A4","C4C4","CECD","C6AB","EFFC","CEA6","B8B1","CDDB","B6F9","CEB4","B7A8","C2E2","E7A1","F0A6","B3AC","BFEF","B3D6","F0A8","F0A9","F0A7","B7E4","BADD","BEE3","FCD1","B1A3","CED9","F0AB","EEAE","F0AA","FCD2","F0AE","F0AC","F0AD","F0AF","F0B0","CEEC","F0B1","F0B2","C0C9","C8BB","BFFD","B4E7","CDBA","B2ED","BDB8","B8DB","F0B5","F0B4","BBF3","F0B6","F0B3","BBA8","F0BA","EAAD","D2D6","BFF7","F0B8","CEA5","C6F1","B1AB","C0E3","BCB6","CAB7","B1C0","CEED","CDEB","F0BB","C5C5","BCFB","F0BC","F0BD","BFCC","F0BE","CEEE","F0B9","F0C0","F0C2","F0C1","F0BF","F0C3","F0C4","C1FA","B2E2","F0C5","CCB8","F0C6","F0C7","CFAA","FCD3","DBB1","F0C8","FCD4","F0C9","F0CA","F0CE","FCD5","F0CB","F0CC","F0CD","F0CF","FCD6","FCD7","FCD8","C0C4","FCD9","CCF7","C0C5","F0D0","C8F3","F0D1","F3D3","CCCC","F0D2","F0D3","F0D4","B3D7","F0D6","BFD9","F0D7","B7A4","F0D8","F0DC","F0DA","F0DB","B3F3","F0D9","F0DD","F0DE","B0C8","F0DF","F0E0","BEE4","F0E1","B5C7","F0E4","F0E3","F0E2","EBF1","CADC","F0E5","F0E6","F0E7","F0E8","F0E9","F0EA","B4DA","F0EB","F0EC","C7A3","F0EE","B2BB","F0F1","F0F0","B1A4","B6C1","CAC7","C4BA","BAA2","B9E0","BDE7","BFDC","F0F3","F0F2","CDC2","B4E8","C8D2","C6DC","BFFC","CECE","B7DB","F0F6","F0F5","CBCB","C6AC","B1D0","F0F7","F0F4","C9D1","CDEA","F0F8","F0F9","F0FB","C2EA","B3DB","B3DC","F0FA","B4E9","B8B2","FCDA","B4EA","C5BF","CEE0","FCDB","B8DC","F0FC","F0FD","F0FE","F1A1","F1A3","F1A2","C9F7","F1A4","F1A5","F1A6","F1A7","F1A9","F1A8","F1AA","C8F4","E6CC","BFA9","B5B2","F1AB","F1AC","D2AC","DDBB","C8D3","B0FB","B0BB","BBF4","CBB0","BEFE","F1AD","CCDF","F1AE","CDDC","B1C2","BBC1","F1AF","B2EE","F1B0","F1B1","F1B3","F1B4","F1B6","F1B2","F1B5","FCDE","B4DB","F1B7","F1B8","F1B9","F1BA","F1BB","F1BD","F1BC","F1BF","F1C2","F1BE","F1C0","F1C1","F1C3","B6C2","BCF3","F1C4","F1C5","B9E1","FCE0","F1C6","B3BE","C7CF","F1C7","F1C8","C3DA","C6EB","F1C9","C7FD","C2CC","B1D8","B6EE","B6EF","C3F3","F1CE","B6F0","B2EF","F1CD","F1CB","F1CC","F1CA","F1D8","F1CF","F1D0","F1D1","F1D2","F1D4","F1D3","BDD9","F1D5","F1D7","B5B3","F1D6","C1FB","B8B3","F1D9","C2CD","F1DA","C6AD","F1DB","F1E0","F1DE","F1DD","F1DF","F1DC","F1E2","FCE1","F1E1","F1E4","B6C3","F1E3","F1E5","F1E6","F1E8","F1E7","F1E9","F1EB","F1EA","B9FC","F1EC","F1ED","B3BC","F1EE","F1EF","BFF1","F1F0","F1F1","F1F2","F1F3","B9E2","FCE2","FCE3","F1F4","F1F5","F1F6","F1F7","F1F8","C8B1","F1FA","C9A6","F1FB","F1F9","F1FD","F1FC","F1FE","F2A1","F2A2","F2A3","F2A4","F2A5","F2A6","F2A7","F2A8","F2A9","F2AA","F2AB","F2AC","F2AD","F2AE","DDB5","F2AF","E4F8","B5B4","B3A1","BAB2","F2B1","F2B0","CCA5","F2B3","F2B4","F2B2","F2B5","CBE2","F2B6","B5FB","CFA5","FCE5","F2B7","FCE4","F2B9","B0BE","FCE6","F2BA","CAAB","F2B8","F2BB","F2BC","F2BD","F2BE","F2BF","CBEE","BBAD","BAFA","C1AF","FCE7","F2C0","F2C3","FCE8","F2C1","F2C4","B8F1","F2C2","F2C5","F2C6","F2C7","F2CB","BBAA","C2E4","F2CC","F2C9","F2C8","F2CA","B7DF","F2D0","F2CF","F2CE","B0B3","FCE9","F2DA","F2D6","F2D7","F2D3","F2D9","F2D5","B3E2","CFCC","F2D8","F2D4","F2D2","F2D1","F2DC","F2DF","F2DE","F2DD","C9C9","F2DB","B0F3","F2E0","F2E2","B3EF","F2CD","B1B7","F2E4","F2E3","F2E1","C3AD","CBF0","CEDA","F2E5","F2E6","F2E7","F2E8","F2E9","C4BB","F2EA","C8B7","F2EF","F2EB","F2EC","CBB1","CCC4","C6D0","F2F0","F2F1","C6BE","F2EE","F2ED","B2AA","F2F9","F2F8","B1F5","F2F6","F2F5","F2F3","B3FB","F2F2","BCB2","B2A9","B9E3","F2FC","F2FB","F2FA","F2F7","F2FD","F2FE","F3A5","F3A4","F3A6","B1AD","F3A1","F3A2","B9F4","CCB9","F3A3","FCEB","CBB2","F3AB","FCEA","F3A7","F3AC","F3A9","F3A8","B7DC","F3AD","F3AE","F3AF","F3AA","F2F4","F3B0","C4E1","F3B4","F3B5","F3B3","F3B2","F3B8","F3B1","F3B6","F3B7","F3BA","F3B9","F3BC","F3BD","F3BE","CFC9","F3BB","C2EB","BAED","F3BF","FCED","F3C0","F3C1","F3C2","F3C3","B8B4","F3C4","F3C5","BCAF","F3C6","F3C7","F3C8","F3C9","F3CC","F3CA","CFBC","F3CB","CEEF","F3CD","CEDB","F3CE","C7FE","F3CF","F3D1","F3D2","F3D0","B9ED","CCCD","CBE3","D6F7","DDE0","CBFB","B2AB","F3D4","B5D0","F3D5","F3D6","F3D7","FCEE","B9F5","F3D8","E0D4","CCDB","C2E3","F3D9","F3DB","F3DA","F3DC","F3DD","F3DE","F3DF","F3E0","F3E1","F3E2","F3E3","F3E4","F3E5","F3E6","F3E7","F3E8","C5A4","B8DD","F3EA","C1CD","F3EB","F3EC","C9A1","F3ED","F3EE","E3B7","ECDA","F0ED","F3EF","F3F0","F3F2","F3F3","F3F4","CEF0","F3F1","F3F5","F3F6","F3F8","F3F7","F3FA","F3FB","F3F9","CEB6","F3FC","F3FD","E3D4","F3FE","FAC6","FCCF","F9D4","F9DF","F9E0","F9F5","FABE","FACE","FAD0","FAFB","FBA3","FBBA","FBC2","FBC3","FBC4","FBC6","FBCA","FBCD","FBD6","FBE1","FBE3","FBE4","FBED","FBF5","FBF7","FBF8","FBFB","FCB9","FCC0","FCD0","FCDC","FCDD","FCDF","FCEC","A1AA","FCFE","A1F4","A1F0","A1F3","A1F5","FCFD","A1CA","A1CB","A1F6","A1DC","A1A4","A1DD","A1A5","A1BF","A3B0","A3B1","A3B2","A3B3","A3B4","A3B5","A3B6","A3B7","A3B8","A3B9","A1A7","A1A8","A1E3","A1E1","A1E4","A1A9","A1F7","A3C1","A3C2","A3C3","A3C4","A3C5","A3C6","A3C7","A3C8","A3C9","A3CA","A3CB","A3CC","A3CD","A3CE","A3CF","A3D0","A3D1","A3D2","A3D3","A3D4","A3D5","A3D6","A3D7","A3D8","A3D9","A3DA","A1CE","A1C0","A1CF","A1B0","A1B2","A1AE","A3E1","A3E2","A3E3","A3E4","A3E5","A3E6","A3E7","A3E8","A3E9","A3EA","A3EB","A3EC","A3ED","A3EE","A3EF","A3F0","A3F1","A3F2","A3F3","A3F4","A3F5","A3F6","A3F7","A3F8","A3F9","A3FA","A1D0","A1C3","A1D1","A1C1","8EA1","8EA2","8EA3","8EA4","8EA5","8EA6","8EA7","8EA8","8EA9","8EAA","8EAB","8EAC","8EAD","8EAE","8EAF","8EB0","8EB1","8EB2","8EB3","8EB4","8EB5","8EB6","8EB7","8EB8","8EB9","8EBA","8EBB","8EBC","8EBD","8EBE","8EBF","8EC0","8EC1","8EC2","8EC3","8EC4","8EC5","8EC6","8EC7","8EC8","8EC9","8ECA","8ECB","8ECC","8ECD","8ECE","8ECF","8ED0","8ED1","8ED2","8ED3","8ED4","8ED5","8ED6","8ED7","8ED8","8ED9","8EDA","8EDB","8EDC","8EDD","8EDE","8EDF","A1F1","A1F2","A2CC","A1B1","FCFC","A1EF","8FA2AF","8FA2B0","8FA2B1","8FA2B2","8FA2B3","8FA2B4","8FA2B5","8FA2B6","8FA2B7","8FA2B8","8FA2B9","8FA2C2","8FA2C3","8FA2C4","8FA2EB","8FA2EC","8FA2ED","8FA2EE","8FA2EF","8FA2F0","8FA2F1","8FA6E1","8FA6E2","8FA6E3","8FA6E4","8FA6E5","8FA6E7","8FA6E9","8FA6EA","8FA6EC","8FA6F1","8FA6F2","8FA6F3","8FA6F4","8FA6F5","8FA6F6","8FA6F7","8FA6F8","8FA6F9","8FA6FA","8FA6FB","8FA6FC","8FA7C2","8FA7C3","8FA7C4","8FA7C5","8FA7C6","8FA7C7","8FA7C8","8FA7C9","8FA7CA","8FA7CB","8FA7CC","8FA7CD","8FA7CE","8FA7F2","8FA7F3","8FA7F4","8FA7F5","8FA7F6","8FA7F7","8FA7F8","8FA7F9","8FA7FA","8FA7FB","8FA7FC","8FA7FD","8FA7FE","8FA9A1","8FA9A2","8FA9A4","8FA9A6","8FA9A8","8FA9A9","8FA9AB","8FA9AC","8FA9AD","8FA9AF","8FA9B0","8FA9C1","8FA9C2","8FA9C3","8FA9C4","8FA9C5","8FA9C6","8FA9C7","8FA9C8","8FA9C9","8FA9CA","8FA9CB","8FA9CC","8FA9CD","8FA9CE","8FA9CF","8FA9D0","8FAAA1","8FAAA2","8FAAA3","8FAAA4","8FAAA5","8FAAA6","8FAAA7","8FAAA8","8FAAA9","8FAAAA","8FAAAB","8FAAAC","8FAAAD","8FAAAE","8FAAAF","8FAAB0","8FAAB1","8FAAB2","8FAAB3","8FAAB4","8FAAB5","8FAAB6","8FAAB7","8FAAB8","8FAABA","8FAABB","8FAABC","8FAABD","8FAABE","8FAABF","8FAAC0","8FAAC1","8FAAC2","8FAAC3","8FAAC4","8FAAC5","8FAAC6","8FAAC7","8FAAC8","8FAAC9","8FAACA","8FAACB","8FAACC","8FAACD","8FAACE","8FAACF","8FAAD0","8FAAD1","8FAAD2","8FAAD3","8FAAD4","8FAAD5","8FAAD6","8FAAD7","8FAAD8","8FAAD9","8FAADA","8FAADB","8FAADC","8FAADD","8FAADE","8FAADF","8FAAE0","8FAAE1","8FAAE2","8FAAE3","8FAAE4","8FAAE5","8FAAE6","8FAAE7","8FAAE8","8FAAE9","8FAAEA","8FAAEB","8FAAEC","8FAAED","8FAAEE","8FAAEF","8FAAF0","8FAAF1","8FAAF2","8FAAF3","8FAAF4","8FAAF5","8FAAF6","8FAAF7","8FABA1","8FABA2","8FABA3","8FABA4","8FABA5","8FABA6","8FABA7","8FABA8","8FABA9","8FABAA","8FABAB","8FABAC","8FABAD","8FABAE","8FABAF","8FABB0","8FABB1","8FABB2","8FABB3","8FABB4","8FABB5","8FABB6","8FABB7","8FABB8","8FABB9","8FABBA","8FABBB","8FABBD","8FABBE","8FABBF","8FABC0","8FABC1","8FABC2","8FABC3","8FABC5","8FABC6","8FABC7","8FABC8","8FABC9","8FABCA","8FABCB","8FABCC","8FABCD","8FABCE","8FABCF","8FABD0","8FABD1","8FABD2","8FABD3","8FABD4","8FABD5","8FABD6","8FABD7","8FABD8","8FABD9","8FABDA","8FABDB","8FABDC","8FABDD","8FABDE","8FABDF","8FABE0","8FABE1","8FABE2","8FABE3","8FABE4","8FABE5","8FABE6","8FABE7","8FABE8","8FABE9","8FABEA","8FABEB","8FABEC","8FABED","8FABEE","8FABEF","8FABF0","8FABF1","8FABF2","8FABF3","8FABF4","8FABF5","8FABF6","8FABF7","8FB0A1","8FB0A2","8FB0A3","8FB0A4","8FB0A5","8FB0A6","8FB0A7","8FB0A8","8FB0A9","8FB0AA","8FB0AB","8FB0AC","8FB0AD","8FB0AE","8FB0AF","8FB0B0","8FB0B1","8FB0B2","8FB0B3","8FB0B4","8FB0B5","8FB0B6","8FB0B7","8FB0B8","8FB0B9","8FB0BA","8FB0BB","8FB0BC","8FB0BD","8FB0BE","8FB0BF","8FB0C0","8FB0C1","8FB0C2","8FB0C3","8FB0C4","8FB0C5","8FB0C6","8FB0C7","8FB0C8","8FB0C9","8FB0CA","8FB0CB","8FB0CC","8FB0CD","8FB0CE","8FB0CF","8FB0D0","8FB0D1","8FB0D2","8FB0D3","8FB0D4","8FB0D5","8FB0D6","8FB0D7","8FB0D8","8FB0D9","8FB0DA","8FB0DB","8FB0DC","8FB0DD","8FB0DE","8FB0DF","8FB0E0","8FB0E1","8FB0E2","8FB0E3","8FB0E4","8FB0E5","8FB0E6","8FB0E7","8FB0E8","8FB0E9","8FB0EA","8FB0EB","8FB0EC","8FB0ED","8FB0EE","8FB0EF","8FB0F0","8FB0F1","8FB0F2","8FB0F3","8FB0F4","8FB0F5","8FB0F6","8FB0F7","8FB0F8","8FB0F9","8FB0FA","8FB0FB","8FB0FC","8FB0FD","8FB0FE","8FB1A1","8FB1A2","8FB1A3","8FB1A4","8FB1A5","8FB1A6","8FB1A7","8FB1A8","8FB1A9","8FB1AA","8FB1AB","8FB1AC","8FB1AD","8FB1AE","8FB1AF","8FB1B0","8FB1B1","8FB1B2","8FB1B3","8FB1B4","8FB1B5","8FB1B6","8FB1B7","8FB1B8","8FB1B9","8FB1BA","8FB1BB","8FB1BC","8FB1BD","8FB1BE","8FB1BF","8FB1C0","8FB1C1","8FB1C2","8FB1C3","8FB1C4","8FB1C5","8FB1C6","8FB1C7","8FB1C8","8FB1C9","8FB1CA","8FB1CB","8FB1CC","8FB1CD","8FB1CE","8FB1CF","8FB1D0","8FB1D1","8FB1D2","8FB1D3","8FB1D4","8FB1D5","8FB1D6","8FB1D7","8FB1D8","8FB1D9","8FB1DA","8FB1DB","8FB1DC","8FB1DD","8FB1DE","8FB1DF","8FB1E0","8FB1E1","8FB1E2","8FB1E3","8FB1E4","8FB1E5","8FB1E6","8FB1E7","8FB1E8","8FB1E9","8FB1EA","8FB1EB","8FB1EC","8FB1ED","8FB1EE","8FB1EF","8FB1F0","8FB1F1","8FB1F2","8FB1F3","8FB1F4","8FB1F5","8FB1F6","8FB1F7","8FB1F8","8FB1F9","8FB1FA","8FB1FB","8FB1FC","8FB1FD","8FB1FE","8FB2A1","8FB2A2","8FB2A3","8FB2A4","8FB2A5","8FB2A6","8FB2A7","8FB2A8","8FB2A9","8FB2AA","8FB2AB","8FB2AC","8FB2AD","8FB2AE","8FB2AF","8FB2B0","8FB2B1","8FB2B2","8FB2B3","8FB2B4","8FB2B5","8FB2B6","8FB2B7","8FB2B8","8FB2B9","8FB2BA","8FB2BB","8FB2BC","8FB2BD","8FB2BE","8FB2BF","8FB2C0","8FB2C1","8FB2C2","8FB2C3","8FB2C4","8FB2C5","8FB2C6","8FB2C7","8FB2C8","8FB2C9","8FB2CA","8FB2CB","8FB2CC","8FB2CD","8FB2CE","8FB2CF","8FB2D0","8FB2D1","8FB2D2","8FB2D3","8FB2D4","8FB2D5","8FB2D6","8FB2D7","8FB2D8","8FB2D9","8FB2DA","8FB2DB","8FB2DC","8FB2DD","8FB2DE","8FB2DF","8FB2E0","8FB2E1","8FB2E2","8FB2E3","8FB2E4","8FB2E5","8FB2E6","8FB2E7","8FB2E8","8FB2E9","8FB2EA","8FB2EB","8FB2EC","8FB2ED","8FB2EE","8FB2EF","8FB2F0","8FB2F1","8FB2F2","8FB2F3","8FB2F4","8FB2F5","8FB2F6","8FB2F7","8FB2F8","8FB2F9","8FB2FA","8FB2FB","8FB2FC","8FB2FD","8FB2FE","8FB3A1","8FB3A2","8FB3A3","8FB3A4","8FB3A5","8FB3A6","8FB3A7","8FB3A8","8FB3A9","8FB3AA","8FB3AB","8FB3AC","8FB3AD","8FB3AE","8FB3AF","8FB3B0","8FB3B1","8FB3B2","8FB3B3","8FB3B4","8FB3B5","8FB3B6","8FB3B7","8FB3B8","8FB3B9","8FB3BA","8FB3BB","8FB3BC","8FB3BD","8FB3BE","8FB3BF","8FB3C0","8FB3C1","8FB3C2","8FB3C3","8FB3C4","8FB3C5","8FB3C6","8FB3C7","8FB3C8","8FB3C9","8FB3CA","8FB3CB","8FB3CC","8FB3CD","8FB3CE","8FB3CF","8FB3D0","8FB3D1","8FB3D2","8FB3D3","8FB3D4","8FB3D5","8FB3D6","8FB3D7","8FB3D8","8FB3D9","8FB3DA","8FB3DB","8FB3DC","8FB3DD","8FB3DE","8FB3DF","8FB3E0","8FB3E1","8FB3E2","8FB3E3","8FB3E4","8FB3E5","8FB3E6","8FB3E7","8FB3E8","8FB3E9","8FB3EA","8FB3EB","8FB3EC","8FB3ED","8FB3EE","8FB3EF","8FB3F0","8FB3F1","8FB3F2","8FB3F3","8FB3F4","8FB3F5","8FB3F6","8FB3F7","8FB3F8","8FB3F9","8FB3FA","8FB3FB","8FB3FC","8FB3FD","8FB3FE","8FB4A1","8FB4A2","8FB4A3","8FB4A4","8FB4A5","8FB4A6","8FB4A7","8FB4A8","8FB4A9","8FB4AA","8FB4AB","8FB4AC","8FB4AD","8FB4AE","8FB4AF","8FB4B0","8FB4B1","8FB4B2","8FB4B3","8FB4B4","8FB4B5","8FB4B6","8FB4B7","8FB4B8","8FB4B9","8FB4BA","8FB4BB","8FB4BC","8FB4BD","8FB4BE","8FB4BF","8FB4C0","8FB4C1","8FB4C2","8FB4C3","8FB4C4","8FB4C5","8FB4C6","8FB4C7","8FB4C8","8FB4C9","8FB4CA","8FB4CB","8FB4CC","8FB4CD","8FB4CE","8FB4CF","8FB4D0","8FB4D1","8FB4D2","8FB4D3","8FB4D4","8FB4D5","8FB4D6","8FB4D7","8FB4D8","8FB4D9","8FB4DA","8FB4DB","8FB4DC","8FB4DD","8FB4DE","8FB4DF","8FB4E0","8FB4E1","8FB4E2","8FB4E3","8FB4E4","8FB4E5","8FB4E6","8FB4E7","8FB4E8","8FB4E9","8FB4EA","8FB4EB","8FB4EC","8FB4ED","8FB4EE","8FB4EF","8FB4F0","8FB4F1","8FB4F2","8FB4F3","8FB4F4","8FB4F5","8FB4F6","8FB4F7","8FB4F8","8FB4F9","8FB4FA","8FB4FB","8FB4FC","8FB4FD","8FB4FE","8FB5A1","8FB5A2","8FB5A3","8FB5A4","8FB5A5","8FB5A6","8FB5A7","8FB5A8","8FB5A9","8FB5AA","8FB5AB","8FB5AC","8FB5AD","8FB5AE","8FB5AF","8FB5B0","8FB5B1","8FB5B2","8FB5B3","8FB5B4","8FB5B5","8FB5B6","8FB5B7","8FB5B8","8FB5B9","8FB5BA","8FB5BB","8FB5BC","8FB5BD","8FB5BE","8FB5BF","8FB5C0","8FB5C1","8FB5C2","8FB5C3","8FB5C4","8FB5C5","8FB5C6","8FB5C7","8FB5C8","8FB5C9","8FB5CA","8FB5CB","8FB5CC","8FB5CD","8FB5CE","8FB5CF","8FB5D0","8FB5D1","8FB5D2","8FB5D3","8FB5D4","8FB5D5","8FB5D6","8FB5D7","8FB5D8","8FB5D9","8FB5DA","8FB5DB","8FB5DC","8FB5DD","8FB5DE","8FB5DF","8FB5E0","8FB5E1","8FB5E2","8FB5E3","8FB5E4","8FB5E5","8FB5E6","8FB5E7","8FB5E8","8FB5E9","8FB5EA","8FB5EB","8FB5EC","8FB5ED","8FB5EE","8FB5EF","8FB5F0","8FB5F1","8FB5F2","8FB5F3","8FB5F4","8FB5F5","8FB5F6","8FB5F7","8FB5F8","8FB5F9","8FB5FA","8FB5FB","8FB5FC","8FB5FD","8FB5FE","8FB6A1","8FB6A2","8FB6A3","8FB6A4","8FB6A5","8FB6A6","8FB6A7","8FB6A8","8FB6A9","8FB6AA","8FB6AB","8FB6AC","8FB6AD","8FB6AE","8FB6AF","8FB6B0","8FB6B1","8FB6B2","8FB6B3","8FB6B4","8FB6B5","8FB6B6","8FB6B7","8FB6B8","8FB6B9","8FB6BA","8FB6BB","8FB6BC","8FB6BD","8FB6BE","8FB6BF","8FB6C0","8FB6C1","8FB6C2","8FB6C3","8FB6C4","8FB6C5","8FB6C6","8FB6C7","8FB6C8","8FB6C9","8FB6CA","8FB6CB","8FB6CC","8FB6CD","8FB6CE","8FB6CF","8FB6D0","8FB6D1","8FB6D2","8FB6D3","8FB6D4","8FB6D5","8FB6D6","8FB6D7","8FB6D8","8FB6D9","8FB6DA","8FB6DB","8FB6DC","8FB6DD","8FB6DE","8FB6DF","8FB6E0","8FB6E1","8FB6E2","8FB6E3","8FB6E4","8FB6E5","8FB6E6","8FB6E7","8FB6E8","8FB6E9","8FB6EA","8FB6EB","8FB6EC","8FB6ED","8FB6EE","8FB6EF","8FB6F0","8FB6F1","8FB6F2","8FB6F3","8FB6F4","8FB6F5","8FB6F6","8FB6F7","8FB6F8","8FB6F9","8FB6FA","8FB6FB","8FB6FC","8FB6FD","8FB6FE","8FB7A1","8FB7A2","8FB7A3","8FB7A4","8FB7A5","8FB7A6","8FB7A7","8FB7A8","8FB7A9","8FB7AA","8FB7AB","8FB7AC","8FB7AD","8FB7AE","8FB7AF","8FB7B0","8FB7B1","8FB7B2","8FB7B3","8FB7B4","8FB7B5","8FB7B6","8FB7B7","8FB7B8","8FB7B9","8FB7BA","8FB7BB","8FB7BC","8FB7BD","8FB7BE","8FB7BF","8FB7C0","8FB7C1","8FB7C2","8FB7C3","8FB7C4","8FB7C5","8FB7C6","8FB7C7","8FB7C8","8FB7C9","8FB7CA","8FB7CB","8FB7CC","8FB7CD","8FB7CE","8FB7CF","8FB7D0","8FB7D1","8FB7D2","8FB7D3","8FB7D4","8FB7D5","8FB7D6","8FB7D7","8FB7D8","8FB7D9","8FB7DA","8FB7DB","8FB7DC","8FB7DD","8FB7DE","8FB7DF","8FB7E0","8FB7E1","8FB7E2","8FB7E3","8FB7E4","8FB7E5","8FB7E6","8FB7E7","8FB7E8","8FB7E9","8FB7EA","8FB7EB","8FB7EC","8FB7ED","8FB7EE","8FB7EF","8FB7F0","8FB7F1","8FB7F2","8FB7F3","8FB7F4","8FB7F5","8FB7F6","8FB7F7","8FB7F8","8FB7F9","8FB7FA","8FB7FB","8FB7FC","8FB7FD","8FB7FE","8FB8A1","8FB8A2","8FB8A3","8FB8A4","8FB8A5","8FB8A6","8FB8A7","8FB8A8","8FB8A9","8FB8AA","8FB8AB","8FB8AC","8FB8AD","8FB8AE","8FB8AF","8FB8B0","8FB8B1","8FB8B2","8FB8B3","8FB8B4","8FB8B5","8FB8B6","8FB8B7","8FB8B8","8FB8B9","8FB8BA","8FB8BB","8FB8BC","8FB8BD","8FB8BE","8FB8BF","8FB8C0","8FB8C1","8FB8C2","8FB8C3","8FB8C4","8FB8C5","8FB8C6","8FB8C7","8FB8C8","8FB8C9","8FB8CA","8FB8CB","8FB8CC","8FB8CD","8FB8CE","8FB8CF","8FB8D0","8FB8D1","8FB8D2","8FB8D3","8FB8D4","8FB8D5","8FB8D6","8FB8D7","8FB8D8","8FB8D9","8FB8DA","8FB8DB","8FB8DC","8FB8DD","8FB8DE","8FB8DF","8FB8E0","8FB8E1","8FB8E2","8FB8E3","8FB8E4","8FB8E5","8FB8E6","8FB8E7","8FB8E8","8FB8E9","8FB8EA","8FB8EB","8FB8EC","8FB8ED","8FB8EE","8FB8EF","8FB8F0","8FB8F1","8FB8F2","8FB8F3","8FB8F4","8FB8F5","8FB8F6","8FB8F7","8FB8F8","8FB8F9","8FB8FA","8FB8FB","8FB8FC","8FB8FD","8FB8FE","8FB9A1","8FB9A2","8FB9A3","8FB9A4","8FB9A5","8FB9A6","8FB9A7","8FB9A8","8FB9A9","8FB9AA","8FB9AB","8FB9AC","8FB9AD","8FB9AE","8FB9AF","8FB9B0","8FB9B1","8FB9B2","8FB9B3","8FB9B4","8FB9B5","8FB9B6","8FB9B7","8FB9B8","8FB9B9","8FB9BA","8FB9BB","8FB9BC","8FB9BD","8FB9BE","8FB9BF","8FB9C0","8FB9C1","8FB9C2","8FB9C3","8FB9C4","8FB9C5","8FB9C6","8FB9C7","8FB9C8","8FB9C9","8FB9CA","8FB9CB","8FB9CC","8FB9CD","8FB9CE","8FB9CF","8FB9D0","8FB9D1","8FB9D2","8FB9D3","8FB9D4","8FB9D5","8FB9D6","8FB9D7","8FB9D8","8FB9D9","8FB9DA","8FB9DB","8FB9DC","8FB9DD","8FB9DE","8FB9DF","8FB9E0","8FB9E1","8FB9E2","8FB9E3","8FB9E4","8FB9E5","8FB9E6","8FB9E7","8FB9E8","8FB9E9","8FB9EA","8FB9EB","8FB9EC","8FB9ED","8FB9EE","8FB9EF","8FB9F0","8FB9F1","8FB9F2","8FB9F3","8FB9F4","8FB9F5","8FB9F6","8FB9F7","8FB9F8","8FB9F9","8FB9FA","8FB9FB","8FB9FC","8FB9FD","8FB9FE","8FBAA1","8FBAA2","8FBAA3","8FBAA4","8FBAA5","8FBAA6","8FBAA7","8FBAA8","8FBAA9","8FBAAA","8FBAAB","8FBAAC","8FBAAD","8FBAAE","8FBAAF","8FBAB0","8FBAB1","8FBAB2","8FBAB3","8FBAB4","8FBAB5","8FBAB6","8FBAB7","8FBAB8","8FBAB9","8FBABA","8FBABB","8FBABC","8FBABD","8FBABE","8FBABF","8FBAC0","8FBAC1","8FBAC2","8FBAC3","8FBAC4","8FBAC5","8FBAC6","8FBAC7","8FBAC8","8FBAC9","8FBACA","8FBACB","8FBACC","8FBACD","8FBACE","8FBACF","8FBAD0","8FBAD1","8FBAD2","8FBAD3","8FBAD4","8FBAD5","8FBAD6","8FBAD7","8FBAD8","8FBAD9","8FBADA","8FBADB","8FBADC","8FBADD","8FBADE","8FBADF","8FBAE0","8FBAE1","8FBAE2","8FBAE3","8FBAE4","8FBAE5","8FBAE6","8FBAE7","8FBAE8","8FBAE9","8FBAEA","8FBAEB","8FBAEC","8FBAED","8FBAEE","8FBAEF","8FBAF0","8FBAF1","8FBAF2","8FBAF3","8FBAF4","8FBAF5","8FBAF6","8FBAF7","8FBAF8","8FBAF9","8FBAFA","8FBAFB","8FBAFC","8FBAFD","8FBAFE","8FBBA1","8FBBA2","8FBBA3","8FBBA4","8FBBA5","8FBBA6","8FBBA7","8FBBA8","8FBBA9","8FBBAA","8FBBAB","8FBBAC","8FBBAD","8FBBAE","8FBBAF","8FBBB0","8FBBB1","8FBBB2","8FBBB3","8FBBB4","8FBBB5","8FBBB6","8FBBB7","8FBBB8","8FBBB9","8FBBBA","8FBBBB","8FBBBC","8FBBBD","8FBBBE","8FBBBF","8FBBC0","8FBBC1","8FBBC2","8FBBC3","8FBBC4","8FBBC5","8FBBC6","8FBBC7","8FBBC8","8FBBC9","8FBBCA","8FBBCB","8FBBCC","8FBBCD","8FBBCE","8FBBCF","8FBBD0","8FBBD1","8FBBD2","8FBBD3","8FBBD4","8FBBD5","8FBBD6","8FBBD7","8FBBD8","8FBBD9","8FBBDA","8FBBDB","8FBBDC","8FBBDD","8FBBDE","8FBBDF","8FBBE0","8FBBE1","8FBBE2","8FBBE3","8FBBE4","8FBBE5","8FBBE6","8FBBE7","8FBBE8","8FBBE9","8FBBEA","8FBBEB","8FBBEC","8FBBED","8FBBEE","8FBBEF","8FBBF0","8FBBF1","8FBBF2","8FBBF3","8FBBF4","8FBBF5","8FBBF6","8FBBF7","8FBBF8","8FBBF9","8FBBFA","8FBBFB","8FBBFC","8FBBFD","8FBBFE","8FBCA1","8FBCA2","8FBCA3","8FBCA4","8FBCA5","8FBCA6","8FBCA7","8FBCA8","8FBCA9","8FBCAA","8FBCAB","8FBCAC","8FBCAD","8FBCAE","8FBCAF","8FBCB0","8FBCB1","8FBCB2","8FBCB3","8FBCB4","8FBCB5","8FBCB6","8FBCB7","8FBCB8","8FBCB9","8FBCBA","8FBCBB","8FBCBC","8FBCBD","8FBCBE","8FBCBF","8FBCC0","8FBCC1","8FBCC2","8FBCC3","8FBCC4","8FBCC5","8FBCC6","8FBCC7","8FBCC8","8FBCC9","8FBCCA","8FBCCB","8FBCCC","8FBCCD","8FBCCE","8FBCCF","8FBCD0","8FBCD1","8FBCD2","8FBCD3","8FBCD4","8FBCD5","8FBCD6","8FBCD7","8FBCD8","8FBCD9","8FBCDA","8FBCDB","8FBCDC","8FBCDD","8FBCDE","8FBCDF","8FBCE0","8FBCE1","8FBCE2","8FBCE3","8FBCE4","8FBCE5","8FBCE6","8FBCE7","8FBCE8","8FBCE9","8FBCEA","8FBCEB","8FBCEC","8FBCED","8FBCEE","8FBCEF","8FBCF0","8FBCF1","8FBCF2","8FBCF3","8FBCF4","8FBCF5","8FBCF6","8FBCF7","8FBCF8","8FBCF9","8FBCFA","8FBCFB","8FBCFC","8FBCFD","8FBCFE","8FBDA1","8FBDA2","8FBDA3","8FBDA4","8FBDA5","8FBDA6","8FBDA7","8FBDA8","8FBDA9","8FBDAA","8FBDAB","8FBDAC","8FBDAD","8FBDAE","8FBDAF","8FBDB0","8FBDB1","8FBDB2","8FBDB3","8FBDB4","8FBDB5","8FBDB6","8FBDB7","8FBDB8","8FBDB9","8FBDBA","8FBDBB","8FBDBC","8FBDBD","8FBDBE","8FBDBF","8FBDC0","8FBDC1","8FBDC2","8FBDC3","8FBDC4","8FBDC5","8FBDC6","8FBDC7","8FBDC8","8FBDC9","8FBDCA","8FBDCB","8FBDCC","8FBDCD","8FBDCE","8FBDCF","8FBDD0","8FBDD1","8FBDD2","8FBDD3","8FBDD4","8FBDD5","8FBDD6","8FBDD7","8FBDD8","8FBDD9","8FBDDA","8FBDDB","8FBDDC","8FBDDD","8FBDDE","8FBDDF","8FBDE0","8FBDE1","8FBDE2","8FBDE3","8FBDE4","8FBDE5","8FBDE6","8FBDE7","8FBDE8","8FBDE9","8FBDEA","8FBDEB","8FBDEC","8FBDED","8FBDEE","8FBDEF","8FBDF0","8FBDF1","8FBDF2","8FBDF3","8FBDF4","8FBDF5","8FBDF6","8FBDF7","8FBDF8","8FBDF9","8FBDFA","8FBDFB","8FBDFC","8FBDFD","8FBDFE","8FBEA1","8FBEA2","8FBEA3","8FBEA4","8FBEA5","8FBEA6","8FBEA7","8FBEA8","8FBEA9","8FBEAA","8FBEAB","8FBEAC","8FBEAD","8FBEAE","8FBEAF","8FBEB0","8FBEB1","8FBEB2","8FBEB3","8FBEB4","8FBEB5","8FBEB6","8FBEB7","8FBEB8","8FBEB9","8FBEBA","8FBEBB","8FBEBC","8FBEBD","8FBEBE","8FBEBF","8FBEC0","8FBEC1","8FBEC2","8FBEC3","8FBEC4","8FBEC5","8FBEC6","8FBEC7","8FBEC8","8FBEC9","8FBECA","8FBECB","8FBECC","8FBECD","8FBECE","8FBECF","8FBED0","8FBED1","8FBED2","8FBED3","8FBED4","8FBED5","8FBED6","8FBED7","8FBED8","8FBED9","8FBEDA","8FBEDB","8FBEDC","8FBEDD","8FBEDE","8FBEDF","8FBEE0","8FBEE1","8FBEE2","8FBEE3","8FBEE4","8FBEE5","8FBEE6","8FBEE7","8FBEE8","8FBEE9","8FBEEA","8FBEEB","8FBEEC","8FBEED","8FBEEE","8FBEEF","8FBEF0","8FBEF1","8FBEF2","8FBEF3","8FBEF4","8FBEF5","8FBEF6","8FBEF7","8FBEF8","8FBEF9","8FBEFA","8FBEFB","8FBEFC","8FBEFD","8FBEFE","8FBFA1","8FBFA2","8FBFA3","8FBFA4","8FBFA5","8FBFA6","8FBFA7","8FBFA8","8FBFA9","8FBFAA","8FBFAB","8FBFAC","8FBFAD","8FBFAE","8FBFAF","8FBFB0","8FBFB1","8FBFB2","8FBFB3","8FBFB4","8FBFB5","8FBFB6","8FBFB7","8FBFB8","8FBFB9","8FBFBA","8FBFBB","8FBFBC","8FBFBD","8FBFBE","8FBFBF","8FBFC0","8FBFC1","8FBFC2","8FBFC3","8FBFC4","8FBFC5","8FBFC6","8FBFC7","8FBFC8","8FBFC9","8FBFCA","8FBFCB","8FBFCC","8FBFCD","8FBFCE","8FBFCF","8FBFD0","8FBFD1","8FBFD2","8FBFD3","8FBFD4","8FBFD5","8FBFD6","8FBFD7","8FBFD8","8FBFD9","8FBFDA","8FBFDB","8FBFDC","8FBFDD","8FBFDE","8FBFDF","8FBFE0","8FBFE1","8FBFE2","8FBFE3","8FBFE4","8FBFE5","8FBFE6","8FBFE7","8FBFE8","8FBFE9","8FBFEA","8FBFEB","8FBFEC","8FBFED","8FBFEE","8FBFEF","8FBFF0","8FBFF1","8FBFF2","8FBFF3","8FBFF4","8FBFF5","8FBFF6","8FBFF7","8FBFF8","8FBFF9","8FBFFA","8FBFFB","8FBFFC","8FBFFD","8FBFFE","8FC0A1","8FC0A2","8FC0A3","8FC0A4","8FC0A5","8FC0A6","8FC0A7","8FC0A8","8FC0A9","8FC0AA","8FC0AB","8FC0AC","8FC0AD","8FC0AE","8FC0AF","8FC0B0","8FC0B1","8FC0B2","8FC0B3","8FC0B4","8FC0B5","8FC0B6","8FC0B7","8FC0B8","8FC0B9","8FC0BA","8FC0BB","8FC0BC","8FC0BD","8FC0BE","8FC0BF","8FC0C0","8FC0C1","8FC0C2","8FC0C3","8FC0C4","8FC0C5","8FC0C6","8FC0C7","8FC0C8","8FC0C9","8FC0CA","8FC0CB","8FC0CC","8FC0CD","8FC0CE","8FC0CF","8FC0D0","8FC0D1","8FC0D2","8FC0D3","8FC0D4","8FC0D5","8FC0D6","8FC0D7","8FC0D8","8FC0D9","8FC0DA","8FC0DB","8FC0DC","8FC0DD","8FC0DE","8FC0DF","8FC0E0","8FC0E1","8FC0E2","8FC0E3","8FC0E4","8FC0E5","8FC0E6","8FC0E7","8FC0E8","8FC0E9","8FC0EA","8FC0EB","8FC0EC","8FC0ED","8FC0EE","8FC0EF","8FC0F0","8FC0F1","8FC0F2","8FC0F3","8FC0F4","8FC0F5","8FC0F6","8FC0F7","8FC0F8","8FC0F9","8FC0FA","8FC0FB","8FC0FC","8FC0FD","8FC0FE","8FC1A1","8FC1A2","8FC1A3","8FC1A4","8FC1A5","8FC1A6","8FC1A7","8FC1A8","8FC1A9","8FC1AA","8FC1AB","8FC1AC","8FC1AD","8FC1AE","8FC1AF","8FC1B0","8FC1B1","8FC1B2","8FC1B3","8FC1B4","8FC1B5","8FC1B6","8FC1B7","8FC1B8","8FC1B9","8FC1BA","8FC1BB","8FC1BC","8FC1BD","8FC1BE","8FC1BF","8FC1C0","8FC1C1","8FC1C2","8FC1C3","8FC1C4","8FC1C5","8FC1C6","8FC1C7","8FC1C8","8FC1C9","8FC1CA","8FC1CB","8FC1CC","8FC1CD","8FC1CE","8FC1CF","8FC1D0","8FC1D1","8FC1D2","8FC1D3","8FC1D4","8FC1D5","8FC1D6","8FC1D7","8FC1D8","8FC1D9","8FC1DA","8FC1DB","8FC1DC","8FC1DD","8FC1DE","8FC1DF","8FC1E0","8FC1E1","8FC1E2","8FC1E3","8FC1E4","8FC1E5","8FC1E6","8FC1E7","8FC1E8","8FC1E9","8FC1EA","8FC1EB","8FC1EC","8FC1ED","8FC1EE","8FC1EF","8FC1F0","8FC1F1","8FC1F2","8FC1F3","8FC1F4","8FC1F5","8FC1F6","8FC1F7","8FC1F8","8FC1F9","8FC1FA","8FC1FB","8FC1FC","8FC1FD","8FC1FE","8FC2A1","8FC2A2","8FC2A3","8FC2A4","8FC2A5","8FC2A6","8FC2A7","8FC2A8","8FC2A9","8FC2AA","8FC2AB","8FC2AC","8FC2AD","8FC2AE","8FC2AF","8FC2B0","8FC2B1","8FC2B2","8FC2B3","8FC2B4","8FC2B5","8FC2B6","8FC2B7","8FC2B8","8FC2B9","8FC2BA","8FC2BB","8FC2BC","8FC2BD","8FC2BE","8FC2BF","8FC2C0","8FC2C1","8FC2C2","8FC2C3","8FC2C4","8FC2C5","8FC2C6","8FC2C7","8FC2C8","8FC2C9","8FC2CA","8FC2CB","8FC2CC","8FC2CD","8FC2CE","8FC2CF","8FC2D0","8FC2D1","8FC2D2","8FC2D3","8FC2D4","8FC2D5","8FC2D6","8FC2D7","8FC2D8","8FC2D9","8FC2DA","8FC2DB","8FC2DC","8FC2DD","8FC2DE","8FC2DF","8FC2E0","8FC2E1","8FC2E2","8FC2E3","8FC2E4","8FC2E5","8FC2E6","8FC2E7","8FC2E8","8FC2E9","8FC2EA","8FC2EB","8FC2EC","8FC2ED","8FC2EE","8FC2EF","8FC2F0","8FC2F1","8FC2F2","8FC2F3","8FC2F4","8FC2F5","8FC2F6","8FC2F7","8FC2F8","8FC2F9","8FC2FA","8FC2FB","8FC2FC","8FC2FD","8FC2FE","8FC3A1","8FC3A2","8FC3A3","8FC3A4","8FC3A5","8FC3A6","8FC3A7","8FC3A8","8FC3A9","8FC3AA","8FC3AB","8FC3AC","8FC3AD","8FC3AE","8FC3AF","8FC3B0","8FC3B1","8FC3B2","8FC3B3","8FC3B4","8FC3B5","8FC3B6","8FC3B7","8FC3B8","8FC3B9","8FC3BA","8FC3BB","8FC3BC","8FC3BD","8FC3BE","8FC3BF","8FC3C0","8FC3C1","8FC3C2","8FC3C3","8FC3C4","8FC3C5","8FC3C6","8FC3C7","8FC3C8","8FC3C9","8FC3CA","8FC3CB","8FC3CC","8FC3CD","8FC3CE","8FC3CF","8FC3D0","8FC3D1","8FC3D2","8FC3D3","8FC3D4","8FC3D5","8FC3D6","8FC3D7","8FC3D8","8FC3D9","8FC3DA","8FC3DB","8FC3DC","8FC3DD","8FC3DE","8FC3DF","8FC3E0","8FC3E1","8FC3E2","8FC3E3","8FC3E4","8FC3E5","8FC3E6","8FC3E7","8FC3E8","8FC3E9","8FC3EA","8FC3EB","8FC3EC","8FC3ED","8FC3EE","8FC3EF","8FC3F0","8FC3F1","8FC3F2","8FC3F3","8FC3F4","8FC3F5","8FC3F6","8FC3F7","8FC3F8","8FC3F9","8FC3FA","8FC3FB","8FC3FC","8FC3FD","8FC3FE","8FC4A1","8FC4A2","8FC4A3","8FC4A4","8FC4A5","8FC4A6","8FC4A7","8FC4A8","8FC4A9","8FC4AA","8FC4AB","8FC4AC","8FC4AD","8FC4AE","8FC4AF","8FC4B0","8FC4B1","8FC4B2","8FC4B3","8FC4B4","8FC4B5","8FC4B6","8FC4B7","8FC4B8","8FC4B9","8FC4BA","8FC4BB","8FC4BC","8FC4BD","8FC4BE","8FC4BF","8FC4C0","8FC4C1","8FC4C2","8FC4C3","8FC4C4","8FC4C5","8FC4C6","8FC4C7","8FC4C8","8FC4C9","8FC4CA","8FC4CB","8FC4CC","8FC4CD","8FC4CE","8FC4CF","8FC4D0","8FC4D1","8FC4D2","8FC4D3","8FC4D4","8FC4D5","8FC4D6","8FC4D7","8FC4D8","8FC4D9","8FC4DA","8FC4DB","8FC4DC","8FC4DD","8FC4DE","8FC4DF","8FC4E0","8FC4E1","8FC4E2","8FC4E3","8FC4E4","8FC4E5","8FC4E6","8FC4E7","8FC4E8","8FC4E9","8FC4EA","8FC4EB","8FC4EC","8FC4ED","8FC4EE","8FC4EF","8FC4F0","8FC4F1","8FC4F2","8FC4F3","8FC4F4","8FC4F5","8FC4F6","8FC4F7","8FC4F8","8FC4F9","8FC4FA","8FC4FB","8FC4FC","8FC4FD","8FC4FE","8FC5A1","8FC5A2","8FC5A3","8FC5A4","8FC5A5","8FC5A6","8FC5A7","8FC5A8","8FC5A9","8FC5AA","8FC5AB","8FC5AC","8FC5AD","8FC5AE","8FC5AF","8FC5B0","8FC5B1","8FC5B2","8FC5B3","8FC5B4","8FC5B5","8FC5B6","8FC5B7","8FC5B8","8FC5B9","8FC5BA","8FC5BB","8FC5BC","8FC5BD","8FC5BE","8FC5BF","8FC5C0","8FC5C1","8FC5C2","8FC5C3","8FC5C4","8FC5C5","8FC5C6","8FC5C7","8FC5C8","8FC5C9","8FC5CA","8FC5CB","8FC5CC","8FC5CD","8FC5CE","8FC5CF","8FC5D0","8FC5D1","8FC5D2","8FC5D3","8FC5D4","8FC5D5","8FC5D6","8FC5D7","8FC5D8","8FC5D9","8FC5DA","8FC5DB","8FC5DC","8FC5DD","8FC5DE","8FC5DF","8FC5E0","8FC5E1","8FC5E2","8FC5E3","8FC5E4","8FC5E5","8FC5E6","8FC5E7","8FC5E8","8FC5E9","8FC5EA","8FC5EB","8FC5EC","8FC5ED","8FC5EE","8FC5EF","8FC5F0","8FC5F1","8FC5F2","8FC5F3","8FC5F4","8FC5F5","8FC5F6","8FC5F7","8FC5F8","8FC5F9","8FC5FA","8FC5FB","8FC5FC","8FC5FD","8FC5FE","8FC6A1","8FC6A2","8FC6A3","8FC6A4","8FC6A5","8FC6A6","8FC6A7","8FC6A8","8FC6A9","8FC6AA","8FC6AB","8FC6AC","8FC6AD","8FC6AE","8FC6AF","8FC6B0","8FC6B1","8FC6B2","8FC6B3","8FC6B4","8FC6B5","8FC6B6","8FC6B7","8FC6B8","8FC6B9","8FC6BA","8FC6BB","8FC6BC","8FC6BD","8FC6BE","8FC6BF","8FC6C0","8FC6C1","8FC6C2","8FC6C3","8FC6C4","8FC6C5","8FC6C6","8FC6C7","8FC6C8","8FC6C9","8FC6CA","8FC6CB","8FC6CC","8FC6CD","8FC6CE","8FC6CF","8FC6D0","8FC6D1","8FC6D2","8FC6D3","8FC6D4","8FC6D5","8FC6D6","8FC6D7","8FC6D8","8FC6D9","8FC6DA","8FC6DB","8FC6DC","8FC6DD","8FC6DE","8FC6DF","8FC6E0","8FC6E1","8FC6E2","8FC6E3","8FC6E4","8FC6E5","8FC6E6","8FC6E7","8FC6E8","8FC6E9","8FC6EA","8FC6EB","8FC6EC","8FC6ED","8FC6EE","8FC6EF","8FC6F0","8FC6F1","8FC6F2","8FC6F3","8FC6F4","8FC6F5","8FC6F6","8FC6F7","8FC6F8","8FC6F9","8FC6FA","8FC6FB","8FC6FC","8FC6FD","8FC6FE","8FC7A1","8FC7A2","8FC7A3","8FC7A4","8FC7A5","8FC7A6","8FC7A7","8FC7A8","8FC7A9","8FC7AA","8FC7AB","8FC7AC","8FC7AD","8FC7AE","8FC7AF","8FC7B0","8FC7B1","8FC7B2","8FC7B3","8FC7B4","8FC7B5","8FC7B6","8FC7B7","8FC7B8","8FC7B9","8FC7BA","8FC7BB","8FC7BC","8FC7BD","8FC7BE","8FC7BF","8FC7C0","8FC7C1","8FC7C2","8FC7C3","8FC7C4","8FC7C5","8FC7C6","8FC7C7","8FC7C8","8FC7C9","8FC7CA","8FC7CB","8FC7CC","8FC7CD","8FC7CE","8FC7CF","8FC7D0","8FC7D1","8FC7D2","8FC7D3","8FC7D4","8FC7D5","8FC7D6","8FC7D7","8FC7D8","8FC7D9","8FC7DA","8FC7DB","8FC7DC","8FC7DD","8FC7DE","8FC7DF","8FC7E0","8FC7E1","8FC7E2","8FC7E3","8FC7E4","8FC7E5","8FC7E6","8FC7E7","8FC7E8","8FC7E9","8FC7EA","8FC7EB","8FC7EC","8FC7ED","8FC7EE","8FC7EF","8FC7F0","8FC7F1","8FC7F2","8FC7F3","8FC7F4","8FC7F5","8FC7F6","8FC7F7","8FC7F8","8FC7F9","8FC7FA","8FC7FB","8FC7FC","8FC7FD","8FC7FE","8FC8A1","8FC8A2","8FC8A3","8FC8A4","8FC8A5","8FC8A6","8FC8A7","8FC8A8","8FC8A9","8FC8AA","8FC8AB","8FC8AC","8FC8AD","8FC8AE","8FC8AF","8FC8B0","8FC8B1","8FC8B2","8FC8B3","8FC8B4","8FC8B5","8FC8B6","8FC8B7","8FC8B8","8FC8B9","8FC8BA","8FC8BB","8FC8BC","8FC8BD","8FC8BE","8FC8BF","8FC8C0","8FC8C1","8FC8C2","8FC8C3","8FC8C4","8FC8C5","8FC8C6","8FC8C7","8FC8C8","8FC8C9","8FC8CA","8FC8CB","8FC8CC","8FC8CD","8FC8CE","8FC8CF","8FC8D0","8FC8D1","8FC8D2","8FC8D3","8FC8D4","8FC8D5","8FC8D6","8FC8D7","8FC8D8","8FC8D9","8FC8DA","8FC8DB","8FC8DC","8FC8DD","8FC8DE","8FC8DF","8FC8E0","8FC8E1","8FC8E2","8FC8E3","8FC8E4","8FC8E5","8FC8E6","8FC8E7","8FC8E8","8FC8E9","8FC8EA","8FC8EB","8FC8EC","8FC8ED","8FC8EE","8FC8EF","8FC8F0","8FC8F1","8FC8F2","8FC8F3","8FC8F4","8FC8F5","8FC8F6","8FC8F7","8FC8F8","8FC8F9","8FC8FA","8FC8FB","8FC8FC","8FC8FD","8FC8FE","8FC9A1","8FC9A2","8FC9A3","8FC9A4","8FC9A5","8FC9A6","8FC9A7","8FC9A8","8FC9A9","8FC9AA","8FC9AB","8FC9AC","8FC9AD","8FC9AE","8FC9AF","8FC9B0","8FC9B1","8FC9B2","8FC9B3","8FC9B4","8FC9B5","8FC9B6","8FC9B7","8FC9B8","8FC9B9","8FC9BA","8FC9BB","8FC9BC","8FC9BD","8FC9BE","8FC9BF","8FC9C0","8FC9C1","8FC9C2","8FC9C3","8FC9C4","8FC9C5","8FC9C6","8FC9C7","8FC9C8","8FC9C9","8FC9CA","8FC9CB","8FC9CC","8FC9CD","8FC9CE","8FC9CF","8FC9D0","8FC9D1","8FC9D2","8FC9D3","8FC9D4","8FC9D5","8FC9D6","8FC9D7","8FC9D8","8FC9D9","8FC9DA","8FC9DB","8FC9DC","8FC9DD","8FC9DE","8FC9DF","8FC9E0","8FC9E1","8FC9E2","8FC9E3","8FC9E4","8FC9E5","8FC9E6","8FC9E7","8FC9E8","8FC9E9","8FC9EA","8FC9EB","8FC9EC","8FC9ED","8FC9EE","8FC9EF","8FC9F0","8FC9F1","8FC9F2","8FC9F3","8FC9F4","8FC9F5","8FC9F6","8FC9F7","8FC9F8","8FC9F9","8FC9FA","8FC9FB","8FC9FC","8FC9FD","8FC9FE","8FCAA1","8FCAA2","8FCAA3","8FCAA4","8FCAA5","8FCAA6","8FCAA7","8FCAA8","8FCAA9","8FCAAA","8FCAAB","8FCAAC","8FCAAD","8FCAAE","8FCAAF","8FCAB0","8FCAB1","8FCAB2","8FCAB3","8FCAB4","8FCAB5","8FCAB6","8FCAB7","8FCAB8","8FCAB9","8FCABA","8FCABB","8FCABC","8FCABD","8FCABE","8FCABF","8FCAC0","8FCAC1","8FCAC2","8FCAC3","8FCAC4","8FCAC5","8FCAC6","8FCAC7","8FCAC8","8FCAC9","8FCACA","8FCACB","8FCACC","8FCACD","8FCACE","8FCACF","8FCAD0","8FCAD1","8FCAD2","8FCAD3","8FCAD4","8FCAD5","8FCAD6","8FCAD7","8FCAD8","8FCAD9","8FCADA","8FCADB","8FCADC","8FCADD","8FCADE","8FCADF","8FCAE0","8FCAE1","8FCAE2","8FCAE3","8FCAE4","8FCAE5","8FCAE6","8FCAE7","8FCAE8","8FCAE9","8FCAEA","8FCAEB","8FCAEC","8FCAED","8FCAEE","8FCAEF","8FCAF0","8FCAF1","8FCAF2","8FCAF3","8FCAF4","8FCAF5","8FCAF6","8FCAF7","8FCAF8","8FCAF9","8FCAFA","8FCAFB","8FCAFC","8FCAFD","8FCAFE","8FCBA1","8FCBA2","8FCBA3","8FCBA4","8FCBA5","8FCBA6","8FCBA7","8FCBA8","8FCBA9","8FCBAA","8FCBAB","8FCBAC","8FCBAD","8FCBAE","8FCBAF","8FCBB0","8FCBB1","8FCBB2","8FCBB3","8FCBB4","8FCBB5","8FCBB6","8FCBB7","8FCBB8","8FCBB9","8FCBBA","8FCBBB","8FCBBC","8FCBBD","8FCBBE","8FCBBF","8FCBC0","8FCBC1","8FCBC2","8FCBC3","8FCBC4","8FCBC5","8FCBC6","8FCBC7","8FCBC8","8FCBC9","8FCBCA","8FCBCB","8FCBCC","8FCBCD","8FCBCE","8FCBCF","8FCBD0","8FCBD1","8FCBD2","8FCBD3","8FCBD4","8FCBD5","8FCBD6","8FCBD7","8FCBD8","8FCBD9","8FCBDA","8FCBDB","8FCBDC","8FCBDD","8FCBDE","8FCBDF","8FCBE0","8FCBE1","8FCBE2","8FCBE3","8FCBE4","8FCBE5","8FCBE6","8FCBE7","8FCBE8","8FCBE9","8FCBEA","8FCBEB","8FCBEC","8FCBED","8FCBEE","8FCBEF","8FCBF0","8FCBF1","8FCBF2","8FCBF3","8FCBF4","8FCBF5","8FCBF6","8FCBF7","8FCBF8","8FCBF9","8FCBFA","8FCBFB","8FCBFC","8FCBFD","8FCBFE","8FCCA1","8FCCA2","8FCCA3","8FCCA4","8FCCA5","8FCCA6","8FCCA7","8FCCA8","8FCCA9","8FCCAA","8FCCAB","8FCCAC","8FCCAD","8FCCAE","8FCCAF","8FCCB0","8FCCB1","8FCCB2","8FCCB3","8FCCB4","8FCCB5","8FCCB6","8FCCB7","8FCCB8","8FCCB9","8FCCBA","8FCCBB","8FCCBC","8FCCBD","8FCCBE","8FCCBF","8FCCC0","8FCCC1","8FCCC2","8FCCC3","8FCCC4","8FCCC5","8FCCC6","8FCCC7","8FCCC8","8FCCC9","8FCCCA","8FCCCB","8FCCCC","8FCCCD","8FCCCE","8FCCCF","8FCCD0","8FCCD1","8FCCD2","8FCCD3","8FCCD4","8FCCD5","8FCCD6","8FCCD7","8FCCD8","8FCCD9","8FCCDA","8FCCDB","8FCCDC","8FCCDD","8FCCDE","8FCCDF","8FCCE0","8FCCE1","8FCCE2","8FCCE3","8FCCE4","8FCCE5","8FCCE6","8FCCE7","8FCCE8","8FCCE9","8FCCEA","8FCCEB","8FCCEC","8FCCED","8FCCEE","8FCCEF","8FCCF0","8FCCF1","8FCCF2","8FCCF3","8FCCF4","8FCCF5","8FCCF6","8FCCF7","8FCCF8","8FCCF9","8FCCFA","8FCCFB","8FCCFC","8FCCFD","8FCCFE","8FCDA1","8FCDA2","8FCDA3","8FCDA4","8FCDA5","8FCDA6","8FCDA7","8FCDA8","8FCDA9","8FCDAA","8FCDAB","8FCDAC","8FCDAD","8FCDAE","8FCDAF","8FCDB0","8FCDB1","8FCDB2","8FCDB3","8FCDB4","8FCDB5","8FCDB6","8FCDB7","8FCDB8","8FCDB9","8FCDBA","8FCDBB","8FCDBC","8FCDBD","8FCDBE","8FCDBF","8FCDC0","8FCDC1","8FCDC2","8FCDC3","8FCDC4","8FCDC5","8FCDC6","8FCDC7","8FCDC8","8FCDC9","8FCDCA","8FCDCB","8FCDCC","8FCDCD","8FCDCE","8FCDCF","8FCDD0","8FCDD1","8FCDD2","8FCDD3","8FCDD4","8FCDD5","8FCDD6","8FCDD7","8FCDD8","8FCDD9","8FCDDA","8FCDDB","8FCDDC","8FCDDD","8FCDDE","8FCDDF","8FCDE0","8FCDE1","8FCDE2","8FCDE3","8FCDE4","8FCDE5","8FCDE6","8FCDE7","8FCDE8","8FCDE9","8FCDEA","8FCDEB","8FCDEC","8FCDED","8FCDEE","8FCDEF","8FCDF0","8FCDF1","8FCDF2","8FCDF3","8FCDF4","8FCDF5","8FCDF6","8FCDF7","8FCDF8","8FCDF9","8FCDFA","8FCDFB","8FCDFC","8FCDFD","8FCDFE","8FCEA1","8FCEA2","8FCEA3","8FCEA4","8FCEA5","8FCEA6","8FCEA7","8FCEA8","8FCEA9","8FCEAA","8FCEAB","8FCEAC","8FCEAD","8FCEAE","8FCEAF","8FCEB0","8FCEB1","8FCEB2","8FCEB3","8FCEB4","8FCEB5","8FCEB6","8FCEB7","8FCEB8","8FCEB9","8FCEBA","8FCEBB","8FCEBC","8FCEBD","8FCEBE","8FCEBF","8FCEC0","8FCEC1","8FCEC2","8FCEC3","8FCEC4","8FCEC5","8FCEC6","8FCEC7","8FCEC8","8FCEC9","8FCECA","8FCECB","8FCECC","8FCECD","8FCECE","8FCECF","8FCED0","8FCED1","8FCED2","8FCED3","8FCED4","8FCED5","8FCED6","8FCED7","8FCED8","8FCED9","8FCEDA","8FCEDB","8FCEDC","8FCEDD","8FCEDE","8FCEDF","8FCEE0","8FCEE1","8FCEE2","8FCEE3","8FCEE4","8FCEE5","8FCEE6","8FCEE7","8FCEE8","8FCEE9","8FCEEA","8FCEEB","8FCEEC","8FCEED","8FCEEE","8FCEEF","8FCEF0","8FCEF1","8FCEF2","8FCEF3","8FCEF4","8FCEF5","8FCEF6","8FCEF7","8FCEF8","8FCEF9","8FCEFA","8FCEFB","8FCEFC","8FCEFD","8FCEFE","8FCFA1","8FCFA2","8FCFA3","8FCFA4","8FCFA5","8FCFA6","8FCFA7","8FCFA8","8FCFA9","8FCFAA","8FCFAB","8FCFAC","8FCFAD","8FCFAE","8FCFAF","8FCFB0","8FCFB1","8FCFB2","8FCFB3","8FCFB4","8FCFB5","8FCFB6","8FCFB7","8FCFB8","8FCFB9","8FCFBA","8FCFBB","8FCFBC","8FCFBD","8FCFBE","8FCFBF","8FCFC0","8FCFC1","8FCFC2","8FCFC3","8FCFC4","8FCFC5","8FCFC6","8FCFC7","8FCFC8","8FCFC9","8FCFCA","8FCFCB","8FCFCC","8FCFCD","8FCFCE","8FCFCF","8FCFD0","8FCFD1","8FCFD2","8FCFD3","8FCFD4","8FCFD5","8FCFD6","8FCFD7","8FCFD8","8FCFD9","8FCFDA","8FCFDB","8FCFDC","8FCFDD","8FCFDE","8FCFDF","8FCFE0","8FCFE1","8FCFE2","8FCFE3","8FCFE4","8FCFE5","8FCFE6","8FCFE7","8FCFE8","8FCFE9","8FCFEA","8FCFEB","8FCFEC","8FCFED","8FCFEE","8FCFEF","8FCFF0","8FCFF1","8FCFF2","8FCFF3","8FCFF4","8FCFF5","8FCFF6","8FCFF7","8FCFF8","8FCFF9","8FCFFA","8FCFFB","8FCFFC","8FCFFD","8FCFFE","8FD0A1","8FD0A2","8FD0A3","8FD0A4","8FD0A5","8FD0A6","8FD0A7","8FD0A8","8FD0A9","8FD0AA","8FD0AB","8FD0AC","8FD0AD","8FD0AE","8FD0AF","8FD0B0","8FD0B1","8FD0B2","8FD0B3","8FD0B4","8FD0B5","8FD0B6","8FD0B7","8FD0B8","8FD0B9","8FD0BA","8FD0BB","8FD0BC","8FD0BD","8FD0BE","8FD0BF","8FD0C0","8FD0C1","8FD0C2","8FD0C3","8FD0C4","8FD0C5","8FD0C6","8FD0C7","8FD0C8","8FD0C9","8FD0CA","8FD0CB","8FD0CC","8FD0CD","8FD0CE","8FD0CF","8FD0D0","8FD0D1","8FD0D2","8FD0D3","8FD0D4","8FD0D5","8FD0D6","8FD0D7","8FD0D8","8FD0D9","8FD0DA","8FD0DB","8FD0DC","8FD0DD","8FD0DE","8FD0DF","8FD0E0","8FD0E1","8FD0E2","8FD0E3","8FD0E4","8FD0E5","8FD0E6","8FD0E7","8FD0E8","8FD0E9","8FD0EA","8FD0EB","8FD0EC","8FD0ED","8FD0EE","8FD0EF","8FD0F0","8FD0F1","8FD0F2","8FD0F3","8FD0F4","8FD0F5","8FD0F6","8FD0F7","8FD0F8","8FD0F9","8FD0FA","8FD0FB","8FD0FC","8FD0FD","8FD0FE","8FD1A1","8FD1A2","8FD1A3","8FD1A4","8FD1A5","8FD1A6","8FD1A7","8FD1A8","8FD1A9","8FD1AA","8FD1AB","8FD1AC","8FD1AD","8FD1AE","8FD1AF","8FD1B0","8FD1B1","8FD1B2","8FD1B3","8FD1B4","8FD1B5","8FD1B6","8FD1B7","8FD1B8","8FD1B9","8FD1BA","8FD1BB","8FD1BC","8FD1BD","8FD1BE","8FD1BF","8FD1C0","8FD1C1","8FD1C2","8FD1C3","8FD1C4","8FD1C5","8FD1C6","8FD1C7","8FD1C8","8FD1C9","8FD1CA","8FD1CB","8FD1CC","8FD1CD","8FD1CE","8FD1CF","8FD1D0","8FD1D1","8FD1D2","8FD1D3","8FD1D4","8FD1D5","8FD1D6","8FD1D7","8FD1D8","8FD1D9","8FD1DA","8FD1DB","8FD1DC","8FD1DD","8FD1DE","8FD1DF","8FD1E0","8FD1E1","8FD1E2","8FD1E3","8FD1E4","8FD1E5","8FD1E6","8FD1E7","8FD1E8","8FD1E9","8FD1EA","8FD1EB","8FD1EC","8FD1ED","8FD1EE","8FD1EF","8FD1F0","8FD1F1","8FD1F2","8FD1F3","8FD1F4","8FD1F5","8FD1F6","8FD1F7","8FD1F8","8FD1F9","8FD1FA","8FD1FB","8FD1FC","8FD1FD","8FD1FE","8FD2A1","8FD2A2","8FD2A3","8FD2A4","8FD2A5","8FD2A6","8FD2A7","8FD2A8","8FD2A9","8FD2AA","8FD2AB","8FD2AC","8FD2AD","8FD2AE","8FD2AF","8FD2B0","8FD2B1","8FD2B2","8FD2B3","8FD2B4","8FD2B5","8FD2B6","8FD2B7","8FD2B8","8FD2B9","8FD2BA","8FD2BB","8FD2BC","8FD2BD","8FD2BE","8FD2BF","8FD2C0","8FD2C1","8FD2C2","8FD2C3","8FD2C4","8FD2C5","8FD2C6","8FD2C7","8FD2C8","8FD2C9","8FD2CA","8FD2CB","8FD2CC","8FD2CD","8FD2CE","8FD2CF","8FD2D0","8FD2D1","8FD2D2","8FD2D3","8FD2D4","8FD2D5","8FD2D6","8FD2D7","8FD2D8","8FD2D9","8FD2DA","8FD2DB","8FD2DC","8FD2DD","8FD2DE","8FD2DF","8FD2E0","8FD2E1","8FD2E2","8FD2E3","8FD2E4","8FD2E5","8FD2E6","8FD2E7","8FD2E8","8FD2E9","8FD2EA","8FD2EB","8FD2EC","8FD2ED","8FD2EE","8FD2EF","8FD2F0","8FD2F1","8FD2F2","8FD2F3","8FD2F4","8FD2F5","8FD2F6","8FD2F7","8FD2F8","8FD2F9","8FD2FA","8FD2FB","8FD2FC","8FD2FD","8FD2FE","8FD3A1","8FD3A2","8FD3A3","8FD3A4","8FD3A5","8FD3A6","8FD3A7","8FD3A8","8FD3A9","8FD3AA","8FD3AB","8FD3AC","8FD3AD","8FD3AE","8FD3AF","8FD3B0","8FD3B1","8FD3B2","8FD3B3","8FD3B4","8FD3B5","8FD3B6","8FD3B7","8FD3B8","8FD3B9","8FD3BA","8FD3BB","8FD3BC","8FD3BD","8FD3BE","8FD3BF","8FD3C0","8FD3C1","8FD3C2","8FD3C3","8FD3C4","8FD3C5","8FD3C6","8FD3C7","8FD3C8","8FD3C9","8FD3CA","8FD3CB","8FD3CC","8FD3CD","8FD3CE","8FD3CF","8FD3D0","8FD3D1","8FD3D2","8FD3D3","8FD3D4","8FD3D5","8FD3D6","8FD3D7","8FD3D8","8FD3D9","8FD3DA","8FD3DB","8FD3DC","8FD3DD","8FD3DE","8FD3DF","8FD3E0","8FD3E1","8FD3E2","8FD3E3","8FD3E4","8FD3E5","8FD3E6","8FD3E7","8FD3E8","8FD3E9","8FD3EA","8FD3EB","8FD3EC","8FD3ED","8FD3EE","8FD3EF","8FD3F0","8FD3F1","8FD3F2","8FD3F3","8FD3F4","8FD3F5","8FD3F6","8FD3F7","8FD3F8","8FD3F9","8FD3FA","8FD3FB","8FD3FC","8FD3FD","8FD3FE","8FD4A1","8FD4A2","8FD4A3","8FD4A4","8FD4A5","8FD4A6","8FD4A7","8FD4A8","8FD4A9","8FD4AA","8FD4AB","8FD4AC","8FD4AD","8FD4AE","8FD4AF","8FD4B0","8FD4B1","8FD4B2","8FD4B3","8FD4B4","8FD4B5","8FD4B6","8FD4B7","8FD4B8","8FD4B9","8FD4BA","8FD4BB","8FD4BC","8FD4BD","8FD4BE","8FD4BF","8FD4C0","8FD4C1","8FD4C2","8FD4C3","8FD4C4","8FD4C5","8FD4C6","8FD4C7","8FD4C8","8FD4C9","8FD4CA","8FD4CB","8FD4CC","8FD4CD","8FD4CE","8FD4CF","8FD4D0","8FD4D1","8FD4D2","8FD4D3","8FD4D4","8FD4D5","8FD4D6","8FD4D7","8FD4D8","8FD4D9","8FD4DA","8FD4DB","8FD4DC","8FD4DD","8FD4DE","8FD4DF","8FD4E0","8FD4E1","8FD4E2","8FD4E3","8FD4E4","8FD4E5","8FD4E6","8FD4E7","8FD4E8","8FD4E9","8FD4EA","8FD4EB","8FD4EC","8FD4ED","8FD4EE","8FD4EF","8FD4F0","8FD4F1","8FD4F2","8FD4F3","8FD4F4","8FD4F5","8FD4F6","8FD4F7","8FD4F8","8FD4F9","8FD4FA","8FD4FB","8FD4FC","8FD4FD","8FD4FE","8FD5A1","8FD5A2","8FD5A3","8FD5A4","8FD5A5","8FD5A6","8FD5A7","8FD5A8","8FD5A9","8FD5AA","8FD5AB","8FD5AC","8FD5AD","8FD5AE","8FD5AF","8FD5B0","8FD5B1","8FD5B2","8FD5B3","8FD5B4","8FD5B5","8FD5B6","8FD5B7","8FD5B8","8FD5B9","8FD5BA","8FD5BB","8FD5BC","8FD5BD","8FD5BE","8FD5BF","8FD5C0","8FD5C1","8FD5C2","8FD5C3","8FD5C4","8FD5C5","8FD5C6","8FD5C7","8FD5C8","8FD5C9","8FD5CA","8FD5CB","8FD5CC","8FD5CD","8FD5CE","8FD5CF","8FD5D0","8FD5D1","8FD5D2","8FD5D3","8FD5D4","8FD5D5","8FD5D6","8FD5D7","8FD5D8","8FD5D9","8FD5DA","8FD5DB","8FD5DC","8FD5DD","8FD5DE","8FD5DF","8FD5E0","8FD5E1","8FD5E2","8FD5E3","8FD5E4","8FD5E5","8FD5E6","8FD5E7","8FD5E8","8FD5E9","8FD5EA","8FD5EB","8FD5EC","8FD5ED","8FD5EE","8FD5EF","8FD5F0","8FD5F1","8FD5F2","8FD5F3","8FD5F4","8FD5F5","8FD5F6","8FD5F7","8FD5F8","8FD5F9","8FD5FA","8FD5FB","8FD5FC","8FD5FD","8FD5FE","8FD6A1","8FD6A2","8FD6A3","8FD6A4","8FD6A5","8FD6A6","8FD6A7","8FD6A8","8FD6A9","8FD6AA","8FD6AB","8FD6AC","8FD6AD","8FD6AE","8FD6AF","8FD6B0","8FD6B1","8FD6B2","8FD6B3","8FD6B4","8FD6B5","8FD6B6","8FD6B7","8FD6B8","8FD6B9","8FD6BA","8FD6BB","8FD6BC","8FD6BD","8FD6BE","8FD6BF","8FD6C0","8FD6C1","8FD6C2","8FD6C3","8FD6C4","8FD6C5","8FD6C6","8FD6C7","8FD6C8","8FD6C9","8FD6CA","8FD6CB","8FD6CC","8FD6CD","8FD6CE","8FD6CF","8FD6D0","8FD6D1","8FD6D2","8FD6D3","8FD6D4","8FD6D5","8FD6D6","8FD6D7","8FD6D8","8FD6D9","8FD6DA","8FD6DB","8FD6DC","8FD6DD","8FD6DE","8FD6DF","8FD6E0","8FD6E1","8FD6E2","8FD6E3","8FD6E4","8FD6E5","8FD6E6","8FD6E7","8FD6E8","8FD6E9","8FD6EA","8FD6EB","8FD6EC","8FD6ED","8FD6EE","8FD6EF","8FD6F0","8FD6F1","8FD6F2","8FD6F3","8FD6F4","8FD6F5","8FD6F6","8FD6F7","8FD6F8","8FD6F9","8FD6FA","8FD6FB","8FD6FC","8FD6FD","8FD6FE","8FD7A1","8FD7A2","8FD7A3","8FD7A4","8FD7A5","8FD7A6","8FD7A7","8FD7A8","8FD7A9","8FD7AA","8FD7AB","8FD7AC","8FD7AD","8FD7AE","8FD7AF","8FD7B0","8FD7B1","8FD7B2","8FD7B3","8FD7B4","8FD7B5","8FD7B6","8FD7B7","8FD7B8","8FD7B9","8FD7BA","8FD7BB","8FD7BC","8FD7BD","8FD7BE","8FD7BF","8FD7C0","8FD7C1","8FD7C2","8FD7C3","8FD7C4","8FD7C5","8FD7C6","8FD7C7","8FD7C8","8FD7C9","8FD7CA","8FD7CB","8FD7CC","8FD7CD","8FD7CE","8FD7CF","8FD7D0","8FD7D1","8FD7D2","8FD7D3","8FD7D4","8FD7D5","8FD7D6","8FD7D7","8FD7D8","8FD7D9","8FD7DA","8FD7DB","8FD7DC","8FD7DD","8FD7DE","8FD7DF","8FD7E0","8FD7E1","8FD7E2","8FD7E3","8FD7E4","8FD7E5","8FD7E6","8FD7E7","8FD7E8","8FD7E9","8FD7EA","8FD7EB","8FD7EC","8FD7ED","8FD7EE","8FD7EF","8FD7F0","8FD7F1","8FD7F2","8FD7F3","8FD7F4","8FD7F5","8FD7F6","8FD7F7","8FD7F8","8FD7F9","8FD7FA","8FD7FB","8FD7FC","8FD7FD","8FD7FE","8FD8A1","8FD8A2","8FD8A3","8FD8A4","8FD8A5","8FD8A6","8FD8A7","8FD8A8","8FD8A9","8FD8AA","8FD8AB","8FD8AC","8FD8AD","8FD8AE","8FD8AF","8FD8B0","8FD8B1","8FD8B2","8FD8B3","8FD8B4","8FD8B5","8FD8B6","8FD8B7","8FD8B8","8FD8B9","8FD8BA","8FD8BB","8FD8BC","8FD8BD","8FD8BE","8FD8BF","8FD8C0","8FD8C1","8FD8C2","8FD8C3","8FD8C4","8FD8C5","8FD8C6","8FD8C7","8FD8C8","8FD8C9","8FD8CA","8FD8CB","8FD8CC","8FD8CD","8FD8CE","8FD8CF","8FD8D0","8FD8D1","8FD8D2","8FD8D3","8FD8D4","8FD8D5","8FD8D6","8FD8D7","8FD8D8","8FD8D9","8FD8DA","8FD8DB","8FD8DC","8FD8DD","8FD8DE","8FD8DF","8FD8E0","8FD8E1","8FD8E2","8FD8E3","8FD8E4","8FD8E5","8FD8E6","8FD8E7","8FD8E8","8FD8E9","8FD8EA","8FD8EB","8FD8EC","8FD8ED","8FD8EE","8FD8EF","8FD8F0","8FD8F1","8FD8F2","8FD8F3","8FD8F4","8FD8F5","8FD8F6","8FD8F7","8FD8F8","8FD8F9","8FD8FA","8FD8FB","8FD8FC","8FD8FD","8FD8FE","8FD9A1","8FD9A2","8FD9A3","8FD9A4","8FD9A5","8FD9A6","8FD9A7","8FD9A8","8FD9A9","8FD9AA","8FD9AB","8FD9AC","8FD9AD","8FD9AE","8FD9AF","8FD9B0","8FD9B1","8FD9B2","8FD9B3","8FD9B4","8FD9B5","8FD9B6","8FD9B7","8FD9B8","8FD9B9","8FD9BA","8FD9BB","8FD9BC","8FD9BD","8FD9BE","8FD9BF","8FD9C0","8FD9C1","8FD9C2","8FD9C3","8FD9C4","8FD9C5","8FD9C6","8FD9C7","8FD9C8","8FD9C9","8FD9CA","8FD9CB","8FD9CC","8FD9CD","8FD9CE","8FD9CF","8FD9D0","8FD9D1","8FD9D2","8FD9D3","8FD9D4","8FD9D5","8FD9D6","8FD9D7","8FD9D8","8FD9D9","8FD9DA","8FD9DB","8FD9DC","8FD9DD","8FD9DE","8FD9DF","8FD9E0","8FD9E1","8FD9E2","8FD9E3","8FD9E4","8FD9E5","8FD9E6","8FD9E7","8FD9E8","8FD9E9","8FD9EA","8FD9EB","8FD9EC","8FD9ED","8FD9EE","8FD9EF","8FD9F0","8FD9F1","8FD9F2","8FD9F3","8FD9F4","8FD9F5","8FD9F6","8FD9F7","8FD9F8","8FD9F9","8FD9FA","8FD9FB","8FD9FC","8FD9FD","8FD9FE","8FDAA1","8FDAA2","8FDAA3","8FDAA4","8FDAA5","8FDAA6","8FDAA7","8FDAA8","8FDAA9","8FDAAA","8FDAAB","8FDAAC","8FDAAD","8FDAAE","8FDAAF","8FDAB0","8FDAB1","8FDAB2","8FDAB3","8FDAB4","8FDAB5","8FDAB6","8FDAB7","8FDAB8","8FDAB9","8FDABA","8FDABB","8FDABC","8FDABD","8FDABE","8FDABF","8FDAC0","8FDAC1","8FDAC2","8FDAC3","8FDAC4","8FDAC5","8FDAC6","8FDAC7","8FDAC8","8FDAC9","8FDACA","8FDACB","8FDACC","8FDACD","8FDACE","8FDACF","8FDAD0","8FDAD1","8FDAD2","8FDAD3","8FDAD4","8FDAD5","8FDAD6","8FDAD7","8FDAD8","8FDAD9","8FDADA","8FDADB","8FDADC","8FDADD","8FDADE","8FDADF","8FDAE0","8FDAE1","8FDAE2","8FDAE3","8FDAE4","8FDAE5","8FDAE6","8FDAE7","8FDAE8","8FDAE9","8FDAEA","8FDAEB","8FDAEC","8FDAED","8FDAEE","8FDAEF","8FDAF0","8FDAF1","8FDAF2","8FDAF3","8FDAF4","8FDAF5","8FDAF6","8FDAF7","8FDAF8","8FDAF9","8FDAFA","8FDAFB","8FDAFC","8FDAFD","8FDAFE","8FDBA1","8FDBA2","8FDBA3","8FDBA4","8FDBA5","8FDBA6","8FDBA7","8FDBA8","8FDBA9","8FDBAA","8FDBAB","8FDBAC","8FDBAD","8FDBAE","8FDBAF","8FDBB0","8FDBB1","8FDBB2","8FDBB3","8FDBB4","8FDBB5","8FDBB6","8FDBB7","8FDBB8","8FDBB9","8FDBBA","8FDBBB","8FDBBC","8FDBBD","8FDBBE","8FDBBF","8FDBC0","8FDBC1","8FDBC2","8FDBC3","8FDBC4","8FDBC5","8FDBC6","8FDBC7","8FDBC8","8FDBC9","8FDBCA","8FDBCB","8FDBCC","8FDBCD","8FDBCE","8FDBCF","8FDBD0","8FDBD1","8FDBD2","8FDBD3","8FDBD4","8FDBD5","8FDBD6","8FDBD7","8FDBD8","8FDBD9","8FDBDA","8FDBDB","8FDBDC","8FDBDD","8FDBDE","8FDBDF","8FDBE0","8FDBE1","8FDBE2","8FDBE3","8FDBE4","8FDBE5","8FDBE6","8FDBE7","8FDBE8","8FDBE9","8FDBEA","8FDBEB","8FDBEC","8FDBED","8FDBEE","8FDBEF","8FDBF0","8FDBF1","8FDBF2","8FDBF3","8FDBF4","8FDBF5","8FDBF6","8FDBF7","8FDBF8","8FDBF9","8FDBFA","8FDBFB","8FDBFC","8FDBFD","8FDBFE","8FDCA1","8FDCA2","8FDCA3","8FDCA4","8FDCA5","8FDCA6","8FDCA7","8FDCA8","8FDCA9","8FDCAA","8FDCAB","8FDCAC","8FDCAD","8FDCAE","8FDCAF","8FDCB0","8FDCB1","8FDCB2","8FDCB3","8FDCB4","8FDCB5","8FDCB6","8FDCB7","8FDCB8","8FDCB9","8FDCBA","8FDCBB","8FDCBC","8FDCBD","8FDCBE","8FDCBF","8FDCC0","8FDCC1","8FDCC2","8FDCC3","8FDCC4","8FDCC5","8FDCC6","8FDCC7","8FDCC8","8FDCC9","8FDCCA","8FDCCB","8FDCCC","8FDCCD","8FDCCE","8FDCCF","8FDCD0","8FDCD1","8FDCD2","8FDCD3","8FDCD4","8FDCD5","8FDCD6","8FDCD7","8FDCD8","8FDCD9","8FDCDA","8FDCDB","8FDCDC","8FDCDD","8FDCDE","8FDCDF","8FDCE0","8FDCE1","8FDCE2","8FDCE3","8FDCE4","8FDCE5","8FDCE6","8FDCE7","8FDCE8","8FDCE9","8FDCEA","8FDCEB","8FDCEC","8FDCED","8FDCEE","8FDCEF","8FDCF0","8FDCF1","8FDCF2","8FDCF3","8FDCF4","8FDCF5","8FDCF6","8FDCF7","8FDCF8","8FDCF9","8FDCFA","8FDCFB","8FDCFC","8FDCFD","8FDCFE","8FDDA1","8FDDA2","8FDDA3","8FDDA4","8FDDA5","8FDDA6","8FDDA7","8FDDA8","8FDDA9","8FDDAA","8FDDAB","8FDDAC","8FDDAD","8FDDAE","8FDDAF","8FDDB0","8FDDB1","8FDDB2","8FDDB3","8FDDB4","8FDDB5","8FDDB6","8FDDB7","8FDDB8","8FDDB9","8FDDBA","8FDDBB","8FDDBC","8FDDBD","8FDDBE","8FDDBF","8FDDC0","8FDDC1","8FDDC2","8FDDC3","8FDDC4","8FDDC5","8FDDC6","8FDDC7","8FDDC8","8FDDC9","8FDDCA","8FDDCB","8FDDCC","8FDDCD","8FDDCE","8FDDCF","8FDDD0","8FDDD1","8FDDD2","8FDDD3","8FDDD4","8FDDD5","8FDDD6","8FDDD7","8FDDD8","8FDDD9","8FDDDA","8FDDDB","8FDDDC","8FDDDD","8FDDDE","8FDDDF","8FDDE0","8FDDE1","8FDDE2","8FDDE3","8FDDE4","8FDDE5","8FDDE6","8FDDE7","8FDDE8","8FDDE9","8FDDEA","8FDDEB","8FDDEC","8FDDED","8FDDEE","8FDDEF","8FDDF0","8FDDF1","8FDDF2","8FDDF3","8FDDF4","8FDDF5","8FDDF6","8FDDF7","8FDDF8","8FDDF9","8FDDFA","8FDDFB","8FDDFC","8FDDFD","8FDDFE","8FDEA1","8FDEA2","8FDEA3","8FDEA4","8FDEA5","8FDEA6","8FDEA7","8FDEA8","8FDEA9","8FDEAA","8FDEAB","8FDEAC","8FDEAD","8FDEAE","8FDEAF","8FDEB0","8FDEB1","8FDEB2","8FDEB3","8FDEB4","8FDEB5","8FDEB6","8FDEB7","8FDEB8","8FDEB9","8FDEBA","8FDEBB","8FDEBC","8FDEBD","8FDEBE","8FDEBF","8FDEC0","8FDEC1","8FDEC2","8FDEC3","8FDEC4","8FDEC5","8FDEC6","8FDEC7","8FDEC8","8FDEC9","8FDECA","8FDECB","8FDECC","8FDECD","8FDECE","8FDECF","8FDED0","8FDED1","8FDED2","8FDED3","8FDED4","8FDED5","8FDED6","8FDED7","8FDED8","8FDED9","8FDEDA","8FDEDB","8FDEDC","8FDEDD","8FDEDE","8FDEDF","8FDEE0","8FDEE1","8FDEE2","8FDEE3","8FDEE4","8FDEE5","8FDEE6","8FDEE7","8FDEE8","8FDEE9","8FDEEA","8FDEEB","8FDEEC","8FDEED","8FDEEE","8FDEEF","8FDEF0","8FDEF1","8FDEF2","8FDEF3","8FDEF4","8FDEF5","8FDEF6","8FDEF7","8FDEF8","8FDEF9","8FDEFA","8FDEFB","8FDEFC","8FDEFD","8FDEFE","8FDFA1","8FDFA2","8FDFA3","8FDFA4","8FDFA5","8FDFA6","8FDFA7","8FDFA8","8FDFA9","8FDFAA","8FDFAB","8FDFAC","8FDFAD","8FDFAE","8FDFAF","8FDFB0","8FDFB1","8FDFB2","8FDFB3","8FDFB4","8FDFB5","8FDFB6","8FDFB7","8FDFB8","8FDFB9","8FDFBA","8FDFBB","8FDFBC","8FDFBD","8FDFBE","8FDFBF","8FDFC0","8FDFC1","8FDFC2","8FDFC3","8FDFC4","8FDFC5","8FDFC6","8FDFC7","8FDFC8","8FDFC9","8FDFCA","8FDFCB","8FDFCC","8FDFCD","8FDFCE","8FDFCF","8FDFD0","8FDFD1","8FDFD2","8FDFD3","8FDFD4","8FDFD5","8FDFD6","8FDFD7","8FDFD8","8FDFD9","8FDFDA","8FDFDB","8FDFDC","8FDFDD","8FDFDE","8FDFDF","8FDFE0","8FDFE1","8FDFE2","8FDFE3","8FDFE4","8FDFE5","8FDFE6","8FDFE7","8FDFE8","8FDFE9","8FDFEA","8FDFEB","8FDFEC","8FDFED","8FDFEE","8FDFEF","8FDFF0","8FDFF1","8FDFF2","8FDFF3","8FDFF4","8FDFF5","8FDFF6","8FDFF7","8FDFF8","8FDFF9","8FDFFA","8FDFFB","8FDFFC","8FDFFD","8FDFFE","8FE0A1","8FE0A2","8FE0A3","8FE0A4","8FE0A5","8FE0A6","8FE0A7","8FE0A8","8FE0A9","8FE0AA","8FE0AB","8FE0AC","8FE0AD","8FE0AE","8FE0AF","8FE0B0","8FE0B1","8FE0B2","8FE0B3","8FE0B4","8FE0B5","8FE0B6","8FE0B7","8FE0B8","8FE0B9","8FE0BA","8FE0BB","8FE0BC","8FE0BD","8FE0BE","8FE0BF","8FE0C0","8FE0C1","8FE0C2","8FE0C3","8FE0C4","8FE0C5","8FE0C6","8FE0C7","8FE0C8","8FE0C9","8FE0CA","8FE0CB","8FE0CC","8FE0CD","8FE0CE","8FE0CF","8FE0D0","8FE0D1","8FE0D2","8FE0D3","8FE0D4","8FE0D5","8FE0D6","8FE0D7","8FE0D8","8FE0D9","8FE0DA","8FE0DB","8FE0DC","8FE0DD","8FE0DE","8FE0DF","8FE0E0","8FE0E1","8FE0E2","8FE0E3","8FE0E4","8FE0E5","8FE0E6","8FE0E7","8FE0E8","8FE0E9","8FE0EA","8FE0EB","8FE0EC","8FE0ED","8FE0EE","8FE0EF","8FE0F0","8FE0F1","8FE0F2","8FE0F3","8FE0F4","8FE0F5","8FE0F6","8FE0F7","8FE0F8","8FE0F9","8FE0FA","8FE0FB","8FE0FC","8FE0FD","8FE0FE","8FE1A1","8FE1A2","8FE1A3","8FE1A4","8FE1A5","8FE1A6","8FE1A7","8FE1A8","8FE1A9","8FE1AA","8FE1AB","8FE1AC","8FE1AD","8FE1AE","8FE1AF","8FE1B0","8FE1B1","8FE1B2","8FE1B3","8FE1B4","8FE1B5","8FE1B6","8FE1B7","8FE1B8","8FE1B9","8FE1BA","8FE1BB","8FE1BC","8FE1BD","8FE1BE","8FE1BF","8FE1C0","8FE1C1","8FE1C2","8FE1C3","8FE1C4","8FE1C5","8FE1C6","8FE1C7","8FE1C8","8FE1C9","8FE1CA","8FE1CB","8FE1CC","8FE1CD","8FE1CE","8FE1CF","8FE1D0","8FE1D1","8FE1D2","8FE1D3","8FE1D4","8FE1D5","8FE1D6","8FE1D7","8FE1D8","8FE1D9","8FE1DA","8FE1DB","8FE1DC","8FE1DD","8FE1DE","8FE1DF","8FE1E0","8FE1E1","8FE1E2","8FE1E3","8FE1E4","8FE1E5","8FE1E6","8FE1E7","8FE1E8","8FE1E9","8FE1EA","8FE1EB","8FE1EC","8FE1ED","8FE1EE","8FE1EF","8FE1F0","8FE1F1","8FE1F2","8FE1F3","8FE1F4","8FE1F5","8FE1F6","8FE1F7","8FE1F8","8FE1F9","8FE1FA","8FE1FB","8FE1FC","8FE1FD","8FE1FE","8FE2A1","8FE2A2","8FE2A3","8FE2A4","8FE2A5","8FE2A6","8FE2A7","8FE2A8","8FE2A9","8FE2AA","8FE2AB","8FE2AC","8FE2AD","8FE2AE","8FE2AF","8FE2B0","8FE2B1","8FE2B2","8FE2B3","8FE2B4","8FE2B5","8FE2B6","8FE2B7","8FE2B8","8FE2B9","8FE2BA","8FE2BB","8FE2BC","8FE2BD","8FE2BE","8FE2BF","8FE2C0","8FE2C1","8FE2C2","8FE2C3","8FE2C4","8FE2C5","8FE2C6","8FE2C7","8FE2C8","8FE2C9","8FE2CA","8FE2CB","8FE2CC","8FE2CD","8FE2CE","8FE2CF","8FE2D0","8FE2D1","8FE2D2","8FE2D3","8FE2D4","8FE2D5","8FE2D6","8FE2D7","8FE2D8","8FE2D9","8FE2DA","8FE2DB","8FE2DC","8FE2DD","8FE2DE","8FE2DF","8FE2E0","8FE2E1","8FE2E2","8FE2E3","8FE2E4","8FE2E5","8FE2E6","8FE2E7","8FE2E8","8FE2E9","8FE2EA","8FE2EB","8FE2EC","8FE2ED","8FE2EE","8FE2EF","8FE2F0","8FE2F1","8FE2F2","8FE2F3","8FE2F4","8FE2F5","8FE2F6","8FE2F7","8FE2F8","8FE2F9","8FE2FA","8FE2FB","8FE2FC","8FE2FD","8FE2FE","8FE3A1","8FE3A2","8FE3A3","8FE3A4","8FE3A5","8FE3A6","8FE3A7","8FE3A8","8FE3A9","8FE3AA","8FE3AB","8FE3AC","8FE3AD","8FE3AE","8FE3AF","8FE3B0","8FE3B1","8FE3B2","8FE3B3","8FE3B4","8FE3B5","8FE3B6","8FE3B7","8FE3B8","8FE3B9","8FE3BA","8FE3BB","8FE3BC","8FE3BD","8FE3BE","8FE3BF","8FE3C0","8FE3C1","8FE3C2","8FE3C3","8FE3C4","8FE3C5","8FE3C6","8FE3C7","8FE3C8","8FE3C9","8FE3CA","8FE3CB","8FE3CC","8FE3CD","8FE3CE","8FE3CF","8FE3D0","8FE3D1","8FE3D2","8FE3D3","8FE3D4","8FE3D5","8FE3D6","8FE3D7","8FE3D8","8FE3D9","8FE3DA","8FE3DB","8FE3DC","8FE3DD","8FE3DE","8FE3DF","8FE3E0","8FE3E1","8FE3E2","8FE3E3","8FE3E4","8FE3E5","8FE3E6","8FE3E7","8FE3E8","8FE3E9","8FE3EA","8FE3EB","8FE3EC","8FE3ED","8FE3EE","8FE3EF","8FE3F0","8FE3F1","8FE3F2","8FE3F3","8FE3F4","8FE3F5","8FE3F6","8FE3F7","8FE3F8","8FE3F9","8FE3FA","8FE3FB","8FE3FC","8FE3FD","8FE3FE","8FE4A1","8FE4A2","8FE4A3","8FE4A4","8FE4A5","8FE4A6","8FE4A7","8FE4A8","8FE4A9","8FE4AA","8FE4AB","8FE4AC","8FE4AD","8FE4AE","8FE4AF","8FE4B0","8FE4B1","8FE4B2","8FE4B3","8FE4B4","8FE4B5","8FE4B6","8FE4B7","8FE4B8","8FE4B9","8FE4BA","8FE4BB","8FE4BC","8FE4BD","8FE4BE","8FE4BF","8FE4C0","8FE4C1","8FE4C2","8FE4C3","8FE4C4","8FE4C5","8FE4C6","8FE4C7","8FE4C8","8FE4C9","8FE4CA","8FE4CB","8FE4CC","8FE4CD","8FE4CE","8FE4CF","8FE4D0","8FE4D1","8FE4D2","8FE4D3","8FE4D4","8FE4D5","8FE4D6","8FE4D7","8FE4D8","8FE4D9","8FE4DA","8FE4DB","8FE4DC","8FE4DD","8FE4DE","8FE4DF","8FE4E0","8FE4E1","8FE4E2","8FE4E3","8FE4E4","8FE4E5","8FE4E6","8FE4E7","8FE4E8","8FE4E9","8FE4EA","8FE4EB","8FE4EC","8FE4ED","8FE4EE","8FE4EF","8FE4F0","8FE4F1","8FE4F2","8FE4F3","8FE4F4","8FE4F5","8FE4F6","8FE4F7","8FE4F8","8FE4F9","8FE4FA","8FE4FB","8FE4FC","8FE4FD","8FE4FE","8FE5A1","8FE5A2","8FE5A3","8FE5A4","8FE5A5","8FE5A6","8FE5A7","8FE5A8","8FE5A9","8FE5AA","8FE5AB","8FE5AC","8FE5AD","8FE5AE","8FE5AF","8FE5B0","8FE5B1","8FE5B2","8FE5B3","8FE5B4","8FE5B5","8FE5B6","8FE5B7","8FE5B8","8FE5B9","8FE5BA","8FE5BB","8FE5BC","8FE5BD","8FE5BE","8FE5BF","8FE5C0","8FE5C1","8FE5C2","8FE5C3","8FE5C4","8FE5C5","8FE5C6","8FE5C7","8FE5C8","8FE5C9","8FE5CA","8FE5CB","8FE5CC","8FE5CD","8FE5CE","8FE5CF","8FE5D0","8FE5D1","8FE5D2","8FE5D3","8FE5D4","8FE5D5","8FE5D6","8FE5D7","8FE5D8","8FE5D9","8FE5DA","8FE5DB","8FE5DC","8FE5DD","8FE5DE","8FE5DF","8FE5E0","8FE5E1","8FE5E2","8FE5E3","8FE5E4","8FE5E5","8FE5E6","8FE5E7","8FE5E8","8FE5E9","8FE5EA","8FE5EB","8FE5EC","8FE5ED","8FE5EE","8FE5EF","8FE5F0","8FE5F1","8FE5F2","8FE5F3","8FE5F4","8FE5F5","8FE5F6","8FE5F7","8FE5F8","8FE5F9","8FE5FA","8FE5FB","8FE5FC","8FE5FD","8FE5FE","8FE6A1","8FE6A2","8FE6A3","8FE6A4","8FE6A5","8FE6A6","8FE6A7","8FE6A8","8FE6A9","8FE6AA","8FE6AB","8FE6AC","8FE6AD","8FE6AE","8FE6AF","8FE6B0","8FE6B1","8FE6B2","8FE6B3","8FE6B4","8FE6B5","8FE6B6","8FE6B7","8FE6B8","8FE6B9","8FE6BA","8FE6BB","8FE6BC","8FE6BD","8FE6BE","8FE6BF","8FE6C0","8FE6C1","8FE6C2","8FE6C3","8FE6C4","8FE6C5","8FE6C6","8FE6C7","8FE6C8","8FE6C9","8FE6CA","8FE6CB","8FE6CC","8FE6CD","8FE6CE","8FE6CF","8FE6D0","8FE6D1","8FE6D2","8FE6D3","8FE6D4","8FE6D5","8FE6D6","8FE6D7","8FE6D8","8FE6D9","8FE6DA","8FE6DB","8FE6DC","8FE6DD","8FE6DE","8FE6DF","8FE6E0","8FE6E1","8FE6E2","8FE6E3","8FE6E4","8FE6E5","8FE6E6","8FE6E7","8FE6E8","8FE6E9","8FE6EA","8FE6EB","8FE6EC","8FE6ED","8FE6EE","8FE6EF","8FE6F0","8FE6F1","8FE6F2","8FE6F3","8FE6F4","8FE6F5","8FE6F6","8FE6F7","8FE6F8","8FE6F9","8FE6FA","8FE6FB","8FE6FC","8FE6FD","8FE6FE","8FE7A1","8FE7A2","8FE7A3","8FE7A4","8FE7A5","8FE7A6","8FE7A7","8FE7A8","8FE7A9","8FE7AA","8FE7AB","8FE7AC","8FE7AD","8FE7AE","8FE7AF","8FE7B0","8FE7B1","8FE7B2","8FE7B3","8FE7B4","8FE7B5","8FE7B6","8FE7B7","8FE7B8","8FE7B9","8FE7BA","8FE7BB","8FE7BC","8FE7BD","8FE7BE","8FE7BF","8FE7C0","8FE7C1","8FE7C2","8FE7C3","8FE7C4","8FE7C5","8FE7C6","8FE7C7","8FE7C8","8FE7C9","8FE7CA","8FE7CB","8FE7CC","8FE7CD","8FE7CE","8FE7CF","8FE7D0","8FE7D1","8FE7D2","8FE7D3","8FE7D4","8FE7D5","8FE7D6","8FE7D7","8FE7D8","8FE7D9","8FE7DA","8FE7DB","8FE7DC","8FE7DD","8FE7DE","8FE7DF","8FE7E0","8FE7E1","8FE7E2","8FE7E3","8FE7E4","8FE7E5","8FE7E6","8FE7E7","8FE7E8","8FE7E9","8FE7EA","8FE7EB","8FE7EC","8FE7ED","8FE7EE","8FE7EF","8FE7F0","8FE7F1","8FE7F2","8FE7F3","8FE7F4","8FE7F5","8FE7F6","8FE7F7","8FE7F8","8FE7F9","8FE7FA","8FE7FB","8FE7FC","8FE7FD","8FE7FE","8FE8A1","8FE8A2","8FE8A3","8FE8A4","8FE8A5","8FE8A6","8FE8A7","8FE8A8","8FE8A9","8FE8AA","8FE8AB","8FE8AC","8FE8AD","8FE8AE","8FE8AF","8FE8B0","8FE8B1","8FE8B2","8FE8B3","8FE8B4","8FE8B5","8FE8B6","8FE8B7","8FE8B8","8FE8B9","8FE8BA","8FE8BB","8FE8BC","8FE8BD","8FE8BE","8FE8BF","8FE8C0","8FE8C1","8FE8C2","8FE8C3","8FE8C4","8FE8C5","8FE8C6","8FE8C7","8FE8C8","8FE8C9","8FE8CA","8FE8CB","8FE8CC","8FE8CD","8FE8CE","8FE8CF","8FE8D0","8FE8D1","8FE8D2","8FE8D3","8FE8D4","8FE8D5","8FE8D6","8FE8D7","8FE8D8","8FE8D9","8FE8DA","8FE8DB","8FE8DC","8FE8DD","8FE8DE","8FE8DF","8FE8E0","8FE8E1","8FE8E2","8FE8E3","8FE8E4","8FE8E5","8FE8E6","8FE8E7","8FE8E8","8FE8E9","8FE8EA","8FE8EB","8FE8EC","8FE8ED","8FE8EE","8FE8EF","8FE8F0","8FE8F1","8FE8F2","8FE8F3","8FE8F4","8FE8F5","8FE8F6","8FE8F7","8FE8F8","8FE8F9","8FE8FA","8FE8FB","8FE8FC","8FE8FD","8FE8FE","8FE9A1","8FE9A2","8FE9A3","8FE9A4","8FE9A5","8FE9A6","8FE9A7","8FE9A8","8FE9A9","8FE9AA","8FE9AB","8FE9AC","8FE9AD","8FE9AE","8FE9AF","8FE9B0","8FE9B1","8FE9B2","8FE9B3","8FE9B4","8FE9B5","8FE9B6","8FE9B7","8FE9B8","8FE9B9","8FE9BA","8FE9BB","8FE9BC","8FE9BD","8FE9BE","8FE9BF","8FE9C0","8FE9C1","8FE9C2","8FE9C3","8FE9C4","8FE9C5","8FE9C6","8FE9C7","8FE9C8","8FE9C9","8FE9CA","8FE9CB","8FE9CC","8FE9CD","8FE9CE","8FE9CF","8FE9D0","8FE9D1","8FE9D2","8FE9D3","8FE9D4","8FE9D5","8FE9D6","8FE9D7","8FE9D8","8FE9D9","8FE9DA","8FE9DB","8FE9DC","8FE9DD","8FE9DE","8FE9DF","8FE9E0","8FE9E1","8FE9E2","8FE9E3","8FE9E4","8FE9E5","8FE9E6","8FE9E7","8FE9E8","8FE9E9","8FE9EA","8FE9EB","8FE9EC","8FE9ED","8FE9EE","8FE9EF","8FE9F0","8FE9F1","8FE9F2","8FE9F3","8FE9F4","8FE9F5","8FE9F6","8FE9F7","8FE9F8","8FE9F9","8FE9FA","8FE9FB","8FE9FC","8FE9FD","8FE9FE","8FEAA1","8FEAA2","8FEAA3","8FEAA4","8FEAA5","8FEAA6","8FEAA7","8FEAA8","8FEAA9","8FEAAA","8FEAAB","8FEAAC","8FEAAD","8FEAAE","8FEAAF","8FEAB0","8FEAB1","8FEAB2","8FEAB3","8FEAB4","8FEAB5","8FEAB6","8FEAB7","8FEAB8","8FEAB9","8FEABA","8FEABB","8FEABC","8FEABD","8FEABE","8FEABF","8FEAC0","8FEAC1","8FEAC2","8FEAC3","8FEAC4","8FEAC5","8FEAC6","8FEAC7","8FEAC8","8FEAC9","8FEACA","8FEACB","8FEACC","8FEACD","8FEACE","8FEACF","8FEAD0","8FEAD1","8FEAD2","8FEAD3","8FEAD4","8FEAD5","8FEAD6","8FEAD7","8FEAD8","8FEAD9","8FEADA","8FEADB","8FEADC","8FEADD","8FEADE","8FEADF","8FEAE0","8FEAE1","8FEAE2","8FEAE3","8FEAE4","8FEAE5","8FEAE6","8FEAE7","8FEAE8","8FEAE9","8FEAEA","8FEAEB","8FEAEC","8FEAED","8FEAEE","8FEAEF","8FEAF0","8FEAF1","8FEAF2","8FEAF3","8FEAF4","8FEAF5","8FEAF6","8FEAF7","8FEAF8","8FEAF9","8FEAFA","8FEAFB","8FEAFC","8FEAFD","8FEAFE","8FEBA1","8FEBA2","8FEBA3","8FEBA4","8FEBA5","8FEBA6","8FEBA7","8FEBA8","8FEBA9","8FEBAA","8FEBAB","8FEBAC","8FEBAD","8FEBAE","8FEBAF","8FEBB0","8FEBB1","8FEBB2","8FEBB3","8FEBB4","8FEBB5","8FEBB6","8FEBB7","8FEBB8","8FEBB9","8FEBBA","8FEBBB","8FEBBC","8FEBBD","8FEBBE","8FEBBF","8FEBC0","8FEBC1","8FEBC2","8FEBC3","8FEBC4","8FEBC5","8FEBC6","8FEBC7","8FEBC8","8FEBC9","8FEBCA","8FEBCB","8FEBCC","8FEBCD","8FEBCE","8FEBCF","8FEBD0","8FEBD1","8FEBD2","8FEBD3","8FEBD4","8FEBD5","8FEBD6","8FEBD7","8FEBD8","8FEBD9","8FEBDA","8FEBDB","8FEBDC","8FEBDD","8FEBDE","8FEBDF","8FEBE0","8FEBE1","8FEBE2","8FEBE3","8FEBE4","8FEBE5","8FEBE6","8FEBE7","8FEBE8","8FEBE9","8FEBEA","8FEBEB","8FEBEC","8FEBED","8FEBEE","8FEBEF","8FEBF0","8FEBF1","8FEBF2","8FEBF3","8FEBF4","8FEBF5","8FEBF6","8FEBF7","8FEBF8","8FEBF9","8FEBFA","8FEBFB","8FEBFC","8FEBFD","8FEBFE","8FECA1","8FECA2","8FECA3","8FECA4","8FECA5","8FECA6","8FECA7","8FECA8","8FECA9","8FECAA","8FECAB","8FECAC","8FECAD","8FECAE","8FECAF","8FECB0","8FECB1","8FECB2","8FECB3","8FECB4","8FECB5","8FECB6","8FECB7","8FECB8","8FECB9","8FECBA","8FECBB","8FECBC","8FECBD","8FECBE","8FECBF","8FECC0","8FECC1","8FECC2","8FECC3","8FECC4","8FECC5","8FECC6","8FECC7","8FECC8","8FECC9","8FECCA","8FECCB","8FECCC","8FECCD","8FECCE","8FECCF","8FECD0","8FECD1","8FECD2","8FECD3","8FECD4","8FECD5","8FECD6","8FECD7","8FECD8","8FECD9","8FECDA","8FECDB","8FECDC","8FECDD","8FECDE","8FECDF","8FECE0","8FECE1","8FECE2","8FECE3","8FECE4","8FECE5","8FECE6","8FECE7","8FECE8","8FECE9","8FECEA","8FECEB","8FECEC","8FECED","8FECEE","8FECEF","8FECF0","8FECF1","8FECF2","8FECF3","8FECF4","8FECF5","8FECF6","8FECF7","8FECF8","8FECF9","8FECFA","8FECFB","8FECFC","8FECFD","8FECFE","8FEDA1","8FEDA2","8FEDA3","8FEDA4","8FEDA5","8FEDA6","8FEDA7","8FEDA8","8FEDA9","8FEDAA","8FEDAB","8FEDAC","8FEDAD","8FEDAE","8FEDAF","8FEDB0","8FEDB1","8FEDB2","8FEDB3","8FEDB4","8FEDB5","8FEDB6","8FEDB7","8FEDB8","8FEDB9","8FEDBA","8FEDBB","8FEDBC","8FEDBD","8FEDBE","8FEDBF","8FEDC0","8FEDC1","8FEDC2","8FEDC3","8FEDC4","8FEDC5","8FEDC6","8FEDC7","8FEDC8","8FEDC9","8FEDCA","8FEDCB","8FEDCC","8FEDCD","8FEDCE","8FEDCF","8FEDD0","8FEDD1","8FEDD2","8FEDD3","8FEDD4","8FEDD5","8FEDD6","8FEDD7","8FEDD8","8FEDD9","8FEDDA","8FEDDB","8FEDDC","8FEDDD","8FEDDE","8FEDDF","8FEDE0","8FEDE1","8FEDE2","8FEDE3"], [92,167,168,176,177,180,182,215,247,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,1025,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1105,8208,8213,8216,8217,8220,8221,8224,8225,8229,8230,8240,8242,8243,8251,126,8451,8470,8481,8491,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8592,8593,8594,8595,8658,8660,8704,8706,8707,8711,8712,8715,8721,65293,8730,8733,8734,8735,8736,8741,8743,8744,8745,8746,8747,8748,8750,8756,8757,8765,8786,8800,8801,8806,8807,8810,8811,8834,8835,8838,8839,8869,8895,8978,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,9472,9473,9474,9475,9484,9487,9488,9491,9492,9495,9496,9499,9500,9501,9504,9507,9508,9509,9512,9515,9516,9519,9520,9523,9524,9527,9528,9531,9532,9535,9538,9547,9632,9633,9650,9651,9660,9661,9670,9671,9675,9678,9679,9711,9733,9734,9792,9794,9834,9837,9839,12288,12289,12290,12291,12293,12294,12295,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,12306,12307,12308,12309,12317,12319,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12443,12444,12445,12446,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,12539,12540,12541,12542,12849,12850,12857,12964,12965,12966,12967,12968,13059,13069,13076,13080,13090,13091,13094,13095,13099,13110,13115,13129,13130,13133,13137,13143,13179,13180,13181,13182,13198,13199,13212,13213,13214,13217,13252,13261,19968,19969,19971,19975,19976,19977,19978,19979,19981,19982,19984,19985,19988,19989,19990,19991,19992,19993,19998,20001,20006,20008,20010,20013,20017,20018,20022,20024,20025,20027,20028,20031,20034,20035,20037,20043,20045,20046,20047,20053,20054,20055,20056,20057,20061,20062,20063,20066,20081,20083,20094,20096,20098,20101,20102,20104,20105,20106,20107,20108,20110,20113,20114,20116,20117,20120,20121,20123,20124,20126,20127,20128,20129,20130,20132,20133,20134,20136,20139,20140,20141,20142,20144,20147,20150,20154,20160,20161,20162,20164,20166,20167,20170,20171,20173,20174,20175,20180,20181,20182,20183,20184,20185,20189,20190,20191,20193,20195,20196,20197,20205,20206,20208,20210,20214,20215,20219,20220,20224,20225,20227,20233,20234,20237,20238,20239,20240,20241,20250,20252,20253,20271,20272,20276,20278,20280,20281,20282,20284,20285,20291,20294,20295,20301,20302,20303,20304,20305,20307,20309,20310,20311,20313,20314,20315,20316,20317,20318,20329,20335,20336,20339,20341,20342,20347,20348,20351,20355,20358,20360,20362,20363,20365,20367,20369,20370,20372,20374,20376,20378,20379,20381,20384,20385,20395,20397,20398,20399,20405,20406,20415,20418,20419,20420,20425,20426,20429,20430,20432,20433,20436,20439,20440,20442,20443,20445,20447,20449,20451,20452,20453,20462,20463,20467,20469,20470,20472,20474,20478,20479,20485,20486,20489,20491,20493,20495,20497,20498,20500,20502,20505,20506,20510,20511,20513,20514,20515,20516,20517,20518,20520,20521,20522,20523,20524,20525,20534,20537,20544,20546,20547,20550,20551,20552,20553,20559,20560,20565,20566,20570,20572,20581,20588,20592,20594,20596,20597,20598,20600,20605,20608,20613,20621,20625,20628,20632,20633,20634,20652,20653,20658,20659,20660,20661,20663,20670,20674,20677,20681,20682,20685,20687,20689,20693,20694,20696,20698,20702,20707,20709,20711,20717,20718,20724,20725,20729,20731,20736,20737,20738,20740,20745,20754,20756,20757,20758,20760,20762,20767,20769,20778,20786,20791,20794,20795,20796,20799,20800,20801,20803,20804,20805,20806,20807,20808,20809,20810,20811,20812,20813,20814,20816,20818,20820,20826,20828,20834,20836,20837,20840,20841,20842,20843,20844,20845,20846,20849,20853,20854,20855,20856,20860,20864,20866,20869,20870,20873,20874,20876,20877,20879,20880,20881,20882,20883,20885,20886,20887,20889,20893,20896,20898,20900,20901,20902,20904,20905,20906,20907,20908,20912,20913,20914,20915,20916,20917,20918,20919,20925,20926,20932,20933,20934,20937,20939,20940,20941,20950,20955,20956,20957,20960,20961,20966,20967,20969,20970,20972,20973,20976,20977,20981,20982,20984,20985,20986,20989,20990,20992,20995,20996,20998,20999,21000,21002,21003,21006,21009,21012,21013,21015,21021,21028,21029,21031,21033,21034,21038,21040,21043,21046,21047,21048,21049,21050,21051,21059,21060,21063,21066,21067,21068,21069,21071,21076,21078,21083,21086,21091,21092,21093,21097,21098,21103,21104,21105,21106,21107,21108,21109,21117,21119,21123,21127,21128,21129,21133,21137,21138,21140,21147,21148,21151,21152,21155,21158,21161,21162,21163,21164,21165,21167,21169,21172,21173,21177,21180,21182,21184,21185,21187,21189,21191,21193,21197,21202,21205,21207,21208,21209,21211,21213,21214,21215,21216,21218,21219,21220,21222,21223,21234,21235,21237,21240,21241,21242,21246,21247,21248,21249,21250,21253,21254,21255,21256,21261,21263,21264,21269,21270,21271,21273,21274,21277,21280,21281,21283,21284,21290,21295,21297,21299,21304,21305,21306,21307,21311,21312,21313,21315,21317,21318,21319,21320,21321,21322,21325,21329,21330,21331,21332,21335,21336,21338,21340,21342,21344,21350,21353,21358,21359,21360,21361,21362,21363,21364,21365,21367,21368,21371,21375,21378,21380,21395,21398,21400,21402,21407,21408,21413,21414,21416,21417,21421,21422,21424,21426,21427,21430,21435,21442,21443,21448,21449,21450,21451,21452,21453,21454,21460,21462,21463,21465,21467,21469,21471,21473,21474,21475,21476,21477,21480,21481,21482,21483,21484,21485,21486,21487,21488,21489,21490,21491,21494,21495,21496,21498,21505,21507,21508,21512,21513,21514,21515,21516,21517,21518,21519,21520,21521,21531,21533,21535,21536,21542,21545,21547,21548,21549,21550,21558,21560,21561,21563,21564,21565,21566,21568,21570,21574,21576,21577,21578,21582,21585,21599,21608,21610,21616,21617,21619,21621,21622,21623,21627,21628,21629,21632,21636,21638,21642,21643,21644,21646,21647,21648,21650,21660,21666,21668,21669,21672,21673,21675,21676,21679,21682,21683,21688,21692,21693,21694,21696,21697,21698,21700,21703,21704,21705,21720,21729,21730,21733,21734,21736,21737,21741,21742,21746,21754,21757,21759,21764,21766,21767,21775,21776,21780,21782,21806,21807,21809,21811,21816,21817,21822,21824,21828,21829,21830,21836,21839,21843,21846,21847,21852,21853,21859,21883,21884,21886,21888,21891,21892,21894,21895,21897,21898,21899,21912,21913,21914,21916,21917,21918,21919,21927,21928,21929,21930,21931,21932,21934,21936,21942,21956,21957,21959,21972,21978,21980,21983,21987,21988,22007,22009,22013,22014,22022,22025,22036,22038,22039,22040,22043,22057,22063,22065,22066,22068,22070,22072,22082,22092,22094,22096,22107,22116,22120,22122,22123,22124,22132,22136,22138,22144,22150,22151,22154,22159,22164,22176,22178,22181,22190,22196,22198,22204,22208,22209,22210,22211,22216,22222,22225,22227,22231,22232,22234,22235,22238,22240,22243,22254,22256,22258,22259,22265,22266,22269,22271,22272,22275,22276,22280,22281,22283,22285,22287,22290,22291,22294,22296,22300,22303,22310,22311,22312,22317,22320,22327,22328,22331,22336,22338,22343,22346,22350,22351,22352,22353,22361,22369,22372,22373,22374,22377,22378,22399,22402,22408,22409,22411,22419,22432,22434,22435,22436,22442,22444,22448,22451,22464,22467,22470,22471,22472,22475,22478,22482,22483,22484,22486,22492,22495,22496,22499,22516,22519,22521,22522,22524,22528,22530,22533,22534,22538,22539,22549,22553,22557,22561,22564,22570,22575,22576,22577,22580,22581,22586,22589,22592,22593,22602,22603,22609,22610,22612,22615,22616,22617,22618,22622,22626,22633,22635,22640,22642,22645,22649,22654,22659,22661,22675,22679,22684,22686,22687,22696,22699,22702,22706,22707,22712,22713,22714,22715,22718,22721,22725,22727,22730,22732,22737,22739,22741,22743,22744,22745,22748,22750,22751,22756,22757,22763,22764,22766,22767,22768,22769,22770,22775,22777,22778,22779,22780,22781,22786,22793,22794,22795,22799,22800,22805,22806,22808,22809,22810,22811,22812,22818,22821,22823,22825,22826,22827,22828,22829,22830,22833,22834,22839,22840,22846,22852,22855,22856,22857,22862,22863,22864,22865,22867,22868,22869,22871,22872,22874,22875,22877,22880,22882,22883,22885,22887,22888,22889,22890,22892,22894,22899,22900,22904,22909,22913,22914,22915,22916,22922,22925,22931,22934,22937,22939,22941,22947,22948,22949,22952,22956,22962,22969,22970,22971,22974,22982,22985,22987,22992,22993,22995,22996,23001,23002,23004,23013,23014,23016,23018,23019,23030,23035,23039,23041,23043,23049,23057,23064,23066,23068,23071,23072,23077,23081,23087,23093,23094,23100,23104,23105,23110,23113,23130,23138,23142,23146,23148,23167,23186,23194,23195,23228,23229,23230,23233,23234,23241,23243,23244,23248,23254,23255,23265,23267,23270,23273,23290,23291,23305,23307,23308,23318,23330,23338,23340,23344,23346,23350,23358,23360,23363,23365,23376,23377,23380,23381,23382,23383,23384,23386,23387,23388,23389,23391,23395,23396,23397,23398,23401,23403,23408,23409,23411,23413,23416,23418,23424,23427,23429,23431,23432,23433,23435,23436,23437,23439,23445,23447,23448,23449,23450,23451,23452,23453,23455,23458,23459,23460,23461,23462,23470,23472,23475,23476,23477,23478,23480,23481,23487,23488,23490,23491,23492,23493,23494,23495,23497,23500,23504,23506,23507,23508,23512,23515,23517,23518,23519,23521,23522,23524,23525,23526,23527,23528,23529,23531,23532,23534,23536,23539,23541,23542,23544,23546,23550,23551,23553,23554,23556,23557,23558,23559,23560,23561,23562,23563,23565,23566,23567,23569,23571,23574,23578,23582,23584,23586,23588,23592,23597,23601,23608,23609,23610,23611,23612,23613,23614,23615,23616,23617,23621,23622,23624,23626,23627,23629,23630,23631,23632,23633,23635,23637,23646,23648,23649,23652,23653,23660,23662,23663,23665,23670,23673,23692,23696,23697,23700,23713,23718,23720,23721,23723,23724,23729,23731,23734,23735,23736,23738,23739,23740,23742,23749,23751,23769,23776,23777,23784,23785,23786,23789,23791,23792,23797,23798,23802,23803,23805,23815,23819,23822,23825,23828,23829,23830,23831,23832,23833,23834,23835,23839,23842,23847,23849,23874,23883,23884,23886,23888,23890,23891,23900,23913,23916,23917,23919,23923,23926,23938,23940,23943,23947,23948,23952,23965,23970,23980,23982,23991,23992,23993,23994,23996,23997,24009,24012,24013,24016,24018,24019,24022,24027,24029,24030,24033,24035,24037,24038,24039,24040,24043,24046,24049,24050,24051,24052,24053,24055,24059,24061,24062,24066,24067,24070,24075,24076,24081,24086,24089,24090,24091,24093,24101,24107,24109,24111,24112,24115,24118,24119,24120,24125,24128,24131,24132,24133,24135,24140,24142,24148,24149,24151,24159,24161,24162,24163,24164,24178,24179,24180,24181,24182,24184,24185,24186,24187,24188,24189,24190,24191,24193,24195,24196,24199,24202,24207,24213,24214,24215,24218,24220,24224,24230,24231,24235,24237,24245,24246,24247,24248,24257,24258,24259,24264,24265,24266,24271,24272,24275,24278,24282,24283,24285,24287,24288,24289,24290,24291,24296,24297,24300,24304,24305,24307,24308,24310,24311,24312,24314,24315,24316,24318,24319,24321,24323,24324,24329,24330,24331,24332,24333,24335,24336,24337,24339,24340,24341,24342,24343,24344,24347,24351,24353,24357,24358,24359,24361,24365,24367,24369,24372,24373,24375,24376,24380,24382,24385,24389,24392,24394,24396,24398,24401,24403,24406,24407,24409,24412,24413,24417,24418,24422,24423,24425,24426,24427,24428,24429,24432,24433,24435,24439,24441,24444,24447,24448,24449,24450,24451,24452,24453,24455,24456,24458,24459,24460,24464,24465,24466,24467,24471,24472,24473,24478,24480,24481,24488,24489,24490,24493,24494,24499,24500,24503,24505,24508,24509,24515,24517,24524,24525,24534,24535,24536,24537,24540,24541,24542,24544,24548,24555,24560,24561,24565,24568,24571,24573,24575,24590,24591,24592,24594,24597,24598,24601,24603,24604,24605,24608,24609,24613,24614,24615,24616,24617,24618,24619,24623,24625,24634,24641,24642,24643,24646,24650,24651,24653,24656,24658,24661,24665,24666,24669,24671,24672,24674,24675,24676,24677,24680,24681,24682,24683,24684,24685,24687,24688,24693,24695,24705,24707,24708,24709,24713,24714,24715,24716,24717,24722,24724,24726,24727,24730,24731,24735,24736,24739,24742,24743,24745,24746,24754,24755,24756,24757,24758,24760,24764,24765,24773,24774,24775,24785,24787,24789,24792,24794,24796,24798,24799,24800,24801,24803,24807,24808,24816,24817,24818,24819,24820,24822,24823,24825,24826,24827,24832,24833,24835,24838,24840,24841,24845,24846,24847,24849,24853,24858,24859,24863,24864,24865,24871,24872,24876,24880,24884,24887,24892,24893,24894,24895,24898,24900,24903,24904,24906,24907,24908,24909,24910,24915,24917,24920,24921,24922,24925,24927,24930,24931,24933,24935,24936,24939,24942,24943,24944,24945,24947,24948,24949,24950,24951,24958,24962,24967,24970,24974,24976,24977,24980,24982,24984,24985,24986,24996,24999,25001,25003,25004,25006,25010,25014,25018,25022,25027,25030,25031,25032,25033,25034,25035,25036,25037,25040,25059,25062,25074,25076,25078,25079,25080,25082,25084,25085,25086,25087,25088,25096,25097,25098,25100,25101,25102,25104,25105,25106,25107,25108,25110,25114,25115,25117,25118,25119,25121,25126,25130,25134,25135,25136,25138,25139,25140,25144,25147,25151,25152,25153,25159,25160,25161,25163,25165,25166,25171,25173,25176,25179,25182,25184,25187,25192,25198,25201,25206,25209,25212,25214,25215,25216,25218,25219,25220,25225,25226,25233,25234,25235,25236,25237,25238,25239,25240,25243,25244,25246,25254,25259,25260,25265,25269,25273,25275,25276,25277,25282,25285,25286,25287,25288,25289,25290,25292,25293,25295,25296,25297,25298,25299,25300,25303,25304,25305,25307,25308,25309,25312,25313,25324,25325,25326,25327,25329,25331,25333,25334,25335,25342,25343,25345,25346,25351,25352,25353,25356,25361,25369,25375,25383,25384,25387,25391,25402,25405,25406,25407,25417,25420,25421,25423,25424,25429,25431,25436,25447,25448,25449,25451,25454,25458,25462,25463,25466,25467,25472,25475,25480,25481,25484,25486,25487,25490,25494,25496,25499,25503,25504,25505,25506,25507,25509,25511,25512,25513,25514,25515,25516,25522,25524,25525,25531,25534,25536,25539,25540,25542,25545,25551,25552,25554,25558,25562,25563,25569,25571,25577,25582,25588,25589,25590,25594,25606,25613,25615,25619,25622,25623,25628,25638,25640,25644,25645,25652,25654,25658,25662,25666,25678,25688,25696,25703,25705,25711,25718,25720,25722,25731,25736,25746,25747,25749,25754,25757,25758,25764,25765,25769,25771,25773,25774,25776,25778,25785,25787,25788,25793,25794,25797,25799,25805,25806,25810,25812,25816,25818,25824,25825,25826,25827,25830,25831,25836,25839,25841,25842,25844,25846,25850,25853,25854,25856,25861,25880,25884,25885,25891,25892,25898,25899,25900,25903,25908,25909,25910,25911,25912,25913,25915,25918,25919,25925,25928,25933,25934,25935,25937,25941,25942,25943,25944,25945,25949,25950,25954,25955,25958,25964,25968,25970,25972,25973,25975,25976,25986,25987,25991,25992,25993,25996,25998,26000,26001,26007,26009,26011,26012,26015,26017,26020,26021,26023,26027,26028,26029,26031,26032,26039,26041,26044,26045,26049,26051,26052,26053,26054,26059,26060,26063,26066,26071,26073,26075,26080,26081,26082,26085,26086,26087,26088,26089,26092,26093,26097,26106,26107,26112,26114,26115,26118,26119,26121,26122,26124,26126,26127,26131,26132,26133,26140,26142,26143,26144,26148,26149,26151,26152,26157,26158,26159,26161,26164,26165,26166,26171,26172,26175,26177,26178,26179,26180,26185,26187,26191,26194,26199,26201,26205,26206,26207,26210,26212,26213,26214,26215,26216,26217,26222,26223,26224,26227,26228,26230,26234,26241,26243,26244,26247,26248,26249,26254,26257,26262,26263,26264,26265,26269,26272,26274,26278,26283,26286,26290,26292,26296,26297,26300,26302,26303,26305,26308,26311,26313,26326,26329,26330,26332,26333,26336,26342,26345,26352,26354,26355,26356,26357,26359,26360,26361,26362,26363,26364,26365,26366,26367,26368,26371,26376,26377,26379,26381,26382,26383,26388,26389,26390,26391,26395,26397,26398,26399,26406,26407,26408,26410,26411,26412,26413,26414,26417,26420,26422,26423,26424,26426,26429,26431,26433,26438,26441,26446,26447,26448,26449,26451,26454,26457,26460,26462,26463,26464,26465,26466,26467,26468,26469,26470,26474,26477,26479,26480,26481,26482,26483,26485,26487,26492,26494,26495,26501,26503,26505,26507,26508,26512,26517,26519,26522,26524,26525,26528,26529,26530,26534,26537,26543,26547,26548,26550,26551,26552,26553,26555,26560,26561,26564,26566,26570,26574,26575,26576,26577,26579,26580,26584,26586,26589,26590,26594,26596,26599,26601,26604,26606,26607,26609,26611,26612,26613,26619,26622,26623,26625,26626,26627,26628,26643,26646,26647,26654,26657,26658,26665,26666,26667,26674,26676,26680,26681,26684,26685,26688,26689,26690,26691,26692,26694,26696,26701,26702,26704,26705,26706,26707,26708,26713,26716,26717,26719,26723,26727,26740,26742,26743,26750,26751,26753,26755,26757,26765,26767,26771,26772,26775,26779,26781,26783,26784,26786,26790,26791,26792,26797,26799,26800,26801,26803,26805,26806,26809,26810,26812,26820,26822,26824,26825,26826,26827,26829,26831,26834,26836,26837,26839,26840,26842,26847,26848,26849,26851,26855,26862,26863,26866,26873,26874,26880,26881,26884,26885,26888,26891,26892,26893,26894,26895,26898,26905,26906,26907,26908,26913,26914,26915,26917,26918,26920,26922,26928,26932,26934,26937,26941,26943,26954,26963,26964,26965,26969,26970,26972,26973,26974,26976,26977,26978,26984,26986,26987,26989,26990,26991,26995,26996,26997,26999,27000,27001,27004,27005,27006,27009,27010,27018,27022,27025,27028,27029,27032,27035,27036,27040,27047,27054,27057,27058,27060,27067,27070,27071,27073,27075,27079,27082,27083,27084,27085,27086,27088,27091,27096,27097,27101,27102,27106,27111,27112,27115,27117,27122,27129,27131,27133,27135,27138,27141,27146,27147,27148,27154,27155,27156,27159,27161,27163,27166,27167,27169,27170,27171,27177,27178,27179,27182,27184,27189,27190,27192,27193,27194,27197,27204,27206,27207,27208,27211,27224,27225,27231,27233,27234,27238,27243,27250,27251,27256,27262,27263,27264,27268,27277,27278,27280,27287,27292,27296,27298,27299,27306,27308,27310,27315,27320,27323,27329,27330,27331,27345,27347,27354,27355,27358,27359,27362,27364,27368,27370,27386,27387,27396,27397,27402,27410,27414,27421,27423,27424,27425,27427,27431,27442,27447,27448,27449,27450,27453,27454,27459,27463,27465,27468,27470,27472,27475,27476,27481,27483,27487,27489,27490,27491,27492,27494,27497,27498,27503,27507,27508,27512,27513,27515,27519,27520,27523,27524,27526,27529,27530,27531,27533,27541,27542,27544,27550,27556,27562,27563,27567,27569,27570,27571,27572,27573,27575,27578,27579,27580,27583,27584,27589,27590,27595,27597,27598,27602,27603,27604,27606,27608,27611,27615,27627,27628,27631,27635,27656,27663,27665,27667,27668,27671,27675,27683,27684,27700,27703,27704,27710,27711,27712,27713,27714,27726,27728,27733,27735,27738,27740,27741,27742,27743,27744,27746,27752,27754,27759,27760,27762,27763,27770,27773,27774,27777,27778,27779,27782,27784,27788,27789,27792,27794,27795,27798,27801,27802,27803,27809,27810,27819,27822,27825,27827,27832,27833,27834,27835,27836,27837,27838,27839,27841,27844,27845,27849,27850,27852,27859,27861,27863,27865,27866,27867,27869,27873,27874,27875,27877,27880,27882,27887,27888,27889,27891,27908,27915,27916,27922,27927,27929,27931,27934,27935,27941,27945,27946,27947,27954,27955,27957,27958,27960,27963,27965,27966,27969,27972,27973,27993,27994,27996,28003,28004,28006,28009,28010,28012,28014,28015,28020,28023,28024,28025,28037,28039,28040,28044,28046,28051,28053,28054,28057,28059,28060,28076,28079,28082,28085,28088,28092,28096,28101,28102,28103,28107,28108,28111,28113,28114,28117,28120,28121,28126,28129,28132,28134,28136,28138,28139,28140,28142,28145,28146,28147,28149,28151,28152,28153,28154,28155,28156,28165,28167,28168,28169,28170,28171,28179,28181,28185,28186,28187,28189,28191,28192,28193,28195,28196,28197,28198,28199,28201,28203,28204,28205,28206,28207,28216,28217,28218,28220,28222,28227,28234,28237,28238,28246,28248,28251,28252,28255,28263,28267,28270,28271,28274,28278,28286,28287,28288,28290,28300,28303,28304,28310,28312,28316,28317,28319,28322,28325,28330,28335,28338,28342,28343,28346,28349,28351,28354,28356,28357,28361,28363,28364,28369,28371,28372,28373,28381,28382,28396,28399,28402,28404,28407,28408,28414,28415,28417,28418,28422,28425,28431,28433,28435,28436,28437,28448,28450,28451,28459,28460,28465,28466,28472,28478,28479,28481,28485,28500,28504,28507,28508,28511,28516,28518,28525,28526,28527,28528,28532,28536,28538,28540,28544,28545,28546,28548,28550,28552,28558,28561,28567,28577,28579,28580,28586,28593,28595,28597,28601,28608,28609,28610,28611,28614,28628,28629,28632,28635,28639,28640,28641,28644,28651,28652,28654,28655,28657,28659,28661,28662,28666,28670,28673,28677,28679,28681,28683,28687,28689,28693,28696,28698,28699,28701,28702,28703,28710,28711,28712,28716,28720,28722,28734,28748,28753,28760,28771,28779,28783,28784,28792,28796,28797,28805,28809,28810,28814,28818,28825,28843,28844,28845,28846,28847,28851,28856,28857,28858,28859,28872,28875,28879,28889,28893,28895,28913,28921,28925,28932,28937,28943,28948,28953,28954,28956,28961,28966,28982,28988,28998,28999,29001,29004,29006,29013,29014,29017,29020,29026,29028,29029,29030,29031,29033,29036,29038,29053,29060,29064,29066,29071,29076,29077,29081,29087,29096,29100,29105,29113,29118,29121,29123,29128,29129,29134,29136,29138,29140,29141,29143,29151,29152,29157,29158,29159,29164,29165,29166,29173,29177,29179,29180,29182,29183,29190,29197,29200,29211,29224,29226,29228,29229,29232,29234,29237,29238,29242,29243,29244,29245,29246,29247,29248,29254,29255,29256,29259,29260,29266,29272,29273,29275,29277,29279,29281,29282,29287,29289,29298,29300,29305,29309,29310,29312,29313,29314,29319,29330,29334,29344,29346,29351,29356,29359,29361,29362,29366,29369,29374,29378,29379,29380,29382,29390,29392,29394,29399,29401,29403,29408,29409,29410,29417,29420,29421,29431,29432,29433,29436,29437,29450,29462,29463,29467,29468,29469,29471,29476,29477,29481,29482,29483,29486,29487,29492,29494,29495,29502,29503,29508,29509,29518,29519,29527,29539,29544,29546,29552,29554,29557,29559,29560,29562,29563,29572,29575,29577,29579,29590,29609,29618,29619,29627,29629,29632,29634,29640,29641,29642,29645,29646,29650,29654,29662,29664,29667,29669,29674,29677,29678,29681,29685,29688,29694,29699,29701,29702,29703,29705,29730,29733,29734,29737,29738,29742,29746,29747,29748,29749,29750,29754,29759,29761,29781,29785,29786,29787,29788,29790,29791,29792,29794,29795,29796,29801,29802,29807,29808,29811,29814,29822,29827,29833,29835,29854,29855,29858,29863,29872,29885,29898,29903,29908,29916,29920,29922,29923,29926,29927,29929,29934,29936,29937,29938,29942,29943,29944,29953,29955,29956,29957,29964,29965,29966,29969,29971,29973,29976,29978,29980,29982,29983,29987,29989,29990,29992,29995,29996,29999,30000,30001,30002,30003,30007,30008,30010,30011,30012,30020,30022,30025,30026,30027,30028,30029,30031,30033,30036,30041,30042,30043,30044,30045,30048,30050,30052,30053,30054,30055,30057,30058,30059,30061,30063,30064,30067,30068,30070,30071,30072,30079,30082,30086,30087,30089,30090,30091,30094,30095,30097,30100,30106,30109,30115,30117,30123,30129,30130,30131,30133,30136,30137,30140,30141,30142,30146,30147,30149,30151,30154,30157,30162,30164,30165,30168,30169,30171,30174,30178,30179,30185,30192,30194,30195,30196,30202,30204,30206,30207,30209,30217,30219,30221,30239,30240,30241,30242,30244,30247,30256,30260,30267,30274,30278,30279,30280,30284,30290,30294,30296,30300,30305,30306,30311,30312,30313,30314,30316,30320,30322,30326,30328,30330,30331,30332,30333,30334,30336,30338,30339,30340,30342,30343,30344,30347,30350,30352,30355,30358,30361,30362,30363,30364,30366,30374,30382,30384,30388,30391,30392,30393,30394,30399,30402,30403,30406,30408,30410,30413,30418,30422,30423,30427,30428,30430,30431,30433,30435,30436,30437,30439,30442,30446,30450,30452,30456,30459,30462,30465,30468,30471,30472,30473,30475,30476,30491,30494,30495,30496,30500,30501,30502,30505,30519,30520,30522,30524,30528,30534,30535,30554,30555,30561,30563,30565,30566,30568,30571,30585,30590,30591,30603,30606,30609,30622,30624,30629,30636,30637,30640,30643,30646,30649,30651,30652,30653,30655,30663,30669,30679,30682,30683,30684,30690,30691,30693,30695,30697,30701,30702,30703,30707,30716,30722,30732,30738,30740,30741,30752,30753,30757,30758,30759,30770,30772,30778,30783,30789,30798,30813,30820,30827,30828,30831,30834,30836,30842,30844,30849,30854,30855,30860,30861,30862,30865,30867,30869,30871,30874,30883,30887,30889,30890,30895,30901,30906,30908,30910,30913,30917,30918,30922,30923,30928,30929,30932,30938,30951,30952,30956,30959,30964,30973,30977,30983,30990,30993,30994,31001,31014,31018,31019,31020,31024,31034,31036,31038,31040,31041,31047,31048,31049,31056,31059,31061,31062,31063,31066,31069,31070,31071,31072,31074,31077,31080,31085,31095,31098,31103,31104,31105,31108,31109,31114,31117,31118,31119,31124,31131,31133,31142,31143,31146,31150,31152,31155,31161,31162,31165,31166,31167,31168,31169,31177,31179,31185,31186,31189,31192,31199,31201,31203,31204,31206,31207,31209,31212,31216,31227,31232,31240,31243,31245,31246,31252,31255,31256,31257,31258,31260,31263,31264,31278,31281,31282,31287,31291,31292,31293,31294,31295,31296,31298,31299,31302,31305,31309,31310,31311,31312,31319,31329,31330,31331,31337,31339,31344,31348,31350,31353,31354,31357,31359,31361,31363,31364,31368,31378,31379,31381,31382,31383,31384,31391,31401,31402,31406,31407,31408,31414,31418,31423,31427,31428,31429,31431,31432,31434,31435,31437,31439,31441,31442,31443,31445,31449,31450,31452,31453,31455,31456,31457,31458,31459,31461,31462,31463,31466,31467,31469,31471,31472,31478,31480,31481,31482,31487,31490,31492,31494,31496,31498,31499,31503,31505,31512,31513,31515,31518,31520,31525,31526,31528,31532,31539,31541,31542,31545,31557,31558,31560,31561,31563,31564,31565,31567,31568,31569,31570,31572,31574,31581,31589,31591,31596,31598,31600,31601,31604,31605,31610,31622,31623,31627,31629,31631,31634,31636,31637,31639,31640,31641,31642,31644,31645,31646,31647,31649,31658,31661,31665,31668,31672,31680,31681,31684,31686,31687,31689,31691,31692,31695,31709,31712,31716,31717,31718,31721,31725,31731,31734,31735,31744,31751,31757,31761,31762,31763,31764,31767,31775,31777,31779,31783,31786,31787,31799,31800,31805,31806,31807,31808,31811,31820,31821,31823,31824,31828,31830,31832,31839,31840,31844,31845,31852,31859,31861,31870,31873,31874,31875,31881,31883,31885,31888,31890,31893,31895,31896,31899,31903,31905,31906,31908,31909,31911,31912,31915,31917,31918,31921,31922,31923,31929,31933,31934,31936,31938,31941,31946,31950,31954,31958,31960,31964,31966,31967,31968,31970,31975,31983,31986,31988,31990,31992,31994,31995,31998,32000,32002,32004,32005,32006,32010,32011,32013,32016,32020,32021,32023,32024,32025,32026,32027,32028,32032,32033,32034,32043,32044,32046,32047,32048,32050,32051,32053,32057,32058,32063,32066,32067,32068,32069,32070,32072,32075,32076,32078,32079,32080,32086,32091,32092,32094,32097,32098,32099,32102,32104,32110,32113,32114,32115,32117,32118,32121,32125,32137,32143,32147,32153,32154,32155,32156,32159,32160,32162,32163,32171,32172,32173,32174,32175,32176,32177,32178,32180,32181,32183,32184,32186,32187,32189,32190,32191,32199,32202,32203,32207,32209,32210,32213,32214,32216,32218,32220,32221,32222,32224,32225,32228,32232,32233,32236,32239,32242,32244,32251,32257,32260,32261,32265,32266,32267,32274,32283,32286,32287,32289,32290,32291,32294,32299,32302,32305,32306,32309,32311,32313,32314,32315,32317,32318,32321,32323,32326,32330,32331,32333,32338,32340,32341,32342,32345,32346,32349,32350,32358,32359,32361,32362,32365,32368,32377,32379,32380,32381,32383,32386,32387,32392,32393,32394,32396,32398,32399,32400,32402,32403,32404,32406,32411,32412,32566,32568,32570,32581,32583,32588,32589,32590,32592,32593,32596,32597,32600,32607,32608,32615,32616,32617,32618,32619,32622,32624,32626,32629,32631,32632,32633,32642,32643,32645,32646,32647,32648,32650,32652,32654,32660,32666,32669,32670,32673,32675,32676,32680,32681,32686,32687,32690,32694,32696,32697,32701,32705,32709,32710,32714,32716,32722,32724,32725,32736,32737,32742,32745,32747,32752,32755,32761,32763,32764,32768,32769,32771,32772,32773,32774,32779,32780,32784,32786,32789,32791,32792,32793,32796,32801,32808,32819,32822,32827,32829,32831,32838,32842,32850,32854,32856,32858,32862,32863,32865,32866,32872,32879,32880,32882,32883,32884,32886,32887,32889,32893,32894,32895,32900,32901,32902,32903,32905,32907,32908,32915,32918,32920,32922,32923,32925,32929,32930,32933,32937,32938,32940,32941,32943,32945,32946,32948,32954,32963,32964,32966,32972,32974,32982,32985,32986,32987,32989,32990,32993,32996,32997,33007,33009,33012,33016,33020,33021,33026,33029,33030,33031,33032,33033,33034,33050,33051,33059,33065,33071,33073,33075,33081,33086,33094,33099,33102,33104,33105,33107,33108,33109,33119,33125,33126,33131,33134,33136,33137,33140,33144,33145,33146,33151,33152,33154,33155,33160,33162,33167,33171,33173,33178,33180,33181,33184,33187,33188,33192,33193,33200,33203,33205,33208,33210,33213,33214,33215,33216,33218,33222,33224,33225,33229,33233,33235,33240,33241,33242,33247,33248,33251,33253,33255,33256,33258,33261,33267,33268,33274,33275,33276,33278,33281,33282,33285,33287,33288,33289,33290,33292,33293,33294,33296,33298,33302,33303,33304,33307,33308,33310,33311,33321,33322,33323,33324,33326,33331,33333,33334,33335,33336,33337,33344,33351,33368,33369,33370,33373,33375,33378,33380,33382,33384,33386,33387,33390,33391,33393,33394,33398,33399,33400,33406,33419,33421,33426,33433,33437,33439,33445,33446,33451,33452,33453,33455,33457,33459,33464,33465,33467,33469,33477,33489,33490,33491,33492,33495,33497,33499,33500,33502,33503,33505,33507,33509,33510,33511,33515,33521,33523,33524,33529,33530,33531,33537,33538,33539,33540,33541,33542,33545,33550,33558,33559,33560,33564,33571,33576,33579,33583,33585,33586,33588,33589,33590,33592,33593,33600,33605,33609,33610,33615,33616,33618,33624,33634,33651,33653,33655,33659,33660,33663,33669,33671,33673,33674,33678,33683,33686,33690,33694,33695,33696,33698,33704,33706,33707,33713,33717,33725,33729,33733,33735,33738,33740,33742,33747,33750,33752,33756,33759,33760,33769,33771,33775,33776,33777,33778,33780,33782,33783,33787,33789,33795,33796,33799,33803,33804,33805,33806,33811,33824,33826,33833,33834,33836,33841,33845,33848,33852,33853,33862,33864,33865,33870,33879,33883,33889,33890,33891,33894,33897,33899,33900,33901,33902,33903,33905,33909,33911,33913,33914,33922,33924,33931,33936,33940,33945,33948,33951,33953,33965,33970,33972,33976,33977,33979,33980,33983,33985,33988,33990,33993,33994,33995,33997,34000,34001,34006,34009,34010,34012,34028,34030,34036,34044,34047,34048,34054,34065,34067,34068,34069,34071,34072,34074,34079,34081,34086,34092,34093,34101,34109,34112,34113,34115,34120,34121,34122,34123,34126,34131,34133,34135,34136,34137,34138,34147,34152,34153,34154,34155,34157,34167,34174,34176,34180,34183,34184,34186,34192,34193,34196,34199,34201,34203,34204,34212,34214,34216,34217,34218,34219,34220,34222,34223,34224,34233,34234,34241,34249,34253,34255,34256,34261,34268,34269,34276,34277,34281,34282,34295,34297,34298,34299,34302,34306,34310,34311,34314,34315,34323,34326,34327,34330,34338,34349,34351,34352,34367,34381,34382,34384,34388,34389,34394,34396,34398,34399,34407,34411,34417,34425,34427,34442,34443,34444,34451,34453,34467,34468,34473,34474,34475,34479,34480,34486,34500,34502,34503,34505,34507,34509,34510,34516,34521,34523,34526,34527,34532,34537,34540,34541,34542,34543,34552,34553,34555,34558,34560,34562,34563,34566,34568,34569,34570,34573,34577,34578,34584,34586,34588,34597,34601,34612,34615,34619,34623,34633,34635,34636,34638,34643,34645,34647,34649,34655,34656,34659,34662,34664,34666,34670,34676,34678,34680,34687,34690,34701,34719,34722,34731,34735,34739,34746,34747,34749,34752,34756,34758,34759,34763,34768,34770,34784,34799,34802,34806,34807,34809,34811,34814,34821,34823,34829,34830,34831,34833,34837,34838,34849,34850,34851,34855,34865,34870,34873,34875,34880,34882,34884,34886,34892,34893,34898,34899,34903,34905,34907,34909,34910,34913,34914,34915,34920,34923,34928,34930,34933,34935,34941,34942,34943,34945,34946,34952,34955,34957,34962,34966,34967,34969,34974,34978,34980,34987,34990,34992,34993,34996,34997,34999,35007,35009,35010,35011,35012,35013,35023,35028,35029,35032,35033,35036,35037,35039,35041,35048,35058,35059,35060,35061,35064,35065,35068,35069,35070,35074,35076,35079,35082,35084,35088,35090,35091,35100,35101,35102,35109,35114,35115,35126,35128,35131,35137,35139,35140,35148,35149,35158,35166,35167,35168,35172,35174,35178,35181,35183,35186,35188,35191,35198,35199,35201,35203,35206,35207,35208,35210,35211,35215,35219,35222,35223,35224,35226,35233,35238,35239,35241,35242,35244,35247,35250,35251,35258,35261,35263,35264,35282,35290,35292,35293,35299,35302,35303,35316,35320,35328,35330,35331,35336,35338,35340,35342,35344,35346,35347,35350,35351,35352,35355,35357,35359,35363,35365,35370,35373,35377,35379,35380,35382,35383,35386,35387,35388,35393,35398,35400,35408,35409,35410,35412,35413,35419,35422,35424,35426,35427,35430,35433,35435,35436,35437,35438,35440,35441,35442,35443,35449,35452,35458,35460,35461,35463,35465,35468,35469,35473,35475,35477,35480,35482,35486,35488,35489,35491,35492,35493,35494,35495,35496,35500,35501,35504,35506,35513,35516,35518,35519,35522,35524,35527,35531,35532,35533,35535,35538,35542,35546,35547,35548,35550,35551,35552,35553,35554,35556,35558,35559,35563,35565,35566,35569,35571,35574,35575,35576,35578,35582,35584,35585,35586,35588,35591,35596,35598,35600,35604,35606,35607,35609,35610,35611,35613,35616,35617,35622,35624,35627,35628,35635,35641,35646,35649,35657,35660,35662,35663,35667,35670,35672,35674,35675,35676,35679,35686,35691,35692,35695,35696,35697,35698,35700,35703,35709,35711,35712,35715,35722,35724,35726,35728,35730,35731,35734,35737,35738,35895,35898,35903,35905,35910,35912,35914,35916,35918,35920,35925,35930,35937,35938,35946,35947,35948,35960,35961,35962,35964,35970,35973,35977,35978,35980,35981,35982,35988,35992,35997,35998,36000,36001,36002,36007,36008,36009,36010,36011,36012,36013,36014,36015,36016,36018,36019,36020,36022,36023,36024,36027,36028,36029,36031,36032,36033,36034,36035,36036,36039,36040,36042,36045,36046,36049,36051,36058,36059,36060,36062,36064,36066,36067,36068,36070,36074,36077,36080,36084,36090,36091,36092,36093,36100,36101,36103,36104,36106,36107,36109,36111,36112,36114,36115,36116,36118,36196,36198,36199,36203,36205,36208,36209,36211,36212,36214,36215,36225,36229,36234,36249,36259,36264,36275,36282,36286,36290,36299,36300,36303,36310,36314,36315,36317,36319,36321,36323,36328,36330,36331,36335,36339,36341,36348,36351,36360,36361,36362,36367,36368,36381,36382,36383,36394,36400,36404,36405,36418,36420,36423,36424,36425,36426,36428,36432,36437,36441,36447,36448,36451,36452,36466,36468,36470,36476,36481,36484,36485,36487,36490,36491,36493,36497,36499,36500,36505,36513,36522,36523,36524,36527,36528,36529,36542,36549,36550,36552,36554,36555,36556,36557,36559,36562,36571,36575,36578,36579,36587,36600,36603,36604,36605,36606,36611,36613,36617,36618,36620,36626,36627,36628,36629,36633,36635,36636,36637,36639,36646,36649,36650,36655,36659,36664,36665,36667,36670,36671,36674,36676,36677,36678,36681,36684,36685,36686,36695,36700,36703,36705,36706,36707,36708,36763,36764,36766,36767,36771,36775,36776,36781,36782,36783,36784,36785,36786,36791,36794,36795,36796,36799,36802,36804,36805,36814,36817,36820,36826,36834,36837,36838,36841,36842,36843,36845,36847,36848,36852,36855,36856,36857,36858,36861,36864,36865,36867,36869,36870,36875,36877,36878,36879,36880,36881,36883,36884,36885,36886,36887,36889,36890,36893,36894,36895,36896,36897,36898,36899,36903,36910,36913,36914,36917,36918,36920,36921,36924,36926,36929,36930,36933,36935,36937,36938,36939,36941,36942,36943,36944,36945,36946,36947,36948,36949,36950,36952,36953,36956,36958,36960,36961,36963,36965,36967,36968,36969,36973,36974,36975,36978,36981,36982,36983,36984,36986,36988,36989,36991,36992,36993,36994,36995,36996,36999,37001,37002,37007,37009,37027,37030,37032,37034,37039,37041,37045,37048,37057,37066,37070,37083,37086,37089,37090,37092,37096,37101,37109,37111,37117,37122,37138,37141,37145,37159,37165,37168,37170,37193,37194,37195,37196,37197,37198,37202,37204,37206,37208,37218,37219,37221,37225,37226,37228,37234,37235,37237,37239,37240,37250,37255,37257,37259,37261,37264,37266,37271,37276,37282,37284,37290,37291,37295,37300,37301,37304,37306,37312,37313,37318,37319,37320,37321,37323,37324,37325,37326,37327,37328,37329,37334,37335,37336,37338,37339,37340,37341,37342,37343,37345,37347,37348,37349,37350,37351,37357,37358,37365,37366,37372,37375,37382,37386,37389,37390,37392,37393,37396,37397,37406,37417,37420,37428,37431,37433,37434,37436,37439,37440,37444,37445,37448,37449,37451,37454,37456,37457,37463,37465,37466,37467,37470,37474,37476,37478,37479,37489,37495,37496,37502,37504,37507,37509,37512,37521,37523,37525,37526,37528,37530,37531,37532,37543,37549,37559,37561,37583,37584,37586,37587,37589,37591,37593,37600,37604,37607,37609,37610,37613,37618,37619,37624,37625,37626,37627,37628,37631,37634,37638,37647,37648,37656,37657,37658,37661,37662,37664,37665,37666,37667,37669,37670,37672,37675,37676,37678,37679,37682,37685,37690,37691,37700,37704,37707,37709,37716,37718,37719,37723,37724,37728,37740,37742,37744,37749,37756,37758,37772,37780,37782,37783,37786,37796,37799,37804,37805,37806,37808,37817,37827,37830,37832,37840,37841,37846,37847,37848,37853,37854,37857,37860,37861,37864,37880,37891,37895,37904,37907,37908,37912,37913,37914,37921,37931,37937,37941,37942,37944,37946,37953,37956,37957,37960,37969,37970,37971,37978,37979,37982,37984,37986,37994,38000,38005,38007,38012,38013,38014,38015,38017,38263,38272,38274,38275,38279,38281,38282,38283,38287,38289,38290,38291,38292,38294,38296,38297,38304,38306,38307,38308,38309,38311,38312,38317,38322,38329,38331,38332,38334,38339,38343,38346,38348,38349,38356,38357,38358,38360,38364,38369,38370,38373,38428,38433,38440,38442,38446,38447,38450,38459,38463,38464,38466,38468,38475,38476,38477,38479,38480,38491,38492,38493,38494,38495,38498,38499,38500,38501,38502,38506,38508,38512,38514,38515,38517,38518,38519,38520,38522,38525,38533,38534,38536,38538,38539,38541,38542,38543,38548,38549,38551,38552,38553,38555,38556,38557,38560,38563,38567,38568,38570,38575,38576,38577,38578,38580,38582,38583,38584,38585,38587,38588,38592,38593,38596,38597,38598,38599,38601,38603,38604,38605,38606,38609,38613,38614,38617,38619,38620,38626,38627,38632,38634,38635,38640,38642,38646,38647,38649,38651,38656,38660,38662,38663,38664,38666,38669,38670,38671,38673,38675,38678,38681,38684,38686,38692,38695,38698,38704,38706,38707,38712,38713,38715,38717,38718,38722,38723,38724,38726,38728,38729,38733,38735,38737,38738,38741,38742,38745,38748,38750,38752,38753,38754,38756,38758,38760,38761,38763,38765,38769,38772,38777,38778,38780,38785,38788,38789,38790,38795,38797,38799,38800,38808,38812,38816,38819,38822,38824,38827,38829,38835,38836,38851,38854,38856,38859,38867,38876,38893,38894,38898,38899,38901,38902,38907,38911,38913,38914,38915,38917,38918,38920,38924,38927,38928,38929,38930,38931,38935,38936,38938,38945,38948,38956,38957,38964,38967,38968,38971,38972,38973,38982,38987,38988,38989,38990,38991,38996,38997,38999,39000,39003,39006,39013,39015,39019,39023,39024,39025,39027,39028,39080,39082,39087,39089,39094,39107,39108,39110,39131,39132,39135,39138,39145,39147,39149,39150,39151,39154,39156,39164,39165,39166,39171,39173,39177,39178,39180,39184,39186,39187,39188,39192,39197,39198,39200,39201,39204,39207,39208,39212,39214,39229,39230,39234,39237,39241,39243,39244,39248,39249,39250,39253,39255,39318,39319,39320,39321,39326,39333,39336,39340,39341,39342,39347,39348,39356,39361,39364,39365,39366,39368,39376,39377,39378,39381,39384,39387,39389,39391,39394,39405,39406,39409,39410,39416,39419,39423,39425,39429,39438,39439,39442,39443,39449,39464,39467,39472,39479,39486,39488,39490,39491,39493,39501,39502,39509,39511,39514,39515,39519,39522,39524,39525,39529,39530,39531,39592,39597,39600,39608,39612,39616,39620,39631,39633,39635,39636,39640,39641,39644,39646,39647,39650,39651,39654,39658,39659,39661,39662,39663,39665,39668,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39729,39730,39739,39740,39745,39746,39747,39748,39749,39757,39758,39759,39761,39764,39768,39770,39791,39794,39796,39797,39811,39822,39823,39825,39826,39827,39830,39831,39839,39840,39848,39850,39851,39853,39854,39857,39860,39865,39867,39872,39878,39881,39882,39887,39889,39890,39892,39894,39899,39905,39906,39907,39908,39912,39920,39921,39922,39925,39936,39940,39942,39944,39945,39946,39948,39949,39952,39954,39955,39956,39957,39963,39969,39972,39973,39981,39982,39983,39984,39986,39993,39994,39995,39998,40006,40007,40008,40018,40023,40026,40032,40039,40054,40056,40165,40167,40169,40171,40172,40176,40179,40180,40182,40195,40198,40199,40200,40201,40206,40210,40213,40219,40223,40227,40230,40232,40234,40235,40236,40251,40254,40255,40257,40260,40262,40264,40272,40273,40281,40284,40285,40286,40288,40289,40292,40299,40300,40303,40304,40306,40314,40327,40329,40335,40346,40356,40361,40363,40367,40370,40372,40376,40378,40379,40385,40386,40388,40390,40399,40403,40409,40422,40429,40431,40434,40440,40441,40442,40445,40473,40474,40475,40478,40565,40568,40569,40573,40575,40577,40584,40587,40588,40593,40594,40595,40597,40599,40605,40607,40613,40614,40617,40618,40621,40632,40633,40634,40635,40636,40638,40639,40644,40652,40653,40654,40655,40656,40657,40658,40660,40664,40665,40667,40668,40669,40670,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,40718,40723,40725,40736,40737,40748,40763,40766,40778,40779,40782,40783,40786,40788,40799,40800,40801,40802,40803,40806,40807,40810,40812,40818,40822,40823,40845,40853,40860,40861,40864,63785,63964,64014,64015,64016,64017,64018,64019,64020,64021,64022,64023,64024,64025,64026,64027,64028,64029,64030,64031,64032,64033,64034,64035,64036,64037,64038,64039,64040,64041,64042,64043,64044,64045,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65374,65377,65378,65379,65380,65381,65382,65383,65384,65385,65386,65387,65388,65389,65390,65391,65392,65393,65394,65395,65396,65397,65398,65399,65400,65401,65402,65403,65404,65405,65406,65407,65408,65409,65410,65411,65412,65413,65414,65415,65416,65417,65418,65419,65420,65421,65422,65423,65424,65425,65426,65427,65428,65429,65430,65431,65432,65433,65434,65435,65436,65437,65438,65439,65504,65505,65506,65507,65508,65509,728,711,184,729,733,175,731,730,65374,900,901,161,166,191,186,170,169,174,8482,164,8470,902,904,905,906,938,908,910,939,911,940,941,942,943,970,912,972,962,973,971,944,974,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1118,1119,198,272,294,306,321,319,330,216,338,358,222,230,273,240,295,305,307,312,322,320,329,331,248,339,223,359,254,193,192,196,194,258,461,256,260,197,195,262,264,268,199,266,270,201,200,203,202,282,278,274,280,284,286,290,288,292,205,204,207,206,463,304,298,302,296,308,310,313,317,315,323,327,325,209,211,210,214,212,465,336,332,213,340,344,342,346,348,352,350,356,354,218,217,220,219,364,467,368,362,370,366,360,471,475,473,469,372,221,376,374,377,381,379,225,224,228,226,259,462,257,261,229,227,263,265,269,231,267,271,233,232,235,234,283,279,275,281,501,285,287,289,293,237,236,239,238,464,299,303,297,309,311,314,318,316,324,328,326,241,243,242,246,244,466,337,333,245,341,345,343,347,349,353,351,357,355,250,249,252,251,365,468,369,363,371,367,361,472,476,474,470,373,253,255,375,378,382,380,19970,19972,19973,19980,19986,19999,20003,20004,20008,20011,20014,20015,20016,20021,20032,20033,20036,20039,20049,20058,20060,20067,20072,20073,20084,20085,20089,20095,20109,20118,20119,20125,20143,20153,20163,20176,20186,20187,20192,20193,20194,20200,20207,20209,20211,20213,20221,20222,20223,20224,20226,20227,20232,20235,20236,20242,20245,20246,20247,20249,20270,20273,20320,20275,20277,20279,20281,20283,20286,20288,20290,20296,20297,20299,20300,20306,20308,20310,20312,20319,20323,20330,20332,20334,20337,20343,20344,20345,20346,20349,20350,20353,20354,20356,20357,20361,20362,20364,20366,20368,20370,20371,20372,20375,20377,20378,20382,20383,20402,20407,20409,20411,20412,20413,20414,20416,20417,20421,20422,20424,20425,20427,20428,20429,20431,20434,20444,20448,20450,20464,20466,20476,20477,20479,20480,20481,20484,20487,20490,20492,20494,20496,20499,20503,20504,20507,20508,20509,20510,20514,20519,20526,20528,20530,20531,20533,20544,20545,20546,20549,20550,20554,20556,20558,20561,20562,20563,20567,20569,20575,20576,20578,20579,20582,20583,20586,20589,20592,20593,20539,20609,20611,20612,20614,20618,20622,20623,20624,20626,20627,20628,20630,20635,20636,20638,20639,20640,20641,20642,20650,20655,20656,20665,20666,20669,20672,20675,20676,20679,20684,20686,20688,20691,20692,20696,20700,20701,20703,20706,20708,20710,20712,20713,20719,20721,20726,20730,20734,20739,20742,20743,20744,20747,20748,20749,20750,20722,20752,20759,20761,20763,20764,20765,20766,20771,20775,20776,20780,20781,20783,20785,20787,20788,20789,20792,20793,20802,20810,20815,20819,20821,20823,20824,20831,20836,20838,20862,20867,20868,20875,20878,20888,20893,20897,20899,20909,20920,20922,20924,20926,20927,20930,20936,20943,20945,20946,20947,20949,20952,20958,20962,20965,20974,20978,20979,20980,20983,20993,20994,20997,21010,21011,21013,21014,21016,21026,21032,21041,21042,21045,21052,21061,21065,21077,21079,21080,21082,21084,21087,21088,21089,21094,21102,21111,21112,21113,21120,21122,21125,21130,21132,21139,21141,21142,21143,21144,21146,21148,21156,21157,21158,21159,21167,21168,21174,21175,21176,21178,21179,21181,21184,21188,21190,21192,21196,21199,21201,21204,21206,21211,21212,21217,21221,21224,21225,21226,21228,21232,21233,21236,21238,21239,21248,21251,21258,21259,21260,21265,21267,21272,21275,21276,21278,21279,21285,21287,21288,21289,21291,21292,21293,21296,21298,21301,21308,21309,21310,21314,21324,21323,21337,21339,21345,21347,21349,21356,21357,21362,21369,21374,21379,21383,21384,21390,21395,21396,21401,21405,21409,21412,21418,21419,21423,21426,21428,21429,21431,21432,21434,21437,21440,21445,21455,21458,21459,21461,21466,21469,21470,21472,21478,21479,21493,21506,21523,21530,21537,21543,21544,21546,21551,21553,21556,21557,21571,21572,21575,21581,21583,21598,21602,21604,21606,21607,21609,21611,21613,21614,21620,21631,21633,21635,21637,21640,21641,21645,21649,21653,21654,21660,21663,21665,21670,21671,21673,21674,21677,21678,21681,21687,21689,21690,21691,21695,21702,21706,21709,21710,21728,21738,21740,21743,21750,21756,21758,21759,21760,21761,21765,21768,21769,21772,21773,21774,21781,21802,21803,21810,21813,21814,21819,21820,21821,21825,21831,21833,21834,21837,21840,21841,21848,21850,21851,21854,21856,21857,21860,21862,21887,21889,21890,21894,21896,21902,21903,21905,21906,21907,21908,21911,21923,21924,21933,21938,21951,21953,21955,21958,21961,21963,21964,21966,21969,21970,21971,21975,21976,21979,21982,21986,21993,22006,22015,22021,22024,22026,22029,22030,22031,22032,22033,22034,22041,22060,22064,22067,22069,22071,22073,22075,22076,22077,22079,22080,22081,22083,22084,22086,22089,22091,22093,22095,22100,22110,22112,22113,22114,22115,22118,22121,22125,22127,22129,22130,22133,22148,22149,22152,22155,22156,22165,22169,22170,22173,22174,22175,22182,22183,22184,22185,22187,22188,22189,22193,22195,22199,22206,22213,22217,22218,22219,22223,22224,22220,22221,22233,22236,22237,22239,22241,22244,22245,22246,22247,22248,22257,22251,22253,22262,22263,22273,22274,22279,22282,22284,22289,22293,22298,22299,22301,22304,22306,22307,22308,22309,22313,22314,22316,22318,22319,22323,22324,22333,22334,22335,22341,22342,22348,22349,22354,22370,22373,22375,22376,22379,22381,22382,22383,22384,22385,22387,22388,22389,22391,22393,22394,22395,22396,22398,22401,22403,22412,22420,22423,22425,22426,22428,22429,22430,22431,22433,22421,22439,22440,22441,22444,22456,22461,22471,22472,22476,22479,22485,22493,22494,22500,22502,22503,22505,22509,22512,22517,22518,22520,22525,22526,22527,22531,22532,22536,22537,22497,22540,22541,22555,22558,22559,22560,22566,22567,22573,22578,22585,22591,22601,22604,22605,22607,22608,22613,22623,22625,22628,22631,22632,22648,22652,22655,22656,22657,22663,22664,22665,22666,22668,22669,22671,22672,22676,22678,22685,22688,22689,22690,22694,22697,22705,22706,22724,22716,22722,22728,22733,22734,22736,22738,22740,22742,22746,22749,22753,22754,22761,22771,22789,22790,22795,22796,22802,22803,22804,34369,22813,22817,22819,22820,22824,22831,22832,22835,22837,22838,22847,22851,22854,22866,22867,22873,22875,22877,22878,22879,22881,22883,22891,22893,22895,22898,22901,22902,22905,22907,22908,22923,22924,22926,22930,22933,22935,22943,22948,22951,22957,22958,22959,22960,22963,22967,22970,22972,22977,22979,22980,22984,22986,22989,22994,23005,23006,23007,23011,23012,23015,23022,23023,23025,23026,23028,23031,23040,23044,23052,23053,23054,23058,23059,23070,23075,23076,23079,23080,23082,23085,23088,23108,23109,23111,23112,23116,23120,23125,23134,23139,23141,23143,23149,23159,23162,23163,23166,23179,23184,23187,23190,23193,23196,23198,23199,23200,23202,23207,23212,23217,23218,23219,23221,23224,23226,23227,23231,23236,23238,23240,23247,23258,23260,23264,23269,23274,23278,23285,23286,23293,23296,23297,23304,23319,23348,23321,23323,23325,23329,23333,23341,23352,23361,23371,23372,23378,23382,23390,23400,23406,23407,23420,23421,23422,23423,23425,23428,23430,23434,23438,23440,23441,23443,23444,23446,23464,23465,23468,23469,23471,23473,23474,23479,23482,23484,23488,23489,23501,23503,23510,23511,23512,23513,23514,23520,23535,23537,23540,23549,23564,23575,23582,23583,23587,23590,23593,23595,23596,23598,23600,23602,23605,23606,23641,23642,23644,23650,23651,23655,23656,23657,23661,23664,23668,23669,23674,23675,23676,23677,23687,23688,23690,23695,23698,23709,23711,23712,23714,23715,23718,23722,23730,23732,23733,23738,23753,23755,23762,23773,23767,23790,23793,23794,23796,23809,23814,23821,23826,23851,23843,23844,23846,23847,23857,23860,23865,23869,23871,23874,23875,23878,23880,23893,23889,23897,23882,23903,23904,23905,23906,23908,23914,23917,23920,23929,23930,23934,23935,23937,23939,23944,23946,23954,23955,23956,23957,23961,23963,23967,23968,23975,23979,23984,23988,23992,23993,24003,24007,24011,24016,24014,24024,24025,24032,24036,24041,24056,24057,24064,24071,24077,24082,24084,24085,24088,24095,24096,24110,24104,24114,24117,24126,24139,24144,24137,24145,24150,24152,24155,24156,24158,24168,24170,24171,24172,24173,24174,24176,24192,24203,24206,24226,24228,24229,24232,24234,24236,24241,24243,24253,24254,24255,24262,24268,24267,24270,24273,24274,24276,24277,24284,24286,24293,24299,24322,24326,24327,24328,24334,24345,24348,24349,24353,24354,24355,24356,24360,24363,24364,24366,24368,24372,24374,24379,24381,24383,24384,24388,24389,24391,24397,24400,24404,24408,24411,24416,24419,24420,24423,24431,24434,24436,24437,24440,24442,24445,24446,24457,24461,24463,24470,24476,24477,24482,24487,24491,24484,24492,24495,24496,24497,24504,24516,24519,24520,24521,24523,24528,24529,24530,24531,24532,24542,24545,24546,24552,24553,24554,24556,24557,24558,24559,24562,24563,24566,24570,24572,24583,24586,24589,24595,24596,24599,24600,24602,24607,24612,24621,24627,24629,24640,24647,24648,24649,24652,24657,24660,24662,24663,24669,24673,24679,24689,24702,24703,24706,24710,24712,24714,24718,24721,24723,24725,24728,24733,24734,24738,24740,24741,24744,24752,24753,24759,24763,24766,24770,24772,24776,24777,24778,24779,24782,24783,24788,24789,24793,24795,24797,24798,24802,24805,24818,24821,24824,24828,24829,24834,24839,24842,24844,24848,24849,24850,24851,24852,24854,24855,24857,24860,24862,24866,24874,24875,24880,24881,24885,24886,24887,24889,24897,24901,24902,24905,24926,24928,24940,24946,24952,24955,24956,24959,24960,24961,24963,24964,24971,24973,24978,24979,24983,24984,24988,24989,24991,24992,24997,25000,25002,25005,25016,25017,25020,25024,25025,25026,25038,25039,25045,25052,25053,25054,25055,25057,25058,25063,25065,25061,25068,25069,25071,25089,25091,25092,25095,25107,25109,25116,25120,25122,25123,25127,25129,25131,25145,25149,25154,25155,25156,25158,25164,25168,25169,25170,25172,25174,25178,25180,25188,25197,25199,25203,25210,25213,25229,25230,25231,25232,25254,25256,25267,25270,25271,25274,25278,25279,25284,25294,25301,25302,25306,25322,25330,25332,25340,25341,25347,25348,25354,25355,25357,25360,25363,25366,25368,25385,25386,25389,25397,25398,25401,25404,25409,25410,25411,25412,25414,25418,25419,25422,25426,25427,25428,25432,25435,25445,25446,25452,25453,25457,25460,25461,25464,25468,25469,25471,25474,25476,25479,25482,25488,25492,25493,25497,25498,25502,25508,25510,25517,25518,25519,25533,25537,25541,25544,25550,25553,25555,25556,25557,25564,25568,25573,25578,25580,25586,25587,25589,25592,25593,25609,25610,25616,25618,25620,25624,25630,25632,25634,25636,25637,25641,25642,25647,25648,25653,25661,25663,25675,25679,25681,25682,25683,25684,25690,25691,25692,25693,25695,25696,25697,25699,25709,25715,25716,25723,25725,25733,25735,25743,25744,25745,25752,25753,25755,25757,25759,25761,25763,25766,25768,25772,25779,25789,25790,25791,25796,25801,25802,25803,25804,25806,25808,25809,25813,25815,25828,25829,25833,25834,25837,25840,25845,25847,25851,25855,25857,25860,25864,25865,25866,25871,25875,25876,25878,25881,25883,25886,25887,25890,25894,25897,25902,25905,25914,25916,25917,25923,25927,25929,25936,25938,25940,25951,25952,25959,25963,25978,25981,25985,25989,25994,26002,26005,26008,26013,26016,26019,26022,26030,26034,26035,26036,26047,26050,26056,26057,26062,26064,26068,26070,26072,26079,26096,26098,26100,26101,26105,26110,26111,26112,26116,26120,26121,26125,26129,26130,26133,26134,26141,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26161,26163,26169,26167,26176,26181,26182,26186,26188,26193,26190,26199,26200,26201,26203,26204,26208,26209,26363,26218,26219,26220,26238,26227,26229,26239,26231,26232,26233,26235,26240,26236,26251,26252,26253,26256,26258,26265,26266,26267,26268,26271,26272,26276,26285,26289,26290,26293,26299,26303,26304,26306,26307,26312,26316,26318,26319,26324,26331,26335,26344,26347,26348,26350,26362,26373,26375,26382,26387,26393,26396,26400,26402,26419,26430,26437,26439,26440,26444,26452,26453,26461,26470,26476,26478,26484,26486,26491,26497,26500,26510,26511,26513,26515,26518,26520,26521,26523,26544,26545,26546,26549,26555,26556,26557,26617,26560,26562,26563,26565,26568,26569,26578,26583,26585,26588,26593,26598,26608,26610,26614,26615,26706,26644,26649,26653,26655,26664,26663,26668,26669,26671,26672,26673,26675,26683,26687,26692,26693,26698,26700,26709,26711,26712,26715,26731,26734,26735,26736,26737,26738,26741,26745,26746,26747,26748,26754,26756,26758,26760,26774,26776,26778,26780,26785,26787,26789,26793,26794,26798,26802,26811,26821,26824,26828,26831,26832,26833,26835,26838,26841,26844,26845,26853,26856,26858,26859,26860,26861,26864,26865,26869,26870,26875,26876,26877,26886,26889,26890,26896,26897,26899,26902,26903,26929,26931,26933,26936,26939,26946,26949,26953,26958,26967,26971,26979,26980,26981,26982,26984,26985,26988,26992,26993,26994,27002,27003,27007,27008,27021,27026,27030,27032,27041,27045,27046,27048,27051,27053,27055,27063,27064,27066,27068,27077,27080,27089,27094,27095,27106,27109,27118,27119,27121,27123,27125,27134,27136,27137,27139,27151,27153,27157,27162,27165,27168,27172,27176,27184,27186,27188,27191,27195,27198,27199,27205,27206,27209,27210,27214,27216,27217,27218,27221,27222,27227,27236,27239,27242,27249,27251,27262,27265,27267,27270,27271,27273,27275,27281,27291,27293,27294,27295,27301,27307,27311,27312,27313,27316,27325,27326,27327,27334,27337,27336,27340,27344,27348,27349,27350,27356,27357,27364,27367,27372,27376,27377,27378,27388,27389,27394,27395,27398,27399,27401,27407,27408,27409,27415,27419,27422,27428,27432,27435,27436,27439,27445,27446,27451,27455,27462,27466,27469,27474,27478,27480,27485,27488,27495,27499,27502,27504,27509,27517,27518,27522,27525,27543,27547,27551,27552,27554,27555,27560,27561,27564,27565,27566,27568,27576,27577,27581,27582,27587,27588,27593,27596,27606,27610,27617,27619,27622,27623,27630,27633,27639,27641,27647,27650,27652,27653,27657,27661,27662,27664,27666,27673,27679,27686,27687,27688,27692,27694,27699,27701,27702,27706,27707,27711,27722,27723,27725,27727,27730,27732,27737,27739,27740,27755,27757,27759,27764,27766,27768,27769,27771,27781,27782,27783,27785,27796,27797,27799,27800,27804,27807,27824,27826,27828,27842,27846,27853,27855,27856,27857,27858,27860,27862,27866,27868,27872,27879,27881,27883,27884,27886,27890,27892,27908,27911,27914,27918,27919,27921,27923,27930,27942,27943,27944,27751,27950,27951,27953,27961,27964,27967,27991,27998,27999,28001,28005,28007,28015,28016,28028,28034,28039,28049,28050,28052,28054,28055,28056,28074,28076,28084,28087,28089,28093,28095,28100,28104,28106,28110,28111,28118,28123,28125,28127,28128,28130,28133,28137,28143,28144,28148,28150,28156,28160,28164,28190,28194,28199,28210,28214,28217,28219,28220,28228,28229,28232,28233,28235,28239,28241,28242,28243,28244,28247,28252,28253,28254,28258,28259,28264,28275,28283,28285,28301,28307,28313,28320,28327,28333,28334,28337,28339,28347,28351,28352,28353,28355,28359,28360,28362,28365,28366,28367,28395,28397,28398,28409,28411,28413,28420,28424,28426,28428,28429,28438,28440,28442,28443,28454,28457,28458,28463,28464,28467,28470,28475,28476,28461,28495,28497,28498,28499,28503,28505,28506,28509,28510,28513,28514,28520,28524,28541,28542,28547,28551,28552,28555,28556,28557,28560,28562,28563,28564,28566,28570,28575,28576,28581,28582,28583,28584,28590,28591,28592,28597,28598,28604,28613,28615,28616,28618,28634,28638,28648,28649,28656,28661,28665,28668,28669,28672,28677,28678,28679,28685,28695,28704,28707,28719,28724,28727,28729,28732,28739,28740,28744,28745,28746,28747,28756,28757,28765,28766,28750,28772,28773,28780,28782,28789,28790,28798,28801,28805,28806,28820,28821,28822,28823,28824,28827,28836,28843,28848,28849,28852,28855,28874,28881,28883,28884,28885,28886,28888,28892,28900,28922,28931,28932,28933,28934,28935,28939,28940,28943,28958,28960,28971,28973,28975,28976,28977,28984,28993,28997,28998,28999,29002,29003,29008,29010,29015,29018,29020,29022,29024,29032,29049,29056,29061,29063,29068,29074,29082,29083,29088,29090,29103,29104,29106,29107,29114,29119,29120,29121,29124,29131,29132,29139,29142,29145,29146,29148,29176,29182,29184,29191,29192,29193,29203,29207,29210,29213,29215,29220,29227,29231,29236,29240,29241,29249,29250,29251,29253,29262,29263,29264,29267,29269,29270,29274,29276,29278,29280,29283,29288,29291,29294,29295,29297,29303,29304,29307,29308,29311,29316,29321,29325,29326,29331,29339,29352,29357,29358,29361,29364,29374,29377,29383,29385,29388,29397,29398,29400,29407,29413,29427,29428,29434,29435,29438,29442,29444,29445,29447,29451,29453,29458,29459,29464,29465,29470,29474,29476,29479,29480,29484,29489,29490,29493,29498,29499,29501,29507,29517,29520,29522,29526,29528,29533,29534,29535,29536,29542,29543,29545,29547,29548,29550,29551,29553,29559,29561,29564,29568,29569,29571,29573,29574,29582,29584,29587,29589,29591,29592,29596,29598,29599,29600,29602,29605,29606,29610,29611,29613,29621,29623,29625,29628,29629,29631,29637,29638,29641,29643,29644,29647,29650,29651,29654,29657,29661,29665,29667,29670,29671,29673,29684,29685,29687,29689,29690,29691,29693,29695,29696,29697,29700,29703,29706,29713,29722,29723,29732,29734,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29753,29760,29763,29764,29766,29767,29771,29773,29777,29778,29783,29789,29794,29798,29799,29800,29803,29805,29806,29809,29810,29824,29825,29829,29830,29831,29833,29839,29840,29841,29842,29848,29849,29850,29852,29855,29856,29857,29859,29862,29864,29865,29866,29867,29870,29871,29873,29874,29877,29881,29883,29887,29896,29897,29900,29904,29907,29912,29914,29915,29918,29919,29924,29928,29930,29931,29935,29940,29946,29947,29948,29951,29958,29970,29974,29975,29984,29985,29988,29991,29993,29994,29999,30006,30009,30013,30014,30015,30016,30019,30023,30024,30030,30032,30034,30039,30046,30047,30049,30063,30065,30073,30074,30075,30076,30077,30078,30081,30085,30096,30098,30099,30101,30105,30108,30114,30116,30132,30138,30143,30144,30145,30148,30150,30156,30158,30159,30167,30172,30175,30176,30177,30180,30183,30188,30190,30191,30193,30201,30208,30210,30211,30212,30215,30216,30218,30220,30223,30226,30227,30229,30230,30233,30235,30236,30237,30238,30243,30245,30246,30249,30253,30258,30259,30261,30264,30265,30266,30268,30282,30272,30273,30275,30276,30277,30281,30283,30293,30297,30303,30308,30309,30317,30318,30319,30321,30324,30337,30341,30348,30349,30357,30363,30364,30365,30367,30368,30370,30371,30372,30373,30374,30375,30376,30378,30381,30397,30401,30405,30409,30411,30412,30414,30420,30425,30432,30438,30440,30444,30448,30449,30454,30457,30460,30464,30470,30474,30478,30482,30484,30485,30487,30489,30490,30492,30498,30504,30509,30510,30511,30516,30517,30518,30521,30525,30526,30530,30533,30534,30538,30541,30542,30543,30546,30550,30551,30556,30558,30559,30560,30562,30564,30567,30570,30572,30576,30578,30579,30580,30586,30589,30592,30596,30604,30605,30612,30613,30614,30618,30623,30626,30631,30634,30638,30639,30641,30645,30654,30659,30665,30673,30674,30677,30681,30686,30687,30688,30692,30694,30698,30700,30704,30705,30708,30712,30715,30725,30726,30729,30733,30734,30737,30749,30753,30754,30755,30765,30766,30768,30773,30775,30787,30788,30791,30792,30796,30798,30802,30812,30814,30816,30817,30819,30820,30824,30826,30830,30842,30846,30858,30863,30868,30872,30881,30877,30878,30879,30884,30888,30892,30893,30896,30897,30898,30899,30907,30909,30911,30919,30920,30921,30924,30926,30930,30931,30933,30934,30948,30939,30943,30944,30945,30950,30954,30962,30963,30976,30966,30967,30970,30971,30975,30982,30988,30992,31002,31004,31006,31007,31008,31013,31015,31017,31021,31025,31028,31029,31035,31037,31039,31044,31045,31046,31050,31051,31055,31057,31060,31064,31067,31068,31079,31081,31083,31090,31097,31099,31100,31102,31115,31116,31121,31123,31124,31125,31126,31128,31131,31132,31137,31144,31145,31147,31151,31153,31156,31160,31163,31170,31172,31175,31176,31178,31183,31188,31190,31194,31197,31198,31200,31202,31205,31210,31211,31213,31217,31224,31228,31234,31235,31239,31241,31242,31244,31249,31253,31259,31262,31265,31271,31275,31277,31279,31280,31284,31285,31288,31289,31290,31300,31301,31303,31304,31308,31317,31318,31321,31324,31325,31327,31328,31333,31335,31338,31341,31349,31352,31358,31360,31362,31365,31366,31370,31371,31376,31377,31380,31390,31392,31395,31404,31411,31413,31417,31419,31420,31430,31433,31436,31438,31441,31451,31464,31465,31467,31468,31473,31476,31483,31485,31486,31495,31508,31519,31523,31527,31529,31530,31531,31533,31534,31535,31536,31537,31540,31549,31551,31552,31553,31559,31566,31573,31584,31588,31590,31593,31594,31597,31599,31602,31603,31607,31620,31625,31630,31632,31633,31638,31643,31646,31648,31653,31660,31663,31664,31666,31669,31670,31674,31675,31676,31677,31682,31685,31688,31690,31700,31702,31703,31705,31706,31707,31720,31722,31730,31732,31733,31736,31737,31738,31740,31742,31745,31746,31747,31748,31750,31753,31755,31756,31758,31759,31769,31771,31776,31781,31782,31784,31788,31793,31795,31796,31798,31801,31802,31814,31818,31829,31825,31826,31827,31833,31834,31835,31836,31837,31838,31841,31843,31847,31849,31853,31854,31856,31858,31865,31868,31869,31878,31879,31887,31892,31902,31904,31910,31920,31926,31927,31930,31931,31932,31935,31940,31943,31944,31945,31949,31951,31955,31956,31957,31959,31961,31962,31965,31974,31977,31979,31989,32003,32007,32008,32009,32015,32017,32018,32019,32022,32029,32030,32035,32038,32042,32045,32049,32060,32061,32062,32064,32065,32071,32072,32077,32081,32083,32087,32089,32090,32092,32093,32101,32103,32106,32112,32120,32122,32123,32127,32129,32130,32131,32133,32134,32136,32139,32140,32141,32145,32150,32151,32157,32158,32166,32167,32170,32179,32182,32183,32185,32194,32195,32196,32197,32198,32204,32205,32206,32215,32217,32256,32226,32229,32230,32234,32235,32237,32241,32245,32246,32249,32250,32264,32272,32273,32277,32279,32284,32285,32288,32295,32296,32300,32301,32303,32307,32310,32319,32324,32325,32327,32334,32336,32338,32344,32351,32353,32354,32357,32363,32366,32367,32371,32376,32382,32385,32390,32391,32394,32397,32401,32405,32408,32410,32413,32414,32572,32571,32573,32574,32575,32579,32580,32583,32591,32594,32595,32603,32604,32605,32609,32611,32612,32613,32614,32621,32625,32637,32638,32639,32640,32651,32653,32655,32656,32657,32662,32663,32668,32673,32674,32678,32682,32685,32692,32700,32703,32704,32707,32712,32718,32719,32731,32735,32739,32741,32744,32748,32750,32751,32754,32762,32765,32766,32767,32775,32776,32778,32781,32782,32783,32785,32787,32788,32790,32797,32798,32799,32800,32804,32806,32812,32814,32816,32820,32821,32823,32825,32826,32828,32830,32832,32836,32864,32868,32870,32877,32881,32885,32897,32904,32910,32924,32926,32934,32935,32939,32952,32953,32968,32973,32975,32978,32980,32981,32983,32984,32992,33005,33006,33008,33010,33011,33014,33017,33018,33022,33027,33035,33046,33047,33048,33052,33054,33056,33060,33063,33068,33072,33077,33082,33084,33093,33095,33098,33100,33106,33111,33120,33121,33127,33128,33129,33133,33135,33143,33153,33168,33156,33157,33158,33163,33166,33174,33176,33179,33182,33186,33198,33202,33204,33211,33227,33219,33221,33226,33230,33231,33237,33239,33243,33245,33246,33249,33252,33259,33260,33264,33265,33266,33269,33270,33272,33273,33277,33279,33280,33283,33295,33299,33300,33305,33306,33309,33313,33314,33320,33330,33332,33338,33347,33348,33349,33350,33355,33358,33359,33361,33366,33372,33376,33379,33383,33389,33396,33403,33405,33407,33408,33409,33411,33412,33415,33417,33418,33422,33425,33428,33430,33432,33434,33435,33440,33441,33443,33444,33447,33448,33449,33450,33454,33456,33458,33460,33463,33466,33468,33470,33471,33478,33488,33493,33498,33504,33506,33508,33512,33514,33517,33519,33526,33527,33533,33534,33536,33537,33543,33544,33546,33547,33620,33563,33565,33566,33567,33569,33570,33580,33581,33582,33584,33587,33591,33594,33596,33597,33602,33603,33604,33607,33613,33614,33617,33621,33622,33623,33648,33656,33661,33663,33664,33666,33668,33670,33677,33682,33684,33685,33688,33689,33691,33692,33693,33702,33703,33705,33708,33726,33727,33728,33735,33737,33743,33744,33745,33748,33757,33619,33768,33770,33782,33784,33785,33788,33793,33798,33802,33807,33809,33813,33817,33709,33839,33849,33861,33863,33864,33866,33869,33871,33873,33874,33878,33880,33881,33882,33884,33888,33892,33893,33895,33898,33904,33907,33908,33910,33912,33916,33917,33921,33925,33938,33939,33941,33950,33958,33960,33961,33962,33967,33969,33972,33978,33981,33982,33984,33986,33991,33992,33996,33999,34003,34012,34023,34026,34031,34032,34033,34034,34039,34098,34042,34043,34045,34050,34051,34055,34060,34062,34064,34076,34078,34082,34083,34084,34085,34087,34090,34091,34095,34099,34100,34102,34111,34118,34127,34128,34129,34130,34131,34134,34137,34140,34141,34142,34143,34144,34145,34146,34148,34155,34159,34169,34170,34171,34173,34175,34177,34181,34182,34185,34187,34188,34191,34195,34200,34205,34207,34208,34210,34213,34215,34228,34230,34231,34232,34236,34237,34238,34239,34242,34247,34250,34251,34254,34221,34264,34266,34271,34272,34278,34280,34285,34291,34294,34300,34303,34304,34308,34309,34317,34318,34320,34321,34322,34328,34329,34331,34334,34337,34343,34345,34358,34360,34362,34364,34365,34368,34370,34374,34386,34387,34390,34391,34392,34393,34397,34400,34401,34402,34403,34404,34409,34412,34415,34421,34422,34423,34426,34445,34449,34454,34456,34458,34460,34465,34470,34471,34472,34477,34481,34483,34484,34485,34487,34488,34489,34495,34496,34497,34499,34501,34513,34514,34517,34519,34522,34524,34528,34531,34533,34535,34440,34554,34556,34557,34564,34565,34567,34571,34574,34575,34576,34579,34580,34585,34590,34591,34593,34595,34600,34606,34607,34609,34610,34617,34618,34620,34621,34622,34624,34627,34629,34637,34648,34653,34657,34660,34661,34671,34673,34674,34683,34691,34692,34693,34694,34695,34696,34697,34699,34700,34704,34707,34709,34711,34712,34713,34718,34720,34723,34727,34732,34733,34734,34737,34741,34750,34751,34753,34760,34761,34762,34766,34773,34774,34777,34778,34780,34783,34786,34787,34788,34794,34795,34797,34801,34803,34808,34810,34815,34817,34819,34822,34825,34826,34827,34832,34841,34834,34835,34836,34840,34842,34843,34844,34846,34847,34856,34861,34862,34864,34866,34869,34874,34876,34881,34883,34885,34888,34889,34890,34891,34894,34897,34901,34902,34904,34906,34908,34911,34912,34916,34921,34929,34937,34939,34944,34968,34970,34971,34972,34975,34976,34984,34986,35002,35005,35006,35008,35018,35019,35020,35021,35022,35025,35026,35027,35035,35038,35047,35055,35056,35057,35061,35063,35073,35078,35085,35086,35087,35093,35094,35096,35097,35098,35100,35104,35110,35111,35112,35120,35121,35122,35125,35129,35130,35134,35136,35138,35141,35142,35145,35151,35154,35159,35162,35163,35164,35169,35170,35171,35179,35182,35184,35187,35189,35194,35195,35196,35197,35209,35213,35216,35220,35221,35227,35228,35231,35232,35237,35248,35252,35253,35254,35255,35260,35284,35285,35286,35287,35288,35301,35305,35307,35309,35313,35315,35318,35321,35325,35327,35332,35333,35335,35343,35345,35346,35348,35349,35358,35360,35362,35364,35366,35371,35372,35375,35381,35383,35389,35390,35392,35395,35397,35399,35401,35405,35406,35411,35414,35415,35416,35420,35421,35425,35429,35431,35445,35446,35447,35449,35450,35451,35454,35455,35456,35459,35462,35467,35471,35472,35474,35478,35479,35481,35487,35495,35497,35502,35503,35507,35510,35511,35515,35518,35523,35526,35528,35529,35530,35537,35539,35540,35541,35543,35549,35551,35564,35568,35572,35573,35574,35580,35583,35589,35590,35595,35601,35612,35614,35615,35594,35629,35632,35639,35644,35650,35651,35652,35653,35654,35656,35666,35667,35668,35673,35661,35678,35683,35693,35702,35704,35705,35708,35710,35713,35716,35717,35723,35725,35727,35732,35733,35740,35742,35743,35896,35897,35901,35902,35909,35911,35913,35915,35919,35921,35923,35924,35927,35928,35931,35933,35929,35939,35940,35942,35944,35945,35949,35955,35957,35958,35963,35966,35974,35975,35979,35984,35986,35987,35993,35995,35996,36004,36025,36026,36037,36038,36041,36043,36047,36054,36053,36057,36061,36065,36072,36076,36079,36080,36082,36085,36087,36088,36094,36095,36097,36099,36105,36114,36119,36123,36197,36201,36204,36206,36223,36226,36228,36232,36237,36240,36241,36245,36254,36255,36256,36262,36267,36268,36271,36274,36277,36279,36281,36283,36288,36293,36294,36295,36296,36298,36302,36305,36308,36309,36311,36313,36324,36325,36327,36332,36336,36284,36337,36338,36340,36349,36353,36356,36357,36358,36363,36369,36372,36374,36384,36385,36386,36387,36390,36391,36401,36403,36406,36407,36408,36409,36413,36416,36417,36427,36429,36430,36431,36436,36443,36444,36445,36446,36449,36450,36457,36460,36461,36463,36464,36465,36473,36474,36475,36482,36483,36489,36496,36498,36501,36506,36507,36509,36510,36514,36519,36521,36525,36526,36531,36533,36538,36539,36544,36545,36547,36548,36551,36559,36561,36564,36572,36584,36590,36592,36593,36599,36601,36602,36589,36608,36610,36615,36616,36623,36624,36630,36631,36632,36638,36640,36641,36643,36645,36647,36648,36652,36653,36654,36660,36661,36662,36663,36666,36672,36673,36675,36679,36687,36689,36690,36691,36692,36693,36696,36701,36702,36709,36765,36768,36769,36772,36773,36774,36789,36790,36792,36798,36800,36801,36806,36810,36811,36813,36816,36818,36819,36821,36832,36835,36836,36840,36846,36849,36853,36854,36859,36862,36866,36868,36872,36876,36888,36891,36904,36905,36911,36906,36908,36909,36915,36916,36919,36927,36931,36932,36940,36955,36957,36962,36966,36967,36972,36976,36980,36985,36997,37000,37003,37004,37006,37008,37013,37015,37016,37017,37019,37024,37025,37026,37029,37040,37042,37043,37044,37046,37053,37068,37054,37059,37060,37061,37063,37064,37077,37079,37080,37081,37084,37085,37087,37093,37074,37110,37099,37103,37104,37108,37118,37119,37120,37124,37125,37126,37128,37133,37136,37140,37142,37143,37144,37146,37148,37150,37152,37157,37154,37155,37159,37161,37166,37167,37169,37172,37174,37175,37177,37178,37180,37181,37187,37191,37192,37199,37203,37207,37209,37210,37211,37217,37220,37223,37229,37236,37241,37242,37243,37249,37251,37253,37254,37258,37262,37265,37267,37268,37269,37272,37278,37281,37286,37288,37292,37293,37294,37296,37297,37298,37299,37302,37307,37308,37309,37311,37314,37315,37317,37331,37332,37335,37337,37338,37342,37348,37349,37353,37354,37356,37357,37358,37359,37360,37361,37367,37369,37371,37373,37376,37377,37380,37381,37382,37383,37385,37386,37388,37392,37394,37395,37398,37400,37404,37405,37411,37412,37413,37414,37416,37422,37423,37424,37427,37429,37430,37432,37433,37434,37436,37438,37440,37442,37443,37446,37447,37450,37453,37454,37455,37457,37464,37465,37468,37469,37472,37473,37477,37479,37480,37481,37486,37487,37488,37493,37494,37495,37496,37497,37499,37500,37501,37503,37512,37513,37514,37517,37518,37522,37527,37529,37535,37536,37540,37541,37543,37544,37547,37551,37554,37558,37560,37562,37563,37564,37565,37567,37568,37569,37570,37571,37573,37574,37575,37576,37579,37580,37581,37582,37584,37587,37589,37591,37592,37593,37596,37597,37599,37600,37601,37603,37605,37607,37608,37612,37614,37616,37625,37627,37631,37632,37634,37640,37645,37649,37652,37653,37660,37661,37662,37663,37665,37668,37669,37671,37673,37674,37683,37684,37686,37687,37703,37704,37705,37712,37713,37714,37717,37719,37720,37722,37726,37732,37733,37735,37737,37738,37741,37743,37744,37745,37747,37748,37750,37754,37757,37759,37760,37761,37762,37768,37770,37771,37773,37775,37778,37781,37784,37787,37790,37793,37795,37796,37798,37800,37803,37812,37813,37814,37818,37801,37825,37828,37829,37830,37831,37833,37834,37835,37836,37837,37843,37849,37852,37854,37855,37858,37862,37863,37881,37879,37880,37882,37883,37885,37889,37890,37892,37896,37897,37901,37902,37903,37909,37910,37911,37919,37934,37935,37937,37938,37939,37940,37947,37951,37949,37955,37957,37960,37962,37964,37973,37977,37980,37983,37985,37987,37992,37995,37997,37998,37999,38001,38002,38020,38019,38264,38265,38270,38276,38280,38284,38285,38286,38301,38302,38303,38305,38310,38313,38315,38316,38324,38326,38330,38333,38335,38342,38344,38345,38347,38352,38353,38354,38355,38361,38362,38365,38366,38367,38368,38372,38374,38429,38430,38434,38436,38437,38438,38444,38449,38451,38455,38456,38457,38458,38460,38461,38465,38482,38484,38486,38487,38488,38497,38510,38516,38523,38524,38526,38527,38529,38530,38531,38532,38537,38545,38550,38554,38557,38559,38564,38565,38566,38569,38574,38575,38579,38586,38602,38610,23986,38616,38618,38621,38622,38623,38633,38639,38641,38650,38658,38659,38661,38665,38682,38683,38685,38689,38690,38691,38696,38705,38707,38721,38723,38730,38734,38735,38741,38743,38744,38746,38747,38755,38759,38762,38766,38771,38774,38775,38776,38779,38781,38783,38784,38793,38805,38806,38807,38809,38810,38814,38815,38818,38828,38830,38833,38834,38837,38838,38840,38841,38842,38844,38846,38847,38849,38852,38853,38855,38857,38858,38860,38861,38862,38864,38865,38868,38871,38872,38873,38877,38878,38880,38875,38881,38884,38895,38897,38900,38903,38904,38906,38919,38922,38937,38925,38926,38932,38934,38940,38942,38944,38947,38950,38955,38958,38959,38960,38962,38963,38965,38949,38974,38980,38983,38986,38993,38994,38995,38998,38999,39001,39002,39010,39011,39013,39014,39018,39020,39083,39085,39086,39088,39092,39095,39096,39098,39099,39103,39106,39109,39112,39116,39137,39139,39141,39142,39143,39146,39155,39158,39170,39175,39176,39185,39189,39190,39191,39194,39195,39196,39199,39202,39206,39207,39211,39217,39218,39219,39220,39221,39225,39226,39227,39228,39232,39233,39238,39239,39240,39245,39246,39252,39256,39257,39259,39260,39262,39263,39264,39323,39325,39327,39334,39344,39345,39346,39349,39353,39354,39357,39359,39363,39369,39379,39380,39385,39386,39388,39390,39399,39402,39403,39404,39408,39412,39413,39417,39421,39422,39426,39427,39428,39435,39436,39440,39441,39446,39454,39456,39458,39459,39460,39463,39469,39470,39475,39477,39478,39480,39495,39489,39492,39498,39499,39500,39502,39505,39508,39510,39517,39594,39596,39598,39599,39602,39604,39605,39606,39609,39611,39614,39615,39617,39619,39622,39624,39630,39632,39634,39637,39638,39639,39643,39644,39648,39652,39653,39655,39657,39660,39666,39667,39669,39673,39674,39677,39679,39680,39681,39682,39683,39684,39685,39688,39689,39691,39692,39693,39694,39696,39698,39702,39705,39707,39708,39712,39718,39723,39725,39731,39732,39733,39735,39737,39738,39741,39752,39755,39756,39765,39766,39767,39771,39774,39777,39779,39781,39782,39784,39786,39787,39788,39789,39790,39795,39797,39799,39800,39801,39807,39808,39812,39813,39814,39815,39817,39818,39819,39821,39823,39824,39828,39834,39837,39838,39846,39847,39849,39852,39856,39857,39858,39863,39864,39867,39868,39870,39871,39873,39879,39880,39886,39888,39895,39896,39901,39903,39909,39911,39914,39915,39919,39923,39927,39928,39929,39930,39933,39935,39936,39938,39947,39951,39953,39958,39960,39961,39962,39964,39966,39970,39971,39974,39975,39976,39977,39978,39985,39989,39990,39991,39997,40001,40003,40004,40005,40009,40010,40014,40015,40016,40019,40020,40022,40024,40027,40029,40030,40031,40035,40041,40042,40028,40043,40040,40046,40048,40050,40053,40055,40059,40166,40178,40183,40185,40203,40194,40209,40215,40216,40220,40221,40222,40239,40240,40242,40243,40244,40250,40252,40261,40253,40258,40259,40263,40266,40275,40276,40287,40291,40290,40293,40297,40298,40299,40304,40310,40311,40315,40316,40318,40323,40324,40326,40330,40333,40334,40338,40339,40341,40342,40343,40344,40353,40362,40364,40366,40369,40373,40377,40380,40383,40387,40391,40393,40394,40404,40405,40406,40407,40410,40414,40415,40416,40421,40423,40425,40427,40430,40432,40435,40436,40446,40458,40450,40455,40462,40464,40465,40466,40469,40470,40473,40476,40477,40570,40571,40572,40576,40578,40579,40580,40581,40583,40590,40591,40598,40600,40603,40606,40612,40616,40620,40622,40623,40624,40627,40628,40629,40646,40648,40651,40661,40671,40676,40679,40684,40685,40686,40688,40689,40690,40693,40696,40703,40706,40707,40713,40719,40720,40721,40722,40724,40726,40727,40729,40730,40731,40735,40738,40742,40746,40747,40751,40753,40754,40756,40759,40761,40762,40764,40765,40767,40769,40771,40772,40773,40774,40775,40787,40789,40790,40791,40792,40794,40797,40798,40808,40809,40813,40814,40815,40816,40817,40819,40821,40826,40829,40847,40848,40849,40850,40852,40854,40855,40862,40865,40866,40867,40869]], + ]; + foreach ($series as $test) { + foreach ($test[0] as $a => $input) { + $class = $this->testedClass; + $char = hex2bin($input); + $exp = $test[1][$a]; + $s = new $class($char); + $this->assertSame($exp, $s->nextCode(), "Sequence $input did not decode to $exp."); + $this->assertFalse($s->nextCode(), "Sequence $input did not end after one character"); + } + } + } +} diff --git a/tests/cases/Encoding/TestEUCKR.php b/tests/cases/Encoding/TestEUCKR.php index 55c1268..addffe6 100644 --- a/tests/cases/Encoding/TestEUCKR.php +++ b/tests/cases/Encoding/TestEUCKR.php @@ -7,7 +7,7 @@ declare(strict_types=1); namespace MensBeam\Intl\TestCase\Encoding; use MensBeam\Intl\Encoding\EUCKR; -use MensBeam\Intl\Encoding\Encoding; +use MensBeam\Intl\Encoding\Coder; use MensBeam\Intl\Encoding\EncoderException; class TestEUCKR extends \MensBeam\Intl\Test\CoderDecoderTest { @@ -28,8 +28,41 @@ class TestEUCKR extends \MensBeam\Intl\Test\CoderDecoderTest { /* This string contains an invalid character sequence sandwiched between two null characters */ protected $brokenChar = "00 FF 00"; + public function provideCodePoints() { + return [ + 'U+0064 (HTML)' => [false, 0x64, "64"], + 'U+0064 (fatal)' => [true, 0x64, "64"], + 'U+00CA (HTML)' => [false, 0xCA, bin2hex("Ê")], + 'U+00CA (fatal)' => [true, 0xCA, new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)], + 'U+ACF2 (HTML)' => [false, 0xACF2, "81 E9"], + 'U+ACF2 (fatal)' => [true, 0xACF2, "81 E9"], + '-1 (HTML)' => [false, -1, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '-1 (fatal)' => [true, -1, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '0x110000 (HTML)' => [false, 0x110000, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '0x110000 (fatal)' => [true, 0x110000, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + ]; + } + + public function provideStrings() { + return [ + 'empty string' => ["", []], + 'sanity check' => ["40", [64]], + 'two-byte character' => ["D7 D7", [21033]], + 'EOF after first byte' => ["D7", [65533]], + 'low byte after first byte' => ["D7 39", [65533, 57]], + '0x80 as first byte' => ["80 D7 00", [65533, 65533, 0]], + '0xFF as first byte' => ["FF D7 00", [65533, 65533, 0]], + '0x7F after first byte' => ["D7 7F", [65533, 127]], + '0xFF after first byte' => ["D7 FF", [65533]], + 'non-character' => ["A5 DC", [65533]], + 'mixed string' => ["7A D7 AA A4 F4 88 62 88 A5", [122, 30267, 12676, 45714, 45802]], + 'mixed string 2' => ["62 D7 D7 D7 D7 62", [98, 21033, 21033, 98]], + ]; + } + /** * @dataProvider provideCodePoints + * @covers MensBeam\Intl\Encoding\Encoder * @covers MensBeam\Intl\Encoding\EUCKR::encode * @covers MensBeam\Intl\Encoding\EUCKR::errEnc */ @@ -37,6 +70,15 @@ class TestEUCKR extends \MensBeam\Intl\Test\CoderDecoderTest { return parent::testEncodeCodePoints($fatal, $input, $exp); } + /** + * @dataProvider provideCodePoints + * @covers MensBeam\Intl\Encoding\EUCKR::encode + * @covers MensBeam\Intl\Encoding\EUCKR::errEnc + */ + public function testEncodeCodePointsStatically(bool $fatal, $input, $exp) { + return parent::testEncodeCodePointsStatically($fatal, $input, $exp); + } + /** * @dataProvider provideStrings * @covers MensBeam\Intl\Encoding\EUCKR::__construct @@ -136,7 +178,6 @@ class TestEUCKR extends \MensBeam\Intl\Test\CoderDecoderTest { return parent::testIterateThroughAStringAllowingSurrogates($input, $strictExp, $relaxedExp); } - /** * @covers MensBeam\Intl\Encoding\EUCKR::seekBack */ @@ -144,38 +185,6 @@ class TestEUCKR extends \MensBeam\Intl\Test\CoderDecoderTest { return parent::testSeekBackOverRandomData(); } - public function provideCodePoints() { - return [ - 'U+0064 (HTML)' => [false, 0x64, "64"], - 'U+0064 (fatal)' => [true, 0x64, "64"], - 'U+00CA (HTML)' => [false, 0xCA, bin2hex("Ê")], - 'U+00CA (fatal)' => [true, 0xCA, new EncoderException("", Encoding::E_UNAVAILABLE_CODE_POINT)], - 'U+ACF2 (HTML)' => [false, 0xACF2, "81 E9"], - 'U+ACF2 (fatal)' => [true, 0xACF2, "81 E9"], - '-1 (HTML)' => [false, -1, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - '-1 (fatal)' => [true, -1, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - '0x110000 (HTML)' => [false, 0x110000, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - '0x110000 (fatal)' => [true, 0x110000, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - ]; - } - - public function provideStrings() { - return [ - 'empty string' => ["", []], - 'sanity check' => ["40", [64]], - 'two-byte character' => ["D7 D7", [21033]], - 'EOF after first byte' => ["D7", [65533]], - 'low byte after first byte' => ["D7 39", [65533, 57]], - '0x80 as first byte' => ["80 D7 00", [65533, 65533, 0]], - '0xFF as first byte' => ["FF D7 00", [65533, 65533, 0]], - '0x7F after first byte' => ["D7 7F", [65533, 127]], - '0xFF after first byte' => ["D7 FF", [65533]], - 'non-character' => ["A5 DC", [65533]], - 'mixed string' => ["7A D7 AA A4 F4 88 62 88 A5", [122, 30267, 12676, 45714, 45802]], - 'mixed string 2' => ["62 D7 D7 D7 D7 62", [98, 21033, 21033, 98]], - ]; - } - /** * @group optional */ diff --git a/tests/cases/Encoding/TestGB18030.php b/tests/cases/Encoding/TestGB18030.php index e151ce5..e8588aa 100644 --- a/tests/cases/Encoding/TestGB18030.php +++ b/tests/cases/Encoding/TestGB18030.php @@ -8,7 +8,7 @@ namespace MensBeam\Intl\TestCase\Encoding; use MensBeam\Intl\Encoding\GBK; use MensBeam\Intl\Encoding\GB18030; -use MensBeam\Intl\Encoding\Encoding; +use MensBeam\Intl\Encoding\Coder; use MensBeam\Intl\Encoding\EncoderException; class TestGB18030 extends \MensBeam\Intl\Test\CoderDecoderTest { @@ -33,8 +33,119 @@ class TestGB18030 extends \MensBeam\Intl\Test\CoderDecoderTest { $this->testedClass = GB18030::class; } + public function provideCodePoints() { + // bytes confirmed using Firefox + $series_gb18030 = [ + 'U+0064 (HTML)' => [false, 0x64, "64"], + 'U+0064 (fatal)' => [true, 0x64, "64"], + 'U+20AC (HTML)' => [false, 0x20AC, "A2 E3"], + 'U+20AC (fatal)' => [true, 0x20AC, "A2 E3"], + 'U+2164 (HTML)' => [false, 0x2164, "A2 F5"], + 'U+2164 (fatal)' => [true, 0x2164, "A2 F5"], + 'U+3A74 (HTML)' => [false, 0x3A74, "82 31 97 30"], + 'U+3A74 (fatal)' => [true, 0x3A74, "82 31 97 30"], + 'U+E7C7 (HTML)' => [false, 0xE7C7, "81 35 F4 37"], + 'U+E7C7 (fatal)' => [true, 0xE7C7, "81 35 F4 37"], + 'U+1D11E (HTML)' => [false, 0x1D11E, "94 32 BE 34"], + 'U+1D11E (fatal)' => [true, 0x1D11E, "94 32 BE 34"], + 'U+E5E5 (HTML)' => [false, 0xE5E5, bin2hex("")], + 'U+E5E5 (fatal)' => [true, 0xE5E5, new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)], + 'U+3000 (HTML)' => [false, 0x3000, "A1 A1"], + 'U+3000 (fatal)' => [true, 0x3000, "A1 A1"], + '-1 (HTML)' => [false, -1, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '-1 (fatal)' => [true, -1, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '0x110000 (HTML)' => [false, 0x110000, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '0x110000 (fatal)' => [true, 0x110000, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + ]; + $series_gbk = [ + 'U+0064 (HTML)' => [false, 0x64, "64"], + 'U+0064 (fatal)' => [true, 0x64, "64"], + 'U+20AC (HTML)' => [false, 0x20AC, "80"], + 'U+20AC (fatal)' => [true, 0x20AC, "80"], + 'U+2164 (HTML)' => [false, 0x2164, "A2 F5"], + 'U+2164 (fatal)' => [true, 0x2164, "A2 F5"], + 'U+3A74 (HTML)' => [false, 0x3A74, bin2hex("㩴")], + 'U+3A74 (fatal)' => [true, 0x3A74, new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)], + 'U+E7C7 (HTML)' => [false, 0xE7C7, bin2hex("")], + 'U+E7C7 (fatal)' => [true, 0xE7C7, new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)], + 'U+1D11E (HTML)' => [false, 0x1D11E, bin2hex("𝄞")], + 'U+1D11E (fatal)' => [true, 0x1D11E, new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)], + 'U+E5E5 (HTML)' => [false, 0xE5E5, bin2hex("")], + 'U+E5E5 (fatal)' => [true, 0xE5E5, new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)], + 'U+3000 (HTML)' => [false, 0x3000, "A1 A1"], + 'U+3000 (fatal)' => [true, 0x3000, "A1 A1"], + '-1 (HTML)' => [false, -1, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '-1 (fatal)' => [true, -1, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '0x110000 (HTML)' => [false, 0x110000, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '0x110000 (fatal)' => [true, 0x110000, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + ]; + foreach ($series_gb18030 as $name => $test) { + array_push($test, GB18030::class); + yield "gb18030 $name" => $test; + } + foreach ($series_gbk as $name => $test) { + array_push($test, GBK::class); + yield "GBK $name" => $test; + } + } + + public function provideStrings() { + return [ + 'empty string' => ["", []], + // valid single characters + 'sanity check' => ["40", [64]], + 'special case for 0x80' => ["80", [8364]], + 'four-byte special case' => ["81 35 F4 37", [59335]], + 'two-byte character' => ["A8 4E", [8735]], + 'four-byte character' => ["82 31 A2 37", [15081]], + // cut sequences + 'EOF after first byte' => ["82", [65533]], + 'EOF after second byte' => ["82 30", [65533]], + 'EOF after third byte' => ["82 30 81", [65533]], + // invalid sequences + 'bad first byte' => ["FF 35 F4 37", [65533, 53, 65533]], + 'bad second byte' => ["81 FF F4 37", [65533, 65533]], + 'bad third byte' => ["81 35 FF 37", [65533, 53, 65533, 55]], + 'bad fourth byte' => ["81 35 F4 FF", [65533, 53, 65533]], + 'control first byte' => ["00 35 F4 37", [0, 53, 65533]], + 'control second byte' => ["81 00 F4 37", [65533, 0, 65533]], + 'control third byte' => ["81 35 00 37", [65533, 53, 0, 55]], + 'control fourth byte' => ["81 35 F4 00", [65533, 53, 65533, 0]], + // invalid sequences with clean EOF + 'bad first byte (padded)' => ["FF 35 F4 37 00 00 00 00", [65533, 53, 65533, 55, 0, 0, 0, 0]], + 'bad second byte (padded)' => ["81 FF F4 37 00 00 00 00", [65533, 65533, 55, 0, 0, 0, 0]], + 'bad third byte (padded)' => ["81 35 FF 37 00 00 00 00", [65533, 53, 65533, 55, 0, 0, 0, 0]], + 'bad fourth byte (padded)' => ["81 35 F4 FF 00 00 00 00", [65533, 53, 65533, 0, 0, 0, 0]], + 'control first byte (padded)' => ["00 35 F4 37 00 00 00 00", [0, 53, 65533, 55, 0, 0, 0, 0]], + 'control second byte (padded)' => ["81 00 F4 37 00 00 00 00", [65533, 0, 65533, 55, 0, 0, 0, 0]], + 'control third byte (padded)' => ["81 35 00 37 00 00 00 00", [65533, 53, 0, 55, 0, 0, 0, 0]], + 'control fourth byte (padded)' => ["81 35 F4 00 00 00 00 00", [65533, 53, 65533, 0, 0, 0, 0, 0]], + // out-of-range sequences + 'void sequence' => ["84 32 A4 39", [65533]], + 'void sequence 2' => ["FE 39 FE 39", [65533]], + // backward seeking tests + 'seek test 1' => ["81 81 81 30", [20118, 65533]], + 'seek test 2' => ["81 81 80", [20118, 8364]], + 'seek test 3' => ["81 81 00", [20118, 0]], + 'seek test 4' => ["81 81 81 00", [20118, 65533, 0]], + 'seek test 5' => ["81 30 30 30", [65533, 48, 48, 48]], + 'seek test 6' => ["81 30 81 81", [65533, 48, 20118]], + 'seek test 7' => ["30 30 81 81", [48, 48, 20118]], + 'seek test 8' => ["F8 83 FE 80", [40229, 18211]], + 'seek test 1 (padded)' => ["00 00 00 00 81 81 81 30 00 00 00 00", [0, 0, 0, 0, 20118, 65533, 48, 0, 0, 0, 0]], + 'seek test 2 (padded)' => ["00 00 00 00 81 81 80 00 00 00 00", [0, 0, 0, 0, 20118, 8364, 0, 0, 0, 0]], + 'seek test 3 (padded)' => ["00 00 00 00 81 81 00 00 00 00 00", [0, 0, 0, 0, 20118, 0, 0, 0, 0, 0]], + 'seek test 4 (padded)' => ["00 00 00 00 81 81 81 00 00 00 00 00", [0, 0, 0, 0, 20118, 65533, 0, 0, 0, 0, 0]], + 'seek test 5 (padded)' => ["00 00 00 00 81 30 30 30 00 00 00 00", [0, 0, 0, 0, 65533, 48, 48, 48, 0, 0, 0, 0]], + 'seek test 6 (padded)' => ["00 00 00 00 81 30 81 81 00 00 00 00", [0, 0, 0, 0, 65533, 48, 20118, 0, 0, 0, 0]], + 'seek test 7 (padded)' => ["00 00 00 00 30 30 81 81 00 00 00 00", [0, 0, 0, 0, 48, 48, 20118, 0, 0, 0, 0]], + 'seek test 8 (padded)' => ["00 00 00 00 F8 83 FE 80 00 00 00 00", [0, 0, 0, 0, 40229, 18211, 0, 0, 0, 0]], + ]; + } + /** * @dataProvider provideCodePoints + * @covers MensBeam\Intl\Encoding\Encoder * @covers MensBeam\Intl\Encoding\GB18030::encode * @covers MensBeam\Intl\Encoding\GB18030::errEnc * @covers MensBeam\Intl\Encoding\GBK::encode @@ -45,6 +156,18 @@ class TestGB18030 extends \MensBeam\Intl\Test\CoderDecoderTest { return parent::testEncodeCodePoints($fatal, $input, $exp); } + /** + * @dataProvider provideCodePoints + * @covers MensBeam\Intl\Encoding\GB18030::encode + * @covers MensBeam\Intl\Encoding\GB18030::errEnc + * @covers MensBeam\Intl\Encoding\GBK::encode + * @covers MensBeam\Intl\Encoding\GBK::errEnc + */ + public function testEncodeCodePointsStatically(bool $fatal, $input, $exp, $class = self::class) { + $this->testedClass = $class; + return parent::testEncodeCodePointsStatically($fatal, $input, $exp); + } + /** * @dataProvider provideStrings * @covers MensBeam\Intl\Encoding\GB18030::__construct @@ -144,59 +267,6 @@ class TestGB18030 extends \MensBeam\Intl\Test\CoderDecoderTest { return parent::testIterateThroughAStringAllowingSurrogates($input, $strictExp, $relaxedExp); } - public function provideCodePoints() { - // bytes confirmed using Firefox - $series_gb18030 = [ - 'U+0064 (HTML)' => [false, 0x64, "64"], - 'U+0064 (fatal)' => [true, 0x64, "64"], - 'U+20AC (HTML)' => [false, 0x20AC, "A2 E3"], - 'U+20AC (fatal)' => [true, 0x20AC, "A2 E3"], - 'U+2164 (HTML)' => [false, 0x2164, "A2 F5"], - 'U+2164 (fatal)' => [true, 0x2164, "A2 F5"], - 'U+3A74 (HTML)' => [false, 0x3A74, "82 31 97 30"], - 'U+3A74 (fatal)' => [true, 0x3A74, "82 31 97 30"], - 'U+E7C7 (HTML)' => [false, 0xE7C7, "81 35 F4 37"], - 'U+E7C7 (fatal)' => [true, 0xE7C7, "81 35 F4 37"], - 'U+1D11E (HTML)' => [false, 0x1D11E, "94 32 BE 34"], - 'U+1D11E (fatal)' => [true, 0x1D11E, "94 32 BE 34"], - 'U+E5E5 (HTML)' => [false, 0xE5E5, bin2hex("")], - 'U+E5E5 (fatal)' => [true, 0xE5E5, new EncoderException("", Encoding::E_UNAVAILABLE_CODE_POINT)], - '-1 (HTML)' => [false, -1, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - '-1 (fatal)' => [true, -1, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - '0x110000 (HTML)' => [false, 0x110000, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - '0x110000 (fatal)' => [true, 0x110000, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - ]; - $series_gbk = [ - 'U+0064 (HTML)' => [false, 0x64, "64"], - 'U+0064 (fatal)' => [true, 0x64, "64"], - 'U+20AC (HTML)' => [false, 0x20AC, "80"], - 'U+20AC (fatal)' => [true, 0x20AC, "80"], - 'U+2164 (HTML)' => [false, 0x2164, "A2 F5"], - 'U+2164 (fatal)' => [true, 0x2164, "A2 F5"], - 'U+3A74 (HTML)' => [false, 0x3A74, bin2hex("㩴")], - 'U+3A74 (fatal)' => [true, 0x3A74, new EncoderException("", Encoding::E_UNAVAILABLE_CODE_POINT)], - 'U+E7C7 (HTML)' => [false, 0xE7C7, bin2hex("")], - 'U+E7C7 (fatal)' => [true, 0xE7C7, new EncoderException("", Encoding::E_UNAVAILABLE_CODE_POINT)], - 'U+1D11E (HTML)' => [false, 0x1D11E, bin2hex("𝄞")], - 'U+1D11E (fatal)' => [true, 0x1D11E, new EncoderException("", Encoding::E_UNAVAILABLE_CODE_POINT)], - 'U+E5E5 (HTML)' => [false, 0xE5E5, bin2hex("")], - 'U+E5E5 (fatal)' => [true, 0xE5E5, new EncoderException("", Encoding::E_UNAVAILABLE_CODE_POINT)], - '-1 (HTML)' => [false, -1, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - '-1 (fatal)' => [true, -1, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - '0x110000 (HTML)' => [false, 0x110000, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - '0x110000 (fatal)' => [true, 0x110000, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - ]; - foreach ($series_gb18030 as $name => $test) { - array_push($test, GB18030::class); - yield "gb18030 $name" => $test; - } - foreach ($series_gbk as $name => $test) { - array_push($test, GBK::class); - yield "GBK $name" => $test; - } - } - - /** * @covers MensBeam\Intl\Encoding\GB18030::seekBack */ @@ -204,60 +274,6 @@ class TestGB18030 extends \MensBeam\Intl\Test\CoderDecoderTest { return parent::testSeekBackOverRandomData(); } - public function provideStrings() { - return [ - 'empty string' => ["", []], - // valid single characters - 'sanity check' => ["40", [64]], - 'special case for 0x80' => ["80", [8364]], - 'four-byte special case' => ["81 35 F4 37", [59335]], - 'two-byte character' => ["A8 4E", [8735]], - 'four-byte character' => ["82 31 A2 37", [15081]], - // cut sequences - 'EOF after first byte' => ["82", [65533]], - 'EOF after second byte' => ["82 30", [65533]], - 'EOF after third byte' => ["82 30 81", [65533]], - // invalid sequences - 'bad first byte' => ["FF 35 F4 37", [65533, 53, 65533]], - 'bad second byte' => ["81 FF F4 37", [65533, 65533]], - 'bad third byte' => ["81 35 FF 37", [65533, 53, 65533, 55]], - 'bad fourth byte' => ["81 35 F4 FF", [65533, 53, 65533]], - 'control first byte' => ["00 35 F4 37", [0, 53, 65533]], - 'control second byte' => ["81 00 F4 37", [65533, 0, 65533]], - 'control third byte' => ["81 35 00 37", [65533, 53, 0, 55]], - 'control fourth byte' => ["81 35 F4 00", [65533, 53, 65533, 0]], - // invalid sequences with clean EOF - 'bad first byte (padded)' => ["FF 35 F4 37 00 00 00 00", [65533, 53, 65533, 55, 0, 0, 0, 0]], - 'bad second byte (padded)' => ["81 FF F4 37 00 00 00 00", [65533, 65533, 55, 0, 0, 0, 0]], - 'bad third byte (padded)' => ["81 35 FF 37 00 00 00 00", [65533, 53, 65533, 55, 0, 0, 0, 0]], - 'bad fourth byte (padded)' => ["81 35 F4 FF 00 00 00 00", [65533, 53, 65533, 0, 0, 0, 0]], - 'control first byte (padded)' => ["00 35 F4 37 00 00 00 00", [0, 53, 65533, 55, 0, 0, 0, 0]], - 'control second byte (padded)' => ["81 00 F4 37 00 00 00 00", [65533, 0, 65533, 55, 0, 0, 0, 0]], - 'control third byte (padded)' => ["81 35 00 37 00 00 00 00", [65533, 53, 0, 55, 0, 0, 0, 0]], - 'control fourth byte (padded)' => ["81 35 F4 00 00 00 00 00", [65533, 53, 65533, 0, 0, 0, 0, 0]], - // out-of-range sequences - 'void sequence' => ["84 32 A4 39", [65533]], - 'void sequence 2' => ["FE 39 FE 39", [65533]], - // backward seeking tests - 'seek test 1' => ["81 81 81 30", [20118, 65533]], - 'seek test 2' => ["81 81 80", [20118, 8364]], - 'seek test 3' => ["81 81 00", [20118, 0]], - 'seek test 4' => ["81 81 81 00", [20118, 65533, 0]], - 'seek test 5' => ["81 30 30 30", [65533, 48, 48, 48]], - 'seek test 6' => ["81 30 81 81", [65533, 48, 20118]], - 'seek test 7' => ["30 30 81 81", [48, 48, 20118]], - 'seek test 8' => ["F8 83 FE 80", [40229, 18211]], - 'seek test 1 (padded)' => ["00 00 00 00 81 81 81 30 00 00 00 00", [0, 0, 0, 0, 20118, 65533, 48, 0, 0, 0, 0]], - 'seek test 2 (padded)' => ["00 00 00 00 81 81 80 00 00 00 00", [0, 0, 0, 0, 20118, 8364, 0, 0, 0, 0]], - 'seek test 3 (padded)' => ["00 00 00 00 81 81 00 00 00 00 00", [0, 0, 0, 0, 20118, 0, 0, 0, 0, 0]], - 'seek test 4 (padded)' => ["00 00 00 00 81 81 81 00 00 00 00 00", [0, 0, 0, 0, 20118, 65533, 0, 0, 0, 0, 0]], - 'seek test 5 (padded)' => ["00 00 00 00 81 30 30 30 00 00 00 00", [0, 0, 0, 0, 65533, 48, 48, 48, 0, 0, 0, 0]], - 'seek test 6 (padded)' => ["00 00 00 00 81 30 81 81 00 00 00 00", [0, 0, 0, 0, 65533, 48, 20118, 0, 0, 0, 0]], - 'seek test 7 (padded)' => ["00 00 00 00 30 30 81 81 00 00 00 00", [0, 0, 0, 0, 48, 48, 20118, 0, 0, 0, 0]], - 'seek test 8 (padded)' => ["00 00 00 00 F8 83 FE 80 00 00 00 00", [0, 0, 0, 0, 40229, 18211, 0, 0, 0, 0]], - ]; - } - /** * @group optional */ diff --git a/tests/cases/Encoding/TestISO2022JP.php b/tests/cases/Encoding/TestISO2022JP.php new file mode 100644 index 0000000..13d985b --- /dev/null +++ b/tests/cases/Encoding/TestISO2022JP.php @@ -0,0 +1,263 @@ + [false, [0x20], "20"], + 'U+0020 (fatal)' => [true, [0x20], "20"], + 'U+005C (HTML)' => [false, [0x5C], "5C"], + 'U+005C (fatal)' => [true, [0x5C], "5C"], + 'U+007E (HTML)' => [false, [0x7E], "7E"], + 'U+007E (fatal)' => [true, [0x7E], "7E"], + 'U+00A5 (HTML)' => [false, [0xA5], "1B 28 4A 5C 1B 28 42"], + 'U+00A5 (fatal)' => [true, [0xA5], "1B 28 4A 5C 1B 28 42"], + 'U+203E (HTML)' => [false, [0x203E], "1B 28 4A 7E 1B 28 42"], + 'U+203E (fatal)' => [true, [0x203E], "1B 28 4A 7E 1B 28 42"], + 'U+FF61 (HTML)' => [false, [0xFF61], "1B 24 42 21 23 1B 28 42"], + 'U+FF61 (fatal)' => [true, [0xFF61], "1B 24 42 21 23 1B 28 42"], + 'U+FF9F (HTML)' => [false, [0xFF9F], "1B 24 42 21 2C 1B 28 42"], + 'U+FF9F (fatal)' => [true, [0xFF9F], "1B 24 42 21 2C 1B 28 42"], + 'U+2212 (HTML)' => [false, [0x2212], "1B 24 42 21 5D 1B 28 42"], + 'U+2212 (fatal)' => [true, [0x2212], "1B 24 42 21 5D 1B 28 42"], + 'U+2116 (HTML)' => [false, [0x2116], "1B 24 42 2D 62 1B 28 42"], + 'U+2116 (fatal)' => [true, [0x2116], "1B 24 42 2D 62 1B 28 42"], + 'U+FFE2 (HTML)' => [false, [0xFFE2], "1B 24 42 22 4C 1B 28 42"], + 'U+FFE2 (fatal)' => [true, [0xFFE2], "1B 24 42 22 4C 1B 28 42"], + 'U+00C6 (HTML)' => [false, [0xC6], "26 23 31 39 38 3B"], + 'U+00C6 (fatal)' => [true, [0xC6], new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)], + 'U+FFFD (HTML)' => [false, [0xFFFD], "26 23 36 35 35 33 33 3B"], + 'U+FFFD (fatal)' => [true, [0xFFFD], new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)], + 'Roman (HTML)' => [false, [0xA5, 0x20, 0x203E], "1B 28 4A 5C 20 7E 1B 28 42"], + 'Roman (fatal)' => [true, [0xA5, 0x20, 0x203E], "1B 28 4A 5C 20 7E 1B 28 42"], + 'Roman to ASCII (HTML)' => [false, [0xA5, 0x5C], "1B 28 4A 5C 1B 28 42 5C"], + 'Roman to ASCII (fatal)' => [true, [0xA5, 0x5C], "1B 28 4A 5C 1B 28 42 5C"], + 'Roman to error (HTML)' => [false, [0xA5, 0x80], "1B 28 4A 5C 26 23 31 32 38 3B 1B 28 42"], + 'Roman to error (fatal)' => [true, [0xA5, 0x80], new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)], + 'JIS (HTML)' => [false, [0x2116, 0xFFE2, 0x2212], "1B 24 42 2D 62 22 4C 21 5D 1B 28 42"], + 'JIS (fatal)' => [true, [0x2116, 0xFFE2, 0x2212], "1B 24 42 2D 62 22 4C 21 5D 1B 28 42"], + 'JIS to Roman (HTML)' => [false, [0x2116, 0xA5], "1B 24 42 2D 62 1B 28 4A 5C 1B 28 42"], + 'JIS to Roman (fatal)' => [true, [0x2116, 0xA5], "1B 24 42 2D 62 1B 28 4A 5C 1B 28 42"], + 'JIS to ASCII 1 (HTML)' => [false, [0x2116, 0x20], "1B 24 42 2D 62 1B 28 42 20"], + 'JIS to ASCII 1 (fatal)' => [true, [0x2116, 0x20], "1B 24 42 2D 62 1B 28 42 20"], + 'JIS to ASCII 2 (HTML)' => [false, [0x2116, 0x5C], "1B 24 42 2D 62 1B 28 42 5C"], + 'JIS to ASCII 2 (fatal)' => [true, [0x2116, 0x5C], "1B 24 42 2D 62 1B 28 42 5C"], + 'JIS to error 1 (HTML)' => [false, [0x2116, 0x80], "1B 24 42 2D 62 1B 28 42 26 23 31 32 38 3B"], + 'JIS to error 1 (fatal)' => [true, [0x2116, 0x80], new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)], + 'JIS to error 2 (HTML)' => [false, [0x2116, 0x1B], "1B 24 42 2D 62 1B 28 42 26 23 36 35 35 33 33 3B"], + 'JIS to error 2 (fatal)' => [true, [0x2116, 0x1B], new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)], + 'Escape characters (HTML)' => [false, [0x1B, 0xE, 0xF], "26 23 36 35 35 33 33 3B 26 23 36 35 35 33 33 3B 26 23 36 35 35 33 33 3B"], + 'Escape characters (fatal)' => [true, [0x1B, 0xE, 0xF], new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)], + '-1 (HTML)' => [false, [-1], new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '-1 (fatal)' => [true, [-1], new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '0x110000 (HTML)' => [false, [0x110000], new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '0x110000 (fatal)' => [true, [0x110000], new EncoderException("", Coder::E_INVALID_CODE_POINT)], + ]; + } + + public function provideStrings() { + return [ + 'empty string' => ["", []], + 'Implied ASCII mode' => ["00 30 5C 7E 21 5F", [0, 48, 92, 126, 33, 95]], + 'Explicit ASCII mode' => ["1B2842 00 30 5C 7E 21 5F", [0, 48, 92, 126, 33, 95]], + 'Roman mode' => ["1B284A 00 30 5C 7E 21 5F", [0, 48, 165, 8254, 33, 95]], + 'Katakana mode' => ["1B2849 00 30 5C 7E 21 5F", [65533, 65392, 65436, 65533, 65377, 65439]], + 'Double-byte mode 1' => ["1B2440 00 305C 7E21 5F", [65533, 31227, 65533, 65533]], + 'Double-byte mode 2' => ["1B2442 00 305C 7E21 5F", [65533, 31227, 65533, 65533]], + 'Multiple modes' => ["5C 1B2849 21 1B2440 305C 1B284A 5C 1B2842 5C", [92, 65377, 31227, 165, 92]], + 'Double escape' => ["1B2849 1B2842 5C", [65533, 92]], + 'Triple escape' => ["1B2849 1B2842 1B284A 5C", [65533, 65533, 165]], + 'Trailing escape' => ["20 1B284A 30 33 1B2849", [32, 48, 51]], + 'Truncated escape 1' => ["1B", [65533]], + 'Truncated escape 2' => ["1B28", [65533, 40]], + 'Truncated escape 3' => ["1B2820", [65533, 40, 32]], + 'Truncated escape 4' => ["1B2020", [65533, 32, 32]], + 'Invalid escape 1' => ["1B2840", [65533, 40, 64]], + 'Invalid escape 2' => ["1B244A", [65533, 36, 74]], + 'Invalid bytes' => ["80 FF 1B2849 00 20 7F 1B2442 00 2100 FF FF", [65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533]], + ]; + } + + /** + * @dataProvider provideCodePoints + * @covers MensBeam\Intl\Encoding\Encoder + */ + public function testEncodeCodePoints(bool $fatal, $input, $exp) { + return parent::testEncodeCodePoints($fatal, $input, $exp); + } + + /** + * @dataProvider provideCodePoints + * @covers MensBeam\Intl\Encoding\ISO2022JP::encode + */ + public function testEncodeCodePointsStatically(bool $fatal, $input, $exp) { + $out = ""; + if ($exp instanceof \Throwable) { + $this->expectException(get_class($exp)); + $this->expectExceptionCode($exp->getCode()); + } else { + $exp = strtolower(str_replace(" ", "", $exp)); + } + foreach ($input as $char) { + $out .= ISO2022JP::encode($char, $fatal, $mode); + } + $out .= ISO2022JP::encode(null, $fatal, $mode); + $this->assertSame($exp, bin2hex($out)); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\ISO2022JP::__construct + * @covers MensBeam\Intl\Encoding\ISO2022JP::nextCode + * @covers MensBeam\Intl\Encoding\ISO2022JP::modeSet + */ + public function testDecodeMultipleCharactersAsCodePoints(string $input, array $exp) { + return parent::testDecodeMultipleCharactersAsCodePoints($input, $exp); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\ISO2022JP::__construct + * @covers MensBeam\Intl\Encoding\ISO2022JP::nextChar + * @covers MensBeam\Intl\Encoding\ISO2022JP::modeSet + */ + public function testDecodeMultipleCharactersAsStrings(string $input, array $exp) { + return parent::testDecodeMultipleCharactersAsStrings($input, $exp); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\ISO2022JP::seekBack + */ + public function testSTepBackThroughAString(string $input, array $exp) { + return parent::testSTepBackThroughAString($input, $exp); + } + + /** + * @covers MensBeam\Intl\Encoding\ISO2022JP::seek + * @covers MensBeam\Intl\Encoding\ISO2022JP::posChar + * @covers MensBeam\Intl\Encoding\ISO2022JP::posByte + * @covers MensBeam\Intl\Encoding\ISO2022JP::rewind + */ + public function testSeekThroughAString() { + return parent::testSeekThroughAString(); + } + + /** + * @covers MensBeam\Intl\Encoding\ISO2022JP::posChar + * @covers MensBeam\Intl\Encoding\ISO2022JP::posByte + * @covers MensBeam\Intl\Encoding\ISO2022JP::eof + */ + public function testTraversePastTheEndOfAString() { + return parent::testTraversePastTheEndOfAString(); + } + + /** + * @covers MensBeam\Intl\Encoding\ISO2022JP::peekChar + * @covers MensBeam\Intl\Encoding\ISO2022JP::stateSave + * @covers MensBeam\Intl\Encoding\ISO2022JP::stateApply + */ + public function testPeekAtCharacters() { + return parent::testPeekAtCharacters(); + } + + /** + * @covers MensBeam\Intl\Encoding\ISO2022JP::peekCode + * @covers MensBeam\Intl\Encoding\ISO2022JP::stateSave + * @covers MensBeam\Intl\Encoding\ISO2022JP::stateApply + */ + public function testPeekAtCodePoints() { + return parent::testPeekAtCodePoints(); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\ISO2022JP::lenChar + * @covers MensBeam\Intl\Encoding\ISO2022JP::lenByte + * @covers MensBeam\Intl\Encoding\ISO2022JP::stateSave + * @covers MensBeam\Intl\Encoding\ISO2022JP::stateApply + */ + public function testGetStringLength(string $input, array $points) { + return parent::testGetStringLength($input, $points); + } + + /** + * @covers MensBeam\Intl\Encoding\ISO2022JP::errDec + */ + public function testReplacementModes() { + return parent::testReplacementModes(); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\ISO2022JP::rewind + * @covers MensBeam\Intl\Encoding\ISO2022JP::chars + * @covers MensBeam\Intl\Encoding\ISO2022JP::codes + */ + public function testIterateThroughAString(string $input, array $exp) { + return parent::testIterateThroughAString($input, $exp); + } + + /** + * @dataProvider provideStrings + * @coversNothing + */ + public function testIterateThroughAStringAllowingSurrogates(string $input, array $strictExp, array $relaxedExp = null) { + return parent::testIterateThroughAStringAllowingSurrogates($input, $strictExp, $relaxedExp); + } + + /** + * @covers MensBeam\Intl\Encoding\ISO2022JP::seekBack + */ + public function testSeekBackOverRandomData() { + return parent::testSeekBackOverRandomData(); + } + + /** + * @group optional + */ + public function testPedanticallyDecodeSingleCharactersAsCodePoint() { + $series = [ + ]; + foreach ($series as $test) { + foreach ($test[0] as $a => $input) { + $class = $this->testedClass; + $char = hex2bin($input); + $exp = $test[1][$a]; + $s = new $class($char); + $this->assertSame($exp, $s->nextCode(), "Sequence $input did not decode to $exp."); + $this->assertFalse($s->nextCode(), "Sequence $input did not end after one character"); + } + } + } +} diff --git a/tests/cases/Encoding/TestReplacement.php b/tests/cases/Encoding/TestReplacement.php new file mode 100644 index 0000000..76fe3fd --- /dev/null +++ b/tests/cases/Encoding/TestReplacement.php @@ -0,0 +1,201 @@ + ["", []], + 'Arbitrary string 1' => ["20", [0xFFFD]], + 'Arbitrary string 2' => ["64 8B 20 00 FF A5", [0xFFFD]], + ]; + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\Replacement::__construct + * @covers MensBeam\Intl\Encoding\Replacement::nextCode + */ + public function testDecodeMultipleCharactersAsCodePoints(string $input, array $exp) { + return parent::testDecodeMultipleCharactersAsCodePoints($input, $exp); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\Replacement::__construct + * @covers MensBeam\Intl\Encoding\Replacement::nextChar + */ + public function testDecodeMultipleCharactersAsStrings(string $input, array $exp) { + return parent::testDecodeMultipleCharactersAsStrings($input, $exp); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\Replacement::seek + */ + public function testSTepBackThroughAString(string $input, array $exp) { + return parent::testSTepBackThroughAString($input, $exp); + } + + /** + * @coversNothing + */ + public function testSeekThroughAString() { + $this->assertTrue(true); + } + + /** + * @covers MensBeam\Intl\Encoding\Replacement::posChar + * @covers MensBeam\Intl\Encoding\Replacement::posByte + * @covers MensBeam\Intl\Encoding\Replacement::seek + * @covers MensBeam\Intl\Encoding\Replacement::eof + */ + public function testTraversePastTheEndOfAString() { + $d = new Replacement("a"); + $this->assertFalse($d->eof()); + $this->assertSame(0, $d->posChar()); + $this->assertSame(0, $d->posByte()); + $d->seek(1); + $this->assertTrue($d->eof()); + $this->assertSame(1, $d->posChar()); + $this->assertSame(1, $d->posByte()); + $d->seek(1); + $this->assertTrue($d->eof()); + $this->assertSame(1, $d->posChar()); + $this->assertSame(1, $d->posByte()); + } + + /** + * @covers MensBeam\Intl\Encoding\Replacement::peekChar + * @covers MensBeam\Intl\Encoding\Replacement::posChar + * @covers MensBeam\Intl\Encoding\Replacement::posByte + */ + public function testPeekAtCharacters() { + $d = new Replacement("A"); + $this->assertSame(0, $d->posChar()); + $this->assertSame(0, $d->posByte()); + $this->assertSame("\u{FFFD}", $d->peekChar(2112)); + $this->assertSame(0, $d->posChar()); + $this->assertSame(0, $d->posByte()); + $this->assertSame("", $d->peekChar(0)); + $this->assertSame("", $d->peekChar(-2112)); + } + + /** + * @covers MensBeam\Intl\Encoding\Replacement::peekCode + * @covers MensBeam\Intl\Encoding\Replacement::posChar + * @covers MensBeam\Intl\Encoding\Replacement::posByte + */ + public function testPeekAtCodePoints() { + $d = new Replacement("A"); + $this->assertSame(0, $d->posChar()); + $this->assertSame(0, $d->posByte()); + $this->assertSame([0xFFFD], $d->peekCode(2112)); + $this->assertSame(0, $d->posChar()); + $this->assertSame(0, $d->posByte()); + $this->assertSame([], $d->peekCode(0)); + $this->assertSame([], $d->peekCode(-2112)); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\Replacement::lenChar + * @covers MensBeam\Intl\Encoding\Replacement::lenByte + */ + public function testGetStringLength(string $input, array $points) { + return parent::testGetStringLength($input, $points); + } + + /** + * @covers MensBeam\Intl\Encoding\Replacement::nextChar + * @covers MensBeam\Intl\Encoding\Replacement::nextCode + * @covers MensBeam\Intl\Encoding\Replacement::peekChar + * @covers MensBeam\Intl\Encoding\Replacement::peekCode + * @covers MensBeam\Intl\Encoding\Replacement::rewind + * @covers MensBeam\Intl\Encoding\Replacement::posChar + * @covers MensBeam\Intl\Encoding\Replacement::posByte + */ + public function testReplacementModes() { + $d = new Replacement("VVVVVV", true); + $this->assertSame(0, $d->posChar()); + $this->assertSame(0, $d->posByte()); + try { + $p = $d->peekCode(); + } catch (\Exception $e) { + $p = $e; + } finally { + $this->assertInstanceOf(DecoderException::class, $p); + } + $this->assertSame(0, $d->posErr); + $this->assertSame(0, $d->posChar()); + $this->assertSame(0, $d->posByte()); + try { + $p = $d->nextCode(); + } catch (\Exception $e) { + $p = $e; + } finally { + $this->assertInstanceOf(DecoderException::class, $p); + } + $this->assertSame(1, $d->posErr); + $this->assertSame(1, $d->posChar()); + $this->assertSame(6, $d->posByte()); + $d->rewind(); + $this->assertSame(0, $d->posChar()); + $this->assertSame(0, $d->posByte()); + try { + $p = $d->peekChar(); + } catch (\Exception $e) { + $p = $e; + } finally { + $this->assertInstanceOf(DecoderException::class, $p); + } + $this->assertSame(1, $d->posErr); + $this->assertSame(0, $d->posChar()); + $this->assertSame(0, $d->posByte()); + try { + $p = $d->nextChar(); + } catch (\Exception $e) { + $p = $e; + } finally { + $this->assertInstanceOf(DecoderException::class, $p); + } + $this->assertSame(1, $d->posErr); + $this->assertSame(1, $d->posChar()); + $this->assertSame(6, $d->posByte()); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\Replacement::rewind + * @covers MensBeam\Intl\Encoding\Replacement::chars + * @covers MensBeam\Intl\Encoding\Replacement::codes + */ + public function testIterateThroughAString(string $input, array $exp) { + return parent::testIterateThroughAString($input, $exp); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\Replacement::nextCode + */ + public function testIterateThroughAStringAllowingSurrogates(string $input, array $strictExp, array $relaxedExp = null) { + return parent::testIterateThroughAStringAllowingSurrogates($input, $strictExp, $relaxedExp); + } + + /** + * @coversNothing + */ + public function testSeekBackOverRandomData() { + return parent::testSeekBackOverRandomData(); + } +} diff --git a/tests/cases/Encoding/TestShiftJIS.php b/tests/cases/Encoding/TestShiftJIS.php new file mode 100644 index 0000000..e0e09c9 --- /dev/null +++ b/tests/cases/Encoding/TestShiftJIS.php @@ -0,0 +1,219 @@ + [false, 0x64, "64"], + 'U+0064 (fatal)' => [true, 0x64, "64"], + 'U+00A5 (HTML)' => [false, 0xA5, "5C"], + 'U+00A5 (fatal)' => [true, 0xA5, "5C"], + 'U+203E (HTML)' => [false, 0x203E, "7E"], + 'U+203E (fatal)' => [true, 0x203E, "7E"], + 'U+3088 (HTML)' => [false, 0x3088, "82 E6"], + 'U+3088 (fatal)' => [true, 0x3088, "82 E6"], + 'U+FF96 (HTML)' => [false, 0xFF96, "D6"], + 'U+FF96 (fatal)' => [true, 0xFF96, "D6"], + 'U+2212 (HTML)' => [false, 0x2212, "81 7C"], + 'U+2212 (fatal)' => [true, 0x2212, "81 7C"], + 'U+00E6 (HTML)' => [false, 0xE6, bin2hex("æ")], + 'U+00E6 (fatal)' => [true, 0xE6, new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)], + 'U+FFE2 (HTML)' => [false, 0xFFE2, "81 CA"], + 'U+FFE2 (fatal)' => [true, 0xFFE2, "81 CA"], + 'U+2116 (HTML)' => [false, 0x2116, "87 82"], + 'U+2116 (fatal)' => [true, 0x2116, "87 82"], + 'U+E000 (HTML)' => [false, 0xE000, bin2hex("")], + 'U+E000 (fatal)' => [true, 0xE000, new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)], + '-1 (HTML)' => [false, -1, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '-1 (fatal)' => [true, -1, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '0x110000 (HTML)' => [false, 0x110000, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '0x110000 (fatal)' => [true, 0x110000, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + ]; + } + + public function provideStrings() { + return [ + 'empty string' => ["", []], + 'sanity check' => ["40", [64]], + 'invalid byte' => ["FF", [65533]], + 'former ASCII deviations' => ["5C 7E", [92, 126]], + 'JIS X 0201 range' => ["A1 DF", [65377, 65439]], + 'EUDC range' => ["F040 F9FC", [57344, 59223]], + 'JIS X 0208 assigned range' => ["8140 FC4B", [12288, 40657]], + 'JIS X 0208 total range' => ["8140 FCFC", [12288, 65533]], + 'JIS X 0208 truncated character 1' => ["81", [65533]], + 'JIS X 0208 truncated character 2' => ["81 20", [65533, 32]], + 'JIS X 0208 truncated character 3' => ["81 FF", [65533]], + ]; + } + + /** + * @dataProvider provideCodePoints + * @covers MensBeam\Intl\Encoding\Encoder + * @covers MensBeam\Intl\Encoding\ShiftJIS::encode + * @covers MensBeam\Intl\Encoding\ShiftJIS::errEnc + */ + public function testEncodeCodePoints(bool $fatal, $input, $exp) { + return parent::testEncodeCodePoints($fatal, $input, $exp); + } + + /** + * @dataProvider provideCodePoints + * @covers MensBeam\Intl\Encoding\ShiftJIS::encode + * @covers MensBeam\Intl\Encoding\ShiftJIS::errEnc + */ + public function testEncodeCodePointsStatically(bool $fatal, $input, $exp) { + return parent::testEncodeCodePointsStatically($fatal, $input, $exp); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\ShiftJIS::__construct + * @covers MensBeam\Intl\Encoding\ShiftJIS::nextCode + */ + public function testDecodeMultipleCharactersAsCodePoints(string $input, array $exp) { + return parent::testDecodeMultipleCharactersAsCodePoints($input, $exp); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\ShiftJIS::__construct + * @covers MensBeam\Intl\Encoding\ShiftJIS::nextChar + */ + public function testDecodeMultipleCharactersAsStrings(string $input, array $exp) { + return parent::testDecodeMultipleCharactersAsStrings($input, $exp); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\ShiftJIS::seekBack + */ + public function testSTepBackThroughAString(string $input, array $exp) { + return parent::testSTepBackThroughAString($input, $exp); + } + + /** + * @covers MensBeam\Intl\Encoding\ShiftJIS::seek + * @covers MensBeam\Intl\Encoding\ShiftJIS::posChar + * @covers MensBeam\Intl\Encoding\ShiftJIS::posByte + * @covers MensBeam\Intl\Encoding\ShiftJIS::rewind + */ + public function testSeekThroughAString() { + return parent::testSeekThroughAString(); + } + + /** + * @covers MensBeam\Intl\Encoding\ShiftJIS::posChar + * @covers MensBeam\Intl\Encoding\ShiftJIS::posByte + * @covers MensBeam\Intl\Encoding\ShiftJIS::eof + */ + public function testTraversePastTheEndOfAString() { + return parent::testTraversePastTheEndOfAString(); + } + + /** + * @covers MensBeam\Intl\Encoding\ShiftJIS::peekChar + * @covers MensBeam\Intl\Encoding\ShiftJIS::stateSave + * @covers MensBeam\Intl\Encoding\ShiftJIS::stateApply + */ + public function testPeekAtCharacters() { + return parent::testPeekAtCharacters(); + } + + /** + * @covers MensBeam\Intl\Encoding\ShiftJIS::peekCode + * @covers MensBeam\Intl\Encoding\ShiftJIS::stateSave + * @covers MensBeam\Intl\Encoding\ShiftJIS::stateApply + */ + public function testPeekAtCodePoints() { + return parent::testPeekAtCodePoints(); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\ShiftJIS::lenChar + * @covers MensBeam\Intl\Encoding\ShiftJIS::lenByte + * @covers MensBeam\Intl\Encoding\ShiftJIS::stateSave + * @covers MensBeam\Intl\Encoding\ShiftJIS::stateApply + */ + public function testGetStringLength(string $input, array $points) { + return parent::testGetStringLength($input, $points); + } + + /** + * @covers MensBeam\Intl\Encoding\ShiftJIS::errDec + */ + public function testReplacementModes() { + return parent::testReplacementModes(); + } + + /** + * @dataProvider provideStrings + * @covers MensBeam\Intl\Encoding\ShiftJIS::rewind + * @covers MensBeam\Intl\Encoding\ShiftJIS::chars + * @covers MensBeam\Intl\Encoding\ShiftJIS::codes + */ + public function testIterateThroughAString(string $input, array $exp) { + return parent::testIterateThroughAString($input, $exp); + } + + /** + * @dataProvider provideStrings + * @coversNothing + */ + public function testIterateThroughAStringAllowingSurrogates(string $input, array $strictExp, array $relaxedExp = null) { + return parent::testIterateThroughAStringAllowingSurrogates($input, $strictExp, $relaxedExp); + } + + /** + * @covers MensBeam\Intl\Encoding\ShiftJIS::seekBack + */ + public function testSeekBackOverRandomData() { + return parent::testSeekBackOverRandomData(); + } + + /** + * @group optional + */ + public function testPedanticallyDecodeSingleCharactersAsCodePoint() { + $series = [ + 'characters' => [["80","5C","8198","814E","818B","817D","814C","81F7","817E","8180","839F","83A0","83A1","83A2","83A3","83A4","83A5","83A6","83A7","83A8","83A9","83AA","83AB","83AC","83AD","83AE","83AF","83B0","83B1","83B2","83B3","83B4","83B5","83B6","83BF","83C0","83C1","83C2","83C3","83C4","83C5","83C6","83C7","83C8","83C9","83CA","83CB","83CC","83CD","83CE","83CF","83D0","83D1","83D2","83D3","83D4","83D5","83D6","8446","8440","8441","8442","8443","8444","8445","8447","8448","8449","844A","844B","844C","844D","844E","844F","8450","8451","8452","8453","8454","8455","8456","8457","8458","8459","845A","845B","845C","845D","845E","845F","8460","8470","8471","8472","8473","8474","8475","8477","8478","8479","847A","847B","847C","847D","847E","8480","8481","8482","8483","8484","8485","8486","8487","8488","8489","848A","848B","848C","848D","848E","848F","8490","8491","8476","815D","815C","8165","8166","8167","8168","81F5","81F6","8164","8163","81F1","818C","818D","81A6","7E","818E","8782","8784","81F0","8754","8755","8756","8757","8758","8759","875A","875B","875C","875D","FA40","FA41","FA42","FA43","FA44","FA45","FA46","FA47","FA48","FA49","81A9","81AA","81A8","81AB","81CB","81CC","81CD","81DD","81CE","81DE","81B8","81B9","8794","817C","81E3","81E5","8187","8798","81DA","8161","81C8","81C9","81BF","81BE","81E7","81E8","8793","8188","81E6","81E4","81E0","8182","81DF","8185","8186","81E1","81E2","81BC","81BD","81BA","81BB","81DB","8799","81DC","8740","8741","8742","8743","8744","8745","8746","8747","8748","8749","874A","874B","874C","874D","874E","874F","8750","8751","8752","8753","849F","84AA","84A0","84AB","84A1","84AC","84A2","84AD","84A4","84AF","84A3","84AE","84A5","84BA","84B5","84B0","84A7","84BC","84B7","84B2","84A6","84B6","84BB","84B1","84A8","84B8","84BD","84B3","84A9","84B9","84BE","84B4","81A1","81A0","81A3","81A2","81A5","81A4","819F","819E","819B","819D","819C","81FC","819A","8199","818A","8189","81F4","81F3","81F2","8140","8141","8142","8156","8158","8159","815A","8171","8172","8173","8174","8175","8176","8177","8178","8179","817A","81A7","81AC","816B","816C","8780","8781","829F","82A0","82A1","82A2","82A3","82A4","82A5","82A6","82A7","82A8","82A9","82AA","82AB","82AC","82AD","82AE","82AF","82B0","82B1","82B2","82B3","82B4","82B5","82B6","82B7","82B8","82B9","82BA","82BB","82BC","82BD","82BE","82BF","82C0","82C1","82C2","82C3","82C4","82C5","82C6","82C7","82C8","82C9","82CA","82CB","82CC","82CD","82CE","82CF","82D0","82D1","82D2","82D3","82D4","82D5","82D6","82D7","82D8","82D9","82DA","82DB","82DC","82DD","82DE","82DF","82E0","82E1","82E2","82E3","82E4","82E5","82E6","82E7","82E8","82E9","82EA","82EB","82EC","82ED","82EE","82EF","82F0","82F1","814A","814B","8154","8155","8340","8341","8342","8343","8344","8345","8346","8347","8348","8349","834A","834B","834C","834D","834E","834F","8350","8351","8352","8353","8354","8355","8356","8357","8358","8359","835A","835B","835C","835D","835E","835F","8360","8361","8362","8363","8364","8365","8366","8367","8368","8369","836A","836B","836C","836D","836E","836F","8370","8371","8372","8373","8374","8375","8376","8377","8378","8379","837A","837B","837C","837D","837E","8380","8381","8382","8383","8384","8385","8386","8387","8388","8389","838A","838B","838C","838D","838E","838F","8390","8391","8392","8393","8394","8395","8396","8145","815B","8152","8153","878A","878B","878C","8785","8786","8787","8788","8789","8765","8769","8760","8763","8761","876B","876A","8764","876C","8766","876E","875F","876D","8762","8767","8768","877E","878F","878E","878D","8772","8773","876F","8770","8771","8775","8774","8783","88EA","929A","8EB5","969C","8FE4","8E4F","8FE3","89BA","9573","975E","98A0","894E","8A8E","98A1","90A2","99C0","8B75","95B8","8FE5","97BC","95C0","FA68","98A2","9286","98A3","8BF8","98A4","8ADB","924F","8EE5","98A5","98A6","98A7","9454","8B76","9456","93E1","8CC1","9652","E568","98A8","8FE6","98A9","89B3","8BE3","8CEE","96E7","9BA4","9790","93FB","8AA3","8B54","98AA","98AB","97B9","975C","9188","98AD","8E96","93F1","98B0","895D","8CDD","8CDC","88E4","986A","9869","8DB1","889F","98B1","98B2","98B3","9653","98B4","8CF0","88E5","9692","8B9C","8B9D","8B9E","92E0","97BA","98B5","98B6","98B7","906C","8F59","906D","98BC","98BA","98BB","8B77","8DA1","89EE","98B9","98B8","95A7","8E65","8E64","91BC","98BD","9574","90E5","8157","98BE","98C0","FA69","91E3","97DF","88C8","98BF","89BC","8BC2","9287","8C8F","98C1","9443","FA6A","FA6B","8AE9","FA6C","98C2","88C9","8CDE","8AEA","959A","94B0","8B78","89EF","98E5","9360","948C","98C4","94BA","97E0","904C","FA6D","8E66","8E97","89BE","92CF","9241","98C8","88CA","92E1","8F5A","8DB2","9743","91CC","89BD","FA6E","98C7","975D","98C3","98C5","8DEC","98C6","9B43","98CE","98D1","98CF","89C0","95B9","98C9","98CD","8CF1","8E67","8AA4","98D2","98CA","FA70","97E1","8E98","98CB","98D0","FA6F","FA72","98D3","98CC","FA71","8B9F","88CB","8BA0","89BF","9B44","9699","958E","8CF2","904E","97B5","95D6","8C57","91A3","89E2","FA61","8F72","FA73","98D7","98DC","98DA","98D5","91AD","98D8","98DB","98D9","95DB","98D6","904D","9693","98DD","98DE","8F43","98EB","946F","9555","98E6","95EE","89B4","98EA","FA76","98E4","98ED","9171","8CC2","947B","E0C5","98EC","937C","98E1","8CF4","8CF3","98DF","FA77","8ED8","98E7","FA75","95ED","926C","98E3","8C91","98E0","98E8","98E2","97CF","98E9","9860","8BE4","8C90","FA74","FA7A","98EE","FA78","98EF","98F3","88CC","95CE","98F2","98F1","98F5","98F4","92E2","8C92","98F6","FA79","8EC3","91A4","92E3","8BF4","98F7","8B55","98F8","98FA","9654","8C86","FA7B","8E50","94F5","98F9","8DC3","9762","98FC","9942","98FB","8DC2","8F9D","8C58","9943","8BCD","9940","9941","93AD","919C","8BA1","966C","9944","FA7D","97BB","9945","9948","9946","916D","9947","9949","FA7C","994B","994A","95C6","8B56","994D","994E","89AD","994C","8EF2","9951","9950","994F","98D4","9952","8F9E","9953","9744","96D7","9955","9954","9957","9956","9958","9959","88F2","8CB3","8C5A","8F5B","929B","8BA2","90E6","8CF5","FA7E","8D8E","995B","96C6","9365","8E99","995A","995C","937D","8A95","995D","FA80","93FC","9153","995F","9960","94AA","8CF6","985A","9961","8BA4","95BA","91B4","8BEF","9354","8C93","9962","9963","93E0","897E","9966","8DFB","9965","8DC4","9967","E3EC","9968","9660","9969","996A","996B","8FE7","8ECA","FA81","8AA5","996E","996C","96BB","996D","9579","996F","9970","9971","937E","9975","9973","9974","9972","8DE1","9976","96E8","97E2","9977","FA82","90A6","9978","8F79","9979","929C","97BD","9380","99C3","997A","EAA3","8BC3","997B","967D","8F88","91FA","997D","93E2","FA83","997E","9980","8A4D","9981","8BA5","93CA","899A","8F6F","949F","9982","9381","906E","9983","95AA","90D8","8AA0","8AA7","9984","9986","8C59","9985","FA84","97F1","8F89","94BB","95CA","9987","9798","9988","9989","939E","998A","90A7","8DFC","8C94","998B","8E68","8D8F","92E4","998D","91A5","8DED","998E","998F","914F","998C","9991","9655","8D84","9990","8C95","8DDC","948D","9994","9992","959B","8FE8","999B","8A84","9995","9993","916E","9997","9996","8A63","8C80","999C","97AB","9998","999D","999A","9999","97CD","FA85","8CF7","89C1","97F2","FA86","8F95","9377","8D85","99A0","99A1","FB77","97E3","984A","99A3","8CF8","99A2","8A4E","FA87","99A4","9675","92BA","9745","95D7","99A5","E8D3","93AE","99A6","8AA8","96B1","FA88","8F9F","99A7","95E5","99AB","90A8","99A8","8BCE","99A9","8AA9","8C4D","99AC","99AD","99AE","99AF","8ED9","8CF9","96DC","FA89","96E6","93F5","95EF","99B0","FA8A","99B1","99B3","99B5","99B4","99B6","89BB","966B","8DFA","99B7","9178","8FA0","8BA7","99B8","FA8B","94D9","99B9","99BA","99BB","99BC","9543","8BE6","88E3","93BD","99BD","8F5C","90E7","99BF","99BE","8FA1","8CDF","99C1","94BC","99C2","94DA","91B2","91EC","8BA6","93EC","9250","948E","966D","99C4","90E8","8C54","99C5","99C6","894B","88F3","8AEB","FA8C","91A6","8B70","9791","99C9","89B5","99C8","8BA8","99CA","96EF","FA8D","99CB","97D0","8CFA","8CB4","99CC","99CE","99CD","907E","8958","897D","99CF","99D0","FA8E","8CB5","99D1","8B8E","8E51","99D2","9694","8DB3","8B79","9746","916F","94BD","8EFB","8F66","8EE6","8EF3","8F96","94BE","FA8F","99D5","8962","9170","8CFB","8CC3","8BE5","99D9","9240","91FC","8BA9","8FA2","99DA","99D8","89C2","91E4","8EB6","8E6A","8945","8A90","8D86","8E69","99DB","99DC","8B68","8A65","8D87","8B67","92DD","8944","93AF","96BC","8D40","9799","9366","8CFC","8C4E","99E5","8BE1","9669","94DB","99E4","8ADC","99DF","99E0","99E2","99E3","8B7A","9081","95AB","99E1","99DD","8CE1","99DE","9843","95F0","92E6","8CE0","8D90","99E6","93DB","99EA","8EFC","8EF4","99ED","99EB","96A1","99E8","99F1","99EC","99EF","8CC4","96BD","99F0","99F2","99F4","FA92","8DEE","9861","99E9","99E7","99F3","99EE","FA91","99F6","9A42","99F8","99FC","FA93","9A40","99F9","9A5D","8DE7","8A50","99F7","9A44","88F4","9A43","88A3","9569","9A41","99FA","99F5","99FB","8DC6","9A45","88F5","9A4E","9A46","9A47","8FA3","9689","9A4C","9A4B","934E","9A4D","9A4A","FA94","8953","8DB4","904F","9A48","9382","9A49","88A0","9A53","9742","8FA5","9A59","9A58","9A4F","91C1","9A50","91ED","9A55","8FA4","9A52","96E2","8C5B","9A56","9A57","9A54","9A5A","9A51","9A60","9A65","9A61","9A5C","9A66","9150","FA95","9A68","8D41","9A5E","929D","9A62","9A5B","8AAB","8AEC","8A85","9A63","9A5F","8C96","9A69","9A67","9172","8B69","8BAA","9A64","8BF2","8963","9A6D","9A6B","9AA5","9A70","9A6A","9A6E","9A6C","8E6B","9A6F","9A72","9A77","9A75","9A74","9251","89C3","9A71","9A73","8FA6","8952","9A76","89DC","9A82","8FFA","9A7D","9A7B","9A7C","9A7E","895C","9158","9A78","9A79","8A9A","9A81","8AED","9A84","9A80","9A83","95AC","93D3","94B6","9A86","9A85","8A64","9A87","9A8A","9A89","9A88","9458","9A8B","9A8C","9A8E","9A8D","9A90","9A93","9A91","9A8F","9A92","9A94","9A95","9A96","9A97","9A98","9964","8EFA","8E6C","89F1","88F6","9263","9A99","8DA2","88CD","907D","9A9A","8CC5","8D91","9A9C","9A9B","95DE","9A9D","9A9F","9A9E","9AA0","9AA1","8C97","8980","9AA2","9AA4","9AA3","9AA6","9379","9AA7","88B3","8DDD","8C5C","926E","9AA8","9AA9","9AAB","9AAC","8DE2","8BCF","9656","9AAA","9AAD","8DBF","8D42","FA96","9AB1","8DA3","FA97","9252","9AAE","92D8","9AB2","9082","9AB0","9AB3","8C5E","9AB4","9AB5","8D43","8A5F","9AB7","9AB8","FA98","9AB9","9AB6","9AAF","9ABA","9ABB","FA9A","FA99","9684","8FE9","9ABD","9ABE","9ABC","9AC0","9457","88E6","9575","9AC1","8FFB","8EB7","947C","8AEE","8DE9","9678","93B0","8C98","91CD","9ABF","9AC2","91C2","9AC3","9AC4","9AC6","92E7","8AAC","EA9F","8981","95F1","8FEA","9367","8DE4","9ACC","95BB","97DB","89F2","9AC8","9159","9ACB","9383","9368","9384","94B7","92CB","8DC7","9AC7","8996","9355","9AC9","9AC5","906F","9ACD","8F6D","8BAB","9ACE","95E6","919D","92C4","FA9D","9AD0","966E","9AD1","9AD6","FA9E","95AD","9AD5","9ACF","9AD2","9AD4","8DA4","95C7","9AD7","9264","89F3","8FEB","9AD9","9AD8","8D88","9ADA","9ADC","9ADB","9ADE","9AD3","9AE0","9ADF","9ADD","8E6D","9070","9173","9AE1","90BA","88EB","9484","92D9","9AE3","9AE2","9AE4","9AE5","9AE6","9AE7","95CF","9AE8","FA9F","89C4","9AE9","975B","8A4F","99C7","8F67","91BD","9AEA","96E9","96B2","9AEC","91E5","9356","91BE","9576","9AED","9AEE","899B","8EB8","9AEF","88CE","9AF0","9AF1","8982","8AEF","93DE","95F2","9AF5","9174","9AF4","8C5F","FAA0","967A","9AF3","9385","9AF7","9AF6","FAA1","FAA2","9AF9","9AF8","FAA3","899C","9AFA","8FA7","9AFC","9244","9AFB","95B1","8F97","937A","9B40","8D44","9B41","9440","94DC","96CF","9444","9B4A","8B57","9764","96AD","9BAA","9B42","9B45","FAA4","91C3","9657","9369","9B46","9685","FAA5","8DC8","8FA8","9B47","8E6F","8E6E","88B7","8CC6","90A9","88CF","9B4B","9B4C","9B49","8957","8AAD","9B48","96C3","9550","88A6","88F7","8E70","88D0","88A1","9B51","9B4F","96BA","9B52","9B50","9B4E","9050","9B4D","95D8","8CE2","9B56","9B57","8FA9","9B53","984B","946B","9B55","8DA5","9B58","9577","9B59","9B54","96B9","947D","9B5A","9551","9B5B","9B5F","9B5C","89C5","9B5E","8EB9","9B5D","8C99","9B6B","9B64","9B61","9284","9B60","9B62","9B63","9B65","9B66","8AF0","9B68","9B67","9B69","8FEC","9B6C","92DA","8964","9B6A","9B6D","9B6E","9B71","9B6F","9B70","8E71","9B72","8D45","9B73","FAA6","8E9A","91B6","9B74","9B75","8E79","8D46","96D0","8B47","8CC7","9B76","8A77","9B77","91B7","9B78","9BA1","9B79","9B7A","9B7B","9B7D","9B7E","9B80","91EE","8946","8EE7","88C0","9176","8AAE","8EB3","8D47","9386","8F40","8AAF","9288","92E8","88B6","8B58","95F3","8EC0","8B71","90E9","8EBA","9747","9B81","8B7B","8DC9","8A51","8983","8FAA","89C6","9B82","9765","8F68","FAA7","8EE2","9B83","8AF1","93D0","96A7","9B84","9B85","9578","9B87","8AA6","8BF5","9B86","FAA9","8AB0","9051","9B8B","8E40","89C7","9B8A","9B88","9B8C","9B89","944A","9ECB","9052","9B8D","FAAA","97BE","9B8E","9B90","929E","9B8F","90A1","8E9B","91CE","8EF5","9595","90EA","8ECB","9B91","8FAB","9B92","9B93","88D1","91B8","9071","9B94","93B1","8FAC","8FAD","9B95","90EB","8FAE","FAAB","9B96","9B97","96DE","9B98","8BC4","8F41","9B99","9B9A","8EDA","904B","93F2","9073","94F6","9441","8BC7","9B9B","8B8F","9B9C","8BFC","93CD","89AE","8E72","9B9D","9BA0","9B9F","8BFB","9B9E","9357","91AE","936A","8EC6","9177","979A","9BA2","9BA3","93D4","8E52","9BA5","9BA6","9BA7","8AF2","9BA8","9BA9","89AA","FAAC","915A","8AE2","9BAB","96A6","91D0","8A78","9BAD","9BAF","8ADD","FAAD","9BAC","9BAE","9BB1","9BB0","9BB2","9BB3","93BB","8BAC","89E3","9BB4","9BB9","9BB7","95F5","95F4","FAAE","9387","9BB6","8F73","9BB5","9092","9BBA","8DE8","9BC0","9BC1","9BBB","8A52","9BBC","9BC5","9BC4","9BC3","9BBF","9BBE","9BC2","FAAF","95F6","FAB2","9BC9","9BC6","9BC8","9792","9BC7","FAB0","9BBD","9093","9BCA","FAB3","8DB5","9BCB","9BCC","9BCF","9BCE","9BCD","9388","9BB8","9BD5","9BD1","9BD0","9BD2","9BD3","9BD6","FAB4","FAB5","97E4","9BD7","9BD4","9BD8","8ADE","9BD9","FAB6","9BDB","9BDA","9BDC","9BDD","90EC","8F42","8F84","9183","8D48","8DB6","8D49","8B90","9BDE","8DB7","8CC8","9BDF","96A4","9462","9BE0","8D4A","8AAA","9246","8BD0","8E73","957A","94BF","9BE1","8AF3","9BE4","929F","9BE3","9BE2","9BE5","92E9","9083","8E74","90C8","91D1","8B41","92A0","9BE6","9BE7","8FED","9658","9BEA","9BE9","9BE8","959D","9BF1","9679","9BEB","9BED","968B","9BEC","9BEE","94A6","9BEF","95BC","9BF0","8AB1","95BD","944E","9BF2","9BF3","8D4B","8AB2","9BF4","8CB6","9763","9748","8AF4","9BF6","92A1","8D4C","8FAF","94DD","8FB0","8F98","92EA","95F7","9358","8D4D","957B","9BF7","9378","8DC0","8CC9","92EB","88C1","8F8E","8D4E","9766","9BF8","9BF9","9470","9BFA","97F5","984C","9BFC","9BFB","8A66","9C40","9C43","9C44","9C42","955F","8FB1","9C46","9C45","9C41","9C47","9C48","9C49","9C4C","9C4A","9C4B","9C4D","8984","92EC","9C4E","8C9A","89F4","9455","9C4F","93F9","95D9","9C50","984D","9C51","95BE","9C54","989F","98AF","8EAE","93F3","9C55","8B7C","92A2","88F8","9C56","95A4","8D4F","926F","92ED","FAB7","96ED","8CB7","8CCA","9C57","9C58","9C5E","8EE3","FAB8","92A3","8BAD","9C59","954A","9265","9C5A","FA67","9C5B","8BAE","9C5C","9C5D","9C5F","9396","9C60","9C61","9C62","9C53","9C52","9C63","8C60","9546","FAB9","8DCA","9556","92A4","956A","9C64","8FB2","8965","9C65","9C66","96F0","94DE","9C69","899D","90AA","9C68","9C67","8C61","91D2","9C6D","9C6B","9C6A","97A5","8CE3","8F99","9C6C","936B","8F5D","93BE","9C70","9C6F","9C6E","9C71","8CE4","9C72","959C","8F7A","9C73","94F7","93BF","92A5","FABA","934F","9C74","8B4A","9053","954B","8AF5","9445","9C75","8E75","9659","965A","899E","9C7A","FABB","9289","9C77","89F5","9CAB","9C79","944F","9C78","9C76","8D9A","9C7C","9C83","9C89","9C81","937B","9C86","957C","9C80","9C85","97E5","8E76","91D3","9C7D","8B7D","9C88","90AB","8985","9C82","89F6","9C87","8BAF","9C84","9C8A","9C8C","9C96","9C94","9C91","9C90","97F6","9C92","8BB0","8D50","8F9A","9C99","9C8B","FABC","9C8F","9C7E","89F8","9C93","9C95","9270","8DA6","89B6","9C8D","9C98","9C97","8BB1","91A7","8A86","8C62","9C8E","9C9A","9C9D","9C9F","FABD","8EBB","FABE","9CA5","92EE","9C9B","9CA3","89F7","9CA1","9CA2","9C9E","9CA0","8CE5","9749","8AB3","8978","9CA4","9459","88AB","94DF","9C7B","9CAA","9CAE","96E3","9CA7","9389","9CAC","8FEE","9CAD","93D5","9866","9CA9","FAC0","9CAF","8D9B","90C9","FABF","88D2","9CA8","9CA6","9179","9C9C","8E53","91C4","9CBB","FAC2","917A","9CB6","9CB3","9CB4","8EE4","9CB7","9CBA","9CB5","8F44","9CB8","9CB2","96FA","96F9","9CBC","9CBD","88D3","FAC3","9CB1","8BF0","88A4","8AB4","FAC1","9CB9","9CC1","9CC0","9CC5","FAC5","9CC6","FAC4","9CC4","9CC7","9CBF","9CC3","9CC8","9CC9","9CBE","8E9C","9CC2","91D4","8D51","9CB0","9054","9CD6","95E7","9CCC","9CCD","9CCE","9CD5","9CD4","969D","8AB5","9CD2","8C64","8A53","9CCF","97B6","9CD1","88D4","9CD3","9CCA","9CD0","9CD7","8C63","9CCB","977C","974A","9CDA","9CDE","919E","97F7","9CDF","9CDC","9CD9","FAC6","9CD8","9CDD","95AE","93B2","8C65","9CE0","9CDB","9CE1","8C9B","89AF","9CE9","8AB6","9CE7","9CE8","8DA7","9CE6","9CE4","9CE3","9CEA","9CE2","9CEC","89F9","9CEE","9CED","92A6","9CF1","9CEF","9CE5","8C9C","9CF0","9CF4","9CF3","9CF5","9CF2","9CF6","9CF7","9CF8","95E8","9CFA","9CF9","8F5E","90AC","89E4","89FA","FAC7","9CFB","88BD","90CA","9CFC","E6C1","9D40","8C81","9D41","90ED","9D42","9D43","8B59","9D44","9D45","9D46","91D5","8CCB","96DF","965B","8F8A","9D47","90EE","E7BB","94E0","8EE8","8DCB","9D48","91C5","95A5","91EF","9D4B","9D49","9D4C","9D4A","9D4D","95AF","88B5","957D","94E1","9D4E","9D51","8FB3","8B5A","9D4F","9D56","8FB4","9D50","9463","977D","9D52","9D53","9D57","938A","9D54","8D52","90DC","9D65","94B2","91F0","FAC8","94E2","9DAB","95F8","92EF","9695","9D5A","899F","928A","9D63","9253","9D5D","9D64","9D5F","9D66","9D62","9D61","948F","9D5B","89FB","9D59","8B91","91F1","9D55","9D58","8D53","90D9","8FB5","9D60","9471","8B92","8A67","8A87","9040","9D68","9D6D","9D69","8C9D","9D6E","8E41","8D89","8F45","9D5C","8E9D","9D6B","8E77","9D6C","88C2","9D67","92A7","8B93","8BB2","9D6A","88A5","8DC1","9055","92F0","94D2","9D70","917D","91A8","8E4A","9D71","9D73","9D6F","95DF","92BB","917B","95F9","8ECC","9D80","9D7E","9098","8C9E","9D78","8FB7","93E6","9450","9D76","917C","8EF6","9D7B","8FB6","9D75","9D7A","9472","9D74","8C40","8A7C","9D7C","97A9","8DCC","9254","9D79","90DA","8D54","9084","8986","915B","9D77","8B64","8C66","92CD","9D7D","917E","9D81","9D83","91B5","9D89","9D84","9D86","9560","92F1","9D87","974B","9767","8AB7","88AC","9D85","9D82","8AF6","8987","FAC9","9D88","9768","9D8C","91B9","9D93","9D8D","9D8A","9D91","9D72","9D8E","9D92","94C0","938B","9D8B","9D8F","8C67","8DEF","90DB","9D97","9345","FACA","9D94","9680","9D95","9D96","96CC","90A0","8C82","9D9D","8E54","9D9A","9D99","9451","FACB","93B3","9350","9D9B","9D9C","958F","9464","8E42","90EF","966F","8A68","9DA3","9D9E","9769","9DA5","9DA1","9DA2","9180","FACC","9DA0","9D5E","9DA4","9D9F","9DA9","9DAA","9346","9DAC","8E43","9DA7","8B5B","9DAD","9DA6","9DB1","9DB0","9DAF","9DB2","9DB4","8FEF","9DB3","9DB7","9DB5","9DB6","9D90","9DB9","9DB8","9D98","9DBA","9DAE","8E78","9DBB","9DBC","9DBE","9DBD","9DBF","89FC","8D55","95FA","90AD","8CCC","9DC1","9DC4","FACD","9571","8B7E","9DC3","9DC2","9473","9DC5","8BB3","9DC7","9DC6","8AB8","8E55","93D6","8C68","9094","9DC8","90AE","9347","957E","9DC9","9DCA","9DCB","95B6","9B7C","90C4","956B","8DD6","94E3","94C1","936C","97BF","9DCD","8ECE","9DCE","88B4","8BD2","90CB","9580","9DCF","8E61","9266","8E7A","9056","9DD0","95FB","8997","8E7B","9DD3","9DD1","9DD4","97B7","9DD2","90F9","9DD5","91B0","9DD6","8AF8","9DD8","9DD7","9DD9","9DDA","8AF9","93FA","9255","8B8C","8E7C","9181","8F7B","88AE","9DDB","89A0","9DDF","FACE","8D56","9DDE","8DA9","8FB8","FAD1","9DDD","8FB9","96BE","8DA8","88D5","90CC","FACF","9DE4","FAD3","90AF","8966","FAD4","8F74","9686","8DF0","8FBA","FAD2","90A5","FA63","9DE3","9DE1","9DE2","FAD0","928B","9E45","9DE8","8E9E","8D57","9DE6","9DE7","9057","9DE5","8E4E","FAD6","FAD7","9DEA","9DE9","9DEE","9DEF","9DEB","FAD5","8A41","9DEC","9DED","94D3","9581","8C69","9DF0","FAD9","90B0","8FBB","9271","8BC5","9DF1","9DF5","89C9","9DF2","9DF4","9DF3","8F8B","9267","88C3","9DF6","FADA","9DF7","FADB","92A8","97EF","8E62","95E9","FADC","965C","9E41","9DF9","9DFC","9DFB","FADD","9DF8","9E40","93DC","9DFA","9E42","8F8C","9E43","976A","9498","9E44","9E46","9E47","9E48","8BC8","8967","8D58","9E49","9E4A","8F91","9182","FADE","FA66","99D6","915D","915C","91D6","8DC5","98F0","8C8E","974C","95FC","959E","FADF","9E4B","8DF1","92BD","9E4C","984E","965D","92A9","9E4D","8AFA","9E4E","9E4F","96D8","96A2","9696","967B","8E44","9E51","8EE9","9670","9E53","9E56","9E55","8AF7","8B80","9E52","9E54","9E57","9099","979B","88C7","8DDE","91BA","8EDB","8FF1","9E5A","936D","9E58","91A9","9E59","8FF0","96DB","9E5B","9E5C","9788","FAE1","9E61","8D59","9474","9E5E","938C","9DDC","9DE0","8B6E","9466","9E60","8FBC","94C2","9E66","94F8","9E5D","9E63","9E62","90CD","968D","97D1","9687","89CA","8E7D","9867","9E65","9095","9E64","9E5F","8CCD","9E6B","9E69","89CB","9E67","9E6D","9E73","FAE2","FAE4","91C6","95BF","9E75","9541","9E74","9490","965E","8AB9","90F5","8F5F","92D1","974D","9E70","9E6F","9E71","9E6E","9E76","9E6C","9E6A","9E72","9E68","928C","96F6","8EC4","8DF2","8DB8","968F","8A60","FAE5","92CC","93C8","8968","90F0","90B2","8C49","9E78","8D5A","8A9C","9E7A","8A94","9E81","9E7D","90F1","8A6A","8DAA","8A69","8DCD","9E7B","8C85","8C6A","938D","FAE6","9E79","88C4","9E7C","9E7E","8BCB","8C4B","FAE3","8ABA","8B6A","9E82","8DF7","9691","8E56","9E83","954F","9E8F","89B1","9E84","9E95","9E85","97C0","9E8C","947E","9E94","9E87","88B2","9E89","8D5B","9E8B","9E8A","9E86","9E91","8FBD","9AEB","8CE6","979C","9E88","92F2","8A42","8DAB","9E80","9E90","8A81","9E8E","9E92","938E","8AFC","9EB0","FA64","96C7","9E97","8AFB","9E9E","FAE7","965F","9E9F","9EA1","9EA5","9E99","9249","938F","9EA9","9E9C","9EA6","9EA0","9058","9EAA","90B1","9EA8","8ABB","986F","9E96","9EA4","88D6","9E98","96B8","9E9D","9041","92C5","9E93","9EA3","909A","9EAD","8A91","8C9F","9EAF","9E9A","9EAE","9EA7","9E9B","9EAB","9EAC","9EBD","93CC","9EA2","9EB9","9EBB","92D6","976B","9596","9EB6","91C8","9EBC","915E","9EB3","9EC0","9EBF","93ED","9EBE","93E8","FAE9","9EC2","9EB5","8BC6","9EB8","8F7C","9480","9EBA","8BC9","9EB2","9EB4","9EB1","984F","8A79","9EB7","9EC1","8A54","8DE5","897C","9ED2","9850","9ED5","FAEB","9059","9ED4","9ED3","9ED0","9EC4","9EE1","9EC3","9ED6","9ECE","9EC9","9EC6","9EC7","9ECF","EAA0","9ECC","8D5C","92C6","9184","9ECA","9EC5","9EC8","976C","968A","9ECD","9ED7","FAEC","9EDF","9ED8","9EE5","9EE3","9EDE","9EDD","92CE","9185","9EDB","9ED9","9EE0","9EE6","94F3","9EEC","9EE7","9EEA","9EE4","9294","9557","9EDA","9EE2","8FBE","96CD","9EF6","9EE9","8CA0","89A1","8A7E","9ED1","FAED","8FBF","9EEE","9EF5","8EF7","8A92","924D","9EEB","FAEF","9EF0","9EF4","8BB4","8B6B","9EF2","8B40","93C9","9EF1","9EF3","FAEE","9EED","FAF0","9EEF","FAF1","8A80","9268","9EFA","9EF8","8CE7","9EF7","9F40","9E77","9EF9","9EFB","9EFC","9F4B","9F47","9E8D","9F46","9F45","9F42","9EE8","9F44","9F43","9F49","9845","9F4C","8BF9","9F48","9F4A","FAF2","FAF3","94A5","9F4D","9F51","9F4E","9793","9F4F","9EDC","9F52","9F53","8954","9F55","8C87","8E9F","8BD3","89A2","977E","9F57","9F56","9F59","8B5C","8BD4","8ABC","9F5C","9F5B","9F5D","89CC","9256","9F5E","8ABD","9F60","9F5F","9F61","9F62","9F63","8E7E","90B3","8D9F","9590","95E0","9863","8E95","8DCE","97F0","9F64","9F65","8E80","9F66","9F67","9F69","9F68","9677","8F7D","8EEA","8E63","9F6A","9F6C","9042","9F6B","9F6D","9F6E","9F6F","9F70","9F71","9F73","9F72","9F74","89A3","9269","9F75","8E45","8A6B","9F76","9361","9ACA","8B42","9F77","9F78","95EA","9688","93C5","9F79","94E4","FAF4","94F9","96D1","9F7A","9F7C","9F7B","9F7E","9F7D","9F81","8E81","96AF","9F82","9F83","8B43","9F84","9F86","9F85","9085","9558","8969","94C3","FAF5","92F3","8F60","8B81","94C4","8EAC","9F88","8ABE","8998","FAF6","93F0","9F87","8D5D","9272","9F89","9F91","9F8A","FAF8","91BF","8B82","9F92","8C88","8B44","9F90","9F8E","9F8B","9780","FAF7","92BE","93D7","9F8C","9F94","9F93","8C42","89AB","8DB9","9F8D","9F8F","9676","91F2","9697","9F9C","9F9D","89CD","95A6","96FB","9F9F","8EA1","8FC0","9F98","9F9E","8988","8BB5","9F95","9F9A","90F2","9491","94E5","9F97","9640","9F99","9FA2","FAF9","9FA0","9F9B","9641","9467","8B83","9344","928D","9FA3","9FA1","91D7","9F96","896A","FAFA","976D","9FAE","9FAD","90F4","9FAA","978C","93B4","9FA4","92C3","896B","8D5E","9FA7","8F46","9FAC","9FAB","9FA6","9FA9","8A88","9FA8","9468","97AC","8FF2","90F3","9FB4","9FB2","956C","9FAF","9FB1","8959","8D5F","9851","8A5C","9582","FAFC","9781","8A43","905A","9FB3","9FB8","FAFB","8FC1","974F","9FB5","9FB0","9FB6","FB40","97DC","9393","93C0","FB41","8A55","8974","9FBC","9FBF","97C1","9784","9FC6","9FC0","9FBD","97D2","9FC3","FB42","8F69","9FC5","9FCA","9391","9FC8","9FC2","9257","9FC9","9FBE","9FC4","9FCB","88FA","9FC1","9FCC","905B","FB44","8F7E","95A3","8DAC","FB43","9FB9","9FC7","9359","FB45","90B4","8A89","8DCF","8FC2","9FBB","8F61","8C6B","9FBA","9FD0","8F8D","8CB8","9FDF","9FD9","8B94","936E","9FD4","9FDD","88AD","8951","FB48","89B7","9FD6","91AA","9FCD","9FCF","8D60","9FE0","FB46","9FDB","FB49","9FD3","9FDA","96A9","9FD8","9FDC","8CCE","8FC3","9258","FB47","9FD2","974E","9FD5","9FCE","9392","9FD1","9FD7","9870","8EBC","969E","9FE1","94AC","9FED","8CB9","8F80","9FE3","97AD","8D61","9FF0","88EC","9FEE","9FE2","9FE8","9FEA","976E","9FE5","934D","9FE7","FB4A","9FEF","9FE9","96C5","9FE4","8EA0","9FFC","8A8A","9FE6","9FEB","9FEC","91EA","91D8","9FF4","9FFA","9FF8","9348","E042","9FF5","9FF6","9FDE","8B99","9559","8EBD","8D97","9852","9FF2","E041","8989","9186","9499","8ABF","97F8","969F","92D0","9FF9","9FFB","9151","E040","9FF7","9FF1","8AC1","8C89","E04E","E049","90F6","8A83","8F81","E052","E04B","92AA","E048","92D7","E06B","E045","E044","E04D","E047","E046","E04C","909F","E043","FB4B","E04F","E050","8AC0","E055","E054","E056","E059","9362","E053","FB4C","E057","8C83","91F7","E051","945A","E058","E05D","E05B","E05E","E061","E05A","8D8A","9447","9FB7","9794","E05C","E060","91F3","E05F","E04A","FB4D","E889","E064","E068","E066","FB4E","FB4F","E062","E063","E067","E065","956D","E06D","E06A","E069","E06C","93D2","E06E","9295","91EB","FB50","90A3","E06F","E071","E070","9FF3","E072","93E5","E073","89CE","9394","8A44","8B84","8EDC","8DD0","FB51","9846","9086","898A","E075","E074","FB52","E078","9259","E07B","E076","E07A","E079","935F","88D7","FA62","97F3","E07D","8947","E080","E07E","E07C","E077","9642","E082","FB54","E081","FB53","898B","E084","95B0","E083","96B3","8FC5","9152","8FC4","FB56","FB57","97F9","E08A","90F7","E086","E08B","898C","FB55","E089","9481","E085","E088","8FC6","94CF","E08C","8ECF","90F8","E08F","E087","8C46","E08D","976F","E090","EAA4","8F6E","E091","E092","944D","E094","E095","FB59","9452","9395","E097","E099","97D3","E096","E098","898D","E093","9A7A","E09A","9187","8E57","E09C","E09B","9043","99D7","E09D","E09F","E08E","E09E","FB5A","E0A0","949A","E0A1","E0A2","E0A3","E0A4","92DC","E0A6","E0A5","E0A7","E0A8","8EDD","9583","96EA","E0A9","E0AA","9175","8EA2","E0AB","E0AC","E0AD","95D0","94C5","E0AE","9476","92AB","E0AF","89E5","8B8D","96C4","96B4","89B2","9853","9671","95A8","90B5","E0B0","93C1","8CA1","E0B1","8DD2","E0B3","E0B2","E0B4","E0B5","E0B6","8B5D","E0B7","E0B8","8CA2","94C6","FB5B","E0BA","8FF3","E0B9","FB5C","8BB6","E0BB","E0BD","E0BC","E0BE","8CCF","E0BF","8BE7","915F","8D9D","E0C1","E0C2","E0C0","8EEB","93C6","8BB7","E0C4","924B","E0C3","9854","9482","E0C7","E0C9","E0C6","96D2","E0C8","E0CA","97C2","FB5D","E0CE","E0CD","9296","944C","8CA3","E0CC","E0CB","9750","9751","E0CF","898E","8D96","8E82","E0D0","E0D1","E0D3","8F62","E0D5","E0D4","E0D6","8A6C","E0D8","FB5F","E0D7","E0DA","E0D9","8CBA","97A6","8BCA","89A4","8BE8","8ADF","97E6","E0DC","E0DE","FB60","E0DF","89CF","E0DB","FB61","8E58","92BF","E0DD","FB64","FB62","E0E2","8EEC","FB63","E0E0","8C5D","94C7","E0E1","E0FC","FB66","E0E7","8CBB","8B85","E0E4","979D","FB65","97AE","91F4","E0E6","FB67","FB69","FB68","FB6A","E0E8","97D4","8BD5","94FA","9469","E0E9","E0EB","E0EE","E0EA","E0ED","8CE8","896C","E0EF","9090","E0EC","97DA","FB6B","E0F2","EAA2","E0F0","E0F3","E0E5","E0F1","8DBA","E0F4","E0F5","979E","FB6C","E0F6","E0F7","FB6D","E0E3","E0F8","8AC2","8EA3","E0F9","E0FA","E0FB","895A","E140","955A","E141","8AA2","E142","E143","E144","E146","E147","E145","9572","E149","E148","FB6E","E14B","E14A","E14C","E14D","E14F","E14E","8D99","E151","E150","8AC3","9072","935B","E152","90B6","8E59","8999","E153","9770","95E1","E154","FAA8","9363","9752","8D62","905C","926A","99B2","92AC","89E6","E155","E156","E15B","E159","E158","9DC0","8A45","E157","88D8","94A8","94C8","97AF","E15C","E15A","927B","90A4","94A9","954C","E15E","97AA","8C6C","E15F","E15D","94D4","E160","E161","FB6F","88D9","8FF4","E166","E163","93EB","E162","8B45","E169","E164","E165","E168","E167","9544","9161","9160","8B5E","E16A","E16B","E16C","E16E","E16D","8975","E176","94E6","E170","E172","E174","905D","E175","E173","8EBE","E16F","E171","9561","8FC7","E178","E177","E179","8EA4","8DAD","9397","E17A","92C9","E17C","979F","E17B","9189","E182","E184","E185","9273","E183","E180","E17D","E17E","E181","E188","E186","E187","E189","E18B","E18C","E18D","E18E","E18A","E190","E18F","E191","97C3","E194","E192","E193","8AE0","96FC","95C8","E196","E195","E197","E198","E19C","E199","E19A","E19B","E19D","E19E","E19F","E1A0","E1A1","94AD","936F","E1A2","9492","9553","E1A3","FB70","E1A4","9349","8A46","8D63","E1A5","E1A6","E1A7","8E48","E1A9","E1A8","E1AA","E1AB","FB73","FB71","FB72","FB74","94E7","E1AC","E1AD","EA89","E1AE","E1AF","E1B0","8E4D","E1B1","9475","967E","896D","8976","E1B2","E1B4","E1B3","9390","90B7","9F58","E1B5","96BF","E1B6","8AC4","94D5","E1B7","E1B8","E1B9","96DA","96D3","92BC","918A","E1BB","8F82","8FC8","E1BE","E1BD","E1BC","94FB","8AC5","8CA7","E1C4","E1C1","905E","96B0","E1C0","E1C2","E1C3","E1BF","E1C5","E1C6","92AD","8AE1","9285","FB76","E1C7","E1C8","E1CB","9087","93C2","E1CC","9672","E1C9","E1CA","E1CF","E1CE","E1CD","E1D1","E1D0","E1D2","E1D4","E1D3","95CB","8F75","97C4","E1D5","93B5","E1D6","E1D7","E1DB","E1D9","E1DA","E1D8","E1DC","E1DD","E1DE","E1DF","96B5","E1E0","96EE","E1E1","926D","948A","8BE9","925A","E1E2","8BB8","90CE","E1E3","8DBB","E1E4","E1E5","8CA4","8DD3","E1E7","FB78","9375","8DD4","8B6D","9643","946A","9376","8D7B","E1E9","FB79","8FC9","FB7A","97B0","8D64","8CA5","94A1","E1EB","FB7B","E1ED","8CE9","E1EC","92F4","E1EF","8A56","E1EA","94E8","894F","8DEA","9871","E1EE","E1F0","95C9","90D7","E1F2","E1F3","E1F1","8A6D","E1F9","E1F8","8EA5","E1FA","E1F5","E1FB","E1F6","94D6","E1F4","E1F7","E241","E240","9681","E1FC","88E9","E243","E242","8FCA","E244","9162","E246","E245","E247","E1E6","E1E8","E249","E248","FB7C","8EA6","97E7","8ED0","E24A","8C56","8B5F","8B46","8E83","9753","E250","E24F","9163","E24C","E24E","8F6A","905F","E24D","E24B","9449","8FCB","955B","8DD5","9398","E251","E252","E268","8BD6","985C","9154","E253","89D0","92F5","959F","FB81","FB83","E254","8B9A","E255","E257","E258","9448","E259","E25A","E25B","8BD7","89D1","93C3","8F47","8E84","E25C","8F48","89C8","9562","E25D","94E9","9164","E260","E261","9489","9060","E25E","9281","E25F","8FCC","88DA","8B48","E262","92F6","E263","90C5","96AB","9542","E264","E265","9274","97C5","E267","E266","8EED","E269","88EE","E26C","E26A","89D2","8C6D","E26B","8D65","8D92","95E4","E26D","9673","E26F","90CF","896E","89B8","88AA","E26E","E270","E271","8FF5","E272","8A6E","E274","8C8A","8B86","E275","8BF3","E276","90FA","93CB","90DE","8DF3","E277","9282","918B","E279","E27B","E278","E27A","8C41","E27C","8C45","8B87","9771","E27E","E280","894D","E283","8A96","E282","E281","E285","E27D","E286","97A7","E287","E288","FB84","9AF2","E28A","E289","E28B","E28C","97B3","E28D","E8ED","8FCD","E28E","E28F","8F76","93B6","E290","FB85","9247","FB87","E291","925B","E292","8BA3","995E","927C","8EB1","8AC6","E293","E2A0","E296","8B88","E295","E2A2","E294","8FCE","E298","E299","934A","E29A","8A7D","9079","9584","E29C","91E6","E297","E29B","E29D","8DF9","E2A4","954D","94A4","9399","8BD8","E2A3","E2A1","94B3","E29E","927D","939B","939A","8DF4","E2B6","E2A6","E2A8","E2AB","E2AC","E2A9","E2AA","E2A7","E2A5","E29F","95CD","89D3","E2B3","E2B0","E2B5","E2B4","9493","96A5","8E5A","E2AE","E2B7","E2B2","E2B1","E2AD","FB88","E2AF","8AC7","925C","90FB","94A0","E2BC","94A2","90DF","E2B9","94CD","E2BD","95D1","927A","E2B8","E2BA","E2BB","E2BE","8EC2","93C4","E2C3","E2C2","E2BF","9855","E2C8","E2CC","E2C9","E2C5","E2C6","E2CB","E2C0","99D3","E2C7","E2C1","E2CA","E2D0","8AC8","E2CD","E2CE","E2CF","E2D2","E2D1","94F4","E2D3","97FA","95EB","E2D8","E2D5","E2D4","90D0","E2D7","E2D9","E2D6","E2DD","E2DA","E2DB","E2C4","E2DC","E2DE","E2DF","95C4","E2E0","96E0","8BCC","8C48","E2E1","95B2","9088","96AE","E2E2","97B1","9494","9165","9453","8F6C","88BE","E2E7","E2E5","E2E3","8A9F","8FCF","E2E8","E2E6","E2E4","E2EC","E2EB","E2EA","E2E9","E2ED","E2EE","90B8","E2EF","E2F1","E2F0","8CD0","9157","E2F3","939C","E2F2","E2F4","95B3","918C","8D66","E2F5","97C6","E2F7","E2F8","E2F9","E2FA","8E85","E2FB","8C6E","8B8A","8B49","E340","96F1","8D67","E2FC","E343","96E4","945B","9552","8F83","E342","8ED1","8D68","8E86","8B89","95B4","E341","9166","9661","8DF5","8E87","92DB","E346","97DD","8DD7","E347","9061","E349","8FD0","8DAE","E348","8F49","8CBC","9167","E344","E34A","FB8A","E345","8C6F","E34D","E351","8C8B","E34C","E355","FB8B","8D69","978D","88BA","E352","8B8B","E34F","E350","939D","E34E","E34B","8A47","90E2","8CA6","E357","E354","E356","E353","8C70","91B1","E358","918E","E365","FB8D","E361","E35B","E35F","8EF8","88DB","E35A","E362","E366","8D6A","96D4","92D4","E35C","FB8C","E364","E359","925D","E35E","88BB","96C8","E35D","8BD9","94EA","918D","97CE","8F8F","E38E","FB8E","E367","90FC","E363","E368","E36A","92F7","E36D","E369","95D2","8AC9","96C9","88DC","E36C","97FB","E36B","898F","93EA","E36E","E375","E36F","E376","E372","949B","8EC8","E374","E371","E377","E370","8F63","9644","8F6B","E373","E380","E37B","E37E","E37C","E381","E37A","E360","90D1","94C9","E37D","E378","9140","8C71","8F4A","FB8F","9044","9155","E384","E386","E387","E383","E385","E379","E382","E38A","E389","969A","8C4A","E388","E38C","E38B","E38F","E391","8E5B","E38D","E392","E393","FA5C","E394","E39A","935A","E396","E395","E397","E398","E399","E39B","E39C","8ACA","E39D","E39E","E39F","FB90","E3A0","E3A1","E3A2","E3A3","E3A4","E3A6","E3A5","E3A7","E3A8","E3A9","E3AC","E3AA","E3AB","8DDF","8C72","9275","94B1","8F90","946C","94EB","E3AD","9CEB","E3AE","E3B0","9785","E3AF","E3B2","E3B1","9772","E3B3","94FC","E3B4","E3B7","E3B6","E3B5","FB91","E3B8","8C51","9141","8B60","E3BC","E3B9","E3BA","E3BD","E3BE","E3BB","8948","89A5","E3C0","E3C1","E3C2","9782","8F4B","E3C4","E3C3","9089","E3C5","E3C6","E3C7","8AE3","8ACB","E3C8","E3C9","967C","9783","9773","9856","8D6C","E3CC","8ED2","E3CB","E3CD","8EA7","91CF","E3CE","8D6B","96D5","E3CF","E3D0","E3D1","E3D2","E3D3","8EA8","96EB","E3D5","925E","E3D4","E3D7","E3D6","E3D8","90B9","E3D9","E3DA","95B7","E3DB","918F","E3DC","E3DD","97FC","E3E0","E3DF","E3DE","92AE","E3E1","9045","E3E2","E3E3","9857","E3E4","E3E5","E3E7","E3E6","94A3","93F7","985D","94A7","E3E9","8FD1","9549","E3EA","E3E8","8ACC","8CD2","8E88","94EC","8CA8","9662","E3ED","E3EB","8D6D","8D6E","88E7","8DE6","9478","88DD","E3F2","925F","9477","91D9","E3F4","E3F0","E3F3","E3EE","E3F1","9645","8CD3","88FB","E3EF","E3F6","E3F7","93B7","8BB9","E445","945C","8E89","8BBA","90C6","9865","96AC","E3F5","90D2","8B72","E3F8","E3FA","E3F9","E3FB","9245","945D","92AF","E442","E441","E3FC","9074","9585","E444","E443","8D6F","9872","E454","E448","E449","8EEE","E447","8D98","E446","E44A","92B0","95A0","9142","91DA","E44E","E44F","E44B","E44C","E44D","8D70","E455","E451","9586","968C","9547","E450","E453","E452","9663","E456","E457","9156","E458","E45A","E45E","E45B","E459","945E","E45C","E45D","89B0","E464","E45F","E460","E461","919F","E463","E462","E465","E466","E467","9062","89E7","E468","97D5","8EA9","8F4C","8E8A","9276","E469","E46A","8950","E46B","E46C","E46D","E46E","E46F","8BBB","9DA8","E470","90E3","E471","8EC9","E472","98AE","E473","95DC","8ADA","9143","8F77","9591","8F4D","E474","8D71","E475","94CA","E484","E477","91C7","9495","8CBD","E476","9144","E478","92F8","E47A","E479","E47C","E47B","E47D","E480","E47E","8ACD","E481","E482","E483","8DAF","97C7","E485","9046","8990","E486","E487","E488","88F0","E489","E48A","9587","8EC5","E48C","8A48","88B0","E48B","E48E","946D","9063","89D4","9646","8C7C","8BDA","E48D","89E8","8AA1","8991","E492","97E8","91DB","9563","E49E","89D5","E49C","E49A","E491","E48F","E490","8EE1","8BEA","9297","93CF","8970","E494","E493","E499","E495","E498","FB93","96CE","E497","89D6","8A9D","E49B","E49D","8C73","E4A1","E4AA","E4AB","88A9","E4B2","88EF","E4A9","E4A8","E4A3","E4A2","E4A0","E49F","9283","91F9","E4A5","E4A4","E4A7","9190","8C74","8960","E4A6","8D72","9191","FB94","E4B8","E4B9","89D7","89AC","E4B6","FB95","E4AC","E4B4","E4BB","E4B5","E4B3","E496","E4B1","E4AD","8ACE","E4AF","E4BA","E4B0","E4BC","E4AE","949C","9789","E4B7","E4CD","E4C5","909B","FB96","8B65","8BDB","E4C0","89D9","8FD2","E4C3","8DD8","9370","E4C8","95EC","E4BF","89D8","8CD4","9548","E4C9","E4BD","FB97","E4C6","E4D0","E4C1","E4C2","93B8","E4C7","E4C4","9647","E4CA","88DE","E4BE","E4CC","E4CB","948B","E4D2","E4DD","8A9E","E4E0","E4CE","E4D3","978E","E4DC","FB98","9774","97A8","9298","8A8B","9592","E4E2","939F","88AF","E4DB","E4D7","9192","E4D1","E4D9","E4DE","944B","88A8","E4D6","E4DF","9598","E4DA","E4D5","8FD3","8F4E","8EAA","96D6","9566","E4E5","E4EE","E4D8","8A97","FB99","8FF6","E4E3","E4E8","9193","E4E4","E4EB","927E","E4EC","9775","E4E1","8A57","E4E7","E4EA","96AA","E4ED","E4E6","E4E9","FA60","9648","9840","E4F1","E4F8","E4F0","8EC1","E4CF","95CC","96A0","E4F7","E4F6","E4F2","E4F3","8955","E4F5","E4EF","92D3","E4F4","88FC","91A0","95C1","E4F9","E540","94D7","E4FC","8FD4","8EC7","E542","8BBC","FB9A","E543","9599","E4FB","FB9B","E4D4","E4FA","986E","93A0","9593","FB9C","E54A","E550","E551","E544","9496","E54E","E546","E548","E552","E547","E54B","8992","93E3","E54C","E54F","E545","9145","E549","8E46","9064","8C4F","96F2","96F7","8F92","FB9E","E556","E554","986D","E553","9795","E555","E557","E558","E55B","E559","93A1","E55A","94CB","E54D","8F93","E55C","E561","9194","E560","E541","E562","9168","E55D","E55F","E55E","9F50","9F41","E564","E563","9796","E1BA","E565","E566","E567","8CD5","8B73","E569","997C","8B95","97B8","8BF1","E56A","E56B","928E","E56C","93F8","88B8","89E1","E571","E572","E56D","8E5C","E56E","9461","E56F","E570","E57A","E574","E577","E573","E575","E576","8ED6","E578","9260","8C75","8A61","E57B","8A5E","E581","E57C","E580","94B8","E57D","E57E","9567","94D8","E582","91FB","E58C","E588","89E9","E586","9649","E587","E584","E585","E58A","E58D","E58B","E589","E583","9277","E594","96A8","E592","E593","E58E","E590","E591","E58F","90E4","9858","E598","E599","E59F","9049","E59B","E59E","E596","E595","E5A0","89DA","E59C","E5A1","E59D","E59A","92B1","E597","9488","E5A5","975A","E5A4","E5A3","E5AC","E5A6","E5AE","9786","E5B1","E5A8","E5A9","E5AD","E5B0","E5AF","E5A7","E5AA","E5BB","E5B4","E5B2","E5B3","E5B8","E5B9","8A49","8B61","E5B7","E5A2","FBA1","E5B6","E5BA","E5B5","E5BC","E5BE","E5BD","E5C0","E5BF","E579","E5C4","E5C1","E5C2","E5C3","E5C5","8C8C","E5C7","E5C6","8F4F","8D73","9FA5","E5C8","8F70","8A58","E5C9","8971","8FD5","E5CA","8D74","E5CB","88DF","955C","E5CC","908A","E5D3","E5D0","928F","E5D1","E5CE","8BDC","E5CD","E5D4","8C55","91DC","E5DA","E5D6","91B3","E5D5","E5D8","E5CF","E5D9","E5DB","94ED","E5D7","E5DC","E5DE","8CD1","E5D2","88BF","E5DD","8DD9","97F4","E5DF","E5E0","9195","97A0","E5E1","9754","E5E2","E5E3","95E2","E5E4","8DBE","97A1","E5E9","E5EA","8FD6","E5E8","FBA2","9787","E5E5","E5E7","90BB","909E","E5E6","E5EB","95A1","E5ED","E5EC","8A8C","964A","E5EE","FA5D","E5FA","E5F0","E5F1","E5F2","E5F3","E5F7","E5F8","E5F6","E5F4","E5EF","E5F5","E5F9","E8B5","89A6","E5FC","8BDD","E5FB","E641","E640","E643","E642","E644","8F50","E645","E646","E647","90BC","9776","E648","95A2","9465","E649","E64A","8CA9","8B4B","E64B","8E8B","9460","E64C","8A6F","E64D","E64F","9797","E64E","9065","E650","E651","E652","8ACF","E653","E654","E655","E656","8A70","E657","E658","E659","89F0","9047","E65A","E65B","E65C","8CBE","92F9","E65D","8C76","9075","E660","93A2","E65F","FBA3","8C50","E65E","91F5","8B4C","E661","E662","8FD7","8C8D","E663","964B","90DD","8B96","96F3","9169","E664","FBA4","9066","9290","8FD8","E665","E668","E669","8DBC","91C0","E667","8FD9","955D","E666","8E8C","8972","E66D","8C77","8E8E","8E8D","986C","E66C","E66B","9146","8B6C","9862","8A59","8FDA","FBA5","E66A","E66F","E670","E66E","8CD6","975F","8E8F","9446","E673","90BE","9261","9755","E676","8CEA","90BD","E672","E677","8CEB","E674","E675","FBA6","E671","90E0","93C7","924E","89DB","94EE","8B62","FBA7","92B2","E67A","E678","926B","90BF","8AD0","E679","907A","97C8","985F","E67B","E687","92B3","E686","FBA8","E683","E68B","E684","E680","92FA","E67E","E67C","9740","8E90","E681","E67D","FBAA","E685","8F94","8CBF","91F8","9664","8979","88E0","93A3","E689","E688","93E4","E68D","E682","E68C","E68E","8CAA","E68A","8D75","8ED3","E68F","9777","E692","E695","E693","9554","E690","8BDE","E694","E696","E69A","E697","E699","E698","FBAB","E69B","8EAF","E69D","E69C","9588","E69F","8C78","E69E","E6A0","E6A1","8B63","E3BF","8FF7","E6A2","8CEC","E6A3","FBAC","E6A4","8E5D","9DCC","E6A5","E6A6","8F51","E6A7","E6A8","E6A9","E6AA","E6AB","924A","E6AC","E6AE","E6AD","93A4","E6AF","964C","E6B0","E6B1","E6B2","E6B3","93D8","8FDB","E6B4","8D8B","98AC","E6B5","E6B6","955E","E6B7","E6BF","E6B8","E6BA","E6B9","E6BB","9665","E6BC","E6BD","E6BE","E6C0","8A4C","92E5","9589","8DE0","8D76","956E","89DD","94CC","E6C3","8AD1","90D3","E6C2","E6C7","9299","96E1","E6C5","E6C6","8B4D","E6C8","9483","91DD","94EF","935C","E6C4","9666","89EA","E6CA","9847","92C0","9864","8E91","E6C9","91AF","E6DA","9147","93F6","956F","E6CD","8E5E","8E92","8FDC","9485","8CAB","E6CC","E6CB","958A","8EBF","9371","FBAD","FBAE","E6CF","E6D0","8D77","E6CE","E6D1","E6D2","E6D4","91A1","E6D3","8AE4","E6D6","E6D5","E6D7","FBAF","E6D9","E6DB","E6DC","90D4","8ECD","E6DD","8A71","E6DE","9196","E6DF","E6E0","958B","FBB0","8B4E","E6E1","92B4","897A","E6E2","8EEF","9096","91AB","E6E5","E6E4","E6E3","E6EB","E6E9","E6E6","E6E8","E6E7","E6EA","8B97","E6EE","90D5","E6EF","8CD7","E6EC","E6ED","9848","92B5","9148","E6F0","E6F3","E6F1","E6F2","9778","93A5","E6F6","E6F4","E6F5","E6F7","E748","E6FA","E6FB","E6F9","E6F8","92FB","E740","E744","E741","E6FC","E742","E743","E74A","E745","90D6","E747","E749","E746","E74C","8F52","E74B","E74D","E74E","E751","E750","E74F","E753","E752","96F4","E755","E754","E756","E757","E759","E758","9067","E75A","8BEB","E75B","E75D","E75E","E75F","E75C","E760","8ED4","E761","8B4F","8C52","FBB2","8CAC","E762","93EE","935D","E763","E766","8EB2","E765","E764","8C79","E767","8A72","E769","8DDA","E768","E771","E76B","E76D","95E3","E76A","E76C","E770","E76E","8B50","E76F","E772","9479","97D6","8F53","E773","9741","E775","E774","E778","9760","E777","8A8D","E776","E77B","E77A","E779","9351","E77C","E77D","E77E","8D8C","8C44","E780","E781","E782","9068","E783","8EAB","E784","E785","999F","999E","E786","E390","E787","9243","904A","945F","E788","95D3","92D2","8D9E","9248","8949","9698","9076","8C7D","8BDF","95D4","E789","E78B","E78A","89DE","93F4","E78C","9497","9352","E78D","8F71","E78F","96C0","E79E","E791","E792","92C7","91DE","9197","93A6","E790","8B74","E799","E796","E7A3","93A7","9280","E793","92FC","9372","E794","E798","9080","9487","92CA","90C0","E797","91AC","91A2","E795","88A7","9841","E79A","91DF","8F54","9069","E79C","E79B","88ED","E79D","954E","E7A5","93D9","908B","9278","8BF6","E7A4","9756","895E","95D5","89DF","E79F","E7A0","E7A1","E7A2","93B9","9242","88E1","E7A6","E7A7","EAA1","91BB","E7A8","8993","916B","8CAD","9779","FBB5","E7A9","934B","9198","8ED5","E7AA","E7AD","8F85","E7AB","914A","9149","88E2","97C9","E7AF","94F0","E7B1","E7B0","E7AE","E284","8AD2","E78E","E7B3","E7B2","E7B4","9757","93DF","964D","E7B5","8ED7","E7B6","E7B7","E7B8","9340","88E8","8D78","9859","E7BC","FBB6","8C53","E7B9","E7BA","9594","8A73","9758","8BBD","9373","E7BD","E7BE","FBB8","E7BF","FBB9","9341","E7C1","E7C0","93D1","E7C2","8F55","8EDE","947A","9291","8EF0","908C","E7C3","E7C4","907C","E7C5","E7C6","E7C7","978F","8F56","E7C9","E7C8","8D79","8D93","8E5F","E7CC","8F86","E7CB","E7CA","91E7","8CED","90C1","94AE","8F58","E7CD","8FDD","E7D0","E7CE","E7CF","E7D2","E7D1","8FF8","E7D3","E7D4","E7D5","94CE","8DD1","8EDF","E7D6","E7D7","97A2","8F64","96EC","97CA","E7D8","8BE0","E7D9","FBBB","9342","FBBA","E7DC","8A98","906A","FBBC","E7DA","E7DB","92DE","FBBF","FBC0","9674","8BFA","FBBD","FBBE","E7DE","E7DF","E7DD","E7E1","FBC1","FBC3","93DD","8A62","FBC2","E7E5","E7E2","E7E4","E7E0","E86E","E7E3","97E9","8CD8","FBCA","FBC4","FBC6","E7ED","FBC5","9353","E7E8","E7EB","E7E9","E7EE","FBC7","E7EF","FBC9","E7E7","FBC8","E7F4","8994","E7E6","94AB","E7EA","8FDE","FBCB","8D7A","FBCD","FBCE","9667","8BE2","8F65","93BA","FA5F","914C","E7F2","E7EC","E7F1","96C1","92B6","E7F3","E7F0","FBCC","914B","E7F7","E7F6","E7F5","FBD2","964E","FBD6","FBD4","FBD0","FBD1","FBD5","8F9B","FBCF","E7F8","95DD","8973","9565","9292","8B98","FA65","E7FA","FBD9","8D7C","FBDC","FBDE","8E4B","E7F9","908D","908E","E840","E842","FBDD","FBDB","8FF9","FBD8","E841","E843","FBD7","8BD1","9564","8EE0","9842","E7FC","8DF6","985E","E845","E844","E846","E7FB","FA5E","93E7","9374","92D5","E84B","FBE0","9262","E847","E848","8C4C","E84A","FBDF","8CAE","E849","8FDF","8A99","E84F","8DBD","9199","92C8","FBE1","8A5A","E84D","E84E","92C1","E84C","E850","E856","FBE2","E859","E858","934C","E851","E852","E855","E857","FBE3","8BBE","E85A","E854","E853","FBE4","E85E","E85F","E860","E85D","E85C","8FE0","93A8","E85B","E864","E862","FBE5","E863","E861","91F6","E865","E866","E868","FBE6","FBE7","8AD3","E867","96F8","E873","E869","E86C","E86A","E86B","E86D","E86F","E870","E871","E874","E872","E875","E877","E876","92B7","96E5","E878","914D","E879","95C2","E87A","8A4A","895B","8AD5","FBE8","8AD4","E87B","E87C","E87D","E87E","E880","8AD6","8A74","8D7D","94B4","E882","E881","E883","897B","E886","E885","E884","E887","E88A","88C5","E888","E88C","E88B","E88E","E88D","E88F","93AC","E890","E891","E893","E892","958C","E894","E895","8DE3","E896","E897","9668","916A","88A2","91C9","E898","958D","E89B","E899","8D7E","E89A","8CC0","95C3","E89D","E89F","E89E","E8A0","8940","9077","8F9C","8AD7","E8A1","9486","E8A3","8941","E8A2","92C2","97CB","93A9","E89C","97A4","8CAF","977A","8BF7","97B2","8C47","91E0","E440","E8A4","8A4B","908F","8A75","E8A6","E8A7","E8A5","8C84","8DDB","8FE1","FBEB","8942","97D7","E8A9","E7AC","E8A8","FBEC","E8AC","E8AA","E8AB","E8AD","E8AE","97EA","E8AF","E8B0","90C7","94B9","909D","8AE5","9759","89EB","8F57","8CD9","E8B3","E8B2","8E93","E8B4","E8B1","8E47","E8B8","E5AB","99D4","9097","E8B6","97A3","93EF","894A","90E1","8EB4","95B5","895F","97EB","978B","E8B9","9364","8EF9","E8BA","E8BB","906B","E8BC","97EC","E8B7","E8BE","E8C0","E8BF","E8BD","E8C1","E8C2","919A","89E0","E8C3","96B6","E8C4","E8C5","9849","FBED","9E50","E8C6","FBEE","E8C7","E8C8","E8CC","FBEF","E8C9","E8CA","E8CB","E8CD","FBF0","FBF1","FBF2","90C2","FBF3","96F5","90C3","E8CE","94F1","E8CF","EA72","96CA","E8D0","E8D1","E8D2","8A76","E8D4","9078","E8D5","8C43","E8D6","E8DA","E8D8","E8D9","8A93","E8D7","E8DB","E8DC","88C6","E8DD","E8DE","8FE2","E8DF","8B66","E8E2","E8E1","E8E0","E691","95DA","E8E3","E8E4","E8E5","E8E6","E8E7","E8E8","8AD8","E8E9","E8EA","9442","E8EC","89B9","E8EF","E8EE","8943","8BBF","95C5","92B8","8DA0","8D80","8F87","907B","E8F1","E8F0","9761","8AE6","94D0","93DA","909C","97CC","8C7A","E8F4","E8F3","966A","93AA","896F","E8F5","E8F2","9570","978A","E8F6","E8F7","E8F9","91E8","8A7A","8A7B","E8F8","8AE7","8CB0","FBF4","8AE8","935E","97DE","FBF5","8CDA","E8FA","E8FB","E8FC","E940","E942","E941","9597","E943","E944","E945","E946","E948","E947","E949","94F2","E3CA","9048","8B51","E94A","E94B","99AA","9F5A","94D1","88F9","88B9","8E94","964F","8FFC","E94C","96DD","E94D","977B","8961","8E60","E94E","89EC","E94F","E950","E952","E953","E955","E951","E954","FBF8","8AD9","E956","E957","E958","E959","E95A","E95C","E95B","E95E","E961","E95D","E95F","E960","E962","8BC0","8EF1","E963","E964","8D81","FBFA","E965","8A5D","946E","E966","E967","9279","93E9","E968","949D","91CA","8977","8BEC","8BED","9293","E96D","8BEE","89ED","E96C","E96A","E96B","E969","E977","E96E","E96F","E970","E971","E973","E972","8F78","E974","E976","8B52","E975","919B","8CB1","E978","91CB","E979","93AB","E97A","E980","E97D","E97C","E97E","E97B","E982","FBFB","E981","E984","8BC1","E983","E985","E986","E988","E987","E989","E98B","E98A","8D9C","E98C","E98D","8A5B","E98E","E98F","9091","E990","E991","E992","E993","8D82","FBFC","FC40","E994","E995","E996","E997","E998","94AF","E99A","9545","E99B","E999","E99D","E99C","E99E","E99F","E9A0","E9A1","E9A2","E9A3","E9A4","E9A5","E9A6","E9A7","E9A8","E9A9","E9AA","E9AB","E9AC","9F54","E9AD","E2F6","8B53","8A40","8DB0","E9AF","E9AE","96A3","E9B1","E9B2","E9B0","E9B3","9682","E9B4","8B9B","9844","FC42","E9B5","FC41","E9B7","88BC","FC43","E9B8","95A9","E9B6","E9B9","E9BA","E9BB","E9BC","E9BD","968E","8E4C","8DF8","914E","FC44","E9BE","E9C1","FC45","E9BF","E9C2","8CEF","E9C0","E9C3","E9C4","E9C5","E9C9","8E49","91E2","E9CA","E9C7","E9C6","E9C8","8C7E","E9CE","E9CD","E9CC","88B1","FC46","E9D8","E9D4","E9D5","E9D1","E9D7","E9D3","8A82","986B","E9D6","E9D2","E9D0","E9CF","E9DA","E9DD","E9DC","E9DB","9568","E9D9","88F1","E9DE","E9E0","8A8F","E9CB","8956","E9E2","E9E1","E9DF","924C","9690","97D8","E9E3","E9E4","E9E5","E9E6","E9E7","92B9","E9E8","94B5","E9ED","E9E9","E9EA","9650","96C2","93CE","E9EE","E9EF","93BC","E9EC","E9EB","89A8","E9F7","E9F6","8995","E9F4","E9F3","E9F1","8A9B","E9F0","8EB0","89A7","8D83","E9FA","E9F9","E9F8","E9F5","E9FB","E9FC","EA44","EA43","EA45","894C","EA40","EA41","8D94","96B7","EA42","FC48","9651","EA4A","FC47","EA46","EA4B","EA48","EA47","8C7B","EA4C","EA4D","EA4E","EA49","E9F2","EA4F","92DF","EA53","EA54","EA52","EA51","EA57","EA50","EA55","EA56","EA59","EA58","EA5B","EA5C","EA5D","9868","EA5A","91E9","8DEB","EA5E","FC4A","EA5F","EA60","EA61","EA62","8CB2","EA63","EA64","8EAD","EA65","EA66","EA67","EA68","EA6B","EA69","985B","EA6A","97ED","EA6C","97D9","EA6D","949E","EA6E","EA70","EA71","EA6F","8D8D","96CB","9683","9BF5","9F80","969B","89A9","EA73","8B6F","EA74","EA75","EA76","FC4B","8D95","EA77","E0D2","96D9","91E1","EA78","EA7A","EA79","EA7B","EA7C","EA7D","EA7E","EA80","EA81","EA82","EA83","EA84","EA85","EA86","EA87","EA88","9343","8CDB","EA8A","916C","EA8B","EA8C","9540","EA8D","EA8E","E256","E6D8","E8EB","EA8F","EA90","EA92","EA93","EA94","97EE","EA91","EA95","EA96","EA98","EA97","EA9A","EA9B","EA99","97B4","EA9C","EA9D","E273","EA9E","FAE0","FBE9","FA90","FA9B","FA9C","FAB1","FAD8","FAE8","FAEA","FB58","FB5E","FB75","FB7D","FB7E","FB80","FB82","FB86","FB89","FB92","FB9D","FB9F","FBA0","FBA9","FBB1","FBB3","FBB4","FBB7","FBD3","FBDA","FBEA","FBF6","FBF7","FBF9","FC49","8149","FA57","8194","8190","8193","8195","FA56","8169","816A","8196","817B","8143","817C","8144","815E","824F","8250","8251","8252","8253","8254","8255","8256","8257","8258","8146","8147","8183","8181","8184","8148","8197","8260","8261","8262","8263","8264","8265","8266","8267","8268","8269","826A","826B","826C","826D","826E","826F","8270","8271","8272","8273","8274","8275","8276","8277","8278","8279","816D","815F","816E","814F","8151","814D","8281","8282","8283","8284","8285","8286","8287","8288","8289","828A","828B","828C","828D","828E","828F","8290","8291","8292","8293","8294","8295","8296","8297","8298","8299","829A","816F","8162","8170","8160","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF","B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF","C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF","D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF","8191","8192","81CA","8150","FA55","818F"], [128,92,167,168,176,177,180,182,215,247,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,1025,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1105,8208,8213,8216,8217,8220,8221,8224,8225,8229,8230,8240,8242,8243,8251,126,8451,8470,8481,8491,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8592,8593,8594,8595,8658,8660,8704,8706,8707,8711,8712,8715,8721,65293,8730,8733,8734,8735,8736,8741,8743,8744,8745,8746,8747,8748,8750,8756,8757,8765,8786,8800,8801,8806,8807,8810,8811,8834,8835,8838,8839,8869,8895,8978,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,9472,9473,9474,9475,9484,9487,9488,9491,9492,9495,9496,9499,9500,9501,9504,9507,9508,9509,9512,9515,9516,9519,9520,9523,9524,9527,9528,9531,9532,9535,9538,9547,9632,9633,9650,9651,9660,9661,9670,9671,9675,9678,9679,9711,9733,9734,9792,9794,9834,9837,9839,12288,12289,12290,12291,12293,12294,12295,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,12306,12307,12308,12309,12317,12319,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12443,12444,12445,12446,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,12539,12540,12541,12542,12849,12850,12857,12964,12965,12966,12967,12968,13059,13069,13076,13080,13090,13091,13094,13095,13099,13110,13115,13129,13130,13133,13137,13143,13179,13180,13181,13182,13198,13199,13212,13213,13214,13217,13252,13261,19968,19969,19971,19975,19976,19977,19978,19979,19981,19982,19984,19985,19988,19989,19990,19991,19992,19993,19998,20001,20006,20008,20010,20013,20017,20018,20022,20024,20025,20027,20028,20031,20034,20035,20037,20043,20045,20046,20047,20053,20054,20055,20056,20057,20061,20062,20063,20066,20081,20083,20094,20096,20098,20101,20102,20104,20105,20106,20107,20108,20110,20113,20114,20116,20117,20120,20121,20123,20124,20126,20127,20128,20129,20130,20132,20133,20134,20136,20139,20140,20141,20142,20144,20147,20150,20154,20160,20161,20162,20164,20166,20167,20170,20171,20173,20174,20175,20180,20181,20182,20183,20184,20185,20189,20190,20191,20193,20195,20196,20197,20205,20206,20208,20210,20214,20215,20219,20220,20224,20225,20227,20233,20234,20237,20238,20239,20240,20241,20250,20252,20253,20271,20272,20276,20278,20280,20281,20282,20284,20285,20291,20294,20295,20301,20302,20303,20304,20305,20307,20309,20310,20311,20313,20314,20315,20316,20317,20318,20329,20335,20336,20339,20341,20342,20347,20348,20351,20355,20358,20360,20362,20363,20365,20367,20369,20370,20372,20374,20376,20378,20379,20381,20384,20385,20395,20397,20398,20399,20405,20406,20415,20418,20419,20420,20425,20426,20429,20430,20432,20433,20436,20439,20440,20442,20443,20445,20447,20449,20451,20452,20453,20462,20463,20467,20469,20470,20472,20474,20478,20479,20485,20486,20489,20491,20493,20495,20497,20498,20500,20502,20505,20506,20510,20511,20513,20514,20515,20516,20517,20518,20520,20521,20522,20523,20524,20525,20534,20537,20544,20546,20547,20550,20551,20552,20553,20559,20560,20565,20566,20570,20572,20581,20588,20592,20594,20596,20597,20598,20600,20605,20608,20613,20621,20625,20628,20632,20633,20634,20652,20653,20658,20659,20660,20661,20663,20670,20674,20677,20681,20682,20685,20687,20689,20693,20694,20696,20698,20702,20707,20709,20711,20717,20718,20724,20725,20729,20731,20736,20737,20738,20740,20745,20754,20756,20757,20758,20760,20762,20767,20769,20778,20786,20791,20794,20795,20796,20799,20800,20801,20803,20804,20805,20806,20807,20808,20809,20810,20811,20812,20813,20814,20816,20818,20820,20826,20828,20834,20836,20837,20840,20841,20842,20843,20844,20845,20846,20849,20853,20854,20855,20856,20860,20864,20866,20869,20870,20873,20874,20876,20877,20879,20880,20881,20882,20883,20885,20886,20887,20889,20893,20896,20898,20900,20901,20902,20904,20905,20906,20907,20908,20912,20913,20914,20915,20916,20917,20918,20919,20925,20926,20932,20933,20934,20937,20939,20940,20941,20950,20955,20956,20957,20960,20961,20966,20967,20969,20970,20972,20973,20976,20977,20981,20982,20984,20985,20986,20989,20990,20992,20995,20996,20998,20999,21000,21002,21003,21006,21009,21012,21013,21015,21021,21028,21029,21031,21033,21034,21038,21040,21043,21046,21047,21048,21049,21050,21051,21059,21060,21063,21066,21067,21068,21069,21071,21076,21078,21083,21086,21091,21092,21093,21097,21098,21103,21104,21105,21106,21107,21108,21109,21117,21119,21123,21127,21128,21129,21133,21137,21138,21140,21147,21148,21151,21152,21155,21158,21161,21162,21163,21164,21165,21167,21169,21172,21173,21177,21180,21182,21184,21185,21187,21189,21191,21193,21197,21202,21205,21207,21208,21209,21211,21213,21214,21215,21216,21218,21219,21220,21222,21223,21234,21235,21237,21240,21241,21242,21246,21247,21248,21249,21250,21253,21254,21255,21256,21261,21263,21264,21269,21270,21271,21273,21274,21277,21280,21281,21283,21284,21290,21295,21297,21299,21304,21305,21306,21307,21311,21312,21313,21315,21317,21318,21319,21320,21321,21322,21325,21329,21330,21331,21332,21335,21336,21338,21340,21342,21344,21350,21353,21358,21359,21360,21361,21362,21363,21364,21365,21367,21368,21371,21375,21378,21380,21395,21398,21400,21402,21407,21408,21413,21414,21416,21417,21421,21422,21424,21426,21427,21430,21435,21442,21443,21448,21449,21450,21451,21452,21453,21454,21460,21462,21463,21465,21467,21469,21471,21473,21474,21475,21476,21477,21480,21481,21482,21483,21484,21485,21486,21487,21488,21489,21490,21491,21494,21495,21496,21498,21505,21507,21508,21512,21513,21514,21515,21516,21517,21518,21519,21520,21521,21531,21533,21535,21536,21542,21545,21547,21548,21549,21550,21558,21560,21561,21563,21564,21565,21566,21568,21570,21574,21576,21577,21578,21582,21585,21599,21608,21610,21616,21617,21619,21621,21622,21623,21627,21628,21629,21632,21636,21638,21642,21643,21644,21646,21647,21648,21650,21660,21666,21668,21669,21672,21673,21675,21676,21679,21682,21683,21688,21692,21693,21694,21696,21697,21698,21700,21703,21704,21705,21720,21729,21730,21733,21734,21736,21737,21741,21742,21746,21754,21757,21759,21764,21766,21767,21775,21776,21780,21782,21806,21807,21809,21811,21816,21817,21822,21824,21828,21829,21830,21836,21839,21843,21846,21847,21852,21853,21859,21883,21884,21886,21888,21891,21892,21894,21895,21897,21898,21899,21912,21913,21914,21916,21917,21918,21919,21927,21928,21929,21930,21931,21932,21934,21936,21942,21956,21957,21959,21972,21978,21980,21983,21987,21988,22007,22009,22013,22014,22022,22025,22036,22038,22039,22040,22043,22057,22063,22065,22066,22068,22070,22072,22082,22092,22094,22096,22107,22116,22120,22122,22123,22124,22132,22136,22138,22144,22150,22151,22154,22159,22164,22176,22178,22181,22190,22196,22198,22204,22208,22209,22210,22211,22216,22222,22225,22227,22231,22232,22234,22235,22238,22240,22243,22254,22256,22258,22259,22265,22266,22269,22271,22272,22275,22276,22280,22281,22283,22285,22287,22290,22291,22294,22296,22300,22303,22310,22311,22312,22317,22320,22327,22328,22331,22336,22338,22343,22346,22350,22351,22352,22353,22361,22369,22372,22373,22374,22377,22378,22399,22402,22408,22409,22411,22419,22432,22434,22435,22436,22442,22444,22448,22451,22464,22467,22470,22471,22472,22475,22478,22482,22483,22484,22486,22492,22495,22496,22499,22516,22519,22521,22522,22524,22528,22530,22533,22534,22538,22539,22549,22553,22557,22561,22564,22570,22575,22576,22577,22580,22581,22586,22589,22592,22593,22602,22603,22609,22610,22612,22615,22616,22617,22618,22622,22626,22633,22635,22640,22642,22645,22649,22654,22659,22661,22675,22679,22684,22686,22687,22696,22699,22702,22706,22707,22712,22713,22714,22715,22718,22721,22725,22727,22730,22732,22737,22739,22741,22743,22744,22745,22748,22750,22751,22756,22757,22763,22764,22766,22767,22768,22769,22770,22775,22777,22778,22779,22780,22781,22786,22793,22794,22795,22799,22800,22805,22806,22808,22809,22810,22811,22812,22818,22821,22823,22825,22826,22827,22828,22829,22830,22833,22834,22839,22840,22846,22852,22855,22856,22857,22862,22863,22864,22865,22867,22868,22869,22871,22872,22874,22875,22877,22880,22882,22883,22885,22887,22888,22889,22890,22892,22894,22899,22900,22904,22909,22913,22914,22915,22916,22922,22925,22931,22934,22937,22939,22941,22947,22948,22949,22952,22956,22962,22969,22970,22971,22974,22982,22985,22987,22992,22993,22995,22996,23001,23002,23004,23013,23014,23016,23018,23019,23030,23035,23039,23041,23043,23049,23057,23064,23066,23068,23071,23072,23077,23081,23087,23093,23094,23100,23104,23105,23110,23113,23130,23138,23142,23146,23148,23167,23186,23194,23195,23228,23229,23230,23233,23234,23241,23243,23244,23248,23254,23255,23265,23267,23270,23273,23290,23291,23305,23307,23308,23318,23330,23338,23340,23344,23346,23350,23358,23360,23363,23365,23376,23377,23380,23381,23382,23383,23384,23386,23387,23388,23389,23391,23395,23396,23397,23398,23401,23403,23408,23409,23411,23413,23416,23418,23424,23427,23429,23431,23432,23433,23435,23436,23437,23439,23445,23447,23448,23449,23450,23451,23452,23453,23455,23458,23459,23460,23461,23462,23470,23472,23475,23476,23477,23478,23480,23481,23487,23488,23490,23491,23492,23493,23494,23495,23497,23500,23504,23506,23507,23508,23512,23515,23517,23518,23519,23521,23522,23524,23525,23526,23527,23528,23529,23531,23532,23534,23536,23539,23541,23542,23544,23546,23550,23551,23553,23554,23556,23557,23558,23559,23560,23561,23562,23563,23565,23566,23567,23569,23571,23574,23578,23582,23584,23586,23588,23592,23597,23601,23608,23609,23610,23611,23612,23613,23614,23615,23616,23617,23621,23622,23624,23626,23627,23629,23630,23631,23632,23633,23635,23637,23646,23648,23649,23652,23653,23660,23662,23663,23665,23670,23673,23692,23696,23697,23700,23713,23718,23720,23721,23723,23724,23729,23731,23734,23735,23736,23738,23739,23740,23742,23749,23751,23769,23776,23777,23784,23785,23786,23789,23791,23792,23797,23798,23802,23803,23805,23815,23819,23822,23825,23828,23829,23830,23831,23832,23833,23834,23835,23839,23842,23847,23849,23874,23883,23884,23886,23888,23890,23891,23900,23913,23916,23917,23919,23923,23926,23938,23940,23943,23947,23948,23952,23965,23970,23980,23982,23991,23992,23993,23994,23996,23997,24009,24012,24013,24016,24018,24019,24022,24027,24029,24030,24033,24035,24037,24038,24039,24040,24043,24046,24049,24050,24051,24052,24053,24055,24059,24061,24062,24066,24067,24070,24075,24076,24081,24086,24089,24090,24091,24093,24101,24107,24109,24111,24112,24115,24118,24119,24120,24125,24128,24131,24132,24133,24135,24140,24142,24148,24149,24151,24159,24161,24162,24163,24164,24178,24179,24180,24181,24182,24184,24185,24186,24187,24188,24189,24190,24191,24193,24195,24196,24199,24202,24207,24213,24214,24215,24218,24220,24224,24230,24231,24235,24237,24245,24246,24247,24248,24257,24258,24259,24264,24265,24266,24271,24272,24275,24278,24282,24283,24285,24287,24288,24289,24290,24291,24296,24297,24300,24304,24305,24307,24308,24310,24311,24312,24314,24315,24316,24318,24319,24321,24323,24324,24329,24330,24331,24332,24333,24335,24336,24337,24339,24340,24341,24342,24343,24344,24347,24351,24353,24357,24358,24359,24361,24365,24367,24369,24372,24373,24375,24376,24380,24382,24385,24389,24392,24394,24396,24398,24401,24403,24406,24407,24409,24412,24413,24417,24418,24422,24423,24425,24426,24427,24428,24429,24432,24433,24435,24439,24441,24444,24447,24448,24449,24450,24451,24452,24453,24455,24456,24458,24459,24460,24464,24465,24466,24467,24471,24472,24473,24478,24480,24481,24488,24489,24490,24493,24494,24499,24500,24503,24505,24508,24509,24515,24517,24524,24525,24534,24535,24536,24537,24540,24541,24542,24544,24548,24555,24560,24561,24565,24568,24571,24573,24575,24590,24591,24592,24594,24597,24598,24601,24603,24604,24605,24608,24609,24613,24614,24615,24616,24617,24618,24619,24623,24625,24634,24641,24642,24643,24646,24650,24651,24653,24656,24658,24661,24665,24666,24669,24671,24672,24674,24675,24676,24677,24680,24681,24682,24683,24684,24685,24687,24688,24693,24695,24705,24707,24708,24709,24713,24714,24715,24716,24717,24722,24724,24726,24727,24730,24731,24735,24736,24739,24742,24743,24745,24746,24754,24755,24756,24757,24758,24760,24764,24765,24773,24774,24775,24785,24787,24789,24792,24794,24796,24798,24799,24800,24801,24803,24807,24808,24816,24817,24818,24819,24820,24822,24823,24825,24826,24827,24832,24833,24835,24838,24840,24841,24845,24846,24847,24849,24853,24858,24859,24863,24864,24865,24871,24872,24876,24880,24884,24887,24892,24893,24894,24895,24898,24900,24903,24904,24906,24907,24908,24909,24910,24915,24917,24920,24921,24922,24925,24927,24930,24931,24933,24935,24936,24939,24942,24943,24944,24945,24947,24948,24949,24950,24951,24958,24962,24967,24970,24974,24976,24977,24980,24982,24984,24985,24986,24996,24999,25001,25003,25004,25006,25010,25014,25018,25022,25027,25030,25031,25032,25033,25034,25035,25036,25037,25040,25059,25062,25074,25076,25078,25079,25080,25082,25084,25085,25086,25087,25088,25096,25097,25098,25100,25101,25102,25104,25105,25106,25107,25108,25110,25114,25115,25117,25118,25119,25121,25126,25130,25134,25135,25136,25138,25139,25140,25144,25147,25151,25152,25153,25159,25160,25161,25163,25165,25166,25171,25173,25176,25179,25182,25184,25187,25192,25198,25201,25206,25209,25212,25214,25215,25216,25218,25219,25220,25225,25226,25233,25234,25235,25236,25237,25238,25239,25240,25243,25244,25246,25254,25259,25260,25265,25269,25273,25275,25276,25277,25282,25285,25286,25287,25288,25289,25290,25292,25293,25295,25296,25297,25298,25299,25300,25303,25304,25305,25307,25308,25309,25312,25313,25324,25325,25326,25327,25329,25331,25333,25334,25335,25342,25343,25345,25346,25351,25352,25353,25356,25361,25369,25375,25383,25384,25387,25391,25402,25405,25406,25407,25417,25420,25421,25423,25424,25429,25431,25436,25447,25448,25449,25451,25454,25458,25462,25463,25466,25467,25472,25475,25480,25481,25484,25486,25487,25490,25494,25496,25499,25503,25504,25505,25506,25507,25509,25511,25512,25513,25514,25515,25516,25522,25524,25525,25531,25534,25536,25539,25540,25542,25545,25551,25552,25554,25558,25562,25563,25569,25571,25577,25582,25588,25589,25590,25594,25606,25613,25615,25619,25622,25623,25628,25638,25640,25644,25645,25652,25654,25658,25662,25666,25678,25688,25696,25703,25705,25711,25718,25720,25722,25731,25736,25746,25747,25749,25754,25757,25758,25764,25765,25769,25771,25773,25774,25776,25778,25785,25787,25788,25793,25794,25797,25799,25805,25806,25810,25812,25816,25818,25824,25825,25826,25827,25830,25831,25836,25839,25841,25842,25844,25846,25850,25853,25854,25856,25861,25880,25884,25885,25891,25892,25898,25899,25900,25903,25908,25909,25910,25911,25912,25913,25915,25918,25919,25925,25928,25933,25934,25935,25937,25941,25942,25943,25944,25945,25949,25950,25954,25955,25958,25964,25968,25970,25972,25973,25975,25976,25986,25987,25991,25992,25993,25996,25998,26000,26001,26007,26009,26011,26012,26015,26017,26020,26021,26023,26027,26028,26029,26031,26032,26039,26041,26044,26045,26049,26051,26052,26053,26054,26059,26060,26063,26066,26071,26073,26075,26080,26081,26082,26085,26086,26087,26088,26089,26092,26093,26097,26106,26107,26112,26114,26115,26118,26119,26121,26122,26124,26126,26127,26131,26132,26133,26140,26142,26143,26144,26148,26149,26151,26152,26157,26158,26159,26161,26164,26165,26166,26171,26172,26175,26177,26178,26179,26180,26185,26187,26191,26194,26199,26201,26205,26206,26207,26210,26212,26213,26214,26215,26216,26217,26222,26223,26224,26227,26228,26230,26234,26241,26243,26244,26247,26248,26249,26254,26257,26262,26263,26264,26265,26269,26272,26274,26278,26283,26286,26290,26292,26296,26297,26300,26302,26303,26305,26308,26311,26313,26326,26329,26330,26332,26333,26336,26342,26345,26352,26354,26355,26356,26357,26359,26360,26361,26362,26363,26364,26365,26366,26367,26368,26371,26376,26377,26379,26381,26382,26383,26388,26389,26390,26391,26395,26397,26398,26399,26406,26407,26408,26410,26411,26412,26413,26414,26417,26420,26422,26423,26424,26426,26429,26431,26433,26438,26441,26446,26447,26448,26449,26451,26454,26457,26460,26462,26463,26464,26465,26466,26467,26468,26469,26470,26474,26477,26479,26480,26481,26482,26483,26485,26487,26492,26494,26495,26501,26503,26505,26507,26508,26512,26517,26519,26522,26524,26525,26528,26529,26530,26534,26537,26543,26547,26548,26550,26551,26552,26553,26555,26560,26561,26564,26566,26570,26574,26575,26576,26577,26579,26580,26584,26586,26589,26590,26594,26596,26599,26601,26604,26606,26607,26609,26611,26612,26613,26619,26622,26623,26625,26626,26627,26628,26643,26646,26647,26654,26657,26658,26665,26666,26667,26674,26676,26680,26681,26684,26685,26688,26689,26690,26691,26692,26694,26696,26701,26702,26704,26705,26706,26707,26708,26713,26716,26717,26719,26723,26727,26740,26742,26743,26750,26751,26753,26755,26757,26765,26767,26771,26772,26775,26779,26781,26783,26784,26786,26790,26791,26792,26797,26799,26800,26801,26803,26805,26806,26809,26810,26812,26820,26822,26824,26825,26826,26827,26829,26831,26834,26836,26837,26839,26840,26842,26847,26848,26849,26851,26855,26862,26863,26866,26873,26874,26880,26881,26884,26885,26888,26891,26892,26893,26894,26895,26898,26905,26906,26907,26908,26913,26914,26915,26917,26918,26920,26922,26928,26932,26934,26937,26941,26943,26954,26963,26964,26965,26969,26970,26972,26973,26974,26976,26977,26978,26984,26986,26987,26989,26990,26991,26995,26996,26997,26999,27000,27001,27004,27005,27006,27009,27010,27018,27022,27025,27028,27029,27032,27035,27036,27040,27047,27054,27057,27058,27060,27067,27070,27071,27073,27075,27079,27082,27083,27084,27085,27086,27088,27091,27096,27097,27101,27102,27106,27111,27112,27115,27117,27122,27129,27131,27133,27135,27138,27141,27146,27147,27148,27154,27155,27156,27159,27161,27163,27166,27167,27169,27170,27171,27177,27178,27179,27182,27184,27189,27190,27192,27193,27194,27197,27204,27206,27207,27208,27211,27224,27225,27231,27233,27234,27238,27243,27250,27251,27256,27262,27263,27264,27268,27277,27278,27280,27287,27292,27296,27298,27299,27306,27308,27310,27315,27320,27323,27329,27330,27331,27345,27347,27354,27355,27358,27359,27362,27364,27368,27370,27386,27387,27396,27397,27402,27410,27414,27421,27423,27424,27425,27427,27431,27442,27447,27448,27449,27450,27453,27454,27459,27463,27465,27468,27470,27472,27475,27476,27481,27483,27487,27489,27490,27491,27492,27494,27497,27498,27503,27507,27508,27512,27513,27515,27519,27520,27523,27524,27526,27529,27530,27531,27533,27541,27542,27544,27550,27556,27562,27563,27567,27569,27570,27571,27572,27573,27575,27578,27579,27580,27583,27584,27589,27590,27595,27597,27598,27602,27603,27604,27606,27608,27611,27615,27627,27628,27631,27635,27656,27663,27665,27667,27668,27671,27675,27683,27684,27700,27703,27704,27710,27711,27712,27713,27714,27726,27728,27733,27735,27738,27740,27741,27742,27743,27744,27746,27752,27754,27759,27760,27762,27763,27770,27773,27774,27777,27778,27779,27782,27784,27788,27789,27792,27794,27795,27798,27801,27802,27803,27809,27810,27819,27822,27825,27827,27832,27833,27834,27835,27836,27837,27838,27839,27841,27844,27845,27849,27850,27852,27859,27861,27863,27865,27866,27867,27869,27873,27874,27875,27877,27880,27882,27887,27888,27889,27891,27908,27915,27916,27922,27927,27929,27931,27934,27935,27941,27945,27946,27947,27954,27955,27957,27958,27960,27963,27965,27966,27969,27972,27973,27993,27994,27996,28003,28004,28006,28009,28010,28012,28014,28015,28020,28023,28024,28025,28037,28039,28040,28044,28046,28051,28053,28054,28057,28059,28060,28076,28079,28082,28085,28088,28092,28096,28101,28102,28103,28107,28108,28111,28113,28114,28117,28120,28121,28126,28129,28132,28134,28136,28138,28139,28140,28142,28145,28146,28147,28149,28151,28152,28153,28154,28155,28156,28165,28167,28168,28169,28170,28171,28179,28181,28185,28186,28187,28189,28191,28192,28193,28195,28196,28197,28198,28199,28201,28203,28204,28205,28206,28207,28216,28217,28218,28220,28222,28227,28234,28237,28238,28246,28248,28251,28252,28255,28263,28267,28270,28271,28274,28278,28286,28287,28288,28290,28300,28303,28304,28310,28312,28316,28317,28319,28322,28325,28330,28335,28338,28342,28343,28346,28349,28351,28354,28356,28357,28361,28363,28364,28369,28371,28372,28373,28381,28382,28396,28399,28402,28404,28407,28408,28414,28415,28417,28418,28422,28425,28431,28433,28435,28436,28437,28448,28450,28451,28459,28460,28465,28466,28472,28478,28479,28481,28485,28500,28504,28507,28508,28511,28516,28518,28525,28526,28527,28528,28532,28536,28538,28540,28544,28545,28546,28548,28550,28552,28558,28561,28567,28577,28579,28580,28586,28593,28595,28597,28601,28608,28609,28610,28611,28614,28628,28629,28632,28635,28639,28640,28641,28644,28651,28652,28654,28655,28657,28659,28661,28662,28666,28670,28673,28677,28679,28681,28683,28687,28689,28693,28696,28698,28699,28701,28702,28703,28710,28711,28712,28716,28720,28722,28734,28748,28753,28760,28771,28779,28783,28784,28792,28796,28797,28805,28809,28810,28814,28818,28825,28843,28844,28845,28846,28847,28851,28856,28857,28858,28859,28872,28875,28879,28889,28893,28895,28913,28921,28925,28932,28937,28943,28948,28953,28954,28956,28961,28966,28982,28988,28998,28999,29001,29004,29006,29013,29014,29017,29020,29026,29028,29029,29030,29031,29033,29036,29038,29053,29060,29064,29066,29071,29076,29077,29081,29087,29096,29100,29105,29113,29118,29121,29123,29128,29129,29134,29136,29138,29140,29141,29143,29151,29152,29157,29158,29159,29164,29165,29166,29173,29177,29179,29180,29182,29183,29190,29197,29200,29211,29224,29226,29228,29229,29232,29234,29237,29238,29242,29243,29244,29245,29246,29247,29248,29254,29255,29256,29259,29260,29266,29272,29273,29275,29277,29279,29281,29282,29287,29289,29298,29300,29305,29309,29310,29312,29313,29314,29319,29330,29334,29344,29346,29351,29356,29359,29361,29362,29366,29369,29374,29378,29379,29380,29382,29390,29392,29394,29399,29401,29403,29408,29409,29410,29417,29420,29421,29431,29432,29433,29436,29437,29450,29462,29463,29467,29468,29469,29471,29476,29477,29481,29482,29483,29486,29487,29492,29494,29495,29502,29503,29508,29509,29518,29519,29527,29539,29544,29546,29552,29554,29557,29559,29560,29562,29563,29572,29575,29577,29579,29590,29609,29618,29619,29627,29629,29632,29634,29640,29641,29642,29645,29646,29650,29654,29662,29664,29667,29669,29674,29677,29678,29681,29685,29688,29694,29699,29701,29702,29703,29705,29730,29733,29734,29737,29738,29742,29746,29747,29748,29749,29750,29754,29759,29761,29781,29785,29786,29787,29788,29790,29791,29792,29794,29795,29796,29801,29802,29807,29808,29811,29814,29822,29827,29833,29835,29854,29855,29858,29863,29872,29885,29898,29903,29908,29916,29920,29922,29923,29926,29927,29929,29934,29936,29937,29938,29942,29943,29944,29953,29955,29956,29957,29964,29965,29966,29969,29971,29973,29976,29978,29980,29982,29983,29987,29989,29990,29992,29995,29996,29999,30000,30001,30002,30003,30007,30008,30010,30011,30012,30020,30022,30025,30026,30027,30028,30029,30031,30033,30036,30041,30042,30043,30044,30045,30048,30050,30052,30053,30054,30055,30057,30058,30059,30061,30063,30064,30067,30068,30070,30071,30072,30079,30082,30086,30087,30089,30090,30091,30094,30095,30097,30100,30106,30109,30115,30117,30123,30129,30130,30131,30133,30136,30137,30140,30141,30142,30146,30147,30149,30151,30154,30157,30162,30164,30165,30168,30169,30171,30174,30178,30179,30185,30192,30194,30195,30196,30202,30204,30206,30207,30209,30217,30219,30221,30239,30240,30241,30242,30244,30247,30256,30260,30267,30274,30278,30279,30280,30284,30290,30294,30296,30300,30305,30306,30311,30312,30313,30314,30316,30320,30322,30326,30328,30330,30331,30332,30333,30334,30336,30338,30339,30340,30342,30343,30344,30347,30350,30352,30355,30358,30361,30362,30363,30364,30366,30374,30382,30384,30388,30391,30392,30393,30394,30399,30402,30403,30406,30408,30410,30413,30418,30422,30423,30427,30428,30430,30431,30433,30435,30436,30437,30439,30442,30446,30450,30452,30456,30459,30462,30465,30468,30471,30472,30473,30475,30476,30491,30494,30495,30496,30500,30501,30502,30505,30519,30520,30522,30524,30528,30534,30535,30554,30555,30561,30563,30565,30566,30568,30571,30585,30590,30591,30603,30606,30609,30622,30624,30629,30636,30637,30640,30643,30646,30649,30651,30652,30653,30655,30663,30669,30679,30682,30683,30684,30690,30691,30693,30695,30697,30701,30702,30703,30707,30716,30722,30732,30738,30740,30741,30752,30753,30757,30758,30759,30770,30772,30778,30783,30789,30798,30813,30820,30827,30828,30831,30834,30836,30842,30844,30849,30854,30855,30860,30861,30862,30865,30867,30869,30871,30874,30883,30887,30889,30890,30895,30901,30906,30908,30910,30913,30917,30918,30922,30923,30928,30929,30932,30938,30951,30952,30956,30959,30964,30973,30977,30983,30990,30993,30994,31001,31014,31018,31019,31020,31024,31034,31036,31038,31040,31041,31047,31048,31049,31056,31059,31061,31062,31063,31066,31069,31070,31071,31072,31074,31077,31080,31085,31095,31098,31103,31104,31105,31108,31109,31114,31117,31118,31119,31124,31131,31133,31142,31143,31146,31150,31152,31155,31161,31162,31165,31166,31167,31168,31169,31177,31179,31185,31186,31189,31192,31199,31201,31203,31204,31206,31207,31209,31212,31216,31227,31232,31240,31243,31245,31246,31252,31255,31256,31257,31258,31260,31263,31264,31278,31281,31282,31287,31291,31292,31293,31294,31295,31296,31298,31299,31302,31305,31309,31310,31311,31312,31319,31329,31330,31331,31337,31339,31344,31348,31350,31353,31354,31357,31359,31361,31363,31364,31368,31378,31379,31381,31382,31383,31384,31391,31401,31402,31406,31407,31408,31414,31418,31423,31427,31428,31429,31431,31432,31434,31435,31437,31439,31441,31442,31443,31445,31449,31450,31452,31453,31455,31456,31457,31458,31459,31461,31462,31463,31466,31467,31469,31471,31472,31478,31480,31481,31482,31487,31490,31492,31494,31496,31498,31499,31503,31505,31512,31513,31515,31518,31520,31525,31526,31528,31532,31539,31541,31542,31545,31557,31558,31560,31561,31563,31564,31565,31567,31568,31569,31570,31572,31574,31581,31589,31591,31596,31598,31600,31601,31604,31605,31610,31622,31623,31627,31629,31631,31634,31636,31637,31639,31640,31641,31642,31644,31645,31646,31647,31649,31658,31661,31665,31668,31672,31680,31681,31684,31686,31687,31689,31691,31692,31695,31709,31712,31716,31717,31718,31721,31725,31731,31734,31735,31744,31751,31757,31761,31762,31763,31764,31767,31775,31777,31779,31783,31786,31787,31799,31800,31805,31806,31807,31808,31811,31820,31821,31823,31824,31828,31830,31832,31839,31840,31844,31845,31852,31859,31861,31870,31873,31874,31875,31881,31883,31885,31888,31890,31893,31895,31896,31899,31903,31905,31906,31908,31909,31911,31912,31915,31917,31918,31921,31922,31923,31929,31933,31934,31936,31938,31941,31946,31950,31954,31958,31960,31964,31966,31967,31968,31970,31975,31983,31986,31988,31990,31992,31994,31995,31998,32000,32002,32004,32005,32006,32010,32011,32013,32016,32020,32021,32023,32024,32025,32026,32027,32028,32032,32033,32034,32043,32044,32046,32047,32048,32050,32051,32053,32057,32058,32063,32066,32067,32068,32069,32070,32072,32075,32076,32078,32079,32080,32086,32091,32092,32094,32097,32098,32099,32102,32104,32110,32113,32114,32115,32117,32118,32121,32125,32137,32143,32147,32153,32154,32155,32156,32159,32160,32162,32163,32171,32172,32173,32174,32175,32176,32177,32178,32180,32181,32183,32184,32186,32187,32189,32190,32191,32199,32202,32203,32207,32209,32210,32213,32214,32216,32218,32220,32221,32222,32224,32225,32228,32232,32233,32236,32239,32242,32244,32251,32257,32260,32261,32265,32266,32267,32274,32283,32286,32287,32289,32290,32291,32294,32299,32302,32305,32306,32309,32311,32313,32314,32315,32317,32318,32321,32323,32326,32330,32331,32333,32338,32340,32341,32342,32345,32346,32349,32350,32358,32359,32361,32362,32365,32368,32377,32379,32380,32381,32383,32386,32387,32392,32393,32394,32396,32398,32399,32400,32402,32403,32404,32406,32411,32412,32566,32568,32570,32581,32583,32588,32589,32590,32592,32593,32596,32597,32600,32607,32608,32615,32616,32617,32618,32619,32622,32624,32626,32629,32631,32632,32633,32642,32643,32645,32646,32647,32648,32650,32652,32654,32660,32666,32669,32670,32673,32675,32676,32680,32681,32686,32687,32690,32694,32696,32697,32701,32705,32709,32710,32714,32716,32722,32724,32725,32736,32737,32742,32745,32747,32752,32755,32761,32763,32764,32768,32769,32771,32772,32773,32774,32779,32780,32784,32786,32789,32791,32792,32793,32796,32801,32808,32819,32822,32827,32829,32831,32838,32842,32850,32854,32856,32858,32862,32863,32865,32866,32872,32879,32880,32882,32883,32884,32886,32887,32889,32893,32894,32895,32900,32901,32902,32903,32905,32907,32908,32915,32918,32920,32922,32923,32925,32929,32930,32933,32937,32938,32940,32941,32943,32945,32946,32948,32954,32963,32964,32966,32972,32974,32982,32985,32986,32987,32989,32990,32993,32996,32997,33007,33009,33012,33016,33020,33021,33026,33029,33030,33031,33032,33033,33034,33050,33051,33059,33065,33071,33073,33075,33081,33086,33094,33099,33102,33104,33105,33107,33108,33109,33119,33125,33126,33131,33134,33136,33137,33140,33144,33145,33146,33151,33152,33154,33155,33160,33162,33167,33171,33173,33178,33180,33181,33184,33187,33188,33192,33193,33200,33203,33205,33208,33210,33213,33214,33215,33216,33218,33222,33224,33225,33229,33233,33235,33240,33241,33242,33247,33248,33251,33253,33255,33256,33258,33261,33267,33268,33274,33275,33276,33278,33281,33282,33285,33287,33288,33289,33290,33292,33293,33294,33296,33298,33302,33303,33304,33307,33308,33310,33311,33321,33322,33323,33324,33326,33331,33333,33334,33335,33336,33337,33344,33351,33368,33369,33370,33373,33375,33378,33380,33382,33384,33386,33387,33390,33391,33393,33394,33398,33399,33400,33406,33419,33421,33426,33433,33437,33439,33445,33446,33451,33452,33453,33455,33457,33459,33464,33465,33467,33469,33477,33489,33490,33491,33492,33495,33497,33499,33500,33502,33503,33505,33507,33509,33510,33511,33515,33521,33523,33524,33529,33530,33531,33537,33538,33539,33540,33541,33542,33545,33550,33558,33559,33560,33564,33571,33576,33579,33583,33585,33586,33588,33589,33590,33592,33593,33600,33605,33609,33610,33615,33616,33618,33624,33634,33651,33653,33655,33659,33660,33663,33669,33671,33673,33674,33678,33683,33686,33690,33694,33695,33696,33698,33704,33706,33707,33713,33717,33725,33729,33733,33735,33738,33740,33742,33747,33750,33752,33756,33759,33760,33769,33771,33775,33776,33777,33778,33780,33782,33783,33787,33789,33795,33796,33799,33803,33804,33805,33806,33811,33824,33826,33833,33834,33836,33841,33845,33848,33852,33853,33862,33864,33865,33870,33879,33883,33889,33890,33891,33894,33897,33899,33900,33901,33902,33903,33905,33909,33911,33913,33914,33922,33924,33931,33936,33940,33945,33948,33951,33953,33965,33970,33972,33976,33977,33979,33980,33983,33985,33988,33990,33993,33994,33995,33997,34000,34001,34006,34009,34010,34012,34028,34030,34036,34044,34047,34048,34054,34065,34067,34068,34069,34071,34072,34074,34079,34081,34086,34092,34093,34101,34109,34112,34113,34115,34120,34121,34122,34123,34126,34131,34133,34135,34136,34137,34138,34147,34152,34153,34154,34155,34157,34167,34174,34176,34180,34183,34184,34186,34192,34193,34196,34199,34201,34203,34204,34212,34214,34216,34217,34218,34219,34220,34222,34223,34224,34233,34234,34241,34249,34253,34255,34256,34261,34268,34269,34276,34277,34281,34282,34295,34297,34298,34299,34302,34306,34310,34311,34314,34315,34323,34326,34327,34330,34338,34349,34351,34352,34367,34381,34382,34384,34388,34389,34394,34396,34398,34399,34407,34411,34417,34425,34427,34442,34443,34444,34451,34453,34467,34468,34473,34474,34475,34479,34480,34486,34500,34502,34503,34505,34507,34509,34510,34516,34521,34523,34526,34527,34532,34537,34540,34541,34542,34543,34552,34553,34555,34558,34560,34562,34563,34566,34568,34569,34570,34573,34577,34578,34584,34586,34588,34597,34601,34612,34615,34619,34623,34633,34635,34636,34638,34643,34645,34647,34649,34655,34656,34659,34662,34664,34666,34670,34676,34678,34680,34687,34690,34701,34719,34722,34731,34735,34739,34746,34747,34749,34752,34756,34758,34759,34763,34768,34770,34784,34799,34802,34806,34807,34809,34811,34814,34821,34823,34829,34830,34831,34833,34837,34838,34849,34850,34851,34855,34865,34870,34873,34875,34880,34882,34884,34886,34892,34893,34898,34899,34903,34905,34907,34909,34910,34913,34914,34915,34920,34923,34928,34930,34933,34935,34941,34942,34943,34945,34946,34952,34955,34957,34962,34966,34967,34969,34974,34978,34980,34987,34990,34992,34993,34996,34997,34999,35007,35009,35010,35011,35012,35013,35023,35028,35029,35032,35033,35036,35037,35039,35041,35048,35058,35059,35060,35061,35064,35065,35068,35069,35070,35074,35076,35079,35082,35084,35088,35090,35091,35100,35101,35102,35109,35114,35115,35126,35128,35131,35137,35139,35140,35148,35149,35158,35166,35167,35168,35172,35174,35178,35181,35183,35186,35188,35191,35198,35199,35201,35203,35206,35207,35208,35210,35211,35215,35219,35222,35223,35224,35226,35233,35238,35239,35241,35242,35244,35247,35250,35251,35258,35261,35263,35264,35282,35290,35292,35293,35299,35302,35303,35316,35320,35328,35330,35331,35336,35338,35340,35342,35344,35346,35347,35350,35351,35352,35355,35357,35359,35363,35365,35370,35373,35377,35379,35380,35382,35383,35386,35387,35388,35393,35398,35400,35408,35409,35410,35412,35413,35419,35422,35424,35426,35427,35430,35433,35435,35436,35437,35438,35440,35441,35442,35443,35449,35452,35458,35460,35461,35463,35465,35468,35469,35473,35475,35477,35480,35482,35486,35488,35489,35491,35492,35493,35494,35495,35496,35500,35501,35504,35506,35513,35516,35518,35519,35522,35524,35527,35531,35532,35533,35535,35538,35542,35546,35547,35548,35550,35551,35552,35553,35554,35556,35558,35559,35563,35565,35566,35569,35571,35574,35575,35576,35578,35582,35584,35585,35586,35588,35591,35596,35598,35600,35604,35606,35607,35609,35610,35611,35613,35616,35617,35622,35624,35627,35628,35635,35641,35646,35649,35657,35660,35662,35663,35667,35670,35672,35674,35675,35676,35679,35686,35691,35692,35695,35696,35697,35698,35700,35703,35709,35711,35712,35715,35722,35724,35726,35728,35730,35731,35734,35737,35738,35895,35898,35903,35905,35910,35912,35914,35916,35918,35920,35925,35930,35937,35938,35946,35947,35948,35960,35961,35962,35964,35970,35973,35977,35978,35980,35981,35982,35988,35992,35997,35998,36000,36001,36002,36007,36008,36009,36010,36011,36012,36013,36014,36015,36016,36018,36019,36020,36022,36023,36024,36027,36028,36029,36031,36032,36033,36034,36035,36036,36039,36040,36042,36045,36046,36049,36051,36058,36059,36060,36062,36064,36066,36067,36068,36070,36074,36077,36080,36084,36090,36091,36092,36093,36100,36101,36103,36104,36106,36107,36109,36111,36112,36114,36115,36116,36118,36196,36198,36199,36203,36205,36208,36209,36211,36212,36214,36215,36225,36229,36234,36249,36259,36264,36275,36282,36286,36290,36299,36300,36303,36310,36314,36315,36317,36319,36321,36323,36328,36330,36331,36335,36339,36341,36348,36351,36360,36361,36362,36367,36368,36381,36382,36383,36394,36400,36404,36405,36418,36420,36423,36424,36425,36426,36428,36432,36437,36441,36447,36448,36451,36452,36466,36468,36470,36476,36481,36484,36485,36487,36490,36491,36493,36497,36499,36500,36505,36513,36522,36523,36524,36527,36528,36529,36542,36549,36550,36552,36554,36555,36556,36557,36559,36562,36571,36575,36578,36579,36587,36600,36603,36604,36605,36606,36611,36613,36617,36618,36620,36626,36627,36628,36629,36633,36635,36636,36637,36639,36646,36649,36650,36655,36659,36664,36665,36667,36670,36671,36674,36676,36677,36678,36681,36684,36685,36686,36695,36700,36703,36705,36706,36707,36708,36763,36764,36766,36767,36771,36775,36776,36781,36782,36783,36784,36785,36786,36791,36794,36795,36796,36799,36802,36804,36805,36814,36817,36820,36826,36834,36837,36838,36841,36842,36843,36845,36847,36848,36852,36855,36856,36857,36858,36861,36864,36865,36867,36869,36870,36875,36877,36878,36879,36880,36881,36883,36884,36885,36886,36887,36889,36890,36893,36894,36895,36896,36897,36898,36899,36903,36910,36913,36914,36917,36918,36920,36921,36924,36926,36929,36930,36933,36935,36937,36938,36939,36941,36942,36943,36944,36945,36946,36947,36948,36949,36950,36952,36953,36956,36958,36960,36961,36963,36965,36967,36968,36969,36973,36974,36975,36978,36981,36982,36983,36984,36986,36988,36989,36991,36992,36993,36994,36995,36996,36999,37001,37002,37007,37009,37027,37030,37032,37034,37039,37041,37045,37048,37057,37066,37070,37083,37086,37089,37090,37092,37096,37101,37109,37111,37117,37122,37138,37141,37145,37159,37165,37168,37170,37193,37194,37195,37196,37197,37198,37202,37204,37206,37208,37218,37219,37221,37225,37226,37228,37234,37235,37237,37239,37240,37250,37255,37257,37259,37261,37264,37266,37271,37276,37282,37284,37290,37291,37295,37300,37301,37304,37306,37312,37313,37318,37319,37320,37321,37323,37324,37325,37326,37327,37328,37329,37334,37335,37336,37338,37339,37340,37341,37342,37343,37345,37347,37348,37349,37350,37351,37357,37358,37365,37366,37372,37375,37382,37386,37389,37390,37392,37393,37396,37397,37406,37417,37420,37428,37431,37433,37434,37436,37439,37440,37444,37445,37448,37449,37451,37454,37456,37457,37463,37465,37466,37467,37470,37474,37476,37478,37479,37489,37495,37496,37502,37504,37507,37509,37512,37521,37523,37525,37526,37528,37530,37531,37532,37543,37549,37559,37561,37583,37584,37586,37587,37589,37591,37593,37600,37604,37607,37609,37610,37613,37618,37619,37624,37625,37626,37627,37628,37631,37634,37638,37647,37648,37656,37657,37658,37661,37662,37664,37665,37666,37667,37669,37670,37672,37675,37676,37678,37679,37682,37685,37690,37691,37700,37704,37707,37709,37716,37718,37719,37723,37724,37728,37740,37742,37744,37749,37756,37758,37772,37780,37782,37783,37786,37796,37799,37804,37805,37806,37808,37817,37827,37830,37832,37840,37841,37846,37847,37848,37853,37854,37857,37860,37861,37864,37880,37891,37895,37904,37907,37908,37912,37913,37914,37921,37931,37937,37941,37942,37944,37946,37953,37956,37957,37960,37969,37970,37971,37978,37979,37982,37984,37986,37994,38000,38005,38007,38012,38013,38014,38015,38017,38263,38272,38274,38275,38279,38281,38282,38283,38287,38289,38290,38291,38292,38294,38296,38297,38304,38306,38307,38308,38309,38311,38312,38317,38322,38329,38331,38332,38334,38339,38343,38346,38348,38349,38356,38357,38358,38360,38364,38369,38370,38373,38428,38433,38440,38442,38446,38447,38450,38459,38463,38464,38466,38468,38475,38476,38477,38479,38480,38491,38492,38493,38494,38495,38498,38499,38500,38501,38502,38506,38508,38512,38514,38515,38517,38518,38519,38520,38522,38525,38533,38534,38536,38538,38539,38541,38542,38543,38548,38549,38551,38552,38553,38555,38556,38557,38560,38563,38567,38568,38570,38575,38576,38577,38578,38580,38582,38583,38584,38585,38587,38588,38592,38593,38596,38597,38598,38599,38601,38603,38604,38605,38606,38609,38613,38614,38617,38619,38620,38626,38627,38632,38634,38635,38640,38642,38646,38647,38649,38651,38656,38660,38662,38663,38664,38666,38669,38670,38671,38673,38675,38678,38681,38684,38686,38692,38695,38698,38704,38706,38707,38712,38713,38715,38717,38718,38722,38723,38724,38726,38728,38729,38733,38735,38737,38738,38741,38742,38745,38748,38750,38752,38753,38754,38756,38758,38760,38761,38763,38765,38769,38772,38777,38778,38780,38785,38788,38789,38790,38795,38797,38799,38800,38808,38812,38816,38819,38822,38824,38827,38829,38835,38836,38851,38854,38856,38859,38867,38876,38893,38894,38898,38899,38901,38902,38907,38911,38913,38914,38915,38917,38918,38920,38924,38927,38928,38929,38930,38931,38935,38936,38938,38945,38948,38956,38957,38964,38967,38968,38971,38972,38973,38982,38987,38988,38989,38990,38991,38996,38997,38999,39000,39003,39006,39013,39015,39019,39023,39024,39025,39027,39028,39080,39082,39087,39089,39094,39107,39108,39110,39131,39132,39135,39138,39145,39147,39149,39150,39151,39154,39156,39164,39165,39166,39171,39173,39177,39178,39180,39184,39186,39187,39188,39192,39197,39198,39200,39201,39204,39207,39208,39212,39214,39229,39230,39234,39237,39241,39243,39244,39248,39249,39250,39253,39255,39318,39319,39320,39321,39326,39333,39336,39340,39341,39342,39347,39348,39356,39361,39364,39365,39366,39368,39376,39377,39378,39381,39384,39387,39389,39391,39394,39405,39406,39409,39410,39416,39419,39423,39425,39429,39438,39439,39442,39443,39449,39464,39467,39472,39479,39486,39488,39490,39491,39493,39501,39502,39509,39511,39514,39515,39519,39522,39524,39525,39529,39530,39531,39592,39597,39600,39608,39612,39616,39620,39631,39633,39635,39636,39640,39641,39644,39646,39647,39650,39651,39654,39658,39659,39661,39662,39663,39665,39668,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39729,39730,39739,39740,39745,39746,39747,39748,39749,39757,39758,39759,39761,39764,39768,39770,39791,39794,39796,39797,39811,39822,39823,39825,39826,39827,39830,39831,39839,39840,39848,39850,39851,39853,39854,39857,39860,39865,39867,39872,39878,39881,39882,39887,39889,39890,39892,39894,39899,39905,39906,39907,39908,39912,39920,39921,39922,39925,39936,39940,39942,39944,39945,39946,39948,39949,39952,39954,39955,39956,39957,39963,39969,39972,39973,39981,39982,39983,39984,39986,39993,39994,39995,39998,40006,40007,40008,40018,40023,40026,40032,40039,40054,40056,40165,40167,40169,40171,40172,40176,40179,40180,40182,40195,40198,40199,40200,40201,40206,40210,40213,40219,40223,40227,40230,40232,40234,40235,40236,40251,40254,40255,40257,40260,40262,40264,40272,40273,40281,40284,40285,40286,40288,40289,40292,40299,40300,40303,40304,40306,40314,40327,40329,40335,40346,40356,40361,40363,40367,40370,40372,40376,40378,40379,40385,40386,40388,40390,40399,40403,40409,40422,40429,40431,40434,40440,40441,40442,40445,40473,40474,40475,40478,40565,40568,40569,40573,40575,40577,40584,40587,40588,40593,40594,40595,40597,40599,40605,40607,40613,40614,40617,40618,40621,40632,40633,40634,40635,40636,40638,40639,40644,40652,40653,40654,40655,40656,40657,40658,40660,40664,40665,40667,40668,40669,40670,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,40718,40723,40725,40736,40737,40748,40763,40766,40778,40779,40782,40783,40786,40788,40799,40800,40801,40802,40803,40806,40807,40810,40812,40818,40822,40823,40845,40853,40860,40861,40864,63785,63964,64014,64015,64016,64017,64018,64019,64020,64021,64022,64023,64024,64025,64026,64027,64028,64029,64030,64031,64032,64033,64034,64035,64036,64037,64038,64039,64040,64041,64042,64043,64044,64045,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65374,65377,65378,65379,65380,65381,65382,65383,65384,65385,65386,65387,65388,65389,65390,65391,65392,65393,65394,65395,65396,65397,65398,65399,65400,65401,65402,65403,65404,65405,65406,65407,65408,65409,65410,65411,65412,65413,65414,65415,65416,65417,65418,65419,65420,65421,65422,65423,65424,65425,65426,65427,65428,65429,65430,65431,65432,65433,65434,65435,65436,65437,65438,65439,65504,65505,65506,65507,65508,65509]], + ]; + foreach ($series as $test) { + foreach ($test[0] as $a => $input) { + $class = $this->testedClass; + $char = hex2bin($input); + $exp = $test[1][$a]; + $s = new $class($char); + $this->assertSame($exp, $s->nextCode(), "Sequence $input did not decode to $exp."); + $this->assertFalse($s->nextCode(), "Sequence $input did not end after one character"); + } + } + } +} diff --git a/tests/cases/Encoding/TestSingleByte.php b/tests/cases/Encoding/TestSingleByte.php index 598c2ad..5ca46e2 100644 --- a/tests/cases/Encoding/TestSingleByte.php +++ b/tests/cases/Encoding/TestSingleByte.php @@ -8,6 +8,7 @@ namespace MensBeam\Intl\TestCase\Encoding; use MensBeam\Intl\Encoding\SingleByteEncoding; use MensBeam\Intl\Encoding\EncoderException; +use MensBeam\Intl\Encoding\Encoder; class TestSingleByte extends \MensBeam\Intl\Test\CoderDecoderTest { // maps taken from https://github.com/web-platform-tests/wpt/blob/d6c29bef8d4bcdfe4f689defca73360b07647d71/encoding/single-byte-decoder.html @@ -83,9 +84,19 @@ class TestSingleByte extends \MensBeam\Intl\Test\CoderDecoderTest { /** * @dataProvider provideCodePoints + * @covers MensBeam\Intl\Encoding\Encoder * @covers MensBeam\Intl\Encoding\SingleByteEncoding::encode */ public function testEncodeCodePoints(bool $fatal, $input, $exp, string $class = SingleByteEncoding::class) { + $this->testedClass = $class; + return parent::testEncodeCodePoints($fatal, $input, bin2hex($exp)); + } + + /** + * @dataProvider provideCodePoints + * @covers MensBeam\Intl\Encoding\SingleByteEncoding::encode + */ + public function testEncodeCodePointsStatically(bool $fatal, $input, $exp, string $class = SingleByteEncoding::class) { $out = ""; foreach ($input as $code) { $out .= $class::encode($code, $fatal); @@ -214,7 +225,6 @@ class TestSingleByte extends \MensBeam\Intl\Test\CoderDecoderTest { return parent::testIterateThroughAStringAllowingSurrogates($input, $exp, $exp); } - /** * @dataProvider provideClasses * @coversNothing diff --git a/tests/cases/Encoding/TestUTF16LE.php b/tests/cases/Encoding/TestUTF16LE.php index 493d8a1..35bf317 100644 --- a/tests/cases/Encoding/TestUTF16LE.php +++ b/tests/cases/Encoding/TestUTF16LE.php @@ -126,7 +126,6 @@ class TestUTF16LE extends \MensBeam\Intl\Test\DecoderTest { return parent::testIterateThroughAStringAllowingSurrogates($input, $strictExp, $relaxedExp); } - /** * @covers MensBeam\Intl\Encoding\UTF16::seekBack */ diff --git a/tests/cases/Encoding/TestUTF8.php b/tests/cases/Encoding/TestUTF8.php index 262a67c..492abfa 100644 --- a/tests/cases/Encoding/TestUTF8.php +++ b/tests/cases/Encoding/TestUTF8.php @@ -7,7 +7,7 @@ declare(strict_types=1); namespace MensBeam\Intl\TestCase\Encoding; use MensBeam\Intl\Encoding\UTF8; -use MensBeam\Intl\Encoding\Encoding; +use MensBeam\Intl\Encoding\Coder; use MensBeam\Intl\Encoding\EncoderException; class TestUTF8 extends \MensBeam\Intl\Test\CoderDecoderTest { @@ -28,8 +28,81 @@ class TestUTF8 extends \MensBeam\Intl\Test\CoderDecoderTest { /* This string contains an invalid character sequence sandwiched between two null characters */ protected $brokenChar = "00 FF 00"; + public function provideCodePoints() { + return [ + 'U+007A (HTML)' => [false, 0x7A, "7A"], + 'U+007A (fatal)' => [true, 0x7A, "7A"], + 'U+00A2 (HTML)' => [false, 0xA2, "C2 A2"], + 'U+00A2 (fatal)' => [true, 0xA2, "C2 A2"], + 'U+6C34 (HTML)' => [false, 0x6C34, "E6 B0 B4"], + 'U+6C34 (fatal)' => [true, 0x6C34, "E6 B0 B4"], + 'U+1D11E (HTML)' => [false, 0x1D11E, "F0 9D 84 9E"], + 'U+1D11E (fatal)' => [true, 0x1D11E, "F0 9D 84 9E"], + 'U+F8FF (HTML)' => [false, 0xF8FF, "EF A3 BF"], + 'U+F8FF (fatal)' => [true, 0xF8FF, "EF A3 BF"], + 'U+10FFFD (HTML)' => [false, 0x10FFFD, "F4 8F BF BD"], + 'U+10FFFD (fatal)' => [true, 0x10FFFD, "F4 8F BF BD"], + 'U+FFFE (HTML)' => [false, 0xFFFE, "EF BF BE"], + 'U+FFFE (fatal)' => [true, 0xFFFE, "EF BF BE"], + '-1 (HTML)' => [false, -1, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '-1 (fatal)' => [true, -1, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '0x110000 (HTML)' => [false, 0x110000, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '0x110000 (fatal)' => [true, 0x110000, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + ]; + } + + public function provideStrings() { + return [ + // control samples + 'empty string' => ["", []], + 'sanity check' => ["61 62 63 31 32 33", [97, 98, 99, 49, 50, 51]], + 'multibyte control' => ["E5 8F A4 E6 B1 A0 E3 82 84 E8 9B 99 E9 A3 9B E3 81 B3 E8 BE BC E3 82 80 E6 B0 B4 E3 81 AE E9 9F B3", [21476, 27744, 12420, 34521, 39131, 12403, 36796, 12416, 27700, 12398, 38899]], + 'mixed sample' => ["7A C2 A2 E6 B0 B4 F0 9D 84 9E EF A3 BF F4 8F BF BD EF BF BE", [122, 162, 27700, 119070, 63743, 1114109, 65534]], + // various invalid sequences + 'invalid code' => ["FF", [65533]], + 'ends early' => ["C0", [65533]], + 'ends early 2' => ["E0", [65533]], + 'invalid trail' => ["C0 00", [65533, 0]], + 'invalid trail 2' => ["C0 C0", [65533, 65533]], + 'invalid trail 3' => ["E0 00", [65533, 0]], + 'invalid trail 4' => ["E0 C0", [65533, 65533]], + 'invalid trail 5' => ["E0 80 00", [65533, 65533, 0]], + 'invalid trail 6' => ["E0 80 C0", [65533, 65533, 65533]], + '> 0x10FFFF' => ["FC 80 80 80 80 80", [65533, 65533, 65533, 65533, 65533, 65533]], + 'obsolete lead byte' => ["FE 80 80 80 80 80", [65533, 65533, 65533, 65533, 65533, 65533]], + 'overlong U+0000 - 2 bytes' => ["C0 80", [65533, 65533]], + 'overlong U+0000 - 3 bytes' => ["E0 80 80", [65533, 65533, 65533]], + 'overlong U+0000 - 4 bytes' => ["F0 80 80 80", [65533, 65533, 65533, 65533]], + 'overlong U+0000 - 5 bytes' => ["F8 80 80 80 80", [65533, 65533, 65533, 65533, 65533]], + 'overlong U+0000 - 6 bytes' => ["FC 80 80 80 80 80", [65533, 65533, 65533, 65533, 65533, 65533]], + 'overlong U+007F - 2 bytes' => ["C1 BF", [65533, 65533]], + 'overlong U+007F - 3 bytes' => ["E0 81 BF", [65533, 65533, 65533]], + 'overlong U+007F - 4 bytes' => ["F0 80 81 BF", [65533, 65533, 65533, 65533]], + 'overlong U+007F - 5 bytes' => ["F8 80 80 81 BF", [65533, 65533, 65533, 65533, 65533]], + 'overlong U+007F - 6 bytes' => ["FC 80 80 80 81 BF", [65533, 65533, 65533, 65533, 65533, 65533]], + 'overlong U+07FF - 3 bytes' => ["E0 9F BF", [65533, 65533, 65533]], + 'overlong U+07FF - 4 bytes' => ["F0 80 9F BF", [65533, 65533, 65533, 65533]], + 'overlong U+07FF - 5 bytes' => ["F8 80 80 9F BF", [65533, 65533, 65533, 65533, 65533]], + 'overlong U+07FF - 6 bytes' => ["FC 80 80 80 9F BF", [65533, 65533, 65533, 65533, 65533, 65533]], + 'overlong U+FFFF - 4 bytes' => ["F0 8F BF BF", [65533, 65533, 65533, 65533]], + 'overlong U+FFFF - 5 bytes' => ["F8 80 8F BF BF", [65533, 65533, 65533, 65533, 65533]], + 'overlong U+FFFF - 6 bytes' => ["FC 80 80 8F BF BF", [65533, 65533, 65533, 65533, 65533, 65533]], + 'overlong U+10FFFF - 5 bytes' => ["F8 84 8F BF BF", [65533, 65533, 65533, 65533, 65533]], + 'overlong U+10FFFF - 6 bytes' => ["FC 80 84 8F BF BF", [65533, 65533, 65533, 65533, 65533, 65533]], + // UTF-16 surrogates + // surrogates have alternate outputs for when surrogates are being allowed + 'lead surrogate' => ["ED A0 80", [65533, 65533, 65533], [0xD800]], + 'trail surrogate' => ["ED B0 80", [65533, 65533, 65533], [0xDC00]], + 'surrogate pair' => ["ED A0 80 ED B0 80", [65533, 65533, 65533, 65533, 65533, 65533], [0xD800, 0xDC00]], + // self-sync edge cases + 'trailing continuation' => ["0A 80 80", [10, 65533, 65533]], + 'trailing continuation 2' => ["E5 8F A4 80", [21476, 65533]], + ]; + } + /** * @dataProvider provideCodePoints + * @covers MensBeam\Intl\Encoding\Encoder * @covers MensBeam\Intl\Encoding\UTF8::encode * @covers MensBeam\Intl\Encoding\UTF8::errEnc */ @@ -37,6 +110,15 @@ class TestUTF8 extends \MensBeam\Intl\Test\CoderDecoderTest { return parent::testEncodeCodePoints($fatal, $input, $exp); } + /** + * @dataProvider provideCodePoints + * @covers MensBeam\Intl\Encoding\UTF8::encode + * @covers MensBeam\Intl\Encoding\UTF8::errEnc + */ + public function testEncodeCodePointsStatically(bool $fatal, $input, $exp) { + return parent::testEncodeCodePointsStatically($fatal, $input, $exp); + } + /** * @dataProvider provideStrings * @covers MensBeam\Intl\Encoding\UTF8::__construct @@ -136,83 +218,10 @@ class TestUTF8 extends \MensBeam\Intl\Test\CoderDecoderTest { return parent::testIterateThroughAStringAllowingSurrogates($input, $strictExp, $relaxedExp); } - /** * @covers MensBeam\Intl\Encoding\UTF8::seekBack */ public function testSeekBackOverRandomData() { return parent::testSeekBackOverRandomData(); } - - public function provideCodePoints() { - return [ - 'U+007A (HTML)' => [false, 0x7A, "7A"], - 'U+007A (fatal)' => [true, 0x7A, "7A"], - 'U+00A2 (HTML)' => [false, 0xA2, "C2 A2"], - 'U+00A2 (fatal)' => [true, 0xA2, "C2 A2"], - 'U+6C34 (HTML)' => [false, 0x6C34, "E6 B0 B4"], - 'U+6C34 (fatal)' => [true, 0x6C34, "E6 B0 B4"], - 'U+1D11E (HTML)' => [false, 0x1D11E, "F0 9D 84 9E"], - 'U+1D11E (fatal)' => [true, 0x1D11E, "F0 9D 84 9E"], - 'U+F8FF (HTML)' => [false, 0xF8FF, "EF A3 BF"], - 'U+F8FF (fatal)' => [true, 0xF8FF, "EF A3 BF"], - 'U+10FFFD (HTML)' => [false, 0x10FFFD, "F4 8F BF BD"], - 'U+10FFFD (fatal)' => [true, 0x10FFFD, "F4 8F BF BD"], - 'U+FFFE (HTML)' => [false, 0xFFFE, "EF BF BE"], - 'U+FFFE (fatal)' => [true, 0xFFFE, "EF BF BE"], - '-1 (HTML)' => [false, -1, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - '-1 (fatal)' => [true, -1, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - '0x110000 (HTML)' => [false, 0x110000, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - '0x110000 (fatal)' => [true, 0x110000, new EncoderException("", Encoding::E_INVALID_CODE_POINT)], - ]; - } - - public function provideStrings() { - return [ - // control samples - 'empty string' => ["", []], - 'sanity check' => ["61 62 63 31 32 33", [97, 98, 99, 49, 50, 51]], - 'multibyte control' => ["E5 8F A4 E6 B1 A0 E3 82 84 E8 9B 99 E9 A3 9B E3 81 B3 E8 BE BC E3 82 80 E6 B0 B4 E3 81 AE E9 9F B3", [21476, 27744, 12420, 34521, 39131, 12403, 36796, 12416, 27700, 12398, 38899]], - 'mixed sample' => ["7A C2 A2 E6 B0 B4 F0 9D 84 9E EF A3 BF F4 8F BF BD EF BF BE", [122, 162, 27700, 119070, 63743, 1114109, 65534]], - // various invalid sequences - 'invalid code' => ["FF", [65533]], - 'ends early' => ["C0", [65533]], - 'ends early 2' => ["E0", [65533]], - 'invalid trail' => ["C0 00", [65533, 0]], - 'invalid trail 2' => ["C0 C0", [65533, 65533]], - 'invalid trail 3' => ["E0 00", [65533, 0]], - 'invalid trail 4' => ["E0 C0", [65533, 65533]], - 'invalid trail 5' => ["E0 80 00", [65533, 65533, 0]], - 'invalid trail 6' => ["E0 80 C0", [65533, 65533, 65533]], - '> 0x10FFFF' => ["FC 80 80 80 80 80", [65533, 65533, 65533, 65533, 65533, 65533]], - 'obsolete lead byte' => ["FE 80 80 80 80 80", [65533, 65533, 65533, 65533, 65533, 65533]], - 'overlong U+0000 - 2 bytes' => ["C0 80", [65533, 65533]], - 'overlong U+0000 - 3 bytes' => ["E0 80 80", [65533, 65533, 65533]], - 'overlong U+0000 - 4 bytes' => ["F0 80 80 80", [65533, 65533, 65533, 65533]], - 'overlong U+0000 - 5 bytes' => ["F8 80 80 80 80", [65533, 65533, 65533, 65533, 65533]], - 'overlong U+0000 - 6 bytes' => ["FC 80 80 80 80 80", [65533, 65533, 65533, 65533, 65533, 65533]], - 'overlong U+007F - 2 bytes' => ["C1 BF", [65533, 65533]], - 'overlong U+007F - 3 bytes' => ["E0 81 BF", [65533, 65533, 65533]], - 'overlong U+007F - 4 bytes' => ["F0 80 81 BF", [65533, 65533, 65533, 65533]], - 'overlong U+007F - 5 bytes' => ["F8 80 80 81 BF", [65533, 65533, 65533, 65533, 65533]], - 'overlong U+007F - 6 bytes' => ["FC 80 80 80 81 BF", [65533, 65533, 65533, 65533, 65533, 65533]], - 'overlong U+07FF - 3 bytes' => ["E0 9F BF", [65533, 65533, 65533]], - 'overlong U+07FF - 4 bytes' => ["F0 80 9F BF", [65533, 65533, 65533, 65533]], - 'overlong U+07FF - 5 bytes' => ["F8 80 80 9F BF", [65533, 65533, 65533, 65533, 65533]], - 'overlong U+07FF - 6 bytes' => ["FC 80 80 80 9F BF", [65533, 65533, 65533, 65533, 65533, 65533]], - 'overlong U+FFFF - 4 bytes' => ["F0 8F BF BF", [65533, 65533, 65533, 65533]], - 'overlong U+FFFF - 5 bytes' => ["F8 80 8F BF BF", [65533, 65533, 65533, 65533, 65533]], - 'overlong U+FFFF - 6 bytes' => ["FC 80 80 8F BF BF", [65533, 65533, 65533, 65533, 65533, 65533]], - 'overlong U+10FFFF - 5 bytes' => ["F8 84 8F BF BF", [65533, 65533, 65533, 65533, 65533]], - 'overlong U+10FFFF - 6 bytes' => ["FC 80 84 8F BF BF", [65533, 65533, 65533, 65533, 65533, 65533]], - // UTF-16 surrogates - // surrogates have alternate outputs for when surrogates are being allowed - 'lead surrogate' => ["ED A0 80", [65533, 65533, 65533], [0xD800]], - 'trail surrogate' => ["ED B0 80", [65533, 65533, 65533], [0xDC00]], - 'surrogate pair' => ["ED A0 80 ED B0 80", [65533, 65533, 65533, 65533, 65533, 65533], [0xD800, 0xDC00]], - // self-sync edge cases - 'trailing continuation' => ["0A 80 80", [10, 65533, 65533]], - 'trailing continuation 2' => ["E5 8F A4 80", [21476, 65533]], - ]; - } } diff --git a/tests/cases/Encoding/TestXUserDefined.php b/tests/cases/Encoding/TestXUserDefined.php index 80b0504..3f7a689 100644 --- a/tests/cases/Encoding/TestXUserDefined.php +++ b/tests/cases/Encoding/TestXUserDefined.php @@ -7,8 +7,10 @@ declare(strict_types=1); namespace MensBeam\Intl\TestCase\Encoding; use MensBeam\Intl\Encoding\XUserDefined; +use MensBeam\Intl\Encoding\Coder; +use MensBeam\Intl\Encoding\EncoderException; -class TestXUserDefined extends \MensBeam\Intl\Test\DecoderTest { +class TestXUserDefined extends \MensBeam\Intl\Test\CoderDecoderTest { protected $testedClass = XUserDefined::class; /* X-user-defined doesn't have complex seeking, so this string is generic */ protected $seekString = "30 31 32 33 34 35 36"; @@ -17,6 +19,64 @@ class TestXUserDefined extends \MensBeam\Intl\Test\DecoderTest { /* This string is supposed to contain an invalid character sequence sandwiched between two null characters, but x-user-defined has no invalid characters */ protected $brokenChar = ""; + public function provideCodePoints() { + return [ + 'U+0064 (HTML)' => [false, 0x64, "64"], + 'U+0064 (fatal)' => [true, 0x64, "64"], + 'U+F780 (HTML)' => [false, 0xF780, "80"], + 'U+F780 (fatal)' => [true, 0xF780, "80"], + 'U+F7FF (HTML)' => [false, 0xF7FF, "FF"], + 'U+F7FF (fatal)' => [true, 0xF7FF, "FF"], + 'U+00CA (HTML)' => [false, 0xCA, bin2hex("Ê")], + 'U+00CA (fatal)' => [true, 0xCA, new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)], + '-1 (HTML)' => [false, -1, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '-1 (fatal)' => [true, -1, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '0x110000 (HTML)' => [false, 0x110000, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + '0x110000 (fatal)' => [true, 0x110000, new EncoderException("", Coder::E_INVALID_CODE_POINT)], + ]; + } + + public function provideStrings() { + $a_bytes = []; + $a_codes = []; + for ($a = 0; $a < 0x80; $a++) { + $a_bytes[] = strtoupper(bin2hex(chr($a))); + $a_codes[] = $a; + } + $p_bytes = []; + $p_codes = []; + for ($a = 0; $a < 0x80; $a++) { + $p_bytes[] = strtoupper(bin2hex(chr(0x80 + $a))); + $p_codes[] = 0xF780 + $a; + } + $a_bytes = implode(" ", $a_bytes); + $p_bytes = implode(" ", $p_bytes); + return [ + 'empty string' => ["", []], + 'ASCI bytes' => [$a_bytes, $a_codes], + 'private-use bytes' => [$p_bytes, $p_codes], + ]; + } + + /** + * @dataProvider provideCodePoints + * @covers MensBeam\Intl\Encoding\Encoder + * @covers MensBeam\Intl\Encoding\XUserDefined::encode + * @covers MensBeam\Intl\Encoding\XUserDefined::errEnc + */ + public function testEncodeCodePoints(bool $fatal, $input, $exp) { + return parent::testEncodeCodePoints($fatal, $input, $exp); + } + + /** + * @dataProvider provideCodePoints + * @covers MensBeam\Intl\Encoding\XUserDefined::encode + * @covers MensBeam\Intl\Encoding\XUserDefined::errEnc + */ + public function testEncodeCodePointsStatically(bool $fatal, $input, $exp) { + return parent::testEncodeCodePointsStatically($fatal, $input, $exp); + } + /** * @dataProvider provideStrings * @covers MensBeam\Intl\Encoding\XUserDefined::__construct @@ -117,33 +177,10 @@ class TestXUserDefined extends \MensBeam\Intl\Test\DecoderTest { return parent::testIterateThroughAStringAllowingSurrogates($input, $strictExp, $relaxedExp); } - /** * @coversNothing */ public function testSeekBackOverRandomData() { return parent::testSeekBackOverRandomData(); } - - public function provideStrings() { - $a_bytes = []; - $a_codes = []; - for ($a = 0; $a < 0x80; $a++) { - $a_bytes[] = strtoupper(bin2hex(chr($a))); - $a_codes[] = $a; - } - $p_bytes = []; - $p_codes = []; - for ($a = 0; $a < 0x80; $a++) { - $p_bytes[] = strtoupper(bin2hex(chr(0x80 + $a))); - $p_codes[] = 0xF780 + $a; - } - $a_bytes = implode(" ", $a_bytes); - $p_bytes = implode(" ", $p_bytes); - return [ - 'empty string' => ["", []], - 'ASCI bytes' => [$a_bytes, $a_codes], - 'private-use bytes' => [$p_bytes, $p_codes], - ]; - } } diff --git a/tests/cases/TestEncoding.php b/tests/cases/TestEncoding.php index a65313c..218a60d 100644 --- a/tests/cases/TestEncoding.php +++ b/tests/cases/TestEncoding.php @@ -7,6 +7,7 @@ declare(strict_types=1); namespace MensBeam\Intl\TestCase; use MensBeam\Intl\Encoding; +use MensBeam\Intl\Encoding\Encoder; class TestEncoding extends \PHPUnit\Framework\TestCase { /** @dataProvider provideLabelData */ @@ -31,6 +32,23 @@ class TestEncoding extends \PHPUnit\Framework\TestCase { $this->assertNull(Encoding::createDecoder("Not a label", "")); } + /** @dataProvider provideLabelData */ + public function testCreateAnEncoderFromALabel(string $label, array $data) { + if ($data['encoder']) { + $this->assertInstanceOf(Encoder::class, Encoding::createEncoder($label)); + $this->assertInstanceOf(Encoder::class, Encoding::createEncoder(strtoupper($label))); + $this->assertInstanceOf(Encoder::class, Encoding::createEncoder(" $label\n\n\r\t")); + } else { + $this->assertNull(Encoding::createEncoder($label)); + $this->assertNull(Encoding::createEncoder(strtoupper($label))); + $this->assertNull(Encoding::createEncoder(" $label\n\n\r\t")); + } + } + + public function testFailToCreateAnEncoderFromALabel() { + $this->assertNull(Encoding::createEncoder("Not a label")); + } + public function provideLabelData() { $ns = "MensBeam\\Intl\\Encoding\\"; $labels = []; @@ -39,7 +57,7 @@ class TestEncoding extends \PHPUnit\Framework\TestCase { $file = basename($file, ".php"); $className = $ns.$file; $class = new \ReflectionClass($className); - if ($class->implementsInterface(\MensBeam\Intl\Encoding\Encoding::class) && $class->isInstantiable()) { + if ($class->implementsInterface(\MensBeam\Intl\Encoding\Decoder::class) && $class->isInstantiable()) { $name = $class->getConstant("NAME"); $names[$name] = $className; foreach ($class->getConstant("LABELS") as $label) { @@ -47,10 +65,10 @@ class TestEncoding extends \PHPUnit\Framework\TestCase { } } } - $out = []; foreach ($labels as $label => $name) { - $out[] = [(string) $label, ['label' => (string) $label, 'name' => $name, 'class' => $names[$name]]]; + $class = $names[$name]; + $encoder = !in_array($name, ["UTF-16LE", "UTF-16BE", "replacement"]); + yield [(string) $label, ['label' => (string) $label, 'name' => $name, 'class' => $class, 'encoder' => $encoder]]; } - return $out; } } diff --git a/tests/lib/CoderDecoderTest.php b/tests/lib/CoderDecoderTest.php index 3bf4e8f..77384e9 100644 --- a/tests/lib/CoderDecoderTest.php +++ b/tests/lib/CoderDecoderTest.php @@ -6,9 +6,36 @@ declare(strict_types=1); namespace MensBeam\Intl\Test; +use \MensBeam\Intl\Encoding\Encoder; + abstract class CoderDecoderTest extends DecoderTest { public function testEncodeCodePoints(bool $fatal, $input, $exp) { $class = $this->testedClass; + $label = $class::NAME; + $e = new Encoder($label, $fatal); + $input = (array) $input; + if ($exp instanceof \Throwable) { + $this->expectException(get_class($exp)); + $this->expectExceptionCode($exp->getCode()); + } else { + $exp = strtolower(str_replace(" ", "", $exp)); + } + $out = $e->encode($input); + $this->assertSame($exp, bin2hex($out)); + $out = ""; + foreach ($input as $c) { + $out .= $e->encodeChar($c); + } + $out .= $e->finalize(); + $this->assertSame($exp, bin2hex($out)); + } + + public function testEncodeCodePointsStatically(bool $fatal, $input, $exp) { + $class = $this->testedClass; + if (!method_exists($class, "encode")) { + $this->assertTrue(true); + return; + } if ($exp instanceof \Throwable) { $this->expectException(get_class($exp)); $this->expectExceptionCode($exp->getCode()); diff --git a/tests/lib/DecoderTest.php b/tests/lib/DecoderTest.php index 5f74450..6f2b50c 100644 --- a/tests/lib/DecoderTest.php +++ b/tests/lib/DecoderTest.php @@ -7,6 +7,7 @@ declare(strict_types=1); namespace MensBeam\Intl\Test; use MensBeam\Intl\Encoding\DecoderException; +use MensBeam\Intl\Encoding\ISO2022JP; abstract class DecoderTest extends \PHPUnit\Framework\TestCase { protected $random = "L51yGwEFuatjbZi7wgNC80qYncvauVm1Lh8vCSK/KJs6QxoynMU8TCamx5TNhbjeh5VpWqQ0Q1j/W6u4O/InxBDxk8g83azJFQHzU+L7Npk0bkdofFv2AHDI2SUlXotYeEOnkKa/c6eQiDk8NapS0LGnb64ypKASacAMp6s2wSUU03l6iVVapHsNBgYs0cD++vnG8ckgbGsV3KkE3Lh601u6jviDyeRwbTxLZcUfSS2uIzrvvGWFfw6D4/FOa3uTR1k2Ya6jT+T/F+OdMgWlUPouuAVgLuvFxj9v9ZBnI+FAFc0kX4aT/JoTuBGMm8YS4xPVvczdrPXCUijML5TZrU201uFqeB9LDDWULp1Ai9d41fcD/8GBFrzlpXPIV+hsSJ4HvWswXdDeVKWgSMrQ78pf+zwvD66TA4FjMiEsLLpf9bb+mPiS2Aa3BP0JpjPwi0gdBu8QipLXNGFUUGW/15jGlj3eNynELRAtvyYZnoYIYShsN1TIU+buw8hHOp9iKsKT+fqPaEuuLLtlJ/cqhcxaZhbaWRB6vCQW9mO7f8whl7cpbBOO+NwDDCJZCsULh7rINF2omkexfOZzQSt/LC3yw+Pzqrf5Pmp5YgpMvoNgHcY1FkpsHc48IHMsJ+gex2zltIG51TQBAhy/fWF0KIqd+IPT+qngVGYIw/WuXj0LaK7XIVp33tc6fzuXNv+GUzYwpv4k9ry8R/DW8EX572FXFA49HHxbytSIJLD/+KpE2CE1WOr3ONwOXm6WduUBmFi4bwlRrCKnHqnFtLztVdLwMOauFa8N822XoAnWvHs+8R1DLHtgUyZas3ktp/qjMp5oVsb2PO+VpPFHIighHySgljrPl+sKaPULh7P/rAHXOuS9p9zTZKHrQ4nccl8SnYZlHKdioWo1NK5LRZB0PXYH8Ytu8aWVBmb4lAlpAFbSTqtOhydUJ/lyM29STG5mTV3rbG6tWMsUXBpaX4PrGCnhj40RVdz0BzsgvzLu4PNI+s3TJ6ZKV4hGS5on040xMDC2423DpKHPNa7mbl7J036dFt0JcYeGu07maGxssJnwLbebg5cm36Ecea7cTBWEGFMqiFjLoBEu0Y2CfF/GEbwqOf55/p1ewaZMrunFKd/Mj89qyYU5bp6mwmXSwj10psAA+qtXYm3XzRrLHKfCuiukyPEtvI+RdjbQDtMP1vF5qkmjlQLHXvEDpviJMaqvIPkjGrZkvAej1JX5yka50z0od9LLz8TIernjLLoVZ+cWtpd3kchO6w+zTpIOups4HdD66zaiPJrXIrJwi5bIgwTOWLhVs3ufZ0loFjlWWUh5FlTW+oWl1AD4h/yPBHWglqfMaTTqH75B4XEriy+Bw9k="; @@ -54,7 +55,7 @@ abstract class DecoderTest extends \PHPUnit\Framework\TestCase { } $this->assertSame(sizeof($exp), $pos); while ($s->posChar()) { - $this->assertSame(0, $s->seek(-1)); + $this->assertSame(0, $s->seek(-1), "Error stepping back to position ".($pos - 1)); $this->assertSame(--$pos, $s->posChar()); $act[] = $s->nextCode(); $s->seek(-1); @@ -96,7 +97,11 @@ abstract class DecoderTest extends \PHPUnit\Framework\TestCase { $this->assertSame(1, $s->seek(1)); $this->assertSame(7, $s->posChar()); - $this->assertSame($off[7], $s->posByte()); + if ($this->testedClass !== ISO2022JP::class) { + $this->assertSame($off[7], $s->posByte()); + } else { + $this->assertSame($off[7] + 3, $s->posByte()); + } $this->assertSame(0, $s->seek(-3)); $this->assertSame(4, $s->posChar()); diff --git a/tests/phpunit.xml b/tests/phpunit.xml index 2037e9a..93c162f 100644 --- a/tests/phpunit.xml +++ b/tests/phpunit.xml @@ -17,16 +17,19 @@ + cases/TestEncoding.php cases/Encoding/TestUTF8.php cases/Encoding/TestUTF16LE.php cases/Encoding/TestUTF16BE.php cases/Encoding/TestSingleByte.php cases/Encoding/TestXUserDefined.php + cases/Encoding/TestEUCJP.php cases/Encoding/TestGB18030.php cases/Encoding/TestBig5.php cases/Encoding/TestEUCKR.php - - cases/TestEncoding.php + cases/Encoding/TestShiftJIS.php + cases/Encoding/TestISO2022JP.php + cases/Encoding/TestReplacement.php diff --git a/tools/mkindex.php b/tools/mkindex.php index 2701a21..b43fd03 100644 --- a/tools/mkindex.php +++ b/tools/mkindex.php @@ -1,14 +1,15 @@ "big5", - //'euc-jp' => "eucjp", + 'euc-jp' => "eucjp", 'euc-kr' => "euckr", 'gb18030' => "gb18030", 'ibm866' => "single_byte", - //'iso-2022-jp' => "iso2022jp", + 'iso-2022-jp' => "iso2022jp", 'iso-8859-10' => "single_byte", 'iso-8859-13' => "single_byte", 'iso-8859-14' => "single_byte", @@ -24,7 +25,7 @@ $labels = [ 'koi8-r' => "single_byte", 'koi8-u' => "single_byte", 'macintosh' => "single_byte", - //'shift-jis' => "shiftjis", + 'shift-jis' => "shiftjis", 'windows-1250' => "single_byte", 'windows-1251' => "single_byte", 'windows-1252' => "single_byte", @@ -40,32 +41,34 @@ $labels = [ $label = $argv[1] ?? ""; $label = trim(strtolower($label)); if (!isset($labels[$label])) { - die("Invalid label specified. Must be one of: ".json_encode(array_keys($labels))); + die("Invalid label specified. Must be one of: ".json_encode(array_keys($labels))."\n"); } ($labels[$label])($label); // encoding-specific output generators function single_byte(string $label) { - $entries = read_index($label, "https://encoding.spec.whatwg.org/index-$label.txt"); - $dec_char = make_decoder_char_array($entries); - $dec_code = make_decoder_point_array($entires); - $enc = make_encoder_array($entries); + $table = read_index($label, "https://encoding.spec.whatwg.org/index-$label.txt"); + $dec_char = serialize_char_array($table); + $dec_code = serialize_point_array($table); + $enc = serialize_single_byte_array($table); echo "const TABLE_DEC_CHAR = $dec_char;\n"; echo "const TABLE_DEC_CODE = $dec_code;\n"; echo "const TABLE_ENC = $enc;\n"; } function gb18030(string $label) { - $dec_gbk = make_decoder_point_array(read_index($label, "https://encoding.spec.whatwg.org/index-$label.txt")); + $gbk = read_index($label, "https://encoding.spec.whatwg.org/index-$label.txt"); + $dec_gbk = serialize_point_array($gbk); + $enc_gbk = serialize_point_array(make_override_array($gbk)); $ranges = read_index($label, "https://encoding.spec.whatwg.org/index-$label-ranges.txt"); $dec_max = []; $dec_off = []; - foreach ($ranges as $match) { + foreach ($ranges as $pointer => $code) { // gather the range starts in one array; they will actually be used as range ends - $dec_max[] = (int) $match[1]; + $dec_max[] = $pointer; // gather the starting code points in another array - $dec_off[] = hexdec($match[2]); + $dec_off[] = $code; } // fudge the top of the ranges // see https://encoding.spec.whatwg.org/#index-gb18030-ranges-code-point Step 1 @@ -76,13 +79,16 @@ function gb18030(string $label) { $dec_off[] = 0x110000; $dec_max = "[".implode(",", $dec_max)."]"; $dec_off = "[".implode(",", $dec_off)."]"; - echo "const TABLE_GBK = $dec_gbk;\n"; + echo "const TABLE_CODES = $dec_gbk;\n"; + echo "const TABLE_POINTERS = $enc_gbk;\n"; echo "const TABLE_RANGES = $dec_max;\n"; echo "const TABLE_OFFSETS = $dec_off;\n"; } function big5(string $label) { - $codes = make_decoder_point_array(read_index($label, "https://encoding.spec.whatwg.org/index-$label.txt")); + // Big5 has unusually complex encoding requirements + // see https://encoding.spec.whatwg.org/#index-big5-pointer for particulars + $table = read_index($label, "https://encoding.spec.whatwg.org/index-$label.txt"); $specials = << [0x00CA, 0x0304], @@ -91,46 +97,79 @@ function big5(string $label) { 1166 => [0x00EA, 0x030C], ] ARRAY_LITERAL; - // compile an encoder table - // see https://encoding.spec.whatwg.org/#index-big5-pointer for particulars - // first get the decoder table as an array - $table = eval("return $codes;"); - // filter out the low end of the table containing Hong Kong Supplement characters, which are not used during encoding - $table = array_filter($table, function($key) { - return (!($key < ((0xA1 - 0x81) * 157))); - }, \ARRAY_FILTER_USE_KEY); - // search for each unique code point's pointer in the table, the first for some, the last for a specific set - $enc = []; - $a = 0; - $points = array_unique($table); - sort($points); - foreach ($points as $point) { - // find the correct pointer - if (in_array($point, [0x2550, 0x255E, 0x256A, 0x5341, 0x5345])) { - $pointer = array_search($point, array_reverse($table, true)); + // split Hong Kong Supplement code points from the rest of Big5 + $stop = (0xA1 - 0x81) * 157; + $hk = []; + $nhk = []; + foreach ($table as $pointer => $code) { + if ($pointer < $stop) { + $hk[$pointer] = $code; } else { - $pointer = array_search($point, $table); + $nhk[$pointer] = $code; } - // step the output array's key - if ($a == $point) { - $key = ""; - } else { - $a = $point; - $key = "$point=>"; - } - $a++; - $enc[] = "$key$pointer"; } - // compose the encoder table literal - $enc = "[".implode(",", $enc)."]"; - echo "const TABLE_CODES = $codes;\n"; + // search the Big5 rump for duplicates + $dupes = make_override_array($nhk); + // remove those duplicates which should use the last code point + foreach ([0x2550, 0x255E, 0x2561, 0x256A, 0x5341, 0x5345] as $code) { + unset($dupes[$code]); + } + // serialize and print; Hong Kong characters are kept separate as they are not used in encoding + $codes_tw = serialize_point_array($nhk); + $codes_hk = serialize_point_array($hk); + $enc = serialize_point_array($dupes); echo "const TABLE_DOUBLES = $specials;\n"; - echo "const TABLE_ENC = $enc;\n"; + echo "const TABLE_CODES_TW = $codes_tw;\n"; + echo "const TABLE_CODES_HK = $codes_hk;\n"; + echo "const TABLE_POINTERS = $enc;\n"; } function euckr(string $label) { - $codes = make_decoder_point_array(read_index($label, "https://encoding.spec.whatwg.org/index-$label.txt")); + $codes = serialize_point_array(read_index($label, "https://encoding.spec.whatwg.org/index-$label.txt")); + echo "const TABLE_CODES = $codes;\n"; +} + +function eucjp(string $label) { + $jis0212 = serialize_point_array(read_index("jis0212", "https://encoding.spec.whatwg.org/index-jis0212.txt")); + $table = read_index("jis0208", "https://encoding.spec.whatwg.org/index-jis0208.txt"); + $dupes = serialize_point_array(make_override_array($table)); + $jis0208 = serialize_point_array($table); + echo "const TABLE_JIS0208 = $jis0208;\n"; + echo "const TABLE_JIS0212 = $jis0212;\n"; + echo "const TABLE_POINTERS = $dupes;\n"; +} + +function iso2022jp(string $label) { + $kana = serialize_point_array(read_index("jis0208", "https://encoding.spec.whatwg.org/index-iso-2022-jp-katakana.txt")); + $table = read_index("jis0208", "https://encoding.spec.whatwg.org/index-jis0208.txt"); + $dupes = serialize_point_array(make_override_array($table)); + $jis0208 = serialize_point_array($table); + echo "const TABLE_JIS0208 = $jis0208;\n"; + echo "const TABLE_KATAKANA = $kana;\n"; + echo "const TABLE_POINTERS = $dupes;\n"; +} + +function shiftjis(string $label) { + $table = read_index($label, "https://encoding.spec.whatwg.org/index-jis0208.txt"); + // exclude a range of pointers from encoding consideration + $dec = []; + $shared = []; + foreach ($table as $pointer => $code) { + if ($pointer < 8272 || $pointer > 8835) { + $shared[$pointer] = $code; + } else { + $dec[$pointer] = $code; + } + } + // search the encoder set for duplicates + $dupes = make_override_array($shared); + // serialize and print; the $shared set is used for both encoding and decoding; the $dec set is used only for decoding + $codes = serialize_point_array($shared); + $codes_extra = serialize_point_array($dec); + $enc = serialize_point_array($dupes); echo "const TABLE_CODES = $codes;\n"; + echo "const TABLE_CODES_EXTRA = $codes_extra;\n"; + echo "const TABLE_POINTERS = $enc;\n"; } // generic helper functions @@ -139,36 +178,36 @@ function read_index(string $label, string $url): array { $data = file_get_contents($url) or die("index file for '$label' could not be retrieved from network."); // find lines that contain data preg_match_all("/^\s*(\d+)\s+0x([0-9A-Z]+)/m", $data, $matches, \PREG_SET_ORDER); - return $matches; + $out = []; + foreach ($matches as list($match, $index, $code)) { + $out[(int) $index] = (int) hexdec($code); + } + return $out; } -function make_decoder_point_array(array $entries): string { +function serialize_point_array(array $table): string { $out = []; $i = 0; - foreach ($entries as $match) { - $index = (int) $match[1]; - $code = hexdec($match[2]); - // missing indexes necessitate specifying keys explicitly - if ($index == $i) { + foreach ($table as $index => $code) { + // non-sequential indices must be printed, but others can be omitted + if ($index === $i) { $key = ""; } else { $key = "$index=>"; $i = $index; } - $out[] = $key."$code"; + $out[] = $key.$code; $i++; } return "[".implode(",", $out)."]"; } -function make_decoder_char_array(array $entries): string { +function serialize_char_array(array $table): string { $out = []; $i = 0; - foreach ($entries as $match) { - $index = (int) $match[1]; - $code = $match[2]; - // missing indexes necessitate specifying keys explicitly - if ($index == $i) { + foreach ($table as $index => $code) { + // non-sequential indices must be printed, but others can be omitted + if ($index === $i) { $key = ""; } else { $key = "$index=>"; @@ -180,12 +219,10 @@ function make_decoder_char_array(array $entries): string { return "[".implode(",", $out)."]"; } -// this is only used for single-byte encoders; other encoders instead flip their decoder arrays or use custom tables -function make_encoder_array(array $entries): string { +// this is only used for single-byte encoders; other encoders instead flip their decoder arrays with overrides for duplicates or special cases +function serialize_single_byte_array(array $table): string { $out = []; - foreach ($entries as $match) { - $index = (int) $match[1]; - $code = $match[2]; + foreach ($table as $index => $code) { $byte = strtoupper(str_pad(dechex($index + 128), 2, "0", \STR_PAD_LEFT)); $out[$code] = "\"\\x$byte\""; } @@ -203,3 +240,17 @@ function make_encoder_array(array $entries): string { } return "[".implode(",", $out)."]"; } + +// indexes with duplicate code points by default need to match the lowest pointer when encoding +// PHP's array_flip() function retains the last duplicate rather than the first, so we have to find duplicates +function make_override_array(array $table): array { + $out = []; + $dupes = array_keys(array_filter(array_count_values($table), function($v) { + return $v > 1; + })); + foreach ($dupes as $code_point) { + $out[$code_point] = array_search($code_point, $table); + } + ksort($out); + return $out; +} diff --git a/tools/mklabels.php b/tools/mklabels.php index b090cfe..5d60e4b 100644 --- a/tools/mklabels.php +++ b/tools/mklabels.php @@ -1,9 +1,9 @@ implementsInterface(Encoding::class) && $class->isInstantiable()) { + if ($class->implementsInterface(Decoder::class) && $class->isInstantiable()) { $name = $class->getConstant("NAME"); $names[$name] = $className; foreach ($class->getConstant("LABELS") as $label) { diff --git a/tools/mktest.php b/tools/mktest.php index 2e0ad67..bf81c1d 100644 --- a/tools/mktest.php +++ b/tools/mktest.php @@ -1,4 +1,5 @@ $url) { +foreach ($tests[$label] as $name => $url) { $data = make_test($label, $url); $in = $data[0]; $out = $data[1]; @@ -55,6 +56,10 @@ function make_test(string $label, string $url): array { $code = hexdec($match[1]); if ($label=="gb18030" && $bytes=="A8BC") { // this test is incorrect or out of date; both Vivaldi and Firefox yield code point 7743 $code = 7743; + } elseif ($label=="euc-jp") { // three tests are out of date + $code = ["5C" => 92, "7E" => 126, "A1DD" => 65293][$bytes] ?? $code; + } elseif ($label=="shiftjis") { // three tests are incorrect + $code = ["5C" => 92, "7E" => 126, "817C" => 0xFF0D][$bytes] ?? $code; } // convert the code point to decimal $out[] = $code; diff --git a/tools/test-big5.html b/tools/test-big5.html index f6ce6c5..5ccefd2 100644 --- a/tools/test-big5.html +++ b/tools/test-big5.html @@ -27,6 +27,9 @@ var sampleCharacters = { 'U+0064': 0x64, 'U+00CA': 0xCA, 'U+3007': 0x3007, + 'U+5341': 0x5341, + 'U+2561': 0x2561, + 'U+256D': 0x256D, '-1': -1, '0x110000': 0x110000, }; diff --git a/tools/test-eucjp.html b/tools/test-eucjp.html new file mode 100644 index 0000000..ea45950 --- /dev/null +++ b/tools/test-eucjp.html @@ -0,0 +1,57 @@ + + + + + diff --git a/tools/test-gb18030.html b/tools/test-gb18030.html index 9722f3d..ae652fd 100644 --- a/tools/test-gb18030.html +++ b/tools/test-gb18030.html @@ -60,6 +60,7 @@ var sampleCharacters = { 'U+E7C7': 0xE7C7, 'U+1D11E': 0x1D11E, 'U+E5E5': 0xE5E5, + 'U+3000': 0x3000, '-1': -1, '0x110000': 0x110000, }; diff --git a/tools/test-gbk.html b/tools/test-gbk.html index 2b02d4b..5e94ab9 100644 --- a/tools/test-gbk.html +++ b/tools/test-gbk.html @@ -9,6 +9,7 @@ var sampleCharacters = { 'U+E7C7': 0xE7C7, 'U+1D11E': 0x1D11E, 'U+E5E5': 0xE5E5, + 'U+3000': 0x3000, '-1': -1, '0x110000': 0x110000, }; diff --git a/tools/test-iso2022jp.html b/tools/test-iso2022jp.html new file mode 100644 index 0000000..5c06f97 --- /dev/null +++ b/tools/test-iso2022jp.html @@ -0,0 +1,46 @@ + + + + + diff --git a/tools/test-shiftjis.html b/tools/test-shiftjis.html new file mode 100644 index 0000000..ab3b1b1 --- /dev/null +++ b/tools/test-shiftjis.html @@ -0,0 +1,42 @@ + + + + + diff --git a/tools/test.js b/tools/test.js index 8a34819..de6648e 100644 --- a/tools/test.js +++ b/tools/test.js @@ -7,17 +7,17 @@ var encoding = document.getElementsByTagName("meta")[0].getAttribute("charset"); function encodeCodePoint(code, fatal) { if (code < 0 || code > 0x10FFFF) { - return 'new EncoderException("", Encoding::E_INVALID_CODE_POINT)'; + return 'new EncoderException("", Coder::E_INVALID_CODE_POINT)'; } else { var l = document.createElement("a"); - l.href = "http://example.com/?" + String.fromCodePoint(code) + "a"; + l.href = "http://example.com/?" + String.fromCodePoint(code) + "#"; var bytes = []; - let url = l.search.substr(1, l.search.length - 2); + let url = l.search.substr(1); for (let a = 0; a < url.length; a++) { if ((url.charAt(a) == "%" && url.substr(a, 6) == "%26%23") || url.charAt(a) == "&") { // character cannot be encoded if (fatal) { - return 'new EncoderException("", Encoding::E_UNAVAILABLE_CODE_POINT)'; + return 'new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)'; } else { return decodeURIComponent(url); } @@ -32,10 +32,33 @@ function encodeCodePoint(code, fatal) { return bytes; } +function encodeCodePoints(codes, fatal) { + for (let a = 0; a < codes.length; a++) { + if (codes[a] < 0 || codes[a] > 0x10FFFF) { + return 'new EncoderException("", Coder::E_INVALID_CODE_POINT)'; + } + } + var l = document.createElement("a"); + l.href = "http://example.com/?" + String.fromCodePoint(...codes) + "#"; + var bytes = []; + let url = decodeURIComponent(l.search.substr(1)); + if (fatal && url.indexOf("&#") > -1) { + return 'new EncoderException("", Coder::E_UNAVAILABLE_CODE_POINT)'; + } + for (let a = 0; a < url.length; a++) { + bytes.push(url.charCodeAt(a).toString(16).padStart(2, "0").toUpperCase()); + } + return bytes; +} + function wrapCodePoint(code, fatal) { - var out = encodeCodePoint(code, fatal); + if (typeof code === "number") { + var out = encodeCodePoint(code, fatal); + } else { + var out = encodeCodePoints(code, fatal); + } if (Array.isArray(out)) { - return '"' + out.join(" ") + '"'; + return ('"' + out.join(" ") + '"').toUpperCase(); } else if (out.charAt(0) == "&") { return 'bin2hex("' + out + '")'; } else { @@ -72,9 +95,21 @@ if(typeof sampleStrings != 'undefined') { if(typeof sampleCharacters != 'undefined') { for (name in sampleCharacters) { let code = sampleCharacters[name]; - if (code > -1 && code % 1 == 0) code = "0x" + code.toString(16).toUpperCase(); - let line1 = "'" + name + " (HTML)' => [false, " + code + ", " + wrapCodePoint(code, false) + "],\n"; - let line2 = "'" + name + " (fatal)' => [true, " + code + ", " + wrapCodePoint(code, true) + "],\n"; + if (typeof code == "number" && code > -1 && code % 1 == 0) { + var displayCode = "0x" + code.toString(16).toUpperCase(); + } else if (typeof code !== "number") { + var displayCode = [...code]; + for (let a = 0; a < displayCode.length; a++) { + if (displayCode[a] > -1 && displayCode[a] % 1 == 0) { + displayCode[a] = "0x" + displayCode[a].toString(16).toUpperCase(); + } + } + displayCode = "[" + displayCode.join(", ") + "]"; + } else { + var displayCode = code; + } + let line1 = "'" + name + " (HTML)' => [false, " + displayCode + ", " + wrapCodePoint(code, false) + "],\n"; + let line2 = "'" + name + " (fatal)' => [true, " + displayCode + ", " + wrapCodePoint(code, true) + "],\n"; out.appendChild(document.createTextNode(line1)); out.appendChild(document.createTextNode(line2)); }