]> asedeno.scripts.mit.edu Git - PuTTY.git/blob - minibidi.h
When using remote forwarding with SSH-1, you'd get bogus 'SSH1 cannot
[PuTTY.git] / minibidi.h
1 /************************************************************************
2  * $Id: minibidi.h,v 1.1 2004/05/22 10:36:50 simon Exp $
3  *
4  * ------------
5  * Description:
6  * ------------
7  * This is an implemention of Unicode's Bidirectional Algorithm
8  * (known as UAX #9).
9  *
10  *   http://www.unicode.org/reports/tr9/
11  * 
12  * Author: Ahmad Khalifa
13  *
14  * -----------------
15  * Revision Details:    (Updated by Revision Control System)
16  * -----------------
17  *  $Date: 2004/05/22 10:36:50 $
18  *  $Author: simon $
19  *  $Revision: 1.1 $
20  *  $Source: /u1/simon/svn-migration/cvs/putty/minibidi.h,v $
21  *
22  * (www.arabeyes.org - under MIT license)
23  *
24  ************************************************************************/
25
26 /*
27  * TODO:
28  * =====
29  * - work almost finished
30  * - Shaping Table to be expanded to include the whole range.
31  * - Ligature handling
32  */
33
34 #include <stdlib.h>     /* definition of wchar_t*/
35
36 #define LMASK   0x3F    /* Embedding Level mask */
37 #define OMASK   0xC0    /* Override mask */
38 #define OISL    0x80    /* Override is L */
39 #define OISR    0x40    /* Override is R */
40
41 /* Shaping Helpers */
42 #define STYPE(xh) (((xh >= SHAPE_FIRST) && (xh <= SHAPE_LAST)) ? \
43 shapetypes[xh-SHAPE_FIRST].type : SU) /*))*/
44 #define SISOLATED(xh) (shapetypes[xh-SHAPE_FIRST].form_b)
45 #define SFINAL(xh) xh+1
46 #define SINITIAL(xh) xh+2
47 #define SMEDIAL(ch) ch+3
48
49 typedef struct bidi_char {
50     wchar_t origwc, wc;
51     unsigned short index;
52 } bidi_char;
53
54 /* function declarations */
55 void flipThisRun(bidi_char *from, unsigned char* level, int max, int count);
56 int findIndexOfRun(unsigned char* level , int start, int count, int tlevel);
57 unsigned char getType(wchar_t ch);
58 unsigned char setOverrideBits(unsigned char level, unsigned char override);
59 unsigned char getPreviousLevel(unsigned char* level, int from);
60 unsigned char leastGreaterOdd(unsigned char x);
61 unsigned char leastGreaterEven(unsigned char x);
62 unsigned char getRLE(wchar_t ch);
63 int do_shape(bidi_char *line, bidi_char *to, int count);
64 int do_bidi(bidi_char *line, int count);
65 void doMirror(wchar_t* ch);
66
67 /* character types */
68 enum
69 {
70    L,
71    LRE,
72    LRO,
73    R,
74    AL,
75    RLE,
76    RLO,
77    PDF,
78    EN,
79    ES,
80    ET,
81    AN,
82    CS,
83    NSM,
84    BN,
85    B,
86    S,
87    WS,
88    ON,
89 };
90
91 /* Shaping Types */
92 enum
93 {
94         SL, /* Left-Joining, doesnt exist in U+0600 - U+06FF */
95         SR, /* Right-Joining, ie has Isolated, Final */
96         SD, /* Dual-Joining, ie has Isolated, Final, Initial, Medial */
97         SU, /* Non-Joining */
98         SC  /* Join-Causing, like U+0640 (TATWEEL) */
99 };
100
101 typedef struct{
102         char type;
103         wchar_t form_b;
104 } shape_node;
105
106 /* Kept near the actual table, for verification. */
107 #define SHAPE_FIRST 0x621
108 #define SHAPE_LAST 0x64A
109
110 const shape_node shapetypes[] = {
111 /* index, Typ, Iso, Ligature Index*/
112 /* 621 */ {SU, 0xFE80},
113 /* 622 */ {SR, 0xFE81},
114 /* 623 */ {SR, 0xFE83},
115 /* 624 */ {SR, 0xFE85},
116 /* 625 */ {SR, 0xFE87},
117 /* 626 */ {SD, 0xFE89},
118 /* 627 */ {SR, 0xFE8D},
119 /* 628 */ {SD, 0xFE8F},
120 /* 629 */ {SR, 0xFE93},
121 /* 62A */ {SD, 0xFE95},
122 /* 62B */ {SD, 0xFE99},
123 /* 62C */ {SD, 0xFE9D},
124 /* 62D */ {SD, 0xFEA1},
125 /* 62E */ {SD, 0xFEA5},
126 /* 62F */ {SR, 0xFEA9},
127 /* 630 */ {SR, 0xFEAB},
128 /* 631 */ {SR, 0xFEAD},
129 /* 632 */ {SR, 0xFEAF},
130 /* 633 */ {SD, 0xFEB1},
131 /* 634 */ {SD, 0xFEB5},
132 /* 635 */ {SD, 0xFEB9},
133 /* 636 */ {SD, 0xFEBD},
134 /* 637 */ {SD, 0xFEC1},
135 /* 638 */ {SD, 0xFEC5},
136 /* 639 */ {SD, 0xFEC9},
137 /* 63A */ {SD, 0xFECD},
138 /* 63B */ {SU, 0x0},
139 /* 63C */ {SU, 0x0},
140 /* 63D */ {SU, 0x0},
141 /* 63E */ {SU, 0x0},
142 /* 63F */ {SU, 0x0},
143 /* 640 */ {SC, 0x0},
144 /* 641 */ {SD, 0xFED1},
145 /* 642 */ {SD, 0xFED5},
146 /* 643 */ {SD, 0xFED9},
147 /* 644 */ {SD, 0xFEDD},
148 /* 645 */ {SD, 0xFEE1},
149 /* 646 */ {SD, 0xFEE5},
150 /* 647 */ {SD, 0xFEE9},
151 /* 648 */ {SR, 0xFEED},
152 /* 649 */ {SR, 0xFEEF}, /* SD */
153 /* 64A */ {SD, 0xFEF1},
154 };
155
156 /*
157  * This describes the data byte and its frequency  
158  */
159 typedef struct
160 {
161    unsigned char f;
162    unsigned char d;
163 }RLENode;
164
165
166 /* This is an array of RLENodes, which is the
167  * Compressed unicode types table
168  */
169 const unsigned char RLE_table[] =
170 {
171    0x09, 0x10, 0x01, 0x0F, 0x01, 0x10, 0x01, 0x11,
172    0x01, 0x0F, 0x01, 0x0E, 0x0E, 0x0F, 0x03, 0x10,
173    0x01, 0x11, 0x01, 0x12, 0x02, 0x0A, 0x03, 0x12,
174    0x05, 0x0A, 0x01, 0x0C, 0x01, 0x0A, 0x01, 0x0C,
175    0x01, 0x09, 0x01, 0x08, 0x0A, 0x0C, 0x01, 0x12,
176    0x06, 0x00, 0x1A, 0x12, 0x06, 0x00, 0x1A, 0x12,
177    0x04, 0x0E, 0x06, 0x0F, 0x01, 0x0E, 0x1A, 0x0C,
178    0x01, 0x12, 0x01, 0x0A, 0x04, 0x12, 0x04, 0x00,
179    0x01, 0x12, 0x05, 0x0A, 0x02, 0x08, 0x02, 0x12,
180    0x01, 0x00, 0x01, 0x12, 0x03, 0x08, 0x01, 0x00,
181    0x01, 0x12, 0x05, 0x00, 0x17, 0x12, 0x01, 0x00,
182    0x1F, 0x12, 0x01, 0x00, 0xFF, 0x00, 0x2A, 0x12,
183    0x01, 0x00, 0x12, 0x12, 0x1C, 0x00, 0x5E, 0x12,
184    0x02, 0x00, 0x09, 0x12, 0x02, 0x00, 0x07, 0x12,
185    0x0E, 0x00, 0x02, 0x12, 0x0E, 0x00, 0x05, 0x12,
186    0x09, 0x00, 0x01, 0x12, 0x11, 0x0D, 0x50, 0x12,
187    0x10, 0x0D, 0x10, 0x12, 0x0A, 0x00, 0x01, 0x12,
188    0x0B, 0x00, 0x01, 0x12, 0x01, 0x00, 0x03, 0x12,
189    0x01, 0x00, 0x01, 0x12, 0x01, 0x00, 0x14, 0x12,
190    0x01, 0x00, 0x2C, 0x12, 0x01, 0x00, 0x26, 0x12,
191    0x0A, 0x00, 0x83, 0x0D, 0x04, 0x12, 0x01, 0x0D,
192    0x02, 0x00, 0x45, 0x12, 0x01, 0x00, 0x26, 0x12,
193    0x02, 0x00, 0x02, 0x12, 0x06, 0x00, 0x10, 0x12,
194    0x21, 0x00, 0x26, 0x12, 0x02, 0x00, 0x07, 0x12,
195    0x01, 0x00, 0x27, 0x12, 0x01, 0x00, 0x01, 0x12,
196    0x07, 0x0D, 0x11, 0x12, 0x01, 0x0D, 0x17, 0x12,
197    0x01, 0x0D, 0x03, 0x03, 0x01, 0x0D, 0x01, 0x03,
198    0x01, 0x0D, 0x02, 0x03, 0x01, 0x0D, 0x01, 0x12,
199    0x0B, 0x03, 0x1B, 0x12, 0x05, 0x03, 0x05, 0x12,
200    0x17, 0x0C, 0x01, 0x12, 0x0E, 0x04, 0x01, 0x12,
201    0x03, 0x04, 0x01, 0x12, 0x01, 0x04, 0x1A, 0x12,
202    0x05, 0x04, 0x0B, 0x0D, 0x0B, 0x12, 0x0A, 0x0B,
203    0x0A, 0x0A, 0x01, 0x0B, 0x02, 0x04, 0x03, 0x0D,
204    0x01, 0x04, 0x65, 0x0D, 0x07, 0x04, 0x01, 0x0D,
205    0x07, 0x04, 0x02, 0x0D, 0x02, 0x12, 0x01, 0x0D,
206    0x04, 0x12, 0x02, 0x08, 0x0A, 0x04, 0x05, 0x12,
207    0x01, 0x04, 0x0E, 0x12, 0x01, 0x0E, 0x01, 0x04,
208    0x01, 0x0D, 0x01, 0x04, 0x1B, 0x12, 0x03, 0x0D,
209    0x1B, 0x12, 0x35, 0x04, 0x26, 0x0D, 0x0B, 0x04,
210    0x01, 0x12, 0xFF, 0x12, 0x50, 0x0D, 0x02, 0x00,
211    0x01, 0x12, 0x01, 0x00, 0x35, 0x12, 0x02, 0x0D,
212    0x01, 0x00, 0x04, 0x0D, 0x08, 0x00, 0x04, 0x0D,
213    0x01, 0x12, 0x02, 0x00, 0x01, 0x0D, 0x04, 0x12,
214    0x03, 0x00, 0x0A, 0x0D, 0x02, 0x00, 0x0D, 0x12,
215    0x10, 0x0D, 0x01, 0x00, 0x02, 0x12, 0x01, 0x00,
216    0x08, 0x12, 0x02, 0x00, 0x02, 0x12, 0x02, 0x00,
217    0x16, 0x12, 0x01, 0x00, 0x07, 0x12, 0x01, 0x00,
218    0x01, 0x12, 0x03, 0x00, 0x04, 0x12, 0x02, 0x0D,
219    0x01, 0x12, 0x01, 0x00, 0x03, 0x0D, 0x04, 0x12,
220    0x02, 0x00, 0x02, 0x12, 0x02, 0x00, 0x02, 0x0D,
221    0x01, 0x12, 0x09, 0x00, 0x01, 0x12, 0x04, 0x00,
222    0x02, 0x12, 0x01, 0x00, 0x03, 0x0D, 0x02, 0x12,
223    0x02, 0x00, 0x0C, 0x0A, 0x02, 0x00, 0x07, 0x12,
224    0x07, 0x0D, 0x01, 0x12, 0x02, 0x00, 0x06, 0x12,
225    0x04, 0x00, 0x02, 0x12, 0x02, 0x00, 0x16, 0x12,
226    0x01, 0x00, 0x07, 0x12, 0x01, 0x00, 0x02, 0x12,
227    0x01, 0x00, 0x02, 0x12, 0x01, 0x00, 0x02, 0x12,
228    0x02, 0x0D, 0x01, 0x12, 0x01, 0x00, 0x03, 0x0D,
229    0x02, 0x12, 0x04, 0x0D, 0x02, 0x12, 0x02, 0x0D,
230    0x03, 0x12, 0x0B, 0x00, 0x04, 0x12, 0x01, 0x00,
231    0x01, 0x12, 0x07, 0x00, 0x0A, 0x0D, 0x02, 0x00,
232    0x03, 0x12, 0x0C, 0x0D, 0x02, 0x00, 0x01, 0x12,
233    0x01, 0x00, 0x07, 0x12, 0x01, 0x00, 0x01, 0x12,
234    0x01, 0x00, 0x03, 0x12, 0x01, 0x00, 0x16, 0x12,
235    0x01, 0x00, 0x07, 0x12, 0x01, 0x00, 0x02, 0x12,
236    0x01, 0x00, 0x05, 0x12, 0x02, 0x0D, 0x01, 0x00,
237    0x04, 0x0D, 0x05, 0x12, 0x01, 0x0D, 0x02, 0x00,
238    0x01, 0x12, 0x01, 0x00, 0x02, 0x0D, 0x01, 0x12,
239    0x02, 0x00, 0x01, 0x12, 0x0F, 0x00, 0x01, 0x12,
240    0x05, 0x00, 0x0A, 0x12, 0x11, 0x0D, 0x01, 0x00,
241    0x02, 0x12, 0x01, 0x00, 0x08, 0x12, 0x02, 0x00,
242    0x02, 0x12, 0x02, 0x00, 0x16, 0x12, 0x01, 0x00,
243    0x07, 0x12, 0x01, 0x00, 0x02, 0x12, 0x02, 0x00,
244    0x04, 0x12, 0x02, 0x0D, 0x01, 0x00, 0x02, 0x0D,
245    0x01, 0x00, 0x01, 0x0D, 0x03, 0x12, 0x03, 0x00,
246    0x02, 0x12, 0x02, 0x00, 0x02, 0x0D, 0x01, 0x12,
247    0x08, 0x0D, 0x01, 0x00, 0x01, 0x12, 0x04, 0x00,
248    0x02, 0x12, 0x01, 0x00, 0x03, 0x12, 0x04, 0x00,
249    0x0B, 0x12, 0x11, 0x0D, 0x01, 0x00, 0x01, 0x12,
250    0x01, 0x00, 0x06, 0x12, 0x03, 0x00, 0x03, 0x12,
251    0x01, 0x00, 0x04, 0x12, 0x03, 0x00, 0x02, 0x12,
252    0x01, 0x00, 0x01, 0x12, 0x01, 0x00, 0x02, 0x12,
253    0x03, 0x00, 0x02, 0x12, 0x03, 0x00, 0x03, 0x12,
254    0x03, 0x00, 0x08, 0x12, 0x01, 0x00, 0x03, 0x12,
255    0x04, 0x00, 0x02, 0x0D, 0x01, 0x00, 0x02, 0x12,
256    0x03, 0x00, 0x03, 0x12, 0x01, 0x00, 0x03, 0x0D,
257    0x01, 0x12, 0x09, 0x00, 0x01, 0x12, 0x0F, 0x00,
258    0x0C, 0x12, 0x0E, 0x00, 0x03, 0x12, 0x01, 0x00,
259    0x08, 0x12, 0x01, 0x00, 0x03, 0x12, 0x01, 0x00,
260    0x17, 0x12, 0x01, 0x00, 0x0A, 0x12, 0x01, 0x00,
261    0x05, 0x12, 0x04, 0x0D, 0x03, 0x00, 0x04, 0x12,
262    0x01, 0x0D, 0x03, 0x12, 0x01, 0x0D, 0x04, 0x12,
263    0x07, 0x0D, 0x02, 0x12, 0x09, 0x00, 0x02, 0x12,
264    0x04, 0x00, 0x0A, 0x12, 0x12, 0x00, 0x02, 0x12,
265    0x01, 0x00, 0x08, 0x12, 0x01, 0x00, 0x03, 0x12,
266    0x01, 0x00, 0x17, 0x12, 0x01, 0x00, 0x0A, 0x12,
267    0x01, 0x00, 0x05, 0x12, 0x04, 0x00, 0x01, 0x0D,
268    0x01, 0x00, 0x05, 0x12, 0x01, 0x0D, 0x01, 0x00,
269    0x02, 0x12, 0x01, 0x00, 0x02, 0x0D, 0x02, 0x12,
270    0x07, 0x00, 0x02, 0x12, 0x07, 0x00, 0x01, 0x12,
271    0x01, 0x00, 0x02, 0x12, 0x04, 0x00, 0x0A, 0x12,
272    0x12, 0x00, 0x02, 0x12, 0x01, 0x00, 0x08, 0x12,
273    0x01, 0x00, 0x03, 0x12, 0x01, 0x00, 0x17, 0x12,
274    0x01, 0x00, 0x10, 0x12, 0x04, 0x00, 0x03, 0x0D,
275    0x03, 0x12, 0x02, 0x00, 0x03, 0x12, 0x01, 0x00,
276    0x03, 0x0D, 0x01, 0x12, 0x09, 0x00, 0x01, 0x12,
277    0x08, 0x00, 0x02, 0x12, 0x04, 0x00, 0x0A, 0x12,
278    0x12, 0x00, 0x02, 0x12, 0x01, 0x00, 0x12, 0x12,
279    0x03, 0x00, 0x18, 0x12, 0x01, 0x00, 0x09, 0x12,
280    0x01, 0x00, 0x01, 0x12, 0x02, 0x00, 0x07, 0x12,
281    0x03, 0x0D, 0x01, 0x12, 0x04, 0x00, 0x03, 0x0D,
282    0x03, 0x12, 0x01, 0x0D, 0x01, 0x12, 0x01, 0x00,
283    0x08, 0x12, 0x12, 0x00, 0x03, 0x12, 0x0C, 0x00,
284    0x30, 0x0D, 0x01, 0x00, 0x02, 0x0D, 0x07, 0x12,
285    0x04, 0x0A, 0x01, 0x00, 0x07, 0x0D, 0x08, 0x00,
286    0x0D, 0x12, 0x25, 0x00, 0x02, 0x12, 0x01, 0x00,
287    0x01, 0x12, 0x02, 0x00, 0x02, 0x12, 0x01, 0x00,
288    0x01, 0x12, 0x02, 0x00, 0x01, 0x12, 0x06, 0x00,
289    0x04, 0x12, 0x01, 0x00, 0x07, 0x12, 0x01, 0x00,
290    0x03, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
291    0x01, 0x12, 0x02, 0x00, 0x02, 0x12, 0x01, 0x00,
292    0x04, 0x0D, 0x01, 0x00, 0x02, 0x0D, 0x06, 0x12,
293    0x01, 0x0D, 0x02, 0x00, 0x01, 0x12, 0x02, 0x00,
294    0x05, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x0D,
295    0x06, 0x12, 0x02, 0x00, 0x0A, 0x12, 0x02, 0x00,
296    0x02, 0x12, 0x22, 0x00, 0x18, 0x0D, 0x02, 0x00,
297    0x1B, 0x0D, 0x01, 0x00, 0x01, 0x0D, 0x01, 0x00,
298    0x01, 0x0D, 0x01, 0x12, 0x04, 0x00, 0x0A, 0x12,
299    0x01, 0x00, 0x22, 0x12, 0x06, 0x0D, 0x0E, 0x00,
300    0x01, 0x0D, 0x05, 0x00, 0x01, 0x0D, 0x02, 0x00,
301    0x04, 0x12, 0x04, 0x0D, 0x08, 0x12, 0x01, 0x0D,
302    0x24, 0x12, 0x01, 0x00, 0x08, 0x0D, 0x01, 0x00,
303    0x06, 0x12, 0x02, 0x00, 0x01, 0x12, 0x30, 0x00,
304    0x22, 0x12, 0x01, 0x00, 0x05, 0x12, 0x01, 0x00,
305    0x02, 0x12, 0x01, 0x00, 0x01, 0x0D, 0x04, 0x00,
306    0x01, 0x0D, 0x01, 0x12, 0x03, 0x0D, 0x02, 0x00,
307    0x01, 0x0D, 0x01, 0x12, 0x06, 0x00, 0x18, 0x0D,
308    0x02, 0x12, 0x46, 0x00, 0x26, 0x12, 0x0A, 0x00,
309    0x29, 0x12, 0x02, 0x00, 0x01, 0x12, 0x04, 0x00,
310    0x5A, 0x12, 0x05, 0x00, 0x44, 0x12, 0x05, 0x00,
311    0x52, 0x12, 0x06, 0x00, 0x07, 0x12, 0x01, 0x00,
312    0x3F, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
313    0x04, 0x12, 0x02, 0x00, 0x07, 0x12, 0x01, 0x00,
314    0x01, 0x12, 0x01, 0x00, 0x04, 0x12, 0x02, 0x00,
315    0x27, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
316    0x04, 0x12, 0x02, 0x00, 0x1F, 0x12, 0x01, 0x00,
317    0x01, 0x12, 0x01, 0x00, 0x04, 0x12, 0x02, 0x00,
318    0x07, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
319    0x04, 0x12, 0x02, 0x00, 0x07, 0x12, 0x01, 0x00,
320    0x07, 0x12, 0x01, 0x00, 0x17, 0x12, 0x01, 0x00,
321    0x1F, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
322    0x04, 0x12, 0x02, 0x00, 0x07, 0x12, 0x01, 0x00,
323    0x27, 0x12, 0x01, 0x00, 0x13, 0x12, 0x06, 0x00,
324    0x1C, 0x12, 0x23, 0x00, 0x55, 0x12, 0x0C, 0x00,
325    0xFF, 0x00, 0xFF, 0x00, 0x78, 0x12, 0x09, 0x11,
326    0x01, 0x00, 0x1A, 0x12, 0x05, 0x00, 0x51, 0x12,
327    0x0F, 0x00, 0x0D, 0x12, 0x01, 0x00, 0x04, 0x0D,
328    0x03, 0x12, 0x0B, 0x00, 0x12, 0x0D, 0x03, 0x00,
329    0x02, 0x12, 0x09, 0x00, 0x12, 0x0D, 0x02, 0x12,
330    0x0C, 0x00, 0x0D, 0x12, 0x01, 0x00, 0x03, 0x12,
331    0x01, 0x0D, 0x02, 0x12, 0x0C, 0x00, 0x37, 0x0D,
332    0x07, 0x00, 0x08, 0x0D, 0x01, 0x00, 0x02, 0x0D,
333    0x0B, 0x00, 0x07, 0x0A, 0x01, 0x00, 0x01, 0x12,
334    0x03, 0x00, 0x0A, 0x12, 0x21, 0x0D, 0x03, 0x0E,
335    0x01, 0x12, 0x01, 0x00, 0x0A, 0x12, 0x06, 0x00,
336    0x58, 0x12, 0x08, 0x00, 0x29, 0x0D, 0x01, 0x12,
337    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
338    0xFF, 0x12, 0x5B, 0x00, 0x9C, 0x12, 0x04, 0x00,
339    0x5A, 0x12, 0x06, 0x00, 0x16, 0x12, 0x02, 0x00,
340    0x06, 0x12, 0x02, 0x00, 0x26, 0x12, 0x02, 0x00,
341    0x06, 0x12, 0x02, 0x00, 0x08, 0x12, 0x01, 0x00,
342    0x01, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
343    0x01, 0x12, 0x01, 0x00, 0x1F, 0x12, 0x02, 0x00,
344    0x35, 0x12, 0x01, 0x00, 0x07, 0x12, 0x01, 0x00,
345    0x01, 0x12, 0x03, 0x00, 0x03, 0x12, 0x01, 0x00,
346    0x07, 0x12, 0x03, 0x00, 0x04, 0x12, 0x02, 0x00,
347    0x06, 0x12, 0x04, 0x00, 0x0D, 0x12, 0x05, 0x00,
348    0x03, 0x12, 0x01, 0x00, 0x07, 0x12, 0x03, 0x11,
349    0x0B, 0x0E, 0x03, 0x00, 0x01, 0x03, 0x01, 0x12,
350    0x18, 0x11, 0x01, 0x0F, 0x01, 0x01, 0x01, 0x05,
351    0x01, 0x07, 0x01, 0x02, 0x01, 0x06, 0x01, 0x11,
352    0x01, 0x0A, 0x05, 0x12, 0x2A, 0x11, 0x01, 0x0E,
353    0x04, 0x12, 0x06, 0x0E, 0x06, 0x08, 0x01, 0x00,
354    0x01, 0x12, 0x02, 0x08, 0x06, 0x0A, 0x02, 0x12,
355    0x03, 0x00, 0x01, 0x08, 0x0A, 0x0A, 0x02, 0x12,
356    0x14, 0x0A, 0x12, 0x12, 0x1E, 0x0D, 0x1B, 0x12,
357    0x17, 0x00, 0x01, 0x12, 0x04, 0x00, 0x01, 0x12,
358    0x02, 0x00, 0x0A, 0x12, 0x01, 0x00, 0x01, 0x12,
359    0x03, 0x00, 0x05, 0x12, 0x06, 0x00, 0x01, 0x12,
360    0x01, 0x00, 0x01, 0x12, 0x01, 0x00, 0x01, 0x12,
361    0x01, 0x00, 0x04, 0x0A, 0x01, 0x00, 0x03, 0x12,
362    0x01, 0x00, 0x07, 0x12, 0x03, 0x00, 0x03, 0x12,
363    0x05, 0x00, 0x05, 0x12, 0x16, 0x00, 0x24, 0x12,
364    0x8E, 0x0A, 0x02, 0x12, 0xFF, 0x12, 0x23, 0x00,
365    0x45, 0x12, 0x1A, 0x00, 0x01, 0x12, 0xCA, 0x08,
366    0x3C, 0x00, 0x4E, 0x08, 0x01, 0x12, 0xFF, 0x12,
367    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
368    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
369    0xFF, 0x12, 0xFF, 0x12, 0x20, 0x11, 0x01, 0x12,
370    0x04, 0x00, 0x03, 0x12, 0x19, 0x00, 0x09, 0x0D,
371    0x06, 0x12, 0x01, 0x00, 0x05, 0x12, 0x02, 0x00,
372    0x05, 0x12, 0x04, 0x00, 0x56, 0x12, 0x02, 0x0D,
373    0x02, 0x12, 0x02, 0x00, 0x03, 0x12, 0x01, 0x00,
374    0x5A, 0x12, 0x01, 0x00, 0x04, 0x12, 0x05, 0x00,
375    0x28, 0x12, 0x04, 0x00, 0x5E, 0x12, 0x01, 0x00,
376    0x28, 0x12, 0x38, 0x00, 0x2D, 0x12, 0x03, 0x00,
377    0x24, 0x12, 0x1C, 0x00, 0x1C, 0x12, 0x03, 0x00,
378    0x32, 0x12, 0x0F, 0x00, 0x0C, 0x12, 0x04, 0x00,
379    0x2F, 0x12, 0x01, 0x00, 0x77, 0x12, 0x04, 0x00,
380    0x63, 0x12, 0x02, 0x00, 0x1F, 0x12, 0x01, 0x00,
381    0x01, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
382    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
383    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
384    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
385    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
386    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
387    0xFF, 0x12, 0xFF, 0x12, 0xCD, 0x00, 0x01, 0x12,
388    0x4A, 0x00, 0x01, 0x12, 0xFF, 0x12, 0xFF, 0x12,
389    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
390    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
391    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
392    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
393    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
394    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
395    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
396    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
397    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
398    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
399    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
400    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
401    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
402    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
403    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
404    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
405    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
406    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
407    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
408    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xF5, 0x00,
409    0x01, 0x12, 0x5A, 0x00, 0xFF, 0x00, 0xFF, 0x00,
410    0xFF, 0x00, 0xFF, 0x00, 0x91, 0x12, 0xFF, 0x12,
411    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
412    0xFF, 0x12, 0xFF, 0x12, 0x7A, 0x00, 0x01, 0x12,
413    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
414    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
415    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
416    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
417    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
418    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
419    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
420    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
421    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
422    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
423    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xCD, 0x00,
424    0x01, 0x12, 0x5C, 0x00, 0x01, 0x12, 0xFF, 0x12,
425    0xFF, 0x12, 0xFF, 0x12, 0x81, 0x00, 0x02, 0x12,
426    0x7E, 0x00, 0x02, 0x12, 0xFF, 0x12, 0xFF, 0x12,
427    0xFF, 0x12, 0xFF, 0x12, 0x02, 0x00, 0x02, 0x12,
428    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
429    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
430    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
431    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
432    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
433    0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
434    0xFF, 0x12, 0x17, 0x00, 0xFF, 0x00, 0x30, 0x12,
435    0x02, 0x00, 0x3B, 0x12, 0x95, 0x00, 0x07, 0x12,
436    0x0C, 0x00, 0x05, 0x12, 0x05, 0x03, 0x01, 0x0D,
437    0x01, 0x03, 0x0A, 0x0A, 0x01, 0x03, 0x0D, 0x12,
438    0x01, 0x03, 0x05, 0x12, 0x01, 0x03, 0x01, 0x12,
439    0x01, 0x03, 0x02, 0x12, 0x01, 0x03, 0x02, 0x12,
440    0x01, 0x03, 0x0A, 0x04, 0x62, 0x12, 0x21, 0x04,
441    0xFF, 0x04, 0x6C, 0x12, 0x12, 0x04, 0x40, 0x12,
442    0x02, 0x04, 0x36, 0x12, 0x28, 0x04, 0x0D, 0x12,
443    0x03, 0x0D, 0x10, 0x12, 0x10, 0x0D, 0x04, 0x12,
444    0x2C, 0x0C, 0x01, 0x12, 0x01, 0x0C, 0x01, 0x12,
445    0x02, 0x0C, 0x01, 0x12, 0x09, 0x0A, 0x01, 0x12,
446    0x02, 0x0A, 0x02, 0x12, 0x05, 0x0A, 0x02, 0x12,
447    0x05, 0x04, 0x05, 0x12, 0x01, 0x04, 0x87, 0x12,
448    0x02, 0x0E, 0x01, 0x12, 0x03, 0x0A, 0x03, 0x12,
449    0x05, 0x0A, 0x01, 0x0C, 0x01, 0x0A, 0x01, 0x0C,
450    0x01, 0x09, 0x01, 0x08, 0x0A, 0x0C, 0x01, 0x12,
451    0x06, 0x00, 0x1A, 0x12, 0x06, 0x00, 0x1A, 0x12,
452    0x0B, 0x00, 0x59, 0x12, 0x03, 0x00, 0x06, 0x12,
453    0x02, 0x00, 0x06, 0x12, 0x02, 0x00, 0x06, 0x12,
454    0x02, 0x00, 0x03, 0x12, 0x03, 0x0A, 0x02, 0x12,
455    0x03, 0x0A, 0x02, 0x12, 0x09, 0x00, 0x0E, 0x00,
456 };