diff -r e8b3083bb148 Doc/library/codecs.rst --- a/Doc/library/codecs.rst Sat Nov 22 22:14:41 2014 -0800 +++ b/Doc/library/codecs.rst Sun Dec 14 23:02:12 2014 +0900 @@ -1023,7 +1023,8 @@ +-----------------+--------------------------------+--------------------------------+ | cp875 | | Greek | +-----------------+--------------------------------+--------------------------------+ -| cp932 | 932, ms932, mskanji, ms-kanji | Japanese | +| cp932 | 932, ms932, mskanji, ms-kanji, | Japanese | +| | windows-31j | | +-----------------+--------------------------------+--------------------------------+ | cp949 | 949, ms949, uhc | Korean | +-----------------+--------------------------------+--------------------------------+ @@ -1058,6 +1059,15 @@ +-----------------+--------------------------------+--------------------------------+ | cp1258 | windows-1258 | Vietnamese | +-----------------+--------------------------------+--------------------------------+ +| cp50220 | 50220, cscp50220, | Japanese | +| | x_windows_iso2022jp | | ++-----------------+--------------------------------+--------------------------------+ +| cp50221 | 50221, cscp50221 | Japanese | ++-----------------+--------------------------------+--------------------------------+ +| cp50222 | 50222, cscp50222 | Japanese | ++-----------------+--------------------------------+--------------------------------+ +| cp51932 | 51932, cscp51932 | Japanese | ++-----------------+--------------------------------+--------------------------------+ | cp65001 | | Windows only: Windows UTF-8 | | | | (``CP_UTF8``) | | | | | @@ -1065,6 +1075,8 @@ +-----------------+--------------------------------+--------------------------------+ | euc_jp | eucjp, ujis, u-jis | Japanese | +-----------------+--------------------------------+--------------------------------+ +| eucjp_ms | eucjpms, euc-jp-ms | Japanese | ++-----------------+--------------------------------+--------------------------------+ | euc_jis_2004 | jisx0213, eucjis2004 | Japanese | +-----------------+--------------------------------+--------------------------------+ | euc_jisx0213 | eucjisx0213 | Japanese | @@ -1099,6 +1111,8 @@ +-----------------+--------------------------------+--------------------------------+ | iso2022_jp_ext | iso2022jp-ext, iso-2022-jp-ext | Japanese | +-----------------+--------------------------------+--------------------------------+ +| iso2022_jp_ms | iso2022jp-ms, iso-2022-jp-ms | Japanese | ++-----------------+--------------------------------+--------------------------------+ | iso2022_kr | csiso2022kr, iso2022kr, | Korean | | | iso-2022-kr | | +-----------------+--------------------------------+--------------------------------+ diff -r e8b3083bb148 Lib/encodings/aliases.py --- a/Lib/encodings/aliases.py Sat Nov 22 22:14:41 2014 -0800 +++ b/Lib/encodings/aliases.py Sun Dec 14 23:02:12 2014 +0900 @@ -209,6 +209,24 @@ 'ms932' : 'cp932', 'mskanji' : 'cp932', 'ms_kanji' : 'cp932', + 'windows_31j' : 'cp932', + + # cp50220 codec + '50220' : 'cp50220', + 'cscp50220' : 'cp50220', + 'x_windows_iso2022jp': 'cp50220', + + # cp50221 codec + '50221' : 'cp50221', + 'cscp50221' : 'cp50221', + + # cp50222 codec + '50222' : 'cp50222', + 'cscp50222' : 'cp50222', + + # cp51932 codec + '51932' : 'cp51932', + 'cscp51932' : 'cp51932', # cp949 codec '949' : 'cp949', @@ -232,6 +250,10 @@ 'ujis' : 'euc_jp', 'u_jis' : 'euc_jp', + # eucjp_ms codec + 'eucjpms' : 'eucjp_ms', + 'euc_jp_ms' : 'eucjp_ms', + # euc_kr codec 'euckr' : 'euc_kr', 'korean' : 'euc_kr', @@ -297,6 +319,10 @@ 'iso2022jp_ext' : 'iso2022_jp_ext', 'iso_2022_jp_ext' : 'iso2022_jp_ext', + # iso2022_jp_ms codec + 'iso2022jp_ms' : 'iso2022_jp_ms', + 'iso_2022_jp_ms' : 'iso2022_jp_ms', + # iso2022_kr codec 'csiso2022kr' : 'iso2022_kr', 'iso2022kr' : 'iso2022_kr', diff -r e8b3083bb148 Lib/encodings/cp50220.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/encodings/cp50220.py Sun Dec 14 23:02:12 2014 +0900 @@ -0,0 +1,39 @@ +# +# cp50220.py: Python Unicode Codec for CP50220 +# +# Written by Hye-Shik Chang +# + +import _codecs_iso2022, codecs +import _multibytecodec as mbc + +codec = _codecs_iso2022.getcodec('cp50220') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='cp50220', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff -r e8b3083bb148 Lib/encodings/cp50221.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/encodings/cp50221.py Sun Dec 14 23:02:12 2014 +0900 @@ -0,0 +1,39 @@ +# +# cp50221.py: Python Unicode Codec for CP50221 +# +# Written by Hye-Shik Chang +# + +import _codecs_iso2022, codecs +import _multibytecodec as mbc + +codec = _codecs_iso2022.getcodec('cp50221') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='cp50221', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff -r e8b3083bb148 Lib/encodings/cp50222.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/encodings/cp50222.py Sun Dec 14 23:02:12 2014 +0900 @@ -0,0 +1,39 @@ +# +# cp50222.py: Python Unicode Codec for CP50222 +# +# Written by Hye-Shik Chang +# + +import _codecs_iso2022, codecs +import _multibytecodec as mbc + +codec = _codecs_iso2022.getcodec('cp50222') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='cp50222', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff -r e8b3083bb148 Lib/encodings/cp51932.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/encodings/cp51932.py Sun Dec 14 23:02:12 2014 +0900 @@ -0,0 +1,39 @@ +# +# cp51932.py: Python Unicode Codec for CP51932 +# +# Written by Hye-Shik Chang +# + +import _codecs_jp, codecs +import _multibytecodec as mbc + +codec = _codecs_jp.getcodec('cp51932') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='cp51932', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff -r e8b3083bb148 Lib/encodings/eucjp_ms.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/encodings/eucjp_ms.py Sun Dec 14 23:02:12 2014 +0900 @@ -0,0 +1,39 @@ +# +# eucjp_ms.py: Python Unicode Codec for eucJP-ms +# +# Written by Hye-Shik Chang +# + +import _codecs_jp, codecs +import _multibytecodec as mbc + +codec = _codecs_jp.getcodec('eucjp_ms') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='eucjp_ms', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff -r e8b3083bb148 Lib/encodings/iso2022_jp_ms.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/encodings/iso2022_jp_ms.py Sun Dec 14 23:02:12 2014 +0900 @@ -0,0 +1,39 @@ +# +# iso2022_jp_ms.py: Python Unicode Codec for ISO2022_JP_MS +# +# Written by Hye-Shik Chang +# + +import _codecs_iso2022, codecs +import _multibytecodec as mbc + +codec = _codecs_iso2022.getcodec('iso2022_jp_ms') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='iso2022_jp_ms', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff -r e8b3083bb148 Lib/test/cjkencodings/cp50220-utf8.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/test/cjkencodings/cp50220-utf8.txt Sun Dec 14 23:02:12 2014 +0900 @@ -0,0 +1,30 @@ +Python の開発は、1990 年ごろから開始されています。 +開発者の Guido van Rossum は教育用のプログラミング言語「ABC」の開発に参加していましたが、ABC は実用上の目的にはあまり適していませんでした。 +このため、Guido はより実用的なプログラミング言語の開発を開始し、英国 BBS 放送のコメディ番組「モンティ パイソン」のファンである Guido はこの言語を「Python」と名づけ +ました。 +このような背景から生まれた Python の言語設計は、「シンプル」で「習得が容易」という目標に重点が置かれています。 +多くのスクリプト系言語ではユーザの目先の利便性を優先して色々な機能を言語要素として取り入れる場合が多いのですが、Python ではそういった小細工が追加されることはあまりありません。 +言語自体の機能は最小限に押さえ、必要な機能は拡張モジュールとして追加する、というのが Python のポリシーです。 + +JIS X 0208 記号(2区) +==================== +◆□■△▲▽▼※〒→←↑↓〓 +∈∋⊆⊇⊂⊃∪∩ +∧∨¬⇒⇔∀∃ +∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬ +ʼn♯♭♪†‡¶◯ + +NEC特殊文字 +=========== +①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ +ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ +㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻ +㎜㎝㎞㎎㎏㏄㎡ +㍻〝〟№㏍℡㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼ +∮∑∟⊿ + +NEC選定IBM拡張文字 +================== +纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖 +飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑 +ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ¦'" diff -r e8b3083bb148 Lib/test/cjkencodings/cp50220.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/test/cjkencodings/cp50220.txt Sun Dec 14 23:02:12 2014 +0900 @@ -0,0 +1,30 @@ +Python $B$N3+H/$O!"(B1990 $BG/$4$m$+$i3+;O$5$l$F$$$^$9!#(B +$B3+H/e$NL\E*$K$O$"$^$jE,$7$F$$$^$;$s$G$7$?!#(B +$B$3$N$?$a!"(BGuido $B$O$h$j$E$1(B +$B$^$7$?!#(B +$B$3$N$h$&$JGX7J$+$i@8$^$l$?(B Python $B$N8@8l@_7W$O!"!V%7%s%W%k!W$G!V=,F@$,MF0W!W$H$$$&L\I8$K=EE@$,CV$+$l$F$$$^$9!#(B +$BB?$/$N%9%/%j%W%H7O8@8l$G$O%f!<%6$NL\@h$NMxJX@-$rM%@h$7$F?'!9$J5!G=$r8@8lMWAG$H$7$Fl9g$,B?$$$N$G$9$,!"(BPython $B$G$O$=$&$$$C$?>.:Y9)$,DI2C$5$l$k$3$H$O$"$^$j$"$j$^$;$s!#(B +$B8@8l<+BN$N5!G=$O:G>.8B$K2!$5$(!"I,MW$J5!G=$O3HD%%b%8%e!<%k$H$7$FDI2C$9$k!"$H$$$&$N$,(B Python $B$N%]%j%7!<$G$9!#(B + +JIS X 0208 $B5-9f(B(2$B6h(B) +==================== +$B"!"""#"$"%"&"'"(")"*"+","-".(B +$B":";"<"=">"?"@"A(B +$B"J"K"L"M"N"O"P(B +$B"\"]"^"_"`"a"b"c"d"e"f"g"h"i"j(B +$B"r"s"t"u"v"w"x"y"~(B + +NEC$BFC(B +$B-@-A-B-C-D-E-F-G-H-I-J-K-L-M-N-O(B +$B-P-Q-R-S-T-U-V(B +$B-_-`-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o(B +$B-s-t-x-y(B + +NEC$BA*Dj(BIBM$B3HD%J8;z(B +================== +$By!y"y#y$y%y&y'y(y)y*y+y,y-y.y/y0y1y2y3(B +$B|\|]|^|_|`|a|b|c|d|e|f|g|h|i|j|k|l|m|n(B +$B|q|r|s|t|u|v|w|x|y|z|||}|~(B diff -r e8b3083bb148 Lib/test/test_codecencodings_iso2022.py --- a/Lib/test/test_codecencodings_iso2022.py Sat Nov 22 22:14:41 2014 -0800 +++ b/Lib/test/test_codecencodings_iso2022.py Sun Dec 14 23:02:12 2014 +0900 @@ -8,7 +8,9 @@ # invalid bytes (b'ab\xFFcd', 'replace', 'ab\uFFFDcd'), (b'ab\x1Bdef', 'replace', 'ab\x1Bdef'), - (b'ab\x1B$def', 'replace', 'ab\uFFFD'), + (b'ab\x1B$def', 'replace', 'ab\uFFFDef'), + (b'ab\x1B$defghijklmnop', 'replace', 'ab\uFFFDefghijklmnop'), + (b'ab\x1B$defghijklmnopq', 'replace', 'ab\uFFFDefghijklmnopq'), ) class Test_ISO2022_JP(multibytecodec_support.TestBase, unittest.TestCase): @@ -25,6 +27,61 @@ (b'ab\x1BNdef', 'replace', 'abdef'), ) +class Test_ISO2022_JPMS(multibytecodec_support.TestBase, unittest.TestCase): + encoding = 'iso2022_jp_ms' + tstring = multibytecodec_support.load_teststring('cp50220') + codectests = COMMON_CODEC_TESTS + ( + (b'ab\x1BNdef', 'replace', 'ab\x1BNdef'), + # JIS X 0201 Kantakana + (b'ab\x1B(I\x31\x32\x33\x1B(B', 'replace', 'ab\uFF71\uFF72\uFF73'), + ('ab\uFF71\uFF72\uFF73','replace', b'ab\x1B(I\x31\x32\x33\x1B(B'), + # User-Defined Character + (b'ab\x1B$(?\x21\x21\x34\x7E\x1B(B', 'replace', 'ab\uE000\uE757'), + ('ab\uE000\uE757', 'replace', b'ab\x1B$(?\x21\x21\x34\x7E\x1B(B'), + ) + +class Test_CP50220(multibytecodec_support.TestBase, unittest.TestCase): + encoding = 'cp50220' + tstring = multibytecodec_support.load_teststring('cp50220') + codectests = COMMON_CODEC_TESTS + ( + (b'ab\x1BNdef', 'replace', 'ab\x1BNdef'), + # JIS X 0201 Kantakana + (b'ab\x1B(I\x31\x36\x5e\x1B(B', 'replace', 'ab\uFF71\uff76\uff9e'), + (b'ab\x0e\x31\x36\x5e\x0f', 'replace', 'ab\uFF71\uff76\uff9e'), + ('ab\uFF71\uff76\uff9e', 'replace', b'ab\x1b$B\x25\x22\x25\x2c\x1b(B'), + # User-Defined Character + (b'ab\x1B$B\x7F\x21\x92\x7E\x1B(B', 'replace', 'ab\uE000\uE757'), + ('ab\uE000\uE757', 'replace', b'ab\x1B$B\x7F\x21\x92\x7E\x1B(B'), + ) + +class Test_CP50221(multibytecodec_support.TestBase, unittest.TestCase): + encoding = 'cp50221' + tstring = multibytecodec_support.load_teststring('cp50220') + codectests = COMMON_CODEC_TESTS + ( + (b'ab\x1BNdef', 'replace', 'ab\x1BNdef'), + # JIS X 0201 Kantakana + (b'ab\x1B(I\x31\x36\x5e\x1B(B', 'replace', 'ab\uFF71\uff76\uff9e'), + (b'ab\x0e\x31\x36\x5e\x0f', 'replace', 'ab\uFF71\uff76\uff9e'), + ('ab\uFF71\uff76\uff9e', 'replace', b'ab\x1B(I\x31\x36\x5e\x1b(B'), + # User-Defined Character + (b'ab\x1B$B\x7F\x21\x92\x7E\x1B(B', 'replace', 'ab\uE000\uE757'), + ('ab\uE000\uE757', 'replace', b'ab\x1B$B\x7F\x21\x92\x7E\x1B(B'), + ) + +class Test_CP50222(multibytecodec_support.TestBase, unittest.TestCase): + encoding = 'cp50222' + tstring = multibytecodec_support.load_teststring('cp50220') + codectests = COMMON_CODEC_TESTS + ( + (b'ab\x1BNdef', 'replace', 'ab\x1BNdef'), + # JIS X 0201 Kantakana + (b'ab\x1B(I\x31\x36\x5e\x1B(B', 'replace', 'ab\uFF71\uff76\uff9e'), + (b'ab\x0e\x31\x36\x5e\x0f', 'replace', 'ab\uFF71\uff76\uff9e'), + ('ab\uFF71\uff76\uff9e', 'replace', b'ab\x0e\x31\x36\x5e\x0f'), + # User-Defined Character + (b'ab\x1B$B\x7F\x21\x92\x7E\x1B(B', 'replace', 'ab\uE000\uE757'), + ('ab\uE000\uE757', 'replace', b'ab\x1B$B\x7F\x21\x92\x7E\x1B(B'), + ) + class Test_ISO2022_KR(multibytecodec_support.TestBase, unittest.TestCase): encoding = 'iso2022_kr' tstring = multibytecodec_support.load_teststring('iso2022_kr') diff -r e8b3083bb148 Lib/test/test_codecs.py --- a/Lib/test/test_codecs.py Sat Nov 22 22:14:41 2014 -0800 +++ b/Lib/test/test_codecs.py Sun Dec 14 23:02:12 2014 +0900 @@ -1723,6 +1723,7 @@ "euc_jis_2004", "euc_jisx0213", "euc_jp", + "eucjp_ms", "euc_kr", "gb18030", "gb2312", @@ -1736,6 +1737,7 @@ "iso2022_jp_2004", "iso2022_jp_3", "iso2022_jp_ext", + "iso2022_jp_ms", "iso2022_kr", "iso8859_1", "iso8859_10", diff -r e8b3083bb148 Lib/test/test_multibytecodec.py --- a/Lib/test/test_multibytecodec.py Sat Nov 22 22:14:41 2014 -0800 +++ b/Lib/test/test_multibytecodec.py Sun Dec 14 23:02:12 2014 +0900 @@ -14,15 +14,15 @@ # _codecs_hk 'big5hkscs', # _codecs_jp - 'cp932', 'shift_jis', 'euc_jp', 'euc_jisx0213', 'shift_jisx0213', - 'euc_jis_2004', 'shift_jis_2004', + 'cp932', 'shift_jis', 'euc_jp', 'eucjp_ms', 'euc_jisx0213', + 'shift_jisx0213', 'euc_jis_2004', 'shift_jis_2004', # _codecs_kr 'cp949', 'euc_kr', 'johab', # _codecs_tw 'big5', 'cp950', # _codecs_iso2022 'iso2022_jp', 'iso2022_jp_1', 'iso2022_jp_2', 'iso2022_jp_2004', - 'iso2022_jp_3', 'iso2022_jp_ext', 'iso2022_kr', + 'iso2022_jp_3', 'iso2022_jp_ext', 'iso2022_jp_ms', 'iso2022_kr', ] class Test_MultibyteCodec(unittest.TestCase): diff -r e8b3083bb148 Lib/test/test_xml_etree.py --- a/Lib/test/test_xml_etree.py Sat Nov 22 22:14:41 2014 -0800 +++ b/Lib/test/test_xml_etree.py Sun Dec 14 23:02:12 2014 +0900 @@ -703,7 +703,7 @@ 'mac-cyrillic', 'mac-greek', 'mac-iceland', 'mac-latin2', 'mac-roman', 'mac-turkish', 'iso2022-jp', 'iso2022-jp-1', 'iso2022-jp-2', 'iso2022-jp-2004', - 'iso2022-jp-3', 'iso2022-jp-ext', + 'iso2022-jp-3', 'iso2022-jp-ext', 'iso2022-jp-ms', 'koi8-r', 'koi8-u', 'hz', 'ptcp154', ] @@ -713,7 +713,7 @@ unsupported_ascii_compatible_encodings = [ 'big5', 'big5hkscs', 'cp932', 'cp949', 'cp950', - 'euc-jp', 'euc-jis-2004', 'euc-jisx0213', 'euc-kr', + 'euc-jp', 'eucjp-ms', 'euc-jis-2004', 'euc-jisx0213', 'euc-kr', 'gb2312', 'gbk', 'gb18030', 'iso2022-kr', 'johab', 'shift-jis', 'shift-jis-2004', 'shift-jisx0213', diff -r e8b3083bb148 Modules/cjkcodecs/_codecs_iso2022.c --- a/Modules/cjkcodecs/_codecs_iso2022.c Sat Nov 22 22:14:41 2014 -0800 +++ b/Modules/cjkcodecs/_codecs_iso2022.c Sun Dec 14 23:02:12 2014 +0900 @@ -9,58 +9,86 @@ #define EXTERN_JISX0213_PAIR #define EMULATE_JISX0213_2000_ENCODE_INVALID MAP_UNMAPPABLE #define EMULATE_JISX0213_2000_DECODE_INVALID MAP_UNMAPPABLE +#define EXTERN_CP50220_K #include "cjkcodecs.h" #include "alg_jisx0201.h" #include "emu_jisx0213_2000.h" #include "mappings_jisx0213_pair.h" +#include "mappings_cp50220_k.h" /* STATE - state->c[0-3] + state->cs[0-3] - 00000000 - ||^^^^^| - |+-----+---- G0-3 Character Set - +----------- Is G0-3 double byte? + 0000000000000000 + ||^^^^^|||^^^^^| + || ||+-----+---- G0-3 Character Set + || |+----------- Is G0-3 double byte? + |+-----+------------ G0-3 Revision number + +------------------- Is G0-3 96 character set? - state->c[4] + state->cs[4] - 00000000 - || - |+---- Locked-Shift? - +----- ESC Throughout + 0000000000000000 + |||| + |||+---- Locked-Shift? + ||+----- ESC Throughout + |+------ Use rows 95 through 120 + +------- Decode GR + + state->cs[5] + + 0000000000000000 + |^^^^^^^^^^^^^^| + +--------------+---- working area for IRR(IDENTIFY-REVISED-REGISTRATION) */ #define ESC 0x1B #define SO 0x0E #define SI 0x0F #define LF 0x0A +#define SPC 0x20 +#define DEL 0x7F -#define MAX_ESCSEQLEN 16 +#define IRR_SEQLEN 3 /* ESC '&' Ft */ -#define CHARSET_ISO8859_1 'A' -#define CHARSET_ASCII 'B' -#define CHARSET_ISO8859_7 'F' -#define CHARSET_JISX0201_K 'I' -#define CHARSET_JISX0201_R 'J' +#define CHARSET_SBCS 0x0000 +#define CHARSET_DBCS 0x0080 +#define CHARSET_94 0x0000 +#define CHARSET_96 0x8000 -#define CHARSET_GB2312 ('A'|CHARSET_DBCS) -#define CHARSET_JISX0208 ('B'|CHARSET_DBCS) -#define CHARSET_KSX1001 ('C'|CHARSET_DBCS) -#define CHARSET_JISX0212 ('D'|CHARSET_DBCS) -#define CHARSET_GB2312_8565 ('E'|CHARSET_DBCS) -#define CHARSET_CNS11643_1 ('G'|CHARSET_DBCS) -#define CHARSET_CNS11643_2 ('H'|CHARSET_DBCS) -#define CHARSET_JISX0213_2000_1 ('O'|CHARSET_DBCS) -#define CHARSET_JISX0213_2 ('P'|CHARSET_DBCS) -#define CHARSET_JISX0213_2004_1 ('Q'|CHARSET_DBCS) -#define CHARSET_JISX0208_O ('@'|CHARSET_DBCS) +#define CHARSET_PACK(cs, db, n, rev) ((n) | ((rev) << 8) | (db) | (cs)) + +#define CHARSET_ISO8859_1 CHARSET_PACK('A',CHARSET_SBCS,CHARSET_96,0) +#define CHARSET_ASCII CHARSET_PACK('B',CHARSET_SBCS,CHARSET_94,0) +#define CHARSET_ISO8859_7 CHARSET_PACK('F',CHARSET_SBCS,CHARSET_96,0) +#define CHARSET_JISX0201_K CHARSET_PACK('I',CHARSET_SBCS,CHARSET_94,0) +#define CHARSET_JISX0201_R CHARSET_PACK('J',CHARSET_SBCS,CHARSET_94,0) -#define CHARSET_DBCS 0x80 -#define ESCMARK(mark) ((mark) & 0x7f) +#define CHARSET_JISX0208_1978 CHARSET_PACK('@',CHARSET_DBCS,CHARSET_94,0) +#define CHARSET_GB2312 CHARSET_PACK('A',CHARSET_DBCS,CHARSET_94,0) +#define CHARSET_JISX0208_1983 CHARSET_PACK('B',CHARSET_DBCS,CHARSET_94,0) +#define CHARSET_JISX0208_1990 CHARSET_PACK('B',CHARSET_DBCS,CHARSET_94,'@') +#define CHARSET_KSX1001 CHARSET_PACK('C',CHARSET_DBCS,CHARSET_94,0) +#define CHARSET_JISX0212 CHARSET_PACK('D',CHARSET_DBCS,CHARSET_94,0) +#define CHARSET_GB2312_8565 CHARSET_PACK('E',CHARSET_DBCS,CHARSET_94,0) +#define CHARSET_CNS11643_1 CHARSET_PACK('G',CHARSET_DBCS,CHARSET_94,0) +#define CHARSET_CNS11643_2 CHARSET_PACK('H',CHARSET_DBCS,CHARSET_94,0) +#define CHARSET_JISX0213_2000_1 CHARSET_PACK('O',CHARSET_DBCS,CHARSET_94,0) +#define CHARSET_JISX0213_2 CHARSET_PACK('P',CHARSET_DBCS,CHARSET_94,0) +#define CHARSET_JISX0213_2004_1 CHARSET_PACK('Q',CHARSET_DBCS,CHARSET_94,0) +#define CHARSET_ISO2022JPMS_UDC CHARSET_PACK('?',CHARSET_DBCS,CHARSET_94,0) -#define IS_ESCEND(c) (((c) >= 'A' && (c) <= 'Z') || (c) == '@') +#define CHARSET_GETREVISION(mark) (((mark) & 0x7f00) >> 8) +#define CHARSET_IS_94SET(mark) (~(mark) & CHARSET_96) +#define CHARSET_IS_96SET(mark) ( (mark) & CHARSET_96) +#define ESCMARK(mark) ((mark) & 0x007f) + +#define IS_ESC_I(c) ((c) >= 0x20 && (c) <= 0x2f) +#define IS_ESC_F(c) ((c) >= 0x30 && (c) <= 0x7e) +#define IS_ESC_Fp(c) ((c) >= 0x30 && (c) <= 0x3f) +#define IS_ESC_Ft(c) ((c) >= 0x40 && (c) <= 0x7e) #define IS_ISO2022ESC(c2) \ ((c2) == '(' || (c2) == ')' || (c2) == '$' || \ (c2) == '.' || (c2) == '&') @@ -73,8 +101,8 @@ #define F_SHIFTED 0x01 #define F_ESCTHROUGHOUT 0x02 -#define STATE_SETG(dn, v) do { ((state)->c[dn]) = (v); } while (0) -#define STATE_GETG(dn) ((state)->c[dn]) +#define STATE_SETG(dn, v) do { ((state)->cs[dn]) = (v); } while (0) +#define STATE_GETG(dn) ((state)->cs[dn]) #define STATE_G0 STATE_GETG(0) #define STATE_G1 STATE_GETG(1) @@ -85,10 +113,13 @@ #define STATE_SETG2(v) STATE_SETG(2, v) #define STATE_SETG3(v) STATE_SETG(3, v) -#define STATE_SETFLAG(f) do { ((state)->c[4]) |= (f); } while (0) -#define STATE_GETFLAG(f) ((state)->c[4] & (f)) -#define STATE_CLEARFLAG(f) do { ((state)->c[4]) &= ~(f); } while (0) -#define STATE_CLEARFLAGS() do { ((state)->c[4]) = 0; } while (0) +#define STATE_SETFLAG(f) do { ((state)->cs[4]) |= (f); } while (0) +#define STATE_GETFLAG(f) ((state)->cs[4] & (f)) +#define STATE_CLEARFLAG(f) do { ((state)->cs[4]) &= ~(f); } while (0) +#define STATE_CLEARFLAGS() do { ((state)->cs[4]) = 0; } while (0) + +#define STATE_SETREVISION(r) do { ((state)->cs[5]) = (r); } while (0) +#define STATE_REVISION ((state)->cs[5]) #define ISO2022_CONFIG ((const struct iso2022_config *)config) #define CONFIG_ISSET(flag) (ISO2022_CONFIG->flags & (flag)) @@ -97,7 +128,8 @@ /* iso2022_config.flags */ #define NO_SHIFT 0x01 #define USE_G2 0x02 -#define USE_JISX0208_EXT 0x04 +#define USE_ROW95_120 0x04 +#define DECODE_GR 0x08 /*-*- internal data structures -*-*/ @@ -106,7 +138,7 @@ typedef DBCHAR (*iso2022_encode_func)(const Py_UCS4 *data, Py_ssize_t *length); struct iso2022_designation { - unsigned char mark; + CHARSET mark; unsigned char plane; unsigned char width; iso2022_init_func initializer; @@ -181,6 +213,7 @@ encoded = MAP_UNMAPPABLE; for (dsg = CONFIG_DESIGNATIONS; dsg->mark; dsg++) { + Py_UCS4 pair[2]; Py_ssize_t length = 1; encoded = dsg->encoder(&c, &length); if (encoded == MAP_MULTIPLE_AVAIL) { @@ -189,11 +222,15 @@ if (inlen - *inpos < 2) { if (!(flags & MBENC_FLUSH)) return MBERR_TOOFEW; + pair[0] = c; length = -1; } - else + else { + pair[0] = c; + pair[1] = INCHAR2; length = 2; - encoded = dsg->encoder(&c, &length); + } + encoded = dsg->encoder(pair, &length); if (encoded != MAP_UNMAPPABLE) { insize = length; break; @@ -215,26 +252,46 @@ NEXT_OUT(1); } if (STATE_G0 != dsg->mark) { + unsigned char revision = CHARSET_GETREVISION(dsg->mark); + + if (revision != 0) { + WRITEBYTE3(ESC, '&', revision); + NEXT_OUT(3); + } + if (dsg->width == 1) { WRITEBYTE3(ESC, '(', ESCMARK(dsg->mark)); STATE_SETG0(dsg->mark); NEXT_OUT(3); } - else if (dsg->mark == CHARSET_JISX0208) { - WRITEBYTE3(ESC, '$', ESCMARK(dsg->mark)); - STATE_SETG0(dsg->mark); - NEXT_OUT(3); - } else { - WRITEBYTE4(ESC, '$', '(', - ESCMARK(dsg->mark)); - STATE_SETG0(dsg->mark); - NEXT_OUT(4); + switch (dsg->mark) { + case CHARSET_JISX0208_1978: /* ESC '$' '@' */ + case CHARSET_GB2312: /* ESC '$' 'A' */ + case CHARSET_JISX0208_1983: /* ESC '$' 'B' */ + case CHARSET_JISX0208_1990: /* ESC '$' 'B' */ + WRITEBYTE3(ESC, '$', ESCMARK(dsg->mark)); + STATE_SETG0(dsg->mark); + NEXT_OUT(3); + break; + default: /* ESC '$' '(' F */ + WRITEBYTE4(ESC, '$', '(', ESCMARK(dsg->mark)); + STATE_SETG0(dsg->mark); + NEXT_OUT(4); + break; + } } } break; case 1: /* G1 */ if (STATE_G1 != dsg->mark) { + unsigned char revision = CHARSET_GETREVISION(dsg->mark); + + if (revision != 0) { + WRITEBYTE3(ESC, '&', revision); + NEXT_OUT(3); + } + if (dsg->width == 1) { WRITEBYTE3(ESC, ')', ESCMARK(dsg->mark)); STATE_SETG1(dsg->mark); @@ -247,6 +304,13 @@ } } if (!STATE_GETFLAG(F_SHIFTED)) { + if (STATE_G0 != CHARSET_ASCII && + STATE_G1 == CHARSET_JISX0201_K) + { + WRITEBYTE3(ESC, '(', 'B'); + STATE_SETG0(CHARSET_ASCII); + NEXT_OUT(3); + } WRITEBYTE1(SO); STATE_SETFLAG(F_SHIFTED); NEXT_OUT(1); @@ -274,6 +338,7 @@ DECODER_INIT(iso2022) { STATE_CLEARFLAGS(); + STATE_SETREVISION(0); STATE_SETG0(CHARSET_ASCII); STATE_SETG1(CHARSET_ASCII); STATE_SETG2(CHARSET_ASCII); @@ -288,67 +353,98 @@ } static Py_ssize_t +iso2022esclen(Py_ssize_t *esclen, const unsigned char **inbuf, Py_ssize_t inleft) +{ + REQUIRE_INBUF(2); + if (IS_ESC_F(INBYTE2)) /* ESC F */ + *esclen = 2; + else if (IS_ESC_I(INBYTE2)) { + REQUIRE_INBUF(3); + if (IS_ESC_F(INBYTE3)) /* ESC I F */ + *esclen = 3; + else if (IS_ESC_I(INBYTE3)) { + REQUIRE_INBUF(4); + if (IS_ESC_F(INBYTE4)) /* ESC I I F */ + *esclen = 4; + else + return 3; + } + else + return 2; + } + else + return 1; + return 0; +} + +static Py_ssize_t iso2022processesc(const void *config, MultibyteCodec_State *state, const unsigned char **inbuf, Py_ssize_t *inleft) { - unsigned char charset, designation; - Py_ssize_t i, esclen; + CHARSET charset; + unsigned char designation; + Py_ssize_t err, esclen; - for (i = 1;i < MAX_ESCSEQLEN;i++) { - if (i >= *inleft) - return MBERR_TOOFEW; - if (IS_ESCEND((*inbuf)[i])) { - esclen = i + 1; - break; - } - else if (CONFIG_ISSET(USE_JISX0208_EXT) && i+1 < *inleft && - (*inbuf)[i] == '&' && (*inbuf)[i+1] == '@') { - i += 2; - } - } - - if (i >= MAX_ESCSEQLEN) - return 1; /* unterminated escape sequence */ + err = iso2022esclen(&esclen, inbuf, *inleft); + if (err != 0) + return err; switch (esclen) { case 3: - if (INBYTE2 == '$') { - charset = INBYTE3 | CHARSET_DBCS; + switch (INBYTE2) { + case '&': + if (IS_ESC_Ft(INBYTE3)) { /* IDENTIFY-REVISED-REGISTRATION */ + STATE_SETREVISION(INBYTE3); + *inleft -= esclen; + (*inbuf) += esclen; + return 0; + } + return 3; + case '$': + charset = CHARSET_PACK(INBYTE3, CHARSET_DBCS, CHARSET_94, + STATE_REVISION); designation = 0; - } - else { - charset = INBYTE3; - if (INBYTE2 == '(') - designation = 0; - else if (INBYTE2 == ')') - designation = 1; - else if (CONFIG_ISSET(USE_G2) && INBYTE2 == '.') + break; + case '(': + charset = CHARSET_PACK(INBYTE3, CHARSET_SBCS, CHARSET_94, + STATE_REVISION); + designation = 0; + break; + case ')': + charset = CHARSET_PACK(INBYTE3, CHARSET_SBCS, CHARSET_94, + STATE_REVISION); + designation = 1; + break; + case '.': + if (CONFIG_ISSET(USE_G2)) { + charset = CHARSET_PACK(INBYTE3, CHARSET_SBCS, CHARSET_96, + STATE_REVISION); designation = 2; - else - return 3; + break; + } + return 3; + default: + return 3; } break; case 4: if (INBYTE2 != '$') return 4; - - charset = INBYTE4 | CHARSET_DBCS; - if (INBYTE3 == '(') + + switch (INBYTE3) { + case '(': + charset = CHARSET_PACK(INBYTE4, CHARSET_DBCS, CHARSET_94, + STATE_REVISION); designation = 0; - else if (INBYTE3 == ')') + break; + case ')': + charset = CHARSET_PACK(INBYTE4, CHARSET_DBCS, CHARSET_94, + STATE_REVISION); designation = 1; - else + break; + default: return 4; - break; - case 6: /* designation with prefix */ - if (CONFIG_ISSET(USE_JISX0208_EXT) && - (*inbuf)[3] == ESC && (*inbuf)[4] == '$' && - (*inbuf)[5] == 'B') { - charset = 'B' | CHARSET_DBCS; - designation = 0; } - else - return 6; break; default: return esclen; @@ -362,8 +458,14 @@ if (dsg->mark == charset) break; } - if (!dsg->mark) + if (!dsg->mark) { + if (CHARSET_GETREVISION(charset) != 0) { + esclen += IRR_SEQLEN; + *inleft += IRR_SEQLEN; + (*inbuf) -= IRR_SEQLEN; + } return esclen; + } } STATE_SETG(designation, charset); @@ -431,35 +533,49 @@ if (STATE_GETFLAG(F_ESCTHROUGHOUT)) { /* ESC throughout mode: * for non-iso2022 escape sequences */ - OUTCHAR(c); /* assume as ISO-8859-1 */ - NEXT_IN(1); - if (IS_ESCEND(c)) { - STATE_CLEARFLAG(F_ESCTHROUGHOUT); - } + Py_ssize_t i, esclen; + + STATE_CLEARFLAG(F_ESCTHROUGHOUT); + err = iso2022esclen(&esclen, inbuf, inleft); + if (err != 0) + return err; + for (i = 0; i < esclen; i++) + OUTCHAR((*inbuf)[i]); /* assume as US-ASCII */ + NEXT_IN(esclen); continue; } + if (STATE_REVISION != 0 && c != ESC) + STATE_SETREVISION(0); + switch (c) { case ESC: REQUIRE_INBUF(2); if (IS_ISO2022ESC(INBYTE2)) { err = iso2022processesc(config, state, inbuf, &inleft); - if (err != 0) + if (err != 0) { + STATE_SETREVISION(0); return err; + } + if (STATE_REVISION != 0) + /* IRR Sequence */ + continue; } else if (CONFIG_ISSET(USE_G2) && INBYTE2 == 'N') {/* SS2 */ REQUIRE_INBUF(3); err = iso2022processg2(config, state, inbuf, &inleft, writer); - if (err != 0) + if (err != 0) { + STATE_SETREVISION(0); return err; + } } else { - OUTCHAR(ESC); STATE_SETFLAG(F_ESCTHROUGHOUT); - NEXT_IN(1); + continue; } + STATE_SETREVISION(0); break; case SI: if (CONFIG_ISSET(NO_SHIFT)) @@ -479,13 +595,9 @@ NEXT_IN(1); break; default: - if (c < 0x20) /* C0 */ - goto bypass; - else if (c >= 0x80) - return 1; - else { + { const struct iso2022_designation *dsg; - unsigned char charset; + CHARSET charset; Py_UCS4 decoded; if (STATE_GETFLAG(F_SHIFTED)) @@ -493,11 +605,46 @@ else charset = STATE_G0; + switch (charset) { + case CHARSET_JISX0208_1978: + case CHARSET_JISX0208_1983: + case CHARSET_JISX0208_1990: + if (CONFIG_ISSET(USE_ROW95_120)) { + if (c >= 0x99) + return 1; + else if (c >= 0x20) /* GL and rows 95 through 120 */ + break; + else /* C0 */ + goto bypass; + } + /* go to default */ + default: + if (c >= 0xa0) { /* GR */ + if (CONFIG_ISSET(DECODE_GR)) { + charset = STATE_G1; + break; + } + else + return 1; + } + else if (c >= 0x80) /* C1 */ + return 1; + else if (c >= 0x20) /* GL */ + if (CHARSET_IS_94SET(charset) && + (c == SPC || c == DEL)) + goto bypass; + else + break; + else /* C0 */ + goto bypass; + break; + } + if (charset == CHARSET_ASCII) { bypass: OUTCHAR(c); NEXT_IN(1); - break; + continue; } if (dsgcache != NULL && @@ -507,13 +654,13 @@ for (dsg = CONFIG_DESIGNATIONS; dsg->mark != charset #ifdef Py_DEBUG - && dsg->mark != '\0' + && dsg->mark != 0 #endif ; dsg++) { /* noop */ } - assert(dsg->mark != '\0'); + assert(dsg->mark != 0); dsgcache = dsg; } @@ -539,6 +686,56 @@ return 0; } +/*-*- cp5022x codec implementation -*-*/ + +#define cp5022x_codec_init iso2022_codec_init + +ENCODER_INIT(cp5022x) +{ + STATE_CLEARFLAGS(); + STATE_SETG0(CHARSET_ASCII); + STATE_SETG1(CHARSET_JISX0201_K); + return 0; +} + +ENCODER_RESET(cp5022x) +{ + if (STATE_GETFLAG(F_SHIFTED)) { + WRITEBYTE1(SI); + NEXT_OUT(1); + STATE_CLEARFLAG(F_SHIFTED); + } + if (STATE_G0 != CHARSET_ASCII) { + WRITEBYTE3(ESC, '(', 'B'); + NEXT_OUT(3); + STATE_SETG0(CHARSET_ASCII); + STATE_SETG1(CHARSET_JISX0201_K); + } + return 0; +} + +#define cp5022x_encode iso2022_encode + +DECODER_INIT(cp5022x) +{ + STATE_CLEARFLAGS(); + STATE_SETREVISION(0); + STATE_SETG0(CHARSET_ASCII); + STATE_SETG1(CHARSET_JISX0201_K); + STATE_SETG2(CHARSET_ASCII); + return 0; +} + +DECODER_RESET(cp5022x) +{ + STATE_SETG0(CHARSET_ASCII); + STATE_SETG1(CHARSET_JISX0201_K); + STATE_CLEARFLAG(F_SHIFTED); + return 0; +} + +#define cp5022x_decode iso2022_decode + /*-*- mapping table holders -*-*/ #define ENCMAP(enc) static const encode_map *enc##_encmap = NULL; @@ -558,6 +755,8 @@ ENCMAP(jisx0213_emp) DECMAP(jisx0213_1_emp) DECMAP(jisx0213_2_emp) +ENCMAP(jisx0208msext) +DECMAP(cp932ext) /* cn */ ENCMAP(gbcommon) @@ -621,7 +820,7 @@ jisx0208_decoder(const unsigned char *data) { Py_UCS4 u; - if (data[0] == 0x21 && data[1] == 0x40) /* F/W REVERSE SOLIDUS */ + if (data[0] == 0x21 && data[1] == 0x40) /* FULLWIDTH REVERSE SOLIDUS */ return 0xff3c; else if (TRYMAP_DEC(jisx0208, u, data[0], data[1])) return u; @@ -646,6 +845,154 @@ } static int +jisx0208msext_init(void) +{ + static int initialized = 0; + + if (!initialized && ( + jisx0208_init() || + IMPORT_MAP(jp, jisx0208msext, &jisx0208msext_encmap, NULL) || + IMPORT_MAP(jp, cp932ext, NULL, &cp932ext_decmap))) + return -1; + initialized = 1; + return 0; +} + +#define JIS_TO_SJIS(s, j) \ + do { \ + (s)[1] = ((((j)[0] - 0x21) & 1) ? 0x5e : 0) + ((j)[1] - 0x21); \ + (s)[0] = ((j)[0] - 0x21) >> 1; \ + (s)[0] = (s)[0] < 0x1f ? (s)[0] + 0x81 : (s)[0] + 0xc1; \ + (s)[1] = (s)[1] < 0x3f ? (s)[1] + 0x40 : (s)[1] + 0x41; \ + } while (0) + +static Py_UCS4 +jisx0208msext_decoder(const unsigned char *data) +{ + Py_UCS4 u; + unsigned char sjis[2]; + + if (data[1] < 0x21 || data[1] > 0x7e) + return MAP_UNMAPPABLE; + + if (data[0] >= 0x7f && data[0] <= 0x92) + /* User-Defined character */ + return 0xe000 + (data[0] - 0x7f) * 94 + (data[1] - 0x21); + + JIS_TO_SJIS(sjis, data); + + if (TRYMAP_DEC(cp932ext, u, sjis[0], sjis[1])) + return u; + else if (TRYMAP_DEC(jisx0208, u, data[0], data[1])) + return u; + else + return MAP_UNMAPPABLE; +} + +static DBCHAR +jisx0208msext_encoder(const Py_UCS4 *data, Py_ssize_t *length) +{ + DBCHAR coded; + assert(*length == 1); + if (TRYMAP_ENC(jisx0208msext, coded, *data)) + return coded; + else if (TRYMAP_ENC(jisxcommon, coded, *data)) { + if (!(coded & 0x8000)) + return coded; + } + return MAP_UNMAPPABLE; +} + +static int +cp50220_k_init(void) +{ + static int initialized = 0; + + if (!initialized && ( + IMPORT_MAP(jp, cp50220_k, &cp50220_k_encmap, NULL) || + IMPORT_MAP(jp, cp50220_k_pair, &cp50220_k_pair_encmap, + NULL))) + return -1; + initialized = 1; + return 0; +} + +static DBCHAR +cp50220_k_encoder(const Py_UCS4 *data, Py_ssize_t *length) +{ + DBCHAR coded; + + switch (*length) { + case 1: /* first character */ + if (*data >= 0xff61 && *data <= 0xff9f) { /* HALFWIDTH KATAKANA */ + coded = cp50220_k_encmap[*data - 0xff61]; + if (coded == MULTIC) + return MAP_MULTIPLE_AVAIL; + } + else + return MAP_UNMAPPABLE; + return coded; + + case 2: /* second character of unicode pair */ + coded = find_pairencmap((ucs2_t)data[0], (ucs2_t)data[1], + cp50220_k_pair_encmap, CP50220_K_ENCPAIRS); + if (coded == DBCINV) { + *length = 1; + coded = find_pairencmap((ucs2_t)data[0], 0, + cp50220_k_pair_encmap, CP50220_K_ENCPAIRS); + if (coded == DBCINV) + return MAP_UNMAPPABLE; + } + else + return coded; + + case -1: /* flush unterminated */ + *length = 1; + coded = find_pairencmap((ucs2_t)data[0], 0, + cp50220_k_pair_encmap, CP50220_K_ENCPAIRS); + if (coded == DBCINV) + return MAP_UNMAPPABLE; + else + return coded; + break; + + default: + return MAP_UNMAPPABLE; + } +} + +static Py_UCS4 +iso2022jpms_udc_decoder(const unsigned char *data) +{ + if (data[0] < 0x35) + return 0xe000 + (data[0] - 0x21) * 94 + (data[1] - 0x21); + else + return MAP_UNMAPPABLE; +} + +static DBCHAR +iso2022jpms_udc_encoder(const Py_UCS4 *data, Py_ssize_t *length) +{ + assert(*length == 1); + if (*data >= 0xe000 && *data <= 0xe757) + return ((*data - 0xe000) / 94 + 0x21) * 256 + + (*data - 0xe000) % 94 + 0x21; + else + return MAP_UNMAPPABLE; +} + +static DBCHAR +cp5022x_udc_encoder(const Py_UCS4 *data, Py_ssize_t *length) +{ + assert(*length == 1); + if (*data >= 0xe000 && *data <= 0xe757) + return ((*data - 0xe000) / 94 + 0x7f) * 256 + + (*data - 0xe000) % 94 + 0x21; + else + return MAP_UNMAPPABLE; +} + +static int jisx0212_init(void) { static int initialized = 0; @@ -948,10 +1295,26 @@ } static Py_UCS4 +jisx0201_r_ms_decoder(const unsigned char *data) +{ + if (*data < 0x80) + return (Py_UCS4)*data; + return MAP_UNMAPPABLE; +} + +static DBCHAR +jisx0201_r_ms_encoder(const Py_UCS4 *data, Py_ssize_t *length) +{ + if (*data < 0x80) + return (DBCHAR)*data; + return MAP_UNMAPPABLE; +} + +static Py_UCS4 jisx0201_k_decoder(const unsigned char *data) { Py_UCS4 u; - JISX0201_K_DECODE_CHAR(*data ^ 0x80, u) + JISX0201_K_DECODE_CHAR(*data | 0x80, u) else return MAP_UNMAPPABLE; return u; @@ -1028,15 +1391,47 @@ #define REGISTRY_JISX0201_R { CHARSET_JISX0201_R, 0, 1, \ NULL, \ jisx0201_r_decoder, jisx0201_r_encoder } +#define REGISTRY_JISX0201_R_MS { CHARSET_JISX0201_R, 0, 1, \ + NULL, \ + jisx0201_r_ms_decoder, jisx0201_r_ms_encoder } #define REGISTRY_JISX0201_K { CHARSET_JISX0201_K, 0, 1, \ NULL, \ jisx0201_k_decoder, jisx0201_k_encoder } -#define REGISTRY_JISX0208 { CHARSET_JISX0208, 0, 2, \ +#define REGISTRY_JISX0201_K_G1 { CHARSET_JISX0201_K, 1, 1, \ + NULL, \ + jisx0201_k_decoder, jisx0201_k_encoder } +#define REGISTRY_CP50220_K { CHARSET_JISX0208_1983, 0, 2, \ + cp50220_k_init, \ + NULL, cp50220_k_encoder } +#define REGISTRY_JISX0208_1978 { CHARSET_JISX0208_1978, 0, 2, \ jisx0208_init, \ jisx0208_decoder, jisx0208_encoder } -#define REGISTRY_JISX0208_O { CHARSET_JISX0208_O, 0, 2, \ +#define REGISTRY_JISX0208_1983 { CHARSET_JISX0208_1983, 0, 2, \ jisx0208_init, \ jisx0208_decoder, jisx0208_encoder } +#define REGISTRY_JISX0208_1990 { CHARSET_JISX0208_1990, 0, 2, \ + jisx0208_init, \ + jisx0208_decoder, jisx0208_encoder } +#define REGISTRY_JISX0208_1978_MS { CHARSET_JISX0208_1978, 0, 2, \ + jisx0208msext_init, \ + jisx0208msext_decoder, \ + jisx0208msext_encoder } +#define REGISTRY_JISX0208_1983_MS { CHARSET_JISX0208_1983, 0, 2, \ + jisx0208msext_init, \ + jisx0208msext_decoder, \ + jisx0208msext_encoder } +#define REGISTRY_JISX0208_1990_MS { CHARSET_JISX0208_1990, 0, 2, \ + jisx0208msext_init, \ + jisx0208msext_decoder, \ + jisx0208msext_encoder } +#define REGISTRY_ISO2022JPMS_UDC { CHARSET_ISO2022JPMS_UDC, 0, 2, \ + NULL, \ + iso2022jpms_udc_decoder, \ + iso2022jpms_udc_encoder } +#define REGISTRY_CP5022X_UDC { CHARSET_JISX0208_1983, 0, 2, \ + NULL, \ + dummy_decoder, \ + cp5022x_udc_encoder } #define REGISTRY_JISX0212 { CHARSET_JISX0212, 0, 2, \ jisx0212_init, \ jisx0212_decoder, jisx0212_encoder } @@ -1082,6 +1477,10 @@ static const struct iso2022_config iso2022_##var##_config = { \ attrs, iso2022_##var##_designations \ }; +#define CP5022X_CONFIGDEF(codepage, attrs) \ + static const struct iso2022_config codepage##_config = { \ + attrs, codepage##_designations \ + }; static const struct iso2022_designation iso2022_kr_designations[] = { REGISTRY_KSX1001_G1, REGISTRY_SENTINEL @@ -1089,42 +1488,72 @@ CONFIGDEF(kr, 0) static const struct iso2022_designation iso2022_jp_designations[] = { - REGISTRY_JISX0208, REGISTRY_JISX0201_R, REGISTRY_JISX0208_O, + REGISTRY_JISX0208_1983, REGISTRY_JISX0201_R, REGISTRY_JISX0208_1978, + REGISTRY_JISX0208_1990, REGISTRY_SENTINEL +}; +CONFIGDEF(jp, NO_SHIFT) + +static const struct iso2022_designation iso2022_jp_1_designations[] = { + REGISTRY_JISX0208_1983, REGISTRY_JISX0212, REGISTRY_JISX0201_R, + REGISTRY_JISX0208_1978, REGISTRY_JISX0208_1990, REGISTRY_SENTINEL +}; +CONFIGDEF(jp_1, NO_SHIFT) + +static const struct iso2022_designation iso2022_jp_2_designations[] = { + REGISTRY_JISX0208_1983, REGISTRY_JISX0212, REGISTRY_KSX1001_G0, + REGISTRY_GB2312, REGISTRY_JISX0201_R, REGISTRY_JISX0208_1978, + REGISTRY_ISO8859_1, REGISTRY_ISO8859_7, REGISTRY_JISX0208_1990, REGISTRY_SENTINEL }; -CONFIGDEF(jp, NO_SHIFT | USE_JISX0208_EXT) - -static const struct iso2022_designation iso2022_jp_1_designations[] = { - REGISTRY_JISX0208, REGISTRY_JISX0212, REGISTRY_JISX0201_R, - REGISTRY_JISX0208_O, REGISTRY_SENTINEL -}; -CONFIGDEF(jp_1, NO_SHIFT | USE_JISX0208_EXT) - -static const struct iso2022_designation iso2022_jp_2_designations[] = { - REGISTRY_JISX0208, REGISTRY_JISX0212, REGISTRY_KSX1001_G0, - REGISTRY_GB2312, REGISTRY_JISX0201_R, REGISTRY_JISX0208_O, - REGISTRY_ISO8859_1, REGISTRY_ISO8859_7, REGISTRY_SENTINEL -}; -CONFIGDEF(jp_2, NO_SHIFT | USE_G2 | USE_JISX0208_EXT) +CONFIGDEF(jp_2, NO_SHIFT | USE_G2) static const struct iso2022_designation iso2022_jp_2004_designations[] = { - REGISTRY_JISX0213_2004_1_PAIRONLY, REGISTRY_JISX0208, - REGISTRY_JISX0213_2004_1, REGISTRY_JISX0213_2004_2, REGISTRY_SENTINEL + REGISTRY_JISX0213_2004_1_PAIRONLY, REGISTRY_JISX0208_1983, + REGISTRY_JISX0213_2004_1, REGISTRY_JISX0213_2004_2, + REGISTRY_JISX0208_1990, REGISTRY_SENTINEL }; -CONFIGDEF(jp_2004, NO_SHIFT | USE_JISX0208_EXT) +CONFIGDEF(jp_2004, NO_SHIFT) static const struct iso2022_designation iso2022_jp_3_designations[] = { - REGISTRY_JISX0213_2000_1_PAIRONLY, REGISTRY_JISX0208, - REGISTRY_JISX0213_2000_1, REGISTRY_JISX0213_2000_2, REGISTRY_SENTINEL + REGISTRY_JISX0213_2000_1_PAIRONLY, REGISTRY_JISX0208_1983, + REGISTRY_JISX0213_2000_1, REGISTRY_JISX0213_2000_2, + REGISTRY_JISX0208_1990, REGISTRY_SENTINEL }; -CONFIGDEF(jp_3, NO_SHIFT | USE_JISX0208_EXT) +CONFIGDEF(jp_3, NO_SHIFT) static const struct iso2022_designation iso2022_jp_ext_designations[] = { - REGISTRY_JISX0208, REGISTRY_JISX0212, REGISTRY_JISX0201_R, - REGISTRY_JISX0201_K, REGISTRY_JISX0208_O, REGISTRY_SENTINEL + REGISTRY_JISX0208_1983, REGISTRY_JISX0212, REGISTRY_JISX0201_R, + REGISTRY_JISX0201_K, REGISTRY_JISX0208_1978, REGISTRY_SENTINEL }; -CONFIGDEF(jp_ext, NO_SHIFT | USE_JISX0208_EXT) +CONFIGDEF(jp_ext, NO_SHIFT) +static const struct iso2022_designation iso2022_jp_ms_designations[] = { + REGISTRY_JISX0208_1983_MS, REGISTRY_JISX0201_R_MS, REGISTRY_JISX0201_K, + REGISTRY_JISX0208_1978_MS, REGISTRY_ISO2022JPMS_UDC, + REGISTRY_JISX0208_1990_MS, REGISTRY_SENTINEL +}; +CONFIGDEF(jp_ms, NO_SHIFT) + +static const struct iso2022_designation cp50220_designations[] = { + REGISTRY_JISX0208_1983_MS, REGISTRY_JISX0201_R_MS, + REGISTRY_CP50220_K, REGISTRY_JISX0201_K, REGISTRY_JISX0208_1978_MS, + REGISTRY_JISX0208_1990_MS, REGISTRY_CP5022X_UDC, REGISTRY_SENTINEL +}; +CP5022X_CONFIGDEF(cp50220, USE_ROW95_120 | DECODE_GR) + +static const struct iso2022_designation cp50221_designations[] = { + REGISTRY_JISX0208_1983_MS, REGISTRY_JISX0201_R_MS, + REGISTRY_JISX0201_K, REGISTRY_JISX0208_1978_MS, + REGISTRY_JISX0208_1990_MS, REGISTRY_CP5022X_UDC, REGISTRY_SENTINEL +}; +CP5022X_CONFIGDEF(cp50221, USE_ROW95_120 | DECODE_GR) + +static const struct iso2022_designation cp50222_designations[] = { + REGISTRY_JISX0208_1983_MS, REGISTRY_JISX0201_R_MS, + REGISTRY_JISX0201_K_G1, REGISTRY_JISX0201_K, REGISTRY_JISX0208_1978_MS, + REGISTRY_JISX0208_1990_MS, REGISTRY_CP5022X_UDC, REGISTRY_SENTINEL +}; +CP5022X_CONFIGDEF(cp50222, USE_ROW95_120 | DECODE_GR) BEGIN_MAPPINGS_LIST /* no mapping table here */ @@ -1137,6 +1566,13 @@ _STATEFUL_METHODS(iso2022) \ }, +#define CP5022X_CODEC(codepage) { \ + #codepage, \ + &codepage##_config, \ + cp5022x_codec_init, \ + _STATEFUL_METHODS(cp5022x) \ +}, + BEGIN_CODECS_LIST ISO2022_CODEC(kr) ISO2022_CODEC(jp) @@ -1145,6 +1581,10 @@ ISO2022_CODEC(jp_2004) ISO2022_CODEC(jp_3) ISO2022_CODEC(jp_ext) + ISO2022_CODEC(jp_ms) + CP5022X_CODEC(cp50220) + CP5022X_CODEC(cp50221) + CP5022X_CODEC(cp50222) END_CODECS_LIST I_AM_A_MODULE_FOR(iso2022) diff -r e8b3083bb148 Modules/cjkcodecs/_codecs_jp.c --- a/Modules/cjkcodecs/_codecs_jp.c Sat Nov 22 22:14:41 2014 -0800 +++ b/Modules/cjkcodecs/_codecs_jp.c Sun Dec 14 23:02:12 2014 +0900 @@ -10,6 +10,7 @@ #include "cjkcodecs.h" #include "mappings_jp.h" #include "mappings_jisx0213_pair.h" +#include "mappings_cp50220_k.h" #include "alg_jisx0201.h" #include "emu_jisx0213_2000.h" @@ -143,6 +144,304 @@ return 0; } +/* + * CP51932 codec + */ + +ENCODER(cp51932) +{ + while (*inpos < inlen) { + Py_UCS4 c = INCHAR1; + DBCHAR code; + + if (c < 0x80) { + WRITEBYTE1((unsigned char)c); + NEXT(1, 1); + continue; + } + else if (c >= 0xff61 && c <= 0xff9f) { + WRITEBYTE2(0x8e, c - 0xfec0); + NEXT(1, 2); + continue; + } +#if 0 + else if (c >= 0xf8f0 && c <= 0xf8f3) { + /* Windows compatibility */ + REQUIRE_OUTBUF(1); + if (c == 0xf8f0) + OUTBYTE1(0xa0); + else + OUTBYTE1(c - 0xfef1 + 0xfd); + NEXT(1, 1); + continue; + } +#endif + + REQUIRE_OUTBUF(2); + + if (TRYMAP_ENC(jisx0208msext, code, c)) { + OUTBYTE1(code >> 8 | 0x80); + OUTBYTE2((code & 0xFF) | 0x80); + } + else if (TRYMAP_ENC(jisxcommon, code, c)) { + if (code & 0x8000) /* MSB set: JIS X 0212 */ + return 1; + + /* JIS X 0208 */ + OUTBYTE1((code >> 8) | 0x80); + OUTBYTE2((code & 0xFF) | 0x80); + } +#if 0 + else if (c >= 0xe000 && c < 0xe758) { + /* User-defined area */ + unsigned char c1, c2; + + c1 = (Py_UNICODE)(c - 0xe000) / 188; + c2 = (Py_UNICODE)(c - 0xe000) % 188; + OUTBYTE1(c1 + 0xf0) + OUTBYTE2(c2 < 0x3f ? c2 + 0x40 : c2 + 0x41) + } +#endif + else + return 1; + + NEXT(1, 2); + } + + return 0; +} + +DECODER(cp51932) +{ + while (inleft > 0) { + unsigned char c = INBYTE1; + Py_UCS4 decoded; + + if (c < 0x80) { + OUTCHAR(c); + NEXT_IN(1); + continue; + } + + REQUIRE_INBUF(2); + if (c == 0x8e) { + /* JIS X 0201 half-width katakana */ + unsigned char c2; + + c2 = INBYTE2; + if (c2 >= 0xa1 && c2 <= 0xdf) { + OUTCHAR(0xfec0 + c2); + NEXT_IN(2); + } + else + return 2; + } + else if (c == 0x8f) { + return 3; + } + else { + unsigned char c2; + unsigned char s1, s2; + + c2 = INBYTE2; + if (c >= 0xa1 && c <= 0xfe && + c2 >= 0xa1 && c2 <= 0xfe) + { + s2 = (((c - 0xa1) & 1) ? 0x5e : 0) + + (c2 - 0xa1); + s1 = (c - 0xa1) >> 1; + s1 = s1 < 0x1f ? s1 + 0x81 : s1 + 0xc1; + s2 = s2 < 0x3f ? s2 + 0x40 : s2 + 0x41; + if (TRYMAP_DEC(cp932ext, decoded, s1, s2)) + OUTCHAR(decoded); + else + if (TRYMAP_DEC(jisx0208, decoded, c ^ 0x80, c2 ^ 0x80)) + OUTCHAR(decoded); + else + return 2; + + NEXT_IN(2); + } + else + return 2; + } + } + + return 0; +} + +/* + * eucJP-ms codec + */ + +ENCODER(eucjp_ms) +{ + while (*inpos < inlen) { + Py_UCS4 c = INCHAR1; + DBCHAR code; + + if (c < 0x80) { + WRITEBYTE1((unsigned char)c); + NEXT(1, 1); + continue; + } + + if (TRYMAP_ENC(jisx0212ibmext, code, c)) { + code |= 0x8000; + goto output; + } + else if (c == 0xffe4) { + WRITEBYTE3(0x8f, 0xa2, 0xc3); + NEXT(1, 3); + continue; + } + else if (TRYMAP_ENC(jisx0208msext, code, c)) { + if (code < 0x7521) + goto output; + } + + if (TRYMAP_ENC(jisxcommon, code, c)) { + ; + } + else if (c >= 0xff61 && c <= 0xff9f) { + /* JIS X 0201 half-width katakana */ + WRITEBYTE2(0x8e, c - 0xfec0); + NEXT(1, 2); + continue; + } + else if (c >= 0xe000 && c <= 0xe3ab) { + WRITEBYTE2((c - 0xe000) / 94 + 0xf5, + (c - 0xe000) % 94 + 0xa1); + NEXT(1, 2); + continue; + } + else if (c >= 0xe3ac && c <= 0xe757) { + WRITEBYTE3(0x8f, + (c - 0xe3ac) / 94 + 0xf5, + (c - 0xe3ac) % 94 + 0xa1); + NEXT(1, 3); + continue; + } +#ifndef STRICT_BUILD + else if (c == 0xa5) { /* YEN SIGN */ + WRITEBYTE1(0x5c); + NEXT(1, 1); + continue; + } + else if (c == 0x203e) { /* OVERLINE */ + WRITEBYTE1(0x7e); + NEXT(1, 1); + continue; + } +#endif + else + return 1; + +output: + if (code & 0x8000) { + /* JIS X 0212 */ + WRITEBYTE3(0x8f, code >> 8, (code & 0xFF) | 0x80); + NEXT(1, 3); + } else { + /* JIS X 0208 */ + WRITEBYTE2((code >> 8) | 0x80, (code & 0xFF) | 0x80); + NEXT(1, 2); + } + } + + return 0; +} + +DECODER(eucjp_ms) +{ + while (inleft > 0) { + unsigned char c = INBYTE1; + Py_UCS4 decoded; + + if (c < 0x80) { + OUTCHAR(c); + NEXT_IN(1); + continue; + } + + if (c == 0x8e) { + /* JIS X 0201 half-width katakana */ + unsigned char c2; + + REQUIRE_INBUF(2); + c2 = INBYTE2; + if (c2 >= 0xa1 && c2 <= 0xdf) { + OUTCHAR(0xfec0 + c2); + NEXT_IN(2); + } + else + return 2; + } + else if (c == 0x8f) { + unsigned char c2, c3; + + REQUIRE_INBUF(3); + c2 = INBYTE2; + c3 = INBYTE3; + /* JIS X 0212 */ + if (TRYMAP_DEC(jisx0212ibmext, decoded, c2 ^ 0x80, c3 ^ 0x80)) { + OUTCHAR(decoded); + NEXT_IN(3); + } + else if (TRYMAP_DEC(jisx0212, decoded, + c2 ^ 0x80, c3 ^ 0x80)) { + if (decoded == 0x007e) + OUTCHAR(0xff5e); + else if (decoded == 0x00a6) + OUTCHAR(0xffe4); + NEXT_IN(3); + } + else if (c2 >= 0xf5 && c2 <= 0xfe && + c3 >= 0xa1 && c3 <= 0xfe) + { + OUTCHAR(0xe3ac + (c2 - 0xf5) * 94 + (c3 - 0xa1)); + NEXT_IN(3); + } + else + return 3; + } + else { + unsigned char c2; + unsigned char s1, s2; + + REQUIRE_INBUF(2); + c2 = INBYTE2; + /* JIS X 0208 */ + if (c >= 0xa1 && c <= 0xf4 && + c2 >= 0xa1 && c2 <= 0xfe) + { + s2 = (((c - 0xa1) & 1) ? 0x5e : 0) + + (c2 - 0xa1); + s1 = (c - 0xa1) >> 1; + s1 = s1 < 0x1f ? s1 + 0x81 : s1 + 0xc1; + s2 = s2 < 0x3f ? s2 + 0x40 : s2 + 0x41; + if (TRYMAP_DEC(cp932ext, decoded, s1, s2)) + OUTCHAR(decoded); + else if (TRYMAP_DEC(jisx0208, decoded, c ^ 0x80, c2 ^ 0x80)) + OUTCHAR(decoded); + else + return 2; + + NEXT_IN(2); + } + else if (c >= 0xf5 && c <= 0xfe && + c2 >= 0xa1 && c2 <= 0xfe) + { + OUTCHAR(0xe000 + (c - 0xf5) * 94 + (c2 - 0xa1)); + NEXT_IN(2); + } + else + return 2; + } + } + + return 0; +} /* * EUC-JIS-2004 codec @@ -745,12 +1044,18 @@ MAPPING_ENCONLY(jisx0213_emp) MAPPING_ENCDEC(jisx0213_pair) MAPPING_ENCDEC(cp932ext) + MAPPING_ENCONLY(jisx0208msext) + MAPPING_ENCDEC(jisx0212ibmext) + MAPPING_ENCONLY(cp50220_k) + MAPPING_ENCONLY(cp50220_k_pair) END_MAPPINGS_LIST BEGIN_CODECS_LIST CODEC_STATELESS(shift_jis) CODEC_STATELESS(cp932) CODEC_STATELESS(euc_jp) + CODEC_STATELESS(eucjp_ms) + CODEC_STATELESS(cp51932) CODEC_STATELESS(shift_jis_2004) CODEC_STATELESS(euc_jis_2004) { "euc_jisx0213", (void *)2000, NULL, _STATELESS_METHODS(euc_jis_2004) }, diff -r e8b3083bb148 Modules/cjkcodecs/mappings_cp50220_k.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Modules/cjkcodecs/mappings_cp50220_k.h Sun Dec 14 23:02:12 2014 +0900 @@ -0,0 +1,31 @@ +#define CP50220_K_ENCPAIRS 46 +#ifdef EXTERN_CP50220_K +static const DBCHAR *cp50220_k_encmap; +static const struct pair_encodemap *cp50220_k_pair_encmap; +#else +static const DBCHAR cp50220_k_encmap[] = { +0x2123,0x2156,0x2157,0x2122,0x2126,0x2572,0x2521,0x2523,0x2525,0x2527,0x2529, +0x2563,0x2565,0x2567,0x2543,0x213c,0x2522,0x2524,0x2526,0x2528,0x252a,M,M,M,M, +M,M,M,M,M,M,M,M,M,M,M,0x254a,0x254b,0x254c,0x254d,0x254e,M,M,M,M,M,0x255e, +0x255f,0x2560,0x2561,0x2562,0x2564,0x2566,0x2568,0x2569,0x256a,0x256b,0x256c, +0x256d,0x256f,0x2573,0x212b,0x212c, +}; + +static const struct pair_encodemap cp50220_k_pair_encmap[CP50220_K_ENCPAIRS] = +{ +{0xff760000,0x252b},{0xff76ff9e,0x252c},{0xff770000,0x252d},{0xff77ff9e, +0x252e},{0xff780000,0x252f},{0xff78ff9e,0x2530},{0xff790000,0x2531}, +{0xff79ff9e,0x2532},{0xff7a0000,0x2533},{0xff7aff9e,0x2534},{0xff7b0000, +0x2535},{0xff7bff9e,0x2536},{0xff7c0000,0x2537},{0xff7cff9e,0x2538}, +{0xff7d0000,0x2539},{0xff7dff9e,0x253a},{0xff7e0000,0x253b},{0xff7eff9e, +0x253c},{0xff7f0000,0x253e},{0xff7fff9e,0x253e},{0xff800000,0x253f}, +{0xff80ff9e,0x2540},{0xff810000,0x2541},{0xff81ff9e,0x2542},{0xff820000, +0x2544},{0xff82ff9e,0x2545},{0xff830000,0x2546},{0xff83ff9e,0x2547}, +{0xff840000,0x2548},{0xff84ff9e,0x2549},{0xff8a0000,0x254f},{0xff8aff9e, +0x2550},{0xff8aff9f,0x2551},{0xff8b0000,0x2552},{0xff8bff9e,0x2553}, +{0xff8bff9f,0x2554},{0xff8c0000,0x2555},{0xff8cff9e,0x2556},{0xff8cff9f, +0x2557},{0xff8d0000,0x2558},{0xff8d0000,0x2558},{0xff8dff9e,0x2559}, +{0xff8dff9f,0x255a},{0xff8e0000,0x255b},{0xff8eff9e,0x255c},{0xff8eff9f, +0x255d}, +}; +#endif diff -r e8b3083bb148 Modules/cjkcodecs/mappings_jp.h --- a/Modules/cjkcodecs/mappings_jp.h Sat Nov 22 22:14:41 2014 -0800 +++ b/Modules/cjkcodecs/mappings_jp.h Sun Dec 14 23:02:12 2014 +0900 @@ -2543,8 +2543,8 @@ static const DBCHAR __cp932ext_encmap[9686] = { 34690,N,N,N,N,N,N,N,N,N,N,34692,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -34644,34645,34646,34647,34648,34649,34650,34651,34652,34653,N,N,N,N,N,N,61167, -61168,61169,61170,61171,61172,61173,61174,61175,61176,34708,N,N,N,N,N,N,N,N,N, +34644,34645,34646,34647,34648,34649,34650,34651,34652,34653,N,N,N,N,N,N,64064, +64065,64066,64067,64068,64069,64070,64071,64072,64073,34708,N,N,N,N,N,N,N,N,N, N,N,N,N,34712,N,N,N,N,N,33121,N,N,N,N,N,N,N,N,34707,N,N,N,N,N,N,N,N,N,N,N,N,N, N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, @@ -2561,259 +2561,259 @@ N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,34686,34703,34702,34701,N,N,N, N,N,N,N,N,N,N,N,N,N,N,N,34674,34675,N,N,N,N,N,N,N,N,N,N,N,N,34671,34672,34673, N,N,34677,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -34676,N,N,N,N,N,N,N,N,34691,60748,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,60749,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60750, -60751,N,N,60752,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60753,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,60754,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60756,N,N,N,N,N,N,N, -60755,N,60758,N,N,N,N,N,60757,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60741,N,N,N,60759,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,60762,60763,N,N,N,60761,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,60760,N,60766,N,N,N,60764,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60765,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60767,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,60769,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,60768,60770,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60771,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,60772,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,60773,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60774,60775,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,60776,N,N,N,N,N,N,N,N,N,60777,N,N,N,N,N,N,N,N,61019,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,60778,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60779, -60780,N,N,N,N,N,N,60781,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,60782,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,60783,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -60784,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60785,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -60786,60789,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60788,N,N,N,N,N,N,N,N,N,N,N,N, -60790,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,60791,60792,60793,N,N,N,N,N,N,N,N,N,N,N,60794,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60795,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60797,60796,60801,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,60802,60803,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,60804,N,N,N,N,N,N,N,60805,N,60806,N,N,N,N,N,60807,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,60808,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -60809,60810,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60811,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60813,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,60814,60815,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60816,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,60817,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60818,60819,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60822,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,60820,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60823,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60824,60825,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60826,60827,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,60828,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60747,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60829,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60830,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60831,60832,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60833,N,N, -N,N,60834,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,60836,N,N,N,N,N,N,N,N,60835,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60838, -60839,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60837,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60841,N, -N,N,N,N,N,60840,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60842,60843,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60844,60845,60846,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,60847,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60848,60849,60850,N,N,N,N,N, -N,N,N,60853,N,N,N,N,N,N,N,N,N,N,N,60851,N,N,N,N,N,N,N,N,60855,N,N,N,N,N,60856, -N,N,N,N,N,N,N,N,N,60854,N,N,60743,N,N,N,N,N,N,N,N,N,60852,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60858,N,60859,N,N,N,N,N,N,N,N,N,N,N,60857,N, -N,N,N,N,N,N,N,N,N,N,N,N,60861,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,60862,N,N,N,N,N,N,60863,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,60864,N,N,N,N,N,N,N,N,N,N,N,N,60865,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,60866,60746,60867,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60869,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60870,N,N,N,N,60872, -60873,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60874,N,N,N,N,N,N, -N,N,N,N,N,N,N,60871,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,60744,N,N,N,N,N,N,60875,60877,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60879,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60880,60881,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60883,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60882,N,N,N,N,N,N,N,60884,N,N,N,N,N,N,N, -N,N,N,60885,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60886,N,60887,60888, -60889,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60890,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,60892,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -60891,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,60893,60894,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,60896,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60895,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,60897,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60898,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60899,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60901,N,N,N,N,N,60900,N, -N,N,60902,60905,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60903,N,N,60906,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60904,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,60907,60908,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60909,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,60910,60911,N,60912,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,60913,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60914,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60915,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,60742,60917,N,N,N,N,N,N,N,N,N,N,60916,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,60919,60920,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60918,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60922,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -60923,60924,N,N,N,N,N,N,N,N,N,N,N,N,60992,60993,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60995,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60996,N,N,N,N,N,N,N,N,N,N,N,60997, -N,N,N,N,N,N,N,N,61000,N,N,N,60998,N,N,N,N,N,N,N,N,N,N,N,N,60999,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,61002,61001,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,61003,N,N,61005,61004,N,N,N,61006,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61007, +34676,N,N,N,N,N,N,N,N,34691,64104,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,64105,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64106, +64107,N,N,64108,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64109,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,64110,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64112,N,N,N,N,N,N,N, +64111,N,64114,N,N,N,N,N,64113,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64097,N,N,N,64115,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,64118,64119,N,N,N,64117,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,64116,N,64122,N,N,N,64120,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64121,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64123,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,64125,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,64124,64126,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64128,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,64129,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,64130,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64131,64132,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,64133,N,N,N,N,N,N,N,N,N,64134,N,N,N,N,N,N,N,N,64375,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,64135,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64136, +64137,N,N,N,N,N,N,64138,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,64139,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,64140,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +64141,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64142,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +64143,64146,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64145,N,N,N,N,N,N,N,N,N,N,N,N, +64147,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,64148,64149,64150,N,N,N,N,N,N,N,N,N,N,N,64151,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64152,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64154,64153,64157,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,64158,64159,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,64160,N,N,N,N,N,N,N,64161,N,64162,N,N,N,N,N,64163,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,64164,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +64165,64166,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64167,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64169,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,64170,64171,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64172,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,64173,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64174,64175,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64178,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,64176,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64179,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64180,64181,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64182,64183,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,64184,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64103,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64185,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64186,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64187,64188,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64189,N,N, +N,N,64190,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,64192,N,N,N,N,N,N,N,N,64191,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64194, +64195,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64193,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64197,N, +N,N,N,N,N,64196,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64198,64199,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64200,64201,64202,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,64203,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64204,64205,64206,N,N,N,N,N, +N,N,N,64209,N,N,N,N,N,N,N,N,N,N,N,64207,N,N,N,N,N,N,N,N,64211,N,N,N,N,N,64212, +N,N,N,N,N,N,N,N,N,64210,N,N,64099,N,N,N,N,N,N,N,N,N,64208,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64214,N,64215,N,N,N,N,N,N,N,N,N,N,N,64213,N, +N,N,N,N,N,N,N,N,N,N,N,N,64217,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,64218,N,N,N,N,N,N,64219,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,64220,N,N,N,N,N,N,N,N,N,N,N,N,64221,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,64222,64102,64223,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64225,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64226,N,N,N,N,64228, +64229,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64230,N,N,N,N,N,N, +N,N,N,N,N,N,N,64227,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,64100,N,N,N,N,N,N,64231,64233,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64235,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64236,64237,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64239,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64238,N,N,N,N,N,N,N,64240,N,N,N,N,N,N,N, +N,N,N,64241,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64242,N,64243,64244, +64245,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64246,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,64248,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +64247,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,64249,64250,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,64252,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64251,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,64320,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64321,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64322,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64324,N,N,N,N,N,64323,N, +N,N,64325,64328,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64326,N,N,64329,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64327,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,64330,64331,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64332,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,64333,64334,N,64335,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,64336,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64337,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64338,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,64098,64340,N,N,N,N,N,N,N,N,N,N,64339,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,64342,64343,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64341,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64345,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +64346,64347,N,N,N,N,N,N,N,N,N,N,N,N,64348,64349,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64351,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64352,N,N,N,N,N,N,N,N,N,N,N,64353, +N,N,N,N,N,N,N,N,64356,N,N,N,64354,N,N,N,N,N,N,N,N,N,N,N,N,64355,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,64358,64357,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,64359,N,N,64361,64360,N,N,N,64362,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64363, N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -61008,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61009,61010,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60812, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61011,61012,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61015,61013,N,61014,N,N,N,N,N,N,N,61016,61018, -61020,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,61021,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61022,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61023,61024,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,61028,N,N,N,N,N,N,61030,61031,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,61032,N,N,N,61034,61035,61037,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61038, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61040,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,61039,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,61041,61042,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60736,61043,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,61044,61046,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61047,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61048,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61049,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61050,61051,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61052,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60740,61053,N,N,N,N, -N,61054,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61056,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,61058,61061,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61062,60737,61063,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61064,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61065,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61066,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,61067,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,61068,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61070, -61071,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,61072,61073,N,N,N,61074,61075,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,61076,61078,61081,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,61082,61084,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -61085,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61087,N,N,61086,N,N,N,61088,N,N,N, -N,N,61091,61092,N,N,N,N,N,N,N,61089,61090,61093,N,N,N,61095,N,N,N,N,N,61094,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -61102,61096,N,61098,N,N,N,61097,N,N,N,N,N,N,N,N,N,N,N,N,N,61099,N,N,61101,N,N, -N,N,N,N,N,61100,N,N,N,N,N,N,N,N,N,N,N,N,N,61103,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -61105,61106,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60739,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61104,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61110,N,N,61114,N,61112,N,61108,N,61109, -N,N,N,N,N,N,61113,N,N,N,N,N,N,61107,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,60745,N, -61117,N,N,N,61120,61122,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -61121,61119,N,N,61116,N,N,N,61115,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,60738,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61124,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61123,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61125,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61126,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61127,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,61128,61129,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61130,N,N,61131, -61132,61135,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61136,61137,N,N,N,N,N,N,N,61138, -N,N,N,N,N,N,N,61139,N,N,N,N,N,N,N,N,N,61140,N,61141,N,61142,N,N,N,61143,61144, -N,N,N,N,N,N,N,N,N,N,N,N,N,61145,61148,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61150,61151,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,61152,N,N,61153,61155,N,N,61154,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,61156,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,61157,N,N,N,N,N,N,N,N,N,61158,61159,61161,N,N,N,N,61160,61163,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61164,60868,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, -N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,61133,60787,60798,60800,60821,60860,60876,60878, -60921,60994,61017,61025,61026,61027,61029,61033,61036,61045,61057,61059,61060, -61069,61077,61079,61080,61083,61111,61118,61134,61146,61147,61149,61162,61180, -N,N,N,N,61179,N,N,N,N,N,33148,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +64364,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64365,64366,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64168, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64367,64368,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64371,64369,N,64370,N,N,N,N,N,N,N,64372,64374, +64376,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,64377,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64378,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64379,64380,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,64385,N,N,N,N,N,N,64387,64388,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,64389,N,N,N,64391,64392,64394,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64395, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64397,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,64396,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,64398,64399,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64092,64400,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,64401,64403,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64404,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64405,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64406,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64407,64408,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64409,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64096,64410,N,N,N,N, +N,64411,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64412,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,64414,64417,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64418,64093,64419,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64420,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64421,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64422,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,64423,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,64424,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64426, +64427,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,64428,64429,N,N,N,64430,64431,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,64432,64434,64437,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,64438,64440,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +64441,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64443,N,N,64442,N,N,N,64444,N,N,N, +N,N,64447,64448,N,N,N,N,N,N,N,64445,64446,64449,N,N,N,64451,N,N,N,N,N,64450,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +64458,64452,N,64454,N,N,N,64453,N,N,N,N,N,N,N,N,N,N,N,N,N,64455,N,N,64457,N,N, +N,N,N,N,N,64456,N,N,N,N,N,N,N,N,N,N,N,N,N,64459,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +64461,64462,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64095,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64460,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64466,N,N,64470,N,64468,N,64464,N,64465, +N,N,N,N,N,N,64469,N,N,N,N,N,N,64463,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64101,N, +64473,N,N,N,64476,64478,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +64477,64475,N,N,64472,N,N,N,64471,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,64094,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64480,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64479,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64481,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64482,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64483,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,64484,64485,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64486,N,N,64487, +64488,64491,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64492,64493,N,N,N,N,N,N,N,64494, +N,N,N,N,N,N,N,64495,N,N,N,N,N,N,N,N,N,64496,N,64497,N,64498,N,N,N,64499,64500, +N,N,N,N,N,N,N,N,N,N,N,N,N,64501,64504,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64506,64507,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,64508,N,N,64576,64578,N,N,64577,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,64579,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,64580,N,N,N,N,N,N,N,N,N,64581,64582,64584,N,N,N,N,64583,64586,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64587,64224,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,64489,64144,64155,64156,64177,64216,64232,64234, +64344,64350,64373,64381,64382,64384,64386,64390,64393,64402,64413,64415,64416, +64425,64433,64435,64436,64439,64467,64474,64490,64502,64503,64505,64585,64087, +N,N,N,N,64086,N,N,N,N,N,33148,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,33119,N,N,N,N,N,N,N,N,N,N,N,N,N,N, N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,33120,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,33169, -33170,33226,N,61178, +33170,33226,N,64085, }; static const struct unim_index cp932ext_encmap[256] = { @@ -2876,6 +2876,458 @@ __cp932ext_encmap+9459,2,228}, }; +static const DBCHAR __jisx0208msext_encmap[9686] = { +11618,N,N,N,N,N,N,N,N,N,N,11620,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +11573,11574,11575,11576,11577,11578,11579,11580,11581,11582,N,N,N,N,N,N,31857, +31858,31859,31860,31861,31862,31863,31864,31865,31866,11636,N,N,N,N,N,N,N,N,N, +N,N,N,N,11640,N,N,N,N,N,8514,N,N,N,N,N,N,N,N,11635,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,11641,11553,11554,11555,11556,11557,11558,11559, +11560,11561,11562,11563,11564,11565,11566,11567,11568,11569,11570,11571,11572, +11616,N,11617,11626,11627,N,N,N,N,N,N,11628,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,11621,11622,11623,11624,11625,11590,N,N,N,N,N,N,N,N,N, +11594,N,N,N,N,N,N,11585,N,N,N,11588,N,N,N,N,N,N,N,N,N,11586,11596,N,N,11595, +11589,N,N,N,11597,N,N,N,N,N,N,N,N,N,N,11591,N,N,N,N,11599,N,N,N,N,N,N,N,N,N,N, +N,N,N,11584,11598,N,N,11587,N,N,N,11592,N,N,N,N,N,11593,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,11615,11631,11630,11629,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,11603,11604,N,N,N,N,N,N,N,N,N,N,N,N,11600,11601,11602, +N,N,11606,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +11605,N,N,N,N,N,N,N,N,11619,31021,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,31022,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31023, +31024,N,N,31025,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31026,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,31027,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31029,N,N,N,N,N,N,N, +31028,N,31031,N,N,N,N,N,31030,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31014,N,N,N,31032,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,31035,31036,N,N,N,31034,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,31033,N,31039,N,N,N,31037,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31038,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31040,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,31042,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,31041,31043,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31044,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,31045,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,31046,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31047,31048,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,31049,N,N,N,N,N,N,N,N,N,31050,N,N,N,N,N,N,N,N,31548,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,31051,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31052, +31053,N,N,N,N,N,N,31054,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,31055,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,31056,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +31057,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31058,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +31059,31062,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31061,N,N,N,N,N,N,N,N,N,N,N,N, +31063,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,31064,31065,31066,N,N,N,N,N,N,N,N,N,N,N,31067,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31068,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31070,31069,31073,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,31074,31075,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,31076,N,N,N,N,N,N,N,31077,N,31078,N,N,N,N,N,31079,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,31080,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +31081,31082,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31083,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31085,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,31086,31087,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31088,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,31089,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31090,31091,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31094,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,31092,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31095,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31096,31097,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31098,31099,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,31100,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31020,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31101,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31102,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31265,31266,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31267,N,N, +N,N,31268,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,31270,N,N,N,N,N,N,N,N,31269,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31272, +31273,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31271,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31275,N, +N,N,N,N,N,31274,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31276,31277,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31278,31279,31280,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,31281,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31282,31283,31284,N,N,N,N,N, +N,N,N,31287,N,N,N,N,N,N,N,N,N,N,N,31285,N,N,N,N,N,N,N,N,31289,N,N,N,N,N,31290, +N,N,N,N,N,N,N,N,N,31288,N,N,31016,N,N,N,N,N,N,N,N,N,31286,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31292,N,31293,N,N,N,N,N,N,N,N,N,N,N,31291,N, +N,N,N,N,N,N,N,N,N,N,N,N,31295,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,31296,N,N,N,N,N,N,31297,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,31298,N,N,N,N,N,N,N,N,N,N,N,N,31299,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,31300,31019,31301,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31303,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31304,N,N,N,N,31306, +31307,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31308,N,N,N,N,N,N, +N,N,N,N,N,N,N,31305,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,31017,N,N,N,N,N,N,31309,31311,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31313,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31314,31315,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31317,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31316,N,N,N,N,N,N,N,31318,N,N,N,N,N,N,N, +N,N,N,31319,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31320,N,31321,31322, +31323,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31324,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,31326,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +31325,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,31327,31328,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,31330,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31329,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,31331,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31332,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31333,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31335,N,N,N,N,N,31334,N, +N,N,31336,31339,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31337,N,N,31340,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31338,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,31341,31342,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31343,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,31344,31345,N,31346,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,31347,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31348,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31349,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,31015,31351,N,N,N,N,N,N,N,N,N,N,31350,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,31353,31354,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31352,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31356,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +31357,31358,N,N,N,N,N,N,N,N,N,N,N,N,31521,31522,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31524,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31525,N,N,N,N,N,N,N,N,N,N,N,31526, +N,N,N,N,N,N,N,N,31529,N,N,N,31527,N,N,N,N,N,N,N,N,N,N,N,N,31528,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,31531,31530,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,31532,N,N,31534,31533,N,N,N,31535,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31536, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +31537,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31538,31539,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31084, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31540,31541,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31544,31542,N,31543,N,N,N,N,N,N,N,31545,31547, +31549,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,31550,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31551,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31552,31553,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,31557,N,N,N,N,N,N,31559,31560,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,31561,N,N,N,31563,31564,31566,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31567, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31569,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,31568,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,31570,31571,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31009,31572,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,31573,31575,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31576,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31577,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31578,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31579,31580,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31581,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31013,31582,N,N,N,N, +N,31583,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31584,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,31586,31589,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31590,31010,31591,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31592,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31593,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31594,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,31595,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,31596,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31598, +31599,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,31600,31601,N,N,N,31602,31603,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,31604,31606,31609,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,31610,31612,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +31613,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31777,N,N,31614,N,N,N,31778,N,N,N, +N,N,31781,31782,N,N,N,N,N,N,N,31779,31780,31783,N,N,N,31785,N,N,N,N,N,31784,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +31792,31786,N,31788,N,N,N,31787,N,N,N,N,N,N,N,N,N,N,N,N,N,31789,N,N,31791,N,N, +N,N,N,N,N,31790,N,N,N,N,N,N,N,N,N,N,N,N,N,31793,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +31795,31796,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31012,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31794,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31800,N,N,31804,N,31802,N,31798,N,31799, +N,N,N,N,N,N,31803,N,N,N,N,N,N,31797,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31018,N, +31807,N,N,N,31810,31812,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +31811,31809,N,N,31806,N,N,N,31805,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,31011,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31814,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31813,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31815,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31816,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31817,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,31818,31819,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31820,N,N,31821, +31822,31825,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31826,31827,N,N,N,N,N,N,N,31828, +N,N,N,N,N,N,N,31829,N,N,N,N,N,N,N,N,N,31830,N,31831,N,31832,N,N,N,31833,31834, +N,N,N,N,N,N,N,N,N,N,N,N,N,31835,31838,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31840,31841,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,31842,N,N,31843,31845,N,N,31844,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,31846,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,31847,N,N,N,N,N,N,N,N,N,31848,31849,31851,N,N,N,N,31850,31853,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31854,31302,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,31823,31060,31071,31072,31093,31294,31310,31312, +31355,31523,31546,31554,31555,31556,31558,31562,31565,31574,31585,31587,31588, +31597,31605,31607,31608,31611,31801,31808,31824,31836,31837,31839,31852,31870, +N,N,N,N,31869,N,N,N,N,N,8541,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,8512,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,8513,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,8561,8562, +8780,N,31868, +}; + +static const struct unim_index jisx0208msext_encmap[256] = { +{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +0,0,0},{0,0,0},{0,0,0},{0,0,0},{__jisx0208msext_encmap+0,22,121},{ +__jisx0208msext_encmap+100,17,191},{0,0,0},{__jisx0208msext_encmap+275,96,115 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{__jisx0208msext_encmap+295,29,31},{0,0,0},{ +__jisx0208msext_encmap+298,49,168},{__jisx0208msext_encmap+418,3,205},{0,0,0}, +{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{__jisx0208msext_encmap+621,40, +252},{__jisx0208msext_encmap+834,0,255},{__jisx0208msext_encmap+1090,30,244},{ +__jisx0208msext_encmap+1305,74,236},{__jisx0208msext_encmap+1468,21,219},{ +__jisx0208msext_encmap+1667,0,221},{__jisx0208msext_encmap+1889,138,255},{ +__jisx0208msext_encmap+2007,134,134},{0,0,0},{__jisx0208msext_encmap+2008,89, +200},{__jisx0208msext_encmap+2120,158,178},{__jisx0208msext_encmap+2141,11,186 +},{0,0,0},{__jisx0208msext_encmap+2317,86,236},{__jisx0208msext_encmap+2468, +30,245},{__jisx0208msext_encmap+2684,39,208},{0,0,0},{__jisx0208msext_encmap+ +2854,33,222},{__jisx0208msext_encmap+3044,93,242},{__jisx0208msext_encmap+3194 +,17,152},{__jisx0208msext_encmap+3330,19,166},{__jisx0208msext_encmap+3478, +245,245},{__jisx0208msext_encmap+3479,96,206},{__jisx0208msext_encmap+3590,78, +78},{__jisx0208msext_encmap+3591,0,251},{__jisx0208msext_encmap+3843,14,192},{ +__jisx0208msext_encmap+4022,1,207},{__jisx0208msext_encmap+4229,104,226},{ +__jisx0208msext_encmap+4352,48,228},{__jisx0208msext_encmap+4533,214,214},{ +__jisx0208msext_encmap+4534,63,218},{__jisx0208msext_encmap+4690,4,252},{ +__jisx0208msext_encmap+4939,39,191},{__jisx0208msext_encmap+5092,136,245},{ +__jisx0208msext_encmap+5202,5,187},{__jisx0208msext_encmap+5385,4,254},{ +__jisx0208msext_encmap+5636,177,190},{__jisx0208msext_encmap+5650,36,245},{ +__jisx0208msext_encmap+5860,7,159},{__jisx0208msext_encmap+6013,1,111},{ +__jisx0208msext_encmap+6124,130,166},{__jisx0208msext_encmap+6161,70,70},{ +__jisx0208msext_encmap+6162,33,122},{__jisx0208msext_encmap+6252,48,155},{ +__jisx0208msext_encmap+6360,209,235},{__jisx0208msext_encmap+6387,158,158},{0, +0,0},{__jisx0208msext_encmap+6388,72,214},{__jisx0208msext_encmap+6531,82,138 +},{__jisx0208msext_encmap+6588,71,161},{0,0,0},{0,0,0},{0,0,0},{ +__jisx0208msext_encmap+6679,1,246},{__jisx0208msext_encmap+6925,72,220},{ +__jisx0208msext_encmap+7074,83,176},{0,0,0},{0,0,0},{__jisx0208msext_encmap+ +7168,7,245},{__jisx0208msext_encmap+7407,28,28},{__jisx0208msext_encmap+7408, +18,246},{__jisx0208msext_encmap+7637,83,127},{__jisx0208msext_encmap+7682,240, +244},{__jisx0208msext_encmap+7687,18,118},{__jisx0208msext_encmap+7788,207,207 +},{0,0,0},{__jisx0208msext_encmap+7789,103,222},{__jisx0208msext_encmap+7909, +21,238},{__jisx0208msext_encmap+8127,6,255},{__jisx0208msext_encmap+8377,2,248 +},{__jisx0208msext_encmap+8624,49,72},{__jisx0208msext_encmap+8648,146,146},{ +__jisx0208msext_encmap+8649,157,175},{__jisx0208msext_encmap+8668,51,85},{ +__jisx0208msext_encmap+8703,87,101},{__jisx0208msext_encmap+8718,39,158},{ +__jisx0208msext_encmap+8838,78,220},{__jisx0208msext_encmap+8981,114,187},{ +__jisx0208msext_encmap+9055,0,0},{__jisx0208msext_encmap+9056,107,112},{ +__jisx0208msext_encmap+9062,25,209},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +__jisx0208msext_encmap+9247,41,220},{__jisx0208msext_encmap+9427,14,45},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{__jisx0208msext_encmap+9459,2,228}, +}; + +static const ucs2_t __jisx0212ibmext_decmap[106] = { +8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548, +8549,8550,8551,8552,8553,65287,65282,12849,8470,8481,28859,20220,20724,20972, +21255,21284,64014,21642,22361,64015,64016,22686,23532,23797,23891,64017,24503, +24709,24864,25934,26171,26213,64018,63785,26625,64019,64020,27243,27362,28152, +28146,28712,64021,64022,29953,30338,30366,64023,31024,64024,64025,64026,64027, +31463,64028,64029,32160,32214,64030,33634,64031,34224,64032,64033,34823,64034, +35711,36084,36214,64035,64036,64037,37086,64038,37141,64039,64040,38290,63964, +64041,38715,38733,38737,64042,64043,64044,39326,39641,39794,64045,40657, +}; + +static const struct dbcs_index jisx0212ibmext_decmap[256] = { +{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +__jisx0212ibmext_decmap+0,115,126},{__jisx0212ibmext_decmap+12,33,126},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +0,0,0},{0,0,0},{0,0,0}, +}; + +static const DBCHAR __jisx0212ibmext_encmap[713] = { +29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29743,29744,29745, +29746,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,29747,29749, +29750,29753,29754,29755,29756,29758,29759,29760,29761,29762,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,29763,29766, +29769,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,29770,29772,N,N,N,N,N,29771,29773,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,29742,29776,29777,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,29778,29780,29785,29788,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,29789, +29791,29793,29796,29798,29799,29800,29804,29806,29809,29812,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,29813,N,N,N,29814,29818,29819,29820,29822,29765,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N, +N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,29810,29748,29751,29752,29757,29764,29767,29768, +29774,29775,29779,29781,29782,29783,29784,29786,29787,29790,29792,29794,29795, +29797,29801,29802,29803,29805,29807,29808,29811,29815,29816,29817,29821,29738, +N,N,N,N,29737, +}; + +static const struct unim_index jisx0212ibmext_encmap[256] = { +{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +0,0,0},{0,0,0},{0,0,0},{0,0,0},{__jisx0212ibmext_encmap+0,112,121},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +0,0,0},{0,0,0},{0,0,0},{0,0,0},{__jisx0212ibmext_encmap+10,252,252},{0,0,0},{ +__jisx0212ibmext_encmap+11,244,244},{__jisx0212ibmext_encmap+12,236,236},{0,0, +0},{__jisx0212ibmext_encmap+13,7,36},{__jisx0212ibmext_encmap+43,138,138},{0, +0,0},{0,0,0},{__jisx0212ibmext_encmap+44,89,89},{__jisx0212ibmext_encmap+45, +158,158},{0,0,0},{0,0,0},{__jisx0212ibmext_encmap+46,236,236},{ +__jisx0212ibmext_encmap+47,245,245},{__jisx0212ibmext_encmap+48,83,83},{0,0,0 +},{__jisx0212ibmext_encmap+49,183,183},{__jisx0212ibmext_encmap+50,133,133},{ +__jisx0212ibmext_encmap+51,32,32},{0,0,0},{0,0,0},{0,0,0},{ +__jisx0212ibmext_encmap+52,78,78},{__jisx0212ibmext_encmap+53,59,101},{0,0,0}, +{__jisx0212ibmext_encmap+96,1,1},{0,0,0},{__jisx0212ibmext_encmap+97,107,226}, +{0,0,0},{0,0,0},{__jisx0212ibmext_encmap+217,242,248},{0,0,0},{0,0,0},{ +__jisx0212ibmext_encmap+224,40,187},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +__jisx0212ibmext_encmap+372,1,1},{__jisx0212ibmext_encmap+373,130,158},{0,0,0 +},{0,0,0},{__jisx0212ibmext_encmap+402,48,48},{__jisx0212ibmext_encmap+403, +231,231},{0,0,0},{0,0,0},{__jisx0212ibmext_encmap+404,160,214},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{__jisx0212ibmext_encmap+459,98,98},{0,0,0},{ +__jisx0212ibmext_encmap+460,176,176},{0,0,0},{0,0,0},{__jisx0212ibmext_encmap+ +461,7,7},{0,0,0},{0,0,0},{__jisx0212ibmext_encmap+462,127,127},{ +__jisx0212ibmext_encmap+463,244,244},{__jisx0212ibmext_encmap+464,118,118},{0, +0,0},{0,0,0},{__jisx0212ibmext_encmap+465,222,222},{__jisx0212ibmext_encmap+ +466,21,21},{0,0,0},{0,0,0},{0,0,0},{__jisx0212ibmext_encmap+467,146,146},{0,0, +0},{__jisx0212ibmext_encmap+468,59,81},{0,0,0},{__jisx0212ibmext_encmap+491, +158,158},{__jisx0212ibmext_encmap+492,217,217},{__jisx0212ibmext_encmap+493, +114,114},{0,0,0},{0,0,0},{__jisx0212ibmext_encmap+494,209,209},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0 +},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0, +0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{ +0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0 +},{0,0,0},{__jisx0212ibmext_encmap+495,41,220},{__jisx0212ibmext_encmap+675, +14,45},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{__jisx0212ibmext_encmap+707,2,7}, +}; + static const ucs2_t __jisx0213_1_bmp_decmap[2197] = { 65287,65282,65293,126,12339,12340,12341,12347,12348,12543,12447,U,U,U,U,U,U,U, U,8836,8837,8842,8843,8713,8709,8965,8966,U,U,U,U,U,U,U,8853,8854,8855,8741, diff -r e8b3083bb148 Modules/cjkcodecs/multibytecodec.h --- a/Modules/cjkcodecs/multibytecodec.h Sat Nov 22 22:14:41 2014 -0800 +++ b/Modules/cjkcodecs/multibytecodec.h Sun Dec 14 23:02:12 2014 +0900 @@ -11,17 +11,18 @@ #endif #ifdef uint16_t -typedef uint16_t ucs2_t, DBCHAR; +typedef uint16_t ucs2_t, DBCHAR, CHARSET; #else -typedef unsigned short ucs2_t, DBCHAR; +typedef unsigned short ucs2_t, DBCHAR, CHARSET; #endif typedef union { void *p; int i; - unsigned char c[8]; - ucs2_t u2[4]; - Py_UCS4 u4[2]; + unsigned char c[16]; + CHARSET cs[8]; + ucs2_t u2[8]; + Py_UCS4 u4[4]; } MultibyteCodec_State; typedef int (*mbcodec_init)(const void *config); diff -r e8b3083bb148 Python/importlib.h --- a/Python/importlib.h Sat Nov 22 22:14:41 2014 -0800 +++ b/Python/importlib.h Sun Dec 14 23:02:12 2014 +0900 @@ -3809,440 +3809,440 @@ 19,1,114,108,1,0,0,122,16,78,111,32,109,111,100,117, 108,101,32,110,97,109,101,100,32,122,4,123,33,114,125,99, 2,0,0,0,0,0,0,0,8,0,0,0,12,0,0,0, - 67,0,0,0,115,37,1,0,0,100,0,0,125,2,0,124, + 67,0,0,0,115,40,1,0,0,100,0,0,125,2,0,124, 0,0,106,0,0,100,1,0,131,1,0,100,2,0,25,125, - 3,0,124,3,0,114,172,0,124,3,0,116,1,0,106,2, + 3,0,124,3,0,114,175,0,124,3,0,116,1,0,106,2, 0,107,7,0,114,59,0,116,3,0,124,1,0,124,3,0, 131,2,0,1,124,0,0,116,1,0,106,2,0,107,6,0, 114,85,0,116,1,0,106,2,0,124,0,0,25,83,116,1, 0,106,2,0,124,3,0,25,125,4,0,121,13,0,124,4, - 0,106,4,0,125,2,0,87,110,58,0,4,116,5,0,107, - 10,0,114,171,0,1,1,1,116,6,0,100,3,0,23,106, + 0,106,4,0,125,2,0,87,110,61,0,4,116,5,0,107, + 10,0,114,174,0,1,1,1,116,6,0,100,3,0,23,106, 7,0,124,0,0,124,3,0,131,2,0,125,5,0,116,8, - 0,124,5,0,100,4,0,124,0,0,131,1,1,130,1,0, - 89,110,1,0,88,116,9,0,124,0,0,124,2,0,131,2, - 0,125,6,0,124,6,0,100,0,0,107,8,0,114,229,0, - 116,8,0,116,6,0,106,7,0,124,0,0,131,1,0,100, - 4,0,124,0,0,131,1,1,130,1,0,110,12,0,116,10, - 0,124,6,0,131,1,0,125,7,0,124,3,0,114,33,1, - 116,1,0,106,2,0,124,3,0,25,125,4,0,116,11,0, - 124,4,0,124,0,0,106,0,0,100,1,0,131,1,0,100, - 5,0,25,124,7,0,131,3,0,1,124,7,0,83,41,6, - 78,114,116,0,0,0,114,84,0,0,0,122,23,59,32,123, - 33,114,125,32,105,115,32,110,111,116,32,97,32,112,97,99, - 107,97,103,101,114,67,0,0,0,114,115,0,0,0,41,12, - 114,32,0,0,0,114,7,0,0,0,114,73,0,0,0,114, - 114,0,0,0,114,245,0,0,0,114,207,0,0,0,218,8, - 95,69,82,82,95,77,83,71,114,47,0,0,0,114,153,0, - 0,0,114,105,1,0,0,114,3,1,0,0,114,61,0,0, - 0,41,8,114,67,0,0,0,218,7,105,109,112,111,114,116, - 95,114,35,0,0,0,114,232,0,0,0,90,13,112,97,114, - 101,110,116,95,109,111,100,117,108,101,114,171,0,0,0,114, - 176,0,0,0,114,177,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,218,23,95,102,105,110,100,95, - 97,110,100,95,108,111,97,100,95,117,110,108,111,99,107,101, - 100,113,8,0,0,115,42,0,0,0,0,1,6,1,19,1, - 6,1,15,1,13,2,15,1,11,1,13,1,3,1,13,1, - 13,1,22,1,23,1,15,1,12,1,30,2,12,1,6,2, - 13,1,29,1,114,111,1,0,0,99,2,0,0,0,0,0, - 0,0,2,0,0,0,10,0,0,0,67,0,0,0,115,36, - 0,0,0,116,0,0,124,0,0,131,1,0,143,18,0,1, - 116,1,0,124,0,0,124,1,0,131,2,0,83,87,100,1, - 0,81,88,100,1,0,83,41,2,122,54,70,105,110,100,32, - 97,110,100,32,108,111,97,100,32,116,104,101,32,109,111,100, - 117,108,101,44,32,97,110,100,32,114,101,108,101,97,115,101, - 32,116,104,101,32,105,109,112,111,114,116,32,108,111,99,107, - 46,78,41,2,114,103,0,0,0,114,111,1,0,0,41,2, - 114,67,0,0,0,114,110,1,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,14,95,102,105,110,100, - 95,97,110,100,95,108,111,97,100,140,8,0,0,115,4,0, - 0,0,0,2,13,1,114,112,1,0,0,99,3,0,0,0, - 0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,0, - 115,166,0,0,0,116,0,0,124,0,0,124,1,0,124,2, - 0,131,3,0,1,124,2,0,100,1,0,107,4,0,114,46, - 0,116,1,0,124,0,0,124,1,0,124,2,0,131,3,0, - 125,0,0,116,2,0,106,3,0,131,0,0,1,124,0,0, - 116,4,0,106,5,0,107,7,0,114,84,0,116,6,0,124, - 0,0,116,7,0,131,2,0,83,116,4,0,106,5,0,124, - 0,0,25,125,3,0,124,3,0,100,2,0,107,8,0,114, - 152,0,116,2,0,106,8,0,131,0,0,1,100,3,0,106, - 9,0,124,0,0,131,1,0,125,4,0,116,10,0,124,4, - 0,100,4,0,124,0,0,131,1,1,130,1,0,116,11,0, - 124,0,0,131,1,0,1,124,3,0,83,41,5,97,50,1, - 0,0,73,109,112,111,114,116,32,97,110,100,32,114,101,116, - 117,114,110,32,116,104,101,32,109,111,100,117,108,101,32,98, - 97,115,101,100,32,111,110,32,105,116,115,32,110,97,109,101, - 44,32,116,104,101,32,112,97,99,107,97,103,101,32,116,104, - 101,32,99,97,108,108,32,105,115,10,32,32,32,32,98,101, - 105,110,103,32,109,97,100,101,32,102,114,111,109,44,32,97, - 110,100,32,116,104,101,32,108,101,118,101,108,32,97,100,106, - 117,115,116,109,101,110,116,46,10,10,32,32,32,32,84,104, - 105,115,32,102,117,110,99,116,105,111,110,32,114,101,112,114, - 101,115,101,110,116,115,32,116,104,101,32,103,114,101,97,116, - 101,115,116,32,99,111,109,109,111,110,32,100,101,110,111,109, - 105,110,97,116,111,114,32,111,102,32,102,117,110,99,116,105, - 111,110,97,108,105,116,121,10,32,32,32,32,98,101,116,119, - 101,101,110,32,105,109,112,111,114,116,95,109,111,100,117,108, - 101,32,97,110,100,32,95,95,105,109,112,111,114,116,95,95, - 46,32,84,104,105,115,32,105,110,99,108,117,100,101,115,32, - 115,101,116,116,105,110,103,32,95,95,112,97,99,107,97,103, - 101,95,95,32,105,102,10,32,32,32,32,116,104,101,32,108, - 111,97,100,101,114,32,100,105,100,32,110,111,116,46,10,10, - 32,32,32,32,114,84,0,0,0,78,122,40,105,109,112,111, - 114,116,32,111,102,32,123,125,32,104,97,108,116,101,100,59, - 32,78,111,110,101,32,105,110,32,115,121,115,46,109,111,100, - 117,108,101,115,114,67,0,0,0,41,12,114,108,1,0,0, - 114,102,1,0,0,114,106,0,0,0,114,0,1,0,0,114, - 7,0,0,0,114,73,0,0,0,114,112,1,0,0,218,11, - 95,103,99,100,95,105,109,112,111,114,116,114,107,0,0,0, - 114,47,0,0,0,114,153,0,0,0,114,112,0,0,0,41, - 5,114,67,0,0,0,114,100,1,0,0,114,101,1,0,0, - 114,177,0,0,0,114,151,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,113,1,0,0,146,8, - 0,0,115,26,0,0,0,0,9,16,1,12,1,18,1,10, - 1,15,1,13,1,13,1,12,1,10,2,15,1,18,1,10, - 1,114,113,1,0,0,99,3,0,0,0,0,0,0,0,6, - 0,0,0,17,0,0,0,67,0,0,0,115,239,0,0,0, - 116,0,0,124,0,0,100,1,0,131,2,0,114,235,0,100, - 2,0,124,1,0,107,6,0,114,83,0,116,1,0,124,1, - 0,131,1,0,125,1,0,124,1,0,106,2,0,100,2,0, - 131,1,0,1,116,0,0,124,0,0,100,3,0,131,2,0, - 114,83,0,124,1,0,106,3,0,124,0,0,106,4,0,131, - 1,0,1,120,149,0,124,1,0,68,93,141,0,125,3,0, - 116,0,0,124,0,0,124,3,0,131,2,0,115,90,0,100, - 4,0,106,5,0,124,0,0,106,6,0,124,3,0,131,2, - 0,125,4,0,121,17,0,116,7,0,124,2,0,124,4,0, - 131,2,0,1,87,113,90,0,4,116,8,0,107,10,0,114, - 230,0,1,125,5,0,1,122,47,0,116,9,0,124,5,0, - 131,1,0,106,10,0,116,11,0,131,1,0,114,209,0,124, - 5,0,106,12,0,124,4,0,107,2,0,114,209,0,119,90, - 0,130,0,0,87,89,100,5,0,100,5,0,125,5,0,126, - 5,0,88,113,90,0,88,113,90,0,87,124,0,0,83,41, - 6,122,238,70,105,103,117,114,101,32,111,117,116,32,119,104, - 97,116,32,95,95,105,109,112,111,114,116,95,95,32,115,104, - 111,117,108,100,32,114,101,116,117,114,110,46,10,10,32,32, - 32,32,84,104,101,32,105,109,112,111,114,116,95,32,112,97, - 114,97,109,101,116,101,114,32,105,115,32,97,32,99,97,108, - 108,97,98,108,101,32,119,104,105,99,104,32,116,97,107,101, - 115,32,116,104,101,32,110,97,109,101,32,111,102,32,109,111, - 100,117,108,101,32,116,111,10,32,32,32,32,105,109,112,111, - 114,116,46,32,73,116,32,105,115,32,114,101,113,117,105,114, - 101,100,32,116,111,32,100,101,99,111,117,112,108,101,32,116, - 104,101,32,102,117,110,99,116,105,111,110,32,102,114,111,109, - 32,97,115,115,117,109,105,110,103,32,105,109,112,111,114,116, - 108,105,98,39,115,10,32,32,32,32,105,109,112,111,114,116, - 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, - 105,115,32,100,101,115,105,114,101,100,46,10,10,32,32,32, - 32,114,245,0,0,0,250,1,42,218,7,95,95,97,108,108, - 95,95,122,5,123,125,46,123,125,78,41,13,114,60,0,0, - 0,114,244,0,0,0,218,6,114,101,109,111,118,101,114,195, - 0,0,0,114,115,1,0,0,114,47,0,0,0,114,57,0, - 0,0,114,114,0,0,0,114,153,0,0,0,114,81,1,0, - 0,114,9,0,0,0,218,15,95,69,82,82,95,77,83,71, - 95,80,82,69,70,73,88,114,67,0,0,0,41,6,114,177, - 0,0,0,218,8,102,114,111,109,108,105,115,116,114,110,1, - 0,0,114,16,0,0,0,90,9,102,114,111,109,95,110,97, - 109,101,114,38,1,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,218,16,95,104,97,110,100,108,101,95, - 102,114,111,109,108,105,115,116,170,8,0,0,115,34,0,0, - 0,0,10,15,1,12,1,12,1,13,1,15,1,16,1,13, - 1,15,1,21,1,3,1,17,1,18,4,21,1,15,1,3, - 1,26,1,114,119,1,0,0,99,1,0,0,0,0,0,0, - 0,2,0,0,0,2,0,0,0,67,0,0,0,115,72,0, - 0,0,124,0,0,106,0,0,100,1,0,131,1,0,125,1, - 0,124,1,0,100,2,0,107,8,0,114,68,0,124,0,0, - 100,3,0,25,125,1,0,100,4,0,124,0,0,107,7,0, - 114,68,0,124,1,0,106,1,0,100,5,0,131,1,0,100, - 6,0,25,125,1,0,124,1,0,83,41,7,122,167,67,97, - 108,99,117,108,97,116,101,32,119,104,97,116,32,95,95,112, - 97,99,107,97,103,101,95,95,32,115,104,111,117,108,100,32, - 98,101,46,10,10,32,32,32,32,95,95,112,97,99,107,97, - 103,101,95,95,32,105,115,32,110,111,116,32,103,117,97,114, - 97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,102, - 105,110,101,100,32,111,114,32,99,111,117,108,100,32,98,101, - 32,115,101,116,32,116,111,32,78,111,110,101,10,32,32,32, - 32,116,111,32,114,101,112,114,101,115,101,110,116,32,116,104, - 97,116,32,105,116,115,32,112,114,111,112,101,114,32,118,97, - 108,117,101,32,105,115,32,117,110,107,110,111,119,110,46,10, - 10,32,32,32,32,114,248,0,0,0,78,114,57,0,0,0, - 114,245,0,0,0,114,116,0,0,0,114,84,0,0,0,41, - 2,114,93,0,0,0,114,32,0,0,0,41,2,218,7,103, - 108,111,98,97,108,115,114,100,1,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,218,17,95,99,97,108, - 99,95,95,95,112,97,99,107,97,103,101,95,95,202,8,0, - 0,115,12,0,0,0,0,7,15,1,12,1,10,1,12,1, - 19,1,114,121,1,0,0,99,0,0,0,0,0,0,0,0, - 3,0,0,0,3,0,0,0,67,0,0,0,115,55,0,0, - 0,116,0,0,116,1,0,106,2,0,131,0,0,102,2,0, - 125,0,0,116,3,0,116,4,0,102,2,0,125,1,0,116, - 5,0,116,6,0,102,2,0,125,2,0,124,0,0,124,1, - 0,124,2,0,103,3,0,83,41,1,122,95,82,101,116,117, - 114,110,115,32,97,32,108,105,115,116,32,111,102,32,102,105, - 108,101,45,98,97,115,101,100,32,109,111,100,117,108,101,32, - 108,111,97,100,101,114,115,46,10,10,32,32,32,32,69,97, - 99,104,32,105,116,101,109,32,105,115,32,97,32,116,117,112, - 108,101,32,40,108,111,97,100,101,114,44,32,115,117,102,102, - 105,120,101,115,41,46,10,32,32,32,32,41,7,114,54,1, - 0,0,114,106,0,0,0,218,18,101,120,116,101,110,115,105, - 111,110,95,115,117,102,102,105,120,101,115,114,5,1,0,0, - 114,134,0,0,0,114,4,1,0,0,114,231,0,0,0,41, - 3,90,10,101,120,116,101,110,115,105,111,110,115,90,6,115, - 111,117,114,99,101,90,8,98,121,116,101,99,111,100,101,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,239, - 0,0,0,217,8,0,0,115,8,0,0,0,0,5,18,1, - 12,1,12,1,114,239,0,0,0,99,5,0,0,0,0,0, - 0,0,9,0,0,0,5,0,0,0,67,0,0,0,115,227, - 0,0,0,124,4,0,100,1,0,107,2,0,114,27,0,116, - 0,0,124,0,0,131,1,0,125,5,0,110,54,0,124,1, - 0,100,2,0,107,9,0,114,45,0,124,1,0,110,3,0, - 105,0,0,125,6,0,116,1,0,124,6,0,131,1,0,125, - 7,0,116,0,0,124,0,0,124,7,0,124,4,0,131,3, - 0,125,5,0,124,3,0,115,207,0,124,4,0,100,1,0, - 107,2,0,114,122,0,116,0,0,124,0,0,106,2,0,100, - 3,0,131,1,0,100,1,0,25,131,1,0,83,124,0,0, - 115,132,0,124,5,0,83,116,3,0,124,0,0,131,1,0, - 116,3,0,124,0,0,106,2,0,100,3,0,131,1,0,100, - 1,0,25,131,1,0,24,125,8,0,116,4,0,106,5,0, - 124,5,0,106,6,0,100,2,0,116,3,0,124,5,0,106, - 6,0,131,1,0,124,8,0,24,133,2,0,25,25,83,110, - 16,0,116,7,0,124,5,0,124,3,0,116,0,0,131,3, - 0,83,100,2,0,83,41,4,97,214,1,0,0,73,109,112, - 111,114,116,32,97,32,109,111,100,117,108,101,46,10,10,32, - 32,32,32,84,104,101,32,39,103,108,111,98,97,108,115,39, - 32,97,114,103,117,109,101,110,116,32,105,115,32,117,115,101, - 100,32,116,111,32,105,110,102,101,114,32,119,104,101,114,101, - 32,116,104,101,32,105,109,112,111,114,116,32,105,115,32,111, - 99,99,117,114,105,110,103,32,102,114,111,109,10,32,32,32, - 32,116,111,32,104,97,110,100,108,101,32,114,101,108,97,116, - 105,118,101,32,105,109,112,111,114,116,115,46,32,84,104,101, - 32,39,108,111,99,97,108,115,39,32,97,114,103,117,109,101, - 110,116,32,105,115,32,105,103,110,111,114,101,100,46,32,84, - 104,101,10,32,32,32,32,39,102,114,111,109,108,105,115,116, - 39,32,97,114,103,117,109,101,110,116,32,115,112,101,99,105, - 102,105,101,115,32,119,104,97,116,32,115,104,111,117,108,100, - 32,101,120,105,115,116,32,97,115,32,97,116,116,114,105,98, - 117,116,101,115,32,111,110,32,116,104,101,32,109,111,100,117, - 108,101,10,32,32,32,32,98,101,105,110,103,32,105,109,112, - 111,114,116,101,100,32,40,101,46,103,46,32,96,96,102,114, - 111,109,32,109,111,100,117,108,101,32,105,109,112,111,114,116, - 32,60,102,114,111,109,108,105,115,116,62,96,96,41,46,32, - 32,84,104,101,32,39,108,101,118,101,108,39,10,32,32,32, - 32,97,114,103,117,109,101,110,116,32,114,101,112,114,101,115, - 101,110,116,115,32,116,104,101,32,112,97,99,107,97,103,101, - 32,108,111,99,97,116,105,111,110,32,116,111,32,105,109,112, - 111,114,116,32,102,114,111,109,32,105,110,32,97,32,114,101, - 108,97,116,105,118,101,10,32,32,32,32,105,109,112,111,114, - 116,32,40,101,46,103,46,32,96,96,102,114,111,109,32,46, - 46,112,107,103,32,105,109,112,111,114,116,32,109,111,100,96, - 96,32,119,111,117,108,100,32,104,97,118,101,32,97,32,39, - 108,101,118,101,108,39,32,111,102,32,50,41,46,10,10,32, - 32,32,32,114,84,0,0,0,78,114,116,0,0,0,41,8, - 114,113,1,0,0,114,121,1,0,0,114,121,0,0,0,114, - 31,0,0,0,114,7,0,0,0,114,73,0,0,0,114,57, - 0,0,0,114,119,1,0,0,41,9,114,67,0,0,0,114, - 120,1,0,0,218,6,108,111,99,97,108,115,114,118,1,0, - 0,114,101,1,0,0,114,177,0,0,0,90,8,103,108,111, - 98,97,108,115,95,114,100,1,0,0,90,7,99,117,116,95, - 111,102,102,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,10,95,95,105,109,112,111,114,116,95,95,228,8, - 0,0,115,26,0,0,0,0,11,12,1,15,2,24,1,12, - 1,18,1,6,3,12,1,23,1,6,1,4,4,35,3,40, - 2,114,124,1,0,0,99,1,0,0,0,0,0,0,0,2, - 0,0,0,3,0,0,0,67,0,0,0,115,53,0,0,0, - 116,0,0,106,1,0,124,0,0,131,1,0,125,1,0,124, - 1,0,100,0,0,107,8,0,114,43,0,116,2,0,100,1, - 0,124,0,0,23,131,1,0,130,1,0,116,3,0,124,1, - 0,131,1,0,83,41,2,78,122,25,110,111,32,98,117,105, - 108,116,45,105,110,32,109,111,100,117,108,101,32,110,97,109, - 101,100,32,41,4,114,7,1,0,0,114,10,1,0,0,114, - 153,0,0,0,114,3,1,0,0,41,2,114,67,0,0,0, - 114,176,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,18,95,98,117,105,108,116,105,110,95,102, - 114,111,109,95,110,97,109,101,7,9,0,0,115,8,0,0, - 0,0,1,15,1,12,1,16,1,114,125,1,0,0,99,2, - 0,0,0,0,0,0,0,18,0,0,0,12,0,0,0,67, - 0,0,0,115,208,2,0,0,124,1,0,97,0,0,124,0, - 0,97,1,0,116,1,0,106,2,0,106,3,0,114,33,0, - 116,4,0,97,5,0,110,6,0,116,6,0,97,5,0,116, - 7,0,116,1,0,131,1,0,125,2,0,120,123,0,116,1, - 0,106,8,0,106,9,0,131,0,0,68,93,106,0,92,2, - 0,125,3,0,125,4,0,116,10,0,124,4,0,124,2,0, - 131,2,0,114,67,0,124,3,0,116,1,0,106,11,0,107, - 6,0,114,118,0,116,12,0,125,5,0,110,27,0,116,0, - 0,106,13,0,124,3,0,131,1,0,114,67,0,116,14,0, - 125,5,0,110,3,0,113,67,0,116,15,0,124,4,0,124, - 5,0,131,2,0,125,6,0,116,16,0,124,6,0,124,4, - 0,131,2,0,1,113,67,0,87,116,1,0,106,8,0,116, - 17,0,25,125,7,0,120,73,0,100,26,0,68,93,65,0, - 125,8,0,124,8,0,116,1,0,106,8,0,107,7,0,114, - 233,0,116,18,0,124,8,0,131,1,0,125,9,0,110,13, - 0,116,1,0,106,8,0,124,8,0,25,125,9,0,116,19, - 0,124,7,0,124,8,0,124,9,0,131,3,0,1,113,197, - 0,87,100,5,0,100,6,0,103,1,0,102,2,0,100,7, - 0,100,8,0,100,6,0,103,2,0,102,2,0,102,2,0, - 125,10,0,120,146,0,124,10,0,68,93,126,0,92,2,0, - 125,11,0,125,12,0,116,20,0,100,9,0,100,10,0,132, - 0,0,124,12,0,68,131,1,0,131,1,0,115,93,1,116, - 21,0,130,1,0,124,12,0,100,11,0,25,125,13,0,124, - 11,0,116,1,0,106,8,0,107,6,0,114,135,1,116,1, - 0,106,8,0,124,11,0,25,125,14,0,80,113,50,1,121, - 17,0,116,18,0,124,11,0,131,1,0,125,14,0,80,87, - 113,50,1,4,116,22,0,107,10,0,114,175,1,1,1,1, - 119,50,1,89,113,50,1,88,113,50,1,87,116,22,0,100, - 12,0,131,1,0,130,1,0,116,19,0,124,7,0,100,13, - 0,124,14,0,131,3,0,1,116,19,0,124,7,0,100,14, - 0,124,13,0,131,3,0,1,116,19,0,124,7,0,100,15, - 0,100,16,0,106,23,0,124,12,0,131,1,0,131,3,0, - 1,121,16,0,116,18,0,100,17,0,131,1,0,125,15,0, - 87,110,24,0,4,116,22,0,107,10,0,114,35,2,1,1, - 1,100,18,0,125,15,0,89,110,1,0,88,116,19,0,124, - 7,0,100,17,0,124,15,0,131,3,0,1,116,18,0,100, - 19,0,131,1,0,125,16,0,116,19,0,124,7,0,100,19, - 0,124,16,0,131,3,0,1,124,11,0,100,7,0,107,2, - 0,114,120,2,116,18,0,100,20,0,131,1,0,125,17,0, - 116,19,0,124,7,0,100,21,0,124,17,0,131,3,0,1, - 116,19,0,124,7,0,100,22,0,116,24,0,131,0,0,131, - 3,0,1,116,25,0,106,26,0,116,0,0,106,27,0,131, - 0,0,131,1,0,1,124,11,0,100,7,0,107,2,0,114, - 204,2,116,28,0,106,29,0,100,23,0,131,1,0,1,100, - 24,0,116,25,0,107,6,0,114,204,2,100,25,0,116,30, - 0,95,31,0,100,18,0,83,41,27,122,250,83,101,116,117, - 112,32,105,109,112,111,114,116,108,105,98,32,98,121,32,105, - 109,112,111,114,116,105,110,103,32,110,101,101,100,101,100,32, - 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,115, - 32,97,110,100,32,105,110,106,101,99,116,105,110,103,32,116, - 104,101,109,10,32,32,32,32,105,110,116,111,32,116,104,101, - 32,103,108,111,98,97,108,32,110,97,109,101,115,112,97,99, - 101,46,10,10,32,32,32,32,65,115,32,115,121,115,32,105, - 115,32,110,101,101,100,101,100,32,102,111,114,32,115,121,115, - 46,109,111,100,117,108,101,115,32,97,99,99,101,115,115,32, - 97,110,100,32,95,105,109,112,32,105,115,32,110,101,101,100, - 101,100,32,116,111,32,108,111,97,100,32,98,117,105,108,116, - 45,105,110,10,32,32,32,32,109,111,100,117,108,101,115,44, - 32,116,104,111,115,101,32,116,119,111,32,109,111,100,117,108, - 101,115,32,109,117,115,116,32,98,101,32,101,120,112,108,105, - 99,105,116,108,121,32,112,97,115,115,101,100,32,105,110,46, - 10,10,32,32,32,32,114,49,0,0,0,114,166,0,0,0, - 218,8,98,117,105,108,116,105,110,115,114,189,0,0,0,90, - 5,112,111,115,105,120,250,1,47,218,2,110,116,250,1,92, - 99,1,0,0,0,0,0,0,0,2,0,0,0,3,0,0, - 0,115,0,0,0,115,33,0,0,0,124,0,0,93,23,0, - 125,1,0,116,0,0,124,1,0,131,1,0,100,0,0,107, - 2,0,86,1,113,3,0,100,1,0,83,41,2,114,29,0, - 0,0,78,41,1,114,31,0,0,0,41,2,114,22,0,0, - 0,114,130,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,114,77,0,0,0,57,9,0,0,115,2, - 0,0,0,6,0,122,25,95,115,101,116,117,112,46,60,108, - 111,99,97,108,115,62,46,60,103,101,110,101,120,112,114,62, - 114,84,0,0,0,122,30,105,109,112,111,114,116,108,105,98, - 32,114,101,113,117,105,114,101,115,32,112,111,115,105,120,32, - 111,114,32,110,116,114,3,0,0,0,114,25,0,0,0,114, - 21,0,0,0,114,30,0,0,0,114,85,0,0,0,78,114, - 111,0,0,0,90,6,119,105,110,114,101,103,114,21,1,0, - 0,114,6,0,0,0,122,4,46,112,121,119,122,6,95,100, - 46,112,121,100,84,41,4,122,3,95,105,111,122,9,95,119, - 97,114,110,105,110,103,115,122,8,98,117,105,108,116,105,110, - 115,122,7,109,97,114,115,104,97,108,41,32,114,106,0,0, - 0,114,7,0,0,0,114,117,0,0,0,114,118,0,0,0, - 114,120,0,0,0,114,231,0,0,0,114,119,0,0,0,114, - 66,0,0,0,114,73,0,0,0,218,5,105,116,101,109,115, - 114,190,0,0,0,114,157,0,0,0,114,7,1,0,0,114, - 162,0,0,0,114,16,1,0,0,114,246,0,0,0,114,252, - 0,0,0,114,57,0,0,0,114,125,1,0,0,114,61,0, - 0,0,218,3,97,108,108,114,100,0,0,0,114,153,0,0, - 0,114,26,0,0,0,114,11,0,0,0,114,57,1,0,0, - 114,195,0,0,0,114,122,1,0,0,114,134,0,0,0,114, - 222,0,0,0,114,20,1,0,0,114,24,1,0,0,41,18, - 218,10,115,121,115,95,109,111,100,117,108,101,218,11,95,105, - 109,112,95,109,111,100,117,108,101,90,11,109,111,100,117,108, - 101,95,116,121,112,101,114,67,0,0,0,114,177,0,0,0, - 114,169,0,0,0,114,176,0,0,0,90,11,115,101,108,102, - 95,109,111,100,117,108,101,90,12,98,117,105,108,116,105,110, - 95,110,97,109,101,90,14,98,117,105,108,116,105,110,95,109, - 111,100,117,108,101,90,10,111,115,95,100,101,116,97,105,108, - 115,90,10,98,117,105,108,116,105,110,95,111,115,114,21,0, - 0,0,114,25,0,0,0,90,9,111,115,95,109,111,100,117, - 108,101,90,13,116,104,114,101,97,100,95,109,111,100,117,108, - 101,90,14,119,101,97,107,114,101,102,95,109,111,100,117,108, - 101,90,13,119,105,110,114,101,103,95,109,111,100,117,108,101, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, - 6,95,115,101,116,117,112,14,9,0,0,115,106,0,0,0, - 0,9,6,1,6,2,12,1,9,2,6,3,12,1,28,1, - 15,1,15,1,9,1,15,1,9,2,3,1,15,1,17,3, - 13,1,13,1,15,1,15,2,13,1,20,3,33,1,19,2, - 31,1,10,1,15,1,13,1,4,2,3,1,12,1,5,1, - 13,1,12,2,12,1,16,1,16,1,25,3,3,1,16,1, - 13,2,11,1,16,3,12,1,16,3,12,1,12,1,16,3, - 19,1,19,1,12,1,13,1,12,1,114,134,1,0,0,99, - 2,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, - 67,0,0,0,115,133,0,0,0,116,0,0,124,0,0,124, - 1,0,131,2,0,1,116,1,0,131,0,0,125,2,0,116, - 2,0,106,3,0,106,4,0,116,5,0,106,6,0,124,2, - 0,140,0,0,103,1,0,131,1,0,1,116,2,0,106,7, - 0,106,8,0,116,9,0,131,1,0,1,116,2,0,106,7, - 0,106,8,0,116,10,0,131,1,0,1,116,11,0,106,12, - 0,100,1,0,107,2,0,114,113,0,116,2,0,106,7,0, - 106,8,0,116,13,0,131,1,0,1,116,2,0,106,7,0, - 106,8,0,116,14,0,131,1,0,1,100,2,0,83,41,3, - 122,50,73,110,115,116,97,108,108,32,105,109,112,111,114,116, - 108,105,98,32,97,115,32,116,104,101,32,105,109,112,108,101, - 109,101,110,116,97,116,105,111,110,32,111,102,32,105,109,112, - 111,114,116,46,114,128,1,0,0,78,41,15,114,134,1,0, - 0,114,239,0,0,0,114,7,0,0,0,114,76,1,0,0, - 114,195,0,0,0,114,85,1,0,0,114,98,1,0,0,114, - 104,1,0,0,114,222,0,0,0,114,7,1,0,0,114,16, - 1,0,0,114,3,0,0,0,114,57,0,0,0,114,20,1, - 0,0,114,71,1,0,0,41,3,114,132,1,0,0,114,133, - 1,0,0,90,17,115,117,112,112,111,114,116,101,100,95,108, - 111,97,100,101,114,115,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,8,95,105,110,115,116,97,108,108,100, - 9,0,0,115,16,0,0,0,0,2,13,1,9,1,28,1, - 16,1,16,1,15,1,16,1,114,135,1,0,0,41,3,122, - 3,119,105,110,114,1,0,0,0,114,2,0,0,0,41,98, - 114,59,0,0,0,114,10,0,0,0,114,11,0,0,0,114, - 17,0,0,0,114,19,0,0,0,114,28,0,0,0,114,38, - 0,0,0,114,39,0,0,0,114,43,0,0,0,114,44,0, - 0,0,114,46,0,0,0,114,55,0,0,0,114,65,0,0, - 0,114,68,0,0,0,114,66,0,0,0,218,8,95,95,99, - 111,100,101,95,95,114,191,0,0,0,114,69,0,0,0,114, - 109,0,0,0,114,92,0,0,0,114,99,0,0,0,114,82, - 0,0,0,114,83,0,0,0,114,102,0,0,0,114,103,0, - 0,0,114,105,0,0,0,114,112,0,0,0,114,114,0,0, - 0,114,15,0,0,0,114,183,0,0,0,114,14,0,0,0, - 114,18,0,0,0,90,17,95,82,65,87,95,77,65,71,73, - 67,95,78,85,77,66,69,82,114,125,0,0,0,114,134,0, - 0,0,114,119,0,0,0,114,120,0,0,0,114,132,0,0, - 0,114,135,0,0,0,114,142,0,0,0,114,144,0,0,0, - 114,152,0,0,0,114,156,0,0,0,114,161,0,0,0,114, - 164,0,0,0,114,172,0,0,0,114,178,0,0,0,114,188, - 0,0,0,114,193,0,0,0,114,196,0,0,0,114,201,0, - 0,0,114,210,0,0,0,114,211,0,0,0,114,215,0,0, - 0,114,173,0,0,0,218,6,111,98,106,101,99,116,114,240, - 0,0,0,114,238,0,0,0,114,246,0,0,0,114,252,0, - 0,0,114,254,0,0,0,114,208,0,0,0,114,174,0,0, - 0,114,2,1,0,0,114,3,1,0,0,114,175,0,0,0, - 114,6,1,0,0,114,7,1,0,0,114,16,1,0,0,114, - 20,1,0,0,114,30,1,0,0,114,31,1,0,0,114,46, - 1,0,0,114,5,1,0,0,114,4,1,0,0,114,57,1, - 0,0,114,54,1,0,0,114,58,1,0,0,114,249,0,0, - 0,114,71,1,0,0,114,85,1,0,0,114,99,1,0,0, - 114,102,1,0,0,114,103,1,0,0,114,105,1,0,0,114, - 108,1,0,0,114,117,1,0,0,114,109,1,0,0,114,111, - 1,0,0,114,112,1,0,0,114,113,1,0,0,114,119,1, - 0,0,114,121,1,0,0,114,239,0,0,0,114,124,1,0, - 0,114,125,1,0,0,114,134,1,0,0,114,135,1,0,0, - 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,8,60,109,111,100,117,108,101,62,8,0, - 0,0,115,182,0,0,0,6,17,6,3,12,12,12,5,12, - 5,12,6,12,12,12,10,12,9,12,5,12,7,15,22,12, - 8,12,4,15,4,19,20,6,2,6,3,22,4,19,68,19, - 21,19,19,12,19,12,20,12,115,22,1,18,2,6,2,9, - 2,9,1,9,2,15,27,12,23,12,19,12,12,18,8,12, - 18,12,11,12,11,12,18,12,15,21,55,21,12,18,10,12, - 14,12,36,19,27,19,106,24,22,9,3,12,1,15,63,18, - 45,18,56,12,14,12,17,12,25,12,29,12,23,12,14,15, - 25,19,70,19,71,19,63,19,24,22,110,19,41,25,43,25, - 16,6,3,19,57,19,57,19,38,19,134,19,146,19,13,12, - 9,12,9,15,40,12,17,6,1,10,2,12,27,12,6,18, - 24,12,32,12,15,12,11,24,35,12,7,12,86, + 0,124,5,0,100,4,0,124,0,0,131,1,1,100,0,0, + 130,2,0,89,110,1,0,88,116,9,0,124,0,0,124,2, + 0,131,2,0,125,6,0,124,6,0,100,0,0,107,8,0, + 114,232,0,116,8,0,116,6,0,106,7,0,124,0,0,131, + 1,0,100,4,0,124,0,0,131,1,1,130,1,0,110,12, + 0,116,10,0,124,6,0,131,1,0,125,7,0,124,3,0, + 114,36,1,116,1,0,106,2,0,124,3,0,25,125,4,0, + 116,11,0,124,4,0,124,0,0,106,0,0,100,1,0,131, + 1,0,100,5,0,25,124,7,0,131,3,0,1,124,7,0, + 83,41,6,78,114,116,0,0,0,114,84,0,0,0,122,23, + 59,32,123,33,114,125,32,105,115,32,110,111,116,32,97,32, + 112,97,99,107,97,103,101,114,67,0,0,0,114,115,0,0, + 0,41,12,114,32,0,0,0,114,7,0,0,0,114,73,0, + 0,0,114,114,0,0,0,114,245,0,0,0,114,207,0,0, + 0,218,8,95,69,82,82,95,77,83,71,114,47,0,0,0, + 114,153,0,0,0,114,105,1,0,0,114,3,1,0,0,114, + 61,0,0,0,41,8,114,67,0,0,0,218,7,105,109,112, + 111,114,116,95,114,35,0,0,0,114,232,0,0,0,90,13, + 112,97,114,101,110,116,95,109,111,100,117,108,101,114,171,0, + 0,0,114,176,0,0,0,114,177,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,23,95,102,105, + 110,100,95,97,110,100,95,108,111,97,100,95,117,110,108,111, + 99,107,101,100,113,8,0,0,115,42,0,0,0,0,1,6, + 1,19,1,6,1,15,1,13,2,15,1,11,1,13,1,3, + 1,13,1,13,1,22,1,26,1,15,1,12,1,30,2,12, + 1,6,2,13,1,29,1,114,111,1,0,0,99,2,0,0, + 0,0,0,0,0,2,0,0,0,10,0,0,0,67,0,0, + 0,115,36,0,0,0,116,0,0,124,0,0,131,1,0,143, + 18,0,1,116,1,0,124,0,0,124,1,0,131,2,0,83, + 87,100,1,0,81,88,100,1,0,83,41,2,122,54,70,105, + 110,100,32,97,110,100,32,108,111,97,100,32,116,104,101,32, + 109,111,100,117,108,101,44,32,97,110,100,32,114,101,108,101, + 97,115,101,32,116,104,101,32,105,109,112,111,114,116,32,108, + 111,99,107,46,78,41,2,114,103,0,0,0,114,111,1,0, + 0,41,2,114,67,0,0,0,114,110,1,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,218,14,95,102, + 105,110,100,95,97,110,100,95,108,111,97,100,140,8,0,0, + 115,4,0,0,0,0,2,13,1,114,112,1,0,0,99,3, + 0,0,0,0,0,0,0,5,0,0,0,4,0,0,0,67, + 0,0,0,115,166,0,0,0,116,0,0,124,0,0,124,1, + 0,124,2,0,131,3,0,1,124,2,0,100,1,0,107,4, + 0,114,46,0,116,1,0,124,0,0,124,1,0,124,2,0, + 131,3,0,125,0,0,116,2,0,106,3,0,131,0,0,1, + 124,0,0,116,4,0,106,5,0,107,7,0,114,84,0,116, + 6,0,124,0,0,116,7,0,131,2,0,83,116,4,0,106, + 5,0,124,0,0,25,125,3,0,124,3,0,100,2,0,107, + 8,0,114,152,0,116,2,0,106,8,0,131,0,0,1,100, + 3,0,106,9,0,124,0,0,131,1,0,125,4,0,116,10, + 0,124,4,0,100,4,0,124,0,0,131,1,1,130,1,0, + 116,11,0,124,0,0,131,1,0,1,124,3,0,83,41,5, + 97,50,1,0,0,73,109,112,111,114,116,32,97,110,100,32, + 114,101,116,117,114,110,32,116,104,101,32,109,111,100,117,108, + 101,32,98,97,115,101,100,32,111,110,32,105,116,115,32,110, + 97,109,101,44,32,116,104,101,32,112,97,99,107,97,103,101, + 32,116,104,101,32,99,97,108,108,32,105,115,10,32,32,32, + 32,98,101,105,110,103,32,109,97,100,101,32,102,114,111,109, + 44,32,97,110,100,32,116,104,101,32,108,101,118,101,108,32, + 97,100,106,117,115,116,109,101,110,116,46,10,10,32,32,32, + 32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,114, + 101,112,114,101,115,101,110,116,115,32,116,104,101,32,103,114, + 101,97,116,101,115,116,32,99,111,109,109,111,110,32,100,101, + 110,111,109,105,110,97,116,111,114,32,111,102,32,102,117,110, + 99,116,105,111,110,97,108,105,116,121,10,32,32,32,32,98, + 101,116,119,101,101,110,32,105,109,112,111,114,116,95,109,111, + 100,117,108,101,32,97,110,100,32,95,95,105,109,112,111,114, + 116,95,95,46,32,84,104,105,115,32,105,110,99,108,117,100, + 101,115,32,115,101,116,116,105,110,103,32,95,95,112,97,99, + 107,97,103,101,95,95,32,105,102,10,32,32,32,32,116,104, + 101,32,108,111,97,100,101,114,32,100,105,100,32,110,111,116, + 46,10,10,32,32,32,32,114,84,0,0,0,78,122,40,105, + 109,112,111,114,116,32,111,102,32,123,125,32,104,97,108,116, + 101,100,59,32,78,111,110,101,32,105,110,32,115,121,115,46, + 109,111,100,117,108,101,115,114,67,0,0,0,41,12,114,108, + 1,0,0,114,102,1,0,0,114,106,0,0,0,114,0,1, + 0,0,114,7,0,0,0,114,73,0,0,0,114,112,1,0, + 0,218,11,95,103,99,100,95,105,109,112,111,114,116,114,107, + 0,0,0,114,47,0,0,0,114,153,0,0,0,114,112,0, + 0,0,41,5,114,67,0,0,0,114,100,1,0,0,114,101, + 1,0,0,114,177,0,0,0,114,151,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,113,1,0, + 0,146,8,0,0,115,26,0,0,0,0,9,16,1,12,1, + 18,1,10,1,15,1,13,1,13,1,12,1,10,2,15,1, + 18,1,10,1,114,113,1,0,0,99,3,0,0,0,0,0, + 0,0,6,0,0,0,17,0,0,0,67,0,0,0,115,239, + 0,0,0,116,0,0,124,0,0,100,1,0,131,2,0,114, + 235,0,100,2,0,124,1,0,107,6,0,114,83,0,116,1, + 0,124,1,0,131,1,0,125,1,0,124,1,0,106,2,0, + 100,2,0,131,1,0,1,116,0,0,124,0,0,100,3,0, + 131,2,0,114,83,0,124,1,0,106,3,0,124,0,0,106, + 4,0,131,1,0,1,120,149,0,124,1,0,68,93,141,0, + 125,3,0,116,0,0,124,0,0,124,3,0,131,2,0,115, + 90,0,100,4,0,106,5,0,124,0,0,106,6,0,124,3, + 0,131,2,0,125,4,0,121,17,0,116,7,0,124,2,0, + 124,4,0,131,2,0,1,87,113,90,0,4,116,8,0,107, + 10,0,114,230,0,1,125,5,0,1,122,47,0,116,9,0, + 124,5,0,131,1,0,106,10,0,116,11,0,131,1,0,114, + 209,0,124,5,0,106,12,0,124,4,0,107,2,0,114,209, + 0,119,90,0,130,0,0,87,89,100,5,0,100,5,0,125, + 5,0,126,5,0,88,113,90,0,88,113,90,0,87,124,0, + 0,83,41,6,122,238,70,105,103,117,114,101,32,111,117,116, + 32,119,104,97,116,32,95,95,105,109,112,111,114,116,95,95, + 32,115,104,111,117,108,100,32,114,101,116,117,114,110,46,10, + 10,32,32,32,32,84,104,101,32,105,109,112,111,114,116,95, + 32,112,97,114,97,109,101,116,101,114,32,105,115,32,97,32, + 99,97,108,108,97,98,108,101,32,119,104,105,99,104,32,116, + 97,107,101,115,32,116,104,101,32,110,97,109,101,32,111,102, + 32,109,111,100,117,108,101,32,116,111,10,32,32,32,32,105, + 109,112,111,114,116,46,32,73,116,32,105,115,32,114,101,113, + 117,105,114,101,100,32,116,111,32,100,101,99,111,117,112,108, + 101,32,116,104,101,32,102,117,110,99,116,105,111,110,32,102, + 114,111,109,32,97,115,115,117,109,105,110,103,32,105,109,112, + 111,114,116,108,105,98,39,115,10,32,32,32,32,105,109,112, + 111,114,116,32,105,109,112,108,101,109,101,110,116,97,116,105, + 111,110,32,105,115,32,100,101,115,105,114,101,100,46,10,10, + 32,32,32,32,114,245,0,0,0,250,1,42,218,7,95,95, + 97,108,108,95,95,122,5,123,125,46,123,125,78,41,13,114, + 60,0,0,0,114,244,0,0,0,218,6,114,101,109,111,118, + 101,114,195,0,0,0,114,115,1,0,0,114,47,0,0,0, + 114,57,0,0,0,114,114,0,0,0,114,153,0,0,0,114, + 81,1,0,0,114,9,0,0,0,218,15,95,69,82,82,95, + 77,83,71,95,80,82,69,70,73,88,114,67,0,0,0,41, + 6,114,177,0,0,0,218,8,102,114,111,109,108,105,115,116, + 114,110,1,0,0,114,16,0,0,0,90,9,102,114,111,109, + 95,110,97,109,101,114,38,1,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,218,16,95,104,97,110,100, + 108,101,95,102,114,111,109,108,105,115,116,170,8,0,0,115, + 34,0,0,0,0,10,15,1,12,1,12,1,13,1,15,1, + 16,1,13,1,15,1,21,1,3,1,17,1,18,4,21,1, + 15,1,3,1,26,1,114,119,1,0,0,99,1,0,0,0, + 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, + 115,72,0,0,0,124,0,0,106,0,0,100,1,0,131,1, + 0,125,1,0,124,1,0,100,2,0,107,8,0,114,68,0, + 124,0,0,100,3,0,25,125,1,0,100,4,0,124,0,0, + 107,7,0,114,68,0,124,1,0,106,1,0,100,5,0,131, + 1,0,100,6,0,25,125,1,0,124,1,0,83,41,7,122, + 167,67,97,108,99,117,108,97,116,101,32,119,104,97,116,32, + 95,95,112,97,99,107,97,103,101,95,95,32,115,104,111,117, + 108,100,32,98,101,46,10,10,32,32,32,32,95,95,112,97, + 99,107,97,103,101,95,95,32,105,115,32,110,111,116,32,103, + 117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32, + 100,101,102,105,110,101,100,32,111,114,32,99,111,117,108,100, + 32,98,101,32,115,101,116,32,116,111,32,78,111,110,101,10, + 32,32,32,32,116,111,32,114,101,112,114,101,115,101,110,116, + 32,116,104,97,116,32,105,116,115,32,112,114,111,112,101,114, + 32,118,97,108,117,101,32,105,115,32,117,110,107,110,111,119, + 110,46,10,10,32,32,32,32,114,248,0,0,0,78,114,57, + 0,0,0,114,245,0,0,0,114,116,0,0,0,114,84,0, + 0,0,41,2,114,93,0,0,0,114,32,0,0,0,41,2, + 218,7,103,108,111,98,97,108,115,114,100,1,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,218,17,95, + 99,97,108,99,95,95,95,112,97,99,107,97,103,101,95,95, + 202,8,0,0,115,12,0,0,0,0,7,15,1,12,1,10, + 1,12,1,19,1,114,121,1,0,0,99,0,0,0,0,0, + 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115, + 55,0,0,0,116,0,0,116,1,0,106,2,0,131,0,0, + 102,2,0,125,0,0,116,3,0,116,4,0,102,2,0,125, + 1,0,116,5,0,116,6,0,102,2,0,125,2,0,124,0, + 0,124,1,0,124,2,0,103,3,0,83,41,1,122,95,82, + 101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102, + 32,102,105,108,101,45,98,97,115,101,100,32,109,111,100,117, + 108,101,32,108,111,97,100,101,114,115,46,10,10,32,32,32, + 32,69,97,99,104,32,105,116,101,109,32,105,115,32,97,32, + 116,117,112,108,101,32,40,108,111,97,100,101,114,44,32,115, + 117,102,102,105,120,101,115,41,46,10,32,32,32,32,41,7, + 114,54,1,0,0,114,106,0,0,0,218,18,101,120,116,101, + 110,115,105,111,110,95,115,117,102,102,105,120,101,115,114,5, + 1,0,0,114,134,0,0,0,114,4,1,0,0,114,231,0, + 0,0,41,3,90,10,101,120,116,101,110,115,105,111,110,115, + 90,6,115,111,117,114,99,101,90,8,98,121,116,101,99,111, + 100,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,239,0,0,0,217,8,0,0,115,8,0,0,0,0, + 5,18,1,12,1,12,1,114,239,0,0,0,99,5,0,0, + 0,0,0,0,0,9,0,0,0,5,0,0,0,67,0,0, + 0,115,227,0,0,0,124,4,0,100,1,0,107,2,0,114, + 27,0,116,0,0,124,0,0,131,1,0,125,5,0,110,54, + 0,124,1,0,100,2,0,107,9,0,114,45,0,124,1,0, + 110,3,0,105,0,0,125,6,0,116,1,0,124,6,0,131, + 1,0,125,7,0,116,0,0,124,0,0,124,7,0,124,4, + 0,131,3,0,125,5,0,124,3,0,115,207,0,124,4,0, + 100,1,0,107,2,0,114,122,0,116,0,0,124,0,0,106, + 2,0,100,3,0,131,1,0,100,1,0,25,131,1,0,83, + 124,0,0,115,132,0,124,5,0,83,116,3,0,124,0,0, + 131,1,0,116,3,0,124,0,0,106,2,0,100,3,0,131, + 1,0,100,1,0,25,131,1,0,24,125,8,0,116,4,0, + 106,5,0,124,5,0,106,6,0,100,2,0,116,3,0,124, + 5,0,106,6,0,131,1,0,124,8,0,24,133,2,0,25, + 25,83,110,16,0,116,7,0,124,5,0,124,3,0,116,0, + 0,131,3,0,83,100,2,0,83,41,4,97,214,1,0,0, + 73,109,112,111,114,116,32,97,32,109,111,100,117,108,101,46, + 10,10,32,32,32,32,84,104,101,32,39,103,108,111,98,97, + 108,115,39,32,97,114,103,117,109,101,110,116,32,105,115,32, + 117,115,101,100,32,116,111,32,105,110,102,101,114,32,119,104, + 101,114,101,32,116,104,101,32,105,109,112,111,114,116,32,105, + 115,32,111,99,99,117,114,105,110,103,32,102,114,111,109,10, + 32,32,32,32,116,111,32,104,97,110,100,108,101,32,114,101, + 108,97,116,105,118,101,32,105,109,112,111,114,116,115,46,32, + 84,104,101,32,39,108,111,99,97,108,115,39,32,97,114,103, + 117,109,101,110,116,32,105,115,32,105,103,110,111,114,101,100, + 46,32,84,104,101,10,32,32,32,32,39,102,114,111,109,108, + 105,115,116,39,32,97,114,103,117,109,101,110,116,32,115,112, + 101,99,105,102,105,101,115,32,119,104,97,116,32,115,104,111, + 117,108,100,32,101,120,105,115,116,32,97,115,32,97,116,116, + 114,105,98,117,116,101,115,32,111,110,32,116,104,101,32,109, + 111,100,117,108,101,10,32,32,32,32,98,101,105,110,103,32, + 105,109,112,111,114,116,101,100,32,40,101,46,103,46,32,96, + 96,102,114,111,109,32,109,111,100,117,108,101,32,105,109,112, + 111,114,116,32,60,102,114,111,109,108,105,115,116,62,96,96, + 41,46,32,32,84,104,101,32,39,108,101,118,101,108,39,10, + 32,32,32,32,97,114,103,117,109,101,110,116,32,114,101,112, + 114,101,115,101,110,116,115,32,116,104,101,32,112,97,99,107, + 97,103,101,32,108,111,99,97,116,105,111,110,32,116,111,32, + 105,109,112,111,114,116,32,102,114,111,109,32,105,110,32,97, + 32,114,101,108,97,116,105,118,101,10,32,32,32,32,105,109, + 112,111,114,116,32,40,101,46,103,46,32,96,96,102,114,111, + 109,32,46,46,112,107,103,32,105,109,112,111,114,116,32,109, + 111,100,96,96,32,119,111,117,108,100,32,104,97,118,101,32, + 97,32,39,108,101,118,101,108,39,32,111,102,32,50,41,46, + 10,10,32,32,32,32,114,84,0,0,0,78,114,116,0,0, + 0,41,8,114,113,1,0,0,114,121,1,0,0,114,121,0, + 0,0,114,31,0,0,0,114,7,0,0,0,114,73,0,0, + 0,114,57,0,0,0,114,119,1,0,0,41,9,114,67,0, + 0,0,114,120,1,0,0,218,6,108,111,99,97,108,115,114, + 118,1,0,0,114,101,1,0,0,114,177,0,0,0,90,8, + 103,108,111,98,97,108,115,95,114,100,1,0,0,90,7,99, + 117,116,95,111,102,102,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,218,10,95,95,105,109,112,111,114,116,95, + 95,228,8,0,0,115,26,0,0,0,0,11,12,1,15,2, + 24,1,12,1,18,1,6,3,12,1,23,1,6,1,4,4, + 35,3,40,2,114,124,1,0,0,99,1,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,53, + 0,0,0,116,0,0,106,1,0,124,0,0,131,1,0,125, + 1,0,124,1,0,100,0,0,107,8,0,114,43,0,116,2, + 0,100,1,0,124,0,0,23,131,1,0,130,1,0,116,3, + 0,124,1,0,131,1,0,83,41,2,78,122,25,110,111,32, + 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,32, + 110,97,109,101,100,32,41,4,114,7,1,0,0,114,10,1, + 0,0,114,153,0,0,0,114,3,1,0,0,41,2,114,67, + 0,0,0,114,176,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,218,18,95,98,117,105,108,116,105, + 110,95,102,114,111,109,95,110,97,109,101,7,9,0,0,115, + 8,0,0,0,0,1,15,1,12,1,16,1,114,125,1,0, + 0,99,2,0,0,0,0,0,0,0,18,0,0,0,12,0, + 0,0,67,0,0,0,115,208,2,0,0,124,1,0,97,0, + 0,124,0,0,97,1,0,116,1,0,106,2,0,106,3,0, + 114,33,0,116,4,0,97,5,0,110,6,0,116,6,0,97, + 5,0,116,7,0,116,1,0,131,1,0,125,2,0,120,123, + 0,116,1,0,106,8,0,106,9,0,131,0,0,68,93,106, + 0,92,2,0,125,3,0,125,4,0,116,10,0,124,4,0, + 124,2,0,131,2,0,114,67,0,124,3,0,116,1,0,106, + 11,0,107,6,0,114,118,0,116,12,0,125,5,0,110,27, + 0,116,0,0,106,13,0,124,3,0,131,1,0,114,67,0, + 116,14,0,125,5,0,110,3,0,113,67,0,116,15,0,124, + 4,0,124,5,0,131,2,0,125,6,0,116,16,0,124,6, + 0,124,4,0,131,2,0,1,113,67,0,87,116,1,0,106, + 8,0,116,17,0,25,125,7,0,120,73,0,100,26,0,68, + 93,65,0,125,8,0,124,8,0,116,1,0,106,8,0,107, + 7,0,114,233,0,116,18,0,124,8,0,131,1,0,125,9, + 0,110,13,0,116,1,0,106,8,0,124,8,0,25,125,9, + 0,116,19,0,124,7,0,124,8,0,124,9,0,131,3,0, + 1,113,197,0,87,100,5,0,100,6,0,103,1,0,102,2, + 0,100,7,0,100,8,0,100,6,0,103,2,0,102,2,0, + 102,2,0,125,10,0,120,146,0,124,10,0,68,93,126,0, + 92,2,0,125,11,0,125,12,0,116,20,0,100,9,0,100, + 10,0,132,0,0,124,12,0,68,131,1,0,131,1,0,115, + 93,1,116,21,0,130,1,0,124,12,0,100,11,0,25,125, + 13,0,124,11,0,116,1,0,106,8,0,107,6,0,114,135, + 1,116,1,0,106,8,0,124,11,0,25,125,14,0,80,113, + 50,1,121,17,0,116,18,0,124,11,0,131,1,0,125,14, + 0,80,87,113,50,1,4,116,22,0,107,10,0,114,175,1, + 1,1,1,119,50,1,89,113,50,1,88,113,50,1,87,116, + 22,0,100,12,0,131,1,0,130,1,0,116,19,0,124,7, + 0,100,13,0,124,14,0,131,3,0,1,116,19,0,124,7, + 0,100,14,0,124,13,0,131,3,0,1,116,19,0,124,7, + 0,100,15,0,100,16,0,106,23,0,124,12,0,131,1,0, + 131,3,0,1,121,16,0,116,18,0,100,17,0,131,1,0, + 125,15,0,87,110,24,0,4,116,22,0,107,10,0,114,35, + 2,1,1,1,100,18,0,125,15,0,89,110,1,0,88,116, + 19,0,124,7,0,100,17,0,124,15,0,131,3,0,1,116, + 18,0,100,19,0,131,1,0,125,16,0,116,19,0,124,7, + 0,100,19,0,124,16,0,131,3,0,1,124,11,0,100,7, + 0,107,2,0,114,120,2,116,18,0,100,20,0,131,1,0, + 125,17,0,116,19,0,124,7,0,100,21,0,124,17,0,131, + 3,0,1,116,19,0,124,7,0,100,22,0,116,24,0,131, + 0,0,131,3,0,1,116,25,0,106,26,0,116,0,0,106, + 27,0,131,0,0,131,1,0,1,124,11,0,100,7,0,107, + 2,0,114,204,2,116,28,0,106,29,0,100,23,0,131,1, + 0,1,100,24,0,116,25,0,107,6,0,114,204,2,100,25, + 0,116,30,0,95,31,0,100,18,0,83,41,27,122,250,83, + 101,116,117,112,32,105,109,112,111,114,116,108,105,98,32,98, + 121,32,105,109,112,111,114,116,105,110,103,32,110,101,101,100, + 101,100,32,98,117,105,108,116,45,105,110,32,109,111,100,117, + 108,101,115,32,97,110,100,32,105,110,106,101,99,116,105,110, + 103,32,116,104,101,109,10,32,32,32,32,105,110,116,111,32, + 116,104,101,32,103,108,111,98,97,108,32,110,97,109,101,115, + 112,97,99,101,46,10,10,32,32,32,32,65,115,32,115,121, + 115,32,105,115,32,110,101,101,100,101,100,32,102,111,114,32, + 115,121,115,46,109,111,100,117,108,101,115,32,97,99,99,101, + 115,115,32,97,110,100,32,95,105,109,112,32,105,115,32,110, + 101,101,100,101,100,32,116,111,32,108,111,97,100,32,98,117, + 105,108,116,45,105,110,10,32,32,32,32,109,111,100,117,108, + 101,115,44,32,116,104,111,115,101,32,116,119,111,32,109,111, + 100,117,108,101,115,32,109,117,115,116,32,98,101,32,101,120, + 112,108,105,99,105,116,108,121,32,112,97,115,115,101,100,32, + 105,110,46,10,10,32,32,32,32,114,49,0,0,0,114,166, + 0,0,0,218,8,98,117,105,108,116,105,110,115,114,189,0, + 0,0,90,5,112,111,115,105,120,250,1,47,218,2,110,116, + 250,1,92,99,1,0,0,0,0,0,0,0,2,0,0,0, + 3,0,0,0,115,0,0,0,115,33,0,0,0,124,0,0, + 93,23,0,125,1,0,116,0,0,124,1,0,131,1,0,100, + 0,0,107,2,0,86,1,113,3,0,100,1,0,83,41,2, + 114,29,0,0,0,78,41,1,114,31,0,0,0,41,2,114, + 22,0,0,0,114,130,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,77,0,0,0,57,9,0, + 0,115,2,0,0,0,6,0,122,25,95,115,101,116,117,112, + 46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120, + 112,114,62,114,84,0,0,0,122,30,105,109,112,111,114,116, + 108,105,98,32,114,101,113,117,105,114,101,115,32,112,111,115, + 105,120,32,111,114,32,110,116,114,3,0,0,0,114,25,0, + 0,0,114,21,0,0,0,114,30,0,0,0,114,85,0,0, + 0,78,114,111,0,0,0,90,6,119,105,110,114,101,103,114, + 21,1,0,0,114,6,0,0,0,122,4,46,112,121,119,122, + 6,95,100,46,112,121,100,84,41,4,122,3,95,105,111,122, + 9,95,119,97,114,110,105,110,103,115,122,8,98,117,105,108, + 116,105,110,115,122,7,109,97,114,115,104,97,108,41,32,114, + 106,0,0,0,114,7,0,0,0,114,117,0,0,0,114,118, + 0,0,0,114,120,0,0,0,114,231,0,0,0,114,119,0, + 0,0,114,66,0,0,0,114,73,0,0,0,218,5,105,116, + 101,109,115,114,190,0,0,0,114,157,0,0,0,114,7,1, + 0,0,114,162,0,0,0,114,16,1,0,0,114,246,0,0, + 0,114,252,0,0,0,114,57,0,0,0,114,125,1,0,0, + 114,61,0,0,0,218,3,97,108,108,114,100,0,0,0,114, + 153,0,0,0,114,26,0,0,0,114,11,0,0,0,114,57, + 1,0,0,114,195,0,0,0,114,122,1,0,0,114,134,0, + 0,0,114,222,0,0,0,114,20,1,0,0,114,24,1,0, + 0,41,18,218,10,115,121,115,95,109,111,100,117,108,101,218, + 11,95,105,109,112,95,109,111,100,117,108,101,90,11,109,111, + 100,117,108,101,95,116,121,112,101,114,67,0,0,0,114,177, + 0,0,0,114,169,0,0,0,114,176,0,0,0,90,11,115, + 101,108,102,95,109,111,100,117,108,101,90,12,98,117,105,108, + 116,105,110,95,110,97,109,101,90,14,98,117,105,108,116,105, + 110,95,109,111,100,117,108,101,90,10,111,115,95,100,101,116, + 97,105,108,115,90,10,98,117,105,108,116,105,110,95,111,115, + 114,21,0,0,0,114,25,0,0,0,90,9,111,115,95,109, + 111,100,117,108,101,90,13,116,104,114,101,97,100,95,109,111, + 100,117,108,101,90,14,119,101,97,107,114,101,102,95,109,111, + 100,117,108,101,90,13,119,105,110,114,101,103,95,109,111,100, + 117,108,101,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,218,6,95,115,101,116,117,112,14,9,0,0,115,106, + 0,0,0,0,9,6,1,6,2,12,1,9,2,6,3,12, + 1,28,1,15,1,15,1,9,1,15,1,9,2,3,1,15, + 1,17,3,13,1,13,1,15,1,15,2,13,1,20,3,33, + 1,19,2,31,1,10,1,15,1,13,1,4,2,3,1,12, + 1,5,1,13,1,12,2,12,1,16,1,16,1,25,3,3, + 1,16,1,13,2,11,1,16,3,12,1,16,3,12,1,12, + 1,16,3,19,1,19,1,12,1,13,1,12,1,114,134,1, + 0,0,99,2,0,0,0,0,0,0,0,3,0,0,0,3, + 0,0,0,67,0,0,0,115,133,0,0,0,116,0,0,124, + 0,0,124,1,0,131,2,0,1,116,1,0,131,0,0,125, + 2,0,116,2,0,106,3,0,106,4,0,116,5,0,106,6, + 0,124,2,0,140,0,0,103,1,0,131,1,0,1,116,2, + 0,106,7,0,106,8,0,116,9,0,131,1,0,1,116,2, + 0,106,7,0,106,8,0,116,10,0,131,1,0,1,116,11, + 0,106,12,0,100,1,0,107,2,0,114,113,0,116,2,0, + 106,7,0,106,8,0,116,13,0,131,1,0,1,116,2,0, + 106,7,0,106,8,0,116,14,0,131,1,0,1,100,2,0, + 83,41,3,122,50,73,110,115,116,97,108,108,32,105,109,112, + 111,114,116,108,105,98,32,97,115,32,116,104,101,32,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, + 105,109,112,111,114,116,46,114,128,1,0,0,78,41,15,114, + 134,1,0,0,114,239,0,0,0,114,7,0,0,0,114,76, + 1,0,0,114,195,0,0,0,114,85,1,0,0,114,98,1, + 0,0,114,104,1,0,0,114,222,0,0,0,114,7,1,0, + 0,114,16,1,0,0,114,3,0,0,0,114,57,0,0,0, + 114,20,1,0,0,114,71,1,0,0,41,3,114,132,1,0, + 0,114,133,1,0,0,90,17,115,117,112,112,111,114,116,101, + 100,95,108,111,97,100,101,114,115,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,218,8,95,105,110,115,116,97, + 108,108,100,9,0,0,115,16,0,0,0,0,2,13,1,9, + 1,28,1,16,1,16,1,15,1,16,1,114,135,1,0,0, + 41,3,122,3,119,105,110,114,1,0,0,0,114,2,0,0, + 0,41,98,114,59,0,0,0,114,10,0,0,0,114,11,0, + 0,0,114,17,0,0,0,114,19,0,0,0,114,28,0,0, + 0,114,38,0,0,0,114,39,0,0,0,114,43,0,0,0, + 114,44,0,0,0,114,46,0,0,0,114,55,0,0,0,114, + 65,0,0,0,114,68,0,0,0,114,66,0,0,0,218,8, + 95,95,99,111,100,101,95,95,114,191,0,0,0,114,69,0, + 0,0,114,109,0,0,0,114,92,0,0,0,114,99,0,0, + 0,114,82,0,0,0,114,83,0,0,0,114,102,0,0,0, + 114,103,0,0,0,114,105,0,0,0,114,112,0,0,0,114, + 114,0,0,0,114,15,0,0,0,114,183,0,0,0,114,14, + 0,0,0,114,18,0,0,0,90,17,95,82,65,87,95,77, + 65,71,73,67,95,78,85,77,66,69,82,114,125,0,0,0, + 114,134,0,0,0,114,119,0,0,0,114,120,0,0,0,114, + 132,0,0,0,114,135,0,0,0,114,142,0,0,0,114,144, + 0,0,0,114,152,0,0,0,114,156,0,0,0,114,161,0, + 0,0,114,164,0,0,0,114,172,0,0,0,114,178,0,0, + 0,114,188,0,0,0,114,193,0,0,0,114,196,0,0,0, + 114,201,0,0,0,114,210,0,0,0,114,211,0,0,0,114, + 215,0,0,0,114,173,0,0,0,218,6,111,98,106,101,99, + 116,114,240,0,0,0,114,238,0,0,0,114,246,0,0,0, + 114,252,0,0,0,114,254,0,0,0,114,208,0,0,0,114, + 174,0,0,0,114,2,1,0,0,114,3,1,0,0,114,175, + 0,0,0,114,6,1,0,0,114,7,1,0,0,114,16,1, + 0,0,114,20,1,0,0,114,30,1,0,0,114,31,1,0, + 0,114,46,1,0,0,114,5,1,0,0,114,4,1,0,0, + 114,57,1,0,0,114,54,1,0,0,114,58,1,0,0,114, + 249,0,0,0,114,71,1,0,0,114,85,1,0,0,114,99, + 1,0,0,114,102,1,0,0,114,103,1,0,0,114,105,1, + 0,0,114,108,1,0,0,114,117,1,0,0,114,109,1,0, + 0,114,111,1,0,0,114,112,1,0,0,114,113,1,0,0, + 114,119,1,0,0,114,121,1,0,0,114,239,0,0,0,114, + 124,1,0,0,114,125,1,0,0,114,134,1,0,0,114,135, + 1,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,218,8,60,109,111,100,117,108,101, + 62,8,0,0,0,115,182,0,0,0,6,17,6,3,12,12, + 12,5,12,5,12,6,12,12,12,10,12,9,12,5,12,7, + 15,22,12,8,12,4,15,4,19,20,6,2,6,3,22,4, + 19,68,19,21,19,19,12,19,12,20,12,115,22,1,18,2, + 6,2,9,2,9,1,9,2,15,27,12,23,12,19,12,12, + 18,8,12,18,12,11,12,11,12,18,12,15,21,55,21,12, + 18,10,12,14,12,36,19,27,19,106,24,22,9,3,12,1, + 15,63,18,45,18,56,12,14,12,17,12,25,12,29,12,23, + 12,14,15,25,19,70,19,71,19,63,19,24,22,110,19,41, + 25,43,25,16,6,3,19,57,19,57,19,38,19,134,19,146, + 19,13,12,9,12,9,15,40,12,17,6,1,10,2,12,27, + 12,6,18,24,12,32,12,15,12,11,24,35,12,7,12,86, };