summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog18
-rw-r--r--iconv/loop.c16
-rw-r--r--iconvdata/TESTS1
-rw-r--r--iconvdata/iso-2022-kr.c146
-rw-r--r--iconvdata/ksc5601.h2
-rw-r--r--iconvdata/testdata/ISO-2022-KR552
-rw-r--r--wcsmbs/btowc.c2
-rw-r--r--wcsmbs/mbrtowc.c2
-rw-r--r--wcsmbs/mbsnrtowcs.c2
-rw-r--r--wcsmbs/mbsrtowcs.c2
-rw-r--r--wcsmbs/wcrtomb.c2
-rw-r--r--wcsmbs/wcsnrtombs.c2
-rw-r--r--wcsmbs/wcsrtombs.c2
-rw-r--r--wcsmbs/wctob.c2
14 files changed, 664 insertions, 87 deletions
diff --git a/ChangeLog b/ChangeLog
index e7cfdced1e..f27d54e2e5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,14 +1,32 @@
 1998-05-15  Ulrich Drepper  <drepper@cygnus.com>
 
+	* iconv/loop.c: Let user add code to use and set paramaters.
+
+	* iconvdata/iso-2022-kr.c: Correct to-loop.
+
 	* iconvdata/iso-2022-kr.c (PREPARE_LOOP): Use correct variable to
 	point to output buffer.
 
+	* iconvdata/ksc5601.h (ksc5601_to_ucs4): Use correct value to find
+	hanja.
+
+	* iconvdata/TESTS: Add ISO-2022-KR test.
+	* iconvdata/testdata/ISO-2022-KR: New file.
+
 1998-05-15 21:07  Ulrich Drepper  <drepper@cygnus.com>
 
 	* iconv/gconv.h (gconv_step_data): Add new fields invocation_counter
 	and internal_use.
 	* iconv/gconv_open.c (__gconv_open): Initialize invocation_counter
 	and internal_use.
+	* wcsmbs/btowc.c: Likewise.
+	* wcsmbs/mbrtowcs.c: Likewise.
+	* wcsmbs/mbsnrtowcs.c: Likewise.
+	* wcsmbs/mbsrtowcs.c: Likewise.
+	* wcsmbs/wcrtomb.c: Likewise.
+	* wcsmbs/wcsnrtombs.c: Likewise.
+	* wcsmbs/wcsrtombs.c: Likewise.
+	* wcsmbs/wctob.c: Likewise.
 	* iconv/skeleton.c: Increment invocation_counter.
 	* iconvdata/iso-2022-kr.c: When used in iconv() emit designator
 	sequence first.
diff --git a/iconv/loop.c b/iconv/loop.c
index f8188873dc..596f8a6441 100644
--- a/iconv/loop.c
+++ b/iconv/loop.c
@@ -44,7 +44,10 @@
      BODY		this is supposed to expand to the body of the loop.
 			The user must provide this.
 
-     EXTRA_LOOP_DECLS	Extra arguments passed from converion loop call.
+     EXTRA_LOOP_DECLS	extra arguments passed from converion loop call.
+
+     INIT_PARAMS	code to define and initialize variables from params.
+     UPDATE_PARAMS	code to store result in params.
 */
 
 #include <gconv.h>
