Coverage Report

Created: 2025-07-01 07:07

/src/harfbuzz/src/hb-ot-shaper-indic-machine.hh
Line
Count
Source (jump to first uncovered line)
1
2
#line 1 "hb-ot-shaper-indic-machine.rl"
3
/*
4
 * Copyright © 2011,2012  Google, Inc.
5
 *
6
 *  This is part of HarfBuzz, a text shaping library.
7
 *
8
 * Permission is hereby granted, without written agreement and without
9
 * license or royalty fees, to use, copy, modify, and distribute this
10
 * software and its documentation for any purpose, provided that the
11
 * above copyright notice and the following two paragraphs appear in
12
 * all copies of this software.
13
 *
14
 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
15
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
16
 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
17
 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
18
 * DAMAGE.
19
 *
20
 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
21
 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
22
 * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
23
 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
24
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
25
 *
26
 * Google Author(s): Behdad Esfahbod
27
 */
28
29
#ifndef HB_OT_SHAPER_INDIC_MACHINE_HH
30
#define HB_OT_SHAPER_INDIC_MACHINE_HH
31
32
#include "hb.hh"
33
34
#include "hb-ot-layout.hh"
35
#include "hb-ot-shaper-indic.hh"
36
37
/* buffer var allocations */
38
30.2M
#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
39
17.6M
#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
40
41
using indic_category_t = unsigned;
42
using indic_position_t = ot_position_t;
43
44
848k
#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
45
46
enum indic_syllable_type_t {
47
  indic_consonant_syllable,
48
  indic_vowel_syllable,
49
  indic_standalone_cluster,
50
  indic_symbol_cluster,
51
  indic_broken_cluster,
52
  indic_non_indic_cluster,
53
};
54
55
56
#line 57 "hb-ot-shaper-indic-machine.hh"
57
#define indic_syllable_machine_ex_A 9u
58
#define indic_syllable_machine_ex_C 1u
59
#define indic_syllable_machine_ex_CM 16u
60
#define indic_syllable_machine_ex_CS 18u
61
3.22k
#define indic_syllable_machine_ex_DOTTEDCIRCLE 11u
62
136k
#define indic_syllable_machine_ex_H 4u
63
#define indic_syllable_machine_ex_M 7u
64
820k
#define indic_syllable_machine_ex_MPst 13u
65
#define indic_syllable_machine_ex_N 3u
66
#define indic_syllable_machine_ex_PLACEHOLDER 10u
67
#define indic_syllable_machine_ex_RS 12u
68
33.9k
#define indic_syllable_machine_ex_Ra 15u
69
54.5k
#define indic_syllable_machine_ex_Repha 14u
70
879
#define indic_syllable_machine_ex_SM 8u
71
#define indic_syllable_machine_ex_SMPst 57u
72
#define indic_syllable_machine_ex_Symbol 17u
73
#define indic_syllable_machine_ex_V 2u
74
#define indic_syllable_machine_ex_VD 9u
75
#define indic_syllable_machine_ex_X 0u
76
537k
#define indic_syllable_machine_ex_ZWJ 6u
77
14.3k
#define indic_syllable_machine_ex_ZWNJ 5u
78
79
80
#line 81 "hb-ot-shaper-indic-machine.hh"
81
static const unsigned char _indic_syllable_machine_trans_keys[] = {
82
  8u, 57u, 4u, 57u, 5u, 57u, 5u, 57u, 13u, 13u, 4u, 57u, 4u, 57u, 4u, 57u, 
83
  8u, 57u, 5u, 57u, 5u, 57u, 13u, 13u, 4u, 57u, 4u, 57u, 4u, 57u, 4u, 57u, 
84
  8u, 57u, 5u, 57u, 5u, 57u, 13u, 13u, 4u, 57u, 4u, 57u, 4u, 57u, 8u, 57u, 
85
  5u, 57u, 5u, 57u, 13u, 13u, 4u, 57u, 4u, 57u, 5u, 57u, 8u, 57u, 1u, 57u, 
86
  3u, 57u, 3u, 57u, 4u, 57u, 1u, 57u, 5u, 57u, 5u, 57u, 9u, 9u, 5u, 9u, 
87
  1u, 57u, 1u, 57u, 1u, 57u, 3u, 57u, 4u, 57u, 5u, 57u, 5u, 57u, 4u, 57u, 
88
  5u, 57u, 3u, 57u, 5u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 4u, 57u, 
89
  1u, 57u, 3u, 57u, 3u, 57u, 4u, 57u, 1u, 57u, 5u, 57u, 9u, 9u, 5u, 9u, 
90
  1u, 57u, 1u, 57u, 3u, 57u, 4u, 57u, 5u, 57u, 5u, 57u, 4u, 57u, 5u, 57u, 
91
  5u, 57u, 3u, 57u, 5u, 57u, 3u, 57u, 3u, 57u, 4u, 57u, 3u, 57u, 3u, 57u, 
92
  4u, 57u, 1u, 57u, 3u, 57u, 1u, 57u, 5u, 57u, 9u, 9u, 5u, 9u, 1u, 57u, 
93
  1u, 57u, 3u, 57u, 4u, 57u, 5u, 57u, 5u, 57u, 3u, 57u, 4u, 57u, 5u, 57u, 
94
  5u, 57u, 3u, 57u, 5u, 57u, 3u, 57u, 4u, 57u, 4u, 57u, 3u, 57u, 3u, 57u, 
95
  4u, 57u, 1u, 57u, 3u, 57u, 1u, 57u, 5u, 57u, 9u, 9u, 5u, 9u, 1u, 57u, 
96
  1u, 57u, 3u, 57u, 4u, 57u, 5u, 57u, 5u, 57u, 3u, 57u, 4u, 57u, 5u, 57u, 
97
  5u, 57u, 3u, 57u, 5u, 57u, 1u, 57u, 3u, 57u, 1u, 57u, 4u, 57u, 5u, 57u, 
98
  5u, 57u, 9u, 9u, 5u, 9u, 1u, 57u, 3u, 57u, 5u, 57u, 5u, 57u, 9u, 9u, 
99
  5u, 9u, 1u, 15u, 0
100
};
101
102
static const char _indic_syllable_machine_key_spans[] = {
103
  50, 54, 53, 53, 1, 54, 54, 54, 
104
  50, 53, 53, 1, 54, 54, 54, 54, 
105
  50, 53, 53, 1, 54, 54, 54, 50, 
106
  53, 53, 1, 54, 54, 53, 50, 57, 
107
  55, 55, 54, 57, 53, 53, 1, 5, 
108
  57, 57, 57, 55, 54, 53, 53, 54, 
109
  53, 55, 53, 55, 55, 55, 55, 54, 
110
  57, 55, 55, 54, 57, 53, 1, 5, 
111
  57, 57, 55, 54, 53, 53, 54, 53, 
112
  53, 55, 53, 55, 55, 54, 55, 55, 
113
  54, 57, 55, 57, 53, 1, 5, 57, 
114
  57, 55, 54, 53, 53, 55, 54, 53, 
115
  53, 55, 53, 55, 54, 54, 55, 55, 
116
  54, 57, 55, 57, 53, 1, 5, 57, 
117
  57, 55, 54, 53, 53, 55, 54, 53, 
118
  53, 55, 53, 57, 55, 57, 54, 53, 
119
  53, 1, 5, 57, 55, 53, 53, 1, 
120
  5, 15
121
};
122
123
static const short _indic_syllable_machine_index_offsets[] = {
124
  0, 51, 106, 160, 214, 216, 271, 326, 
125
  381, 432, 486, 540, 542, 597, 652, 707, 
126
  762, 813, 867, 921, 923, 978, 1033, 1088, 
127
  1139, 1193, 1247, 1249, 1304, 1359, 1413, 1464, 
128
  1522, 1578, 1634, 1689, 1747, 1801, 1855, 1857, 
129
  1863, 1921, 1979, 2037, 2093, 2148, 2202, 2256, 
130
  2311, 2365, 2421, 2475, 2531, 2587, 2643, 2699, 
131
  2754, 2812, 2868, 2924, 2979, 3037, 3091, 3093, 
132
  3099, 3157, 3215, 3271, 3326, 3380, 3434, 3489, 
133
  3543, 3597, 3653, 3707, 3763, 3819, 3874, 3930, 
134
  3986, 4041, 4099, 4155, 4213, 4267, 4269, 4275, 
135
  4333, 4391, 4447, 4502, 4556, 4610, 4666, 4721, 
136
  4775, 4829, 4885, 4939, 4995, 5050, 5105, 5161, 
137
  5217, 5272, 5330, 5386, 5444, 5498, 5500, 5506, 
138
  5564, 5622, 5678, 5733, 5787, 5841, 5897, 5952, 
139
  6006, 6060, 6116, 6170, 6228, 6284, 6342, 6397, 
140
  6451, 6505, 6507, 6513, 6571, 6627, 6681, 6735, 
141
  6737, 6743
142
};
143
144
static const unsigned char _indic_syllable_machine_indicies[] = {
145
  1, 0, 0, 0, 0, 0, 0, 0, 
146
  0, 0, 0, 0, 0, 0, 0, 0, 
147
  0, 0, 0, 0, 0, 0, 0, 0, 
148
  0, 0, 0, 0, 0, 0, 0, 0, 
149
  0, 0, 0, 0, 0, 0, 0, 0, 
150
  0, 0, 0, 0, 0, 0, 0, 0, 
151
  0, 1, 0, 2, 3, 3, 4, 5, 
152
  0, 0, 0, 0, 4, 0, 0, 0, 
153
  0, 0, 0, 0, 0, 0, 0, 0, 
154
  0, 0, 0, 0, 0, 0, 0, 0, 
155
  0, 0, 0, 0, 0, 0, 0, 0, 
156
  0, 0, 0, 0, 0, 0, 0, 0, 
157
  0, 0, 0, 0, 0, 0, 0, 0, 
158
  5, 0, 3, 3, 4, 6, 0, 0, 
159
  0, 0, 4, 0, 0, 0, 0, 0, 
160
  0, 0, 0, 0, 0, 0, 0, 0, 
161
  0, 0, 0, 0, 0, 0, 0, 0, 
162
  0, 0, 0, 0, 0, 0, 0, 0, 
163
  0, 0, 0, 0, 0, 0, 0, 0, 
164
  0, 0, 0, 0, 0, 0, 6, 0, 
165
  3, 3, 4, 5, 0, 0, 0, 0, 
166
  4, 0, 0, 0, 0, 0, 0, 0, 
167
  0, 0, 0, 0, 0, 0, 0, 0, 
168
  0, 0, 0, 0, 0, 0, 0, 0, 
169
  0, 0, 0, 0, 0, 0, 0, 0, 
170
  0, 0, 0, 0, 0, 0, 0, 0, 
171
  0, 0, 0, 0, 5, 0, 4, 0, 
172
  7, 3, 3, 4, 5, 0, 0, 0, 
173
  0, 4, 0, 0, 0, 0, 0, 0, 
174
  0, 0, 0, 0, 0, 0, 0, 0, 
175
  0, 0, 0, 0, 0, 0, 0, 0, 
176
  0, 0, 0, 0, 0, 0, 0, 0, 
177
  0, 0, 0, 0, 0, 0, 0, 0, 
178
  0, 0, 0, 0, 0, 5, 0, 2, 
179
  3, 3, 4, 5, 0, 0, 0, 8, 
180
  4, 0, 0, 0, 0, 0, 0, 0, 
181
  0, 0, 0, 0, 0, 0, 0, 0, 
182
  0, 0, 0, 0, 0, 0, 0, 0, 
183
  0, 0, 0, 0, 0, 0, 0, 0, 
184
  0, 0, 0, 0, 0, 0, 0, 0, 
185
  0, 0, 0, 0, 5, 0, 10, 11, 
186
  11, 12, 13, 9, 9, 9, 9, 12, 
187
  9, 9, 9, 9, 9, 9, 9, 9, 
188
  9, 9, 9, 9, 9, 9, 9, 9, 
189
  9, 9, 9, 9, 9, 9, 9, 9, 
190
  9, 9, 9, 9, 9, 9, 9, 9, 
191
  9, 9, 9, 9, 9, 9, 9, 9, 
192
  9, 9, 9, 13, 9, 14, 9, 9, 
193
  9, 9, 9, 9, 9, 9, 9, 9, 
194
  9, 9, 9, 9, 9, 9, 9, 9, 
195
  9, 9, 9, 9, 9, 9, 9, 9, 
196
  9, 9, 9, 9, 9, 9, 9, 9, 
197
  9, 9, 9, 9, 9, 9, 9, 9, 
198
  9, 9, 9, 9, 9, 9, 14, 9, 
199
  11, 11, 12, 15, 9, 9, 9, 9, 
200
  12, 9, 9, 9, 9, 9, 9, 9, 
201
  9, 9, 9, 9, 9, 9, 9, 9, 
202
  9, 9, 9, 9, 9, 9, 9, 9, 
203
  9, 9, 9, 9, 9, 9, 9, 9, 
204
  9, 9, 9, 9, 9, 9, 9, 9, 
205
  9, 9, 9, 9, 15, 9, 11, 11, 
206
  12, 13, 9, 9, 9, 9, 12, 9, 
207
  9, 9, 9, 9, 9, 9, 9, 9, 
208
  9, 9, 9, 9, 9, 9, 9, 9, 
209
  9, 9, 9, 9, 9, 9, 9, 9, 
210
  9, 9, 9, 9, 9, 9, 9, 9, 
211
  9, 9, 9, 9, 9, 9, 9, 9, 
212
  9, 9, 13, 9, 12, 9, 16, 11, 
213
  11, 12, 13, 9, 9, 9, 9, 12, 
214
  9, 9, 9, 9, 9, 9, 9, 9, 
215
  9, 9, 9, 9, 9, 9, 9, 9, 
216
  9, 9, 9, 9, 9, 9, 9, 9, 
217
  9, 9, 9, 9, 9, 9, 9, 9, 
218
  9, 9, 9, 9, 9, 9, 9, 9, 
219
  9, 9, 9, 13, 9, 10, 11, 11, 
220
  12, 13, 9, 9, 9, 17, 12, 9, 
221
  9, 9, 9, 9, 9, 9, 9, 9, 
222
  9, 9, 9, 9, 9, 9, 9, 9, 
223
  9, 9, 9, 9, 9, 9, 9, 9, 
224
  9, 9, 9, 9, 9, 9, 9, 9, 
225
  9, 9, 9, 9, 9, 9, 9, 9, 
226
  9, 9, 13, 9, 10, 11, 11, 12, 
227
  13, 9, 9, 9, 18, 12, 9, 9, 
228
  9, 9, 9, 9, 9, 9, 9, 9, 
229
  9, 9, 9, 9, 9, 9, 9, 9, 
230
  9, 9, 9, 9, 9, 9, 9, 9, 
231
  9, 9, 9, 9, 9, 9, 9, 9, 
232
  9, 9, 9, 9, 9, 9, 9, 9, 
233
  9, 13, 9, 20, 21, 21, 22, 23, 
234
  19, 19, 19, 24, 22, 19, 19, 19, 
235
  19, 19, 19, 19, 19, 19, 19, 19, 
236
  19, 19, 19, 19, 19, 19, 19, 19, 
237
  19, 19, 19, 19, 19, 19, 19, 19, 
238
  19, 19, 19, 19, 19, 19, 19, 19, 
239
  19, 19, 19, 19, 19, 19, 19, 19, 
240
  23, 19, 25, 19, 19, 19, 19, 19, 
241
  19, 19, 19, 19, 19, 19, 19, 19, 
242
  19, 19, 19, 19, 19, 19, 19, 19, 
243
  19, 19, 19, 19, 19, 19, 19, 19, 
244
  19, 19, 19, 19, 19, 19, 19, 19, 
245
  19, 19, 19, 19, 19, 19, 19, 19, 
246
  19, 19, 19, 25, 19, 21, 21, 22, 
247
  27, 26, 26, 26, 26, 22, 26, 26, 
248
  26, 26, 26, 26, 26, 26, 26, 26, 
249
  26, 26, 26, 26, 26, 26, 26, 26, 
250
  26, 26, 26, 26, 26, 26, 26, 26, 
251
  26, 26, 26, 26, 26, 26, 26, 26, 
252
  26, 26, 26, 26, 26, 26, 26, 26, 
253
  26, 27, 26, 21, 21, 22, 23, 19, 
254
  19, 19, 19, 22, 19, 19, 19, 19, 
255
  19, 19, 19, 19, 19, 19, 19, 19, 
256
  19, 19, 19, 19, 19, 19, 19, 19, 
257
  19, 19, 19, 19, 19, 19, 19, 19, 
258
  19, 19, 19, 19, 19, 19, 19, 19, 
259
  19, 19, 19, 19, 19, 19, 19, 23, 
260
  19, 22, 26, 20, 21, 21, 22, 23, 
261
  19, 19, 19, 19, 22, 19, 19, 19, 
262
  19, 19, 19, 19, 19, 19, 19, 19, 
263
  19, 19, 19, 19, 19, 19, 19, 19, 
264
  19, 19, 19, 19, 19, 19, 19, 19, 
265
  19, 19, 19, 19, 19, 19, 19, 19, 
266
  19, 19, 19, 19, 19, 19, 19, 19, 
267
  23, 19, 28, 21, 21, 22, 23, 19, 
268
  19, 19, 19, 22, 19, 19, 19, 19, 
269
  19, 19, 19, 19, 19, 19, 19, 19, 
270
  19, 19, 19, 19, 19, 19, 19, 19, 
271
  19, 19, 19, 19, 19, 19, 19, 19, 
272
  19, 19, 19, 19, 19, 19, 19, 19, 
273
  19, 19, 19, 19, 19, 19, 19, 23, 
274
  19, 30, 31, 31, 32, 33, 29, 29, 
275
  29, 34, 32, 29, 29, 29, 29, 29, 
276
  29, 29, 29, 29, 29, 29, 29, 29, 
277
  29, 29, 29, 29, 29, 29, 29, 29, 
278
  29, 29, 29, 29, 29, 29, 29, 29, 
279
  29, 29, 29, 29, 29, 29, 29, 29, 
280
  29, 29, 29, 29, 29, 29, 33, 29, 
281
  35, 29, 29, 29, 29, 29, 29, 29, 
282
  29, 29, 29, 29, 29, 29, 29, 29, 
283
  29, 29, 29, 29, 29, 29, 29, 29, 
284
  29, 29, 29, 29, 29, 29, 29, 29, 
285
  29, 29, 29, 29, 29, 29, 29, 29, 
286
  29, 29, 29, 29, 29, 29, 29, 29, 
287
  29, 35, 29, 31, 31, 32, 36, 29, 
288
  29, 29, 29, 32, 29, 29, 29, 29, 
289
  29, 29, 29, 29, 29, 29, 29, 29, 
290
  29, 29, 29, 29, 29, 29, 29, 29, 
291
  29, 29, 29, 29, 29, 29, 29, 29, 
292
  29, 29, 29, 29, 29, 29, 29, 29, 
293
  29, 29, 29, 29, 29, 29, 29, 36, 
294
  29, 31, 31, 32, 33, 29, 29, 29, 
295
  29, 32, 29, 29, 29, 29, 29, 29, 
296
  29, 29, 29, 29, 29, 29, 29, 29, 
297
  29, 29, 29, 29, 29, 29, 29, 29, 
298
  29, 29, 29, 29, 29, 29, 29, 29, 
299
  29, 29, 29, 29, 29, 29, 29, 29, 
300
  29, 29, 29, 29, 29, 33, 29, 32, 
301
  29, 30, 31, 31, 32, 33, 29, 29, 
302
  29, 29, 32, 29, 29, 29, 29, 29, 
303
  29, 29, 29, 29, 29, 29, 29, 29, 
304
  29, 29, 29, 29, 29, 29, 29, 29, 
305
  29, 29, 29, 29, 29, 29, 29, 29, 
306
  29, 29, 29, 29, 29, 29, 29, 29, 
307
  29, 29, 29, 29, 29, 29, 33, 29, 
308
  37, 31, 31, 32, 33, 29, 29, 29, 
309
  29, 32, 29, 29, 29, 29, 29, 29, 
310
  29, 29, 29, 29, 29, 29, 29, 29, 
311
  29, 29, 29, 29, 29, 29, 29, 29, 
312
  29, 29, 29, 29, 29, 29, 29, 29, 
313
  29, 29, 29, 29, 29, 29, 29, 29, 
314
  29, 29, 29, 29, 29, 33, 29, 21, 
315
  21, 22, 38, 0, 0, 0, 0, 22, 
316
  0, 0, 0, 0, 0, 0, 0, 0, 
317
  0, 0, 0, 0, 0, 0, 0, 0, 
318
  0, 0, 0, 0, 0, 0, 0, 0, 
319
  0, 0, 0, 0, 0, 0, 0, 0, 
320
  0, 0, 0, 0, 0, 0, 0, 0, 
321
  0, 0, 0, 38, 0, 40, 39, 39, 
322
  39, 39, 39, 39, 39, 39, 39, 39, 
323
  39, 39, 39, 39, 39, 39, 39, 39, 
324
  39, 39, 39, 39, 39, 39, 39, 39, 
325
  39, 39, 39, 39, 39, 39, 39, 39, 
326
  39, 39, 39, 39, 39, 39, 39, 39, 
327
  39, 39, 39, 39, 39, 39, 40, 39, 
328
  42, 43, 44, 45, 46, 47, 22, 23, 
329
  48, 49, 49, 24, 22, 50, 51, 52, 
330
  53, 54, 41, 41, 41, 41, 41, 41, 
331
  41, 41, 41, 41, 41, 41, 41, 41, 
332
  41, 41, 41, 41, 41, 41, 41, 41, 
333
  41, 41, 41, 41, 41, 41, 41, 41, 
334
  41, 41, 41, 41, 41, 41, 41, 41, 
335
  55, 41, 57, 58, 59, 60, 4, 5, 
336
  61, 56, 56, 8, 4, 56, 56, 62, 
337
  56, 56, 56, 56, 56, 56, 56, 56, 
338
  56, 56, 56, 56, 56, 56, 56, 56, 
339
  56, 56, 56, 56, 56, 56, 56, 56, 
340
  56, 56, 56, 56, 56, 56, 56, 56, 
341
  56, 56, 56, 56, 56, 56, 56, 56, 
342
  5, 56, 63, 58, 64, 64, 4, 5, 
343
  61, 56, 56, 56, 4, 56, 56, 62, 
344
  56, 56, 56, 56, 56, 56, 56, 56, 
345
  56, 56, 56, 56, 56, 56, 56, 56, 
346
  56, 56, 56, 56, 56, 56, 56, 56, 
347
  56, 56, 56, 56, 56, 56, 56, 56, 
348
  56, 56, 56, 56, 56, 56, 56, 56, 
349
  5, 56, 58, 64, 64, 4, 5, 61, 
350
  56, 56, 56, 4, 56, 56, 62, 56, 
351
  56, 56, 56, 56, 56, 56, 56, 56, 
352
  56, 56, 56, 56, 56, 56, 56, 56, 
353
  56, 56, 56, 56, 56, 56, 56, 56, 
354
  56, 56, 56, 56, 56, 56, 56, 56, 
355
  56, 56, 56, 56, 56, 56, 56, 5, 
356
  56, 42, 56, 56, 56, 65, 66, 56, 
357
  1, 61, 56, 56, 56, 56, 56, 42, 
358
  56, 56, 56, 56, 56, 56, 56, 56, 
359
  56, 56, 56, 56, 56, 56, 56, 56, 
360
  56, 56, 56, 56, 56, 56, 56, 56, 
361
  56, 56, 56, 56, 56, 56, 56, 56, 
362
  56, 56, 56, 56, 56, 56, 56, 56, 
363
  56, 1, 56, 67, 67, 56, 1, 61, 
364
  56, 56, 56, 56, 56, 56, 56, 56, 
365
  56, 56, 56, 56, 56, 56, 56, 56, 
366
  56, 56, 56, 56, 56, 56, 56, 56, 
367
  56, 56, 56, 56, 56, 56, 56, 56, 
368
  56, 56, 56, 56, 56, 56, 56, 56, 
369
  56, 56, 56, 56, 56, 56, 56, 1, 
370
  56, 61, 56, 56, 68, 61, 56, 56, 
371
  56, 56, 56, 56, 56, 56, 56, 56, 
372
  56, 56, 56, 56, 56, 56, 56, 56, 
373
  56, 56, 56, 56, 56, 56, 56, 56, 
374
  56, 56, 56, 56, 56, 56, 56, 56, 
375
  56, 56, 56, 56, 56, 56, 56, 56, 
376
  56, 56, 56, 56, 56, 68, 56, 61, 
377
  56, 61, 56, 56, 56, 61, 56, 42, 
378
  56, 69, 56, 67, 67, 56, 1, 61, 
379
  56, 56, 56, 56, 56, 42, 56, 56, 
380
  56, 56, 56, 56, 56, 56, 56, 56, 
381
  56, 56, 56, 56, 56, 56, 56, 56, 
382
  56, 56, 56, 56, 56, 56, 56, 56, 
383
  56, 56, 56, 56, 56, 56, 56, 56, 
384
  56, 56, 56, 56, 56, 56, 56, 1, 
385
  56, 42, 56, 56, 56, 67, 67, 56, 
386
  1, 61, 56, 56, 56, 56, 56, 42, 
387
  56, 56, 56, 56, 56, 56, 56, 56, 
388
  56, 56, 56, 56, 56, 56, 56, 56, 
389
  56, 56, 56, 56, 56, 56, 56, 56, 
390
  56, 56, 56, 56, 56, 56, 56, 56, 
391
  56, 56, 56, 56, 56, 56, 56, 56, 
392
  56, 1, 56, 42, 56, 56, 56, 67, 
393
  66, 56, 1, 61, 56, 56, 56, 56, 
394
  56, 42, 56, 56, 56, 56, 56, 56, 
395
  56, 56, 56, 56, 56, 56, 56, 56, 
396
  56, 56, 56, 56, 56, 56, 56, 56, 
397
  56, 56, 56, 56, 56, 56, 56, 56, 
398
  56, 56, 56, 56, 56, 56, 56, 56, 
399
  56, 56, 56, 1, 56, 70, 71, 72, 
400
  72, 4, 5, 61, 56, 56, 56, 4, 
401
  56, 56, 56, 56, 56, 56, 56, 56, 
402
  56, 56, 56, 56, 56, 56, 56, 56, 
403
  56, 56, 56, 56, 56, 56, 56, 56, 
404
  56, 56, 56, 56, 56, 56, 56, 56, 
405
  56, 56, 56, 56, 56, 56, 56, 56, 
406
  56, 56, 56, 5, 56, 71, 72, 72, 
407
  4, 5, 61, 56, 56, 56, 4, 56, 
408
  56, 56, 56, 56, 56, 56, 56, 56, 
409
  56, 56, 56, 56, 56, 56, 56, 56, 
410
  56, 56, 56, 56, 56, 56, 56, 56, 
411
  56, 56, 56, 56, 56, 56, 56, 56, 
412
  56, 56, 56, 56, 56, 56, 56, 56, 
413
  56, 56, 5, 56, 72, 72, 4, 5, 
414
  61, 56, 56, 56, 4, 56, 56, 56, 
415
  56, 56, 56, 56, 56, 56, 56, 56, 
416
  56, 56, 56, 56, 56, 56, 56, 56, 
417
  56, 56, 56, 56, 56, 56, 56, 56, 
418
  56, 56, 56, 56, 56, 56, 56, 56, 
419
  56, 56, 56, 56, 56, 56, 56, 56, 
420
  5, 56, 61, 56, 56, 68, 61, 56, 
421
  56, 56, 4, 56, 56, 56, 56, 56, 
422
  56, 56, 56, 56, 56, 56, 56, 56, 
423
  56, 56, 56, 56, 56, 56, 56, 56, 
424
  56, 56, 56, 56, 56, 56, 56, 56, 
425
  56, 56, 56, 56, 56, 56, 56, 56, 
426
  56, 56, 56, 56, 56, 56, 68, 56, 
427
  73, 74, 74, 4, 5, 61, 56, 56, 
428
  56, 4, 56, 56, 56, 56, 56, 56, 
429
  56, 56, 56, 56, 56, 56, 56, 56, 
430
  56, 56, 56, 56, 56, 56, 56, 56, 
431
  56, 56, 56, 56, 56, 56, 56, 56, 
432
  56, 56, 56, 56, 56, 56, 56, 56, 
433
  56, 56, 56, 56, 56, 5, 56, 65, 
434
  75, 56, 1, 61, 56, 56, 56, 56, 
435
  56, 56, 56, 56, 56, 56, 56, 56, 
436
  56, 56, 56, 56, 56, 56, 56, 56, 
437
  56, 56, 56, 56, 56, 56, 56, 56, 
438
  56, 56, 56, 56, 56, 56, 56, 56, 
439
  56, 56, 56, 56, 56, 56, 56, 56, 
440
  56, 56, 56, 1, 56, 65, 56, 67, 
441
  67, 56, 1, 61, 56, 56, 56, 56, 
442
  56, 56, 56, 56, 56, 56, 56, 56, 
443
  56, 56, 56, 56, 56, 56, 56, 56, 
444
  56, 56, 56, 56, 56, 56, 56, 56, 
445
  56, 56, 56, 56, 56, 56, 56, 56, 
446
  56, 56, 56, 56, 56, 56, 56, 56, 
447
  56, 56, 56, 1, 56, 67, 75, 56, 
448
  1, 61, 56, 56, 56, 56, 56, 56, 
449
  56, 56, 56, 56, 56, 56, 56, 56, 
450
  56, 56, 56, 56, 56, 56, 56, 56, 
451
  56, 56, 56, 56, 56, 56, 56, 56, 
452
  56, 56, 56, 56, 56, 56, 56, 56, 
453
  56, 56, 56, 56, 56, 56, 56, 56, 
454
  56, 1, 56, 57, 58, 64, 64, 4, 
455
  5, 61, 56, 56, 56, 4, 56, 56, 
456
  62, 56, 56, 56, 56, 56, 56, 56, 
457
  56, 56, 56, 56, 56, 56, 56, 56, 
458
  56, 56, 56, 56, 56, 56, 56, 56, 
459
  56, 56, 56, 56, 56, 56, 56, 56, 
460
  56, 56, 56, 56, 56, 56, 56, 56, 
461
  56, 5, 56, 57, 58, 59, 64, 4, 
462
  5, 61, 56, 56, 8, 4, 56, 56, 
463
  62, 56, 56, 56, 56, 56, 56, 56, 
464
  56, 56, 56, 56, 56, 56, 56, 56, 
465
  56, 56, 56, 56, 56, 56, 56, 56, 
466
  56, 56, 56, 56, 56, 56, 56, 56, 
467
  56, 56, 56, 56, 56, 56, 56, 56, 
468
  56, 5, 56, 77, 78, 79, 80, 12, 
469
  13, 81, 76, 76, 18, 12, 76, 76, 
470
  82, 76, 76, 76, 76, 76, 76, 76, 
471
  76, 76, 76, 76, 76, 76, 76, 76, 
472
  76, 76, 76, 76, 76, 76, 76, 76, 
473
  76, 76, 76, 76, 76, 76, 76, 76, 
474
  76, 76, 76, 76, 76, 76, 76, 76, 
475
  76, 13, 76, 83, 78, 84, 80, 12, 
476
  13, 81, 76, 76, 76, 12, 76, 76, 
477
  82, 76, 76, 76, 76, 76, 76, 76, 
478
  76, 76, 76, 76, 76, 76, 76, 76, 
479
  76, 76, 76, 76, 76, 76, 76, 76, 
480
  76, 76, 76, 76, 76, 76, 76, 76, 
481
  76, 76, 76, 76, 76, 76, 76, 76, 
482
  76, 13, 76, 78, 84, 80, 12, 13, 
483
  81, 76, 76, 76, 12, 76, 76, 82, 
484
  76, 76, 76, 76, 76, 76, 76, 76, 
485
  76, 76, 76, 76, 76, 76, 76, 76, 
486
  76, 76, 76, 76, 76, 76, 76, 76, 
487
  76, 76, 76, 76, 76, 76, 76, 76, 
488
  76, 76, 76, 76, 76, 76, 76, 76, 
489
  13, 76, 85, 76, 76, 76, 86, 87, 
490
  76, 14, 81, 76, 76, 76, 76, 76, 
491
  85, 76, 76, 76, 76, 76, 76, 76, 
492
  76, 76, 76, 76, 76, 76, 76, 76, 
493
  76, 76, 76, 76, 76, 76, 76, 76, 
494
  76, 76, 76, 76, 76, 76, 76, 76, 
495
  76, 76, 76, 76, 76, 76, 76, 76, 
496
  76, 76, 14, 76, 88, 78, 89, 90, 
497
  12, 13, 81, 76, 76, 17, 12, 76, 
498
  76, 82, 76, 76, 76, 76, 76, 76, 
499
  76, 76, 76, 76, 76, 76, 76, 76, 
500
  76, 76, 76, 76, 76, 76, 76, 76, 
501
  76, 76, 76, 76, 76, 76, 76, 76, 
502
  76, 76, 76, 76, 76, 76, 76, 76, 
503
  76, 76, 13, 76, 91, 78, 84, 84, 
504
  12, 13, 81, 76, 76, 76, 12, 76, 
505
  76, 82, 76, 76, 76, 76, 76, 76, 
506
  76, 76, 76, 76, 76, 76, 76, 76, 
507
  76, 76, 76, 76, 76, 76, 76, 76, 
508
  76, 76, 76, 76, 76, 76, 76, 76, 
509
  76, 76, 76, 76, 76, 76, 76, 76, 
510
  76, 76, 13, 76, 78, 84, 84, 12, 
511
  13, 81, 76, 76, 76, 12, 76, 76, 
512
  82, 76, 76, 76, 76, 76, 76, 76, 
513
  76, 76, 76, 76, 76, 76, 76, 76, 
514
  76, 76, 76, 76, 76, 76, 76, 76, 
515
  76, 76, 76, 76, 76, 76, 76, 76, 
516
  76, 76, 76, 76, 76, 76, 76, 76, 
517
  76, 13, 76, 85, 76, 76, 76, 92, 
518
  87, 76, 14, 81, 76, 76, 76, 76, 
519
  76, 85, 76, 76, 76, 76, 76, 76, 
520
  76, 76, 76, 76, 76, 76, 76, 76, 
521
  76, 76, 76, 76, 76, 76, 76, 76, 
522
  76, 76, 76, 76, 76, 76, 76, 76, 
523
  76, 76, 76, 76, 76, 76, 76, 76, 
524
  76, 76, 76, 14, 76, 81, 76, 76, 
525
  93, 81, 76, 76, 76, 76, 76, 76, 
526
  76, 76, 76, 76, 76, 76, 76, 76, 
527
  76, 76, 76, 76, 76, 76, 76, 76, 
528
  76, 76, 76, 76, 76, 76, 76, 76, 
529
  76, 76, 76, 76, 76, 76, 76, 76, 
530
  76, 76, 76, 76, 76, 76, 76, 76, 
531
  76, 93, 76, 81, 76, 81, 76, 76, 
532
  76, 81, 76, 85, 76, 94, 76, 92, 
533
  92, 76, 14, 81, 76, 76, 76, 76, 
534
  76, 85, 76, 76, 76, 76, 76, 76, 
535
  76, 76, 76, 76, 76, 76, 76, 76, 
536
  76, 76, 76, 76, 76, 76, 76, 76, 
537
  76, 76, 76, 76, 76, 76, 76, 76, 
538
  76, 76, 76, 76, 76, 76, 76, 76, 
539
  76, 76, 76, 14, 76, 85, 76, 76, 
540
  76, 92, 92, 76, 14, 81, 76, 76, 
541
  76, 76, 76, 85, 76, 76, 76, 76, 
542
  76, 76, 76, 76, 76, 76, 76, 76, 
543
  76, 76, 76, 76, 76, 76, 76, 76, 
544
  76, 76, 76, 76, 76, 76, 76, 76, 
545
  76, 76, 76, 76, 76, 76, 76, 76, 
546
  76, 76, 76, 76, 76, 14, 76, 95, 
547
  96, 97, 97, 12, 13, 81, 76, 76, 
548
  76, 12, 76, 76, 76, 76, 76, 76, 
549
  76, 76, 76, 76, 76, 76, 76, 76, 
550
  76, 76, 76, 76, 76, 76, 76, 76, 
551
  76, 76, 76, 76, 76, 76, 76, 76, 
552
  76, 76, 76, 76, 76, 76, 76, 76, 
553
  76, 76, 76, 76, 76, 13, 76, 96, 
554
  97, 97, 12, 13, 81, 76, 76, 76, 
555
  12, 76, 76, 76, 76, 76, 76, 76, 
556
  76, 76, 76, 76, 76, 76, 76, 76, 
557
  76, 76, 76, 76, 76, 76, 76, 76, 
558
  76, 76, 76, 76, 76, 76, 76, 76, 
559
  76, 76, 76, 76, 76, 76, 76, 76, 
560
  76, 76, 76, 76, 13, 76, 97, 97, 
561
  12, 13, 81, 76, 76, 76, 12, 76, 
562
  76, 76, 76, 76, 76, 76, 76, 76, 
563
  76, 76, 76, 76, 76, 76, 76, 76, 
564
  76, 76, 76, 76, 76, 76, 76, 76, 
565
  76, 76, 76, 76, 76, 76, 76, 76, 
566
  76, 76, 76, 76, 76, 76, 76, 76, 
567
  76, 76, 13, 76, 81, 76, 76, 93, 
568
  81, 76, 76, 76, 12, 76, 76, 76, 
569
  76, 76, 76, 76, 76, 76, 76, 76, 
570
  76, 76, 76, 76, 76, 76, 76, 76, 
571
  76, 76, 76, 76, 76, 76, 76, 76, 
572
  76, 76, 76, 76, 76, 76, 76, 76, 
573
  76, 76, 76, 76, 76, 76, 76, 76, 
574
  93, 76, 98, 99, 99, 12, 13, 81, 
575
  76, 76, 76, 12, 76, 76, 76, 76, 
576
  76, 76, 76, 76, 76, 76, 76, 76, 
577
  76, 76, 76, 76, 76, 76, 76, 76, 
578
  76, 76, 76, 76, 76, 76, 76, 76, 
579
  76, 76, 76, 76, 76, 76, 76, 76, 
580
  76, 76, 76, 76, 76, 76, 76, 13, 
581
  76, 86, 100, 76, 14, 81, 76, 76, 
582
  76, 76, 76, 76, 76, 76, 76, 76, 
583
  76, 76, 76, 76, 76, 76, 76, 76, 
584
  76, 76, 76, 76, 76, 76, 76, 76, 
585
  76, 76, 76, 76, 76, 76, 76, 76, 
586
  76, 76, 76, 76, 76, 76, 76, 76, 
587
  76, 76, 76, 76, 76, 14, 76, 92, 
588
  92, 76, 14, 81, 76, 76, 76, 76, 
589
  76, 76, 76, 76, 76, 76, 76, 76, 
590
  76, 76, 76, 76, 76, 76, 76, 76, 
591
  76, 76, 76, 76, 76, 76, 76, 76, 
592
  76, 76, 76, 76, 76, 76, 76, 76, 
593
  76, 76, 76, 76, 76, 76, 76, 76, 
594
  76, 76, 76, 14, 76, 86, 76, 92, 
595
  92, 76, 14, 81, 76, 76, 76, 76, 
596
  76, 76, 76, 76, 76, 76, 76, 76, 
597
  76, 76, 76, 76, 76, 76, 76, 76, 
598
  76, 76, 76, 76, 76, 76, 76, 76, 
599
  76, 76, 76, 76, 76, 76, 76, 76, 
600
  76, 76, 76, 76, 76, 76, 76, 76, 
601
  76, 76, 76, 14, 76, 92, 100, 76, 
602
  14, 81, 76, 76, 76, 76, 76, 76, 
603
  76, 76, 76, 76, 76, 76, 76, 76, 
604
  76, 76, 76, 76, 76, 76, 76, 76, 
605
  76, 76, 76, 76, 76, 76, 76, 76, 
606
  76, 76, 76, 76, 76, 76, 76, 76, 
607
  76, 76, 76, 76, 76, 76, 76, 76, 
608
  76, 14, 76, 88, 78, 84, 84, 12, 
609
  13, 81, 76, 76, 76, 12, 76, 76, 
610
  82, 76, 76, 76, 76, 76, 76, 76, 
611
  76, 76, 76, 76, 76, 76, 76, 76, 
612
  76, 76, 76, 76, 76, 76, 76, 76, 
613
  76, 76, 76, 76, 76, 76, 76, 76, 
614
  76, 76, 76, 76, 76, 76, 76, 76, 
615
  76, 13, 76, 88, 78, 89, 84, 12, 
616
  13, 81, 76, 76, 17, 12, 76, 76, 
617
  82, 76, 76, 76, 76, 76, 76, 76, 
618
  76, 76, 76, 76, 76, 76, 76, 76, 
619
  76, 76, 76, 76, 76, 76, 76, 76, 
620
  76, 76, 76, 76, 76, 76, 76, 76, 
621
  76, 76, 76, 76, 76, 76, 76, 76, 
622
  76, 13, 76, 10, 11, 11, 12, 13, 
623
  76, 76, 76, 76, 12, 76, 76, 76, 
624
  76, 76, 76, 76, 76, 76, 76, 76, 
625
  76, 76, 76, 76, 76, 76, 76, 76, 
626
  76, 76, 76, 76, 76, 76, 76, 76, 
627
  76, 76, 76, 76, 76, 76, 76, 76, 
628
  76, 76, 76, 76, 76, 76, 76, 76, 
629
  13, 76, 77, 78, 84, 80, 12, 13, 
630
  81, 76, 76, 76, 12, 76, 76, 82, 
631
  76, 76, 76, 76, 76, 76, 76, 76, 
632
  76, 76, 76, 76, 76, 76, 76, 76, 
633
  76, 76, 76, 76, 76, 76, 76, 76, 
634
  76, 76, 76, 76, 76, 76, 76, 76, 
635
  76, 76, 76, 76, 76, 76, 76, 76, 
636
  13, 76, 102, 45, 103, 103, 22, 23, 
637
  48, 101, 101, 101, 22, 101, 101, 52, 
638
  101, 101, 101, 101, 101, 101, 101, 101, 
639
  101, 101, 101, 101, 101, 101, 101, 101, 
640
  101, 101, 101, 101, 101, 101, 101, 101, 
641
  101, 101, 101, 101, 101, 101, 101, 101, 
642
  101, 101, 101, 101, 101, 101, 101, 101, 
643
  23, 101, 45, 103, 103, 22, 23, 48, 
644
  101, 101, 101, 22, 101, 101, 52, 101, 
645
  101, 101, 101, 101, 101, 101, 101, 101, 
646
  101, 101, 101, 101, 101, 101, 101, 101, 
647
  101, 101, 101, 101, 101, 101, 101, 101, 
648
  101, 101, 101, 101, 101, 101, 101, 101, 
649
  101, 101, 101, 101, 101, 101, 101, 23, 
650
  101, 104, 101, 101, 101, 105, 106, 101, 
651
  25, 48, 101, 101, 101, 101, 101, 104, 
652
  101, 101, 101, 101, 101, 101, 101, 101, 
653
  101, 101, 101, 101, 101, 101, 101, 101, 
654
  101, 101, 101, 101, 101, 101, 101, 101, 
655
  101, 101, 101, 101, 101, 101, 101, 101, 
656
  101, 101, 101, 101, 101, 101, 101, 101, 
657
  101, 25, 101, 44, 45, 107, 108, 22, 
658
  23, 48, 101, 101, 24, 22, 101, 101, 
659
  52, 101, 101, 101, 101, 101, 101, 101, 
660
  101, 101, 101, 101, 101, 101, 101, 101, 
661
  101, 101, 101, 101, 101, 101, 101, 101, 
662
  101, 101, 101, 101, 101, 101, 101, 101, 
663
  101, 101, 101, 101, 101, 101, 101, 101, 
664
  101, 23, 101, 104, 101, 101, 101, 109, 
665
  106, 101, 25, 48, 101, 101, 101, 101, 
666
  101, 104, 101, 101, 101, 101, 101, 101, 
667
  101, 101, 101, 101, 101, 101, 101, 101, 
668
  101, 101, 101, 101, 101, 101, 101, 101, 
669
  101, 101, 101, 101, 101, 101, 101, 101, 
670
  101, 101, 101, 101, 101, 101, 101, 101, 
671
  101, 101, 101, 25, 101, 48, 101, 101, 
672
  110, 48, 101, 101, 101, 101, 101, 101, 
673
  101, 101, 101, 101, 101, 101, 101, 101, 
674
  101, 101, 101, 101, 101, 101, 101, 101, 
675
  101, 101, 101, 101, 101, 101, 101, 101, 
676
  101, 101, 101, 101, 101, 101, 101, 101, 
677
  101, 101, 101, 101, 101, 101, 101, 101, 
678
  101, 110, 101, 48, 101, 48, 101, 101, 
679
  101, 48, 101, 104, 101, 111, 101, 109, 
680
  109, 101, 25, 48, 101, 101, 101, 101, 
681
  101, 104, 101, 101, 101, 101, 101, 101, 
682
  101, 101, 101, 101, 101, 101, 101, 101, 
683
  101, 101, 101, 101, 101, 101, 101, 101, 
684
  101, 101, 101, 101, 101, 101, 101, 101, 
685
  101, 101, 101, 101, 101, 101, 101, 101, 
686
  101, 101, 101, 25, 101, 104, 101, 101, 
687
  101, 109, 109, 101, 25, 48, 101, 101, 
688
  101, 101, 101, 104, 101, 101, 101, 101, 
689
  101, 101, 101, 101, 101, 101, 101, 101, 
690
  101, 101, 101, 101, 101, 101, 101, 101, 
691
  101, 101, 101, 101, 101, 101, 101, 101, 
692
  101, 101, 101, 101, 101, 101, 101, 101, 
693
  101, 101, 101, 101, 101, 25, 101, 112, 
694
  113, 114, 114, 22, 23, 48, 101, 101, 
695
  101, 22, 101, 101, 101, 101, 101, 101, 
696
  101, 101, 101, 101, 101, 101, 101, 101, 
697
  101, 101, 101, 101, 101, 101, 101, 101, 
698
  101, 101, 101, 101, 101, 101, 101, 101, 
699
  101, 101, 101, 101, 101, 101, 101, 101, 
700
  101, 101, 101, 101, 101, 23, 101, 113, 
701
  114, 114, 22, 23, 48, 101, 101, 101, 
702
  22, 101, 101, 101, 101, 101, 101, 101, 
703
  101, 101, 101, 101, 101, 101, 101, 101, 
704
  101, 101, 101, 101, 101, 101, 101, 101, 
705
  101, 101, 101, 101, 101, 101, 101, 101, 
706
  101, 101, 101, 101, 101, 101, 101, 101, 
707
  101, 101, 101, 101, 23, 101, 114, 114, 
708
  22, 23, 48, 101, 101, 101, 22, 101, 
709
  101, 101, 101, 101, 101, 101, 101, 101, 
710
  101, 101, 101, 101, 101, 101, 101, 101, 
711
  101, 101, 101, 101, 101, 101, 101, 101, 
712
  101, 101, 101, 101, 101, 101, 101, 101, 
713
  101, 101, 101, 101, 101, 101, 101, 101, 
714
  101, 101, 23, 101, 48, 26, 26, 110, 
715
  48, 26, 26, 26, 22, 26, 26, 26, 
716
  26, 26, 26, 26, 26, 26, 26, 26, 
717
  26, 26, 26, 26, 26, 26, 26, 26, 
718
  26, 26, 26, 26, 26, 26, 26, 26, 
719
  26, 26, 26, 26, 26, 26, 26, 26, 
720
  26, 26, 26, 26, 26, 26, 26, 26, 
721
  110, 26, 44, 45, 103, 103, 22, 23, 
722
  48, 101, 101, 101, 22, 101, 101, 52, 
723
  101, 101, 101, 101, 101, 101, 101, 101, 
724
  101, 101, 101, 101, 101, 101, 101, 101, 
725
  101, 101, 101, 101, 101, 101, 101, 101, 
726
  101, 101, 101, 101, 101, 101, 101, 101, 
727
  101, 101, 101, 101, 101, 101, 101, 101, 
728
  23, 101, 115, 116, 116, 22, 23, 48, 
729
  101, 101, 101, 22, 101, 101, 101, 101, 
730
  101, 101, 101, 101, 101, 101, 101, 101, 
731
  101, 101, 101, 101, 101, 101, 101, 101, 
732
  101, 101, 101, 101, 101, 101, 101, 101, 
733
  101, 101, 101, 101, 101, 101, 101, 101, 
734
  101, 101, 101, 101, 101, 101, 101, 23, 
735
  101, 105, 117, 101, 25, 48, 101, 101, 
736
  101, 101, 101, 101, 101, 101, 101, 101, 
737
  101, 101, 101, 101, 101, 101, 101, 101, 
738
  101, 101, 101, 101, 101, 101, 101, 101, 
739
  101, 101, 101, 101, 101, 101, 101, 101, 
740
  101, 101, 101, 101, 101, 101, 101, 101, 
741
  101, 101, 101, 101, 101, 25, 101, 109, 
742
  109, 101, 25, 48, 101, 101, 101, 101, 
743
  101, 101, 101, 101, 101, 101, 101, 101, 
744
  101, 101, 101, 101, 101, 101, 101, 101, 
745
  101, 101, 101, 101, 101, 101, 101, 101, 
746
  101, 101, 101, 101, 101, 101, 101, 101, 
747
  101, 101, 101, 101, 101, 101, 101, 101, 
748
  101, 101, 101, 25, 101, 105, 101, 109, 
749
  109, 101, 25, 48, 101, 101, 101, 101, 
750
  101, 101, 101, 101, 101, 101, 101, 101, 
751
  101, 101, 101, 101, 101, 101, 101, 101, 
752
  101, 101, 101, 101, 101, 101, 101, 101, 
753
  101, 101, 101, 101, 101, 101, 101, 101, 
754
  101, 101, 101, 101, 101, 101, 101, 101, 
755
  101, 101, 101, 25, 101, 109, 117, 101, 
756
  25, 48, 101, 101, 101, 101, 101, 101, 
757
  101, 101, 101, 101, 101, 101, 101, 101, 
758
  101, 101, 101, 101, 101, 101, 101, 101, 
759
  101, 101, 101, 101, 101, 101, 101, 101, 
760
  101, 101, 101, 101, 101, 101, 101, 101, 
761
  101, 101, 101, 101, 101, 101, 101, 101, 
762
  101, 25, 101, 44, 45, 107, 103, 22, 
763
  23, 48, 101, 101, 24, 22, 101, 101, 
764
  52, 101, 101, 101, 101, 101, 101, 101, 
765
  101, 101, 101, 101, 101, 101, 101, 101, 
766
  101, 101, 101, 101, 101, 101, 101, 101, 
767
  101, 101, 101, 101, 101, 101, 101, 101, 
768
  101, 101, 101, 101, 101, 101, 101, 101, 
769
  101, 23, 101, 20, 21, 21, 22, 23, 
770
  118, 118, 118, 24, 22, 118, 118, 118, 
771
  118, 118, 118, 118, 118, 118, 118, 118, 
772
  118, 118, 118, 118, 118, 118, 118, 118, 
773
  118, 118, 118, 118, 118, 118, 118, 118, 
774
  118, 118, 118, 118, 118, 118, 118, 118, 
775
  118, 118, 118, 118, 118, 118, 118, 118, 
776
  23, 118, 20, 21, 21, 22, 23, 118, 
777
  118, 118, 118, 22, 118, 118, 118, 118, 
778
  118, 118, 118, 118, 118, 118, 118, 118, 
779
  118, 118, 118, 118, 118, 118, 118, 118, 
780
  118, 118, 118, 118, 118, 118, 118, 118, 
781
  118, 118, 118, 118, 118, 118, 118, 118, 
782
  118, 118, 118, 118, 118, 118, 118, 23, 
783
  118, 120, 121, 122, 123, 32, 33, 124, 
784
  119, 119, 34, 32, 119, 119, 125, 119, 
785
  119, 119, 119, 119, 119, 119, 119, 119, 
786
  119, 119, 119, 119, 119, 119, 119, 119, 
787
  119, 119, 119, 119, 119, 119, 119, 119, 
788
  119, 119, 119, 119, 119, 119, 119, 119, 
789
  119, 119, 119, 119, 119, 119, 119, 33, 
790
  119, 126, 121, 123, 123, 32, 33, 124, 
791
  119, 119, 119, 32, 119, 119, 125, 119, 
792
  119, 119, 119, 119, 119, 119, 119, 119, 
793
  119, 119, 119, 119, 119, 119, 119, 119, 
794
  119, 119, 119, 119, 119, 119, 119, 119, 
795
  119, 119, 119, 119, 119, 119, 119, 119, 
796
  119, 119, 119, 119, 119, 119, 119, 33, 
797
  119, 121, 123, 123, 32, 33, 124, 119, 
798
  119, 119, 32, 119, 119, 125, 119, 119, 
799
  119, 119, 119, 119, 119, 119, 119, 119, 
800
  119, 119, 119, 119, 119, 119, 119, 119, 
801
  119, 119, 119, 119, 119, 119, 119, 119, 
802
  119, 119, 119, 119, 119, 119, 119, 119, 
803
  119, 119, 119, 119, 119, 119, 33, 119, 
804
  127, 119, 119, 119, 128, 129, 119, 35, 
805
  124, 119, 119, 119, 119, 119, 127, 119, 
806
  119, 119, 119, 119, 119, 119, 119, 119, 
807
  119, 119, 119, 119, 119, 119, 119, 119, 
808
  119, 119, 119, 119, 119, 119, 119, 119, 
809
  119, 119, 119, 119, 119, 119, 119, 119, 
810
  119, 119, 119, 119, 119, 119, 119, 119, 
811
  35, 119, 120, 121, 122, 49, 32, 33, 
812
  124, 119, 119, 34, 32, 119, 119, 125, 
813
  119, 119, 119, 119, 119, 119, 119, 119, 
814
  119, 119, 119, 119, 119, 119, 119, 119, 
815
  119, 119, 119, 119, 119, 119, 119, 119, 
816
  119, 119, 119, 119, 119, 119, 119, 119, 
817
  119, 119, 119, 119, 119, 119, 119, 119, 
818
  33, 119, 127, 119, 119, 119, 130, 129, 
819
  119, 35, 124, 119, 119, 119, 119, 119, 
820
  127, 119, 119, 119, 119, 119, 119, 119, 
821
  119, 119, 119, 119, 119, 119, 119, 119, 
822
  119, 119, 119, 119, 119, 119, 119, 119, 
823
  119, 119, 119, 119, 119, 119, 119, 119, 
824
  119, 119, 119, 119, 119, 119, 119, 119, 
825
  119, 119, 35, 119, 124, 119, 119, 131, 
826
  124, 119, 119, 119, 119, 119, 119, 119, 
827
  119, 119, 119, 119, 119, 119, 119, 119, 
828
  119, 119, 119, 119, 119, 119, 119, 119, 
829
  119, 119, 119, 119, 119, 119, 119, 119, 
830
  119, 119, 119, 119, 119, 119, 119, 119, 
831
  119, 119, 119, 119, 119, 119, 119, 119, 
832
  131, 119, 124, 119, 124, 119, 119, 119, 
833
  124, 119, 127, 119, 132, 119, 130, 130, 
834
  119, 35, 124, 119, 119, 119, 119, 119, 
835
  127, 119, 119, 119, 119, 119, 119, 119, 
836
  119, 119, 119, 119, 119, 119, 119, 119, 
837
  119, 119, 119, 119, 119, 119, 119, 119, 
838
  119, 119, 119, 119, 119, 119, 119, 119, 
839
  119, 119, 119, 119, 119, 119, 119, 119, 
840
  119, 119, 35, 119, 127, 119, 119, 119, 
841
  130, 130, 119, 35, 124, 119, 119, 119, 
842
  119, 119, 127, 119, 119, 119, 119, 119, 
843
  119, 119, 119, 119, 119, 119, 119, 119, 
844
  119, 119, 119, 119, 119, 119, 119, 119, 
845
  119, 119, 119, 119, 119, 119, 119, 119, 
846
  119, 119, 119, 119, 119, 119, 119, 119, 
847
  119, 119, 119, 119, 35, 119, 133, 134, 
848
  135, 135, 32, 33, 124, 119, 119, 119, 
849
  32, 119, 119, 119, 119, 119, 119, 119, 
850
  119, 119, 119, 119, 119, 119, 119, 119, 
851
  119, 119, 119, 119, 119, 119, 119, 119, 
852
  119, 119, 119, 119, 119, 119, 119, 119, 
853
  119, 119, 119, 119, 119, 119, 119, 119, 
854
  119, 119, 119, 119, 33, 119, 134, 135, 
855
  135, 32, 33, 124, 119, 119, 119, 32, 
856
  119, 119, 119, 119, 119, 119, 119, 119, 
857
  119, 119, 119, 119, 119, 119, 119, 119, 
858
  119, 119, 119, 119, 119, 119, 119, 119, 
859
  119, 119, 119, 119, 119, 119, 119, 119, 
860
  119, 119, 119, 119, 119, 119, 119, 119, 
861
  119, 119, 119, 33, 119, 135, 135, 32, 
862
  33, 124, 119, 119, 119, 32, 119, 119, 
863
  119, 119, 119, 119, 119, 119, 119, 119, 
864
  119, 119, 119, 119, 119, 119, 119, 119, 
865
  119, 119, 119, 119, 119, 119, 119, 119, 
866
  119, 119, 119, 119, 119, 119, 119, 119, 
867
  119, 119, 119, 119, 119, 119, 119, 119, 
868
  119, 33, 119, 124, 119, 119, 131, 124, 
869
  119, 119, 119, 32, 119, 119, 119, 119, 
870
  119, 119, 119, 119, 119, 119, 119, 119, 
871
  119, 119, 119, 119, 119, 119, 119, 119, 
872
  119, 119, 119, 119, 119, 119, 119, 119, 
873
  119, 119, 119, 119, 119, 119, 119, 119, 
874
  119, 119, 119, 119, 119, 119, 119, 131, 
875
  119, 120, 121, 123, 123, 32, 33, 124, 
876
  119, 119, 119, 32, 119, 119, 125, 119, 
877
  119, 119, 119, 119, 119, 119, 119, 119, 
878
  119, 119, 119, 119, 119, 119, 119, 119, 
879
  119, 119, 119, 119, 119, 119, 119, 119, 
880
  119, 119, 119, 119, 119, 119, 119, 119, 
881
  119, 119, 119, 119, 119, 119, 119, 33, 
882
  119, 136, 137, 137, 32, 33, 124, 119, 
883
  119, 119, 32, 119, 119, 119, 119, 119, 
884
  119, 119, 119, 119, 119, 119, 119, 119, 
885
  119, 119, 119, 119, 119, 119, 119, 119, 
886
  119, 119, 119, 119, 119, 119, 119, 119, 
887
  119, 119, 119, 119, 119, 119, 119, 119, 
888
  119, 119, 119, 119, 119, 119, 33, 119, 
889
  128, 138, 119, 35, 124, 119, 119, 119, 
890
  119, 119, 119, 119, 119, 119, 119, 119, 
891
  119, 119, 119, 119, 119, 119, 119, 119, 
892
  119, 119, 119, 119, 119, 119, 119, 119, 
893
  119, 119, 119, 119, 119, 119, 119, 119, 
894
  119, 119, 119, 119, 119, 119, 119, 119, 
895
  119, 119, 119, 119, 35, 119, 130, 130, 
896
  119, 35, 124, 119, 119, 119, 119, 119, 
897
  119, 119, 119, 119, 119, 119, 119, 119, 
898
  119, 119, 119, 119, 119, 119, 119, 119, 
899
  119, 119, 119, 119, 119, 119, 119, 119, 
900
  119, 119, 119, 119, 119, 119, 119, 119, 
901
  119, 119, 119, 119, 119, 119, 119, 119, 
902
  119, 119, 35, 119, 128, 119, 130, 130, 
903
  119, 35, 124, 119, 119, 119, 119, 119, 
904
  119, 119, 119, 119, 119, 119, 119, 119, 
905
  119, 119, 119, 119, 119, 119, 119, 119, 
906
  119, 119, 119, 119, 119, 119, 119, 119, 
907
  119, 119, 119, 119, 119, 119, 119, 119, 
908
  119, 119, 119, 119, 119, 119, 119, 119, 
909
  119, 119, 35, 119, 130, 138, 119, 35, 
910
  124, 119, 119, 119, 119, 119, 119, 119, 
911
  119, 119, 119, 119, 119, 119, 119, 119, 
912
  119, 119, 119, 119, 119, 119, 119, 119, 
913
  119, 119, 119, 119, 119, 119, 119, 119, 
914
  119, 119, 119, 119, 119, 119, 119, 119, 
915
  119, 119, 119, 119, 119, 119, 119, 119, 
916
  35, 119, 42, 43, 44, 45, 107, 103, 
917
  22, 23, 48, 49, 49, 24, 22, 101, 
918
  42, 52, 101, 101, 101, 101, 101, 101, 
919
  101, 101, 101, 101, 101, 101, 101, 101, 
920
  101, 101, 101, 101, 101, 101, 101, 101, 
921
  101, 101, 101, 101, 101, 101, 101, 101, 
922
  101, 101, 101, 101, 101, 101, 101, 101, 
923
  101, 101, 23, 101, 57, 139, 59, 60, 
924
  4, 5, 61, 56, 56, 8, 4, 56, 
925
  56, 62, 56, 56, 56, 56, 56, 56, 
926
  56, 56, 56, 56, 56, 56, 56, 56, 
927
  56, 56, 56, 56, 56, 56, 56, 56, 
928
  56, 56, 56, 56, 56, 56, 56, 56, 
929
  56, 56, 56, 56, 56, 56, 56, 56, 
930
  56, 56, 5, 56, 42, 43, 44, 45, 
931
  140, 141, 22, 142, 143, 56, 49, 24, 
932
  22, 56, 42, 52, 56, 56, 56, 56, 
933
  56, 56, 56, 56, 56, 56, 56, 56, 
934
  56, 56, 56, 56, 56, 56, 56, 56, 
935
  56, 56, 56, 56, 56, 56, 56, 56, 
936
  56, 56, 56, 56, 56, 56, 56, 56, 
937
  56, 56, 56, 56, 142, 56, 20, 144, 
938
  144, 22, 142, 61, 56, 56, 24, 22, 
939
  56, 56, 56, 56, 56, 56, 56, 56, 
940
  56, 56, 56, 56, 56, 56, 56, 56, 
941
  56, 56, 56, 56, 56, 56, 56, 56, 
942
  56, 56, 56, 56, 56, 56, 56, 56, 
943
  56, 56, 56, 56, 56, 56, 56, 56, 
944
  56, 56, 56, 142, 56, 61, 56, 56, 
945
  68, 61, 56, 56, 56, 22, 56, 56, 
946
  56, 56, 56, 56, 56, 56, 56, 56, 
947
  56, 56, 56, 56, 56, 56, 56, 56, 
948
  56, 56, 56, 56, 56, 56, 56, 56, 
949
  56, 56, 56, 56, 56, 56, 56, 56, 
950
  56, 56, 56, 56, 56, 56, 56, 56, 
951
  56, 68, 56, 143, 56, 56, 145, 143, 
952
  56, 56, 56, 22, 56, 56, 56, 56, 
953
  56, 56, 56, 56, 56, 56, 56, 56, 
954
  56, 56, 56, 56, 56, 56, 56, 56, 
955
  56, 56, 56, 56, 56, 56, 56, 56, 
956
  56, 56, 56, 56, 56, 56, 56, 56, 
957
  56, 56, 56, 56, 56, 56, 56, 145, 
958
  56, 143, 56, 143, 56, 56, 56, 143, 
959
  56, 42, 56, 69, 20, 144, 144, 22, 
960
  142, 61, 56, 56, 56, 22, 56, 42, 
961
  56, 56, 56, 56, 56, 56, 56, 56, 
962
  56, 56, 56, 56, 56, 56, 56, 56, 
963
  56, 56, 56, 56, 56, 56, 56, 56, 
964
  56, 56, 56, 56, 56, 56, 56, 56, 
965
  56, 56, 56, 56, 56, 56, 56, 56, 
966
  56, 142, 56, 147, 146, 148, 148, 146, 
967
  40, 149, 146, 146, 146, 146, 146, 146, 
968
  146, 146, 146, 146, 146, 146, 146, 146, 
969
  146, 146, 146, 146, 146, 146, 146, 146, 
970
  146, 146, 146, 146, 146, 146, 146, 146, 
971
  146, 146, 146, 146, 146, 146, 146, 146, 
972
  146, 146, 146, 146, 146, 146, 146, 146, 
973
  146, 40, 146, 148, 148, 146, 40, 149, 
974
  146, 146, 146, 146, 146, 146, 146, 146, 
975
  146, 146, 146, 146, 146, 146, 146, 146, 
976
  146, 146, 146, 146, 146, 146, 146, 146, 
977
  146, 146, 146, 146, 146, 146, 146, 146, 
978
  146, 146, 146, 146, 146, 146, 146, 146, 
979
  146, 146, 146, 146, 146, 146, 146, 40, 
980
  146, 149, 146, 146, 150, 149, 146, 146, 
981
  146, 146, 146, 146, 146, 146, 146, 146, 
982
  146, 146, 146, 146, 146, 146, 146, 146, 
983
  146, 146, 146, 146, 146, 146, 146, 146, 
984
  146, 146, 146, 146, 146, 146, 146, 146, 
985
  146, 146, 146, 146, 146, 146, 146, 146, 
986
  146, 146, 146, 146, 146, 150, 146, 149, 
987
  146, 149, 146, 146, 146, 149, 146, 42, 
988
  118, 118, 118, 118, 118, 118, 118, 118, 
989
  49, 118, 118, 118, 118, 42, 118, 0
990
};
991
992
static const unsigned char _indic_syllable_machine_trans_targs[] = {
993
  31, 37, 42, 2, 43, 46, 4, 50, 
994
  51, 31, 60, 9, 66, 69, 61, 11, 
995
  74, 75, 78, 31, 83, 17, 89, 92, 
996
  93, 84, 31, 19, 98, 31, 107, 24, 
997
  113, 116, 117, 108, 26, 122, 127, 31, 
998
  134, 31, 32, 53, 79, 81, 100, 101, 
999
  85, 102, 123, 124, 94, 132, 137, 92, 
1000
  31, 33, 35, 6, 52, 38, 47, 34, 
1001
  1, 36, 40, 0, 39, 41, 44, 45, 
1002
  3, 48, 5, 49, 31, 54, 56, 14, 
1003
  77, 62, 70, 55, 7, 57, 72, 64, 
1004
  58, 13, 76, 59, 8, 63, 65, 67, 
1005
  68, 10, 71, 12, 73, 31, 80, 20, 
1006
  82, 96, 87, 15, 99, 16, 86, 88, 
1007
  90, 91, 18, 95, 21, 97, 31, 31, 
1008
  103, 105, 22, 27, 109, 118, 104, 106, 
1009
  120, 111, 23, 110, 112, 114, 115, 25, 
1010
  119, 28, 121, 125, 126, 131, 128, 129, 
1011
  29, 130, 31, 133, 30, 135, 136
1012
};
1013
1014
static const char _indic_syllable_machine_trans_actions[] = {
1015
  1, 0, 2, 0, 2, 0, 0, 2, 
1016
  2, 3, 2, 0, 2, 0, 0, 0, 
1017
  2, 2, 2, 4, 2, 0, 5, 5, 
1018
  5, 0, 6, 0, 2, 7, 2, 0, 
1019
  2, 0, 2, 0, 0, 2, 0, 8, 
1020
  0, 11, 2, 2, 5, 0, 12, 12, 
1021
  0, 2, 5, 2, 5, 2, 0, 13, 
1022
  14, 2, 0, 0, 2, 0, 2, 2, 
1023
  0, 2, 2, 0, 0, 2, 2, 2, 
1024
  0, 0, 0, 2, 15, 2, 0, 0, 
1025
  2, 0, 2, 2, 0, 2, 2, 2, 
1026
  2, 0, 2, 2, 0, 0, 2, 2, 
1027
  2, 0, 0, 0, 2, 16, 5, 0, 
1028
  5, 2, 2, 0, 5, 0, 0, 2, 
1029
  5, 5, 0, 0, 0, 2, 17, 18, 
1030
  2, 0, 0, 0, 0, 2, 2, 2, 
1031
  2, 2, 0, 0, 2, 2, 2, 0, 
1032
  0, 0, 2, 0, 19, 19, 0, 0, 
1033
  0, 0, 20, 2, 0, 0, 0
1034
};
1035
1036
static const char _indic_syllable_machine_to_state_actions[] = {
1037
  0, 0, 0, 0, 0, 0, 0, 0, 
1038
  0, 0, 0, 0, 0, 0, 0, 0, 
1039
  0, 0, 0, 0, 0, 0, 0, 0, 
1040
  0, 0, 0, 0, 0, 0, 0, 9, 
1041
  0, 0, 0, 0, 0, 0, 0, 0, 
1042
  0, 0, 0, 0, 0, 0, 0, 0, 
1043
  0, 0, 0, 0, 0, 0, 0, 0, 
1044
  0, 0, 0, 0, 0, 0, 0, 0, 
1045
  0, 0, 0, 0, 0, 0, 0, 0, 
1046
  0, 0, 0, 0, 0, 0, 0, 0, 
1047
  0, 0, 0, 0, 0, 0, 0, 0, 
1048
  0, 0, 0, 0, 0, 0, 0, 0, 
1049
  0, 0, 0, 0, 0, 0, 0, 0, 
1050
  0, 0, 0, 0, 0, 0, 0, 0, 
1051
  0, 0, 0, 0, 0, 0, 0, 0, 
1052
  0, 0, 0, 0, 0, 0, 0, 0, 
1053
  0, 0, 0, 0, 0, 0, 0, 0, 
1054
  0, 0
1055
};
1056
1057
static const char _indic_syllable_machine_from_state_actions[] = {
1058
  0, 0, 0, 0, 0, 0, 0, 0, 
1059
  0, 0, 0, 0, 0, 0, 0, 0, 
1060
  0, 0, 0, 0, 0, 0, 0, 0, 
1061
  0, 0, 0, 0, 0, 0, 0, 10, 
1062
  0, 0, 0, 0, 0, 0, 0, 0, 
1063
  0, 0, 0, 0, 0, 0, 0, 0, 
1064
  0, 0, 0, 0, 0, 0, 0, 0, 
1065
  0, 0, 0, 0, 0, 0, 0, 0, 
1066
  0, 0, 0, 0, 0, 0, 0, 0, 
1067
  0, 0, 0, 0, 0, 0, 0, 0, 
1068
  0, 0, 0, 0, 0, 0, 0, 0, 
1069
  0, 0, 0, 0, 0, 0, 0, 0, 
1070
  0, 0, 0, 0, 0, 0, 0, 0, 
1071
  0, 0, 0, 0, 0, 0, 0, 0, 
1072
  0, 0, 0, 0, 0, 0, 0, 0, 
1073
  0, 0, 0, 0, 0, 0, 0, 0, 
1074
  0, 0, 0, 0, 0, 0, 0, 0, 
1075
  0, 0
1076
};
1077
1078
static const short _indic_syllable_machine_eof_trans[] = {
1079
  1, 1, 1, 1, 1, 1, 1, 10, 
1080
  10, 10, 10, 10, 10, 10, 10, 20, 
1081
  20, 27, 20, 27, 20, 20, 30, 30, 
1082
  30, 30, 30, 30, 30, 1, 40, 0, 
1083
  57, 57, 57, 57, 57, 57, 57, 57, 
1084
  57, 57, 57, 57, 57, 57, 57, 57, 
1085
  57, 57, 57, 57, 57, 77, 77, 77, 
1086
  77, 77, 77, 77, 77, 77, 77, 77, 
1087
  77, 77, 77, 77, 77, 77, 77, 77, 
1088
  77, 77, 77, 77, 77, 77, 77, 102, 
1089
  102, 102, 102, 102, 102, 102, 102, 102, 
1090
  102, 102, 102, 102, 27, 102, 102, 102, 
1091
  102, 102, 102, 102, 119, 119, 120, 120, 
1092
  120, 120, 120, 120, 120, 120, 120, 120, 
1093
  120, 120, 120, 120, 120, 120, 120, 120, 
1094
  120, 120, 120, 102, 57, 57, 57, 57, 
1095
  57, 57, 57, 57, 147, 147, 147, 147, 
1096
  147, 119
1097
};
1098
1099
static const int indic_syllable_machine_start = 31;
1100
static const int indic_syllable_machine_first_final = 31;
1101
static const int indic_syllable_machine_error = -1;
1102
1103
static const int indic_syllable_machine_en_main = 31;
1104
1105
1106
#line 58 "hb-ot-shaper-indic-machine.rl"
1107
1108
1109
1110
#line 121 "hb-ot-shaper-indic-machine.rl"
1111
1112
1113
#define found_syllable(syllable_type) \
1114
1.59M
  HB_STMT_START { \
1115
1.59M
    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
1116
3.42M
    for (unsigned int i = ts; i < te; i++) \
1117
1.82M
      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
1118
1.59M
    syllable_serial++; \
1119
1.59M
    if (syllable_serial == 16) syllable_serial = 1; \
1120
1.59M
  } HB_STMT_END
