b0dcd634d0d82c758c109fc6f9a250565de79982
1 /************************************************************************
7 * This is an implemention of Unicode's Bidirectional Algorithm
10 * http://www.unicode.org/reports/tr9/
12 * Author: Ahmad Khalifa
15 * Revision Details: (Updated by Revision Control System)
21 * (www.arabeyes.org - under MIT license)
23 ************************************************************************/
28 * - work almost finished
29 * - Shaping Table to be expanded to include the whole range.
33 #include <stdlib.h> /* definition of wchar_t*/
35 #define LMASK 0x3F /* Embedding Level mask */
36 #define OMASK 0xC0 /* Override mask */
37 #define OISL 0x80 /* Override is L */
38 #define OISR 0x40 /* Override is R */
41 #define STYPE(xh) (((xh >= SHAPE_FIRST) && (xh <= SHAPE_LAST)) ? \
42 shapetypes[xh-SHAPE_FIRST].type : SU) /*))*/
43 #define SISOLATED(xh) (shapetypes[xh-SHAPE_FIRST].form_b)
44 #define SFINAL(xh) xh+1
45 #define SINITIAL(xh) xh+2
46 #define SMEDIAL(ch) ch+3
48 typedef struct bidi_char
{
53 /* function declarations */
54 void flipThisRun(bidi_char
*from
, unsigned char* level
, int max
, int count
);
55 int findIndexOfRun(unsigned char* level
, int start
, int count
, int tlevel
);
56 unsigned char getType(wchar_t ch
);
57 unsigned char setOverrideBits(unsigned char level
, unsigned char override
);
58 int getPreviousLevel(unsigned char* level
, int from
);
59 unsigned char leastGreaterOdd(unsigned char x
);
60 unsigned char leastGreaterEven(unsigned char x
);
61 unsigned char getRLE(wchar_t ch
);
62 int do_shape(bidi_char
*line
, bidi_char
*to
, int count
);
63 int do_bidi(bidi_char
*line
, int count
);
64 void doMirror(wchar_t* ch
);
93 SL
, /* Left-Joining, doesnt exist in U+0600 - U+06FF */
94 SR
, /* Right-Joining, ie has Isolated, Final */
95 SD
, /* Dual-Joining, ie has Isolated, Final, Initial, Medial */
97 SC
/* Join-Causing, like U+0640 (TATWEEL) */
105 /* Kept near the actual table, for verification. */
106 #define SHAPE_FIRST 0x621
107 #define SHAPE_LAST 0x64A
109 const shape_node shapetypes
[] = {
110 /* index, Typ, Iso, Ligature Index*/
111 /* 621 */ {SU
, 0xFE80},
112 /* 622 */ {SR
, 0xFE81},
113 /* 623 */ {SR
, 0xFE83},
114 /* 624 */ {SR
, 0xFE85},
115 /* 625 */ {SR
, 0xFE87},
116 /* 626 */ {SD
, 0xFE89},
117 /* 627 */ {SR
, 0xFE8D},
118 /* 628 */ {SD
, 0xFE8F},
119 /* 629 */ {SR
, 0xFE93},
120 /* 62A */ {SD
, 0xFE95},
121 /* 62B */ {SD
, 0xFE99},
122 /* 62C */ {SD
, 0xFE9D},
123 /* 62D */ {SD
, 0xFEA1},
124 /* 62E */ {SD
, 0xFEA5},
125 /* 62F */ {SR
, 0xFEA9},
126 /* 630 */ {SR
, 0xFEAB},
127 /* 631 */ {SR
, 0xFEAD},
128 /* 632 */ {SR
, 0xFEAF},
129 /* 633 */ {SD
, 0xFEB1},
130 /* 634 */ {SD
, 0xFEB5},
131 /* 635 */ {SD
, 0xFEB9},
132 /* 636 */ {SD
, 0xFEBD},
133 /* 637 */ {SD
, 0xFEC1},
134 /* 638 */ {SD
, 0xFEC5},
135 /* 639 */ {SD
, 0xFEC9},
136 /* 63A */ {SD
, 0xFECD},
143 /* 641 */ {SD
, 0xFED1},
144 /* 642 */ {SD
, 0xFED5},
145 /* 643 */ {SD
, 0xFED9},
146 /* 644 */ {SD
, 0xFEDD},
147 /* 645 */ {SD
, 0xFEE1},
148 /* 646 */ {SD
, 0xFEE5},
149 /* 647 */ {SD
, 0xFEE9},
150 /* 648 */ {SR
, 0xFEED},
151 /* 649 */ {SR
, 0xFEEF}, /* SD */
152 /* 64A */ {SD
, 0xFEF1},
156 * This describes the data byte and its frequency
165 /* This is an array of RLENodes, which is the
166 * Compressed unicode types table
168 const RLENode RLE_table
[] =
170 { BN
, 9}, { S
, 1}, { B
, 1}, { S
, 1}, { WS
, 1},
171 { B
, 1}, { BN
, 14}, { B
, 3}, { S
, 1}, { WS
, 1},
172 { ON
, 2}, { ET
, 3}, { ON
, 5}, { ET
, 1}, { CS
, 1},
173 { ET
, 1}, { CS
, 1}, { ES
, 1}, { EN
, 10}, { CS
, 1},
174 { ON
, 6}, { L
, 26}, { ON
, 6}, { L
, 26}, { ON
, 4},
175 { BN
, 6}, { B
, 1}, { BN
, 26}, { CS
, 1}, { ON
, 1},
176 { ET
, 4}, { ON
, 4}, { L
, 1}, { ON
, 5}, { ET
, 2},
177 { EN
, 2}, { ON
, 1}, { L
, 1}, { ON
, 3}, { EN
, 1},
178 { L
, 1}, { ON
, 5}, { L
, 23}, { ON
, 1}, { L
, 31},
179 { ON
, 1}, { L
, 255}, { L
, 42}, { ON
, 1}, { L
, 18},
180 { ON
, 28}, { L
, 94}, { ON
, 2}, { L
, 9}, { ON
, 2},
181 { L
, 7}, { ON
, 14}, { L
, 2}, { ON
, 14}, { L
, 5},
182 { ON
, 9}, { L
, 1}, { ON
, 17}, {NSM
, 80}, { ON
, 16},
183 {NSM
, 16}, { ON
, 10}, { L
, 1}, { ON
, 11}, { L
, 1},
184 { ON
, 1}, { L
, 3}, { ON
, 1}, { L
, 1}, { ON
, 1},
185 { L
, 20}, { ON
, 1}, { L
, 44}, { ON
, 1}, { L
, 38},
186 { ON
, 10}, { L
, 131}, {NSM
, 4}, { ON
, 1}, {NSM
, 2},
187 { L
, 69}, { ON
, 1}, { L
, 38}, { ON
, 2}, { L
, 2},
188 { ON
, 6}, { L
, 16}, { ON
, 33}, { L
, 38}, { ON
, 2},
189 { L
, 7}, { ON
, 1}, { L
, 39}, { ON
, 1}, { L
, 1},
190 { ON
, 7}, {NSM
, 17}, { ON
, 1}, {NSM
, 23}, { ON
, 1},
191 {NSM
, 3}, { R
, 1}, {NSM
, 1}, { R
, 1}, {NSM
, 2},
192 { R
, 1}, {NSM
, 1}, { ON
, 11}, { R
, 27}, { ON
, 5},
193 { R
, 5}, { ON
, 23}, { CS
, 1}, { ON
, 14}, { AL
, 1},
194 { ON
, 3}, { AL
, 1}, { ON
, 1}, { AL
, 26}, { ON
, 5},
195 { AL
, 11}, {NSM
, 11}, { ON
, 10}, { AN
, 10}, { ET
, 1},
196 { AN
, 2}, { AL
, 3}, {NSM
, 1}, { AL
, 101}, {NSM
, 7},
197 { AL
, 1}, {NSM
, 7}, { AL
, 2}, {NSM
, 2}, { ON
, 1},
198 {NSM
, 4}, { ON
, 2}, { EN
, 10}, { AL
, 5}, { ON
, 1},
199 { AL
, 14}, { ON
, 1}, { BN
, 1}, { AL
, 1}, {NSM
, 1},
200 { AL
, 27}, { ON
, 3}, {NSM
, 27}, { ON
, 53}, { AL
, 38},
201 {NSM
, 11}, { AL
, 1}, { ON
, 255}, { ON
, 80}, {NSM
, 2},
202 { L
, 1}, { ON
, 1}, { L
, 53}, { ON
, 2}, {NSM
, 1},
203 { L
, 4}, {NSM
, 8}, { L
, 4}, {NSM
, 1}, { ON
, 2},
204 { L
, 1}, {NSM
, 4}, { ON
, 3}, { L
, 10}, {NSM
, 2},
205 { L
, 13}, { ON
, 16}, {NSM
, 1}, { L
, 2}, { ON
, 1},
206 { L
, 8}, { ON
, 2}, { L
, 2}, { ON
, 2}, { L
, 22},
207 { ON
, 1}, { L
, 7}, { ON
, 1}, { L
, 1}, { ON
, 3},
208 { L
, 4}, { ON
, 2}, {NSM
, 1}, { ON
, 1}, { L
, 3},
209 {NSM
, 4}, { ON
, 2}, { L
, 2}, { ON
, 2}, { L
, 2},
210 {NSM
, 1}, { ON
, 9}, { L
, 1}, { ON
, 4}, { L
, 2},
211 { ON
, 1}, { L
, 3}, {NSM
, 2}, { ON
, 2}, { L
, 12},
212 { ET
, 2}, { L
, 7}, { ON
, 7}, {NSM
, 1}, { ON
, 2},
213 { L
, 6}, { ON
, 4}, { L
, 2}, { ON
, 2}, { L
, 22},
214 { ON
, 1}, { L
, 7}, { ON
, 1}, { L
, 2}, { ON
, 1},
215 { L
, 2}, { ON
, 1}, { L
, 2}, { ON
, 2}, {NSM
, 1},
216 { ON
, 1}, { L
, 3}, {NSM
, 2}, { ON
, 4}, {NSM
, 2},
217 { ON
, 2}, {NSM
, 3}, { ON
, 11}, { L
, 4}, { ON
, 1},
218 { L
, 1}, { ON
, 7}, { L
, 10}, {NSM
, 2}, { L
, 3},
219 { ON
, 12}, {NSM
, 2}, { L
, 1}, { ON
, 1}, { L
, 7},
220 { ON
, 1}, { L
, 1}, { ON
, 1}, { L
, 3}, { ON
, 1},
221 { L
, 22}, { ON
, 1}, { L
, 7}, { ON
, 1}, { L
, 2},
222 { ON
, 1}, { L
, 5}, { ON
, 2}, {NSM
, 1}, { L
, 4},
223 {NSM
, 5}, { ON
, 1}, {NSM
, 2}, { L
, 1}, { ON
, 1},
224 { L
, 2}, {NSM
, 1}, { ON
, 2}, { L
, 1}, { ON
, 15},
225 { L
, 1}, { ON
, 5}, { L
, 10}, { ON
, 17}, {NSM
, 1},
226 { L
, 2}, { ON
, 1}, { L
, 8}, { ON
, 2}, { L
, 2},
227 { ON
, 2}, { L
, 22}, { ON
, 1}, { L
, 7}, { ON
, 1},
228 { L
, 2}, { ON
, 2}, { L
, 4}, { ON
, 2}, {NSM
, 1},
229 { L
, 2}, {NSM
, 1}, { L
, 1}, {NSM
, 3}, { ON
, 3},
230 { L
, 2}, { ON
, 2}, { L
, 2}, {NSM
, 1}, { ON
, 8},
231 {NSM
, 1}, { L
, 1}, { ON
, 4}, { L
, 2}, { ON
, 1},
232 { L
, 3}, { ON
, 4}, { L
, 11}, { ON
, 17}, {NSM
, 1},
233 { L
, 1}, { ON
, 1}, { L
, 6}, { ON
, 3}, { L
, 3},
234 { ON
, 1}, { L
, 4}, { ON
, 3}, { L
, 2}, { ON
, 1},
235 { L
, 1}, { ON
, 1}, { L
, 2}, { ON
, 3}, { L
, 2},
236 { ON
, 3}, { L
, 3}, { ON
, 3}, { L
, 8}, { ON
, 1},
237 { L
, 3}, { ON
, 4}, { L
, 2}, {NSM
, 1}, { L
, 2},
238 { ON
, 3}, { L
, 3}, { ON
, 1}, { L
, 3}, {NSM
, 1},
239 { ON
, 9}, { L
, 1}, { ON
, 15}, { L
, 12}, { ON
, 14},
240 { L
, 3}, { ON
, 1}, { L
, 8}, { ON
, 1}, { L
, 3},
241 { ON
, 1}, { L
, 23}, { ON
, 1}, { L
, 10}, { ON
, 1},
242 { L
, 5}, { ON
, 4}, {NSM
, 3}, { L
, 4}, { ON
, 1},
243 {NSM
, 3}, { ON
, 1}, {NSM
, 4}, { ON
, 7}, {NSM
, 2},
244 { ON
, 9}, { L
, 2}, { ON
, 4}, { L
, 10}, { ON
, 18},
245 { L
, 2}, { ON
, 1}, { L
, 8}, { ON
, 1}, { L
, 3},
246 { ON
, 1}, { L
, 23}, { ON
, 1}, { L
, 10}, { ON
, 1},
247 { L
, 5}, { ON
, 4}, { L
, 1}, {NSM
, 1}, { L
, 5},
248 { ON
, 1}, {NSM
, 1}, { L
, 2}, { ON
, 1}, { L
, 2},
249 {NSM
, 2}, { ON
, 7}, { L
, 2}, { ON
, 7}, { L
, 1},
250 { ON
, 1}, { L
, 2}, { ON
, 4}, { L
, 10}, { ON
, 18},
251 { L
, 2}, { ON
, 1}, { L
, 8}, { ON
, 1}, { L
, 3},
252 { ON
, 1}, { L
, 23}, { ON
, 1}, { L
, 16}, { ON
, 4},
253 { L
, 3}, {NSM
, 3}, { ON
, 2}, { L
, 3}, { ON
, 1},
254 { L
, 3}, {NSM
, 1}, { ON
, 9}, { L
, 1}, { ON
, 8},
255 { L
, 2}, { ON
, 4}, { L
, 10}, { ON
, 18}, { L
, 2},
256 { ON
, 1}, { L
, 18}, { ON
, 3}, { L
, 24}, { ON
, 1},
257 { L
, 9}, { ON
, 1}, { L
, 1}, { ON
, 2}, { L
, 7},
258 { ON
, 3}, {NSM
, 1}, { ON
, 4}, { L
, 3}, {NSM
, 3},
259 { ON
, 1}, {NSM
, 1}, { ON
, 1}, { L
, 8}, { ON
, 18},
260 { L
, 3}, { ON
, 12}, { L
, 48}, {NSM
, 1}, { L
, 2},
261 {NSM
, 7}, { ON
, 4}, { ET
, 1}, { L
, 7}, {NSM
, 8},
262 { L
, 13}, { ON
, 37}, { L
, 2}, { ON
, 1}, { L
, 1},
263 { ON
, 2}, { L
, 2}, { ON
, 1}, { L
, 1}, { ON
, 2},
264 { L
, 1}, { ON
, 6}, { L
, 4}, { ON
, 1}, { L
, 7},
265 { ON
, 1}, { L
, 3}, { ON
, 1}, { L
, 1}, { ON
, 1},
266 { L
, 1}, { ON
, 2}, { L
, 2}, { ON
, 1}, { L
, 4},
267 {NSM
, 1}, { L
, 2}, {NSM
, 6}, { ON
, 1}, {NSM
, 2},
268 { L
, 1}, { ON
, 2}, { L
, 5}, { ON
, 1}, { L
, 1},
269 { ON
, 1}, {NSM
, 6}, { ON
, 2}, { L
, 10}, { ON
, 2},
270 { L
, 2}, { ON
, 34}, { L
, 24}, {NSM
, 2}, { L
, 27},
271 {NSM
, 1}, { L
, 1}, {NSM
, 1}, { L
, 1}, {NSM
, 1},
272 { ON
, 4}, { L
, 10}, { ON
, 1}, { L
, 34}, { ON
, 6},
273 {NSM
, 14}, { L
, 1}, {NSM
, 5}, { L
, 1}, {NSM
, 2},
274 { L
, 4}, { ON
, 4}, {NSM
, 8}, { ON
, 1}, {NSM
, 36},
275 { ON
, 1}, { L
, 8}, {NSM
, 1}, { L
, 6}, { ON
, 2},
276 { L
, 1}, { ON
, 48}, { L
, 34}, { ON
, 1}, { L
, 5},
277 { ON
, 1}, { L
, 2}, { ON
, 1}, { L
, 1}, {NSM
, 4},
278 { L
, 1}, {NSM
, 1}, { ON
, 3}, {NSM
, 2}, { L
, 1},
279 {NSM
, 1}, { ON
, 6}, { L
, 24}, {NSM
, 2}, { ON
, 70},
280 { L
, 38}, { ON
, 10}, { L
, 41}, { ON
, 2}, { L
, 1},
281 { ON
, 4}, { L
, 90}, { ON
, 5}, { L
, 68}, { ON
, 5},
282 { L
, 82}, { ON
, 6}, { L
, 7}, { ON
, 1}, { L
, 63},
283 { ON
, 1}, { L
, 1}, { ON
, 1}, { L
, 4}, { ON
, 2},
284 { L
, 7}, { ON
, 1}, { L
, 1}, { ON
, 1}, { L
, 4},
285 { ON
, 2}, { L
, 39}, { ON
, 1}, { L
, 1}, { ON
, 1},
286 { L
, 4}, { ON
, 2}, { L
, 31}, { ON
, 1}, { L
, 1},
287 { ON
, 1}, { L
, 4}, { ON
, 2}, { L
, 7}, { ON
, 1},
288 { L
, 1}, { ON
, 1}, { L
, 4}, { ON
, 2}, { L
, 7},
289 { ON
, 1}, { L
, 7}, { ON
, 1}, { L
, 23}, { ON
, 1},
290 { L
, 31}, { ON
, 1}, { L
, 1}, { ON
, 1}, { L
, 4},
291 { ON
, 2}, { L
, 7}, { ON
, 1}, { L
, 39}, { ON
, 1},
292 { L
, 19}, { ON
, 6}, { L
, 28}, { ON
, 35}, { L
, 85},
293 { ON
, 12}, { L
, 255}, { L
, 255}, { L
, 120}, { ON
, 9},
294 { WS
, 1}, { L
, 26}, { ON
, 5}, { L
, 81}, { ON
, 15},
295 { L
, 13}, { ON
, 1}, { L
, 4}, {NSM
, 3}, { ON
, 11},
296 { L
, 18}, {NSM
, 3}, { L
, 2}, { ON
, 9}, { L
, 18},
297 {NSM
, 2}, { ON
, 12}, { L
, 13}, { ON
, 1}, { L
, 3},
298 { ON
, 1}, {NSM
, 2}, { ON
, 12}, { L
, 55}, {NSM
, 7},
299 { L
, 8}, {NSM
, 1}, { L
, 2}, {NSM
, 11}, { L
, 7},
300 { ET
, 1}, { L
, 1}, { ON
, 3}, { L
, 10}, { ON
, 33},
301 {NSM
, 3}, { BN
, 1}, { ON
, 1}, { L
, 10}, { ON
, 6},
302 { L
, 88}, { ON
, 8}, { L
, 41}, {NSM
, 1}, { ON
, 255},
303 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 91},
304 { L
, 156}, { ON
, 4}, { L
, 90}, { ON
, 6}, { L
, 22},
305 { ON
, 2}, { L
, 6}, { ON
, 2}, { L
, 38}, { ON
, 2},
306 { L
, 6}, { ON
, 2}, { L
, 8}, { ON
, 1}, { L
, 1},
307 { ON
, 1}, { L
, 1}, { ON
, 1}, { L
, 1}, { ON
, 1},
308 { L
, 31}, { ON
, 2}, { L
, 53}, { ON
, 1}, { L
, 7},
309 { ON
, 1}, { L
, 1}, { ON
, 3}, { L
, 3}, { ON
, 1},
310 { L
, 7}, { ON
, 3}, { L
, 4}, { ON
, 2}, { L
, 6},
311 { ON
, 4}, { L
, 13}, { ON
, 5}, { L
, 3}, { ON
, 1},
312 { L
, 7}, { ON
, 3}, { WS
, 11}, { BN
, 3}, { L
, 1},
313 { R
, 1}, { ON
, 24}, { WS
, 1}, { B
, 1}, {LRE
, 1},
314 {RLE
, 1}, {PDF
, 1}, {LRO
, 1}, {RLO
, 1}, { WS
, 1},
315 { ET
, 5}, { ON
, 42}, { WS
, 1}, { BN
, 4}, { ON
, 6},
316 { BN
, 6}, { EN
, 1}, { L
, 1}, { ON
, 2}, { EN
, 6},
317 { ET
, 2}, { ON
, 3}, { L
, 1}, { EN
, 10}, { ET
, 2},
318 { ON
, 20}, { ET
, 18}, { ON
, 30}, {NSM
, 27}, { ON
, 23},
319 { L
, 1}, { ON
, 4}, { L
, 1}, { ON
, 2}, { L
, 10},
320 { ON
, 1}, { L
, 1}, { ON
, 3}, { L
, 5}, { ON
, 6},
321 { L
, 1}, { ON
, 1}, { L
, 1}, { ON
, 1}, { L
, 1},
322 { ON
, 1}, { L
, 4}, { ET
, 1}, { L
, 3}, { ON
, 1},
323 { L
, 7}, { ON
, 3}, { L
, 3}, { ON
, 5}, { L
, 5},
324 { ON
, 22}, { L
, 36}, { ON
, 142}, { ET
, 2}, { ON
, 255},
325 { ON
, 35}, { L
, 69}, { ON
, 26}, { L
, 1}, { ON
, 202},
326 { EN
, 60}, { L
, 78}, { EN
, 1}, { ON
, 255}, { ON
, 255},
327 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
328 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 32},
329 { WS
, 1}, { ON
, 4}, { L
, 3}, { ON
, 25}, { L
, 9},
330 {NSM
, 6}, { ON
, 1}, { L
, 5}, { ON
, 2}, { L
, 5},
331 { ON
, 4}, { L
, 86}, { ON
, 2}, {NSM
, 2}, { ON
, 2},
332 { L
, 3}, { ON
, 1}, { L
, 90}, { ON
, 1}, { L
, 4},
333 { ON
, 5}, { L
, 40}, { ON
, 4}, { L
, 94}, { ON
, 1},
334 { L
, 40}, { ON
, 56}, { L
, 45}, { ON
, 3}, { L
, 36},
335 { ON
, 28}, { L
, 28}, { ON
, 3}, { L
, 50}, { ON
, 15},
336 { L
, 12}, { ON
, 4}, { L
, 47}, { ON
, 1}, { L
, 119},
337 { ON
, 4}, { L
, 99}, { ON
, 2}, { L
, 31}, { ON
, 1},
338 { L
, 1}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
339 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
340 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
341 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
342 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
343 { ON
, 255}, { ON
, 205}, { L
, 1}, { ON
, 74}, { L
, 1},
344 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
345 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
346 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
347 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
348 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
349 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
350 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
351 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
352 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
353 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
354 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
355 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
356 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
357 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
358 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
359 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
360 { ON
, 255}, { ON
, 245}, { L
, 1}, { ON
, 90}, { L
, 255},
361 { L
, 255}, { L
, 255}, { L
, 255}, { L
, 145}, { ON
, 255},
362 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
363 { ON
, 255}, { ON
, 122}, { L
, 1}, { ON
, 255}, { ON
, 255},
364 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
365 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
366 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
367 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
368 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
369 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
370 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
371 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
372 { ON
, 255}, { ON
, 205}, { L
, 1}, { ON
, 92}, { L
, 1},
373 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 129}, { L
, 2},
374 { ON
, 126}, { L
, 2}, { ON
, 255}, { ON
, 255}, { ON
, 255},
375 { ON
, 255}, { ON
, 2}, { L
, 2}, { ON
, 255}, { ON
, 255},
376 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
377 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
378 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
379 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 255},
380 { ON
, 255}, { ON
, 255}, { ON
, 255}, { ON
, 23}, { L
, 255},
381 { L
, 48}, { ON
, 2}, { L
, 59}, { ON
, 149}, { L
, 7},
382 { ON
, 12}, { L
, 5}, { ON
, 5}, { R
, 1}, {NSM
, 1},
383 { R
, 10}, { ET
, 1}, { R
, 13}, { ON
, 1}, { R
, 5},
384 { ON
, 1}, { R
, 1}, { ON
, 1}, { R
, 2}, { ON
, 1},
385 { R
, 2}, { ON
, 1}, { R
, 10}, { AL
, 98}, { ON
, 33},
386 { AL
, 255}, { AL
, 108}, { ON
, 18}, { AL
, 64}, { ON
, 2},
387 { AL
, 54}, { ON
, 40}, { AL
, 13}, { ON
, 3}, {NSM
, 16},
388 { ON
, 16}, {NSM
, 4}, { ON
, 44}, { CS
, 1}, { ON
, 1},
389 { CS
, 1}, { ON
, 2}, { CS
, 1}, { ON
, 9}, { ET
, 1},
390 { ON
, 2}, { ET
, 2}, { ON
, 5}, { ET
, 2}, { ON
, 5},
391 { AL
, 5}, { ON
, 1}, { AL
, 135}, { ON
, 2}, { BN
, 1},
392 { ON
, 3}, { ET
, 3}, { ON
, 5}, { ET
, 1}, { CS
, 1},
393 { ET
, 1}, { CS
, 1}, { ES
, 1}, { EN
, 10}, { CS
, 1},
394 { ON
, 6}, { L
, 26}, { ON
, 6}, { L
, 26}, { ON
, 11},
395 { L
, 89}, { ON
, 3}, { L
, 6}, { ON
, 2}, { L
, 6},
396 { ON
, 2}, { L
, 6}, { ON
, 2}, { L
, 3}, { ON
, 3},
397 { ET
, 2}, { ON
, 3}, { ET
, 2}, { ON
, 9}, { L
, 14},