]> git.sesse.net Git - ffmpeg/blob - libavcodec/dirac_vlc.c
avformat/argo_brp: support MASK streams
[ffmpeg] / libavcodec / dirac_vlc.c
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18
19 #include "dirac_vlc.h"
20
21 enum {
22     /* Next byte contains an exactly aligned start to a new symbol (even bit) */
23     STATE_START  = 0,
24     /* Next byte should end the current value on an odd bit */
25     STATE_FOLLOW = 256,
26     /* Byte is completely data and doesn't end nor start a value */
27     STATE_DATA   = 512,
28     /* Byte has the current value's sign bit and starts a new value */
29     STATE_SIGN   = 768,
30 };
31
32 /* Exactly 128 bits */
33 typedef struct LUTState {
34     int16_t   val0;      /* Bits to which to add after applying preshift */
35     int16_t   val1;
36     int16_t   val2;
37     int16_t   val3;
38     int16_t   val4;
39     uint8_t   val0_bits; /* The size of val0 in bits */
40     int8_t    sign;      /* Sign of the current value (0 == zero the value) */
41     int8_t    num;       /* Number of values in this byte */
42     uint8_t   val;       /* Init value in case current value was terminated */
43     uint16_t  state;     /* Expected state for the next byte */
44 } LUTState;
45
46 const DECLARE_ALIGNED(32, LUTState, ff_dirac_golomb_lut)[1024] = {
47     { +16,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
48     { +17,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
49     {  +8,  0,  0,  0,  0, 4, +1, 1,  0,  STATE_START },
50     {  +8,  0,  0,  0,  0, 4, -1, 1,  0,  STATE_START },
51     { +18,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
52     { +19,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
53     {  +9,  0,  0,  0,  0, 4, +1, 1,  0,  STATE_START },
54     {  +9,  0,  0,  0,  0, 4, -1, 1,  0,  STATE_START },
55     {  +4,  0,  0,  0,  0, 3, +1, 1,  2, STATE_FOLLOW },
56     {  +4,  0,  0,  0,  0, 3, +1, 1,  3, STATE_FOLLOW },
57     {  +4,  0,  0,  0,  0, 3, +1, 2,  1,   STATE_DATA },
58     {  +4,  0,  0,  0,  0, 3, +1, 3,  0,  STATE_START },
59     {  +4,  0,  0,  0,  0, 3, -1, 1,  2, STATE_FOLLOW },
60     {  +4,  0,  0,  0,  0, 3, -1, 1,  3, STATE_FOLLOW },
61     {  +4,  0,  0,  0,  0, 3, -1, 2,  1,   STATE_DATA },
62     {  +4,  0,  0,  0,  0, 3, -1, 3,  0,  STATE_START },
63     { +20,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
64     { +21,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
65     { +10,  0,  0,  0,  0, 4, +1, 1,  0,  STATE_START },
66     { +10,  0,  0,  0,  0, 4, -1, 1,  0,  STATE_START },
67     { +22,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
68     { +23,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
69     { +11,  0,  0,  0,  0, 4, +1, 1,  0,  STATE_START },
70     { +11,  0,  0,  0,  0, 4, -1, 1,  0,  STATE_START },
71     {  +5,  0,  0,  0,  0, 3, +1, 1,  2, STATE_FOLLOW },
72     {  +5,  0,  0,  0,  0, 3, +1, 1,  3, STATE_FOLLOW },
73     {  +5,  0,  0,  0,  0, 3, +1, 2,  1,   STATE_DATA },
74     {  +5,  0,  0,  0,  0, 3, +1, 3,  0,  STATE_START },
75     {  +5,  0,  0,  0,  0, 3, -1, 1,  2, STATE_FOLLOW },
76     {  +5,  0,  0,  0,  0, 3, -1, 1,  3, STATE_FOLLOW },
77     {  +5,  0,  0,  0,  0, 3, -1, 2,  1,   STATE_DATA },
78     {  +5,  0,  0,  0,  0, 3, -1, 3,  0,  STATE_START },
79     {  +2,  0,  0,  0,  0, 2, +1, 1,  4, STATE_FOLLOW },
80     {  +2,  0,  0,  0,  0, 2, +1, 1,  5, STATE_FOLLOW },
81     {  +2, +1,  0,  0,  0, 2, +1, 2,  0,  STATE_START },
82     {  +2, -1,  0,  0,  0, 2, +1, 2,  0,  STATE_START },
83     {  +2,  0,  0,  0,  0, 2, +1, 1,  6, STATE_FOLLOW },
84     {  +2,  0,  0,  0,  0, 2, +1, 1,  7, STATE_FOLLOW },
85     {  +2, +2,  0,  0,  0, 2, +1, 2,  0,  STATE_START },
86     {  +2, -2,  0,  0,  0, 2, +1, 2,  0,  STATE_START },
87     {  +2,  0,  0,  0,  0, 2, +1, 2,  2,   STATE_DATA },
88     {  +2,  0,  0,  0,  0, 2, +1, 2,  2,   STATE_SIGN },
89     {  +2,  0,  0,  0,  0, 2, +1, 2,  3,   STATE_DATA },
90     {  +2,  0,  0,  0,  0, 2, +1, 2,  3,   STATE_SIGN },
91     {  +2,  0,  0,  0,  0, 2, +1, 3,  2, STATE_FOLLOW },
92     {  +2,  0,  0,  0,  0, 2, +1, 3,  3, STATE_FOLLOW },
93     {  +2,  0,  0,  0,  0, 2, +1, 4,  1,   STATE_DATA },
94     {  +2,  0,  0,  0,  0, 2, +1, 5,  0,  STATE_START },
95     {  +2,  0,  0,  0,  0, 2, -1, 1,  4, STATE_FOLLOW },
96     {  +2,  0,  0,  0,  0, 2, -1, 1,  5, STATE_FOLLOW },
97     {  +2, +1,  0,  0,  0, 2, -1, 2,  0,  STATE_START },
98     {  +2, -1,  0,  0,  0, 2, -1, 2,  0,  STATE_START },
99     {  +2,  0,  0,  0,  0, 2, -1, 1,  6, STATE_FOLLOW },
100     {  +2,  0,  0,  0,  0, 2, -1, 1,  7, STATE_FOLLOW },
101     {  +2, +2,  0,  0,  0, 2, -1, 2,  0,  STATE_START },
102     {  +2, -2,  0,  0,  0, 2, -1, 2,  0,  STATE_START },
103     {  +2,  0,  0,  0,  0, 2, -1, 2,  2,   STATE_DATA },
104     {  +2,  0,  0,  0,  0, 2, -1, 2,  2,   STATE_SIGN },
105     {  +2,  0,  0,  0,  0, 2, -1, 2,  3,   STATE_DATA },
106     {  +2,  0,  0,  0,  0, 2, -1, 2,  3,   STATE_SIGN },
107     {  +2,  0,  0,  0,  0, 2, -1, 3,  2, STATE_FOLLOW },
108     {  +2,  0,  0,  0,  0, 2, -1, 3,  3, STATE_FOLLOW },
109     {  +2,  0,  0,  0,  0, 2, -1, 4,  1,   STATE_DATA },
110     {  +2,  0,  0,  0,  0, 2, -1, 5,  0,  STATE_START },
111     { +24,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
112     { +25,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
113     { +12,  0,  0,  0,  0, 4, +1, 1,  0,  STATE_START },
114     { +12,  0,  0,  0,  0, 4, -1, 1,  0,  STATE_START },
115     { +26,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
116     { +27,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
117     { +13,  0,  0,  0,  0, 4, +1, 1,  0,  STATE_START },
118     { +13,  0,  0,  0,  0, 4, -1, 1,  0,  STATE_START },
119     {  +6,  0,  0,  0,  0, 3, +1, 1,  2, STATE_FOLLOW },
120     {  +6,  0,  0,  0,  0, 3, +1, 1,  3, STATE_FOLLOW },
121     {  +6,  0,  0,  0,  0, 3, +1, 2,  1,   STATE_DATA },
122     {  +6,  0,  0,  0,  0, 3, +1, 3,  0,  STATE_START },
123     {  +6,  0,  0,  0,  0, 3, -1, 1,  2, STATE_FOLLOW },
124     {  +6,  0,  0,  0,  0, 3, -1, 1,  3, STATE_FOLLOW },
125     {  +6,  0,  0,  0,  0, 3, -1, 2,  1,   STATE_DATA },
126     {  +6,  0,  0,  0,  0, 3, -1, 3,  0,  STATE_START },
127     { +28,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
128     { +29,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
129     { +14,  0,  0,  0,  0, 4, +1, 1,  0,  STATE_START },
130     { +14,  0,  0,  0,  0, 4, -1, 1,  0,  STATE_START },
131     { +30,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
132     { +31,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
133     { +15,  0,  0,  0,  0, 4, +1, 1,  0,  STATE_START },
134     { +15,  0,  0,  0,  0, 4, -1, 1,  0,  STATE_START },
135     {  +7,  0,  0,  0,  0, 3, +1, 1,  2, STATE_FOLLOW },
136     {  +7,  0,  0,  0,  0, 3, +1, 1,  3, STATE_FOLLOW },
137     {  +7,  0,  0,  0,  0, 3, +1, 2,  1,   STATE_DATA },
138     {  +7,  0,  0,  0,  0, 3, +1, 3,  0,  STATE_START },
139     {  +7,  0,  0,  0,  0, 3, -1, 1,  2, STATE_FOLLOW },
140     {  +7,  0,  0,  0,  0, 3, -1, 1,  3, STATE_FOLLOW },
141     {  +7,  0,  0,  0,  0, 3, -1, 2,  1,   STATE_DATA },
142     {  +7,  0,  0,  0,  0, 3, -1, 3,  0,  STATE_START },
143     {  +3,  0,  0,  0,  0, 2, +1, 1,  4, STATE_FOLLOW },
144     {  +3,  0,  0,  0,  0, 2, +1, 1,  5, STATE_FOLLOW },
145     {  +3, +1,  0,  0,  0, 2, +1, 2,  0,  STATE_START },
146     {  +3, -1,  0,  0,  0, 2, +1, 2,  0,  STATE_START },
147     {  +3,  0,  0,  0,  0, 2, +1, 1,  6, STATE_FOLLOW },
148     {  +3,  0,  0,  0,  0, 2, +1, 1,  7, STATE_FOLLOW },
149     {  +3, +2,  0,  0,  0, 2, +1, 2,  0,  STATE_START },
150     {  +3, -2,  0,  0,  0, 2, +1, 2,  0,  STATE_START },
151     {  +3,  0,  0,  0,  0, 2, +1, 2,  2,   STATE_DATA },
152     {  +3,  0,  0,  0,  0, 2, +1, 2,  2,   STATE_SIGN },
153     {  +3,  0,  0,  0,  0, 2, +1, 2,  3,   STATE_DATA },
154     {  +3,  0,  0,  0,  0, 2, +1, 2,  3,   STATE_SIGN },
155     {  +3,  0,  0,  0,  0, 2, +1, 3,  2, STATE_FOLLOW },
156     {  +3,  0,  0,  0,  0, 2, +1, 3,  3, STATE_FOLLOW },
157     {  +3,  0,  0,  0,  0, 2, +1, 4,  1,   STATE_DATA },
158     {  +3,  0,  0,  0,  0, 2, +1, 5,  0,  STATE_START },
159     {  +3,  0,  0,  0,  0, 2, -1, 1,  4, STATE_FOLLOW },
160     {  +3,  0,  0,  0,  0, 2, -1, 1,  5, STATE_FOLLOW },
161     {  +3, +1,  0,  0,  0, 2, -1, 2,  0,  STATE_START },
162     {  +3, -1,  0,  0,  0, 2, -1, 2,  0,  STATE_START },
163     {  +3,  0,  0,  0,  0, 2, -1, 1,  6, STATE_FOLLOW },
164     {  +3,  0,  0,  0,  0, 2, -1, 1,  7, STATE_FOLLOW },
165     {  +3, +2,  0,  0,  0, 2, -1, 2,  0,  STATE_START },
166     {  +3, -2,  0,  0,  0, 2, -1, 2,  0,  STATE_START },
167     {  +3,  0,  0,  0,  0, 2, -1, 2,  2,   STATE_DATA },
168     {  +3,  0,  0,  0,  0, 2, -1, 2,  2,   STATE_SIGN },
169     {  +3,  0,  0,  0,  0, 2, -1, 2,  3,   STATE_DATA },
170     {  +3,  0,  0,  0,  0, 2, -1, 2,  3,   STATE_SIGN },
171     {  +3,  0,  0,  0,  0, 2, -1, 3,  2, STATE_FOLLOW },
172     {  +3,  0,  0,  0,  0, 2, -1, 3,  3, STATE_FOLLOW },
173     {  +3,  0,  0,  0,  0, 2, -1, 4,  1,   STATE_DATA },
174     {  +3,  0,  0,  0,  0, 2, -1, 5,  0,  STATE_START },
175     {   0,  0,  0,  0,  0, 0,  0, 1,  8,   STATE_DATA },
176     {   0,  0,  0,  0,  0, 0,  0, 1,  8,   STATE_SIGN },
177     {   0,  0,  0,  0,  0, 0,  0, 1,  9,   STATE_DATA },
178     {   0,  0,  0,  0,  0, 0,  0, 1,  9,   STATE_SIGN },
179     {   0, +3,  0,  0,  0, 0,  0, 2,  1,   STATE_DATA },
180     {   0, +3,  0,  0,  0, 0,  0, 3,  0,  STATE_START },
181     {   0, -3,  0,  0,  0, 0,  0, 2,  1,   STATE_DATA },
182     {   0, -3,  0,  0,  0, 0,  0, 3,  0,  STATE_START },
183     {   0,  0,  0,  0,  0, 0,  0, 1, 10,   STATE_DATA },
184     {   0,  0,  0,  0,  0, 0,  0, 1, 10,   STATE_SIGN },
185     {   0,  0,  0,  0,  0, 0,  0, 1, 11,   STATE_DATA },
186     {   0,  0,  0,  0,  0, 0,  0, 1, 11,   STATE_SIGN },
187     {   0, +4,  0,  0,  0, 0,  0, 2,  1,   STATE_DATA },
188     {   0, +4,  0,  0,  0, 0,  0, 3,  0,  STATE_START },
189     {   0, -4,  0,  0,  0, 0,  0, 2,  1,   STATE_DATA },
190     {   0, -4,  0,  0,  0, 0,  0, 3,  0,  STATE_START },
191     {   0, +1,  0,  0,  0, 0,  0, 2,  2,   STATE_DATA },
192     {   0, +1,  0,  0,  0, 0,  0, 2,  2,   STATE_SIGN },
193     {   0, +1,  0,  0,  0, 0,  0, 2,  3,   STATE_DATA },
194     {   0, +1,  0,  0,  0, 0,  0, 2,  3,   STATE_SIGN },
195     {   0, +1,  0,  0,  0, 0,  0, 3,  2, STATE_FOLLOW },
196     {   0, +1,  0,  0,  0, 0,  0, 3,  3, STATE_FOLLOW },
197     {   0, +1,  0,  0,  0, 0,  0, 4,  1,   STATE_DATA },
198     {   0, +1,  0,  0,  0, 0,  0, 5,  0,  STATE_START },
199     {   0, -1,  0,  0,  0, 0,  0, 2,  2,   STATE_DATA },
200     {   0, -1,  0,  0,  0, 0,  0, 2,  2,   STATE_SIGN },
201     {   0, -1,  0,  0,  0, 0,  0, 2,  3,   STATE_DATA },
202     {   0, -1,  0,  0,  0, 0,  0, 2,  3,   STATE_SIGN },
203     {   0, -1,  0,  0,  0, 0,  0, 3,  2, STATE_FOLLOW },
204     {   0, -1,  0,  0,  0, 0,  0, 3,  3, STATE_FOLLOW },
205     {   0, -1,  0,  0,  0, 0,  0, 4,  1,   STATE_DATA },
206     {   0, -1,  0,  0,  0, 0,  0, 5,  0,  STATE_START },
207     {   0,  0,  0,  0,  0, 0,  0, 1, 12,   STATE_DATA },
208     {   0,  0,  0,  0,  0, 0,  0, 1, 12,   STATE_SIGN },
209     {   0,  0,  0,  0,  0, 0,  0, 1, 13,   STATE_DATA },
210     {   0,  0,  0,  0,  0, 0,  0, 1, 13,   STATE_SIGN },
211     {   0, +5,  0,  0,  0, 0,  0, 2,  1,   STATE_DATA },
212     {   0, +5,  0,  0,  0, 0,  0, 3,  0,  STATE_START },
213     {   0, -5,  0,  0,  0, 0,  0, 2,  1,   STATE_DATA },
214     {   0, -5,  0,  0,  0, 0,  0, 3,  0,  STATE_START },
215     {   0,  0,  0,  0,  0, 0,  0, 1, 14,   STATE_DATA },
216     {   0,  0,  0,  0,  0, 0,  0, 1, 14,   STATE_SIGN },
217     {   0,  0,  0,  0,  0, 0,  0, 1, 15,   STATE_DATA },
218     {   0,  0,  0,  0,  0, 0,  0, 1, 15,   STATE_SIGN },
219     {   0, +6,  0,  0,  0, 0,  0, 2,  1,   STATE_DATA },
220     {   0, +6,  0,  0,  0, 0,  0, 3,  0,  STATE_START },
221     {   0, -6,  0,  0,  0, 0,  0, 2,  1,   STATE_DATA },
222     {   0, -6,  0,  0,  0, 0,  0, 3,  0,  STATE_START },
223     {   0, +2,  0,  0,  0, 0,  0, 2,  2,   STATE_DATA },
224     {   0, +2,  0,  0,  0, 0,  0, 2,  2,   STATE_SIGN },
225     {   0, +2,  0,  0,  0, 0,  0, 2,  3,   STATE_DATA },
226     {   0, +2,  0,  0,  0, 0,  0, 2,  3,   STATE_SIGN },
227     {   0, +2,  0,  0,  0, 0,  0, 3,  2, STATE_FOLLOW },
228     {   0, +2,  0,  0,  0, 0,  0, 3,  3, STATE_FOLLOW },
229     {   0, +2,  0,  0,  0, 0,  0, 4,  1,   STATE_DATA },
230     {   0, +2,  0,  0,  0, 0,  0, 5,  0,  STATE_START },
231     {   0, -2,  0,  0,  0, 0,  0, 2,  2,   STATE_DATA },
232     {   0, -2,  0,  0,  0, 0,  0, 2,  2,   STATE_SIGN },
233     {   0, -2,  0,  0,  0, 0,  0, 2,  3,   STATE_DATA },
234     {   0, -2,  0,  0,  0, 0,  0, 2,  3,   STATE_SIGN },
235     {   0, -2,  0,  0,  0, 0,  0, 3,  2, STATE_FOLLOW },
236     {   0, -2,  0,  0,  0, 0,  0, 3,  3, STATE_FOLLOW },
237     {   0, -2,  0,  0,  0, 0,  0, 4,  1,   STATE_DATA },
238     {   0, -2,  0,  0,  0, 0,  0, 5,  0,  STATE_START },
239     {   0,  0,  0,  0,  0, 0,  0, 2,  8, STATE_FOLLOW },
240     {   0,  0,  0,  0,  0, 0,  0, 2,  9, STATE_FOLLOW },
241     {   0,  0, +3,  0,  0, 0,  0, 3,  0,  STATE_START },
242     {   0,  0, -3,  0,  0, 0,  0, 3,  0,  STATE_START },
243     {   0,  0,  0,  0,  0, 0,  0, 2, 10, STATE_FOLLOW },
244     {   0,  0,  0,  0,  0, 0,  0, 2, 11, STATE_FOLLOW },
245     {   0,  0, +4,  0,  0, 0,  0, 3,  0,  STATE_START },
246     {   0,  0, -4,  0,  0, 0,  0, 3,  0,  STATE_START },
247     {   0,  0, +1,  0,  0, 0,  0, 3,  2, STATE_FOLLOW },
248     {   0,  0, +1,  0,  0, 0,  0, 3,  3, STATE_FOLLOW },
249     {   0,  0, +1,  0,  0, 0,  0, 4,  1,   STATE_DATA },
250     {   0,  0, +1,  0,  0, 0,  0, 5,  0,  STATE_START },
251     {   0,  0, -1,  0,  0, 0,  0, 3,  2, STATE_FOLLOW },
252     {   0,  0, -1,  0,  0, 0,  0, 3,  3, STATE_FOLLOW },
253     {   0,  0, -1,  0,  0, 0,  0, 4,  1,   STATE_DATA },
254     {   0,  0, -1,  0,  0, 0,  0, 5,  0,  STATE_START },
255     {   0,  0,  0,  0,  0, 0,  0, 2, 12, STATE_FOLLOW },
256     {   0,  0,  0,  0,  0, 0,  0, 2, 13, STATE_FOLLOW },
257     {   0,  0, +5,  0,  0, 0,  0, 3,  0,  STATE_START },
258     {   0,  0, -5,  0,  0, 0,  0, 3,  0,  STATE_START },
259     {   0,  0,  0,  0,  0, 0,  0, 2, 14, STATE_FOLLOW },
260     {   0,  0,  0,  0,  0, 0,  0, 2, 15, STATE_FOLLOW },
261     {   0,  0, +6,  0,  0, 0,  0, 3,  0,  STATE_START },
262     {   0,  0, -6,  0,  0, 0,  0, 3,  0,  STATE_START },
263     {   0,  0, +2,  0,  0, 0,  0, 3,  2, STATE_FOLLOW },
264     {   0,  0, +2,  0,  0, 0,  0, 3,  3, STATE_FOLLOW },
265     {   0,  0, +2,  0,  0, 0,  0, 4,  1,   STATE_DATA },
266     {   0,  0, +2,  0,  0, 0,  0, 5,  0,  STATE_START },
267     {   0,  0, -2,  0,  0, 0,  0, 3,  2, STATE_FOLLOW },
268     {   0,  0, -2,  0,  0, 0,  0, 3,  3, STATE_FOLLOW },
269     {   0,  0, -2,  0,  0, 0,  0, 4,  1,   STATE_DATA },
270     {   0,  0, -2,  0,  0, 0,  0, 5,  0,  STATE_START },
271     {   0,  0,  0,  0,  0, 0,  0, 3,  4,   STATE_DATA },
272     {   0,  0,  0,  0,  0, 0,  0, 3,  4,   STATE_SIGN },
273     {   0,  0,  0,  0,  0, 0,  0, 3,  5,   STATE_DATA },
274     {   0,  0,  0,  0,  0, 0,  0, 3,  5,   STATE_SIGN },
275     {   0,  0,  0, +1,  0, 0,  0, 4,  1,   STATE_DATA },
276     {   0,  0,  0, +1,  0, 0,  0, 5,  0,  STATE_START },
277     {   0,  0,  0, -1,  0, 0,  0, 4,  1,   STATE_DATA },
278     {   0,  0,  0, -1,  0, 0,  0, 5,  0,  STATE_START },
279     {   0,  0,  0,  0,  0, 0,  0, 3,  6,   STATE_DATA },
280     {   0,  0,  0,  0,  0, 0,  0, 3,  6,   STATE_SIGN },
281     {   0,  0,  0,  0,  0, 0,  0, 3,  7,   STATE_DATA },
282     {   0,  0,  0,  0,  0, 0,  0, 3,  7,   STATE_SIGN },
283     {   0,  0,  0, +2,  0, 0,  0, 4,  1,   STATE_DATA },
284     {   0,  0,  0, +2,  0, 0,  0, 5,  0,  STATE_START },
285     {   0,  0,  0, -2,  0, 0,  0, 4,  1,   STATE_DATA },
286     {   0,  0,  0, -2,  0, 0,  0, 5,  0,  STATE_START },
287     {   0,  0,  0,  0,  0, 0,  0, 4,  4, STATE_FOLLOW },
288     {   0,  0,  0,  0,  0, 0,  0, 4,  5, STATE_FOLLOW },
289     {   0,  0,  0,  0, +1, 0,  0, 5,  0,  STATE_START },
290     {   0,  0,  0,  0, -1, 0,  0, 5,  0,  STATE_START },
291     {   0,  0,  0,  0,  0, 0,  0, 4,  6, STATE_FOLLOW },
292     {   0,  0,  0,  0,  0, 0,  0, 4,  7, STATE_FOLLOW },
293     {   0,  0,  0,  0, +2, 0,  0, 5,  0,  STATE_START },
294     {   0,  0,  0,  0, -2, 0,  0, 5,  0,  STATE_START },
295     {   0,  0,  0,  0,  0, 0,  0, 5,  2,   STATE_DATA },
296     {   0,  0,  0,  0,  0, 0,  0, 5,  2,   STATE_SIGN },
297     {   0,  0,  0,  0,  0, 0,  0, 5,  3,   STATE_DATA },
298     {   0,  0,  0,  0,  0, 0,  0, 5,  3,   STATE_SIGN },
299     {   0,  0,  0,  0,  0, 0,  0, 6,  2, STATE_FOLLOW },
300     {   0,  0,  0,  0,  0, 0,  0, 6,  3, STATE_FOLLOW },
301     {   0,  0,  0,  0,  0, 0,  0, 7,  1,   STATE_DATA },
302     {   0,  0,  0,  0,  0, 0,  0, 8,  0,  STATE_START },
303     {   0,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
304     {  +1,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
305     {   0,  0,  0,  0,  0, 3, +1, 1,  0,  STATE_START },
306     {   0,  0,  0,  0,  0, 3, -1, 1,  0,  STATE_START },
307     {  +2,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
308     {  +3,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
309     {  +1,  0,  0,  0,  0, 3, +1, 1,  0,  STATE_START },
310     {  +1,  0,  0,  0,  0, 3, -1, 1,  0,  STATE_START },
311     {   0,  0,  0,  0,  0, 2, +1, 1,  2, STATE_FOLLOW },
312     {   0,  0,  0,  0,  0, 2, +1, 1,  3, STATE_FOLLOW },
313     {   0,  0,  0,  0,  0, 2, +1, 2,  1,   STATE_DATA },
314     {   0,  0,  0,  0,  0, 2, +1, 3,  0,  STATE_START },
315     {   0,  0,  0,  0,  0, 2, -1, 1,  2, STATE_FOLLOW },
316     {   0,  0,  0,  0,  0, 2, -1, 1,  3, STATE_FOLLOW },
317     {   0,  0,  0,  0,  0, 2, -1, 2,  1,   STATE_DATA },
318     {   0,  0,  0,  0,  0, 2, -1, 3,  0,  STATE_START },
319     {  +4,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
320     {  +5,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
321     {  +2,  0,  0,  0,  0, 3, +1, 1,  0,  STATE_START },
322     {  +2,  0,  0,  0,  0, 3, -1, 1,  0,  STATE_START },
323     {  +6,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
324     {  +7,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
325     {  +3,  0,  0,  0,  0, 3, +1, 1,  0,  STATE_START },
326     {  +3,  0,  0,  0,  0, 3, -1, 1,  0,  STATE_START },
327     {  +1,  0,  0,  0,  0, 2, +1, 1,  2, STATE_FOLLOW },
328     {  +1,  0,  0,  0,  0, 2, +1, 1,  3, STATE_FOLLOW },
329     {  +1,  0,  0,  0,  0, 2, +1, 2,  1,   STATE_DATA },
330     {  +1,  0,  0,  0,  0, 2, +1, 3,  0,  STATE_START },
331     {  +1,  0,  0,  0,  0, 2, -1, 1,  2, STATE_FOLLOW },
332     {  +1,  0,  0,  0,  0, 2, -1, 1,  3, STATE_FOLLOW },
333     {  +1,  0,  0,  0,  0, 2, -1, 2,  1,   STATE_DATA },
334     {  +1,  0,  0,  0,  0, 2, -1, 3,  0,  STATE_START },
335     {   0,  0,  0,  0,  0, 1, +1, 1,  4, STATE_FOLLOW },
336     {   0,  0,  0,  0,  0, 1, +1, 1,  5, STATE_FOLLOW },
337     {   0, +1,  0,  0,  0, 1, +1, 2,  0,  STATE_START },
338     {   0, -1,  0,  0,  0, 1, +1, 2,  0,  STATE_START },
339     {   0,  0,  0,  0,  0, 1, +1, 1,  6, STATE_FOLLOW },
340     {   0,  0,  0,  0,  0, 1, +1, 1,  7, STATE_FOLLOW },
341     {   0, +2,  0,  0,  0, 1, +1, 2,  0,  STATE_START },
342     {   0, -2,  0,  0,  0, 1, +1, 2,  0,  STATE_START },
343     {   0,  0,  0,  0,  0, 1, +1, 2,  2,   STATE_DATA },
344     {   0,  0,  0,  0,  0, 1, +1, 2,  2,   STATE_SIGN },
345     {   0,  0,  0,  0,  0, 1, +1, 2,  3,   STATE_DATA },
346     {   0,  0,  0,  0,  0, 1, +1, 2,  3,   STATE_SIGN },
347     {   0,  0,  0,  0,  0, 1, +1, 3,  2, STATE_FOLLOW },
348     {   0,  0,  0,  0,  0, 1, +1, 3,  3, STATE_FOLLOW },
349     {   0,  0,  0,  0,  0, 1, +1, 4,  1,   STATE_DATA },
350     {   0,  0,  0,  0,  0, 1, +1, 5,  0,  STATE_START },
351     {   0,  0,  0,  0,  0, 1, -1, 1,  4, STATE_FOLLOW },
352     {   0,  0,  0,  0,  0, 1, -1, 1,  5, STATE_FOLLOW },
353     {   0, +1,  0,  0,  0, 1, -1, 2,  0,  STATE_START },
354     {   0, -1,  0,  0,  0, 1, -1, 2,  0,  STATE_START },
355     {   0,  0,  0,  0,  0, 1, -1, 1,  6, STATE_FOLLOW },
356     {   0,  0,  0,  0,  0, 1, -1, 1,  7, STATE_FOLLOW },
357     {   0, +2,  0,  0,  0, 1, -1, 2,  0,  STATE_START },
358     {   0, -2,  0,  0,  0, 1, -1, 2,  0,  STATE_START },
359     {   0,  0,  0,  0,  0, 1, -1, 2,  2,   STATE_DATA },
360     {   0,  0,  0,  0,  0, 1, -1, 2,  2,   STATE_SIGN },
361     {   0,  0,  0,  0,  0, 1, -1, 2,  3,   STATE_DATA },
362     {   0,  0,  0,  0,  0, 1, -1, 2,  3,   STATE_SIGN },
363     {   0,  0,  0,  0,  0, 1, -1, 3,  2, STATE_FOLLOW },
364     {   0,  0,  0,  0,  0, 1, -1, 3,  3, STATE_FOLLOW },
365     {   0,  0,  0,  0,  0, 1, -1, 4,  1,   STATE_DATA },
366     {   0,  0,  0,  0,  0, 1, -1, 5,  0,  STATE_START },
367     {  +8,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
368     {  +9,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
369     {  +4,  0,  0,  0,  0, 3, +1, 1,  0,  STATE_START },
370     {  +4,  0,  0,  0,  0, 3, -1, 1,  0,  STATE_START },
371     { +10,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
372     { +11,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
373     {  +5,  0,  0,  0,  0, 3, +1, 1,  0,  STATE_START },
374     {  +5,  0,  0,  0,  0, 3, -1, 1,  0,  STATE_START },
375     {  +2,  0,  0,  0,  0, 2, +1, 1,  2, STATE_FOLLOW },
376     {  +2,  0,  0,  0,  0, 2, +1, 1,  3, STATE_FOLLOW },
377     {  +2,  0,  0,  0,  0, 2, +1, 2,  1,   STATE_DATA },
378     {  +2,  0,  0,  0,  0, 2, +1, 3,  0,  STATE_START },
379     {  +2,  0,  0,  0,  0, 2, -1, 1,  2, STATE_FOLLOW },
380     {  +2,  0,  0,  0,  0, 2, -1, 1,  3, STATE_FOLLOW },
381     {  +2,  0,  0,  0,  0, 2, -1, 2,  1,   STATE_DATA },
382     {  +2,  0,  0,  0,  0, 2, -1, 3,  0,  STATE_START },
383     { +12,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
384     { +13,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
385     {  +6,  0,  0,  0,  0, 3, +1, 1,  0,  STATE_START },
386     {  +6,  0,  0,  0,  0, 3, -1, 1,  0,  STATE_START },
387     { +14,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
388     { +15,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
389     {  +7,  0,  0,  0,  0, 3, +1, 1,  0,  STATE_START },
390     {  +7,  0,  0,  0,  0, 3, -1, 1,  0,  STATE_START },
391     {  +3,  0,  0,  0,  0, 2, +1, 1,  2, STATE_FOLLOW },
392     {  +3,  0,  0,  0,  0, 2, +1, 1,  3, STATE_FOLLOW },
393     {  +3,  0,  0,  0,  0, 2, +1, 2,  1,   STATE_DATA },
394     {  +3,  0,  0,  0,  0, 2, +1, 3,  0,  STATE_START },
395     {  +3,  0,  0,  0,  0, 2, -1, 1,  2, STATE_FOLLOW },
396     {  +3,  0,  0,  0,  0, 2, -1, 1,  3, STATE_FOLLOW },
397     {  +3,  0,  0,  0,  0, 2, -1, 2,  1,   STATE_DATA },
398     {  +3,  0,  0,  0,  0, 2, -1, 3,  0,  STATE_START },
399     {  +1,  0,  0,  0,  0, 1, +1, 1,  4, STATE_FOLLOW },
400     {  +1,  0,  0,  0,  0, 1, +1, 1,  5, STATE_FOLLOW },
401     {  +1, +1,  0,  0,  0, 1, +1, 2,  0,  STATE_START },
402     {  +1, -1,  0,  0,  0, 1, +1, 2,  0,  STATE_START },
403     {  +1,  0,  0,  0,  0, 1, +1, 1,  6, STATE_FOLLOW },
404     {  +1,  0,  0,  0,  0, 1, +1, 1,  7, STATE_FOLLOW },
405     {  +1, +2,  0,  0,  0, 1, +1, 2,  0,  STATE_START },
406     {  +1, -2,  0,  0,  0, 1, +1, 2,  0,  STATE_START },
407     {  +1,  0,  0,  0,  0, 1, +1, 2,  2,   STATE_DATA },
408     {  +1,  0,  0,  0,  0, 1, +1, 2,  2,   STATE_SIGN },
409     {  +1,  0,  0,  0,  0, 1, +1, 2,  3,   STATE_DATA },
410     {  +1,  0,  0,  0,  0, 1, +1, 2,  3,   STATE_SIGN },
411     {  +1,  0,  0,  0,  0, 1, +1, 3,  2, STATE_FOLLOW },
412     {  +1,  0,  0,  0,  0, 1, +1, 3,  3, STATE_FOLLOW },
413     {  +1,  0,  0,  0,  0, 1, +1, 4,  1,   STATE_DATA },
414     {  +1,  0,  0,  0,  0, 1, +1, 5,  0,  STATE_START },
415     {  +1,  0,  0,  0,  0, 1, -1, 1,  4, STATE_FOLLOW },
416     {  +1,  0,  0,  0,  0, 1, -1, 1,  5, STATE_FOLLOW },
417     {  +1, +1,  0,  0,  0, 1, -1, 2,  0,  STATE_START },
418     {  +1, -1,  0,  0,  0, 1, -1, 2,  0,  STATE_START },
419     {  +1,  0,  0,  0,  0, 1, -1, 1,  6, STATE_FOLLOW },
420     {  +1,  0,  0,  0,  0, 1, -1, 1,  7, STATE_FOLLOW },
421     {  +1, +2,  0,  0,  0, 1, -1, 2,  0,  STATE_START },
422     {  +1, -2,  0,  0,  0, 1, -1, 2,  0,  STATE_START },
423     {  +1,  0,  0,  0,  0, 1, -1, 2,  2,   STATE_DATA },
424     {  +1,  0,  0,  0,  0, 1, -1, 2,  2,   STATE_SIGN },
425     {  +1,  0,  0,  0,  0, 1, -1, 2,  3,   STATE_DATA },
426     {  +1,  0,  0,  0,  0, 1, -1, 2,  3,   STATE_SIGN },
427     {  +1,  0,  0,  0,  0, 1, -1, 3,  2, STATE_FOLLOW },
428     {  +1,  0,  0,  0,  0, 1, -1, 3,  3, STATE_FOLLOW },
429     {  +1,  0,  0,  0,  0, 1, -1, 4,  1,   STATE_DATA },
430     {  +1,  0,  0,  0,  0, 1, -1, 5,  0,  STATE_START },
431     {   0,  0,  0,  0,  0, 0, +1, 1,  8, STATE_FOLLOW },
432     {   0,  0,  0,  0,  0, 0, +1, 1,  9, STATE_FOLLOW },
433     {   0, +3,  0,  0,  0, 0, +1, 2,  0,  STATE_START },
434     {   0, -3,  0,  0,  0, 0, +1, 2,  0,  STATE_START },
435     {   0,  0,  0,  0,  0, 0, +1, 1, 10, STATE_FOLLOW },
436     {   0,  0,  0,  0,  0, 0, +1, 1, 11, STATE_FOLLOW },
437     {   0, +4,  0,  0,  0, 0, +1, 2,  0,  STATE_START },
438     {   0, -4,  0,  0,  0, 0, +1, 2,  0,  STATE_START },
439     {   0, +1,  0,  0,  0, 0, +1, 2,  2, STATE_FOLLOW },
440     {   0, +1,  0,  0,  0, 0, +1, 2,  3, STATE_FOLLOW },
441     {   0, +1,  0,  0,  0, 0, +1, 3,  1,   STATE_DATA },
442     {   0, +1,  0,  0,  0, 0, +1, 4,  0,  STATE_START },
443     {   0, -1,  0,  0,  0, 0, +1, 2,  2, STATE_FOLLOW },
444     {   0, -1,  0,  0,  0, 0, +1, 2,  3, STATE_FOLLOW },
445     {   0, -1,  0,  0,  0, 0, +1, 3,  1,   STATE_DATA },
446     {   0, -1,  0,  0,  0, 0, +1, 4,  0,  STATE_START },
447     {   0,  0,  0,  0,  0, 0, +1, 1, 12, STATE_FOLLOW },
448     {   0,  0,  0,  0,  0, 0, +1, 1, 13, STATE_FOLLOW },
449     {   0, +5,  0,  0,  0, 0, +1, 2,  0,  STATE_START },
450     {   0, -5,  0,  0,  0, 0, +1, 2,  0,  STATE_START },
451     {   0,  0,  0,  0,  0, 0, +1, 1, 14, STATE_FOLLOW },
452     {   0,  0,  0,  0,  0, 0, +1, 1, 15, STATE_FOLLOW },
453     {   0, +6,  0,  0,  0, 0, +1, 2,  0,  STATE_START },
454     {   0, -6,  0,  0,  0, 0, +1, 2,  0,  STATE_START },
455     {   0, +2,  0,  0,  0, 0, +1, 2,  2, STATE_FOLLOW },
456     {   0, +2,  0,  0,  0, 0, +1, 2,  3, STATE_FOLLOW },
457     {   0, +2,  0,  0,  0, 0, +1, 3,  1,   STATE_DATA },
458     {   0, +2,  0,  0,  0, 0, +1, 4,  0,  STATE_START },
459     {   0, -2,  0,  0,  0, 0, +1, 2,  2, STATE_FOLLOW },
460     {   0, -2,  0,  0,  0, 0, +1, 2,  3, STATE_FOLLOW },
461     {   0, -2,  0,  0,  0, 0, +1, 3,  1,   STATE_DATA },
462     {   0, -2,  0,  0,  0, 0, +1, 4,  0,  STATE_START },
463     {   0,  0,  0,  0,  0, 0, +1, 2,  4,   STATE_DATA },
464     {   0,  0,  0,  0,  0, 0, +1, 2,  4,   STATE_SIGN },
465     {   0,  0,  0,  0,  0, 0, +1, 2,  5,   STATE_DATA },
466     {   0,  0,  0,  0,  0, 0, +1, 2,  5,   STATE_SIGN },
467     {   0,  0, +1,  0,  0, 0, +1, 3,  1,   STATE_DATA },
468     {   0,  0, +1,  0,  0, 0, +1, 4,  0,  STATE_START },
469     {   0,  0, -1,  0,  0, 0, +1, 3,  1,   STATE_DATA },
470     {   0,  0, -1,  0,  0, 0, +1, 4,  0,  STATE_START },
471     {   0,  0,  0,  0,  0, 0, +1, 2,  6,   STATE_DATA },
472     {   0,  0,  0,  0,  0, 0, +1, 2,  6,   STATE_SIGN },
473     {   0,  0,  0,  0,  0, 0, +1, 2,  7,   STATE_DATA },
474     {   0,  0,  0,  0,  0, 0, +1, 2,  7,   STATE_SIGN },
475     {   0,  0, +2,  0,  0, 0, +1, 3,  1,   STATE_DATA },
476     {   0,  0, +2,  0,  0, 0, +1, 4,  0,  STATE_START },
477     {   0,  0, -2,  0,  0, 0, +1, 3,  1,   STATE_DATA },
478     {   0,  0, -2,  0,  0, 0, +1, 4,  0,  STATE_START },
479     {   0,  0,  0,  0,  0, 0, +1, 3,  4, STATE_FOLLOW },
480     {   0,  0,  0,  0,  0, 0, +1, 3,  5, STATE_FOLLOW },
481     {   0,  0,  0, +1,  0, 0, +1, 4,  0,  STATE_START },
482     {   0,  0,  0, -1,  0, 0, +1, 4,  0,  STATE_START },
483     {   0,  0,  0,  0,  0, 0, +1, 3,  6, STATE_FOLLOW },
484     {   0,  0,  0,  0,  0, 0, +1, 3,  7, STATE_FOLLOW },
485     {   0,  0,  0, +2,  0, 0, +1, 4,  0,  STATE_START },
486     {   0,  0,  0, -2,  0, 0, +1, 4,  0,  STATE_START },
487     {   0,  0,  0,  0,  0, 0, +1, 4,  2,   STATE_DATA },
488     {   0,  0,  0,  0,  0, 0, +1, 4,  2,   STATE_SIGN },
489     {   0,  0,  0,  0,  0, 0, +1, 4,  3,   STATE_DATA },
490     {   0,  0,  0,  0,  0, 0, +1, 4,  3,   STATE_SIGN },
491     {   0,  0,  0,  0,  0, 0, +1, 5,  2, STATE_FOLLOW },
492     {   0,  0,  0,  0,  0, 0, +1, 5,  3, STATE_FOLLOW },
493     {   0,  0,  0,  0,  0, 0, +1, 6,  1,   STATE_DATA },
494     {   0,  0,  0,  0,  0, 0, +1, 7,  0,  STATE_START },
495     {   0,  0,  0,  0,  0, 0, -1, 1,  8, STATE_FOLLOW },
496     {   0,  0,  0,  0,  0, 0, -1, 1,  9, STATE_FOLLOW },
497     {   0, +3,  0,  0,  0, 0, -1, 2,  0,  STATE_START },
498     {   0, -3,  0,  0,  0, 0, -1, 2,  0,  STATE_START },
499     {   0,  0,  0,  0,  0, 0, -1, 1, 10, STATE_FOLLOW },
500     {   0,  0,  0,  0,  0, 0, -1, 1, 11, STATE_FOLLOW },
501     {   0, +4,  0,  0,  0, 0, -1, 2,  0,  STATE_START },
502     {   0, -4,  0,  0,  0, 0, -1, 2,  0,  STATE_START },
503     {   0, +1,  0,  0,  0, 0, -1, 2,  2, STATE_FOLLOW },
504     {   0, +1,  0,  0,  0, 0, -1, 2,  3, STATE_FOLLOW },
505     {   0, +1,  0,  0,  0, 0, -1, 3,  1,   STATE_DATA },
506     {   0, +1,  0,  0,  0, 0, -1, 4,  0,  STATE_START },
507     {   0, -1,  0,  0,  0, 0, -1, 2,  2, STATE_FOLLOW },
508     {   0, -1,  0,  0,  0, 0, -1, 2,  3, STATE_FOLLOW },
509     {   0, -1,  0,  0,  0, 0, -1, 3,  1,   STATE_DATA },
510     {   0, -1,  0,  0,  0, 0, -1, 4,  0,  STATE_START },
511     {   0,  0,  0,  0,  0, 0, -1, 1, 12, STATE_FOLLOW },
512     {   0,  0,  0,  0,  0, 0, -1, 1, 13, STATE_FOLLOW },
513     {   0, +5,  0,  0,  0, 0, -1, 2,  0,  STATE_START },
514     {   0, -5,  0,  0,  0, 0, -1, 2,  0,  STATE_START },
515     {   0,  0,  0,  0,  0, 0, -1, 1, 14, STATE_FOLLOW },
516     {   0,  0,  0,  0,  0, 0, -1, 1, 15, STATE_FOLLOW },
517     {   0, +6,  0,  0,  0, 0, -1, 2,  0,  STATE_START },
518     {   0, -6,  0,  0,  0, 0, -1, 2,  0,  STATE_START },
519     {   0, +2,  0,  0,  0, 0, -1, 2,  2, STATE_FOLLOW },
520     {   0, +2,  0,  0,  0, 0, -1, 2,  3, STATE_FOLLOW },
521     {   0, +2,  0,  0,  0, 0, -1, 3,  1,   STATE_DATA },
522     {   0, +2,  0,  0,  0, 0, -1, 4,  0,  STATE_START },
523     {   0, -2,  0,  0,  0, 0, -1, 2,  2, STATE_FOLLOW },
524     {   0, -2,  0,  0,  0, 0, -1, 2,  3, STATE_FOLLOW },
525     {   0, -2,  0,  0,  0, 0, -1, 3,  1,   STATE_DATA },
526     {   0, -2,  0,  0,  0, 0, -1, 4,  0,  STATE_START },
527     {   0,  0,  0,  0,  0, 0, -1, 2,  4,   STATE_DATA },
528     {   0,  0,  0,  0,  0, 0, -1, 2,  4,   STATE_SIGN },
529     {   0,  0,  0,  0,  0, 0, -1, 2,  5,   STATE_DATA },
530     {   0,  0,  0,  0,  0, 0, -1, 2,  5,   STATE_SIGN },
531     {   0,  0, +1,  0,  0, 0, -1, 3,  1,   STATE_DATA },
532     {   0,  0, +1,  0,  0, 0, -1, 4,  0,  STATE_START },
533     {   0,  0, -1,  0,  0, 0, -1, 3,  1,   STATE_DATA },
534     {   0,  0, -1,  0,  0, 0, -1, 4,  0,  STATE_START },
535     {   0,  0,  0,  0,  0, 0, -1, 2,  6,   STATE_DATA },
536     {   0,  0,  0,  0,  0, 0, -1, 2,  6,   STATE_SIGN },
537     {   0,  0,  0,  0,  0, 0, -1, 2,  7,   STATE_DATA },
538     {   0,  0,  0,  0,  0, 0, -1, 2,  7,   STATE_SIGN },
539     {   0,  0, +2,  0,  0, 0, -1, 3,  1,   STATE_DATA },
540     {   0,  0, +2,  0,  0, 0, -1, 4,  0,  STATE_START },
541     {   0,  0, -2,  0,  0, 0, -1, 3,  1,   STATE_DATA },
542     {   0,  0, -2,  0,  0, 0, -1, 4,  0,  STATE_START },
543     {   0,  0,  0,  0,  0, 0, -1, 3,  4, STATE_FOLLOW },
544     {   0,  0,  0,  0,  0, 0, -1, 3,  5, STATE_FOLLOW },
545     {   0,  0,  0, +1,  0, 0, -1, 4,  0,  STATE_START },
546     {   0,  0,  0, -1,  0, 0, -1, 4,  0,  STATE_START },
547     {   0,  0,  0,  0,  0, 0, -1, 3,  6, STATE_FOLLOW },
548     {   0,  0,  0,  0,  0, 0, -1, 3,  7, STATE_FOLLOW },
549     {   0,  0,  0, +2,  0, 0, -1, 4,  0,  STATE_START },
550     {   0,  0,  0, -2,  0, 0, -1, 4,  0,  STATE_START },
551     {   0,  0,  0,  0,  0, 0, -1, 4,  2,   STATE_DATA },
552     {   0,  0,  0,  0,  0, 0, -1, 4,  2,   STATE_SIGN },
553     {   0,  0,  0,  0,  0, 0, -1, 4,  3,   STATE_DATA },
554     {   0,  0,  0,  0,  0, 0, -1, 4,  3,   STATE_SIGN },
555     {   0,  0,  0,  0,  0, 0, -1, 5,  2, STATE_FOLLOW },
556     {   0,  0,  0,  0,  0, 0, -1, 5,  3, STATE_FOLLOW },
557     {   0,  0,  0,  0,  0, 0, -1, 6,  1,   STATE_DATA },
558     {   0,  0,  0,  0,  0, 0, -1, 7,  0,  STATE_START },
559     {   0,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
560     {   0,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
561     {  +1,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
562     {  +1,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
563     {   0,  0,  0,  0,  0, 3, +1, 1,  1,   STATE_DATA },
564     {   0,  0,  0,  0,  0, 3, +1, 2,  0,  STATE_START },
565     {   0,  0,  0,  0,  0, 3, -1, 1,  1,   STATE_DATA },
566     {   0,  0,  0,  0,  0, 3, -1, 2,  0,  STATE_START },
567     {  +2,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
568     {  +2,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
569     {  +3,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
570     {  +3,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
571     {  +1,  0,  0,  0,  0, 3, +1, 1,  1,   STATE_DATA },
572     {  +1,  0,  0,  0,  0, 3, +1, 2,  0,  STATE_START },
573     {  +1,  0,  0,  0,  0, 3, -1, 1,  1,   STATE_DATA },
574     {  +1,  0,  0,  0,  0, 3, -1, 2,  0,  STATE_START },
575     {   0,  0,  0,  0,  0, 2, +1, 1,  2,   STATE_DATA },
576     {   0,  0,  0,  0,  0, 2, +1, 1,  2,   STATE_SIGN },
577     {   0,  0,  0,  0,  0, 2, +1, 1,  3,   STATE_DATA },
578     {   0,  0,  0,  0,  0, 2, +1, 1,  3,   STATE_SIGN },
579     {   0,  0,  0,  0,  0, 2, +1, 2,  2, STATE_FOLLOW },
580     {   0,  0,  0,  0,  0, 2, +1, 2,  3, STATE_FOLLOW },
581     {   0,  0,  0,  0,  0, 2, +1, 3,  1,   STATE_DATA },
582     {   0,  0,  0,  0,  0, 2, +1, 4,  0,  STATE_START },
583     {   0,  0,  0,  0,  0, 2, -1, 1,  2,   STATE_DATA },
584     {   0,  0,  0,  0,  0, 2, -1, 1,  2,   STATE_SIGN },
585     {   0,  0,  0,  0,  0, 2, -1, 1,  3,   STATE_DATA },
586     {   0,  0,  0,  0,  0, 2, -1, 1,  3,   STATE_SIGN },
587     {   0,  0,  0,  0,  0, 2, -1, 2,  2, STATE_FOLLOW },
588     {   0,  0,  0,  0,  0, 2, -1, 2,  3, STATE_FOLLOW },
589     {   0,  0,  0,  0,  0, 2, -1, 3,  1,   STATE_DATA },
590     {   0,  0,  0,  0,  0, 2, -1, 4,  0,  STATE_START },
591     {  +4,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
592     {  +4,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
593     {  +5,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
594     {  +5,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
595     {  +2,  0,  0,  0,  0, 3, +1, 1,  1,   STATE_DATA },
596     {  +2,  0,  0,  0,  0, 3, +1, 2,  0,  STATE_START },
597     {  +2,  0,  0,  0,  0, 3, -1, 1,  1,   STATE_DATA },
598     {  +2,  0,  0,  0,  0, 3, -1, 2,  0,  STATE_START },
599     {  +6,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
600     {  +6,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
601     {  +7,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
602     {  +7,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
603     {  +3,  0,  0,  0,  0, 3, +1, 1,  1,   STATE_DATA },
604     {  +3,  0,  0,  0,  0, 3, +1, 2,  0,  STATE_START },
605     {  +3,  0,  0,  0,  0, 3, -1, 1,  1,   STATE_DATA },
606     {  +3,  0,  0,  0,  0, 3, -1, 2,  0,  STATE_START },
607     {  +1,  0,  0,  0,  0, 2, +1, 1,  2,   STATE_DATA },
608     {  +1,  0,  0,  0,  0, 2, +1, 1,  2,   STATE_SIGN },
609     {  +1,  0,  0,  0,  0, 2, +1, 1,  3,   STATE_DATA },
610     {  +1,  0,  0,  0,  0, 2, +1, 1,  3,   STATE_SIGN },
611     {  +1,  0,  0,  0,  0, 2, +1, 2,  2, STATE_FOLLOW },
612     {  +1,  0,  0,  0,  0, 2, +1, 2,  3, STATE_FOLLOW },
613     {  +1,  0,  0,  0,  0, 2, +1, 3,  1,   STATE_DATA },
614     {  +1,  0,  0,  0,  0, 2, +1, 4,  0,  STATE_START },
615     {  +1,  0,  0,  0,  0, 2, -1, 1,  2,   STATE_DATA },
616     {  +1,  0,  0,  0,  0, 2, -1, 1,  2,   STATE_SIGN },
617     {  +1,  0,  0,  0,  0, 2, -1, 1,  3,   STATE_DATA },
618     {  +1,  0,  0,  0,  0, 2, -1, 1,  3,   STATE_SIGN },
619     {  +1,  0,  0,  0,  0, 2, -1, 2,  2, STATE_FOLLOW },
620     {  +1,  0,  0,  0,  0, 2, -1, 2,  3, STATE_FOLLOW },
621     {  +1,  0,  0,  0,  0, 2, -1, 3,  1,   STATE_DATA },
622     {  +1,  0,  0,  0,  0, 2, -1, 4,  0,  STATE_START },
623     {   0,  0,  0,  0,  0, 1, +1, 1,  4,   STATE_DATA },
624     {   0,  0,  0,  0,  0, 1, +1, 1,  4,   STATE_SIGN },
625     {   0,  0,  0,  0,  0, 1, +1, 1,  5,   STATE_DATA },
626     {   0,  0,  0,  0,  0, 1, +1, 1,  5,   STATE_SIGN },
627     {   0, +1,  0,  0,  0, 1, +1, 2,  1,   STATE_DATA },
628     {   0, +1,  0,  0,  0, 1, +1, 3,  0,  STATE_START },
629     {   0, -1,  0,  0,  0, 1, +1, 2,  1,   STATE_DATA },
630     {   0, -1,  0,  0,  0, 1, +1, 3,  0,  STATE_START },
631     {   0,  0,  0,  0,  0, 1, +1, 1,  6,   STATE_DATA },
632     {   0,  0,  0,  0,  0, 1, +1, 1,  6,   STATE_SIGN },
633     {   0,  0,  0,  0,  0, 1, +1, 1,  7,   STATE_DATA },
634     {   0,  0,  0,  0,  0, 1, +1, 1,  7,   STATE_SIGN },
635     {   0, +2,  0,  0,  0, 1, +1, 2,  1,   STATE_DATA },
636     {   0, +2,  0,  0,  0, 1, +1, 3,  0,  STATE_START },
637     {   0, -2,  0,  0,  0, 1, +1, 2,  1,   STATE_DATA },
638     {   0, -2,  0,  0,  0, 1, +1, 3,  0,  STATE_START },
639     {   0,  0,  0,  0,  0, 1, +1, 2,  4, STATE_FOLLOW },
640     {   0,  0,  0,  0,  0, 1, +1, 2,  5, STATE_FOLLOW },
641     {   0,  0, +1,  0,  0, 1, +1, 3,  0,  STATE_START },
642     {   0,  0, -1,  0,  0, 1, +1, 3,  0,  STATE_START },
643     {   0,  0,  0,  0,  0, 1, +1, 2,  6, STATE_FOLLOW },
644     {   0,  0,  0,  0,  0, 1, +1, 2,  7, STATE_FOLLOW },
645     {   0,  0, +2,  0,  0, 1, +1, 3,  0,  STATE_START },
646     {   0,  0, -2,  0,  0, 1, +1, 3,  0,  STATE_START },
647     {   0,  0,  0,  0,  0, 1, +1, 3,  2,   STATE_DATA },
648     {   0,  0,  0,  0,  0, 1, +1, 3,  2,   STATE_SIGN },
649     {   0,  0,  0,  0,  0, 1, +1, 3,  3,   STATE_DATA },
650     {   0,  0,  0,  0,  0, 1, +1, 3,  3,   STATE_SIGN },
651     {   0,  0,  0,  0,  0, 1, +1, 4,  2, STATE_FOLLOW },
652     {   0,  0,  0,  0,  0, 1, +1, 4,  3, STATE_FOLLOW },
653     {   0,  0,  0,  0,  0, 1, +1, 5,  1,   STATE_DATA },
654     {   0,  0,  0,  0,  0, 1, +1, 6,  0,  STATE_START },
655     {   0,  0,  0,  0,  0, 1, -1, 1,  4,   STATE_DATA },
656     {   0,  0,  0,  0,  0, 1, -1, 1,  4,   STATE_SIGN },
657     {   0,  0,  0,  0,  0, 1, -1, 1,  5,   STATE_DATA },
658     {   0,  0,  0,  0,  0, 1, -1, 1,  5,   STATE_SIGN },
659     {   0, +1,  0,  0,  0, 1, -1, 2,  1,   STATE_DATA },
660     {   0, +1,  0,  0,  0, 1, -1, 3,  0,  STATE_START },
661     {   0, -1,  0,  0,  0, 1, -1, 2,  1,   STATE_DATA },
662     {   0, -1,  0,  0,  0, 1, -1, 3,  0,  STATE_START },
663     {   0,  0,  0,  0,  0, 1, -1, 1,  6,   STATE_DATA },
664     {   0,  0,  0,  0,  0, 1, -1, 1,  6,   STATE_SIGN },
665     {   0,  0,  0,  0,  0, 1, -1, 1,  7,   STATE_DATA },
666     {   0,  0,  0,  0,  0, 1, -1, 1,  7,   STATE_SIGN },
667     {   0, +2,  0,  0,  0, 1, -1, 2,  1,   STATE_DATA },
668     {   0, +2,  0,  0,  0, 1, -1, 3,  0,  STATE_START },
669     {   0, -2,  0,  0,  0, 1, -1, 2,  1,   STATE_DATA },
670     {   0, -2,  0,  0,  0, 1, -1, 3,  0,  STATE_START },
671     {   0,  0,  0,  0,  0, 1, -1, 2,  4, STATE_FOLLOW },
672     {   0,  0,  0,  0,  0, 1, -1, 2,  5, STATE_FOLLOW },
673     {   0,  0, +1,  0,  0, 1, -1, 3,  0,  STATE_START },
674     {   0,  0, -1,  0,  0, 1, -1, 3,  0,  STATE_START },
675     {   0,  0,  0,  0,  0, 1, -1, 2,  6, STATE_FOLLOW },
676     {   0,  0,  0,  0,  0, 1, -1, 2,  7, STATE_FOLLOW },
677     {   0,  0, +2,  0,  0, 1, -1, 3,  0,  STATE_START },
678     {   0,  0, -2,  0,  0, 1, -1, 3,  0,  STATE_START },
679     {   0,  0,  0,  0,  0, 1, -1, 3,  2,   STATE_DATA },
680     {   0,  0,  0,  0,  0, 1, -1, 3,  2,   STATE_SIGN },
681     {   0,  0,  0,  0,  0, 1, -1, 3,  3,   STATE_DATA },
682     {   0,  0,  0,  0,  0, 1, -1, 3,  3,   STATE_SIGN },
683     {   0,  0,  0,  0,  0, 1, -1, 4,  2, STATE_FOLLOW },
684     {   0,  0,  0,  0,  0, 1, -1, 4,  3, STATE_FOLLOW },
685     {   0,  0,  0,  0,  0, 1, -1, 5,  1,   STATE_DATA },
686     {   0,  0,  0,  0,  0, 1, -1, 6,  0,  STATE_START },
687     {  +8,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
688     {  +8,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
689     {  +9,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
690     {  +9,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
691     {  +4,  0,  0,  0,  0, 3, +1, 1,  1,   STATE_DATA },
692     {  +4,  0,  0,  0,  0, 3, +1, 2,  0,  STATE_START },
693     {  +4,  0,  0,  0,  0, 3, -1, 1,  1,   STATE_DATA },
694     {  +4,  0,  0,  0,  0, 3, -1, 2,  0,  STATE_START },
695     { +10,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
696     { +10,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
697     { +11,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
698     { +11,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
699     {  +5,  0,  0,  0,  0, 3, +1, 1,  1,   STATE_DATA },
700     {  +5,  0,  0,  0,  0, 3, +1, 2,  0,  STATE_START },
701     {  +5,  0,  0,  0,  0, 3, -1, 1,  1,   STATE_DATA },
702     {  +5,  0,  0,  0,  0, 3, -1, 2,  0,  STATE_START },
703     {  +2,  0,  0,  0,  0, 2, +1, 1,  2,   STATE_DATA },
704     {  +2,  0,  0,  0,  0, 2, +1, 1,  2,   STATE_SIGN },
705     {  +2,  0,  0,  0,  0, 2, +1, 1,  3,   STATE_DATA },
706     {  +2,  0,  0,  0,  0, 2, +1, 1,  3,   STATE_SIGN },
707     {  +2,  0,  0,  0,  0, 2, +1, 2,  2, STATE_FOLLOW },
708     {  +2,  0,  0,  0,  0, 2, +1, 2,  3, STATE_FOLLOW },
709     {  +2,  0,  0,  0,  0, 2, +1, 3,  1,   STATE_DATA },
710     {  +2,  0,  0,  0,  0, 2, +1, 4,  0,  STATE_START },
711     {  +2,  0,  0,  0,  0, 2, -1, 1,  2,   STATE_DATA },
712     {  +2,  0,  0,  0,  0, 2, -1, 1,  2,   STATE_SIGN },
713     {  +2,  0,  0,  0,  0, 2, -1, 1,  3,   STATE_DATA },
714     {  +2,  0,  0,  0,  0, 2, -1, 1,  3,   STATE_SIGN },
715     {  +2,  0,  0,  0,  0, 2, -1, 2,  2, STATE_FOLLOW },
716     {  +2,  0,  0,  0,  0, 2, -1, 2,  3, STATE_FOLLOW },
717     {  +2,  0,  0,  0,  0, 2, -1, 3,  1,   STATE_DATA },
718     {  +2,  0,  0,  0,  0, 2, -1, 4,  0,  STATE_START },
719     { +12,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
720     { +12,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
721     { +13,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
722     { +13,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
723     {  +6,  0,  0,  0,  0, 3, +1, 1,  1,   STATE_DATA },
724     {  +6,  0,  0,  0,  0, 3, +1, 2,  0,  STATE_START },
725     {  +6,  0,  0,  0,  0, 3, -1, 1,  1,   STATE_DATA },
726     {  +6,  0,  0,  0,  0, 3, -1, 2,  0,  STATE_START },
727     { +14,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
728     { +14,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
729     { +15,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
730     { +15,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
731     {  +7,  0,  0,  0,  0, 3, +1, 1,  1,   STATE_DATA },
732     {  +7,  0,  0,  0,  0, 3, +1, 2,  0,  STATE_START },
733     {  +7,  0,  0,  0,  0, 3, -1, 1,  1,   STATE_DATA },
734     {  +7,  0,  0,  0,  0, 3, -1, 2,  0,  STATE_START },
735     {  +3,  0,  0,  0,  0, 2, +1, 1,  2,   STATE_DATA },
736     {  +3,  0,  0,  0,  0, 2, +1, 1,  2,   STATE_SIGN },
737     {  +3,  0,  0,  0,  0, 2, +1, 1,  3,   STATE_DATA },
738     {  +3,  0,  0,  0,  0, 2, +1, 1,  3,   STATE_SIGN },
739     {  +3,  0,  0,  0,  0, 2, +1, 2,  2, STATE_FOLLOW },
740     {  +3,  0,  0,  0,  0, 2, +1, 2,  3, STATE_FOLLOW },
741     {  +3,  0,  0,  0,  0, 2, +1, 3,  1,   STATE_DATA },
742     {  +3,  0,  0,  0,  0, 2, +1, 4,  0,  STATE_START },
743     {  +3,  0,  0,  0,  0, 2, -1, 1,  2,   STATE_DATA },
744     {  +3,  0,  0,  0,  0, 2, -1, 1,  2,   STATE_SIGN },
745     {  +3,  0,  0,  0,  0, 2, -1, 1,  3,   STATE_DATA },
746     {  +3,  0,  0,  0,  0, 2, -1, 1,  3,   STATE_SIGN },
747     {  +3,  0,  0,  0,  0, 2, -1, 2,  2, STATE_FOLLOW },
748     {  +3,  0,  0,  0,  0, 2, -1, 2,  3, STATE_FOLLOW },
749     {  +3,  0,  0,  0,  0, 2, -1, 3,  1,   STATE_DATA },
750     {  +3,  0,  0,  0,  0, 2, -1, 4,  0,  STATE_START },
751     {  +1,  0,  0,  0,  0, 1, +1, 1,  4,   STATE_DATA },
752     {  +1,  0,  0,  0,  0, 1, +1, 1,  4,   STATE_SIGN },
753     {  +1,  0,  0,  0,  0, 1, +1, 1,  5,   STATE_DATA },
754     {  +1,  0,  0,  0,  0, 1, +1, 1,  5,   STATE_SIGN },
755     {  +1, +1,  0,  0,  0, 1, +1, 2,  1,   STATE_DATA },
756     {  +1, +1,  0,  0,  0, 1, +1, 3,  0,  STATE_START },
757     {  +1, -1,  0,  0,  0, 1, +1, 2,  1,   STATE_DATA },
758     {  +1, -1,  0,  0,  0, 1, +1, 3,  0,  STATE_START },
759     {  +1,  0,  0,  0,  0, 1, +1, 1,  6,   STATE_DATA },
760     {  +1,  0,  0,  0,  0, 1, +1, 1,  6,   STATE_SIGN },
761     {  +1,  0,  0,  0,  0, 1, +1, 1,  7,   STATE_DATA },
762     {  +1,  0,  0,  0,  0, 1, +1, 1,  7,   STATE_SIGN },
763     {  +1, +2,  0,  0,  0, 1, +1, 2,  1,   STATE_DATA },
764     {  +1, +2,  0,  0,  0, 1, +1, 3,  0,  STATE_START },
765     {  +1, -2,  0,  0,  0, 1, +1, 2,  1,   STATE_DATA },
766     {  +1, -2,  0,  0,  0, 1, +1, 3,  0,  STATE_START },
767     {  +1,  0,  0,  0,  0, 1, +1, 2,  4, STATE_FOLLOW },
768     {  +1,  0,  0,  0,  0, 1, +1, 2,  5, STATE_FOLLOW },
769     {  +1,  0, +1,  0,  0, 1, +1, 3,  0,  STATE_START },
770     {  +1,  0, -1,  0,  0, 1, +1, 3,  0,  STATE_START },
771     {  +1,  0,  0,  0,  0, 1, +1, 2,  6, STATE_FOLLOW },
772     {  +1,  0,  0,  0,  0, 1, +1, 2,  7, STATE_FOLLOW },
773     {  +1,  0, +2,  0,  0, 1, +1, 3,  0,  STATE_START },
774     {  +1,  0, -2,  0,  0, 1, +1, 3,  0,  STATE_START },
775     {  +1,  0,  0,  0,  0, 1, +1, 3,  2,   STATE_DATA },
776     {  +1,  0,  0,  0,  0, 1, +1, 3,  2,   STATE_SIGN },
777     {  +1,  0,  0,  0,  0, 1, +1, 3,  3,   STATE_DATA },
778     {  +1,  0,  0,  0,  0, 1, +1, 3,  3,   STATE_SIGN },
779     {  +1,  0,  0,  0,  0, 1, +1, 4,  2, STATE_FOLLOW },
780     {  +1,  0,  0,  0,  0, 1, +1, 4,  3, STATE_FOLLOW },
781     {  +1,  0,  0,  0,  0, 1, +1, 5,  1,   STATE_DATA },
782     {  +1,  0,  0,  0,  0, 1, +1, 6,  0,  STATE_START },
783     {  +1,  0,  0,  0,  0, 1, -1, 1,  4,   STATE_DATA },
784     {  +1,  0,  0,  0,  0, 1, -1, 1,  4,   STATE_SIGN },
785     {  +1,  0,  0,  0,  0, 1, -1, 1,  5,   STATE_DATA },
786     {  +1,  0,  0,  0,  0, 1, -1, 1,  5,   STATE_SIGN },
787     {  +1, +1,  0,  0,  0, 1, -1, 2,  1,   STATE_DATA },
788     {  +1, +1,  0,  0,  0, 1, -1, 3,  0,  STATE_START },
789     {  +1, -1,  0,  0,  0, 1, -1, 2,  1,   STATE_DATA },
790     {  +1, -1,  0,  0,  0, 1, -1, 3,  0,  STATE_START },
791     {  +1,  0,  0,  0,  0, 1, -1, 1,  6,   STATE_DATA },
792     {  +1,  0,  0,  0,  0, 1, -1, 1,  6,   STATE_SIGN },
793     {  +1,  0,  0,  0,  0, 1, -1, 1,  7,   STATE_DATA },
794     {  +1,  0,  0,  0,  0, 1, -1, 1,  7,   STATE_SIGN },
795     {  +1, +2,  0,  0,  0, 1, -1, 2,  1,   STATE_DATA },
796     {  +1, +2,  0,  0,  0, 1, -1, 3,  0,  STATE_START },
797     {  +1, -2,  0,  0,  0, 1, -1, 2,  1,   STATE_DATA },
798     {  +1, -2,  0,  0,  0, 1, -1, 3,  0,  STATE_START },
799     {  +1,  0,  0,  0,  0, 1, -1, 2,  4, STATE_FOLLOW },
800     {  +1,  0,  0,  0,  0, 1, -1, 2,  5, STATE_FOLLOW },
801     {  +1,  0, +1,  0,  0, 1, -1, 3,  0,  STATE_START },
802     {  +1,  0, -1,  0,  0, 1, -1, 3,  0,  STATE_START },
803     {  +1,  0,  0,  0,  0, 1, -1, 2,  6, STATE_FOLLOW },
804     {  +1,  0,  0,  0,  0, 1, -1, 2,  7, STATE_FOLLOW },
805     {  +1,  0, +2,  0,  0, 1, -1, 3,  0,  STATE_START },
806     {  +1,  0, -2,  0,  0, 1, -1, 3,  0,  STATE_START },
807     {  +1,  0,  0,  0,  0, 1, -1, 3,  2,   STATE_DATA },
808     {  +1,  0,  0,  0,  0, 1, -1, 3,  2,   STATE_SIGN },
809     {  +1,  0,  0,  0,  0, 1, -1, 3,  3,   STATE_DATA },
810     {  +1,  0,  0,  0,  0, 1, -1, 3,  3,   STATE_SIGN },
811     {  +1,  0,  0,  0,  0, 1, -1, 4,  2, STATE_FOLLOW },
812     {  +1,  0,  0,  0,  0, 1, -1, 4,  3, STATE_FOLLOW },
813     {  +1,  0,  0,  0,  0, 1, -1, 5,  1,   STATE_DATA },
814     {  +1,  0,  0,  0,  0, 1, -1, 6,  0,  STATE_START },
815     {   0,  0,  0,  0,  0, 0, +1, 1,  8,   STATE_DATA },
816     {   0,  0,  0,  0,  0, 0, +1, 1,  8,   STATE_SIGN },
817     {   0,  0,  0,  0,  0, 0, +1, 1,  9,   STATE_DATA },
818     {   0,  0,  0,  0,  0, 0, +1, 1,  9,   STATE_SIGN },
819     {   0, +3,  0,  0,  0, 0, +1, 2,  1,   STATE_DATA },
820     {   0, +3,  0,  0,  0, 0, +1, 3,  0,  STATE_START },
821     {   0, -3,  0,  0,  0, 0, +1, 2,  1,   STATE_DATA },
822     {   0, -3,  0,  0,  0, 0, +1, 3,  0,  STATE_START },
823     {   0,  0,  0,  0,  0, 0, +1, 1, 10,   STATE_DATA },
824     {   0,  0,  0,  0,  0, 0, +1, 1, 10,   STATE_SIGN },
825     {   0,  0,  0,  0,  0, 0, +1, 1, 11,   STATE_DATA },
826     {   0,  0,  0,  0,  0, 0, +1, 1, 11,   STATE_SIGN },
827     {   0, +4,  0,  0,  0, 0, +1, 2,  1,   STATE_DATA },
828     {   0, +4,  0,  0,  0, 0, +1, 3,  0,  STATE_START },
829     {   0, -4,  0,  0,  0, 0, +1, 2,  1,   STATE_DATA },
830     {   0, -4,  0,  0,  0, 0, +1, 3,  0,  STATE_START },
831     {   0, +1,  0,  0,  0, 0, +1, 2,  2,   STATE_DATA },
832     {   0, +1,  0,  0,  0, 0, +1, 2,  2,   STATE_SIGN },
833     {   0, +1,  0,  0,  0, 0, +1, 2,  3,   STATE_DATA },
834     {   0, +1,  0,  0,  0, 0, +1, 2,  3,   STATE_SIGN },
835     {   0, +1,  0,  0,  0, 0, +1, 3,  2, STATE_FOLLOW },
836     {   0, +1,  0,  0,  0, 0, +1, 3,  3, STATE_FOLLOW },
837     {   0, +1,  0,  0,  0, 0, +1, 4,  1,   STATE_DATA },
838     {   0, +1,  0,  0,  0, 0, +1, 5,  0,  STATE_START },
839     {   0, -1,  0,  0,  0, 0, +1, 2,  2,   STATE_DATA },
840     {   0, -1,  0,  0,  0, 0, +1, 2,  2,   STATE_SIGN },
841     {   0, -1,  0,  0,  0, 0, +1, 2,  3,   STATE_DATA },
842     {   0, -1,  0,  0,  0, 0, +1, 2,  3,   STATE_SIGN },
843     {   0, -1,  0,  0,  0, 0, +1, 3,  2, STATE_FOLLOW },
844     {   0, -1,  0,  0,  0, 0, +1, 3,  3, STATE_FOLLOW },
845     {   0, -1,  0,  0,  0, 0, +1, 4,  1,   STATE_DATA },
846     {   0, -1,  0,  0,  0, 0, +1, 5,  0,  STATE_START },
847     {   0,  0,  0,  0,  0, 0, +1, 1, 12,   STATE_DATA },
848     {   0,  0,  0,  0,  0, 0, +1, 1, 12,   STATE_SIGN },
849     {   0,  0,  0,  0,  0, 0, +1, 1, 13,   STATE_DATA },
850     {   0,  0,  0,  0,  0, 0, +1, 1, 13,   STATE_SIGN },
851     {   0, +5,  0,  0,  0, 0, +1, 2,  1,   STATE_DATA },
852     {   0, +5,  0,  0,  0, 0, +1, 3,  0,  STATE_START },
853     {   0, -5,  0,  0,  0, 0, +1, 2,  1,   STATE_DATA },
854     {   0, -5,  0,  0,  0, 0, +1, 3,  0,  STATE_START },
855     {   0,  0,  0,  0,  0, 0, +1, 1, 14,   STATE_DATA },
856     {   0,  0,  0,  0,  0, 0, +1, 1, 14,   STATE_SIGN },
857     {   0,  0,  0,  0,  0, 0, +1, 1, 15,   STATE_DATA },
858     {   0,  0,  0,  0,  0, 0, +1, 1, 15,   STATE_SIGN },
859     {   0, +6,  0,  0,  0, 0, +1, 2,  1,   STATE_DATA },
860     {   0, +6,  0,  0,  0, 0, +1, 3,  0,  STATE_START },
861     {   0, -6,  0,  0,  0, 0, +1, 2,  1,   STATE_DATA },
862     {   0, -6,  0,  0,  0, 0, +1, 3,  0,  STATE_START },
863     {   0, +2,  0,  0,  0, 0, +1, 2,  2,   STATE_DATA },
864     {   0, +2,  0,  0,  0, 0, +1, 2,  2,   STATE_SIGN },
865     {   0, +2,  0,  0,  0, 0, +1, 2,  3,   STATE_DATA },
866     {   0, +2,  0,  0,  0, 0, +1, 2,  3,   STATE_SIGN },
867     {   0, +2,  0,  0,  0, 0, +1, 3,  2, STATE_FOLLOW },
868     {   0, +2,  0,  0,  0, 0, +1, 3,  3, STATE_FOLLOW },
869     {   0, +2,  0,  0,  0, 0, +1, 4,  1,   STATE_DATA },
870     {   0, +2,  0,  0,  0, 0, +1, 5,  0,  STATE_START },
871     {   0, -2,  0,  0,  0, 0, +1, 2,  2,   STATE_DATA },
872     {   0, -2,  0,  0,  0, 0, +1, 2,  2,   STATE_SIGN },
873     {   0, -2,  0,  0,  0, 0, +1, 2,  3,   STATE_DATA },
874     {   0, -2,  0,  0,  0, 0, +1, 2,  3,   STATE_SIGN },
875     {   0, -2,  0,  0,  0, 0, +1, 3,  2, STATE_FOLLOW },
876     {   0, -2,  0,  0,  0, 0, +1, 3,  3, STATE_FOLLOW },
877     {   0, -2,  0,  0,  0, 0, +1, 4,  1,   STATE_DATA },
878     {   0, -2,  0,  0,  0, 0, +1, 5,  0,  STATE_START },
879     {   0,  0,  0,  0,  0, 0, +1, 2,  8, STATE_FOLLOW },
880     {   0,  0,  0,  0,  0, 0, +1, 2,  9, STATE_FOLLOW },
881     {   0,  0, +3,  0,  0, 0, +1, 3,  0,  STATE_START },
882     {   0,  0, -3,  0,  0, 0, +1, 3,  0,  STATE_START },
883     {   0,  0,  0,  0,  0, 0, +1, 2, 10, STATE_FOLLOW },
884     {   0,  0,  0,  0,  0, 0, +1, 2, 11, STATE_FOLLOW },
885     {   0,  0, +4,  0,  0, 0, +1, 3,  0,  STATE_START },
886     {   0,  0, -4,  0,  0, 0, +1, 3,  0,  STATE_START },
887     {   0,  0, +1,  0,  0, 0, +1, 3,  2, STATE_FOLLOW },
888     {   0,  0, +1,  0,  0, 0, +1, 3,  3, STATE_FOLLOW },
889     {   0,  0, +1,  0,  0, 0, +1, 4,  1,   STATE_DATA },
890     {   0,  0, +1,  0,  0, 0, +1, 5,  0,  STATE_START },
891     {   0,  0, -1,  0,  0, 0, +1, 3,  2, STATE_FOLLOW },
892     {   0,  0, -1,  0,  0, 0, +1, 3,  3, STATE_FOLLOW },
893     {   0,  0, -1,  0,  0, 0, +1, 4,  1,   STATE_DATA },
894     {   0,  0, -1,  0,  0, 0, +1, 5,  0,  STATE_START },
895     {   0,  0,  0,  0,  0, 0, +1, 2, 12, STATE_FOLLOW },
896     {   0,  0,  0,  0,  0, 0, +1, 2, 13, STATE_FOLLOW },
897     {   0,  0, +5,  0,  0, 0, +1, 3,  0,  STATE_START },
898     {   0,  0, -5,  0,  0, 0, +1, 3,  0,  STATE_START },
899     {   0,  0,  0,  0,  0, 0, +1, 2, 14, STATE_FOLLOW },
900     {   0,  0,  0,  0,  0, 0, +1, 2, 15, STATE_FOLLOW },
901     {   0,  0, +6,  0,  0, 0, +1, 3,  0,  STATE_START },
902     {   0,  0, -6,  0,  0, 0, +1, 3,  0,  STATE_START },
903     {   0,  0, +2,  0,  0, 0, +1, 3,  2, STATE_FOLLOW },
904     {   0,  0, +2,  0,  0, 0, +1, 3,  3, STATE_FOLLOW },
905     {   0,  0, +2,  0,  0, 0, +1, 4,  1,   STATE_DATA },
906     {   0,  0, +2,  0,  0, 0, +1, 5,  0,  STATE_START },
907     {   0,  0, -2,  0,  0, 0, +1, 3,  2, STATE_FOLLOW },
908     {   0,  0, -2,  0,  0, 0, +1, 3,  3, STATE_FOLLOW },
909     {   0,  0, -2,  0,  0, 0, +1, 4,  1,   STATE_DATA },
910     {   0,  0, -2,  0,  0, 0, +1, 5,  0,  STATE_START },
911     {   0,  0,  0,  0,  0, 0, +1, 3,  4,   STATE_DATA },
912     {   0,  0,  0,  0,  0, 0, +1, 3,  4,   STATE_SIGN },
913     {   0,  0,  0,  0,  0, 0, +1, 3,  5,   STATE_DATA },
914     {   0,  0,  0,  0,  0, 0, +1, 3,  5,   STATE_SIGN },
915     {   0,  0,  0, +1,  0, 0, +1, 4,  1,   STATE_DATA },
916     {   0,  0,  0, +1,  0, 0, +1, 5,  0,  STATE_START },
917     {   0,  0,  0, -1,  0, 0, +1, 4,  1,   STATE_DATA },
918     {   0,  0,  0, -1,  0, 0, +1, 5,  0,  STATE_START },
919     {   0,  0,  0,  0,  0, 0, +1, 3,  6,   STATE_DATA },
920     {   0,  0,  0,  0,  0, 0, +1, 3,  6,   STATE_SIGN },
921     {   0,  0,  0,  0,  0, 0, +1, 3,  7,   STATE_DATA },
922     {   0,  0,  0,  0,  0, 0, +1, 3,  7,   STATE_SIGN },
923     {   0,  0,  0, +2,  0, 0, +1, 4,  1,   STATE_DATA },
924     {   0,  0,  0, +2,  0, 0, +1, 5,  0,  STATE_START },
925     {   0,  0,  0, -2,  0, 0, +1, 4,  1,   STATE_DATA },
926     {   0,  0,  0, -2,  0, 0, +1, 5,  0,  STATE_START },
927     {   0,  0,  0,  0,  0, 0, +1, 4,  4, STATE_FOLLOW },
928     {   0,  0,  0,  0,  0, 0, +1, 4,  5, STATE_FOLLOW },
929     {   0,  0,  0,  0, +1, 0, +1, 5,  0,  STATE_START },
930     {   0,  0,  0,  0, -1, 0, +1, 5,  0,  STATE_START },
931     {   0,  0,  0,  0,  0, 0, +1, 4,  6, STATE_FOLLOW },
932     {   0,  0,  0,  0,  0, 0, +1, 4,  7, STATE_FOLLOW },
933     {   0,  0,  0,  0, +2, 0, +1, 5,  0,  STATE_START },
934     {   0,  0,  0,  0, -2, 0, +1, 5,  0,  STATE_START },
935     {   0,  0,  0,  0,  0, 0, +1, 5,  2,   STATE_DATA },
936     {   0,  0,  0,  0,  0, 0, +1, 5,  2,   STATE_SIGN },
937     {   0,  0,  0,  0,  0, 0, +1, 5,  3,   STATE_DATA },
938     {   0,  0,  0,  0,  0, 0, +1, 5,  3,   STATE_SIGN },
939     {   0,  0,  0,  0,  0, 0, +1, 6,  2, STATE_FOLLOW },
940     {   0,  0,  0,  0,  0, 0, +1, 6,  3, STATE_FOLLOW },
941     {   0,  0,  0,  0,  0, 0, +1, 7,  1,   STATE_DATA },
942     {   0,  0,  0,  0,  0, 0, +1, 8,  0,  STATE_START },
943     {   0,  0,  0,  0,  0, 0, -1, 1,  8,   STATE_DATA },
944     {   0,  0,  0,  0,  0, 0, -1, 1,  8,   STATE_SIGN },
945     {   0,  0,  0,  0,  0, 0, -1, 1,  9,   STATE_DATA },
946     {   0,  0,  0,  0,  0, 0, -1, 1,  9,   STATE_SIGN },
947     {   0, +3,  0,  0,  0, 0, -1, 2,  1,   STATE_DATA },
948     {   0, +3,  0,  0,  0, 0, -1, 3,  0,  STATE_START },
949     {   0, -3,  0,  0,  0, 0, -1, 2,  1,   STATE_DATA },
950     {   0, -3,  0,  0,  0, 0, -1, 3,  0,  STATE_START },
951     {   0,  0,  0,  0,  0, 0, -1, 1, 10,   STATE_DATA },
952     {   0,  0,  0,  0,  0, 0, -1, 1, 10,   STATE_SIGN },
953     {   0,  0,  0,  0,  0, 0, -1, 1, 11,   STATE_DATA },
954     {   0,  0,  0,  0,  0, 0, -1, 1, 11,   STATE_SIGN },
955     {   0, +4,  0,  0,  0, 0, -1, 2,  1,   STATE_DATA },
956     {   0, +4,  0,  0,  0, 0, -1, 3,  0,  STATE_START },
957     {   0, -4,  0,  0,  0, 0, -1, 2,  1,   STATE_DATA },
958     {   0, -4,  0,  0,  0, 0, -1, 3,  0,  STATE_START },
959     {   0, +1,  0,  0,  0, 0, -1, 2,  2,   STATE_DATA },
960     {   0, +1,  0,  0,  0, 0, -1, 2,  2,   STATE_SIGN },
961     {   0, +1,  0,  0,  0, 0, -1, 2,  3,   STATE_DATA },
962     {   0, +1,  0,  0,  0, 0, -1, 2,  3,   STATE_SIGN },
963     {   0, +1,  0,  0,  0, 0, -1, 3,  2, STATE_FOLLOW },
964     {   0, +1,  0,  0,  0, 0, -1, 3,  3, STATE_FOLLOW },
965     {   0, +1,  0,  0,  0, 0, -1, 4,  1,   STATE_DATA },
966     {   0, +1,  0,  0,  0, 0, -1, 5,  0,  STATE_START },
967     {   0, -1,  0,  0,  0, 0, -1, 2,  2,   STATE_DATA },
968     {   0, -1,  0,  0,  0, 0, -1, 2,  2,   STATE_SIGN },
969     {   0, -1,  0,  0,  0, 0, -1, 2,  3,   STATE_DATA },
970     {   0, -1,  0,  0,  0, 0, -1, 2,  3,   STATE_SIGN },
971     {   0, -1,  0,  0,  0, 0, -1, 3,  2, STATE_FOLLOW },
972     {   0, -1,  0,  0,  0, 0, -1, 3,  3, STATE_FOLLOW },
973     {   0, -1,  0,  0,  0, 0, -1, 4,  1,   STATE_DATA },
974     {   0, -1,  0,  0,  0, 0, -1, 5,  0,  STATE_START },
975     {   0,  0,  0,  0,  0, 0, -1, 1, 12,   STATE_DATA },
976     {   0,  0,  0,  0,  0, 0, -1, 1, 12,   STATE_SIGN },
977     {   0,  0,  0,  0,  0, 0, -1, 1, 13,   STATE_DATA },
978     {   0,  0,  0,  0,  0, 0, -1, 1, 13,   STATE_SIGN },
979     {   0, +5,  0,  0,  0, 0, -1, 2,  1,   STATE_DATA },
980     {   0, +5,  0,  0,  0, 0, -1, 3,  0,  STATE_START },
981     {   0, -5,  0,  0,  0, 0, -1, 2,  1,   STATE_DATA },
982     {   0, -5,  0,  0,  0, 0, -1, 3,  0,  STATE_START },
983     {   0,  0,  0,  0,  0, 0, -1, 1, 14,   STATE_DATA },
984     {   0,  0,  0,  0,  0, 0, -1, 1, 14,   STATE_SIGN },
985     {   0,  0,  0,  0,  0, 0, -1, 1, 15,   STATE_DATA },
986     {   0,  0,  0,  0,  0, 0, -1, 1, 15,   STATE_SIGN },
987     {   0, +6,  0,  0,  0, 0, -1, 2,  1,   STATE_DATA },
988     {   0, +6,  0,  0,  0, 0, -1, 3,  0,  STATE_START },
989     {   0, -6,  0,  0,  0, 0, -1, 2,  1,   STATE_DATA },
990     {   0, -6,  0,  0,  0, 0, -1, 3,  0,  STATE_START },
991     {   0, +2,  0,  0,  0, 0, -1, 2,  2,   STATE_DATA },
992     {   0, +2,  0,  0,  0, 0, -1, 2,  2,   STATE_SIGN },
993     {   0, +2,  0,  0,  0, 0, -1, 2,  3,   STATE_DATA },
994     {   0, +2,  0,  0,  0, 0, -1, 2,  3,   STATE_SIGN },
995     {   0, +2,  0,  0,  0, 0, -1, 3,  2, STATE_FOLLOW },
996     {   0, +2,  0,  0,  0, 0, -1, 3,  3, STATE_FOLLOW },
997     {   0, +2,  0,  0,  0, 0, -1, 4,  1,   STATE_DATA },
998     {   0, +2,  0,  0,  0, 0, -1, 5,  0,  STATE_START },
999     {   0, -2,  0,  0,  0, 0, -1, 2,  2,   STATE_DATA },
1000     {   0, -2,  0,  0,  0, 0, -1, 2,  2,   STATE_SIGN },
1001     {   0, -2,  0,  0,  0, 0, -1, 2,  3,   STATE_DATA },
1002     {   0, -2,  0,  0,  0, 0, -1, 2,  3,   STATE_SIGN },
1003     {   0, -2,  0,  0,  0, 0, -1, 3,  2, STATE_FOLLOW },
1004     {   0, -2,  0,  0,  0, 0, -1, 3,  3, STATE_FOLLOW },
1005     {   0, -2,  0,  0,  0, 0, -1, 4,  1,   STATE_DATA },
1006     {   0, -2,  0,  0,  0, 0, -1, 5,  0,  STATE_START },
1007     {   0,  0,  0,  0,  0, 0, -1, 2,  8, STATE_FOLLOW },
1008     {   0,  0,  0,  0,  0, 0, -1, 2,  9, STATE_FOLLOW },
1009     {   0,  0, +3,  0,  0, 0, -1, 3,  0,  STATE_START },
1010     {   0,  0, -3,  0,  0, 0, -1, 3,  0,  STATE_START },
1011     {   0,  0,  0,  0,  0, 0, -1, 2, 10, STATE_FOLLOW },
1012     {   0,  0,  0,  0,  0, 0, -1, 2, 11, STATE_FOLLOW },
1013     {   0,  0, +4,  0,  0, 0, -1, 3,  0,  STATE_START },
1014     {   0,  0, -4,  0,  0, 0, -1, 3,  0,  STATE_START },
1015     {   0,  0, +1,  0,  0, 0, -1, 3,  2, STATE_FOLLOW },
1016     {   0,  0, +1,  0,  0, 0, -1, 3,  3, STATE_FOLLOW },
1017     {   0,  0, +1,  0,  0, 0, -1, 4,  1,   STATE_DATA },
1018     {   0,  0, +1,  0,  0, 0, -1, 5,  0,  STATE_START },
1019     {   0,  0, -1,  0,  0, 0, -1, 3,  2, STATE_FOLLOW },
1020     {   0,  0, -1,  0,  0, 0, -1, 3,  3, STATE_FOLLOW },
1021     {   0,  0, -1,  0,  0, 0, -1, 4,  1,   STATE_DATA },
1022     {   0,  0, -1,  0,  0, 0, -1, 5,  0,  STATE_START },
1023     {   0,  0,  0,  0,  0, 0, -1, 2, 12, STATE_FOLLOW },
1024     {   0,  0,  0,  0,  0, 0, -1, 2, 13, STATE_FOLLOW },
1025     {   0,  0, +5,  0,  0, 0, -1, 3,  0,  STATE_START },
1026     {   0,  0, -5,  0,  0, 0, -1, 3,  0,  STATE_START },
1027     {   0,  0,  0,  0,  0, 0, -1, 2, 14, STATE_FOLLOW },
1028     {   0,  0,  0,  0,  0, 0, -1, 2, 15, STATE_FOLLOW },
1029     {   0,  0, +6,  0,  0, 0, -1, 3,  0,  STATE_START },
1030     {   0,  0, -6,  0,  0, 0, -1, 3,  0,  STATE_START },
1031     {   0,  0, +2,  0,  0, 0, -1, 3,  2, STATE_FOLLOW },
1032     {   0,  0, +2,  0,  0, 0, -1, 3,  3, STATE_FOLLOW },
1033     {   0,  0, +2,  0,  0, 0, -1, 4,  1,   STATE_DATA },
1034     {   0,  0, +2,  0,  0, 0, -1, 5,  0,  STATE_START },
1035     {   0,  0, -2,  0,  0, 0, -1, 3,  2, STATE_FOLLOW },
1036     {   0,  0, -2,  0,  0, 0, -1, 3,  3, STATE_FOLLOW },
1037     {   0,  0, -2,  0,  0, 0, -1, 4,  1,   STATE_DATA },
1038     {   0,  0, -2,  0,  0, 0, -1, 5,  0,  STATE_START },
1039     {   0,  0,  0,  0,  0, 0, -1, 3,  4,   STATE_DATA },
1040     {   0,  0,  0,  0,  0, 0, -1, 3,  4,   STATE_SIGN },
1041     {   0,  0,  0,  0,  0, 0, -1, 3,  5,   STATE_DATA },
1042     {   0,  0,  0,  0,  0, 0, -1, 3,  5,   STATE_SIGN },
1043     {   0,  0,  0, +1,  0, 0, -1, 4,  1,   STATE_DATA },
1044     {   0,  0,  0, +1,  0, 0, -1, 5,  0,  STATE_START },
1045     {   0,  0,  0, -1,  0, 0, -1, 4,  1,   STATE_DATA },
1046     {   0,  0,  0, -1,  0, 0, -1, 5,  0,  STATE_START },
1047     {   0,  0,  0,  0,  0, 0, -1, 3,  6,   STATE_DATA },
1048     {   0,  0,  0,  0,  0, 0, -1, 3,  6,   STATE_SIGN },
1049     {   0,  0,  0,  0,  0, 0, -1, 3,  7,   STATE_DATA },
1050     {   0,  0,  0,  0,  0, 0, -1, 3,  7,   STATE_SIGN },
1051     {   0,  0,  0, +2,  0, 0, -1, 4,  1,   STATE_DATA },
1052     {   0,  0,  0, +2,  0, 0, -1, 5,  0,  STATE_START },
1053     {   0,  0,  0, -2,  0, 0, -1, 4,  1,   STATE_DATA },
1054     {   0,  0,  0, -2,  0, 0, -1, 5,  0,  STATE_START },
1055     {   0,  0,  0,  0,  0, 0, -1, 4,  4, STATE_FOLLOW },
1056     {   0,  0,  0,  0,  0, 0, -1, 4,  5, STATE_FOLLOW },
1057     {   0,  0,  0,  0, +1, 0, -1, 5,  0,  STATE_START },
1058     {   0,  0,  0,  0, -1, 0, -1, 5,  0,  STATE_START },
1059     {   0,  0,  0,  0,  0, 0, -1, 4,  6, STATE_FOLLOW },
1060     {   0,  0,  0,  0,  0, 0, -1, 4,  7, STATE_FOLLOW },
1061     {   0,  0,  0,  0, +2, 0, -1, 5,  0,  STATE_START },
1062     {   0,  0,  0,  0, -2, 0, -1, 5,  0,  STATE_START },
1063     {   0,  0,  0,  0,  0, 0, -1, 5,  2,   STATE_DATA },
1064     {   0,  0,  0,  0,  0, 0, -1, 5,  2,   STATE_SIGN },
1065     {   0,  0,  0,  0,  0, 0, -1, 5,  3,   STATE_DATA },
1066     {   0,  0,  0,  0,  0, 0, -1, 5,  3,   STATE_SIGN },
1067     {   0,  0,  0,  0,  0, 0, -1, 6,  2, STATE_FOLLOW },
1068     {   0,  0,  0,  0,  0, 0, -1, 6,  3, STATE_FOLLOW },
1069     {   0,  0,  0,  0,  0, 0, -1, 7,  1,   STATE_DATA },
1070     {   0,  0,  0,  0,  0, 0, -1, 8,  0,  STATE_START },
1071 };
1072
1073 #define PROCESS_VALS                                   \
1074     do {                                               \
1075         val  <<= lut.val0_bits;                        \
1076         val   |= lut.val0;                             \
1077         dst[0] = (val - 1) * lut.sign;                 \
1078         dst[1] = lut.val1;                             \
1079         dst[2] = lut.val2;                             \
1080         dst[3] = lut.val3;                             \
1081         dst[4] = lut.val4;                             \
1082         dst[5] = 0;                                    \
1083         dst[6] = 0;                                    \
1084         dst[7] = 0;                                    \
1085         if (lut.num)                                   \
1086             val = lut.val;                             \
1087         dst += lut.num;                                \
1088         if (dst >= last)                               \
1089             return coeffs;                             \
1090         lut = ff_dirac_golomb_lut[lut.state + *buf++]; \
1091     } while (0)
1092
1093 int ff_dirac_golomb_read_16bit(const uint8_t *buf, int bytes,
1094                                uint8_t *_dst, int coeffs)
1095 {
1096     LUTState lut = ff_dirac_golomb_lut[*buf++];
1097     int16_t *dst = (int16_t *)_dst, *last = dst + coeffs;
1098     uint16_t val = 0;
1099
1100     for (int i = 1; i < bytes; i++)
1101         PROCESS_VALS;
1102
1103     /* Reader needs to be flushed */
1104     PROCESS_VALS;
1105
1106     /* Still short of coeffs - try to guess and at least output what we have */
1107     if (lut.state != STATE_START)
1108         *dst++ = -((lut.state != STATE_SIGN ? (val << 1) | 1 : val) - 1);
1109
1110     return coeffs - (int)(last - dst);
1111 }
1112
1113 int ff_dirac_golomb_read_32bit(const uint8_t *buf, int bytes,
1114                                uint8_t *_dst, int coeffs)
1115 {
1116     LUTState lut = ff_dirac_golomb_lut[*buf++];
1117     int32_t *dst = (int32_t *)_dst, *last = dst + coeffs;
1118     uint32_t val = 0;
1119
1120     for (int i = 1; i < bytes; i++)
1121         PROCESS_VALS;
1122
1123     /* Reader needs to be flushed */
1124     PROCESS_VALS;
1125
1126     /* Still short of coeffs - try to guess and at least output what we have */
1127     if (lut.state != STATE_START)
1128         *dst++ = -((lut.state != STATE_SIGN ? (val << 1) | 1 : val) - 1);
1129
1130     return coeffs - (int)(last - dst);
1131 }