1121
1122
inline void
1123
find_syllables_indic (hb_buffer_t *buffer)
1124
3.22k
{
1125
3.22k
  unsigned int p, pe, eof, ts, te, act;
1126
3.22k
  int cs;
1127
3.22k
  hb_glyph_info_t *info = buffer->info;
1128
  
1129
3.22k
#line 1130 "hb-ot-shaper-indic-machine.hh"
1130
3.22k
  {
1131
3.22k
  cs = indic_syllable_machine_start;
1132
3.22k
  ts = 0;
1133
3.22k
  te = 0;
1134
3.22k
  act = 0;
1135
3.22k
  }
1136
1137
3.22k
#line 141 "hb-ot-shaper-indic-machine.rl"
1138
1139
1140
3.22k
  p = 0;
1141
3.22k
  pe = eof = buffer->len;
1142
1143
3.22k
  unsigned int syllable_serial = 1;
1144
  
1145
3.22k
#line 1146 "hb-ot-shaper-indic-machine.hh"
1146
3.22k
  {
1147
3.22k
  int _slen;
1148
3.22k
  int _trans;
1149
3.22k
  const unsigned char *_keys;
1150
3.22k
  const unsigned char *_inds;
1151
3.22k
  if ( p == pe )
1152
4
    goto _test_eof;
1153
10.7M
_resume:
1154
10.7M
  switch ( _indic_syllable_machine_from_state_actions[cs] ) {
1155
1.59M
  case 10:
1156
1.59M
#line 1 "NONE"
1157
1.59M
  {ts = p;}
1158
1.59M
  break;
1159
10.7M
#line 1160 "hb-ot-shaper-indic-machine.hh"
1160
10.7M
  }
1161
1162
10.7M
  _keys = _indic_syllable_machine_trans_keys + (cs<<1);
1163
10.7M
  _inds = _indic_syllable_machine_indicies + _indic_syllable_machine_index_offsets[cs];
1164
1165
10.7M
  _slen = _indic_syllable_machine_key_spans[cs];
1166
10.7M
  _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].indic_category()) &&