@@ -134,6 +137,10 @@ LOOPFCT (const unsigned char **inptrp, const unsigned char *inend,
   size_t min_out_rounds = (outend - outptr) / MAX_NEEDED_OUTPUT;
   size_t min_rounds = MIN (min_in_rounds, min_out_rounds);
 
+#ifdef INIT_PARAMS
+  INIT_PARAMS;
+#endif
+
 #undef NEED_LENGTH_TEST
 #define NEED_LENGTH_TEST	0
   while (min_rounds-- > 0)
@@ -195,7 +202,7 @@ LOOPFCT (const unsigned char **inptrp, const unsigned char *inend,
 	  /* Here comes the body the user provides.  It can stop with
 	     RESULT set to GCONV_INCOMPLETE_INPUT (if the size of the
 	     input characters vary in size), GCONV_ILLEGAL_INPUT, or
-	     GCONV_FULL_OUTPUT (if the output characters vary in size.  */
+	     GCONV_FULL_OUTPUT (if the output characters vary in size).  */
 	  BODY
 
 	  /* If necessary count the successful conversion.  */
@@ -216,6 +223,9 @@ LOOPFCT (const unsigned char **inptrp, const unsigned char *inend,
   /* Update the pointers pointed to by the parameters.  */
   *inptrp = inptr;
   *outptrp = outptr;
+#ifdef UPDATE_PARAMS
+  UPDATE_PARAMS;
+#endif
 
   return result;
 }
@@ -232,3 +242,5 @@ LOOPFCT (const unsigned char **inptrp, const unsigned char *inend,
 #undef BODY
 #undef LOOPFCT
 #undef EXTRA_LOOP_DECLS
+#undef INIT_PARAMS
+#undef UPDATE_PARAMS
diff --git a/iconvdata/TESTS b/iconvdata/TESTS
index fa4aea69b5..e8a586cd2d 100644
--- a/iconvdata/TESTS
+++ b/iconvdata/TESTS
@@ -73,3 +73,4 @@ CP1254			CP1254			Y	UTF8
 CP1255			CP1255			Y	UTF8
 CP1256			CP1256			Y	UTF8
 CP1257			CP1257			Y	UTF8
+ISO-2022-KR		ISO-2022-KR		Y	UTF8
diff --git a/iconvdata/iso-2022-kr.c b/iconvdata/iso-2022-kr.c
index 166fa15072..6746f9c2ac 100644
--- a/iconvdata/iso-2022-kr.c
+++ b/iconvdata/iso-2022-kr.c
@@ -44,7 +44,7 @@
 #define MAX_NEEDED_TO		4
 #define PREPARE_LOOP \
   int save_set;								      \
-  int set = data->statep->count;					      \
+  int *setp = &data->statep->count;					      \
   if (!FROM_DIRECTION && !data->internal_use && data->invocation_counter == 0)\
     {									      \
       /* Emit the designator sequence.  */				      \
@@ -56,7 +56,7 @@
       *outbuf++ = ')';							      \
       *outbuf++ = 'C';							      \
     }
-#define EXTRA_LOOP_ARGS		, set
+#define EXTRA_LOOP_ARGS		, setp
 
 
 /* The COUNT element of the state keeps track of the currently selected
@@ -72,27 +72,27 @@ enum
    the output state to the initial state.  This has to be done during the
    flushing.  */
 #define EMIT_SHIFT_TO_INIT \
-  if (data->statep->count != 0)						      \
+  if (data->statep->count != ASCII_set)					      \
     {									      \
-      if (step->data == &from_object)					      \
+      if (FROM_DIRECTION)						      \
 	/* It's easy, we don't have to emit anything, we just reset the	      \
 	   state for the input.  */					      \
-	data->statep->count = 0;					      \
+	data->statep->count = ASCII_set;				      \
       else								      \
 	{								      \
 	  char *outbuf = data->outbuf;					      \
 	  								      \
 	  /* We are not in the initial state.  To switch back we have	      \
-	     to emit `SO'.  */						      \
+	     to emit `SI'.  */						      \
 	  if (outbuf == data->outbufend)				      \
 	    /* We don't have enough room in the output buffer.  */	      \
 	    status = GCONV_FULL_OUTPUT;					      \
 	  else								      \
 	    {								      \
 	      /* Write out the shift sequence.  */			      \
-	      *outbuf++ = SO;						      \
+	      *outbuf++ = SI;						      \
 	      data->outbuf = outbuf;					      \
-	      data->statep->count = 0;					      \
+	      data->statep->count = ASCII_set;				      \
 	    }								      \
 	}								      \
     }
@@ -102,9 +102,9 @@ enum
    and retore the state.  */
 #define SAVE_RESET_STATE(Save) \
   if (Save)								      \
-    save_set = set;							      \
+    save_set = *setp;							      \
   else									      \
-    set = save_set
+    *setp = save_set
 
 
 /* First define the conversion function from ISO-2022-JP to UCS4.  */
@@ -127,14 +127,14 @@ enum
     if (ch == ESC)							      \
       {									      \
 	/* We don't really have to handle escape sequences since all the      \
-	   switching is done using the SI and SO bytes.  Butwe have to	      \
+	   switching is done using the SI and SO bytes.  But we have to	      \
 	   recognize `Esc $ ) C' since this is a kind of flag for this	      \
 	   encoding.  We simply ignore it.  */				      \
 	if (inptr + 1 > inend						      \
 	    || (inptr[1] == '$'						      \
 		&& (inptr + 2 > inend					      \
 		    || (inptr[2] == ')' && inptr + 3 > inend))))	      \
-			    						      \
+									      \
 	  {								      \
 	    result = GCONV_EMPTY_INPUT;					      \
 	    break;							      \
@@ -146,14 +146,14 @@ enum
 	    continue;							      \
 	  }								      \
       }									      \
-    else if (ch == SI)							      \
+    else if (ch == SO)							      \
       {									      \
 	/* Switch to use KSC.  */					      \
 	++inptr;							      \
 	set = KSC5601_set;						      \
 	continue;							      \
       }									      \
-    else if (ch == SO)							      \
+    else if (ch == SI)							      \
       {									      \
 	/* Switch to use ASCII.  */					      \
 	++inptr;							      \
@@ -161,9 +161,16 @@ enum
 	continue;							      \
       }									      \
 									      \
-    if (set == ASCII_set || ch < 0x21 || ch == 0x7f)			      \
-      /* Almost done, just advance the input pointer.  */		      \
-      ++inptr;								      \
+    if (set == ASCII_set)						      \
+      {									      \
+	if (ch >= 0x80)							      \
+	  {								      \
+	    result = GCONV_ILLEGAL_INPUT;				      \
+	    break;							      \
+	  }								      \
+	/* Almost done, just advance the input pointer.  */		      \
+	++inptr;							      \
+      }									      \
     else								      \
       {									      \
 	assert (set == KSC5601_set);					      \
@@ -186,7 +193,9 @@ enum
 									      \
     *((uint32_t *) outptr)++ = ch;					      \
   }
-#define EXTRA_LOOP_DECLS	, int set
+#define EXTRA_LOOP_DECLS	, int *setp
+#define INIT_PARAMS		int set = *setp
+#define UPDATE_PARAMS		*setp = set
 #include <iconv/loop.c>
 
 
@@ -197,97 +206,66 @@ enum
 #define LOOPFCT			TO_LOOP
 #define BODY \
   {									      \
-    unsigned char ch;							      \
+    uint32_t ch;							      \
     size_t written = 0;							      \
 									      \
     ch = *((uint32_t *) inptr);						      \
 									      \
     /* First see whether we can write the character using the currently	      \
        selected character set.  */					      \
-    if (set == ASCII_set || (ch >= 0x01 && (ch < 0x21 || ch == 0x7f)))	      \
+    if (ch < 0x80)							      \
       {									      \
-	/* Please note that the NUL byte is *not* matched if we are not	      \
-	   currently using the ASCII charset.  This is because we must	      \
-	   switch to the initial state whenever a NUL byte is written.  */    \
-	if (ch <= 0x7f)							      \
+	if (set != ASCII_set)						      \
 	  {								      \
-	    *outptr++ = ch;						      \
-	    written = 1;						      \
+	    *outptr++ = SI;						      \
+	    set = ASCII_set;						      \
+	    if (NEED_LENGTH_TEST && outptr == outend)			      \
+	      {								      \
+		result = GCONV_FULL_OUTPUT;				      \
+		break;							      \
+	      }								      \
 	  }								      \
+ 									      \
+	*outptr++ = ch;							      \
+	written = 1;							      \
       }									      \
     else								      \
       {									      \
-	assert (set == KSC5601_set);					      \
+	char buf[2];							      \
 									      \
-	written = ucs4_to_ksc5601 (ch, outptr,				      \
-				   (NEED_LENGTH_TEST ? outend - outptr : 2)); \
+	written = ucs4_to_ksc5601 (ch, buf, 2);				      \
 									      \
-	if (NEED_LENGTH_TEST && written == 0)				      \
+	if (written == UNKNOWN_10646_CHAR)				      \
 	  {								      \
-	    result = GCONV_FULL_OUTPUT;					      \
+	    /* Illegal character.  */					      \
+	    result = GCONV_ILLEGAL_INPUT;				      \
 	    break;							      \
 	  }								      \
-	if (written == UNKNOWN_10646_CHAR)				      \
-	  {								      \
-	    /* Either this is an unknown character or we have to switch	      \
-	       the currently selected character set.  The character sets      \
-	       do not code entirely separate parts of ISO 10646 and	      \
-	       therefore there is no single correct result.  If we choose     \
-	       the character set to use wrong we might be end up with	      \
-	       using yet another character set for the next character	      \
-	       though the current and the next could be encoded with one      \
-	       character set.  We leave this kind of optimization for	      \
-	       later and now simply use a fixed order in which we test for    \
-	       availability  */						      \
-									      \
-	    if (ch <= 0x7f)						      \
-	      {								      \
-		/* We must encode using ASCII.  First write out the	      \
-		   escape sequence.  */					      \
-		*outptr++ = SO;						      \
-		set = ASCII_set;					      \
-									      \
-		if (NEED_LENGTH_TEST && outptr == outend)		      \
-		  {							      \
-		    result = GCONV_FULL_OUTPUT;				      \
-		    break;						      \
-		  }							      \
-									      \
-		*outptr++ = ch;						      \
-	      }								      \
-	    else							      \
-	      {								      \
-		char buf[2];						      \
+	assert (written == 2);						      \
 									      \
-		written = ucs4_to_ksc5601 (ch, buf, 2);			      \
-		if (written != UNKNOWN_10646_CHAR)			      \
-		  {							      \
-		    /* We use KSC 5601.  */				      \
-		    *outptr++ = SI;					      \
-		    set = KSC5601_set;					      \
-									      \
-		    if (NEED_LENGTH_TEST && outptr + 2 > outend)	      \
-		      {							      \
-			result = GCONV_FULL_OUTPUT;			      \
-			break;						      \
-		      }							      \
+	/* We use KSC 5601.  */						      \
+	if (set != KSC5601_set)						      \
+	  {								      \
+	    *outptr++ = SO;						      \
+	    set = KSC5601_set;						      \
+	  }								      \
 									      \
-		    *outptr++ = buf[0];					      \
-		    *outptr++ = buf[1];					      \
-		  }							      \
-		else							      \
-		  {							      \
-		    result = GCONV_ILLEGAL_INPUT;			      \
-		    break;						      \
-		  }							      \
-	      }								      \
+	if (NEED_LENGTH_TEST && outptr + 2 > outend)			      \
+	  {								      \
+	    result = GCONV_FULL_OUTPUT;					      \
+	    break;							      \
 	  }								      \
+									      \
+	*outptr++ = buf[0];						      \
+	*outptr++ = buf[1];						      \
       }									      \
 									      \
     /* Now that we wrote the output increment the input pointer.  */	      \
     inptr += 4;								      \
   }
-#define EXTRA_LOOP_DECLS	, int set
+#define EXTRA_LOOP_DECLS	, int *setp
+#define INIT_PARAMS		int set = *setp
+#define UPDATE_PARAMS		*setp = set
 #include <iconv/loop.c>
 
 
diff --git a/iconvdata/ksc5601.h b/iconvdata/ksc5601.h
index 0e77c76b96..0b10dcd6b3 100644
--- a/iconvdata/ksc5601.h
+++ b/iconvdata/ksc5601.h
@@ -73,7 +73,7 @@ ksc5601_to_ucs4 (const unsigned char **s, size_t avail, unsigned char offset)
   if (idx >= 1410 && idx < 3760)
     return (__ksc5601_hangul_to_ucs[idx - 1410]
 	    ?: ((*s) -= 2, UNKNOWN_10646_CHAR));
-  else if (idx > 3854)
+  else if (idx >= 3854)
     /* Hanja : row 42 - row 93 : 3854 = 94 * (42-1) */
    return (__ksc5601_hanja_to_ucs[idx - 3854]
 	   ?: ((*s) -= 2, UNKNOWN_10646_CHAR));
diff --git a/iconvdata/testdata/ISO-2022-KR b/iconvdata/testdata/ISO-2022-KR
new file mode 100644
index 0000000000..619b76f1c8
--- /dev/null
+++ b/iconvdata/testdata/ISO-2022-KR
@@ -0,0 +1,552 @@
+$)C
+   !! !" !# !$ !% !& !' !( !) !* !+ !, !- !. !/ 
+!0 !1 !2 !3 !4 !5 !6 !7 !8 !9 !: !; !< != !> !? 
+!@ !A !B !C !D !E !F !G !H !I !J !K !L !M !N !O 
+!P !Q !R !S !T !U !V !W !X !Y !Z ![ !\ !] !^ !_ 
+!` !a !b !c !d !e !f !g !h !i !j !k !l !m !n !o 
+!p !q !r !s !t !u !v !w !x !y !z !{ !| !} !~ 
+   "! "" "# "$ "% "& "' "( ") "* "+ ", "- ". "/ 
+"0 "1 "2 "3 "4 "5 "6 "7 "8 "9 ": "; "< "= "> "? 
+"@ "A "B "C "D "E "F "G "H "I "J "K "L "M "N "O 
+"P "Q "R "S "T "U "V "W "X "Y "Z "[ "\ "] "^ "_ 
+"` "a "b "c "d "e 
+
+   #! #" ## #$ #% #& #' #( #) #* #+ #, #- #. #/ 
+#0 #1 #2 #3 #4 #5 #6 #7 #8 #9 #: #; #< #= #> #? 
+#@ #A #B #C #D #E #F #G #H #I #J #K #L #M #N #O 
+#P #Q #R #S #T #U #V #W #X #Y #Z #[ #\ #] #^ #_ 
+#` #a #b #c #d #e #f #g #h #i #j #k #l #m #n #o 
+#p #q #r #s #t #u #v #w #x #y #z #{ #| #} #~ 
+   $! $" $# $$ $% $& $' $( $) $* $+ $, $- $. $/ 
+$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $: $; $< $= $> $? 
+$@ $A $B $C $D $E $F $G $H $I $J $K $L $M $N $O 
+$P $Q $R $S $T $U $V $W $X $Y $Z $[ $\ $] $^ $_ 
+$` $a $b $c $d $e $f $g $h $i $j $k $l $m $n $o 
+$p $q $r $s $t $u $v $w $x $y $z ${ $| $} $~ 
+   %! %" %# %$ %% %& %' %( %) %* 
+%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 
+   %A %B %C %D %E %F %G %H %I %J %K %L %M %N %O 
+%P %Q %R %S %T %U %V %W %X 
+   %a %b %c %d %e %f %g %h %i %j %k %l %m %n %o 
+%p %q %r %s %t %u %v %w %x
+   &! &" &# &$ &% && &' &( &) &* &+ &, &- &. &/ 
+&0 &1 &2 &3 &4 &5 &6 &7 &8 &9 &: &; &< &= &> &? 
+&@ &A &B &C &D &E &F &G &H &I &J &K &L &M &N &O 
+&P &Q &R &S &T &U &V &W &X &Y &Z &[ &\ &] &^ &_ 
+&` &a &b &c &d 
+
+   '! '" '# '$ '% '& '' '( ') '* '+ ', '- '. '/ 
+'0 '1 '2 '3 '4 '5 '6 '7 '8 '9 ': '; '< '= '> '? 
+'@ 'A 'B 'C 'D 'E 'F 'G 'H 'I 'J 'K 'L 'M 'N 'O 
+'P 'Q 'R 'S 'T 'U 'V 'W 'X 'Y 'Z '[ '\ '] '^ '_ 
+'` 'a 'b 'c 'd 'e 'f 'g 'h 'i 'j 'k 'l 'm 'n 'o 
+
+   (! (" (# ($    (&    (( () (* (+ (, (- (. (/ 
+   (1 (2 (3 (4 (5 (6 (7 (8 (9 (: (; (< (= (> (? 
+(@ (A (B (C (D (E (F (G (H (I (J (K (L (M (N (O 
+(P (Q (R (S (T (U (V (W (X (Y (Z ([ (\ (] (^ (_ 
+(` (a (b (c (d (e (f (g (h (i (j (k (l (m (n (o 
+(p (q (r (s (t (u (v (w (x (y (z ({ (| (} (~ 
+   )! )" )# )$ )% )& )' )( )) )* )+ ), )- ). )/ 
+)0 )1 )2 )3 )4 )5 )6 )7 )8 )9 ): ); )< )= )> )? 
+)@ )A )B )C )D )E )F )G )H )I )J )K )L )M )N )O 
+)P )Q )R )S )T )U )V )W )X )Y )Z )[ )\ )] )^ )_ 
+)` )a )b )c )d )e )f )g )h )i )j )k )l )m )n )o 
+)p )q )r )s )t )u )v )w )x )y )z ){ )| )} )~ 
+   *! *" *# *$ *% *& *' *( *) ** *+ *, *- *. */ 
+*0 *1 *2 *3 *4 *5 *6 *7 *8 *9 *: *; *< *= *> *? 
+*@ *A *B *C *D *E *F *G *H *I *J *K *L *M *N *O 
+*P *Q *R *S *T *U *V *W *X *Y *Z *[ *\ *] *^ *_ 
+*` *a *b *c *d *e *f *g *h *i *j *k *l *m *n *o 
+*p *q *r *s 
+   +! +" +# +$ +% +& +' +( +) +* ++ +, +- +. +/ 
++0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +: +; +< += +> +? 
++@ +A +B +C +D +E +F +G +H +I +J +K +L +M +N +O 
++P +Q +R +S +T +U +V +W +X +Y +Z +[ +\ +] +^ +_ 
++` +a +b +c +d +e +f +g +h +i +j +k +l +m +n +o 
++p +q +r +s +t +u +v 
+   ,! ," ,# ,$ ,% ,& ,' ,( ,) ,* ,+ ,, ,- ,. ,/ 
+,0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,: ,; ,< ,= ,> ,? 
+,@ ,A  
+  ,Q ,R ,S ,T ,U ,V ,W ,X ,Y ,Z ,[ ,\ ,] ,^ ,_ 
+,` ,a ,b ,c ,d ,e ,f ,g ,h ,i ,j ,k ,l ,m ,n ,o 
+,p ,q
+   
+
+
+
+
+   0! 0" 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 
+00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 
+0@ 0A 0B 0C 0D 0E 0F 0G 0H 0I 0J 0K 0L 0M 0N 0O 
+0P 0Q 0R 0S 0T 0U 0V 0W 0X 0Y 0Z 0[ 0\ 0] 0^ 0_ 
+0` 0a 0b 0c 0d 0e 0f 0g 0h 0i 0j 0k 0l 0m 0n 0o 
+0p 0q 0r 0s 0t 0u 0v 0w 0x 0y 0z 0{ 0| 0} 0~ 
+   1! 1" 1# 1$ 1% 1& 1' 1( 1) 1* 1+ 1, 1- 1. 1/ 
+10 11 12 13 14 15 16 17 18 19 1: 1; 1< 1= 1> 1? 
+1@ 1A 1B 1C 1D 1E 1F 1G 1H 1I 1J 1K 1L 1M 1N 1O 
+1P 1Q 1R 1S 1T 1U 1V 1W 1X 1Y 1Z 1[ 1\ 1] 1^ 1_ 
+1` 1a 1b 1c 1d 1e 1f 1g 1h 1i 1j 1k 1l 1m 1n 1o 
+1p 1q 1r 1s 1t 1u 1v 1w 1x 1y 1z 1{ 1| 1} 1~ 
+   2! 2" 2# 2$ 2% 2& 2' 2( 2) 2* 2+ 2, 2- 2. 2/ 
+20 21 22 23 24 25 26 27 28 29 2: 2; 2< 2= 2> 2? 
+2@ 2A 2B 2C 2D 2E 2F 2G 2H 2I 2J 2K 2L 2M 2N 2O 
+2P 2Q 2R 2S 2T 2U 2V 2W 2X 2Y 2Z 2[ 2\ 2] 2^ 2_ 
+2` 2a 2b 2c 2d 2e 2f 2g 2h 2i 2j 2k 2l 2m 2n 2o 
+2p 2q 2r 2s 2t 2u 2v 2w 2x 2y 2z 2{ 2| 2} 2~ 
+   3! 3" 3# 3$ 3% 3& 3' 3( 3) 3* 3+ 3, 3- 3. 3/ 
+30 31 32 33 34 35 36 37 38 39 3: 3; 3< 3= 3> 3? 
+3@ 3A 3B 3C 3D 3E 3F 3G 3H 3I 3J 3K 3L 3M 3N 3O 
+3P 3Q 3R 3S 3T 3U 3V 3W 3X 3Y 3Z 3[ 3\ 3] 3^ 3_ 
+3` 3a 3b 3c 3d 3e 3f 3g 3h 3i 3j 3k 3l 3m 3n 3o 
+3p 3q 3r 3s 3t 3u 3v 3w 3x 3y 3z 3{ 3| 3} 3~ 
+   4! 4" 4# 4$ 4% 4& 4' 4( 4) 4* 4+ 4, 4- 4. 4/ 
+40 41 42 43 44 45 46 47 48 49 4: 4; 4< 4= 4> 4? 
+4@ 4A 4B 4C 4D 4E 4F 4G 4H 4I 4J 4K 4L 4M 4N 4O 
+4P 4Q 4R 4S 4T 4U 4V 4W 4X 4Y 4Z 4[ 4\ 4] 4^ 4_ 
+4` 4a 4b 4c 4d 4e 4f 4g 4h 4i 4j 4k 4l 4m 4n 4o 
+4p 4q 4r 4s 4t 4u 4v 4w 4x 4y 4z 4{ 4| 4} 4~ 
+   5! 5" 5# 5$ 5% 5& 5' 5( 5) 5* 5+ 5, 5- 5. 5/ 
+50 51 52 53 54 55 56 57 58 59 5: 5; 5< 5= 5> 5? 
+5@ 5A 5B 5C 5D 5E 5F 5G 5H 5I 5J 5K 5L 5M 5N 5O 
+5P 5Q 5R 5S 5T 5U 5V 5W 5X 5Y 5Z 5[ 5\ 5] 5^ 5_ 
+5` 5a 5b 5c 5d 5e 5f 5g 5h 5i 5j 5k 5l 5m 5n 5o 
+5p 5q 5r 5s 5t 5u 5v 5w 5x 5y 5z 5{ 5| 5} 5~ 
+   6! 6" 6# 6$ 6% 6& 6' 6( 6) 6* 6+ 6, 6- 6. 6/ 
+60 61 62 63 64 65 66 67 68 69 6: 6; 6< 6= 6> 6? 
+6@ 6A 6B 6C 6D 6E 6F 6G 6H 6I 6J 6K 6L 6M 6N 6O 
+6P 6Q 6R 6S 6T 6U 6V 6W 6X 6Y 6Z 6[ 6\ 6] 6^ 6_ 
+6` 6a 6b 6c 6d 6e 6f 6g 6h 6i 6j 6k 6l 6m 6n 6o 
+6p 6q 6r 6s 6t 6u 6v 6w 6x 6y 6z 6{ 6| 6} 6~ 
+   7! 7" 7# 7$ 7% 7& 7' 7( 7) 7* 7+ 7, 7- 7. 7/ 
+70 71 72 73 74 75 76 77 78 79 7: 7; 7< 7= 7> 7? 
+7@ 7A 7B 7C 7D 7E 7F 7G 7H 7I 7J 7K 7L 7M 7N 7O 
+7P 7Q 7R 7S 7T 7U 7V 7W 7X 7Y 7Z 7[ 7\ 7] 7^ 7_ 
+7` 7a 7b 7c 7d 7e 7f 7g 7h 7i 7j 7k 7l 7m 7n 7o 
+7p 7q 7r 7s 7t 7u 7v 7w 7x 7y 7z 7{ 7| 7} 7~ 
+   8! 8" 8# 8$ 8% 8& 8' 8( 8) 8* 8+ 8, 8- 8. 8/ 
+80 81 82 83 84 85 86 87 88 89 8: 8; 8< 8= 8> 8? 
+8@ 8A 8B 8C 8D 8E 8F 8G 8H 8I 8J 8K 8L 8M 8N 8O 
+8P 8Q 8R 8S 8T 8U 8V 8W 8X 8Y 8Z 8[ 8\ 8] 8^ 8_ 
+8` 8a 8b 8c 8d 8e 8f 8g 8h 8i 8j 8k 8l 8m 8n 8o 
+8p 8q 8r 8s 8t 8u 8v 8w 8x 8y 8z 8{ 8| 8} 8~ 
+   9! 9" 9# 9$ 9% 9& 9' 9( 9) 9* 9+ 9, 9- 9. 9/ 
+90 91 92 93 94 95 96 97 98 99 9: 9; 9< 9= 9> 9? 
+9@ 9A 9B 9C 9D 9E 9F 9G 9H 9I 9J 9K 9L 9M 9N 9O 
+9P 9Q 9R 9S 9T 9U 9V 9W 9X 9Y 9Z 9[ 9\ 9] 9^ 9_ 
+9` 9a 9b 9c 9d 9e 9f 9g 9h 9i 9j 9k 9l 9m 9n 9o 
+9p 9q 9r 9s 9t 9u 9v 9w 9x 9y 9z 9{ 9| 9} 9~ 
+   :! :" :# :$ :% :& :' :( :) :* :+ :, :- :. :/ 
+:0 :1 :2 :3 :4 :5 :6 :7 :8 :9 :: :; :< := :> :? 
+:@ :A :B :C :D :E :F :G :H :I :J :K :L :M :N :O 
+:P :Q :R :S :T :U :V :W :X :Y :Z :[ :\ :] :^ :_ 
+:` :a :b :c :d :e :f :g :h :i :j :k :l :m :n :o 
+:p :q :r :s :t :u :v :w :x :y :z :{ :| :} :~ 
+   ;! ;" ;# ;$ ;% ;& ;' ;( ;) ;* ;+ ;, ;- ;. ;/ 
+;0 ;1 ;2 ;3 ;4 ;5 ;6 ;7 ;8 ;9 ;: ;; ;< ;= ;> ;? 
+;@ ;A ;B ;C ;D ;E ;F ;G ;H ;I ;J ;K ;L ;M ;N ;O 
+;P ;Q ;R ;S ;T ;U ;V ;W ;X ;Y ;Z ;[ ;\ ;] ;^ ;_ 
+;` ;a ;b ;c ;d ;e ;f ;g ;h ;i ;j ;k ;l ;m ;n ;o 
+;p ;q ;r ;s ;t ;u ;v ;w ;x ;y ;z ;{ ;| ;} ;~ 
+   <! <" <# <$ <% <& <' <( <) <* <+ <, <- <. </ 
+<0 <1 <2 <3 <4 <5 <6 <7 <8 <9 <: <; << <= <> <? 
+<@ <A <B <C <D <E <F <G <H <I <J <K <L <M <N <O 
+<P <Q <R <S <T <U <V <W <X <Y <Z <[ <\ <] <^ <_ 
+<` <a <b <c <d <e <f <g <h <i <j <k <l <m <n <o 
+<p <q <r <s <t <u <v <w <x <y <z <{ <| <} <~ 
+   =! =" =# =$ =% =& =' =( =) =* =+ =, =- =. =/ 
+=0 =1 =2 =3 =4 =5 =6 =7 =8 =9 =: =; =< == => =? 
+=@ =A =B =C =D =E =F =G =H =I =J =K =L =M =N =O 
+=P =Q =R =S =T =U =V =W =X =Y =Z =[ =\ =] =^ =_ 
+=` =a =b =c =d =e =f =g =h =i =j =k =l =m =n =o 
+=p =q =r =s =t =u =v =w =x =y =z ={ =| =} =~ 
+   >! >" ># >$ >% >& >' >( >) >* >+ >, >- >. >/ 
+>0 >1 >2 >3 >4 >5 >6 >7 >8 >9 >: >; >< >= >> >? 
+>@ >A >B >C >D >E >F >G >H >I >J >K >L >M >N >O 
+>P >Q >R >S >T >U >V >W >X >Y >Z >[ >\ >] >^ >_ 
+>` >a >b >c >d >e >f >g >h >i >j >k >l >m >n >o 
+>p >q >r >s >t >u >v >w >x >y >z >{ >| >} >~ 
+   ?! ?" ?# ?$ ?% ?& ?' ?( ?) ?* ?+ ?, ?- ?. ?/ 
+?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 ?: ?; ?< ?= ?> ?? 
+?@ ?A ?B ?C ?D ?E ?F ?G ?H ?I ?J ?K ?L ?M ?N ?O 
+?P ?Q ?R ?S ?T ?U ?V ?W ?X ?Y ?Z ?[ ?\ ?] ?^ ?_ 
+?` ?a ?b ?c ?d ?e ?f ?g ?h ?i ?j ?k ?l ?m ?n ?o 
+?p ?q ?r ?s ?t ?u ?v ?w ?x ?y ?z ?{ ?| ?} ?~ 
+   @! @" @# @$ @% @& @' @( @) @* @+ @, @- @. @/ 
+@0 @1 @2 @3 @4 @5 @6 @7 @8 @9 @: @; @< @= @> @? 
+@@ @A @B @C @D @E @F @G @H @I @J @K @L @M @N @O 
+@P @Q @R @S @T @U @V @W @X @Y @Z @[ @\ @] @^ @_ 
+@` @a @b @c @d @e @f @g @h @i @j @k @l @m @n @o 
+@p @q @r @s @t @u @v @w @x @y @z @{ @| @} @~ 
+   A! A" A# A$ A% A& A' A( A) A* A+ A, A- A. A/ 
+A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A: A; A< A= A> A? 
+A@ AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO 
+AP AQ AR AS AT AU AV AW AX AY AZ A[ A\ A] A^ A_ 
+A` Aa Ab Ac Ad Ae Af Ag Ah Ai Aj Ak Al Am An Ao 
+Ap Aq Ar As At Au Av Aw Ax Ay Az A{ A| A} A~ 
+   B! B" B# B$ B% B& B' B( B) B* B+ B, B- B. B/ 
+B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 B: B; B< B= B> B? 
+B@ BA BB BC BD BE BF BG BH BI BJ BK BL BM BN BO 
+BP BQ BR BS BT BU BV BW BX BY BZ B[ B\ B] B^ B_ 
+B` Ba Bb Bc Bd Be Bf Bg Bh Bi Bj Bk Bl Bm Bn Bo 
+Bp Bq Br Bs Bt Bu Bv Bw Bx By Bz B{ B| B} B~ 
+   C! C" C# C$ C% C& C' C( C) C* C+ C, C- C. C/ 
+C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C: C; C< C= C> C? 
+C@ CA CB CC CD CE CF CG CH CI CJ CK CL CM CN CO 
+CP CQ CR CS CT CU CV CW CX CY CZ C[ C\ C] C^ C_ 
+C` Ca Cb Cc Cd Ce Cf Cg Ch Ci Cj Ck Cl Cm Cn Co 
+Cp Cq Cr Cs Ct Cu Cv Cw Cx Cy Cz C{ C| C} C~ 
+   D! D" D# D$ D% D& D' D( D) D* D+ D, D- D. D/ 
+D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D: D; D< D= D> D? 
+D@ DA DB DC DD DE DF DG DH DI DJ DK DL DM DN DO 
+DP DQ DR DS DT DU DV DW DX DY DZ D[ D\ D] D^ D_ 
+D` Da Db Dc Dd De Df Dg Dh Di Dj Dk Dl Dm Dn Do 
+Dp Dq Dr Ds Dt Du Dv Dw Dx Dy Dz D{ D| D} D~ 
+   E! E" E# E$ E% E& E' E( E) E* E+ E, E- E. E/ 
+E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 E: E; E< E= E> E? 
+E@ EA EB EC ED EE EF EG EH EI EJ EK EL EM EN EO 
+EP EQ ER ES ET EU EV EW EX EY EZ E[ E\ E] E^ E_ 
+E` Ea Eb Ec Ed Ee Ef Eg Eh Ei Ej Ek El Em En Eo 
+Ep Eq Er Es Et Eu Ev Ew Ex Ey Ez E{ E| E} E~ 
+   F! F" F# F$ F% F& F' F( F) F* F+ F, F- F. F/ 
+F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F: F; F< F= F> F? 
+F@ FA FB FC FD FE FF FG FH FI FJ FK FL FM FN FO 
+FP FQ FR FS FT FU FV FW FX FY FZ F[ F\ F] F^ F_ 
+F` Fa Fb Fc Fd Fe Ff Fg Fh Fi Fj Fk Fl Fm Fn Fo 
+Fp Fq Fr Fs Ft Fu Fv Fw Fx Fy Fz F{ F| F} F~ 
+   G! G" G# G$ G% G& G' G( G) G* G+ G, G- G. G/ 
+G0 G1 G2 G3 G4 G5 G6 G7 G8 G9 G: G; G< G= G> G? 
+G@ GA GB GC GD GE GF GG GH GI GJ GK GL GM GN GO 
+GP GQ GR GS GT GU GV GW GX GY GZ G[ G\ G] G^ G_ 
+G` Ga Gb Gc Gd Ge Gf Gg Gh Gi Gj Gk Gl Gm Gn Go 
+Gp Gq Gr Gs Gt Gu Gv Gw Gx Gy Gz G{ G| G} G~ 
+   H! H" H# H$ H% H& H' H( H) H* H+ H, H- H. H/ 
+H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H: H; H< H= H> H? 
+H@ HA HB HC HD HE HF HG HH HI HJ HK HL HM HN HO 
+HP HQ HR HS HT HU HV HW HX HY HZ H[ H\ H] H^ H_ 
+H` Ha Hb Hc Hd He Hf Hg Hh Hi Hj Hk Hl Hm Hn Ho 
+Hp Hq Hr Hs Ht Hu Hv Hw Hx Hy Hz H{ H| H} H~ 
+ 
+
+
+
+
+
+   J! J" J# J$ J% J& J' J( J) J* J+ J, J- J. J/ 
+J0 J1 J2 J3 J4 J5 J6 J7 J8 J9 J: J; J< J= J> J? 
+J@ JA JB JC JD JE JF JG JH JI JJ JK JL JM JN JO 
+JP JQ JR JS JT JU JV JW JX JY JZ J[ J\ J] J^ J_ 
+J` Ja Jb Jc Jd Je Jf Jg Jh Ji Jj Jk Jl Jm Jn Jo 
+Jp Jq Jr Js Jt Ju Jv Jw Jx Jy Jz J{ J| J} J~ 
+   K! K" K# K$ K% K& K' K( K) K* K+ K, K- K. K/ 
+K0 K1 K2 K3 K4 K5 K6 K7 K8 K9 K: K; K< K= K> K? 
+K@ KA KB KC KD KE KF KG KH KI KJ KK KL KM KN KO 
+KP KQ KR KS KT KU KV KW KX KY KZ K[ K\ K] K^ K_ 
+K` Ka Kb Kc Kd Ke Kf Kg Kh Ki Kj Kk Kl Km Kn Ko 
+Kp Kq Kr Ks Kt Ku Kv Kw Kx Ky Kz K{ K| K} K~ 
+   L! L" L# L$ L% L& L' L( L) L* L+ L, L- L. L/ 
+L0 L1 L2 L3 L4 L5 L6 L7 L8 L9 L: L; L< L= L> L? 
+L@ LA LB LC LD LE LF LG LH LI LJ LK LL LM LN LO 
+LP LQ LR LS LT LU LV LW LX LY LZ L[ L\ L] L^ L_ 
+L` La Lb Lc Ld Le Lf Lg Lh Li Lj Lk Ll Lm Ln Lo 
+Lp Lq Lr Ls Lt Lu Lv Lw Lx Ly Lz L{ L| L} L~ 
+   M! M" M# M$ M% M& M' M( M) M* M+ M, M- M. M/ 
+M0 M1 M2 M3 M4 M5 M6 M7 M8 M9 M: M; M< M= M> M? 
+M@ MA MB MC MD ME MF MG MH MI MJ MK ML MM MN MO 
+MP MQ MR MS MT MU MV MW MX MY MZ M[ M\ M] M^ M_ 
+M` Ma Mb Mc Md Me Mf Mg Mh Mi Mj Mk Ml Mm Mn Mo 
+Mp Mq Mr Ms Mt Mu Mv Mw Mx My Mz M{ M| M} M~ 
+   N! N" N# N$ N% N& N' N( N) N* N+ N, N- N. N/ 
+N0 N1 N2 N3 N4 N5 N6 N7 N8 N9 N: N; N< N= N> N? 
+N@ NA NB NC ND NE NF NG NH NI NJ NK NL NM NN NO 
+NP NQ NR NS NT NU NV NW NX NY NZ N[ N\ N] N^ N_ 
+N` Na Nb Nc Nd Ne Nf Ng Nh Ni Nj Nk Nl Nm Nn No 
+Np Nq Nr Ns Nt Nu Nv Nw Nx Ny Nz N{ N| N} N~ 
+   O! O" O# O$ O% O& O' O( O) O* O+ O, O- O. O/ 
+O0 O1 O2 O3 O4 O5 O6 O7 O8 O9 O: O; O< O= O> O? 
+O@ OA OB OC OD OE OF OG OH OI OJ OK OL OM ON OO 
+OP OQ OR OS OT OU OV OW OX OY OZ O[ O\ O] O^ O_ 
+O` Oa Ob Oc Od Oe Of Og Oh Oi Oj Ok Ol Om On Oo 
+Op Oq Or Os Ot Ou Ov Ow Ox Oy Oz O{ O| O} O~ 
+   P! P" P# P$ P% P& P' P( P) P* P+ P, P- P. P/ 
+P0 P1 P2 P3 P4 P5 P6 P7 P8 P9 P: P; P< P= P> P? 
+P@ PA PB PC PD PE PF PG PH PI PJ PK PL PM PN PO 
+PP PQ PR PS PT PU PV PW PX PY PZ P[ P\ P] P^ P_ 
+P` Pa Pb Pc Pd Pe Pf Pg Ph Pi Pj Pk Pl Pm Pn Po 
+Pp Pq Pr Ps Pt Pu Pv Pw Px Py Pz P{ P| P} P~ 
+   Q! Q" Q# Q$ Q% Q& Q' Q( Q) Q* Q+ Q, Q- Q. Q/ 
+Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q: Q; Q< Q= Q> Q? 
+Q@ QA QB QC QD QE QF QG QH QI QJ QK QL QM QN QO 
+QP QQ QR QS QT QU QV QW QX QY QZ Q[ Q\ Q] Q^ Q_ 
+Q` Qa Qb Qc Qd Qe Qf Qg Qh Qi Qj Qk Ql Qm Qn Qo 
+Qp Qq Qr Qs Qt Qu Qv Qw Qx Qy Qz Q{ Q| Q} Q~ 
+   R! R" R# R$ R% R& R' R( R) R* R+ R, R- R. R/ 
+R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R: R; R< R= R> R? 
+R@ RA RB RC RD RE RF RG RH RI RJ RK RL RM RN RO 
+RP RQ RR RS RT RU RV RW RX RY RZ R[ R\ R] R^ R_ 
+R` Ra Rb Rc Rd Re Rf Rg Rh Ri Rj Rk Rl Rm Rn Ro 
+Rp Rq Rr Rs Rt Ru Rv Rw Rx Ry Rz R{ R| R} R~ 
+   S! S" S# S$ S% S& S' S( S) S* S+ S, S- S. S/ 
+S0 S1 S2 S3 S4 S5 S6 S7 S8 S9 S: S; S< S= S> S? 
+S@ SA SB SC SD SE SF SG SH SI SJ SK SL SM SN SO 
+SP SQ SR SS ST SU SV SW SX SY SZ S[ S\ S] S^ S_ 
+S` Sa Sb Sc Sd Se Sf Sg Sh Si Sj Sk Sl Sm Sn So 
+Sp Sq Sr Ss St Su Sv Sw Sx Sy Sz S{ S| S} S~ 
+   T! T" T# T$ T% T& T' T( T) T* T+ T, T- T. T/ 
+T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T: T; T< T= T> T? 
+T@ TA TB TC TD TE TF TG TH TI TJ TK TL TM TN TO 
+TP TQ TR TS TT TU TV TW TX TY TZ T[ T\ T] T^ T_ 
+T` Ta Tb Tc Td Te Tf Tg Th Ti Tj Tk Tl Tm Tn To 
+Tp Tq Tr Ts Tt Tu Tv Tw Tx Ty Tz T{ T| T} T~ 
+   U! U" U# U$ U% U& U' U( U) U* U+ U, U- U. U/ 
+U0 U1 U2 U3 U4 U5 U6 U7 U8 U9 U: U; U< U= U> U? 
+U@ UA UB UC UD UE UF UG UH UI UJ UK UL UM UN UO 
+UP UQ UR US UT UU UV UW UX UY UZ U[ U\ U] U^ U_ 
+U` Ua Ub Uc Ud Ue Uf Ug Uh Ui Uj Uk Ul Um Un Uo 
+Up Uq Ur Us Ut Uu Uv Uw Ux Uy Uz U{ U| U} U~ 
+   V! V" V# V$ V% V& V' V( V) V* V+ V, V- V. V/ 
+V0 V1 V2 V3 V4 V5 V6 V7 V8 V9 V: V; V< V= V> V? 
+V@ VA VB VC VD VE VF VG VH VI VJ VK VL VM VN VO 
+VP VQ VR VS VT VU VV VW VX VY VZ V[ V\ V] V^ V_ 
+V` Va Vb Vc Vd Ve Vf Vg Vh Vi Vj Vk Vl Vm Vn Vo 
+Vp Vq Vr Vs Vt Vu Vv Vw Vx Vy Vz V{ V| V} V~ 
+   W! W" W# W$ W% W& W' W( W) W* W+ W, W- W. W/ 
+W0 W1 W2 W3 W4 W5 W6 W7 W8 W9 W: W; W< W= W> W? 
+W@ WA WB WC WD WE WF WG WH WI WJ WK WL WM WN WO 
+WP WQ WR WS WT WU WV WW WX WY WZ W[ W\ W] W^ W_ 
+W` Wa Wb Wc Wd We Wf Wg Wh Wi Wj Wk Wl Wm Wn Wo 
+Wp Wq Wr Ws Wt Wu Wv Ww Wx Wy Wz W{ W| W} W~ 
+   X! X" X# X$ X% X& X' X( X) X* X+ X, X- X. X/ 
+X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X: X; X< X= X> X? 
+X@ XA XB XC XD XE XF XG XH XI XJ XK XL XM XN XO 
+XP XQ XR XS XT XU XV XW XX XY XZ X[ X\ X] X^ X_ 
+X` Xa Xb Xc Xd Xe Xf Xg Xh Xi Xj Xk Xl Xm Xn Xo 
+Xp Xq Xr Xs Xt Xu Xv Xw Xx Xy Xz X{ X| X} X~ 
+   Y! Y" Y# Y$ Y% Y& Y' Y( Y) Y* Y+ Y, Y- Y. Y/ 
+Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y: Y; Y< Y= Y> Y? 
+Y@ YA YB YC YD YE YF YG YH YI YJ YK YL YM YN YO 
+YP YQ YR YS YT YU YV YW YX YY YZ Y[ Y\ Y] Y^ Y_ 
+Y` Ya Yb Yc Yd Ye Yf Yg Yh Yi Yj Yk Yl Ym Yn Yo 
+Yp Yq Yr Ys Yt Yu Yv Yw Yx Yy Yz Y{ Y| Y} Y~ 
+   Z! Z" Z# Z$ Z% Z& Z' Z( Z) Z* Z+ Z, Z- Z. Z/ 
+Z0 Z1 Z2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z: Z; Z< Z= Z> Z? 
+Z@ ZA ZB ZC ZD ZE ZF ZG ZH ZI ZJ ZK ZL ZM ZN ZO 
+ZP ZQ ZR ZS ZT ZU ZV ZW ZX ZY ZZ Z[ Z\ Z] Z^ Z_ 
+Z` Za Zb Zc Zd Ze Zf Zg Zh Zi Zj Zk Zl Zm Zn Zo 
+Zp Zq Zr Zs Zt Zu Zv Zw Zx Zy Zz Z{ Z| Z} Z~ 
+   [! [" [# [$ [% [& [' [( [) [* [+ [, [- [. [/ 
+[0 [1 [2 [3 [4 [5 [6 [7 [8 [9 [: [; [< [= [> [? 
+[@ [A [B [C [D [E [F [G [H [I [J [K [L [M [N [O 
+[P [Q [R [S [T [U [V [W [X [Y [Z [[ [\ [] [^ [_ 
+[` [a [b [c [d [e [f [g [h [i [j [k [l [m [n [o 
+[p [q [r [s [t [u [v [w [x [y [z [{ [| [} [~ 
+   \! \" \# \$ \% \& \' \( \) \* \+ \, \- \. \/ 
+\0 \1 \2 \3 \4 \5 \6 \7 \8 \9 \: \; \< \= \> \? 
+\@ \A \B \C \D \E \F \G \H \I \J \K \L \M \N \O 
+\P \Q \R \S \T \U \V \W \X \Y \Z \[ \\ \] \^ \_ 
+\` \a \b \c \d \e \f \g \h \i \j \k \l \m \n \o 
+\p \q \r \s \t \u \v \w \x \y \z \{ \| \} \~ 
+   ]! ]" ]# ]$ ]% ]& ]' ]( ]) ]* ]+ ], ]- ]. ]/ 
+]0 ]1 ]2 ]3 ]4 ]5 ]6 ]7 ]8 ]9 ]: ]; ]< ]= ]> ]? 
+]@ ]A ]B ]C ]D ]E ]F ]G ]H ]I ]J ]K ]L ]M ]N ]O 
+]P ]Q ]R ]S ]T ]U ]V ]W ]X ]Y ]Z ][ ]\ ]] ]^ ]_ 
+]` ]a ]b ]c ]d ]e ]f ]g ]h ]i ]j ]k ]l ]m ]n ]o 
+]p ]q ]r ]s ]t ]u ]v ]w ]x ]y ]z ]{ ]| ]} ]~ 
+   ^! ^" ^# ^$ ^% ^& ^' ^( ^) ^* ^+ ^, ^- ^. ^/ 
+^0 ^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^: ^; ^< ^= ^> ^? 
+^@ ^A ^B ^C ^D ^E ^F ^G ^H ^I ^J ^K ^L ^M ^N ^O 
+^P ^Q ^R ^S ^T ^U ^V ^W ^X ^Y ^Z ^[ ^\ ^] ^^ ^_ 
+^` ^a ^b ^c ^d ^e ^f ^g ^h ^i ^j ^k ^l ^m ^n ^o 
+^p ^q ^r ^s ^t ^u ^v ^w ^x ^y ^z ^{ ^| ^} ^~ 
+   _! _" _# _$ _% _& _' _( _) _* _+ _, _- _. _/ 
+_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _: _; _< _= _> _? 
+_@ _A _B _C _D _E _F _G _H _I _J _K _L _M _N _O 
+_P _Q _R _S _T _U _V _W _X _Y _Z _[ _\ _] _^ __ 
+_` _a _b _c _d _e _f _g _h _i _j _k _l _m _n _o 
+_p _q _r _s _t _u _v _w _x _y _z _{ _| _} _~ 
+   `! `" `# `$ `% `& `' `( `) `* `+ `, `- `. `/ 
+`0 `1 `2 `3 `4 `5 `6 `7 `8 `9 `: `; `< `= `> `? 
+`@ `A `B `C `D `E `F `G `H `I `J `K `L `M `N `O 
+`P `Q `R `S `T `U `V `W `X `Y `Z `[ `\ `] `^ `_ 
+`` `a `b `c `d `e `f `g `h `i `j `k `l `m `n `o 
+`p `q `r `s `t `u `v `w `x `y `z `{ `| `} `~ 
+   a! a" a# a$ a% a& a' a( a) a* a+ a, a- a. a/ 
+a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 a: a; a< a= a> a? 
+a@ aA aB aC aD aE aF aG aH aI aJ aK aL aM aN aO 
+aP aQ aR aS aT aU aV aW aX aY aZ a[ a\ a] a^ a_ 
+a` aa ab ac ad ae af ag ah ai aj ak al am an ao 
+ap aq ar as at au av aw ax ay az a{ a| a} a~ 
+   b! b" b# b$ b% b& b' b( b) b* b+ b, b- b. b/ 
+b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 b: b; b< b= b> b? 
+b@ bA bB bC bD bE bF bG bH bI bJ bK bL bM bN bO 
+bP bQ bR bS bT bU bV bW bX bY bZ b[ b\ b] b^ b_ 
+b` ba bb bc bd be bf bg bh bi bj bk bl bm bn bo 
+bp bq br bs bt bu bv bw bx by bz b{ b| b} b~ 
+   c! c" c# c$ c% c& c' c( c) c* c+ c, c- c. c/ 
+c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c: c; c< c= c> c? 
+c@ cA cB cC cD cE cF cG cH cI cJ cK cL cM cN cO 
+cP cQ cR cS cT cU cV cW cX cY cZ c[ c\ c] c^ c_ 
+c` ca cb cc cd ce cf cg ch ci cj ck cl cm cn co 
+cp cq cr cs ct cu cv cw cx cy cz c{ c| c} c~ 
+   d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. d/ 
+d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? 
+d@ dA dB dC dD dE dF dG dH dI dJ dK dL dM dN dO 
+dP dQ dR dS dT dU dV dW dX dY dZ d[ d\ d] d^ d_ 
+d` da db dc dd de df dg dh di dj dk dl dm dn do 
+dp dq dr ds dt du dv dw dx dy dz d{ d| d} d~ 
+   e! e" e# e$ e% e& e' e( e) e* e+ e, e- e. e/ 
+e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 e: e; e< e= e> e? 
+e@ eA eB eC eD eE eF eG eH eI eJ eK eL eM eN eO 
+eP eQ eR eS eT eU eV eW eX eY eZ e[ e\ e] e^ e_ 
+e` ea eb ec ed ee ef eg eh ei ej ek el em en eo 
+ep eq er es et eu ev ew ex ey ez e{ e| e} e~ 
+   f! f" f# f$ f% f& f' f( f) f* f+ f, f- f. f/ 
+f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 f: f; f< f= f> f? 
+f@ fA fB fC fD fE fF fG fH fI fJ fK fL fM fN fO 
+fP fQ fR fS fT fU fV fW fX fY fZ f[ f\ f] f^ f_ 
+f` fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo 
+fp fq fr fs ft fu fv fw fx fy fz f{ f| f} f~ 
+   g! g" g# g$ g% g& g' g( g) g* g+ g, g- g. g/ 
+g0 g1 g2 g3 g4 g5 g6 g7 g8 g9 g: g; g< g= g> g? 
+g@ gA gB gC gD gE gF gG gH gI gJ gK gL gM gN gO 
+gP gQ gR gS gT gU gV gW gX gY gZ g[ g\ g] g^ g_ 
+g` ga gb gc gd ge gf gg gh gi gj gk gl gm gn go 
+gp gq gr gs gt gu gv gw gx gy gz g{ g| g} g~ 
+   h! h" h# h$ h% h& h' h( h) h* h+ h, h- h. h/ 
+h0 h1 h2 h3 h4 h5 h6 h7 h8 h9 h: h; h< h= h> h? 
+h@ hA hB hC hD hE hF hG hH hI hJ hK hL hM hN hO 
+hP hQ hR hS hT hU hV hW hX hY hZ h[ h\ h] h^ h_ 
+h` ha hb hc hd he hf hg hh hi hj hk hl hm hn ho 
+hp hq hr hs ht hu hv hw hx hy hz h{ h| h} h~ 
+   i! i" i# i$ i% i& i' i( i) i* i+ i, i- i. i/ 
+i0 i1 i2 i3 i4 i5 i6 i7 i8 i9 i: i; i< i= i> i? 
+i@ iA iB iC iD iE iF iG iH iI iJ iK iL iM iN iO 
+iP iQ iR iS iT iU iV iW iX iY iZ i[ i\ i] i^ i_ 
+i` ia ib ic id ie if ig ih ii ij ik il im in io 
+ip iq ir is it iu iv iw ix iy iz i{ i| i} i~ 
+   j! j" j# j$ j% j& j' j( j) j* j+ j, j- j. j/ 
+j0 j1 j2 j3 j4 j5 j6 j7 j8 j9 j: j; j< j= j> j? 
+j@ jA jB jC jD jE jF jG jH jI jJ jK jL jM jN jO 
+jP jQ jR jS jT jU jV jW jX jY jZ j[ j\ j] j^ j_ 
+j` ja jb jc jd je jf jg jh ji jj jk jl jm jn jo 
+jp jq jr js jt ju jv jw jx jy jz j{ j| j} j~ 
+   k! k" k# k$ k% k& k' k( k) k* k+ k, k- k. k/ 
+k0 k1 k2 k3 k4 k5 k6 k7 k8 k9 k: k; k< k= k> k? 
+k@ kA kB kC kD kE kF kG kH kI kJ kK kL kM kN kO 
+kP kQ kR kS kT kU kV kW kX kY kZ k[ k\ k] k^ k_ 
+k` ka kb kc kd ke kf kg kh ki kj kk kl km kn ko 
+kp kq kr ks kt ku kv kw kx ky kz k{ k| k} k~ 
+   l! l" l# l$ l% l& l' l( l) l* l+ l, l- l. l/ 
+l0 l1 l2 l3 l4 l5 l6 l7 l8 l9 l: l; l< l= l> l? 
+l@ lA lB lC lD lE lF lG lH lI lJ lK lL lM lN lO 
+lP lQ lR lS lT lU lV lW lX lY lZ l[ l\ l] l^ l_ 
+l` la lb lc ld le lf lg lh li lj lk ll lm ln lo 
+lp lq lr ls lt lu lv lw lx ly lz l{ l| l} l~ 
+   m! m" m# m$ m% m& m' m( m) m* m+ m, m- m. m/ 
+m0 m1 m2 m3 m4 m5 m6 m7 m8 m9 m: m; m< m= m> m? 
+m@ mA mB mC mD mE mF mG mH mI mJ mK mL mM mN mO 
+mP mQ mR mS mT mU mV mW mX mY mZ m[ m\ m] m^ m_ 
+m` ma mb mc md me mf mg mh mi mj mk ml mm mn mo 
+mp mq mr ms mt mu mv mw mx my mz m{ m| m} m~ 
+   n! n" n# n$ n% n& n' n( n) n* n+ n, n- n. n/ 
+n0 n1 n2 n3 n4 n5 n6 n7 n8 n9 n: n; n< n= n> n? 
+n@ nA nB nC nD nE nF nG nH nI nJ nK nL nM nN nO 
+nP nQ nR nS nT nU nV nW nX nY nZ n[ n\ n] n^ n_ 
+n` na nb nc nd ne nf ng nh ni nj nk nl nm nn no 
+np nq nr ns nt nu nv nw nx ny nz n{ n| n} n~ 
+   o! o" o# o$ o% o& o' o( o) o* o+ o, o- o. o/ 
+o0 o1 o2 o3 o4 o5 o6 o7 o8 o9 o: o; o< o= o> o? 
+o@ oA oB oC oD oE oF oG oH oI oJ oK oL oM oN oO 
+oP oQ oR oS oT oU oV oW oX oY oZ o[ o\ o] o^ o_ 
+o` oa ob oc od oe of og oh oi oj ok ol om on oo 
+op oq or os ot ou ov ow ox oy oz o{ o| o} o~ 
+   p! p" p# p$ p% p& p' p( p) p* p+ p, p- p. p/ 
+p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p: p; p< p= p> p? 
+p@ pA pB pC pD pE pF pG pH pI pJ pK pL pM pN pO 
+pP pQ pR pS pT pU pV pW pX pY pZ p[ p\ p] p^ p_ 
+p` pa pb pc pd pe pf pg ph pi pj pk pl pm pn po 
+pp pq pr ps pt pu pv pw px py pz p{ p| p} p~ 
+   q! q" q# q$ q% q& q' q( q) q* q+ q, q- q. q/ 
+q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q: q; q< q= q> q? 
+q@ qA qB qC qD qE qF qG qH qI qJ qK qL qM qN qO 
+qP qQ qR qS qT qU qV qW qX qY qZ q[ q\ q] q^ q_ 
+q` qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo 
+qp qq qr qs qt qu qv qw qx qy qz q{ q| q} q~ 
+   r! r" r# r$ r% r& r' r( r) r* r+ r, r- r. r/ 
+r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r: r; r< r= r> r? 
+r@ rA rB rC rD rE rF rG rH rI rJ rK rL rM rN rO 
+rP rQ rR rS rT rU rV rW rX rY rZ r[ r\ r] r^ r_ 
+r` ra rb rc rd re rf rg rh ri rj rk rl rm rn ro 
+rp rq rr rs rt ru rv rw rx ry rz r{ r| r} r~ 
+   s! s" s# s$ s% s& s' s( s) s* s+ s, s- s. s/ 
+s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s: s; s< s= s> s? 
+s@ sA sB sC sD sE sF sG sH sI sJ sK sL sM sN sO 
+sP sQ sR sS sT sU sV sW sX sY sZ s[ s\ s] s^ s_ 
+s` sa sb sc sd se sf sg sh si sj sk sl sm sn so 
+sp sq sr ss st su sv sw sx sy sz s{ s| s} s~ 
+   t! t" t# t$ t% t& t' t( t) t* t+ t, t- t. t/ 
+t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t: t; t< t= t> t? 
+t@ tA tB tC tD tE tF tG tH tI tJ tK tL tM tN tO 
+tP tQ tR tS tT tU tV tW tX tY tZ t[ t\ t] t^ t_ 
+t` ta tb tc td te tf tg th ti tj tk tl tm tn to 
+tp tq tr ts tt tu tv tw tx ty tz t{ t| t} t~ 
+   u! u" u# u$ u% u& u' u( u) u* u+ u, u- u. u/ 
+u0 u1 u2 u3 u4 u5 u6 u7 u8 u9 u: u; u< u= u> u? 
+u@ uA uB uC uD uE uF uG uH uI uJ uK uL uM uN uO 
+uP uQ uR uS uT uU uV uW uX uY uZ u[ u\ u] u^ u_ 
+u` ua ub uc ud ue uf ug uh ui uj uk ul um un uo 
+up uq ur us ut uu uv uw ux uy uz u{ u| u} u~ 
+   v! v" v# v$ v% v& v' v( v) v* v+ v, v- v. v/ 
+v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v: v; v< v= v> v? 
+v@ vA vB vC vD vE vF vG vH vI vJ vK vL vM vN vO 
+vP vQ vR vS vT vU vV vW vX vY vZ v[ v\ v] v^ v_ 
+v` va vb vc vd ve vf vg vh vi vj vk vl vm vn vo 
+vp vq vr vs vt vu vv vw vx vy vz v{ v| v} v~ 
+   w! w" w# w$ w% w& w' w( w) w* w+ w, w- w. w/ 
+w0 w1 w2 w3 w4 w5 w6 w7 w8 w9 w: w; w< w= w> w? 
+w@ wA wB wC wD wE wF wG wH wI wJ wK wL wM wN wO 
+wP wQ wR wS wT wU wV wW wX wY wZ w[ w\ w] w^ w_ 
+w` wa wb wc wd we wf wg wh wi wj wk wl wm wn wo 
+wp wq wr ws wt wu wv ww wx wy wz w{ w| w} w~ 
+   x! x" x# x$ x% x& x' x( x) x* x+ x, x- x. x/ 
+x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? 
+x@ xA xB xC xD xE xF xG xH xI xJ xK xL xM xN xO 
+xP xQ xR xS xT xU xV xW xX xY xZ x[ x\ x] x^ x_ 
+x` xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo 
+xp xq xr xs xt xu xv xw xx xy xz x{ x| x} x~ 
+   y! y" y# y$ y% y& y' y( y) y* y+ y, y- y. y/ 
+y0 y1 y2 y3 y4 y5 y6 y7 y8 y9 y: y; y< y= y> y? 
+y@ yA yB yC yD yE yF yG yH yI yJ yK yL yM yN yO 
+yP yQ yR yS yT yU yV yW yX yY yZ y[ y\ y] y^ y_ 
+y` ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo 
+yp yq yr ys yt yu yv yw yx yy yz y{ y| y} y~ 
+   z! z" z# z$ z% z& z' z( z) z* z+ z, z- z. z/ 
+z0 z1 z2 z3 z4 z5 z6 z7 z8 z9 z: z; z< z= z> z? 
+z@ zA zB zC zD zE zF zG zH zI zJ zK zL zM zN zO 
+zP zQ zR zS zT zU zV zW zX zY zZ z[ z\ z] z^ z_ 
+z` za zb zc zd ze zf zg zh zi zj zk zl zm zn zo 
+zp zq zr zs zt zu zv zw zx zy zz z{ z| z} z~ 
+   {! {" {# {$ {% {& {' {( {) {* {+ {, {- {. {/ 
+{0 {1 {2 {3 {4 {5 {6 {7 {8 {9 {: {; {< {= {> {? 
+{@ {A {B {C {D {E {F {G {H {I {J {K {L {M {N {O 
+{P {Q {R {S {T {U {V {W {X {Y {Z {[ {\ {] {^ {_ 
+{` {a {b {c {d {e {f {g {h {i {j {k {l {m {n {o 
+{p {q {r {s {t {u {v {w {x {y {z {{ {| {} {~ 
+   |! |" |# |$ |% |& |' |( |) |* |+ |, |- |. |/ 
+|0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |: |; |< |= |> |? 
+|@ |A |B |C |D |E |F |G |H |I |J |K |L |M |N |O 
+|P |Q |R |S |T |U |V |W |X |Y |Z |[ |\ |] |^ |_ 
+|` |a |b |c |d |e |f |g |h |i |j |k |l |m |n |o 
+|p |q |r |s |t |u |v |w |x |y |z |{ || |} |~ 
+   }! }" }# }$ }% }& }' }( }) }* }+ }, }- }. }/ 
+}0 }1 }2 }3 }4 }5 }6 }7 }8 }9 }: }; }< }= }> }? 
+}@ }A }B }C }D }E }F }G }H }I }J }K }L }M }N }O 
+}P }Q }R }S }T }U }V }W }X }Y }Z }[ }\ }] }^ }_ 
+}` }a }b }c }d }e }f }g }h }i }j }k }l }m }n }o 
+}p }q }r }s }t }u }v }w }x }y }z }{ }| }} }~ 
+
+
+
+
+
+
diff --git a/wcsmbs/btowc.c b/wcsmbs/btowc.c
index cca4645c19..b6a682897b 100644
--- a/wcsmbs/btowc.c
+++ b/wcsmbs/btowc.c
@@ -43,6 +43,8 @@ __btowc (c)
   /* Tell where we want the result.  */
   data.outbuf = (char *) buf;
   data.outbufend = data.outbuf + sizeof (wchar_t);
+  data.invocation_counter = 0;
+  data.internal_use = 1;
   data.is_last = 1;
   data.statep = &data.__state;
 
diff --git a/wcsmbs/mbrtowc.c b/wcsmbs/mbrtowc.c
index 1dcaf968ea..837b42f1f1 100644
--- a/wcsmbs/mbrtowc.c
+++ b/wcsmbs/mbrtowc.c
@@ -45,6 +45,8 @@ __mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
   /* Tell where we want the result.  */
   data.outbuf = outbuf;
   data.outbufend = outbuf + sizeof (wchar_t);
+  data.invocation_counter = 0;
+  data.internal_use = 1;
   data.is_last = 1;
   data.statep = ps ?: &state;
 
diff --git a/wcsmbs/mbsnrtowcs.c b/wcsmbs/mbsnrtowcs.c
index a73fcd1e98..fbebc8de4c 100644
--- a/wcsmbs/mbsnrtowcs.c
+++ b/wcsmbs/mbsnrtowcs.c
@@ -50,6 +50,8 @@ __mbsnrtowcs (dst, src, nmc, len, ps)
   int status;
 
   /* Tell where we want the result.  */
+  data.invocation_counter = 0;
+  data.internal_use = 1;
   data.is_last = 1;
   data.statep = ps ?: &state;
 
diff --git a/wcsmbs/mbsrtowcs.c b/wcsmbs/mbsrtowcs.c
index bad27bab98..1993e2e702 100644
--- a/wcsmbs/mbsrtowcs.c
+++ b/wcsmbs/mbsrtowcs.c
@@ -46,6 +46,8 @@ __mbsrtowcs (dst, src, len, ps)
   int status;
 
   /* Tell where we want the result.  */
+  data.invocation_counter = 0;
+  data.internal_use = 1;
   data.is_last = 1;
   data.statep = ps ?: &state;
 
diff --git a/wcsmbs/wcrtomb.c b/wcsmbs/wcrtomb.c
index 6fd33e06b3..9f3c303e2a 100644
--- a/wcsmbs/wcrtomb.c
+++ b/wcsmbs/wcrtomb.c
@@ -45,6 +45,8 @@ __wcrtomb (char *s, wchar_t wc, mbstate_t *ps)
   /* Tell where we want the result.  */
   data.outbuf = s;
   data.outbufend = s + MB_CUR_MAX;
+  data.invocation_counter = 0;
+  data.internal_use = 1;
   data.is_last = 1;
   data.statep = ps ?: &state;
 
diff --git a/wcsmbs/wcsnrtombs.c b/wcsmbs/wcsnrtombs.c
index eb4a96daad..ab74e30927 100644
--- a/wcsmbs/wcsnrtombs.c
+++ b/wcsmbs/wcsnrtombs.c
@@ -49,6 +49,8 @@ __wcsnrtombs (dst, src, nwc, len, ps)
   size_t result = 0;
 
   /* Tell where we want the result.  */
+  data.invocation_counter = 0;
+  data.internal_use = 1;
   data.is_last = 1;
   data.statep = ps ?: &state;
 
diff --git a/wcsmbs/wcsrtombs.c b/wcsmbs/wcsrtombs.c
index 27b1df8f6d..b40d14318a 100644
--- a/wcsmbs/wcsrtombs.c
+++ b/wcsmbs/wcsrtombs.c
@@ -45,6 +45,8 @@ __wcsrtombs (dst, src, len, ps)
   size_t result = 0;
 
   /* Tell where we want the result.  */
+  data.invocation_counter = 0;
+  data.internal_use = 1;
   data.is_last = 1;
   data.statep = ps ?: &state;
 
diff --git a/wcsmbs/wctob.c b/wcsmbs/wctob.c
index 7376538ad9..8cbcbe41c3 100644
--- a/wcsmbs/wctob.c
+++ b/wcsmbs/wctob.c
@@ -38,6 +38,8 @@ wctob (c)
   /* Tell where we want the result.  */
   data.outbuf = buf;
   data.outbufend = buf + MB_LEN_MAX;
+  data.invocation_counter = 0;
+  data.internal_use = 1;
   data.is_last = 1;
   data.statep = &data.__state;