File Coverage

lib/jacode.pl
Criterion Covered Total %
statement 506 675 74.9
branch 207 360 57.5
condition 18 72 25.0
subroutine 56 72 77.7
pod n/a
total 787 1179 66.7


line stmt bran cond sub pod time code
1             package jacode;
2             $support_jcode_package_too = 1;
3             ######################################################################
4             #
5             # jacode.pl: Perl program for Japanese character code conversion
6             #
7             # Copyright (c) 2010, 2011, 2014, 2015, 2016, 2017, 2018, 2019 INABA Hitoshi in a CPAN
8             #
9             # The latest version is available here:
10             #
11             # http://search.cpan.org/dist/jacode/
12             #
13             # *** ATTENTION ***
14             # This software is not "jcode.pl"
15             # Thus don't redistribute this software renaming as "jcode.pl"
16             # Moreover, this software IS NOT "jacode4e.pl"
17             # If you want "jacode4e.pl", search it on CPAN again.
18             #
19             # Original version `jcode.pl' is ...
20             #
21             # Copyright (c) 2002 Kazumasa Utashiro
22             # http://web.archive.org/web/20090608090304/http://srekcah.org/jcode/
23             #
24             # Copyright (c) 1995-2000 Kazumasa Utashiro
25             # Internet Initiative Japan Inc.
26             # 3-13 Kanda Nishiki-cho, Chiyoda-ku, Tokyo 101-0054, Japan
27             #
28             # Copyright (c) 1992,1993,1994 Kazumasa Utashiro
29             # Software Research Associates, Inc.
30             #
31             # Use and redistribution for ANY PURPOSE are granted as long as all
32             # copyright notices are retained. Redistribution with modification
33             # is allowed provided that you make your modified version obviously
34             # distinguishable from the original one. THIS SOFTWARE IS PROVIDED
35             # BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES ARE
36             # DISCLAIMED.
37             #
38             # Original version was developed under the name of srekcah@sra.co.jp
39             # February 1992 and it was called kconv.pl at the beginning. This
40             # address was a pen name for group of individuals and it is no longer
41             # valid.
42             #
43             # The latest version is available here:
44             #
45             # ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/
46             #
47             $VERSION = '2.13.4.23';
48             $VERSION = $VERSION;
49             $rcsid = sprintf(q$Id: jacode.pl,v %s branched from jcode.pl,v 2.13 2000/09/29 16:10:05 utashiro Exp $, $VERSION);
50              
51             ######################################################################
52             #
53             # INTERFACE for newcomers
54             # -----------------------
55             #
56             # jacode::convert(\$line, $OUTPUT_encoding [, $INPUT_encoding [, $option]])
57             # Convert the contents of $line to the specified Japanese
58             # encoding given in the second argument $OUTPUT_encoding.
59             # $OUTPUT_encoding can be any of "jis", "sjis", "euc" or "utf8",
60             # or use "noconv" when you don't want the encoding conversion.
61             #
62             # Input encoding is recognized semi-automatically from the
63             # $line itself when $INPUT_encoding is not supplied. It is
64             # better to specify $INPUT_encoding, since jacode::getcode's
65             # guess is not always right. xxx2yyy routine is more efficient
66             # when both codes are known.
67             #
68             # It returns the encoding of input string in scalar context,
69             # and a list of pointer of convert subroutine and the
70             # input encoding in array context.
71             #
72             # Japanese character encoding JIS X0201, X0208, X0212 and
73             # ASCII code are supported. JIS X0212 characters can not
74             # be represented in sjis or utf8 and they will be replased
75             # by "geta" character when converted to sjis.
76             # JIS X0213 characters can not be represented in all.
77             #
78             # For perl is 5.8.1 or later, jacode::convert acts as a wrapper
79             # to Encode::from_to. When $OUTPUT_encoding or $INPUT_encoding
80             # is neither "jis", "sjis", "euc" nor "utf8", and Encode module
81             # can be used,
82             #
83             # Encode::from_to( $line, $INPUT_encoding, $OUTPUT_encoding )
84             #
85             # is executed instead of
86             #
87             # jacode::convert(\$line, $OUTPUT_encoding, $INPUT_encoding, $option).
88             #
89             # In this case, there is no effective return value of pointer
90             # of convert subroutine in array context.
91             #
92             # Fourth $option parameter is just forwarded to conversion
93             # routine. See next paragraph for detail.
94             #
95             # jacode::xxx2yyy(\$line [, $option])
96             # Convert the Japanese code from xxx to yyy. String xxx
97             # and yyy are any convination from "jis", "euc", "sjis"
98             # or "utf8". They return *approximate* number of converted
99             # bytes. So return value 0 means the line was not
100             # converted at all.
101             #
102             # Optional parameter $option is used to specify optional
103             # conversion method. String "z" is for JIS X0201 KANA
104             # to JIS X0208 KANA, and "h" is for reverse.
105             #
106             # jacode::to($OUTPUT_encoding, $line [, $INPUT_encoding [, $option]])
107             # jacode::jis($line [, $INPUT_encoding [, $option]])
108             # jacode::euc($line [, $INPUT_encoding [, $option]])
109             # jacode::sjis($line [, $INPUT_encoding [, $option]])
110             # jacode::utf8($line [, $INPUT_encoding [, $option]])
111             # These functions are prepared for easy use of
112             # call/return-by-value interface. You can use these
113             # funcitons in s///e operation or any other place for
114             # convenience.
115             #
116             # jacode::jis_inout($JIS_Kanji_IN, $ASCII_IN)
117             # Set or inquire JIS Kanji start and ASCII start sequences.
118             # Default is "ESC-$-B" and "ESC-(-B". "ASCII start" is used
119             # instead of "JIS Kanji OUT". If specified in the short form
120             # of one character, and is set by being converted into full
121             # sequence.
122             #
123             # -----------------------------------------------
124             # short full sequence means
125             # -----------------------------------------------
126             # @ ESC-$-@ JIS C 6226-1978
127             # B ESC-$-B JIS X 0208-1983
128             # & ESC-&@-ESC-$-B JIS X 0208-1990
129             # O ESC-$-(-O JIS X 0213:2000 plane1
130             # Q ESC-$-(-Q JIS X 0213:2004 plane1
131             # -----------------------------------------------
132             #
133             # jacode::get_inout($line)
134             # Get JIS Kanji start and ASCII start sequences from $line.
135             #
136             # jacode::h2z_xxx(\$line)
137             # JIS X0201 KANA (so-called Hankaku-KANA) to JIS X0208 KANA
138             # (Zenkaku-KANA) code conversion routine. String xxx is
139             # any of "jis", "sjis", "euc" and "utf8". From the difficulty
140             # of recognizing code set from 1-byte KATAKANA string,
141             # automatic code recognition is not supported.
142             #
143             # jacode::z2h_xxx(\$line)
144             # JIS X0208 to JIS X0201 KANA code conversion routine.
145             # String xxx is any of "jis", "sjis", "euc" and "utf8".
146             #
147             # jacode::getcode(\$line)
148             # Return 'jis', 'sjis', 'euc', 'utf8' or undef according
149             # to Japanese character code in $line. Return 'binary' if
150             # the data has non-character code.
151             #
152             # When evaluated in array context, it returns a list
153             # contains two items. First value is the number of
154             # characters which matched to the expected code, and
155             # second value is the code name. It is useful if and
156             # only if the number is not 0 and the code is undef;
157             # that case means it couldn't tell 'euc' or 'sjis'
158             # because the evaluation score was exactly same. This
159             # interface is too tricky, though.
160             #
161             # Code detection between euc and sjis is very difficult
162             # or sometimes impossible or even lead to wrong result
163             # when it includes JIS X0201 KANA characters.
164             #
165             # jacode::init()
166             # Initialize the variables used in this package. You
167             # don't have to call this when using jocde.pl by `do' or
168             # `require' interface. Call it first if you embedded
169             # the jacode.pl at the end of your script.
170             #
171             # INTERFACE for backward compatibility
172             # ------------------------------------
173             #
174             # jacode::getcode_utashiro_2000_09_29(\$line)
175             # Original &getcode() of jcode.pl.
176             #
177             # jacode::tr(\$line, $from, $to [, $option])
178             # jacode::tr emulates tr operator for 2 byte code. Only 'd'
179             # is interpreted as an option.
180             #
181             # Range operator like `A-Z' for 2 byte code is partially
182             # supported. Code must be JIS or EUC-JP, and first byte
183             # have to be same on first and last character.
184             #
185             # CAUTION: Handling range operator is a kind of trick
186             # and it is not perfect. So if you need to transfer `-'
187             # character, please be sure to put it at the beginning
188             # or the end of $from and $to strings.
189             #
190             # jacode::trans($line, $from, $to [, $option])
191             # Same as jacode::tr but accept string and return string
192             # after translation.
193             #
194             # jacode::cache()
195             # jacode::nocache()
196             # jacode::flushcache()
197             # jacode::flush()
198             # Usually, converted character is cached in memory to
199             # avoid same calculations have to be done many times.
200             # To disable this caching, call jacode::nocache(). It
201             # can be revived by jacode::cache() and cache is flushed
202             # by calling jacode::flushcache(). jacode::cache() and
203             # jacode::nocache() functions return previous caching state.
204             # jacode::flush() is an alias of jacode::flushcache() to save
205             # old documents.
206             #
207             # $jacode::convf{'xxx', 'yyy'}
208             # The value of this associative array is pointer to the
209             # subroutine jacode::xxx2yyy().
210             #
211             # $jacode::z2hf{'xxx'}
212             # $jacode::h2zf{'xxx'}
213             # These are pointer to the corresponding function just
214             # as $jacode::convf.
215             #
216             ######################################################################
217             #
218             # PERL4 INTERFACE for jcode.pl users
219             # ----------------------------------
220             #
221             # See jacode::xxxxx to know &jcode'xxxxx
222             #
223             # &jcode'getcode_utashiro_2000_09_29(*line)
224             # &jcode'getcode(*line)
225             # &jcode'convert(*line, $OUTPUT_encoding [, $INPUT_encoding [, $option]])
226             # &jcode'xxx2yyy(*line [, $option])
227             # $jcode'convf{'xxx', 'yyy'}
228             # &jcode'to($OUTPUT_encoding, $line [, $INPUT_encoding [, $option]])
229             # &jcode'jis($line [, $INPUT_encoding [, $option]])
230             # &jcode'euc($line [, $INPUT_encoding [, $option]])
231             # &jcode'sjis($line [, $INPUT_encoding [, $option]])
232             # &jcode'utf8($line [, $INPUT_encoding [, $option]])
233             # &jcode'jis_inout($JIS_Kanji_IN, $ASCII_IN)
234             # &jcode'get_inout($line)
235             # &jcode'cache()
236             # &jcode'nocache()
237             # &jcode'flushcache()
238             # &jcode'flush()
239             # &jcode'h2z_xxx(*line)
240             # &jcode'z2h_xxx(*line)
241             # $jcode'z2hf{'xxx'}
242             # $jcode'h2zf{'xxx'}
243             # &jcode'tr(*line, $from, $to [, $option])
244             # &jcode'trans($line, $from, $to [, $option])
245             # &jcode'init()
246             #
247             ######################################################################
248             #
249             # PERL5 INTERFACE for jcode.pl users
250             # ----------------------------------
251             #
252             # Since lexical variable is not a subject of typeglob, *string style
253             # call doesn't work if the variable is declared as `my'. Same thing
254             # happens to special variable $_ if the perl is compiled to use
255             # thread capability. So using reference is generally recommented to
256             # avoid the mysterious error.
257             #
258             # See jacode::xxxxx to know jcode::xxxxx
259             #
260             # jcode::getcode_utashiro_2000_09_29(\$line)
261             # jcode::getcode(\$line)
262             # jcode::convert(\$line, $OUTPUT_encoding [, $INPUT_encoding [, $option]])
263             # jcode::xxx2yyy(\$line [, $option])
264             # &{$jcode::convf{'xxx', 'yyy'}}(\$line)
265             # jcode::to($OUTPUT_encoding, $line [, $INPUT_encoding [, $option]])
266             # jcode::jis($line [, $INPUT_encoding [, $option]])
267             # jcode::euc($line [, $INPUT_encoding [, $option]])
268             # jcode::sjis($line [, $INPUT_encoding [, $option]])
269             # jcode::utf8($line [, $INPUT_encoding [, $option]])
270             # jcode::jis_inout($JIS_Kanji_IN, $ASCII_IN)
271             # jcode::get_inout($line)
272             # jcode::cache()
273             # jcode::nocache()
274             # jcode::flushcache()
275             # jcode::flush()
276             # jcode::h2z_xxx(\$line)
277             # jcode::z2h_xxx(\$line)
278             # &{$jcode::z2hf{'xxx'}}(\$line)
279             # &{$jcode::h2zf{'xxx'}}(\$line)
280             # jcode::tr(\$line, $from, $to [, $option])
281             # jcode::trans($line, $from, $to [, $option])
282             # jcode::init()
283             #
284             ######################################################################
285             #
286             # SAMPLES
287             #
288             # Convert SJIS to JIS and print each line with code name
289             #
290             # #require 'jcode.pl';
291             # require 'jacode.pl';
292             # while (defined($s = <>)) {
293             # $code = &jcode'convert(*s, 'jis', 'sjis');
294             # print $code, "\t", $s;
295             # }
296             #
297             # Convert all lines to JIS according to the first recognized line
298             #
299             # #require 'jcode.pl';
300             # require 'jacode.pl';
301             # while (defined($s = <>)) {
302             # print, next unless $s =~ /[\x1b\x80-\xff]/;
303             # (*f, $INPUT_encoding) = &jcode'convert(*s, 'jis');
304             # print;
305             # defined(&f) || next;
306             # while (<>) { &f(*s); print; }
307             # last;
308             # }
309             #
310             # The safest way of JIS conversion
311             #
312             # #require 'jcode.pl';
313             # require 'jacode.pl';
314             # while (defined($s = <>)) {
315             # ($matched, $INPUT_encoding) = &jcode'getcode(*s);
316             # if (@buf == 0 && $matched == 0) {
317             # print $s;
318             # next;
319             # }
320             # push(@buf, $s);
321             # next unless $INPUT_encoding;
322             # while (defined($s = shift(@buf))) {
323             # &jcode'convert(*s, 'jis', $INPUT_encoding);
324             # print $s;
325             # }
326             # while (defined($s = <>)) {
327             # &jcode'convert(*s, 'jis', $INPUT_encoding);
328             # print $s;
329             # }
330             # last;
331             # }
332             # print @buf if @buf;
333             #
334             # Convert SJIS to UTF-8 and print each line by perl 4.036 or later
335             #
336             # #retire 'jcode.pl';
337             # require 'jacode.pl';
338             # while (defined($s = <>)) {
339             # &jcode'convert(*s, 'utf8', 'sjis');
340             # print $s;
341             # }
342             #
343             # Convert SJIS to UTF16-BE and print each line by perl 5.8.1 or later
344             #
345             # require 'jacode.pl';
346             # use 5.8.1;
347             # while (defined($s = <>)) {
348             # jacode::convert(\$s, 'UTF16-BE', 'sjis');
349             # print $s;
350             # }
351             #
352             # Convert SJIS to MIME-Header-ISO_2022_JP and print each line by perl 5.8.1 or later
353             #
354             # require 'jacode.pl';
355             # use 5.8.1;
356             # while (defined($s = <>)) {
357             # jacode::convert(\$s, 'MIME-Header-ISO_2022_JP', 'sjis');
358             # print $s;
359             # }
360             #
361             ######################################################################
362             #
363             # STYLES
364             #
365             # Traditional style of file I/O
366             #
367             # require 'jacode.pl';
368             # open(FILE,'input.txt');
369             # while () {
370             # chomp;
371             # jacode::convert(\$_,'sjis','utf8');
372             # ...
373             # }
374             #
375             # Minimalist style
376             #
377             # open(FILE,'perl jacode.pl -ws input.txt | ');
378             #
379             ######################################################################
380              
381             #
382             # Call initialize function if not called yet. This sounds strange
383             # but this makes easy to embed the jacode.pl at the script. Call
384             # &jcode'init at the beginning of the script in that case.
385             #
386             &init unless defined $version;
387              
388             ######################################################################
389             # "perl jacode.pl" works as pkf command on command line
390             #
391             # PKF (perl kanji filter) is a sample script of jacode.pl. It had
392             # almost equivalent capabilities of widely used code conversion
393             # program, nkf. Speed of execution is not as fast as nkf, but reading
394             # and understanding are very fast.
395             ######################################################################
396              
397             if ($0 eq __FILE__) {
398              
399             #
400             # Original version `pkf' is ...
401             #
402             # pkf: Perl Kanji Filter
403             #
404             # Copyright (c) 1995-1996,2000 Kazumasa Utashiro
405             # Internet Initiative Japan Inc.
406             # 3-13 Kanda Nishiki-cho, Chiyoda-ku, Tokyo 101-0054, Japan
407             #
408             # Copyright (c) 1991,1992 srekcah@sra.co.jp
409             # Software Research Associates, Inc.
410             #
411             # Use and redistribution for ANY PURPOSE are granted as long as all
412             # copyright notices are retained. Redistribution with modification
413             # is allowed provided that you make your modified version obviously
414             # distinguishable from the original one. THIS SOFTWARE IS PROVIDED
415             # BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES ARE
416             # DISCLAIMED.
417             #
418             local ($usage) = sprintf(<
419             perl $0 [option] [-[INPUT_encoding]OUTPUT_encoding[in,out]] files
420              
421             option
422              
423             -b [b]uffered output (default)
424             -u [u]nbuffered output (*NOT MEANS* UTF-8)
425             -m dyna[m]ic input encoding recognition
426             -c print en[c]oding name
427             -v print escape sequences used in JIS when used along with -c
428             -n [n]o encoding conversion (use original encoding)
429             -Z convert 1-byte hankaku kana to 2-byte [Z]enkaku kana
430             -H convert 2-byte zenkaku kana to 1-byte [H]ankaku kana
431             -f [unix, mac, dos, nl, lf, cr, crnl, crlf]
432             convert eol string to \\n, \\r, \\r\\n respectively.
433             currently this option can't be used with other options.
434              
435             INPUT_encoding/OUTPUT_encoding is one of [jsew]
436             (j=JIS, s=SJIS, e=EUC-JP, w=UTF-8)
437             OUTPUT_encoding `j' can be followed by JIS in/out character
438              
439             Input Kanji encoding is recognized automatically if not supplied.
440             Usually this is done only once, but it will be done on each input
441             line when dynamic recognition is specified.
442              
443             Output Kanji encoding is JIS by default.
444              
445             Output JIS encoding can be followed by kanji in and out characters.
446             Default is "BB" which means kanji sequence start with ESC-\$-B and
447             end with ESC-(-B
448              
449             -----------------------------------------------
450             short full sequence means
451             -----------------------------------------------
452             \@ ESC-\$-\@ JIS C 6226-1978
453             B ESC-\$-B JIS X 0208-1983
454             & ESC-&\@-ESC-\$-B JIS X 0208-1990
455             O ESC-\$-(-O JIS X 0213:2000 plane1
456             Q ESC-\$-(-Q JIS X 0213:2004 plane1
457             -----------------------------------------------
458              
459             Example:
460             perl $0 file convert to JIS encoding
461             perl $0 -j\@J file convert to JIS encoding ("ESC-\$-\@", "ESC-(-J")
462             perl $0 -es file convert EUC-JP to SJIS
463             perl $0 -sw file convert SJIS to UTF-8
464             perl $0 -me file convert mixed encoding file to EUC-JP
465             perl $0 -mc file convert to JIS and print orginal encoding on each line
466              
467             ${rcsid}and %s
468             END
469              
470             unless (@ARGV) {
471             die $usage, "\n";
472             }
473              
474             local ($INPUT_encoding) = '';
475             local ($OUTPUT_encoding) = 'jis';
476             local (%encoding_name) = (
477             'j', 'jis',
478             's', 'sjis',
479             'e', 'euc',
480             'w', 'utf8', # 'u' means unbuffered output, 'w' does world wide encoding
481             'n', 'noconv',
482             );
483             local (%eol) = (
484              
485             # Newlines
486             # http://perldoc.perl.org/perlport.html#Newlines
487             # Some of this may be confusing. Here's a handy reference to the ASCII CR
488             # and LF characters. You can print it out and stick it in your wallet.
489             #
490             # LF eq \012 eq \x0A eq \cJ eq chr(10) eq ASCII 10
491             # CR eq \015 eq \x0D eq \cM eq chr(13) eq ASCII 13
492             #
493             # | Unix | DOS | Mac |
494             # ---------------------------
495             # \n | LF | LF | CR |
496             # \r | CR | CR | LF |
497             # \n * | LF | CRLF | CR |
498             # \r * | CR | CR | LF |
499             # ---------------------------
500             # * text-mode STDIO
501              
502             '', "\n",
503             'unix', "\x0a",
504             'mac', "\x0d",
505             'dos', "\x0d\x0a",
506             'nl', "\x0a",
507             'lf', "\x0a",
508             'cr', "\x0d",
509             'crnl', "\x0d\x0a",
510             'crlf', "\x0d\x0a",
511             );
512             local ($eol) = '';
513              
514             # Option handling
515             local (%opt) = ();
516             while (($_ = $ARGV[0]) =~ s/^-(.+)/$1/ && shift) {
517             next if $_ eq '';
518             s/^([budmcvZH])// && ++$opt{$1} && redo;
519             if (s/^f(.*)//) {
520             ($eol = $1 || shift) =~ tr/A-Z/a-z/;
521             unless (defined($eol) && defined($eol{$eol})) {
522             die("Usage:\n$usage");
523             }
524             next;
525             }
526             if (/^([jsewn]+)/) {
527             ($OUTPUT_encoding, $INPUT_encoding) = @encoding_name{split(//, reverse($1))};
528             &jcode'jis_inout(split(//, $')) if $';
529             next;
530             }
531             print "Usage:\n", $usage;
532             exit(0);
533             }
534              
535             $| = $opt{'u'} && !$opt{'b'};
536             local ($debug, $dynamic, $show_encoding, $show_seq) = @opt{'d', 'm', 'c', 'v'};
537             local ($conv_opt) = $opt{'Z'} ? 'z' : $opt{'H'} ? 'h' : undef;
538              
539             if ($show_encoding && !$dynamic) {
540             @ARGV = ('-') unless @ARGV;
541             local ($file);
542             while (defined($file = shift)) {
543             if ($file ne '-') {
544             print "$file: " if @ARGV .. undef;
545             if (-d $file) {
546             print "directory\n";
547             next;
548             }
549             unless (-f _) {
550             print "not a normal file\n";
551             next;
552             }
553             unless (-s _) {
554             print "empty\n";
555             next;
556             }
557             }
558             open(FILE, $file) || do { warn "$file: $!\n"; next; };
559             while () {
560             next unless $INPUT_encoding = &jcode'getcode(*_) || (eof && "ascii");
561             print $INPUT_encoding;
562             if ($show_seq && $INPUT_encoding eq 'jis') {
563             local ($JIS_Kanji_IN, $ASCII_IN) = &jcode'get_inout($_);
564             $JIS_Kanji_IN =~ s/\e/ESC/g;
565             $ASCII_IN =~ s/\e/ESC/g;
566             print ' [', $JIS_Kanji_IN, ', ', $ASCII_IN, ']';
567             }
568             print "\n";
569             last;
570             }
571             close(FILE);
572             }
573             exit 0;
574             }
575              
576             if ($eol) {
577             eval q{ CORE::binmode(STDOUT); };
578             while (<>) {
579             if (s/[\r\n]+$//) {
580             print $_, $eol{$eol};
581             }
582             else {
583             print $_;
584             }
585             }
586             exit;
587             }
588              
589             eval q{ CORE::binmode(ARGV); };
590             eval q{ CORE::binmode(STDOUT); };
591              
592             local (@read_ahead) = ();
593             while (<>) {
594             if ($dynamic) {
595             local ($c) = &jcode'convert(*_, $OUTPUT_encoding, $INPUT_encoding, $conv_opt);
596             print "$c\t" if $show_encoding;
597             print;
598             next;
599             }
600             $show_encoding || print, next if !@read_ahead && !/[\033\200-\377]/;
601             push(@read_ahead, $_) unless $show_encoding;
602             next unless $INPUT_encoding || ($INPUT_encoding = &jcode'getcode(*_));
603             $OUTPUT_encoding = $INPUT_encoding if $OUTPUT_encoding eq 'noconv';
604             local (*conv_func) = $jcode'convf{$INPUT_encoding, $OUTPUT_encoding};
605             printf STDERR "in=$INPUT_encoding, out=$OUTPUT_encoding, f=$conv_func\n" if $debug;
606              
607             while ($_ = shift(@read_ahead)) {
608             &conv_func(*_, $conv_opt);
609             print;
610             }
611             while (<>) {
612             &conv_func(*_, $conv_opt);
613             print;
614             }
615              
616             last;
617             }
618             print @read_ahead;
619              
620             exit $!;
621             }
622              
623             #---------------------------------------------------------------------
624             # Initialize variables
625             #---------------------------------------------------------------------
626             sub init {
627 916     916   1843 $version = $VERSION;
628              
629 916         1798 $re_bin = '[\x00-\x06\x7f\xff]';
630              
631 916         1761 $re_esc_jis0208_1978 = '\e\$\@'; # "\x1b\x24\x40" '@' JIS C 6226-1978
632 916         1690 $re_esc_jis0208_1983 = '\e\$B'; # "\x1b\x24\x42" 'B' JIS X 0208-1983
633 916         9816 $re_esc_jis0208_1990 = '\e&\@\e\$B'; # "\x1b\x26\x40\x1b\x24\x42" '&' JIS X 0208-1990
634 916         1608 $re_esc_jis0213_2000_plane1 = '\e\$\(O'; # "\x1b\x24\x28\x4f" 'O' JIS X 0213:2000 plane1
635 916         1621 $re_esc_jis0213_2004_plane1 = '\e\$\(Q'; # "\x1b\x24\x28\x51" 'Q' JIS X 0213:2004 plane1
636 916         3595 $re_esc_jis0208 = "$re_esc_jis0208_1978|$re_esc_jis0208_1983|$re_esc_jis0208_1990|$re_esc_jis0213_2000_plane1|$re_esc_jis0213_2004_plane1";
637 916         1643 $re_esc_jis0212 = '\e\$\(D';
638 916         2376 $re_esc_jp = "$re_esc_jis0208|$re_esc_jis0212";
639 916         1607 $re_esc_asc = '\e\([BJ]';
640 916         1570 $re_esc_kana = '\e\(I';
641              
642 916         1579 $esc_0208 = "\e\$B";
643 916         1563 $esc_0212 = "\e\$(D";
644 916         1848 $esc_asc = "\e(B";
645 916         1555 $esc_kana = "\e(I";
646              
647 916         1470 $re_ascii = '[\x07-\x7e]';
648              
649 916         1724 $re_sjis_c = '[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc]';
650 916         1365 $re_sjis_kana = '[\xa1-\xdf]';
651 916         1422 $re_sjis_ank = '[\x07-\x7e\xa1-\xdf]';
652              
653 916         1462 $re_euc_c = '[\xa1-\xfe][\xa1-\xfe]';
654 916         1374 $re_euc_kana = '\x8e[\xa1-\xdf]';
655 916         1494 $re_euc_0212 = '\x8f[\xa1-\xfe][\xa1-\xfe]';
656              
657             # # RFC 2279
658             # $re_utf8_rfc2279_c =
659             # '[\xc2-\xdf][\x80-\xbf]'
660             # . '|[\xe0-\xef][\x80-\xbf][\x80-\xbf]'
661             # . '|[\xf0-\xf4][\x80-\x8f][\x80-\xbf][\x80-\xbf]';
662              
663             # RFC 3629
664 916         1722 $re_utf8_rfc3629_c =
665             '[\xc2-\xdf][\x80-\xbf]'
666             . '|[\xe0-\xe0][\xa0-\xbf][\x80-\xbf]'
667             . '|[\xe1-\xec][\x80-\xbf][\x80-\xbf]'
668             . '|[\xed-\xed][\x80-\x9f][\x80-\xbf]'
669             . '|[\xee-\xef][\x80-\xbf][\x80-\xbf]'
670             . '|[\xf0-\xf0][\x90-\xbf][\x80-\xbf][\x80-\xbf]'
671             . '|[\xf1-\xf3][\x80-\xbf][\x80-\xbf][\x80-\xbf]'
672             . '|[\xf4-\xf4][\x80-\x8f][\x80-\xbf][\x80-\xbf]';
673              
674             # optimized RFC 3629 for ja_JP
675 916         1607 $re_utf8_rfc3629_c_ja_JP =
676             '[\xe1-\xec][\x80-\xbf][\x80-\xbf]'
677             . '|[\xc2-\xdf][\x80-\xbf]'
678             . '|[\xee-\xef][\x80-\xbf][\x80-\xbf]'
679             . '|[\xf0-\xf0][\x90-\xbf][\x80-\xbf][\x80-\xbf]'
680             . '|[\xe0-\xe0][\xa0-\xbf][\x80-\xbf]'
681             . '|[\xed-\xed][\x80-\x9f][\x80-\xbf]'
682             . '|[\xf1-\xf3][\x80-\xbf][\x80-\xbf][\x80-\xbf]'
683             . '|[\xf4-\xf4][\x80-\x8f][\x80-\xbf][\x80-\xbf]';
684              
685 916         1513 $re_utf8_c = $re_utf8_rfc3629_c_ja_JP;
686 916         1508 $re_utf8_kana = '\xef\xbd[\xa1-\xbf]|\xef\xbe[\x80-\x9f]';
687 916         1491 $re_utf8_voiced_kana =
688             '(\xef\xbd[\xb3\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf]'
689             . '|\xef\xbe[\x80\x81\x82\x83\x84\x8a\x8b\x8c\x8d\x8e])\xef\xbe\x9e'
690             . '|\xef\xbe[\x8a\x8b\x8c\x8d\x8e]\xef\xbe\x9f';
691 916         1950 $re_utf8_not_kana =
692             '[\xc2-\xdf][\x80-\xbf]'
693             . '|[\xe0-\xe0][\xa0-\xbf][\x80-\xbf]'
694             . '|[\xe1-\xec][\x80-\xbf][\x80-\xbf]'
695             . '|[\xed-\xed][\x80-\x9f][\x80-\xbf]'
696             . '|[\xee-\xee][\x80-\xbf][\x80-\xbf]'
697             . '|[\xef-\xef][\x80-\xbc][\x80-\xbf]'
698             . '|[\xef-\xef][\xbd-\xbd][\x80-\xa0]'
699             . '|[\xef-\xef][\xbe-\xbe][\xa0-\xbf]'
700             . '|[\xef-\xef][\xbf-\xbf][\x80-\xbf]'
701             . '|[\xf0-\xf0][\x90-\xbf][\x80-\xbf][\x80-\xbf]'
702             . '|[\xf1-\xf3][\x80-\xbf][\x80-\xbf][\x80-\xbf]'
703             . '|[\xf4-\xf4][\x80-\x8f][\x80-\xbf][\x80-\xbf]';
704              
705             # use `geta' for cancel tofu (undefined character code)
706 916         8831 $undef_sjis = "\x81\xac";
707 916         1587 $undef_euc = "\xa2\xae";
708 916         1498 $undef_utf8 = "\xe3\x80\x93";
709              
710 916         1421 $cache = 1;
711              
712             # JIS X0201 -> JIS X0208 KANA conversion table. Looks weird?
713             # Not that much. This is simply JIS text without escape sequences.
714 916         4857 ( $h2z_high = $h2z = <<'__TABLE_END__') =~ tr/\x21-\x7e/\xa1-\xfe/;
715             ! !# $ !" % !& " !V # !W
716             ^ !+ _ !, 0 !<
717             ' %! ( %# ) %% * %' + %)
718             , %c - %e . %g / %C
719             1 %" 2 %$ 3 %& 4 %( 5 %*
720             6 %+ 7 %- 8 %/ 9 %1 : %3
721             6^ %, 7^ %. 8^ %0 9^ %2 :^ %4
722             ; %5 < %7 = %9 > %; ? %=
723             ;^ %6 <^ %8 =^ %: >^ %< ?^ %>
724             @ %? A %A B %D C %F D %H
725             @^ %@ A^ %B B^ %E C^ %G D^ %I
726             E %J F %K G %L H %M I %N
727             J %O K %R L %U M %X N %[
728             J^ %P K^ %S L^ %V M^ %Y N^ %\
729             J_ %Q K_ %T L_ %W M_ %Z N_ %]
730             O %^ P %_ Q %` R %a S %b
731             T %d U %f V %h
732             W %i X %j Y %k Z %l [ %m
733             \ %o ] %s & %r 3^ %t
734             __TABLE_END__
735              
736 916 50       3541 if ( $h2z ne <<'__TABLE_END__') {
737             ! !# $ !" % !& " !V # !W
738             ^ !+ _ !, 0 !<
739             ' %! ( %# ) %% * %' + %)
740             , %c - %e . %g / %C
741             1 %" 2 %$ 3 %& 4 %( 5 %*
742             6 %+ 7 %- 8 %/ 9 %1 : %3
743             6^ %, 7^ %. 8^ %0 9^ %2 :^ %4
744             ; %5 < %7 = %9 > %; ? %=
745             ;^ %6 <^ %8 =^ %: >^ %< ?^ %>
746             @ %? A %A B %D C %F D %H
747             @^ %@ A^ %B B^ %E C^ %G D^ %I
748             E %J F %K G %L H %M I %N
749             J %O K %R L %U M %X N %[
750             J^ %P K^ %S L^ %V M^ %Y N^ %\
751             J_ %Q K_ %T L_ %W M_ %Z N_ %]
752             O %^ P %_ Q %` R %a S %b
753             T %d U %f V %h
754             W %i X %j Y %k Z %l [ %m
755             \ %o ] %s & %r 3^ %t
756             __TABLE_END__
757 0         0 die "JIS X0201 -> JIS X0208 KANA conversion table is broken.";
758             }
759 916         182735 %h2z = split( /\s+/, $h2z . $h2z_high );
760              
761 916 50       21079 if ( scalar(keys %h2z) != 178 ) {
762 0         0 die "scalar(keys %h2z) is ", scalar(keys %h2z), ".";
763             }
764              
765 916         88357 %z2h = reverse %h2z;
766 916 50       8049 if ( scalar( keys %z2h ) != scalar( keys %h2z ) ) {
767 0         0 die "scalar(keys %z2h) != scalar(keys %h2z).";
768             }
769              
770 916         6365 $convf{ 'jis', 'jis' } = *jis2jis;
771 916         3400 $convf{ 'jis', 'sjis' } = *jis2sjis;
772 916         3039 $convf{ 'jis', 'euc' } = *jis2euc;
773 916         2825 $convf{ 'jis', 'utf8' } = *jis2utf8;
774 916         2693 $convf{ 'euc', 'jis' } = *euc2jis;
775 916         2866 $convf{ 'euc', 'sjis' } = *euc2sjis;
776 916         2677 $convf{ 'euc', 'euc' } = *euc2euc;
777 916         3267 $convf{ 'euc', 'utf8' } = *euc2utf8;
778 916         3149 $convf{ 'sjis', 'jis' } = *sjis2jis;
779 916         2960 $convf{ 'sjis', 'sjis' } = *sjis2sjis;
780 916         2853 $convf{ 'sjis', 'euc' } = *sjis2euc;
781 916         2995 $convf{ 'sjis', 'utf8' } = *sjis2utf8;
782 916         2913 $convf{ 'utf8', 'jis' } = *utf82jis;
783 916         7851 $convf{ 'utf8', 'sjis' } = *utf82sjis;
784 916         3850 $convf{ 'utf8', 'euc' } = *utf82euc;
785 916         3603 $convf{ 'utf8', 'utf8' } = *utf82utf8;
786 916         3068 $h2zf{'jis'} = *h2z_jis;
787 916         2357 $z2hf{'jis'} = *z2h_jis;
788 916         2139 $h2zf{'euc'} = *h2z_euc;
789 916         2446 $z2hf{'euc'} = *z2h_euc;
790 916         1980 $h2zf{'sjis'} = *h2z_sjis;
791 916         1951 $z2hf{'sjis'} = *z2h_sjis;
792 916         1970 $h2zf{'utf8'} = *h2z_utf8;
793 916         2075 $z2hf{'utf8'} = *z2h_utf8;
794              
795             # Appendix A. Japanese Code Conversion Table
796             # Understanding Japanese Information Processing
797              
798             # Appendix A: Code Conversion Tables
799             # CJKV Information Processing Chinese, Japanese, Korean & Vietnamese Computing
800             # CJKV Information Processing, 2nd Edition
801              
802 916         29490 %Ken_Lunde_CJKV_AppA_sjis2euc1st_a = (
803             0x81,0xa1,
804             0x82,0xa3,
805             0x83,0xa5,
806             0x84,0xa7,
807             0x85,0xa9,
808             0x86,0xab,
809             0x87,0xad,
810             0x88,0xaf,
811             0x89,0xb1,
812             0x8a,0xb3,
813             0x8b,0xb5,
814             0x8c,0xb7,
815             0x8d,0xb9,
816             0x8e,0xbb,
817             0x8f,0xbd,
818             0x90,0xbf,
819             0x91,0xc1,
820             0x92,0xc3,
821             0x93,0xc5,
822             0x94,0xc7,
823             0x95,0xc9,
824             0x96,0xcb,
825             0x97,0xcd,
826             0x98,0xcf,
827             0x99,0xd1,
828             0x9a,0xd3,
829             0x9b,0xd5,
830             0x9c,0xd7,
831             0x9d,0xd9,
832             0x9e,0xdb,
833             0x9f,0xdd,
834             0xe0,0xdf,
835             0xe1,0xe1,
836             0xe2,0xe3,
837             0xe3,0xe5,
838             0xe4,0xe7,
839             0xe5,0xe9,
840             0xe6,0xeb,
841             0xe7,0xed,
842             0xe8,0xef,
843             0xe9,0xf1,
844             0xea,0xf3,
845             0xeb,0xf5,
846             0xec,0xf7,
847             0xed,0xf9,
848             0xee,0xfb,
849             0xef,0xfd,
850             );
851              
852 916         18070 %Ken_Lunde_CJKV_AppA_sjis2euc1st_b = (
853             0x81,0xa2,
854             0x82,0xa4,
855             0x83,0xa6,
856             0x84,0xa8,
857             0x85,0xaa,
858             0x86,0xac,
859             0x87,0xae,
860             0x88,0xb0,
861             0x89,0xb2,
862             0x8a,0xb4,
863             0x8b,0xb6,
864             0x8c,0xb8,
865             0x8d,0xba,
866             0x8e,0xbc,
867             0x8f,0xbe,
868             0x90,0xc0,
869             0x91,0xc2,
870             0x92,0xc4,
871             0x93,0xc6,
872             0x94,0xc8,
873             0x95,0xca,
874             0x96,0xcc,
875             0x97,0xce,
876             0x98,0xd0,
877             0x99,0xd2,
878             0x9a,0xd4,
879             0x9b,0xd6,
880             0x9c,0xd8,
881             0x9d,0xda,
882             0x9e,0xdc,
883             0x9f,0xde,
884             0xe0,0xe0,
885             0xe1,0xe2,
886             0xe2,0xe4,
887             0xe3,0xe6,
888             0xe4,0xe8,
889             0xe5,0xea,
890             0xe6,0xec,
891             0xe7,0xee,
892             0xe8,0xf0,
893             0xe9,0xf2,
894             0xea,0xf4,
895             0xeb,0xf6,
896             0xec,0xf8,
897             0xed,0xfa,
898             0xee,0xfc,
899             0xef,0xfe,
900             );
901              
902 916         51734 %Ken_Lunde_CJKV_AppA_sjis2euc2nd_a = (
903             0x40,0xa1,
904             0x41,0xa2,
905             0x42,0xa3,
906             0x43,0xa4,
907             0x44,0xa5,
908             0x45,0xa6,
909             0x46,0xa7,
910             0x47,0xa8,
911             0x48,0xa9,
912             0x49,0xaa,
913             0x4a,0xab,
914             0x4b,0xac,
915             0x4c,0xad,
916             0x4d,0xae,
917             0x4e,0xaf,
918             0x4f,0xb0,
919             0x50,0xb1,
920             0x51,0xb2,
921             0x52,0xb3,
922             0x53,0xb4,
923             0x54,0xb5,
924             0x55,0xb6,
925             0x56,0xb7,
926             0x57,0xb8,
927             0x58,0xb9,
928             0x59,0xba,
929             0x5a,0xbb,
930             0x5b,0xbc,
931             0x5c,0xbd,
932             0x5d,0xbe,
933             0x5e,0xbf,
934             0x5f,0xc0,
935             0x60,0xc1,
936             0x61,0xc2,
937             0x62,0xc3,
938             0x63,0xc4,
939             0x64,0xc5,
940             0x65,0xc6,
941             0x66,0xc7,
942             0x67,0xc8,
943             0x68,0xc9,
944             0x69,0xca,
945             0x6a,0xcb,
946             0x6b,0xcc,
947             0x6c,0xcd,
948             0x6d,0xce,
949             0x6e,0xcf,
950             0x6f,0xd0,
951             0x70,0xd1,
952             0x71,0xd2,
953             0x72,0xd3,
954             0x73,0xd4,
955             0x74,0xd5,
956             0x75,0xd6,
957             0x76,0xd7,
958             0x77,0xd8,
959             0x78,0xd9,
960             0x79,0xda,
961             0x7a,0xdb,
962             0x7b,0xdc,
963             0x7c,0xdd,
964             0x7d,0xde,
965             0x7e,0xdf,
966             0x80,0xe0,
967             0x81,0xe1,
968             0x82,0xe2,
969             0x83,0xe3,
970             0x84,0xe4,
971             0x85,0xe5,
972             0x86,0xe6,
973             0x87,0xe7,
974             0x88,0xe8,
975             0x89,0xe9,
976             0x8a,0xea,
977             0x8b,0xeb,
978             0x8c,0xec,
979             0x8d,0xed,
980             0x8e,0xee,
981             0x8f,0xef,
982             0x90,0xf0,
983             0x91,0xf1,
984             0x92,0xf2,
985             0x93,0xf3,
986             0x94,0xf4,
987             0x95,0xf5,
988             0x96,0xf6,
989             0x97,0xf7,
990             0x98,0xf8,
991             0x99,0xf9,
992             0x9a,0xfa,
993             0x9b,0xfb,
994             0x9c,0xfc,
995             0x9d,0xfd,
996             0x9e,0xfe,
997             );
998              
999 916         59387 %Ken_Lunde_CJKV_AppA_sjis2euc2nd_b = (
1000             0x9f,0xa1,
1001             0xa0,0xa2,
1002             0xa1,0xa3,
1003             0xa2,0xa4,
1004             0xa3,0xa5,
1005             0xa4,0xa6,
1006             0xa5,0xa7,
1007             0xa6,0xa8,
1008             0xa7,0xa9,
1009             0xa8,0xaa,
1010             0xa9,0xab,
1011             0xaa,0xac,
1012             0xab,0xad,
1013             0xac,0xae,
1014             0xad,0xaf,
1015             0xae,0xb0,
1016             0xaf,0xb1,
1017             0xb0,0xb2,
1018             0xb1,0xb3,
1019             0xb2,0xb4,
1020             0xb3,0xb5,
1021             0xb4,0xb6,
1022             0xb5,0xb7,
1023             0xb6,0xb8,
1024             0xb7,0xb9,
1025             0xb8,0xba,
1026             0xb9,0xbb,
1027             0xba,0xbc,
1028             0xbb,0xbd,
1029             0xbc,0xbe,
1030             0xbd,0xbf,
1031             0xbe,0xc0,
1032             0xbf,0xc1,
1033             0xc0,0xc2,
1034             0xc1,0xc3,
1035             0xc2,0xc4,
1036             0xc3,0xc5,
1037             0xc4,0xc6,
1038             0xc5,0xc7,
1039             0xc6,0xc8,
1040             0xc7,0xc9,
1041             0xc8,0xca,
1042             0xc9,0xcb,
1043             0xca,0xcc,
1044             0xcb,0xcd,
1045             0xcc,0xce,
1046             0xcd,0xcf,
1047             0xce,0xd0,
1048             0xcf,0xd1,
1049             0xd0,0xd2,
1050             0xd1,0xd3,
1051             0xd2,0xd4,
1052             0xd3,0xd5,
1053             0xd4,0xd6,
1054             0xd5,0xd7,
1055             0xd6,0xd8,
1056             0xd7,0xd9,
1057             0xd8,0xda,
1058             0xd9,0xdb,
1059             0xda,0xdc,
1060             0xdb,0xdd,
1061             0xdc,0xde,
1062             0xdd,0xdf,
1063             0xde,0xe0,
1064             0xdf,0xe1,
1065             0xe0,0xe2,
1066             0xe1,0xe3,
1067             0xe2,0xe4,
1068             0xe3,0xe5,
1069             0xe4,0xe6,
1070             0xe5,0xe7,
1071             0xe6,0xe8,
1072             0xe7,0xe9,
1073             0xe8,0xea,
1074             0xe9,0xeb,
1075             0xea,0xec,
1076             0xeb,0xed,
1077             0xec,0xee,
1078             0xed,0xef,
1079             0xee,0xf0,
1080             0xef,0xf1,
1081             0xf0,0xf2,
1082             0xf1,0xf3,
1083             0xf2,0xf4,
1084             0xf3,0xf5,
1085             0xf4,0xf6,
1086             0xf5,0xf7,
1087             0xf6,0xf8,
1088             0xf7,0xf9,
1089             0xf8,0xfa,
1090             0xf9,0xfb,
1091             0xfa,0xfc,
1092             0xfb,0xfd,
1093             0xfc,0xfe,
1094             );
1095              
1096 916         36053 %Ken_Lunde_CJKV_AppA_euc2sjis1st = (
1097             0xa1,0x81,
1098             0xa2,0x81,
1099             0xa3,0x82,
1100             0xa4,0x82,
1101             0xa5,0x83,
1102             0xa6,0x83,
1103             0xa7,0x84,
1104             0xa8,0x84,
1105             0xa9,0x85,
1106             0xaa,0x85,
1107             0xab,0x86,
1108             0xac,0x86,
1109             0xad,0x87,
1110             0xae,0x87,
1111             0xaf,0x88,
1112             0xb0,0x88,
1113             0xb1,0x89,
1114             0xb2,0x89,
1115             0xb3,0x8a,
1116             0xb4,0x8a,
1117             0xb5,0x8b,
1118             0xb6,0x8b,
1119             0xb7,0x8c,
1120             0xb8,0x8c,
1121             0xb9,0x8d,
1122             0xba,0x8d,
1123             0xbb,0x8e,
1124             0xbc,0x8e,
1125             0xbd,0x8f,
1126             0xbe,0x8f,
1127             0xbf,0x90,
1128             0xc0,0x90,
1129             0xc1,0x91,
1130             0xc2,0x91,
1131             0xc3,0x92,
1132             0xc4,0x92,
1133             0xc5,0x93,
1134             0xc6,0x93,
1135             0xc7,0x94,
1136             0xc8,0x94,
1137             0xc9,0x95,
1138             0xca,0x95,
1139             0xcb,0x96,
1140             0xcc,0x96,
1141             0xcd,0x97,
1142             0xce,0x97,
1143             0xcf,0x98,
1144             0xd0,0x98,
1145             0xd1,0x99,
1146             0xd2,0x99,
1147             0xd3,0x9a,
1148             0xd4,0x9a,
1149             0xd5,0x9b,
1150             0xd6,0x9b,
1151             0xd7,0x9c,
1152             0xd8,0x9c,
1153             0xd9,0x9d,
1154             0xda,0x9d,
1155             0xdb,0x9e,
1156             0xdc,0x9e,
1157             0xdd,0x9f,
1158             0xde,0x9f,
1159             0xdf,0xe0,
1160             0xe0,0xe0,
1161             0xe1,0xe1,
1162             0xe2,0xe1,
1163             0xe3,0xe2,
1164             0xe4,0xe2,
1165             0xe5,0xe3,
1166             0xe6,0xe3,
1167             0xe7,0xe4,
1168             0xe8,0xe4,
1169             0xe9,0xe5,
1170             0xea,0xe5,
1171             0xeb,0xe6,
1172             0xec,0xe6,
1173             0xed,0xe7,
1174             0xee,0xe7,
1175             0xef,0xe8,
1176             0xf0,0xe8,
1177             0xf1,0xe9,
1178             0xf2,0xe9,
1179             0xf3,0xea,
1180             0xf4,0xea,
1181             0xf5,0xeb,
1182             0xf6,0xeb,
1183             0xf7,0xec,
1184             0xf8,0xec,
1185             0xf9,0xed,
1186             0xfa,0xed,
1187             0xfb,0xee,
1188             0xfc,0xee,
1189             0xfd,0xef,
1190             0xfe,0xef,
1191             );
1192              
1193 916         41044 %Ken_Lunde_CJKV_AppA_euc2sjis2nd_odd = (
1194             0xa1,0x40,
1195             0xa2,0x41,
1196             0xa3,0x42,
1197             0xa4,0x43,
1198             0xa5,0x44,
1199             0xa6,0x45,
1200             0xa7,0x46,
1201             0xa8,0x47,
1202             0xa9,0x48,
1203             0xaa,0x49,
1204             0xab,0x4a,
1205             0xac,0x4b,
1206             0xad,0x4c,
1207             0xae,0x4d,
1208             0xaf,0x4e,
1209             0xb0,0x4f,
1210             0xb1,0x50,
1211             0xb2,0x51,
1212             0xb3,0x52,
1213             0xb4,0x53,
1214             0xb5,0x54,
1215             0xb6,0x55,
1216             0xb7,0x56,
1217             0xb8,0x57,
1218             0xb9,0x58,
1219             0xba,0x59,
1220             0xbb,0x5a,
1221             0xbc,0x5b,
1222             0xbd,0x5c,
1223             0xbe,0x5d,
1224             0xbf,0x5e,
1225             0xc0,0x5f,
1226             0xc1,0x60,
1227             0xc2,0x61,
1228             0xc3,0x62,
1229             0xc4,0x63,
1230             0xc5,0x64,
1231             0xc6,0x65,
1232             0xc7,0x66,
1233             0xc8,0x67,
1234             0xc9,0x68,
1235             0xca,0x69,
1236             0xcb,0x6a,
1237             0xcc,0x6b,
1238             0xcd,0x6c,
1239             0xce,0x6d,
1240             0xcf,0x6e,
1241             0xd0,0x6f,
1242             0xd1,0x70,
1243             0xd2,0x71,
1244             0xd3,0x72,
1245             0xd4,0x73,
1246             0xd5,0x74,
1247             0xd6,0x75,
1248             0xd7,0x76,
1249             0xd8,0x77,
1250             0xd9,0x78,
1251             0xda,0x79,
1252             0xdb,0x7a,
1253             0xdc,0x7b,
1254             0xdd,0x7c,
1255             0xde,0x7d,
1256             0xdf,0x7e,
1257             0xe0,0x80,
1258             0xe1,0x81,
1259             0xe2,0x82,
1260             0xe3,0x83,
1261             0xe4,0x84,
1262             0xe5,0x85,
1263             0xe6,0x86,
1264             0xe7,0x87,
1265             0xe8,0x88,
1266             0xe9,0x89,
1267             0xea,0x8a,
1268             0xeb,0x8b,
1269             0xec,0x8c,
1270             0xed,0x8d,
1271             0xee,0x8e,
1272             0xef,0x8f,
1273             0xf0,0x90,
1274             0xf1,0x91,
1275             0xf2,0x92,
1276             0xf3,0x93,
1277             0xf4,0x94,
1278             0xf5,0x95,
1279             0xf6,0x96,
1280             0xf7,0x97,
1281             0xf8,0x98,
1282             0xf9,0x99,
1283             0xfa,0x9a,
1284             0xfb,0x9b,
1285             0xfc,0x9c,
1286             0xfd,0x9d,
1287             0xfe,0x9e,
1288             );
1289              
1290 916         40073 %Ken_Lunde_CJKV_AppA_euc2sjis2nd_even = (
1291             0xa1,0x9f,
1292             0xa2,0xa0,
1293             0xa3,0xa1,
1294             0xa4,0xa2,
1295             0xa5,0xa3,
1296             0xa6,0xa4,
1297             0xa7,0xa5,
1298             0xa8,0xa6,
1299             0xa9,0xa7,
1300             0xaa,0xa8,
1301             0xab,0xa9,
1302             0xac,0xaa,
1303             0xad,0xab,
1304             0xae,0xac,
1305             0xaf,0xad,
1306             0xb0,0xae,
1307             0xb1,0xaf,
1308             0xb2,0xb0,
1309             0xb3,0xb1,
1310             0xb4,0xb2,
1311             0xb5,0xb3,
1312             0xb6,0xb4,
1313             0xb7,0xb5,
1314             0xb8,0xb6,
1315             0xb9,0xb7,
1316             0xba,0xb8,
1317             0xbb,0xb9,
1318             0xbc,0xba,
1319             0xbd,0xbb,
1320             0xbe,0xbc,
1321             0xbf,0xbd,
1322             0xc0,0xbe,
1323             0xc1,0xbf,
1324             0xc2,0xc0,
1325             0xc3,0xc1,
1326             0xc4,0xc2,
1327             0xc5,0xc3,
1328             0xc6,0xc4,
1329             0xc7,0xc5,
1330             0xc8,0xc6,
1331             0xc9,0xc7,
1332             0xca,0xc8,
1333             0xcb,0xc9,
1334             0xcc,0xca,
1335             0xcd,0xcb,
1336             0xce,0xcc,
1337             0xcf,0xcd,
1338             0xd0,0xce,
1339             0xd1,0xcf,
1340             0xd2,0xd0,
1341             0xd3,0xd1,
1342             0xd4,0xd2,
1343             0xd5,0xd3,
1344             0xd6,0xd4,
1345             0xd7,0xd5,
1346             0xd8,0xd6,
1347             0xd9,0xd7,
1348             0xda,0xd8,
1349             0xdb,0xd9,
1350             0xdc,0xda,
1351             0xdd,0xdb,
1352             0xde,0xdc,
1353             0xdf,0xdd,
1354             0xe0,0xde,
1355             0xe1,0xdf,
1356             0xe2,0xe0,
1357             0xe3,0xe1,
1358             0xe4,0xe2,
1359             0xe5,0xe3,
1360             0xe6,0xe4,
1361             0xe7,0xe5,
1362             0xe8,0xe6,
1363             0xe9,0xe7,
1364             0xea,0xe8,
1365             0xeb,0xe9,
1366             0xec,0xea,
1367             0xed,0xeb,
1368             0xee,0xec,
1369             0xef,0xed,
1370             0xf0,0xee,
1371             0xf1,0xef,
1372             0xf2,0xf0,
1373             0xf3,0xf1,
1374             0xf4,0xf2,
1375             0xf5,0xf3,
1376             0xf6,0xf4,
1377             0xf7,0xf5,
1378             0xf8,0xf6,
1379             0xf9,0xf7,
1380             0xfa,0xf8,
1381             0xfb,0xf9,
1382             0xfc,0xfa,
1383             0xfd,0xfb,
1384             0xfe,0xfc,
1385             );
1386              
1387             # package jacode;
1388             # sub AUTOLOAD {
1389             # $AUTOLOAD =~ s/^jcode::/jacode::/;
1390             # goto &$AUTOLOAD;
1391             # }
1392 916 50       5021 if ($support_jcode_package_too) {
1393 916         4325 *jcode'getcode_utashiro_2000_09_29 =
1394             *jcode'getcode_utashiro_2000_09_29 =
1395             *jacode'getcode_utashiro_2000_09_29;
1396 916         2521 *jcode'init = *jcode'init = *jacode'init;
1397 916         2440 *jcode'jis_inout = *jcode'jis_inout = *jacode'jis_inout;
1398 916         2219 *jcode'get_inout = *jcode'get_inout = *jacode'get_inout;
1399 916         2196 *jcode'getcode = *jcode'getcode = *jacode'getcode;
1400 916         2206 *jcode'convert = *jcode'convert = *jacode'convert;
1401 916         2043 *jcode'jis = *jcode'jis = *jacode'jis;
1402 916         2064 *jcode'euc = *jcode'euc = *jacode'euc;
1403 916         1998 *jcode'sjis = *jcode'sjis = *jacode'sjis;
1404 916         2098 *jcode'utf8 = *jcode'utf8 = *jacode'utf8;
1405 916         1980 *jcode'to = *jcode'to = *jacode'to;
1406 916         2208 *jcode'what = *jcode'what = *jacode'what;
1407 916         2174 *jcode'trans = *jcode'trans = *jacode'trans;
1408 916         1915 *jcode'sjis2jis = *jcode'sjis2jis = *jacode'sjis2jis;
1409 916         1970 *jcode'euc2jis = *jcode'euc2jis = *jacode'euc2jis;
1410 916         1847 *jcode'jis2euc = *jcode'jis2euc = *jacode'jis2euc;
1411 916         2052 *jcode'jis2sjis = *jcode'jis2sjis = *jacode'jis2sjis;
1412 916         1795 *jcode'sjis2euc = *jcode'sjis2euc = *jacode'sjis2euc;
1413 916         1846 *jcode's2e = *jcode's2e = *jacode's2e;
1414 916         1990 *jcode'euc2sjis = *jcode'euc2sjis = *jacode'euc2sjis;
1415 916         1801 *jcode'e2s = *jcode'e2s = *jacode'e2s;
1416 916         1826 *jcode'utf82jis = *jcode'utf82jis = *jacode'utf82jis;
1417 916         3904 *jcode'utf82euc = *jcode'utf82euc = *jacode'utf82euc;
1418 916         2125 *jcode'u2e = *jcode'u2e = *jacode'u2e;
1419 916         2097 *jcode'utf82sjis = *jcode'utf82sjis = *jacode'utf82sjis;
1420 916         1828 *jcode'u2s = *jcode'u2s = *jacode'u2s;
1421 916         2064 *jcode'jis2utf8 = *jcode'jis2utf8 = *jacode'jis2utf8;
1422 916         2109 *jcode'euc2utf8 = *jcode'euc2utf8 = *jacode'euc2utf8;
1423 916         1903 *jcode'e2u = *jcode'e2u = *jacode'e2u;
1424 916         1800 *jcode'sjis2utf8 = *jcode'sjis2utf8 = *jacode'sjis2utf8;
1425 916         1978 *jcode's2u = *jcode's2u = *jacode's2u;
1426 916         1884 *jcode'jis2jis = *jcode'jis2jis = *jacode'jis2jis;
1427 916         2002 *jcode'sjis2sjis = *jcode'sjis2sjis = *jacode'sjis2sjis;
1428 916         1938 *jcode'euc2euc = *jcode'euc2euc = *jacode'euc2euc;
1429 916         1899 *jcode'utf82utf8 = *jcode'utf82utf8 = *jacode'utf82utf8;
1430 916         2279 *jcode'cache = *jcode'cache = *jacode'cache;
1431 916         1839 *jcode'nocache = *jcode'nocache = *jacode'nocache;
1432 916         2027 *jcode'flush = *jcode'flush = *jacode'flush;
1433 916         1982 *jcode'flushcache = *jcode'flushcache = *jacode'flushcache;
1434 916         1948 *jcode'h2z_jis = *jcode'h2z_jis = *jacode'h2z_jis;
1435 916         1881 *jcode'h2z_euc = *jcode'h2z_euc = *jacode'h2z_euc;
1436 916         1854 *jcode'h2z_sjis = *jcode'h2z_sjis = *jacode'h2z_sjis;
1437 916         1822 *jcode'h2z_utf8 = *jcode'h2z_utf8 = *jacode'h2z_utf8;
1438 916         2005 *jcode'z2h_jis = *jcode'z2h_jis = *jacode'z2h_jis;
1439 916         1839 *jcode'z2h_euc = *jcode'z2h_euc = *jacode'z2h_euc;
1440 916         1981 *jcode'z2h_sjis = *jcode'z2h_sjis = *jacode'z2h_sjis;
1441 916         1975 *jcode'z2h_utf8 = *jcode'z2h_utf8 = *jacode'z2h_utf8;
1442 916         1892 *jcode'init_z2h_euc = *jcode'init_z2h_euc = *jacode'init_z2h_euc;
1443 916         2204 *jcode'init_z2h_sjis = *jcode'init_z2h_sjis = *jacode'init_z2h_sjis;
1444 916         1974 *jcode'init_z2h_utf8 = *jcode'init_z2h_utf8 = *jacode'init_z2h_utf8;
1445 916         1876 *jcode'init_h2z_utf8 = *jcode'init_h2z_utf8 = *jacode'init_h2z_utf8;
1446 916         1974 *jcode'init_sjis2utf8 = *jcode'init_sjis2utf8 = *jacode'init_sjis2utf8;
1447 916         1968 *jcode'init_utf82sjis = *jcode'init_utf82sjis = *jacode'init_utf82sjis;
1448 916         1772 *jcode'init_k2u = *jcode'init_k2u = *jacode'init_k2u;
1449 916         1836 *jcode'init_u2k = *jcode'init_u2k = *jacode'init_u2k;
1450 916         1898 *jcode'tr = *jcode'tr = *jacode'tr;
1451 916         2680 *jcode'convf = *jcode'convf = *jacode'convf;
1452 916         2046 *jcode'z2hf = *jcode'z2hf = *jacode'z2hf;
1453 916         2259 *jcode'h2zf = *jcode'h2zf = *jacode'h2zf;
1454             }
1455             }
1456              
1457             #---------------------------------------------------------------------
1458             # Set escape sequences which should be put before and after Japanese
1459             # (JIS X0208) string
1460             #---------------------------------------------------------------------
1461             sub jis_inout {
1462 0   0 0   0 $esc_0208 = shift || $esc_0208;
1463              
1464 0         0 local (%esc_0208) = (
1465             '@', $re_esc_jis0208_1978, # JIS C 6226-1978
1466             'B', $re_esc_jis0208_1983, # JIS X 0208-1983
1467             '&', $re_esc_jis0208_1990, # JIS X 0208-1990
1468             'O', $re_esc_jis0213_2000_plane1, # JIS X 0213:2000 plane1
1469             'Q', $re_esc_jis0213_2004_plane1, # JIS X 0213:2004 plane1
1470             );
1471 0 0       0 $esc_0208 = $esc_0208{$esc_0208} if defined($esc_0208{$esc_0208});
1472              
1473 0   0     0 $esc_asc = shift || $esc_asc;
1474 0 0       0 $esc_asc = "\e\($esc_asc" if length($esc_asc) == 1;
1475 0         0 ( $esc_0208, $esc_asc );
1476             }
1477              
1478             #---------------------------------------------------------------------
1479             # Get JIS Kanji start and ASCII start sequences from the string
1480             #---------------------------------------------------------------------
1481             sub get_inout {
1482 0     0   0 local ( $esc_0208, $esc_asc );
1483 0         0 local ($_) = @_;
1484 0 0       0 if (/($re_esc_jis0208)/o) {
1485 0         0 $esc_0208 = $1;
1486             }
1487 0 0       0 if (/($re_esc_asc)/o) {
1488 0         0 $esc_asc = $1;
1489             }
1490 0         0 ( $esc_0208, $esc_asc );
1491             }
1492              
1493             #---------------------------------------------------------------------
1494             # Recognize character code (Kazumasa Utashiro 2000/09/29)
1495             #---------------------------------------------------------------------
1496             sub getcode_utashiro_2000_09_29 {
1497 0     0   0 local (*s) = @_;
1498 0         0 local ( $matched, $code );
1499              
1500             # not Japanese
1501 0 0       0 if ( $s !~ /[\e\200-\377]/ ) {
    0          
    0          
1502 0         0 $matched = 0;
1503 0         0 $code = undef;
1504             }
1505              
1506             # 'jis'
1507             elsif ( $s =~ /$re_esc_jp|$re_esc_asc|$re_esc_kana/o ) {
1508 0         0 $matched = 1;
1509 0         0 $code = 'jis';
1510             }
1511              
1512             # 'binary'
1513             elsif ( $s =~ /$re_bin/o ) {
1514 0         0 $matched = 0;
1515 0         0 $code = 'binary';
1516             }
1517              
1518             # should be 'euc' or 'sjis'
1519             else {
1520 0         0 local ( $sjis, $euc ) = ( 0, 0 );
1521 0         0 while ( $s =~ /(($re_sjis_c)+)/go ) {
1522 0         0 $sjis += length($1);
1523             }
1524 0         0 while ( $s =~ /(($re_euc_c|$re_euc_kana|$re_euc_0212)+)/go ) {
1525 0         0 $euc += length($1);
1526             }
1527 0         0 $matched = &max_utashiro_2000_09_29($sjis, $euc);
1528 916     916   2712427 $code = ( 'euc', undef, 'sjis' )[ ( $sjis <=> $euc ) + $[ + 1 ];
  916         221553  
  916         7433365  
  0         0  
1529             }
1530              
1531 0 0       0 wantarray ? ( $matched, $code ) : $code;
1532             }
1533              
1534             #---------------------------------------------------------------------
1535             # Returns max value of $_[$[] and $_[$[+1] w('o')w
1536             #---------------------------------------------------------------------
1537             sub max_utashiro_2000_09_29 {
1538              
1539             # if $[ is 0
1540             # $_[ 0 + ($_[ 0 ] < $_[ 0 + 1 ]) ];
1541              
1542             # if $[ is 1
1543             # $_[ 1 + ($_[ 1 ] < $_[ 1 + 1 ]) ];
1544              
1545 0     0   0 $_[ $[ + ($_[ $[ ] < $_[ $[ + 1 ]) ];
1546             }
1547              
1548             #---------------------------------------------------------------------
1549             # Recognize character code
1550             #---------------------------------------------------------------------
1551             sub getcode {
1552 0     0   0 local (*s) = @_;
1553 0         0 local ( $matched, $encoding );
1554              
1555             # not Japanese
1556 0 0       0 if ( $s !~ /[\e\x80-\xff]/ ) {
    0          
    0          
1557 0         0 $matched = 0;
1558 0         0 $encoding = undef;
1559             }
1560              
1561             # 'jis'
1562             elsif ( $s =~ /$re_esc_jp|$re_esc_asc|$re_esc_kana/o ) {
1563 0         0 $matched = 1;
1564 0         0 $encoding = 'jis';
1565             }
1566              
1567             # 'binary'
1568             elsif ( $s =~ /$re_bin/o ) {
1569 0         0 $matched = 0;
1570 0         0 $encoding = 'binary';
1571             }
1572              
1573             # should be 'euc' or 'sjis' or 'utf8'
1574             else {
1575 0         0 local ( $sjis, $euc, $utf8 ) = ( 0, 0, 0 );
1576              
1577             # Id: getcode.pl,v 0.01 1998/03/17 gama Exp
1578             # http://www2d.biglobe.ne.jp/~gama/cgi/jcode/jcode.htm
1579              
1580 0         0 while ( $s =~ /(($re_sjis_c|$re_sjis_ank)+)/go ) {
1581 0         0 $sjis += length($1);
1582             }
1583 0         0 while ( $s =~ /(($re_euc_c|$re_euc_kana|$re_ascii|$re_euc_0212)+)/go ) {
1584 0         0 $euc += length($1);
1585             }
1586              
1587             # 2011/12/06 Improvement proposal from Hanada Masaaki
1588             # before: while ( $s =~ /(($re_utf8_c)+)/go ) {
1589              
1590 0         0 while ( $s =~ /(($re_utf8_c|$re_ascii)+)/go ) {
1591 0         0 $utf8 += length($1);
1592             }
1593              
1594 0 0       0 if ( $sjis > $euc ) {
    0          
1595 0 0       0 if ( $sjis > $utf8 ) {
    0          
1596 0         0 $matched = $sjis;
1597 0         0 $encoding = 'sjis';
1598             }
1599             elsif ( $sjis == $utf8 ) {
1600 0         0 $matched = $sjis;
1601 0 0 0     0 if ( $s =~ /^($re_utf8_c|$re_ascii)+$/o ) {
    0          
    0          
1602 0         0 $encoding = 'utf8';
1603             }
1604             elsif ( $s =~ /^($re_sjis_c|$re_sjis_ank)+$/o ) {
1605 0         0 $encoding = 'sjis';
1606             }
1607             elsif ( ( length($s) >= 30 ) && ( $matched >= 15 ) ) {
1608 0         0 $encoding = 'utf8';
1609             }
1610             else {
1611 0         0 $encoding = undef;
1612             }
1613             }
1614             else {
1615 0         0 $matched = $utf8;
1616 0         0 $encoding = 'utf8';
1617             }
1618             }
1619             elsif ( $sjis == $euc ) {
1620 0 0       0 if ( $sjis > $utf8 ) {
    0          
1621 0         0 $matched = $sjis;
1622              
1623             # http://www.srekcah.org/jcode/2.13.3/
1624             #
1625             #! ;; $rcsid = q$Id: jcode.pl,v 2.13.3.2 2002/04/07 08:13:57 utashiro Exp $;
1626             # *** 370,375 ****
1627             # --- 370,390 ----
1628             # elsif ($s =~ /$re_bin/o) { # 'binary'
1629             # $matched = 0;
1630             # $code = 'binary';
1631             #+ }
1632             #+ elsif ($s =~ /[\201-\215\220-\240]/) {
1633             #+ $code = 'sjis';
1634             #+ }
1635             #+ elsif ($s =~ /\216[^\241-\337]/) {
1636             #+ $code = 'sjis';
1637             #+ }
1638             #+ elsif ($s =~ /\217[^\241-\376]/) {
1639             #+ $code = 'sjis';
1640             #+ }
1641             #+ elsif ($s =~ /\217[\241-\376][^\241-\376]/) {
1642             #+ $code = 'sjis';
1643             #+ }
1644             #+ elsif ($s =~ /(^|[\000-\177])[\241-\374]((\216[\241-\374]){2})*([\000-\177]|$)/) {
1645             #+ $code = 'sjis';
1646             # }
1647             # else { # should be 'euc' or 'sjis'
1648             # local($sjis, $euc) = (0, 0);
1649              
1650             # jcodeg.diff by Gappai
1651             # http://www.vector.co.jp/soft/win95/prog/se347514.html
1652              
1653             # Id: getcode.pl,v 0.01 1998/03/17 gama Exp
1654             # http://www2d.biglobe.ne.jp/~gama/cgi/jcode/jcode.htm
1655              
1656 0 0       0 if ( $s =~ /[\x80-\x8d\x90-\xa0]/ ) {
    0          
    0          
    0          
    0          
    0          
1657 0         0 $encoding = 'sjis';
1658             }
1659             elsif ( $s =~ /\x8e[^\xa1-\xdf]/ ) {
1660 0         0 $encoding = 'sjis';
1661             }
1662             elsif ( $s =~ /\x8f[^\xa1-\xfe]/ ) {
1663 0         0 $encoding = 'sjis';
1664             }
1665             elsif ( $s =~ /\x8f[\xa1-\xfe][^\xa1-\xfe]/ ) {
1666 0         0 $encoding = 'sjis';
1667             }
1668             elsif ( $s =~
1669             /(^|[^\x81-\x9f\xa1-\xdf\xe0-\xfc])[\xa1-\xdf]([\xa1-\xdf][\xa1-\xdf])*([^\xa1-\xdf]|$)/
1670             )
1671             {
1672 0         0 $encoding = 'sjis';
1673             }
1674              
1675             # Perl memo by OHZAKI Hiroki
1676             # http://www.din.or.jp/~ohzaki/perl.htm#JP_Code
1677              
1678             elsif ( $s =~
1679             /^([\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc]|[\xa1-\xdf]|[\x00-\x7f])*$/
1680             )
1681             {
1682 0 0       0 if ( $s !~
1683             /^([\xa1-\xfe][\xa1-\xfe]|\x8e[\xa1-\xdf]|\x8f[\xa1-\xfe][\xa1-\xfe]|[\x00-\x7f])*$/
1684             )
1685             {
1686 0         0 $encoding = 'sjis';
1687             }
1688             else {
1689 0         0 $encoding = 'euc';
1690             }
1691             }
1692             else {
1693 0         0 $encoding = 'euc';
1694             }
1695             }
1696             elsif ( $sjis == $utf8 ) {
1697 0         0 $matched = $sjis;
1698 0 0 0     0 if ( $s =~ /^($re_utf8_c|$re_ascii)+$/o ) {
    0          
    0          
1699 0         0 $encoding = 'utf8';
1700             }
1701             elsif ( $s =~ /^($re_sjis_c|$re_sjis_ank)+$/o ) {
1702 0         0 $encoding = 'sjis';
1703             }
1704             elsif ( ( length($s) >= 30 ) && ( $matched >= 15 ) ) {
1705 0         0 $encoding = 'utf8';
1706             }
1707             else {
1708 0         0 $encoding = undef;
1709             }
1710             }
1711             else {
1712 0         0 $matched = $utf8;
1713 0         0 $encoding = 'utf8';
1714             }
1715             }
1716             else {
1717 0 0       0 if ( $euc > $utf8 ) {
    0          
1718 0         0 $matched = $euc;
1719 0         0 $encoding = 'euc';
1720             }
1721             elsif ( $euc == $utf8 ) {
1722 0         0 $matched = $euc;
1723 0 0 0     0 if ( ( length($s) >= 30 ) && ( $matched >= 15 ) ) {
1724 0         0 $encoding = 'utf8';
1725             }
1726             else {
1727 0         0 $encoding = undef;
1728             }
1729             }
1730             else {
1731 0         0 $matched = $utf8;
1732 0         0 $encoding = 'utf8';
1733             }
1734             }
1735             }
1736              
1737 0 0       0 return wantarray ? ( $matched, $encoding ) : $encoding;
1738             }
1739              
1740             #---------------------------------------------------------------------
1741             # Convert any code to specified code
1742             #---------------------------------------------------------------------
1743             sub convert {
1744 840146     840146   7093270 local ( *s, $OUTPUT_encoding, $INPUT_encoding, $option ) = @_;
1745 840146 50 33     1697264 return ( undef, undef ) unless $INPUT_encoding = $INPUT_encoding || &getcode(*s);
1746 840146 50       1295534 return ( undef, $INPUT_encoding ) if $INPUT_encoding eq 'binary';
1747 840146 50       1227945 $OUTPUT_encoding = 'jis' unless $OUTPUT_encoding;
1748 840146 50       1171321 $OUTPUT_encoding = $INPUT_encoding if $OUTPUT_encoding eq 'noconv';
1749 840146         1770026 local (*f) = $convf{ $INPUT_encoding, $OUTPUT_encoding };
1750 840146 100       1385743 if ( $INPUT_encoding eq 'utf8' ) {
1751              
1752             # http://blog.livedoor.jp/dankogai/archives/50116398.html
1753             # http://blog.livedoor.jp/dankogai/archives/51004472.html
1754              
1755 180528 50       305791 if ($] >= 5.008) {
1756 180528         10036472 eval q<
1757             require Encode;
1758             if (Encode::is_utf8($s)) {
1759             $s = Encode::encode_utf8($s);
1760             }
1761             >;
1762             }
1763             }
1764 840146 50       1968796 if ( $convf{ $INPUT_encoding, $OUTPUT_encoding } ) {
1765 840146         1323082 &f( *s, $option );
1766             }
1767             else {
1768 0         0 eval q{ use Encode; };
1769 0 0       0 unless ($@) {
1770 0         0 eval q{ Encode::from_to( $s, $INPUT_encoding, $OUTPUT_encoding ); };
1771             }
1772             }
1773              
1774 840146 50       2033832 wantarray ? ( *f, $INPUT_encoding ) : $INPUT_encoding;
1775             }
1776              
1777             #---------------------------------------------------------------------
1778             # Easy return-by-value interfaces
1779             #---------------------------------------------------------------------
1780 0     0   0 sub jis { &to( 'jis', @_ ); }
1781             #---------------------------------------------------------------------
1782 0     0   0 sub euc { &to( 'euc', @_ ); }
1783             #---------------------------------------------------------------------
1784 0     0   0 sub sjis { &to( 'sjis', @_ ); }
1785             #---------------------------------------------------------------------
1786 0     0   0 sub utf8 { &to( 'utf8', @_ ); }
1787              
1788             #---------------------------------------------------------------------
1789             sub to {
1790 0     0   0 local ( $OUTPUT_encoding, $s, $INPUT_encoding, $option ) = @_;
1791 0         0 &convert( *s, $OUTPUT_encoding, $INPUT_encoding, $option );
1792 0         0 $s;
1793             }
1794              
1795             #---------------------------------------------------------------------
1796             sub what {
1797 0     0   0 local ($s) = @_;
1798 0         0 &getcode(*s);
1799             }
1800              
1801             #---------------------------------------------------------------------
1802             sub trans {
1803 0     0   0 local ($s) = shift;
1804 0         0 &tr( *s, @_ );
1805 0         0 $s;
1806             }
1807              
1808             #---------------------------------------------------------------------
1809             # SJIS to JIS
1810             #---------------------------------------------------------------------
1811             sub sjis2jis {
1812 68856     68856   95083 local ( *s, $option ) = @_;
1813 68856 100       128651 &sjis2sjis( *s, $option ) if $option;
1814 68856         84688 local ($n) = 0;
1815 68856         193534 $s =~ s/(($re_sjis_c)+|($re_ascii)+|($re_sjis_kana)+)/&_sjis2jis($1)/geo;
  68778         103502  
1816 68856         100323 $s .= $esc_asc;
1817 68856         96985 $n;
1818             }
1819              
1820             #---------------------------------------------------------------------
1821             sub _sjis2jis {
1822 68778     68778   119194 local ($s) = shift;
1823 68778 100       160215 if ( $s =~ /^$re_ascii/o ) {
    100          
1824 720         1641 $esc_asc . $s;
1825             }
1826             elsif ( $s =~ /^$re_sjis_kana/o ) {
1827 430         585 $s =~ tr/\xa1-\xdf/\x21-\x5f/;
1828 430         494 $n += length($s);
1829 430         1018 $esc_kana . $s;
1830             }
1831             else {
1832 67628   33     157117 $s =~ s/($re_sjis_c)/$n++, ($s2e{$1}||&s2e($1))/geo;
  67628         167577  
1833 67628         105257 $s =~ tr/\xa1-\xfe/\x21-\x7e/;
1834 67628         164335 $esc_0208 . $s;
1835             }
1836             }
1837              
1838             #---------------------------------------------------------------------
1839             # EUC-JP to JIS
1840             #---------------------------------------------------------------------
1841             sub euc2jis {
1842 48024     48024   65923 local ( *s, $option ) = @_;
1843 48024 100       88358 &euc2euc( *s, $option ) if $option;
1844 48024         55322 local ($n) = 0;
1845 48024         148649 $s =~ s/(($re_euc_c)+|($re_ascii)+|($re_euc_kana)+|($re_euc_0212)+)/&_euc2jis($1)/geo;
  47946         72573  
1846 48024         69956 $s .= $esc_asc;
1847 48024         65563 $n;
1848             }
1849              
1850             #---------------------------------------------------------------------
1851             sub _euc2jis {
1852 47946     47946   89231 local ($s) = shift;
1853 47946 100       170856 if ( $s =~ tr/\x8e//d ) {
    50          
    100          
1854 430         434 $s =~ tr/\xa1-\xfe/\x21-\x7e/;
1855 430         540 $n += length($s);
1856 430         1002 $esc_kana . $s;
1857             }
1858             elsif ( $s =~ tr/\x8f//d ) {
1859 0         0 $s =~ tr/\xa1-\xfe/\x21-\x7e/;
1860 0         0 $n += length($s) / 2;
1861 0         0 $esc_0212 . $s;
1862             }
1863             elsif ( $s =~ /^$re_ascii/ ) {
1864 720         2204 $esc_asc . $s;
1865             }
1866             else {
1867 46796         59613 $s =~ tr/\xa1-\xfe/\x21-\x7e/;
1868 46796         75033 $n += length($s) / 2;
1869 46796         121528 $esc_0208 . $s;
1870             }
1871             }
1872              
1873             #---------------------------------------------------------------------
1874             # JIS to EUC-JP
1875             #---------------------------------------------------------------------
1876             sub jis2euc {
1877 48024     48024   76263 local ( *s, $option ) = @_;
1878 48024 100       83541 &jis2jis( *s, $option ) if $option;
1879 48024         68686 local ($n) = 0;
1880 48024         167975 $s =~ s/($re_esc_jp|$re_esc_asc|$re_esc_kana)([^\e]*)/&_jis2euc($1,$2)/geo;
  95970         153701  
1881 48024         71051 $n;
1882             }
1883              
1884             #---------------------------------------------------------------------
1885             sub _jis2euc {
1886 95970     95970   233756 local ( $esc, $s ) = @_;
1887 95970 100       279816 if ( $esc =~ /^$re_esc_asc/o ) {
    100          
    50          
1888             }
1889             elsif ( $esc =~ /^$re_esc_kana/o ) {
1890 456         642 $s =~ tr/\x21-\x7e/\xa1-\xfe/;
1891 456         945 $s =~ s/([\xa1-\xdf])/$n++, "\x8e$1"/ge;
  482         985  
1892             }
1893             elsif ( $esc =~ /^$re_esc_jis0212/o ) {
1894 0         0 $s =~ tr/\x21-\x7e/\xa1-\xfe/;
1895 0         0 $s =~ s/([\xa1-\xfe][\xa1-\xfe])/$n++, "\x8f$1"/ge;
  0         0  
1896             }
1897             else {
1898 46770         60701 $s =~ tr/\x21-\x7e/\xa1-\xfe/;
1899 46770         75730 $n += length($s) / 2;
1900             }
1901 95970         265075 $s;
1902             }
1903              
1904             #---------------------------------------------------------------------
1905             # JIS to SJIS
1906             #---------------------------------------------------------------------
1907             sub jis2sjis {
1908 48024     48024   66715 local ( *s, $option ) = @_;
1909 48024 100       95842 &jis2jis( *s, $option ) if $option;
1910 48024         63288 local ($n) = 0;
1911 48024         183501 $s =~ s/($re_esc_jp|$re_esc_asc|$re_esc_kana)([^\e]*)/&_jis2sjis($1,$2)/geo;
  95970         167747  
1912 48024         95614 $n;
1913             }
1914              
1915             #---------------------------------------------------------------------
1916             sub _jis2sjis {
1917              
1918             # fixing bug of jcode.pl (1 of 2)
1919             # miscounting $n
1920             # http://srekcah.org/jcode/2.13.1/
1921             #
1922             #! ;; $rcsid = q$Id: jcode.pl,v 2.13.1.4 2002/04/07 07:27:00 utashiro Exp $;
1923             # *** 516,522 ****
1924             # local($esc, $s) = @_;
1925             # if ($esc =~ /^$re_jis0212/o) {
1926             # $s =~ s/../$undef_sjis/g;
1927             #! $n = length;
1928             # }
1929             # elsif ($esc !~ /^$re_asc/o) {
1930             # $n += $s =~ tr/\041-\176/\241-\376/;
1931             # --- 516,522 ----
1932             # local($esc, $s) = @_;
1933             # if ($esc =~ /^$re_jis0212/o) {
1934             # $s =~ s/../$undef_sjis/g;
1935             #! $n = length($s);
1936             # }
1937             # elsif ($esc !~ /^$re_asc/o) {
1938             # $n += $s =~ tr/\041-\176/\241-\376/;
1939              
1940 95970     95970   208010 local ( $esc, $s ) = @_;
1941              
1942 95970 100       223329 if ( $esc =~ /^$re_esc_asc/o ) {
    100          
    50          
1943             }
1944             elsif ( $esc =~ /^$re_esc_kana/o ) {
1945 456         596 $s =~ tr/\x21-\x7e/\xa1-\xfe/;
1946 456         526 $n += length($s);
1947             }
1948             elsif ( $esc =~ /^$re_esc_jis0212/o ) {
1949 0         0 $s =~ s/[\x00-\xff][\x00-\xff]/$n++, $undef_sjis/ge;
  0         0  
1950             }
1951             else {
1952 46770         64142 $s =~ tr/\x21-\x7e/\xa1-\xfe/;
1953 46770   33     113260 $s =~ s/($re_euc_c)/$n++, ($e2s{$1}||&e2s($1))/geo;
  46770         147789  
1954             }
1955 95970         291000 $s;
1956             }
1957              
1958             #---------------------------------------------------------------------
1959             # SJIS to EUC-JP
1960             #---------------------------------------------------------------------
1961             sub sjis2euc {
1962 68856     68856   96004 local ( *s, $option ) = @_;
1963 68856 100       130707 &sjis2sjis( *s, $option ) if $option;
1964 68856         78164 local ($n) = 0;
1965 68856         163664 $s =~ s/($re_sjis_c|$re_sjis_kana)/$n++, &s2e($1)/geo;
  68110         117101  
1966 68856         113537 $n;
1967             }
1968              
1969             #---------------------------------------------------------------------
1970             sub s2e {
1971 223546     223546   286957 local ( $c1, $c2, $code );
1972 223546         540957 ( $c1, $c2 ) = unpack( 'CC', $code = shift );
1973 223546 50       937174 if ( $code =~ /^$re_ascii/ ) {
    100          
    100          
1974 0         0 $code;
1975             }
1976             elsif ($s2e{$code}) {
1977 104         244 $s2e{$code};
1978             }
1979             elsif ( $code gt "\xea\xa4" ) {
1980 46140         128777 $undef_euc;
1981             }
1982             else {
1983 177302 100 100     593560 if ( 0xa1 <= $c1 && $c1 <= 0xdf ) {
    100          
    50          
    0          
1984 378         394 $c2 = $c1;
1985 378         408 $c1 = 0x8e;
1986             }
1987              
1988             elsif ( $Ken_Lunde_CJKV_AppA_sjis2euc2nd_a{$c2} ) {
1989             ( $c1, $c2 ) = (
1990             $Ken_Lunde_CJKV_AppA_sjis2euc1st_a{$c1},
1991 89588         172781 $Ken_Lunde_CJKV_AppA_sjis2euc2nd_a{$c2},
1992             );
1993             }
1994             elsif ( $Ken_Lunde_CJKV_AppA_sjis2euc2nd_b{$c2} ) {
1995             ( $c1, $c2 ) = (
1996             $Ken_Lunde_CJKV_AppA_sjis2euc1st_b{$c1},
1997 87336         164211 $Ken_Lunde_CJKV_AppA_sjis2euc2nd_b{$c2},
1998             );
1999             }
2000              
2001             elsif ( 0x9f <= $c2 ) {
2002 0 0       0 $c1 = $c1 * 2 - ( $c1 >= 0xe0 ? 0xe0 : 0x60 );
2003 0         0 $c2 += 2;
2004             }
2005             else {
2006 0 0       0 $c1 = $c1 * 2 - ( $c1 >= 0xe0 ? 0xe1 : 0x61 );
2007 0         0 $c2 += 0x60 + ( $c2 < 0x7f );
2008             }
2009              
2010 177302 50       242831 if ($cache) {
2011 177302         951278 $s2e{$code} = pack( 'CC', $c1, $c2 );
2012             }
2013             else {
2014 0         0 pack( 'CC', $c1, $c2 );
2015             }
2016             }
2017             }
2018              
2019             #---------------------------------------------------------------------
2020             # EUC-JP to SJIS
2021             #---------------------------------------------------------------------
2022             sub euc2sjis {
2023 48024     48024   65063 local ( *s, $option ) = @_;
2024 48024 100       84403 &euc2euc( *s, $option ) if $option;
2025 48024         52546 local ($n) = 0;
2026 48024         115092 $s =~ s/($re_euc_c|$re_euc_kana|$re_euc_0212)/$n++, &e2s($1)/geo;
  47278         70834  
2027 48024         76108 $n;
2028             }
2029              
2030             #---------------------------------------------------------------------
2031             sub e2s {
2032 103096     103096   133991 local ( $c1, $c2, $code );
2033 103096         238360 ( $c1, $c2 ) = unpack( 'CC', $code = shift );
2034 103096 50       456978 if ( $code =~ /^$re_ascii/ ) {
    100          
    100          
    50          
    50          
    0          
2035 0         0 return $code;
2036             }
2037             elsif ($e2s{$code}) {
2038 126         318 return $e2s{$code};
2039             }
2040             elsif ( $c1 == 0x8e ) { # SS2
2041 482         1302 return substr( $code, 1, 1 );
2042             }
2043             elsif ( $c1 == 0x8f ) { # SS3
2044 0         0 return $undef_sjis;
2045             }
2046              
2047             elsif ( $Ken_Lunde_CJKV_AppA_euc2sjis1st{$c1} ) {
2048 102488 100       152066 if ($c1 & 0x01) {
2049             ( $c1, $c2 ) = (
2050             $Ken_Lunde_CJKV_AppA_euc2sjis1st {$c1},
2051 56168         109661 $Ken_Lunde_CJKV_AppA_euc2sjis2nd_odd{$c2},
2052             );
2053             }
2054             else {
2055             ( $c1, $c2 ) = (
2056             $Ken_Lunde_CJKV_AppA_euc2sjis1st {$c1},
2057 46320         82665 $Ken_Lunde_CJKV_AppA_euc2sjis2nd_even{$c2},
2058             );
2059             }
2060             }
2061              
2062             elsif ( $c1 % 2 ) {
2063 0 0       0 $c1 = ( $c1 >> 1 ) + ( $c1 < 0xdf ? 0x31 : 0x71 );
2064 0         0 $c2 -= 0x60 + ( $c2 < 0xe0 );
2065             }
2066             else {
2067 0 0       0 $c1 = ( $c1 >> 1 ) + ( $c1 < 0xdf ? 0x30 : 0x70 );
2068 0         0 $c2 -= 2;
2069             }
2070              
2071 102488 50       137969 if ($cache) {
2072 102488         468652 $e2s{$code} = pack( 'CC', $c1, $c2 );
2073             }
2074             else {
2075 0         0 pack( 'CC', $c1, $c2 );
2076             }
2077             }
2078              
2079             #---------------------------------------------------------------------
2080             # UTF-8 to JIS
2081             #---------------------------------------------------------------------
2082             sub utf82jis {
2083 45132     45132   104907 local ( *u, $option ) = @_;
2084 45132 100       105874 &utf82utf8( *u, $option ) if $option;
2085 45132         56001 local ($n) = 0;
2086 45132         200853 $u =~ s/(($re_ascii)+|($re_utf8_kana)+|($re_utf8_c)+)/&_utf82jis($1)/geo;
  45054         79329  
2087 45132         71928 $u .= $esc_asc;
2088 45132         67810 $n;
2089             }
2090              
2091             #---------------------------------------------------------------------
2092             sub _utf82jis {
2093 45054     45054   82215 local ($u) = @_;
2094 45054 100       128892 if ( $u =~ /^$re_ascii/o ) {
    100          
2095 720         1883 $esc_asc . $u;
2096             }
2097             elsif ( $u =~ /^$re_utf8_kana/o ) {
2098 430 100       751 &init_u2k unless %u2k;
2099 430         1724 $u =~ s/($re_utf8_kana)/$n++, $u2k{$1}/geo;
  482         1341  
2100 430         784 $u =~ tr/\xa1-\xfe/\x21-\x7e/;
2101 430         1133 $esc_kana . $u;
2102             }
2103             else {
2104 43904   33     107533 $u =~ s/($re_utf8_c)/$n++, ($u2e{$1}||&u2e($1))/geo;
  43904         135905  
2105 43904         78936 $u =~ tr/\xa1-\xfe/\x21-\x7e/;
2106 43904         121391 $esc_0208 . $u;
2107             }
2108             }
2109              
2110             #---------------------------------------------------------------------
2111             # UTF-8 to EUC-JP
2112             #---------------------------------------------------------------------
2113             sub utf82euc {
2114 45132     45132   103056 local ( *u, $option ) = @_;
2115 45132 100       107651 &utf82utf8( *u, $option ) if $option;
2116 45132         70266 local ($n) = 0;
2117 45132         130698 $u =~ s/($re_utf8_kana|$re_utf8_not_kana)/$n++, &_utf82euc($1)/geo;
  44386         84411  
2118 45132         76558 $n;
2119             }
2120              
2121             #---------------------------------------------------------------------
2122             sub _utf82euc {
2123 44386     44386   81887 local ($u) = @_;
2124 44386 100       98061 if ( $u =~ /^$re_utf8_kana/o ) {
2125 482 100       811 &init_u2k unless %u2k;
2126 482         1705 $u =~ s/($re_utf8_kana)/"\x8e".$u2k{$1}/geo;
  482         1243  
2127             }
2128             else {
2129 43904 50       108873 $u =~ s/($re_utf8_not_kana)/$u2e{$1}||&u2e($1)/geo;
  43904         145752  
2130             }
2131 44386         142529 $u;
2132             }
2133              
2134             #---------------------------------------------------------------------
2135             sub u2e {
2136 87808     87808   149698 local ($code) = @_;
2137 87808 50       126039 if ($cache) {
2138             $u2e{$code} =
2139             ( $s2e{ $u2s{$code} || &u2s($code) }
2140 87808   33     215621 || &s2e( $u2s{$code} || &u2s($code) ) );
2141             }
2142             else {
2143             $s2e{ $u2s{$code} || &u2s($code) }
2144 0 0 0     0 || &s2e( $u2s{$code} || &u2s($code) );
      0        
2145             }
2146             }
2147              
2148             #---------------------------------------------------------------------
2149             # UTF-8 to SJIS
2150             #---------------------------------------------------------------------
2151             sub utf82sjis {
2152 45132     45132   107153 local ( *u, $option ) = @_;
2153 45132 100       103380 &utf82utf8( *u, $option ) if $option;
2154 45132         64197 local ($n) = 0;
2155 45132         120945 $u =~ s/($re_utf8_c)/$n++, &u2s($1)/geo;
  44386         88367  
2156 45132         92328 $n;
2157             }
2158              
2159             #---------------------------------------------------------------------
2160             sub u2s {
2161 132194     132194   168826 local ($utf8);
2162 132194         221832 local ($code) = @_;
2163 132194 100       220413 &init_utf82sjis unless %utf82sjis_1;
2164 132194         311045 $utf8 = unpack( 'H*', $code );
2165 132194 100       527823 if ($u2s{$code}) {
    100          
    100          
    50          
2166 104         244 $u2s{$code};
2167             }
2168             elsif ( defined $JP170559{$utf8} ) {
2169 7128 50       11716 if ($cache) {
2170 7128         53230 $u2s{$code} = pack( 'H*', $JP170559{$utf8} );
2171             }
2172             else {
2173 0         0 pack( 'H*', $JP170559{$utf8} );
2174             }
2175             }
2176             elsif ( defined $utf82sjis_1{$utf8} ) {
2177 63942 50       91703 if ($cache) {
2178 63942         400250 $u2s{$code} = pack( 'H*', $utf82sjis_1{$utf8} );
2179             }
2180             else {
2181 0         0 pack( 'H*', $utf82sjis_1{$utf8} );
2182             }
2183             }
2184             elsif ( defined $utf82sjis_2{$utf8} ) {
2185 61020 50       86609 if ($cache) {
2186 61020         361591 $u2s{$code} = pack( 'H*', $utf82sjis_2{$utf8} );
2187             }
2188             else {
2189 0         0 pack( 'H*', $utf82sjis_2{$utf8} );
2190             }
2191             }
2192             else {
2193 0         0 $undef_sjis;
2194             }
2195             }
2196              
2197             #---------------------------------------------------------------------
2198             # JIS to UTF-8
2199             #---------------------------------------------------------------------
2200             sub jis2utf8 {
2201 48024     48024   80768 local ( *u, $option ) = @_;
2202 48024 100       90853 &jis2jis( *u, $option ) if $option;
2203 48024         60573 local ($n) = 0;
2204 48024         181892 $u =~ s/($re_esc_jp|$re_esc_asc|$re_esc_kana)([^\e]*)/&_jis2utf8($1,$2)/geo;
  95970         156691  
2205 48024         81022 $n;
2206             }
2207              
2208             #---------------------------------------------------------------------
2209             sub _jis2utf8 {
2210 95970     95970   206905 local ( $esc, $s ) = @_;
2211 95970 100       246087 if ( $esc =~ /^$re_esc_asc/o ) {
    100          
    50          
2212             }
2213             elsif ( $esc =~ /^$re_esc_kana/o ) {
2214 456 100       880 &init_k2u unless %k2u;
2215 456         698 $s =~ tr/\x21-\x7e/\xa1-\xfe/;
2216 456         1128 $s =~ s/([\x00-\xff])/$n++, $k2u{$1}/ge;
  482         1291  
2217             }
2218             elsif ( $esc =~ /^$re_esc_jis0212/o ) {
2219 0         0 $s =~ s/[\x00-\xff][\x00-\xff]/$n++, $undef_utf8/ge;
  0         0  
2220             }
2221             else {
2222 46770         61438 $s =~ tr/\x21-\x7e/\xa1-\xfe/;
2223 46770   33     120727 $s =~ s/($re_euc_c)/$n++, ($e2u{$1}||&e2u($1))/geo;
  46770         135800  
2224             }
2225 95970         290197 $s;
2226             }
2227              
2228             #---------------------------------------------------------------------
2229             # EUC-JP to UTF-8
2230             #---------------------------------------------------------------------
2231             sub euc2utf8 {
2232 48024     48024   78274 local ( *u, $option ) = @_;
2233 48024 100       92053 &euc2euc( *u, $option ) if $option;
2234 48024         55359 local ($n) = 0;
2235 48024         144355 $u =~ s/($re_euc_c|$re_euc_kana|$re_euc_0212)/$n++, &_euc2utf8($1)/geo;
  47278         72233  
2236 48024         70844 $n;
2237             }
2238              
2239             #---------------------------------------------------------------------
2240             sub _euc2utf8 {
2241 47278     47278   79802 local ($s) = @_;
2242 47278 50       86922 if ( $s =~ /^$re_euc_0212/o ) {
    100          
2243 0         0 $s =~ s/[\x00-\xff][\x00-\xff]/$undef_utf8/g;
2244             }
2245             elsif ( $s =~ /^$re_euc_kana/o ) {
2246 482 100       832 &init_k2u unless %k2u;
2247 482         1437 $s =~ s/\x8e([\x00-\xff])/$k2u{$1}/ge;
  482         1127  
2248             }
2249             else {
2250 46796 100       118200 $s =~ s/($re_euc_c)/$e2u{$1}||&e2u($1)/geo;
  46796         111691  
2251             }
2252 47278         108048 $s;
2253             }
2254              
2255             #---------------------------------------------------------------------
2256             sub e2u {
2257 93440     93440   115854 local ( $c1, $c2, $euc, $sjis );
2258 93440         228477 ( $c1, $c2 ) = unpack( 'CC', $euc = shift );
2259 93440 100       164699 if ( $c1 % 2 ) {
2260 47120 100       72456 $c1 = ( $c1 >> 1 ) + ( $c1 < 0xdf ? 0x31 : 0x71 );
2261 47120         61248 $c2 -= 0x60 + ( $c2 < 0xe0 );
2262             }
2263             else {
2264 46320 100       72160 $c1 = ( $c1 >> 1 ) + ( $c1 < 0xdf ? 0x30 : 0x70 );
2265 46320         61674 $c2 -= 2;
2266             }
2267 93440 100       142619 &init_sjis2utf8 unless %sjis2utf8_1;
2268 93440         215775 $sjis = unpack( 'H*', pack( 'CC', $c1, $c2 ) );
2269 93440 100       220436 if ( defined $sjis2utf8_1{$sjis} ) {
    100          
2270 42624 50       54147 if ($cache) {
2271 42624         214928 $e2u{$euc} = pack( 'H*', $sjis2utf8_1{$sjis} );
2272             }
2273             else {
2274 0         0 pack( 'H*', $sjis2utf8_1{$sjis} );
2275             }
2276             }
2277             elsif ( defined $sjis2utf8_2{$sjis} ) {
2278 40680 50       51843 if ($cache) {
2279 40680         214134 $e2u{$euc} = pack( 'H*', $sjis2utf8_2{$sjis} );
2280             }
2281             else {
2282 0         0 pack( 'H*', $sjis2utf8_2{$sjis} );
2283             }
2284             }
2285             else {
2286 10136         27976 $undef_utf8;
2287             }
2288             }
2289              
2290             #---------------------------------------------------------------------
2291             # SJIS to UTF-8
2292             #---------------------------------------------------------------------
2293             sub sjis2utf8 {
2294 68858     68858   104669 local ( *s, $option ) = @_;
2295 68858 100       119128 &sjis2sjis( *s, $option ) if $option;
2296 68858         79779 local ($n) = 0;
2297 68858         148909 $s =~ s/($re_sjis_c|$re_sjis_kana)/$n++, &s2u($1)/geo;
  68116         99997  
2298 68858         107857 $n;
2299             }
2300              
2301             #---------------------------------------------------------------------
2302             sub s2u {
2303 68116     68116   67624 local ($sjis);
2304 68116         109187 local ($code) = @_;
2305 68116 100       102754 &init_k2u unless %k2u;
2306 68116 100       90436 &init_sjis2utf8 unless %sjis2utf8_1;
2307 68116         121742 $sjis = unpack( 'H*', $code );
2308 68116 50       211907 if ($s2u{$code}) {
    100          
    100          
    100          
2309 0         0 $s2u{$code};
2310             }
2311             elsif ($k2u{$code}) {
2312 482         1054 $k2u{$code};
2313             }
2314             elsif ( defined $sjis2utf8_1{$sjis} ) {
2315 21386 50       26543 if ($cache) {
2316 21386         83660 $s2u{$code} = pack( 'H*', $sjis2utf8_1{$sjis} );
2317             }
2318             else {
2319 0         0 pack( 'H*', $sjis2utf8_1{$sjis} );
2320             }
2321             }
2322             elsif ( defined $sjis2utf8_2{$sjis} ) {
2323 24912 50       34958 if ($cache) {
2324 24912         110128 $s2u{$code} = pack( 'H*', $sjis2utf8_2{$sjis} );
2325             }
2326             else {
2327 0         0 pack( 'H*', $sjis2utf8_2{$sjis} );
2328             }
2329             }
2330             else {
2331 21336         41462 $undef_utf8;
2332             }
2333             }
2334              
2335             #---------------------------------------------------------------------
2336             # JIS to JIS, SJIS to SJIS, EUC-JP to EUC-JP, UTF-8 to UTF-8
2337             #---------------------------------------------------------------------
2338             sub jis2jis {
2339 144072     144072   225393 local ( *s, $option ) = @_;
2340 144072         191631 local ($n) = 0;
2341 144072         610620 $s =~ s/$re_esc_jis0208/$esc_0208/go;
2342 144072         398030 $s =~ s/$re_esc_asc/$esc_asc/go;
2343 144072 50       285347 if ( defined $option ) {
2344 144072 100       279963 if ( $option =~ /z/ ) {
    100          
2345 64032         92401 &h2z_jis(*s);
2346             }
2347             elsif ( $option =~ /h/ ) {
2348 64032         93519 &z2h_jis(*s);
2349             }
2350             }
2351 144072         173918 $n;
2352             }
2353              
2354             #---------------------------------------------------------------------
2355             sub sjis2sjis {
2356 206568     206568   303080 local ( *s, $option ) = @_;
2357 206568         269500 local ($n) = 0;
2358 206568 50       317232 if ( defined $option ) {
2359 206568 100       452966 if ( $option =~ /z/ ) {
    100          
2360 91808         143717 &h2z_sjis(*s);
2361             }
2362             elsif ( $option =~ /h/ ) {
2363 91808         138117 &z2h_sjis(*s);
2364             }
2365             }
2366 206568         273848 $n;
2367             }
2368              
2369             #---------------------------------------------------------------------
2370             sub euc2euc {
2371 144072     144072   195366 local ( *s, $option ) = @_;
2372 144072         161241 local ($n) = 0;
2373 144072 50       198400 if ( defined $option ) {
2374 144072 100       296336 if ( $option =~ /z/ ) {
    100          
2375 64032         86757 &h2z_euc(*s);
2376             }
2377             elsif ( $option =~ /h/ ) {
2378 64032         88440 &z2h_euc(*s);
2379             }
2380             }
2381 144072         190263 $n;
2382             }
2383              
2384             #---------------------------------------------------------------------
2385             sub utf82utf8 {
2386 135396     135396   266598 local ( *s, $option ) = @_;
2387 135396         197918 local ($n) = 0;
2388 135396 50       232960 if ( defined $option ) {
2389 135396 100       359054 if ( $option =~ /z/ ) {
    100          
2390 60176         126070 &h2z_utf8(*s);
2391             }
2392             elsif ( $option =~ /h/ ) {
2393 60176         101472 &z2h_utf8(*s);
2394             }
2395             }
2396 135396         180429 $n;
2397             }
2398              
2399             #---------------------------------------------------------------------
2400             # Cache control functions
2401             #---------------------------------------------------------------------
2402             sub cache {
2403 0     0   0 local ($previous) = $cache;
2404 0         0 $cache = 1;
2405 0         0 $previous;
2406             }
2407              
2408             #---------------------------------------------------------------------
2409             sub nocache {
2410 0     0   0 local ($previous) = $cache;
2411 0         0 $cache = 0;
2412 0         0 $previous;
2413             }
2414              
2415             #---------------------------------------------------------------------
2416             sub flush {
2417 0     0   0 &flushcache();
2418             }
2419              
2420             #---------------------------------------------------------------------
2421             sub flushcache {
2422 0     0   0 undef %e2s;
2423 0         0 undef %s2e;
2424 0         0 undef %e2u;
2425 0         0 undef %u2e;
2426 0         0 undef %s2u;
2427 0         0 undef %u2s;
2428             }
2429              
2430             #---------------------------------------------------------------------
2431             # JIS X0201 -> JIS X0208 KANA conversion routines
2432             #---------------------------------------------------------------------
2433             sub h2z_jis {
2434 64032     64032   91615 local ( *s, $n ) = @_;
2435 64032 100       117189 if ( $s =~ s/$re_esc_kana([^\e]*)/$esc_0208 . &_h2z_jis($1)/geo ) {
  504         1763  
2436 504         2475 1 while $s =~ s/(($re_esc_jis0208)[^\e]*)($re_esc_jis0208)/$1/o;
2437             }
2438 64032         87692 $n;
2439             }
2440              
2441             #---------------------------------------------------------------------
2442             sub _h2z_jis {
2443 504     504   924 local ($s) = @_;
2444 504         1349 $s =~ s/(([\x21-\x5f])([\x5e\x5f])?)/
2445 504   33     1966 $n++, ($h2z{$1} || $h2z{$2} . $h2z{$3})
2446             /ge;
2447 504         1702 $s;
2448             }
2449              
2450             # Ad hoc patch for reduce waring on h2z_euc
2451             # http://white.niu.ne.jp/yapw/yapw.cgi/jcode.pl%A4%CE%A5%A8%A5%E9%A1%BC%CD%DE%C0%A9
2452             # by NAKATA Yoshinori
2453              
2454             #---------------------------------------------------------------------
2455             sub h2z_euc {
2456 64032     64032   81052 local ( *s, $n ) = @_;
2457 64032         80437 $s =~ s/\x8e([\xa1-\xdf])(\x8e([\xde\xdf]))?/
2458 504 50 0     1605 ($n++, defined($3) ? ($h2z{"$1$3"} || $h2z{$1} . $h2z{$3}) : $h2z{$1})
2459             /ge;
2460 64032         96405 $n;
2461             }
2462              
2463             #---------------------------------------------------------------------
2464             sub h2z_sjis {
2465 91808     91808   134860 local ( *s, $n ) = @_;
2466 91808         337159 $s =~ s/(($re_sjis_c)+)|(([\xa1-\xdf])([\xde\xdf])?)/
2467             $1 || ($n++, $h2z{$3} ? $e2s{$h2z{$3}} || &e2s($h2z{$3})
2468 90744 50 33     276221 : &e2s($h2z{$4}) . ($5 && &e2s($h2z{$5})))
    100 0        
2469             /geo;
2470 91808         162163 $n;
2471             }
2472              
2473             #---------------------------------------------------------------------
2474             sub h2z_utf8 {
2475 60176     60176   86622 local ( *s, $n ) = @_;
2476 60176 100       105601 &init_h2z_utf8 unless %h2z_utf8;
2477 60176         228629 $s =~
2478 59112 100       203225 s/($re_utf8_voiced_kana|$re_utf8_c)/$h2z_utf8{$1} ? ($n++, $h2z_utf8{$1}) : $1/geo;
2479 60176         102792 $n;
2480             }
2481              
2482             #---------------------------------------------------------------------
2483             # JIS X0208 -> JIS X0201 KANA conversion routines
2484             #---------------------------------------------------------------------
2485             sub z2h_jis {
2486 64032     64032   92785 local ( *s, $n ) = @_;
2487 64032         194839 $s =~ s/($re_esc_jis0208)([^\e]+)/&_z2h_jis($2)/geo;
  62464         104730  
2488 64032         93497 $n;
2489             }
2490              
2491             #---------------------------------------------------------------------
2492             sub _z2h_jis {
2493 62464     62464   132149 local ($s) = @_;
2494 62464         176365 $s =~ s/((\%[!-~]|![\#\"&VW+,<])+|([^!%][!-~]|![^\#\"&VW+,<])+)/
2495 62464         91469 &__z2h_jis($1)
2496             /ge;
2497 62464         142983 $s;
2498             }
2499              
2500             #---------------------------------------------------------------------
2501             sub __z2h_jis {
2502 62464     62464   100181 local ($s) = @_;
2503 62464 100 100     277857 return $esc_0208 . $s unless $s =~ /^%/ || $s =~ /^![\#\"&VW+,<]/;
2504 816         1553 $n += length($s) / 2;
2505 816         1516 local ($^W);
2506 816         2921 $s =~ s/([\x00-\xff][\x00-\xff])/$z2h{$1}/g;
2507 816         2470 $esc_kana . $s;
2508             }
2509              
2510             #---------------------------------------------------------------------
2511             sub z2h_euc {
2512 64032     64032   80851 local ( *s, $n ) = @_;
2513 64032 100       105012 &init_z2h_euc unless %z2h_euc;
2514 64032         167276 $s =~ s/($re_euc_c|$re_euc_kana)/
2515 62968 100       176512 $z2h_euc{$1} ? ($n++, $z2h_euc{$1}) : $1
2516             /geo;
2517 64032         102535 $n;
2518             }
2519              
2520             #---------------------------------------------------------------------
2521             sub z2h_sjis {
2522 91808     91808   119187 local ( *s, $n ) = @_;
2523 91808 100       143942 &init_z2h_sjis unless %z2h_sjis;
2524 91808 100       249842 $s =~ s/($re_sjis_c)/$z2h_sjis{$1} ? ($n++, $z2h_sjis{$1}) : $1/geo;
  90240         275412  
2525 91808         144933 $n;
2526             }
2527              
2528             #---------------------------------------------------------------------
2529             sub z2h_utf8 {
2530 60176     60176   84387 local ( *s, $n ) = @_;
2531 60176 100       100001 &init_z2h_utf8 unless %z2h_utf8;
2532 60176 100       198275 $s =~ s/($re_utf8_c)/$z2h_utf8{$1} ? ($n++, $z2h_utf8{$1}) : $1/geo;
  59112         211029  
2533 60176         100784 $n;
2534             }
2535              
2536             #
2537             # Initializing JIS X0208 to JIS X0201 KANA table for EUC-JP and SJIS
2538             # and UTF-8
2539             # This can be done in &init but it's not worth doing. Similarly,
2540             # precalculated table is not worth to occupy the file space and
2541             # reduce the readability. The author personnaly discourages to use
2542             # JIS X0201 Kana character in the any situation.
2543             #
2544              
2545             #---------------------------------------------------------------------
2546             sub init_z2h_euc {
2547 72     72   103 local ( $k, $s );
2548 72         298 while ( ( $k, $s ) = each %z2h ) {
2549 12816 100       52101 $s =~ s/([\xa1-\xdf])/\x8e$1/g && ( $z2h_euc{$k} = $s );
2550             }
2551             }
2552              
2553             #---------------------------------------------------------------------
2554             sub init_z2h_sjis {
2555 96     96   177 local ( $s, $v );
2556 96         444 while ( ( $s, $v ) = each %z2h ) {
2557 17088 100       43955 $s =~ /[\x80-\xff]/ && ( $z2h_sjis{ &e2s($s) } = $v );
2558             }
2559             }
2560              
2561             %_z2h_utf8 = split( /\s+/, <<'END' );
2562             e38082 efbda1
2563             e3808c efbda2
2564             e3808d efbda3
2565             e38081 efbda4
2566             e383bb efbda5
2567             e383b2 efbda6
2568             e382a1 efbda7
2569             e382a3 efbda8
2570             e382a5 efbda9
2571             e382a7 efbdaa
2572             e382a9 efbdab
2573             e383a3 efbdac
2574             e383a5 efbdad
2575             e383a7 efbdae
2576             e38383 efbdaf
2577             e383bc efbdb0
2578             e382a2 efbdb1
2579             e382a4 efbdb2
2580             e382a6 efbdb3
2581             e382a8 efbdb4
2582             e382aa efbdb5
2583             e382ab efbdb6
2584             e382ad efbdb7
2585             e382af efbdb8
2586             e382b1 efbdb9
2587             e382b3 efbdba
2588             e382b5 efbdbb
2589             e382b7 efbdbc
2590             e382b9 efbdbd
2591             e382bb efbdbe
2592             e382bd efbdbf
2593             e382bf efbe80
2594             e38381 efbe81
2595             e38384 efbe82
2596             e38386 efbe83
2597             e38388 efbe84
2598             e3838a efbe85
2599             e3838b efbe86
2600             e3838c efbe87
2601             e3838d efbe88
2602             e3838e efbe89
2603             e3838f efbe8a
2604             e38392 efbe8b
2605             e38395 efbe8c
2606             e38398 efbe8d
2607             e3839b efbe8e
2608             e3839e efbe8f
2609             e3839f efbe90
2610             e383a0 efbe91
2611             e383a1 efbe92
2612             e383a2 efbe93
2613             e383a4 efbe94
2614             e383a6 efbe95
2615             e383a8 efbe96
2616             e383a9 efbe97
2617             e383aa efbe98
2618             e383ab efbe99
2619             e383ac efbe9a
2620             e383ad efbe9b
2621             e383af efbe9c
2622             e383b3 efbe9d
2623             e3829b efbe9e
2624             e3829c efbe9f
2625             e383b4 efbdb3efbe9e
2626             e382ac efbdb6efbe9e
2627             e382ae efbdb7efbe9e
2628             e382b0 efbdb8efbe9e
2629             e382b2 efbdb9efbe9e
2630             e382b4 efbdbaefbe9e
2631             e382b6 efbdbbefbe9e
2632             e382b8 efbdbcefbe9e
2633             e382ba efbdbdefbe9e
2634             e382bc efbdbeefbe9e
2635             e382be efbdbfefbe9e
2636             e38380 efbe80efbe9e
2637             e38382 efbe81efbe9e
2638             e38385 efbe82efbe9e
2639             e38387 efbe83efbe9e
2640             e38389 efbe84efbe9e
2641             e38390 efbe8aefbe9e
2642             e38393 efbe8befbe9e
2643             e38396 efbe8cefbe9e
2644             e38399 efbe8defbe9e
2645             e3839c efbe8eefbe9e
2646             e38391 efbe8aefbe9f
2647             e38394 efbe8befbe9f
2648             e38397 efbe8cefbe9f
2649             e3839a efbe8defbe9f
2650             e3839d efbe8eefbe9f
2651             END
2652              
2653             if ( scalar(keys %_z2h_utf8) != 89 ) {
2654             die "scalar(keys %_z2h_utf8) is ", scalar(keys %_z2h_utf8), ".";
2655             }
2656              
2657             #---------------------------------------------------------------------
2658             sub init_z2h_utf8 {
2659 64 50   64   213 if (%h2z_utf8) {
2660 0         0 %z2h_utf8 = reverse %h2z_utf8;
2661 0 0       0 if ( scalar( keys %z2h_utf8 ) != scalar( keys %h2z_utf8 ) ) {
2662 0         0 die "scalar(keys %z2h_utf8) != scalar(keys %h2z_utf8).";
2663             }
2664             }
2665             else {
2666 64         296 local ( $z, $h );
2667 64         367 while ( ( $z, $h ) = each %_z2h_utf8 ) {
2668 5696         17874 $z2h_utf8{ pack( 'H*', $z ) } = pack( 'H*', $h );
2669             }
2670             }
2671             }
2672              
2673             #---------------------------------------------------------------------
2674             sub init_h2z_utf8 {
2675 64 50   64   205 if (%z2h_utf8) {
2676 0         0 %h2z_utf8 = reverse %z2h_utf8;
2677 0 0       0 if ( scalar( keys %h2z_utf8 ) != scalar( keys %z2h_utf8 ) ) {
2678 0         0 die "scalar(keys %h2z_utf8) != scalar(keys %z2h_utf8).";
2679             }
2680             }
2681             else {
2682 64         315 local ( $z, $h );
2683 64         315 while ( ( $z, $h ) = each %_z2h_utf8 ) {
2684 5696         16685 $h2z_utf8{ pack( 'H*', $h ) } = pack( 'H*', $z );
2685             }
2686             }
2687             }
2688              
2689             # http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT
2690             #
2691             # Name: cp932 to Unicode table
2692             # Unicode version: 2.0
2693             # Table version: 2.01
2694             # Table format: Format A
2695             # Date: 04/15/98
2696             #
2697             # Contact: Shawn.Steele@microsoft.com
2698             #
2699             # General notes: none
2700             #
2701             # Format: Three tab-separated columns
2702             # Column #1 is the cp932 code (in hex)
2703             # Column #2 is the Unicode (in hex as 0xXXXX)
2704             # Column #3 is the Unicode name (follows a comment sign, '#')
2705             #
2706             # The entries are in cp932 order
2707             #
2708              
2709             #---------------------------------------------------------------------
2710             sub init_sjis2utf8 {
2711              
2712             # (1 of 2) avoid "Allocation too large" of perl 4.036
2713              
2714 320     320   1495531 %sjis2utf8_1 = split( /\s+/, <<'END' );
2715             a1 efbda1
2716             a2 efbda2
2717             a3 efbda3
2718             a4 efbda4
2719             a5 efbda5
2720             a6 efbda6
2721             a7 efbda7
2722             a8 efbda8
2723             a9 efbda9
2724             aa efbdaa
2725             ab efbdab
2726             ac efbdac
2727             ad efbdad
2728             ae efbdae
2729             af efbdaf
2730             b0 efbdb0
2731             b1 efbdb1
2732             b2 efbdb2
2733             b3 efbdb3
2734             b4 efbdb4
2735             b5 efbdb5
2736             b6 efbdb6
2737             b7 efbdb7
2738             b8 efbdb8
2739             b9 efbdb9
2740             ba efbdba
2741             bb efbdbb
2742             bc efbdbc
2743             bd efbdbd
2744             be efbdbe
2745             bf efbdbf
2746             c0 efbe80
2747             c1 efbe81
2748             c2 efbe82
2749             c3 efbe83
2750             c4 efbe84
2751             c5 efbe85
2752             c6 efbe86
2753             c7 efbe87
2754             c8 efbe88
2755             c9 efbe89
2756             ca efbe8a
2757             cb efbe8b
2758             cc efbe8c
2759             cd efbe8d
2760             ce efbe8e
2761             cf efbe8f
2762             d0 efbe90
2763             d1 efbe91
2764             d2 efbe92
2765             d3 efbe93
2766             d4 efbe94
2767             d5 efbe95
2768             d6 efbe96
2769             d7 efbe97
2770             d8 efbe98
2771             d9 efbe99
2772             da efbe9a
2773             db efbe9b
2774             dc efbe9c
2775             dd efbe9d
2776             de efbe9e
2777             df efbe9f
2778             8140 e38080
2779             8141 e38081
2780             8142 e38082
2781             8143 efbc8c
2782             8144 efbc8e
2783             8145 e383bb
2784             8146 efbc9a
2785             8147 efbc9b
2786             8148 efbc9f
2787             8149 efbc81
2788             814a e3829b
2789             814b e3829c
2790             814c c2b4
2791             814d efbd80
2792             814e c2a8
2793             814f efbcbe
2794             8150 efbfa3
2795             8151 efbcbf
2796             8152 e383bd
2797             8153 e383be
2798             8154 e3829d
2799             8155 e3829e
2800             8156 e38083
2801             8157 e4bb9d
2802             8158 e38085
2803             8159 e38086
2804             815a e38087
2805             815b e383bc
2806             815c e28095
2807             815d e28090
2808             815e efbc8f
2809             815f efbcbc
2810             8160 efbd9e
2811             8161 e288a5
2812             8162 efbd9c
2813             8163 e280a6
2814             8164 e280a5
2815             8165 e28098
2816             8166 e28099
2817             8167 e2809c
2818             8168 e2809d
2819             8169 efbc88
2820             816a efbc89
2821             816b e38094
2822             816c e38095
2823             816d efbcbb
2824             816e efbcbd
2825             816f efbd9b
2826             8170 efbd9d
2827             8171 e38088
2828             8172 e38089
2829             8173 e3808a
2830             8174 e3808b
2831             8175 e3808c
2832             8176 e3808d
2833             8177 e3808e
2834             8178 e3808f
2835             8179 e38090
2836             817a e38091
2837             817b efbc8b
2838             817c efbc8d
2839             817d c2b1
2840             817e c397
2841             8180 c3b7
2842             8181 efbc9d
2843             8182 e289a0
2844             8183 efbc9c
2845             8184 efbc9e
2846             8185 e289a6
2847             8186 e289a7
2848             8187 e2889e
2849             8188 e288b4
2850             8189 e29982
2851             818a e29980
2852             818b c2b0
2853             818c e280b2
2854             818d e280b3
2855             818e e28483
2856             818f efbfa5
2857             8190 efbc84
2858             8191 efbfa0
2859             8192 efbfa1
2860             8193 efbc85
2861             8194 efbc83
2862             8195 efbc86
2863             8196 efbc8a
2864             8197 efbca0
2865             8198 c2a7
2866             8199 e29886
2867             819a e29885
2868             819b e2978b
2869             819c e2978f
2870             819d e2978e
2871             819e e29787
2872             819f e29786
2873             81a0 e296a1
2874             81a1 e296a0
2875             81a2 e296b3
2876             81a3 e296b2
2877             81a4 e296bd
2878             81a5 e296bc
2879             81a6 e280bb
2880             81a7 e38092
2881             81a8 e28692
2882             81a9 e28690
2883             81aa e28691
2884             81ab e28693
2885             81ac e38093
2886             81b8 e28888
2887             81b9 e2888b
2888             81ba e28a86
2889             81bb e28a87
2890             81bc e28a82
2891             81bd e28a83
2892             81be e288aa
2893             81bf e288a9
2894             81c8 e288a7
2895             81c9 e288a8
2896             81ca efbfa2
2897             81cb e28792
2898             81cc e28794
2899             81cd e28880
2900             81ce e28883
2901             81da e288a0
2902             81db e28aa5
2903             81dc e28c92
2904             81dd e28882
2905             81de e28887
2906             81df e289a1
2907             81e0 e28992
2908             81e1 e289aa
2909             81e2 e289ab
2910             81e3 e2889a
2911             81e4 e288bd
2912             81e5 e2889d
2913             81e6 e288b5
2914             81e7 e288ab
2915             81e8 e288ac
2916             81f0 e284ab
2917             81f1 e280b0
2918             81f2 e299af
2919             81f3 e299ad
2920             81f4 e299aa
2921             81f5 e280a0
2922             81f6 e280a1
2923             81f7 c2b6
2924             81fc e297af
2925             824f efbc90
2926             8250 efbc91
2927             8251 efbc92
2928             8252 efbc93
2929             8253 efbc94
2930             8254 efbc95
2931             8255 efbc96
2932             8256 efbc97
2933             8257 efbc98
2934             8258 efbc99
2935             8260 efbca1
2936             8261 efbca2
2937             8262 efbca3
2938             8263 efbca4
2939             8264 efbca5
2940             8265 efbca6
2941             8266 efbca7
2942             8267 efbca8
2943             8268 efbca9
2944             8269 efbcaa
2945             826a efbcab
2946             826b efbcac
2947             826c efbcad
2948             826d efbcae
2949             826e efbcaf
2950             826f efbcb0
2951             8270 efbcb1
2952             8271 efbcb2
2953             8272 efbcb3
2954             8273 efbcb4
2955             8274 efbcb5
2956             8275 efbcb6
2957             8276 efbcb7
2958             8277 efbcb8
2959             8278 efbcb9
2960             8279 efbcba
2961             8281 efbd81
2962             8282 efbd82
2963             8283 efbd83
2964             8284 efbd84
2965             8285 efbd85
2966             8286 efbd86
2967             8287 efbd87
2968             8288 efbd88
2969             8289 efbd89
2970             828a efbd8a
2971             828b efbd8b
2972             828c efbd8c
2973             828d efbd8d
2974             828e efbd8e
2975             828f efbd8f
2976             8290 efbd90
2977             8291 efbd91
2978             8292 efbd92
2979             8293 efbd93
2980             8294 efbd94
2981             8295 efbd95
2982             8296 efbd96
2983             8297 efbd97
2984             8298 efbd98
2985             8299 efbd99
2986             829a efbd9a
2987             829f e38181
2988             82a0 e38182
2989             82a1 e38183
2990             82a2 e38184
2991             82a3 e38185
2992             82a4 e38186
2993             82a5 e38187
2994             82a6 e38188
2995             82a7 e38189
2996             82a8 e3818a
2997             82a9 e3818b
2998             82aa e3818c
2999             82ab e3818d
3000             82ac e3818e
3001             82ad e3818f
3002             82ae e38190
3003             82af e38191
3004             82b0 e38192
3005             82b1 e38193
3006             82b2 e38194
3007             82b3 e38195
3008             82b4 e38196
3009             82b5 e38197
3010             82b6 e38198
3011             82b7 e38199
3012             82b8 e3819a
3013             82b9 e3819b
3014             82ba e3819c
3015             82bb e3819d
3016             82bc e3819e
3017             82bd e3819f
3018             82be e381a0
3019             82bf e381a1
3020             82c0 e381a2
3021             82c1 e381a3
3022             82c2 e381a4
3023             82c3 e381a5
3024             82c4 e381a6
3025             82c5 e381a7
3026             82c6 e381a8
3027             82c7 e381a9
3028             82c8 e381aa
3029             82c9 e381ab
3030             82ca e381ac
3031             82cb e381ad
3032             82cc e381ae
3033             82cd e381af
3034             82ce e381b0
3035             82cf e381b1
3036             82d0 e381b2
3037             82d1 e381b3
3038             82d2 e381b4
3039             82d3 e381b5
3040             82d4 e381b6
3041             82d5 e381b7
3042             82d6 e381b8
3043             82d7 e381b9
3044             82d8 e381ba
3045             82d9 e381bb
3046             82da e381bc
3047             82db e381bd
3048             82dc e381be
3049             82dd e381bf
3050             82de e38280
3051             82df e38281
3052             82e0 e38282
3053             82e1 e38283
3054             82e2 e38284
3055             82e3 e38285
3056             82e4 e38286
3057             82e5 e38287
3058             82e6 e38288
3059             82e7 e38289
3060             82e8 e3828a
3061             82e9 e3828b
3062             82ea e3828c
3063             82eb e3828d
3064             82ec e3828e
3065             82ed e3828f
3066             82ee e38290
3067             82ef e38291
3068             82f0 e38292
3069             82f1 e38293
3070             8340 e382a1
3071             8341 e382a2
3072             8342 e382a3
3073             8343 e382a4
3074             8344 e382a5
3075             8345 e382a6
3076             8346 e382a7
3077             8347 e382a8
3078             8348 e382a9
3079             8349 e382aa
3080             834a e382ab
3081             834b e382ac
3082             834c e382ad
3083             834d e382ae
3084             834e e382af
3085             834f e382b0
3086             8350 e382b1
3087             8351 e382b2
3088             8352 e382b3
3089             8353 e382b4
3090             8354 e382b5
3091             8355 e382b6
3092             8356 e382b7
3093             8357 e382b8
3094             8358 e382b9
3095             8359 e382ba
3096             835a e382bb
3097             835b e382bc
3098             835c e382bd
3099             835d e382be
3100             835e e382bf
3101             835f e38380
3102             8360 e38381
3103             8361 e38382
3104             8362 e38383
3105             8363 e38384
3106             8364 e38385
3107             8365 e38386
3108             8366 e38387
3109             8367 e38388
3110             8368 e38389
3111             8369 e3838a
3112             836a e3838b
3113             836b e3838c
3114             836c e3838d
3115             836d e3838e
3116             836e e3838f
3117             836f e38390
3118             8370 e38391
3119             8371 e38392
3120             8372 e38393
3121             8373 e38394
3122             8374 e38395
3123             8375 e38396
3124             8376 e38397
3125             8377 e38398
3126             8378 e38399
3127             8379 e3839a
3128             837a e3839b
3129             837b e3839c
3130             837c e3839d
3131             837d e3839e
3132             837e e3839f
3133             8380 e383a0
3134             8381 e383a1
3135             8382 e383a2
3136             8383 e383a3
3137             8384 e383a4
3138             8385 e383a5
3139             8386 e383a6
3140             8387 e383a7
3141             8388 e383a8
3142             8389 e383a9
3143             838a e383aa
3144             838b e383ab
3145             838c e383ac
3146             838d e383ad
3147             838e e383ae
3148             838f e383af
3149             8390 e383b0
3150             8391 e383b1
3151             8392 e383b2
3152             8393 e383b3
3153             8394 e383b4
3154             8395 e383b5
3155             8396 e383b6
3156             839f ce91
3157             83a0 ce92
3158             83a1 ce93
3159             83a2 ce94
3160             83a3 ce95
3161             83a4 ce96
3162             83a5 ce97
3163             83a6 ce98
3164             83a7 ce99
3165             83a8 ce9a
3166             83a9 ce9b
3167             83aa ce9c
3168             83ab ce9d
3169             83ac ce9e
3170             83ad ce9f
3171             83ae cea0
3172             83af cea1
3173             83b0 cea3
3174             83b1 cea4
3175             83b2 cea5
3176             83b3 cea6
3177             83b4 cea7
3178             83b5 cea8
3179             83b6 cea9
3180             83bf ceb1
3181             83c0 ceb2
3182             83c1 ceb3
3183             83c2 ceb4
3184             83c3 ceb5
3185             83c4 ceb6
3186             83c5 ceb7
3187             83c6 ceb8
3188             83c7 ceb9
3189             83c8 ceba
3190             83c9 cebb
3191             83ca cebc
3192             83cb cebd
3193             83cc cebe
3194             83cd cebf
3195             83ce cf80
3196             83cf cf81
3197             83d0 cf83
3198             83d1 cf84
3199             83d2 cf85
3200             83d3 cf86
3201             83d4 cf87
3202             83d5 cf88
3203             83d6 cf89
3204             8440 d090
3205             8441 d091
3206             8442 d092
3207             8443 d093
3208             8444 d094
3209             8445 d095
3210             8446 d081
3211             8447 d096
3212             8448 d097
3213             8449 d098
3214             844a d099
3215             844b d09a
3216             844c d09b
3217             844d d09c
3218             844e d09d
3219             844f d09e
3220             8450 d09f
3221             8451 d0a0
3222             8452 d0a1
3223             8453 d0a2
3224             8454 d0a3
3225             8455 d0a4
3226             8456 d0a5
3227             8457 d0a6
3228             8458 d0a7
3229             8459 d0a8
3230             845a d0a9
3231             845b d0aa
3232             845c d0ab
3233             845d d0ac
3234             845e d0ad
3235             845f d0ae
3236             8460 d0af
3237             8470 d0b0
3238             8471 d0b1
3239             8472 d0b2
3240             8473 d0b3
3241             8474 d0b4
3242             8475 d0b5
3243             8476 d191
3244             8477 d0b6
3245             8478 d0b7
3246             8479 d0b8
3247             847a d0b9
3248             847b d0ba
3249             847c d0bb
3250             847d d0bc
3251             847e d0bd
3252             8480 d0be
3253             8481 d0bf
3254             8482 d180
3255             8483 d181
3256             8484 d182
3257             8485 d183
3258             8486 d184
3259             8487 d185
3260             8488 d186
3261             8489 d187
3262             848a d188
3263             848b d189
3264             848c d18a
3265             848d d18b
3266             848e d18c
3267             848f d18d
3268             8490 d18e
3269             8491 d18f
3270             849f e29480
3271             84a0 e29482
3272             84a1 e2948c
3273             84a2 e29490
3274             84a3 e29498
3275             84a4 e29494
3276             84a5 e2949c
3277             84a6 e294ac
3278             84a7 e294a4
3279             84a8 e294b4
3280             84a9 e294bc
3281             84aa e29481
3282             84ab e29483
3283             84ac e2948f
3284             84ad e29493
3285             84ae e2949b
3286             84af e29497
3287             84b0 e294a3
3288             84b1 e294b3
3289             84b2 e294ab
3290             84b3 e294bb
3291             84b4 e2958b
3292             84b5 e294a0
3293             84b6 e294af
3294             84b7 e294a8
3295             84b8 e294b7
3296             84b9 e294bf
3297             84ba e2949d
3298             84bb e294b0
3299             84bc e294a5
3300             84bd e294b8
3301             84be e29582
3302             8740 e291a0
3303             8741 e291a1
3304             8742 e291a2
3305             8743 e291a3
3306             8744 e291a4
3307             8745 e291a5
3308             8746 e291a6
3309             8747 e291a7
3310             8748 e291a8
3311             8749 e291a9
3312             874a e291aa
3313             874b e291ab
3314             874c e291ac
3315             874d e291ad
3316             874e e291ae
3317             874f e291af
3318             8750 e291b0
3319             8751 e291b1
3320             8752 e291b2
3321             8753 e291b3
3322             8754 e285a0
3323             8755 e285a1
3324             8756 e285a2
3325             8757 e285a3
3326             8758 e285a4
3327             8759 e285a5
3328             875a e285a6
3329             875b e285a7
3330             875c e285a8
3331             875d e285a9
3332             875f e38d89
3333             8760 e38c94
3334             8761 e38ca2
3335             8762 e38d8d
3336             8763 e38c98
3337             8764 e38ca7
3338             8765 e38c83
3339             8766 e38cb6
3340             8767 e38d91
3341             8768 e38d97
3342             8769 e38c8d
3343             876a e38ca6
3344             876b e38ca3
3345             876c e38cab
3346             876d e38d8a
3347             876e e38cbb
3348             876f e38e9c
3349             8770 e38e9d
3350             8771 e38e9e
3351             8772 e38e8e
3352             8773 e38e8f
3353             8774 e38f84
3354             8775 e38ea1
3355             877e e38dbb
3356             8780 e3809d
3357             8781 e3809f
3358             8782 e28496
3359             8783 e38f8d
3360             8784 e284a1
3361             8785 e38aa4
3362             8786 e38aa5
3363             8787 e38aa6
3364             8788 e38aa7
3365             8789 e38aa8
3366             878a e388b1
3367             878b e388b2
3368             878c e388b9
3369             878d e38dbe
3370             878e e38dbd
3371             878f e38dbc
3372             8790 e28992
3373             8791 e289a1
3374             8792 e288ab
3375             8793 e288ae
3376             8794 e28891
3377             8795 e2889a
3378             8796 e28aa5
3379             8797 e288a0
3380             8798 e2889f
3381             8799 e28abf
3382             879a e288b5
3383             879b e288a9
3384             879c e288aa
3385             889f e4ba9c
3386             88a0 e59496
3387             88a1 e5a883
3388             88a2 e998bf
3389             88a3 e59380
3390             88a4 e6849b
3391             88a5 e68ca8
3392             88a6 e5a7b6
3393             88a7 e980a2
3394             88a8 e891b5
3395             88a9 e88c9c
3396             88aa e7a990
3397             88ab e682aa
3398             88ac e68fa1
3399             88ad e6b8a5
3400             88ae e697ad
3401             88af e891a6
3402             88b0 e88aa6
3403             88b1 e9afb5
3404             88b2 e6a293
3405             88b3 e59ca7
3406             88b4 e696a1
3407             88b5 e689b1
3408             88b6 e5ae9b
3409             88b7 e5a790
3410             88b8 e899bb
3411             88b9 e9a3b4
3412             88ba e7b5a2
3413             88bb e7b6be
3414             88bc e9ae8e
3415             88bd e68896
3416             88be e7b29f
3417             88bf e8a2b7
3418             88c0 e5ae89
3419             88c1 e5bab5
3420             88c2 e68c89
3421             88c3 e69a97
3422             88c4 e6a188
3423             88c5 e99787
3424             88c6 e99e8d
3425             88c7 e69d8f
3426             88c8 e4bba5
3427             88c9 e4bc8a
3428             88ca e4bd8d
3429             88cb e4be9d
3430             88cc e58189
3431             88cd e59bb2
3432             88ce e5a4b7
3433             88cf e5a794
3434             88d0 e5a881
3435             88d1 e5b089
3436             88d2 e6839f
3437             88d3 e6848f
3438             88d4 e685b0
3439             88d5 e69893
3440             88d6 e6a485
3441             88d7 e782ba
3442             88d8 e7958f
3443             88d9 e795b0
3444             88da e7a7bb
3445             88db e7b6ad
3446             88dc e7b7af
3447             88dd e88383
3448             88de e8908e
3449             88df e8a1a3
3450             88e0 e8ac82
3451             88e1 e98195
3452             88e2 e981ba
3453             88e3 e58cbb
3454             88e4 e4ba95
3455             88e5 e4baa5
3456             88e6 e59f9f
3457             88e7 e882b2
3458             88e8 e98381
3459             88e9 e7a3af
3460             88ea e4b880
3461             88eb e5a3b1
3462             88ec e6baa2
3463             88ed e980b8
3464             88ee e7a8b2
3465             88ef e88ca8
3466             88f0 e88a8b
3467             88f1 e9b0af
3468             88f2 e58581
3469             88f3 e58db0
3470             88f4 e592bd
3471             88f5 e593a1
3472             88f6 e59ba0
3473             88f7 e5a7bb
3474             88f8 e5bc95
3475             88f9 e9a3b2
3476             88fa e6b7ab
3477             88fb e883a4
3478             88fc e894ad
3479             8940 e999a2
3480             8941 e999b0
3481             8942 e99aa0
3482             8943 e99fbb
3483             8944 e5908b
3484             8945 e58fb3
3485             8946 e5ae87
3486             8947 e7838f
3487             8948 e7bebd
3488             8949 e8bf82
3489             894a e99ba8
3490             894b e58daf
3491             894c e9b59c
3492             894d e7aaba
3493             894e e4b891
3494             894f e7a293
3495             8950 e887bc
3496             8951 e6b8a6
3497             8952 e59898
3498             8953 e59484
3499             8954 e6ac9d
3500             8955 e8949a
3501             8956 e9b0bb
3502             8957 e5a7a5
3503             8958 e58ea9
3504             8959 e6b5a6
3505             895a e7939c
3506             895b e9968f
3507             895c e59982
3508             895d e4ba91
3509             895e e9818b
3510             895f e99bb2
3511             8960 e88d8f
3512             8961 e9a48c
3513             8962 e58fa1
3514             8963 e596b6
3515             8964 e5acb0
3516             8965 e5bdb1
3517             8966 e698a0
3518             8967 e69bb3
3519             8968 e6a084
3520             8969 e6b0b8
3521             896a e6b3b3
3522             896b e6b4a9
3523             896c e7919b
3524             896d e79b88
3525             896e e7a98e
3526             896f e9a0b4
3527             8970 e88bb1
3528             8971 e8a19b
3529             8972 e8a9a0
3530             8973 e98bad
3531             8974 e6b6b2
3532             8975 e796ab
3533             8976 e79b8a
3534             8977 e9a785
3535             8978 e682a6
3536             8979 e8ac81
3537             897a e8b68a
3538             897b e996b2
3539             897c e6a68e
3540             897d e58ead
3541             897e e58686
3542             8980 e59c92
3543             8981 e5a0b0
3544             8982 e5a584
3545             8983 e5aeb4
3546             8984 e5bbb6
3547             8985 e680a8
3548             8986 e68ea9
3549             8987 e68fb4
3550             8988 e6b2bf
3551             8989 e6bc94
3552             898a e7828e
3553             898b e78494
3554             898c e78599
3555             898d e78795
3556             898e e78cbf
3557             898f e7b881
3558             8990 e889b6
3559             8991 e88b91
3560             8992 e89697
3561             8993 e981a0
3562             8994 e9899b
3563             8995 e9b49b
3564             8996 e5a1a9
3565             8997 e696bc
3566             8998 e6b19a
3567             8999 e794a5
3568             899a e587b9
3569             899b e5a4ae
3570             899c e5a5a5
3571             899d e5be80
3572             899e e5bf9c
3573             899f e68abc
3574             89a0 e697ba
3575             89a1 e6a8aa
3576             89a2 e6aca7
3577             89a3 e6aeb4
3578             89a4 e78e8b
3579             89a5 e7bf81
3580             89a6 e8a596
3581             89a7 e9b4ac
3582             89a8 e9b48e
3583             89a9 e9bb84
3584             89aa e5b2a1
3585             89ab e6b296
3586             89ac e88dbb
3587             89ad e58484
3588             89ae e5b18b
3589             89af e686b6
3590             89b0 e88786
3591             89b1 e6a1b6
3592             89b2 e789a1
3593             89b3 e4b999
3594             89b4 e4bfba
3595             89b5 e58db8
3596             89b6 e681a9
3597             89b7 e6b8a9
3598             89b8 e7a98f
3599             89b9 e99fb3
3600             89ba e4b88b
3601             89bb e58c96
3602             89bc e4bbae
3603             89bd e4bd95
3604             89be e4bcbd
3605             89bf e4bea1
3606             89c0 e4bdb3
3607             89c1 e58aa0
3608             89c2 e58faf
3609             89c3 e59889
3610             89c4 e5a48f
3611             89c5 e5ab81
3612             89c6 e5aeb6
3613             89c7 e5afa1
3614             89c8 e7a791
3615             89c9 e69a87
3616             89ca e69e9c
3617             89cb e69eb6
3618             89cc e6ad8c
3619             89cd e6b2b3
3620             89ce e781ab
3621             89cf e78f82
3622             89d0 e7a68d
3623             89d1 e7a6be
3624             89d2 e7a8bc
3625             89d3 e7ae87
3626             89d4 e88ab1
3627             89d5 e88b9b
3628             89d6 e88c84
3629             89d7 e88db7
3630             89d8 e88faf
3631             89d9 e88f93
3632             89da e89da6
3633             89db e8aab2
3634             89dc e598a9
3635             89dd e8b2a8
3636             89de e8bfa6
3637             89df e9818e
3638             89e0 e99c9e
3639             89e1 e89a8a
3640             89e2 e4bf84
3641             89e3 e5b3a8
3642             89e4 e68891
3643             89e5 e78999
3644             89e6 e794bb
3645             89e7 e887a5
3646             89e8 e88abd
3647             89e9 e89bbe
3648             89ea e8b380
3649             89eb e99b85
3650             89ec e9a493
3651             89ed e9a795
3652             89ee e4bb8b
3653             89ef e4bc9a
3654             89f0 e8a7a3
3655             89f1 e59b9e
3656             89f2 e5a18a
3657             89f3 e5a38a
3658             89f4 e5bbbb
3659             89f5 e5bfab
3660             89f6 e680aa
3661             89f7 e68294
3662             89f8 e681a2
3663             89f9 e68790
3664             89fa e68892
3665             89fb e68b90
3666             89fc e694b9
3667             8a40 e9ad81
3668             8a41 e699a6
3669             8a42 e6a2b0
3670             8a43 e6b5b7
3671             8a44 e781b0
3672             8a45 e7958c
3673             8a46 e79a86
3674             8a47 e7b5b5
3675             8a48 e88aa5
3676             8a49 e89fb9
3677             8a4a e9968b
3678             8a4b e99a8e
3679             8a4c e8b29d
3680             8a4d e587b1
3681             8a4e e58abe
3682             8a4f e5a496
3683             8a50 e592b3
3684             8a51 e5aeb3
3685             8a52 e5b496
3686             8a53 e685a8
3687             8a54 e6a682
3688             8a55 e6b6af
3689             8a56 e7a28d
3690             8a57 e8938b
3691             8a58 e8a197
3692             8a59 e8a9b2
3693             8a5a e98ea7
3694             8a5b e9aab8
3695             8a5c e6b5ac
3696             8a5d e9a6a8
3697             8a5e e89b99
3698             8a5f e59ea3
3699             8a60 e69fbf
3700             8a61 e89b8e
3701             8a62 e9888e
3702             8a63 e58a83
3703             8a64 e59a87
3704             8a65 e59084
3705             8a66 e5bb93
3706             8a67 e68ba1
3707             8a68 e692b9
3708             8a69 e6a0bc
3709             8a6a e6a0b8
3710             8a6b e6aebb
3711             8a6c e78db2
3712             8a6d e7a2ba
3713             8a6e e7a9ab
3714             8a6f e8a69a
3715             8a70 e8a792
3716             8a71 e8b5ab
3717             8a72 e8bc83
3718             8a73 e983ad
3719             8a74 e996a3
3720             8a75 e99a94
3721             8a76 e99da9
3722             8a77 e5ada6
3723             8a78 e5b2b3
3724             8a79 e6a5bd
3725             8a7a e9a18d
3726             8a7b e9a18e
3727             8a7c e68e9b
3728             8a7d e7aca0
3729             8a7e e6a8ab
3730             8a80 e6a9bf
3731             8a81 e6a2b6
3732             8a82 e9b08d
3733             8a83 e6bd9f
3734             8a84 e589b2
3735             8a85 e5969d
3736             8a86 e681b0
3737             8a87 e68bac
3738             8a88 e6b4bb
3739             8a89 e6b887
3740             8a8a e6bb91
3741             8a8b e8919b
3742             8a8c e8a490
3743             8a8d e8bd84
3744             8a8e e4b894
3745             8a8f e9b0b9
3746             8a90 e58fb6
3747             8a91 e6a49b
3748             8a92 e6a8ba
3749             8a93 e99e84
3750             8a94 e6a0aa
3751             8a95 e5859c
3752             8a96 e7ab83
3753             8a97 e892b2
3754             8a98 e9879c
3755             8a99 e98e8c
3756             8a9a e5999b
3757             8a9b e9b4a8
3758             8a9c e6a0a2
3759             8a9d e88c85
3760             8a9e e890b1
3761             8a9f e7b2a5
3762             8aa0 e58888
3763             8aa1 e88b85
3764             8aa2 e793a6
3765             8aa3 e4b9be
3766             8aa4 e4be83
3767             8aa5 e586a0
3768             8aa6 e5af92
3769             8aa7 e5888a
3770             8aa8 e58b98
3771             8aa9 e58ba7
3772             8aaa e5b7bb
3773             8aab e5969a
3774             8aac e5a0aa
3775             8aad e5a7a6
3776             8aae e5ae8c
3777             8aaf e5ae98
3778             8ab0 e5af9b
3779             8ab1 e5b9b2
3780             8ab2 e5b9b9
3781             8ab3 e682a3
3782             8ab4 e6849f
3783             8ab5 e685a3
3784             8ab6 e686be
3785             8ab7 e68f9b
3786             8ab8 e695a2
3787             8ab9 e69f91
3788             8aba e6a193
3789             8abb e6a3ba
3790             8abc e6acbe
3791             8abd e6ad93
3792             8abe e6b197
3793             8abf e6bca2
3794             8ac0 e6be97
3795             8ac1 e6bd85
3796             8ac2 e792b0
3797             8ac3 e79498
3798             8ac4 e79ba3
3799             8ac5 e79c8b
3800             8ac6 e7abbf
3801             8ac7 e7aea1
3802             8ac8 e7b0a1
3803             8ac9 e7b7a9
3804             8aca e7bcb6
3805             8acb e7bfb0
3806             8acc e8829d
3807             8acd e889a6
3808             8ace e88e9e
3809             8acf e8a6b3
3810             8ad0 e8ab8c
3811             8ad1 e8b2ab
3812             8ad2 e98284
3813             8ad3 e99191
3814             8ad4 e99693
3815             8ad5 e99691
3816             8ad6 e996a2
3817             8ad7 e999a5
3818             8ad8 e99f93
3819             8ad9 e9a4a8
3820             8ada e88898
3821             8adb e4b8b8
3822             8adc e590ab
3823             8add e5b2b8
3824             8ade e5b78c
3825             8adf e78ea9
3826             8ae0 e7998c
3827             8ae1 e79cbc
3828             8ae2 e5b2a9
3829             8ae3 e7bfab
3830             8ae4 e8b48b
3831             8ae5 e99b81
3832             8ae6 e9a091
3833             8ae7 e9a194
3834             8ae8 e9a198
3835             8ae9 e4bc81
3836             8aea e4bc8e
3837             8aeb e58db1
3838             8aec e5969c
3839             8aed e599a8
3840             8aee e59fba
3841             8aef e5a587
3842             8af0 e5ac89
3843             8af1 e5af84
3844             8af2 e5b290
3845             8af3 e5b88c
3846             8af4 e5b9be
3847             8af5 e5bf8c
3848             8af6 e68fae
3849             8af7 e69cba
3850             8af8 e69797
3851             8af9 e697a2
3852             8afa e69c9f
3853             8afb e6a38b
3854             8afc e6a384
3855             8b40 e6a99f
3856             8b41 e5b8b0
3857             8b42 e6af85
3858             8b43 e6b097
3859             8b44 e6b1bd
3860             8b45 e795bf
3861             8b46 e7a588
3862             8b47 e5ada3
3863             8b48 e7a880
3864             8b49 e7b480
3865             8b4a e5bebd
3866             8b4b e8a68f
3867             8b4c e8a898
3868             8b4d e8b2b4
3869             8b4e e8b5b7
3870             8b4f e8bb8c
3871             8b50 e8bc9d
3872             8b51 e9a3a2
3873             8b52 e9a88e
3874             8b53 e9acbc
3875             8b54 e4ba80
3876             8b55 e581bd
3877             8b56 e58480
3878             8b57 e5a693
3879             8b58 e5ae9c
3880             8b59 e688af
3881             8b5a e68a80
3882             8b5b e693ac
3883             8b5c e6acba
3884             8b5d e78aa0
3885             8b5e e79691
3886             8b5f e7a587
3887             8b60 e7bea9
3888             8b61 e89fbb
3889             8b62 e8aabc
3890             8b63 e8adb0
3891             8b64 e68eac
3892             8b65 e88f8a
3893             8b66 e99ea0
3894             8b67 e59089
3895             8b68 e59083
3896             8b69 e596ab
3897             8b6a e6a194
3898             8b6b e6a998
3899             8b6c e8a9b0
3900             8b6d e7a0a7
3901             8b6e e69db5
3902             8b6f e9bb8d
3903             8b70 e58db4
3904             8b71 e5aea2
3905             8b72 e8849a
3906             8b73 e89990
3907             8b74 e98086
3908             8b75 e4b898
3909             8b76 e4b985
3910             8b77 e4bb87
3911             8b78 e4bc91
3912             8b79 e58f8a
3913             8b7a e590b8
3914             8b7b e5aeae
3915             8b7c e5bc93
3916             8b7d e680a5
3917             8b7e e69591
3918             8b80 e69cbd
3919             8b81 e6b182
3920             8b82 e6b1b2
3921             8b83 e6b3a3
3922             8b84 e781b8
3923             8b85 e79083
3924             8b86 e7a9b6
3925             8b87 e7aaae
3926             8b88 e7ac88
3927             8b89 e7b49a
3928             8b8a e7b3be
3929             8b8b e7b5a6
3930             8b8c e697a7
3931             8b8d e7899b
3932             8b8e e58ebb
3933             8b8f e5b185
3934             8b90 e5b7a8
3935             8b91 e68b92
3936             8b92 e68ba0
3937             8b93 e68c99
3938             8b94 e6b8a0
3939             8b95 e8999a
3940             8b96 e8a8b1
3941             8b97 e8b79d
3942             8b98 e98bb8
3943             8b99 e6bc81
3944             8b9a e7a6a6
3945             8b9b e9ad9a
3946             8b9c e4baa8
3947             8b9d e4baab
3948             8b9e e4baac
3949             8b9f e4be9b
3950             8ba0 e4bea0
3951             8ba1 e58391
3952             8ba2 e58587
3953             8ba3 e7abb6
3954             8ba4 e585b1
3955             8ba5 e587b6
3956             8ba6 e58d94
3957             8ba7 e58ca1
3958             8ba8 e58dbf
3959             8ba9 e58fab
3960             8baa e596ac
3961             8bab e5a283
3962             8bac e5b3a1
3963             8bad e5bcb7
3964             8bae e5bd8a
3965             8baf e680af
3966             8bb0 e68190
3967             8bb1 e681ad
3968             8bb2 e68c9f
3969             8bb3 e69599
3970             8bb4 e6a98b
3971             8bb5 e6b381
3972             8bb6 e78b82
3973             8bb7 e78bad
3974             8bb8 e79faf
3975             8bb9 e883b8
3976             8bba e88485
3977             8bbb e88888
3978             8bbc e8958e
3979             8bbd e983b7
3980             8bbe e98fa1
3981             8bbf e99fbf
3982             8bc0 e9a597
3983             8bc1 e9a99a
3984             8bc2 e4bbb0
3985             8bc3 e5879d
3986             8bc4 e5b0ad
3987             8bc5 e69a81
3988             8bc6 e6a5ad
3989             8bc7 e5b180
3990             8bc8 e69bb2
3991             8bc9 e6a5b5
3992             8bca e78e89
3993             8bcb e6a190
3994             8bcc e7b281
3995             8bcd e58385
3996             8bce e58ba4
3997             8bcf e59d87
3998             8bd0 e5b7be
3999             8bd1 e98ca6
4000             8bd2 e696a4
4001             8bd3 e6aca3
4002             8bd4 e6acbd
4003             8bd5 e790b4
4004             8bd6 e7a681
4005             8bd7 e7a6bd
4006             8bd8 e7ad8b
4007             8bd9 e7b78a
4008             8bda e88ab9
4009             8bdb e88f8c
4010             8bdc e8a1bf
4011             8bdd e8a59f
4012             8bde e8acb9
4013             8bdf e8bf91
4014             8be0 e98791
4015             8be1 e5909f
4016             8be2 e98a80
4017             8be3 e4b99d
4018             8be4 e580b6
4019             8be5 e58fa5
4020             8be6 e58cba
4021             8be7 e78b97
4022             8be8 e78e96
4023             8be9 e79fa9
4024             8bea e88ba6
4025             8beb e8baaf
4026             8bec e9a786
4027             8bed e9a788
4028             8bee e9a792
4029             8bef e585b7
4030             8bf0 e6849a
4031             8bf1 e8999e
4032             8bf2 e596b0
4033             8bf3 e7a9ba
4034             8bf4 e581b6
4035             8bf5 e5af93
4036             8bf6 e98187
4037             8bf7 e99a85
4038             8bf8 e4b8b2
4039             8bf9 e6ab9b
4040             8bfa e987a7
4041             8bfb e5b191
4042             8bfc e5b188
4043             8c40 e68e98
4044             8c41 e7aa9f
4045             8c42 e6b293
4046             8c43 e99db4
4047             8c44 e8bda1
4048             8c45 e7aaaa
4049             8c46 e7868a
4050             8c47 e99a88
4051             8c48 e7b282
4052             8c49 e6a097
4053             8c4a e7b9b0
4054             8c4b e6a191
4055             8c4c e98dac
4056             8c4d e58bb2
4057             8c4e e5909b
4058             8c4f e896ab
4059             8c50 e8a893
4060             8c51 e7bea4
4061             8c52 e8bb8d
4062             8c53 e983a1
4063             8c54 e58da6
4064             8c55 e8a288
4065             8c56 e7a581
4066             8c57 e4bf82
4067             8c58 e582be
4068             8c59 e58891
4069             8c5a e58584
4070             8c5b e59593
4071             8c5c e59cad
4072             8c5d e78faa
4073             8c5e e59e8b
4074             8c5f e5a591
4075             8c60 e5bda2
4076             8c61 e5be84
4077             8c62 e681b5
4078             8c63 e685b6
4079             8c64 e685a7
4080             8c65 e686a9
4081             8c66 e68eb2
4082             8c67 e690ba
4083             8c68 e695ac
4084             8c69 e699af
4085             8c6a e6a182
4086             8c6b e6b893
4087             8c6c e795a6
4088             8c6d e7a8bd
4089             8c6e e7b3bb
4090             8c6f e7b58c
4091             8c70 e7b699
4092             8c71 e7b98b
4093             8c72 e7bdab
4094             8c73 e88c8e
4095             8c74 e88d8a
4096             8c75 e89b8d
4097             8c76 e8a888
4098             8c77 e8a9a3
4099             8c78 e8ada6
4100             8c79 e8bbbd
4101             8c7a e9a09a
4102             8c7b e9b68f
4103             8c7c e88ab8
4104             8c7d e8bf8e
4105             8c7e e9afa8
4106             8c80 e58a87
4107             8c81 e6889f
4108             8c82 e69283
4109             8c83 e6bf80
4110             8c84 e99a99
4111             8c85 e6a181
4112             8c86 e58291
4113             8c87 e6aca0
4114             8c88 e6b1ba
4115             8c89 e6bd94
4116             8c8a e7a9b4
4117             8c8b e7b590
4118             8c8c e8a180
4119             8c8d e8a8a3
4120             8c8e e69c88
4121             8c8f e4bbb6
4122             8c90 e580b9
4123             8c91 e580a6
4124             8c92 e581a5
4125             8c93 e585bc
4126             8c94 e588b8
4127             8c95 e589a3
4128             8c96 e596a7
4129             8c97 e59c8f
4130             8c98 e5a085
4131             8c99 e5ab8c
4132             8c9a e5bbba
4133             8c9b e686b2
4134             8c9c e687b8
4135             8c9d e68bb3
4136             8c9e e68db2
4137             8c9f e6a49c
4138             8ca0 e6a8a9
4139             8ca1 e789bd
4140             8ca2 e78aac
4141             8ca3 e78cae
4142             8ca4 e7a094
4143             8ca5 e7a1af
4144             8ca6 e7b5b9
4145             8ca7 e79c8c
4146             8ca8 e882a9
4147             8ca9 e8a68b
4148             8caa e8ac99
4149             8cab e8b3a2
4150             8cac e8bb92
4151             8cad e981a3
4152             8cae e98db5
4153             8caf e999ba
4154             8cb0 e9a195
4155             8cb1 e9a893
4156             8cb2 e9b9b8
4157             8cb3 e58583
4158             8cb4 e58e9f
4159             8cb5 e58eb3
4160             8cb6 e5b9bb
4161             8cb7 e5bca6
4162             8cb8 e6b89b
4163             8cb9 e6ba90
4164             8cba e78e84
4165             8cbb e78fbe
4166             8cbc e7b583
4167             8cbd e888b7
4168             8cbe e8a880
4169             8cbf e8abba
4170             8cc0 e99990
4171             8cc1 e4b98e
4172             8cc2 e5808b
4173             8cc3 e58fa4
4174             8cc4 e591bc
4175             8cc5 e59bba
4176             8cc6 e5a791
4177             8cc7 e5ada4
4178             8cc8 e5b7b1
4179             8cc9 e5baab
4180             8cca e5bca7
4181             8ccb e688b8
4182             8ccc e69585
4183             8ccd e69eaf
4184             8cce e6b996
4185             8ccf e78b90
4186             8cd0 e7b38a
4187             8cd1 e8a2b4
4188             8cd2 e882a1
4189             8cd3 e883a1
4190             8cd4 e88fb0
4191             8cd5 e8998e
4192             8cd6 e8aa87
4193             8cd7 e8b7a8
4194             8cd8 e988b7
4195             8cd9 e99b87
4196             8cda e9a1a7
4197             8cdb e9bc93
4198             8cdc e4ba94
4199             8cdd e4ba92
4200             8cde e4bc8d
4201             8cdf e58d88
4202             8ce0 e59189
4203             8ce1 e590be
4204             8ce2 e5a8af
4205             8ce3 e5be8c
4206             8ce4 e5bea1
4207             8ce5 e6829f
4208             8ce6 e6a2a7
4209             8ce7 e6aa8e
4210             8ce8 e7919a
4211             8ce9 e7a281
4212             8cea e8aa9e
4213             8ceb e8aaa4
4214             8cec e8adb7
4215             8ced e98690
4216             8cee e4b99e
4217             8cef e9af89
4218             8cf0 e4baa4
4219             8cf1 e4bdbc
4220             8cf2 e4beaf
4221             8cf3 e58099
4222             8cf4 e58096
4223             8cf5 e58589
4224             8cf6 e585ac
4225             8cf7 e58a9f
4226             8cf8 e58ab9
4227             8cf9 e58bbe
4228             8cfa e58e9a
4229             8cfb e58fa3
4230             8cfc e59091
4231             8d40 e5908e
4232             8d41 e59689
4233             8d42 e59d91
4234             8d43 e59ea2
4235             8d44 e5a5bd
4236             8d45 e5ad94
4237             8d46 e5ad9d
4238             8d47 e5ae8f
4239             8d48 e5b7a5
4240             8d49 e5b7a7
4241             8d4a e5b7b7
4242             8d4b e5b9b8
4243             8d4c e5ba83
4244             8d4d e5ba9a
4245             8d4e e5bab7
4246             8d4f e5bc98
4247             8d50 e68192
4248             8d51 e6858c
4249             8d52 e68a97
4250             8d53 e68b98
4251             8d54 e68ea7
4252             8d55 e694bb
4253             8d56 e69882
4254             8d57 e69983
4255             8d58 e69bb4
4256             8d59 e69dad
4257             8d5a e6a0a1
4258             8d5b e6a297
4259             8d5c e6a78b
4260             8d5d e6b19f
4261             8d5e e6b4aa
4262             8d5f e6b5a9
4263             8d60 e6b8af
4264             8d61 e6ba9d
4265             8d62 e794b2
4266             8d63 e79a87
4267             8d64 e7a1ac
4268             8d65 e7a8bf
4269             8d66 e7b3a0
4270             8d67 e7b485
4271             8d68 e7b498
4272             8d69 e7b59e
4273             8d6a e7b6b1
4274             8d6b e88095
4275             8d6c e88083
4276             8d6d e882af
4277             8d6e e882b1
4278             8d6f e88594
4279             8d70 e8868f
4280             8d71 e888aa
4281             8d72 e88d92
4282             8d73 e8a18c
4283             8d74 e8a1a1
4284             8d75 e8ac9b
4285             8d76 e8b2a2
4286             8d77 e8b3bc
4287             8d78 e9838a
4288             8d79 e985b5
4289             8d7a e989b1
4290             8d7b e7a0bf