1167
10.7M
    ( info[p].indic_category()) <= _keys[1] ?
1168
9.26M
    ( info[p].indic_category()) - _keys[0] : _slen ];
1169
1170
10.7M
_eof_trans:
1171
10.7M
  cs = _indic_syllable_machine_trans_targs[_trans];
1172
1173
10.7M
  if ( _indic_syllable_machine_trans_actions[_trans] == 0 )
1174
8.78M
    goto _again;
1175
1176
1.99M
  switch ( _indic_syllable_machine_trans_actions[_trans] ) {
1177
236k
  case 2:
1178
236k
#line 1 "NONE"
1179
236k
  {te = p+1;}
1180
236k
  break;
1181
1.38M
  case 11:
1182
1.38M
#line 117 "hb-ot-shaper-indic-machine.rl"
1183
1.38M
  {te = p+1;{ found_syllable (indic_non_indic_cluster); }}
1184
1.38M
  break;
1185
33.4k
  case 14:
1186
33.4k
#line 111 "hb-ot-shaper-indic-machine.rl"
1187
33.4k
  {te = p;p--;{ found_syllable (indic_consonant_syllable); }}
1188
33.4k
  break;
1189
73.5k
  case 15:
1190
73.5k
#line 112 "hb-ot-shaper-indic-machine.rl"
1191
73.5k
  {te = p;p--;{ found_syllable (indic_vowel_syllable); }}
1192
73.5k
  break;
1193
31.4k
  case 18:
1194
31.4k
#line 113 "hb-ot-shaper-indic-machine.rl"
1195
31.4k
  {te = p;p--;{ found_syllable (indic_standalone_cluster); }}
1196
31.4k
  break;
1197
7.61k
  case 20:
1198
7.61k
#line 114 "hb-ot-shaper-indic-machine.rl"
1199
7.61k
  {te = p;p--;{ found_syllable (indic_symbol_cluster); }}
1200
7.61k
  break;
1201
32.8k
  case 16:
1202
32.8k
#line 116 "hb-ot-shaper-indic-machine.rl"
1203
32.8k
  {te = p;p--;{ found_syllable (indic_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
1204
32.8k
  break;
1205
3.94k
  case 17:
1206
3.94k
#line 117 "hb-ot-shaper-indic-machine.rl"
1207
3.94k
  {te = p;p--;{ found_syllable (indic_non_indic_cluster); }}
1208
3.94k
  break;
1209
44
  case 1:
1210
44
#line 111 "hb-ot-shaper-indic-machine.rl"
1211
44
  {{p = ((te))-1;}{ found_syllable (indic_consonant_syllable); }}
1212
44
  break;
1213
26
  case 3:
1214
26
#line 112 "hb-ot-shaper-indic-machine.rl"
1215
26
  {{p = ((te))-1;}{ found_syllable (indic_vowel_syllable); }}
1216
26
  break;
1217
47
  case 7:
1218
47
#line 113 "hb-ot-shaper-indic-machine.rl"
1219
47
  {{p = ((te))-1;}{ found_syllable (indic_standalone_cluster); }}
1220
47
  break;
1221
17
  case 8:
1222
17
#line 114 "hb-ot-shaper-indic-machine.rl"
1223
17
  {{p = ((te))-1;}{ found_syllable (indic_symbol_cluster); }}
1224
17
  break;
1225
36
  case 4:
1226
36
#line 116 "hb-ot-shaper-indic-machine.rl"
1227
36
  {{p = ((te))-1;}{ found_syllable (indic_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
1228
36
  break;
1229
23.7k
  case 6:
1230
23.7k
#line 1 "NONE"
1231
23.7k
  { switch( act ) {
1232
1
  case 1:
1233
1
  {{p = ((te))-1;} found_syllable (indic_consonant_syllable); }
1234
1
  break;
1235
26
  case 5:
1236
26
  {{p = ((te))-1;} found_syllable (indic_non_indic_cluster); }
1237
26
  break;
1238
865
  case 6:
1239
865
  {{p = ((te))-1;} found_syllable (indic_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }
1240
865
  break;
1241
22.8k
  case 7:
1242
22.8k
  {{p = ((te))-1;} found_syllable (indic_non_indic_cluster); }
1243
22.8k
  break;
1244
23.7k
  }
1245
23.7k
  }
1246
23.7k
  break;
1247
23.7k
  case 19:
1248
23
#line 1 "NONE"
1249
23
  {te = p+1;}
1250
23
#line 111 "hb-ot-shaper-indic-machine.rl"
1251
23
  {act = 1;}
1252
23
  break;
1253
1.36k
  case 13:
1254
1.36k
#line 1 "NONE"
1255
1.36k
  {te = p+1;}
1256
1.36k
#line 115 "hb-ot-shaper-indic-machine.rl"
1257
1.36k
  {act = 5;}
1258
1.36k
  break;
1259
140k
  case 5:
1260
140k
#line 1 "NONE"
1261
140k
  {te = p+1;}
1262
140k
#line 116 "hb-ot-shaper-indic-machine.rl"
1263
140k
  {act = 6;}
1264
140k
  break;
1265
23.3k
  case 12:
1266
23.3k
#line 1 "NONE"
1267
23.3k
  {te = p+1;}
1268
23.3k
#line 117 "hb-ot-shaper-indic-machine.rl"
1269
23.3k
  {act = 7;}
1270
23.3k
  break;
1271
1.99M
#line 1272 "hb-ot-shaper-indic-machine.hh"
1272
1.99M
  }
1273
1274
10.7M
_again:
1275
10.7M
  switch ( _indic_syllable_machine_to_state_actions[cs] ) {
1276
1.59M
  case 9:
1277
1.59M
#line 1 "NONE"
1278
1.59M
  {ts = 0;}
1279
1.59M
  break;
1280
10.7M
#line 1281 "hb-ot-shaper-indic-machine.hh"
1281
10.7M
  }
1282
1283
10.7M
  if ( ++p != pe )
1284
10.7M
    goto _resume;
1285
7.13k
  _test_eof: {}
1286
7.13k
  if ( p == eof )
1287
7.13k
  {
1288
7.13k
  if ( _indic_syllable_machine_eof_trans[cs] > 0 ) {
1289
3.90k
    _trans = _indic_syllable_machine_eof_trans[cs] - 1;
1290
3.90k
    goto _eof_trans;
1291
3.90k
  }
1292
7.13k
  }
1293
1294
7.13k
  }
1295
1296
7.13k
#line 149 "hb-ot-shaper-indic-machine.rl"
1297
1298
7.13k
}
1299
1300
#undef found_syllable
1301
1302
#endif /* HB_OT_SHAPER_INDIC_MACHINE_HH */