1 /* Copyright (c) 2000, 2021, Oracle and/or its affiliates.
2 
3    This library is free software; you can redistribute it and/or
4    modify it under the terms of the GNU Library General Public
5    License as published by the Free Software Foundation; version 2
6    of the License.
7 
8    This library is distributed in the hope that it will be useful,
9    but WITHOUT ANY WARRANTY; without even the implied warranty of
10    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11    Library General Public License for more details.
12 
13    You should have received a copy of the GNU Library General Public
14    License along with this library; if not, write to the Free Software
15    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA */
16 
17 /* UTF8 according RFC 2279 */
18 /* Written by Alexander Barkov <bar@udm.net> */
19 
20 #include <my_global.h>
21 #include "m_string.h"
22 #include "m_ctype.h"
23 #include <errno.h>
24 #include "my_uctype.h"
25 
26 #ifndef EILSEQ
27 #define EILSEQ ENOENT
28 #endif
29 
30 #define IS_CONTINUATION_BYTE(c) (((c) ^ 0x80) < 0x40)
31 
32 #define MY_UTF8MB3_GENERAL_CI MY_UTF8MB3 "_general_ci"
33 #define MY_UTF8MB3_GENERAL_CS MY_UTF8MB3 "_general_cs"
34 #define MY_UTF8MB3_BIN        MY_UTF8MB3 "_bin"
35 #define MY_UTF8MB4_GENERAL_CI MY_UTF8MB4 "_general_ci"
36 #define MY_UTF8MB4_GENERAL_CS MY_UTF8MB4 "_general_cs"
37 #define MY_UTF8MB4_BIN        MY_UTF8MB4 "_bin"
38 
39 
40 
41 #ifndef HAVE_CHARSET_utf8
42 #define HAVE_CHARSET_utf8
43 #endif
44 
45 
46 static inline
my_valid_mbcharlen_utf8mb3(const uchar * s,const uchar * e)47 int my_valid_mbcharlen_utf8mb3(const uchar *s, const uchar *e)
48 {
49   uchar c;
50 
51   assert(s < e);
52   c= s[0];
53   if (c < 0x80)
54     return 1;
55 
56   if (c < 0xc2)
57     return MY_CS_ILSEQ;
58 
59   if (c < 0xe0)
60   {
61     if (s+2 > e) /* We need 2 characters */
62       return MY_CS_TOOSMALL2;
63 
64     if (!(IS_CONTINUATION_BYTE(s[1])))
65       return MY_CS_ILSEQ;
66 
67     return 2;
68   }
69 
70   assert(c < 0xf0);
71   if (s+3 > e) /* We need 3 characters */
72     return MY_CS_TOOSMALL3;
73 
74   if (!(IS_CONTINUATION_BYTE(s[1]) && IS_CONTINUATION_BYTE(s[2]) &&
75           (c >= 0xe1 || s[1] >= 0xa0)))
76     return MY_CS_ILSEQ;
77 
78   return 3;
79 }
80 
81 static const MY_UNICASE_CHARACTER plane00[]={
82   {0x0000,0x0000,0x0000},  {0x0001,0x0001,0x0001},
83   {0x0002,0x0002,0x0002},  {0x0003,0x0003,0x0003},
84   {0x0004,0x0004,0x0004},  {0x0005,0x0005,0x0005},
85   {0x0006,0x0006,0x0006},  {0x0007,0x0007,0x0007},
86   {0x0008,0x0008,0x0008},  {0x0009,0x0009,0x0009},
87   {0x000A,0x000A,0x000A},  {0x000B,0x000B,0x000B},
88   {0x000C,0x000C,0x000C},  {0x000D,0x000D,0x000D},
89   {0x000E,0x000E,0x000E},  {0x000F,0x000F,0x000F},
90   {0x0010,0x0010,0x0010},  {0x0011,0x0011,0x0011},
91   {0x0012,0x0012,0x0012},  {0x0013,0x0013,0x0013},
92   {0x0014,0x0014,0x0014},  {0x0015,0x0015,0x0015},
93   {0x0016,0x0016,0x0016},  {0x0017,0x0017,0x0017},
94   {0x0018,0x0018,0x0018},  {0x0019,0x0019,0x0019},
95   {0x001A,0x001A,0x001A},  {0x001B,0x001B,0x001B},
96   {0x001C,0x001C,0x001C},  {0x001D,0x001D,0x001D},
97   {0x001E,0x001E,0x001E},  {0x001F,0x001F,0x001F},
98   {0x0020,0x0020,0x0020},  {0x0021,0x0021,0x0021},
99   {0x0022,0x0022,0x0022},  {0x0023,0x0023,0x0023},
100   {0x0024,0x0024,0x0024},  {0x0025,0x0025,0x0025},
101   {0x0026,0x0026,0x0026},  {0x0027,0x0027,0x0027},
102   {0x0028,0x0028,0x0028},  {0x0029,0x0029,0x0029},
103   {0x002A,0x002A,0x002A},  {0x002B,0x002B,0x002B},
104   {0x002C,0x002C,0x002C},  {0x002D,0x002D,0x002D},
105   {0x002E,0x002E,0x002E},  {0x002F,0x002F,0x002F},
106   {0x0030,0x0030,0x0030},  {0x0031,0x0031,0x0031},
107   {0x0032,0x0032,0x0032},  {0x0033,0x0033,0x0033},
108   {0x0034,0x0034,0x0034},  {0x0035,0x0035,0x0035},
109   {0x0036,0x0036,0x0036},  {0x0037,0x0037,0x0037},
110   {0x0038,0x0038,0x0038},  {0x0039,0x0039,0x0039},
111   {0x003A,0x003A,0x003A},  {0x003B,0x003B,0x003B},
112   {0x003C,0x003C,0x003C},  {0x003D,0x003D,0x003D},
113   {0x003E,0x003E,0x003E},  {0x003F,0x003F,0x003F},
114   {0x0040,0x0040,0x0040},  {0x0041,0x0061,0x0041},
115   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
116   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
117   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
118   {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049},
119   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
120   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
121   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
122   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
123   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
124   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
125   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
126   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
127   {0x005A,0x007A,0x005A},  {0x005B,0x005B,0x005B},
128   {0x005C,0x005C,0x005C},  {0x005D,0x005D,0x005D},
129   {0x005E,0x005E,0x005E},  {0x005F,0x005F,0x005F},
130   {0x0060,0x0060,0x0060},  {0x0041,0x0061,0x0041},
131   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
132   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
133   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
134   {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049},
135   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
136   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
137   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
138   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
139   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
140   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
141   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
142   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
143   {0x005A,0x007A,0x005A},  {0x007B,0x007B,0x007B},
144   {0x007C,0x007C,0x007C},  {0x007D,0x007D,0x007D},
145   {0x007E,0x007E,0x007E},  {0x007F,0x007F,0x007F},
146   {0x0080,0x0080,0x0080},  {0x0081,0x0081,0x0081},
147   {0x0082,0x0082,0x0082},  {0x0083,0x0083,0x0083},
148   {0x0084,0x0084,0x0084},  {0x0085,0x0085,0x0085},
149   {0x0086,0x0086,0x0086},  {0x0087,0x0087,0x0087},
150   {0x0088,0x0088,0x0088},  {0x0089,0x0089,0x0089},
151   {0x008A,0x008A,0x008A},  {0x008B,0x008B,0x008B},
152   {0x008C,0x008C,0x008C},  {0x008D,0x008D,0x008D},
153   {0x008E,0x008E,0x008E},  {0x008F,0x008F,0x008F},
154   {0x0090,0x0090,0x0090},  {0x0091,0x0091,0x0091},
155   {0x0092,0x0092,0x0092},  {0x0093,0x0093,0x0093},
156   {0x0094,0x0094,0x0094},  {0x0095,0x0095,0x0095},
157   {0x0096,0x0096,0x0096},  {0x0097,0x0097,0x0097},
158   {0x0098,0x0098,0x0098},  {0x0099,0x0099,0x0099},
159   {0x009A,0x009A,0x009A},  {0x009B,0x009B,0x009B},
160   {0x009C,0x009C,0x009C},  {0x009D,0x009D,0x009D},
161   {0x009E,0x009E,0x009E},  {0x009F,0x009F,0x009F},
162   {0x00A0,0x00A0,0x00A0},  {0x00A1,0x00A1,0x00A1},
163   {0x00A2,0x00A2,0x00A2},  {0x00A3,0x00A3,0x00A3},
164   {0x00A4,0x00A4,0x00A4},  {0x00A5,0x00A5,0x00A5},
165   {0x00A6,0x00A6,0x00A6},  {0x00A7,0x00A7,0x00A7},
166   {0x00A8,0x00A8,0x00A8},  {0x00A9,0x00A9,0x00A9},
167   {0x00AA,0x00AA,0x00AA},  {0x00AB,0x00AB,0x00AB},
168   {0x00AC,0x00AC,0x00AC},  {0x00AD,0x00AD,0x00AD},
169   {0x00AE,0x00AE,0x00AE},  {0x00AF,0x00AF,0x00AF},
170   {0x00B0,0x00B0,0x00B0},  {0x00B1,0x00B1,0x00B1},
171   {0x00B2,0x00B2,0x00B2},  {0x00B3,0x00B3,0x00B3},
172   {0x00B4,0x00B4,0x00B4},  {0x039C,0x00B5,0x039C},
173   {0x00B6,0x00B6,0x00B6},  {0x00B7,0x00B7,0x00B7},
174   {0x00B8,0x00B8,0x00B8},  {0x00B9,0x00B9,0x00B9},
175   {0x00BA,0x00BA,0x00BA},  {0x00BB,0x00BB,0x00BB},
176   {0x00BC,0x00BC,0x00BC},  {0x00BD,0x00BD,0x00BD},
177   {0x00BE,0x00BE,0x00BE},  {0x00BF,0x00BF,0x00BF},
178   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
179   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
180   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
181   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
182   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
183   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
184   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
185   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
186   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
187   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
188   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
189   {0x00D6,0x00F6,0x004F},  {0x00D7,0x00D7,0x00D7},
190   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
191   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
192   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
193   {0x00DE,0x00FE,0x00DE},  {0x00DF,0x00DF,0x0053},
194   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
195   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
196   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
197   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
198   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
199   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
200   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
201   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
202   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
203   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
204   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
205   {0x00D6,0x00F6,0x004F},  {0x00F7,0x00F7,0x00F7},
206   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
207   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
208   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
209   {0x00DE,0x00FE,0x00DE},  {0x0178,0x00FF,0x0059}
210 };
211 
212 
213 /*
214   Almost similar to plane00, but maps sorting order
215   for U+00DF to 0x00DF instead of 0x0053.
216 */
217 static const MY_UNICASE_CHARACTER plane00_mysql500[]={
218   {0x0000,0x0000,0x0000},  {0x0001,0x0001,0x0001},
219   {0x0002,0x0002,0x0002},  {0x0003,0x0003,0x0003},
220   {0x0004,0x0004,0x0004},  {0x0005,0x0005,0x0005},
221   {0x0006,0x0006,0x0006},  {0x0007,0x0007,0x0007},
222   {0x0008,0x0008,0x0008},  {0x0009,0x0009,0x0009},
223   {0x000A,0x000A,0x000A},  {0x000B,0x000B,0x000B},
224   {0x000C,0x000C,0x000C},  {0x000D,0x000D,0x000D},
225   {0x000E,0x000E,0x000E},  {0x000F,0x000F,0x000F},
226   {0x0010,0x0010,0x0010},  {0x0011,0x0011,0x0011},
227   {0x0012,0x0012,0x0012},  {0x0013,0x0013,0x0013},
228   {0x0014,0x0014,0x0014},  {0x0015,0x0015,0x0015},
229   {0x0016,0x0016,0x0016},  {0x0017,0x0017,0x0017},
230   {0x0018,0x0018,0x0018},  {0x0019,0x0019,0x0019},
231   {0x001A,0x001A,0x001A},  {0x001B,0x001B,0x001B},
232   {0x001C,0x001C,0x001C},  {0x001D,0x001D,0x001D},
233   {0x001E,0x001E,0x001E},  {0x001F,0x001F,0x001F},
234   {0x0020,0x0020,0x0020},  {0x0021,0x0021,0x0021},
235   {0x0022,0x0022,0x0022},  {0x0023,0x0023,0x0023},
236   {0x0024,0x0024,0x0024},  {0x0025,0x0025,0x0025},
237   {0x0026,0x0026,0x0026},  {0x0027,0x0027,0x0027},
238   {0x0028,0x0028,0x0028},  {0x0029,0x0029,0x0029},
239   {0x002A,0x002A,0x002A},  {0x002B,0x002B,0x002B},
240   {0x002C,0x002C,0x002C},  {0x002D,0x002D,0x002D},
241   {0x002E,0x002E,0x002E},  {0x002F,0x002F,0x002F},
242   {0x0030,0x0030,0x0030},  {0x0031,0x0031,0x0031},
243   {0x0032,0x0032,0x0032},  {0x0033,0x0033,0x0033},
244   {0x0034,0x0034,0x0034},  {0x0035,0x0035,0x0035},
245   {0x0036,0x0036,0x0036},  {0x0037,0x0037,0x0037},
246   {0x0038,0x0038,0x0038},  {0x0039,0x0039,0x0039},
247   {0x003A,0x003A,0x003A},  {0x003B,0x003B,0x003B},
248   {0x003C,0x003C,0x003C},  {0x003D,0x003D,0x003D},
249   {0x003E,0x003E,0x003E},  {0x003F,0x003F,0x003F},
250   {0x0040,0x0040,0x0040},  {0x0041,0x0061,0x0041},
251   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
252   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
253   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
254   {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049},
255   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
256   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
257   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
258   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
259   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
260   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
261   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
262   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
263   {0x005A,0x007A,0x005A},  {0x005B,0x005B,0x005B},
264   {0x005C,0x005C,0x005C},  {0x005D,0x005D,0x005D},
265   {0x005E,0x005E,0x005E},  {0x005F,0x005F,0x005F},
266   {0x0060,0x0060,0x0060},  {0x0041,0x0061,0x0041},
267   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
268   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
269   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
270   {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049},
271   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
272   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
273   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
274   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
275   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
276   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
277   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
278   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
279   {0x005A,0x007A,0x005A},  {0x007B,0x007B,0x007B},
280   {0x007C,0x007C,0x007C},  {0x007D,0x007D,0x007D},
281   {0x007E,0x007E,0x007E},  {0x007F,0x007F,0x007F},
282   {0x0080,0x0080,0x0080},  {0x0081,0x0081,0x0081},
283   {0x0082,0x0082,0x0082},  {0x0083,0x0083,0x0083},
284   {0x0084,0x0084,0x0084},  {0x0085,0x0085,0x0085},
285   {0x0086,0x0086,0x0086},  {0x0087,0x0087,0x0087},
286   {0x0088,0x0088,0x0088},  {0x0089,0x0089,0x0089},
287   {0x008A,0x008A,0x008A},  {0x008B,0x008B,0x008B},
288   {0x008C,0x008C,0x008C},  {0x008D,0x008D,0x008D},
289   {0x008E,0x008E,0x008E},  {0x008F,0x008F,0x008F},
290   {0x0090,0x0090,0x0090},  {0x0091,0x0091,0x0091},
291   {0x0092,0x0092,0x0092},  {0x0093,0x0093,0x0093},
292   {0x0094,0x0094,0x0094},  {0x0095,0x0095,0x0095},
293   {0x0096,0x0096,0x0096},  {0x0097,0x0097,0x0097},
294   {0x0098,0x0098,0x0098},  {0x0099,0x0099,0x0099},
295   {0x009A,0x009A,0x009A},  {0x009B,0x009B,0x009B},
296   {0x009C,0x009C,0x009C},  {0x009D,0x009D,0x009D},
297   {0x009E,0x009E,0x009E},  {0x009F,0x009F,0x009F},
298   {0x00A0,0x00A0,0x00A0},  {0x00A1,0x00A1,0x00A1},
299   {0x00A2,0x00A2,0x00A2},  {0x00A3,0x00A3,0x00A3},
300   {0x00A4,0x00A4,0x00A4},  {0x00A5,0x00A5,0x00A5},
301   {0x00A6,0x00A6,0x00A6},  {0x00A7,0x00A7,0x00A7},
302   {0x00A8,0x00A8,0x00A8},  {0x00A9,0x00A9,0x00A9},
303   {0x00AA,0x00AA,0x00AA},  {0x00AB,0x00AB,0x00AB},
304   {0x00AC,0x00AC,0x00AC},  {0x00AD,0x00AD,0x00AD},
305   {0x00AE,0x00AE,0x00AE},  {0x00AF,0x00AF,0x00AF},
306   {0x00B0,0x00B0,0x00B0},  {0x00B1,0x00B1,0x00B1},
307   {0x00B2,0x00B2,0x00B2},  {0x00B3,0x00B3,0x00B3},
308   {0x00B4,0x00B4,0x00B4},  {0x039C,0x00B5,0x039C},
309   {0x00B6,0x00B6,0x00B6},  {0x00B7,0x00B7,0x00B7},
310   {0x00B8,0x00B8,0x00B8},  {0x00B9,0x00B9,0x00B9},
311   {0x00BA,0x00BA,0x00BA},  {0x00BB,0x00BB,0x00BB},
312   {0x00BC,0x00BC,0x00BC},  {0x00BD,0x00BD,0x00BD},
313   {0x00BE,0x00BE,0x00BE},  {0x00BF,0x00BF,0x00BF},
314   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
315   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
316   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
317   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
318   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
319   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
320   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
321   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
322   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
323   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
324   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
325   {0x00D6,0x00F6,0x004F},  {0x00D7,0x00D7,0x00D7},
326   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
327   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
328   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
329   {0x00DE,0x00FE,0x00DE},  {0x00DF,0x00DF,0x00DF},
330   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
331   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
332   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
333   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
334   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
335   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
336   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
337   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
338   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
339   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
340   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
341   {0x00D6,0x00F6,0x004F},  {0x00F7,0x00F7,0x00F7},
342   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
343   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
344   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
345   {0x00DE,0x00FE,0x00DE},  {0x0178,0x00FF,0x0059}
346 };
347 
348 
349 static const MY_UNICASE_CHARACTER plane01[]={
350   {0x0100,0x0101,0x0041},  {0x0100,0x0101,0x0041},
351   {0x0102,0x0103,0x0041},  {0x0102,0x0103,0x0041},
352   {0x0104,0x0105,0x0041},  {0x0104,0x0105,0x0041},
353   {0x0106,0x0107,0x0043},  {0x0106,0x0107,0x0043},
354   {0x0108,0x0109,0x0043},  {0x0108,0x0109,0x0043},
355   {0x010A,0x010B,0x0043},  {0x010A,0x010B,0x0043},
356   {0x010C,0x010D,0x0043},  {0x010C,0x010D,0x0043},
357   {0x010E,0x010F,0x0044},  {0x010E,0x010F,0x0044},
358   {0x0110,0x0111,0x0110},  {0x0110,0x0111,0x0110},
359   {0x0112,0x0113,0x0045},  {0x0112,0x0113,0x0045},
360   {0x0114,0x0115,0x0045},  {0x0114,0x0115,0x0045},
361   {0x0116,0x0117,0x0045},  {0x0116,0x0117,0x0045},
362   {0x0118,0x0119,0x0045},  {0x0118,0x0119,0x0045},
363   {0x011A,0x011B,0x0045},  {0x011A,0x011B,0x0045},
364   {0x011C,0x011D,0x0047},  {0x011C,0x011D,0x0047},
365   {0x011E,0x011F,0x0047},  {0x011E,0x011F,0x0047},
366   {0x0120,0x0121,0x0047},  {0x0120,0x0121,0x0047},
367   {0x0122,0x0123,0x0047},  {0x0122,0x0123,0x0047},
368   {0x0124,0x0125,0x0048},  {0x0124,0x0125,0x0048},
369   {0x0126,0x0127,0x0126},  {0x0126,0x0127,0x0126},
370   {0x0128,0x0129,0x0049},  {0x0128,0x0129,0x0049},
371   {0x012A,0x012B,0x0049},  {0x012A,0x012B,0x0049},
372   {0x012C,0x012D,0x0049},  {0x012C,0x012D,0x0049},
373   {0x012E,0x012F,0x0049},  {0x012E,0x012F,0x0049},
374   {0x0130,0x0069,0x0049},  {0x0049,0x0131,0x0049},
375   {0x0132,0x0133,0x0132},  {0x0132,0x0133,0x0132},
376   {0x0134,0x0135,0x004A},  {0x0134,0x0135,0x004A},
377   {0x0136,0x0137,0x004B},  {0x0136,0x0137,0x004B},
378   {0x0138,0x0138,0x0138},  {0x0139,0x013A,0x004C},
379   {0x0139,0x013A,0x004C},  {0x013B,0x013C,0x004C},
380   {0x013B,0x013C,0x004C},  {0x013D,0x013E,0x004C},
381   {0x013D,0x013E,0x004C},  {0x013F,0x0140,0x013F},
382   {0x013F,0x0140,0x013F},  {0x0141,0x0142,0x0141},
383   {0x0141,0x0142,0x0141},  {0x0143,0x0144,0x004E},
384   {0x0143,0x0144,0x004E},  {0x0145,0x0146,0x004E},
385   {0x0145,0x0146,0x004E},  {0x0147,0x0148,0x004E},
386   {0x0147,0x0148,0x004E},  {0x0149,0x0149,0x0149},
387   {0x014A,0x014B,0x014A},  {0x014A,0x014B,0x014A},
388   {0x014C,0x014D,0x004F},  {0x014C,0x014D,0x004F},
389   {0x014E,0x014F,0x004F},  {0x014E,0x014F,0x004F},
390   {0x0150,0x0151,0x004F},  {0x0150,0x0151,0x004F},
391   {0x0152,0x0153,0x0152},  {0x0152,0x0153,0x0152},
392   {0x0154,0x0155,0x0052},  {0x0154,0x0155,0x0052},
393   {0x0156,0x0157,0x0052},  {0x0156,0x0157,0x0052},
394   {0x0158,0x0159,0x0052},  {0x0158,0x0159,0x0052},
395   {0x015A,0x015B,0x0053},  {0x015A,0x015B,0x0053},
396   {0x015C,0x015D,0x0053},  {0x015C,0x015D,0x0053},
397   {0x015E,0x015F,0x0053},  {0x015E,0x015F,0x0053},
398   {0x0160,0x0161,0x0053},  {0x0160,0x0161,0x0053},
399   {0x0162,0x0163,0x0054},  {0x0162,0x0163,0x0054},
400   {0x0164,0x0165,0x0054},  {0x0164,0x0165,0x0054},
401   {0x0166,0x0167,0x0166},  {0x0166,0x0167,0x0166},
402   {0x0168,0x0169,0x0055},  {0x0168,0x0169,0x0055},
403   {0x016A,0x016B,0x0055},  {0x016A,0x016B,0x0055},
404   {0x016C,0x016D,0x0055},  {0x016C,0x016D,0x0055},
405   {0x016E,0x016F,0x0055},  {0x016E,0x016F,0x0055},
406   {0x0170,0x0171,0x0055},  {0x0170,0x0171,0x0055},
407   {0x0172,0x0173,0x0055},  {0x0172,0x0173,0x0055},
408   {0x0174,0x0175,0x0057},  {0x0174,0x0175,0x0057},
409   {0x0176,0x0177,0x0059},  {0x0176,0x0177,0x0059},
410   {0x0178,0x00FF,0x0059},  {0x0179,0x017A,0x005A},
411   {0x0179,0x017A,0x005A},  {0x017B,0x017C,0x005A},
412   {0x017B,0x017C,0x005A},  {0x017D,0x017E,0x005A},
413   {0x017D,0x017E,0x005A},  {0x0053,0x017F,0x0053},
414   {0x0180,0x0180,0x0180},  {0x0181,0x0253,0x0181},
415   {0x0182,0x0183,0x0182},  {0x0182,0x0183,0x0182},
416   {0x0184,0x0185,0x0184},  {0x0184,0x0185,0x0184},
417   {0x0186,0x0254,0x0186},  {0x0187,0x0188,0x0187},
418   {0x0187,0x0188,0x0187},  {0x0189,0x0256,0x0189},
419   {0x018A,0x0257,0x018A},  {0x018B,0x018C,0x018B},
420   {0x018B,0x018C,0x018B},  {0x018D,0x018D,0x018D},
421   {0x018E,0x01DD,0x018E},  {0x018F,0x0259,0x018F},
422   {0x0190,0x025B,0x0190},  {0x0191,0x0192,0x0191},
423   {0x0191,0x0192,0x0191},  {0x0193,0x0260,0x0193},
424   {0x0194,0x0263,0x0194},  {0x01F6,0x0195,0x01F6},
425   {0x0196,0x0269,0x0196},  {0x0197,0x0268,0x0197},
426   {0x0198,0x0199,0x0198},  {0x0198,0x0199,0x0198},
427   {0x019A,0x019A,0x019A},  {0x019B,0x019B,0x019B},
428   {0x019C,0x026F,0x019C},  {0x019D,0x0272,0x019D},
429   {0x019E,0x019E,0x019E},  {0x019F,0x0275,0x019F},
430   {0x01A0,0x01A1,0x004F},  {0x01A0,0x01A1,0x004F},
431   {0x01A2,0x01A3,0x01A2},  {0x01A2,0x01A3,0x01A2},
432   {0x01A4,0x01A5,0x01A4},  {0x01A4,0x01A5,0x01A4},
433   {0x01A6,0x0280,0x01A6},  {0x01A7,0x01A8,0x01A7},
434   {0x01A7,0x01A8,0x01A7},  {0x01A9,0x0283,0x01A9},
435   {0x01AA,0x01AA,0x01AA},  {0x01AB,0x01AB,0x01AB},
436   {0x01AC,0x01AD,0x01AC},  {0x01AC,0x01AD,0x01AC},
437   {0x01AE,0x0288,0x01AE},  {0x01AF,0x01B0,0x0055},
438   {0x01AF,0x01B0,0x0055},  {0x01B1,0x028A,0x01B1},
439   {0x01B2,0x028B,0x01B2},  {0x01B3,0x01B4,0x01B3},
440   {0x01B3,0x01B4,0x01B3},  {0x01B5,0x01B6,0x01B5},
441   {0x01B5,0x01B6,0x01B5},  {0x01B7,0x0292,0x01B7},
442   {0x01B8,0x01B9,0x01B8},  {0x01B8,0x01B9,0x01B8},
443   {0x01BA,0x01BA,0x01BA},  {0x01BB,0x01BB,0x01BB},
444   {0x01BC,0x01BD,0x01BC},  {0x01BC,0x01BD,0x01BC},
445   {0x01BE,0x01BE,0x01BE},  {0x01F7,0x01BF,0x01F7},
446   {0x01C0,0x01C0,0x01C0},  {0x01C1,0x01C1,0x01C1},
447   {0x01C2,0x01C2,0x01C2},  {0x01C3,0x01C3,0x01C3},
448   {0x01C4,0x01C6,0x01C4},  {0x01C4,0x01C6,0x01C4},
449   {0x01C4,0x01C6,0x01C4},  {0x01C7,0x01C9,0x01C7},
450   {0x01C7,0x01C9,0x01C7},  {0x01C7,0x01C9,0x01C7},
451   {0x01CA,0x01CC,0x01CA},  {0x01CA,0x01CC,0x01CA},
452   {0x01CA,0x01CC,0x01CA},  {0x01CD,0x01CE,0x0041},
453   {0x01CD,0x01CE,0x0041},  {0x01CF,0x01D0,0x0049},
454   {0x01CF,0x01D0,0x0049},  {0x01D1,0x01D2,0x004F},
455   {0x01D1,0x01D2,0x004F},  {0x01D3,0x01D4,0x0055},
456   {0x01D3,0x01D4,0x0055},  {0x01D5,0x01D6,0x0055},
457   {0x01D5,0x01D6,0x0055},  {0x01D7,0x01D8,0x0055},
458   {0x01D7,0x01D8,0x0055},  {0x01D9,0x01DA,0x0055},
459   {0x01D9,0x01DA,0x0055},  {0x01DB,0x01DC,0x0055},
460   {0x01DB,0x01DC,0x0055},  {0x018E,0x01DD,0x018E},
461   {0x01DE,0x01DF,0x0041},  {0x01DE,0x01DF,0x0041},
462   {0x01E0,0x01E1,0x0041},  {0x01E0,0x01E1,0x0041},
463   {0x01E2,0x01E3,0x00C6},  {0x01E2,0x01E3,0x00C6},
464   {0x01E4,0x01E5,0x01E4},  {0x01E4,0x01E5,0x01E4},
465   {0x01E6,0x01E7,0x0047},  {0x01E6,0x01E7,0x0047},
466   {0x01E8,0x01E9,0x004B},  {0x01E8,0x01E9,0x004B},
467   {0x01EA,0x01EB,0x004F},  {0x01EA,0x01EB,0x004F},
468   {0x01EC,0x01ED,0x004F},  {0x01EC,0x01ED,0x004F},
469   {0x01EE,0x01EF,0x01B7},  {0x01EE,0x01EF,0x01B7},
470   {0x01F0,0x01F0,0x004A},  {0x01F1,0x01F3,0x01F1},
471   {0x01F1,0x01F3,0x01F1},  {0x01F1,0x01F3,0x01F1},
472   {0x01F4,0x01F5,0x0047},  {0x01F4,0x01F5,0x0047},
473   {0x01F6,0x0195,0x01F6},  {0x01F7,0x01BF,0x01F7},
474   {0x01F8,0x01F9,0x004E},  {0x01F8,0x01F9,0x004E},
475   {0x01FA,0x01FB,0x0041},  {0x01FA,0x01FB,0x0041},
476   {0x01FC,0x01FD,0x00C6},  {0x01FC,0x01FD,0x00C6},
477   {0x01FE,0x01FF,0x00D8},  {0x01FE,0x01FF,0x00D8}
478 };
479 
480 static const MY_UNICASE_CHARACTER plane02[]={
481   {0x0200,0x0201,0x0041},  {0x0200,0x0201,0x0041},
482   {0x0202,0x0203,0x0041},  {0x0202,0x0203,0x0041},
483   {0x0204,0x0205,0x0045},  {0x0204,0x0205,0x0045},
484   {0x0206,0x0207,0x0045},  {0x0206,0x0207,0x0045},
485   {0x0208,0x0209,0x0049},  {0x0208,0x0209,0x0049},
486   {0x020A,0x020B,0x0049},  {0x020A,0x020B,0x0049},
487   {0x020C,0x020D,0x004F},  {0x020C,0x020D,0x004F},
488   {0x020E,0x020F,0x004F},  {0x020E,0x020F,0x004F},
489   {0x0210,0x0211,0x0052},  {0x0210,0x0211,0x0052},
490   {0x0212,0x0213,0x0052},  {0x0212,0x0213,0x0052},
491   {0x0214,0x0215,0x0055},  {0x0214,0x0215,0x0055},
492   {0x0216,0x0217,0x0055},  {0x0216,0x0217,0x0055},
493   {0x0218,0x0219,0x0053},  {0x0218,0x0219,0x0053},
494   {0x021A,0x021B,0x0054},  {0x021A,0x021B,0x0054},
495   {0x021C,0x021D,0x021C},  {0x021C,0x021D,0x021C},
496   {0x021E,0x021F,0x0048},  {0x021E,0x021F,0x0048},
497   {0x0220,0x0220,0x0220},  {0x0221,0x0221,0x0221},
498   {0x0222,0x0223,0x0222},  {0x0222,0x0223,0x0222},
499   {0x0224,0x0225,0x0224},  {0x0224,0x0225,0x0224},
500   {0x0226,0x0227,0x0041},  {0x0226,0x0227,0x0041},
501   {0x0228,0x0229,0x0045},  {0x0228,0x0229,0x0045},
502   {0x022A,0x022B,0x004F},  {0x022A,0x022B,0x004F},
503   {0x022C,0x022D,0x004F},  {0x022C,0x022D,0x004F},
504   {0x022E,0x022F,0x004F},  {0x022E,0x022F,0x004F},
505   {0x0230,0x0231,0x004F},  {0x0230,0x0231,0x004F},
506   {0x0232,0x0233,0x0059},  {0x0232,0x0233,0x0059},
507   {0x0234,0x0234,0x0234},  {0x0235,0x0235,0x0235},
508   {0x0236,0x0236,0x0236},  {0x0237,0x0237,0x0237},
509   {0x0238,0x0238,0x0238},  {0x0239,0x0239,0x0239},
510   {0x023A,0x023A,0x023A},  {0x023B,0x023B,0x023B},
511   {0x023C,0x023C,0x023C},  {0x023D,0x023D,0x023D},
512   {0x023E,0x023E,0x023E},  {0x023F,0x023F,0x023F},
513   {0x0240,0x0240,0x0240},  {0x0241,0x0241,0x0241},
514   {0x0242,0x0242,0x0242},  {0x0243,0x0243,0x0243},
515   {0x0244,0x0244,0x0244},  {0x0245,0x0245,0x0245},
516   {0x0246,0x0246,0x0246},  {0x0247,0x0247,0x0247},
517   {0x0248,0x0248,0x0248},  {0x0249,0x0249,0x0249},
518   {0x024A,0x024A,0x024A},  {0x024B,0x024B,0x024B},
519   {0x024C,0x024C,0x024C},  {0x024D,0x024D,0x024D},
520   {0x024E,0x024E,0x024E},  {0x024F,0x024F,0x024F},
521   {0x0250,0x0250,0x0250},  {0x0251,0x0251,0x0251},
522   {0x0252,0x0252,0x0252},  {0x0181,0x0253,0x0181},
523   {0x0186,0x0254,0x0186},  {0x0255,0x0255,0x0255},
524   {0x0189,0x0256,0x0189},  {0x018A,0x0257,0x018A},
525   {0x0258,0x0258,0x0258},  {0x018F,0x0259,0x018F},
526   {0x025A,0x025A,0x025A},  {0x0190,0x025B,0x0190},
527   {0x025C,0x025C,0x025C},  {0x025D,0x025D,0x025D},
528   {0x025E,0x025E,0x025E},  {0x025F,0x025F,0x025F},
529   {0x0193,0x0260,0x0193},  {0x0261,0x0261,0x0261},
530   {0x0262,0x0262,0x0262},  {0x0194,0x0263,0x0194},
531   {0x0264,0x0264,0x0264},  {0x0265,0x0265,0x0265},
532   {0x0266,0x0266,0x0266},  {0x0267,0x0267,0x0267},
533   {0x0197,0x0268,0x0197},  {0x0196,0x0269,0x0196},
534   {0x026A,0x026A,0x026A},  {0x026B,0x026B,0x026B},
535   {0x026C,0x026C,0x026C},  {0x026D,0x026D,0x026D},
536   {0x026E,0x026E,0x026E},  {0x019C,0x026F,0x019C},
537   {0x0270,0x0270,0x0270},  {0x0271,0x0271,0x0271},
538   {0x019D,0x0272,0x019D},  {0x0273,0x0273,0x0273},
539   {0x0274,0x0274,0x0274},  {0x019F,0x0275,0x019F},
540   {0x0276,0x0276,0x0276},  {0x0277,0x0277,0x0277},
541   {0x0278,0x0278,0x0278},  {0x0279,0x0279,0x0279},
542   {0x027A,0x027A,0x027A},  {0x027B,0x027B,0x027B},
543   {0x027C,0x027C,0x027C},  {0x027D,0x027D,0x027D},
544   {0x027E,0x027E,0x027E},  {0x027F,0x027F,0x027F},
545   {0x01A6,0x0280,0x01A6},  {0x0281,0x0281,0x0281},
546   {0x0282,0x0282,0x0282},  {0x01A9,0x0283,0x01A9},
547   {0x0284,0x0284,0x0284},  {0x0285,0x0285,0x0285},
548   {0x0286,0x0286,0x0286},  {0x0287,0x0287,0x0287},
549   {0x01AE,0x0288,0x01AE},  {0x0289,0x0289,0x0289},
550   {0x01B1,0x028A,0x01B1},  {0x01B2,0x028B,0x01B2},
551   {0x028C,0x028C,0x028C},  {0x028D,0x028D,0x028D},
552   {0x028E,0x028E,0x028E},  {0x028F,0x028F,0x028F},
553   {0x0290,0x0290,0x0290},  {0x0291,0x0291,0x0291},
554   {0x01B7,0x0292,0x01B7},  {0x0293,0x0293,0x0293},
555   {0x0294,0x0294,0x0294},  {0x0295,0x0295,0x0295},
556   {0x0296,0x0296,0x0296},  {0x0297,0x0297,0x0297},
557   {0x0298,0x0298,0x0298},  {0x0299,0x0299,0x0299},
558   {0x029A,0x029A,0x029A},  {0x029B,0x029B,0x029B},
559   {0x029C,0x029C,0x029C},  {0x029D,0x029D,0x029D},
560   {0x029E,0x029E,0x029E},  {0x029F,0x029F,0x029F},
561   {0x02A0,0x02A0,0x02A0},  {0x02A1,0x02A1,0x02A1},
562   {0x02A2,0x02A2,0x02A2},  {0x02A3,0x02A3,0x02A3},
563   {0x02A4,0x02A4,0x02A4},  {0x02A5,0x02A5,0x02A5},
564   {0x02A6,0x02A6,0x02A6},  {0x02A7,0x02A7,0x02A7},
565   {0x02A8,0x02A8,0x02A8},  {0x02A9,0x02A9,0x02A9},
566   {0x02AA,0x02AA,0x02AA},  {0x02AB,0x02AB,0x02AB},
567   {0x02AC,0x02AC,0x02AC},  {0x02AD,0x02AD,0x02AD},
568   {0x02AE,0x02AE,0x02AE},  {0x02AF,0x02AF,0x02AF},
569   {0x02B0,0x02B0,0x02B0},  {0x02B1,0x02B1,0x02B1},
570   {0x02B2,0x02B2,0x02B2},  {0x02B3,0x02B3,0x02B3},
571   {0x02B4,0x02B4,0x02B4},  {0x02B5,0x02B5,0x02B5},
572   {0x02B6,0x02B6,0x02B6},  {0x02B7,0x02B7,0x02B7},
573   {0x02B8,0x02B8,0x02B8},  {0x02B9,0x02B9,0x02B9},
574   {0x02BA,0x02BA,0x02BA},  {0x02BB,0x02BB,0x02BB},
575   {0x02BC,0x02BC,0x02BC},  {0x02BD,0x02BD,0x02BD},
576   {0x02BE,0x02BE,0x02BE},  {0x02BF,0x02BF,0x02BF},
577   {0x02C0,0x02C0,0x02C0},  {0x02C1,0x02C1,0x02C1},
578   {0x02C2,0x02C2,0x02C2},  {0x02C3,0x02C3,0x02C3},
579   {0x02C4,0x02C4,0x02C4},  {0x02C5,0x02C5,0x02C5},
580   {0x02C6,0x02C6,0x02C6},  {0x02C7,0x02C7,0x02C7},
581   {0x02C8,0x02C8,0x02C8},  {0x02C9,0x02C9,0x02C9},
582   {0x02CA,0x02CA,0x02CA},  {0x02CB,0x02CB,0x02CB},
583   {0x02CC,0x02CC,0x02CC},  {0x02CD,0x02CD,0x02CD},
584   {0x02CE,0x02CE,0x02CE},  {0x02CF,0x02CF,0x02CF},
585   {0x02D0,0x02D0,0x02D0},  {0x02D1,0x02D1,0x02D1},
586   {0x02D2,0x02D2,0x02D2},  {0x02D3,0x02D3,0x02D3},
587   {0x02D4,0x02D4,0x02D4},  {0x02D5,0x02D5,0x02D5},
588   {0x02D6,0x02D6,0x02D6},  {0x02D7,0x02D7,0x02D7},
589   {0x02D8,0x02D8,0x02D8},  {0x02D9,0x02D9,0x02D9},
590   {0x02DA,0x02DA,0x02DA},  {0x02DB,0x02DB,0x02DB},
591   {0x02DC,0x02DC,0x02DC},  {0x02DD,0x02DD,0x02DD},
592   {0x02DE,0x02DE,0x02DE},  {0x02DF,0x02DF,0x02DF},
593   {0x02E0,0x02E0,0x02E0},  {0x02E1,0x02E1,0x02E1},
594   {0x02E2,0x02E2,0x02E2},  {0x02E3,0x02E3,0x02E3},
595   {0x02E4,0x02E4,0x02E4},  {0x02E5,0x02E5,0x02E5},
596   {0x02E6,0x02E6,0x02E6},  {0x02E7,0x02E7,0x02E7},
597   {0x02E8,0x02E8,0x02E8},  {0x02E9,0x02E9,0x02E9},
598   {0x02EA,0x02EA,0x02EA},  {0x02EB,0x02EB,0x02EB},
599   {0x02EC,0x02EC,0x02EC},  {0x02ED,0x02ED,0x02ED},
600   {0x02EE,0x02EE,0x02EE},  {0x02EF,0x02EF,0x02EF},
601   {0x02F0,0x02F0,0x02F0},  {0x02F1,0x02F1,0x02F1},
602   {0x02F2,0x02F2,0x02F2},  {0x02F3,0x02F3,0x02F3},
603   {0x02F4,0x02F4,0x02F4},  {0x02F5,0x02F5,0x02F5},
604   {0x02F6,0x02F6,0x02F6},  {0x02F7,0x02F7,0x02F7},
605   {0x02F8,0x02F8,0x02F8},  {0x02F9,0x02F9,0x02F9},
606   {0x02FA,0x02FA,0x02FA},  {0x02FB,0x02FB,0x02FB},
607   {0x02FC,0x02FC,0x02FC},  {0x02FD,0x02FD,0x02FD},
608   {0x02FE,0x02FE,0x02FE},  {0x02FF,0x02FF,0x02FF}
609 };
610 
611 static const MY_UNICASE_CHARACTER plane03[]={
612   {0x0300,0x0300,0x0300},  {0x0301,0x0301,0x0301},
613   {0x0302,0x0302,0x0302},  {0x0303,0x0303,0x0303},
614   {0x0304,0x0304,0x0304},  {0x0305,0x0305,0x0305},
615   {0x0306,0x0306,0x0306},  {0x0307,0x0307,0x0307},
616   {0x0308,0x0308,0x0308},  {0x0309,0x0309,0x0309},
617   {0x030A,0x030A,0x030A},  {0x030B,0x030B,0x030B},
618   {0x030C,0x030C,0x030C},  {0x030D,0x030D,0x030D},
619   {0x030E,0x030E,0x030E},  {0x030F,0x030F,0x030F},
620   {0x0310,0x0310,0x0310},  {0x0311,0x0311,0x0311},
621   {0x0312,0x0312,0x0312},  {0x0313,0x0313,0x0313},
622   {0x0314,0x0314,0x0314},  {0x0315,0x0315,0x0315},
623   {0x0316,0x0316,0x0316},  {0x0317,0x0317,0x0317},
624   {0x0318,0x0318,0x0318},  {0x0319,0x0319,0x0319},
625   {0x031A,0x031A,0x031A},  {0x031B,0x031B,0x031B},
626   {0x031C,0x031C,0x031C},  {0x031D,0x031D,0x031D},
627   {0x031E,0x031E,0x031E},  {0x031F,0x031F,0x031F},
628   {0x0320,0x0320,0x0320},  {0x0321,0x0321,0x0321},
629   {0x0322,0x0322,0x0322},  {0x0323,0x0323,0x0323},
630   {0x0324,0x0324,0x0324},  {0x0325,0x0325,0x0325},
631   {0x0326,0x0326,0x0326},  {0x0327,0x0327,0x0327},
632   {0x0328,0x0328,0x0328},  {0x0329,0x0329,0x0329},
633   {0x032A,0x032A,0x032A},  {0x032B,0x032B,0x032B},
634   {0x032C,0x032C,0x032C},  {0x032D,0x032D,0x032D},
635   {0x032E,0x032E,0x032E},  {0x032F,0x032F,0x032F},
636   {0x0330,0x0330,0x0330},  {0x0331,0x0331,0x0331},
637   {0x0332,0x0332,0x0332},  {0x0333,0x0333,0x0333},
638   {0x0334,0x0334,0x0334},  {0x0335,0x0335,0x0335},
639   {0x0336,0x0336,0x0336},  {0x0337,0x0337,0x0337},
640   {0x0338,0x0338,0x0338},  {0x0339,0x0339,0x0339},
641   {0x033A,0x033A,0x033A},  {0x033B,0x033B,0x033B},
642   {0x033C,0x033C,0x033C},  {0x033D,0x033D,0x033D},
643   {0x033E,0x033E,0x033E},  {0x033F,0x033F,0x033F},
644   {0x0340,0x0340,0x0340},  {0x0341,0x0341,0x0341},
645   {0x0342,0x0342,0x0342},  {0x0343,0x0343,0x0343},
646   {0x0344,0x0344,0x0344},  {0x0399,0x0345,0x0399},
647   {0x0346,0x0346,0x0346},  {0x0347,0x0347,0x0347},
648   {0x0348,0x0348,0x0348},  {0x0349,0x0349,0x0349},
649   {0x034A,0x034A,0x034A},  {0x034B,0x034B,0x034B},
650   {0x034C,0x034C,0x034C},  {0x034D,0x034D,0x034D},
651   {0x034E,0x034E,0x034E},  {0x034F,0x034F,0x034F},
652   {0x0350,0x0350,0x0350},  {0x0351,0x0351,0x0351},
653   {0x0352,0x0352,0x0352},  {0x0353,0x0353,0x0353},
654   {0x0354,0x0354,0x0354},  {0x0355,0x0355,0x0355},
655   {0x0356,0x0356,0x0356},  {0x0357,0x0357,0x0357},
656   {0x0358,0x0358,0x0358},  {0x0359,0x0359,0x0359},
657   {0x035A,0x035A,0x035A},  {0x035B,0x035B,0x035B},
658   {0x035C,0x035C,0x035C},  {0x035D,0x035D,0x035D},
659   {0x035E,0x035E,0x035E},  {0x035F,0x035F,0x035F},
660   {0x0360,0x0360,0x0360},  {0x0361,0x0361,0x0361},
661   {0x0362,0x0362,0x0362},  {0x0363,0x0363,0x0363},
662   {0x0364,0x0364,0x0364},  {0x0365,0x0365,0x0365},
663   {0x0366,0x0366,0x0366},  {0x0367,0x0367,0x0367},
664   {0x0368,0x0368,0x0368},  {0x0369,0x0369,0x0369},
665   {0x036A,0x036A,0x036A},  {0x036B,0x036B,0x036B},
666   {0x036C,0x036C,0x036C},  {0x036D,0x036D,0x036D},
667   {0x036E,0x036E,0x036E},  {0x036F,0x036F,0x036F},
668   {0x0370,0x0370,0x0370},  {0x0371,0x0371,0x0371},
669   {0x0372,0x0372,0x0372},  {0x0373,0x0373,0x0373},
670   {0x0374,0x0374,0x0374},  {0x0375,0x0375,0x0375},
671   {0x0376,0x0376,0x0376},  {0x0377,0x0377,0x0377},
672   {0x0378,0x0378,0x0378},  {0x0379,0x0379,0x0379},
673   {0x037A,0x037A,0x037A},  {0x037B,0x037B,0x037B},
674   {0x037C,0x037C,0x037C},  {0x037D,0x037D,0x037D},
675   {0x037E,0x037E,0x037E},  {0x037F,0x037F,0x037F},
676   {0x0380,0x0380,0x0380},  {0x0381,0x0381,0x0381},
677   {0x0382,0x0382,0x0382},  {0x0383,0x0383,0x0383},
678   {0x0384,0x0384,0x0384},  {0x0385,0x0385,0x0385},
679   {0x0386,0x03AC,0x0391},  {0x0387,0x0387,0x0387},
680   {0x0388,0x03AD,0x0395},  {0x0389,0x03AE,0x0397},
681   {0x038A,0x03AF,0x0399},  {0x038B,0x038B,0x038B},
682   {0x038C,0x03CC,0x039F},  {0x038D,0x038D,0x038D},
683   {0x038E,0x03CD,0x03A5},  {0x038F,0x03CE,0x03A9},
684   {0x0390,0x0390,0x0399},  {0x0391,0x03B1,0x0391},
685   {0x0392,0x03B2,0x0392},  {0x0393,0x03B3,0x0393},
686   {0x0394,0x03B4,0x0394},  {0x0395,0x03B5,0x0395},
687   {0x0396,0x03B6,0x0396},  {0x0397,0x03B7,0x0397},
688   {0x0398,0x03B8,0x0398},  {0x0399,0x03B9,0x0399},
689   {0x039A,0x03BA,0x039A},  {0x039B,0x03BB,0x039B},
690   {0x039C,0x03BC,0x039C},  {0x039D,0x03BD,0x039D},
691   {0x039E,0x03BE,0x039E},  {0x039F,0x03BF,0x039F},
692   {0x03A0,0x03C0,0x03A0},  {0x03A1,0x03C1,0x03A1},
693   {0x03A2,0x03A2,0x03A2},  {0x03A3,0x03C3,0x03A3},
694   {0x03A4,0x03C4,0x03A4},  {0x03A5,0x03C5,0x03A5},
695   {0x03A6,0x03C6,0x03A6},  {0x03A7,0x03C7,0x03A7},
696   {0x03A8,0x03C8,0x03A8},  {0x03A9,0x03C9,0x03A9},
697   {0x03AA,0x03CA,0x0399},  {0x03AB,0x03CB,0x03A5},
698   {0x0386,0x03AC,0x0391},  {0x0388,0x03AD,0x0395},
699   {0x0389,0x03AE,0x0397},  {0x038A,0x03AF,0x0399},
700   {0x03B0,0x03B0,0x03A5},  {0x0391,0x03B1,0x0391},
701   {0x0392,0x03B2,0x0392},  {0x0393,0x03B3,0x0393},
702   {0x0394,0x03B4,0x0394},  {0x0395,0x03B5,0x0395},
703   {0x0396,0x03B6,0x0396},  {0x0397,0x03B7,0x0397},
704   {0x0398,0x03B8,0x0398},  {0x0399,0x03B9,0x0399},
705   {0x039A,0x03BA,0x039A},  {0x039B,0x03BB,0x039B},
706   {0x039C,0x03BC,0x039C},  {0x039D,0x03BD,0x039D},
707   {0x039E,0x03BE,0x039E},  {0x039F,0x03BF,0x039F},
708   {0x03A0,0x03C0,0x03A0},  {0x03A1,0x03C1,0x03A1},
709   {0x03A3,0x03C2,0x03A3},  {0x03A3,0x03C3,0x03A3},
710   {0x03A4,0x03C4,0x03A4},  {0x03A5,0x03C5,0x03A5},
711   {0x03A6,0x03C6,0x03A6},  {0x03A7,0x03C7,0x03A7},
712   {0x03A8,0x03C8,0x03A8},  {0x03A9,0x03C9,0x03A9},
713   {0x03AA,0x03CA,0x0399},  {0x03AB,0x03CB,0x03A5},
714   {0x038C,0x03CC,0x039F},  {0x038E,0x03CD,0x03A5},
715   {0x038F,0x03CE,0x03A9},  {0x03CF,0x03CF,0x03CF},
716   {0x0392,0x03D0,0x0392},  {0x0398,0x03D1,0x0398},
717   {0x03D2,0x03D2,0x03D2},  {0x03D3,0x03D3,0x03D2},
718   {0x03D4,0x03D4,0x03D2},  {0x03A6,0x03D5,0x03A6},
719   {0x03A0,0x03D6,0x03A0},  {0x03D7,0x03D7,0x03D7},
720   {0x03D8,0x03D8,0x03D8},  {0x03D9,0x03D9,0x03D9},
721   {0x03DA,0x03DB,0x03DA},  {0x03DA,0x03DB,0x03DA},
722   {0x03DC,0x03DD,0x03DC},  {0x03DC,0x03DD,0x03DC},
723   {0x03DE,0x03DF,0x03DE},  {0x03DE,0x03DF,0x03DE},
724   {0x03E0,0x03E1,0x03E0},  {0x03E0,0x03E1,0x03E0},
725   {0x03E2,0x03E3,0x03E2},  {0x03E2,0x03E3,0x03E2},
726   {0x03E4,0x03E5,0x03E4},  {0x03E4,0x03E5,0x03E4},
727   {0x03E6,0x03E7,0x03E6},  {0x03E6,0x03E7,0x03E6},
728   {0x03E8,0x03E9,0x03E8},  {0x03E8,0x03E9,0x03E8},
729   {0x03EA,0x03EB,0x03EA},  {0x03EA,0x03EB,0x03EA},
730   {0x03EC,0x03ED,0x03EC},  {0x03EC,0x03ED,0x03EC},
731   {0x03EE,0x03EF,0x03EE},  {0x03EE,0x03EF,0x03EE},
732   {0x039A,0x03F0,0x039A},  {0x03A1,0x03F1,0x03A1},
733   {0x03A3,0x03F2,0x03A3},  {0x03F3,0x03F3,0x03F3},
734   {0x03F4,0x03F4,0x03F4},  {0x03F5,0x03F5,0x03F5},
735   {0x03F6,0x03F6,0x03F6},  {0x03F7,0x03F7,0x03F7},
736   {0x03F8,0x03F8,0x03F8},  {0x03F9,0x03F9,0x03F9},
737   {0x03FA,0x03FA,0x03FA},  {0x03FB,0x03FB,0x03FB},
738   {0x03FC,0x03FC,0x03FC},  {0x03FD,0x03FD,0x03FD},
739   {0x03FE,0x03FE,0x03FE},  {0x03FF,0x03FF,0x03FF}
740 };
741 
742 static const MY_UNICASE_CHARACTER plane04[]={
743   {0x0400,0x0450,0x0415},  {0x0401,0x0451,0x0415},
744   {0x0402,0x0452,0x0402},  {0x0403,0x0453,0x0413},
745   {0x0404,0x0454,0x0404},  {0x0405,0x0455,0x0405},
746   {0x0406,0x0456,0x0406},  {0x0407,0x0457,0x0406},
747   {0x0408,0x0458,0x0408},  {0x0409,0x0459,0x0409},
748   {0x040A,0x045A,0x040A},  {0x040B,0x045B,0x040B},
749   {0x040C,0x045C,0x041A},  {0x040D,0x045D,0x0418},
750   {0x040E,0x045E,0x0423},  {0x040F,0x045F,0x040F},
751   {0x0410,0x0430,0x0410},  {0x0411,0x0431,0x0411},
752   {0x0412,0x0432,0x0412},  {0x0413,0x0433,0x0413},
753   {0x0414,0x0434,0x0414},  {0x0415,0x0435,0x0415},
754   {0x0416,0x0436,0x0416},  {0x0417,0x0437,0x0417},
755   {0x0418,0x0438,0x0418},  {0x0419,0x0439,0x0419},
756   {0x041A,0x043A,0x041A},  {0x041B,0x043B,0x041B},
757   {0x041C,0x043C,0x041C},  {0x041D,0x043D,0x041D},
758   {0x041E,0x043E,0x041E},  {0x041F,0x043F,0x041F},
759   {0x0420,0x0440,0x0420},  {0x0421,0x0441,0x0421},
760   {0x0422,0x0442,0x0422},  {0x0423,0x0443,0x0423},
761   {0x0424,0x0444,0x0424},  {0x0425,0x0445,0x0425},
762   {0x0426,0x0446,0x0426},  {0x0427,0x0447,0x0427},
763   {0x0428,0x0448,0x0428},  {0x0429,0x0449,0x0429},
764   {0x042A,0x044A,0x042A},  {0x042B,0x044B,0x042B},
765   {0x042C,0x044C,0x042C},  {0x042D,0x044D,0x042D},
766   {0x042E,0x044E,0x042E},  {0x042F,0x044F,0x042F},
767   {0x0410,0x0430,0x0410},  {0x0411,0x0431,0x0411},
768   {0x0412,0x0432,0x0412},  {0x0413,0x0433,0x0413},
769   {0x0414,0x0434,0x0414},  {0x0415,0x0435,0x0415},
770   {0x0416,0x0436,0x0416},  {0x0417,0x0437,0x0417},
771   {0x0418,0x0438,0x0418},  {0x0419,0x0439,0x0419},
772   {0x041A,0x043A,0x041A},  {0x041B,0x043B,0x041B},
773   {0x041C,0x043C,0x041C},  {0x041D,0x043D,0x041D},
774   {0x041E,0x043E,0x041E},  {0x041F,0x043F,0x041F},
775   {0x0420,0x0440,0x0420},  {0x0421,0x0441,0x0421},
776   {0x0422,0x0442,0x0422},  {0x0423,0x0443,0x0423},
777   {0x0424,0x0444,0x0424},  {0x0425,0x0445,0x0425},
778   {0x0426,0x0446,0x0426},  {0x0427,0x0447,0x0427},
779   {0x0428,0x0448,0x0428},  {0x0429,0x0449,0x0429},
780   {0x042A,0x044A,0x042A},  {0x042B,0x044B,0x042B},
781   {0x042C,0x044C,0x042C},  {0x042D,0x044D,0x042D},
782   {0x042E,0x044E,0x042E},  {0x042F,0x044F,0x042F},
783   {0x0400,0x0450,0x0415},  {0x0401,0x0451,0x0415},
784   {0x0402,0x0452,0x0402},  {0x0403,0x0453,0x0413},
785   {0x0404,0x0454,0x0404},  {0x0405,0x0455,0x0405},
786   {0x0406,0x0456,0x0406},  {0x0407,0x0457,0x0406},
787   {0x0408,0x0458,0x0408},  {0x0409,0x0459,0x0409},
788   {0x040A,0x045A,0x040A},  {0x040B,0x045B,0x040B},
789   {0x040C,0x045C,0x041A},  {0x040D,0x045D,0x0418},
790   {0x040E,0x045E,0x0423},  {0x040F,0x045F,0x040F},
791   {0x0460,0x0461,0x0460},  {0x0460,0x0461,0x0460},
792   {0x0462,0x0463,0x0462},  {0x0462,0x0463,0x0462},
793   {0x0464,0x0465,0x0464},  {0x0464,0x0465,0x0464},
794   {0x0466,0x0467,0x0466},  {0x0466,0x0467,0x0466},
795   {0x0468,0x0469,0x0468},  {0x0468,0x0469,0x0468},
796   {0x046A,0x046B,0x046A},  {0x046A,0x046B,0x046A},
797   {0x046C,0x046D,0x046C},  {0x046C,0x046D,0x046C},
798   {0x046E,0x046F,0x046E},  {0x046E,0x046F,0x046E},
799   {0x0470,0x0471,0x0470},  {0x0470,0x0471,0x0470},
800   {0x0472,0x0473,0x0472},  {0x0472,0x0473,0x0472},
801   {0x0474,0x0475,0x0474},  {0x0474,0x0475,0x0474},
802   {0x0476,0x0477,0x0474},  {0x0476,0x0477,0x0474},
803   {0x0478,0x0479,0x0478},  {0x0478,0x0479,0x0478},
804   {0x047A,0x047B,0x047A},  {0x047A,0x047B,0x047A},
805   {0x047C,0x047D,0x047C},  {0x047C,0x047D,0x047C},
806   {0x047E,0x047F,0x047E},  {0x047E,0x047F,0x047E},
807   {0x0480,0x0481,0x0480},  {0x0480,0x0481,0x0480},
808   {0x0482,0x0482,0x0482},  {0x0483,0x0483,0x0483},
809   {0x0484,0x0484,0x0484},  {0x0485,0x0485,0x0485},
810   {0x0486,0x0486,0x0486},  {0x0487,0x0487,0x0487},
811   {0x0488,0x0488,0x0488},  {0x0489,0x0489,0x0489},
812   {0x048A,0x048A,0x048A},  {0x048B,0x048B,0x048B},
813   {0x048C,0x048D,0x048C},  {0x048C,0x048D,0x048C},
814   {0x048E,0x048F,0x048E},  {0x048E,0x048F,0x048E},
815   {0x0490,0x0491,0x0490},  {0x0490,0x0491,0x0490},
816   {0x0492,0x0493,0x0492},  {0x0492,0x0493,0x0492},
817   {0x0494,0x0495,0x0494},  {0x0494,0x0495,0x0494},
818   {0x0496,0x0497,0x0496},  {0x0496,0x0497,0x0496},
819   {0x0498,0x0499,0x0498},  {0x0498,0x0499,0x0498},
820   {0x049A,0x049B,0x049A},  {0x049A,0x049B,0x049A},
821   {0x049C,0x049D,0x049C},  {0x049C,0x049D,0x049C},
822   {0x049E,0x049F,0x049E},  {0x049E,0x049F,0x049E},
823   {0x04A0,0x04A1,0x04A0},  {0x04A0,0x04A1,0x04A0},
824   {0x04A2,0x04A3,0x04A2},  {0x04A2,0x04A3,0x04A2},
825   {0x04A4,0x04A5,0x04A4},  {0x04A4,0x04A5,0x04A4},
826   {0x04A6,0x04A7,0x04A6},  {0x04A6,0x04A7,0x04A6},
827   {0x04A8,0x04A9,0x04A8},  {0x04A8,0x04A9,0x04A8},
828   {0x04AA,0x04AB,0x04AA},  {0x04AA,0x04AB,0x04AA},
829   {0x04AC,0x04AD,0x04AC},  {0x04AC,0x04AD,0x04AC},
830   {0x04AE,0x04AF,0x04AE},  {0x04AE,0x04AF,0x04AE},
831   {0x04B0,0x04B1,0x04B0},  {0x04B0,0x04B1,0x04B0},
832   {0x04B2,0x04B3,0x04B2},  {0x04B2,0x04B3,0x04B2},
833   {0x04B4,0x04B5,0x04B4},  {0x04B4,0x04B5,0x04B4},
834   {0x04B6,0x04B7,0x04B6},  {0x04B6,0x04B7,0x04B6},
835   {0x04B8,0x04B9,0x04B8},  {0x04B8,0x04B9,0x04B8},
836   {0x04BA,0x04BB,0x04BA},  {0x04BA,0x04BB,0x04BA},
837   {0x04BC,0x04BD,0x04BC},  {0x04BC,0x04BD,0x04BC},
838   {0x04BE,0x04BF,0x04BE},  {0x04BE,0x04BF,0x04BE},
839   {0x04C0,0x04C0,0x04C0},  {0x04C1,0x04C2,0x0416},
840   {0x04C1,0x04C2,0x0416},  {0x04C3,0x04C4,0x04C3},
841   {0x04C3,0x04C4,0x04C3},  {0x04C5,0x04C5,0x04C5},
842   {0x04C6,0x04C6,0x04C6},  {0x04C7,0x04C8,0x04C7},
843   {0x04C7,0x04C8,0x04C7},  {0x04C9,0x04C9,0x04C9},
844   {0x04CA,0x04CA,0x04CA},  {0x04CB,0x04CC,0x04CB},
845   {0x04CB,0x04CC,0x04CB},  {0x04CD,0x04CD,0x04CD},
846   {0x04CE,0x04CE,0x04CE},  {0x04CF,0x04CF,0x04CF},
847   {0x04D0,0x04D1,0x0410},  {0x04D0,0x04D1,0x0410},
848   {0x04D2,0x04D3,0x0410},  {0x04D2,0x04D3,0x0410},
849   {0x04D4,0x04D5,0x04D4},  {0x04D4,0x04D5,0x04D4},
850   {0x04D6,0x04D7,0x0415},  {0x04D6,0x04D7,0x0415},
851   {0x04D8,0x04D9,0x04D8},  {0x04D8,0x04D9,0x04D8},
852   {0x04DA,0x04DB,0x04D8},  {0x04DA,0x04DB,0x04D8},
853   {0x04DC,0x04DD,0x0416},  {0x04DC,0x04DD,0x0416},
854   {0x04DE,0x04DF,0x0417},  {0x04DE,0x04DF,0x0417},
855   {0x04E0,0x04E1,0x04E0},  {0x04E0,0x04E1,0x04E0},
856   {0x04E2,0x04E3,0x0418},  {0x04E2,0x04E3,0x0418},
857   {0x04E4,0x04E5,0x0418},  {0x04E4,0x04E5,0x0418},
858   {0x04E6,0x04E7,0x041E},  {0x04E6,0x04E7,0x041E},
859   {0x04E8,0x04E9,0x04E8},  {0x04E8,0x04E9,0x04E8},
860   {0x04EA,0x04EB,0x04E8},  {0x04EA,0x04EB,0x04E8},
861   {0x04EC,0x04ED,0x042D},  {0x04EC,0x04ED,0x042D},
862   {0x04EE,0x04EF,0x0423},  {0x04EE,0x04EF,0x0423},
863   {0x04F0,0x04F1,0x0423},  {0x04F0,0x04F1,0x0423},
864   {0x04F2,0x04F3,0x0423},  {0x04F2,0x04F3,0x0423},
865   {0x04F4,0x04F5,0x0427},  {0x04F4,0x04F5,0x0427},
866   {0x04F6,0x04F6,0x04F6},  {0x04F7,0x04F7,0x04F7},
867   {0x04F8,0x04F9,0x042B},  {0x04F8,0x04F9,0x042B},
868   {0x04FA,0x04FA,0x04FA},  {0x04FB,0x04FB,0x04FB},
869   {0x04FC,0x04FC,0x04FC},  {0x04FD,0x04FD,0x04FD},
870   {0x04FE,0x04FE,0x04FE},  {0x04FF,0x04FF,0x04FF}
871 };
872 
873 static const MY_UNICASE_CHARACTER plane05[]={
874   {0x0500,0x0500,0x0500},  {0x0501,0x0501,0x0501},
875   {0x0502,0x0502,0x0502},  {0x0503,0x0503,0x0503},
876   {0x0504,0x0504,0x0504},  {0x0505,0x0505,0x0505},
877   {0x0506,0x0506,0x0506},  {0x0507,0x0507,0x0507},
878   {0x0508,0x0508,0x0508},  {0x0509,0x0509,0x0509},
879   {0x050A,0x050A,0x050A},  {0x050B,0x050B,0x050B},
880   {0x050C,0x050C,0x050C},  {0x050D,0x050D,0x050D},
881   {0x050E,0x050E,0x050E},  {0x050F,0x050F,0x050F},
882   {0x0510,0x0510,0x0510},  {0x0511,0x0511,0x0511},
883   {0x0512,0x0512,0x0512},  {0x0513,0x0513,0x0513},
884   {0x0514,0x0514,0x0514},  {0x0515,0x0515,0x0515},
885   {0x0516,0x0516,0x0516},  {0x0517,0x0517,0x0517},
886   {0x0518,0x0518,0x0518},  {0x0519,0x0519,0x0519},
887   {0x051A,0x051A,0x051A},  {0x051B,0x051B,0x051B},
888   {0x051C,0x051C,0x051C},  {0x051D,0x051D,0x051D},
889   {0x051E,0x051E,0x051E},  {0x051F,0x051F,0x051F},
890   {0x0520,0x0520,0x0520},  {0x0521,0x0521,0x0521},
891   {0x0522,0x0522,0x0522},  {0x0523,0x0523,0x0523},
892   {0x0524,0x0524,0x0524},  {0x0525,0x0525,0x0525},
893   {0x0526,0x0526,0x0526},  {0x0527,0x0527,0x0527},
894   {0x0528,0x0528,0x0528},  {0x0529,0x0529,0x0529},
895   {0x052A,0x052A,0x052A},  {0x052B,0x052B,0x052B},
896   {0x052C,0x052C,0x052C},  {0x052D,0x052D,0x052D},
897   {0x052E,0x052E,0x052E},  {0x052F,0x052F,0x052F},
898   {0x0530,0x0530,0x0530},  {0x0531,0x0561,0x0531},
899   {0x0532,0x0562,0x0532},  {0x0533,0x0563,0x0533},
900   {0x0534,0x0564,0x0534},  {0x0535,0x0565,0x0535},
901   {0x0536,0x0566,0x0536},  {0x0537,0x0567,0x0537},
902   {0x0538,0x0568,0x0538},  {0x0539,0x0569,0x0539},
903   {0x053A,0x056A,0x053A},  {0x053B,0x056B,0x053B},
904   {0x053C,0x056C,0x053C},  {0x053D,0x056D,0x053D},
905   {0x053E,0x056E,0x053E},  {0x053F,0x056F,0x053F},
906   {0x0540,0x0570,0x0540},  {0x0541,0x0571,0x0541},
907   {0x0542,0x0572,0x0542},  {0x0543,0x0573,0x0543},
908   {0x0544,0x0574,0x0544},  {0x0545,0x0575,0x0545},
909   {0x0546,0x0576,0x0546},  {0x0547,0x0577,0x0547},
910   {0x0548,0x0578,0x0548},  {0x0549,0x0579,0x0549},
911   {0x054A,0x057A,0x054A},  {0x054B,0x057B,0x054B},
912   {0x054C,0x057C,0x054C},  {0x054D,0x057D,0x054D},
913   {0x054E,0x057E,0x054E},  {0x054F,0x057F,0x054F},
914   {0x0550,0x0580,0x0550},  {0x0551,0x0581,0x0551},
915   {0x0552,0x0582,0x0552},  {0x0553,0x0583,0x0553},
916   {0x0554,0x0584,0x0554},  {0x0555,0x0585,0x0555},
917   {0x0556,0x0586,0x0556},  {0x0557,0x0557,0x0557},
918   {0x0558,0x0558,0x0558},  {0x0559,0x0559,0x0559},
919   {0x055A,0x055A,0x055A},  {0x055B,0x055B,0x055B},
920   {0x055C,0x055C,0x055C},  {0x055D,0x055D,0x055D},
921   {0x055E,0x055E,0x055E},  {0x055F,0x055F,0x055F},
922   {0x0560,0x0560,0x0560},  {0x0531,0x0561,0x0531},
923   {0x0532,0x0562,0x0532},  {0x0533,0x0563,0x0533},
924   {0x0534,0x0564,0x0534},  {0x0535,0x0565,0x0535},
925   {0x0536,0x0566,0x0536},  {0x0537,0x0567,0x0537},
926   {0x0538,0x0568,0x0538},  {0x0539,0x0569,0x0539},
927   {0x053A,0x056A,0x053A},  {0x053B,0x056B,0x053B},
928   {0x053C,0x056C,0x053C},  {0x053D,0x056D,0x053D},
929   {0x053E,0x056E,0x053E},  {0x053F,0x056F,0x053F},
930   {0x0540,0x0570,0x0540},  {0x0541,0x0571,0x0541},
931   {0x0542,0x0572,0x0542},  {0x0543,0x0573,0x0543},
932   {0x0544,0x0574,0x0544},  {0x0545,0x0575,0x0545},
933   {0x0546,0x0576,0x0546},  {0x0547,0x0577,0x0547},
934   {0x0548,0x0578,0x0548},  {0x0549,0x0579,0x0549},
935   {0x054A,0x057A,0x054A},  {0x054B,0x057B,0x054B},
936   {0x054C,0x057C,0x054C},  {0x054D,0x057D,0x054D},
937   {0x054E,0x057E,0x054E},  {0x054F,0x057F,0x054F},
938   {0x0550,0x0580,0x0550},  {0x0551,0x0581,0x0551},
939   {0x0552,0x0582,0x0552},  {0x0553,0x0583,0x0553},
940   {0x0554,0x0584,0x0554},  {0x0555,0x0585,0x0555},
941   {0x0556,0x0586,0x0556},  {0x0587,0x0587,0x0587},
942   {0x0588,0x0588,0x0588},  {0x0589,0x0589,0x0589},
943   {0x058A,0x058A,0x058A},  {0x058B,0x058B,0x058B},
944   {0x058C,0x058C,0x058C},  {0x058D,0x058D,0x058D},
945   {0x058E,0x058E,0x058E},  {0x058F,0x058F,0x058F},
946   {0x0590,0x0590,0x0590},  {0x0591,0x0591,0x0591},
947   {0x0592,0x0592,0x0592},  {0x0593,0x0593,0x0593},
948   {0x0594,0x0594,0x0594},  {0x0595,0x0595,0x0595},
949   {0x0596,0x0596,0x0596},  {0x0597,0x0597,0x0597},
950   {0x0598,0x0598,0x0598},  {0x0599,0x0599,0x0599},
951   {0x059A,0x059A,0x059A},  {0x059B,0x059B,0x059B},
952   {0x059C,0x059C,0x059C},  {0x059D,0x059D,0x059D},
953   {0x059E,0x059E,0x059E},  {0x059F,0x059F,0x059F},
954   {0x05A0,0x05A0,0x05A0},  {0x05A1,0x05A1,0x05A1},
955   {0x05A2,0x05A2,0x05A2},  {0x05A3,0x05A3,0x05A3},
956   {0x05A4,0x05A4,0x05A4},  {0x05A5,0x05A5,0x05A5},
957   {0x05A6,0x05A6,0x05A6},  {0x05A7,0x05A7,0x05A7},
958   {0x05A8,0x05A8,0x05A8},  {0x05A9,0x05A9,0x05A9},
959   {0x05AA,0x05AA,0x05AA},  {0x05AB,0x05AB,0x05AB},
960   {0x05AC,0x05AC,0x05AC},  {0x05AD,0x05AD,0x05AD},
961   {0x05AE,0x05AE,0x05AE},  {0x05AF,0x05AF,0x05AF},
962   {0x05B0,0x05B0,0x05B0},  {0x05B1,0x05B1,0x05B1},
963   {0x05B2,0x05B2,0x05B2},  {0x05B3,0x05B3,0x05B3},
964   {0x05B4,0x05B4,0x05B4},  {0x05B5,0x05B5,0x05B5},
965   {0x05B6,0x05B6,0x05B6},  {0x05B7,0x05B7,0x05B7},
966   {0x05B8,0x05B8,0x05B8},  {0x05B9,0x05B9,0x05B9},
967   {0x05BA,0x05BA,0x05BA},  {0x05BB,0x05BB,0x05BB},
968   {0x05BC,0x05BC,0x05BC},  {0x05BD,0x05BD,0x05BD},
969   {0x05BE,0x05BE,0x05BE},  {0x05BF,0x05BF,0x05BF},
970   {0x05C0,0x05C0,0x05C0},  {0x05C1,0x05C1,0x05C1},
971   {0x05C2,0x05C2,0x05C2},  {0x05C3,0x05C3,0x05C3},
972   {0x05C4,0x05C4,0x05C4},  {0x05C5,0x05C5,0x05C5},
973   {0x05C6,0x05C6,0x05C6},  {0x05C7,0x05C7,0x05C7},
974   {0x05C8,0x05C8,0x05C8},  {0x05C9,0x05C9,0x05C9},
975   {0x05CA,0x05CA,0x05CA},  {0x05CB,0x05CB,0x05CB},
976   {0x05CC,0x05CC,0x05CC},  {0x05CD,0x05CD,0x05CD},
977   {0x05CE,0x05CE,0x05CE},  {0x05CF,0x05CF,0x05CF},
978   {0x05D0,0x05D0,0x05D0},  {0x05D1,0x05D1,0x05D1},
979   {0x05D2,0x05D2,0x05D2},  {0x05D3,0x05D3,0x05D3},
980   {0x05D4,0x05D4,0x05D4},  {0x05D5,0x05D5,0x05D5},
981   {0x05D6,0x05D6,0x05D6},  {0x05D7,0x05D7,0x05D7},
982   {0x05D8,0x05D8,0x05D8},  {0x05D9,0x05D9,0x05D9},
983   {0x05DA,0x05DA,0x05DA},  {0x05DB,0x05DB,0x05DB},
984   {0x05DC,0x05DC,0x05DC},  {0x05DD,0x05DD,0x05DD},
985   {0x05DE,0x05DE,0x05DE},  {0x05DF,0x05DF,0x05DF},
986   {0x05E0,0x05E0,0x05E0},  {0x05E1,0x05E1,0x05E1},
987   {0x05E2,0x05E2,0x05E2},  {0x05E3,0x05E3,0x05E3},
988   {0x05E4,0x05E4,0x05E4},  {0x05E5,0x05E5,0x05E5},
989   {0x05E6,0x05E6,0x05E6},  {0x05E7,0x05E7,0x05E7},
990   {0x05E8,0x05E8,0x05E8},  {0x05E9,0x05E9,0x05E9},
991   {0x05EA,0x05EA,0x05EA},  {0x05EB,0x05EB,0x05EB},
992   {0x05EC,0x05EC,0x05EC},  {0x05ED,0x05ED,0x05ED},
993   {0x05EE,0x05EE,0x05EE},  {0x05EF,0x05EF,0x05EF},
994   {0x05F0,0x05F0,0x05F0},  {0x05F1,0x05F1,0x05F1},
995   {0x05F2,0x05F2,0x05F2},  {0x05F3,0x05F3,0x05F3},
996   {0x05F4,0x05F4,0x05F4},  {0x05F5,0x05F5,0x05F5},
997   {0x05F6,0x05F6,0x05F6},  {0x05F7,0x05F7,0x05F7},
998   {0x05F8,0x05F8,0x05F8},  {0x05F9,0x05F9,0x05F9},
999   {0x05FA,0x05FA,0x05FA},  {0x05FB,0x05FB,0x05FB},
1000   {0x05FC,0x05FC,0x05FC},  {0x05FD,0x05FD,0x05FD},
1001   {0x05FE,0x05FE,0x05FE},  {0x05FF,0x05FF,0x05FF}
1002 };
1003 
1004 static const MY_UNICASE_CHARACTER plane1E[]={
1005   {0x1E00,0x1E01,0x0041},  {0x1E00,0x1E01,0x0041},
1006   {0x1E02,0x1E03,0x0042},  {0x1E02,0x1E03,0x0042},
1007   {0x1E04,0x1E05,0x0042},  {0x1E04,0x1E05,0x0042},
1008   {0x1E06,0x1E07,0x0042},  {0x1E06,0x1E07,0x0042},
1009   {0x1E08,0x1E09,0x0043},  {0x1E08,0x1E09,0x0043},
1010   {0x1E0A,0x1E0B,0x0044},  {0x1E0A,0x1E0B,0x0044},
1011   {0x1E0C,0x1E0D,0x0044},  {0x1E0C,0x1E0D,0x0044},
1012   {0x1E0E,0x1E0F,0x0044},  {0x1E0E,0x1E0F,0x0044},
1013   {0x1E10,0x1E11,0x0044},  {0x1E10,0x1E11,0x0044},
1014   {0x1E12,0x1E13,0x0044},  {0x1E12,0x1E13,0x0044},
1015   {0x1E14,0x1E15,0x0045},  {0x1E14,0x1E15,0x0045},
1016   {0x1E16,0x1E17,0x0045},  {0x1E16,0x1E17,0x0045},
1017   {0x1E18,0x1E19,0x0045},  {0x1E18,0x1E19,0x0045},
1018   {0x1E1A,0x1E1B,0x0045},  {0x1E1A,0x1E1B,0x0045},
1019   {0x1E1C,0x1E1D,0x0045},  {0x1E1C,0x1E1D,0x0045},
1020   {0x1E1E,0x1E1F,0x0046},  {0x1E1E,0x1E1F,0x0046},
1021   {0x1E20,0x1E21,0x0047},  {0x1E20,0x1E21,0x0047},
1022   {0x1E22,0x1E23,0x0048},  {0x1E22,0x1E23,0x0048},
1023   {0x1E24,0x1E25,0x0048},  {0x1E24,0x1E25,0x0048},
1024   {0x1E26,0x1E27,0x0048},  {0x1E26,0x1E27,0x0048},
1025   {0x1E28,0x1E29,0x0048},  {0x1E28,0x1E29,0x0048},
1026   {0x1E2A,0x1E2B,0x0048},  {0x1E2A,0x1E2B,0x0048},
1027   {0x1E2C,0x1E2D,0x0049},  {0x1E2C,0x1E2D,0x0049},
1028   {0x1E2E,0x1E2F,0x0049},  {0x1E2E,0x1E2F,0x0049},
1029   {0x1E30,0x1E31,0x004B},  {0x1E30,0x1E31,0x004B},
1030   {0x1E32,0x1E33,0x004B},  {0x1E32,0x1E33,0x004B},
1031   {0x1E34,0x1E35,0x004B},  {0x1E34,0x1E35,0x004B},
1032   {0x1E36,0x1E37,0x004C},  {0x1E36,0x1E37,0x004C},
1033   {0x1E38,0x1E39,0x004C},  {0x1E38,0x1E39,0x004C},
1034   {0x1E3A,0x1E3B,0x004C},  {0x1E3A,0x1E3B,0x004C},
1035   {0x1E3C,0x1E3D,0x004C},  {0x1E3C,0x1E3D,0x004C},
1036   {0x1E3E,0x1E3F,0x004D},  {0x1E3E,0x1E3F,0x004D},
1037   {0x1E40,0x1E41,0x004D},  {0x1E40,0x1E41,0x004D},
1038   {0x1E42,0x1E43,0x004D},  {0x1E42,0x1E43,0x004D},
1039   {0x1E44,0x1E45,0x004E},  {0x1E44,0x1E45,0x004E},
1040   {0x1E46,0x1E47,0x004E},  {0x1E46,0x1E47,0x004E},
1041   {0x1E48,0x1E49,0x004E},  {0x1E48,0x1E49,0x004E},
1042   {0x1E4A,0x1E4B,0x004E},  {0x1E4A,0x1E4B,0x004E},
1043   {0x1E4C,0x1E4D,0x004F},  {0x1E4C,0x1E4D,0x004F},
1044   {0x1E4E,0x1E4F,0x004F},  {0x1E4E,0x1E4F,0x004F},
1045   {0x1E50,0x1E51,0x004F},  {0x1E50,0x1E51,0x004F},
1046   {0x1E52,0x1E53,0x004F},  {0x1E52,0x1E53,0x004F},
1047   {0x1E54,0x1E55,0x0050},  {0x1E54,0x1E55,0x0050},
1048   {0x1E56,0x1E57,0x0050},  {0x1E56,0x1E57,0x0050},
1049   {0x1E58,0x1E59,0x0052},  {0x1E58,0x1E59,0x0052},
1050   {0x1E5A,0x1E5B,0x0052},  {0x1E5A,0x1E5B,0x0052},
1051   {0x1E5C,0x1E5D,0x0052},  {0x1E5C,0x1E5D,0x0052},
1052   {0x1E5E,0x1E5F,0x0052},  {0x1E5E,0x1E5F,0x0052},
1053   {0x1E60,0x1E61,0x0053},  {0x1E60,0x1E61,0x0053},
1054   {0x1E62,0x1E63,0x0053},  {0x1E62,0x1E63,0x0053},
1055   {0x1E64,0x1E65,0x0053},  {0x1E64,0x1E65,0x0053},
1056   {0x1E66,0x1E67,0x0053},  {0x1E66,0x1E67,0x0053},
1057   {0x1E68,0x1E69,0x0053},  {0x1E68,0x1E69,0x0053},
1058   {0x1E6A,0x1E6B,0x0054},  {0x1E6A,0x1E6B,0x0054},
1059   {0x1E6C,0x1E6D,0x0054},  {0x1E6C,0x1E6D,0x0054},
1060   {0x1E6E,0x1E6F,0x0054},  {0x1E6E,0x1E6F,0x0054},
1061   {0x1E70,0x1E71,0x0054},  {0x1E70,0x1E71,0x0054},
1062   {0x1E72,0x1E73,0x0055},  {0x1E72,0x1E73,0x0055},
1063   {0x1E74,0x1E75,0x0055},  {0x1E74,0x1E75,0x0055},
1064   {0x1E76,0x1E77,0x0055},  {0x1E76,0x1E77,0x0055},
1065   {0x1E78,0x1E79,0x0055},  {0x1E78,0x1E79,0x0055},
1066   {0x1E7A,0x1E7B,0x0055},  {0x1E7A,0x1E7B,0x0055},
1067   {0x1E7C,0x1E7D,0x0056},  {0x1E7C,0x1E7D,0x0056},
1068   {0x1E7E,0x1E7F,0x0056},  {0x1E7E,0x1E7F,0x0056},
1069   {0x1E80,0x1E81,0x0057},  {0x1E80,0x1E81,0x0057},
1070   {0x1E82,0x1E83,0x0057},  {0x1E82,0x1E83,0x0057},
1071   {0x1E84,0x1E85,0x0057},  {0x1E84,0x1E85,0x0057},
1072   {0x1E86,0x1E87,0x0057},  {0x1E86,0x1E87,0x0057},
1073   {0x1E88,0x1E89,0x0057},  {0x1E88,0x1E89,0x0057},
1074   {0x1E8A,0x1E8B,0x0058},  {0x1E8A,0x1E8B,0x0058},
1075   {0x1E8C,0x1E8D,0x0058},  {0x1E8C,0x1E8D,0x0058},
1076   {0x1E8E,0x1E8F,0x0059},  {0x1E8E,0x1E8F,0x0059},
1077   {0x1E90,0x1E91,0x005A},  {0x1E90,0x1E91,0x005A},
1078   {0x1E92,0x1E93,0x005A},  {0x1E92,0x1E93,0x005A},
1079   {0x1E94,0x1E95,0x005A},  {0x1E94,0x1E95,0x005A},
1080   {0x1E96,0x1E96,0x0048},  {0x1E97,0x1E97,0x0054},
1081   {0x1E98,0x1E98,0x0057},  {0x1E99,0x1E99,0x0059},
1082   {0x1E9A,0x1E9A,0x1E9A},  {0x1E60,0x1E9B,0x0053},
1083   {0x1E9C,0x1E9C,0x1E9C},  {0x1E9D,0x1E9D,0x1E9D},
1084   {0x1E9E,0x1E9E,0x1E9E},  {0x1E9F,0x1E9F,0x1E9F},
1085   {0x1EA0,0x1EA1,0x0041},  {0x1EA0,0x1EA1,0x0041},
1086   {0x1EA2,0x1EA3,0x0041},  {0x1EA2,0x1EA3,0x0041},
1087   {0x1EA4,0x1EA5,0x0041},  {0x1EA4,0x1EA5,0x0041},
1088   {0x1EA6,0x1EA7,0x0041},  {0x1EA6,0x1EA7,0x0041},
1089   {0x1EA8,0x1EA9,0x0041},  {0x1EA8,0x1EA9,0x0041},
1090   {0x1EAA,0x1EAB,0x0041},  {0x1EAA,0x1EAB,0x0041},
1091   {0x1EAC,0x1EAD,0x0041},  {0x1EAC,0x1EAD,0x0041},
1092   {0x1EAE,0x1EAF,0x0041},  {0x1EAE,0x1EAF,0x0041},
1093   {0x1EB0,0x1EB1,0x0041},  {0x1EB0,0x1EB1,0x0041},
1094   {0x1EB2,0x1EB3,0x0041},  {0x1EB2,0x1EB3,0x0041},
1095   {0x1EB4,0x1EB5,0x0041},  {0x1EB4,0x1EB5,0x0041},
1096   {0x1EB6,0x1EB7,0x0041},  {0x1EB6,0x1EB7,0x0041},
1097   {0x1EB8,0x1EB9,0x0045},  {0x1EB8,0x1EB9,0x0045},
1098   {0x1EBA,0x1EBB,0x0045},  {0x1EBA,0x1EBB,0x0045},
1099   {0x1EBC,0x1EBD,0x0045},  {0x1EBC,0x1EBD,0x0045},
1100   {0x1EBE,0x1EBF,0x0045},  {0x1EBE,0x1EBF,0x0045},
1101   {0x1EC0,0x1EC1,0x0045},  {0x1EC0,0x1EC1,0x0045},
1102   {0x1EC2,0x1EC3,0x0045},  {0x1EC2,0x1EC3,0x0045},
1103   {0x1EC4,0x1EC5,0x0045},  {0x1EC4,0x1EC5,0x0045},
1104   {0x1EC6,0x1EC7,0x0045},  {0x1EC6,0x1EC7,0x0045},
1105   {0x1EC8,0x1EC9,0x0049},  {0x1EC8,0x1EC9,0x0049},
1106   {0x1ECA,0x1ECB,0x0049},  {0x1ECA,0x1ECB,0x0049},
1107   {0x1ECC,0x1ECD,0x004F},  {0x1ECC,0x1ECD,0x004F},
1108   {0x1ECE,0x1ECF,0x004F},  {0x1ECE,0x1ECF,0x004F},
1109   {0x1ED0,0x1ED1,0x004F},  {0x1ED0,0x1ED1,0x004F},
1110   {0x1ED2,0x1ED3,0x004F},  {0x1ED2,0x1ED3,0x004F},
1111   {0x1ED4,0x1ED5,0x004F},  {0x1ED4,0x1ED5,0x004F},
1112   {0x1ED6,0x1ED7,0x004F},  {0x1ED6,0x1ED7,0x004F},
1113   {0x1ED8,0x1ED9,0x004F},  {0x1ED8,0x1ED9,0x004F},
1114   {0x1EDA,0x1EDB,0x004F},  {0x1EDA,0x1EDB,0x004F},
1115   {0x1EDC,0x1EDD,0x004F},  {0x1EDC,0x1EDD,0x004F},
1116   {0x1EDE,0x1EDF,0x004F},  {0x1EDE,0x1EDF,0x004F},
1117   {0x1EE0,0x1EE1,0x004F},  {0x1EE0,0x1EE1,0x004F},
1118   {0x1EE2,0x1EE3,0x004F},  {0x1EE2,0x1EE3,0x004F},
1119   {0x1EE4,0x1EE5,0x0055},  {0x1EE4,0x1EE5,0x0055},
1120   {0x1EE6,0x1EE7,0x0055},  {0x1EE6,0x1EE7,0x0055},
1121   {0x1EE8,0x1EE9,0x0055},  {0x1EE8,0x1EE9,0x0055},
1122   {0x1EEA,0x1EEB,0x0055},  {0x1EEA,0x1EEB,0x0055},
1123   {0x1EEC,0x1EED,0x0055},  {0x1EEC,0x1EED,0x0055},
1124   {0x1EEE,0x1EEF,0x0055},  {0x1EEE,0x1EEF,0x0055},
1125   {0x1EF0,0x1EF1,0x0055},  {0x1EF0,0x1EF1,0x0055},
1126   {0x1EF2,0x1EF3,0x0059},  {0x1EF2,0x1EF3,0x0059},
1127   {0x1EF4,0x1EF5,0x0059},  {0x1EF4,0x1EF5,0x0059},
1128   {0x1EF6,0x1EF7,0x0059},  {0x1EF6,0x1EF7,0x0059},
1129   {0x1EF8,0x1EF9,0x0059},  {0x1EF8,0x1EF9,0x0059},
1130   {0x1EFA,0x1EFA,0x1EFA},  {0x1EFB,0x1EFB,0x1EFB},
1131   {0x1EFC,0x1EFC,0x1EFC},  {0x1EFD,0x1EFD,0x1EFD},
1132   {0x1EFE,0x1EFE,0x1EFE},  {0x1EFF,0x1EFF,0x1EFF}
1133 };
1134 
1135 static const MY_UNICASE_CHARACTER plane1F[]={
1136   {0x1F08,0x1F00,0x0391},  {0x1F09,0x1F01,0x0391},
1137   {0x1F0A,0x1F02,0x0391},  {0x1F0B,0x1F03,0x0391},
1138   {0x1F0C,0x1F04,0x0391},  {0x1F0D,0x1F05,0x0391},
1139   {0x1F0E,0x1F06,0x0391},  {0x1F0F,0x1F07,0x0391},
1140   {0x1F08,0x1F00,0x0391},  {0x1F09,0x1F01,0x0391},
1141   {0x1F0A,0x1F02,0x0391},  {0x1F0B,0x1F03,0x0391},
1142   {0x1F0C,0x1F04,0x0391},  {0x1F0D,0x1F05,0x0391},
1143   {0x1F0E,0x1F06,0x0391},  {0x1F0F,0x1F07,0x0391},
1144   {0x1F18,0x1F10,0x0395},  {0x1F19,0x1F11,0x0395},
1145   {0x1F1A,0x1F12,0x0395},  {0x1F1B,0x1F13,0x0395},
1146   {0x1F1C,0x1F14,0x0395},  {0x1F1D,0x1F15,0x0395},
1147   {0x1F16,0x1F16,0x1F16},  {0x1F17,0x1F17,0x1F17},
1148   {0x1F18,0x1F10,0x0395},  {0x1F19,0x1F11,0x0395},
1149   {0x1F1A,0x1F12,0x0395},  {0x1F1B,0x1F13,0x0395},
1150   {0x1F1C,0x1F14,0x0395},  {0x1F1D,0x1F15,0x0395},
1151   {0x1F1E,0x1F1E,0x1F1E},  {0x1F1F,0x1F1F,0x1F1F},
1152   {0x1F28,0x1F20,0x0397},  {0x1F29,0x1F21,0x0397},
1153   {0x1F2A,0x1F22,0x0397},  {0x1F2B,0x1F23,0x0397},
1154   {0x1F2C,0x1F24,0x0397},  {0x1F2D,0x1F25,0x0397},
1155   {0x1F2E,0x1F26,0x0397},  {0x1F2F,0x1F27,0x0397},
1156   {0x1F28,0x1F20,0x0397},  {0x1F29,0x1F21,0x0397},
1157   {0x1F2A,0x1F22,0x0397},  {0x1F2B,0x1F23,0x0397},
1158   {0x1F2C,0x1F24,0x0397},  {0x1F2D,0x1F25,0x0397},
1159   {0x1F2E,0x1F26,0x0397},  {0x1F2F,0x1F27,0x0397},
1160   {0x1F38,0x1F30,0x0399},  {0x1F39,0x1F31,0x0399},
1161   {0x1F3A,0x1F32,0x0399},  {0x1F3B,0x1F33,0x0399},
1162   {0x1F3C,0x1F34,0x0399},  {0x1F3D,0x1F35,0x0399},
1163   {0x1F3E,0x1F36,0x0399},  {0x1F3F,0x1F37,0x0399},
1164   {0x1F38,0x1F30,0x0399},  {0x1F39,0x1F31,0x0399},
1165   {0x1F3A,0x1F32,0x0399},  {0x1F3B,0x1F33,0x0399},
1166   {0x1F3C,0x1F34,0x0399},  {0x1F3D,0x1F35,0x0399},
1167   {0x1F3E,0x1F36,0x0399},  {0x1F3F,0x1F37,0x0399},
1168   {0x1F48,0x1F40,0x039F},  {0x1F49,0x1F41,0x039F},
1169   {0x1F4A,0x1F42,0x039F},  {0x1F4B,0x1F43,0x039F},
1170   {0x1F4C,0x1F44,0x039F},  {0x1F4D,0x1F45,0x039F},
1171   {0x1F46,0x1F46,0x1F46},  {0x1F47,0x1F47,0x1F47},
1172   {0x1F48,0x1F40,0x039F},  {0x1F49,0x1F41,0x039F},
1173   {0x1F4A,0x1F42,0x039F},  {0x1F4B,0x1F43,0x039F},
1174   {0x1F4C,0x1F44,0x039F},  {0x1F4D,0x1F45,0x039F},
1175   {0x1F4E,0x1F4E,0x1F4E},  {0x1F4F,0x1F4F,0x1F4F},
1176   {0x1F50,0x1F50,0x03A5},  {0x1F59,0x1F51,0x03A5},
1177   {0x1F52,0x1F52,0x03A5},  {0x1F5B,0x1F53,0x03A5},
1178   {0x1F54,0x1F54,0x03A5},  {0x1F5D,0x1F55,0x03A5},
1179   {0x1F56,0x1F56,0x03A5},  {0x1F5F,0x1F57,0x03A5},
1180   {0x1F58,0x1F58,0x1F58},  {0x1F59,0x1F51,0x03A5},
1181   {0x1F5A,0x1F5A,0x1F5A},  {0x1F5B,0x1F53,0x03A5},
1182   {0x1F5C,0x1F5C,0x1F5C},  {0x1F5D,0x1F55,0x03A5},
1183   {0x1F5E,0x1F5E,0x1F5E},  {0x1F5F,0x1F57,0x03A5},
1184   {0x1F68,0x1F60,0x03A9},  {0x1F69,0x1F61,0x03A9},
1185   {0x1F6A,0x1F62,0x03A9},  {0x1F6B,0x1F63,0x03A9},
1186   {0x1F6C,0x1F64,0x03A9},  {0x1F6D,0x1F65,0x03A9},
1187   {0x1F6E,0x1F66,0x03A9},  {0x1F6F,0x1F67,0x03A9},
1188   {0x1F68,0x1F60,0x03A9},  {0x1F69,0x1F61,0x03A9},
1189   {0x1F6A,0x1F62,0x03A9},  {0x1F6B,0x1F63,0x03A9},
1190   {0x1F6C,0x1F64,0x03A9},  {0x1F6D,0x1F65,0x03A9},
1191   {0x1F6E,0x1F66,0x03A9},  {0x1F6F,0x1F67,0x03A9},
1192   {0x1FBA,0x1F70,0x0391},  {0x1FBB,0x1F71,0x1FBB},
1193   {0x1FC8,0x1F72,0x0395},  {0x1FC9,0x1F73,0x1FC9},
1194   {0x1FCA,0x1F74,0x0397},  {0x1FCB,0x1F75,0x1FCB},
1195   {0x1FDA,0x1F76,0x0399},  {0x1FDB,0x1F77,0x1FDB},
1196   {0x1FF8,0x1F78,0x039F},  {0x1FF9,0x1F79,0x1FF9},
1197   {0x1FEA,0x1F7A,0x03A5},  {0x1FEB,0x1F7B,0x1FEB},
1198   {0x1FFA,0x1F7C,0x03A9},  {0x1FFB,0x1F7D,0x1FFB},
1199   {0x1F7E,0x1F7E,0x1F7E},  {0x1F7F,0x1F7F,0x1F7F},
1200   {0x1F88,0x1F80,0x0391},  {0x1F89,0x1F81,0x0391},
1201   {0x1F8A,0x1F82,0x0391},  {0x1F8B,0x1F83,0x0391},
1202   {0x1F8C,0x1F84,0x0391},  {0x1F8D,0x1F85,0x0391},
1203   {0x1F8E,0x1F86,0x0391},  {0x1F8F,0x1F87,0x0391},
1204   {0x1F88,0x1F80,0x0391},  {0x1F89,0x1F81,0x0391},
1205   {0x1F8A,0x1F82,0x0391},  {0x1F8B,0x1F83,0x0391},
1206   {0x1F8C,0x1F84,0x0391},  {0x1F8D,0x1F85,0x0391},
1207   {0x1F8E,0x1F86,0x0391},  {0x1F8F,0x1F87,0x0391},
1208   {0x1F98,0x1F90,0x0397},  {0x1F99,0x1F91,0x0397},
1209   {0x1F9A,0x1F92,0x0397},  {0x1F9B,0x1F93,0x0397},
1210   {0x1F9C,0x1F94,0x0397},  {0x1F9D,0x1F95,0x0397},
1211   {0x1F9E,0x1F96,0x0397},  {0x1F9F,0x1F97,0x0397},
1212   {0x1F98,0x1F90,0x0397},  {0x1F99,0x1F91,0x0397},
1213   {0x1F9A,0x1F92,0x0397},  {0x1F9B,0x1F93,0x0397},
1214   {0x1F9C,0x1F94,0x0397},  {0x1F9D,0x1F95,0x0397},
1215   {0x1F9E,0x1F96,0x0397},  {0x1F9F,0x1F97,0x0397},
1216   {0x1FA8,0x1FA0,0x03A9},  {0x1FA9,0x1FA1,0x03A9},
1217   {0x1FAA,0x1FA2,0x03A9},  {0x1FAB,0x1FA3,0x03A9},
1218   {0x1FAC,0x1FA4,0x03A9},  {0x1FAD,0x1FA5,0x03A9},
1219   {0x1FAE,0x1FA6,0x03A9},  {0x1FAF,0x1FA7,0x03A9},
1220   {0x1FA8,0x1FA0,0x03A9},  {0x1FA9,0x1FA1,0x03A9},
1221   {0x1FAA,0x1FA2,0x03A9},  {0x1FAB,0x1FA3,0x03A9},
1222   {0x1FAC,0x1FA4,0x03A9},  {0x1FAD,0x1FA5,0x03A9},
1223   {0x1FAE,0x1FA6,0x03A9},  {0x1FAF,0x1FA7,0x03A9},
1224   {0x1FB8,0x1FB0,0x0391},  {0x1FB9,0x1FB1,0x0391},
1225   {0x1FB2,0x1FB2,0x0391},  {0x1FBC,0x1FB3,0x0391},
1226   {0x1FB4,0x1FB4,0x0391},  {0x1FB5,0x1FB5,0x1FB5},
1227   {0x1FB6,0x1FB6,0x0391},  {0x1FB7,0x1FB7,0x0391},
1228   {0x1FB8,0x1FB0,0x0391},  {0x1FB9,0x1FB1,0x0391},
1229   {0x1FBA,0x1F70,0x0391},  {0x1FBB,0x1F71,0x1FBB},
1230   {0x1FBC,0x1FB3,0x0391},  {0x1FBD,0x1FBD,0x1FBD},
1231   {0x0399,0x1FBE,0x0399},  {0x1FBF,0x1FBF,0x1FBF},
1232   {0x1FC0,0x1FC0,0x1FC0},  {0x1FC1,0x1FC1,0x1FC1},
1233   {0x1FC2,0x1FC2,0x0397},  {0x1FCC,0x1FC3,0x0397},
1234   {0x1FC4,0x1FC4,0x0397},  {0x1FC5,0x1FC5,0x1FC5},
1235   {0x1FC6,0x1FC6,0x0397},  {0x1FC7,0x1FC7,0x0397},
1236   {0x1FC8,0x1F72,0x0395},  {0x1FC9,0x1F73,0x1FC9},
1237   {0x1FCA,0x1F74,0x0397},  {0x1FCB,0x1F75,0x1FCB},
1238   {0x1FCC,0x1FC3,0x0397},  {0x1FCD,0x1FCD,0x1FCD},
1239   {0x1FCE,0x1FCE,0x1FCE},  {0x1FCF,0x1FCF,0x1FCF},
1240   {0x1FD8,0x1FD0,0x0399},  {0x1FD9,0x1FD1,0x0399},
1241   {0x1FD2,0x1FD2,0x0399},  {0x1FD3,0x1FD3,0x1FD3},
1242   {0x1FD4,0x1FD4,0x1FD4},  {0x1FD5,0x1FD5,0x1FD5},
1243   {0x1FD6,0x1FD6,0x0399},  {0x1FD7,0x1FD7,0x0399},
1244   {0x1FD8,0x1FD0,0x0399},  {0x1FD9,0x1FD1,0x0399},
1245   {0x1FDA,0x1F76,0x0399},  {0x1FDB,0x1F77,0x1FDB},
1246   {0x1FDC,0x1FDC,0x1FDC},  {0x1FDD,0x1FDD,0x1FDD},
1247   {0x1FDE,0x1FDE,0x1FDE},  {0x1FDF,0x1FDF,0x1FDF},
1248   {0x1FE8,0x1FE0,0x03A5},  {0x1FE9,0x1FE1,0x03A5},
1249   {0x1FE2,0x1FE2,0x03A5},  {0x1FE3,0x1FE3,0x1FE3},
1250   {0x1FE4,0x1FE4,0x03A1},  {0x1FEC,0x1FE5,0x03A1},
1251   {0x1FE6,0x1FE6,0x03A5},  {0x1FE7,0x1FE7,0x03A5},
1252   {0x1FE8,0x1FE0,0x03A5},  {0x1FE9,0x1FE1,0x03A5},
1253   {0x1FEA,0x1F7A,0x03A5},  {0x1FEB,0x1F7B,0x1FEB},
1254   {0x1FEC,0x1FE5,0x03A1},  {0x1FED,0x1FED,0x1FED},
1255   {0x1FEE,0x1FEE,0x1FEE},  {0x1FEF,0x1FEF,0x1FEF},
1256   {0x1FF0,0x1FF0,0x1FF0},  {0x1FF1,0x1FF1,0x1FF1},
1257   {0x1FF2,0x1FF2,0x03A9},  {0x1FFC,0x1FF3,0x03A9},
1258   {0x1FF4,0x1FF4,0x03A9},  {0x1FF5,0x1FF5,0x1FF5},
1259   {0x1FF6,0x1FF6,0x03A9},  {0x1FF7,0x1FF7,0x03A9},
1260   {0x1FF8,0x1F78,0x039F},  {0x1FF9,0x1F79,0x1FF9},
1261   {0x1FFA,0x1F7C,0x03A9},  {0x1FFB,0x1F7D,0x1FFB},
1262   {0x1FFC,0x1FF3,0x03A9},  {0x1FFD,0x1FFD,0x1FFD},
1263   {0x1FFE,0x1FFE,0x1FFE},  {0x1FFF,0x1FFF,0x1FFF}
1264 };
1265 
1266 static const MY_UNICASE_CHARACTER plane21[]={
1267   {0x2100,0x2100,0x2100},  {0x2101,0x2101,0x2101},
1268   {0x2102,0x2102,0x2102},  {0x2103,0x2103,0x2103},
1269   {0x2104,0x2104,0x2104},  {0x2105,0x2105,0x2105},
1270   {0x2106,0x2106,0x2106},  {0x2107,0x2107,0x2107},
1271   {0x2108,0x2108,0x2108},  {0x2109,0x2109,0x2109},
1272   {0x210A,0x210A,0x210A},  {0x210B,0x210B,0x210B},
1273   {0x210C,0x210C,0x210C},  {0x210D,0x210D,0x210D},
1274   {0x210E,0x210E,0x210E},  {0x210F,0x210F,0x210F},
1275   {0x2110,0x2110,0x2110},  {0x2111,0x2111,0x2111},
1276   {0x2112,0x2112,0x2112},  {0x2113,0x2113,0x2113},
1277   {0x2114,0x2114,0x2114},  {0x2115,0x2115,0x2115},
1278   {0x2116,0x2116,0x2116},  {0x2117,0x2117,0x2117},
1279   {0x2118,0x2118,0x2118},  {0x2119,0x2119,0x2119},
1280   {0x211A,0x211A,0x211A},  {0x211B,0x211B,0x211B},
1281   {0x211C,0x211C,0x211C},  {0x211D,0x211D,0x211D},
1282   {0x211E,0x211E,0x211E},  {0x211F,0x211F,0x211F},
1283   {0x2120,0x2120,0x2120},  {0x2121,0x2121,0x2121},
1284   {0x2122,0x2122,0x2122},  {0x2123,0x2123,0x2123},
1285   {0x2124,0x2124,0x2124},  {0x2125,0x2125,0x2125},
1286   {0x2126,0x03C9,0x2126},  {0x2127,0x2127,0x2127},
1287   {0x2128,0x2128,0x2128},  {0x2129,0x2129,0x2129},
1288   {0x212A,0x006B,0x212A},  {0x212B,0x00E5,0x212B},
1289   {0x212C,0x212C,0x212C},  {0x212D,0x212D,0x212D},
1290   {0x212E,0x212E,0x212E},  {0x212F,0x212F,0x212F},
1291   {0x2130,0x2130,0x2130},  {0x2131,0x2131,0x2131},
1292   {0x2132,0x2132,0x2132},  {0x2133,0x2133,0x2133},
1293   {0x2134,0x2134,0x2134},  {0x2135,0x2135,0x2135},
1294   {0x2136,0x2136,0x2136},  {0x2137,0x2137,0x2137},
1295   {0x2138,0x2138,0x2138},  {0x2139,0x2139,0x2139},
1296   {0x213A,0x213A,0x213A},  {0x213B,0x213B,0x213B},
1297   {0x213C,0x213C,0x213C},  {0x213D,0x213D,0x213D},
1298   {0x213E,0x213E,0x213E},  {0x213F,0x213F,0x213F},
1299   {0x2140,0x2140,0x2140},  {0x2141,0x2141,0x2141},
1300   {0x2142,0x2142,0x2142},  {0x2143,0x2143,0x2143},
1301   {0x2144,0x2144,0x2144},  {0x2145,0x2145,0x2145},
1302   {0x2146,0x2146,0x2146},  {0x2147,0x2147,0x2147},
1303   {0x2148,0x2148,0x2148},  {0x2149,0x2149,0x2149},
1304   {0x214A,0x214A,0x214A},  {0x214B,0x214B,0x214B},
1305   {0x214C,0x214C,0x214C},  {0x214D,0x214D,0x214D},
1306   {0x214E,0x214E,0x214E},  {0x214F,0x214F,0x214F},
1307   {0x2150,0x2150,0x2150},  {0x2151,0x2151,0x2151},
1308   {0x2152,0x2152,0x2152},  {0x2153,0x2153,0x2153},
1309   {0x2154,0x2154,0x2154},  {0x2155,0x2155,0x2155},
1310   {0x2156,0x2156,0x2156},  {0x2157,0x2157,0x2157},
1311   {0x2158,0x2158,0x2158},  {0x2159,0x2159,0x2159},
1312   {0x215A,0x215A,0x215A},  {0x215B,0x215B,0x215B},
1313   {0x215C,0x215C,0x215C},  {0x215D,0x215D,0x215D},
1314   {0x215E,0x215E,0x215E},  {0x215F,0x215F,0x215F},
1315   {0x2160,0x2170,0x2160},  {0x2161,0x2171,0x2161},
1316   {0x2162,0x2172,0x2162},  {0x2163,0x2173,0x2163},
1317   {0x2164,0x2174,0x2164},  {0x2165,0x2175,0x2165},
1318   {0x2166,0x2176,0x2166},  {0x2167,0x2177,0x2167},
1319   {0x2168,0x2178,0x2168},  {0x2169,0x2179,0x2169},
1320   {0x216A,0x217A,0x216A},  {0x216B,0x217B,0x216B},
1321   {0x216C,0x217C,0x216C},  {0x216D,0x217D,0x216D},
1322   {0x216E,0x217E,0x216E},  {0x216F,0x217F,0x216F},
1323   {0x2160,0x2170,0x2160},  {0x2161,0x2171,0x2161},
1324   {0x2162,0x2172,0x2162},  {0x2163,0x2173,0x2163},
1325   {0x2164,0x2174,0x2164},  {0x2165,0x2175,0x2165},
1326   {0x2166,0x2176,0x2166},  {0x2167,0x2177,0x2167},
1327   {0x2168,0x2178,0x2168},  {0x2169,0x2179,0x2169},
1328   {0x216A,0x217A,0x216A},  {0x216B,0x217B,0x216B},
1329   {0x216C,0x217C,0x216C},  {0x216D,0x217D,0x216D},
1330   {0x216E,0x217E,0x216E},  {0x216F,0x217F,0x216F},
1331   {0x2180,0x2180,0x2180},  {0x2181,0x2181,0x2181},
1332   {0x2182,0x2182,0x2182},  {0x2183,0x2183,0x2183},
1333   {0x2184,0x2184,0x2184},  {0x2185,0x2185,0x2185},
1334   {0x2186,0x2186,0x2186},  {0x2187,0x2187,0x2187},
1335   {0x2188,0x2188,0x2188},  {0x2189,0x2189,0x2189},
1336   {0x218A,0x218A,0x218A},  {0x218B,0x218B,0x218B},
1337   {0x218C,0x218C,0x218C},  {0x218D,0x218D,0x218D},
1338   {0x218E,0x218E,0x218E},  {0x218F,0x218F,0x218F},
1339   {0x2190,0x2190,0x2190},  {0x2191,0x2191,0x2191},
1340   {0x2192,0x2192,0x2192},  {0x2193,0x2193,0x2193},
1341   {0x2194,0x2194,0x2194},  {0x2195,0x2195,0x2195},
1342   {0x2196,0x2196,0x2196},  {0x2197,0x2197,0x2197},
1343   {0x2198,0x2198,0x2198},  {0x2199,0x2199,0x2199},
1344   {0x219A,0x219A,0x219A},  {0x219B,0x219B,0x219B},
1345   {0x219C,0x219C,0x219C},  {0x219D,0x219D,0x219D},
1346   {0x219E,0x219E,0x219E},  {0x219F,0x219F,0x219F},
1347   {0x21A0,0x21A0,0x21A0},  {0x21A1,0x21A1,0x21A1},
1348   {0x21A2,0x21A2,0x21A2},  {0x21A3,0x21A3,0x21A3},
1349   {0x21A4,0x21A4,0x21A4},  {0x21A5,0x21A5,0x21A5},
1350   {0x21A6,0x21A6,0x21A6},  {0x21A7,0x21A7,0x21A7},
1351   {0x21A8,0x21A8,0x21A8},  {0x21A9,0x21A9,0x21A9},
1352   {0x21AA,0x21AA,0x21AA},  {0x21AB,0x21AB,0x21AB},
1353   {0x21AC,0x21AC,0x21AC},  {0x21AD,0x21AD,0x21AD},
1354   {0x21AE,0x21AE,0x21AE},  {0x21AF,0x21AF,0x21AF},
1355   {0x21B0,0x21B0,0x21B0},  {0x21B1,0x21B1,0x21B1},
1356   {0x21B2,0x21B2,0x21B2},  {0x21B3,0x21B3,0x21B3},
1357   {0x21B4,0x21B4,0x21B4},  {0x21B5,0x21B5,0x21B5},
1358   {0x21B6,0x21B6,0x21B6},  {0x21B7,0x21B7,0x21B7},
1359   {0x21B8,0x21B8,0x21B8},  {0x21B9,0x21B9,0x21B9},
1360   {0x21BA,0x21BA,0x21BA},  {0x21BB,0x21BB,0x21BB},
1361   {0x21BC,0x21BC,0x21BC},  {0x21BD,0x21BD,0x21BD},
1362   {0x21BE,0x21BE,0x21BE},  {0x21BF,0x21BF,0x21BF},
1363   {0x21C0,0x21C0,0x21C0},  {0x21C1,0x21C1,0x21C1},
1364   {0x21C2,0x21C2,0x21C2},  {0x21C3,0x21C3,0x21C3},
1365   {0x21C4,0x21C4,0x21C4},  {0x21C5,0x21C5,0x21C5},
1366   {0x21C6,0x21C6,0x21C6},  {0x21C7,0x21C7,0x21C7},
1367   {0x21C8,0x21C8,0x21C8},  {0x21C9,0x21C9,0x21C9},
1368   {0x21CA,0x21CA,0x21CA},  {0x21CB,0x21CB,0x21CB},
1369   {0x21CC,0x21CC,0x21CC},  {0x21CD,0x21CD,0x21CD},
1370   {0x21CE,0x21CE,0x21CE},  {0x21CF,0x21CF,0x21CF},
1371   {0x21D0,0x21D0,0x21D0},  {0x21D1,0x21D1,0x21D1},
1372   {0x21D2,0x21D2,0x21D2},  {0x21D3,0x21D3,0x21D3},
1373   {0x21D4,0x21D4,0x21D4},  {0x21D5,0x21D5,0x21D5},
1374   {0x21D6,0x21D6,0x21D6},  {0x21D7,0x21D7,0x21D7},
1375   {0x21D8,0x21D8,0x21D8},  {0x21D9,0x21D9,0x21D9},
1376   {0x21DA,0x21DA,0x21DA},  {0x21DB,0x21DB,0x21DB},
1377   {0x21DC,0x21DC,0x21DC},  {0x21DD,0x21DD,0x21DD},
1378   {0x21DE,0x21DE,0x21DE},  {0x21DF,0x21DF,0x21DF},
1379   {0x21E0,0x21E0,0x21E0},  {0x21E1,0x21E1,0x21E1},
1380   {0x21E2,0x21E2,0x21E2},  {0x21E3,0x21E3,0x21E3},
1381   {0x21E4,0x21E4,0x21E4},  {0x21E5,0x21E5,0x21E5},
1382   {0x21E6,0x21E6,0x21E6},  {0x21E7,0x21E7,0x21E7},
1383   {0x21E8,0x21E8,0x21E8},  {0x21E9,0x21E9,0x21E9},
1384   {0x21EA,0x21EA,0x21EA},  {0x21EB,0x21EB,0x21EB},
1385   {0x21EC,0x21EC,0x21EC},  {0x21ED,0x21ED,0x21ED},
1386   {0x21EE,0x21EE,0x21EE},  {0x21EF,0x21EF,0x21EF},
1387   {0x21F0,0x21F0,0x21F0},  {0x21F1,0x21F1,0x21F1},
1388   {0x21F2,0x21F2,0x21F2},  {0x21F3,0x21F3,0x21F3},
1389   {0x21F4,0x21F4,0x21F4},  {0x21F5,0x21F5,0x21F5},
1390   {0x21F6,0x21F6,0x21F6},  {0x21F7,0x21F7,0x21F7},
1391   {0x21F8,0x21F8,0x21F8},  {0x21F9,0x21F9,0x21F9},
1392   {0x21FA,0x21FA,0x21FA},  {0x21FB,0x21FB,0x21FB},
1393   {0x21FC,0x21FC,0x21FC},  {0x21FD,0x21FD,0x21FD},
1394   {0x21FE,0x21FE,0x21FE},  {0x21FF,0x21FF,0x21FF}
1395 };
1396 
1397 static const MY_UNICASE_CHARACTER plane24[]={
1398   {0x2400,0x2400,0x2400},  {0x2401,0x2401,0x2401},
1399   {0x2402,0x2402,0x2402},  {0x2403,0x2403,0x2403},
1400   {0x2404,0x2404,0x2404},  {0x2405,0x2405,0x2405},
1401   {0x2406,0x2406,0x2406},  {0x2407,0x2407,0x2407},
1402   {0x2408,0x2408,0x2408},  {0x2409,0x2409,0x2409},
1403   {0x240A,0x240A,0x240A},  {0x240B,0x240B,0x240B},
1404   {0x240C,0x240C,0x240C},  {0x240D,0x240D,0x240D},
1405   {0x240E,0x240E,0x240E},  {0x240F,0x240F,0x240F},
1406   {0x2410,0x2410,0x2410},  {0x2411,0x2411,0x2411},
1407   {0x2412,0x2412,0x2412},  {0x2413,0x2413,0x2413},
1408   {0x2414,0x2414,0x2414},  {0x2415,0x2415,0x2415},
1409   {0x2416,0x2416,0x2416},  {0x2417,0x2417,0x2417},
1410   {0x2418,0x2418,0x2418},  {0x2419,0x2419,0x2419},
1411   {0x241A,0x241A,0x241A},  {0x241B,0x241B,0x241B},
1412   {0x241C,0x241C,0x241C},  {0x241D,0x241D,0x241D},
1413   {0x241E,0x241E,0x241E},  {0x241F,0x241F,0x241F},
1414   {0x2420,0x2420,0x2420},  {0x2421,0x2421,0x2421},
1415   {0x2422,0x2422,0x2422},  {0x2423,0x2423,0x2423},
1416   {0x2424,0x2424,0x2424},  {0x2425,0x2425,0x2425},
1417   {0x2426,0x2426,0x2426},  {0x2427,0x2427,0x2427},
1418   {0x2428,0x2428,0x2428},  {0x2429,0x2429,0x2429},
1419   {0x242A,0x242A,0x242A},  {0x242B,0x242B,0x242B},
1420   {0x242C,0x242C,0x242C},  {0x242D,0x242D,0x242D},
1421   {0x242E,0x242E,0x242E},  {0x242F,0x242F,0x242F},
1422   {0x2430,0x2430,0x2430},  {0x2431,0x2431,0x2431},
1423   {0x2432,0x2432,0x2432},  {0x2433,0x2433,0x2433},
1424   {0x2434,0x2434,0x2434},  {0x2435,0x2435,0x2435},
1425   {0x2436,0x2436,0x2436},  {0x2437,0x2437,0x2437},
1426   {0x2438,0x2438,0x2438},  {0x2439,0x2439,0x2439},
1427   {0x243A,0x243A,0x243A},  {0x243B,0x243B,0x243B},
1428   {0x243C,0x243C,0x243C},  {0x243D,0x243D,0x243D},
1429   {0x243E,0x243E,0x243E},  {0x243F,0x243F,0x243F},
1430   {0x2440,0x2440,0x2440},  {0x2441,0x2441,0x2441},
1431   {0x2442,0x2442,0x2442},  {0x2443,0x2443,0x2443},
1432   {0x2444,0x2444,0x2444},  {0x2445,0x2445,0x2445},
1433   {0x2446,0x2446,0x2446},  {0x2447,0x2447,0x2447},
1434   {0x2448,0x2448,0x2448},  {0x2449,0x2449,0x2449},
1435   {0x244A,0x244A,0x244A},  {0x244B,0x244B,0x244B},
1436   {0x244C,0x244C,0x244C},  {0x244D,0x244D,0x244D},
1437   {0x244E,0x244E,0x244E},  {0x244F,0x244F,0x244F},
1438   {0x2450,0x2450,0x2450},  {0x2451,0x2451,0x2451},
1439   {0x2452,0x2452,0x2452},  {0x2453,0x2453,0x2453},
1440   {0x2454,0x2454,0x2454},  {0x2455,0x2455,0x2455},
1441   {0x2456,0x2456,0x2456},  {0x2457,0x2457,0x2457},
1442   {0x2458,0x2458,0x2458},  {0x2459,0x2459,0x2459},
1443   {0x245A,0x245A,0x245A},  {0x245B,0x245B,0x245B},
1444   {0x245C,0x245C,0x245C},  {0x245D,0x245D,0x245D},
1445   {0x245E,0x245E,0x245E},  {0x245F,0x245F,0x245F},
1446   {0x2460,0x2460,0x2460},  {0x2461,0x2461,0x2461},
1447   {0x2462,0x2462,0x2462},  {0x2463,0x2463,0x2463},
1448   {0x2464,0x2464,0x2464},  {0x2465,0x2465,0x2465},
1449   {0x2466,0x2466,0x2466},  {0x2467,0x2467,0x2467},
1450   {0x2468,0x2468,0x2468},  {0x2469,0x2469,0x2469},
1451   {0x246A,0x246A,0x246A},  {0x246B,0x246B,0x246B},
1452   {0x246C,0x246C,0x246C},  {0x246D,0x246D,0x246D},
1453   {0x246E,0x246E,0x246E},  {0x246F,0x246F,0x246F},
1454   {0x2470,0x2470,0x2470},  {0x2471,0x2471,0x2471},
1455   {0x2472,0x2472,0x2472},  {0x2473,0x2473,0x2473},
1456   {0x2474,0x2474,0x2474},  {0x2475,0x2475,0x2475},
1457   {0x2476,0x2476,0x2476},  {0x2477,0x2477,0x2477},
1458   {0x2478,0x2478,0x2478},  {0x2479,0x2479,0x2479},
1459   {0x247A,0x247A,0x247A},  {0x247B,0x247B,0x247B},
1460   {0x247C,0x247C,0x247C},  {0x247D,0x247D,0x247D},
1461   {0x247E,0x247E,0x247E},  {0x247F,0x247F,0x247F},
1462   {0x2480,0x2480,0x2480},  {0x2481,0x2481,0x2481},
1463   {0x2482,0x2482,0x2482},  {0x2483,0x2483,0x2483},
1464   {0x2484,0x2484,0x2484},  {0x2485,0x2485,0x2485},
1465   {0x2486,0x2486,0x2486},  {0x2487,0x2487,0x2487},
1466   {0x2488,0x2488,0x2488},  {0x2489,0x2489,0x2489},
1467   {0x248A,0x248A,0x248A},  {0x248B,0x248B,0x248B},
1468   {0x248C,0x248C,0x248C},  {0x248D,0x248D,0x248D},
1469   {0x248E,0x248E,0x248E},  {0x248F,0x248F,0x248F},
1470   {0x2490,0x2490,0x2490},  {0x2491,0x2491,0x2491},
1471   {0x2492,0x2492,0x2492},  {0x2493,0x2493,0x2493},
1472   {0x2494,0x2494,0x2494},  {0x2495,0x2495,0x2495},
1473   {0x2496,0x2496,0x2496},  {0x2497,0x2497,0x2497},
1474   {0x2498,0x2498,0x2498},  {0x2499,0x2499,0x2499},
1475   {0x249A,0x249A,0x249A},  {0x249B,0x249B,0x249B},
1476   {0x249C,0x249C,0x249C},  {0x249D,0x249D,0x249D},
1477   {0x249E,0x249E,0x249E},  {0x249F,0x249F,0x249F},
1478   {0x24A0,0x24A0,0x24A0},  {0x24A1,0x24A1,0x24A1},
1479   {0x24A2,0x24A2,0x24A2},  {0x24A3,0x24A3,0x24A3},
1480   {0x24A4,0x24A4,0x24A4},  {0x24A5,0x24A5,0x24A5},
1481   {0x24A6,0x24A6,0x24A6},  {0x24A7,0x24A7,0x24A7},
1482   {0x24A8,0x24A8,0x24A8},  {0x24A9,0x24A9,0x24A9},
1483   {0x24AA,0x24AA,0x24AA},  {0x24AB,0x24AB,0x24AB},
1484   {0x24AC,0x24AC,0x24AC},  {0x24AD,0x24AD,0x24AD},
1485   {0x24AE,0x24AE,0x24AE},  {0x24AF,0x24AF,0x24AF},
1486   {0x24B0,0x24B0,0x24B0},  {0x24B1,0x24B1,0x24B1},
1487   {0x24B2,0x24B2,0x24B2},  {0x24B3,0x24B3,0x24B3},
1488   {0x24B4,0x24B4,0x24B4},  {0x24B5,0x24B5,0x24B5},
1489   {0x24B6,0x24D0,0x24B6},  {0x24B7,0x24D1,0x24B7},
1490   {0x24B8,0x24D2,0x24B8},  {0x24B9,0x24D3,0x24B9},
1491   {0x24BA,0x24D4,0x24BA},  {0x24BB,0x24D5,0x24BB},
1492   {0x24BC,0x24D6,0x24BC},  {0x24BD,0x24D7,0x24BD},
1493   {0x24BE,0x24D8,0x24BE},  {0x24BF,0x24D9,0x24BF},
1494   {0x24C0,0x24DA,0x24C0},  {0x24C1,0x24DB,0x24C1},
1495   {0x24C2,0x24DC,0x24C2},  {0x24C3,0x24DD,0x24C3},
1496   {0x24C4,0x24DE,0x24C4},  {0x24C5,0x24DF,0x24C5},
1497   {0x24C6,0x24E0,0x24C6},  {0x24C7,0x24E1,0x24C7},
1498   {0x24C8,0x24E2,0x24C8},  {0x24C9,0x24E3,0x24C9},
1499   {0x24CA,0x24E4,0x24CA},  {0x24CB,0x24E5,0x24CB},
1500   {0x24CC,0x24E6,0x24CC},  {0x24CD,0x24E7,0x24CD},
1501   {0x24CE,0x24E8,0x24CE},  {0x24CF,0x24E9,0x24CF},
1502   {0x24B6,0x24D0,0x24B6},  {0x24B7,0x24D1,0x24B7},
1503   {0x24B8,0x24D2,0x24B8},  {0x24B9,0x24D3,0x24B9},
1504   {0x24BA,0x24D4,0x24BA},  {0x24BB,0x24D5,0x24BB},
1505   {0x24BC,0x24D6,0x24BC},  {0x24BD,0x24D7,0x24BD},
1506   {0x24BE,0x24D8,0x24BE},  {0x24BF,0x24D9,0x24BF},
1507   {0x24C0,0x24DA,0x24C0},  {0x24C1,0x24DB,0x24C1},
1508   {0x24C2,0x24DC,0x24C2},  {0x24C3,0x24DD,0x24C3},
1509   {0x24C4,0x24DE,0x24C4},  {0x24C5,0x24DF,0x24C5},
1510   {0x24C6,0x24E0,0x24C6},  {0x24C7,0x24E1,0x24C7},
1511   {0x24C8,0x24E2,0x24C8},  {0x24C9,0x24E3,0x24C9},
1512   {0x24CA,0x24E4,0x24CA},  {0x24CB,0x24E5,0x24CB},
1513   {0x24CC,0x24E6,0x24CC},  {0x24CD,0x24E7,0x24CD},
1514   {0x24CE,0x24E8,0x24CE},  {0x24CF,0x24E9,0x24CF},
1515   {0x24EA,0x24EA,0x24EA},  {0x24EB,0x24EB,0x24EB},
1516   {0x24EC,0x24EC,0x24EC},  {0x24ED,0x24ED,0x24ED},
1517   {0x24EE,0x24EE,0x24EE},  {0x24EF,0x24EF,0x24EF},
1518   {0x24F0,0x24F0,0x24F0},  {0x24F1,0x24F1,0x24F1},
1519   {0x24F2,0x24F2,0x24F2},  {0x24F3,0x24F3,0x24F3},
1520   {0x24F4,0x24F4,0x24F4},  {0x24F5,0x24F5,0x24F5},
1521   {0x24F6,0x24F6,0x24F6},  {0x24F7,0x24F7,0x24F7},
1522   {0x24F8,0x24F8,0x24F8},  {0x24F9,0x24F9,0x24F9},
1523   {0x24FA,0x24FA,0x24FA},  {0x24FB,0x24FB,0x24FB},
1524   {0x24FC,0x24FC,0x24FC},  {0x24FD,0x24FD,0x24FD},
1525   {0x24FE,0x24FE,0x24FE},  {0x24FF,0x24FF,0x24FF}
1526 };
1527 
1528 static const MY_UNICASE_CHARACTER planeFF[]={
1529   {0xFF00,0xFF00,0xFF00},  {0xFF01,0xFF01,0xFF01},
1530   {0xFF02,0xFF02,0xFF02},  {0xFF03,0xFF03,0xFF03},
1531   {0xFF04,0xFF04,0xFF04},  {0xFF05,0xFF05,0xFF05},
1532   {0xFF06,0xFF06,0xFF06},  {0xFF07,0xFF07,0xFF07},
1533   {0xFF08,0xFF08,0xFF08},  {0xFF09,0xFF09,0xFF09},
1534   {0xFF0A,0xFF0A,0xFF0A},  {0xFF0B,0xFF0B,0xFF0B},
1535   {0xFF0C,0xFF0C,0xFF0C},  {0xFF0D,0xFF0D,0xFF0D},
1536   {0xFF0E,0xFF0E,0xFF0E},  {0xFF0F,0xFF0F,0xFF0F},
1537   {0xFF10,0xFF10,0xFF10},  {0xFF11,0xFF11,0xFF11},
1538   {0xFF12,0xFF12,0xFF12},  {0xFF13,0xFF13,0xFF13},
1539   {0xFF14,0xFF14,0xFF14},  {0xFF15,0xFF15,0xFF15},
1540   {0xFF16,0xFF16,0xFF16},  {0xFF17,0xFF17,0xFF17},
1541   {0xFF18,0xFF18,0xFF18},  {0xFF19,0xFF19,0xFF19},
1542   {0xFF1A,0xFF1A,0xFF1A},  {0xFF1B,0xFF1B,0xFF1B},
1543   {0xFF1C,0xFF1C,0xFF1C},  {0xFF1D,0xFF1D,0xFF1D},
1544   {0xFF1E,0xFF1E,0xFF1E},  {0xFF1F,0xFF1F,0xFF1F},
1545   {0xFF20,0xFF20,0xFF20},  {0xFF21,0xFF41,0xFF21},
1546   {0xFF22,0xFF42,0xFF22},  {0xFF23,0xFF43,0xFF23},
1547   {0xFF24,0xFF44,0xFF24},  {0xFF25,0xFF45,0xFF25},
1548   {0xFF26,0xFF46,0xFF26},  {0xFF27,0xFF47,0xFF27},
1549   {0xFF28,0xFF48,0xFF28},  {0xFF29,0xFF49,0xFF29},
1550   {0xFF2A,0xFF4A,0xFF2A},  {0xFF2B,0xFF4B,0xFF2B},
1551   {0xFF2C,0xFF4C,0xFF2C},  {0xFF2D,0xFF4D,0xFF2D},
1552   {0xFF2E,0xFF4E,0xFF2E},  {0xFF2F,0xFF4F,0xFF2F},
1553   {0xFF30,0xFF50,0xFF30},  {0xFF31,0xFF51,0xFF31},
1554   {0xFF32,0xFF52,0xFF32},  {0xFF33,0xFF53,0xFF33},
1555   {0xFF34,0xFF54,0xFF34},  {0xFF35,0xFF55,0xFF35},
1556   {0xFF36,0xFF56,0xFF36},  {0xFF37,0xFF57,0xFF37},
1557   {0xFF38,0xFF58,0xFF38},  {0xFF39,0xFF59,0xFF39},
1558   {0xFF3A,0xFF5A,0xFF3A},  {0xFF3B,0xFF3B,0xFF3B},
1559   {0xFF3C,0xFF3C,0xFF3C},  {0xFF3D,0xFF3D,0xFF3D},
1560   {0xFF3E,0xFF3E,0xFF3E},  {0xFF3F,0xFF3F,0xFF3F},
1561   {0xFF40,0xFF40,0xFF40},  {0xFF21,0xFF41,0xFF21},
1562   {0xFF22,0xFF42,0xFF22},  {0xFF23,0xFF43,0xFF23},
1563   {0xFF24,0xFF44,0xFF24},  {0xFF25,0xFF45,0xFF25},
1564   {0xFF26,0xFF46,0xFF26},  {0xFF27,0xFF47,0xFF27},
1565   {0xFF28,0xFF48,0xFF28},  {0xFF29,0xFF49,0xFF29},
1566   {0xFF2A,0xFF4A,0xFF2A},  {0xFF2B,0xFF4B,0xFF2B},
1567   {0xFF2C,0xFF4C,0xFF2C},  {0xFF2D,0xFF4D,0xFF2D},
1568   {0xFF2E,0xFF4E,0xFF2E},  {0xFF2F,0xFF4F,0xFF2F},
1569   {0xFF30,0xFF50,0xFF30},  {0xFF31,0xFF51,0xFF31},
1570   {0xFF32,0xFF52,0xFF32},  {0xFF33,0xFF53,0xFF33},
1571   {0xFF34,0xFF54,0xFF34},  {0xFF35,0xFF55,0xFF35},
1572   {0xFF36,0xFF56,0xFF36},  {0xFF37,0xFF57,0xFF37},
1573   {0xFF38,0xFF58,0xFF38},  {0xFF39,0xFF59,0xFF39},
1574   {0xFF3A,0xFF5A,0xFF3A},  {0xFF5B,0xFF5B,0xFF5B},
1575   {0xFF5C,0xFF5C,0xFF5C},  {0xFF5D,0xFF5D,0xFF5D},
1576   {0xFF5E,0xFF5E,0xFF5E},  {0xFF5F,0xFF5F,0xFF5F},
1577   {0xFF60,0xFF60,0xFF60},  {0xFF61,0xFF61,0xFF61},
1578   {0xFF62,0xFF62,0xFF62},  {0xFF63,0xFF63,0xFF63},
1579   {0xFF64,0xFF64,0xFF64},  {0xFF65,0xFF65,0xFF65},
1580   {0xFF66,0xFF66,0xFF66},  {0xFF67,0xFF67,0xFF67},
1581   {0xFF68,0xFF68,0xFF68},  {0xFF69,0xFF69,0xFF69},
1582   {0xFF6A,0xFF6A,0xFF6A},  {0xFF6B,0xFF6B,0xFF6B},
1583   {0xFF6C,0xFF6C,0xFF6C},  {0xFF6D,0xFF6D,0xFF6D},
1584   {0xFF6E,0xFF6E,0xFF6E},  {0xFF6F,0xFF6F,0xFF6F},
1585   {0xFF70,0xFF70,0xFF70},  {0xFF71,0xFF71,0xFF71},
1586   {0xFF72,0xFF72,0xFF72},  {0xFF73,0xFF73,0xFF73},
1587   {0xFF74,0xFF74,0xFF74},  {0xFF75,0xFF75,0xFF75},
1588   {0xFF76,0xFF76,0xFF76},  {0xFF77,0xFF77,0xFF77},
1589   {0xFF78,0xFF78,0xFF78},  {0xFF79,0xFF79,0xFF79},
1590   {0xFF7A,0xFF7A,0xFF7A},  {0xFF7B,0xFF7B,0xFF7B},
1591   {0xFF7C,0xFF7C,0xFF7C},  {0xFF7D,0xFF7D,0xFF7D},
1592   {0xFF7E,0xFF7E,0xFF7E},  {0xFF7F,0xFF7F,0xFF7F},
1593   {0xFF80,0xFF80,0xFF80},  {0xFF81,0xFF81,0xFF81},
1594   {0xFF82,0xFF82,0xFF82},  {0xFF83,0xFF83,0xFF83},
1595   {0xFF84,0xFF84,0xFF84},  {0xFF85,0xFF85,0xFF85},
1596   {0xFF86,0xFF86,0xFF86},  {0xFF87,0xFF87,0xFF87},
1597   {0xFF88,0xFF88,0xFF88},  {0xFF89,0xFF89,0xFF89},
1598   {0xFF8A,0xFF8A,0xFF8A},  {0xFF8B,0xFF8B,0xFF8B},
1599   {0xFF8C,0xFF8C,0xFF8C},  {0xFF8D,0xFF8D,0xFF8D},
1600   {0xFF8E,0xFF8E,0xFF8E},  {0xFF8F,0xFF8F,0xFF8F},
1601   {0xFF90,0xFF90,0xFF90},  {0xFF91,0xFF91,0xFF91},
1602   {0xFF92,0xFF92,0xFF92},  {0xFF93,0xFF93,0xFF93},
1603   {0xFF94,0xFF94,0xFF94},  {0xFF95,0xFF95,0xFF95},
1604   {0xFF96,0xFF96,0xFF96},  {0xFF97,0xFF97,0xFF97},
1605   {0xFF98,0xFF98,0xFF98},  {0xFF99,0xFF99,0xFF99},
1606   {0xFF9A,0xFF9A,0xFF9A},  {0xFF9B,0xFF9B,0xFF9B},
1607   {0xFF9C,0xFF9C,0xFF9C},  {0xFF9D,0xFF9D,0xFF9D},
1608   {0xFF9E,0xFF9E,0xFF9E},  {0xFF9F,0xFF9F,0xFF9F},
1609   {0xFFA0,0xFFA0,0xFFA0},  {0xFFA1,0xFFA1,0xFFA1},
1610   {0xFFA2,0xFFA2,0xFFA2},  {0xFFA3,0xFFA3,0xFFA3},
1611   {0xFFA4,0xFFA4,0xFFA4},  {0xFFA5,0xFFA5,0xFFA5},
1612   {0xFFA6,0xFFA6,0xFFA6},  {0xFFA7,0xFFA7,0xFFA7},
1613   {0xFFA8,0xFFA8,0xFFA8},  {0xFFA9,0xFFA9,0xFFA9},
1614   {0xFFAA,0xFFAA,0xFFAA},  {0xFFAB,0xFFAB,0xFFAB},
1615   {0xFFAC,0xFFAC,0xFFAC},  {0xFFAD,0xFFAD,0xFFAD},
1616   {0xFFAE,0xFFAE,0xFFAE},  {0xFFAF,0xFFAF,0xFFAF},
1617   {0xFFB0,0xFFB0,0xFFB0},  {0xFFB1,0xFFB1,0xFFB1},
1618   {0xFFB2,0xFFB2,0xFFB2},  {0xFFB3,0xFFB3,0xFFB3},
1619   {0xFFB4,0xFFB4,0xFFB4},  {0xFFB5,0xFFB5,0xFFB5},
1620   {0xFFB6,0xFFB6,0xFFB6},  {0xFFB7,0xFFB7,0xFFB7},
1621   {0xFFB8,0xFFB8,0xFFB8},  {0xFFB9,0xFFB9,0xFFB9},
1622   {0xFFBA,0xFFBA,0xFFBA},  {0xFFBB,0xFFBB,0xFFBB},
1623   {0xFFBC,0xFFBC,0xFFBC},  {0xFFBD,0xFFBD,0xFFBD},
1624   {0xFFBE,0xFFBE,0xFFBE},  {0xFFBF,0xFFBF,0xFFBF},
1625   {0xFFC0,0xFFC0,0xFFC0},  {0xFFC1,0xFFC1,0xFFC1},
1626   {0xFFC2,0xFFC2,0xFFC2},  {0xFFC3,0xFFC3,0xFFC3},
1627   {0xFFC4,0xFFC4,0xFFC4},  {0xFFC5,0xFFC5,0xFFC5},
1628   {0xFFC6,0xFFC6,0xFFC6},  {0xFFC7,0xFFC7,0xFFC7},
1629   {0xFFC8,0xFFC8,0xFFC8},  {0xFFC9,0xFFC9,0xFFC9},
1630   {0xFFCA,0xFFCA,0xFFCA},  {0xFFCB,0xFFCB,0xFFCB},
1631   {0xFFCC,0xFFCC,0xFFCC},  {0xFFCD,0xFFCD,0xFFCD},
1632   {0xFFCE,0xFFCE,0xFFCE},  {0xFFCF,0xFFCF,0xFFCF},
1633   {0xFFD0,0xFFD0,0xFFD0},  {0xFFD1,0xFFD1,0xFFD1},
1634   {0xFFD2,0xFFD2,0xFFD2},  {0xFFD3,0xFFD3,0xFFD3},
1635   {0xFFD4,0xFFD4,0xFFD4},  {0xFFD5,0xFFD5,0xFFD5},
1636   {0xFFD6,0xFFD6,0xFFD6},  {0xFFD7,0xFFD7,0xFFD7},
1637   {0xFFD8,0xFFD8,0xFFD8},  {0xFFD9,0xFFD9,0xFFD9},
1638   {0xFFDA,0xFFDA,0xFFDA},  {0xFFDB,0xFFDB,0xFFDB},
1639   {0xFFDC,0xFFDC,0xFFDC},  {0xFFDD,0xFFDD,0xFFDD},
1640   {0xFFDE,0xFFDE,0xFFDE},  {0xFFDF,0xFFDF,0xFFDF},
1641   {0xFFE0,0xFFE0,0xFFE0},  {0xFFE1,0xFFE1,0xFFE1},
1642   {0xFFE2,0xFFE2,0xFFE2},  {0xFFE3,0xFFE3,0xFFE3},
1643   {0xFFE4,0xFFE4,0xFFE4},  {0xFFE5,0xFFE5,0xFFE5},
1644   {0xFFE6,0xFFE6,0xFFE6},  {0xFFE7,0xFFE7,0xFFE7},
1645   {0xFFE8,0xFFE8,0xFFE8},  {0xFFE9,0xFFE9,0xFFE9},
1646   {0xFFEA,0xFFEA,0xFFEA},  {0xFFEB,0xFFEB,0xFFEB},
1647   {0xFFEC,0xFFEC,0xFFEC},  {0xFFED,0xFFED,0xFFED},
1648   {0xFFEE,0xFFEE,0xFFEE},  {0xFFEF,0xFFEF,0xFFEF},
1649   {0xFFF0,0xFFF0,0xFFF0},  {0xFFF1,0xFFF1,0xFFF1},
1650   {0xFFF2,0xFFF2,0xFFF2},  {0xFFF3,0xFFF3,0xFFF3},
1651   {0xFFF4,0xFFF4,0xFFF4},  {0xFFF5,0xFFF5,0xFFF5},
1652   {0xFFF6,0xFFF6,0xFFF6},  {0xFFF7,0xFFF7,0xFFF7},
1653   {0xFFF8,0xFFF8,0xFFF8},  {0xFFF9,0xFFF9,0xFFF9},
1654   {0xFFFA,0xFFFA,0xFFFA},  {0xFFFB,0xFFFB,0xFFFB},
1655   {0xFFFC,0xFFFC,0xFFFC},  {0xFFFD,0xFFFD,0xFFFD},
1656   {0xFFFE,0xFFFE,0xFFFE},  {0xFFFF,0xFFFF,0xFFFF}
1657 };
1658 
1659 
1660 static const MY_UNICASE_CHARACTER *my_unicase_pages_default[256]=
1661 {
1662  plane00, plane01, plane02, plane03, plane04, plane05,    NULL,    NULL,
1663     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1664     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1665     NULL,    NULL,    NULL,    NULL,    NULL,    NULL, plane1E, plane1F,
1666     NULL, plane21,    NULL,    NULL, plane24,    NULL,    NULL,    NULL,
1667     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1668     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1669     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1670     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1671     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1672     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1673     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1674     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1675     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1676     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1677     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1678     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1679     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1680     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1681     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1682     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1683     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1684     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1685     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1686     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1687     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1688     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1689     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1690     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1691     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1692     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1693     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL, planeFF
1694 };
1695 
1696 
1697 MY_UNICASE_INFO my_unicase_default=
1698 {
1699   0xFFFF,
1700   my_unicase_pages_default
1701 };
1702 
1703 
1704 /*
1705   Reproduce old utf8_general_ci behaviour before we fixed Bug#27877.
1706 */
1707 static const MY_UNICASE_CHARACTER *my_unicase_pages_mysql500[256]={
1708  plane00_mysql500,
1709           plane01, plane02, plane03, plane04, plane05,    NULL,    NULL,
1710     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1711     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1712     NULL,    NULL,    NULL,    NULL,    NULL,    NULL, plane1E, plane1F,
1713     NULL, plane21,    NULL,    NULL, plane24,    NULL,    NULL,    NULL,
1714     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1715     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1716     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1717     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1718     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1719     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1720     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1721     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1722     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1723     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1724     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1725     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1726     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1727     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1728     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1729     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1730     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1731     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1732     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1733     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1734     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1735     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1736     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1737     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1738     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1739     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1740     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL, planeFF
1741 
1742 };
1743 
1744 
1745 MY_UNICASE_INFO my_unicase_mysql500=
1746 {
1747   0xFFFF,
1748   my_unicase_pages_mysql500
1749 };
1750 
1751 
1752 /*
1753   Turkish lower/upper mapping:
1754   1. LOWER(0x0049 LATIN CAPITAL LETTER I) ->
1755            0x0131 LATIN SMALL   LETTER DOTLESS I
1756   2. UPPER(0x0069 LATIN SMALL   LETTER I) ->
1757            0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
1758 */
1759 
1760 static const MY_UNICASE_CHARACTER turk00[]=
1761 {
1762   {0x0000,0x0000,0x0000},  {0x0001,0x0001,0x0001},
1763   {0x0002,0x0002,0x0002},  {0x0003,0x0003,0x0003},
1764   {0x0004,0x0004,0x0004},  {0x0005,0x0005,0x0005},
1765   {0x0006,0x0006,0x0006},  {0x0007,0x0007,0x0007},
1766   {0x0008,0x0008,0x0008},  {0x0009,0x0009,0x0009},
1767   {0x000A,0x000A,0x000A},  {0x000B,0x000B,0x000B},
1768   {0x000C,0x000C,0x000C},  {0x000D,0x000D,0x000D},
1769   {0x000E,0x000E,0x000E},  {0x000F,0x000F,0x000F},
1770   {0x0010,0x0010,0x0010},  {0x0011,0x0011,0x0011},
1771   {0x0012,0x0012,0x0012},  {0x0013,0x0013,0x0013},
1772   {0x0014,0x0014,0x0014},  {0x0015,0x0015,0x0015},
1773   {0x0016,0x0016,0x0016},  {0x0017,0x0017,0x0017},
1774   {0x0018,0x0018,0x0018},  {0x0019,0x0019,0x0019},
1775   {0x001A,0x001A,0x001A},  {0x001B,0x001B,0x001B},
1776   {0x001C,0x001C,0x001C},  {0x001D,0x001D,0x001D},
1777   {0x001E,0x001E,0x001E},  {0x001F,0x001F,0x001F},
1778   {0x0020,0x0020,0x0020},  {0x0021,0x0021,0x0021},
1779   {0x0022,0x0022,0x0022},  {0x0023,0x0023,0x0023},
1780   {0x0024,0x0024,0x0024},  {0x0025,0x0025,0x0025},
1781   {0x0026,0x0026,0x0026},  {0x0027,0x0027,0x0027},
1782   {0x0028,0x0028,0x0028},  {0x0029,0x0029,0x0029},
1783   {0x002A,0x002A,0x002A},  {0x002B,0x002B,0x002B},
1784   {0x002C,0x002C,0x002C},  {0x002D,0x002D,0x002D},
1785   {0x002E,0x002E,0x002E},  {0x002F,0x002F,0x002F},
1786   {0x0030,0x0030,0x0030},  {0x0031,0x0031,0x0031},
1787   {0x0032,0x0032,0x0032},  {0x0033,0x0033,0x0033},
1788   {0x0034,0x0034,0x0034},  {0x0035,0x0035,0x0035},
1789   {0x0036,0x0036,0x0036},  {0x0037,0x0037,0x0037},
1790   {0x0038,0x0038,0x0038},  {0x0039,0x0039,0x0039},
1791   {0x003A,0x003A,0x003A},  {0x003B,0x003B,0x003B},
1792   {0x003C,0x003C,0x003C},  {0x003D,0x003D,0x003D},
1793   {0x003E,0x003E,0x003E},  {0x003F,0x003F,0x003F},
1794   {0x0040,0x0040,0x0040},  {0x0041,0x0061,0x0041},
1795   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
1796   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
1797   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
1798   {0x0048,0x0068,0x0048},  {0x0049,0x0131,0x0049},
1799   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
1800   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
1801   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
1802   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
1803   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
1804   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
1805   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
1806   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
1807   {0x005A,0x007A,0x005A},  {0x005B,0x005B,0x005B},
1808   {0x005C,0x005C,0x005C},  {0x005D,0x005D,0x005D},
1809   {0x005E,0x005E,0x005E},  {0x005F,0x005F,0x005F},
1810   {0x0060,0x0060,0x0060},  {0x0041,0x0061,0x0041},
1811   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
1812   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
1813   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
1814   {0x0048,0x0068,0x0048},  {0x0130,0x0069,0x0049},
1815   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
1816   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
1817   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
1818   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
1819   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
1820   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
1821   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
1822   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
1823   {0x005A,0x007A,0x005A},  {0x007B,0x007B,0x007B},
1824   {0x007C,0x007C,0x007C},  {0x007D,0x007D,0x007D},
1825   {0x007E,0x007E,0x007E},  {0x007F,0x007F,0x007F},
1826   {0x0080,0x0080,0x0080},  {0x0081,0x0081,0x0081},
1827   {0x0082,0x0082,0x0082},  {0x0083,0x0083,0x0083},
1828   {0x0084,0x0084,0x0084},  {0x0085,0x0085,0x0085},
1829   {0x0086,0x0086,0x0086},  {0x0087,0x0087,0x0087},
1830   {0x0088,0x0088,0x0088},  {0x0089,0x0089,0x0089},
1831   {0x008A,0x008A,0x008A},  {0x008B,0x008B,0x008B},
1832   {0x008C,0x008C,0x008C},  {0x008D,0x008D,0x008D},
1833   {0x008E,0x008E,0x008E},  {0x008F,0x008F,0x008F},
1834   {0x0090,0x0090,0x0090},  {0x0091,0x0091,0x0091},
1835   {0x0092,0x0092,0x0092},  {0x0093,0x0093,0x0093},
1836   {0x0094,0x0094,0x0094},  {0x0095,0x0095,0x0095},
1837   {0x0096,0x0096,0x0096},  {0x0097,0x0097,0x0097},
1838   {0x0098,0x0098,0x0098},  {0x0099,0x0099,0x0099},
1839   {0x009A,0x009A,0x009A},  {0x009B,0x009B,0x009B},
1840   {0x009C,0x009C,0x009C},  {0x009D,0x009D,0x009D},
1841   {0x009E,0x009E,0x009E},  {0x009F,0x009F,0x009F},
1842   {0x00A0,0x00A0,0x00A0},  {0x00A1,0x00A1,0x00A1},
1843   {0x00A2,0x00A2,0x00A2},  {0x00A3,0x00A3,0x00A3},
1844   {0x00A4,0x00A4,0x00A4},  {0x00A5,0x00A5,0x00A5},
1845   {0x00A6,0x00A6,0x00A6},  {0x00A7,0x00A7,0x00A7},
1846   {0x00A8,0x00A8,0x00A8},  {0x00A9,0x00A9,0x00A9},
1847   {0x00AA,0x00AA,0x00AA},  {0x00AB,0x00AB,0x00AB},
1848   {0x00AC,0x00AC,0x00AC},  {0x00AD,0x00AD,0x00AD},
1849   {0x00AE,0x00AE,0x00AE},  {0x00AF,0x00AF,0x00AF},
1850   {0x00B0,0x00B0,0x00B0},  {0x00B1,0x00B1,0x00B1},
1851   {0x00B2,0x00B2,0x00B2},  {0x00B3,0x00B3,0x00B3},
1852   {0x00B4,0x00B4,0x00B4},  {0x039C,0x00B5,0x039C},
1853   {0x00B6,0x00B6,0x00B6},  {0x00B7,0x00B7,0x00B7},
1854   {0x00B8,0x00B8,0x00B8},  {0x00B9,0x00B9,0x00B9},
1855   {0x00BA,0x00BA,0x00BA},  {0x00BB,0x00BB,0x00BB},
1856   {0x00BC,0x00BC,0x00BC},  {0x00BD,0x00BD,0x00BD},
1857   {0x00BE,0x00BE,0x00BE},  {0x00BF,0x00BF,0x00BF},
1858   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
1859   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
1860   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
1861   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
1862   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
1863   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
1864   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
1865   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
1866   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
1867   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
1868   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
1869   {0x00D6,0x00F6,0x004F},  {0x00D7,0x00D7,0x00D7},
1870   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
1871   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
1872   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
1873   {0x00DE,0x00FE,0x00DE},  {0x00DF,0x00DF,0x00DF},
1874   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
1875   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
1876   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
1877   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
1878   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
1879   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
1880   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
1881   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
1882   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
1883   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
1884   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
1885   {0x00D6,0x00F6,0x004F},  {0x00F7,0x00F7,0x00F7},
1886   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
1887   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
1888   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
1889   {0x00DE,0x00FE,0x00DE},  {0x0178,0x00FF,0x0059}
1890 };
1891 
1892 
1893 
1894 static const MY_UNICASE_CHARACTER *my_unicase_pages_turkish[256]=
1895 {
1896   turk00, plane01, plane02, plane03, plane04, plane05,    NULL,    NULL,
1897     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1898     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1899     NULL,    NULL,    NULL,    NULL,    NULL,    NULL, plane1E, plane1F,
1900     NULL, plane21,    NULL,    NULL, plane24,    NULL,    NULL,    NULL,
1901     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1902     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1903     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1904     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1905     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1906     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1907     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1908     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1909     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1910     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1911     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1912     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1913     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1914     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1915     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1916     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1917     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1918     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1919     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1920     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1921     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1922     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1923     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1924     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1925     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1926     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1927     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL, planeFF
1928 };
1929 
1930 
1931 MY_UNICASE_INFO my_unicase_turkish=
1932 {
1933   0xFFFF,
1934   my_unicase_pages_turkish
1935 };
1936 
1937 
1938 /* Unicode-5.2.0 case folding information */
1939 static const MY_UNICASE_CHARACTER u520p00[]={
1940   {0x0000,0x0000,0x0000},  {0x0001,0x0001,0x0001}, /* 0000 */
1941   {0x0002,0x0002,0x0002},  {0x0003,0x0003,0x0003}, /* 0002 */
1942   {0x0004,0x0004,0x0004},  {0x0005,0x0005,0x0005}, /* 0004 */
1943   {0x0006,0x0006,0x0006},  {0x0007,0x0007,0x0007}, /* 0006 */
1944   {0x0008,0x0008,0x0008},  {0x0009,0x0009,0x0009}, /* 0008 */
1945   {0x000A,0x000A,0x000A},  {0x000B,0x000B,0x000B}, /* 000A */
1946   {0x000C,0x000C,0x000C},  {0x000D,0x000D,0x000D}, /* 000C */
1947   {0x000E,0x000E,0x000E},  {0x000F,0x000F,0x000F}, /* 000E */
1948   {0x0010,0x0010,0x0010},  {0x0011,0x0011,0x0011}, /* 0010 */
1949   {0x0012,0x0012,0x0012},  {0x0013,0x0013,0x0013}, /* 0012 */
1950   {0x0014,0x0014,0x0014},  {0x0015,0x0015,0x0015}, /* 0014 */
1951   {0x0016,0x0016,0x0016},  {0x0017,0x0017,0x0017}, /* 0016 */
1952   {0x0018,0x0018,0x0018},  {0x0019,0x0019,0x0019}, /* 0018 */
1953   {0x001A,0x001A,0x001A},  {0x001B,0x001B,0x001B}, /* 001A */
1954   {0x001C,0x001C,0x001C},  {0x001D,0x001D,0x001D}, /* 001C */
1955   {0x001E,0x001E,0x001E},  {0x001F,0x001F,0x001F}, /* 001E */
1956   {0x0020,0x0020,0x0020},  {0x0021,0x0021,0x0021}, /* 0020 */
1957   {0x0022,0x0022,0x0022},  {0x0023,0x0023,0x0023}, /* 0022 */
1958   {0x0024,0x0024,0x0024},  {0x0025,0x0025,0x0025}, /* 0024 */
1959   {0x0026,0x0026,0x0026},  {0x0027,0x0027,0x0027}, /* 0026 */
1960   {0x0028,0x0028,0x0028},  {0x0029,0x0029,0x0029}, /* 0028 */
1961   {0x002A,0x002A,0x002A},  {0x002B,0x002B,0x002B}, /* 002A */
1962   {0x002C,0x002C,0x002C},  {0x002D,0x002D,0x002D}, /* 002C */
1963   {0x002E,0x002E,0x002E},  {0x002F,0x002F,0x002F}, /* 002E */
1964   {0x0030,0x0030,0x0030},  {0x0031,0x0031,0x0031}, /* 0030 */
1965   {0x0032,0x0032,0x0032},  {0x0033,0x0033,0x0033}, /* 0032 */
1966   {0x0034,0x0034,0x0034},  {0x0035,0x0035,0x0035}, /* 0034 */
1967   {0x0036,0x0036,0x0036},  {0x0037,0x0037,0x0037}, /* 0036 */
1968   {0x0038,0x0038,0x0038},  {0x0039,0x0039,0x0039}, /* 0038 */
1969   {0x003A,0x003A,0x003A},  {0x003B,0x003B,0x003B}, /* 003A */
1970   {0x003C,0x003C,0x003C},  {0x003D,0x003D,0x003D}, /* 003C */
1971   {0x003E,0x003E,0x003E},  {0x003F,0x003F,0x003F}, /* 003E */
1972   {0x0040,0x0040,0x0040},  {0x0041,0x0061,0x0041}, /* 0040 */
1973   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043}, /* 0042 */
1974   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045}, /* 0044 */
1975   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047}, /* 0046 */
1976   {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049}, /* 0048 */
1977   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B}, /* 004A */
1978   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D}, /* 004C */
1979   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F}, /* 004E */
1980   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051}, /* 0050 */
1981   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053}, /* 0052 */
1982   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055}, /* 0054 */
1983   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057}, /* 0056 */
1984   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059}, /* 0058 */
1985   {0x005A,0x007A,0x005A},  {0x005B,0x005B,0x005B}, /* 005A */
1986   {0x005C,0x005C,0x005C},  {0x005D,0x005D,0x005D}, /* 005C */
1987   {0x005E,0x005E,0x005E},  {0x005F,0x005F,0x005F}, /* 005E */
1988   {0x0060,0x0060,0x0060},  {0x0041,0x0061,0x0041}, /* 0060 */
1989   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043}, /* 0062 */
1990   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045}, /* 0064 */
1991   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047}, /* 0066 */
1992   {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049}, /* 0068 */
1993   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B}, /* 006A */
1994   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D}, /* 006C */
1995   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F}, /* 006E */
1996   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051}, /* 0070 */
1997   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053}, /* 0072 */
1998   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055}, /* 0074 */
1999   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057}, /* 0076 */
2000   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059}, /* 0078 */
2001   {0x005A,0x007A,0x005A},  {0x007B,0x007B,0x007B}, /* 007A */
2002   {0x007C,0x007C,0x007C},  {0x007D,0x007D,0x007D}, /* 007C */
2003   {0x007E,0x007E,0x007E},  {0x007F,0x007F,0x007F}, /* 007E */
2004   {0x0080,0x0080,0x0080},  {0x0081,0x0081,0x0081}, /* 0080 */
2005   {0x0082,0x0082,0x0082},  {0x0083,0x0083,0x0083}, /* 0082 */
2006   {0x0084,0x0084,0x0084},  {0x0085,0x0085,0x0085}, /* 0084 */
2007   {0x0086,0x0086,0x0086},  {0x0087,0x0087,0x0087}, /* 0086 */
2008   {0x0088,0x0088,0x0088},  {0x0089,0x0089,0x0089}, /* 0088 */
2009   {0x008A,0x008A,0x008A},  {0x008B,0x008B,0x008B}, /* 008A */
2010   {0x008C,0x008C,0x008C},  {0x008D,0x008D,0x008D}, /* 008C */
2011   {0x008E,0x008E,0x008E},  {0x008F,0x008F,0x008F}, /* 008E */
2012   {0x0090,0x0090,0x0090},  {0x0091,0x0091,0x0091}, /* 0090 */
2013   {0x0092,0x0092,0x0092},  {0x0093,0x0093,0x0093}, /* 0092 */
2014   {0x0094,0x0094,0x0094},  {0x0095,0x0095,0x0095}, /* 0094 */
2015   {0x0096,0x0096,0x0096},  {0x0097,0x0097,0x0097}, /* 0096 */
2016   {0x0098,0x0098,0x0098},  {0x0099,0x0099,0x0099}, /* 0098 */
2017   {0x009A,0x009A,0x009A},  {0x009B,0x009B,0x009B}, /* 009A */
2018   {0x009C,0x009C,0x009C},  {0x009D,0x009D,0x009D}, /* 009C */
2019   {0x009E,0x009E,0x009E},  {0x009F,0x009F,0x009F}, /* 009E */
2020   {0x00A0,0x00A0,0x00A0},  {0x00A1,0x00A1,0x00A1}, /* 00A0 */
2021   {0x00A2,0x00A2,0x00A2},  {0x00A3,0x00A3,0x00A3}, /* 00A2 */
2022   {0x00A4,0x00A4,0x00A4},  {0x00A5,0x00A5,0x00A5}, /* 00A4 */
2023   {0x00A6,0x00A6,0x00A6},  {0x00A7,0x00A7,0x00A7}, /* 00A6 */
2024   {0x00A8,0x00A8,0x00A8},  {0x00A9,0x00A9,0x00A9}, /* 00A8 */
2025   {0x00AA,0x00AA,0x00AA},  {0x00AB,0x00AB,0x00AB}, /* 00AA */
2026   {0x00AC,0x00AC,0x00AC},  {0x00AD,0x00AD,0x00AD}, /* 00AC */
2027   {0x00AE,0x00AE,0x00AE},  {0x00AF,0x00AF,0x00AF}, /* 00AE */
2028   {0x00B0,0x00B0,0x00B0},  {0x00B1,0x00B1,0x00B1}, /* 00B0 */
2029   {0x00B2,0x00B2,0x00B2},  {0x00B3,0x00B3,0x00B3}, /* 00B2 */
2030   {0x00B4,0x00B4,0x00B4},  {0x039C,0x00B5,0x039C}, /* 00B4 */
2031   {0x00B6,0x00B6,0x00B6},  {0x00B7,0x00B7,0x00B7}, /* 00B6 */
2032   {0x00B8,0x00B8,0x00B8},  {0x00B9,0x00B9,0x00B9}, /* 00B8 */
2033   {0x00BA,0x00BA,0x00BA},  {0x00BB,0x00BB,0x00BB}, /* 00BA */
2034   {0x00BC,0x00BC,0x00BC},  {0x00BD,0x00BD,0x00BD}, /* 00BC */
2035   {0x00BE,0x00BE,0x00BE},  {0x00BF,0x00BF,0x00BF}, /* 00BE */
2036   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041}, /* 00C0 */
2037   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041}, /* 00C2 */
2038   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041}, /* 00C4 */
2039   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043}, /* 00C6 */
2040   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045}, /* 00C8 */
2041   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045}, /* 00CA */
2042   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049}, /* 00CC */
2043   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049}, /* 00CE */
2044   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E}, /* 00D0 */
2045   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F}, /* 00D2 */
2046   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F}, /* 00D4 */
2047   {0x00D6,0x00F6,0x004F},  {0x00D7,0x00D7,0x00D7}, /* 00D6 */
2048   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055}, /* 00D8 */
2049   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055}, /* 00DA */
2050   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059}, /* 00DC */
2051   {0x00DE,0x00FE,0x00DE},  {0x00DF,0x00DF,0x0053}, /* 00DE */
2052   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041}, /* 00E0 */
2053   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041}, /* 00E2 */
2054   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041}, /* 00E4 */
2055   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043}, /* 00E6 */
2056   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045}, /* 00E8 */
2057   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045}, /* 00EA */
2058   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049}, /* 00EC */
2059   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049}, /* 00EE */
2060   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E}, /* 00F0 */
2061   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F}, /* 00F2 */
2062   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F}, /* 00F4 */
2063   {0x00D6,0x00F6,0x004F},  {0x00F7,0x00F7,0x00F7}, /* 00F6 */
2064   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055}, /* 00F8 */
2065   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055}, /* 00FA */
2066   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059}, /* 00FC */
2067   {0x00DE,0x00FE,0x00DE},  {0x0178,0x00FF,0x0059} /* 00FE */
2068 };
2069 
2070 static const MY_UNICASE_CHARACTER u520p01[]={
2071   {0x0100,0x0101,0x0041},  {0x0100,0x0101,0x0041}, /* 0100 */
2072   {0x0102,0x0103,0x0041},  {0x0102,0x0103,0x0041}, /* 0102 */
2073   {0x0104,0x0105,0x0041},  {0x0104,0x0105,0x0041}, /* 0104 */
2074   {0x0106,0x0107,0x0043},  {0x0106,0x0107,0x0043}, /* 0106 */
2075   {0x0108,0x0109,0x0043},  {0x0108,0x0109,0x0043}, /* 0108 */
2076   {0x010A,0x010B,0x0043},  {0x010A,0x010B,0x0043}, /* 010A */
2077   {0x010C,0x010D,0x0043},  {0x010C,0x010D,0x0043}, /* 010C */
2078   {0x010E,0x010F,0x0044},  {0x010E,0x010F,0x0044}, /* 010E */
2079   {0x0110,0x0111,0x0110},  {0x0110,0x0111,0x0110}, /* 0110 */
2080   {0x0112,0x0113,0x0045},  {0x0112,0x0113,0x0045}, /* 0112 */
2081   {0x0114,0x0115,0x0045},  {0x0114,0x0115,0x0045}, /* 0114 */
2082   {0x0116,0x0117,0x0045},  {0x0116,0x0117,0x0045}, /* 0116 */
2083   {0x0118,0x0119,0x0045},  {0x0118,0x0119,0x0045}, /* 0118 */
2084   {0x011A,0x011B,0x0045},  {0x011A,0x011B,0x0045}, /* 011A */
2085   {0x011C,0x011D,0x0047},  {0x011C,0x011D,0x0047}, /* 011C */
2086   {0x011E,0x011F,0x0047},  {0x011E,0x011F,0x0047}, /* 011E */
2087   {0x0120,0x0121,0x0047},  {0x0120,0x0121,0x0047}, /* 0120 */
2088   {0x0122,0x0123,0x0047},  {0x0122,0x0123,0x0047}, /* 0122 */
2089   {0x0124,0x0125,0x0048},  {0x0124,0x0125,0x0048}, /* 0124 */
2090   {0x0126,0x0127,0x0126},  {0x0126,0x0127,0x0126}, /* 0126 */
2091   {0x0128,0x0129,0x0049},  {0x0128,0x0129,0x0049}, /* 0128 */
2092   {0x012A,0x012B,0x0049},  {0x012A,0x012B,0x0049}, /* 012A */
2093   {0x012C,0x012D,0x0049},  {0x012C,0x012D,0x0049}, /* 012C */
2094   {0x012E,0x012F,0x0049},  {0x012E,0x012F,0x0049}, /* 012E */
2095   {0x0130,0x0069,0x0049},  {0x0049,0x0131,0x0049}, /* 0130 */
2096   {0x0132,0x0133,0x0132},  {0x0132,0x0133,0x0132}, /* 0132 */
2097   {0x0134,0x0135,0x004A},  {0x0134,0x0135,0x004A}, /* 0134 */
2098   {0x0136,0x0137,0x004B},  {0x0136,0x0137,0x004B}, /* 0136 */
2099   {0x0138,0x0138,0x0138},  {0x0139,0x013A,0x004C}, /* 0138 */
2100   {0x0139,0x013A,0x004C},  {0x013B,0x013C,0x004C}, /* 013A */
2101   {0x013B,0x013C,0x004C},  {0x013D,0x013E,0x004C}, /* 013C */
2102   {0x013D,0x013E,0x004C},  {0x013F,0x0140,0x013F}, /* 013E */
2103   {0x013F,0x0140,0x013F},  {0x0141,0x0142,0x0141}, /* 0140 */
2104   {0x0141,0x0142,0x0141},  {0x0143,0x0144,0x004E}, /* 0142 */
2105   {0x0143,0x0144,0x004E},  {0x0145,0x0146,0x004E}, /* 0144 */
2106   {0x0145,0x0146,0x004E},  {0x0147,0x0148,0x004E}, /* 0146 */
2107   {0x0147,0x0148,0x004E},  {0x0149,0x0149,0x0149}, /* 0148 */
2108   {0x014A,0x014B,0x014A},  {0x014A,0x014B,0x014A}, /* 014A */
2109   {0x014C,0x014D,0x004F},  {0x014C,0x014D,0x004F}, /* 014C */
2110   {0x014E,0x014F,0x004F},  {0x014E,0x014F,0x004F}, /* 014E */
2111   {0x0150,0x0151,0x004F},  {0x0150,0x0151,0x004F}, /* 0150 */
2112   {0x0152,0x0153,0x0152},  {0x0152,0x0153,0x0152}, /* 0152 */
2113   {0x0154,0x0155,0x0052},  {0x0154,0x0155,0x0052}, /* 0154 */
2114   {0x0156,0x0157,0x0052},  {0x0156,0x0157,0x0052}, /* 0156 */
2115   {0x0158,0x0159,0x0052},  {0x0158,0x0159,0x0052}, /* 0158 */
2116   {0x015A,0x015B,0x0053},  {0x015A,0x015B,0x0053}, /* 015A */
2117   {0x015C,0x015D,0x0053},  {0x015C,0x015D,0x0053}, /* 015C */
2118   {0x015E,0x015F,0x0053},  {0x015E,0x015F,0x0053}, /* 015E */
2119   {0x0160,0x0161,0x0053},  {0x0160,0x0161,0x0053}, /* 0160 */
2120   {0x0162,0x0163,0x0054},  {0x0162,0x0163,0x0054}, /* 0162 */
2121   {0x0164,0x0165,0x0054},  {0x0164,0x0165,0x0054}, /* 0164 */
2122   {0x0166,0x0167,0x0166},  {0x0166,0x0167,0x0166}, /* 0166 */
2123   {0x0168,0x0169,0x0055},  {0x0168,0x0169,0x0055}, /* 0168 */
2124   {0x016A,0x016B,0x0055},  {0x016A,0x016B,0x0055}, /* 016A */
2125   {0x016C,0x016D,0x0055},  {0x016C,0x016D,0x0055}, /* 016C */
2126   {0x016E,0x016F,0x0055},  {0x016E,0x016F,0x0055}, /* 016E */
2127   {0x0170,0x0171,0x0055},  {0x0170,0x0171,0x0055}, /* 0170 */
2128   {0x0172,0x0173,0x0055},  {0x0172,0x0173,0x0055}, /* 0172 */
2129   {0x0174,0x0175,0x0057},  {0x0174,0x0175,0x0057}, /* 0174 */
2130   {0x0176,0x0177,0x0059},  {0x0176,0x0177,0x0059}, /* 0176 */
2131   {0x0178,0x00FF,0x0059},  {0x0179,0x017A,0x005A}, /* 0178 */
2132   {0x0179,0x017A,0x005A},  {0x017B,0x017C,0x005A}, /* 017A */
2133   {0x017B,0x017C,0x005A},  {0x017D,0x017E,0x005A}, /* 017C */
2134   {0x017D,0x017E,0x005A},  {0x0053,0x017F,0x0053}, /* 017E */
2135   {0x0243,0x0180,0x0243},  {0x0181,0x0253,0x0181}, /* 0180 */
2136   {0x0182,0x0183,0x0182},  {0x0182,0x0183,0x0182}, /* 0182 */
2137   {0x0184,0x0185,0x0184},  {0x0184,0x0185,0x0184}, /* 0184 */
2138   {0x0186,0x0254,0x0186},  {0x0187,0x0188,0x0187}, /* 0186 */
2139   {0x0187,0x0188,0x0187},  {0x0189,0x0256,0x0189}, /* 0188 */
2140   {0x018A,0x0257,0x018A},  {0x018B,0x018C,0x018B}, /* 018A */
2141   {0x018B,0x018C,0x018B},  {0x018D,0x018D,0x018D}, /* 018C */
2142   {0x018E,0x01DD,0x018E},  {0x018F,0x0259,0x018F}, /* 018E */
2143   {0x0190,0x025B,0x0190},  {0x0191,0x0192,0x0191}, /* 0190 */
2144   {0x0191,0x0192,0x0191},  {0x0193,0x0260,0x0193}, /* 0192 */
2145   {0x0194,0x0263,0x0194},  {0x01F6,0x0195,0x01F6}, /* 0194 */
2146   {0x0196,0x0269,0x0196},  {0x0197,0x0268,0x0197}, /* 0196 */
2147   {0x0198,0x0199,0x0198},  {0x0198,0x0199,0x0198}, /* 0198 */
2148   {0x023D,0x019A,0x023D},  {0x019B,0x019B,0x019B}, /* 019A */
2149   {0x019C,0x026F,0x019C},  {0x019D,0x0272,0x019D}, /* 019C */
2150   {0x0220,0x019E,0x0220},  {0x019F,0x0275,0x019F}, /* 019E */
2151   {0x01A0,0x01A1,0x004F},  {0x01A0,0x01A1,0x004F}, /* 01A0 */
2152   {0x01A2,0x01A3,0x01A2},  {0x01A2,0x01A3,0x01A2}, /* 01A2 */
2153   {0x01A4,0x01A5,0x01A4},  {0x01A4,0x01A5,0x01A4}, /* 01A4 */
2154   {0x01A6,0x0280,0x01A6},  {0x01A7,0x01A8,0x01A7}, /* 01A6 */
2155   {0x01A7,0x01A8,0x01A7},  {0x01A9,0x0283,0x01A9}, /* 01A8 */
2156   {0x01AA,0x01AA,0x01AA},  {0x01AB,0x01AB,0x01AB}, /* 01AA */
2157   {0x01AC,0x01AD,0x01AC},  {0x01AC,0x01AD,0x01AC}, /* 01AC */
2158   {0x01AE,0x0288,0x01AE},  {0x01AF,0x01B0,0x0055}, /* 01AE */
2159   {0x01AF,0x01B0,0x0055},  {0x01B1,0x028A,0x01B1}, /* 01B0 */
2160   {0x01B2,0x028B,0x01B2},  {0x01B3,0x01B4,0x01B3}, /* 01B2 */
2161   {0x01B3,0x01B4,0x01B3},  {0x01B5,0x01B6,0x01B5}, /* 01B4 */
2162   {0x01B5,0x01B6,0x01B5},  {0x01B7,0x0292,0x01B7}, /* 01B6 */
2163   {0x01B8,0x01B9,0x01B8},  {0x01B8,0x01B9,0x01B8}, /* 01B8 */
2164   {0x01BA,0x01BA,0x01BA},  {0x01BB,0x01BB,0x01BB}, /* 01BA */
2165   {0x01BC,0x01BD,0x01BC},  {0x01BC,0x01BD,0x01BC}, /* 01BC */
2166   {0x01BE,0x01BE,0x01BE},  {0x01F7,0x01BF,0x01F7}, /* 01BE */
2167   {0x01C0,0x01C0,0x01C0},  {0x01C1,0x01C1,0x01C1}, /* 01C0 */
2168   {0x01C2,0x01C2,0x01C2},  {0x01C3,0x01C3,0x01C3}, /* 01C2 */
2169   {0x01C4,0x01C6,0x01C4},  {0x01C4,0x01C6,0x01C4}, /* 01C4 */
2170   {0x01C4,0x01C6,0x01C4},  {0x01C7,0x01C9,0x01C7}, /* 01C6 */
2171   {0x01C7,0x01C9,0x01C7},  {0x01C7,0x01C9,0x01C7}, /* 01C8 */
2172   {0x01CA,0x01CC,0x01CA},  {0x01CA,0x01CC,0x01CA}, /* 01CA */
2173   {0x01CA,0x01CC,0x01CA},  {0x01CD,0x01CE,0x0041}, /* 01CC */
2174   {0x01CD,0x01CE,0x0041},  {0x01CF,0x01D0,0x0049}, /* 01CE */
2175   {0x01CF,0x01D0,0x0049},  {0x01D1,0x01D2,0x004F}, /* 01D0 */
2176   {0x01D1,0x01D2,0x004F},  {0x01D3,0x01D4,0x0055}, /* 01D2 */
2177   {0x01D3,0x01D4,0x0055},  {0x01D5,0x01D6,0x0055}, /* 01D4 */
2178   {0x01D5,0x01D6,0x0055},  {0x01D7,0x01D8,0x0055}, /* 01D6 */
2179   {0x01D7,0x01D8,0x0055},  {0x01D9,0x01DA,0x0055}, /* 01D8 */
2180   {0x01D9,0x01DA,0x0055},  {0x01DB,0x01DC,0x0055}, /* 01DA */
2181   {0x01DB,0x01DC,0x0055},  {0x018E,0x01DD,0x018E}, /* 01DC */
2182   {0x01DE,0x01DF,0x0041},  {0x01DE,0x01DF,0x0041}, /* 01DE */
2183   {0x01E0,0x01E1,0x0041},  {0x01E0,0x01E1,0x0041}, /* 01E0 */
2184   {0x01E2,0x01E3,0x00C6},  {0x01E2,0x01E3,0x00C6}, /* 01E2 */
2185   {0x01E4,0x01E5,0x01E4},  {0x01E4,0x01E5,0x01E4}, /* 01E4 */
2186   {0x01E6,0x01E7,0x0047},  {0x01E6,0x01E7,0x0047}, /* 01E6 */
2187   {0x01E8,0x01E9,0x004B},  {0x01E8,0x01E9,0x004B}, /* 01E8 */
2188   {0x01EA,0x01EB,0x004F},  {0x01EA,0x01EB,0x004F}, /* 01EA */
2189   {0x01EC,0x01ED,0x004F},  {0x01EC,0x01ED,0x004F}, /* 01EC */
2190   {0x01EE,0x01EF,0x01B7},  {0x01EE,0x01EF,0x01B7}, /* 01EE */
2191   {0x01F0,0x01F0,0x004A},  {0x01F1,0x01F3,0x01F1}, /* 01F0 */
2192   {0x01F1,0x01F3,0x01F1},  {0x01F1,0x01F3,0x01F1}, /* 01F2 */
2193   {0x01F4,0x01F5,0x0047},  {0x01F4,0x01F5,0x0047}, /* 01F4 */
2194   {0x01F6,0x0195,0x01F6},  {0x01F7,0x01BF,0x01F7}, /* 01F6 */
2195   {0x01F8,0x01F9,0x004E},  {0x01F8,0x01F9,0x004E}, /* 01F8 */
2196   {0x01FA,0x01FB,0x0041},  {0x01FA,0x01FB,0x0041}, /* 01FA */
2197   {0x01FC,0x01FD,0x00C6},  {0x01FC,0x01FD,0x00C6}, /* 01FC */
2198   {0x01FE,0x01FF,0x00D8},  {0x01FE,0x01FF,0x00D8} /* 01FE */
2199 };
2200 
2201 static const MY_UNICASE_CHARACTER u520p02[]={
2202   {0x0200,0x0201,0x0041},  {0x0200,0x0201,0x0041}, /* 0200 */
2203   {0x0202,0x0203,0x0041},  {0x0202,0x0203,0x0041}, /* 0202 */
2204   {0x0204,0x0205,0x0045},  {0x0204,0x0205,0x0045}, /* 0204 */
2205   {0x0206,0x0207,0x0045},  {0x0206,0x0207,0x0045}, /* 0206 */
2206   {0x0208,0x0209,0x0049},  {0x0208,0x0209,0x0049}, /* 0208 */
2207   {0x020A,0x020B,0x0049},  {0x020A,0x020B,0x0049}, /* 020A */
2208   {0x020C,0x020D,0x004F},  {0x020C,0x020D,0x004F}, /* 020C */
2209   {0x020E,0x020F,0x004F},  {0x020E,0x020F,0x004F}, /* 020E */
2210   {0x0210,0x0211,0x0052},  {0x0210,0x0211,0x0052}, /* 0210 */
2211   {0x0212,0x0213,0x0052},  {0x0212,0x0213,0x0052}, /* 0212 */
2212   {0x0214,0x0215,0x0055},  {0x0214,0x0215,0x0055}, /* 0214 */
2213   {0x0216,0x0217,0x0055},  {0x0216,0x0217,0x0055}, /* 0216 */
2214   {0x0218,0x0219,0x0053},  {0x0218,0x0219,0x0053}, /* 0218 */
2215   {0x021A,0x021B,0x0054},  {0x021A,0x021B,0x0054}, /* 021A */
2216   {0x021C,0x021D,0x021C},  {0x021C,0x021D,0x021C}, /* 021C */
2217   {0x021E,0x021F,0x0048},  {0x021E,0x021F,0x0048}, /* 021E */
2218   {0x0220,0x019E,0x0220},  {0x0221,0x0221,0x0221}, /* 0220 */
2219   {0x0222,0x0223,0x0222},  {0x0222,0x0223,0x0222}, /* 0222 */
2220   {0x0224,0x0225,0x0224},  {0x0224,0x0225,0x0224}, /* 0224 */
2221   {0x0226,0x0227,0x0041},  {0x0226,0x0227,0x0041}, /* 0226 */
2222   {0x0228,0x0229,0x0045},  {0x0228,0x0229,0x0045}, /* 0228 */
2223   {0x022A,0x022B,0x004F},  {0x022A,0x022B,0x004F}, /* 022A */
2224   {0x022C,0x022D,0x004F},  {0x022C,0x022D,0x004F}, /* 022C */
2225   {0x022E,0x022F,0x004F},  {0x022E,0x022F,0x004F}, /* 022E */
2226   {0x0230,0x0231,0x004F},  {0x0230,0x0231,0x004F}, /* 0230 */
2227   {0x0232,0x0233,0x0059},  {0x0232,0x0233,0x0059}, /* 0232 */
2228   {0x0234,0x0234,0x0234},  {0x0235,0x0235,0x0235}, /* 0234 */
2229   {0x0236,0x0236,0x0236},  {0x0237,0x0237,0x0237}, /* 0236 */
2230   {0x0238,0x0238,0x0238},  {0x0239,0x0239,0x0239}, /* 0238 */
2231   {0x023A,0x2C65,0x023A},  {0x023B,0x023C,0x023B}, /* 023A */
2232   {0x023B,0x023C,0x023B},  {0x023D,0x019A,0x023D}, /* 023C */
2233   {0x023E,0x2C66,0x023E},  {0x2C7E,0x023F,0x2C7E}, /* 023E */
2234   {0x2C7F,0x0240,0x2C7F},  {0x0241,0x0242,0x0241}, /* 0240 */
2235   {0x0241,0x0242,0x0241},  {0x0243,0x0180,0x0243}, /* 0242 */
2236   {0x0244,0x0289,0x0244},  {0x0245,0x028C,0x0245}, /* 0244 */
2237   {0x0246,0x0247,0x0246},  {0x0246,0x0247,0x0246}, /* 0246 */
2238   {0x0248,0x0249,0x0248},  {0x0248,0x0249,0x0248}, /* 0248 */
2239   {0x024A,0x024B,0x024A},  {0x024A,0x024B,0x024A}, /* 024A */
2240   {0x024C,0x024D,0x024C},  {0x024C,0x024D,0x024C}, /* 024C */
2241   {0x024E,0x024F,0x024E},  {0x024E,0x024F,0x024E}, /* 024E */
2242   {0x2C6F,0x0250,0x2C6F},  {0x2C6D,0x0251,0x2C6D}, /* 0250 */
2243   {0x2C70,0x0252,0x2C70},  {0x0181,0x0253,0x0181}, /* 0252 */
2244   {0x0186,0x0254,0x0186},  {0x0255,0x0255,0x0255}, /* 0254 */
2245   {0x0189,0x0256,0x0189},  {0x018A,0x0257,0x018A}, /* 0256 */
2246   {0x0258,0x0258,0x0258},  {0x018F,0x0259,0x018F}, /* 0258 */
2247   {0x025A,0x025A,0x025A},  {0x0190,0x025B,0x0190}, /* 025A */
2248   {0x025C,0x025C,0x025C},  {0x025D,0x025D,0x025D}, /* 025C */
2249   {0x025E,0x025E,0x025E},  {0x025F,0x025F,0x025F}, /* 025E */
2250   {0x0193,0x0260,0x0193},  {0x0261,0x0261,0x0261}, /* 0260 */
2251   {0x0262,0x0262,0x0262},  {0x0194,0x0263,0x0194}, /* 0262 */
2252   {0x0264,0x0264,0x0264},  {0x0265,0x0265,0x0265}, /* 0264 */
2253   {0x0266,0x0266,0x0266},  {0x0267,0x0267,0x0267}, /* 0266 */
2254   {0x0197,0x0268,0x0197},  {0x0196,0x0269,0x0196}, /* 0268 */
2255   {0x026A,0x026A,0x026A},  {0x2C62,0x026B,0x2C62}, /* 026A */
2256   {0x026C,0x026C,0x026C},  {0x026D,0x026D,0x026D}, /* 026C */
2257   {0x026E,0x026E,0x026E},  {0x019C,0x026F,0x019C}, /* 026E */
2258   {0x0270,0x0270,0x0270},  {0x2C6E,0x0271,0x2C6E}, /* 0270 */
2259   {0x019D,0x0272,0x019D},  {0x0273,0x0273,0x0273}, /* 0272 */
2260   {0x0274,0x0274,0x0274},  {0x019F,0x0275,0x019F}, /* 0274 */
2261   {0x0276,0x0276,0x0276},  {0x0277,0x0277,0x0277}, /* 0276 */
2262   {0x0278,0x0278,0x0278},  {0x0279,0x0279,0x0279}, /* 0278 */
2263   {0x027A,0x027A,0x027A},  {0x027B,0x027B,0x027B}, /* 027A */
2264   {0x027C,0x027C,0x027C},  {0x2C64,0x027D,0x2C64}, /* 027C */
2265   {0x027E,0x027E,0x027E},  {0x027F,0x027F,0x027F}, /* 027E */
2266   {0x01A6,0x0280,0x01A6},  {0x0281,0x0281,0x0281}, /* 0280 */
2267   {0x0282,0x0282,0x0282},  {0x01A9,0x0283,0x01A9}, /* 0282 */
2268   {0x0284,0x0284,0x0284},  {0x0285,0x0285,0x0285}, /* 0284 */
2269   {0x0286,0x0286,0x0286},  {0x0287,0x0287,0x0287}, /* 0286 */
2270   {0x01AE,0x0288,0x01AE},  {0x0244,0x0289,0x0244}, /* 0288 */
2271   {0x01B1,0x028A,0x01B1},  {0x01B2,0x028B,0x01B2}, /* 028A */
2272   {0x0245,0x028C,0x0245},  {0x028D,0x028D,0x028D}, /* 028C */
2273   {0x028E,0x028E,0x028E},  {0x028F,0x028F,0x028F}, /* 028E */
2274   {0x0290,0x0290,0x0290},  {0x0291,0x0291,0x0291}, /* 0290 */
2275   {0x01B7,0x0292,0x01B7},  {0x0293,0x0293,0x0293}, /* 0292 */
2276   {0x0294,0x0294,0x0294},  {0x0295,0x0295,0x0295}, /* 0294 */
2277   {0x0296,0x0296,0x0296},  {0x0297,0x0297,0x0297}, /* 0296 */
2278   {0x0298,0x0298,0x0298},  {0x0299,0x0299,0x0299}, /* 0298 */
2279   {0x029A,0x029A,0x029A},  {0x029B,0x029B,0x029B}, /* 029A */
2280   {0x029C,0x029C,0x029C},  {0x029D,0x029D,0x029D}, /* 029C */
2281   {0x029E,0x029E,0x029E},  {0x029F,0x029F,0x029F}, /* 029E */
2282   {0x02A0,0x02A0,0x02A0},  {0x02A1,0x02A1,0x02A1}, /* 02A0 */
2283   {0x02A2,0x02A2,0x02A2},  {0x02A3,0x02A3,0x02A3}, /* 02A2 */
2284   {0x02A4,0x02A4,0x02A4},  {0x02A5,0x02A5,0x02A5}, /* 02A4 */
2285   {0x02A6,0x02A6,0x02A6},  {0x02A7,0x02A7,0x02A7}, /* 02A6 */
2286   {0x02A8,0x02A8,0x02A8},  {0x02A9,0x02A9,0x02A9}, /* 02A8 */
2287   {0x02AA,0x02AA,0x02AA},  {0x02AB,0x02AB,0x02AB}, /* 02AA */
2288   {0x02AC,0x02AC,0x02AC},  {0x02AD,0x02AD,0x02AD}, /* 02AC */
2289   {0x02AE,0x02AE,0x02AE},  {0x02AF,0x02AF,0x02AF}, /* 02AE */
2290   {0x02B0,0x02B0,0x02B0},  {0x02B1,0x02B1,0x02B1}, /* 02B0 */
2291   {0x02B2,0x02B2,0x02B2},  {0x02B3,0x02B3,0x02B3}, /* 02B2 */
2292   {0x02B4,0x02B4,0x02B4},  {0x02B5,0x02B5,0x02B5}, /* 02B4 */
2293   {0x02B6,0x02B6,0x02B6},  {0x02B7,0x02B7,0x02B7}, /* 02B6 */
2294   {0x02B8,0x02B8,0x02B8},  {0x02B9,0x02B9,0x02B9}, /* 02B8 */
2295   {0x02BA,0x02BA,0x02BA},  {0x02BB,0x02BB,0x02BB}, /* 02BA */
2296   {0x02BC,0x02BC,0x02BC},  {0x02BD,0x02BD,0x02BD}, /* 02BC */
2297   {0x02BE,0x02BE,0x02BE},  {0x02BF,0x02BF,0x02BF}, /* 02BE */
2298   {0x02C0,0x02C0,0x02C0},  {0x02C1,0x02C1,0x02C1}, /* 02C0 */
2299   {0x02C2,0x02C2,0x02C2},  {0x02C3,0x02C3,0x02C3}, /* 02C2 */
2300   {0x02C4,0x02C4,0x02C4},  {0x02C5,0x02C5,0x02C5}, /* 02C4 */
2301   {0x02C6,0x02C6,0x02C6},  {0x02C7,0x02C7,0x02C7}, /* 02C6 */
2302   {0x02C8,0x02C8,0x02C8},  {0x02C9,0x02C9,0x02C9}, /* 02C8 */
2303   {0x02CA,0x02CA,0x02CA},  {0x02CB,0x02CB,0x02CB}, /* 02CA */
2304   {0x02CC,0x02CC,0x02CC},  {0x02CD,0x02CD,0x02CD}, /* 02CC */
2305   {0x02CE,0x02CE,0x02CE},  {0x02CF,0x02CF,0x02CF}, /* 02CE */
2306   {0x02D0,0x02D0,0x02D0},  {0x02D1,0x02D1,0x02D1}, /* 02D0 */
2307   {0x02D2,0x02D2,0x02D2},  {0x02D3,0x02D3,0x02D3}, /* 02D2 */
2308   {0x02D4,0x02D4,0x02D4},  {0x02D5,0x02D5,0x02D5}, /* 02D4 */
2309   {0x02D6,0x02D6,0x02D6},  {0x02D7,0x02D7,0x02D7}, /* 02D6 */
2310   {0x02D8,0x02D8,0x02D8},  {0x02D9,0x02D9,0x02D9}, /* 02D8 */
2311   {0x02DA,0x02DA,0x02DA},  {0x02DB,0x02DB,0x02DB}, /* 02DA */
2312   {0x02DC,0x02DC,0x02DC},  {0x02DD,0x02DD,0x02DD}, /* 02DC */
2313   {0x02DE,0x02DE,0x02DE},  {0x02DF,0x02DF,0x02DF}, /* 02DE */
2314   {0x02E0,0x02E0,0x02E0},  {0x02E1,0x02E1,0x02E1}, /* 02E0 */
2315   {0x02E2,0x02E2,0x02E2},  {0x02E3,0x02E3,0x02E3}, /* 02E2 */
2316   {0x02E4,0x02E4,0x02E4},  {0x02E5,0x02E5,0x02E5}, /* 02E4 */
2317   {0x02E6,0x02E6,0x02E6},  {0x02E7,0x02E7,0x02E7}, /* 02E6 */
2318   {0x02E8,0x02E8,0x02E8},  {0x02E9,0x02E9,0x02E9}, /* 02E8 */
2319   {0x02EA,0x02EA,0x02EA},  {0x02EB,0x02EB,0x02EB}, /* 02EA */
2320   {0x02EC,0x02EC,0x02EC},  {0x02ED,0x02ED,0x02ED}, /* 02EC */
2321   {0x02EE,0x02EE,0x02EE},  {0x02EF,0x02EF,0x02EF}, /* 02EE */
2322   {0x02F0,0x02F0,0x02F0},  {0x02F1,0x02F1,0x02F1}, /* 02F0 */
2323   {0x02F2,0x02F2,0x02F2},  {0x02F3,0x02F3,0x02F3}, /* 02F2 */
2324   {0x02F4,0x02F4,0x02F4},  {0x02F5,0x02F5,0x02F5}, /* 02F4 */
2325   {0x02F6,0x02F6,0x02F6},  {0x02F7,0x02F7,0x02F7}, /* 02F6 */
2326   {0x02F8,0x02F8,0x02F8},  {0x02F9,0x02F9,0x02F9}, /* 02F8 */
2327   {0x02FA,0x02FA,0x02FA},  {0x02FB,0x02FB,0x02FB}, /* 02FA */
2328   {0x02FC,0x02FC,0x02FC},  {0x02FD,0x02FD,0x02FD}, /* 02FC */
2329   {0x02FE,0x02FE,0x02FE},  {0x02FF,0x02FF,0x02FF} /* 02FE */
2330 };
2331 
2332 static const MY_UNICASE_CHARACTER u520p03[]={
2333   {0x0300,0x0300,0x0300},  {0x0301,0x0301,0x0301}, /* 0300 */
2334   {0x0302,0x0302,0x0302},  {0x0303,0x0303,0x0303}, /* 0302 */
2335   {0x0304,0x0304,0x0304},  {0x0305,0x0305,0x0305}, /* 0304 */
2336   {0x0306,0x0306,0x0306},  {0x0307,0x0307,0x0307}, /* 0306 */
2337   {0x0308,0x0308,0x0308},  {0x0309,0x0309,0x0309}, /* 0308 */
2338   {0x030A,0x030A,0x030A},  {0x030B,0x030B,0x030B}, /* 030A */
2339   {0x030C,0x030C,0x030C},  {0x030D,0x030D,0x030D}, /* 030C */
2340   {0x030E,0x030E,0x030E},  {0x030F,0x030F,0x030F}, /* 030E */
2341   {0x0310,0x0310,0x0310},  {0x0311,0x0311,0x0311}, /* 0310 */
2342   {0x0312,0x0312,0x0312},  {0x0313,0x0313,0x0313}, /* 0312 */
2343   {0x0314,0x0314,0x0314},  {0x0315,0x0315,0x0315}, /* 0314 */
2344   {0x0316,0x0316,0x0316},  {0x0317,0x0317,0x0317}, /* 0316 */
2345   {0x0318,0x0318,0x0318},  {0x0319,0x0319,0x0319}, /* 0318 */
2346   {0x031A,0x031A,0x031A},  {0x031B,0x031B,0x031B}, /* 031A */
2347   {0x031C,0x031C,0x031C},  {0x031D,0x031D,0x031D}, /* 031C */
2348   {0x031E,0x031E,0x031E},  {0x031F,0x031F,0x031F}, /* 031E */
2349   {0x0320,0x0320,0x0320},  {0x0321,0x0321,0x0321}, /* 0320 */
2350   {0x0322,0x0322,0x0322},  {0x0323,0x0323,0x0323}, /* 0322 */
2351   {0x0324,0x0324,0x0324},  {0x0325,0x0325,0x0325}, /* 0324 */
2352   {0x0326,0x0326,0x0326},  {0x0327,0x0327,0x0327}, /* 0326 */
2353   {0x0328,0x0328,0x0328},  {0x0329,0x0329,0x0329}, /* 0328 */
2354   {0x032A,0x032A,0x032A},  {0x032B,0x032B,0x032B}, /* 032A */
2355   {0x032C,0x032C,0x032C},  {0x032D,0x032D,0x032D}, /* 032C */
2356   {0x032E,0x032E,0x032E},  {0x032F,0x032F,0x032F}, /* 032E */
2357   {0x0330,0x0330,0x0330},  {0x0331,0x0331,0x0331}, /* 0330 */
2358   {0x0332,0x0332,0x0332},  {0x0333,0x0333,0x0333}, /* 0332 */
2359   {0x0334,0x0334,0x0334},  {0x0335,0x0335,0x0335}, /* 0334 */
2360   {0x0336,0x0336,0x0336},  {0x0337,0x0337,0x0337}, /* 0336 */
2361   {0x0338,0x0338,0x0338},  {0x0339,0x0339,0x0339}, /* 0338 */
2362   {0x033A,0x033A,0x033A},  {0x033B,0x033B,0x033B}, /* 033A */
2363   {0x033C,0x033C,0x033C},  {0x033D,0x033D,0x033D}, /* 033C */
2364   {0x033E,0x033E,0x033E},  {0x033F,0x033F,0x033F}, /* 033E */
2365   {0x0340,0x0340,0x0340},  {0x0341,0x0341,0x0341}, /* 0340 */
2366   {0x0342,0x0342,0x0342},  {0x0343,0x0343,0x0343}, /* 0342 */
2367   {0x0344,0x0344,0x0344},  {0x0399,0x0345,0x0399}, /* 0344 */
2368   {0x0346,0x0346,0x0346},  {0x0347,0x0347,0x0347}, /* 0346 */
2369   {0x0348,0x0348,0x0348},  {0x0349,0x0349,0x0349}, /* 0348 */
2370   {0x034A,0x034A,0x034A},  {0x034B,0x034B,0x034B}, /* 034A */
2371   {0x034C,0x034C,0x034C},  {0x034D,0x034D,0x034D}, /* 034C */
2372   {0x034E,0x034E,0x034E},  {0x034F,0x034F,0x034F}, /* 034E */
2373   {0x0350,0x0350,0x0350},  {0x0351,0x0351,0x0351}, /* 0350 */
2374   {0x0352,0x0352,0x0352},  {0x0353,0x0353,0x0353}, /* 0352 */
2375   {0x0354,0x0354,0x0354},  {0x0355,0x0355,0x0355}, /* 0354 */
2376   {0x0356,0x0356,0x0356},  {0x0357,0x0357,0x0357}, /* 0356 */
2377   {0x0358,0x0358,0x0358},  {0x0359,0x0359,0x0359}, /* 0358 */
2378   {0x035A,0x035A,0x035A},  {0x035B,0x035B,0x035B}, /* 035A */
2379   {0x035C,0x035C,0x035C},  {0x035D,0x035D,0x035D}, /* 035C */
2380   {0x035E,0x035E,0x035E},  {0x035F,0x035F,0x035F}, /* 035E */
2381   {0x0360,0x0360,0x0360},  {0x0361,0x0361,0x0361}, /* 0360 */
2382   {0x0362,0x0362,0x0362},  {0x0363,0x0363,0x0363}, /* 0362 */
2383   {0x0364,0x0364,0x0364},  {0x0365,0x0365,0x0365}, /* 0364 */
2384   {0x0366,0x0366,0x0366},  {0x0367,0x0367,0x0367}, /* 0366 */
2385   {0x0368,0x0368,0x0368},  {0x0369,0x0369,0x0369}, /* 0368 */
2386   {0x036A,0x036A,0x036A},  {0x036B,0x036B,0x036B}, /* 036A */
2387   {0x036C,0x036C,0x036C},  {0x036D,0x036D,0x036D}, /* 036C */
2388   {0x036E,0x036E,0x036E},  {0x036F,0x036F,0x036F}, /* 036E */
2389   {0x0370,0x0371,0x0370},  {0x0370,0x0371,0x0370}, /* 0370 */
2390   {0x0372,0x0373,0x0372},  {0x0372,0x0373,0x0372}, /* 0372 */
2391   {0x0374,0x0374,0x0374},  {0x0375,0x0375,0x0375}, /* 0374 */
2392   {0x0376,0x0377,0x0376},  {0x0376,0x0377,0x0376}, /* 0376 */
2393   {0x0378,0x0378,0x0378},  {0x0379,0x0379,0x0379}, /* 0378 */
2394   {0x037A,0x037A,0x037A},  {0x03FD,0x037B,0x03FD}, /* 037A */
2395   {0x03FE,0x037C,0x03FE},  {0x03FF,0x037D,0x03FF}, /* 037C */
2396   {0x037E,0x037E,0x037E},  {0x037F,0x037F,0x037F}, /* 037E */
2397   {0x0380,0x0380,0x0380},  {0x0381,0x0381,0x0381}, /* 0380 */
2398   {0x0382,0x0382,0x0382},  {0x0383,0x0383,0x0383}, /* 0382 */
2399   {0x0384,0x0384,0x0384},  {0x0385,0x0385,0x0385}, /* 0384 */
2400   {0x0386,0x03AC,0x0391},  {0x0387,0x0387,0x0387}, /* 0386 */
2401   {0x0388,0x03AD,0x0395},  {0x0389,0x03AE,0x0397}, /* 0388 */
2402   {0x038A,0x03AF,0x0399},  {0x038B,0x038B,0x038B}, /* 038A */
2403   {0x038C,0x03CC,0x039F},  {0x038D,0x038D,0x038D}, /* 038C */
2404   {0x038E,0x03CD,0x03A5},  {0x038F,0x03CE,0x03A9}, /* 038E */
2405   {0x0390,0x0390,0x0399},  {0x0391,0x03B1,0x0391}, /* 0390 */
2406   {0x0392,0x03B2,0x0392},  {0x0393,0x03B3,0x0393}, /* 0392 */
2407   {0x0394,0x03B4,0x0394},  {0x0395,0x03B5,0x0395}, /* 0394 */
2408   {0x0396,0x03B6,0x0396},  {0x0397,0x03B7,0x0397}, /* 0396 */
2409   {0x0398,0x03B8,0x0398},  {0x0399,0x03B9,0x0399}, /* 0398 */
2410   {0x039A,0x03BA,0x039A},  {0x039B,0x03BB,0x039B}, /* 039A */
2411   {0x039C,0x03BC,0x039C},  {0x039D,0x03BD,0x039D}, /* 039C */
2412   {0x039E,0x03BE,0x039E},  {0x039F,0x03BF,0x039F}, /* 039E */
2413   {0x03A0,0x03C0,0x03A0},  {0x03A1,0x03C1,0x03A1}, /* 03A0 */
2414   {0x03A2,0x03A2,0x03A2},  {0x03A3,0x03C3,0x03A3}, /* 03A2 */
2415   {0x03A4,0x03C4,0x03A4},  {0x03A5,0x03C5,0x03A5}, /* 03A4 */
2416   {0x03A6,0x03C6,0x03A6},  {0x03A7,0x03C7,0x03A7}, /* 03A6 */
2417   {0x03A8,0x03C8,0x03A8},  {0x03A9,0x03C9,0x03A9}, /* 03A8 */
2418   {0x03AA,0x03CA,0x0399},  {0x03AB,0x03CB,0x03A5}, /* 03AA */
2419   {0x0386,0x03AC,0x0391},  {0x0388,0x03AD,0x0395}, /* 03AC */
2420   {0x0389,0x03AE,0x0397},  {0x038A,0x03AF,0x0399}, /* 03AE */
2421   {0x03B0,0x03B0,0x03A5},  {0x0391,0x03B1,0x0391}, /* 03B0 */
2422   {0x0392,0x03B2,0x0392},  {0x0393,0x03B3,0x0393}, /* 03B2 */
2423   {0x0394,0x03B4,0x0394},  {0x0395,0x03B5,0x0395}, /* 03B4 */
2424   {0x0396,0x03B6,0x0396},  {0x0397,0x03B7,0x0397}, /* 03B6 */
2425   {0x0398,0x03B8,0x0398},  {0x0399,0x03B9,0x0399}, /* 03B8 */
2426   {0x039A,0x03BA,0x039A},  {0x039B,0x03BB,0x039B}, /* 03BA */
2427   {0x039C,0x03BC,0x039C},  {0x039D,0x03BD,0x039D}, /* 03BC */
2428   {0x039E,0x03BE,0x039E},  {0x039F,0x03BF,0x039F}, /* 03BE */
2429   {0x03A0,0x03C0,0x03A0},  {0x03A1,0x03C1,0x03A1}, /* 03C0 */
2430   {0x03A3,0x03C2,0x03A3},  {0x03A3,0x03C3,0x03A3}, /* 03C2 */
2431   {0x03A4,0x03C4,0x03A4},  {0x03A5,0x03C5,0x03A5}, /* 03C4 */
2432   {0x03A6,0x03C6,0x03A6},  {0x03A7,0x03C7,0x03A7}, /* 03C6 */
2433   {0x03A8,0x03C8,0x03A8},  {0x03A9,0x03C9,0x03A9}, /* 03C8 */
2434   {0x03AA,0x03CA,0x0399},  {0x03AB,0x03CB,0x03A5}, /* 03CA */
2435   {0x038C,0x03CC,0x039F},  {0x038E,0x03CD,0x03A5}, /* 03CC */
2436   {0x038F,0x03CE,0x03A9},  {0x03CF,0x03D7,0x03CF}, /* 03CE */
2437   {0x0392,0x03D0,0x0392},  {0x0398,0x03D1,0x0398}, /* 03D0 */
2438   {0x03D2,0x03D2,0x03D2},  {0x03D3,0x03D3,0x03D2}, /* 03D2 */
2439   {0x03D4,0x03D4,0x03D2},  {0x03A6,0x03D5,0x03A6}, /* 03D4 */
2440   {0x03A0,0x03D6,0x03A0},  {0x03CF,0x03D7,0x03CF}, /* 03D6 */
2441   {0x03D8,0x03D9,0x03D8},  {0x03D8,0x03D9,0x03D8}, /* 03D8 */
2442   {0x03DA,0x03DB,0x03DA},  {0x03DA,0x03DB,0x03DA}, /* 03DA */
2443   {0x03DC,0x03DD,0x03DC},  {0x03DC,0x03DD,0x03DC}, /* 03DC */
2444   {0x03DE,0x03DF,0x03DE},  {0x03DE,0x03DF,0x03DE}, /* 03DE */
2445   {0x03E0,0x03E1,0x03E0},  {0x03E0,0x03E1,0x03E0}, /* 03E0 */
2446   {0x03E2,0x03E3,0x03E2},  {0x03E2,0x03E3,0x03E2}, /* 03E2 */
2447   {0x03E4,0x03E5,0x03E4},  {0x03E4,0x03E5,0x03E4}, /* 03E4 */
2448   {0x03E6,0x03E7,0x03E6},  {0x03E6,0x03E7,0x03E6}, /* 03E6 */
2449   {0x03E8,0x03E9,0x03E8},  {0x03E8,0x03E9,0x03E8}, /* 03E8 */
2450   {0x03EA,0x03EB,0x03EA},  {0x03EA,0x03EB,0x03EA}, /* 03EA */
2451   {0x03EC,0x03ED,0x03EC},  {0x03EC,0x03ED,0x03EC}, /* 03EC */
2452   {0x03EE,0x03EF,0x03EE},  {0x03EE,0x03EF,0x03EE}, /* 03EE */
2453   {0x039A,0x03F0,0x039A},  {0x03A1,0x03F1,0x03A1}, /* 03F0 */
2454   {0x03F9,0x03F2,0x03F9},  {0x03F3,0x03F3,0x03F3}, /* 03F2 */
2455   {0x03F4,0x03B8,0x03F4},  {0x0395,0x03F5,0x0395}, /* 03F4 */
2456   {0x03F6,0x03F6,0x03F6},  {0x03F7,0x03F8,0x03F7}, /* 03F6 */
2457   {0x03F7,0x03F8,0x03F7},  {0x03F9,0x03F2,0x03F9}, /* 03F8 */
2458   {0x03FA,0x03FB,0x03FA},  {0x03FA,0x03FB,0x03FA}, /* 03FA */
2459   {0x03FC,0x03FC,0x03FC},  {0x03FD,0x037B,0x03FD}, /* 03FC */
2460   {0x03FE,0x037C,0x03FE},  {0x03FF,0x037D,0x03FF} /* 03FE */
2461 };
2462 
2463 static const MY_UNICASE_CHARACTER u520p04[]={
2464   {0x0400,0x0450,0x0415},  {0x0401,0x0451,0x0415}, /* 0400 */
2465   {0x0402,0x0452,0x0402},  {0x0403,0x0453,0x0413}, /* 0402 */
2466   {0x0404,0x0454,0x0404},  {0x0405,0x0455,0x0405}, /* 0404 */
2467   {0x0406,0x0456,0x0406},  {0x0407,0x0457,0x0406}, /* 0406 */
2468   {0x0408,0x0458,0x0408},  {0x0409,0x0459,0x0409}, /* 0408 */
2469   {0x040A,0x045A,0x040A},  {0x040B,0x045B,0x040B}, /* 040A */
2470   {0x040C,0x045C,0x041A},  {0x040D,0x045D,0x0418}, /* 040C */
2471   {0x040E,0x045E,0x0423},  {0x040F,0x045F,0x040F}, /* 040E */
2472   {0x0410,0x0430,0x0410},  {0x0411,0x0431,0x0411}, /* 0410 */
2473   {0x0412,0x0432,0x0412},  {0x0413,0x0433,0x0413}, /* 0412 */
2474   {0x0414,0x0434,0x0414},  {0x0415,0x0435,0x0415}, /* 0414 */
2475   {0x0416,0x0436,0x0416},  {0x0417,0x0437,0x0417}, /* 0416 */
2476   {0x0418,0x0438,0x0418},  {0x0419,0x0439,0x0419}, /* 0418 */
2477   {0x041A,0x043A,0x041A},  {0x041B,0x043B,0x041B}, /* 041A */
2478   {0x041C,0x043C,0x041C},  {0x041D,0x043D,0x041D}, /* 041C */
2479   {0x041E,0x043E,0x041E},  {0x041F,0x043F,0x041F}, /* 041E */
2480   {0x0420,0x0440,0x0420},  {0x0421,0x0441,0x0421}, /* 0420 */
2481   {0x0422,0x0442,0x0422},  {0x0423,0x0443,0x0423}, /* 0422 */
2482   {0x0424,0x0444,0x0424},  {0x0425,0x0445,0x0425}, /* 0424 */
2483   {0x0426,0x0446,0x0426},  {0x0427,0x0447,0x0427}, /* 0426 */
2484   {0x0428,0x0448,0x0428},  {0x0429,0x0449,0x0429}, /* 0428 */
2485   {0x042A,0x044A,0x042A},  {0x042B,0x044B,0x042B}, /* 042A */
2486   {0x042C,0x044C,0x042C},  {0x042D,0x044D,0x042D}, /* 042C */
2487   {0x042E,0x044E,0x042E},  {0x042F,0x044F,0x042F}, /* 042E */
2488   {0x0410,0x0430,0x0410},  {0x0411,0x0431,0x0411}, /* 0430 */
2489   {0x0412,0x0432,0x0412},  {0x0413,0x0433,0x0413}, /* 0432 */
2490   {0x0414,0x0434,0x0414},  {0x0415,0x0435,0x0415}, /* 0434 */
2491   {0x0416,0x0436,0x0416},  {0x0417,0x0437,0x0417}, /* 0436 */
2492   {0x0418,0x0438,0x0418},  {0x0419,0x0439,0x0419}, /* 0438 */
2493   {0x041A,0x043A,0x041A},  {0x041B,0x043B,0x041B}, /* 043A */
2494   {0x041C,0x043C,0x041C},  {0x041D,0x043D,0x041D}, /* 043C */
2495   {0x041E,0x043E,0x041E},  {0x041F,0x043F,0x041F}, /* 043E */
2496   {0x0420,0x0440,0x0420},  {0x0421,0x0441,0x0421}, /* 0440 */
2497   {0x0422,0x0442,0x0422},  {0x0423,0x0443,0x0423}, /* 0442 */
2498   {0x0424,0x0444,0x0424},  {0x0425,0x0445,0x0425}, /* 0444 */
2499   {0x0426,0x0446,0x0426},  {0x0427,0x0447,0x0427}, /* 0446 */
2500   {0x0428,0x0448,0x0428},  {0x0429,0x0449,0x0429}, /* 0448 */
2501   {0x042A,0x044A,0x042A},  {0x042B,0x044B,0x042B}, /* 044A */
2502   {0x042C,0x044C,0x042C},  {0x042D,0x044D,0x042D}, /* 044C */
2503   {0x042E,0x044E,0x042E},  {0x042F,0x044F,0x042F}, /* 044E */
2504   {0x0400,0x0450,0x0415},  {0x0401,0x0451,0x0415}, /* 0450 */
2505   {0x0402,0x0452,0x0402},  {0x0403,0x0453,0x0413}, /* 0452 */
2506   {0x0404,0x0454,0x0404},  {0x0405,0x0455,0x0405}, /* 0454 */
2507   {0x0406,0x0456,0x0406},  {0x0407,0x0457,0x0406}, /* 0456 */
2508   {0x0408,0x0458,0x0408},  {0x0409,0x0459,0x0409}, /* 0458 */
2509   {0x040A,0x045A,0x040A},  {0x040B,0x045B,0x040B}, /* 045A */
2510   {0x040C,0x045C,0x041A},  {0x040D,0x045D,0x0418}, /* 045C */
2511   {0x040E,0x045E,0x0423},  {0x040F,0x045F,0x040F}, /* 045E */
2512   {0x0460,0x0461,0x0460},  {0x0460,0x0461,0x0460}, /* 0460 */
2513   {0x0462,0x0463,0x0462},  {0x0462,0x0463,0x0462}, /* 0462 */
2514   {0x0464,0x0465,0x0464},  {0x0464,0x0465,0x0464}, /* 0464 */
2515   {0x0466,0x0467,0x0466},  {0x0466,0x0467,0x0466}, /* 0466 */
2516   {0x0468,0x0469,0x0468},  {0x0468,0x0469,0x0468}, /* 0468 */
2517   {0x046A,0x046B,0x046A},  {0x046A,0x046B,0x046A}, /* 046A */
2518   {0x046C,0x046D,0x046C},  {0x046C,0x046D,0x046C}, /* 046C */
2519   {0x046E,0x046F,0x046E},  {0x046E,0x046F,0x046E}, /* 046E */
2520   {0x0470,0x0471,0x0470},  {0x0470,0x0471,0x0470}, /* 0470 */
2521   {0x0472,0x0473,0x0472},  {0x0472,0x0473,0x0472}, /* 0472 */
2522   {0x0474,0x0475,0x0474},  {0x0474,0x0475,0x0474}, /* 0474 */
2523   {0x0476,0x0477,0x0474},  {0x0476,0x0477,0x0474}, /* 0476 */
2524   {0x0478,0x0479,0x0478},  {0x0478,0x0479,0x0478}, /* 0478 */
2525   {0x047A,0x047B,0x047A},  {0x047A,0x047B,0x047A}, /* 047A */
2526   {0x047C,0x047D,0x047C},  {0x047C,0x047D,0x047C}, /* 047C */
2527   {0x047E,0x047F,0x047E},  {0x047E,0x047F,0x047E}, /* 047E */
2528   {0x0480,0x0481,0x0480},  {0x0480,0x0481,0x0480}, /* 0480 */
2529   {0x0482,0x0482,0x0482},  {0x0483,0x0483,0x0483}, /* 0482 */
2530   {0x0484,0x0484,0x0484},  {0x0485,0x0485,0x0485}, /* 0484 */
2531   {0x0486,0x0486,0x0486},  {0x0487,0x0487,0x0487}, /* 0486 */
2532   {0x0488,0x0488,0x0488},  {0x0489,0x0489,0x0489}, /* 0488 */
2533   {0x048A,0x048B,0x048A},  {0x048A,0x048B,0x048A}, /* 048A */
2534   {0x048C,0x048D,0x048C},  {0x048C,0x048D,0x048C}, /* 048C */
2535   {0x048E,0x048F,0x048E},  {0x048E,0x048F,0x048E}, /* 048E */
2536   {0x0490,0x0491,0x0490},  {0x0490,0x0491,0x0490}, /* 0490 */
2537   {0x0492,0x0493,0x0492},  {0x0492,0x0493,0x0492}, /* 0492 */
2538   {0x0494,0x0495,0x0494},  {0x0494,0x0495,0x0494}, /* 0494 */
2539   {0x0496,0x0497,0x0496},  {0x0496,0x0497,0x0496}, /* 0496 */
2540   {0x0498,0x0499,0x0498},  {0x0498,0x0499,0x0498}, /* 0498 */
2541   {0x049A,0x049B,0x049A},  {0x049A,0x049B,0x049A}, /* 049A */
2542   {0x049C,0x049D,0x049C},  {0x049C,0x049D,0x049C}, /* 049C */
2543   {0x049E,0x049F,0x049E},  {0x049E,0x049F,0x049E}, /* 049E */
2544   {0x04A0,0x04A1,0x04A0},  {0x04A0,0x04A1,0x04A0}, /* 04A0 */
2545   {0x04A2,0x04A3,0x04A2},  {0x04A2,0x04A3,0x04A2}, /* 04A2 */
2546   {0x04A4,0x04A5,0x04A4},  {0x04A4,0x04A5,0x04A4}, /* 04A4 */
2547   {0x04A6,0x04A7,0x04A6},  {0x04A6,0x04A7,0x04A6}, /* 04A6 */
2548   {0x04A8,0x04A9,0x04A8},  {0x04A8,0x04A9,0x04A8}, /* 04A8 */
2549   {0x04AA,0x04AB,0x04AA},  {0x04AA,0x04AB,0x04AA}, /* 04AA */
2550   {0x04AC,0x04AD,0x04AC},  {0x04AC,0x04AD,0x04AC}, /* 04AC */
2551   {0x04AE,0x04AF,0x04AE},  {0x04AE,0x04AF,0x04AE}, /* 04AE */
2552   {0x04B0,0x04B1,0x04B0},  {0x04B0,0x04B1,0x04B0}, /* 04B0 */
2553   {0x04B2,0x04B3,0x04B2},  {0x04B2,0x04B3,0x04B2}, /* 04B2 */
2554   {0x04B4,0x04B5,0x04B4},  {0x04B4,0x04B5,0x04B4}, /* 04B4 */
2555   {0x04B6,0x04B7,0x04B6},  {0x04B6,0x04B7,0x04B6}, /* 04B6 */
2556   {0x04B8,0x04B9,0x04B8},  {0x04B8,0x04B9,0x04B8}, /* 04B8 */
2557   {0x04BA,0x04BB,0x04BA},  {0x04BA,0x04BB,0x04BA}, /* 04BA */
2558   {0x04BC,0x04BD,0x04BC},  {0x04BC,0x04BD,0x04BC}, /* 04BC */
2559   {0x04BE,0x04BF,0x04BE},  {0x04BE,0x04BF,0x04BE}, /* 04BE */
2560   {0x04C0,0x04CF,0x04C0},  {0x04C1,0x04C2,0x0416}, /* 04C0 */
2561   {0x04C1,0x04C2,0x0416},  {0x04C3,0x04C4,0x04C3}, /* 04C2 */
2562   {0x04C3,0x04C4,0x04C3},  {0x04C5,0x04C6,0x04C5}, /* 04C4 */
2563   {0x04C5,0x04C6,0x04C5},  {0x04C7,0x04C8,0x04C7}, /* 04C6 */
2564   {0x04C7,0x04C8,0x04C7},  {0x04C9,0x04CA,0x04C9}, /* 04C8 */
2565   {0x04C9,0x04CA,0x04C9},  {0x04CB,0x04CC,0x04CB}, /* 04CA */
2566   {0x04CB,0x04CC,0x04CB},  {0x04CD,0x04CE,0x04CD}, /* 04CC */
2567   {0x04CD,0x04CE,0x04CD},  {0x04C0,0x04CF,0x04C0}, /* 04CE */
2568   {0x04D0,0x04D1,0x0410},  {0x04D0,0x04D1,0x0410}, /* 04D0 */
2569   {0x04D2,0x04D3,0x0410},  {0x04D2,0x04D3,0x0410}, /* 04D2 */
2570   {0x04D4,0x04D5,0x04D4},  {0x04D4,0x04D5,0x04D4}, /* 04D4 */
2571   {0x04D6,0x04D7,0x0415},  {0x04D6,0x04D7,0x0415}, /* 04D6 */
2572   {0x04D8,0x04D9,0x04D8},  {0x04D8,0x04D9,0x04D8}, /* 04D8 */
2573   {0x04DA,0x04DB,0x04D8},  {0x04DA,0x04DB,0x04D8}, /* 04DA */
2574   {0x04DC,0x04DD,0x0416},  {0x04DC,0x04DD,0x0416}, /* 04DC */
2575   {0x04DE,0x04DF,0x0417},  {0x04DE,0x04DF,0x0417}, /* 04DE */
2576   {0x04E0,0x04E1,0x04E0},  {0x04E0,0x04E1,0x04E0}, /* 04E0 */
2577   {0x04E2,0x04E3,0x0418},  {0x04E2,0x04E3,0x0418}, /* 04E2 */
2578   {0x04E4,0x04E5,0x0418},  {0x04E4,0x04E5,0x0418}, /* 04E4 */
2579   {0x04E6,0x04E7,0x041E},  {0x04E6,0x04E7,0x041E}, /* 04E6 */
2580   {0x04E8,0x04E9,0x04E8},  {0x04E8,0x04E9,0x04E8}, /* 04E8 */
2581   {0x04EA,0x04EB,0x04E8},  {0x04EA,0x04EB,0x04E8}, /* 04EA */
2582   {0x04EC,0x04ED,0x042D},  {0x04EC,0x04ED,0x042D}, /* 04EC */
2583   {0x04EE,0x04EF,0x0423},  {0x04EE,0x04EF,0x0423}, /* 04EE */
2584   {0x04F0,0x04F1,0x0423},  {0x04F0,0x04F1,0x0423}, /* 04F0 */
2585   {0x04F2,0x04F3,0x0423},  {0x04F2,0x04F3,0x0423}, /* 04F2 */
2586   {0x04F4,0x04F5,0x0427},  {0x04F4,0x04F5,0x0427}, /* 04F4 */
2587   {0x04F6,0x04F7,0x04F6},  {0x04F6,0x04F7,0x04F6}, /* 04F6 */
2588   {0x04F8,0x04F9,0x042B},  {0x04F8,0x04F9,0x042B}, /* 04F8 */
2589   {0x04FA,0x04FB,0x04FA},  {0x04FA,0x04FB,0x04FA}, /* 04FA */
2590   {0x04FC,0x04FD,0x04FC},  {0x04FC,0x04FD,0x04FC}, /* 04FC */
2591   {0x04FE,0x04FF,0x04FE},  {0x04FE,0x04FF,0x04FE} /* 04FE */
2592 };
2593 
2594 static const MY_UNICASE_CHARACTER u520p05[]={
2595   {0x0500,0x0501,0x0500},  {0x0500,0x0501,0x0500}, /* 0500 */
2596   {0x0502,0x0503,0x0502},  {0x0502,0x0503,0x0502}, /* 0502 */
2597   {0x0504,0x0505,0x0504},  {0x0504,0x0505,0x0504}, /* 0504 */
2598   {0x0506,0x0507,0x0506},  {0x0506,0x0507,0x0506}, /* 0506 */
2599   {0x0508,0x0509,0x0508},  {0x0508,0x0509,0x0508}, /* 0508 */
2600   {0x050A,0x050B,0x050A},  {0x050A,0x050B,0x050A}, /* 050A */
2601   {0x050C,0x050D,0x050C},  {0x050C,0x050D,0x050C}, /* 050C */
2602   {0x050E,0x050F,0x050E},  {0x050E,0x050F,0x050E}, /* 050E */
2603   {0x0510,0x0511,0x0510},  {0x0510,0x0511,0x0510}, /* 0510 */
2604   {0x0512,0x0513,0x0512},  {0x0512,0x0513,0x0512}, /* 0512 */
2605   {0x0514,0x0515,0x0514},  {0x0514,0x0515,0x0514}, /* 0514 */
2606   {0x0516,0x0517,0x0516},  {0x0516,0x0517,0x0516}, /* 0516 */
2607   {0x0518,0x0519,0x0518},  {0x0518,0x0519,0x0518}, /* 0518 */
2608   {0x051A,0x051B,0x051A},  {0x051A,0x051B,0x051A}, /* 051A */
2609   {0x051C,0x051D,0x051C},  {0x051C,0x051D,0x051C}, /* 051C */
2610   {0x051E,0x051F,0x051E},  {0x051E,0x051F,0x051E}, /* 051E */
2611   {0x0520,0x0521,0x0520},  {0x0520,0x0521,0x0520}, /* 0520 */
2612   {0x0522,0x0523,0x0522},  {0x0522,0x0523,0x0522}, /* 0522 */
2613   {0x0524,0x0525,0x0524},  {0x0524,0x0525,0x0524}, /* 0524 */
2614   {0x0526,0x0526,0x0526},  {0x0527,0x0527,0x0527}, /* 0526 */
2615   {0x0528,0x0528,0x0528},  {0x0529,0x0529,0x0529}, /* 0528 */
2616   {0x052A,0x052A,0x052A},  {0x052B,0x052B,0x052B}, /* 052A */
2617   {0x052C,0x052C,0x052C},  {0x052D,0x052D,0x052D}, /* 052C */
2618   {0x052E,0x052E,0x052E},  {0x052F,0x052F,0x052F}, /* 052E */
2619   {0x0530,0x0530,0x0530},  {0x0531,0x0561,0x0531}, /* 0530 */
2620   {0x0532,0x0562,0x0532},  {0x0533,0x0563,0x0533}, /* 0532 */
2621   {0x0534,0x0564,0x0534},  {0x0535,0x0565,0x0535}, /* 0534 */
2622   {0x0536,0x0566,0x0536},  {0x0537,0x0567,0x0537}, /* 0536 */
2623   {0x0538,0x0568,0x0538},  {0x0539,0x0569,0x0539}, /* 0538 */
2624   {0x053A,0x056A,0x053A},  {0x053B,0x056B,0x053B}, /* 053A */
2625   {0x053C,0x056C,0x053C},  {0x053D,0x056D,0x053D}, /* 053C */
2626   {0x053E,0x056E,0x053E},  {0x053F,0x056F,0x053F}, /* 053E */
2627   {0x0540,0x0570,0x0540},  {0x0541,0x0571,0x0541}, /* 0540 */
2628   {0x0542,0x0572,0x0542},  {0x0543,0x0573,0x0543}, /* 0542 */
2629   {0x0544,0x0574,0x0544},  {0x0545,0x0575,0x0545}, /* 0544 */
2630   {0x0546,0x0576,0x0546},  {0x0547,0x0577,0x0547}, /* 0546 */
2631   {0x0548,0x0578,0x0548},  {0x0549,0x0579,0x0549}, /* 0548 */
2632   {0x054A,0x057A,0x054A},  {0x054B,0x057B,0x054B}, /* 054A */
2633   {0x054C,0x057C,0x054C},  {0x054D,0x057D,0x054D}, /* 054C */
2634   {0x054E,0x057E,0x054E},  {0x054F,0x057F,0x054F}, /* 054E */
2635   {0x0550,0x0580,0x0550},  {0x0551,0x0581,0x0551}, /* 0550 */
2636   {0x0552,0x0582,0x0552},  {0x0553,0x0583,0x0553}, /* 0552 */
2637   {0x0554,0x0584,0x0554},  {0x0555,0x0585,0x0555}, /* 0554 */
2638   {0x0556,0x0586,0x0556},  {0x0557,0x0557,0x0557}, /* 0556 */
2639   {0x0558,0x0558,0x0558},  {0x0559,0x0559,0x0559}, /* 0558 */
2640   {0x055A,0x055A,0x055A},  {0x055B,0x055B,0x055B}, /* 055A */
2641   {0x055C,0x055C,0x055C},  {0x055D,0x055D,0x055D}, /* 055C */
2642   {0x055E,0x055E,0x055E},  {0x055F,0x055F,0x055F}, /* 055E */
2643   {0x0560,0x0560,0x0560},  {0x0531,0x0561,0x0531}, /* 0560 */
2644   {0x0532,0x0562,0x0532},  {0x0533,0x0563,0x0533}, /* 0562 */
2645   {0x0534,0x0564,0x0534},  {0x0535,0x0565,0x0535}, /* 0564 */
2646   {0x0536,0x0566,0x0536},  {0x0537,0x0567,0x0537}, /* 0566 */
2647   {0x0538,0x0568,0x0538},  {0x0539,0x0569,0x0539}, /* 0568 */
2648   {0x053A,0x056A,0x053A},  {0x053B,0x056B,0x053B}, /* 056A */
2649   {0x053C,0x056C,0x053C},  {0x053D,0x056D,0x053D}, /* 056C */
2650   {0x053E,0x056E,0x053E},  {0x053F,0x056F,0x053F}, /* 056E */
2651   {0x0540,0x0570,0x0540},  {0x0541,0x0571,0x0541}, /* 0570 */
2652   {0x0542,0x0572,0x0542},  {0x0543,0x0573,0x0543}, /* 0572 */
2653   {0x0544,0x0574,0x0544},  {0x0545,0x0575,0x0545}, /* 0574 */
2654   {0x0546,0x0576,0x0546},  {0x0547,0x0577,0x0547}, /* 0576 */
2655   {0x0548,0x0578,0x0548},  {0x0549,0x0579,0x0549}, /* 0578 */
2656   {0x054A,0x057A,0x054A},  {0x054B,0x057B,0x054B}, /* 057A */
2657   {0x054C,0x057C,0x054C},  {0x054D,0x057D,0x054D}, /* 057C */
2658   {0x054E,0x057E,0x054E},  {0x054F,0x057F,0x054F}, /* 057E */
2659   {0x0550,0x0580,0x0550},  {0x0551,0x0581,0x0551}, /* 0580 */
2660   {0x0552,0x0582,0x0552},  {0x0553,0x0583,0x0553}, /* 0582 */
2661   {0x0554,0x0584,0x0554},  {0x0555,0x0585,0x0555}, /* 0584 */
2662   {0x0556,0x0586,0x0556},  {0x0587,0x0587,0x0587}, /* 0586 */
2663   {0x0588,0x0588,0x0588},  {0x0589,0x0589,0x0589}, /* 0588 */
2664   {0x058A,0x058A,0x058A},  {0x058B,0x058B,0x058B}, /* 058A */
2665   {0x058C,0x058C,0x058C},  {0x058D,0x058D,0x058D}, /* 058C */
2666   {0x058E,0x058E,0x058E},  {0x058F,0x058F,0x058F}, /* 058E */
2667   {0x0590,0x0590,0x0590},  {0x0591,0x0591,0x0591}, /* 0590 */
2668   {0x0592,0x0592,0x0592},  {0x0593,0x0593,0x0593}, /* 0592 */
2669   {0x0594,0x0594,0x0594},  {0x0595,0x0595,0x0595}, /* 0594 */
2670   {0x0596,0x0596,0x0596},  {0x0597,0x0597,0x0597}, /* 0596 */
2671   {0x0598,0x0598,0x0598},  {0x0599,0x0599,0x0599}, /* 0598 */
2672   {0x059A,0x059A,0x059A},  {0x059B,0x059B,0x059B}, /* 059A */
2673   {0x059C,0x059C,0x059C},  {0x059D,0x059D,0x059D}, /* 059C */
2674   {0x059E,0x059E,0x059E},  {0x059F,0x059F,0x059F}, /* 059E */
2675   {0x05A0,0x05A0,0x05A0},  {0x05A1,0x05A1,0x05A1}, /* 05A0 */
2676   {0x05A2,0x05A2,0x05A2},  {0x05A3,0x05A3,0x05A3}, /* 05A2 */
2677   {0x05A4,0x05A4,0x05A4},  {0x05A5,0x05A5,0x05A5}, /* 05A4 */
2678   {0x05A6,0x05A6,0x05A6},  {0x05A7,0x05A7,0x05A7}, /* 05A6 */
2679   {0x05A8,0x05A8,0x05A8},  {0x05A9,0x05A9,0x05A9}, /* 05A8 */
2680   {0x05AA,0x05AA,0x05AA},  {0x05AB,0x05AB,0x05AB}, /* 05AA */
2681   {0x05AC,0x05AC,0x05AC},  {0x05AD,0x05AD,0x05AD}, /* 05AC */
2682   {0x05AE,0x05AE,0x05AE},  {0x05AF,0x05AF,0x05AF}, /* 05AE */
2683   {0x05B0,0x05B0,0x05B0},  {0x05B1,0x05B1,0x05B1}, /* 05B0 */
2684   {0x05B2,0x05B2,0x05B2},  {0x05B3,0x05B3,0x05B3}, /* 05B2 */
2685   {0x05B4,0x05B4,0x05B4},  {0x05B5,0x05B5,0x05B5}, /* 05B4 */
2686   {0x05B6,0x05B6,0x05B6},  {0x05B7,0x05B7,0x05B7}, /* 05B6 */
2687   {0x05B8,0x05B8,0x05B8},  {0x05B9,0x05B9,0x05B9}, /* 05B8 */
2688   {0x05BA,0x05BA,0x05BA},  {0x05BB,0x05BB,0x05BB}, /* 05BA */
2689   {0x05BC,0x05BC,0x05BC},  {0x05BD,0x05BD,0x05BD}, /* 05BC */
2690   {0x05BE,0x05BE,0x05BE},  {0x05BF,0x05BF,0x05BF}, /* 05BE */
2691   {0x05C0,0x05C0,0x05C0},  {0x05C1,0x05C1,0x05C1}, /* 05C0 */
2692   {0x05C2,0x05C2,0x05C2},  {0x05C3,0x05C3,0x05C3}, /* 05C2 */
2693   {0x05C4,0x05C4,0x05C4},  {0x05C5,0x05C5,0x05C5}, /* 05C4 */
2694   {0x05C6,0x05C6,0x05C6},  {0x05C7,0x05C7,0x05C7}, /* 05C6 */
2695   {0x05C8,0x05C8,0x05C8},  {0x05C9,0x05C9,0x05C9}, /* 05C8 */
2696   {0x05CA,0x05CA,0x05CA},  {0x05CB,0x05CB,0x05CB}, /* 05CA */
2697   {0x05CC,0x05CC,0x05CC},  {0x05CD,0x05CD,0x05CD}, /* 05CC */
2698   {0x05CE,0x05CE,0x05CE},  {0x05CF,0x05CF,0x05CF}, /* 05CE */
2699   {0x05D0,0x05D0,0x05D0},  {0x05D1,0x05D1,0x05D1}, /* 05D0 */
2700   {0x05D2,0x05D2,0x05D2},  {0x05D3,0x05D3,0x05D3}, /* 05D2 */
2701   {0x05D4,0x05D4,0x05D4},  {0x05D5,0x05D5,0x05D5}, /* 05D4 */
2702   {0x05D6,0x05D6,0x05D6},  {0x05D7,0x05D7,0x05D7}, /* 05D6 */
2703   {0x05D8,0x05D8,0x05D8},  {0x05D9,0x05D9,0x05D9}, /* 05D8 */
2704   {0x05DA,0x05DA,0x05DA},  {0x05DB,0x05DB,0x05DB}, /* 05DA */
2705   {0x05DC,0x05DC,0x05DC},  {0x05DD,0x05DD,0x05DD}, /* 05DC */
2706   {0x05DE,0x05DE,0x05DE},  {0x05DF,0x05DF,0x05DF}, /* 05DE */
2707   {0x05E0,0x05E0,0x05E0},  {0x05E1,0x05E1,0x05E1}, /* 05E0 */
2708   {0x05E2,0x05E2,0x05E2},  {0x05E3,0x05E3,0x05E3}, /* 05E2 */
2709   {0x05E4,0x05E4,0x05E4},  {0x05E5,0x05E5,0x05E5}, /* 05E4 */
2710   {0x05E6,0x05E6,0x05E6},  {0x05E7,0x05E7,0x05E7}, /* 05E6 */
2711   {0x05E8,0x05E8,0x05E8},  {0x05E9,0x05E9,0x05E9}, /* 05E8 */
2712   {0x05EA,0x05EA,0x05EA},  {0x05EB,0x05EB,0x05EB}, /* 05EA */
2713   {0x05EC,0x05EC,0x05EC},  {0x05ED,0x05ED,0x05ED}, /* 05EC */
2714   {0x05EE,0x05EE,0x05EE},  {0x05EF,0x05EF,0x05EF}, /* 05EE */
2715   {0x05F0,0x05F0,0x05F0},  {0x05F1,0x05F1,0x05F1}, /* 05F0 */
2716   {0x05F2,0x05F2,0x05F2},  {0x05F3,0x05F3,0x05F3}, /* 05F2 */
2717   {0x05F4,0x05F4,0x05F4},  {0x05F5,0x05F5,0x05F5}, /* 05F4 */
2718   {0x05F6,0x05F6,0x05F6},  {0x05F7,0x05F7,0x05F7}, /* 05F6 */
2719   {0x05F8,0x05F8,0x05F8},  {0x05F9,0x05F9,0x05F9}, /* 05F8 */
2720   {0x05FA,0x05FA,0x05FA},  {0x05FB,0x05FB,0x05FB}, /* 05FA */
2721   {0x05FC,0x05FC,0x05FC},  {0x05FD,0x05FD,0x05FD}, /* 05FC */
2722   {0x05FE,0x05FE,0x05FE},  {0x05FF,0x05FF,0x05FF} /* 05FE */
2723 };
2724 
2725 static const MY_UNICASE_CHARACTER u520p10[]={
2726   {0x1000,0x1000,0x1000},  {0x1001,0x1001,0x1001}, /* 1000 */
2727   {0x1002,0x1002,0x1002},  {0x1003,0x1003,0x1003}, /* 1002 */
2728   {0x1004,0x1004,0x1004},  {0x1005,0x1005,0x1005}, /* 1004 */
2729   {0x1006,0x1006,0x1006},  {0x1007,0x1007,0x1007}, /* 1006 */
2730   {0x1008,0x1008,0x1008},  {0x1009,0x1009,0x1009}, /* 1008 */
2731   {0x100A,0x100A,0x100A},  {0x100B,0x100B,0x100B}, /* 100A */
2732   {0x100C,0x100C,0x100C},  {0x100D,0x100D,0x100D}, /* 100C */
2733   {0x100E,0x100E,0x100E},  {0x100F,0x100F,0x100F}, /* 100E */
2734   {0x1010,0x1010,0x1010},  {0x1011,0x1011,0x1011}, /* 1010 */
2735   {0x1012,0x1012,0x1012},  {0x1013,0x1013,0x1013}, /* 1012 */
2736   {0x1014,0x1014,0x1014},  {0x1015,0x1015,0x1015}, /* 1014 */
2737   {0x1016,0x1016,0x1016},  {0x1017,0x1017,0x1017}, /* 1016 */
2738   {0x1018,0x1018,0x1018},  {0x1019,0x1019,0x1019}, /* 1018 */
2739   {0x101A,0x101A,0x101A},  {0x101B,0x101B,0x101B}, /* 101A */
2740   {0x101C,0x101C,0x101C},  {0x101D,0x101D,0x101D}, /* 101C */
2741   {0x101E,0x101E,0x101E},  {0x101F,0x101F,0x101F}, /* 101E */
2742   {0x1020,0x1020,0x1020},  {0x1021,0x1021,0x1021}, /* 1020 */
2743   {0x1022,0x1022,0x1022},  {0x1023,0x1023,0x1023}, /* 1022 */
2744   {0x1024,0x1024,0x1024},  {0x1025,0x1025,0x1025}, /* 1024 */
2745   {0x1026,0x1026,0x1026},  {0x1027,0x1027,0x1027}, /* 1026 */
2746   {0x1028,0x1028,0x1028},  {0x1029,0x1029,0x1029}, /* 1028 */
2747   {0x102A,0x102A,0x102A},  {0x102B,0x102B,0x102B}, /* 102A */
2748   {0x102C,0x102C,0x102C},  {0x102D,0x102D,0x102D}, /* 102C */
2749   {0x102E,0x102E,0x102E},  {0x102F,0x102F,0x102F}, /* 102E */
2750   {0x1030,0x1030,0x1030},  {0x1031,0x1031,0x1031}, /* 1030 */
2751   {0x1032,0x1032,0x1032},  {0x1033,0x1033,0x1033}, /* 1032 */
2752   {0x1034,0x1034,0x1034},  {0x1035,0x1035,0x1035}, /* 1034 */
2753   {0x1036,0x1036,0x1036},  {0x1037,0x1037,0x1037}, /* 1036 */
2754   {0x1038,0x1038,0x1038},  {0x1039,0x1039,0x1039}, /* 1038 */
2755   {0x103A,0x103A,0x103A},  {0x103B,0x103B,0x103B}, /* 103A */
2756   {0x103C,0x103C,0x103C},  {0x103D,0x103D,0x103D}, /* 103C */
2757   {0x103E,0x103E,0x103E},  {0x103F,0x103F,0x103F}, /* 103E */
2758   {0x1040,0x1040,0x1040},  {0x1041,0x1041,0x1041}, /* 1040 */
2759   {0x1042,0x1042,0x1042},  {0x1043,0x1043,0x1043}, /* 1042 */
2760   {0x1044,0x1044,0x1044},  {0x1045,0x1045,0x1045}, /* 1044 */
2761   {0x1046,0x1046,0x1046},  {0x1047,0x1047,0x1047}, /* 1046 */
2762   {0x1048,0x1048,0x1048},  {0x1049,0x1049,0x1049}, /* 1048 */
2763   {0x104A,0x104A,0x104A},  {0x104B,0x104B,0x104B}, /* 104A */
2764   {0x104C,0x104C,0x104C},  {0x104D,0x104D,0x104D}, /* 104C */
2765   {0x104E,0x104E,0x104E},  {0x104F,0x104F,0x104F}, /* 104E */
2766   {0x1050,0x1050,0x1050},  {0x1051,0x1051,0x1051}, /* 1050 */
2767   {0x1052,0x1052,0x1052},  {0x1053,0x1053,0x1053}, /* 1052 */
2768   {0x1054,0x1054,0x1054},  {0x1055,0x1055,0x1055}, /* 1054 */
2769   {0x1056,0x1056,0x1056},  {0x1057,0x1057,0x1057}, /* 1056 */
2770   {0x1058,0x1058,0x1058},  {0x1059,0x1059,0x1059}, /* 1058 */
2771   {0x105A,0x105A,0x105A},  {0x105B,0x105B,0x105B}, /* 105A */
2772   {0x105C,0x105C,0x105C},  {0x105D,0x105D,0x105D}, /* 105C */
2773   {0x105E,0x105E,0x105E},  {0x105F,0x105F,0x105F}, /* 105E */
2774   {0x1060,0x1060,0x1060},  {0x1061,0x1061,0x1061}, /* 1060 */
2775   {0x1062,0x1062,0x1062},  {0x1063,0x1063,0x1063}, /* 1062 */
2776   {0x1064,0x1064,0x1064},  {0x1065,0x1065,0x1065}, /* 1064 */
2777   {0x1066,0x1066,0x1066},  {0x1067,0x1067,0x1067}, /* 1066 */
2778   {0x1068,0x1068,0x1068},  {0x1069,0x1069,0x1069}, /* 1068 */
2779   {0x106A,0x106A,0x106A},  {0x106B,0x106B,0x106B}, /* 106A */
2780   {0x106C,0x106C,0x106C},  {0x106D,0x106D,0x106D}, /* 106C */
2781   {0x106E,0x106E,0x106E},  {0x106F,0x106F,0x106F}, /* 106E */
2782   {0x1070,0x1070,0x1070},  {0x1071,0x1071,0x1071}, /* 1070 */
2783   {0x1072,0x1072,0x1072},  {0x1073,0x1073,0x1073}, /* 1072 */
2784   {0x1074,0x1074,0x1074},  {0x1075,0x1075,0x1075}, /* 1074 */
2785   {0x1076,0x1076,0x1076},  {0x1077,0x1077,0x1077}, /* 1076 */
2786   {0x1078,0x1078,0x1078},  {0x1079,0x1079,0x1079}, /* 1078 */
2787   {0x107A,0x107A,0x107A},  {0x107B,0x107B,0x107B}, /* 107A */
2788   {0x107C,0x107C,0x107C},  {0x107D,0x107D,0x107D}, /* 107C */
2789   {0x107E,0x107E,0x107E},  {0x107F,0x107F,0x107F}, /* 107E */
2790   {0x1080,0x1080,0x1080},  {0x1081,0x1081,0x1081}, /* 1080 */
2791   {0x1082,0x1082,0x1082},  {0x1083,0x1083,0x1083}, /* 1082 */
2792   {0x1084,0x1084,0x1084},  {0x1085,0x1085,0x1085}, /* 1084 */
2793   {0x1086,0x1086,0x1086},  {0x1087,0x1087,0x1087}, /* 1086 */
2794   {0x1088,0x1088,0x1088},  {0x1089,0x1089,0x1089}, /* 1088 */
2795   {0x108A,0x108A,0x108A},  {0x108B,0x108B,0x108B}, /* 108A */
2796   {0x108C,0x108C,0x108C},  {0x108D,0x108D,0x108D}, /* 108C */
2797   {0x108E,0x108E,0x108E},  {0x108F,0x108F,0x108F}, /* 108E */
2798   {0x1090,0x1090,0x1090},  {0x1091,0x1091,0x1091}, /* 1090 */
2799   {0x1092,0x1092,0x1092},  {0x1093,0x1093,0x1093}, /* 1092 */
2800   {0x1094,0x1094,0x1094},  {0x1095,0x1095,0x1095}, /* 1094 */
2801   {0x1096,0x1096,0x1096},  {0x1097,0x1097,0x1097}, /* 1096 */
2802   {0x1098,0x1098,0x1098},  {0x1099,0x1099,0x1099}, /* 1098 */
2803   {0x109A,0x109A,0x109A},  {0x109B,0x109B,0x109B}, /* 109A */
2804   {0x109C,0x109C,0x109C},  {0x109D,0x109D,0x109D}, /* 109C */
2805   {0x109E,0x109E,0x109E},  {0x109F,0x109F,0x109F}, /* 109E */
2806   {0x10A0,0x2D00,0x10A0},  {0x10A1,0x2D01,0x10A1}, /* 10A0 */
2807   {0x10A2,0x2D02,0x10A2},  {0x10A3,0x2D03,0x10A3}, /* 10A2 */
2808   {0x10A4,0x2D04,0x10A4},  {0x10A5,0x2D05,0x10A5}, /* 10A4 */
2809   {0x10A6,0x2D06,0x10A6},  {0x10A7,0x2D07,0x10A7}, /* 10A6 */
2810   {0x10A8,0x2D08,0x10A8},  {0x10A9,0x2D09,0x10A9}, /* 10A8 */
2811   {0x10AA,0x2D0A,0x10AA},  {0x10AB,0x2D0B,0x10AB}, /* 10AA */
2812   {0x10AC,0x2D0C,0x10AC},  {0x10AD,0x2D0D,0x10AD}, /* 10AC */
2813   {0x10AE,0x2D0E,0x10AE},  {0x10AF,0x2D0F,0x10AF}, /* 10AE */
2814   {0x10B0,0x2D10,0x10B0},  {0x10B1,0x2D11,0x10B1}, /* 10B0 */
2815   {0x10B2,0x2D12,0x10B2},  {0x10B3,0x2D13,0x10B3}, /* 10B2 */
2816   {0x10B4,0x2D14,0x10B4},  {0x10B5,0x2D15,0x10B5}, /* 10B4 */
2817   {0x10B6,0x2D16,0x10B6},  {0x10B7,0x2D17,0x10B7}, /* 10B6 */
2818   {0x10B8,0x2D18,0x10B8},  {0x10B9,0x2D19,0x10B9}, /* 10B8 */
2819   {0x10BA,0x2D1A,0x10BA},  {0x10BB,0x2D1B,0x10BB}, /* 10BA */
2820   {0x10BC,0x2D1C,0x10BC},  {0x10BD,0x2D1D,0x10BD}, /* 10BC */
2821   {0x10BE,0x2D1E,0x10BE},  {0x10BF,0x2D1F,0x10BF}, /* 10BE */
2822   {0x10C0,0x2D20,0x10C0},  {0x10C1,0x2D21,0x10C1}, /* 10C0 */
2823   {0x10C2,0x2D22,0x10C2},  {0x10C3,0x2D23,0x10C3}, /* 10C2 */
2824   {0x10C4,0x2D24,0x10C4},  {0x10C5,0x2D25,0x10C5}, /* 10C4 */
2825   {0x10C6,0x10C6,0x10C6},  {0x10C7,0x10C7,0x10C7}, /* 10C6 */
2826   {0x10C8,0x10C8,0x10C8},  {0x10C9,0x10C9,0x10C9}, /* 10C8 */
2827   {0x10CA,0x10CA,0x10CA},  {0x10CB,0x10CB,0x10CB}, /* 10CA */
2828   {0x10CC,0x10CC,0x10CC},  {0x10CD,0x10CD,0x10CD}, /* 10CC */
2829   {0x10CE,0x10CE,0x10CE},  {0x10CF,0x10CF,0x10CF}, /* 10CE */
2830   {0x10D0,0x10D0,0x10D0},  {0x10D1,0x10D1,0x10D1}, /* 10D0 */
2831   {0x10D2,0x10D2,0x10D2},  {0x10D3,0x10D3,0x10D3}, /* 10D2 */
2832   {0x10D4,0x10D4,0x10D4},  {0x10D5,0x10D5,0x10D5}, /* 10D4 */
2833   {0x10D6,0x10D6,0x10D6},  {0x10D7,0x10D7,0x10D7}, /* 10D6 */
2834   {0x10D8,0x10D8,0x10D8},  {0x10D9,0x10D9,0x10D9}, /* 10D8 */
2835   {0x10DA,0x10DA,0x10DA},  {0x10DB,0x10DB,0x10DB}, /* 10DA */
2836   {0x10DC,0x10DC,0x10DC},  {0x10DD,0x10DD,0x10DD}, /* 10DC */
2837   {0x10DE,0x10DE,0x10DE},  {0x10DF,0x10DF,0x10DF}, /* 10DE */
2838   {0x10E0,0x10E0,0x10E0},  {0x10E1,0x10E1,0x10E1}, /* 10E0 */
2839   {0x10E2,0x10E2,0x10E2},  {0x10E3,0x10E3,0x10E3}, /* 10E2 */
2840   {0x10E4,0x10E4,0x10E4},  {0x10E5,0x10E5,0x10E5}, /* 10E4 */
2841   {0x10E6,0x10E6,0x10E6},  {0x10E7,0x10E7,0x10E7}, /* 10E6 */
2842   {0x10E8,0x10E8,0x10E8},  {0x10E9,0x10E9,0x10E9}, /* 10E8 */
2843   {0x10EA,0x10EA,0x10EA},  {0x10EB,0x10EB,0x10EB}, /* 10EA */
2844   {0x10EC,0x10EC,0x10EC},  {0x10ED,0x10ED,0x10ED}, /* 10EC */
2845   {0x10EE,0x10EE,0x10EE},  {0x10EF,0x10EF,0x10EF}, /* 10EE */
2846   {0x10F0,0x10F0,0x10F0},  {0x10F1,0x10F1,0x10F1}, /* 10F0 */
2847   {0x10F2,0x10F2,0x10F2},  {0x10F3,0x10F3,0x10F3}, /* 10F2 */
2848   {0x10F4,0x10F4,0x10F4},  {0x10F5,0x10F5,0x10F5}, /* 10F4 */
2849   {0x10F6,0x10F6,0x10F6},  {0x10F7,0x10F7,0x10F7}, /* 10F6 */
2850   {0x10F8,0x10F8,0x10F8},  {0x10F9,0x10F9,0x10F9}, /* 10F8 */
2851   {0x10FA,0x10FA,0x10FA},  {0x10FB,0x10FB,0x10FB}, /* 10FA */
2852   {0x10FC,0x10FC,0x10FC},  {0x10FD,0x10FD,0x10FD}, /* 10FC */
2853   {0x10FE,0x10FE,0x10FE},  {0x10FF,0x10FF,0x10FF} /* 10FE */
2854 };
2855 
2856 static const MY_UNICASE_CHARACTER u520p1D[]={
2857   {0x1D00,0x1D00,0x1D00},  {0x1D01,0x1D01,0x1D01}, /* 1D00 */
2858   {0x1D02,0x1D02,0x1D02},  {0x1D03,0x1D03,0x1D03}, /* 1D02 */
2859   {0x1D04,0x1D04,0x1D04},  {0x1D05,0x1D05,0x1D05}, /* 1D04 */
2860   {0x1D06,0x1D06,0x1D06},  {0x1D07,0x1D07,0x1D07}, /* 1D06 */
2861   {0x1D08,0x1D08,0x1D08},  {0x1D09,0x1D09,0x1D09}, /* 1D08 */
2862   {0x1D0A,0x1D0A,0x1D0A},  {0x1D0B,0x1D0B,0x1D0B}, /* 1D0A */
2863   {0x1D0C,0x1D0C,0x1D0C},  {0x1D0D,0x1D0D,0x1D0D}, /* 1D0C */
2864   {0x1D0E,0x1D0E,0x1D0E},  {0x1D0F,0x1D0F,0x1D0F}, /* 1D0E */
2865   {0x1D10,0x1D10,0x1D10},  {0x1D11,0x1D11,0x1D11}, /* 1D10 */
2866   {0x1D12,0x1D12,0x1D12},  {0x1D13,0x1D13,0x1D13}, /* 1D12 */
2867   {0x1D14,0x1D14,0x1D14},  {0x1D15,0x1D15,0x1D15}, /* 1D14 */
2868   {0x1D16,0x1D16,0x1D16},  {0x1D17,0x1D17,0x1D17}, /* 1D16 */
2869   {0x1D18,0x1D18,0x1D18},  {0x1D19,0x1D19,0x1D19}, /* 1D18 */
2870   {0x1D1A,0x1D1A,0x1D1A},  {0x1D1B,0x1D1B,0x1D1B}, /* 1D1A */
2871   {0x1D1C,0x1D1C,0x1D1C},  {0x1D1D,0x1D1D,0x1D1D}, /* 1D1C */
2872   {0x1D1E,0x1D1E,0x1D1E},  {0x1D1F,0x1D1F,0x1D1F}, /* 1D1E */
2873   {0x1D20,0x1D20,0x1D20},  {0x1D21,0x1D21,0x1D21}, /* 1D20 */
2874   {0x1D22,0x1D22,0x1D22},  {0x1D23,0x1D23,0x1D23}, /* 1D22 */
2875   {0x1D24,0x1D24,0x1D24},  {0x1D25,0x1D25,0x1D25}, /* 1D24 */
2876   {0x1D26,0x1D26,0x1D26},  {0x1D27,0x1D27,0x1D27}, /* 1D26 */
2877   {0x1D28,0x1D28,0x1D28},  {0x1D29,0x1D29,0x1D29}, /* 1D28 */
2878   {0x1D2A,0x1D2A,0x1D2A},  {0x1D2B,0x1D2B,0x1D2B}, /* 1D2A */
2879   {0x1D2C,0x1D2C,0x1D2C},  {0x1D2D,0x1D2D,0x1D2D}, /* 1D2C */
2880   {0x1D2E,0x1D2E,0x1D2E},  {0x1D2F,0x1D2F,0x1D2F}, /* 1D2E */
2881   {0x1D30,0x1D30,0x1D30},  {0x1D31,0x1D31,0x1D31}, /* 1D30 */
2882   {0x1D32,0x1D32,0x1D32},  {0x1D33,0x1D33,0x1D33}, /* 1D32 */
2883   {0x1D34,0x1D34,0x1D34},  {0x1D35,0x1D35,0x1D35}, /* 1D34 */
2884   {0x1D36,0x1D36,0x1D36},  {0x1D37,0x1D37,0x1D37}, /* 1D36 */
2885   {0x1D38,0x1D38,0x1D38},  {0x1D39,0x1D39,0x1D39}, /* 1D38 */
2886   {0x1D3A,0x1D3A,0x1D3A},  {0x1D3B,0x1D3B,0x1D3B}, /* 1D3A */
2887   {0x1D3C,0x1D3C,0x1D3C},  {0x1D3D,0x1D3D,0x1D3D}, /* 1D3C */
2888   {0x1D3E,0x1D3E,0x1D3E},  {0x1D3F,0x1D3F,0x1D3F}, /* 1D3E */
2889   {0x1D40,0x1D40,0x1D40},  {0x1D41,0x1D41,0x1D41}, /* 1D40 */
2890   {0x1D42,0x1D42,0x1D42},  {0x1D43,0x1D43,0x1D43}, /* 1D42 */
2891   {0x1D44,0x1D44,0x1D44},  {0x1D45,0x1D45,0x1D45}, /* 1D44 */
2892   {0x1D46,0x1D46,0x1D46},  {0x1D47,0x1D47,0x1D47}, /* 1D46 */
2893   {0x1D48,0x1D48,0x1D48},  {0x1D49,0x1D49,0x1D49}, /* 1D48 */
2894   {0x1D4A,0x1D4A,0x1D4A},  {0x1D4B,0x1D4B,0x1D4B}, /* 1D4A */
2895   {0x1D4C,0x1D4C,0x1D4C},  {0x1D4D,0x1D4D,0x1D4D}, /* 1D4C */
2896   {0x1D4E,0x1D4E,0x1D4E},  {0x1D4F,0x1D4F,0x1D4F}, /* 1D4E */
2897   {0x1D50,0x1D50,0x1D50},  {0x1D51,0x1D51,0x1D51}, /* 1D50 */
2898   {0x1D52,0x1D52,0x1D52},  {0x1D53,0x1D53,0x1D53}, /* 1D52 */
2899   {0x1D54,0x1D54,0x1D54},  {0x1D55,0x1D55,0x1D55}, /* 1D54 */
2900   {0x1D56,0x1D56,0x1D56},  {0x1D57,0x1D57,0x1D57}, /* 1D56 */
2901   {0x1D58,0x1D58,0x1D58},  {0x1D59,0x1D59,0x1D59}, /* 1D58 */
2902   {0x1D5A,0x1D5A,0x1D5A},  {0x1D5B,0x1D5B,0x1D5B}, /* 1D5A */
2903   {0x1D5C,0x1D5C,0x1D5C},  {0x1D5D,0x1D5D,0x1D5D}, /* 1D5C */
2904   {0x1D5E,0x1D5E,0x1D5E},  {0x1D5F,0x1D5F,0x1D5F}, /* 1D5E */
2905   {0x1D60,0x1D60,0x1D60},  {0x1D61,0x1D61,0x1D61}, /* 1D60 */
2906   {0x1D62,0x1D62,0x1D62},  {0x1D63,0x1D63,0x1D63}, /* 1D62 */
2907   {0x1D64,0x1D64,0x1D64},  {0x1D65,0x1D65,0x1D65}, /* 1D64 */
2908   {0x1D66,0x1D66,0x1D66},  {0x1D67,0x1D67,0x1D67}, /* 1D66 */
2909   {0x1D68,0x1D68,0x1D68},  {0x1D69,0x1D69,0x1D69}, /* 1D68 */
2910   {0x1D6A,0x1D6A,0x1D6A},  {0x1D6B,0x1D6B,0x1D6B}, /* 1D6A */
2911   {0x1D6C,0x1D6C,0x1D6C},  {0x1D6D,0x1D6D,0x1D6D}, /* 1D6C */
2912   {0x1D6E,0x1D6E,0x1D6E},  {0x1D6F,0x1D6F,0x1D6F}, /* 1D6E */
2913   {0x1D70,0x1D70,0x1D70},  {0x1D71,0x1D71,0x1D71}, /* 1D70 */
2914   {0x1D72,0x1D72,0x1D72},  {0x1D73,0x1D73,0x1D73}, /* 1D72 */
2915   {0x1D74,0x1D74,0x1D74},  {0x1D75,0x1D75,0x1D75}, /* 1D74 */
2916   {0x1D76,0x1D76,0x1D76},  {0x1D77,0x1D77,0x1D77}, /* 1D76 */
2917   {0x1D78,0x1D78,0x1D78},  {0xA77D,0x1D79,0xA77D}, /* 1D78 */
2918   {0x1D7A,0x1D7A,0x1D7A},  {0x1D7B,0x1D7B,0x1D7B}, /* 1D7A */
2919   {0x1D7C,0x1D7C,0x1D7C},  {0x2C63,0x1D7D,0x2C63}, /* 1D7C */
2920   {0x1D7E,0x1D7E,0x1D7E},  {0x1D7F,0x1D7F,0x1D7F}, /* 1D7E */
2921   {0x1D80,0x1D80,0x1D80},  {0x1D81,0x1D81,0x1D81}, /* 1D80 */
2922   {0x1D82,0x1D82,0x1D82},  {0x1D83,0x1D83,0x1D83}, /* 1D82 */
2923   {0x1D84,0x1D84,0x1D84},  {0x1D85,0x1D85,0x1D85}, /* 1D84 */
2924   {0x1D86,0x1D86,0x1D86},  {0x1D87,0x1D87,0x1D87}, /* 1D86 */
2925   {0x1D88,0x1D88,0x1D88},  {0x1D89,0x1D89,0x1D89}, /* 1D88 */
2926   {0x1D8A,0x1D8A,0x1D8A},  {0x1D8B,0x1D8B,0x1D8B}, /* 1D8A */
2927   {0x1D8C,0x1D8C,0x1D8C},  {0x1D8D,0x1D8D,0x1D8D}, /* 1D8C */
2928   {0x1D8E,0x1D8E,0x1D8E},  {0x1D8F,0x1D8F,0x1D8F}, /* 1D8E */
2929   {0x1D90,0x1D90,0x1D90},  {0x1D91,0x1D91,0x1D91}, /* 1D90 */
2930   {0x1D92,0x1D92,0x1D92},  {0x1D93,0x1D93,0x1D93}, /* 1D92 */
2931   {0x1D94,0x1D94,0x1D94},  {0x1D95,0x1D95,0x1D95}, /* 1D94 */
2932   {0x1D96,0x1D96,0x1D96},  {0x1D97,0x1D97,0x1D97}, /* 1D96 */
2933   {0x1D98,0x1D98,0x1D98},  {0x1D99,0x1D99,0x1D99}, /* 1D98 */
2934   {0x1D9A,0x1D9A,0x1D9A},  {0x1D9B,0x1D9B,0x1D9B}, /* 1D9A */
2935   {0x1D9C,0x1D9C,0x1D9C},  {0x1D9D,0x1D9D,0x1D9D}, /* 1D9C */
2936   {0x1D9E,0x1D9E,0x1D9E},  {0x1D9F,0x1D9F,0x1D9F}, /* 1D9E */
2937   {0x1DA0,0x1DA0,0x1DA0},  {0x1DA1,0x1DA1,0x1DA1}, /* 1DA0 */
2938   {0x1DA2,0x1DA2,0x1DA2},  {0x1DA3,0x1DA3,0x1DA3}, /* 1DA2 */
2939   {0x1DA4,0x1DA4,0x1DA4},  {0x1DA5,0x1DA5,0x1DA5}, /* 1DA4 */
2940   {0x1DA6,0x1DA6,0x1DA6},  {0x1DA7,0x1DA7,0x1DA7}, /* 1DA6 */
2941   {0x1DA8,0x1DA8,0x1DA8},  {0x1DA9,0x1DA9,0x1DA9}, /* 1DA8 */
2942   {0x1DAA,0x1DAA,0x1DAA},  {0x1DAB,0x1DAB,0x1DAB}, /* 1DAA */
2943   {0x1DAC,0x1DAC,0x1DAC},  {0x1DAD,0x1DAD,0x1DAD}, /* 1DAC */
2944   {0x1DAE,0x1DAE,0x1DAE},  {0x1DAF,0x1DAF,0x1DAF}, /* 1DAE */
2945   {0x1DB0,0x1DB0,0x1DB0},  {0x1DB1,0x1DB1,0x1DB1}, /* 1DB0 */
2946   {0x1DB2,0x1DB2,0x1DB2},  {0x1DB3,0x1DB3,0x1DB3}, /* 1DB2 */
2947   {0x1DB4,0x1DB4,0x1DB4},  {0x1DB5,0x1DB5,0x1DB5}, /* 1DB4 */
2948   {0x1DB6,0x1DB6,0x1DB6},  {0x1DB7,0x1DB7,0x1DB7}, /* 1DB6 */
2949   {0x1DB8,0x1DB8,0x1DB8},  {0x1DB9,0x1DB9,0x1DB9}, /* 1DB8 */
2950   {0x1DBA,0x1DBA,0x1DBA},  {0x1DBB,0x1DBB,0x1DBB}, /* 1DBA */
2951   {0x1DBC,0x1DBC,0x1DBC},  {0x1DBD,0x1DBD,0x1DBD}, /* 1DBC */
2952   {0x1DBE,0x1DBE,0x1DBE},  {0x1DBF,0x1DBF,0x1DBF}, /* 1DBE */
2953   {0x1DC0,0x1DC0,0x1DC0},  {0x1DC1,0x1DC1,0x1DC1}, /* 1DC0 */
2954   {0x1DC2,0x1DC2,0x1DC2},  {0x1DC3,0x1DC3,0x1DC3}, /* 1DC2 */
2955   {0x1DC4,0x1DC4,0x1DC4},  {0x1DC5,0x1DC5,0x1DC5}, /* 1DC4 */
2956   {0x1DC6,0x1DC6,0x1DC6},  {0x1DC7,0x1DC7,0x1DC7}, /* 1DC6 */
2957   {0x1DC8,0x1DC8,0x1DC8},  {0x1DC9,0x1DC9,0x1DC9}, /* 1DC8 */
2958   {0x1DCA,0x1DCA,0x1DCA},  {0x1DCB,0x1DCB,0x1DCB}, /* 1DCA */
2959   {0x1DCC,0x1DCC,0x1DCC},  {0x1DCD,0x1DCD,0x1DCD}, /* 1DCC */
2960   {0x1DCE,0x1DCE,0x1DCE},  {0x1DCF,0x1DCF,0x1DCF}, /* 1DCE */
2961   {0x1DD0,0x1DD0,0x1DD0},  {0x1DD1,0x1DD1,0x1DD1}, /* 1DD0 */
2962   {0x1DD2,0x1DD2,0x1DD2},  {0x1DD3,0x1DD3,0x1DD3}, /* 1DD2 */
2963   {0x1DD4,0x1DD4,0x1DD4},  {0x1DD5,0x1DD5,0x1DD5}, /* 1DD4 */
2964   {0x1DD6,0x1DD6,0x1DD6},  {0x1DD7,0x1DD7,0x1DD7}, /* 1DD6 */
2965   {0x1DD8,0x1DD8,0x1DD8},  {0x1DD9,0x1DD9,0x1DD9}, /* 1DD8 */
2966   {0x1DDA,0x1DDA,0x1DDA},  {0x1DDB,0x1DDB,0x1DDB}, /* 1DDA */
2967   {0x1DDC,0x1DDC,0x1DDC},  {0x1DDD,0x1DDD,0x1DDD}, /* 1DDC */
2968   {0x1DDE,0x1DDE,0x1DDE},  {0x1DDF,0x1DDF,0x1DDF}, /* 1DDE */
2969   {0x1DE0,0x1DE0,0x1DE0},  {0x1DE1,0x1DE1,0x1DE1}, /* 1DE0 */
2970   {0x1DE2,0x1DE2,0x1DE2},  {0x1DE3,0x1DE3,0x1DE3}, /* 1DE2 */
2971   {0x1DE4,0x1DE4,0x1DE4},  {0x1DE5,0x1DE5,0x1DE5}, /* 1DE4 */
2972   {0x1DE6,0x1DE6,0x1DE6},  {0x1DE7,0x1DE7,0x1DE7}, /* 1DE6 */
2973   {0x1DE8,0x1DE8,0x1DE8},  {0x1DE9,0x1DE9,0x1DE9}, /* 1DE8 */
2974   {0x1DEA,0x1DEA,0x1DEA},  {0x1DEB,0x1DEB,0x1DEB}, /* 1DEA */
2975   {0x1DEC,0x1DEC,0x1DEC},  {0x1DED,0x1DED,0x1DED}, /* 1DEC */
2976   {0x1DEE,0x1DEE,0x1DEE},  {0x1DEF,0x1DEF,0x1DEF}, /* 1DEE */
2977   {0x1DF0,0x1DF0,0x1DF0},  {0x1DF1,0x1DF1,0x1DF1}, /* 1DF0 */
2978   {0x1DF2,0x1DF2,0x1DF2},  {0x1DF3,0x1DF3,0x1DF3}, /* 1DF2 */
2979   {0x1DF4,0x1DF4,0x1DF4},  {0x1DF5,0x1DF5,0x1DF5}, /* 1DF4 */
2980   {0x1DF6,0x1DF6,0x1DF6},  {0x1DF7,0x1DF7,0x1DF7}, /* 1DF6 */
2981   {0x1DF8,0x1DF8,0x1DF8},  {0x1DF9,0x1DF9,0x1DF9}, /* 1DF8 */
2982   {0x1DFA,0x1DFA,0x1DFA},  {0x1DFB,0x1DFB,0x1DFB}, /* 1DFA */
2983   {0x1DFC,0x1DFC,0x1DFC},  {0x1DFD,0x1DFD,0x1DFD}, /* 1DFC */
2984   {0x1DFE,0x1DFE,0x1DFE},  {0x1DFF,0x1DFF,0x1DFF} /* 1DFE */
2985 };
2986 
2987 static const MY_UNICASE_CHARACTER u520p1E[]={
2988   {0x1E00,0x1E01,0x0041},  {0x1E00,0x1E01,0x0041}, /* 1E00 */
2989   {0x1E02,0x1E03,0x0042},  {0x1E02,0x1E03,0x0042}, /* 1E02 */
2990   {0x1E04,0x1E05,0x0042},  {0x1E04,0x1E05,0x0042}, /* 1E04 */
2991   {0x1E06,0x1E07,0x0042},  {0x1E06,0x1E07,0x0042}, /* 1E06 */
2992   {0x1E08,0x1E09,0x0043},  {0x1E08,0x1E09,0x0043}, /* 1E08 */
2993   {0x1E0A,0x1E0B,0x0044},  {0x1E0A,0x1E0B,0x0044}, /* 1E0A */
2994   {0x1E0C,0x1E0D,0x0044},  {0x1E0C,0x1E0D,0x0044}, /* 1E0C */
2995   {0x1E0E,0x1E0F,0x0044},  {0x1E0E,0x1E0F,0x0044}, /* 1E0E */
2996   {0x1E10,0x1E11,0x0044},  {0x1E10,0x1E11,0x0044}, /* 1E10 */
2997   {0x1E12,0x1E13,0x0044},  {0x1E12,0x1E13,0x0044}, /* 1E12 */
2998   {0x1E14,0x1E15,0x0045},  {0x1E14,0x1E15,0x0045}, /* 1E14 */
2999   {0x1E16,0x1E17,0x0045},  {0x1E16,0x1E17,0x0045}, /* 1E16 */
3000   {0x1E18,0x1E19,0x0045},  {0x1E18,0x1E19,0x0045}, /* 1E18 */
3001   {0x1E1A,0x1E1B,0x0045},  {0x1E1A,0x1E1B,0x0045}, /* 1E1A */
3002   {0x1E1C,0x1E1D,0x0045},  {0x1E1C,0x1E1D,0x0045}, /* 1E1C */
3003   {0x1E1E,0x1E1F,0x0046},  {0x1E1E,0x1E1F,0x0046}, /* 1E1E */
3004   {0x1E20,0x1E21,0x0047},  {0x1E20,0x1E21,0x0047}, /* 1E20 */
3005   {0x1E22,0x1E23,0x0048},  {0x1E22,0x1E23,0x0048}, /* 1E22 */
3006   {0x1E24,0x1E25,0x0048},  {0x1E24,0x1E25,0x0048}, /* 1E24 */
3007   {0x1E26,0x1E27,0x0048},  {0x1E26,0x1E27,0x0048}, /* 1E26 */
3008   {0x1E28,0x1E29,0x0048},  {0x1E28,0x1E29,0x0048}, /* 1E28 */
3009   {0x1E2A,0x1E2B,0x0048},  {0x1E2A,0x1E2B,0x0048}, /* 1E2A */
3010   {0x1E2C,0x1E2D,0x0049},  {0x1E2C,0x1E2D,0x0049}, /* 1E2C */
3011   {0x1E2E,0x1E2F,0x0049},  {0x1E2E,0x1E2F,0x0049}, /* 1E2E */
3012   {0x1E30,0x1E31,0x004B},  {0x1E30,0x1E31,0x004B}, /* 1E30 */
3013   {0x1E32,0x1E33,0x004B},  {0x1E32,0x1E33,0x004B}, /* 1E32 */
3014   {0x1E34,0x1E35,0x004B},  {0x1E34,0x1E35,0x004B}, /* 1E34 */
3015   {0x1E36,0x1E37,0x004C},  {0x1E36,0x1E37,0x004C}, /* 1E36 */
3016   {0x1E38,0x1E39,0x004C},  {0x1E38,0x1E39,0x004C}, /* 1E38 */
3017   {0x1E3A,0x1E3B,0x004C},  {0x1E3A,0x1E3B,0x004C}, /* 1E3A */
3018   {0x1E3C,0x1E3D,0x004C},  {0x1E3C,0x1E3D,0x004C}, /* 1E3C */
3019   {0x1E3E,0x1E3F,0x004D},  {0x1E3E,0x1E3F,0x004D}, /* 1E3E */
3020   {0x1E40,0x1E41,0x004D},  {0x1E40,0x1E41,0x004D}, /* 1E40 */
3021   {0x1E42,0x1E43,0x004D},  {0x1E42,0x1E43,0x004D}, /* 1E42 */
3022   {0x1E44,0x1E45,0x004E},  {0x1E44,0x1E45,0x004E}, /* 1E44 */
3023   {0x1E46,0x1E47,0x004E},  {0x1E46,0x1E47,0x004E}, /* 1E46 */
3024   {0x1E48,0x1E49,0x004E},  {0x1E48,0x1E49,0x004E}, /* 1E48 */
3025   {0x1E4A,0x1E4B,0x004E},  {0x1E4A,0x1E4B,0x004E}, /* 1E4A */
3026   {0x1E4C,0x1E4D,0x004F},  {0x1E4C,0x1E4D,0x004F}, /* 1E4C */
3027   {0x1E4E,0x1E4F,0x004F},  {0x1E4E,0x1E4F,0x004F}, /* 1E4E */
3028   {0x1E50,0x1E51,0x004F},  {0x1E50,0x1E51,0x004F}, /* 1E50 */
3029   {0x1E52,0x1E53,0x004F},  {0x1E52,0x1E53,0x004F}, /* 1E52 */
3030   {0x1E54,0x1E55,0x0050},  {0x1E54,0x1E55,0x0050}, /* 1E54 */
3031   {0x1E56,0x1E57,0x0050},  {0x1E56,0x1E57,0x0050}, /* 1E56 */
3032   {0x1E58,0x1E59,0x0052},  {0x1E58,0x1E59,0x0052}, /* 1E58 */
3033   {0x1E5A,0x1E5B,0x0052},  {0x1E5A,0x1E5B,0x0052}, /* 1E5A */
3034   {0x1E5C,0x1E5D,0x0052},  {0x1E5C,0x1E5D,0x0052}, /* 1E5C */
3035   {0x1E5E,0x1E5F,0x0052},  {0x1E5E,0x1E5F,0x0052}, /* 1E5E */
3036   {0x1E60,0x1E61,0x0053},  {0x1E60,0x1E61,0x0053}, /* 1E60 */
3037   {0x1E62,0x1E63,0x0053},  {0x1E62,0x1E63,0x0053}, /* 1E62 */
3038   {0x1E64,0x1E65,0x0053},  {0x1E64,0x1E65,0x0053}, /* 1E64 */
3039   {0x1E66,0x1E67,0x0053},  {0x1E66,0x1E67,0x0053}, /* 1E66 */
3040   {0x1E68,0x1E69,0x0053},  {0x1E68,0x1E69,0x0053}, /* 1E68 */
3041   {0x1E6A,0x1E6B,0x0054},  {0x1E6A,0x1E6B,0x0054}, /* 1E6A */
3042   {0x1E6C,0x1E6D,0x0054},  {0x1E6C,0x1E6D,0x0054}, /* 1E6C */
3043   {0x1E6E,0x1E6F,0x0054},  {0x1E6E,0x1E6F,0x0054}, /* 1E6E */
3044   {0x1E70,0x1E71,0x0054},  {0x1E70,0x1E71,0x0054}, /* 1E70 */
3045   {0x1E72,0x1E73,0x0055},  {0x1E72,0x1E73,0x0055}, /* 1E72 */
3046   {0x1E74,0x1E75,0x0055},  {0x1E74,0x1E75,0x0055}, /* 1E74 */
3047   {0x1E76,0x1E77,0x0055},  {0x1E76,0x1E77,0x0055}, /* 1E76 */
3048   {0x1E78,0x1E79,0x0055},  {0x1E78,0x1E79,0x0055}, /* 1E78 */
3049   {0x1E7A,0x1E7B,0x0055},  {0x1E7A,0x1E7B,0x0055}, /* 1E7A */
3050   {0x1E7C,0x1E7D,0x0056},  {0x1E7C,0x1E7D,0x0056}, /* 1E7C */
3051   {0x1E7E,0x1E7F,0x0056},  {0x1E7E,0x1E7F,0x0056}, /* 1E7E */
3052   {0x1E80,0x1E81,0x0057},  {0x1E80,0x1E81,0x0057}, /* 1E80 */
3053   {0x1E82,0x1E83,0x0057},  {0x1E82,0x1E83,0x0057}, /* 1E82 */
3054   {0x1E84,0x1E85,0x0057},  {0x1E84,0x1E85,0x0057}, /* 1E84 */
3055   {0x1E86,0x1E87,0x0057},  {0x1E86,0x1E87,0x0057}, /* 1E86 */
3056   {0x1E88,0x1E89,0x0057},  {0x1E88,0x1E89,0x0057}, /* 1E88 */
3057   {0x1E8A,0x1E8B,0x0058},  {0x1E8A,0x1E8B,0x0058}, /* 1E8A */
3058   {0x1E8C,0x1E8D,0x0058},  {0x1E8C,0x1E8D,0x0058}, /* 1E8C */
3059   {0x1E8E,0x1E8F,0x0059},  {0x1E8E,0x1E8F,0x0059}, /* 1E8E */
3060   {0x1E90,0x1E91,0x005A},  {0x1E90,0x1E91,0x005A}, /* 1E90 */
3061   {0x1E92,0x1E93,0x005A},  {0x1E92,0x1E93,0x005A}, /* 1E92 */
3062   {0x1E94,0x1E95,0x005A},  {0x1E94,0x1E95,0x005A}, /* 1E94 */
3063   {0x1E96,0x1E96,0x0048},  {0x1E97,0x1E97,0x0054}, /* 1E96 */
3064   {0x1E98,0x1E98,0x0057},  {0x1E99,0x1E99,0x0059}, /* 1E98 */
3065   {0x1E9A,0x1E9A,0x1E9A},  {0x1E60,0x1E9B,0x0053}, /* 1E9A */
3066   {0x1E9C,0x1E9C,0x1E9C},  {0x1E9D,0x1E9D,0x1E9D}, /* 1E9C */
3067   {0x1E9E,0x00DF,0x1E9E},  {0x1E9F,0x1E9F,0x1E9F}, /* 1E9E */
3068   {0x1EA0,0x1EA1,0x0041},  {0x1EA0,0x1EA1,0x0041}, /* 1EA0 */
3069   {0x1EA2,0x1EA3,0x0041},  {0x1EA2,0x1EA3,0x0041}, /* 1EA2 */
3070   {0x1EA4,0x1EA5,0x0041},  {0x1EA4,0x1EA5,0x0041}, /* 1EA4 */
3071   {0x1EA6,0x1EA7,0x0041},  {0x1EA6,0x1EA7,0x0041}, /* 1EA6 */
3072   {0x1EA8,0x1EA9,0x0041},  {0x1EA8,0x1EA9,0x0041}, /* 1EA8 */
3073   {0x1EAA,0x1EAB,0x0041},  {0x1EAA,0x1EAB,0x0041}, /* 1EAA */
3074   {0x1EAC,0x1EAD,0x0041},  {0x1EAC,0x1EAD,0x0041}, /* 1EAC */
3075   {0x1EAE,0x1EAF,0x0041},  {0x1EAE,0x1EAF,0x0041}, /* 1EAE */
3076   {0x1EB0,0x1EB1,0x0041},  {0x1EB0,0x1EB1,0x0041}, /* 1EB0 */
3077   {0x1EB2,0x1EB3,0x0041},  {0x1EB2,0x1EB3,0x0041}, /* 1EB2 */
3078   {0x1EB4,0x1EB5,0x0041},  {0x1EB4,0x1EB5,0x0041}, /* 1EB4 */
3079   {0x1EB6,0x1EB7,0x0041},  {0x1EB6,0x1EB7,0x0041}, /* 1EB6 */
3080   {0x1EB8,0x1EB9,0x0045},  {0x1EB8,0x1EB9,0x0045}, /* 1EB8 */
3081   {0x1EBA,0x1EBB,0x0045},  {0x1EBA,0x1EBB,0x0045}, /* 1EBA */
3082   {0x1EBC,0x1EBD,0x0045},  {0x1EBC,0x1EBD,0x0045}, /* 1EBC */
3083   {0x1EBE,0x1EBF,0x0045},  {0x1EBE,0x1EBF,0x0045}, /* 1EBE */
3084   {0x1EC0,0x1EC1,0x0045},  {0x1EC0,0x1EC1,0x0045}, /* 1EC0 */
3085   {0x1EC2,0x1EC3,0x0045},  {0x1EC2,0x1EC3,0x0045}, /* 1EC2 */
3086   {0x1EC4,0x1EC5,0x0045},  {0x1EC4,0x1EC5,0x0045}, /* 1EC4 */
3087   {0x1EC6,0x1EC7,0x0045},  {0x1EC6,0x1EC7,0x0045}, /* 1EC6 */
3088   {0x1EC8,0x1EC9,0x0049},  {0x1EC8,0x1EC9,0x0049}, /* 1EC8 */
3089   {0x1ECA,0x1ECB,0x0049},  {0x1ECA,0x1ECB,0x0049}, /* 1ECA */
3090   {0x1ECC,0x1ECD,0x004F},  {0x1ECC,0x1ECD,0x004F}, /* 1ECC */
3091   {0x1ECE,0x1ECF,0x004F},  {0x1ECE,0x1ECF,0x004F}, /* 1ECE */
3092   {0x1ED0,0x1ED1,0x004F},  {0x1ED0,0x1ED1,0x004F}, /* 1ED0 */
3093   {0x1ED2,0x1ED3,0x004F},  {0x1ED2,0x1ED3,0x004F}, /* 1ED2 */
3094   {0x1ED4,0x1ED5,0x004F},  {0x1ED4,0x1ED5,0x004F}, /* 1ED4 */
3095   {0x1ED6,0x1ED7,0x004F},  {0x1ED6,0x1ED7,0x004F}, /* 1ED6 */
3096   {0x1ED8,0x1ED9,0x004F},  {0x1ED8,0x1ED9,0x004F}, /* 1ED8 */
3097   {0x1EDA,0x1EDB,0x004F},  {0x1EDA,0x1EDB,0x004F}, /* 1EDA */
3098   {0x1EDC,0x1EDD,0x004F},  {0x1EDC,0x1EDD,0x004F}, /* 1EDC */
3099   {0x1EDE,0x1EDF,0x004F},  {0x1EDE,0x1EDF,0x004F}, /* 1EDE */
3100   {0x1EE0,0x1EE1,0x004F},  {0x1EE0,0x1EE1,0x004F}, /* 1EE0 */
3101   {0x1EE2,0x1EE3,0x004F},  {0x1EE2,0x1EE3,0x004F}, /* 1EE2 */
3102   {0x1EE4,0x1EE5,0x0055},  {0x1EE4,0x1EE5,0x0055}, /* 1EE4 */
3103   {0x1EE6,0x1EE7,0x0055},  {0x1EE6,0x1EE7,0x0055}, /* 1EE6 */
3104   {0x1EE8,0x1EE9,0x0055},  {0x1EE8,0x1EE9,0x0055}, /* 1EE8 */
3105   {0x1EEA,0x1EEB,0x0055},  {0x1EEA,0x1EEB,0x0055}, /* 1EEA */
3106   {0x1EEC,0x1EED,0x0055},  {0x1EEC,0x1EED,0x0055}, /* 1EEC */
3107   {0x1EEE,0x1EEF,0x0055},  {0x1EEE,0x1EEF,0x0055}, /* 1EEE */
3108   {0x1EF0,0x1EF1,0x0055},  {0x1EF0,0x1EF1,0x0055}, /* 1EF0 */
3109   {0x1EF2,0x1EF3,0x0059},  {0x1EF2,0x1EF3,0x0059}, /* 1EF2 */
3110   {0x1EF4,0x1EF5,0x0059},  {0x1EF4,0x1EF5,0x0059}, /* 1EF4 */
3111   {0x1EF6,0x1EF7,0x0059},  {0x1EF6,0x1EF7,0x0059}, /* 1EF6 */
3112   {0x1EF8,0x1EF9,0x0059},  {0x1EF8,0x1EF9,0x0059}, /* 1EF8 */
3113   {0x1EFA,0x1EFB,0x1EFA},  {0x1EFA,0x1EFB,0x1EFA}, /* 1EFA */
3114   {0x1EFC,0x1EFD,0x1EFC},  {0x1EFC,0x1EFD,0x1EFC}, /* 1EFC */
3115   {0x1EFE,0x1EFF,0x1EFE},  {0x1EFE,0x1EFF,0x1EFE} /* 1EFE */
3116 };
3117 
3118 static const MY_UNICASE_CHARACTER u520p1F[]={
3119   {0x1F08,0x1F00,0x0391},  {0x1F09,0x1F01,0x0391}, /* 1F00 */
3120   {0x1F0A,0x1F02,0x0391},  {0x1F0B,0x1F03,0x0391}, /* 1F02 */
3121   {0x1F0C,0x1F04,0x0391},  {0x1F0D,0x1F05,0x0391}, /* 1F04 */
3122   {0x1F0E,0x1F06,0x0391},  {0x1F0F,0x1F07,0x0391}, /* 1F06 */
3123   {0x1F08,0x1F00,0x0391},  {0x1F09,0x1F01,0x0391}, /* 1F08 */
3124   {0x1F0A,0x1F02,0x0391},  {0x1F0B,0x1F03,0x0391}, /* 1F0A */
3125   {0x1F0C,0x1F04,0x0391},  {0x1F0D,0x1F05,0x0391}, /* 1F0C */
3126   {0x1F0E,0x1F06,0x0391},  {0x1F0F,0x1F07,0x0391}, /* 1F0E */
3127   {0x1F18,0x1F10,0x0395},  {0x1F19,0x1F11,0x0395}, /* 1F10 */
3128   {0x1F1A,0x1F12,0x0395},  {0x1F1B,0x1F13,0x0395}, /* 1F12 */
3129   {0x1F1C,0x1F14,0x0395},  {0x1F1D,0x1F15,0x0395}, /* 1F14 */
3130   {0x1F16,0x1F16,0x1F16},  {0x1F17,0x1F17,0x1F17}, /* 1F16 */
3131   {0x1F18,0x1F10,0x0395},  {0x1F19,0x1F11,0x0395}, /* 1F18 */
3132   {0x1F1A,0x1F12,0x0395},  {0x1F1B,0x1F13,0x0395}, /* 1F1A */
3133   {0x1F1C,0x1F14,0x0395},  {0x1F1D,0x1F15,0x0395}, /* 1F1C */
3134   {0x1F1E,0x1F1E,0x1F1E},  {0x1F1F,0x1F1F,0x1F1F}, /* 1F1E */
3135   {0x1F28,0x1F20,0x0397},  {0x1F29,0x1F21,0x0397}, /* 1F20 */
3136   {0x1F2A,0x1F22,0x0397},  {0x1F2B,0x1F23,0x0397}, /* 1F22 */
3137   {0x1F2C,0x1F24,0x0397},  {0x1F2D,0x1F25,0x0397}, /* 1F24 */
3138   {0x1F2E,0x1F26,0x0397},  {0x1F2F,0x1F27,0x0397}, /* 1F26 */
3139   {0x1F28,0x1F20,0x0397},  {0x1F29,0x1F21,0x0397}, /* 1F28 */
3140   {0x1F2A,0x1F22,0x0397},  {0x1F2B,0x1F23,0x0397}, /* 1F2A */
3141   {0x1F2C,0x1F24,0x0397},  {0x1F2D,0x1F25,0x0397}, /* 1F2C */
3142   {0x1F2E,0x1F26,0x0397},  {0x1F2F,0x1F27,0x0397}, /* 1F2E */
3143   {0x1F38,0x1F30,0x0399},  {0x1F39,0x1F31,0x0399}, /* 1F30 */
3144   {0x1F3A,0x1F32,0x0399},  {0x1F3B,0x1F33,0x0399}, /* 1F32 */
3145   {0x1F3C,0x1F34,0x0399},  {0x1F3D,0x1F35,0x0399}, /* 1F34 */
3146   {0x1F3E,0x1F36,0x0399},  {0x1F3F,0x1F37,0x0399}, /* 1F36 */
3147   {0x1F38,0x1F30,0x0399},  {0x1F39,0x1F31,0x0399}, /* 1F38 */
3148   {0x1F3A,0x1F32,0x0399},  {0x1F3B,0x1F33,0x0399}, /* 1F3A */
3149   {0x1F3C,0x1F34,0x0399},  {0x1F3D,0x1F35,0x0399}, /* 1F3C */
3150   {0x1F3E,0x1F36,0x0399},  {0x1F3F,0x1F37,0x0399}, /* 1F3E */
3151   {0x1F48,0x1F40,0x039F},  {0x1F49,0x1F41,0x039F}, /* 1F40 */
3152   {0x1F4A,0x1F42,0x039F},  {0x1F4B,0x1F43,0x039F}, /* 1F42 */
3153   {0x1F4C,0x1F44,0x039F},  {0x1F4D,0x1F45,0x039F}, /* 1F44 */
3154   {0x1F46,0x1F46,0x1F46},  {0x1F47,0x1F47,0x1F47}, /* 1F46 */
3155   {0x1F48,0x1F40,0x039F},  {0x1F49,0x1F41,0x039F}, /* 1F48 */
3156   {0x1F4A,0x1F42,0x039F},  {0x1F4B,0x1F43,0x039F}, /* 1F4A */
3157   {0x1F4C,0x1F44,0x039F},  {0x1F4D,0x1F45,0x039F}, /* 1F4C */
3158   {0x1F4E,0x1F4E,0x1F4E},  {0x1F4F,0x1F4F,0x1F4F}, /* 1F4E */
3159   {0x1F50,0x1F50,0x03A5},  {0x1F59,0x1F51,0x03A5}, /* 1F50 */
3160   {0x1F52,0x1F52,0x03A5},  {0x1F5B,0x1F53,0x03A5}, /* 1F52 */
3161   {0x1F54,0x1F54,0x03A5},  {0x1F5D,0x1F55,0x03A5}, /* 1F54 */
3162   {0x1F56,0x1F56,0x03A5},  {0x1F5F,0x1F57,0x03A5}, /* 1F56 */
3163   {0x1F58,0x1F58,0x1F58},  {0x1F59,0x1F51,0x03A5}, /* 1F58 */
3164   {0x1F5A,0x1F5A,0x1F5A},  {0x1F5B,0x1F53,0x03A5}, /* 1F5A */
3165   {0x1F5C,0x1F5C,0x1F5C},  {0x1F5D,0x1F55,0x03A5}, /* 1F5C */
3166   {0x1F5E,0x1F5E,0x1F5E},  {0x1F5F,0x1F57,0x03A5}, /* 1F5E */
3167   {0x1F68,0x1F60,0x03A9},  {0x1F69,0x1F61,0x03A9}, /* 1F60 */
3168   {0x1F6A,0x1F62,0x03A9},  {0x1F6B,0x1F63,0x03A9}, /* 1F62 */
3169   {0x1F6C,0x1F64,0x03A9},  {0x1F6D,0x1F65,0x03A9}, /* 1F64 */
3170   {0x1F6E,0x1F66,0x03A9},  {0x1F6F,0x1F67,0x03A9}, /* 1F66 */
3171   {0x1F68,0x1F60,0x03A9},  {0x1F69,0x1F61,0x03A9}, /* 1F68 */
3172   {0x1F6A,0x1F62,0x03A9},  {0x1F6B,0x1F63,0x03A9}, /* 1F6A */
3173   {0x1F6C,0x1F64,0x03A9},  {0x1F6D,0x1F65,0x03A9}, /* 1F6C */
3174   {0x1F6E,0x1F66,0x03A9},  {0x1F6F,0x1F67,0x03A9}, /* 1F6E */
3175   {0x1FBA,0x1F70,0x0391},  {0x1FBB,0x1F71,0x1FBB}, /* 1F70 */
3176   {0x1FC8,0x1F72,0x0395},  {0x1FC9,0x1F73,0x1FC9}, /* 1F72 */
3177   {0x1FCA,0x1F74,0x0397},  {0x1FCB,0x1F75,0x1FCB}, /* 1F74 */
3178   {0x1FDA,0x1F76,0x0399},  {0x1FDB,0x1F77,0x1FDB}, /* 1F76 */
3179   {0x1FF8,0x1F78,0x039F},  {0x1FF9,0x1F79,0x1FF9}, /* 1F78 */
3180   {0x1FEA,0x1F7A,0x03A5},  {0x1FEB,0x1F7B,0x1FEB}, /* 1F7A */
3181   {0x1FFA,0x1F7C,0x03A9},  {0x1FFB,0x1F7D,0x1FFB}, /* 1F7C */
3182   {0x1F7E,0x1F7E,0x1F7E},  {0x1F7F,0x1F7F,0x1F7F}, /* 1F7E */
3183   {0x1F88,0x1F80,0x0391},  {0x1F89,0x1F81,0x0391}, /* 1F80 */
3184   {0x1F8A,0x1F82,0x0391},  {0x1F8B,0x1F83,0x0391}, /* 1F82 */
3185   {0x1F8C,0x1F84,0x0391},  {0x1F8D,0x1F85,0x0391}, /* 1F84 */
3186   {0x1F8E,0x1F86,0x0391},  {0x1F8F,0x1F87,0x0391}, /* 1F86 */
3187   {0x1F88,0x1F80,0x0391},  {0x1F89,0x1F81,0x0391}, /* 1F88 */
3188   {0x1F8A,0x1F82,0x0391},  {0x1F8B,0x1F83,0x0391}, /* 1F8A */
3189   {0x1F8C,0x1F84,0x0391},  {0x1F8D,0x1F85,0x0391}, /* 1F8C */
3190   {0x1F8E,0x1F86,0x0391},  {0x1F8F,0x1F87,0x0391}, /* 1F8E */
3191   {0x1F98,0x1F90,0x0397},  {0x1F99,0x1F91,0x0397}, /* 1F90 */
3192   {0x1F9A,0x1F92,0x0397},  {0x1F9B,0x1F93,0x0397}, /* 1F92 */
3193   {0x1F9C,0x1F94,0x0397},  {0x1F9D,0x1F95,0x0397}, /* 1F94 */
3194   {0x1F9E,0x1F96,0x0397},  {0x1F9F,0x1F97,0x0397}, /* 1F96 */
3195   {0x1F98,0x1F90,0x0397},  {0x1F99,0x1F91,0x0397}, /* 1F98 */
3196   {0x1F9A,0x1F92,0x0397},  {0x1F9B,0x1F93,0x0397}, /* 1F9A */
3197   {0x1F9C,0x1F94,0x0397},  {0x1F9D,0x1F95,0x0397}, /* 1F9C */
3198   {0x1F9E,0x1F96,0x0397},  {0x1F9F,0x1F97,0x0397}, /* 1F9E */
3199   {0x1FA8,0x1FA0,0x03A9},  {0x1FA9,0x1FA1,0x03A9}, /* 1FA0 */
3200   {0x1FAA,0x1FA2,0x03A9},  {0x1FAB,0x1FA3,0x03A9}, /* 1FA2 */
3201   {0x1FAC,0x1FA4,0x03A9},  {0x1FAD,0x1FA5,0x03A9}, /* 1FA4 */
3202   {0x1FAE,0x1FA6,0x03A9},  {0x1FAF,0x1FA7,0x03A9}, /* 1FA6 */
3203   {0x1FA8,0x1FA0,0x03A9},  {0x1FA9,0x1FA1,0x03A9}, /* 1FA8 */
3204   {0x1FAA,0x1FA2,0x03A9},  {0x1FAB,0x1FA3,0x03A9}, /* 1FAA */
3205   {0x1FAC,0x1FA4,0x03A9},  {0x1FAD,0x1FA5,0x03A9}, /* 1FAC */
3206   {0x1FAE,0x1FA6,0x03A9},  {0x1FAF,0x1FA7,0x03A9}, /* 1FAE */
3207   {0x1FB8,0x1FB0,0x0391},  {0x1FB9,0x1FB1,0x0391}, /* 1FB0 */
3208   {0x1FB2,0x1FB2,0x0391},  {0x1FBC,0x1FB3,0x0391}, /* 1FB2 */
3209   {0x1FB4,0x1FB4,0x0391},  {0x1FB5,0x1FB5,0x1FB5}, /* 1FB4 */
3210   {0x1FB6,0x1FB6,0x0391},  {0x1FB7,0x1FB7,0x0391}, /* 1FB6 */
3211   {0x1FB8,0x1FB0,0x0391},  {0x1FB9,0x1FB1,0x0391}, /* 1FB8 */
3212   {0x1FBA,0x1F70,0x0391},  {0x1FBB,0x1F71,0x1FBB}, /* 1FBA */
3213   {0x1FBC,0x1FB3,0x0391},  {0x1FBD,0x1FBD,0x1FBD}, /* 1FBC */
3214   {0x0399,0x1FBE,0x0399},  {0x1FBF,0x1FBF,0x1FBF}, /* 1FBE */
3215   {0x1FC0,0x1FC0,0x1FC0},  {0x1FC1,0x1FC1,0x1FC1}, /* 1FC0 */
3216   {0x1FC2,0x1FC2,0x0397},  {0x1FCC,0x1FC3,0x0397}, /* 1FC2 */
3217   {0x1FC4,0x1FC4,0x0397},  {0x1FC5,0x1FC5,0x1FC5}, /* 1FC4 */
3218   {0x1FC6,0x1FC6,0x0397},  {0x1FC7,0x1FC7,0x0397}, /* 1FC6 */
3219   {0x1FC8,0x1F72,0x0395},  {0x1FC9,0x1F73,0x1FC9}, /* 1FC8 */
3220   {0x1FCA,0x1F74,0x0397},  {0x1FCB,0x1F75,0x1FCB}, /* 1FCA */
3221   {0x1FCC,0x1FC3,0x0397},  {0x1FCD,0x1FCD,0x1FCD}, /* 1FCC */
3222   {0x1FCE,0x1FCE,0x1FCE},  {0x1FCF,0x1FCF,0x1FCF}, /* 1FCE */
3223   {0x1FD8,0x1FD0,0x0399},  {0x1FD9,0x1FD1,0x0399}, /* 1FD0 */
3224   {0x1FD2,0x1FD2,0x0399},  {0x1FD3,0x1FD3,0x1FD3}, /* 1FD2 */
3225   {0x1FD4,0x1FD4,0x1FD4},  {0x1FD5,0x1FD5,0x1FD5}, /* 1FD4 */
3226   {0x1FD6,0x1FD6,0x0399},  {0x1FD7,0x1FD7,0x0399}, /* 1FD6 */
3227   {0x1FD8,0x1FD0,0x0399},  {0x1FD9,0x1FD1,0x0399}, /* 1FD8 */
3228   {0x1FDA,0x1F76,0x0399},  {0x1FDB,0x1F77,0x1FDB}, /* 1FDA */
3229   {0x1FDC,0x1FDC,0x1FDC},  {0x1FDD,0x1FDD,0x1FDD}, /* 1FDC */
3230   {0x1FDE,0x1FDE,0x1FDE},  {0x1FDF,0x1FDF,0x1FDF}, /* 1FDE */
3231   {0x1FE8,0x1FE0,0x03A5},  {0x1FE9,0x1FE1,0x03A5}, /* 1FE0 */
3232   {0x1FE2,0x1FE2,0x03A5},  {0x1FE3,0x1FE3,0x1FE3}, /* 1FE2 */
3233   {0x1FE4,0x1FE4,0x03A1},  {0x1FEC,0x1FE5,0x03A1}, /* 1FE4 */
3234   {0x1FE6,0x1FE6,0x03A5},  {0x1FE7,0x1FE7,0x03A5}, /* 1FE6 */
3235   {0x1FE8,0x1FE0,0x03A5},  {0x1FE9,0x1FE1,0x03A5}, /* 1FE8 */
3236   {0x1FEA,0x1F7A,0x03A5},  {0x1FEB,0x1F7B,0x1FEB}, /* 1FEA */
3237   {0x1FEC,0x1FE5,0x03A1},  {0x1FED,0x1FED,0x1FED}, /* 1FEC */
3238   {0x1FEE,0x1FEE,0x1FEE},  {0x1FEF,0x1FEF,0x1FEF}, /* 1FEE */
3239   {0x1FF0,0x1FF0,0x1FF0},  {0x1FF1,0x1FF1,0x1FF1}, /* 1FF0 */
3240   {0x1FF2,0x1FF2,0x03A9},  {0x1FFC,0x1FF3,0x03A9}, /* 1FF2 */
3241   {0x1FF4,0x1FF4,0x03A9},  {0x1FF5,0x1FF5,0x1FF5}, /* 1FF4 */
3242   {0x1FF6,0x1FF6,0x03A9},  {0x1FF7,0x1FF7,0x03A9}, /* 1FF6 */
3243   {0x1FF8,0x1F78,0x039F},  {0x1FF9,0x1F79,0x1FF9}, /* 1FF8 */
3244   {0x1FFA,0x1F7C,0x03A9},  {0x1FFB,0x1F7D,0x1FFB}, /* 1FFA */
3245   {0x1FFC,0x1FF3,0x03A9},  {0x1FFD,0x1FFD,0x1FFD}, /* 1FFC */
3246   {0x1FFE,0x1FFE,0x1FFE},  {0x1FFF,0x1FFF,0x1FFF} /* 1FFE */
3247 };
3248 
3249 static const MY_UNICASE_CHARACTER u520p21[]={
3250   {0x2100,0x2100,0x2100},  {0x2101,0x2101,0x2101}, /* 2100 */
3251   {0x2102,0x2102,0x2102},  {0x2103,0x2103,0x2103}, /* 2102 */
3252   {0x2104,0x2104,0x2104},  {0x2105,0x2105,0x2105}, /* 2104 */
3253   {0x2106,0x2106,0x2106},  {0x2107,0x2107,0x2107}, /* 2106 */
3254   {0x2108,0x2108,0x2108},  {0x2109,0x2109,0x2109}, /* 2108 */
3255   {0x210A,0x210A,0x210A},  {0x210B,0x210B,0x210B}, /* 210A */
3256   {0x210C,0x210C,0x210C},  {0x210D,0x210D,0x210D}, /* 210C */
3257   {0x210E,0x210E,0x210E},  {0x210F,0x210F,0x210F}, /* 210E */
3258   {0x2110,0x2110,0x2110},  {0x2111,0x2111,0x2111}, /* 2110 */
3259   {0x2112,0x2112,0x2112},  {0x2113,0x2113,0x2113}, /* 2112 */
3260   {0x2114,0x2114,0x2114},  {0x2115,0x2115,0x2115}, /* 2114 */
3261   {0x2116,0x2116,0x2116},  {0x2117,0x2117,0x2117}, /* 2116 */
3262   {0x2118,0x2118,0x2118},  {0x2119,0x2119,0x2119}, /* 2118 */
3263   {0x211A,0x211A,0x211A},  {0x211B,0x211B,0x211B}, /* 211A */
3264   {0x211C,0x211C,0x211C},  {0x211D,0x211D,0x211D}, /* 211C */
3265   {0x211E,0x211E,0x211E},  {0x211F,0x211F,0x211F}, /* 211E */
3266   {0x2120,0x2120,0x2120},  {0x2121,0x2121,0x2121}, /* 2120 */
3267   {0x2122,0x2122,0x2122},  {0x2123,0x2123,0x2123}, /* 2122 */
3268   {0x2124,0x2124,0x2124},  {0x2125,0x2125,0x2125}, /* 2124 */
3269   {0x2126,0x03C9,0x2126},  {0x2127,0x2127,0x2127}, /* 2126 */
3270   {0x2128,0x2128,0x2128},  {0x2129,0x2129,0x2129}, /* 2128 */
3271   {0x212A,0x006B,0x212A},  {0x212B,0x00E5,0x212B}, /* 212A */
3272   {0x212C,0x212C,0x212C},  {0x212D,0x212D,0x212D}, /* 212C */
3273   {0x212E,0x212E,0x212E},  {0x212F,0x212F,0x212F}, /* 212E */
3274   {0x2130,0x2130,0x2130},  {0x2131,0x2131,0x2131}, /* 2130 */
3275   {0x2132,0x214E,0x2132},  {0x2133,0x2133,0x2133}, /* 2132 */
3276   {0x2134,0x2134,0x2134},  {0x2135,0x2135,0x2135}, /* 2134 */
3277   {0x2136,0x2136,0x2136},  {0x2137,0x2137,0x2137}, /* 2136 */
3278   {0x2138,0x2138,0x2138},  {0x2139,0x2139,0x2139}, /* 2138 */
3279   {0x213A,0x213A,0x213A},  {0x213B,0x213B,0x213B}, /* 213A */
3280   {0x213C,0x213C,0x213C},  {0x213D,0x213D,0x213D}, /* 213C */
3281   {0x213E,0x213E,0x213E},  {0x213F,0x213F,0x213F}, /* 213E */
3282   {0x2140,0x2140,0x2140},  {0x2141,0x2141,0x2141}, /* 2140 */
3283   {0x2142,0x2142,0x2142},  {0x2143,0x2143,0x2143}, /* 2142 */
3284   {0x2144,0x2144,0x2144},  {0x2145,0x2145,0x2145}, /* 2144 */
3285   {0x2146,0x2146,0x2146},  {0x2147,0x2147,0x2147}, /* 2146 */
3286   {0x2148,0x2148,0x2148},  {0x2149,0x2149,0x2149}, /* 2148 */
3287   {0x214A,0x214A,0x214A},  {0x214B,0x214B,0x214B}, /* 214A */
3288   {0x214C,0x214C,0x214C},  {0x214D,0x214D,0x214D}, /* 214C */
3289   {0x2132,0x214E,0x2132},  {0x214F,0x214F,0x214F}, /* 214E */
3290   {0x2150,0x2150,0x2150},  {0x2151,0x2151,0x2151}, /* 2150 */
3291   {0x2152,0x2152,0x2152},  {0x2153,0x2153,0x2153}, /* 2152 */
3292   {0x2154,0x2154,0x2154},  {0x2155,0x2155,0x2155}, /* 2154 */
3293   {0x2156,0x2156,0x2156},  {0x2157,0x2157,0x2157}, /* 2156 */
3294   {0x2158,0x2158,0x2158},  {0x2159,0x2159,0x2159}, /* 2158 */
3295   {0x215A,0x215A,0x215A},  {0x215B,0x215B,0x215B}, /* 215A */
3296   {0x215C,0x215C,0x215C},  {0x215D,0x215D,0x215D}, /* 215C */
3297   {0x215E,0x215E,0x215E},  {0x215F,0x215F,0x215F}, /* 215E */
3298   {0x2160,0x2170,0x2160},  {0x2161,0x2171,0x2161}, /* 2160 */
3299   {0x2162,0x2172,0x2162},  {0x2163,0x2173,0x2163}, /* 2162 */
3300   {0x2164,0x2174,0x2164},  {0x2165,0x2175,0x2165}, /* 2164 */
3301   {0x2166,0x2176,0x2166},  {0x2167,0x2177,0x2167}, /* 2166 */
3302   {0x2168,0x2178,0x2168},  {0x2169,0x2179,0x2169}, /* 2168 */
3303   {0x216A,0x217A,0x216A},  {0x216B,0x217B,0x216B}, /* 216A */
3304   {0x216C,0x217C,0x216C},  {0x216D,0x217D,0x216D}, /* 216C */
3305   {0x216E,0x217E,0x216E},  {0x216F,0x217F,0x216F}, /* 216E */
3306   {0x2160,0x2170,0x2160},  {0x2161,0x2171,0x2161}, /* 2170 */
3307   {0x2162,0x2172,0x2162},  {0x2163,0x2173,0x2163}, /* 2172 */
3308   {0x2164,0x2174,0x2164},  {0x2165,0x2175,0x2165}, /* 2174 */
3309   {0x2166,0x2176,0x2166},  {0x2167,0x2177,0x2167}, /* 2176 */
3310   {0x2168,0x2178,0x2168},  {0x2169,0x2179,0x2169}, /* 2178 */
3311   {0x216A,0x217A,0x216A},  {0x216B,0x217B,0x216B}, /* 217A */
3312   {0x216C,0x217C,0x216C},  {0x216D,0x217D,0x216D}, /* 217C */
3313   {0x216E,0x217E,0x216E},  {0x216F,0x217F,0x216F}, /* 217E */
3314   {0x2180,0x2180,0x2180},  {0x2181,0x2181,0x2181}, /* 2180 */
3315   {0x2182,0x2182,0x2182},  {0x2183,0x2184,0x2183}, /* 2182 */
3316   {0x2183,0x2184,0x2183},  {0x2185,0x2185,0x2185}, /* 2184 */
3317   {0x2186,0x2186,0x2186},  {0x2187,0x2187,0x2187}, /* 2186 */
3318   {0x2188,0x2188,0x2188},  {0x2189,0x2189,0x2189}, /* 2188 */
3319   {0x218A,0x218A,0x218A},  {0x218B,0x218B,0x218B}, /* 218A */
3320   {0x218C,0x218C,0x218C},  {0x218D,0x218D,0x218D}, /* 218C */
3321   {0x218E,0x218E,0x218E},  {0x218F,0x218F,0x218F}, /* 218E */
3322   {0x2190,0x2190,0x2190},  {0x2191,0x2191,0x2191}, /* 2190 */
3323   {0x2192,0x2192,0x2192},  {0x2193,0x2193,0x2193}, /* 2192 */
3324   {0x2194,0x2194,0x2194},  {0x2195,0x2195,0x2195}, /* 2194 */
3325   {0x2196,0x2196,0x2196},  {0x2197,0x2197,0x2197}, /* 2196 */
3326   {0x2198,0x2198,0x2198},  {0x2199,0x2199,0x2199}, /* 2198 */
3327   {0x219A,0x219A,0x219A},  {0x219B,0x219B,0x219B}, /* 219A */
3328   {0x219C,0x219C,0x219C},  {0x219D,0x219D,0x219D}, /* 219C */
3329   {0x219E,0x219E,0x219E},  {0x219F,0x219F,0x219F}, /* 219E */
3330   {0x21A0,0x21A0,0x21A0},  {0x21A1,0x21A1,0x21A1}, /* 21A0 */
3331   {0x21A2,0x21A2,0x21A2},  {0x21A3,0x21A3,0x21A3}, /* 21A2 */
3332   {0x21A4,0x21A4,0x21A4},  {0x21A5,0x21A5,0x21A5}, /* 21A4 */
3333   {0x21A6,0x21A6,0x21A6},  {0x21A7,0x21A7,0x21A7}, /* 21A6 */
3334   {0x21A8,0x21A8,0x21A8},  {0x21A9,0x21A9,0x21A9}, /* 21A8 */
3335   {0x21AA,0x21AA,0x21AA},  {0x21AB,0x21AB,0x21AB}, /* 21AA */
3336   {0x21AC,0x21AC,0x21AC},  {0x21AD,0x21AD,0x21AD}, /* 21AC */
3337   {0x21AE,0x21AE,0x21AE},  {0x21AF,0x21AF,0x21AF}, /* 21AE */
3338   {0x21B0,0x21B0,0x21B0},  {0x21B1,0x21B1,0x21B1}, /* 21B0 */
3339   {0x21B2,0x21B2,0x21B2},  {0x21B3,0x21B3,0x21B3}, /* 21B2 */
3340   {0x21B4,0x21B4,0x21B4},  {0x21B5,0x21B5,0x21B5}, /* 21B4 */
3341   {0x21B6,0x21B6,0x21B6},  {0x21B7,0x21B7,0x21B7}, /* 21B6 */
3342   {0x21B8,0x21B8,0x21B8},  {0x21B9,0x21B9,0x21B9}, /* 21B8 */
3343   {0x21BA,0x21BA,0x21BA},  {0x21BB,0x21BB,0x21BB}, /* 21BA */
3344   {0x21BC,0x21BC,0x21BC},  {0x21BD,0x21BD,0x21BD}, /* 21BC */
3345   {0x21BE,0x21BE,0x21BE},  {0x21BF,0x21BF,0x21BF}, /* 21BE */
3346   {0x21C0,0x21C0,0x21C0},  {0x21C1,0x21C1,0x21C1}, /* 21C0 */
3347   {0x21C2,0x21C2,0x21C2},  {0x21C3,0x21C3,0x21C3}, /* 21C2 */
3348   {0x21C4,0x21C4,0x21C4},  {0x21C5,0x21C5,0x21C5}, /* 21C4 */
3349   {0x21C6,0x21C6,0x21C6},  {0x21C7,0x21C7,0x21C7}, /* 21C6 */
3350   {0x21C8,0x21C8,0x21C8},  {0x21C9,0x21C9,0x21C9}, /* 21C8 */
3351   {0x21CA,0x21CA,0x21CA},  {0x21CB,0x21CB,0x21CB}, /* 21CA */
3352   {0x21CC,0x21CC,0x21CC},  {0x21CD,0x21CD,0x21CD}, /* 21CC */
3353   {0x21CE,0x21CE,0x21CE},  {0x21CF,0x21CF,0x21CF}, /* 21CE */
3354   {0x21D0,0x21D0,0x21D0},  {0x21D1,0x21D1,0x21D1}, /* 21D0 */
3355   {0x21D2,0x21D2,0x21D2},  {0x21D3,0x21D3,0x21D3}, /* 21D2 */
3356   {0x21D4,0x21D4,0x21D4},  {0x21D5,0x21D5,0x21D5}, /* 21D4 */
3357   {0x21D6,0x21D6,0x21D6},  {0x21D7,0x21D7,0x21D7}, /* 21D6 */
3358   {0x21D8,0x21D8,0x21D8},  {0x21D9,0x21D9,0x21D9}, /* 21D8 */
3359   {0x21DA,0x21DA,0x21DA},  {0x21DB,0x21DB,0x21DB}, /* 21DA */
3360   {0x21DC,0x21DC,0x21DC},  {0x21DD,0x21DD,0x21DD}, /* 21DC */
3361   {0x21DE,0x21DE,0x21DE},  {0x21DF,0x21DF,0x21DF}, /* 21DE */
3362   {0x21E0,0x21E0,0x21E0},  {0x21E1,0x21E1,0x21E1}, /* 21E0 */
3363   {0x21E2,0x21E2,0x21E2},  {0x21E3,0x21E3,0x21E3}, /* 21E2 */
3364   {0x21E4,0x21E4,0x21E4},  {0x21E5,0x21E5,0x21E5}, /* 21E4 */
3365   {0x21E6,0x21E6,0x21E6},  {0x21E7,0x21E7,0x21E7}, /* 21E6 */
3366   {0x21E8,0x21E8,0x21E8},  {0x21E9,0x21E9,0x21E9}, /* 21E8 */
3367   {0x21EA,0x21EA,0x21EA},  {0x21EB,0x21EB,0x21EB}, /* 21EA */
3368   {0x21EC,0x21EC,0x21EC},  {0x21ED,0x21ED,0x21ED}, /* 21EC */
3369   {0x21EE,0x21EE,0x21EE},  {0x21EF,0x21EF,0x21EF}, /* 21EE */
3370   {0x21F0,0x21F0,0x21F0},  {0x21F1,0x21F1,0x21F1}, /* 21F0 */
3371   {0x21F2,0x21F2,0x21F2},  {0x21F3,0x21F3,0x21F3}, /* 21F2 */
3372   {0x21F4,0x21F4,0x21F4},  {0x21F5,0x21F5,0x21F5}, /* 21F4 */
3373   {0x21F6,0x21F6,0x21F6},  {0x21F7,0x21F7,0x21F7}, /* 21F6 */
3374   {0x21F8,0x21F8,0x21F8},  {0x21F9,0x21F9,0x21F9}, /* 21F8 */
3375   {0x21FA,0x21FA,0x21FA},  {0x21FB,0x21FB,0x21FB}, /* 21FA */
3376   {0x21FC,0x21FC,0x21FC},  {0x21FD,0x21FD,0x21FD}, /* 21FC */
3377   {0x21FE,0x21FE,0x21FE},  {0x21FF,0x21FF,0x21FF} /* 21FE */
3378 };
3379 
3380 static const MY_UNICASE_CHARACTER u520p24[]={
3381   {0x2400,0x2400,0x2400},  {0x2401,0x2401,0x2401}, /* 2400 */
3382   {0x2402,0x2402,0x2402},  {0x2403,0x2403,0x2403}, /* 2402 */
3383   {0x2404,0x2404,0x2404},  {0x2405,0x2405,0x2405}, /* 2404 */
3384   {0x2406,0x2406,0x2406},  {0x2407,0x2407,0x2407}, /* 2406 */
3385   {0x2408,0x2408,0x2408},  {0x2409,0x2409,0x2409}, /* 2408 */
3386   {0x240A,0x240A,0x240A},  {0x240B,0x240B,0x240B}, /* 240A */
3387   {0x240C,0x240C,0x240C},  {0x240D,0x240D,0x240D}, /* 240C */
3388   {0x240E,0x240E,0x240E},  {0x240F,0x240F,0x240F}, /* 240E */
3389   {0x2410,0x2410,0x2410},  {0x2411,0x2411,0x2411}, /* 2410 */
3390   {0x2412,0x2412,0x2412},  {0x2413,0x2413,0x2413}, /* 2412 */
3391   {0x2414,0x2414,0x2414},  {0x2415,0x2415,0x2415}, /* 2414 */
3392   {0x2416,0x2416,0x2416},  {0x2417,0x2417,0x2417}, /* 2416 */
3393   {0x2418,0x2418,0x2418},  {0x2419,0x2419,0x2419}, /* 2418 */
3394   {0x241A,0x241A,0x241A},  {0x241B,0x241B,0x241B}, /* 241A */
3395   {0x241C,0x241C,0x241C},  {0x241D,0x241D,0x241D}, /* 241C */
3396   {0x241E,0x241E,0x241E},  {0x241F,0x241F,0x241F}, /* 241E */
3397   {0x2420,0x2420,0x2420},  {0x2421,0x2421,0x2421}, /* 2420 */
3398   {0x2422,0x2422,0x2422},  {0x2423,0x2423,0x2423}, /* 2422 */
3399   {0x2424,0x2424,0x2424},  {0x2425,0x2425,0x2425}, /* 2424 */
3400   {0x2426,0x2426,0x2426},  {0x2427,0x2427,0x2427}, /* 2426 */
3401   {0x2428,0x2428,0x2428},  {0x2429,0x2429,0x2429}, /* 2428 */
3402   {0x242A,0x242A,0x242A},  {0x242B,0x242B,0x242B}, /* 242A */
3403   {0x242C,0x242C,0x242C},  {0x242D,0x242D,0x242D}, /* 242C */
3404   {0x242E,0x242E,0x242E},  {0x242F,0x242F,0x242F}, /* 242E */
3405   {0x2430,0x2430,0x2430},  {0x2431,0x2431,0x2431}, /* 2430 */
3406   {0x2432,0x2432,0x2432},  {0x2433,0x2433,0x2433}, /* 2432 */
3407   {0x2434,0x2434,0x2434},  {0x2435,0x2435,0x2435}, /* 2434 */
3408   {0x2436,0x2436,0x2436},  {0x2437,0x2437,0x2437}, /* 2436 */
3409   {0x2438,0x2438,0x2438},  {0x2439,0x2439,0x2439}, /* 2438 */
3410   {0x243A,0x243A,0x243A},  {0x243B,0x243B,0x243B}, /* 243A */
3411   {0x243C,0x243C,0x243C},  {0x243D,0x243D,0x243D}, /* 243C */
3412   {0x243E,0x243E,0x243E},  {0x243F,0x243F,0x243F}, /* 243E */
3413   {0x2440,0x2440,0x2440},  {0x2441,0x2441,0x2441}, /* 2440 */
3414   {0x2442,0x2442,0x2442},  {0x2443,0x2443,0x2443}, /* 2442 */
3415   {0x2444,0x2444,0x2444},  {0x2445,0x2445,0x2445}, /* 2444 */
3416   {0x2446,0x2446,0x2446},  {0x2447,0x2447,0x2447}, /* 2446 */
3417   {0x2448,0x2448,0x2448},  {0x2449,0x2449,0x2449}, /* 2448 */
3418   {0x244A,0x244A,0x244A},  {0x244B,0x244B,0x244B}, /* 244A */
3419   {0x244C,0x244C,0x244C},  {0x244D,0x244D,0x244D}, /* 244C */
3420   {0x244E,0x244E,0x244E},  {0x244F,0x244F,0x244F}, /* 244E */
3421   {0x2450,0x2450,0x2450},  {0x2451,0x2451,0x2451}, /* 2450 */
3422   {0x2452,0x2452,0x2452},  {0x2453,0x2453,0x2453}, /* 2452 */
3423   {0x2454,0x2454,0x2454},  {0x2455,0x2455,0x2455}, /* 2454 */
3424   {0x2456,0x2456,0x2456},  {0x2457,0x2457,0x2457}, /* 2456 */
3425   {0x2458,0x2458,0x2458},  {0x2459,0x2459,0x2459}, /* 2458 */
3426   {0x245A,0x245A,0x245A},  {0x245B,0x245B,0x245B}, /* 245A */
3427   {0x245C,0x245C,0x245C},  {0x245D,0x245D,0x245D}, /* 245C */
3428   {0x245E,0x245E,0x245E},  {0x245F,0x245F,0x245F}, /* 245E */
3429   {0x2460,0x2460,0x2460},  {0x2461,0x2461,0x2461}, /* 2460 */
3430   {0x2462,0x2462,0x2462},  {0x2463,0x2463,0x2463}, /* 2462 */
3431   {0x2464,0x2464,0x2464},  {0x2465,0x2465,0x2465}, /* 2464 */
3432   {0x2466,0x2466,0x2466},  {0x2467,0x2467,0x2467}, /* 2466 */
3433   {0x2468,0x2468,0x2468},  {0x2469,0x2469,0x2469}, /* 2468 */
3434   {0x246A,0x246A,0x246A},  {0x246B,0x246B,0x246B}, /* 246A */
3435   {0x246C,0x246C,0x246C},  {0x246D,0x246D,0x246D}, /* 246C */
3436   {0x246E,0x246E,0x246E},  {0x246F,0x246F,0x246F}, /* 246E */
3437   {0x2470,0x2470,0x2470},  {0x2471,0x2471,0x2471}, /* 2470 */
3438   {0x2472,0x2472,0x2472},  {0x2473,0x2473,0x2473}, /* 2472 */
3439   {0x2474,0x2474,0x2474},  {0x2475,0x2475,0x2475}, /* 2474 */
3440   {0x2476,0x2476,0x2476},  {0x2477,0x2477,0x2477}, /* 2476 */
3441   {0x2478,0x2478,0x2478},  {0x2479,0x2479,0x2479}, /* 2478 */
3442   {0x247A,0x247A,0x247A},  {0x247B,0x247B,0x247B}, /* 247A */
3443   {0x247C,0x247C,0x247C},  {0x247D,0x247D,0x247D}, /* 247C */
3444   {0x247E,0x247E,0x247E},  {0x247F,0x247F,0x247F}, /* 247E */
3445   {0x2480,0x2480,0x2480},  {0x2481,0x2481,0x2481}, /* 2480 */
3446   {0x2482,0x2482,0x2482},  {0x2483,0x2483,0x2483}, /* 2482 */
3447   {0x2484,0x2484,0x2484},  {0x2485,0x2485,0x2485}, /* 2484 */
3448   {0x2486,0x2486,0x2486},  {0x2487,0x2487,0x2487}, /* 2486 */
3449   {0x2488,0x2488,0x2488},  {0x2489,0x2489,0x2489}, /* 2488 */
3450   {0x248A,0x248A,0x248A},  {0x248B,0x248B,0x248B}, /* 248A */
3451   {0x248C,0x248C,0x248C},  {0x248D,0x248D,0x248D}, /* 248C */
3452   {0x248E,0x248E,0x248E},  {0x248F,0x248F,0x248F}, /* 248E */
3453   {0x2490,0x2490,0x2490},  {0x2491,0x2491,0x2491}, /* 2490 */
3454   {0x2492,0x2492,0x2492},  {0x2493,0x2493,0x2493}, /* 2492 */
3455   {0x2494,0x2494,0x2494},  {0x2495,0x2495,0x2495}, /* 2494 */
3456   {0x2496,0x2496,0x2496},  {0x2497,0x2497,0x2497}, /* 2496 */
3457   {0x2498,0x2498,0x2498},  {0x2499,0x2499,0x2499}, /* 2498 */
3458   {0x249A,0x249A,0x249A},  {0x249B,0x249B,0x249B}, /* 249A */
3459   {0x249C,0x249C,0x249C},  {0x249D,0x249D,0x249D}, /* 249C */
3460   {0x249E,0x249E,0x249E},  {0x249F,0x249F,0x249F}, /* 249E */
3461   {0x24A0,0x24A0,0x24A0},  {0x24A1,0x24A1,0x24A1}, /* 24A0 */
3462   {0x24A2,0x24A2,0x24A2},  {0x24A3,0x24A3,0x24A3}, /* 24A2 */
3463   {0x24A4,0x24A4,0x24A4},  {0x24A5,0x24A5,0x24A5}, /* 24A4 */
3464   {0x24A6,0x24A6,0x24A6},  {0x24A7,0x24A7,0x24A7}, /* 24A6 */
3465   {0x24A8,0x24A8,0x24A8},  {0x24A9,0x24A9,0x24A9}, /* 24A8 */
3466   {0x24AA,0x24AA,0x24AA},  {0x24AB,0x24AB,0x24AB}, /* 24AA */
3467   {0x24AC,0x24AC,0x24AC},  {0x24AD,0x24AD,0x24AD}, /* 24AC */
3468   {0x24AE,0x24AE,0x24AE},  {0x24AF,0x24AF,0x24AF}, /* 24AE */
3469   {0x24B0,0x24B0,0x24B0},  {0x24B1,0x24B1,0x24B1}, /* 24B0 */
3470   {0x24B2,0x24B2,0x24B2},  {0x24B3,0x24B3,0x24B3}, /* 24B2 */
3471   {0x24B4,0x24B4,0x24B4},  {0x24B5,0x24B5,0x24B5}, /* 24B4 */
3472   {0x24B6,0x24D0,0x24B6},  {0x24B7,0x24D1,0x24B7}, /* 24B6 */
3473   {0x24B8,0x24D2,0x24B8},  {0x24B9,0x24D3,0x24B9}, /* 24B8 */
3474   {0x24BA,0x24D4,0x24BA},  {0x24BB,0x24D5,0x24BB}, /* 24BA */
3475   {0x24BC,0x24D6,0x24BC},  {0x24BD,0x24D7,0x24BD}, /* 24BC */
3476   {0x24BE,0x24D8,0x24BE},  {0x24BF,0x24D9,0x24BF}, /* 24BE */
3477   {0x24C0,0x24DA,0x24C0},  {0x24C1,0x24DB,0x24C1}, /* 24C0 */
3478   {0x24C2,0x24DC,0x24C2},  {0x24C3,0x24DD,0x24C3}, /* 24C2 */
3479   {0x24C4,0x24DE,0x24C4},  {0x24C5,0x24DF,0x24C5}, /* 24C4 */
3480   {0x24C6,0x24E0,0x24C6},  {0x24C7,0x24E1,0x24C7}, /* 24C6 */
3481   {0x24C8,0x24E2,0x24C8},  {0x24C9,0x24E3,0x24C9}, /* 24C8 */
3482   {0x24CA,0x24E4,0x24CA},  {0x24CB,0x24E5,0x24CB}, /* 24CA */
3483   {0x24CC,0x24E6,0x24CC},  {0x24CD,0x24E7,0x24CD}, /* 24CC */
3484   {0x24CE,0x24E8,0x24CE},  {0x24CF,0x24E9,0x24CF}, /* 24CE */
3485   {0x24B6,0x24D0,0x24B6},  {0x24B7,0x24D1,0x24B7}, /* 24D0 */
3486   {0x24B8,0x24D2,0x24B8},  {0x24B9,0x24D3,0x24B9}, /* 24D2 */
3487   {0x24BA,0x24D4,0x24BA},  {0x24BB,0x24D5,0x24BB}, /* 24D4 */
3488   {0x24BC,0x24D6,0x24BC},  {0x24BD,0x24D7,0x24BD}, /* 24D6 */
3489   {0x24BE,0x24D8,0x24BE},  {0x24BF,0x24D9,0x24BF}, /* 24D8 */
3490   {0x24C0,0x24DA,0x24C0},  {0x24C1,0x24DB,0x24C1}, /* 24DA */
3491   {0x24C2,0x24DC,0x24C2},  {0x24C3,0x24DD,0x24C3}, /* 24DC */
3492   {0x24C4,0x24DE,0x24C4},  {0x24C5,0x24DF,0x24C5}, /* 24DE */
3493   {0x24C6,0x24E0,0x24C6},  {0x24C7,0x24E1,0x24C7}, /* 24E0 */
3494   {0x24C8,0x24E2,0x24C8},  {0x24C9,0x24E3,0x24C9}, /* 24E2 */
3495   {0x24CA,0x24E4,0x24CA},  {0x24CB,0x24E5,0x24CB}, /* 24E4 */
3496   {0x24CC,0x24E6,0x24CC},  {0x24CD,0x24E7,0x24CD}, /* 24E6 */
3497   {0x24CE,0x24E8,0x24CE},  {0x24CF,0x24E9,0x24CF}, /* 24E8 */
3498   {0x24EA,0x24EA,0x24EA},  {0x24EB,0x24EB,0x24EB}, /* 24EA */
3499   {0x24EC,0x24EC,0x24EC},  {0x24ED,0x24ED,0x24ED}, /* 24EC */
3500   {0x24EE,0x24EE,0x24EE},  {0x24EF,0x24EF,0x24EF}, /* 24EE */
3501   {0x24F0,0x24F0,0x24F0},  {0x24F1,0x24F1,0x24F1}, /* 24F0 */
3502   {0x24F2,0x24F2,0x24F2},  {0x24F3,0x24F3,0x24F3}, /* 24F2 */
3503   {0x24F4,0x24F4,0x24F4},  {0x24F5,0x24F5,0x24F5}, /* 24F4 */
3504   {0x24F6,0x24F6,0x24F6},  {0x24F7,0x24F7,0x24F7}, /* 24F6 */
3505   {0x24F8,0x24F8,0x24F8},  {0x24F9,0x24F9,0x24F9}, /* 24F8 */
3506   {0x24FA,0x24FA,0x24FA},  {0x24FB,0x24FB,0x24FB}, /* 24FA */
3507   {0x24FC,0x24FC,0x24FC},  {0x24FD,0x24FD,0x24FD}, /* 24FC */
3508   {0x24FE,0x24FE,0x24FE},  {0x24FF,0x24FF,0x24FF} /* 24FE */
3509 };
3510 
3511 static const MY_UNICASE_CHARACTER u520p2C[]={
3512   {0x2C00,0x2C30,0x2C00},  {0x2C01,0x2C31,0x2C01}, /* 2C00 */
3513   {0x2C02,0x2C32,0x2C02},  {0x2C03,0x2C33,0x2C03}, /* 2C02 */
3514   {0x2C04,0x2C34,0x2C04},  {0x2C05,0x2C35,0x2C05}, /* 2C04 */
3515   {0x2C06,0x2C36,0x2C06},  {0x2C07,0x2C37,0x2C07}, /* 2C06 */
3516   {0x2C08,0x2C38,0x2C08},  {0x2C09,0x2C39,0x2C09}, /* 2C08 */
3517   {0x2C0A,0x2C3A,0x2C0A},  {0x2C0B,0x2C3B,0x2C0B}, /* 2C0A */
3518   {0x2C0C,0x2C3C,0x2C0C},  {0x2C0D,0x2C3D,0x2C0D}, /* 2C0C */
3519   {0x2C0E,0x2C3E,0x2C0E},  {0x2C0F,0x2C3F,0x2C0F}, /* 2C0E */
3520   {0x2C10,0x2C40,0x2C10},  {0x2C11,0x2C41,0x2C11}, /* 2C10 */
3521   {0x2C12,0x2C42,0x2C12},  {0x2C13,0x2C43,0x2C13}, /* 2C12 */
3522   {0x2C14,0x2C44,0x2C14},  {0x2C15,0x2C45,0x2C15}, /* 2C14 */
3523   {0x2C16,0x2C46,0x2C16},  {0x2C17,0x2C47,0x2C17}, /* 2C16 */
3524   {0x2C18,0x2C48,0x2C18},  {0x2C19,0x2C49,0x2C19}, /* 2C18 */
3525   {0x2C1A,0x2C4A,0x2C1A},  {0x2C1B,0x2C4B,0x2C1B}, /* 2C1A */
3526   {0x2C1C,0x2C4C,0x2C1C},  {0x2C1D,0x2C4D,0x2C1D}, /* 2C1C */
3527   {0x2C1E,0x2C4E,0x2C1E},  {0x2C1F,0x2C4F,0x2C1F}, /* 2C1E */
3528   {0x2C20,0x2C50,0x2C20},  {0x2C21,0x2C51,0x2C21}, /* 2C20 */
3529   {0x2C22,0x2C52,0x2C22},  {0x2C23,0x2C53,0x2C23}, /* 2C22 */
3530   {0x2C24,0x2C54,0x2C24},  {0x2C25,0x2C55,0x2C25}, /* 2C24 */
3531   {0x2C26,0x2C56,0x2C26},  {0x2C27,0x2C57,0x2C27}, /* 2C26 */
3532   {0x2C28,0x2C58,0x2C28},  {0x2C29,0x2C59,0x2C29}, /* 2C28 */
3533   {0x2C2A,0x2C5A,0x2C2A},  {0x2C2B,0x2C5B,0x2C2B}, /* 2C2A */
3534   {0x2C2C,0x2C5C,0x2C2C},  {0x2C2D,0x2C5D,0x2C2D}, /* 2C2C */
3535   {0x2C2E,0x2C5E,0x2C2E},  {0x2C2F,0x2C2F,0x2C2F}, /* 2C2E */
3536   {0x2C00,0x2C30,0x2C00},  {0x2C01,0x2C31,0x2C01}, /* 2C30 */
3537   {0x2C02,0x2C32,0x2C02},  {0x2C03,0x2C33,0x2C03}, /* 2C32 */
3538   {0x2C04,0x2C34,0x2C04},  {0x2C05,0x2C35,0x2C05}, /* 2C34 */
3539   {0x2C06,0x2C36,0x2C06},  {0x2C07,0x2C37,0x2C07}, /* 2C36 */
3540   {0x2C08,0x2C38,0x2C08},  {0x2C09,0x2C39,0x2C09}, /* 2C38 */
3541   {0x2C0A,0x2C3A,0x2C0A},  {0x2C0B,0x2C3B,0x2C0B}, /* 2C3A */
3542   {0x2C0C,0x2C3C,0x2C0C},  {0x2C0D,0x2C3D,0x2C0D}, /* 2C3C */
3543   {0x2C0E,0x2C3E,0x2C0E},  {0x2C0F,0x2C3F,0x2C0F}, /* 2C3E */
3544   {0x2C10,0x2C40,0x2C10},  {0x2C11,0x2C41,0x2C11}, /* 2C40 */
3545   {0x2C12,0x2C42,0x2C12},  {0x2C13,0x2C43,0x2C13}, /* 2C42 */
3546   {0x2C14,0x2C44,0x2C14},  {0x2C15,0x2C45,0x2C15}, /* 2C44 */
3547   {0x2C16,0x2C46,0x2C16},  {0x2C17,0x2C47,0x2C17}, /* 2C46 */
3548   {0x2C18,0x2C48,0x2C18},  {0x2C19,0x2C49,0x2C19}, /* 2C48 */
3549   {0x2C1A,0x2C4A,0x2C1A},  {0x2C1B,0x2C4B,0x2C1B}, /* 2C4A */
3550   {0x2C1C,0x2C4C,0x2C1C},  {0x2C1D,0x2C4D,0x2C1D}, /* 2C4C */
3551   {0x2C1E,0x2C4E,0x2C1E},  {0x2C1F,0x2C4F,0x2C1F}, /* 2C4E */
3552   {0x2C20,0x2C50,0x2C20},  {0x2C21,0x2C51,0x2C21}, /* 2C50 */
3553   {0x2C22,0x2C52,0x2C22},  {0x2C23,0x2C53,0x2C23}, /* 2C52 */
3554   {0x2C24,0x2C54,0x2C24},  {0x2C25,0x2C55,0x2C25}, /* 2C54 */
3555   {0x2C26,0x2C56,0x2C26},  {0x2C27,0x2C57,0x2C27}, /* 2C56 */
3556   {0x2C28,0x2C58,0x2C28},  {0x2C29,0x2C59,0x2C29}, /* 2C58 */
3557   {0x2C2A,0x2C5A,0x2C2A},  {0x2C2B,0x2C5B,0x2C2B}, /* 2C5A */
3558   {0x2C2C,0x2C5C,0x2C2C},  {0x2C2D,0x2C5D,0x2C2D}, /* 2C5C */
3559   {0x2C2E,0x2C5E,0x2C2E},  {0x2C5F,0x2C5F,0x2C5F}, /* 2C5E */
3560   {0x2C60,0x2C61,0x2C60},  {0x2C60,0x2C61,0x2C60}, /* 2C60 */
3561   {0x2C62,0x026B,0x2C62},  {0x2C63,0x1D7D,0x2C63}, /* 2C62 */
3562   {0x2C64,0x027D,0x2C64},  {0x023A,0x2C65,0x023A}, /* 2C64 */
3563   {0x023E,0x2C66,0x023E},  {0x2C67,0x2C68,0x2C67}, /* 2C66 */
3564   {0x2C67,0x2C68,0x2C67},  {0x2C69,0x2C6A,0x2C69}, /* 2C68 */
3565   {0x2C69,0x2C6A,0x2C69},  {0x2C6B,0x2C6C,0x2C6B}, /* 2C6A */
3566   {0x2C6B,0x2C6C,0x2C6B},  {0x2C6D,0x0251,0x2C6D}, /* 2C6C */
3567   {0x2C6E,0x0271,0x2C6E},  {0x2C6F,0x0250,0x2C6F}, /* 2C6E */
3568   {0x2C70,0x0252,0x2C70},  {0x2C71,0x2C71,0x2C71}, /* 2C70 */
3569   {0x2C72,0x2C73,0x2C72},  {0x2C72,0x2C73,0x2C72}, /* 2C72 */
3570   {0x2C74,0x2C74,0x2C74},  {0x2C75,0x2C76,0x2C75}, /* 2C74 */
3571   {0x2C75,0x2C76,0x2C75},  {0x2C77,0x2C77,0x2C77}, /* 2C76 */
3572   {0x2C78,0x2C78,0x2C78},  {0x2C79,0x2C79,0x2C79}, /* 2C78 */
3573   {0x2C7A,0x2C7A,0x2C7A},  {0x2C7B,0x2C7B,0x2C7B}, /* 2C7A */
3574   {0x2C7C,0x2C7C,0x2C7C},  {0x2C7D,0x2C7D,0x2C7D}, /* 2C7C */
3575   {0x2C7E,0x023F,0x2C7E},  {0x2C7F,0x0240,0x2C7F}, /* 2C7E */
3576   {0x2C80,0x2C81,0x2C80},  {0x2C80,0x2C81,0x2C80}, /* 2C80 */
3577   {0x2C82,0x2C83,0x2C82},  {0x2C82,0x2C83,0x2C82}, /* 2C82 */
3578   {0x2C84,0x2C85,0x2C84},  {0x2C84,0x2C85,0x2C84}, /* 2C84 */
3579   {0x2C86,0x2C87,0x2C86},  {0x2C86,0x2C87,0x2C86}, /* 2C86 */
3580   {0x2C88,0x2C89,0x2C88},  {0x2C88,0x2C89,0x2C88}, /* 2C88 */
3581   {0x2C8A,0x2C8B,0x2C8A},  {0x2C8A,0x2C8B,0x2C8A}, /* 2C8A */
3582   {0x2C8C,0x2C8D,0x2C8C},  {0x2C8C,0x2C8D,0x2C8C}, /* 2C8C */
3583   {0x2C8E,0x2C8F,0x2C8E},  {0x2C8E,0x2C8F,0x2C8E}, /* 2C8E */
3584   {0x2C90,0x2C91,0x2C90},  {0x2C90,0x2C91,0x2C90}, /* 2C90 */
3585   {0x2C92,0x2C93,0x2C92},  {0x2C92,0x2C93,0x2C92}, /* 2C92 */
3586   {0x2C94,0x2C95,0x2C94},  {0x2C94,0x2C95,0x2C94}, /* 2C94 */
3587   {0x2C96,0x2C97,0x2C96},  {0x2C96,0x2C97,0x2C96}, /* 2C96 */
3588   {0x2C98,0x2C99,0x2C98},  {0x2C98,0x2C99,0x2C98}, /* 2C98 */
3589   {0x2C9A,0x2C9B,0x2C9A},  {0x2C9A,0x2C9B,0x2C9A}, /* 2C9A */
3590   {0x2C9C,0x2C9D,0x2C9C},  {0x2C9C,0x2C9D,0x2C9C}, /* 2C9C */
3591   {0x2C9E,0x2C9F,0x2C9E},  {0x2C9E,0x2C9F,0x2C9E}, /* 2C9E */
3592   {0x2CA0,0x2CA1,0x2CA0},  {0x2CA0,0x2CA1,0x2CA0}, /* 2CA0 */
3593   {0x2CA2,0x2CA3,0x2CA2},  {0x2CA2,0x2CA3,0x2CA2}, /* 2CA2 */
3594   {0x2CA4,0x2CA5,0x2CA4},  {0x2CA4,0x2CA5,0x2CA4}, /* 2CA4 */
3595   {0x2CA6,0x2CA7,0x2CA6},  {0x2CA6,0x2CA7,0x2CA6}, /* 2CA6 */
3596   {0x2CA8,0x2CA9,0x2CA8},  {0x2CA8,0x2CA9,0x2CA8}, /* 2CA8 */
3597   {0x2CAA,0x2CAB,0x2CAA},  {0x2CAA,0x2CAB,0x2CAA}, /* 2CAA */
3598   {0x2CAC,0x2CAD,0x2CAC},  {0x2CAC,0x2CAD,0x2CAC}, /* 2CAC */
3599   {0x2CAE,0x2CAF,0x2CAE},  {0x2CAE,0x2CAF,0x2CAE}, /* 2CAE */
3600   {0x2CB0,0x2CB1,0x2CB0},  {0x2CB0,0x2CB1,0x2CB0}, /* 2CB0 */
3601   {0x2CB2,0x2CB3,0x2CB2},  {0x2CB2,0x2CB3,0x2CB2}, /* 2CB2 */
3602   {0x2CB4,0x2CB5,0x2CB4},  {0x2CB4,0x2CB5,0x2CB4}, /* 2CB4 */
3603   {0x2CB6,0x2CB7,0x2CB6},  {0x2CB6,0x2CB7,0x2CB6}, /* 2CB6 */
3604   {0x2CB8,0x2CB9,0x2CB8},  {0x2CB8,0x2CB9,0x2CB8}, /* 2CB8 */
3605   {0x2CBA,0x2CBB,0x2CBA},  {0x2CBA,0x2CBB,0x2CBA}, /* 2CBA */
3606   {0x2CBC,0x2CBD,0x2CBC},  {0x2CBC,0x2CBD,0x2CBC}, /* 2CBC */
3607   {0x2CBE,0x2CBF,0x2CBE},  {0x2CBE,0x2CBF,0x2CBE}, /* 2CBE */
3608   {0x2CC0,0x2CC1,0x2CC0},  {0x2CC0,0x2CC1,0x2CC0}, /* 2CC0 */
3609   {0x2CC2,0x2CC3,0x2CC2},  {0x2CC2,0x2CC3,0x2CC2}, /* 2CC2 */
3610   {0x2CC4,0x2CC5,0x2CC4},  {0x2CC4,0x2CC5,0x2CC4}, /* 2CC4 */
3611   {0x2CC6,0x2CC7,0x2CC6},  {0x2CC6,0x2CC7,0x2CC6}, /* 2CC6 */
3612   {0x2CC8,0x2CC9,0x2CC8},  {0x2CC8,0x2CC9,0x2CC8}, /* 2CC8 */
3613   {0x2CCA,0x2CCB,0x2CCA},  {0x2CCA,0x2CCB,0x2CCA}, /* 2CCA */
3614   {0x2CCC,0x2CCD,0x2CCC},  {0x2CCC,0x2CCD,0x2CCC}, /* 2CCC */
3615   {0x2CCE,0x2CCF,0x2CCE},  {0x2CCE,0x2CCF,0x2CCE}, /* 2CCE */
3616   {0x2CD0,0x2CD1,0x2CD0},  {0x2CD0,0x2CD1,0x2CD0}, /* 2CD0 */
3617   {0x2CD2,0x2CD3,0x2CD2},  {0x2CD2,0x2CD3,0x2CD2}, /* 2CD2 */
3618   {0x2CD4,0x2CD5,0x2CD4},  {0x2CD4,0x2CD5,0x2CD4}, /* 2CD4 */
3619   {0x2CD6,0x2CD7,0x2CD6},  {0x2CD6,0x2CD7,0x2CD6}, /* 2CD6 */
3620   {0x2CD8,0x2CD9,0x2CD8},  {0x2CD8,0x2CD9,0x2CD8}, /* 2CD8 */
3621   {0x2CDA,0x2CDB,0x2CDA},  {0x2CDA,0x2CDB,0x2CDA}, /* 2CDA */
3622   {0x2CDC,0x2CDD,0x2CDC},  {0x2CDC,0x2CDD,0x2CDC}, /* 2CDC */
3623   {0x2CDE,0x2CDF,0x2CDE},  {0x2CDE,0x2CDF,0x2CDE}, /* 2CDE */
3624   {0x2CE0,0x2CE1,0x2CE0},  {0x2CE0,0x2CE1,0x2CE0}, /* 2CE0 */
3625   {0x2CE2,0x2CE3,0x2CE2},  {0x2CE2,0x2CE3,0x2CE2}, /* 2CE2 */
3626   {0x2CE4,0x2CE4,0x2CE4},  {0x2CE5,0x2CE5,0x2CE5}, /* 2CE4 */
3627   {0x2CE6,0x2CE6,0x2CE6},  {0x2CE7,0x2CE7,0x2CE7}, /* 2CE6 */
3628   {0x2CE8,0x2CE8,0x2CE8},  {0x2CE9,0x2CE9,0x2CE9}, /* 2CE8 */
3629   {0x2CEA,0x2CEA,0x2CEA},  {0x2CEB,0x2CEC,0x2CEB}, /* 2CEA */
3630   {0x2CEB,0x2CEC,0x2CEB},  {0x2CED,0x2CEE,0x2CED}, /* 2CEC */
3631   {0x2CED,0x2CEE,0x2CED},  {0x2CEF,0x2CEF,0x2CEF}, /* 2CEE */
3632   {0x2CF0,0x2CF0,0x2CF0},  {0x2CF1,0x2CF1,0x2CF1}, /* 2CF0 */
3633   {0x2CF2,0x2CF2,0x2CF2},  {0x2CF3,0x2CF3,0x2CF3}, /* 2CF2 */
3634   {0x2CF4,0x2CF4,0x2CF4},  {0x2CF5,0x2CF5,0x2CF5}, /* 2CF4 */
3635   {0x2CF6,0x2CF6,0x2CF6},  {0x2CF7,0x2CF7,0x2CF7}, /* 2CF6 */
3636   {0x2CF8,0x2CF8,0x2CF8},  {0x2CF9,0x2CF9,0x2CF9}, /* 2CF8 */
3637   {0x2CFA,0x2CFA,0x2CFA},  {0x2CFB,0x2CFB,0x2CFB}, /* 2CFA */
3638   {0x2CFC,0x2CFC,0x2CFC},  {0x2CFD,0x2CFD,0x2CFD}, /* 2CFC */
3639   {0x2CFE,0x2CFE,0x2CFE},  {0x2CFF,0x2CFF,0x2CFF} /* 2CFE */
3640 };
3641 
3642 static const MY_UNICASE_CHARACTER u520p2D[]={
3643   {0x10A0,0x2D00,0x10A0},  {0x10A1,0x2D01,0x10A1}, /* 2D00 */
3644   {0x10A2,0x2D02,0x10A2},  {0x10A3,0x2D03,0x10A3}, /* 2D02 */
3645   {0x10A4,0x2D04,0x10A4},  {0x10A5,0x2D05,0x10A5}, /* 2D04 */
3646   {0x10A6,0x2D06,0x10A6},  {0x10A7,0x2D07,0x10A7}, /* 2D06 */
3647   {0x10A8,0x2D08,0x10A8},  {0x10A9,0x2D09,0x10A9}, /* 2D08 */
3648   {0x10AA,0x2D0A,0x10AA},  {0x10AB,0x2D0B,0x10AB}, /* 2D0A */
3649   {0x10AC,0x2D0C,0x10AC},  {0x10AD,0x2D0D,0x10AD}, /* 2D0C */
3650   {0x10AE,0x2D0E,0x10AE},  {0x10AF,0x2D0F,0x10AF}, /* 2D0E */
3651   {0x10B0,0x2D10,0x10B0},  {0x10B1,0x2D11,0x10B1}, /* 2D10 */
3652   {0x10B2,0x2D12,0x10B2},  {0x10B3,0x2D13,0x10B3}, /* 2D12 */
3653   {0x10B4,0x2D14,0x10B4},  {0x10B5,0x2D15,0x10B5}, /* 2D14 */
3654   {0x10B6,0x2D16,0x10B6},  {0x10B7,0x2D17,0x10B7}, /* 2D16 */
3655   {0x10B8,0x2D18,0x10B8},  {0x10B9,0x2D19,0x10B9}, /* 2D18 */
3656   {0x10BA,0x2D1A,0x10BA},  {0x10BB,0x2D1B,0x10BB}, /* 2D1A */
3657   {0x10BC,0x2D1C,0x10BC},  {0x10BD,0x2D1D,0x10BD}, /* 2D1C */
3658   {0x10BE,0x2D1E,0x10BE},  {0x10BF,0x2D1F,0x10BF}, /* 2D1E */
3659   {0x10C0,0x2D20,0x10C0},  {0x10C1,0x2D21,0x10C1}, /* 2D20 */
3660   {0x10C2,0x2D22,0x10C2},  {0x10C3,0x2D23,0x10C3}, /* 2D22 */
3661   {0x10C4,0x2D24,0x10C4},  {0x10C5,0x2D25,0x10C5}, /* 2D24 */
3662   {0x2D26,0x2D26,0x2D26},  {0x2D27,0x2D27,0x2D27}, /* 2D26 */
3663   {0x2D28,0x2D28,0x2D28},  {0x2D29,0x2D29,0x2D29}, /* 2D28 */
3664   {0x2D2A,0x2D2A,0x2D2A},  {0x2D2B,0x2D2B,0x2D2B}, /* 2D2A */
3665   {0x2D2C,0x2D2C,0x2D2C},  {0x2D2D,0x2D2D,0x2D2D}, /* 2D2C */
3666   {0x2D2E,0x2D2E,0x2D2E},  {0x2D2F,0x2D2F,0x2D2F}, /* 2D2E */
3667   {0x2D30,0x2D30,0x2D30},  {0x2D31,0x2D31,0x2D31}, /* 2D30 */
3668   {0x2D32,0x2D32,0x2D32},  {0x2D33,0x2D33,0x2D33}, /* 2D32 */
3669   {0x2D34,0x2D34,0x2D34},  {0x2D35,0x2D35,0x2D35}, /* 2D34 */
3670   {0x2D36,0x2D36,0x2D36},  {0x2D37,0x2D37,0x2D37}, /* 2D36 */
3671   {0x2D38,0x2D38,0x2D38},  {0x2D39,0x2D39,0x2D39}, /* 2D38 */
3672   {0x2D3A,0x2D3A,0x2D3A},  {0x2D3B,0x2D3B,0x2D3B}, /* 2D3A */
3673   {0x2D3C,0x2D3C,0x2D3C},  {0x2D3D,0x2D3D,0x2D3D}, /* 2D3C */
3674   {0x2D3E,0x2D3E,0x2D3E},  {0x2D3F,0x2D3F,0x2D3F}, /* 2D3E */
3675   {0x2D40,0x2D40,0x2D40},  {0x2D41,0x2D41,0x2D41}, /* 2D40 */
3676   {0x2D42,0x2D42,0x2D42},  {0x2D43,0x2D43,0x2D43}, /* 2D42 */
3677   {0x2D44,0x2D44,0x2D44},  {0x2D45,0x2D45,0x2D45}, /* 2D44 */
3678   {0x2D46,0x2D46,0x2D46},  {0x2D47,0x2D47,0x2D47}, /* 2D46 */
3679   {0x2D48,0x2D48,0x2D48},  {0x2D49,0x2D49,0x2D49}, /* 2D48 */
3680   {0x2D4A,0x2D4A,0x2D4A},  {0x2D4B,0x2D4B,0x2D4B}, /* 2D4A */
3681   {0x2D4C,0x2D4C,0x2D4C},  {0x2D4D,0x2D4D,0x2D4D}, /* 2D4C */
3682   {0x2D4E,0x2D4E,0x2D4E},  {0x2D4F,0x2D4F,0x2D4F}, /* 2D4E */
3683   {0x2D50,0x2D50,0x2D50},  {0x2D51,0x2D51,0x2D51}, /* 2D50 */
3684   {0x2D52,0x2D52,0x2D52},  {0x2D53,0x2D53,0x2D53}, /* 2D52 */
3685   {0x2D54,0x2D54,0x2D54},  {0x2D55,0x2D55,0x2D55}, /* 2D54 */
3686   {0x2D56,0x2D56,0x2D56},  {0x2D57,0x2D57,0x2D57}, /* 2D56 */
3687   {0x2D58,0x2D58,0x2D58},  {0x2D59,0x2D59,0x2D59}, /* 2D58 */
3688   {0x2D5A,0x2D5A,0x2D5A},  {0x2D5B,0x2D5B,0x2D5B}, /* 2D5A */
3689   {0x2D5C,0x2D5C,0x2D5C},  {0x2D5D,0x2D5D,0x2D5D}, /* 2D5C */
3690   {0x2D5E,0x2D5E,0x2D5E},  {0x2D5F,0x2D5F,0x2D5F}, /* 2D5E */
3691   {0x2D60,0x2D60,0x2D60},  {0x2D61,0x2D61,0x2D61}, /* 2D60 */
3692   {0x2D62,0x2D62,0x2D62},  {0x2D63,0x2D63,0x2D63}, /* 2D62 */
3693   {0x2D64,0x2D64,0x2D64},  {0x2D65,0x2D65,0x2D65}, /* 2D64 */
3694   {0x2D66,0x2D66,0x2D66},  {0x2D67,0x2D67,0x2D67}, /* 2D66 */
3695   {0x2D68,0x2D68,0x2D68},  {0x2D69,0x2D69,0x2D69}, /* 2D68 */
3696   {0x2D6A,0x2D6A,0x2D6A},  {0x2D6B,0x2D6B,0x2D6B}, /* 2D6A */
3697   {0x2D6C,0x2D6C,0x2D6C},  {0x2D6D,0x2D6D,0x2D6D}, /* 2D6C */
3698   {0x2D6E,0x2D6E,0x2D6E},  {0x2D6F,0x2D6F,0x2D6F}, /* 2D6E */
3699   {0x2D70,0x2D70,0x2D70},  {0x2D71,0x2D71,0x2D71}, /* 2D70 */
3700   {0x2D72,0x2D72,0x2D72},  {0x2D73,0x2D73,0x2D73}, /* 2D72 */
3701   {0x2D74,0x2D74,0x2D74},  {0x2D75,0x2D75,0x2D75}, /* 2D74 */
3702   {0x2D76,0x2D76,0x2D76},  {0x2D77,0x2D77,0x2D77}, /* 2D76 */
3703   {0x2D78,0x2D78,0x2D78},  {0x2D79,0x2D79,0x2D79}, /* 2D78 */
3704   {0x2D7A,0x2D7A,0x2D7A},  {0x2D7B,0x2D7B,0x2D7B}, /* 2D7A */
3705   {0x2D7C,0x2D7C,0x2D7C},  {0x2D7D,0x2D7D,0x2D7D}, /* 2D7C */
3706   {0x2D7E,0x2D7E,0x2D7E},  {0x2D7F,0x2D7F,0x2D7F}, /* 2D7E */
3707   {0x2D80,0x2D80,0x2D80},  {0x2D81,0x2D81,0x2D81}, /* 2D80 */
3708   {0x2D82,0x2D82,0x2D82},  {0x2D83,0x2D83,0x2D83}, /* 2D82 */
3709   {0x2D84,0x2D84,0x2D84},  {0x2D85,0x2D85,0x2D85}, /* 2D84 */
3710   {0x2D86,0x2D86,0x2D86},  {0x2D87,0x2D87,0x2D87}, /* 2D86 */
3711   {0x2D88,0x2D88,0x2D88},  {0x2D89,0x2D89,0x2D89}, /* 2D88 */
3712   {0x2D8A,0x2D8A,0x2D8A},  {0x2D8B,0x2D8B,0x2D8B}, /* 2D8A */
3713   {0x2D8C,0x2D8C,0x2D8C},  {0x2D8D,0x2D8D,0x2D8D}, /* 2D8C */
3714   {0x2D8E,0x2D8E,0x2D8E},  {0x2D8F,0x2D8F,0x2D8F}, /* 2D8E */
3715   {0x2D90,0x2D90,0x2D90},  {0x2D91,0x2D91,0x2D91}, /* 2D90 */
3716   {0x2D92,0x2D92,0x2D92},  {0x2D93,0x2D93,0x2D93}, /* 2D92 */
3717   {0x2D94,0x2D94,0x2D94},  {0x2D95,0x2D95,0x2D95}, /* 2D94 */
3718   {0x2D96,0x2D96,0x2D96},  {0x2D97,0x2D97,0x2D97}, /* 2D96 */
3719   {0x2D98,0x2D98,0x2D98},  {0x2D99,0x2D99,0x2D99}, /* 2D98 */
3720   {0x2D9A,0x2D9A,0x2D9A},  {0x2D9B,0x2D9B,0x2D9B}, /* 2D9A */
3721   {0x2D9C,0x2D9C,0x2D9C},  {0x2D9D,0x2D9D,0x2D9D}, /* 2D9C */
3722   {0x2D9E,0x2D9E,0x2D9E},  {0x2D9F,0x2D9F,0x2D9F}, /* 2D9E */
3723   {0x2DA0,0x2DA0,0x2DA0},  {0x2DA1,0x2DA1,0x2DA1}, /* 2DA0 */
3724   {0x2DA2,0x2DA2,0x2DA2},  {0x2DA3,0x2DA3,0x2DA3}, /* 2DA2 */
3725   {0x2DA4,0x2DA4,0x2DA4},  {0x2DA5,0x2DA5,0x2DA5}, /* 2DA4 */
3726   {0x2DA6,0x2DA6,0x2DA6},  {0x2DA7,0x2DA7,0x2DA7}, /* 2DA6 */
3727   {0x2DA8,0x2DA8,0x2DA8},  {0x2DA9,0x2DA9,0x2DA9}, /* 2DA8 */
3728   {0x2DAA,0x2DAA,0x2DAA},  {0x2DAB,0x2DAB,0x2DAB}, /* 2DAA */
3729   {0x2DAC,0x2DAC,0x2DAC},  {0x2DAD,0x2DAD,0x2DAD}, /* 2DAC */
3730   {0x2DAE,0x2DAE,0x2DAE},  {0x2DAF,0x2DAF,0x2DAF}, /* 2DAE */
3731   {0x2DB0,0x2DB0,0x2DB0},  {0x2DB1,0x2DB1,0x2DB1}, /* 2DB0 */
3732   {0x2DB2,0x2DB2,0x2DB2},  {0x2DB3,0x2DB3,0x2DB3}, /* 2DB2 */
3733   {0x2DB4,0x2DB4,0x2DB4},  {0x2DB5,0x2DB5,0x2DB5}, /* 2DB4 */
3734   {0x2DB6,0x2DB6,0x2DB6},  {0x2DB7,0x2DB7,0x2DB7}, /* 2DB6 */
3735   {0x2DB8,0x2DB8,0x2DB8},  {0x2DB9,0x2DB9,0x2DB9}, /* 2DB8 */
3736   {0x2DBA,0x2DBA,0x2DBA},  {0x2DBB,0x2DBB,0x2DBB}, /* 2DBA */
3737   {0x2DBC,0x2DBC,0x2DBC},  {0x2DBD,0x2DBD,0x2DBD}, /* 2DBC */
3738   {0x2DBE,0x2DBE,0x2DBE},  {0x2DBF,0x2DBF,0x2DBF}, /* 2DBE */
3739   {0x2DC0,0x2DC0,0x2DC0},  {0x2DC1,0x2DC1,0x2DC1}, /* 2DC0 */
3740   {0x2DC2,0x2DC2,0x2DC2},  {0x2DC3,0x2DC3,0x2DC3}, /* 2DC2 */
3741   {0x2DC4,0x2DC4,0x2DC4},  {0x2DC5,0x2DC5,0x2DC5}, /* 2DC4 */
3742   {0x2DC6,0x2DC6,0x2DC6},  {0x2DC7,0x2DC7,0x2DC7}, /* 2DC6 */
3743   {0x2DC8,0x2DC8,0x2DC8},  {0x2DC9,0x2DC9,0x2DC9}, /* 2DC8 */
3744   {0x2DCA,0x2DCA,0x2DCA},  {0x2DCB,0x2DCB,0x2DCB}, /* 2DCA */
3745   {0x2DCC,0x2DCC,0x2DCC},  {0x2DCD,0x2DCD,0x2DCD}, /* 2DCC */
3746   {0x2DCE,0x2DCE,0x2DCE},  {0x2DCF,0x2DCF,0x2DCF}, /* 2DCE */
3747   {0x2DD0,0x2DD0,0x2DD0},  {0x2DD1,0x2DD1,0x2DD1}, /* 2DD0 */
3748   {0x2DD2,0x2DD2,0x2DD2},  {0x2DD3,0x2DD3,0x2DD3}, /* 2DD2 */
3749   {0x2DD4,0x2DD4,0x2DD4},  {0x2DD5,0x2DD5,0x2DD5}, /* 2DD4 */
3750   {0x2DD6,0x2DD6,0x2DD6},  {0x2DD7,0x2DD7,0x2DD7}, /* 2DD6 */
3751   {0x2DD8,0x2DD8,0x2DD8},  {0x2DD9,0x2DD9,0x2DD9}, /* 2DD8 */
3752   {0x2DDA,0x2DDA,0x2DDA},  {0x2DDB,0x2DDB,0x2DDB}, /* 2DDA */
3753   {0x2DDC,0x2DDC,0x2DDC},  {0x2DDD,0x2DDD,0x2DDD}, /* 2DDC */
3754   {0x2DDE,0x2DDE,0x2DDE},  {0x2DDF,0x2DDF,0x2DDF}, /* 2DDE */
3755   {0x2DE0,0x2DE0,0x2DE0},  {0x2DE1,0x2DE1,0x2DE1}, /* 2DE0 */
3756   {0x2DE2,0x2DE2,0x2DE2},  {0x2DE3,0x2DE3,0x2DE3}, /* 2DE2 */
3757   {0x2DE4,0x2DE4,0x2DE4},  {0x2DE5,0x2DE5,0x2DE5}, /* 2DE4 */
3758   {0x2DE6,0x2DE6,0x2DE6},  {0x2DE7,0x2DE7,0x2DE7}, /* 2DE6 */
3759   {0x2DE8,0x2DE8,0x2DE8},  {0x2DE9,0x2DE9,0x2DE9}, /* 2DE8 */
3760   {0x2DEA,0x2DEA,0x2DEA},  {0x2DEB,0x2DEB,0x2DEB}, /* 2DEA */
3761   {0x2DEC,0x2DEC,0x2DEC},  {0x2DED,0x2DED,0x2DED}, /* 2DEC */
3762   {0x2DEE,0x2DEE,0x2DEE},  {0x2DEF,0x2DEF,0x2DEF}, /* 2DEE */
3763   {0x2DF0,0x2DF0,0x2DF0},  {0x2DF1,0x2DF1,0x2DF1}, /* 2DF0 */
3764   {0x2DF2,0x2DF2,0x2DF2},  {0x2DF3,0x2DF3,0x2DF3}, /* 2DF2 */
3765   {0x2DF4,0x2DF4,0x2DF4},  {0x2DF5,0x2DF5,0x2DF5}, /* 2DF4 */
3766   {0x2DF6,0x2DF6,0x2DF6},  {0x2DF7,0x2DF7,0x2DF7}, /* 2DF6 */
3767   {0x2DF8,0x2DF8,0x2DF8},  {0x2DF9,0x2DF9,0x2DF9}, /* 2DF8 */
3768   {0x2DFA,0x2DFA,0x2DFA},  {0x2DFB,0x2DFB,0x2DFB}, /* 2DFA */
3769   {0x2DFC,0x2DFC,0x2DFC},  {0x2DFD,0x2DFD,0x2DFD}, /* 2DFC */
3770   {0x2DFE,0x2DFE,0x2DFE},  {0x2DFF,0x2DFF,0x2DFF} /* 2DFE */
3771 };
3772 
3773 static const MY_UNICASE_CHARACTER u520pA6[]={
3774   {0xA600,0xA600,0xA600},  {0xA601,0xA601,0xA601}, /* A600 */
3775   {0xA602,0xA602,0xA602},  {0xA603,0xA603,0xA603}, /* A602 */
3776   {0xA604,0xA604,0xA604},  {0xA605,0xA605,0xA605}, /* A604 */
3777   {0xA606,0xA606,0xA606},  {0xA607,0xA607,0xA607}, /* A606 */
3778   {0xA608,0xA608,0xA608},  {0xA609,0xA609,0xA609}, /* A608 */
3779   {0xA60A,0xA60A,0xA60A},  {0xA60B,0xA60B,0xA60B}, /* A60A */
3780   {0xA60C,0xA60C,0xA60C},  {0xA60D,0xA60D,0xA60D}, /* A60C */
3781   {0xA60E,0xA60E,0xA60E},  {0xA60F,0xA60F,0xA60F}, /* A60E */
3782   {0xA610,0xA610,0xA610},  {0xA611,0xA611,0xA611}, /* A610 */
3783   {0xA612,0xA612,0xA612},  {0xA613,0xA613,0xA613}, /* A612 */
3784   {0xA614,0xA614,0xA614},  {0xA615,0xA615,0xA615}, /* A614 */
3785   {0xA616,0xA616,0xA616},  {0xA617,0xA617,0xA617}, /* A616 */
3786   {0xA618,0xA618,0xA618},  {0xA619,0xA619,0xA619}, /* A618 */
3787   {0xA61A,0xA61A,0xA61A},  {0xA61B,0xA61B,0xA61B}, /* A61A */
3788   {0xA61C,0xA61C,0xA61C},  {0xA61D,0xA61D,0xA61D}, /* A61C */
3789   {0xA61E,0xA61E,0xA61E},  {0xA61F,0xA61F,0xA61F}, /* A61E */
3790   {0xA620,0xA620,0xA620},  {0xA621,0xA621,0xA621}, /* A620 */
3791   {0xA622,0xA622,0xA622},  {0xA623,0xA623,0xA623}, /* A622 */
3792   {0xA624,0xA624,0xA624},  {0xA625,0xA625,0xA625}, /* A624 */
3793   {0xA626,0xA626,0xA626},  {0xA627,0xA627,0xA627}, /* A626 */
3794   {0xA628,0xA628,0xA628},  {0xA629,0xA629,0xA629}, /* A628 */
3795   {0xA62A,0xA62A,0xA62A},  {0xA62B,0xA62B,0xA62B}, /* A62A */
3796   {0xA62C,0xA62C,0xA62C},  {0xA62D,0xA62D,0xA62D}, /* A62C */
3797   {0xA62E,0xA62E,0xA62E},  {0xA62F,0xA62F,0xA62F}, /* A62E */
3798   {0xA630,0xA630,0xA630},  {0xA631,0xA631,0xA631}, /* A630 */
3799   {0xA632,0xA632,0xA632},  {0xA633,0xA633,0xA633}, /* A632 */
3800   {0xA634,0xA634,0xA634},  {0xA635,0xA635,0xA635}, /* A634 */
3801   {0xA636,0xA636,0xA636},  {0xA637,0xA637,0xA637}, /* A636 */
3802   {0xA638,0xA638,0xA638},  {0xA639,0xA639,0xA639}, /* A638 */
3803   {0xA63A,0xA63A,0xA63A},  {0xA63B,0xA63B,0xA63B}, /* A63A */
3804   {0xA63C,0xA63C,0xA63C},  {0xA63D,0xA63D,0xA63D}, /* A63C */
3805   {0xA63E,0xA63E,0xA63E},  {0xA63F,0xA63F,0xA63F}, /* A63E */
3806   {0xA640,0xA641,0xA640},  {0xA640,0xA641,0xA640}, /* A640 */
3807   {0xA642,0xA643,0xA642},  {0xA642,0xA643,0xA642}, /* A642 */
3808   {0xA644,0xA645,0xA644},  {0xA644,0xA645,0xA644}, /* A644 */
3809   {0xA646,0xA647,0xA646},  {0xA646,0xA647,0xA646}, /* A646 */
3810   {0xA648,0xA649,0xA648},  {0xA648,0xA649,0xA648}, /* A648 */
3811   {0xA64A,0xA64B,0xA64A},  {0xA64A,0xA64B,0xA64A}, /* A64A */
3812   {0xA64C,0xA64D,0xA64C},  {0xA64C,0xA64D,0xA64C}, /* A64C */
3813   {0xA64E,0xA64F,0xA64E},  {0xA64E,0xA64F,0xA64E}, /* A64E */
3814   {0xA650,0xA651,0xA650},  {0xA650,0xA651,0xA650}, /* A650 */
3815   {0xA652,0xA653,0xA652},  {0xA652,0xA653,0xA652}, /* A652 */
3816   {0xA654,0xA655,0xA654},  {0xA654,0xA655,0xA654}, /* A654 */
3817   {0xA656,0xA657,0xA656},  {0xA656,0xA657,0xA656}, /* A656 */
3818   {0xA658,0xA659,0xA658},  {0xA658,0xA659,0xA658}, /* A658 */
3819   {0xA65A,0xA65B,0xA65A},  {0xA65A,0xA65B,0xA65A}, /* A65A */
3820   {0xA65C,0xA65D,0xA65C},  {0xA65C,0xA65D,0xA65C}, /* A65C */
3821   {0xA65E,0xA65F,0xA65E},  {0xA65E,0xA65F,0xA65E}, /* A65E */
3822   {0xA660,0xA660,0xA660},  {0xA661,0xA661,0xA661}, /* A660 */
3823   {0xA662,0xA663,0xA662},  {0xA662,0xA663,0xA662}, /* A662 */
3824   {0xA664,0xA665,0xA664},  {0xA664,0xA665,0xA664}, /* A664 */
3825   {0xA666,0xA667,0xA666},  {0xA666,0xA667,0xA666}, /* A666 */
3826   {0xA668,0xA669,0xA668},  {0xA668,0xA669,0xA668}, /* A668 */
3827   {0xA66A,0xA66B,0xA66A},  {0xA66A,0xA66B,0xA66A}, /* A66A */
3828   {0xA66C,0xA66D,0xA66C},  {0xA66C,0xA66D,0xA66C}, /* A66C */
3829   {0xA66E,0xA66E,0xA66E},  {0xA66F,0xA66F,0xA66F}, /* A66E */
3830   {0xA670,0xA670,0xA670},  {0xA671,0xA671,0xA671}, /* A670 */
3831   {0xA672,0xA672,0xA672},  {0xA673,0xA673,0xA673}, /* A672 */
3832   {0xA674,0xA674,0xA674},  {0xA675,0xA675,0xA675}, /* A674 */
3833   {0xA676,0xA676,0xA676},  {0xA677,0xA677,0xA677}, /* A676 */
3834   {0xA678,0xA678,0xA678},  {0xA679,0xA679,0xA679}, /* A678 */
3835   {0xA67A,0xA67A,0xA67A},  {0xA67B,0xA67B,0xA67B}, /* A67A */
3836   {0xA67C,0xA67C,0xA67C},  {0xA67D,0xA67D,0xA67D}, /* A67C */
3837   {0xA67E,0xA67E,0xA67E},  {0xA67F,0xA67F,0xA67F}, /* A67E */
3838   {0xA680,0xA681,0xA680},  {0xA680,0xA681,0xA680}, /* A680 */
3839   {0xA682,0xA683,0xA682},  {0xA682,0xA683,0xA682}, /* A682 */
3840   {0xA684,0xA685,0xA684},  {0xA684,0xA685,0xA684}, /* A684 */
3841   {0xA686,0xA687,0xA686},  {0xA686,0xA687,0xA686}, /* A686 */
3842   {0xA688,0xA689,0xA688},  {0xA688,0xA689,0xA688}, /* A688 */
3843   {0xA68A,0xA68B,0xA68A},  {0xA68A,0xA68B,0xA68A}, /* A68A */
3844   {0xA68C,0xA68D,0xA68C},  {0xA68C,0xA68D,0xA68C}, /* A68C */
3845   {0xA68E,0xA68F,0xA68E},  {0xA68E,0xA68F,0xA68E}, /* A68E */
3846   {0xA690,0xA691,0xA690},  {0xA690,0xA691,0xA690}, /* A690 */
3847   {0xA692,0xA693,0xA692},  {0xA692,0xA693,0xA692}, /* A692 */
3848   {0xA694,0xA695,0xA694},  {0xA694,0xA695,0xA694}, /* A694 */
3849   {0xA696,0xA697,0xA696},  {0xA696,0xA697,0xA696}, /* A696 */
3850   {0xA698,0xA698,0xA698},  {0xA699,0xA699,0xA699}, /* A698 */
3851   {0xA69A,0xA69A,0xA69A},  {0xA69B,0xA69B,0xA69B}, /* A69A */
3852   {0xA69C,0xA69C,0xA69C},  {0xA69D,0xA69D,0xA69D}, /* A69C */
3853   {0xA69E,0xA69E,0xA69E},  {0xA69F,0xA69F,0xA69F}, /* A69E */
3854   {0xA6A0,0xA6A0,0xA6A0},  {0xA6A1,0xA6A1,0xA6A1}, /* A6A0 */
3855   {0xA6A2,0xA6A2,0xA6A2},  {0xA6A3,0xA6A3,0xA6A3}, /* A6A2 */
3856   {0xA6A4,0xA6A4,0xA6A4},  {0xA6A5,0xA6A5,0xA6A5}, /* A6A4 */
3857   {0xA6A6,0xA6A6,0xA6A6},  {0xA6A7,0xA6A7,0xA6A7}, /* A6A6 */
3858   {0xA6A8,0xA6A8,0xA6A8},  {0xA6A9,0xA6A9,0xA6A9}, /* A6A8 */
3859   {0xA6AA,0xA6AA,0xA6AA},  {0xA6AB,0xA6AB,0xA6AB}, /* A6AA */
3860   {0xA6AC,0xA6AC,0xA6AC},  {0xA6AD,0xA6AD,0xA6AD}, /* A6AC */
3861   {0xA6AE,0xA6AE,0xA6AE},  {0xA6AF,0xA6AF,0xA6AF}, /* A6AE */
3862   {0xA6B0,0xA6B0,0xA6B0},  {0xA6B1,0xA6B1,0xA6B1}, /* A6B0 */
3863   {0xA6B2,0xA6B2,0xA6B2},  {0xA6B3,0xA6B3,0xA6B3}, /* A6B2 */
3864   {0xA6B4,0xA6B4,0xA6B4},  {0xA6B5,0xA6B5,0xA6B5}, /* A6B4 */
3865   {0xA6B6,0xA6B6,0xA6B6},  {0xA6B7,0xA6B7,0xA6B7}, /* A6B6 */
3866   {0xA6B8,0xA6B8,0xA6B8},  {0xA6B9,0xA6B9,0xA6B9}, /* A6B8 */
3867   {0xA6BA,0xA6BA,0xA6BA},  {0xA6BB,0xA6BB,0xA6BB}, /* A6BA */
3868   {0xA6BC,0xA6BC,0xA6BC},  {0xA6BD,0xA6BD,0xA6BD}, /* A6BC */
3869   {0xA6BE,0xA6BE,0xA6BE},  {0xA6BF,0xA6BF,0xA6BF}, /* A6BE */
3870   {0xA6C0,0xA6C0,0xA6C0},  {0xA6C1,0xA6C1,0xA6C1}, /* A6C0 */
3871   {0xA6C2,0xA6C2,0xA6C2},  {0xA6C3,0xA6C3,0xA6C3}, /* A6C2 */
3872   {0xA6C4,0xA6C4,0xA6C4},  {0xA6C5,0xA6C5,0xA6C5}, /* A6C4 */
3873   {0xA6C6,0xA6C6,0xA6C6},  {0xA6C7,0xA6C7,0xA6C7}, /* A6C6 */
3874   {0xA6C8,0xA6C8,0xA6C8},  {0xA6C9,0xA6C9,0xA6C9}, /* A6C8 */
3875   {0xA6CA,0xA6CA,0xA6CA},  {0xA6CB,0xA6CB,0xA6CB}, /* A6CA */
3876   {0xA6CC,0xA6CC,0xA6CC},  {0xA6CD,0xA6CD,0xA6CD}, /* A6CC */
3877   {0xA6CE,0xA6CE,0xA6CE},  {0xA6CF,0xA6CF,0xA6CF}, /* A6CE */
3878   {0xA6D0,0xA6D0,0xA6D0},  {0xA6D1,0xA6D1,0xA6D1}, /* A6D0 */
3879   {0xA6D2,0xA6D2,0xA6D2},  {0xA6D3,0xA6D3,0xA6D3}, /* A6D2 */
3880   {0xA6D4,0xA6D4,0xA6D4},  {0xA6D5,0xA6D5,0xA6D5}, /* A6D4 */
3881   {0xA6D6,0xA6D6,0xA6D6},  {0xA6D7,0xA6D7,0xA6D7}, /* A6D6 */
3882   {0xA6D8,0xA6D8,0xA6D8},  {0xA6D9,0xA6D9,0xA6D9}, /* A6D8 */
3883   {0xA6DA,0xA6DA,0xA6DA},  {0xA6DB,0xA6DB,0xA6DB}, /* A6DA */
3884   {0xA6DC,0xA6DC,0xA6DC},  {0xA6DD,0xA6DD,0xA6DD}, /* A6DC */
3885   {0xA6DE,0xA6DE,0xA6DE},  {0xA6DF,0xA6DF,0xA6DF}, /* A6DE */
3886   {0xA6E0,0xA6E0,0xA6E0},  {0xA6E1,0xA6E1,0xA6E1}, /* A6E0 */
3887   {0xA6E2,0xA6E2,0xA6E2},  {0xA6E3,0xA6E3,0xA6E3}, /* A6E2 */
3888   {0xA6E4,0xA6E4,0xA6E4},  {0xA6E5,0xA6E5,0xA6E5}, /* A6E4 */
3889   {0xA6E6,0xA6E6,0xA6E6},  {0xA6E7,0xA6E7,0xA6E7}, /* A6E6 */
3890   {0xA6E8,0xA6E8,0xA6E8},  {0xA6E9,0xA6E9,0xA6E9}, /* A6E8 */
3891   {0xA6EA,0xA6EA,0xA6EA},  {0xA6EB,0xA6EB,0xA6EB}, /* A6EA */
3892   {0xA6EC,0xA6EC,0xA6EC},  {0xA6ED,0xA6ED,0xA6ED}, /* A6EC */
3893   {0xA6EE,0xA6EE,0xA6EE},  {0xA6EF,0xA6EF,0xA6EF}, /* A6EE */
3894   {0xA6F0,0xA6F0,0xA6F0},  {0xA6F1,0xA6F1,0xA6F1}, /* A6F0 */
3895   {0xA6F2,0xA6F2,0xA6F2},  {0xA6F3,0xA6F3,0xA6F3}, /* A6F2 */
3896   {0xA6F4,0xA6F4,0xA6F4},  {0xA6F5,0xA6F5,0xA6F5}, /* A6F4 */
3897   {0xA6F6,0xA6F6,0xA6F6},  {0xA6F7,0xA6F7,0xA6F7}, /* A6F6 */
3898   {0xA6F8,0xA6F8,0xA6F8},  {0xA6F9,0xA6F9,0xA6F9}, /* A6F8 */
3899   {0xA6FA,0xA6FA,0xA6FA},  {0xA6FB,0xA6FB,0xA6FB}, /* A6FA */
3900   {0xA6FC,0xA6FC,0xA6FC},  {0xA6FD,0xA6FD,0xA6FD}, /* A6FC */
3901   {0xA6FE,0xA6FE,0xA6FE},  {0xA6FF,0xA6FF,0xA6FF} /* A6FE */
3902 };
3903 
3904 static const MY_UNICASE_CHARACTER u520pA7[]={
3905   {0xA700,0xA700,0xA700},  {0xA701,0xA701,0xA701}, /* A700 */
3906   {0xA702,0xA702,0xA702},  {0xA703,0xA703,0xA703}, /* A702 */
3907   {0xA704,0xA704,0xA704},  {0xA705,0xA705,0xA705}, /* A704 */
3908   {0xA706,0xA706,0xA706},  {0xA707,0xA707,0xA707}, /* A706 */
3909   {0xA708,0xA708,0xA708},  {0xA709,0xA709,0xA709}, /* A708 */
3910   {0xA70A,0xA70A,0xA70A},  {0xA70B,0xA70B,0xA70B}, /* A70A */
3911   {0xA70C,0xA70C,0xA70C},  {0xA70D,0xA70D,0xA70D}, /* A70C */
3912   {0xA70E,0xA70E,0xA70E},  {0xA70F,0xA70F,0xA70F}, /* A70E */
3913   {0xA710,0xA710,0xA710},  {0xA711,0xA711,0xA711}, /* A710 */
3914   {0xA712,0xA712,0xA712},  {0xA713,0xA713,0xA713}, /* A712 */
3915   {0xA714,0xA714,0xA714},  {0xA715,0xA715,0xA715}, /* A714 */
3916   {0xA716,0xA716,0xA716},  {0xA717,0xA717,0xA717}, /* A716 */
3917   {0xA718,0xA718,0xA718},  {0xA719,0xA719,0xA719}, /* A718 */
3918   {0xA71A,0xA71A,0xA71A},  {0xA71B,0xA71B,0xA71B}, /* A71A */
3919   {0xA71C,0xA71C,0xA71C},  {0xA71D,0xA71D,0xA71D}, /* A71C */
3920   {0xA71E,0xA71E,0xA71E},  {0xA71F,0xA71F,0xA71F}, /* A71E */
3921   {0xA720,0xA720,0xA720},  {0xA721,0xA721,0xA721}, /* A720 */
3922   {0xA722,0xA723,0xA722},  {0xA722,0xA723,0xA722}, /* A722 */
3923   {0xA724,0xA725,0xA724},  {0xA724,0xA725,0xA724}, /* A724 */
3924   {0xA726,0xA727,0xA726},  {0xA726,0xA727,0xA726}, /* A726 */
3925   {0xA728,0xA729,0xA728},  {0xA728,0xA729,0xA728}, /* A728 */
3926   {0xA72A,0xA72B,0xA72A},  {0xA72A,0xA72B,0xA72A}, /* A72A */
3927   {0xA72C,0xA72D,0xA72C},  {0xA72C,0xA72D,0xA72C}, /* A72C */
3928   {0xA72E,0xA72F,0xA72E},  {0xA72E,0xA72F,0xA72E}, /* A72E */
3929   {0xA730,0xA730,0xA730},  {0xA731,0xA731,0xA731}, /* A730 */
3930   {0xA732,0xA733,0xA732},  {0xA732,0xA733,0xA732}, /* A732 */
3931   {0xA734,0xA735,0xA734},  {0xA734,0xA735,0xA734}, /* A734 */
3932   {0xA736,0xA737,0xA736},  {0xA736,0xA737,0xA736}, /* A736 */
3933   {0xA738,0xA739,0xA738},  {0xA738,0xA739,0xA738}, /* A738 */
3934   {0xA73A,0xA73B,0xA73A},  {0xA73A,0xA73B,0xA73A}, /* A73A */
3935   {0xA73C,0xA73D,0xA73C},  {0xA73C,0xA73D,0xA73C}, /* A73C */
3936   {0xA73E,0xA73F,0xA73E},  {0xA73E,0xA73F,0xA73E}, /* A73E */
3937   {0xA740,0xA741,0xA740},  {0xA740,0xA741,0xA740}, /* A740 */
3938   {0xA742,0xA743,0xA742},  {0xA742,0xA743,0xA742}, /* A742 */
3939   {0xA744,0xA745,0xA744},  {0xA744,0xA745,0xA744}, /* A744 */
3940   {0xA746,0xA747,0xA746},  {0xA746,0xA747,0xA746}, /* A746 */
3941   {0xA748,0xA749,0xA748},  {0xA748,0xA749,0xA748}, /* A748 */
3942   {0xA74A,0xA74B,0xA74A},  {0xA74A,0xA74B,0xA74A}, /* A74A */
3943   {0xA74C,0xA74D,0xA74C},  {0xA74C,0xA74D,0xA74C}, /* A74C */
3944   {0xA74E,0xA74F,0xA74E},  {0xA74E,0xA74F,0xA74E}, /* A74E */
3945   {0xA750,0xA751,0xA750},  {0xA750,0xA751,0xA750}, /* A750 */
3946   {0xA752,0xA753,0xA752},  {0xA752,0xA753,0xA752}, /* A752 */
3947   {0xA754,0xA755,0xA754},  {0xA754,0xA755,0xA754}, /* A754 */
3948   {0xA756,0xA757,0xA756},  {0xA756,0xA757,0xA756}, /* A756 */
3949   {0xA758,0xA759,0xA758},  {0xA758,0xA759,0xA758}, /* A758 */
3950   {0xA75A,0xA75B,0xA75A},  {0xA75A,0xA75B,0xA75A}, /* A75A */
3951   {0xA75C,0xA75D,0xA75C},  {0xA75C,0xA75D,0xA75C}, /* A75C */
3952   {0xA75E,0xA75F,0xA75E},  {0xA75E,0xA75F,0xA75E}, /* A75E */
3953   {0xA760,0xA761,0xA760},  {0xA760,0xA761,0xA760}, /* A760 */
3954   {0xA762,0xA763,0xA762},  {0xA762,0xA763,0xA762}, /* A762 */
3955   {0xA764,0xA765,0xA764},  {0xA764,0xA765,0xA764}, /* A764 */
3956   {0xA766,0xA767,0xA766},  {0xA766,0xA767,0xA766}, /* A766 */
3957   {0xA768,0xA769,0xA768},  {0xA768,0xA769,0xA768}, /* A768 */
3958   {0xA76A,0xA76B,0xA76A},  {0xA76A,0xA76B,0xA76A}, /* A76A */
3959   {0xA76C,0xA76D,0xA76C},  {0xA76C,0xA76D,0xA76C}, /* A76C */
3960   {0xA76E,0xA76F,0xA76E},  {0xA76E,0xA76F,0xA76E}, /* A76E */
3961   {0xA770,0xA770,0xA770},  {0xA771,0xA771,0xA771}, /* A770 */
3962   {0xA772,0xA772,0xA772},  {0xA773,0xA773,0xA773}, /* A772 */
3963   {0xA774,0xA774,0xA774},  {0xA775,0xA775,0xA775}, /* A774 */
3964   {0xA776,0xA776,0xA776},  {0xA777,0xA777,0xA777}, /* A776 */
3965   {0xA778,0xA778,0xA778},  {0xA779,0xA77A,0xA779}, /* A778 */
3966   {0xA779,0xA77A,0xA779},  {0xA77B,0xA77C,0xA77B}, /* A77A */
3967   {0xA77B,0xA77C,0xA77B},  {0xA77D,0x1D79,0xA77D}, /* A77C */
3968   {0xA77E,0xA77F,0xA77E},  {0xA77E,0xA77F,0xA77E}, /* A77E */
3969   {0xA780,0xA781,0xA780},  {0xA780,0xA781,0xA780}, /* A780 */
3970   {0xA782,0xA783,0xA782},  {0xA782,0xA783,0xA782}, /* A782 */
3971   {0xA784,0xA785,0xA784},  {0xA784,0xA785,0xA784}, /* A784 */
3972   {0xA786,0xA787,0xA786},  {0xA786,0xA787,0xA786}, /* A786 */
3973   {0xA788,0xA788,0xA788},  {0xA789,0xA789,0xA789}, /* A788 */
3974   {0xA78A,0xA78A,0xA78A},  {0xA78B,0xA78C,0xA78B}, /* A78A */
3975   {0xA78B,0xA78C,0xA78B},  {0xA78D,0xA78D,0xA78D}, /* A78C */
3976   {0xA78E,0xA78E,0xA78E},  {0xA78F,0xA78F,0xA78F}, /* A78E */
3977   {0xA790,0xA790,0xA790},  {0xA791,0xA791,0xA791}, /* A790 */
3978   {0xA792,0xA792,0xA792},  {0xA793,0xA793,0xA793}, /* A792 */
3979   {0xA794,0xA794,0xA794},  {0xA795,0xA795,0xA795}, /* A794 */
3980   {0xA796,0xA796,0xA796},  {0xA797,0xA797,0xA797}, /* A796 */
3981   {0xA798,0xA798,0xA798},  {0xA799,0xA799,0xA799}, /* A798 */
3982   {0xA79A,0xA79A,0xA79A},  {0xA79B,0xA79B,0xA79B}, /* A79A */
3983   {0xA79C,0xA79C,0xA79C},  {0xA79D,0xA79D,0xA79D}, /* A79C */
3984   {0xA79E,0xA79E,0xA79E},  {0xA79F,0xA79F,0xA79F}, /* A79E */
3985   {0xA7A0,0xA7A0,0xA7A0},  {0xA7A1,0xA7A1,0xA7A1}, /* A7A0 */
3986   {0xA7A2,0xA7A2,0xA7A2},  {0xA7A3,0xA7A3,0xA7A3}, /* A7A2 */
3987   {0xA7A4,0xA7A4,0xA7A4},  {0xA7A5,0xA7A5,0xA7A5}, /* A7A4 */
3988   {0xA7A6,0xA7A6,0xA7A6},  {0xA7A7,0xA7A7,0xA7A7}, /* A7A6 */
3989   {0xA7A8,0xA7A8,0xA7A8},  {0xA7A9,0xA7A9,0xA7A9}, /* A7A8 */
3990   {0xA7AA,0xA7AA,0xA7AA},  {0xA7AB,0xA7AB,0xA7AB}, /* A7AA */
3991   {0xA7AC,0xA7AC,0xA7AC},  {0xA7AD,0xA7AD,0xA7AD}, /* A7AC */
3992   {0xA7AE,0xA7AE,0xA7AE},  {0xA7AF,0xA7AF,0xA7AF}, /* A7AE */
3993   {0xA7B0,0xA7B0,0xA7B0},  {0xA7B1,0xA7B1,0xA7B1}, /* A7B0 */
3994   {0xA7B2,0xA7B2,0xA7B2},  {0xA7B3,0xA7B3,0xA7B3}, /* A7B2 */
3995   {0xA7B4,0xA7B4,0xA7B4},  {0xA7B5,0xA7B5,0xA7B5}, /* A7B4 */
3996   {0xA7B6,0xA7B6,0xA7B6},  {0xA7B7,0xA7B7,0xA7B7}, /* A7B6 */
3997   {0xA7B8,0xA7B8,0xA7B8},  {0xA7B9,0xA7B9,0xA7B9}, /* A7B8 */
3998   {0xA7BA,0xA7BA,0xA7BA},  {0xA7BB,0xA7BB,0xA7BB}, /* A7BA */
3999   {0xA7BC,0xA7BC,0xA7BC},  {0xA7BD,0xA7BD,0xA7BD}, /* A7BC */
4000   {0xA7BE,0xA7BE,0xA7BE},  {0xA7BF,0xA7BF,0xA7BF}, /* A7BE */
4001   {0xA7C0,0xA7C0,0xA7C0},  {0xA7C1,0xA7C1,0xA7C1}, /* A7C0 */
4002   {0xA7C2,0xA7C2,0xA7C2},  {0xA7C3,0xA7C3,0xA7C3}, /* A7C2 */
4003   {0xA7C4,0xA7C4,0xA7C4},  {0xA7C5,0xA7C5,0xA7C5}, /* A7C4 */
4004   {0xA7C6,0xA7C6,0xA7C6},  {0xA7C7,0xA7C7,0xA7C7}, /* A7C6 */
4005   {0xA7C8,0xA7C8,0xA7C8},  {0xA7C9,0xA7C9,0xA7C9}, /* A7C8 */
4006   {0xA7CA,0xA7CA,0xA7CA},  {0xA7CB,0xA7CB,0xA7CB}, /* A7CA */
4007   {0xA7CC,0xA7CC,0xA7CC},  {0xA7CD,0xA7CD,0xA7CD}, /* A7CC */
4008   {0xA7CE,0xA7CE,0xA7CE},  {0xA7CF,0xA7CF,0xA7CF}, /* A7CE */
4009   {0xA7D0,0xA7D0,0xA7D0},  {0xA7D1,0xA7D1,0xA7D1}, /* A7D0 */
4010   {0xA7D2,0xA7D2,0xA7D2},  {0xA7D3,0xA7D3,0xA7D3}, /* A7D2 */
4011   {0xA7D4,0xA7D4,0xA7D4},  {0xA7D5,0xA7D5,0xA7D5}, /* A7D4 */
4012   {0xA7D6,0xA7D6,0xA7D6},  {0xA7D7,0xA7D7,0xA7D7}, /* A7D6 */
4013   {0xA7D8,0xA7D8,0xA7D8},  {0xA7D9,0xA7D9,0xA7D9}, /* A7D8 */
4014   {0xA7DA,0xA7DA,0xA7DA},  {0xA7DB,0xA7DB,0xA7DB}, /* A7DA */
4015   {0xA7DC,0xA7DC,0xA7DC},  {0xA7DD,0xA7DD,0xA7DD}, /* A7DC */
4016   {0xA7DE,0xA7DE,0xA7DE},  {0xA7DF,0xA7DF,0xA7DF}, /* A7DE */
4017   {0xA7E0,0xA7E0,0xA7E0},  {0xA7E1,0xA7E1,0xA7E1}, /* A7E0 */
4018   {0xA7E2,0xA7E2,0xA7E2},  {0xA7E3,0xA7E3,0xA7E3}, /* A7E2 */
4019   {0xA7E4,0xA7E4,0xA7E4},  {0xA7E5,0xA7E5,0xA7E5}, /* A7E4 */
4020   {0xA7E6,0xA7E6,0xA7E6},  {0xA7E7,0xA7E7,0xA7E7}, /* A7E6 */
4021   {0xA7E8,0xA7E8,0xA7E8},  {0xA7E9,0xA7E9,0xA7E9}, /* A7E8 */
4022   {0xA7EA,0xA7EA,0xA7EA},  {0xA7EB,0xA7EB,0xA7EB}, /* A7EA */
4023   {0xA7EC,0xA7EC,0xA7EC},  {0xA7ED,0xA7ED,0xA7ED}, /* A7EC */
4024   {0xA7EE,0xA7EE,0xA7EE},  {0xA7EF,0xA7EF,0xA7EF}, /* A7EE */
4025   {0xA7F0,0xA7F0,0xA7F0},  {0xA7F1,0xA7F1,0xA7F1}, /* A7F0 */
4026   {0xA7F2,0xA7F2,0xA7F2},  {0xA7F3,0xA7F3,0xA7F3}, /* A7F2 */
4027   {0xA7F4,0xA7F4,0xA7F4},  {0xA7F5,0xA7F5,0xA7F5}, /* A7F4 */
4028   {0xA7F6,0xA7F6,0xA7F6},  {0xA7F7,0xA7F7,0xA7F7}, /* A7F6 */
4029   {0xA7F8,0xA7F8,0xA7F8},  {0xA7F9,0xA7F9,0xA7F9}, /* A7F8 */
4030   {0xA7FA,0xA7FA,0xA7FA},  {0xA7FB,0xA7FB,0xA7FB}, /* A7FA */
4031   {0xA7FC,0xA7FC,0xA7FC},  {0xA7FD,0xA7FD,0xA7FD}, /* A7FC */
4032   {0xA7FE,0xA7FE,0xA7FE},  {0xA7FF,0xA7FF,0xA7FF} /* A7FE */
4033 };
4034 
4035 static const MY_UNICASE_CHARACTER u520pFF[]={
4036   {0xFF00,0xFF00,0xFF00},  {0xFF01,0xFF01,0xFF01}, /* FF00 */
4037   {0xFF02,0xFF02,0xFF02},  {0xFF03,0xFF03,0xFF03}, /* FF02 */
4038   {0xFF04,0xFF04,0xFF04},  {0xFF05,0xFF05,0xFF05}, /* FF04 */
4039   {0xFF06,0xFF06,0xFF06},  {0xFF07,0xFF07,0xFF07}, /* FF06 */
4040   {0xFF08,0xFF08,0xFF08},  {0xFF09,0xFF09,0xFF09}, /* FF08 */
4041   {0xFF0A,0xFF0A,0xFF0A},  {0xFF0B,0xFF0B,0xFF0B}, /* FF0A */
4042   {0xFF0C,0xFF0C,0xFF0C},  {0xFF0D,0xFF0D,0xFF0D}, /* FF0C */
4043   {0xFF0E,0xFF0E,0xFF0E},  {0xFF0F,0xFF0F,0xFF0F}, /* FF0E */
4044   {0xFF10,0xFF10,0xFF10},  {0xFF11,0xFF11,0xFF11}, /* FF10 */
4045   {0xFF12,0xFF12,0xFF12},  {0xFF13,0xFF13,0xFF13}, /* FF12 */
4046   {0xFF14,0xFF14,0xFF14},  {0xFF15,0xFF15,0xFF15}, /* FF14 */
4047   {0xFF16,0xFF16,0xFF16},  {0xFF17,0xFF17,0xFF17}, /* FF16 */
4048   {0xFF18,0xFF18,0xFF18},  {0xFF19,0xFF19,0xFF19}, /* FF18 */
4049   {0xFF1A,0xFF1A,0xFF1A},  {0xFF1B,0xFF1B,0xFF1B}, /* FF1A */
4050   {0xFF1C,0xFF1C,0xFF1C},  {0xFF1D,0xFF1D,0xFF1D}, /* FF1C */
4051   {0xFF1E,0xFF1E,0xFF1E},  {0xFF1F,0xFF1F,0xFF1F}, /* FF1E */
4052   {0xFF20,0xFF20,0xFF20},  {0xFF21,0xFF41,0xFF21}, /* FF20 */
4053   {0xFF22,0xFF42,0xFF22},  {0xFF23,0xFF43,0xFF23}, /* FF22 */
4054   {0xFF24,0xFF44,0xFF24},  {0xFF25,0xFF45,0xFF25}, /* FF24 */
4055   {0xFF26,0xFF46,0xFF26},  {0xFF27,0xFF47,0xFF27}, /* FF26 */
4056   {0xFF28,0xFF48,0xFF28},  {0xFF29,0xFF49,0xFF29}, /* FF28 */
4057   {0xFF2A,0xFF4A,0xFF2A},  {0xFF2B,0xFF4B,0xFF2B}, /* FF2A */
4058   {0xFF2C,0xFF4C,0xFF2C},  {0xFF2D,0xFF4D,0xFF2D}, /* FF2C */
4059   {0xFF2E,0xFF4E,0xFF2E},  {0xFF2F,0xFF4F,0xFF2F}, /* FF2E */
4060   {0xFF30,0xFF50,0xFF30},  {0xFF31,0xFF51,0xFF31}, /* FF30 */
4061   {0xFF32,0xFF52,0xFF32},  {0xFF33,0xFF53,0xFF33}, /* FF32 */
4062   {0xFF34,0xFF54,0xFF34},  {0xFF35,0xFF55,0xFF35}, /* FF34 */
4063   {0xFF36,0xFF56,0xFF36},  {0xFF37,0xFF57,0xFF37}, /* FF36 */
4064   {0xFF38,0xFF58,0xFF38},  {0xFF39,0xFF59,0xFF39}, /* FF38 */
4065   {0xFF3A,0xFF5A,0xFF3A},  {0xFF3B,0xFF3B,0xFF3B}, /* FF3A */
4066   {0xFF3C,0xFF3C,0xFF3C},  {0xFF3D,0xFF3D,0xFF3D}, /* FF3C */
4067   {0xFF3E,0xFF3E,0xFF3E},  {0xFF3F,0xFF3F,0xFF3F}, /* FF3E */
4068   {0xFF40,0xFF40,0xFF40},  {0xFF21,0xFF41,0xFF21}, /* FF40 */
4069   {0xFF22,0xFF42,0xFF22},  {0xFF23,0xFF43,0xFF23}, /* FF42 */
4070   {0xFF24,0xFF44,0xFF24},  {0xFF25,0xFF45,0xFF25}, /* FF44 */
4071   {0xFF26,0xFF46,0xFF26},  {0xFF27,0xFF47,0xFF27}, /* FF46 */
4072   {0xFF28,0xFF48,0xFF28},  {0xFF29,0xFF49,0xFF29}, /* FF48 */
4073   {0xFF2A,0xFF4A,0xFF2A},  {0xFF2B,0xFF4B,0xFF2B}, /* FF4A */
4074   {0xFF2C,0xFF4C,0xFF2C},  {0xFF2D,0xFF4D,0xFF2D}, /* FF4C */
4075   {0xFF2E,0xFF4E,0xFF2E},  {0xFF2F,0xFF4F,0xFF2F}, /* FF4E */
4076   {0xFF30,0xFF50,0xFF30},  {0xFF31,0xFF51,0xFF31}, /* FF50 */
4077   {0xFF32,0xFF52,0xFF32},  {0xFF33,0xFF53,0xFF33}, /* FF52 */
4078   {0xFF34,0xFF54,0xFF34},  {0xFF35,0xFF55,0xFF35}, /* FF54 */
4079   {0xFF36,0xFF56,0xFF36},  {0xFF37,0xFF57,0xFF37}, /* FF56 */
4080   {0xFF38,0xFF58,0xFF38},  {0xFF39,0xFF59,0xFF39}, /* FF58 */
4081   {0xFF3A,0xFF5A,0xFF3A},  {0xFF5B,0xFF5B,0xFF5B}, /* FF5A */
4082   {0xFF5C,0xFF5C,0xFF5C},  {0xFF5D,0xFF5D,0xFF5D}, /* FF5C */
4083   {0xFF5E,0xFF5E,0xFF5E},  {0xFF5F,0xFF5F,0xFF5F}, /* FF5E */
4084   {0xFF60,0xFF60,0xFF60},  {0xFF61,0xFF61,0xFF61}, /* FF60 */
4085   {0xFF62,0xFF62,0xFF62},  {0xFF63,0xFF63,0xFF63}, /* FF62 */
4086   {0xFF64,0xFF64,0xFF64},  {0xFF65,0xFF65,0xFF65}, /* FF64 */
4087   {0xFF66,0xFF66,0xFF66},  {0xFF67,0xFF67,0xFF67}, /* FF66 */
4088   {0xFF68,0xFF68,0xFF68},  {0xFF69,0xFF69,0xFF69}, /* FF68 */
4089   {0xFF6A,0xFF6A,0xFF6A},  {0xFF6B,0xFF6B,0xFF6B}, /* FF6A */
4090   {0xFF6C,0xFF6C,0xFF6C},  {0xFF6D,0xFF6D,0xFF6D}, /* FF6C */
4091   {0xFF6E,0xFF6E,0xFF6E},  {0xFF6F,0xFF6F,0xFF6F}, /* FF6E */
4092   {0xFF70,0xFF70,0xFF70},  {0xFF71,0xFF71,0xFF71}, /* FF70 */
4093   {0xFF72,0xFF72,0xFF72},  {0xFF73,0xFF73,0xFF73}, /* FF72 */
4094   {0xFF74,0xFF74,0xFF74},  {0xFF75,0xFF75,0xFF75}, /* FF74 */
4095   {0xFF76,0xFF76,0xFF76},  {0xFF77,0xFF77,0xFF77}, /* FF76 */
4096   {0xFF78,0xFF78,0xFF78},  {0xFF79,0xFF79,0xFF79}, /* FF78 */
4097   {0xFF7A,0xFF7A,0xFF7A},  {0xFF7B,0xFF7B,0xFF7B}, /* FF7A */
4098   {0xFF7C,0xFF7C,0xFF7C},  {0xFF7D,0xFF7D,0xFF7D}, /* FF7C */
4099   {0xFF7E,0xFF7E,0xFF7E},  {0xFF7F,0xFF7F,0xFF7F}, /* FF7E */
4100   {0xFF80,0xFF80,0xFF80},  {0xFF81,0xFF81,0xFF81}, /* FF80 */
4101   {0xFF82,0xFF82,0xFF82},  {0xFF83,0xFF83,0xFF83}, /* FF82 */
4102   {0xFF84,0xFF84,0xFF84},  {0xFF85,0xFF85,0xFF85}, /* FF84 */
4103   {0xFF86,0xFF86,0xFF86},  {0xFF87,0xFF87,0xFF87}, /* FF86 */
4104   {0xFF88,0xFF88,0xFF88},  {0xFF89,0xFF89,0xFF89}, /* FF88 */
4105   {0xFF8A,0xFF8A,0xFF8A},  {0xFF8B,0xFF8B,0xFF8B}, /* FF8A */
4106   {0xFF8C,0xFF8C,0xFF8C},  {0xFF8D,0xFF8D,0xFF8D}, /* FF8C */
4107   {0xFF8E,0xFF8E,0xFF8E},  {0xFF8F,0xFF8F,0xFF8F}, /* FF8E */
4108   {0xFF90,0xFF90,0xFF90},  {0xFF91,0xFF91,0xFF91}, /* FF90 */
4109   {0xFF92,0xFF92,0xFF92},  {0xFF93,0xFF93,0xFF93}, /* FF92 */
4110   {0xFF94,0xFF94,0xFF94},  {0xFF95,0xFF95,0xFF95}, /* FF94 */
4111   {0xFF96,0xFF96,0xFF96},  {0xFF97,0xFF97,0xFF97}, /* FF96 */
4112   {0xFF98,0xFF98,0xFF98},  {0xFF99,0xFF99,0xFF99}, /* FF98 */
4113   {0xFF9A,0xFF9A,0xFF9A},  {0xFF9B,0xFF9B,0xFF9B}, /* FF9A */
4114   {0xFF9C,0xFF9C,0xFF9C},  {0xFF9D,0xFF9D,0xFF9D}, /* FF9C */
4115   {0xFF9E,0xFF9E,0xFF9E},  {0xFF9F,0xFF9F,0xFF9F}, /* FF9E */
4116   {0xFFA0,0xFFA0,0xFFA0},  {0xFFA1,0xFFA1,0xFFA1}, /* FFA0 */
4117   {0xFFA2,0xFFA2,0xFFA2},  {0xFFA3,0xFFA3,0xFFA3}, /* FFA2 */
4118   {0xFFA4,0xFFA4,0xFFA4},  {0xFFA5,0xFFA5,0xFFA5}, /* FFA4 */
4119   {0xFFA6,0xFFA6,0xFFA6},  {0xFFA7,0xFFA7,0xFFA7}, /* FFA6 */
4120   {0xFFA8,0xFFA8,0xFFA8},  {0xFFA9,0xFFA9,0xFFA9}, /* FFA8 */
4121   {0xFFAA,0xFFAA,0xFFAA},  {0xFFAB,0xFFAB,0xFFAB}, /* FFAA */
4122   {0xFFAC,0xFFAC,0xFFAC},  {0xFFAD,0xFFAD,0xFFAD}, /* FFAC */
4123   {0xFFAE,0xFFAE,0xFFAE},  {0xFFAF,0xFFAF,0xFFAF}, /* FFAE */
4124   {0xFFB0,0xFFB0,0xFFB0},  {0xFFB1,0xFFB1,0xFFB1}, /* FFB0 */
4125   {0xFFB2,0xFFB2,0xFFB2},  {0xFFB3,0xFFB3,0xFFB3}, /* FFB2 */
4126   {0xFFB4,0xFFB4,0xFFB4},  {0xFFB5,0xFFB5,0xFFB5}, /* FFB4 */
4127   {0xFFB6,0xFFB6,0xFFB6},  {0xFFB7,0xFFB7,0xFFB7}, /* FFB6 */
4128   {0xFFB8,0xFFB8,0xFFB8},  {0xFFB9,0xFFB9,0xFFB9}, /* FFB8 */
4129   {0xFFBA,0xFFBA,0xFFBA},  {0xFFBB,0xFFBB,0xFFBB}, /* FFBA */
4130   {0xFFBC,0xFFBC,0xFFBC},  {0xFFBD,0xFFBD,0xFFBD}, /* FFBC */
4131   {0xFFBE,0xFFBE,0xFFBE},  {0xFFBF,0xFFBF,0xFFBF}, /* FFBE */
4132   {0xFFC0,0xFFC0,0xFFC0},  {0xFFC1,0xFFC1,0xFFC1}, /* FFC0 */
4133   {0xFFC2,0xFFC2,0xFFC2},  {0xFFC3,0xFFC3,0xFFC3}, /* FFC2 */
4134   {0xFFC4,0xFFC4,0xFFC4},  {0xFFC5,0xFFC5,0xFFC5}, /* FFC4 */
4135   {0xFFC6,0xFFC6,0xFFC6},  {0xFFC7,0xFFC7,0xFFC7}, /* FFC6 */
4136   {0xFFC8,0xFFC8,0xFFC8},  {0xFFC9,0xFFC9,0xFFC9}, /* FFC8 */
4137   {0xFFCA,0xFFCA,0xFFCA},  {0xFFCB,0xFFCB,0xFFCB}, /* FFCA */
4138   {0xFFCC,0xFFCC,0xFFCC},  {0xFFCD,0xFFCD,0xFFCD}, /* FFCC */
4139   {0xFFCE,0xFFCE,0xFFCE},  {0xFFCF,0xFFCF,0xFFCF}, /* FFCE */
4140   {0xFFD0,0xFFD0,0xFFD0},  {0xFFD1,0xFFD1,0xFFD1}, /* FFD0 */
4141   {0xFFD2,0xFFD2,0xFFD2},  {0xFFD3,0xFFD3,0xFFD3}, /* FFD2 */
4142   {0xFFD4,0xFFD4,0xFFD4},  {0xFFD5,0xFFD5,0xFFD5}, /* FFD4 */
4143   {0xFFD6,0xFFD6,0xFFD6},  {0xFFD7,0xFFD7,0xFFD7}, /* FFD6 */
4144   {0xFFD8,0xFFD8,0xFFD8},  {0xFFD9,0xFFD9,0xFFD9}, /* FFD8 */
4145   {0xFFDA,0xFFDA,0xFFDA},  {0xFFDB,0xFFDB,0xFFDB}, /* FFDA */
4146   {0xFFDC,0xFFDC,0xFFDC},  {0xFFDD,0xFFDD,0xFFDD}, /* FFDC */
4147   {0xFFDE,0xFFDE,0xFFDE},  {0xFFDF,0xFFDF,0xFFDF}, /* FFDE */
4148   {0xFFE0,0xFFE0,0xFFE0},  {0xFFE1,0xFFE1,0xFFE1}, /* FFE0 */
4149   {0xFFE2,0xFFE2,0xFFE2},  {0xFFE3,0xFFE3,0xFFE3}, /* FFE2 */
4150   {0xFFE4,0xFFE4,0xFFE4},  {0xFFE5,0xFFE5,0xFFE5}, /* FFE4 */
4151   {0xFFE6,0xFFE6,0xFFE6},  {0xFFE7,0xFFE7,0xFFE7}, /* FFE6 */
4152   {0xFFE8,0xFFE8,0xFFE8},  {0xFFE9,0xFFE9,0xFFE9}, /* FFE8 */
4153   {0xFFEA,0xFFEA,0xFFEA},  {0xFFEB,0xFFEB,0xFFEB}, /* FFEA */
4154   {0xFFEC,0xFFEC,0xFFEC},  {0xFFED,0xFFED,0xFFED}, /* FFEC */
4155   {0xFFEE,0xFFEE,0xFFEE},  {0xFFEF,0xFFEF,0xFFEF}, /* FFEE */
4156   {0xFFF0,0xFFF0,0xFFF0},  {0xFFF1,0xFFF1,0xFFF1}, /* FFF0 */
4157   {0xFFF2,0xFFF2,0xFFF2},  {0xFFF3,0xFFF3,0xFFF3}, /* FFF2 */
4158   {0xFFF4,0xFFF4,0xFFF4},  {0xFFF5,0xFFF5,0xFFF5}, /* FFF4 */
4159   {0xFFF6,0xFFF6,0xFFF6},  {0xFFF7,0xFFF7,0xFFF7}, /* FFF6 */
4160   {0xFFF8,0xFFF8,0xFFF8},  {0xFFF9,0xFFF9,0xFFF9}, /* FFF8 */
4161   {0xFFFA,0xFFFA,0xFFFA},  {0xFFFB,0xFFFB,0xFFFB}, /* FFFA */
4162   {0xFFFC,0xFFFC,0xFFFC},  {0xFFFD,0xFFFD,0xFFFD}, /* FFFC */
4163   {0xFFFE,0xFFFE,0xFFFE},  {0xFFFF,0xFFFF,0xFFFF} /* FFFE */
4164 };
4165 
4166 static const MY_UNICASE_CHARACTER u520p104[]={
4167   {0x10400,0x10428,0x10400},  {0x10401,0x10429,0x10401}, /* 10400 */
4168   {0x10402,0x1042A,0x10402},  {0x10403,0x1042B,0x10403}, /* 10402 */
4169   {0x10404,0x1042C,0x10404},  {0x10405,0x1042D,0x10405}, /* 10404 */
4170   {0x10406,0x1042E,0x10406},  {0x10407,0x1042F,0x10407}, /* 10406 */
4171   {0x10408,0x10430,0x10408},  {0x10409,0x10431,0x10409}, /* 10408 */
4172   {0x1040A,0x10432,0x1040A},  {0x1040B,0x10433,0x1040B}, /* 1040A */
4173   {0x1040C,0x10434,0x1040C},  {0x1040D,0x10435,0x1040D}, /* 1040C */
4174   {0x1040E,0x10436,0x1040E},  {0x1040F,0x10437,0x1040F}, /* 1040E */
4175   {0x10410,0x10438,0x10410},  {0x10411,0x10439,0x10411}, /* 10410 */
4176   {0x10412,0x1043A,0x10412},  {0x10413,0x1043B,0x10413}, /* 10412 */
4177   {0x10414,0x1043C,0x10414},  {0x10415,0x1043D,0x10415}, /* 10414 */
4178   {0x10416,0x1043E,0x10416},  {0x10417,0x1043F,0x10417}, /* 10416 */
4179   {0x10418,0x10440,0x10418},  {0x10419,0x10441,0x10419}, /* 10418 */
4180   {0x1041A,0x10442,0x1041A},  {0x1041B,0x10443,0x1041B}, /* 1041A */
4181   {0x1041C,0x10444,0x1041C},  {0x1041D,0x10445,0x1041D}, /* 1041C */
4182   {0x1041E,0x10446,0x1041E},  {0x1041F,0x10447,0x1041F}, /* 1041E */
4183   {0x10420,0x10448,0x10420},  {0x10421,0x10449,0x10421}, /* 10420 */
4184   {0x10422,0x1044A,0x10422},  {0x10423,0x1044B,0x10423}, /* 10422 */
4185   {0x10424,0x1044C,0x10424},  {0x10425,0x1044D,0x10425}, /* 10424 */
4186   {0x10426,0x1044E,0x10426},  {0x10427,0x1044F,0x10427}, /* 10426 */
4187   {0x10400,0x10428,0x10400},  {0x10401,0x10429,0x10401}, /* 10428 */
4188   {0x10402,0x1042A,0x10402},  {0x10403,0x1042B,0x10403}, /* 1042A */
4189   {0x10404,0x1042C,0x10404},  {0x10405,0x1042D,0x10405}, /* 1042C */
4190   {0x10406,0x1042E,0x10406},  {0x10407,0x1042F,0x10407}, /* 1042E */
4191   {0x10408,0x10430,0x10408},  {0x10409,0x10431,0x10409}, /* 10430 */
4192   {0x1040A,0x10432,0x1040A},  {0x1040B,0x10433,0x1040B}, /* 10432 */
4193   {0x1040C,0x10434,0x1040C},  {0x1040D,0x10435,0x1040D}, /* 10434 */
4194   {0x1040E,0x10436,0x1040E},  {0x1040F,0x10437,0x1040F}, /* 10436 */
4195   {0x10410,0x10438,0x10410},  {0x10411,0x10439,0x10411}, /* 10438 */
4196   {0x10412,0x1043A,0x10412},  {0x10413,0x1043B,0x10413}, /* 1043A */
4197   {0x10414,0x1043C,0x10414},  {0x10415,0x1043D,0x10415}, /* 1043C */
4198   {0x10416,0x1043E,0x10416},  {0x10417,0x1043F,0x10417}, /* 1043E */
4199   {0x10418,0x10440,0x10418},  {0x10419,0x10441,0x10419}, /* 10440 */
4200   {0x1041A,0x10442,0x1041A},  {0x1041B,0x10443,0x1041B}, /* 10442 */
4201   {0x1041C,0x10444,0x1041C},  {0x1041D,0x10445,0x1041D}, /* 10444 */
4202   {0x1041E,0x10446,0x1041E},  {0x1041F,0x10447,0x1041F}, /* 10446 */
4203   {0x10420,0x10448,0x10420},  {0x10421,0x10449,0x10421}, /* 10448 */
4204   {0x10422,0x1044A,0x10422},  {0x10423,0x1044B,0x10423}, /* 1044A */
4205   {0x10424,0x1044C,0x10424},  {0x10425,0x1044D,0x10425}, /* 1044C */
4206   {0x10426,0x1044E,0x10426},  {0x10427,0x1044F,0x10427}, /* 1044E */
4207   {0x10450,0x10450,0x10450},  {0x10451,0x10451,0x10451}, /* 10450 */
4208   {0x10452,0x10452,0x10452},  {0x10453,0x10453,0x10453}, /* 10452 */
4209   {0x10454,0x10454,0x10454},  {0x10455,0x10455,0x10455}, /* 10454 */
4210   {0x10456,0x10456,0x10456},  {0x10457,0x10457,0x10457}, /* 10456 */
4211   {0x10458,0x10458,0x10458},  {0x10459,0x10459,0x10459}, /* 10458 */
4212   {0x1045A,0x1045A,0x1045A},  {0x1045B,0x1045B,0x1045B}, /* 1045A */
4213   {0x1045C,0x1045C,0x1045C},  {0x1045D,0x1045D,0x1045D}, /* 1045C */
4214   {0x1045E,0x1045E,0x1045E},  {0x1045F,0x1045F,0x1045F}, /* 1045E */
4215   {0x10460,0x10460,0x10460},  {0x10461,0x10461,0x10461}, /* 10460 */
4216   {0x10462,0x10462,0x10462},  {0x10463,0x10463,0x10463}, /* 10462 */
4217   {0x10464,0x10464,0x10464},  {0x10465,0x10465,0x10465}, /* 10464 */
4218   {0x10466,0x10466,0x10466},  {0x10467,0x10467,0x10467}, /* 10466 */
4219   {0x10468,0x10468,0x10468},  {0x10469,0x10469,0x10469}, /* 10468 */
4220   {0x1046A,0x1046A,0x1046A},  {0x1046B,0x1046B,0x1046B}, /* 1046A */
4221   {0x1046C,0x1046C,0x1046C},  {0x1046D,0x1046D,0x1046D}, /* 1046C */
4222   {0x1046E,0x1046E,0x1046E},  {0x1046F,0x1046F,0x1046F}, /* 1046E */
4223   {0x10470,0x10470,0x10470},  {0x10471,0x10471,0x10471}, /* 10470 */
4224   {0x10472,0x10472,0x10472},  {0x10473,0x10473,0x10473}, /* 10472 */
4225   {0x10474,0x10474,0x10474},  {0x10475,0x10475,0x10475}, /* 10474 */
4226   {0x10476,0x10476,0x10476},  {0x10477,0x10477,0x10477}, /* 10476 */
4227   {0x10478,0x10478,0x10478},  {0x10479,0x10479,0x10479}, /* 10478 */
4228   {0x1047A,0x1047A,0x1047A},  {0x1047B,0x1047B,0x1047B}, /* 1047A */
4229   {0x1047C,0x1047C,0x1047C},  {0x1047D,0x1047D,0x1047D}, /* 1047C */
4230   {0x1047E,0x1047E,0x1047E},  {0x1047F,0x1047F,0x1047F}, /* 1047E */
4231   {0x10480,0x10480,0x10480},  {0x10481,0x10481,0x10481}, /* 10480 */
4232   {0x10482,0x10482,0x10482},  {0x10483,0x10483,0x10483}, /* 10482 */
4233   {0x10484,0x10484,0x10484},  {0x10485,0x10485,0x10485}, /* 10484 */
4234   {0x10486,0x10486,0x10486},  {0x10487,0x10487,0x10487}, /* 10486 */
4235   {0x10488,0x10488,0x10488},  {0x10489,0x10489,0x10489}, /* 10488 */
4236   {0x1048A,0x1048A,0x1048A},  {0x1048B,0x1048B,0x1048B}, /* 1048A */
4237   {0x1048C,0x1048C,0x1048C},  {0x1048D,0x1048D,0x1048D}, /* 1048C */
4238   {0x1048E,0x1048E,0x1048E},  {0x1048F,0x1048F,0x1048F}, /* 1048E */
4239   {0x10490,0x10490,0x10490},  {0x10491,0x10491,0x10491}, /* 10490 */
4240   {0x10492,0x10492,0x10492},  {0x10493,0x10493,0x10493}, /* 10492 */
4241   {0x10494,0x10494,0x10494},  {0x10495,0x10495,0x10495}, /* 10494 */
4242   {0x10496,0x10496,0x10496},  {0x10497,0x10497,0x10497}, /* 10496 */
4243   {0x10498,0x10498,0x10498},  {0x10499,0x10499,0x10499}, /* 10498 */
4244   {0x1049A,0x1049A,0x1049A},  {0x1049B,0x1049B,0x1049B}, /* 1049A */
4245   {0x1049C,0x1049C,0x1049C},  {0x1049D,0x1049D,0x1049D}, /* 1049C */
4246   {0x1049E,0x1049E,0x1049E},  {0x1049F,0x1049F,0x1049F}, /* 1049E */
4247   {0x104A0,0x104A0,0x104A0},  {0x104A1,0x104A1,0x104A1}, /* 104A0 */
4248   {0x104A2,0x104A2,0x104A2},  {0x104A3,0x104A3,0x104A3}, /* 104A2 */
4249   {0x104A4,0x104A4,0x104A4},  {0x104A5,0x104A5,0x104A5}, /* 104A4 */
4250   {0x104A6,0x104A6,0x104A6},  {0x104A7,0x104A7,0x104A7}, /* 104A6 */
4251   {0x104A8,0x104A8,0x104A8},  {0x104A9,0x104A9,0x104A9}, /* 104A8 */
4252   {0x104AA,0x104AA,0x104AA},  {0x104AB,0x104AB,0x104AB}, /* 104AA */
4253   {0x104AC,0x104AC,0x104AC},  {0x104AD,0x104AD,0x104AD}, /* 104AC */
4254   {0x104AE,0x104AE,0x104AE},  {0x104AF,0x104AF,0x104AF}, /* 104AE */
4255   {0x104B0,0x104B0,0x104B0},  {0x104B1,0x104B1,0x104B1}, /* 104B0 */
4256   {0x104B2,0x104B2,0x104B2},  {0x104B3,0x104B3,0x104B3}, /* 104B2 */
4257   {0x104B4,0x104B4,0x104B4},  {0x104B5,0x104B5,0x104B5}, /* 104B4 */
4258   {0x104B6,0x104B6,0x104B6},  {0x104B7,0x104B7,0x104B7}, /* 104B6 */
4259   {0x104B8,0x104B8,0x104B8},  {0x104B9,0x104B9,0x104B9}, /* 104B8 */
4260   {0x104BA,0x104BA,0x104BA},  {0x104BB,0x104BB,0x104BB}, /* 104BA */
4261   {0x104BC,0x104BC,0x104BC},  {0x104BD,0x104BD,0x104BD}, /* 104BC */
4262   {0x104BE,0x104BE,0x104BE},  {0x104BF,0x104BF,0x104BF}, /* 104BE */
4263   {0x104C0,0x104C0,0x104C0},  {0x104C1,0x104C1,0x104C1}, /* 104C0 */
4264   {0x104C2,0x104C2,0x104C2},  {0x104C3,0x104C3,0x104C3}, /* 104C2 */
4265   {0x104C4,0x104C4,0x104C4},  {0x104C5,0x104C5,0x104C5}, /* 104C4 */
4266   {0x104C6,0x104C6,0x104C6},  {0x104C7,0x104C7,0x104C7}, /* 104C6 */
4267   {0x104C8,0x104C8,0x104C8},  {0x104C9,0x104C9,0x104C9}, /* 104C8 */
4268   {0x104CA,0x104CA,0x104CA},  {0x104CB,0x104CB,0x104CB}, /* 104CA */
4269   {0x104CC,0x104CC,0x104CC},  {0x104CD,0x104CD,0x104CD}, /* 104CC */
4270   {0x104CE,0x104CE,0x104CE},  {0x104CF,0x104CF,0x104CF}, /* 104CE */
4271   {0x104D0,0x104D0,0x104D0},  {0x104D1,0x104D1,0x104D1}, /* 104D0 */
4272   {0x104D2,0x104D2,0x104D2},  {0x104D3,0x104D3,0x104D3}, /* 104D2 */
4273   {0x104D4,0x104D4,0x104D4},  {0x104D5,0x104D5,0x104D5}, /* 104D4 */
4274   {0x104D6,0x104D6,0x104D6},  {0x104D7,0x104D7,0x104D7}, /* 104D6 */
4275   {0x104D8,0x104D8,0x104D8},  {0x104D9,0x104D9,0x104D9}, /* 104D8 */
4276   {0x104DA,0x104DA,0x104DA},  {0x104DB,0x104DB,0x104DB}, /* 104DA */
4277   {0x104DC,0x104DC,0x104DC},  {0x104DD,0x104DD,0x104DD}, /* 104DC */
4278   {0x104DE,0x104DE,0x104DE},  {0x104DF,0x104DF,0x104DF}, /* 104DE */
4279   {0x104E0,0x104E0,0x104E0},  {0x104E1,0x104E1,0x104E1}, /* 104E0 */
4280   {0x104E2,0x104E2,0x104E2},  {0x104E3,0x104E3,0x104E3}, /* 104E2 */
4281   {0x104E4,0x104E4,0x104E4},  {0x104E5,0x104E5,0x104E5}, /* 104E4 */
4282   {0x104E6,0x104E6,0x104E6},  {0x104E7,0x104E7,0x104E7}, /* 104E6 */
4283   {0x104E8,0x104E8,0x104E8},  {0x104E9,0x104E9,0x104E9}, /* 104E8 */
4284   {0x104EA,0x104EA,0x104EA},  {0x104EB,0x104EB,0x104EB}, /* 104EA */
4285   {0x104EC,0x104EC,0x104EC},  {0x104ED,0x104ED,0x104ED}, /* 104EC */
4286   {0x104EE,0x104EE,0x104EE},  {0x104EF,0x104EF,0x104EF}, /* 104EE */
4287   {0x104F0,0x104F0,0x104F0},  {0x104F1,0x104F1,0x104F1}, /* 104F0 */
4288   {0x104F2,0x104F2,0x104F2},  {0x104F3,0x104F3,0x104F3}, /* 104F2 */
4289   {0x104F4,0x104F4,0x104F4},  {0x104F5,0x104F5,0x104F5}, /* 104F4 */
4290   {0x104F6,0x104F6,0x104F6},  {0x104F7,0x104F7,0x104F7}, /* 104F6 */
4291   {0x104F8,0x104F8,0x104F8},  {0x104F9,0x104F9,0x104F9}, /* 104F8 */
4292   {0x104FA,0x104FA,0x104FA},  {0x104FB,0x104FB,0x104FB}, /* 104FA */
4293   {0x104FC,0x104FC,0x104FC},  {0x104FD,0x104FD,0x104FD}, /* 104FC */
4294   {0x104FE,0x104FE,0x104FE},  {0x104FF,0x104FF,0x104FF} /* 104FE */
4295 };
4296 
4297 
4298 const MY_UNICASE_CHARACTER *my_unicase_pages_unicode520[4352]=
4299 {
4300  u520p00, u520p01, u520p02, u520p03, u520p04, u520p05,    NULL,    NULL,
4301     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4302  u520p10,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4303     NULL,    NULL,    NULL,    NULL,    NULL, u520p1D, u520p1E, u520p1F,
4304     NULL, u520p21,    NULL,    NULL, u520p24,    NULL,    NULL,    NULL,
4305     NULL,    NULL,    NULL,    NULL, u520p2C, u520p2D,    NULL,    NULL,
4306     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4307     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4308     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4309     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4310     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4311     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4312     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4313     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4314     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4315     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4316     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4317     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4318     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4319     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4320     NULL,    NULL,    NULL,    NULL,    NULL,    NULL, u520pA6, u520pA7,
4321     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4322     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4323     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4324     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4325     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4326     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4327     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4328     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4329     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4330     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4331     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL, u520pFF,
4332     NULL,    NULL,    NULL,    NULL,u520p104,    NULL,    NULL,    NULL,
4333     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4334     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4335     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4336     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4337     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4338     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4339     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4340     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4341     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4342     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4343     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4344     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4345     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4346     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4347     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4348     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4349     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4350     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4351     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4352     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4353     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4354     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4355     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4356     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4357     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4358     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4359     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4360     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4361     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4362     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4363     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4364     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4365     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4366     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4367     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4368     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4369     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4370     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4371     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4372     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4373     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4374     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4375     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4376     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4377     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4378     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4379     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4380     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4381     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4382     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4383     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4384     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4385     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4386     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4387     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4388     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4389     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4390     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4391     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4392     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4393     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4394     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4395     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4396     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4397     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4398     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4399     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4400     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4401     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4402     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4403     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4404     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4405     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4406     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4407     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4408     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4409     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4410     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4411     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4412     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4413     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4414     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4415     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4416     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4417     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4418     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4419     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4420     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4421     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4422     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4423     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4424     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4425     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4426     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4427     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4428     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4429     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4430     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4431     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4432     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4433     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4434     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4435     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4436     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4437     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4438     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4439     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4440     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4441     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4442     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4443     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4444     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4445     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4446     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4447     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4448     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4449     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4450     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4451     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4452     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4453     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4454     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4455     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4456     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4457     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4458     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4459     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4460     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4461     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4462     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4463     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4464     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4465     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4466     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4467     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4468     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4469     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4470     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4471     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4472     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4473     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4474     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4475     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4476     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4477     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4478     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4479     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4480     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4481     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4482     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4483     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4484     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4485     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4486     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4487     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4488     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4489     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4490     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4491     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4492     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4493     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4494     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4495     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4496     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4497     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4498     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4499     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4500     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4501     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4502     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4503     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4504     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4505     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4506     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4507     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4508     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4509     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4510     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4511     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4512     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4513     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4514     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4515     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4516     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4517     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4518     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4519     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4520     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4521     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4522     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4523     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4524     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4525     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4526     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4527     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4528     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4529     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4530     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4531     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4532     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4533     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4534     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4535     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4536     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4537     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4538     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4539     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4540     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4541     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4542     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4543     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4544     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4545     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4546     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4547     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4548     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4549     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4550     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4551     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4552     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4553     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4554     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4555     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4556     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4557     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4558     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4559     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4560     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4561     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4562     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4563     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4564     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4565     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4566     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4567     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4568     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4569     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4570     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4571     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4572     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4573     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4574     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4575     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4576     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4577     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4578     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4579     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4580     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4581     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4582     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4583     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4584     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4585     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4586     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4587     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4588     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4589     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4590     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4591     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4592     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4593     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4594     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4595     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4596     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4597     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4598     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4599     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4600     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4601     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4602     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4603     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4604     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4605     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4606     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4607     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4608     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4609     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4610     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4611     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4612     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4613     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4614     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4615     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4616     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4617     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4618     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4619     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4620     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4621     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4622     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4623     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4624     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4625     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4626     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4627     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4628     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4629     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4630     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4631     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4632     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4633     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4634     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4635     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4636     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4637     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4638     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4639     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4640     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4641     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4642     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4643     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4644     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4645     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4646     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4647     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4648     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4649     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4650     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4651     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4652     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4653     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4654     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4655     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4656     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4657     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4658     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4659     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4660     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4661     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4662     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4663     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4664     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4665     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4666     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4667     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4668     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4669     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4670     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4671     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4672     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4673     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4674     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4675     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4676     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4677     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4678     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4679     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4680     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4681     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4682     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4683     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4684     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4685     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4686     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4687     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4688     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4689     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4690     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4691     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4692     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4693     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4694     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4695     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4696     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4697     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4698     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4699     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4700     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4701     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4702     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4703     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4704     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4705     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4706     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4707     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4708     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4709     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4710     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4711     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4712     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4713     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4714     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4715     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4716     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4717     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4718     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4719     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4720     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4721     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4722     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4723     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4724     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4725     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4726     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4727     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4728     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4729     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4730     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4731     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4732     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4733     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4734     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4735     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4736     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4737     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4738     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4739     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4740     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4741     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4742     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4743     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4744     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4745     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4746     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4747     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4748     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4749     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4750     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4751     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4752     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4753     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4754     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4755     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4756     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4757     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4758     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4759     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4760     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4761     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4762     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4763     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4764     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4765     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4766     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4767     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4768     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4769     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4770     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4771     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4772     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4773     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4774     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4775     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4776     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4777     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4778     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4779     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4780     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4781     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4782     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4783     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4784     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4785     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4786     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4787     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4788     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4789     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4790     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4791     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4792     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4793     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4794     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4795     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4796     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4797     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4798     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4799     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4800     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4801     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4802     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4803     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4804     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4805     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4806     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4807     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4808     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4809     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4810     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4811     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4812     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4813     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4814     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4815     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4816     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4817     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4818     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4819     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4820     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4821     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4822     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4823     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4824     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4825     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4826     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4827     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4828     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4829     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4830     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4831     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4832     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4833     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4834     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4835     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4836     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4837     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4838     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4839     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4840     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4841     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4842     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4843     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4844 };
4845 
4846 
4847 MY_UNICASE_INFO my_unicase_unicode520=
4848 {
4849   0x10FFFF,
4850   my_unicase_pages_unicode520
4851 };
4852 
4853 
4854 static inline void
my_tosort_unicode(const MY_UNICASE_INFO * uni_plane,my_wc_t * wc,uint flags)4855 my_tosort_unicode(const MY_UNICASE_INFO *uni_plane, my_wc_t *wc, uint flags)
4856 {
4857   if (*wc <= uni_plane->maxchar)
4858   {
4859     const MY_UNICASE_CHARACTER *page;
4860     if ((page= uni_plane->page[*wc >> 8]))
4861       *wc= (flags & MY_CS_LOWER_SORT) ?
4862            page[*wc & 0xFF].tolower :
4863            page[*wc & 0xFF].sort;
4864   }
4865   else
4866   {
4867     *wc= MY_CS_REPLACEMENT_CHARACTER;
4868   }
4869 }
4870 
4871 
4872 /*
4873 ** Compare string against string with wildcard
4874 ** This function is used in UTF8 and UCS2
4875 **
4876 **	0 if matched
4877 **	-1 if not matched with wildcard
4878 **	 1 if matched with wildcard
4879 */
4880 
4881 static
4882 int
my_wildcmp_unicode_impl(const CHARSET_INFO * cs,const char * str,const char * str_end,const char * wildstr,const char * wildend,int escape,int w_one,int w_many,const MY_UNICASE_INFO * weights,int recurse_level)4883 my_wildcmp_unicode_impl(const CHARSET_INFO *cs,
4884                         const char *str,const char *str_end,
4885                         const char *wildstr,const char *wildend,
4886                         int escape, int w_one, int w_many,
4887                         const MY_UNICASE_INFO *weights, int recurse_level)
4888 {
4889   int result= -1;                             /* Not found, using wildcards */
4890   my_wc_t s_wc, w_wc;
4891   int scan;
4892   int (*mb_wc)(const struct charset_info_st *, my_wc_t *,
4893                const uchar *, const uchar *);
4894   mb_wc= cs->cset->mb_wc;
4895 
4896  if (my_string_stack_guard && my_string_stack_guard(recurse_level))
4897    return 1;
4898   while (wildstr != wildend)
4899   {
4900     while (1)
4901     {
4902       my_bool escaped= 0;
4903       if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
4904                        (const uchar*)wildend)) <= 0)
4905         return 1;
4906 
4907       if (w_wc == (my_wc_t) w_many)
4908       {
4909         result= 1;                                /* Found an anchor char */
4910         break;
4911       }
4912 
4913       wildstr+= scan;
4914       if (w_wc ==  (my_wc_t) escape && wildstr < wildend)
4915       {
4916         if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
4917                          (const uchar*)wildend)) <= 0)
4918           return 1;
4919         wildstr+= scan;
4920         escaped= 1;
4921       }
4922 
4923       if ((scan= mb_wc(cs, &s_wc, (const uchar*)str,
4924                        (const uchar*)str_end)) <= 0)
4925         return 1;
4926       str+= scan;
4927 
4928       if (!escaped && w_wc == (my_wc_t) w_one)
4929       {
4930         result= 1;                                /* Found an anchor char */
4931       }
4932       else
4933       {
4934         if (weights)
4935         {
4936           my_tosort_unicode(weights, &s_wc, cs->state);
4937           my_tosort_unicode(weights, &w_wc, cs->state);
4938         }
4939         if (s_wc != w_wc)
4940           return 1;                               /* No match */
4941       }
4942       if (wildstr == wildend)
4943         return (str != str_end);                  /* Match if both are at end */
4944     }
4945 
4946 
4947     if (w_wc == (my_wc_t) w_many)
4948     {                                             /* Found w_many */
4949 
4950       /* Remove any '%' and '_' from the wild search string */
4951       for ( ; wildstr != wildend ; )
4952       {
4953         if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
4954                          (const uchar*)wildend)) <= 0)
4955           return 1;
4956 
4957         if (w_wc == (my_wc_t)w_many)
4958         {
4959           wildstr+= scan;
4960           continue;
4961         }
4962 
4963         if (w_wc == (my_wc_t)w_one)
4964         {
4965           wildstr+= scan;
4966           if ((scan= mb_wc(cs, &s_wc, (const uchar*)str,
4967                            (const uchar*)str_end)) <=0)
4968             return 1;
4969           str+= scan;
4970           continue;
4971         }
4972         break;                                        /* Not a wild character */
4973       }
4974 
4975       if (wildstr == wildend)
4976         return 0;                                /* Ok if w_many is last */
4977 
4978       if (str == str_end)
4979         return -1;
4980 
4981       if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
4982                        (const uchar*)wildend)) <=0)
4983         return 1;
4984       wildstr+= scan;
4985 
4986       if (w_wc ==  (my_wc_t)escape)
4987       {
4988         if (wildstr < wildend)
4989         {
4990           if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
4991                            (const uchar*)wildend)) <=0)
4992             return 1;
4993           wildstr+= scan;
4994         }
4995       }
4996 
4997       while (1)
4998       {
4999         /* Skip until the first character from wildstr is found */
5000         while (str != str_end)
5001         {
5002           if ((scan= mb_wc(cs, &s_wc, (const uchar*)str,
5003                            (const uchar*)str_end)) <=0)
5004             return 1;
5005           if (weights)
5006           {
5007             my_tosort_unicode(weights, &s_wc, cs->state);
5008             my_tosort_unicode(weights, &w_wc, cs->state);
5009           }
5010 
5011           if (s_wc == w_wc)
5012             break;
5013           str+= scan;
5014         }
5015         if (str == str_end)
5016           return -1;
5017 
5018         str+= scan;
5019         result= my_wildcmp_unicode_impl(cs, str, str_end, wildstr, wildend,
5020                                         escape, w_one, w_many,
5021                                         weights, recurse_level + 1);
5022         if (result <= 0)
5023           return result;
5024       }
5025     }
5026   }
5027   return (str != str_end ? 1 : 0);
5028 }
5029 
5030 int
my_wildcmp_unicode(const CHARSET_INFO * cs,const char * str,const char * str_end,const char * wildstr,const char * wildend,int escape,int w_one,int w_many,const MY_UNICASE_INFO * weights)5031 my_wildcmp_unicode(const CHARSET_INFO *cs,
5032                    const char *str,const char *str_end,
5033                    const char *wildstr,const char *wildend,
5034                    int escape, int w_one, int w_many,
5035                    const MY_UNICASE_INFO *weights)
5036 {
5037   return my_wildcmp_unicode_impl(cs, str, str_end,
5038                                  wildstr, wildend,
5039                                  escape, w_one, w_many, weights, 1);
5040 }
5041 
5042 
5043 /**
5044   Pad buffer with weights for space characters.
5045 
5046   @details
5047   This functions fills the buffer pointed by "str"
5048   with weights of space character. Not more than
5049   "nweights" weights are put. If at some iteration
5050   step only a half of weight can fit
5051   (which is possible if buffer length is an odd number)
5052   then a half of this weight is put - this gives
5053   a little bit better ORDER BY result for long strings.
5054 
5055   @str      Buffer
5056   @strend   End of buffer
5057   @nweights Number of weights
5058 
5059   @return Result length
5060 */
5061 
5062 static size_t
my_strxfrm_pad_nweights_unicode(uchar * str,const uchar * const strend,size_t nweights)5063 my_strxfrm_pad_nweights_unicode(uchar *str,
5064                                 const uchar *const strend,
5065                                 size_t nweights)
5066 {
5067   const uchar *const str0 = str;
5068   const uchar *const weightend = str + (nweights*2);
5069   const uchar *const end = (weightend < strend) ? weightend : strend;
5070   assert(str && str <= strend);
5071 
5072   while (str < end-3)
5073   {
5074     *str++= 0x00;
5075     *str++= 0x20;
5076     *str++= 0x00;
5077     *str++= 0x20;
5078   }
5079   if (str < end-1)
5080   {
5081     *str++= 0x00;
5082     *str++= 0x20;
5083   }
5084   if (str < end)
5085   {
5086     *str++= 0x00;
5087   }
5088   return str - str0;
5089 }
5090 
5091 
5092 /**
5093   Pad buffer with weights for space characters.
5094 
5095   @details
5096   This functions fills the buffer pointed by "str"
5097   with weights of space character. Putting half of weight
5098   (when buffer length is an odd number) is OK.
5099 
5100   @str      Buffer
5101   @strend   End of buffer
5102 
5103   @return Result length
5104 */
5105 
5106 static size_t
my_strxfrm_pad_unicode(uchar * str,const uchar * const strend)5107 my_strxfrm_pad_unicode(uchar *str, const uchar *const strend)
5108 {
5109   const uchar *const str0 = str;
5110   assert(str && str <= strend);
5111 
5112   while (str < strend-3)
5113   {
5114     *str++= 0x00;
5115     *str++= 0x20;
5116     *str++= 0x00;
5117     *str++= 0x20;
5118   }
5119   if (str < strend-1)
5120   {
5121     *str++= 0x00;
5122     *str++= 0x20;
5123   }
5124   if (str < strend)
5125   {
5126     *str++= 0x00;
5127   }
5128   return str - str0;
5129 }
5130 
5131 
5132 /*
5133   Store sorting weights using 2 bytes per character.
5134 
5135   This function is shared between
5136   - utf8mb3_general_ci, utf8_bin, ucs2_general_ci, ucs2_bin
5137     which support BMP only (U+0000..U+FFFF).
5138   - utf8mb4_general_ci, utf16_general_ci, utf32_general_ci,
5139     which map all supplementary characters to weight 0xFFFD.
5140 */
5141 size_t
my_strnxfrm_unicode(const CHARSET_INFO * cs,uchar * dst,size_t dstlen,uint nweights,const uchar * src,size_t srclen,uint flags)5142 my_strnxfrm_unicode(const CHARSET_INFO *cs,
5143                     uchar *dst, size_t dstlen, uint nweights,
5144                     const uchar *src, size_t srclen, uint flags)
5145 {
5146   my_wc_t wc= 0;
5147   int res;
5148   uchar *const dst0= dst;
5149   const uchar *const de= dst + dstlen;
5150   const uchar *const se= src + srclen;
5151   const MY_UNICASE_INFO *uni_plane= (cs->state & MY_CS_BINSORT) ?
5152                                      NULL : cs->caseinfo;
5153   assert(src || srclen == 0);
5154 
5155   for (; dst < de && nweights; nweights--)
5156   {
5157     if ((res= cs->cset->mb_wc(cs, &wc, src, se)) <= 0)
5158       break;
5159     src+= res;
5160 
5161     if (uni_plane)
5162       my_tosort_unicode(uni_plane, &wc, cs->state);
5163 
5164     *dst++= (uchar) (wc >> 8);
5165     if (dst < de)
5166       *dst++= (uchar) (wc & 0xFF);
5167   }
5168 
5169   if (dst < de && nweights && (flags & MY_STRXFRM_PAD_WITH_SPACE))
5170     dst+= my_strxfrm_pad_nweights_unicode(dst, de, nweights);
5171 
5172   my_strxfrm_desc_and_reverse(dst0, dst, flags, 0);
5173 
5174   if ((flags & MY_STRXFRM_PAD_TO_MAXLEN) && dst < de)
5175     dst+= my_strxfrm_pad_unicode(dst, de);
5176   return dst - dst0;
5177 }
5178 
5179 
5180 /*
5181   Store sorting weights using 3 bytes per character.
5182   This function is shared between utf8mb4_bin, utf16_bin, utf32_bin.
5183 */
5184 size_t
my_strnxfrm_unicode_full_bin(const CHARSET_INFO * cs,uchar * dst,size_t dstlen,uint nweights,const uchar * src,size_t srclen,uint flags)5185 my_strnxfrm_unicode_full_bin(const CHARSET_INFO *cs,
5186                              uchar *dst, size_t dstlen, uint nweights,
5187                              const uchar *src, size_t srclen, uint flags)
5188 {
5189   my_wc_t wc= 0;
5190   uchar *const dst0= dst;
5191   const uchar *const de= dst + dstlen;
5192   const uchar *const se= src + srclen;
5193 
5194   assert(src || srclen == 0);
5195   assert(cs->state & MY_CS_BINSORT);
5196 
5197   for ( ; dst < de && nweights; nweights--)
5198   {
5199     int res;
5200     if ((res= cs->cset->mb_wc(cs, &wc, src, se)) <= 0)
5201       break;
5202     src+= res;
5203     *dst++= (uchar) (wc >> 16);
5204     if (dst < de)
5205     {
5206       *dst++= (uchar) ((wc >> 8) & 0xFF);
5207       if (dst < de)
5208         *dst++= (uchar) (wc & 0xFF);
5209     }
5210   }
5211 
5212   if (flags & MY_STRXFRM_PAD_WITH_SPACE)
5213   {
5214     const uchar *const weightend = dst + (nweights*3);
5215     const uchar *const end = (weightend < de) ? weightend : de;
5216 
5217     while (dst < end-2)
5218     {
5219       *dst++= 0x00;
5220       *dst++= 0x00;
5221       *dst++= 0x20;
5222       nweights--;
5223     }
5224     if (dst < de && nweights > 0)
5225     {
5226       *dst++= 0x00;
5227       if (dst < de)
5228       {
5229         *dst++= 0x00;
5230         if (dst < de)
5231           *dst++= 0x20;
5232       }
5233     }
5234   }
5235 
5236   my_strxfrm_desc_and_reverse(dst0, dst, flags, 0);
5237 
5238   if (flags & MY_STRXFRM_PAD_TO_MAXLEN)
5239   {
5240     while (dst < de-2)
5241     {
5242       *dst++= 0x00;
5243       *dst++= 0x00;
5244       *dst++= 0x20;
5245     }
5246     if (dst < de)
5247     {
5248       *dst++= 0x00;
5249       if (dst < de)
5250       {
5251         *dst++= 0x00;
5252         if (dst < de)
5253           *dst++= 0x20;
5254       }
5255     }
5256   }
5257   return dst - dst0;
5258 }
5259 
5260 
5261 size_t
my_strnxfrmlen_unicode_full_bin(const CHARSET_INFO * cs,size_t len)5262 my_strnxfrmlen_unicode_full_bin(const CHARSET_INFO *cs, size_t len)
5263 {
5264   return ((len + 3) / cs->mbmaxlen) * 3;
5265 }
5266 
5267 
5268 #ifdef HAVE_CHARSET_utf8
5269 
5270 /*
5271   We consider bytes with code more than 127 as a letter.
5272   This garantees that word boundaries work fine with regular
5273   expressions. Note, there is no need to mark byte 255  as a
5274   letter, it is illegal byte in UTF8.
5275 */
5276 static const uchar ctype_utf8[] = {
5277     0,
5278    32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32,
5279    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
5280    72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
5281   132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16,
5282    16,129,129,129,129,129,129,  1,  1,  1,  1,  1,  1,  1,  1,  1,
5283     1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 16, 16, 16, 16, 16,
5284    16,130,130,130,130,130,130,  2,  2,  2,  2,  2,  2,  2,  2,  2,
5285     2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 16, 16, 16, 16, 32,
5286     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
5287     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
5288     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
5289     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
5290     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
5291     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
5292     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
5293     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  0
5294 };
5295 
5296 /* The below are taken from usa7 implementation */
5297 
5298 static const uchar to_lower_utf8[] = {
5299     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
5300    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
5301    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
5302    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
5303    64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
5304   112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95,
5305    96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
5306   112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
5307   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
5308   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
5309   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
5310   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
5311   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
5312   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
5313   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
5314   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
5315 };
5316 
5317 static const uchar to_upper_utf8[] = {
5318     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
5319    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
5320    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
5321    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
5322    64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
5323    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
5324    96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
5325    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127,
5326   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
5327   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
5328   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
5329   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
5330   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
5331   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
5332   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
5333   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
5334 };
5335 
bincmp(const uchar * s,const uchar * se,const uchar * t,const uchar * te)5336 static inline int bincmp(const uchar *s, const uchar *se,
5337                          const uchar *t, const uchar *te)
5338 {
5339   int slen= (int) (se-s), tlen= (int) (te-t);
5340   int len= MY_MIN(slen,tlen);
5341   int cmp= memcmp(s,t,len);
5342   return cmp ? cmp : slen-tlen;
5343 }
5344 
5345 
my_utf8_uni(const CHARSET_INFO * cs MY_ATTRIBUTE ((unused)),my_wc_t * pwc,const uchar * s,const uchar * e)5346 static int my_utf8_uni(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)),
5347                        my_wc_t * pwc, const uchar *s, const uchar *e)
5348 {
5349   uchar c;
5350 
5351   if (s >= e)
5352     return MY_CS_TOOSMALL;
5353 
5354   c= s[0];
5355   if (c < 0x80)
5356   {
5357     *pwc = c;
5358     return 1;
5359   }
5360   else if (c < 0xc2)
5361     return MY_CS_ILSEQ;
5362   else if (c < 0xe0)
5363   {
5364     if (s+2 > e) /* We need 2 characters */
5365       return MY_CS_TOOSMALL2;
5366 
5367     if (!(IS_CONTINUATION_BYTE(s[1])))
5368       return MY_CS_ILSEQ;
5369 
5370     *pwc = ((my_wc_t) (c & 0x1f) << 6) | (my_wc_t) (s[1] ^ 0x80);
5371     return 2;
5372   }
5373   else if (c < 0xf0)
5374   {
5375     if (s+3 > e) /* We need 3 characters */
5376       return MY_CS_TOOSMALL3;
5377 
5378     if (!(IS_CONTINUATION_BYTE(s[1]) && IS_CONTINUATION_BYTE(s[2]) &&
5379           (c >= 0xe1 || s[1] >= 0xa0)))
5380       return MY_CS_ILSEQ;
5381 
5382     *pwc = ((my_wc_t) (c & 0x0f) << 12)   |
5383            ((my_wc_t) (s[1] ^ 0x80) << 6) |
5384             (my_wc_t) (s[2] ^ 0x80);
5385 
5386     return 3;
5387   }
5388   return MY_CS_ILSEQ;
5389 }
5390 
5391 
5392 /*
5393   The same as above, but without range check
5394   for example, for a null-terminated string
5395 */
my_utf8_uni_no_range(const CHARSET_INFO * cs MY_ATTRIBUTE ((unused)),my_wc_t * pwc,const uchar * s)5396 static int my_utf8_uni_no_range(const CHARSET_INFO *cs
5397                                 MY_ATTRIBUTE((unused)),
5398                                 my_wc_t * pwc, const uchar *s)
5399 {
5400   uchar c;
5401 
5402   c= s[0];
5403   if (c < 0x80)
5404   {
5405     *pwc = c;
5406     return 1;
5407   }
5408 
5409   if (c < 0xc2)
5410     return MY_CS_ILSEQ;
5411 
5412   if (c < 0xe0)
5413   {
5414     if (!((s[1] ^ 0x80) < 0x40))
5415       return MY_CS_ILSEQ;
5416 
5417     *pwc = ((my_wc_t) (c & 0x1f) << 6) | (my_wc_t) (s[1] ^ 0x80);
5418     return 2;
5419   }
5420 
5421   if (c < 0xf0)
5422   {
5423     if (!(IS_CONTINUATION_BYTE(s[1]) &&
5424           IS_CONTINUATION_BYTE(s[2]) &&
5425           (c >= 0xe1 || s[1] >= 0xa0)))
5426       return MY_CS_ILSEQ;
5427 
5428     *pwc= ((my_wc_t) (c & 0x0f) << 12)   |
5429           ((my_wc_t) (s[1] ^ 0x80) << 6) |
5430            (my_wc_t) (s[2] ^ 0x80);
5431 
5432     return 3;
5433   }
5434   return MY_CS_ILSEQ;
5435 }
5436 
5437 
my_uni_utf8(const CHARSET_INFO * cs MY_ATTRIBUTE ((unused)),my_wc_t wc,uchar * r,uchar * e)5438 static int my_uni_utf8 (const CHARSET_INFO *cs MY_ATTRIBUTE((unused)),
5439                         my_wc_t wc, uchar *r, uchar *e)
5440 {
5441   int count;
5442 
5443   if (r >= e)
5444     return MY_CS_TOOSMALL;
5445 
5446   if (wc < 0x80)
5447     count = 1;
5448   else if (wc < 0x800)
5449     count = 2;
5450   else if (wc < 0x10000)
5451     count = 3;
5452   else return MY_CS_ILUNI;
5453 
5454   /*
5455     e is a character after the string r, not the last character of it.
5456     Because of it (r+count > e), not (r+count-1 >e )
5457    */
5458   if ( r+count > e )
5459     return MY_CS_TOOSMALLN(count);
5460 
5461   switch (count) {
5462     case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800; // Fall through
5463     case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0;  // Fall through
5464     case 1: r[0] = (uchar) wc;
5465   }
5466   return count;
5467 }
5468 
5469 
5470 /*
5471   The same as above, but without range check.
5472 */
my_uni_utf8_no_range(const CHARSET_INFO * cs MY_ATTRIBUTE ((unused)),my_wc_t wc,uchar * r)5473 static int my_uni_utf8_no_range(const CHARSET_INFO *cs
5474                                 MY_ATTRIBUTE((unused)),
5475                                 my_wc_t wc, uchar *r)
5476 {
5477   int count;
5478 
5479   if (wc < 0x80)
5480     count= 1;
5481   else if (wc < 0x800)
5482     count= 2;
5483   else if (wc < 0x10000)
5484     count= 3;
5485   else
5486     return MY_CS_ILUNI;
5487 
5488   switch (count)
5489   {
5490     case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800; // Fall through
5491     case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0;  // Fall through
5492     case 1: r[0]= (uchar) wc;
5493   }
5494   return count;
5495 }
5496 
5497 
5498 static inline void
my_tolower_utf8mb3(const MY_UNICASE_INFO * uni_plane,my_wc_t * wc)5499 my_tolower_utf8mb3(const MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
5500 {
5501   const MY_UNICASE_CHARACTER *page;
5502   if ((page= uni_plane->page[(*wc >> 8) & 0xFF]))
5503     *wc= page[*wc & 0xFF].tolower;
5504 }
5505 
5506 
5507 static inline void
my_toupper_utf8mb3(const MY_UNICASE_INFO * uni_plane,my_wc_t * wc)5508 my_toupper_utf8mb3(const MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
5509 {
5510   const MY_UNICASE_CHARACTER *page;
5511   if ((page= uni_plane->page[(*wc >> 8) & 0xFF]))
5512     *wc= page[*wc & 0xFF].toupper;
5513 }
5514 
5515 
5516 static size_t
my_caseup_utf8(const CHARSET_INFO * cs,char * src,size_t srclen,char * dst,size_t dstlen)5517 my_caseup_utf8(const CHARSET_INFO *cs, char *src, size_t srclen,
5518                char *dst, size_t dstlen)
5519 {
5520   my_wc_t wc;
5521   int srcres, dstres;
5522   char *srcend= src + srclen, *dstend= dst + dstlen, *dst0= dst;
5523   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
5524   assert(src != dst || cs->caseup_multiply == 1);
5525 
5526   while ((src < srcend) &&
5527          (srcres= my_utf8_uni(cs, &wc, (uchar *) src, (uchar*) srcend)) > 0)
5528   {
5529     my_toupper_utf8mb3(uni_plane, &wc);
5530     if ((dstres= my_uni_utf8(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0)
5531       break;
5532     src+= srcres;
5533     dst+= dstres;
5534   }
5535   return (size_t) (dst - dst0);
5536 }
5537 
5538 
my_hash_sort_utf8(const CHARSET_INFO * cs,const uchar * s,size_t slen,ulong * n1,ulong * n2)5539 static void my_hash_sort_utf8(const CHARSET_INFO *cs, const uchar *s,
5540                               size_t slen, ulong *n1, ulong *n2)
5541 {
5542   my_wc_t wc;
5543   int res;
5544   const uchar *e=s+slen;
5545   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
5546   ulong tmp1;
5547   ulong tmp2;
5548 
5549   /*
5550     Remove end space. We have to do this to be able to compare
5551     'A ' and 'A' as identical
5552   */
5553   while (e > s && e[-1] == ' ')
5554     e--;
5555 
5556   tmp1= *n1;
5557   tmp2= *n2;
5558 
5559   while ((s < e) && (res=my_utf8_uni(cs,&wc, (uchar *)s, (uchar*)e))>0 )
5560   {
5561     my_tosort_unicode(uni_plane, &wc, cs->state);
5562     tmp1^= (((tmp1 & 63) + tmp2) * (wc & 0xFF)) + (tmp1 << 8);
5563     tmp2+=3;
5564     tmp1^= (((tmp1 & 63) + tmp2) * (wc >> 8)) + (tmp1 << 8);
5565     tmp2+=3;
5566     s+=res;
5567   }
5568 
5569   *n1= tmp1;
5570   *n2= tmp2;
5571 }
5572 
5573 
my_caseup_str_utf8(const CHARSET_INFO * cs,char * src)5574 static size_t my_caseup_str_utf8(const CHARSET_INFO *cs, char *src)
5575 {
5576   my_wc_t wc;
5577   int srcres, dstres;
5578   char *dst= src, *dst0= src;
5579   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
5580   assert(cs->caseup_multiply == 1);
5581 
5582   while (*src &&
5583          (srcres= my_utf8_uni_no_range(cs, &wc, (uchar *) src)) > 0)
5584   {
5585     my_toupper_utf8mb3(uni_plane, &wc);
5586     if ((dstres= my_uni_utf8_no_range(cs, wc, (uchar*) dst)) <= 0)
5587       break;
5588     src+= srcres;
5589     dst+= dstres;
5590   }
5591   *dst= '\0';
5592   return (size_t) (dst - dst0);
5593 }
5594 
5595 
my_casedn_utf8(const CHARSET_INFO * cs,char * src,size_t srclen,char * dst,size_t dstlen)5596 static size_t my_casedn_utf8(const CHARSET_INFO *cs, char *src, size_t srclen,
5597                              char *dst, size_t dstlen)
5598 {
5599   my_wc_t wc;
5600   int srcres, dstres;
5601   char *srcend= src + srclen, *dstend= dst + dstlen, *dst0= dst;
5602   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
5603   assert(src != dst || cs->casedn_multiply == 1);
5604 
5605   while ((src < srcend) &&
5606          (srcres= my_utf8_uni(cs, &wc, (uchar*) src, (uchar*)srcend)) > 0)
5607   {
5608     my_tolower_utf8mb3(uni_plane, &wc);
5609     if ((dstres= my_uni_utf8(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0)
5610       break;
5611     src+= srcres;
5612     dst+= dstres;
5613   }
5614   return (size_t) (dst - dst0);
5615 }
5616 
5617 
my_casedn_str_utf8(const CHARSET_INFO * cs,char * src)5618 static size_t my_casedn_str_utf8(const CHARSET_INFO *cs, char *src)
5619 {
5620   my_wc_t wc;
5621   int srcres, dstres;
5622   char *dst= src, *dst0= src;
5623   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
5624   assert(cs->casedn_multiply == 1);
5625 
5626   while (*src &&
5627          (srcres= my_utf8_uni_no_range(cs, &wc, (uchar *) src)) > 0)
5628   {
5629     my_tolower_utf8mb3(uni_plane, &wc);
5630     if ((dstres= my_uni_utf8_no_range(cs, wc, (uchar*) dst)) <= 0)
5631       break;
5632     src+= srcres;
5633     dst+= dstres;
5634   }
5635 
5636   /*
5637    In rare cases lower string can be shorter than
5638    the original string, for example:
5639 
5640    "U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE"
5641    (which is 0xC4B0 in utf8, i.e. two bytes)
5642 
5643    is converted into
5644 
5645    "U+0069 LATIN SMALL LETTER I"
5646    (which is 0x69 in utf8, i.e. one byte)
5647 
5648    So, we need to put '\0' terminator after converting.
5649   */
5650 
5651   *dst= '\0';
5652   return (size_t) (dst - dst0);
5653 }
5654 
5655 
my_strnncoll_utf8(const CHARSET_INFO * cs,const uchar * s,size_t slen,const uchar * t,size_t tlen,my_bool t_is_prefix)5656 static int my_strnncoll_utf8(const CHARSET_INFO *cs,
5657                              const uchar *s, size_t slen,
5658                              const uchar *t, size_t tlen,
5659                              my_bool t_is_prefix)
5660 {
5661   int s_res,t_res;
5662   my_wc_t s_wc= 0, t_wc= 0;
5663   const uchar *se=s+slen;
5664   const uchar *te=t+tlen;
5665   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
5666 
5667   while ( s < se && t < te )
5668   {
5669     s_res=my_utf8_uni(cs,&s_wc, s, se);
5670     t_res=my_utf8_uni(cs,&t_wc, t, te);
5671 
5672     if ( s_res <= 0 || t_res <= 0 )
5673     {
5674       /* Incorrect string, compare byte by byte value */
5675       return bincmp(s, se, t, te);
5676     }
5677 
5678     my_tosort_unicode(uni_plane, &s_wc, cs->state);
5679     my_tosort_unicode(uni_plane, &t_wc, cs->state);
5680 
5681     if ( s_wc != t_wc )
5682     {
5683       return  s_wc > t_wc ? 1 : -1;
5684     }
5685 
5686     s+=s_res;
5687     t+=t_res;
5688   }
5689   return (int) (t_is_prefix ? t-te : ((se-s) - (te-t)));
5690 }
5691 
5692 
5693 
5694 /*
5695   Compare strings, discarding end space
5696 
5697   SYNOPSIS
5698     my_strnncollsp_utf8()
5699     cs                  character set handler
5700     a                   First string to compare
5701     a_length            Length of 'a'
5702     b                   Second string to compare
5703     b_length            Length of 'b'
5704     diff_if_only_endspace_difference
5705 		        Set to 1 if the strings should be regarded as different
5706                         if they only difference in end space
5707 
5708   IMPLEMENTATION
5709     If one string is shorter as the other, then we space extend the other
5710     so that the strings have equal length.
5711 
5712     This will ensure that the following things hold:
5713 
5714     "a"  == "a "
5715     "a\0" < "a"
5716     "a\0" < "a "
5717 
5718   RETURN
5719     < 0  a <  b
5720     = 0  a == b
5721     > 0  a > b
5722 */
5723 
my_strnncollsp_utf8(const CHARSET_INFO * cs,const uchar * s,size_t slen,const uchar * t,size_t tlen,my_bool diff_if_only_endspace_difference)5724 static int my_strnncollsp_utf8(const CHARSET_INFO *cs,
5725                                const uchar *s, size_t slen,
5726                                const uchar *t, size_t tlen,
5727                                my_bool diff_if_only_endspace_difference)
5728 {
5729   int s_res, t_res, res;
5730   my_wc_t s_wc= 0, t_wc= 0;
5731   const uchar *se= s+slen, *te= t+tlen;
5732   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
5733 
5734 #ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE
5735   diff_if_only_endspace_difference= 0;
5736 #endif
5737 
5738   while ( s < se && t < te )
5739   {
5740     s_res=my_utf8_uni(cs,&s_wc, s, se);
5741     t_res=my_utf8_uni(cs,&t_wc, t, te);
5742 
5743     if ( s_res <= 0 || t_res <= 0 )
5744     {
5745       /* Incorrect string, compare byte by byte value */
5746       return bincmp(s, se, t, te);
5747     }
5748 
5749     my_tosort_unicode(uni_plane, &s_wc, cs->state);
5750     my_tosort_unicode(uni_plane, &t_wc, cs->state);
5751 
5752     if ( s_wc != t_wc )
5753     {
5754       return  s_wc > t_wc ? 1 : -1;
5755     }
5756 
5757     s+=s_res;
5758     t+=t_res;
5759   }
5760 
5761   slen= (size_t) (se-s);
5762   tlen= (size_t) (te-t);
5763   res= 0;
5764 
5765   if (slen != tlen)
5766   {
5767     int swap= 1;
5768     if (diff_if_only_endspace_difference)
5769       res= 1;                                   /* Assume 'a' is bigger */
5770     if (slen < tlen)
5771     {
5772       slen= tlen;
5773       s= t;
5774       se= te;
5775       swap= -1;
5776       res= -res;
5777     }
5778     /*
5779       This following loop uses the fact that in UTF-8
5780       all multibyte characters are greater than space,
5781       and all multibyte head characters are greater than
5782       space. It means if we meet a character greater
5783       than space, it always means that the longer string
5784       is greater. So we can reuse the same loop from the
5785       8bit version, without having to process full multibute
5786       sequences.
5787     */
5788     for ( ; s < se; s++)
5789     {
5790       if (*s != ' ')
5791 	return (*s < ' ') ? -swap : swap;
5792     }
5793   }
5794   return res;
5795 }
5796 
5797 
5798 /*
5799   Compare 0-terminated UTF8 strings.
5800 
5801   SYNOPSIS
5802     my_strcasecmp_utf8()
5803     cs                  character set handler
5804     s                   First 0-terminated string to compare
5805     t                   Second 0-terminated string to compare
5806 
5807   IMPLEMENTATION
5808 
5809   RETURN
5810     - negative number if s < t
5811     - positive number if s > t
5812     - 0 is the strings are equal
5813 */
5814 
5815 static
my_strcasecmp_utf8(const CHARSET_INFO * cs,const char * s,const char * t)5816 int my_strcasecmp_utf8(const CHARSET_INFO *cs, const char *s, const char *t)
5817 {
5818   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
5819   while (s[0] && t[0])
5820   {
5821     my_wc_t s_wc,t_wc;
5822 
5823     if ((uchar) s[0] < 128)
5824     {
5825       /*
5826         s[0] is between 0 and 127.
5827         It represents a single byte character.
5828         Convert it into weight according to collation.
5829       */
5830       s_wc= plane00[(uchar) s[0]].tolower;
5831       s++;
5832     }
5833     else
5834     {
5835       int res;
5836 
5837       /*
5838         Scan a multibyte character.
5839 
5840         In the future it is worth to write a special version of my_utf8_uni()
5841         for 0-terminated strings which will not take in account length. Now
5842         we call the regular version of my_utf8_uni() with s+3 in the
5843         last argument. s+3 is enough to scan any multibyte sequence.
5844 
5845         Calling the regular version of my_utf8_uni is safe for 0-terminated
5846         strings: we will never lose the end of the string:
5847         If we have 0 character in the middle of a multibyte sequence,
5848         then my_utf8_uni will always return a negative number, so the
5849         loop with finish.
5850       */
5851 
5852       res= my_utf8_uni(cs,&s_wc, (const uchar*)s, (const uchar*) s + 3);
5853 
5854       /*
5855          In the case of wrong multibyte sequence we will
5856          call strcmp() for byte-to-byte comparison.
5857       */
5858       if (res <= 0)
5859         return strcmp(s, t);
5860       s+= res;
5861 
5862       /* Convert Unicode code into weight according to collation */
5863       my_tolower_utf8mb3(uni_plane, &s_wc);
5864     }
5865 
5866 
5867     /* Do the same for the second string */
5868 
5869     if ((uchar) t[0] < 128)
5870     {
5871       /* Convert single byte character into weight */
5872       t_wc= plane00[(uchar) t[0]].tolower;
5873       t++;
5874     }
5875     else
5876     {
5877       int res=my_utf8_uni(cs,&t_wc, (const uchar*)t, (const uchar*) t + 3);
5878       if (res <= 0)
5879         return strcmp(s, t);
5880       t+= res;
5881 
5882       /* Convert code into weight */
5883       my_tolower_utf8mb3(uni_plane, &t_wc);
5884     }
5885 
5886     /* Now we have two weights, let's compare them */
5887     if ( s_wc != t_wc )
5888       return  ((int) s_wc) - ((int) t_wc);
5889   }
5890   return ((int)(uchar)s[0]) - ((int) (uchar) t[0]);
5891 }
5892 
5893 
5894 static
my_wildcmp_utf8(const CHARSET_INFO * cs,const char * str,const char * str_end,const char * wildstr,const char * wildend,int escape,int w_one,int w_many)5895 int my_wildcmp_utf8(const CHARSET_INFO *cs,
5896 		    const char *str,const char *str_end,
5897 		    const char *wildstr,const char *wildend,
5898 		    int escape, int w_one, int w_many)
5899 {
5900   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
5901   return my_wildcmp_unicode(cs,str,str_end,wildstr,wildend,
5902                             escape,w_one,w_many,uni_plane);
5903 }
5904 
5905 
5906 static
my_strnxfrmlen_utf8(const CHARSET_INFO * cs MY_ATTRIBUTE ((unused)),size_t len)5907 size_t my_strnxfrmlen_utf8(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)),
5908                            size_t len)
5909 {
5910   return (len * 2 + 2) / 3;
5911 }
5912 
5913 
5914 static
my_valid_mbcharlen_utf8(const CHARSET_INFO * cs MY_ATTRIBUTE ((unused)),const uchar * s,const uchar * e)5915 int my_valid_mbcharlen_utf8(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)),
5916                             const uchar *s, const uchar *e)
5917 {
5918   uchar c;
5919 
5920   if (s >= e)
5921     return MY_CS_TOOSMALL;
5922 
5923   c= s[0];
5924   if (c < 0xf0)
5925     return my_valid_mbcharlen_utf8mb3(s, e);
5926 
5927 #ifdef UNICODE_32BIT
5928   if (c < 0xf8 && sizeof(my_wc_t)*8 >= 32)
5929   {
5930     if (s+4 > e) /* We need 4 characters */
5931       return MY_CS_TOOSMALL4;
5932 
5933     if (!(IS_CONTINUATION_BYTE(s[1]) &&
5934           IS_CONTINUATION_BYTE(s[2]) &&
5935           IS_CONTINUATION_BYTE(s[3]) &&
5936           (c >= 0xf1 || s[1] >= 0x90)))
5937       return MY_CS_ILSEQ;
5938 
5939     return 4;
5940   }
5941   if (c < 0xfc && sizeof(my_wc_t)*8 >= 32)
5942   {
5943     if (s+5 >e) /* We need 5 characters */
5944       return MY_CS_TOOSMALL5;
5945 
5946     if (!(IS_CONTINUATION_BYTE(s[1]) &&
5947           IS_CONTINUATION_BYTE(s[2]) &&
5948           IS_CONTINUATION_BYTE(s[3]) &&
5949           IS_CONTINUATION_BYTE(s[4]) &&
5950           (c >= 0xf9 || s[1] >= 0x88)))
5951       return MY_CS_ILSEQ;
5952 
5953     return 5;
5954   }
5955   if (c < 0xfe && sizeof(my_wc_t)*8 >= 32)
5956   {
5957     if ( s+6 >e ) /* We need 6 characters */
5958       return MY_CS_TOOSMALL6;
5959 
5960     if (!(IS_CONTINUATION_BYTE(s[1]) &&
5961           IS_CONTINUATION_BYTE(s[2]) &&
5962           IS_CONTINUATION_BYTE(s[3]) &&
5963           IS_CONTINUATION_BYTE(s[4]) &&
5964           IS_CONTINUATION_BYTE(s[5]) &&
5965           (c >= 0xfd || s[1] >= 0x84)))
5966       return MY_CS_ILSEQ;
5967 
5968     return 6;
5969   }
5970 #endif
5971   return MY_CS_ILSEQ;
5972 }
5973 
5974 static size_t
my_well_formed_len_utf8(const CHARSET_INFO * cs,const char * b,const char * e,size_t pos,int * error)5975 my_well_formed_len_utf8(const CHARSET_INFO *cs, const char *b, const char *e,
5976                         size_t pos, int *error)
5977 {
5978   const char *b_start= b;
5979   *error= 0;
5980   while (pos)
5981   {
5982     int mb_len;
5983 
5984     if ((mb_len= my_valid_mbcharlen_utf8(cs, (uchar*) b, (uchar*) e)) <= 0)
5985     {
5986       *error= b < e ? 1 : 0;
5987       break;
5988     }
5989     b+= mb_len;
5990     pos--;
5991   }
5992   return (size_t) (b - b_start);
5993 }
5994 
my_ismbchar_utf8(const CHARSET_INFO * cs,const char * b,const char * e)5995 static uint my_ismbchar_utf8(const CHARSET_INFO *cs,const char *b,
5996                              const char *e)
5997 {
5998   int  res= my_valid_mbcharlen_utf8(cs, (const uchar*)b, (const uchar*)e);
5999   return (res>1) ? res : 0;
6000 }
6001 
my_mbcharlen_utf8(const CHARSET_INFO * cs MY_ATTRIBUTE ((unused)),uint c)6002 static uint my_mbcharlen_utf8(const CHARSET_INFO *cs  MY_ATTRIBUTE((unused)),
6003                               uint c)
6004 {
6005   if (c < 0x80)
6006     return 1;
6007   else if (c < 0xc2)
6008     return 0; /* Illegal mb head */
6009   else if (c < 0xe0)
6010     return 2;
6011   else if (c < 0xf0)
6012     return 3;
6013   return 0; /* Illegal mb head */;
6014 }
6015 
6016 
6017 static MY_COLLATION_HANDLER my_collation_utf8_general_ci_handler =
6018 {
6019     NULL,               /* init */
6020     my_strnncoll_utf8,
6021     my_strnncollsp_utf8,
6022     my_strnxfrm_unicode,
6023     my_strnxfrmlen_utf8,
6024     my_like_range_mb,
6025     my_wildcmp_utf8,
6026     my_strcasecmp_utf8,
6027     my_instr_mb,
6028     my_hash_sort_utf8,
6029     my_propagate_complex
6030 };
6031 
6032 
6033 static MY_COLLATION_HANDLER my_collation_utf8_bin_handler =
6034 {
6035     NULL,		/* init */
6036     my_strnncoll_mb_bin,
6037     my_strnncollsp_mb_bin,
6038     my_strnxfrm_unicode,
6039     my_strnxfrmlen_utf8,
6040     my_like_range_mb,
6041     my_wildcmp_mb_bin,
6042     my_strcasecmp_mb_bin,
6043     my_instr_mb,
6044     my_hash_sort_mb_bin,
6045     my_propagate_simple
6046 };
6047 
6048 MY_CHARSET_HANDLER my_charset_utf8_handler=
6049 {
6050     NULL,               /* init */
6051     my_ismbchar_utf8,
6052     my_mbcharlen_utf8,
6053     my_numchars_mb,
6054     my_charpos_mb,
6055     my_well_formed_len_utf8,
6056     my_lengthsp_8bit,
6057     my_numcells_mb,
6058     my_utf8_uni,
6059     my_uni_utf8,
6060     my_mb_ctype_mb,
6061     my_caseup_str_utf8,
6062     my_casedn_str_utf8,
6063     my_caseup_utf8,
6064     my_casedn_utf8,
6065     my_snprintf_8bit,
6066     my_long10_to_str_8bit,
6067     my_longlong10_to_str_8bit,
6068     my_fill_8bit,
6069     my_strntol_8bit,
6070     my_strntoul_8bit,
6071     my_strntoll_8bit,
6072     my_strntoull_8bit,
6073     my_strntod_8bit,
6074     my_strtoll10_8bit,
6075     my_strntoull10rnd_8bit,
6076     my_scan_8bit
6077 };
6078 
6079 
6080 
6081 CHARSET_INFO my_charset_utf8_general_ci=
6082 {
6083     33,0,0,             /* number       */
6084     MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE,  /* state  */
6085     "utf8",             /* cs name      */
6086     "utf8_general_ci",  /* name         */
6087     "",                 /* comment      */
6088     NULL,               /* tailoring    */
6089     ctype_utf8,         /* ctype        */
6090     to_lower_utf8,      /* to_lower     */
6091     to_upper_utf8,      /* to_upper     */
6092     to_upper_utf8,      /* sort_order   */
6093     NULL,               /* uca          */
6094     NULL,               /* tab_to_uni   */
6095     NULL,               /* tab_from_uni */
6096     &my_unicase_default,/* caseinfo     */
6097     NULL,               /* state_map    */
6098     NULL,               /* ident_map    */
6099     1,                  /* strxfrm_multiply */
6100     1,                  /* caseup_multiply  */
6101     1,                  /* casedn_multiply  */
6102     1,                  /* mbminlen     */
6103     3,                  /* mbmaxlen     */
6104     1,                  /* mbmaxlenlen  */
6105     0,                  /* min_sort_char */
6106     0xFFFF,             /* max_sort_char */
6107     ' ',                /* pad char      */
6108     0,                  /* escape_with_backslash_is_dangerous */
6109     1,                  /* levels_for_compare */
6110     1,                  /* levels_for_order   */
6111     &my_charset_utf8_handler,
6112     &my_collation_utf8_general_ci_handler
6113 };
6114 
6115 
6116 CHARSET_INFO my_charset_utf8_tolower_ci=
6117 {
6118     56,0,0,             /* number       */
6119     MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_LOWER_SORT,
6120     "utf8",             /* cs name      */
6121     "utf8_tolower_ci",  /* name         */
6122     "",                 /* comment      */
6123     NULL,               /* tailoring    */
6124     ctype_utf8,         /* ctype        */
6125     to_lower_utf8,      /* to_lower     */
6126     to_upper_utf8,      /* to_upper     */
6127     to_upper_utf8,      /* sort_order   */
6128     NULL,               /* uca          */
6129     NULL,               /* tab_to_uni   */
6130     NULL,               /* tab_from_uni */
6131     &my_unicase_default,/* caseinfo     */
6132     NULL,               /* state_map    */
6133     NULL,               /* ident_map    */
6134     1,                  /* strxfrm_multiply */
6135     1,                  /* caseup_multiply  */
6136     1,                  /* casedn_multiply  */
6137     1,                  /* mbminlen     */
6138     3,                  /* mbmaxlen     */
6139     1,                  /* mbmaxlenlen  */
6140     0,                  /* min_sort_char */
6141     0xFFFF,             /* max_sort_char */
6142     ' ',                /* pad char      */
6143     0,                  /* escape_with_backslash_is_dangerous */
6144     1,                  /* levels_for_compare */
6145     1,                  /* levels_for_order   */
6146     &my_charset_utf8_handler,
6147     &my_collation_utf8_general_ci_handler
6148 };
6149 
6150 
6151 CHARSET_INFO my_charset_utf8_general_mysql500_ci=
6152 {
6153   223,0,0,                                      /* number           */
6154   MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE,  /* state            */
6155   "utf8",                                       /* cs name          */
6156   "utf8_general_mysql500_ci",                   /* name             */
6157   "",                                           /* comment          */
6158   NULL,                                         /* tailoring        */
6159   ctype_utf8,                                   /* ctype            */
6160   to_lower_utf8,                                /* to_lower         */
6161   to_upper_utf8,                                /* to_upper         */
6162   to_upper_utf8,                                /* sort_order       */
6163   NULL,                                         /* uca              */
6164   NULL,                                         /* tab_to_uni       */
6165   NULL,                                         /* tab_from_uni     */
6166   &my_unicase_mysql500,                         /* caseinfo         */
6167   NULL,                                         /* state_map        */
6168   NULL,                                         /* ident_map        */
6169   1,                                            /* strxfrm_multiply */
6170   1,                                            /* caseup_multiply  */
6171   1,                                            /* casedn_multiply  */
6172   1,                                            /* mbminlen         */
6173   3,                                            /* mbmaxlen         */
6174   1,                                            /* mbmaxlenlen      */
6175   0,                                            /* min_sort_char    */
6176   0xFFFF,                                       /* max_sort_char    */
6177   ' ',                                          /* pad char         */
6178   0,                          /* escape_with_backslash_is_dangerous */
6179   1,                                            /* levels_for_compare */
6180   1,                                            /* levels_for_order   */
6181   &my_charset_utf8_handler,
6182   &my_collation_utf8_general_ci_handler
6183 };
6184 
6185 
6186 CHARSET_INFO my_charset_utf8_bin=
6187 {
6188     83,0,0,             /* number       */
6189     MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|
6190     MY_CS_UNICODE, /* state  */
6191     "utf8",             /* cs name      */
6192     "utf8_bin",         /* name         */
6193     "",                 /* comment      */
6194     NULL,               /* tailoring    */
6195     ctype_utf8,         /* ctype        */
6196     to_lower_utf8,      /* to_lower     */
6197     to_upper_utf8,      /* to_upper     */
6198     NULL,               /* sort_order   */
6199     NULL,               /* uca          */
6200     NULL,               /* tab_to_uni   */
6201     NULL,               /* tab_from_uni */
6202     &my_unicase_default,/* caseinfo     */
6203     NULL,               /* state_map    */
6204     NULL,               /* ident_map    */
6205     1,                  /* strxfrm_multiply */
6206     1,                  /* caseup_multiply  */
6207     1,                  /* casedn_multiply  */
6208     1,                  /* mbminlen     */
6209     3,                  /* mbmaxlen     */
6210     1,                  /* mbmaxlenlen  */
6211     0,                  /* min_sort_char */
6212     0xFFFF,             /* max_sort_char */
6213     ' ',                /* pad char      */
6214     0,                  /* escape_with_backslash_is_dangerous */
6215     1,                  /* levels_for_compare */
6216     1,                  /* levels_for_order   */
6217     &my_charset_utf8_handler,
6218     &my_collation_utf8_bin_handler
6219 };
6220 
6221 #ifdef HAVE_UTF8_GENERAL_CS
6222 
6223 /*
6224  * These functions bacically do the same as their original, except
6225  * that they return 0 only when two comparing unicode strings are
6226  * strictly the same in case-sensitive way.  See "save_diff" local
6227  * variable to what they actually do.
6228  */
6229 
my_strnncoll_utf8_cs(const CHARSET_INFO * cs,const uchar * s,size_t slen,const uchar * t,size_t tlen,my_bool t_is_prefix)6230 static int my_strnncoll_utf8_cs(const CHARSET_INFO *cs,
6231                                 const uchar *s, size_t slen,
6232                                 const uchar *t, size_t tlen,
6233                                 my_bool t_is_prefix)
6234 {
6235   int s_res,t_res;
6236   my_wc_t s_wc,t_wc;
6237   const uchar *se=s+slen;
6238   const uchar *te=t+tlen;
6239   int save_diff = 0;
6240   int diff;
6241   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
6242 
6243   while ( s < se && t < te )
6244   {
6245     s_res=my_utf8_uni(cs,&s_wc, s, se);
6246     t_res=my_utf8_uni(cs,&t_wc, t, te);
6247 
6248     if ( s_res <= 0 || t_res <= 0 )
6249 
6250     {
6251       /* Incorrect string, compare by char value */
6252       return ((int)s[0]-(int)t[0]);
6253     }
6254 
6255     if ( save_diff == 0 )
6256     {
6257       save_diff = ((int)s_wc) - ((int)t_wc);
6258     }
6259 
6260     my_tosort_unicode(uni_plane, &s_wc, cs->state);
6261     my_tosort_unicode(uni_plane, &t_wc, cs->state);
6262 
6263     if ( s_wc != t_wc )
6264     {
6265       return  ((int) s_wc) - ((int) t_wc);
6266     }
6267 
6268     s+=s_res;
6269     t+=t_res;
6270   }
6271   diff = ( (se-s) - (te-t) );
6272   return t_is_prefix ? t-te : ((diff == 0) ? save_diff : diff);
6273 }
6274 
my_strnncollsp_utf8_cs(const CHARSET_INFO * cs,const uchar * s,size_t slen,const uchar * t,size_t tlen,my_bool diff_if_only_endspace_difference)6275 static int my_strnncollsp_utf8_cs(const CHARSET_INFO *cs,
6276                                   const uchar *s, size_t slen,
6277                                   const uchar *t, size_t tlen,
6278                                   my_bool diff_if_only_endspace_difference)
6279 {
6280   int s_res, t_res, res;
6281   my_wc_t s_wc, t_wc;
6282   const uchar *se= s + slen;
6283   const uchar *te= t + tlen;
6284   int save_diff= 0;
6285   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
6286 
6287 #ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE
6288   diff_if_only_endspace_difference= 0;
6289 #endif
6290 
6291   while ( s < se && t < te )
6292   {
6293     s_res=my_utf8_uni(cs,&s_wc, s, se);
6294     t_res=my_utf8_uni(cs,&t_wc, t, te);
6295 
6296     if ( s_res <= 0 || t_res <= 0 )
6297     {
6298       /* Incorrect string, compare by char value */
6299       return ((int)s[0]-(int)t[0]);
6300     }
6301 
6302     if ( save_diff == 0 )
6303     {
6304       save_diff = ((int)s_wc) - ((int)t_wc);
6305     }
6306 
6307     my_tosort_unicode(uni_plane, &s_wc, cs->state);
6308     my_tosort_unicode(uni_plane, &t_wc, cs->state);
6309 
6310     if ( s_wc != t_wc )
6311     {
6312       return  ((int) s_wc) - ((int) t_wc);
6313     }
6314 
6315     s+=s_res;
6316     t+=t_res;
6317   }
6318 
6319   slen= se-s;
6320   tlen= te-t;
6321   res= 0;
6322 
6323   if (slen != tlen)
6324   {
6325     int swap= 1;
6326     if (diff_if_only_endspace_difference)
6327       res= 1;                                   /* Assume 'a' is bigger */
6328     if (slen < tlen)
6329     {
6330       slen= tlen;
6331       s= t;
6332       se= te;
6333       swap= -1;
6334       res= -res;
6335     }
6336     /*
6337       This following loop uses the fact that in UTF-8
6338       all multibyte characters are greater than space,
6339       and all multibyte head characters are greater than
6340       space. It means if we meet a character greater
6341       than space, it always means that the longer string
6342       is greater. So we can reuse the same loop from the
6343       8bit version, without having to process full multibute
6344       sequences.
6345     */
6346     for ( ; s < se; s++)
6347     {
6348       if (*s != (uchar) ' ')
6349         return (*s < (uchar) ' ') ? -swap : swap;
6350     }
6351   }
6352   return save_diff;
6353 }
6354 
6355 static MY_COLLATION_HANDLER my_collation_cs_handler =
6356 {
6357     NULL,		/* init */
6358     my_strnncoll_utf8_cs,
6359     my_strnncollsp_utf8_cs,
6360     my_strnxfrm_unicode,
6361     my_strnxfrmlen_utf8,
6362     my_like_range_simple,
6363     my_wildcmp_mb,
6364     my_strcasecmp_utf8,
6365     my_instr_mb,
6366     my_hash_sort_utf8,
6367     my_propagate_simple
6368 };
6369 
6370 CHARSET_INFO my_charset_utf8_general_cs=
6371 {
6372     254,0,0,		/* number       */
6373     MY_CS_COMPILED|MY_CS_UNICODE,	/* state  */
6374     "utf8",		/* cs name      */
6375     "utf8_general_cs",	/* name         */
6376     "",			/* comment      */
6377     NULL,		/* tailoring    */
6378     ctype_utf8,		/* ctype        */
6379     to_lower_utf8,	/* to_lower     */
6380     to_upper_utf8,	/* to_upper     */
6381     to_upper_utf8,	/* sort_order   */
6382     NULL,		/* uca          */
6383     NULL,		/* tab_to_uni   */
6384     NULL,		/* tab_from_uni */
6385     &my_unicase_default,/* caseinfo     */
6386     NULL,		/* state_map    */
6387     NULL,		/* ident_map    */
6388     1,			/* strxfrm_multiply */
6389     1,                  /* caseup_multiply  */
6390     1,                  /* casedn_multiply  */
6391     1,			/* mbminlen     */
6392     3,			/* mbmaxlen     */
6393     1,                  /* mbmaxlenlen  */
6394     0,			/* min_sort_char */
6395     255,		/* max_sort_char */
6396     ' ',                /* pad char      */
6397     0,                  /* escape_with_backslash_is_dangerous */
6398     1,                  /* levels_for_compare */
6399     1,                  /* levels_for_order   */
6400     &my_charset_utf8_handler,
6401     &my_collation_cs_handler
6402 };
6403 #endif	/* Cybozu Hack */
6404 
6405 
6406 /*
6407   File system encoding components:
6408 
6409 Code range Pattern            Number   Used Unused  Blocks
6410 -----------------------------------------------------------------------------
6411 00C0..017F [.][0..4][g..z] 5*20= 100   97     3  Latin1 Supplement + Ext A
6412 0370..03FF [.][5..9][g..z] 5*20= 100   88    12  Greek + Coptic
6413 0400..052F [.][g..z][0..6] 20*7= 140  140   137  Cyrillic
6414 0530..058F [.][g..z][7..8] 20*2=  40   38     2  Armenian
6415 2160..217F [.][g..z][9]    20*1=  20   16     4  Number Forms
6416 0180..02AF [.][g..z][a..k] 28*11=220  203    17  Latin Ext B + IPA
6417 1E00..0EFF [.][g..z][l..r] 20*7= 140  136     4  Latin Additional Extended
6418 1F00..1FFF [.][g..z][s..z] 20*8= 160  144    16  Greek Extended
6419 ....  .... [.][a..f][g..z] 6*20= 120    0   120  RESERVED
6420 24B6..24E9 [.][@][a..z]           26   26     0  Enclosed Alphanumerics
6421 FF21..FF5A [.][a..z][@]           26   26     0  Full Width forms
6422 
6423 All other characters are encoded using five bytes:
6424 
6425 [.][0..9a..z][0..9a..z][0..9a..z][0..9a..z]
6426 
6427 */
6428 
6429 
6430 static const uint16 touni[5994]=
6431 {
6432   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6433   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6434   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00C0,
6435   0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,0x00C8,
6436   0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,0x00D0,
6437   0x00D1,0x00D2,0x00D3,0x0000,0x0000,0x0000,0x0000,0x0000,
6438   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00E0,
6439   0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,0x00E8,
6440   0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,0x00F0,
6441   0x00F1,0x00F2,0x00F3,0x0000,0x0000,0x0000,0x0000,0x0000,
6442   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6443   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6444   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00D4,
6445   0x00D5,0x00D6,0x0000,0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,
6446   0x00DD,0x00DE,0x0178,0x0100,0x0102,0x0104,0x0106,0x0108,
6447   0x010A,0x010C,0x010E,0x0000,0x0000,0x0000,0x0000,0x0000,
6448   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00F4,
6449   0x00F5,0x00F6,0x00DF,0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,
6450   0x00FD,0x00FE,0x00FF,0x0101,0x0103,0x0105,0x0107,0x0109,
6451   0x010B,0x010D,0x010F,0x0000,0x0000,0x0000,0x0000,0x0000,
6452   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6453   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6454   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0110,
6455   0x0112,0x0114,0x0116,0x0118,0x011A,0x011C,0x011E,0x0120,
6456   0x0122,0x0124,0x0126,0x0128,0x012A,0x012C,0x012E,0x0000,
6457   0x0132,0x0134,0x0136,0x0000,0x0000,0x0000,0x0000,0x0000,
6458   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0111,
6459   0x0113,0x0115,0x0117,0x0119,0x011B,0x011D,0x011F,0x0121,
6460   0x0123,0x0125,0x0127,0x0129,0x012B,0x012D,0x012F,0x0131,
6461   0x0133,0x0135,0x0137,0x0000,0x0000,0x0000,0x0000,0x0000,
6462   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6463   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6464   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6465   0x0139,0x013B,0x013D,0x013F,0x0141,0x0143,0x0145,0x0147,
6466   0x0000,0x014A,0x014C,0x014E,0x0150,0x0152,0x0154,0x0156,
6467   0x0158,0x015A,0x015C,0x0000,0x0000,0x0000,0x0000,0x0000,
6468   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0138,
6469   0x013A,0x013C,0x013E,0x0140,0x0142,0x0144,0x0146,0x0148,
6470   0x0149,0x014B,0x014D,0x014F,0x0151,0x0153,0x0155,0x0157,
6471   0x0159,0x015B,0x015D,0x0000,0x0000,0x0000,0x0000,0x0000,
6472   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6473   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6474   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x015E,
6475   0x0160,0x0162,0x0164,0x0166,0x0168,0x016A,0x016C,0x016E,
6476   0x0170,0x0172,0x0174,0x0176,0x0179,0x017B,0x017D,0x0000,
6477   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6478   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x015F,
6479   0x0161,0x0163,0x0165,0x0167,0x0169,0x016B,0x016D,0x016F,
6480   0x0171,0x0173,0x0175,0x0177,0x017A,0x017C,0x017E,0x017F,
6481   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6482   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6483   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6484   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6485   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6486   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6487   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6488   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6489   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6490   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6491   0x0000,0x0390,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6492   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6493   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6494   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0386,
6495   0x0388,0x0389,0x038A,0x0000,0x0391,0x0000,0x0393,0x0394,
6496   0x0395,0x0396,0x0397,0x0000,0x0399,0x0000,0x039B,0x039C,
6497   0x039D,0x039E,0x039F,0x0000,0x0000,0x0000,0x0000,0x0000,
6498   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03AC,
6499   0x03AD,0x03AE,0x03AF,0x03B0,0x03B1,0x03B2,0x03B3,0x03B4,
6500   0x03B5,0x03B6,0x03B7,0x03B8,0x03B9,0x03BA,0x03BB,0x03BC,
6501   0x03BD,0x03BE,0x03BF,0x0000,0x0000,0x0000,0x0000,0x0000,
6502   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6503   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6504   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6505   0x03A1,0x0000,0x0000,0x03A4,0x03A5,0x0000,0x03A7,0x03A8,
6506   0x03A9,0x03AA,0x03AB,0x038C,0x038E,0x038F,0x0000,0x0392,
6507   0x0398,0x03D2,0x03D3,0x0000,0x0000,0x0000,0x0000,0x0000,
6508   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03C0,
6509   0x03C1,0x03C2,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,
6510   0x03C9,0x03CA,0x03CB,0x03CC,0x03CD,0x03CE,0x0000,0x03D0,
6511   0x03D1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6512   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6513   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6514   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03D4,
6515   0x03A6,0x03A0,0x0000,0x0000,0x03DA,0x03DC,0x03DE,0x03E0,
6516   0x03E2,0x03E4,0x03E6,0x03E8,0x03EA,0x03EC,0x03EE,0x039A,
6517   0x0000,0x03A3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6518   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6519   0x03D5,0x03D6,0x03D7,0x03D9,0x03DB,0x03DD,0x03DF,0x03E1,
6520   0x03E3,0x03E5,0x03E7,0x03E9,0x03EB,0x03ED,0x03EF,0x03F0,
6521   0x03F1,0x03F2,0x03F3,0x0000,0x0000,0x0000,0x0000,0x0000,
6522   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6523   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6524   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6525   0x0000,0x0000,0x0000,0x0000,0x03FD,0x03FE,0x03FF,0x0000,
6526   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6527   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6528   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03F5,
6529   0x03F6,0x03F8,0x03FB,0x03FC,0x0000,0x0000,0x0000,0x0000,
6530   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6531   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6532   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6533   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6534   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6535   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6536   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6537   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6538   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6539   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6540   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6541   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6542   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6543   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6544   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6545   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6546   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6547   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6548   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6549   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6550   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6551   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6552   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6553   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6554   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6555   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6556   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6557   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6558   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6559   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6560   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6561   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6562   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6563   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6564   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6565   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6566   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6567   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6568   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6569   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6570   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6571   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6572   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6573   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6574   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6575   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6576   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6577   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6578   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6579   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6580   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6581   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6582   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6583   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6584   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6585   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6586   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6587   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6588   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6589   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6590   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6591   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6592   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6593   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6594   0x0000,0x24B6,0x24B7,0x24B8,0x24B9,0x24BA,0x24BB,0x24BC,
6595   0x24BD,0x24BE,0x24BF,0x24C0,0x24C1,0x24C2,0x24C3,0x24C4,
6596   0x24C5,0x24C6,0x24C7,0x24C8,0x24C9,0x24CA,0x24CB,0x24CC,
6597   0x24CD,0x24CE,0x24CF,0x0000,0x0000,0x0000,0x0000,0x0000,
6598   0x0000,0x24D0,0x24D1,0x24D2,0x24D3,0x24D4,0x24D5,0x24D6,
6599   0x24D7,0x24D8,0x24D9,0x24DA,0x24DB,0x24DC,0x24DD,0x24DE,
6600   0x24DF,0x24E0,0x24E1,0x24E2,0x24E3,0x24E4,0x24E5,0x24E6,
6601   0x24E7,0x24E8,0x24E9,0x0000,0x0000,0x0000,0x0000,0x0000,
6602   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6603   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6604   0xFF21,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6605   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6606   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6607   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6608   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6609   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6610   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6611   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6612   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6613   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6614   0xFF22,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6615   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6616   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6617   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6618   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6619   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6620   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6621   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6622   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6623   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6624   0xFF23,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6625   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6626   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6627   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6628   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6629   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6630   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6631   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6632   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6633   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6634   0xFF24,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6635   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6636   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6637   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6638   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6639   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6640   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6641   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6642   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6643   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6644   0xFF25,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6645   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6646   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6647   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6648   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6649   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6650   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6651   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6652   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6653   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6654   0xFF26,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6655   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6656   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6657   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6658   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6659   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6660   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6661   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6662   0x0410,0x0424,0x0408,0x0478,0x04A6,0x04CD,0x04F4,0x0000,
6663   0x0544,0x2160,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6664   0xFF27,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6665   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6666   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6667   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6668   0x0000,0x0000,0x01B3,0x01DE,0x0208,0x0230,0x0000,0x0000,
6669   0x0000,0x0000,0x0000,0x0000,0x1E00,0x1E28,0x1E50,0x1E78,
6670   0x1E60,0x1EBE,0x1EE6,0x1F08,0x1F2A,0x0000,0x1F6C,0x1F88,
6671   0x1FAC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6672   0x0411,0x0425,0x0409,0x047A,0x04A8,0x0000,0x04F6,0x0531,
6673   0x0545,0x2161,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6674   0xFF28,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6675   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6676   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6677   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6678   0x0000,0x0182,0x01B5,0x01E0,0x020A,0x0232,0x0000,0x0000,
6679   0x019D,0x0000,0x0000,0x0000,0x1E02,0x1E2A,0x1E52,0x1E7A,
6680   0x0000,0x1EC0,0x1EE8,0x1F09,0x1F2B,0x0000,0x1F6D,0x1F89,
6681   0x1FAD,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6682   0x0412,0x0426,0x040A,0x047C,0x04AA,0x04D0,0x04F8,0x0532,
6683   0x0546,0x2162,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6684   0xFF29,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6685   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6686   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6687   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6688   0x0000,0x0184,0x01B8,0x01E2,0x020C,0x0000,0x0000,0x0000,
6689   0x0000,0x0000,0x0000,0x0000,0x1E04,0x1E2C,0x1E54,0x1E7C,
6690   0x0000,0x1EC2,0x1EEA,0x1F0A,0x1F2C,0x0000,0x1F6E,0x1F8A,
6691   0x1FAE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6692   0x0413,0x0427,0x040B,0x047E,0x04AC,0x04D2,0x0000,0x0533,
6693   0x0547,0x2163,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6694   0xFF2A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6695   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6696   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6697   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6698   0x0000,0x0187,0x0000,0x01E4,0x020E,0x0000,0x0000,0x0193,
6699   0x0000,0x01AE,0x0000,0x0000,0x1E06,0x1E2E,0x1E56,0x1E7E,
6700   0x0000,0x1EC4,0x1EEC,0x1F0B,0x1F2D,0x0000,0x1F6F,0x1F8B,
6701   0x1FAF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6702   0x0414,0x0428,0x040C,0x0480,0x04AE,0x04D4,0x0000,0x0534,
6703   0x0548,0x2164,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6704   0xFF2B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6705   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6706   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6707   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6708   0x0000,0x018B,0x0000,0x01E6,0x0210,0x0000,0x0000,0x0000,
6709   0x019F,0x0000,0x0000,0x0000,0x1E08,0x1E30,0x1E58,0x1E80,
6710   0x0000,0x1EC6,0x1EEE,0x1F0C,0x1F2E,0x0000,0x1FBA,0x1F8C,
6711   0x1FB8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6712   0x0415,0x0429,0x040D,0x0000,0x04B0,0x04D6,0x0000,0x0535,
6713   0x0549,0x2165,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6714   0xFF2C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6715   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6716   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6717   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6718   0x0000,0x0000,0x0000,0x01E8,0x0212,0x0000,0x0000,0x0000,
6719   0x0000,0x01B1,0x0000,0x0000,0x1E0A,0x1E32,0x1E5A,0x1E82,
6720   0x1EA0,0x1EC8,0x1EF0,0x1F0D,0x1F2F,0x1F59,0x1FBB,0x1F8D,
6721   0x1FB9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6722   0x0416,0x042A,0x040E,0x048A,0x04B2,0x04D8,0x0000,0x0536,
6723   0x054A,0x2166,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6724   0xFF2D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6725   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6726   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6727   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6728   0x0000,0x0191,0x0000,0x01EA,0x0214,0x0000,0x0000,0x0194,
6729   0x0000,0x01B2,0x0000,0x0000,0x1E0C,0x1E34,0x1E5C,0x1E84,
6730   0x1EA2,0x1ECA,0x1EF2,0x1F0E,0x1F38,0x0000,0x1FC8,0x1F8E,
6731   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6732   0x0417,0x042B,0x040F,0x048C,0x04B4,0x04DA,0x0000,0x0537,
6733   0x054B,0x2167,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6734   0xFF2E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6735   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6736   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6737   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6738   0x0000,0x01F6,0x01BC,0x01EC,0x0216,0x0000,0x0000,0x0000,
6739   0x0000,0x0000,0x0000,0x0000,0x1E0E,0x1E36,0x1E5E,0x1E86,
6740   0x1EA4,0x1ECC,0x1EF4,0x1F0F,0x1F39,0x1F5B,0x1FC9,0x1F8F,
6741   0x1FBC,0x1FE8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6742   0x0418,0x042C,0x0460,0x048E,0x04B6,0x04DC,0x0000,0x0538,
6743   0x054C,0x2168,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6744   0xFF2F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6745   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6746   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6747   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6748   0x0000,0x0198,0x01C4,0x01EE,0x0218,0x023A,0x0000,0x0000,
6749   0x0000,0x0000,0x0000,0x0000,0x1E10,0x1E38,0x0000,0x1E88,
6750   0x1EA6,0x1ECE,0x1EF6,0x1F18,0x1F3A,0x0000,0x1FCA,0x1F98,
6751   0x0000,0x1FE9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6752   0x0419,0x042D,0x0462,0x0490,0x04B8,0x04DE,0x0500,0x0539,
6753   0x054D,0x2169,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6754   0xFF30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6755   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6756   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6757   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6758   0x0000,0x023D,0x01C7,0x0000,0x021A,0x023B,0x0000,0x0000,
6759   0x0000,0x0000,0x0000,0x0000,0x1E12,0x1E3A,0x1E62,0x1E8A,
6760   0x1EA8,0x1ED0,0x1EF8,0x1F19,0x1F3B,0x1F5D,0x1FCB,0x1F99,
6761   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6762   0x041A,0x042E,0x0464,0x0492,0x04BA,0x04E0,0x0502,0x053A,
6763   0x054E,0x216A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6764   0xFF31,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6765   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6766   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6767   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6768   0x0000,0x0000,0x01CA,0x01F1,0x021C,0x023E,0x0181,0x0000,
6769   0x0000,0x0000,0x0000,0x0000,0x1E14,0x1E3C,0x1E64,0x1E8C,
6770   0x1EAA,0x1ED2,0x0000,0x1F1A,0x1F3C,0x0000,0x1FDA,0x1F9A,
6771   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6772   0x041B,0x042F,0x0466,0x0494,0x04BC,0x04E2,0x0504,0x053B,
6773   0x054F,0x216B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6774   0xFF32,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6775   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6776   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6777   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6778   0x0000,0x0220,0x01CD,0x01F4,0x021E,0x0000,0x0186,0x0197,
6779   0x0000,0x0000,0x0000,0x0000,0x1E16,0x1E3E,0x1E66,0x1E8E,
6780   0x1EAC,0x1ED4,0x0000,0x1F1B,0x1F3D,0x1F5F,0x1FDB,0x1F9B,
6781   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6782   0x041C,0x0400,0x0468,0x0496,0x04BE,0x04E4,0x0506,0x053C,
6783   0x0550,0x216C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6784   0xFF33,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6785   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6786   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6787   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6788   0x0000,0x01A0,0x01CF,0x01F8,0x0000,0x0000,0x0000,0x0196,
6789   0x0000,0x0000,0x0000,0x0000,0x1E18,0x1E40,0x1E68,0x1E90,
6790   0x1EAE,0x1ED6,0x0000,0x1F1C,0x1F3E,0x0000,0x1FF8,0x1F9C,
6791   0x0000,0x1FEC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6792   0x041D,0x0401,0x046A,0x0498,0x04C0,0x04E6,0x0508,0x053D,
6793   0x0551,0x216D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6794   0xFF34,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6795   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6796   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6797   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6798   0x0000,0x01A2,0x01D1,0x01FA,0x0222,0x0000,0x0189,0x0000,
6799   0x0000,0x01B7,0x0000,0x0000,0x1E1A,0x1E42,0x1E6A,0x1E92,
6800   0x1EB0,0x1ED8,0x0000,0x1F1D,0x1F3F,0x0000,0x1FF9,0x1F9D,
6801   0x1FCC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6802   0x041E,0x0402,0x046C,0x049A,0x04C1,0x04E8,0x050A,0x053E,
6803   0x0552,0x216E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6804   0xFF35,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6805   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6806   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6807   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6808   0x0000,0x01A4,0x01D3,0x01FC,0x0224,0x0000,0x018A,0x0000,
6809   0x0000,0x0000,0x0000,0x0000,0x1E1C,0x1E44,0x1E6C,0x1E94,
6810   0x1EB2,0x1EDA,0x0000,0x0000,0x1F48,0x0000,0x1FEA,0x1F9E,
6811   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6812   0x041F,0x0403,0x046E,0x049C,0x04C3,0x04EA,0x050C,0x053F,
6813   0x0553,0x216F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6814   0xFF36,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6815   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6816   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6817   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6818   0x0000,0x01A7,0x01D5,0x01FE,0x0226,0x0000,0x0000,0x0000,
6819   0x01A6,0x0241,0x0000,0x0000,0x1E1E,0x1E46,0x1E6E,0x0000,
6820   0x1EB4,0x1EDC,0x0000,0x0000,0x1F49,0x0000,0x1FEB,0x1F9F,
6821   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6822   0x0420,0x0404,0x0470,0x049E,0x04C5,0x04EC,0x050E,0x0540,
6823   0x0554,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6824   0xFF37,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6825   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6826   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6827   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6828   0x0000,0x0000,0x01D7,0x0200,0x0228,0x0000,0x018F,0x0000,
6829   0x0000,0x0000,0x0000,0x0000,0x1E20,0x1E48,0x1E70,0x0000,
6830   0x1EB6,0x1EDE,0x0000,0x0000,0x1F4A,0x1F68,0x1FFA,0x1FA8,
6831   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6832   0x0421,0x0405,0x0472,0x04A0,0x04C7,0x04EE,0x0000,0x0541,
6833   0x0555,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6834   0xFF38,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6835   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6836   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6837   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6838   0x0000,0x0000,0x01D9,0x0202,0x022A,0x0000,0x0000,0x0000,
6839   0x0000,0x0000,0x0000,0x0000,0x1E22,0x1E4A,0x1E72,0x0000,
6840   0x1EB8,0x1EE0,0x0000,0x0000,0x1F4B,0x1F69,0x1FFB,0x1FA9,
6841   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6842   0x0422,0x0406,0x0474,0x04A2,0x04C9,0x04F0,0x0000,0x0542,
6843   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6844   0xFF39,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6845   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6846   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6847   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6848   0x0000,0x01AC,0x01DB,0x0204,0x022C,0x0000,0x0190,0x019C,
6849   0x01A9,0x0000,0x0000,0x0000,0x1E24,0x1E4C,0x1E74,0x0000,
6850   0x1EBA,0x1EE2,0x0000,0x1F28,0x1F4C,0x1F6A,0x0000,0x1FAA,
6851   0x1FD8,0x1FFC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6852   0x0423,0x0407,0x0476,0x04A4,0x04CB,0x04F2,0x0000,0x0543,
6853   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6854   0xFF3A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6855   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6856   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6857   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6858   0x0000,0x01AF,0x018E,0x0206,0x022E,0x0000,0x0000,0x0000,
6859   0x0000,0x0000,0x0000,0x0000,0x1E26,0x1E4E,0x1E76,0x0000,
6860   0x1EBC,0x1EE4,0x0000,0x1F29,0x1F4D,0x1F6B,0x0000,0x1FAB,
6861   0x1FD9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6862   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6863   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6864   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6865   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6866   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6867   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6868   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6869   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6870   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6871   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6872   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6873   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6874   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6875   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6876   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6877   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6878   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6879   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6880   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6881   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6882   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6883   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6884   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6885   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6886   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6887   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6888   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6889   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6890   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6891   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6892   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6893   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6894   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6895   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6896   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6897   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6898   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6899   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6900   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6901   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6902   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6903   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6904   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6905   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6906   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6907   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6908   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6909   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6910   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6911   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6912   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6913   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6914   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6915   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6916   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6917   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6918   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6919   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6920   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6921   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6922   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6923   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6924   0xFF41,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6925   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6926   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6927   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6928   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6929   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6930   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6931   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6932   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6933   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6934   0xFF42,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6935   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6936   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6937   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6938   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6939   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6940   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6941   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6942   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6943   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6944   0xFF43,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6945   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6946   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6947   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6948   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6949   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6950   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6951   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6952   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6953   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6954   0xFF44,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6955   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6956   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6957   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6958   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6959   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6960   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6961   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6962   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6963   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6964   0xFF45,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6965   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6966   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6967   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6968   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6969   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6970   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6971   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6972   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6973   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6974   0xFF46,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6975   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6976   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6977   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6978   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6979   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6980   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6981   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6982   0x0430,0x0444,0x0458,0x0479,0x04A7,0x04CE,0x04F5,0x0000,
6983   0x0574,0x2170,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6984   0xFF47,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6985   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6986   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6987   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6988   0x0000,0x0180,0x01B4,0x01DF,0x0209,0x0231,0x0000,0x025D,
6989   0x0271,0x0285,0x0299,0x02AD,0x1E01,0x1E29,0x1E51,0x1E79,
6990   0x1E9B,0x1EBF,0x1EE7,0x1F00,0x1F22,0x0000,0x1F64,0x1F80,
6991   0x1FA4,0x1FD2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6992   0x0431,0x0445,0x0459,0x047B,0x04A9,0x0000,0x04F7,0x0561,
6993   0x0575,0x2171,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6994   0xFF48,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6995   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6996   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6997   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6998   0x0000,0x0183,0x01B6,0x01E1,0x020B,0x0233,0x0000,0x025E,
6999   0x0272,0x0286,0x029A,0x02AE,0x1E03,0x1E2B,0x1E53,0x1E7B,
7000   0x0000,0x1EC1,0x1EE9,0x1F01,0x1F23,0x0000,0x1F65,0x1F81,
7001   0x1FA5,0x1FD3,0x1FF6,0x0000,0x0000,0x0000,0x0000,0x0000,
7002   0x0432,0x0446,0x045A,0x047D,0x04AB,0x04D1,0x04F9,0x0562,
7003   0x0576,0x2172,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7004   0xFF49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7005   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7006   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7007   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7008   0x0000,0x0185,0x01B9,0x01E3,0x020D,0x0234,0x0000,0x025F,
7009   0x0273,0x0287,0x029B,0x02AF,0x1E05,0x1E2D,0x1E55,0x1E7D,
7010   0x0000,0x1EC3,0x1EEB,0x1F02,0x1F24,0x0000,0x1F66,0x1F82,
7011   0x1FA6,0x0000,0x1FF7,0x0000,0x0000,0x0000,0x0000,0x0000,
7012   0x0433,0x0447,0x045B,0x047F,0x04AD,0x04D3,0x0000,0x0563,
7013   0x0577,0x2173,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7014   0xFF4A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7015   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7016   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7017   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7018   0x0000,0x0188,0x01BA,0x01E5,0x020F,0x0235,0x0000,0x0260,
7019   0x0274,0x0288,0x029C,0x0000,0x1E07,0x1E2F,0x1E57,0x1E7F,
7020   0x0000,0x1EC5,0x1EED,0x1F03,0x1F25,0x0000,0x1F67,0x1F83,
7021   0x1FA7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7022   0x0434,0x0448,0x045C,0x0481,0x04AF,0x04D5,0x0000,0x0564,
7023   0x0578,0x2174,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7024   0xFF4B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7025   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7026   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7027   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7028   0x0000,0x018C,0x01BB,0x01E7,0x0211,0x0236,0x0000,0x0261,
7029   0x0275,0x0289,0x029D,0x0000,0x1E09,0x1E31,0x1E59,0x1E81,
7030   0x0000,0x1EC7,0x1EEF,0x1F04,0x1F26,0x1F50,0x1F70,0x1F84,
7031   0x1FB0,0x1FD6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7032   0x0435,0x0449,0x045D,0x0000,0x04B1,0x04D7,0x0000,0x0565,
7033   0x0579,0x2175,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7034   0xFF4C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7035   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7036   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7037   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7038   0x0000,0x018D,0x0000,0x01E9,0x0213,0x0237,0x0000,0x0262,
7039   0x0276,0x028A,0x029E,0x0000,0x1E0B,0x1E33,0x1E5B,0x1E83,
7040   0x1EA1,0x1EC9,0x1EF1,0x1F05,0x1F27,0x1F51,0x1F71,0x1F85,
7041   0x1FB1,0x1FD7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7042   0x0436,0x044A,0x045E,0x048B,0x04B3,0x04D9,0x0000,0x0566,
7043   0x057A,0x2176,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7044   0xFF4D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7045   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7046   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7047   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7048   0x0000,0x0192,0x01BE,0x01EB,0x0215,0x0238,0x0000,0x0263,
7049   0x0277,0x028B,0x029F,0x0000,0x1E0D,0x1E35,0x1E5D,0x1E85,
7050   0x1EA3,0x1ECB,0x1EF3,0x1F06,0x1F30,0x1F52,0x1F72,0x1F86,
7051   0x1FB2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7052   0x0437,0x044B,0x045F,0x048D,0x04B5,0x04DB,0x0000,0x0567,
7053   0x057B,0x2177,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7054   0xFF4E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7055   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7056   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7057   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7058   0x0000,0x0195,0x01BD,0x01ED,0x0217,0x0239,0x0250,0x0264,
7059   0x0278,0x028C,0x02A0,0x0000,0x1E0F,0x1E37,0x1E5F,0x1E87,
7060   0x1EA5,0x1ECD,0x1EF5,0x1F07,0x1F31,0x1F53,0x1F73,0x1F87,
7061   0x1FB3,0x1FE0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7062   0x0438,0x044C,0x0461,0x048F,0x04B7,0x04DD,0x0000,0x0568,
7063   0x057C,0x2178,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7064   0xFF4F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7065   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7066   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7067   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7068   0x0000,0x0199,0x01C6,0x01EF,0x0219,0x0000,0x0251,0x0265,
7069   0x0279,0x028D,0x02A1,0x0000,0x1E11,0x1E39,0x1E61,0x1E89,
7070   0x1EA7,0x1ECF,0x1EF7,0x1F10,0x1F32,0x1F54,0x1F74,0x1F90,
7071   0x1FB4,0x1FE1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7072   0x0439,0x044D,0x0463,0x0491,0x04B9,0x04DF,0x0501,0x0569,
7073   0x057D,0x2179,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7074   0xFF50,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7075   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7076   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7077   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7078   0x0000,0x019A,0x01C9,0x01F0,0x021B,0x023C,0x0252,0x0266,
7079   0x027A,0x028E,0x02A2,0x0000,0x1E13,0x1E3B,0x1E63,0x1E8B,
7080   0x1EA9,0x1ED1,0x1EF9,0x1F11,0x1F33,0x1F55,0x1F75,0x1F91,
7081   0x0000,0x1FE2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7082   0x043A,0x044E,0x0465,0x0493,0x04BB,0x04E1,0x0503,0x056A,
7083   0x057E,0x217A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7084   0xFF51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7085   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7086   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7087   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7088   0x0000,0x019B,0x01CC,0x01F3,0x021D,0x0000,0x0253,0x0267,
7089   0x027B,0x028F,0x02A3,0x0000,0x1E15,0x1E3D,0x1E65,0x1E8D,
7090   0x1EAB,0x1ED3,0x0000,0x1F12,0x1F34,0x1F56,0x1F76,0x1F92,
7091   0x1FB6,0x1FE3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7092   0x043B,0x044F,0x0467,0x0495,0x04BD,0x04E3,0x0505,0x056B,
7093   0x057F,0x217B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7094   0xFF52,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7095   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7096   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7097   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7098   0x0000,0x019E,0x01CE,0x01F5,0x021F,0x023F,0x0254,0x0268,
7099   0x027C,0x0290,0x02A4,0x0000,0x1E17,0x1E3F,0x1E67,0x1E8F,
7100   0x1EAD,0x1ED5,0x0000,0x1F13,0x1F35,0x1F57,0x1F77,0x1F93,
7101   0x1FB7,0x1FE4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7102   0x043C,0x0450,0x0469,0x0497,0x04BF,0x04E5,0x0507,0x056C,
7103   0x0580,0x217C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7104   0xFF53,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7105   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7106   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7107   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7108   0x0000,0x01A1,0x01D0,0x01F9,0x0221,0x0240,0x0255,0x0269,
7109   0x027D,0x0291,0x02A5,0x0000,0x1E19,0x1E41,0x1E69,0x1E91,
7110   0x1EAF,0x1ED7,0x0000,0x1F14,0x1F36,0x0000,0x1F78,0x1F94,
7111   0x1FC2,0x1FE5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7112   0x043D,0x0451,0x046B,0x0499,0x0000,0x04E7,0x0509,0x056D,
7113   0x0581,0x217D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7114   0xFF54,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7115   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7116   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7117   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7118   0x0000,0x01A3,0x01D2,0x01FB,0x0223,0x0000,0x0256,0x026A,
7119   0x027E,0x0292,0x02A6,0x0000,0x1E1B,0x1E43,0x1E6B,0x1E93,
7120   0x1EB1,0x1ED9,0x0000,0x1F15,0x1F37,0x0000,0x1F79,0x1F95,
7121   0x1FC3,0x1FE6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7122   0x043E,0x0452,0x046D,0x049B,0x04C2,0x04E9,0x050B,0x056E,
7123   0x0582,0x217E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7124   0xFF55,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7125   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7126   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7127   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7128   0x0000,0x01A5,0x01D4,0x01FD,0x0225,0x0000,0x0257,0x026B,
7129   0x027F,0x0293,0x02A7,0x0000,0x1E1D,0x1E45,0x1E6D,0x1E95,
7130   0x1EB3,0x1EDB,0x0000,0x0000,0x1F40,0x0000,0x1F7A,0x1F96,
7131   0x1FC4,0x1FE7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7132   0x043F,0x0453,0x046F,0x049D,0x04C4,0x04EB,0x050D,0x056F,
7133   0x0583,0x217F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7134   0xFF56,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7135   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7136   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7137   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7138   0x0000,0x01A8,0x01D6,0x01FF,0x0227,0x0000,0x0258,0x026C,
7139   0x0280,0x0294,0x02A8,0x0000,0x1E1F,0x1E47,0x1E6F,0x1E96,
7140   0x1EB5,0x1EDD,0x0000,0x0000,0x1F41,0x0000,0x1F7B,0x1F97,
7141   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7142   0x0440,0x0454,0x0471,0x049F,0x04C6,0x04ED,0x050F,0x0570,
7143   0x0584,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7144   0xFF57,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7145   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7146   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7147   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7148   0x0000,0x01AA,0x01D8,0x0201,0x0229,0x0000,0x0259,0x026D,
7149   0x0281,0x0295,0x02A9,0x0000,0x1E21,0x1E49,0x1E71,0x1E97,
7150   0x1EB7,0x1EDF,0x0000,0x0000,0x1F42,0x1F60,0x1F7C,0x1FA0,
7151   0x1FC6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7152   0x0441,0x0455,0x0473,0x04A1,0x04C8,0x04EF,0x0000,0x0571,
7153   0x0585,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7154   0xFF58,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7155   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7156   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7157   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7158   0x0000,0x01AB,0x01DA,0x0203,0x022B,0x0000,0x025A,0x026E,
7159   0x0282,0x0296,0x02AA,0x0000,0x1E23,0x1E4B,0x1E73,0x1E98,
7160   0x1EB9,0x1EE1,0x0000,0x0000,0x1F43,0x1F61,0x1F7D,0x1FA1,
7161   0x1FC7,0x1FF2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7162   0x0442,0x0456,0x0475,0x04A3,0x04CA,0x04F1,0x0000,0x0572,
7163   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7164   0xFF59,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7165   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7166   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7167   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7168   0x0000,0x01AD,0x01DC,0x0205,0x022D,0x0000,0x025B,0x026F,
7169   0x0283,0x0297,0x02AB,0x0000,0x1E25,0x1E4D,0x1E75,0x1E99,
7170   0x1EBB,0x1EE3,0x0000,0x1F20,0x1F44,0x1F62,0x0000,0x1FA2,
7171   0x1FD0,0x1FF3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7172   0x0443,0x0457,0x0477,0x04A5,0x04CC,0x04F3,0x0000,0x0573,
7173   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7174   0xFF5A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7175   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7176   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7177   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7178   0x0000,0x01B0,0x01DD,0x0207,0x022F,0x0000,0x025C,0x0270,
7179   0x0284,0x0298,0x02AC,0x0000,0x1E27,0x1E4F,0x1E77,0x1E9A,
7180   0x1EBD,0x1EE5,0x0000,0x1F21,0x1F45,0x1F63,0x0000,0x1FA3,
7181   0x1FD1,0x1FF4
7182 };
7183 
7184 
7185 /* 00C0-05FF */
7186 static const uint16 uni_0C00_05FF[1344]=
7187 {
7188   0x0017,0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,
7189   0x001F,0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,
7190   0x0027,0x0028,0x0029,0x002A,0x0067,0x0068,0x0069,0x0000,
7191   0x006B,0x006C,0x006D,0x006E,0x006F,0x0070,0x0071,0x008A,
7192   0x0037,0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,
7193   0x003F,0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,
7194   0x0047,0x0048,0x0049,0x004A,0x0087,0x0088,0x0089,0x0000,
7195   0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,0x0092,
7196   0x0073,0x0093,0x0074,0x0094,0x0075,0x0095,0x0076,0x0096,
7197   0x0077,0x0097,0x0078,0x0098,0x0079,0x0099,0x007A,0x009A,
7198   0x00B7,0x00D7,0x00B8,0x00D8,0x00B9,0x00D9,0x00BA,0x00DA,
7199   0x00BB,0x00DB,0x00BC,0x00DC,0x00BD,0x00DD,0x00BE,0x00DE,
7200   0x00BF,0x00DF,0x00C0,0x00E0,0x00C1,0x00E1,0x00C2,0x00E2,
7201   0x00C3,0x00E3,0x00C4,0x00E4,0x00C5,0x00E5,0x00C6,0x00E6,
7202   0x0000,0x00E7,0x00C8,0x00E8,0x00C9,0x00E9,0x00CA,0x00EA,
7203   0x0127,0x0108,0x0128,0x0109,0x0129,0x010A,0x012A,0x010B,
7204   0x012B,0x010C,0x012C,0x010D,0x012D,0x010E,0x012E,0x010F,
7205   0x012F,0x0130,0x0111,0x0131,0x0112,0x0132,0x0113,0x0133,
7206   0x0114,0x0134,0x0115,0x0135,0x0116,0x0136,0x0117,0x0137,
7207   0x0118,0x0138,0x0119,0x0139,0x011A,0x013A,0x0157,0x0177,
7208   0x0158,0x0178,0x0159,0x0179,0x015A,0x017A,0x015B,0x017B,
7209   0x015C,0x017C,0x015D,0x017D,0x015E,0x017E,0x015F,0x017F,
7210   0x0160,0x0180,0x0161,0x0181,0x0162,0x0182,0x0163,0x0183,
7211   0x0072,0x0164,0x0184,0x0165,0x0185,0x0166,0x0186,0x0187,
7212   0x1161,0x0A86,0x07B1,0x11B1,0x0801,0x1201,0x0AD6,0x0851,
7213   0x1251,0x0B76,0x0BC6,0x08A1,0x12A1,0x12F1,0x0D52,0x0C66,
7214   0x0D06,0x0941,0x1341,0x0857,0x0947,0x1391,0x0B27,0x0AD7,
7215   0x09E1,0x13E1,0x1431,0x1481,0x0D07,0x07B8,0x14D1,0x08A8,
7216   0x0B21,0x1521,0x0B71,0x1571,0x0BC1,0x15C1,0x0C18,0x0C11,
7217   0x1611,0x0D08,0x1661,0x16B1,0x0D01,0x1701,0x0859,0x0D51,
7218   0x1751,0x08F9,0x0949,0x0762,0x1162,0x07B2,0x11B2,0x0B79,
7219   0x0802,0x1202,0x1252,0x12A2,0x0992,0x1392,0x1342,0x0000,
7220   0x0000,0x0000,0x0000,0x0000,0x09E2,0x0000,0x13E2,0x0A32,
7221   0x0000,0x1432,0x0A82,0x0000,0x1482,0x0AD2,0x14D2,0x0B22,
7222   0x1522,0x0B72,0x1572,0x0BC2,0x15C2,0x0C12,0x1612,0x0C62,
7223   0x1662,0x0CB2,0x16B2,0x0D02,0x1702,0x1752,0x0763,0x1163,
7224   0x07B3,0x11B3,0x0803,0x1203,0x0853,0x1253,0x08A3,0x12A3,
7225   0x08F3,0x12F3,0x0943,0x1343,0x0993,0x1393,0x09E3,0x13E3,
7226   0x1433,0x0A83,0x0000,0x1483,0x0AD3,0x14D3,0x0991,0x0000,
7227   0x0B23,0x1523,0x0B73,0x1573,0x0BC3,0x15C3,0x0C13,0x1613,
7228   0x0C63,0x1663,0x0CB3,0x16B3,0x0D03,0x1703,0x0D53,0x1753,
7229   0x0764,0x1164,0x07B4,0x11B4,0x0804,0x1204,0x0854,0x1254,
7230   0x08A4,0x12A4,0x08F4,0x12F4,0x0944,0x1344,0x0994,0x1394,
7231   0x09E4,0x13E4,0x0A34,0x1434,0x0A84,0x1484,0x0AD4,0x14D4,
7232   0x0AD1,0x1524,0x0B74,0x1574,0x0BC4,0x15C4,0x0C14,0x1614,
7233   0x0C64,0x1664,0x0CB4,0x16B4,0x0D04,0x1704,0x0D54,0x1754,
7234   0x0765,0x1165,0x07B5,0x11B5,0x1205,0x1255,0x12A5,0x12F5,
7235   0x1345,0x1395,0x09E5,0x0A35,0x1435,0x0A31,0x0A85,0x14D5,
7236   0x1525,0x0C19,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7237   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7238   0x1396,0x13E6,0x1436,0x1486,0x14D6,0x1526,0x1576,0x15C6,
7239   0x1616,0x1666,0x16B6,0x1706,0x1756,0x1167,0x11B7,0x1207,
7240   0x1257,0x12A7,0x12F7,0x1347,0x1397,0x13E7,0x1437,0x1487,
7241   0x14D7,0x1527,0x1577,0x15C7,0x1617,0x1667,0x16B7,0x1707,
7242   0x1757,0x1168,0x11B8,0x1208,0x1258,0x12A8,0x12F8,0x1348,
7243   0x1398,0x13E8,0x1438,0x1488,0x14D8,0x1528,0x1578,0x15C8,
7244   0x1618,0x1668,0x16B8,0x1708,0x1758,0x1169,0x11B9,0x1209,
7245   0x1259,0x12A9,0x12F9,0x1349,0x1399,0x13E9,0x1439,0x1489,
7246   0x14D9,0x1529,0x1579,0x15C9,0x1619,0x1669,0x16B9,0x1709,
7247   0x1759,0x116A,0x11BA,0x120A,0x125A,0x12AA,0x12FA,0x134A,
7248   0x139A,0x13EA,0x143A,0x148A,0x14DA,0x152A,0x157A,0x15CA,
7249   0x161A,0x166A,0x16BA,0x170A,0x175A,0x116B,0x11BB,0x120B,
7250   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7251   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7252   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7253   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7254   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7255   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7256   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7257   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7258   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7259   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7260   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7261   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7262   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7263   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7264   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7265   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7266   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7267   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7268   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7269   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7270   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7271   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7272   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7273   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7274   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7275   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7276   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x01F7,0x0000,
7277   0x01F8,0x01F9,0x01FA,0x0000,0x0253,0x0000,0x0254,0x0255,
7278   0x01D9,0x01FC,0x0257,0x01FE,0x01FF,0x0200,0x0201,0x0202,
7279   0x0258,0x0204,0x02A7,0x0206,0x0207,0x0208,0x0209,0x020A,
7280   0x0299,0x0248,0x0000,0x02A9,0x024B,0x024C,0x0298,0x024E,
7281   0x024F,0x0250,0x0251,0x0252,0x0217,0x0218,0x0219,0x021A,
7282   0x021B,0x021C,0x021D,0x021E,0x021F,0x0220,0x0221,0x0222,
7283   0x0223,0x0224,0x0225,0x0226,0x0227,0x0228,0x0229,0x022A,
7284   0x0267,0x0268,0x0269,0x026A,0x026B,0x026C,0x026D,0x026E,
7285   0x026F,0x0270,0x0271,0x0272,0x0273,0x0274,0x0275,0x0000,
7286   0x0277,0x0278,0x0259,0x025A,0x0297,0x02B8,0x02B9,0x02BA,
7287   0x0000,0x02BB,0x029C,0x02BC,0x029D,0x02BD,0x029E,0x02BE,
7288   0x029F,0x02BF,0x02A0,0x02C0,0x02A1,0x02C1,0x02A2,0x02C2,
7289   0x02A3,0x02C3,0x02A4,0x02C4,0x02A5,0x02C5,0x02A6,0x02C6,
7290   0x02C7,0x02C8,0x02C9,0x02CA,0x0000,0x0307,0x0308,0x0000,
7291   0x0309,0x0000,0x0000,0x030A,0x030B,0x02EC,0x02ED,0x02EE,
7292   0x0AF1,0x0B41,0x0B91,0x0BE1,0x0C31,0x0C81,0x0CD1,0x0D21,
7293   0x0732,0x0782,0x07D2,0x0822,0x0872,0x08C2,0x0912,0x0962,
7294   0x0730,0x0780,0x07D0,0x0820,0x0870,0x08C0,0x0910,0x0960,
7295   0x09B0,0x0A00,0x0A50,0x0AA0,0x0AF0,0x0B40,0x0B90,0x0BE0,
7296   0x0C30,0x0C80,0x0CD0,0x0D20,0x0731,0x0781,0x07D1,0x0821,
7297   0x0871,0x08C1,0x0911,0x0961,0x09B1,0x0A01,0x0A51,0x0AA1,
7298   0x1130,0x1180,0x11D0,0x1220,0x1270,0x12C0,0x1310,0x1360,
7299   0x13B0,0x1400,0x1450,0x14A0,0x14F0,0x1540,0x1590,0x15E0,
7300   0x1630,0x1680,0x16D0,0x1720,0x1131,0x1181,0x11D1,0x1221,
7301   0x1271,0x12C1,0x1311,0x1361,0x13B1,0x1401,0x1451,0x14A1,
7302   0x14F1,0x1541,0x1591,0x15E1,0x1631,0x1681,0x16D1,0x1721,
7303   0x1132,0x1182,0x11D2,0x1222,0x1272,0x12C2,0x1312,0x1362,
7304   0x09B2,0x13B2,0x0A02,0x1402,0x0A52,0x1452,0x0AA2,0x14A2,
7305   0x0AF2,0x14F2,0x0B42,0x1542,0x0B92,0x1592,0x0BE2,0x15E2,
7306   0x0C32,0x1632,0x0C82,0x1682,0x0CD2,0x16D2,0x0D22,0x1722,
7307   0x0733,0x1133,0x0783,0x1183,0x07D3,0x11D3,0x0823,0x1223,
7308   0x0873,0x1273,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7309   0x0000,0x0000,0x0913,0x1313,0x0963,0x1363,0x09B3,0x13B3,
7310   0x0A03,0x1403,0x0A53,0x1453,0x0AA3,0x14A3,0x0AF3,0x14F3,
7311   0x0B43,0x1543,0x0B93,0x1593,0x0BE3,0x15E3,0x0C33,0x1633,
7312   0x0C83,0x1683,0x0CD3,0x16D3,0x0D23,0x1723,0x0734,0x1134,
7313   0x0784,0x1184,0x07D4,0x11D4,0x0824,0x1224,0x0874,0x1274,
7314   0x08C4,0x12C4,0x0914,0x1314,0x0964,0x1364,0x09B4,0x13B4,
7315   0x0A04,0x1404,0x0A54,0x1454,0x0AA4,0x14A4,0x0AF4,0x14F4,
7316   0x0B44,0x0B94,0x1594,0x0BE4,0x15E4,0x0C34,0x1634,0x0C84,
7317   0x1684,0x0CD4,0x16D4,0x0D24,0x1724,0x0735,0x1135,0x0000,
7318   0x07D5,0x11D5,0x0825,0x1225,0x0875,0x1275,0x08C5,0x12C5,
7319   0x0915,0x1315,0x0965,0x1365,0x09B5,0x13B5,0x0A05,0x1405,
7320   0x0A55,0x1455,0x0AA5,0x14A5,0x0AF5,0x14F5,0x0B45,0x1545,
7321   0x0B95,0x1595,0x0BE5,0x15E5,0x0C35,0x1635,0x0C85,0x1685,
7322   0x0CD5,0x16D5,0x0D25,0x1725,0x0736,0x1136,0x0786,0x1186,
7323   0x07D6,0x11D6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7324   0x0A06,0x1406,0x0A56,0x1456,0x0AA6,0x14A6,0x0AF6,0x14F6,
7325   0x0B46,0x1546,0x0B96,0x1596,0x0BE6,0x15E6,0x0C36,0x1636,
7326   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7327   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7328   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7329   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7330   0x0000,0x0787,0x07D7,0x0827,0x0877,0x08C7,0x0917,0x0967,
7331   0x09B7,0x0A07,0x0A57,0x0AA7,0x0AF7,0x0B47,0x0B97,0x0BE7,
7332   0x0C37,0x0C87,0x0CD7,0x0D27,0x0738,0x0788,0x07D8,0x0828,
7333   0x0878,0x08C8,0x0918,0x0968,0x09B8,0x0A08,0x0A58,0x0AA8,
7334   0x0AF8,0x0B48,0x0B98,0x0BE8,0x0C38,0x0C88,0x0000,0x0000,
7335   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7336   0x0000,0x1187,0x11D7,0x1227,0x1277,0x12C7,0x1317,0x1367,
7337   0x13B7,0x1407,0x1457,0x14A7,0x14F7,0x1547,0x1597,0x15E7,
7338   0x1637,0x1687,0x16D7,0x1727,0x1138,0x1188,0x11D8,0x1228,
7339   0x1278,0x12C8,0x1318,0x1368,0x13B8,0x1408,0x1458,0x14A8,
7340   0x14F8,0x1548,0x1598,0x15E8,0x1638,0x1688,0x0000,0x0000,
7341   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7342   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7343   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7344   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7345   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7346   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7347   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7348   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7349   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7350   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7351   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7352   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7353   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7354   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7355   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
7356 };
7357 
7358 
7359 /* 1E00-1FFF */
7360 static const uint16 uni_1E00_1FFF[512]=
7361 {
7362   0x076C,0x116C,0x07BC,0x11BC,0x080C,0x120C,0x085C,0x125C,
7363   0x08AC,0x12AC,0x08FC,0x12FC,0x094C,0x134C,0x099C,0x139C,
7364   0x09EC,0x13EC,0x0A3C,0x143C,0x0A8C,0x148C,0x0ADC,0x14DC,
7365   0x0B2C,0x152C,0x0B7C,0x157C,0x0BCC,0x15CC,0x0C1C,0x161C,
7366   0x0C6C,0x166C,0x0CBC,0x16BC,0x0D0C,0x170C,0x0D5C,0x175C,
7367   0x076D,0x116D,0x07BD,0x11BD,0x080D,0x120D,0x085D,0x125D,
7368   0x08AD,0x12AD,0x08FD,0x12FD,0x094D,0x134D,0x099D,0x139D,
7369   0x09ED,0x13ED,0x0A3D,0x143D,0x0A8D,0x148D,0x0ADD,0x14DD,
7370   0x0B2D,0x152D,0x0B7D,0x157D,0x0BCD,0x15CD,0x0C1D,0x161D,
7371   0x0C6D,0x166D,0x0CBD,0x16BD,0x0D0D,0x170D,0x0D5D,0x175D,
7372   0x076E,0x116E,0x07BE,0x11BE,0x080E,0x120E,0x085E,0x125E,
7373   0x08AE,0x12AE,0x08FE,0x12FE,0x094E,0x134E,0x099E,0x139E,
7374   0x0770,0x13EE,0x0A3E,0x143E,0x0A8E,0x148E,0x0ADE,0x14DE,
7375   0x0B2E,0x152E,0x0B7E,0x157E,0x0BCE,0x15CE,0x0C1E,0x161E,
7376   0x0C6E,0x166E,0x0CBE,0x16BE,0x0D0E,0x170E,0x0D5E,0x175E,
7377   0x076F,0x116F,0x07BF,0x11BF,0x080F,0x120F,0x085F,0x125F,
7378   0x08AF,0x12AF,0x08FF,0x12FF,0x094F,0x134F,0x099F,0x139F,
7379   0x09EF,0x13EF,0x0A3F,0x143F,0x0A8F,0x148F,0x0ADF,0x14DF,
7380   0x0B2F,0x152F,0x0B7F,0x157F,0x0BCF,0x15CF,0x161F,0x166F,
7381   0x16BF,0x170F,0x175F,0x1170,0x0000,0x0000,0x0000,0x0000,
7382   0x0900,0x1300,0x0950,0x1350,0x09A0,0x13A0,0x09F0,0x13F0,
7383   0x0A40,0x1440,0x0A90,0x1490,0x0AE0,0x14E0,0x0B30,0x1530,
7384   0x0B80,0x1580,0x0BD0,0x15D0,0x0C20,0x1620,0x0C70,0x1670,
7385   0x0CC0,0x16C0,0x0D10,0x1710,0x0D60,0x1760,0x0771,0x1171,
7386   0x07C1,0x11C1,0x0811,0x1211,0x0861,0x1261,0x08B1,0x12B1,
7387   0x0901,0x1301,0x0951,0x1351,0x09A1,0x13A1,0x09F1,0x13F1,
7388   0x0A41,0x1441,0x0A91,0x1491,0x0AE1,0x14E1,0x0B31,0x1531,
7389   0x0B81,0x1581,0x0BD1,0x15D1,0x0C21,0x1621,0x0C71,0x1671,
7390   0x0CC1,0x16C1,0x0D11,0x1711,0x0D61,0x1761,0x0772,0x1172,
7391   0x07C2,0x11C2,0x0812,0x1212,0x0862,0x1262,0x08B2,0x12B2,
7392   0x0902,0x1302,0x0952,0x1352,0x09A2,0x13A2,0x09F2,0x13F2,
7393   0x0A42,0x1442,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
7394   0x1173,0x11C3,0x1213,0x1263,0x12B3,0x1303,0x1353,0x13A3,
7395   0x0773,0x07C3,0x0813,0x0863,0x08B3,0x0903,0x0953,0x09A3,
7396   0x13F3,0x1443,0x1493,0x14E3,0x1533,0x1583,0x0000,0x0000,
7397   0x09F3,0x0A43,0x0A93,0x0AE3,0x0B33,0x0B83,0x0000,0x0000,
7398   0x1713,0x1763,0x1174,0x11C4,0x1214,0x1264,0x12B4,0x1304,
7399   0x0D13,0x0D63,0x0774,0x07C4,0x0814,0x0864,0x08B4,0x0904,
7400   0x1354,0x13A4,0x13F4,0x1444,0x1494,0x14E4,0x1534,0x1584,
7401   0x0954,0x09A4,0x09F4,0x0A44,0x0A94,0x0AE4,0x0B34,0x0B84,
7402   0x15D4,0x1624,0x1674,0x16C4,0x1714,0x1764,0x0000,0x0000,
7403   0x0BD4,0x0C24,0x0C74,0x0CC4,0x0D14,0x0D64,0x0000,0x0000,
7404   0x12B5,0x1305,0x1355,0x13A5,0x13F5,0x1445,0x1495,0x14E5,
7405   0x0000,0x0905,0x0000,0x09A5,0x0000,0x0A45,0x0000,0x0AE5,
7406   0x1675,0x16C5,0x1715,0x1765,0x1176,0x11C6,0x1216,0x1266,
7407   0x0C75,0x0CC5,0x0D15,0x0D65,0x0776,0x07C6,0x0816,0x0866,
7408   0x12B6,0x1306,0x1356,0x13A6,0x13F6,0x1446,0x1496,0x14E6,
7409   0x1536,0x1586,0x15D6,0x1626,0x1676,0x16C6,0x0000,0x0000,
7410   0x1177,0x11C7,0x1217,0x1267,0x12B7,0x1307,0x1357,0x13A7,
7411   0x0777,0x07C7,0x0817,0x0867,0x08B7,0x0907,0x0957,0x09A7,
7412   0x13F7,0x1447,0x1497,0x14E7,0x1537,0x1587,0x15D7,0x1627,
7413   0x09F7,0x0A47,0x0A97,0x0AE7,0x0B37,0x0B87,0x0BD7,0x0C27,
7414   0x1677,0x16C7,0x1717,0x1767,0x1178,0x11C8,0x1218,0x1268,
7415   0x0C77,0x0CC7,0x0D17,0x0D67,0x0778,0x07C8,0x0818,0x0868,
7416   0x12B8,0x1308,0x1358,0x13A8,0x13F8,0x0000,0x1498,0x14E8,
7417   0x08B8,0x0908,0x08B6,0x0906,0x09A8,0x0000,0x0000,0x0000,
7418   0x0000,0x0000,0x1538,0x1588,0x15D8,0x0000,0x1678,0x16C8,
7419   0x0956,0x09A6,0x09F6,0x0A46,0x0B88,0x0000,0x0000,0x0000,
7420   0x1718,0x1768,0x1179,0x11C9,0x0000,0x0000,0x12B9,0x1309,
7421   0x0D18,0x0D68,0x0A96,0x0AE6,0x0000,0x0000,0x0000,0x0000,
7422   0x13A9,0x13F9,0x1449,0x1499,0x14E9,0x1539,0x1589,0x15D9,
7423   0x09A9,0x09F9,0x0BD6,0x0C26,0x0B39,0x0000,0x0000,0x0000,
7424   0x0000,0x0000,0x16C9,0x1719,0x0000,0x0000,0x11CA,0x121A,
7425   0x0B36,0x0B86,0x0C76,0x0CC6,0x0D19,0x0000,0x0000,0x0000
7426 };
7427 
7428 
7429 /* 2160-217F */
7430 static const uint16 uni_2160_217F[32]=
7431 {
7432   0x0739,0x0789,0x07D9,0x0829,0x0879,0x08C9,0x0919,0x0969,
7433   0x09B9,0x0A09,0x0A59,0x0AA9,0x0AF9,0x0B49,0x0B99,0x0BE9,
7434   0x1139,0x1189,0x11D9,0x1229,0x1279,0x12C9,0x1319,0x1369,
7435   0x13B9,0x1409,0x1459,0x14A9,0x14F9,0x1549,0x1599,0x15E9
7436 };
7437 
7438 
7439 /* 24B0-24EF */
7440 static const uint16 uni_24B0_24EF[64]=
7441 {
7442   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0511,0x0512,
7443   0x0513,0x0514,0x0515,0x0516,0x0517,0x0518,0x0519,0x051A,
7444   0x051B,0x051C,0x051D,0x051E,0x051F,0x0520,0x0521,0x0522,
7445   0x0523,0x0524,0x0525,0x0526,0x0527,0x0528,0x0529,0x052A,
7446   0x0531,0x0532,0x0533,0x0534,0x0535,0x0536,0x0537,0x0538,
7447   0x0539,0x053A,0x053B,0x053C,0x053D,0x053E,0x053F,0x0540,
7448   0x0541,0x0542,0x0543,0x0544,0x0545,0x0546,0x0547,0x0548,
7449   0x0549,0x054A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
7450 };
7451 
7452 
7453 /* FF20-FF5F */
7454 static const uint16 uni_FF20_FF5F[64]=
7455 {
7456   0x0000,0x0560,0x05B0,0x0600,0x0650,0x06A0,0x06F0,0x0740,
7457   0x0790,0x07E0,0x0830,0x0880,0x08D0,0x0920,0x0970,0x09C0,
7458   0x0A10,0x0A60,0x0AB0,0x0B00,0x0B50,0x0BA0,0x0BF0,0x0C40,
7459   0x0C90,0x0CE0,0x0D30,0x0000,0x0000,0x0000,0x0000,0x0000,
7460   0x0000,0x0F60,0x0FB0,0x1000,0x1050,0x10A0,0x10F0,0x1140,
7461   0x1190,0x11E0,0x1230,0x1280,0x12D0,0x1320,0x1370,0x13C0,
7462   0x1410,0x1460,0x14B0,0x1500,0x1550,0x15A0,0x15F0,0x1640,
7463   0x1690,0x16E0,0x1730,0x0000,0x0000,0x0000,0x0000,0x0000
7464 };
7465 
7466 
7467 
7468 
7469 
7470 /*
7471   Returns
7472    a number 0..15, if a valid HEX digit in lower case,
7473    -1 otherwise.
7474 */
7475 
hexlo(int x)7476 static int hexlo(int x)
7477 {
7478   static char hex_lo_digit[256]=
7479   {
7480     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
7481     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
7482     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /*  !"#$%&'()*+,-./ */
7483      0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, /* 0123456789:;<=>? */
7484     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* @ABCDEFGHIJKLMNO */
7485     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* PQRSTUVWXYZ[\]^_ */
7486     -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* `abcdefghijklmno */
7487     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* pqrstuvwxyz{|}~. */
7488     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
7489     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
7490     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
7491     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
7492     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
7493     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
7494     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
7495     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
7496   };
7497   return hex_lo_digit[(unsigned int) x];
7498 }
7499 
7500 
7501 /*
7502   Safe characters:
7503    '\0'  NULL
7504    A..Z  capital letters,
7505    a..z  small letters
7506    0..9  digits
7507    _     underscore
7508 */
7509 static const char filename_safe_char[128]=
7510 {
7511   1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */
7512   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */
7513   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /*  !"#$%&'()*+,-./ */
7514   1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, /* 0123456789:;<=>? */
7515   0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* @ABCDEFGHIJKLMNO */
7516   1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1, /* PQRSTUVWXYZ[\]^_ */
7517   0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* `abcdefghijklmno */
7518   1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, /* pqrstuvwxyz{|}~. */
7519 };
7520 
7521 #define MY_FILENAME_ESCAPE '@'
7522 
7523 static int
my_mb_wc_filename(const CHARSET_INFO * cs MY_ATTRIBUTE ((unused)),my_wc_t * pwc,const uchar * s,const uchar * e)7524 my_mb_wc_filename(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)),
7525                   my_wc_t *pwc, const uchar *s, const uchar *e)
7526 {
7527   int byte1, byte2;
7528   if (s >= e)
7529     return MY_CS_TOOSMALL;
7530 
7531   if (*s < 128 && filename_safe_char[*s])
7532   {
7533     *pwc= *s;
7534     return 1;
7535   }
7536 
7537   if (*s != MY_FILENAME_ESCAPE)
7538     return MY_CS_ILSEQ;
7539 
7540   if (s + 3 > e)
7541     return MY_CS_TOOSMALL3;
7542 
7543   byte1= s[1];
7544   if (byte1 == 0)
7545     return MY_CS_ILSEQ; /* avoid possible out-of-bounds read */
7546   byte2= s[2];
7547 
7548   if (byte1 >= 0x30 && byte1 <= 0x7F &&
7549       byte2 >= 0x30 && byte2 <= 0x7F)
7550   {
7551     int code= (byte1 - 0x30) * 80 + byte2 - 0x30;
7552     if (code < 5994 && touni[code])
7553     {
7554       *pwc= touni[code];
7555       return 3;
7556     }
7557     if (byte1 == '@' && byte2 == '@')
7558     {
7559      *pwc= 0;
7560       return 3;
7561     }
7562   }
7563 
7564   if (s + 4 > e)
7565     return MY_CS_TOOSMALL4;
7566 
7567   if ((byte1= hexlo(byte1)) >= 0 &&
7568       (byte2= hexlo(byte2)) >= 0)
7569   {
7570     int byte3= hexlo(s[3]);
7571     int byte4= hexlo(s[4]);
7572     if (byte3 >=0 && byte4 >=0)
7573     {
7574       *pwc= (byte1 << 12) + (byte2 << 8) + (byte3 << 4) + byte4;
7575       return 5;
7576     }
7577   }
7578 
7579   return MY_CS_ILSEQ;
7580 }
7581 
7582 
7583 static int
my_wc_mb_filename(const CHARSET_INFO * cs MY_ATTRIBUTE ((unused)),my_wc_t wc,uchar * s,uchar * e)7584 my_wc_mb_filename(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)),
7585                   my_wc_t wc, uchar *s, uchar *e)
7586 {
7587   int code;
7588   char hex[]= "0123456789abcdef";
7589 
7590   if (s >= e)
7591     return MY_CS_TOOSMALL;
7592 
7593   if (wc < 128 && filename_safe_char[wc])
7594   {
7595     *s= (uchar) wc;
7596     return 1;
7597   }
7598 
7599   if (s + 3 > e)
7600     return MY_CS_TOOSMALL3;
7601 
7602   *s++= MY_FILENAME_ESCAPE;
7603   if ((wc >= 0x00C0 && wc <= 0x05FF && (code= uni_0C00_05FF[wc - 0x00C0])) ||
7604       (wc >= 0x1E00 && wc <= 0x1FFF && (code= uni_1E00_1FFF[wc - 0x1E00])) ||
7605       (wc >= 0x2160 && wc <= 0x217F && (code= uni_2160_217F[wc - 0x2160])) ||
7606       (wc >= 0x24B0 && wc <= 0x24EF && (code= uni_24B0_24EF[wc - 0x24B0])) ||
7607       (wc >= 0xFF20 && wc <= 0xFF5F && (code= uni_FF20_FF5F[wc - 0xFF20])))
7608   {
7609     *s++= (code / 80) + 0x30;
7610     *s++= (code % 80) + 0x30;
7611     return 3;
7612   }
7613 
7614   /* Non letter */
7615   if (s + 5 > e)
7616     return MY_CS_TOOSMALL5;
7617 
7618   *s++= hex[(wc >> 12) & 15];
7619   *s++= hex[(wc >> 8) & 15];
7620   *s++= hex[(wc >> 4) & 15];
7621   *s++= hex[(wc)      & 15];
7622   return 5;
7623 }
7624 
7625 
7626 static MY_COLLATION_HANDLER my_collation_filename_handler =
7627 {
7628     NULL,               /* init */
7629     my_strnncoll_utf8,
7630     my_strnncollsp_utf8,
7631     my_strnxfrm_unicode,
7632     my_strnxfrmlen_utf8,
7633     my_like_range_mb,
7634     my_wildcmp_utf8,
7635     my_strcasecmp_utf8,
7636     my_instr_mb,
7637     my_hash_sort_utf8,
7638     my_propagate_complex
7639 };
7640 
7641 static MY_CHARSET_HANDLER my_charset_filename_handler=
7642 {
7643     NULL,               /* init */
7644     my_ismbchar_utf8,
7645     my_mbcharlen_utf8,
7646     my_numchars_mb,
7647     my_charpos_mb,
7648     my_well_formed_len_mb,
7649     my_lengthsp_8bit,
7650     my_numcells_mb,
7651     my_mb_wc_filename,
7652     my_wc_mb_filename,
7653     my_mb_ctype_mb,
7654     my_caseup_str_utf8,
7655     my_casedn_str_utf8,
7656     my_caseup_utf8,
7657     my_casedn_utf8,
7658     my_snprintf_8bit,
7659     my_long10_to_str_8bit,
7660     my_longlong10_to_str_8bit,
7661     my_fill_8bit,
7662     my_strntol_8bit,
7663     my_strntoul_8bit,
7664     my_strntoll_8bit,
7665     my_strntoull_8bit,
7666     my_strntod_8bit,
7667     my_strtoll10_8bit,
7668     my_strntoull10rnd_8bit,
7669     my_scan_8bit
7670 };
7671 
7672 
7673 
7674 CHARSET_INFO my_charset_filename=
7675 {
7676     17,0,0,             /* number       */
7677     MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_HIDDEN|MY_CS_NONASCII,
7678     "filename",         /* cs name      */
7679     "filename",         /* name         */
7680     "",                 /* comment      */
7681     NULL,               /* tailoring    */
7682     ctype_utf8,         /* ctype        */
7683     to_lower_utf8,      /* to_lower     */
7684     to_upper_utf8,      /* to_upper     */
7685     to_upper_utf8,      /* sort_order   */
7686     NULL,               /* uca          */
7687     NULL,               /* tab_to_uni   */
7688     NULL,               /* tab_from_uni */
7689     &my_unicase_default,/* caseinfo     */
7690     NULL,               /* state_map    */
7691     NULL,               /* ident_map    */
7692     1,                  /* strxfrm_multiply */
7693     1,                  /* caseup_multiply  */
7694     1,                  /* casedn_multiply  */
7695     1,                  /* mbminlen     */
7696     5,                  /* mbmaxlen     */
7697     1,                  /* mbmaxlenlen  */
7698     0,                  /* min_sort_char */
7699     0xFFFF,             /* max_sort_char */
7700     ' ',                /* pad char      */
7701     0,                  /* escape_with_backslash_is_dangerous */
7702     1,                  /* levels_for_compare */
7703     1,                  /* levels_for_order   */
7704     &my_charset_filename_handler,
7705     &my_collation_filename_handler
7706 };
7707 
7708 
7709 #ifdef MY_TEST_UTF8
7710 #include <stdio.h>
7711 
test_mb(const CHARSET_INFO * cs,uchar * s)7712 static void test_mb(const CHARSET_INFO *cs, uchar *s)
7713 {
7714   while(*s)
7715   {
7716     if (my_ismbhead_utf8(cs,*s))
7717     {
7718       uint len=my_mbcharlen_utf8(cs,*s);
7719       while(len--)
7720       {
7721         printf("%c",*s);
7722         s++;
7723       }
7724       printf("\n");
7725     }
7726     else
7727     {
7728       printf("%c\n",*s);
7729       s++;
7730     }
7731   }
7732 }
7733 
main()7734 int main()
7735 {
7736   char str[1024]=" utf8 test проба ПЕРА по-РУССКИ";
7737   CHARSET_INFO *cs;
7738 
7739   test_mb(cs,(uchar*)str);
7740 
7741   printf("orig      :'%s'\n",str);
7742 
7743   my_caseup_utf8(cs,str,15);
7744   printf("caseup    :'%s'\n",str);
7745 
7746   my_caseup_str_utf8(cs,str);
7747   printf("caseup_str:'%s'\n",str);
7748 
7749   my_casedn_utf8(cs,str,15);
7750   printf("casedn    :'%s'\n",str);
7751 
7752   my_casedn_str_utf8(cs,str);
7753   printf("casedn_str:'%s'\n",str);
7754 
7755   return 0;
7756 }
7757 
7758 #endif
7759 
7760 #endif /* HAVE_CHARSET_UTF8 */
7761 
7762 
7763 
7764 #ifdef HAVE_CHARSET_utf8mb4
7765 
7766 /*
7767   We consider bytes with code more than 127 as a letter.
7768   This garantees that word boundaries work fine with regular
7769   expressions. Note, there is no need to mark byte 255  as a
7770   letter, it is illegal byte in UTF8.
7771 */
7772 static const uchar ctype_utf8mb4[]=
7773 {
7774     0,
7775    32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32,
7776    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
7777    72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
7778   132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16,
7779    16,129,129,129,129,129,129,  1,  1,  1,  1,  1,  1,  1,  1,  1,
7780     1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 16, 16, 16, 16, 16,
7781    16,130,130,130,130,130,130,  2,  2,  2,  2,  2,  2,  2,  2,  2,
7782     2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 16, 16, 16, 16, 32,
7783     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
7784     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
7785     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
7786     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
7787     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
7788     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
7789     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
7790     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  0
7791 };
7792 
7793 
7794 static const uchar to_lower_utf8mb4[]=
7795 {
7796     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
7797    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
7798    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
7799    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
7800    64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
7801   112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95,
7802    96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
7803   112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
7804   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
7805   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
7806   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
7807   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
7808   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
7809   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
7810   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
7811   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
7812 };
7813 
7814 
7815 static const uchar to_upper_utf8mb4[]=
7816 {
7817     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
7818    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
7819    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
7820    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
7821    64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
7822    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
7823    96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
7824    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127,
7825   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
7826   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
7827   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
7828   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
7829   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
7830   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
7831   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
7832   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
7833 };
7834 
7835 
7836 static inline int
bincmp_utf8mb4(const uchar * s,const uchar * se,const uchar * t,const uchar * te)7837 bincmp_utf8mb4(const uchar *s, const uchar *se,
7838                const uchar *t, const uchar *te)
7839 {
7840   int slen= (int) (se - s), tlen= (int) (te - t);
7841   int len= MY_MIN(slen, tlen);
7842   int cmp= memcmp(s, t, len);
7843   return cmp ? cmp : slen - tlen;
7844 }
7845 
7846 
7847 static int
my_mb_wc_utf8mb4(const CHARSET_INFO * cs MY_ATTRIBUTE ((unused)),my_wc_t * pwc,const uchar * s,const uchar * e)7848 my_mb_wc_utf8mb4(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)),
7849                  my_wc_t * pwc, const uchar *s, const uchar *e)
7850 {
7851   uchar c;
7852 
7853   if (s >= e)
7854     return MY_CS_TOOSMALL;
7855 
7856   c= s[0];
7857   if (c < 0x80)
7858   {
7859     *pwc= c;
7860     return 1;
7861   }
7862   else if (c < 0xc2)
7863     return MY_CS_ILSEQ;
7864   else if (c < 0xe0)
7865   {
7866     if (s + 2 > e) /* We need 2 characters */
7867       return MY_CS_TOOSMALL2;
7868 
7869     if (!(IS_CONTINUATION_BYTE(s[1])))
7870       return MY_CS_ILSEQ;
7871 
7872     *pwc= ((my_wc_t) (c & 0x1f) << 6) | (my_wc_t) (s[1] ^ 0x80);
7873     return 2;
7874   }
7875   else if (c < 0xf0)
7876   {
7877     if (s + 3 > e) /* We need 3 characters */
7878       return MY_CS_TOOSMALL3;
7879 
7880     if (!(IS_CONTINUATION_BYTE(s[1]) && IS_CONTINUATION_BYTE(s[2]) &&
7881           (c >= 0xe1 || s[1] >= 0xa0)))
7882       return MY_CS_ILSEQ;
7883 
7884     *pwc= ((my_wc_t) (c & 0x0f) << 12)   |
7885           ((my_wc_t) (s[1] ^ 0x80) << 6) |
7886            (my_wc_t) (s[2] ^ 0x80);
7887     return 3;
7888   }
7889   else if (c < 0xf5)
7890   {
7891     if (s + 4 > e) /* We need 4 characters */
7892       return MY_CS_TOOSMALL4;
7893 
7894     /*
7895       UTF-8 quick four-byte mask:
7896       11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
7897       Encoding allows to encode U+00010000..U+001FFFFF
7898 
7899       The maximum character defined in the Unicode standard is U+0010FFFF.
7900       Higher characters U+00110000..U+001FFFFF are not used.
7901 
7902       11110000.10010000.10xxxxxx.10xxxxxx == F0.90.80.80 == U+00010000 (min)
7903       11110100.10001111.10111111.10111111 == F4.8F.BF.BF == U+0010FFFF (max)
7904 
7905       Valid codes:
7906       [F0][90..BF][80..BF][80..BF]
7907       [F1][80..BF][80..BF][80..BF]
7908       [F2][80..BF][80..BF][80..BF]
7909       [F3][80..BF][80..BF][80..BF]
7910       [F4][80..8F][80..BF][80..BF]
7911     */
7912 
7913     if (!(IS_CONTINUATION_BYTE(s[1]) &&
7914           IS_CONTINUATION_BYTE(s[2]) &&
7915           IS_CONTINUATION_BYTE(s[3]) &&
7916           (c >= 0xf1 || s[1] >= 0x90) &&
7917           (c <= 0xf3 || s[1] <= 0x8F)))
7918       return MY_CS_ILSEQ;
7919     *pwc = ((my_wc_t) (c & 0x07) << 18)    |
7920            ((my_wc_t) (s[1] ^ 0x80) << 12) |
7921            ((my_wc_t) (s[2] ^ 0x80) << 6)  |
7922             (my_wc_t) (s[3] ^ 0x80);
7923     return 4;
7924   }
7925   return MY_CS_ILSEQ;
7926 }
7927 
7928 
7929 /*
7930   The same as above, but without range check
7931   for example, for a null-terminated string
7932 */
7933 static int
my_mb_wc_utf8mb4_no_range(const CHARSET_INFO * cs MY_ATTRIBUTE ((unused)),my_wc_t * pwc,const uchar * s)7934 my_mb_wc_utf8mb4_no_range(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)),
7935                           my_wc_t *pwc, const uchar *s)
7936 {
7937   uchar c;
7938 
7939   c= s[0];
7940   if (c < 0x80)
7941   {
7942     *pwc = c;
7943     return 1;
7944   }
7945 
7946   if (c < 0xc2)
7947     return MY_CS_ILSEQ;
7948 
7949   if (c < 0xe0)
7950   {
7951     if (!IS_CONTINUATION_BYTE(s[1]))
7952       return MY_CS_ILSEQ;
7953 
7954     *pwc = ((my_wc_t) (c & 0x1f) << 6) | (my_wc_t) (s[1] ^ 0x80);
7955     return 2;
7956   }
7957 
7958   if (c < 0xf0)
7959   {
7960     if (!(IS_CONTINUATION_BYTE(s[1]) &&
7961           IS_CONTINUATION_BYTE(s[2]) &&
7962           (c >= 0xe1 || s[1] >= 0xa0)))
7963       return MY_CS_ILSEQ;
7964     *pwc= ((my_wc_t) (c & 0x0f) << 12)   |
7965           ((my_wc_t) (s[1] ^ 0x80) << 6) |
7966            (my_wc_t) (s[2] ^ 0x80);
7967 
7968     return 3;
7969   }
7970   else if (c < 0xf5)
7971   {
7972     if (!(IS_CONTINUATION_BYTE(s[1]) &&
7973           IS_CONTINUATION_BYTE(s[2]) &&
7974           IS_CONTINUATION_BYTE(s[3]) &&
7975           (c >= 0xf1 || s[1] >= 0x90) &&
7976           (c <= 0xf3 || s[1] <= 0x8F)))
7977       return MY_CS_ILSEQ;
7978     *pwc = ((my_wc_t) (c & 0x07) << 18)    |
7979            ((my_wc_t) (s[1] ^ 0x80) << 12) |
7980            ((my_wc_t) (s[2] ^ 0x80) << 6)  |
7981             (my_wc_t) (s[3] ^ 0x80);
7982     return 4;
7983   }
7984   return MY_CS_ILSEQ;
7985 }
7986 
7987 
7988 static int
my_wc_mb_utf8mb4(const CHARSET_INFO * cs MY_ATTRIBUTE ((unused)),my_wc_t wc,uchar * r,uchar * e)7989 my_wc_mb_utf8mb4(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)),
7990                  my_wc_t wc, uchar *r, uchar *e)
7991 {
7992   int count;
7993 
7994   if (r >= e)
7995     return MY_CS_TOOSMALL;
7996 
7997   if (wc < 0x80)
7998     count= 1;
7999   else if (wc < 0x800)
8000     count= 2;
8001   else if (wc < 0x10000)
8002     count= 3;
8003   else if (wc < 0x200000)
8004     count= 4;
8005   else return MY_CS_ILUNI;
8006 
8007   if (r + count > e)
8008     return MY_CS_TOOSMALLN(count);
8009 
8010   switch (count) {
8011     case 4: r[3] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000; // Fall through
8012     case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800;   // Fall through
8013     case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0;    // Fall through
8014     case 1: r[0] = (uchar) wc;
8015   }
8016   return count;
8017 }
8018 
8019 
8020 /*
8021   The same as above, but without range check.
8022 */
8023 static int
my_wc_mb_utf8mb4_no_range(const CHARSET_INFO * cs MY_ATTRIBUTE ((unused)),my_wc_t wc,uchar * r)8024 my_wc_mb_utf8mb4_no_range(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)),
8025                           my_wc_t wc, uchar *r)
8026 {
8027   int count;
8028 
8029   if (wc < 0x80)
8030     count= 1;
8031   else if (wc < 0x800)
8032     count= 2;
8033   else if (wc < 0x10000)
8034     count= 3;
8035   else if (wc < 0x200000)
8036     count= 4;
8037   else
8038     return MY_CS_ILUNI;
8039 
8040   switch (count)
8041   {
8042     case 4: r[3]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x10000; // Fall through
8043     case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800;   // Fall through
8044     case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0;    // Fall through
8045     case 1: r[0]= (uchar) wc;
8046   }
8047   return count;
8048 }
8049 
8050 
8051 static inline void
my_tolower_utf8mb4(const MY_UNICASE_INFO * uni_plane,my_wc_t * wc)8052 my_tolower_utf8mb4(const MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
8053 {
8054   if (*wc <= uni_plane->maxchar)
8055   {
8056     const MY_UNICASE_CHARACTER *page;
8057     if ((page= uni_plane->page[(*wc >> 8)]))
8058       *wc= page[*wc & 0xFF].tolower;
8059   }
8060 }
8061 
8062 
8063 static inline void
my_toupper_utf8mb4(const MY_UNICASE_INFO * uni_plane,my_wc_t * wc)8064 my_toupper_utf8mb4(const MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
8065 {
8066   if (*wc <= uni_plane->maxchar)
8067   {
8068     const MY_UNICASE_CHARACTER *page;
8069     if ((page= uni_plane->page[(*wc >> 8)]))
8070       *wc= page[*wc & 0xFF].toupper;
8071   }
8072 }
8073 
8074 
8075 static size_t
my_caseup_utf8mb4(const CHARSET_INFO * cs,char * src,size_t srclen,char * dst,size_t dstlen)8076 my_caseup_utf8mb4(const CHARSET_INFO *cs, char *src, size_t srclen,
8077                   char *dst, size_t dstlen)
8078 {
8079   my_wc_t wc;
8080   int srcres, dstres;
8081   char *srcend= src + srclen, *dstend= dst + dstlen, *dst0= dst;
8082   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
8083   assert(src != dst || cs->caseup_multiply == 1);
8084 
8085   while ((src < srcend) &&
8086          (srcres= my_mb_wc_utf8mb4(cs, &wc,
8087                                    (uchar *) src, (uchar*) srcend)) > 0)
8088   {
8089     my_toupper_utf8mb4(uni_plane, &wc);
8090     if ((dstres= my_wc_mb_utf8mb4(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0)
8091       break;
8092     src+= srcres;
8093     dst+= dstres;
8094   }
8095   return (size_t) (dst - dst0);
8096 }
8097 
8098 
8099 static void
my_hash_sort_utf8mb4(const CHARSET_INFO * cs,const uchar * s,size_t slen,ulong * n1,ulong * n2)8100 my_hash_sort_utf8mb4(const CHARSET_INFO *cs, const uchar *s, size_t slen,
8101                      ulong *n1, ulong *n2)
8102 {
8103   my_wc_t wc;
8104   int res;
8105   const uchar *e= s + slen;
8106   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
8107   ulong tmp1;
8108   ulong tmp2;
8109   uint ch;
8110 
8111   /*
8112     Remove end space. We do this to be able to compare
8113     'A ' and 'A' as identical
8114   */
8115   while (e > s && e[-1] == ' ')
8116     e--;
8117 
8118   tmp1= *n1;
8119   tmp2= *n2;
8120 
8121   while ((res= my_mb_wc_utf8mb4(cs, &wc, (uchar*) s, (uchar*) e)) > 0)
8122   {
8123     my_tosort_unicode(uni_plane, &wc, cs->state);
8124 
8125     ch= (wc & 0xFF);
8126     tmp1^= (((tmp1 & 63) + tmp2) * ch) + (tmp1 << 8);
8127     tmp2+= 3;
8128 
8129     ch= (wc >> 8)  & 0xFF;
8130     tmp1^= (((tmp1 & 63) + tmp2) * ch) + (tmp1 << 8);
8131     tmp2+= 3;
8132 
8133     if (wc > 0xFFFF)
8134     {
8135        /*
8136         Put the highest byte only if it is non-zero,
8137         to make hash functions for utf8mb3 and utf8mb4
8138         compatible for BMP characters.
8139         This is useful to keep order of records in
8140         test results, e.g. for "SHOW GRANTS".
8141       */
8142       ch= (wc >> 16) & 0xFF;
8143       tmp1^= (((tmp1 & 63) + tmp2) * ch) + (tmp1 << 8);
8144       tmp2+= 3;
8145     }
8146     s+= res;
8147   }
8148 
8149   *n1= tmp1;
8150   *n2= tmp2;
8151 }
8152 
8153 
8154 static size_t
my_caseup_str_utf8mb4(const CHARSET_INFO * cs,char * src)8155 my_caseup_str_utf8mb4(const CHARSET_INFO *cs, char *src)
8156 {
8157   my_wc_t wc;
8158   int srcres, dstres;
8159   char *dst= src, *dst0= src;
8160   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
8161   assert(cs->caseup_multiply == 1);
8162 
8163   while (*src &&
8164          (srcres= my_mb_wc_utf8mb4_no_range(cs, &wc, (uchar *) src)) > 0)
8165   {
8166     my_toupper_utf8mb4(uni_plane, &wc);
8167     if ((dstres= my_wc_mb_utf8mb4_no_range(cs, wc, (uchar*) dst)) <= 0)
8168       break;
8169     src+= srcres;
8170     dst+= dstres;
8171   }
8172   *dst= '\0';
8173   return (size_t) (dst - dst0);
8174 }
8175 
8176 
8177 static size_t
my_casedn_utf8mb4(const CHARSET_INFO * cs,char * src,size_t srclen,char * dst,size_t dstlen)8178 my_casedn_utf8mb4(const CHARSET_INFO *cs,
8179                   char *src, size_t srclen,
8180                   char *dst, size_t dstlen)
8181 {
8182   my_wc_t wc;
8183   int srcres, dstres;
8184   char *srcend= src + srclen, *dstend= dst + dstlen, *dst0= dst;
8185   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
8186   assert(src != dst || cs->casedn_multiply == 1);
8187 
8188   while ((src < srcend) &&
8189          (srcres= my_mb_wc_utf8mb4(cs, &wc,
8190                                    (uchar*) src, (uchar*) srcend)) > 0)
8191   {
8192     my_tolower_utf8mb4(uni_plane, &wc);
8193     if ((dstres= my_wc_mb_utf8mb4(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0)
8194       break;
8195     src+= srcres;
8196     dst+= dstres;
8197   }
8198   return (size_t) (dst - dst0);
8199 }
8200 
8201 
8202 static size_t
my_casedn_str_utf8mb4(const CHARSET_INFO * cs,char * src)8203 my_casedn_str_utf8mb4(const CHARSET_INFO *cs, char *src)
8204 {
8205   my_wc_t wc;
8206   int srcres, dstres;
8207   char *dst= src, *dst0= src;
8208   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
8209   assert(cs->casedn_multiply == 1);
8210 
8211   while (*src &&
8212          (srcres= my_mb_wc_utf8mb4_no_range(cs, &wc, (uchar *) src)) > 0)
8213   {
8214     my_tolower_utf8mb4(uni_plane, &wc);
8215     if ((dstres= my_wc_mb_utf8mb4_no_range(cs, wc, (uchar*) dst)) <= 0)
8216       break;
8217     src+= srcres;
8218     dst+= dstres;
8219   }
8220 
8221   /*
8222    In rare cases lower string can be shorter than
8223    the original string, for example:
8224 
8225    "U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE"
8226    (which is 0xC4B0 in utf8, i.e. two bytes)
8227 
8228    is converted into
8229 
8230    "U+0069 LATIN SMALL LETTER I"
8231    (which is 0x69 in utf8, i.e. one byte)
8232 
8233    So, we need to put '\0' terminator after converting.
8234   */
8235 
8236   *dst= '\0';
8237   return (size_t) (dst - dst0);
8238 }
8239 
8240 
8241 static int
my_strnncoll_utf8mb4(const CHARSET_INFO * cs,const uchar * s,size_t slen,const uchar * t,size_t tlen,my_bool t_is_prefix)8242 my_strnncoll_utf8mb4(const CHARSET_INFO *cs,
8243                      const uchar *s, size_t slen,
8244                      const uchar *t, size_t tlen,
8245                      my_bool t_is_prefix)
8246 {
8247   my_wc_t s_wc= 0;
8248   my_wc_t t_wc= 0;
8249   const uchar *se= s + slen;
8250   const uchar *te= t + tlen;
8251   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
8252 
8253   while ( s < se && t < te )
8254   {
8255     int s_res= my_mb_wc_utf8mb4(cs, &s_wc, s, se);
8256     int t_res= my_mb_wc_utf8mb4(cs, &t_wc, t, te);
8257 
8258     if ( s_res <= 0 || t_res <= 0 )
8259     {
8260       /* Incorrect string, compare bytewise */
8261       return bincmp_utf8mb4(s, se, t, te);
8262     }
8263 
8264     my_tosort_unicode(uni_plane, &s_wc, cs->state);
8265     my_tosort_unicode(uni_plane, &t_wc, cs->state);
8266 
8267     if ( s_wc != t_wc )
8268     {
8269       return s_wc > t_wc ? 1 : -1;
8270     }
8271 
8272     s+= s_res;
8273     t+= t_res;
8274   }
8275   return (int) (t_is_prefix ? (t - te) : ((se - s) - (te - t)));
8276 }
8277 
8278 
8279 /**
8280 
8281   Compare strings, discarding end space
8282 
8283   If one string is shorter as the other, then we space extend the other
8284   so that the strings have equal length.
8285 
8286   This will ensure that the following things hold:
8287 
8288     "a"  == "a "
8289     "a\0" < "a"
8290     "a\0" < "a "
8291 
8292   @param  cs        Character set pinter.
8293   @param  a         First string to compare.
8294   @param  a_length  Length of 'a'.
8295   @param  b         Second string to compare.
8296   @param  b_length  Length of 'b'.
8297   @param  diff_if_only_endspace_difference
8298                     Set to 1 if the strings should be regarded as different
8299                     if they only difference in end space
8300 
8301   @return Comparison result.
8302     @retval Negative number, if a less than b.
8303     @retval 0, if a is equal to b
8304     @retval Positive number, if a > b
8305 */
8306 
8307 static int
my_strnncollsp_utf8mb4(const CHARSET_INFO * cs,const uchar * s,size_t slen,const uchar * t,size_t tlen,my_bool diff_if_only_endspace_difference)8308 my_strnncollsp_utf8mb4(const CHARSET_INFO *cs,
8309                        const uchar *s, size_t slen,
8310                        const uchar *t, size_t tlen,
8311                        my_bool diff_if_only_endspace_difference)
8312 {
8313   int res;
8314   my_wc_t s_wc= 0;
8315   my_wc_t t_wc= 0;
8316   const uchar *se= s + slen, *te= t + tlen;
8317   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
8318 
8319 #ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE
8320   diff_if_only_endspace_difference= FALSE;
8321 #endif
8322 
8323   while ( s < se && t < te )
8324   {
8325     int s_res= my_mb_wc_utf8mb4(cs, &s_wc, s, se);
8326     int t_res= my_mb_wc_utf8mb4(cs, &t_wc, t, te);
8327 
8328     if ( s_res <= 0 || t_res <= 0 )
8329     {
8330       /* Incorrect string, compare bytewise */
8331       return bincmp_utf8mb4(s, se, t, te);
8332     }
8333 
8334     my_tosort_unicode(uni_plane, &s_wc, cs->state);
8335     my_tosort_unicode(uni_plane, &t_wc, cs->state);
8336 
8337     if ( s_wc != t_wc )
8338     {
8339       return s_wc > t_wc ? 1 : -1;
8340     }
8341 
8342     s+=s_res;
8343     t+=t_res;
8344   }
8345 
8346   slen= (size_t) (se-s);
8347   tlen= (size_t) (te-t);
8348   res= 0;
8349 
8350   if (slen != tlen)
8351   {
8352     int swap= 1;
8353     if (diff_if_only_endspace_difference)
8354       res= 1;                                   /* Assume 'a' is bigger */
8355     if (slen < tlen)
8356     {
8357       slen= tlen;
8358       s= t;
8359       se= te;
8360       swap= -1;
8361       res= -res;
8362     }
8363     /*
8364       This following loop uses the fact that in UTF-8
8365       all multibyte characters are greater than space,
8366       and all multibyte head characters are greater than
8367       space. It means if we meet a character greater
8368       than space, it always means that the longer string
8369       is greater. So we can reuse the same loop from the
8370       8bit version, without having to process full multibute
8371       sequences.
8372     */
8373     for ( ; s < se; s++)
8374     {
8375       if (*s != ' ')
8376 	return (*s < ' ') ? -swap : swap;
8377     }
8378   }
8379   return res;
8380 }
8381 
8382 
8383 /**
8384   Compare 0-terminated UTF8 strings.
8385 
8386   @param  cs                  character set handler
8387   @param  s                   First 0-terminated string to compare
8388   @param  t                   Second 0-terminated string to compare
8389 
8390   @return Comparison result.
8391     @retval negative number if s < t
8392     @retval positive number if s > t
8393     @retval 0 is the strings are equal
8394 */
8395 
8396 static int
my_strcasecmp_utf8mb4(const CHARSET_INFO * cs,const char * s,const char * t)8397 my_strcasecmp_utf8mb4(const CHARSET_INFO *cs, const char *s, const char *t)
8398 {
8399   const MY_UNICASE_INFO *uni_plane= cs->caseinfo;
8400   while (s[0] && t[0])
8401   {
8402     my_wc_t s_wc,t_wc;
8403 
8404     if ((uchar) s[0] < 128)
8405     {
8406       /*
8407         s[0] is between 0 and 127.
8408         It represents a single byte character.
8409         Convert it into weight according to collation.
8410       */
8411       s_wc= plane00[(uchar) s[0]].tolower;
8412       s++;
8413     }
8414     else
8415     {
8416       int res= my_mb_wc_utf8mb4_no_range(cs, &s_wc, (const uchar*) s);
8417 
8418       /*
8419          In the case of wrong multibyte sequence we will
8420          call strcmp() for byte-to-byte comparison.
8421       */
8422       if (res <= 0)
8423         return strcmp(s, t);
8424       s+= res;
8425 
8426       my_tolower_utf8mb4(uni_plane, &s_wc);
8427     }
8428 
8429 
8430     /* Do the same for the second string */
8431 
8432     if ((uchar) t[0] < 128)
8433     {
8434       /* Convert single byte character into weight */
8435       t_wc= plane00[(uchar) t[0]].tolower;
8436       t++;
8437     }
8438     else
8439     {
8440       int res= my_mb_wc_utf8mb4_no_range(cs, &t_wc, (const uchar*) t);
8441       if (res <= 0)
8442         return strcmp(s, t);
8443       t+= res;
8444 
8445       my_tolower_utf8mb4(uni_plane, &t_wc);
8446     }
8447 
8448     /* Now we have two weights, let's compare them */
8449     if ( s_wc != t_wc )
8450       return  ((int) s_wc) - ((int) t_wc);
8451   }
8452   return ((int) (uchar) s[0]) - ((int) (uchar) t[0]);
8453 }
8454 
8455 
8456 static int
my_wildcmp_utf8mb4(const CHARSET_INFO * cs,const char * str,const char * strend,const char * wildstr,const char * wildend,int escape,int w_one,int w_many)8457 my_wildcmp_utf8mb4(const CHARSET_INFO *cs,
8458                    const char *str, const char *strend,
8459                    const char *wildstr, const char *wildend,
8460                    int escape, int w_one, int w_many)
8461 {
8462   return my_wildcmp_unicode(cs, str, strend, wildstr, wildend,
8463                             escape, w_one, w_many, cs->caseinfo);
8464 }
8465 
8466 
8467 static size_t
my_strnxfrmlen_utf8mb4(const CHARSET_INFO * cs MY_ATTRIBUTE ((unused)),size_t len)8468 my_strnxfrmlen_utf8mb4(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)),
8469                        size_t len)
8470 {
8471   /* TODO: fix when working on WL "Unicode new version" */
8472   return (len * 2 + 2) / 4;
8473 }
8474 
8475 
8476 static int
my_valid_mbcharlen_utf8mb4(const CHARSET_INFO * cs MY_ATTRIBUTE ((unused)),const uchar * s,const uchar * e)8477 my_valid_mbcharlen_utf8mb4(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)),
8478                            const uchar *s, const uchar *e)
8479 {
8480   uchar c;
8481 
8482   if (s >= e)
8483     return MY_CS_TOOSMALL;
8484 
8485   c= s[0];
8486   if (c < 0xf0)
8487     return my_valid_mbcharlen_utf8mb3(s, e);
8488 
8489   if (c < 0xf5)
8490   {
8491     if (s + 4 > e) /* We need 4 characters */
8492       return MY_CS_TOOSMALL4;
8493 
8494     /*
8495       UTF-8 quick four-byte mask:
8496       11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
8497       Encoding allows to encode U+00010000..U+001FFFFF
8498 
8499       The maximum character defined in the Unicode standard is U+0010FFFF.
8500       Higher characters U+00110000..U+001FFFFF are not used.
8501 
8502       11110000.10010000.10xxxxxx.10xxxxxx == F0.90.80.80 == U+00010000 (min)
8503       11110100.10001111.10111111.10111111 == F4.8F.BF.BF == U+0010FFFF (max)
8504 
8505       Valid codes:
8506       [F0][90..BF][80..BF][80..BF]
8507       [F1][80..BF][80..BF][80..BF]
8508       [F2][80..BF][80..BF][80..BF]
8509       [F3][80..BF][80..BF][80..BF]
8510       [F4][80..8F][80..BF][80..BF]
8511     */
8512 
8513     if (!(IS_CONTINUATION_BYTE(s[1]) &&
8514           IS_CONTINUATION_BYTE(s[2]) &&
8515           IS_CONTINUATION_BYTE(s[3]) &&
8516           (c >= 0xf1 || s[1] >= 0x90) &&
8517           (c <= 0xf3 || s[1] <= 0x8F)))
8518       return MY_CS_ILSEQ;
8519 
8520     return 4;
8521   }
8522 
8523   return MY_CS_ILSEQ;
8524 }
8525 
8526 
8527 static
my_well_formed_len_utf8mb4(const CHARSET_INFO * cs,const char * b,const char * e,size_t pos,int * error)8528 size_t my_well_formed_len_utf8mb4(const CHARSET_INFO *cs,
8529                                   const char *b, const char *e,
8530                                   size_t pos, int *error)
8531 {
8532   const char *b_start= b;
8533   *error= 0;
8534   while (pos)
8535   {
8536     int mb_len;
8537 
8538     if ((mb_len= my_valid_mbcharlen_utf8mb4(cs, (uchar*) b, (uchar*) e)) <= 0)
8539     {
8540       *error= b < e ? 1 : 0;
8541       break;
8542     }
8543     b+= mb_len;
8544     pos--;
8545   }
8546   return (size_t) (b - b_start);
8547 }
8548 
8549 
8550 static uint
my_ismbchar_utf8mb4(const CHARSET_INFO * cs,const char * b,const char * e)8551 my_ismbchar_utf8mb4(const CHARSET_INFO *cs, const char *b, const char *e)
8552 {
8553   int res= my_valid_mbcharlen_utf8mb4(cs, (const uchar*)b, (const uchar*)e);
8554   return (res > 1) ? res : 0;
8555 }
8556 
8557 
8558 static uint
my_mbcharlen_utf8mb4(const CHARSET_INFO * cs MY_ATTRIBUTE ((unused)),uint c)8559 my_mbcharlen_utf8mb4(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), uint c)
8560 {
8561   if (c < 0x80)
8562     return 1;
8563   if (c < 0xc2)
8564     return 0; /* Illegal mb head */
8565   if (c < 0xe0)
8566     return 2;
8567   if (c < 0xf0)
8568     return 3;
8569   if (c < 0xf8)
8570     return 4;
8571   return 0; /* Illegal mb head */;
8572 }
8573 
8574 
8575 static MY_COLLATION_HANDLER my_collation_utf8mb4_general_ci_handler=
8576 {
8577   NULL,               /* init */
8578   my_strnncoll_utf8mb4,
8579   my_strnncollsp_utf8mb4,
8580   my_strnxfrm_unicode,
8581   my_strnxfrmlen_utf8mb4,
8582   my_like_range_mb,
8583   my_wildcmp_utf8mb4,
8584   my_strcasecmp_utf8mb4,
8585   my_instr_mb,
8586   my_hash_sort_utf8mb4,
8587   my_propagate_complex
8588 };
8589 
8590 
8591 static MY_COLLATION_HANDLER my_collation_utf8mb4_bin_handler =
8592 {
8593     NULL,		/* init */
8594     my_strnncoll_mb_bin,
8595     my_strnncollsp_mb_bin,
8596     my_strnxfrm_unicode_full_bin,
8597     my_strnxfrmlen_unicode_full_bin,
8598     my_like_range_mb,
8599     my_wildcmp_mb_bin,
8600     my_strcasecmp_mb_bin,
8601     my_instr_mb,
8602     my_hash_sort_mb_bin,
8603     my_propagate_simple
8604 };
8605 
8606 
8607 MY_CHARSET_HANDLER my_charset_utf8mb4_handler=
8608 {
8609   NULL,               /* init */
8610   my_ismbchar_utf8mb4,
8611   my_mbcharlen_utf8mb4,
8612   my_numchars_mb,
8613   my_charpos_mb,
8614   my_well_formed_len_utf8mb4,
8615   my_lengthsp_8bit,
8616   my_numcells_mb,
8617   my_mb_wc_utf8mb4,
8618   my_wc_mb_utf8mb4,
8619   my_mb_ctype_mb,
8620   my_caseup_str_utf8mb4,
8621   my_casedn_str_utf8mb4,
8622   my_caseup_utf8mb4,
8623   my_casedn_utf8mb4,
8624   my_snprintf_8bit,
8625   my_long10_to_str_8bit,
8626   my_longlong10_to_str_8bit,
8627   my_fill_8bit,
8628   my_strntol_8bit,
8629   my_strntoul_8bit,
8630   my_strntoll_8bit,
8631   my_strntoull_8bit,
8632   my_strntod_8bit,
8633   my_strtoll10_8bit,
8634   my_strntoull10rnd_8bit,
8635   my_scan_8bit
8636 };
8637 
8638 
8639 
8640 CHARSET_INFO my_charset_utf8mb4_general_ci=
8641 {
8642   45,0,0,              /* number       */
8643   MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_UNICODE_SUPPLEMENT,  /* state  */
8644   MY_UTF8MB4,         /* cs name      */
8645   MY_UTF8MB4_GENERAL_CI,/* name       */
8646   "UTF-8 Unicode",    /* comment      */
8647   NULL,               /* tailoring    */
8648   ctype_utf8mb4,      /* ctype        */
8649   to_lower_utf8mb4,   /* to_lower     */
8650   to_upper_utf8mb4,   /* to_upper     */
8651   to_upper_utf8mb4,   /* sort_order   */
8652   NULL,               /* uca          */
8653   NULL,               /* tab_to_uni   */
8654   NULL,               /* tab_from_uni */
8655   &my_unicase_default,/* caseinfo     */
8656   NULL,               /* state_map    */
8657   NULL,               /* ident_map    */
8658   1,                  /* strxfrm_multiply */
8659   1,                  /* caseup_multiply  */
8660   1,                  /* casedn_multiply  */
8661   1,                  /* mbminlen     */
8662   4,                  /* mbmaxlen     */
8663   1,                  /* mbmaxlenlen  */
8664   0,                  /* min_sort_char */
8665   0xFFFF,             /* max_sort_char */
8666   ' ',                /* pad char      */
8667   0,                  /* escape_with_backslash_is_dangerous */
8668   1,                  /* levels_for_compare */
8669   1,                  /* levels_for_order   */
8670   &my_charset_utf8mb4_handler,
8671   &my_collation_utf8mb4_general_ci_handler
8672 };
8673 
8674 
8675 CHARSET_INFO my_charset_utf8mb4_bin=
8676 {
8677   46,0,0,             /* number       */
8678   MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|
8679   MY_CS_UNICODE|MY_CS_UNICODE_SUPPLEMENT, /* state  */
8680   MY_UTF8MB4,         /* cs name      */
8681   MY_UTF8MB4_BIN,     /* name         */
8682   "UTF-8 Unicode",    /* comment      */
8683   NULL,               /* tailoring    */
8684   ctype_utf8mb4,      /* ctype        */
8685   to_lower_utf8mb4,   /* to_lower     */
8686   to_upper_utf8mb4,   /* to_upper     */
8687   NULL,               /* sort_order   */
8688   NULL,               /* uca          */
8689   NULL,               /* tab_to_uni   */
8690   NULL,               /* tab_from_uni */
8691   &my_unicase_default,/* caseinfo     */
8692   NULL,               /* state_map    */
8693   NULL,               /* ident_map    */
8694   1,                  /* strxfrm_multiply */
8695   1,                  /* caseup_multiply  */
8696   1,                  /* casedn_multiply  */
8697   1,                  /* mbminlen     */
8698   4,                  /* mbmaxlen     */
8699   1,                  /* mbmaxlenlen  */
8700   0,                  /* min_sort_char */
8701   0xFFFF,             /* max_sort_char */
8702   ' ',                /* pad char      */
8703   0,                  /* escape_with_backslash_is_dangerous */
8704   1,                  /* levels_for_compare */
8705   1,                  /* levels_for_order   */
8706   &my_charset_utf8mb4_handler,
8707   &my_collation_utf8mb4_bin_handler
8708 };
8709 
8710 #endif /* HAVE_CHARSET_utf8mb4 */
8711