1 /* Generated by re2c 2.1.1 */
2 /*
3    +----------------------------------------------------------------------+
4    | Zend Engine                                                          |
5    +----------------------------------------------------------------------+
6    | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
7    +----------------------------------------------------------------------+
8    | This source file is subject to version 2.00 of the Zend license,     |
9    | that is bundled with this package in the file LICENSE, and is        |
10    | available through the world-wide-web at the following url:           |
11    | http://www.zend.com/license/2_00.txt.                                |
12    | If you did not receive a copy of the Zend license and are unable to  |
13    | obtain it through the world-wide-web, please send a note to          |
14    | license@zend.com so we can mail you a copy immediately.              |
15    +----------------------------------------------------------------------+
16    | Authors: Zeev Suraski <zeev@php.net>                                 |
17    |          Jani Taskinen <jani@php.net>                                |
18    |          Marcus Boerger <helly@php.net>                              |
19    |          Nuno Lopes <nlopess@php.net>                                |
20    |          Scott MacVicar <scottmac@php.net>                           |
21    +----------------------------------------------------------------------+
22 */
23 
24 #include <errno.h>
25 #include "zend.h"
26 #include "zend_API.h"
27 #include "zend_globals.h"
28 #include <zend_ini_parser.h>
29 #include "zend_ini_scanner.h"
30 
31 #ifdef YYDEBUG
32 #undef YYDEBUG
33 #endif
34 
35 #if 0
36 # define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c)
37 #else
38 # define YYDEBUG(s, c)
39 #endif
40 
41 #include "zend_ini_scanner_defs.h"
42 
43 #define YYCTYPE   unsigned char
44 /* allow the scanner to read one null byte after the end of the string (from ZEND_MMAP_AHEAD)
45  * so that if will be able to terminate to match the current token (e.g. non-enclosed string) */
46 #define YYFILL(n) { if (YYCURSOR > YYLIMIT) return 0; }
47 #define YYCURSOR  SCNG(yy_cursor)
48 #define YYLIMIT   SCNG(yy_limit)
49 #define YYMARKER  SCNG(yy_marker)
50 
51 #define YYGETCONDITION()  SCNG(yy_state)
52 #define YYSETCONDITION(s) SCNG(yy_state) = s
53 
54 #define STATE(name)  yyc##name
55 
56 /* emulate flex constructs */
57 #define BEGIN(state) YYSETCONDITION(STATE(state))
58 #define YYSTATE      YYGETCONDITION()
59 #define yytext       ((char*)SCNG(yy_text))
60 #define yyleng       SCNG(yy_leng)
61 #define yyless(x)    do {	YYCURSOR = (unsigned char*)yytext + x; \
62 							yyleng   = (unsigned int)x; } while(0)
63 
64 /* #define yymore()     goto yymore_restart */
65 
66 /* perform sanity check. If this message is triggered you should
67    increase the ZEND_MMAP_AHEAD value in the zend_streams.h file */
68 #define YYMAXFILL 6
69 
70 #if ZEND_MMAP_AHEAD < (YYMAXFILL + 1)
71 # error ZEND_MMAP_AHEAD should be greater than YYMAXFILL
72 #endif
73 
74 
75 /* How it works (for the core ini directives):
76  * ===========================================
77  *
78  * 1. Scanner scans file for tokens and passes them to parser.
79  * 2. Parser parses the tokens and passes the name/value pairs to the callback
80  *    function which stores them in the configuration hash table.
81  * 3. Later REGISTER_INI_ENTRIES() is called which triggers the actual
82  *    registering of ini entries and uses zend_get_configuration_directive()
83  *    to fetch the previously stored name/value pair from configuration hash table
84  *    and registers the static ini entries which match the name to the value
85  *    into EG(ini_directives) hash table.
86  * 4. PATH section entries are used per-request from down to top, each overriding
87  *    previous if one exists. zend_alter_ini_entry() is called for each entry.
88  *    Settings in PATH section are ZEND_INI_SYSTEM accessible and thus mimics the
89  *    php_admin_* directives used within Apache httpd.conf when PHP is compiled as
90  *    module for Apache.
91  * 5. User defined ini files (like .htaccess for apache) are parsed for each request and
92  *    stored in separate hash defined by SAPI.
93  */
94 
95 /* TODO: (ordered by importance :-)
96  * ===============================================================================
97  *
98  *  - Separate constant lookup totally from plain strings (using CONSTANT pattern)
99  *  - Add #if .. #else .. #endif and ==, !=, <, > , <=, >= operators
100  *  - Add #include "some.ini"
101  *  - Allow variables to refer to options also when using parse_ini_file()
102  *
103  */
104 
105 /* Globals Macros */
106 #define SCNG	INI_SCNG
107 #ifdef ZTS
108 ZEND_API ts_rsrc_id ini_scanner_globals_id;
109 ZEND_API size_t ini_scanner_globals_offset;
110 #else
111 ZEND_API zend_ini_scanner_globals ini_scanner_globals;
112 #endif
113 
114 #define ZEND_SYSTEM_INI CG(ini_parser_unbuffered_errors)
115 
116 /* Eat leading whitespace */
117 #define EAT_LEADING_WHITESPACE()                     \
118 	while (yyleng) {                                 \
119 		if (yytext[0] == ' ' || yytext[0] == '\t') { \
120 			SCNG(yy_text)++;                         \
121 			yyleng--;                                \
122 		} else {                                     \
123 			break;                                   \
124 		}                                            \
125 	}
126 
127 /* Eat trailing whitespace + extra char */
128 #define EAT_TRAILING_WHITESPACE_EX(ch)              \
129 	while (yyleng && (                              \
130 		(ch != 'X' && yytext[yyleng - 1] ==  ch) || \
131 		yytext[yyleng - 1] == '\n' ||               \
132 		yytext[yyleng - 1] == '\r' ||               \
133 		yytext[yyleng - 1] == '\t' ||               \
134 		yytext[yyleng - 1] == ' ')                  \
135 	) {                                             \
136 		yyleng--;                                   \
137 	}
138 
139 /* Eat trailing whitespace */
140 #define EAT_TRAILING_WHITESPACE()	EAT_TRAILING_WHITESPACE_EX('X')
141 
142 #define zend_ini_copy_value(retval, str, len)	\
143 	ZVAL_NEW_STR(retval, zend_string_init(str, len, ZEND_SYSTEM_INI))
144 
145 
146 #define RETURN_TOKEN(type, str, len) {                             \
147 	if (SCNG(scanner_mode) == ZEND_INI_SCANNER_TYPED &&            \
148 		(YYSTATE == STATE(ST_VALUE) || YYSTATE == STATE(ST_RAW))) {\
149 		zend_ini_copy_typed_value(ini_lval, type, str, len);       \
150 	} else {                                                       \
151 		zend_ini_copy_value(ini_lval, str, len);                   \
152 	}                                                              \
153 	return type;                                                   \
154 }
155 
convert_to_number(zval * retval,const char * str,const int str_len)156 static inline zend_result convert_to_number(zval *retval, const char *str, const int str_len)
157 {
158 	zend_uchar type;
159 	int overflow;
160 	zend_long lval;
161 	double dval;
162 
163 	if ((type = is_numeric_string_ex(str, str_len, &lval, &dval, 0, &overflow, NULL)) != 0) {
164 		if (type == IS_LONG) {
165 			ZVAL_LONG(retval, lval);
166 			return SUCCESS;
167 		} else if (type == IS_DOUBLE && !overflow) {
168 			ZVAL_DOUBLE(retval, dval);
169 			return SUCCESS;
170 		}
171 	}
172 
173 	return FAILURE;
174 }
175 
zend_ini_copy_typed_value(zval * retval,const int type,const char * str,int len)176 static void zend_ini_copy_typed_value(zval *retval, const int type, const char *str, int len)
177 {
178 	switch (type) {
179 		case BOOL_FALSE:
180 		case BOOL_TRUE:
181 			ZVAL_BOOL(retval, type == BOOL_TRUE);
182 			break;
183 
184 		case NULL_NULL:
185 			ZVAL_NULL(retval);
186 			break;
187 
188 		case TC_NUMBER:
189 			if (convert_to_number(retval, str, len) == SUCCESS) {
190 				break;
191 			}
192 			ZEND_FALLTHROUGH;
193 		default:
194 			zend_ini_copy_value(retval, str, len);
195 	}
196 }
197 
_yy_push_state(int new_state)198 static void _yy_push_state(int new_state)
199 {
200 	zend_stack_push(&SCNG(state_stack), (void *) &YYGETCONDITION());
201 	YYSETCONDITION(new_state);
202 }
203 
204 #define yy_push_state(state_and_tsrm) _yy_push_state(yyc##state_and_tsrm)
205 
yy_pop_state(void)206 static void yy_pop_state(void)
207 {
208 	int *stack_state = zend_stack_top(&SCNG(state_stack));
209 	YYSETCONDITION(*stack_state);
210 	zend_stack_del_top(&SCNG(state_stack));
211 }
212 
yy_scan_buffer(char * str,unsigned int len)213 static void yy_scan_buffer(char *str, unsigned int len)
214 {
215 	YYCURSOR = (YYCTYPE*)str;
216 	SCNG(yy_start) = YYCURSOR;
217 	YYLIMIT  = YYCURSOR + len;
218 }
219 
220 #define ini_filename SCNG(filename)
221 
222 /* {{{ init_ini_scanner() */
init_ini_scanner(int scanner_mode,zend_file_handle * fh)223 static zend_result init_ini_scanner(int scanner_mode, zend_file_handle *fh)
224 {
225 	/* Sanity check */
226 	if (scanner_mode != ZEND_INI_SCANNER_NORMAL && scanner_mode != ZEND_INI_SCANNER_RAW && scanner_mode != ZEND_INI_SCANNER_TYPED) {
227 		zend_error(E_WARNING, "Invalid scanner mode");
228 		return FAILURE;
229 	}
230 
231 	SCNG(lineno) = 1;
232 	SCNG(scanner_mode) = scanner_mode;
233 	SCNG(yy_in) = fh;
234 
235 	if (fh != NULL) {
236 		ini_filename = zend_string_copy(fh->filename);
237 	} else {
238 		ini_filename = NULL;
239 	}
240 
241 	zend_stack_init(&SCNG(state_stack), sizeof(int));
242 	BEGIN(INITIAL);
243 
244 	return SUCCESS;
245 }
246 /* }}} */
247 
248 /* {{{ shutdown_ini_scanner() */
shutdown_ini_scanner(void)249 void shutdown_ini_scanner(void)
250 {
251 	zend_stack_destroy(&SCNG(state_stack));
252 	if (ini_filename) {
253 		zend_string_release(ini_filename);
254 	}
255 }
256 /* }}} */
257 
258 /* {{{ zend_ini_scanner_get_lineno() */
zend_ini_scanner_get_lineno(void)259 ZEND_COLD int zend_ini_scanner_get_lineno(void)
260 {
261 	return SCNG(lineno);
262 }
263 /* }}} */
264 
265 /* {{{ zend_ini_scanner_get_filename() */
zend_ini_scanner_get_filename(void)266 ZEND_COLD char *zend_ini_scanner_get_filename(void)
267 {
268 	return ini_filename ? ZSTR_VAL(ini_filename) : "Unknown";
269 }
270 /* }}} */
271 
272 /* {{{ zend_ini_open_file_for_scanning() */
zend_ini_open_file_for_scanning(zend_file_handle * fh,int scanner_mode)273 zend_result zend_ini_open_file_for_scanning(zend_file_handle *fh, int scanner_mode)
274 {
275 	char *buf;
276 	size_t size;
277 
278 	if (zend_stream_fixup(fh, &buf, &size) == FAILURE) {
279 		return FAILURE;
280 	}
281 
282 	if (init_ini_scanner(scanner_mode, fh) == FAILURE) {
283 		return FAILURE;
284 	}
285 
286 	yy_scan_buffer(buf, (unsigned int)size);
287 
288 	return SUCCESS;
289 }
290 /* }}} */
291 
292 /* {{{ zend_ini_prepare_string_for_scanning() */
zend_ini_prepare_string_for_scanning(char * str,int scanner_mode)293 zend_result zend_ini_prepare_string_for_scanning(char *str, int scanner_mode)
294 {
295 	int len = (int)strlen(str);
296 
297 	if (init_ini_scanner(scanner_mode, NULL) == FAILURE) {
298 		return FAILURE;
299 	}
300 
301 	yy_scan_buffer(str, len);
302 
303 	return SUCCESS;
304 }
305 /* }}} */
306 
307 /* {{{ zend_ini_escape_string() */
zend_ini_escape_string(zval * lval,char * str,int len,char quote_type)308 static void zend_ini_escape_string(zval *lval, char *str, int len, char quote_type)
309 {
310 	char *s, *t;
311 	char *end;
312 
313 	zend_ini_copy_value(lval, str, len);
314 
315 	/* convert escape sequences */
316 	s = t = Z_STRVAL_P(lval);
317 	end = s + Z_STRLEN_P(lval);
318 
319 	while (s < end) {
320 		if (*s == '\\') {
321 			s++;
322 			if (s >= end) {
323 				*t++ = '\\';
324 				continue;
325 			}
326 			switch (*s) {
327 				case '"':
328 					if (*s != quote_type) {
329 						*t++ = '\\';
330 						*t++ = *s;
331 						break;
332 					}
333 					ZEND_FALLTHROUGH;
334 				case '\\':
335 				case '$':
336 					*t++ = *s;
337 					Z_STRLEN_P(lval)--;
338 					break;
339 				default:
340 					*t++ = '\\';
341 					*t++ = *s;
342 					break;
343 			}
344 		} else {
345 			*t++ = *s;
346 		}
347 		if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) {
348 			SCNG(lineno)++;
349 		}
350 		s++;
351 	}
352 	*t = 0;
353 }
354 /* }}} */
355 
ini_lex(zval * ini_lval)356 int ini_lex(zval *ini_lval)
357 {
358 restart:
359 	SCNG(yy_text) = YYCURSOR;
360 
361 /* yymore_restart: */
362 	/* detect EOF */
363 	if (YYCURSOR >= YYLIMIT) {
364 		if (YYSTATE == STATE(ST_VALUE) || YYSTATE == STATE(ST_RAW)) {
365 			BEGIN(INITIAL);
366 			return END_OF_LINE;
367 		}
368 		return 0;
369 	}
370 
371 	/* Eat any UTF-8 BOM we find in the first 3 bytes */
372 	if (YYCURSOR == SCNG(yy_start) && YYCURSOR + 3 < YYLIMIT) {
373 		if (memcmp(YYCURSOR, "\xef\xbb\xbf", 3) == 0) {
374 			YYCURSOR += 3;
375 			goto restart;
376 		}
377 	}
378 
379 {
380 	YYCTYPE yych;
381 	unsigned int yyaccept = 0;
382 	if (YYGETCONDITION() < 4) {
383 		if (YYGETCONDITION() < 2) {
384 			if (YYGETCONDITION() < 1) {
385 				goto yyc_INITIAL;
386 			} else {
387 				goto yyc_ST_OFFSET;
388 			}
389 		} else {
390 			if (YYGETCONDITION() < 3) {
391 				goto yyc_ST_SECTION_VALUE;
392 			} else {
393 				goto yyc_ST_VALUE;
394 			}
395 		}
396 	} else {
397 		if (YYGETCONDITION() < 6) {
398 			if (YYGETCONDITION() < 5) {
399 				goto yyc_ST_SECTION_RAW;
400 			} else {
401 				goto yyc_ST_DOUBLE_QUOTES;
402 			}
403 		} else {
404 			if (YYGETCONDITION() < 7) {
405 				goto yyc_ST_VARNAME;
406 			} else {
407 				goto yyc_ST_RAW;
408 			}
409 		}
410 	}
411 /* *********************************** */
412 yyc_INITIAL:
413 	{
414 		static const unsigned char yybm[] = {
415 			144, 144, 144, 144, 144, 144, 144, 144,
416 			144, 160,   0, 144, 144,   0, 144, 144,
417 			144, 144, 144, 144, 144, 144, 144, 144,
418 			144, 144, 144, 144, 144, 144, 144, 144,
419 			240, 128, 128, 144, 128, 144, 128, 144,
420 			128, 128, 144, 144, 144, 144, 144, 144,
421 			144, 144, 144, 144, 144, 144, 144, 144,
422 			144, 144, 144, 128, 144, 128, 144, 144,
423 			144, 144, 144, 144, 144, 144, 144, 144,
424 			144, 144, 144, 144, 144, 144, 144, 144,
425 			144, 144, 144, 144, 144, 144, 144, 144,
426 			144, 144, 144, 128, 144, 144, 128, 144,
427 			144, 144, 144, 144, 144, 144, 144, 144,
428 			144, 144, 144, 144, 144, 144, 144, 144,
429 			144, 144, 144, 144, 144, 144, 144, 144,
430 			144, 144, 144, 128, 128, 128, 128, 144,
431 			144, 144, 144, 144, 144, 144, 144, 144,
432 			144, 144, 144, 144, 144, 144, 144, 144,
433 			144, 144, 144, 144, 144, 144, 144, 144,
434 			144, 144, 144, 144, 144, 144, 144, 144,
435 			144, 144, 144, 144, 144, 144, 144, 144,
436 			144, 144, 144, 144, 144, 144, 144, 144,
437 			144, 144, 144, 144, 144, 144, 144, 144,
438 			144, 144, 144, 144, 144, 144, 144, 144,
439 			144, 144, 144, 144, 144, 144, 144, 144,
440 			144, 144, 144, 144, 144, 144, 144, 144,
441 			144, 144, 144, 144, 144, 144, 144, 144,
442 			144, 144, 144, 144, 144, 144, 144, 144,
443 			144, 144, 144, 144, 144, 144, 144, 144,
444 			144, 144, 144, 144, 144, 144, 144, 144,
445 			144, 144, 144, 144, 144, 144, 144, 144,
446 			144, 144, 144, 144, 144, 144, 144, 144,
447 		};
448 		YYDEBUG(0, *YYCURSOR);
449 		YYFILL(5);
450 		yych = *YYCURSOR;
451 		if (yybm[0+yych] & 64) {
452 			goto yy11;
453 		}
454 		switch (yych) {
455 		case '\t':	goto yy5;
456 		case '\n':	goto yy8;
457 		case '\r':	goto yy10;
458 		case ' ':
459 		case '!':
460 		case '"':
461 		case '$':
462 		case '&':
463 		case '(':
464 		case ')':
465 		case '^':
466 		case '{':
467 		case '|':
468 		case '}':
469 		case '~':	goto yy13;
470 		case ';':	goto yy15;
471 		case '=':	goto yy17;
472 		case 'F':
473 		case 'f':	goto yy20;
474 		case 'N':
475 		case 'n':	goto yy21;
476 		case 'O':
477 		case 'o':	goto yy22;
478 		case 'T':
479 		case 't':	goto yy23;
480 		case 'Y':
481 		case 'y':	goto yy24;
482 		case '[':	goto yy25;
483 		default:	goto yy2;
484 		}
485 yy2:
486 		YYDEBUG(2, *YYCURSOR);
487 		++YYCURSOR;
488 		YYFILL(1);
489 		yych = *YYCURSOR;
490 yy3:
491 		YYDEBUG(3, *YYCURSOR);
492 		if (yybm[0+yych] & 16) {
493 			goto yy2;
494 		}
495 		if (yych <= '=') goto yy4;
496 		if (yych <= '[') goto yy27;
497 yy4:
498 		YYDEBUG(4, *YYCURSOR);
499 		yyleng = YYCURSOR - SCNG(yy_text);
500 		{ /* Get option name */
501 	/* Eat leading whitespace */
502 	EAT_LEADING_WHITESPACE();
503 
504 	/* Eat trailing whitespace */
505 	EAT_TRAILING_WHITESPACE();
506 
507 	RETURN_TOKEN(TC_LABEL, yytext, yyleng);
508 }
509 yy5:
510 		YYDEBUG(5, *YYCURSOR);
511 		++YYCURSOR;
512 		YYFILL(2);
513 		yych = *YYCURSOR;
514 		YYDEBUG(6, *YYCURSOR);
515 		if (yybm[0+yych] & 32) {
516 			goto yy5;
517 		}
518 		if (yych <= '\r') {
519 			if (yych <= 0x08) goto yy7;
520 			if (yych <= '\n') goto yy8;
521 			if (yych >= '\r') goto yy10;
522 		} else {
523 			if (yych <= ';') {
524 				if (yych >= ';') goto yy15;
525 			} else {
526 				if (yych == '=') goto yy17;
527 			}
528 		}
529 yy7:
530 		YYDEBUG(7, *YYCURSOR);
531 		yyleng = YYCURSOR - SCNG(yy_text);
532 		{
533 	/* eat whitespace */
534 	goto restart;
535 }
536 yy8:
537 		YYDEBUG(8, *YYCURSOR);
538 		++YYCURSOR;
539 yy9:
540 		YYDEBUG(9, *YYCURSOR);
541 		yyleng = YYCURSOR - SCNG(yy_text);
542 		{
543 	SCNG(lineno)++;
544 	return END_OF_LINE;
545 }
546 yy10:
547 		YYDEBUG(10, *YYCURSOR);
548 		yych = *++YYCURSOR;
549 		if (yych == '\n') goto yy8;
550 		goto yy9;
551 yy11:
552 		YYDEBUG(11, *YYCURSOR);
553 		++YYCURSOR;
554 		YYFILL(2);
555 		yych = *YYCURSOR;
556 		YYDEBUG(12, *YYCURSOR);
557 		if (yybm[0+yych] & 64) {
558 			goto yy11;
559 		}
560 		if (yych <= '\'') {
561 			if (yych <= 0x1F) {
562 				if (yych <= '\n') {
563 					if (yych <= 0x08) goto yy2;
564 					if (yych <= '\t') goto yy5;
565 					goto yy8;
566 				} else {
567 					if (yych == '\r') goto yy10;
568 					goto yy2;
569 				}
570 			} else {
571 				if (yych <= '$') {
572 					if (yych == '#') goto yy2;
573 					goto yy4;
574 				} else {
575 					if (yych == '&') goto yy4;
576 					goto yy2;
577 				}
578 			}
579 		} else {
580 			if (yych <= 'Z') {
581 				if (yych <= ';') {
582 					if (yych <= ')') goto yy4;
583 					if (yych <= ':') goto yy2;
584 					goto yy15;
585 				} else {
586 					if (yych == '=') goto yy17;
587 					goto yy2;
588 				}
589 			} else {
590 				if (yych <= '^') {
591 					if (yych <= '[') goto yy27;
592 					if (yych <= ']') goto yy2;
593 					goto yy4;
594 				} else {
595 					if (yych <= 'z') goto yy2;
596 					if (yych <= '~') goto yy4;
597 					goto yy2;
598 				}
599 			}
600 		}
601 yy13:
602 		YYDEBUG(13, *YYCURSOR);
603 		++YYCURSOR;
604 		YYDEBUG(14, *YYCURSOR);
605 		yyleng = YYCURSOR - SCNG(yy_text);
606 		{ /* Disallow these chars outside option values */
607 	return yytext[0];
608 }
609 yy15:
610 		YYDEBUG(15, *YYCURSOR);
611 		++YYCURSOR;
612 		YYFILL(2);
613 		yych = *YYCURSOR;
614 		YYDEBUG(16, *YYCURSOR);
615 		if (yybm[0+yych] & 128) {
616 			goto yy15;
617 		}
618 		if (yych <= '\n') goto yy30;
619 		goto yy32;
620 yy17:
621 		YYDEBUG(17, *YYCURSOR);
622 		++YYCURSOR;
623 		YYFILL(1);
624 		yych = *YYCURSOR;
625 		YYDEBUG(18, *YYCURSOR);
626 		if (yych == '\t') goto yy17;
627 		if (yych == ' ') goto yy17;
628 		YYDEBUG(19, *YYCURSOR);
629 		yyleng = YYCURSOR - SCNG(yy_text);
630 		{ /* Start option value */
631 	if (SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW) {
632 		BEGIN(ST_RAW);
633 	} else {
634 		BEGIN(ST_VALUE);
635 	}
636 	return '=';
637 }
638 yy20:
639 		YYDEBUG(20, *YYCURSOR);
640 		yych = *++YYCURSOR;
641 		if (yych == 'A') goto yy33;
642 		if (yych == 'a') goto yy33;
643 		goto yy3;
644 yy21:
645 		YYDEBUG(21, *YYCURSOR);
646 		yych = *++YYCURSOR;
647 		if (yych <= 'U') {
648 			if (yych == 'O') goto yy34;
649 			if (yych <= 'T') goto yy3;
650 			goto yy36;
651 		} else {
652 			if (yych <= 'o') {
653 				if (yych <= 'n') goto yy3;
654 				goto yy34;
655 			} else {
656 				if (yych == 'u') goto yy36;
657 				goto yy3;
658 			}
659 		}
660 yy22:
661 		YYDEBUG(22, *YYCURSOR);
662 		yych = *++YYCURSOR;
663 		if (yych <= 'N') {
664 			if (yych == 'F') goto yy37;
665 			if (yych <= 'M') goto yy3;
666 			goto yy38;
667 		} else {
668 			if (yych <= 'f') {
669 				if (yych <= 'e') goto yy3;
670 				goto yy37;
671 			} else {
672 				if (yych == 'n') goto yy38;
673 				goto yy3;
674 			}
675 		}
676 yy23:
677 		YYDEBUG(23, *YYCURSOR);
678 		yych = *++YYCURSOR;
679 		if (yych == 'R') goto yy41;
680 		if (yych == 'r') goto yy41;
681 		goto yy3;
682 yy24:
683 		YYDEBUG(24, *YYCURSOR);
684 		yych = *++YYCURSOR;
685 		if (yych == 'E') goto yy42;
686 		if (yych == 'e') goto yy42;
687 		goto yy3;
688 yy25:
689 		YYDEBUG(25, *YYCURSOR);
690 		++YYCURSOR;
691 		YYDEBUG(26, *YYCURSOR);
692 		yyleng = YYCURSOR - SCNG(yy_text);
693 		{ /* Section start */
694 	/* Enter section data lookup state */
695 	if (SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW) {
696 		BEGIN(ST_SECTION_RAW);
697 	} else {
698 		BEGIN(ST_SECTION_VALUE);
699 	}
700 	return TC_SECTION;
701 }
702 yy27:
703 		YYDEBUG(27, *YYCURSOR);
704 		++YYCURSOR;
705 		YYFILL(1);
706 		yych = *YYCURSOR;
707 		YYDEBUG(28, *YYCURSOR);
708 		if (yych == '\t') goto yy27;
709 		if (yych == ' ') goto yy27;
710 		YYDEBUG(29, *YYCURSOR);
711 		yyleng = YYCURSOR - SCNG(yy_text);
712 		{ /* Start of option with offset */
713 	/* Eat leading whitespace */
714 	EAT_LEADING_WHITESPACE();
715 
716 	/* Eat trailing whitespace and [ */
717 	EAT_TRAILING_WHITESPACE_EX('[');
718 
719 	/* Enter offset lookup state */
720 	BEGIN(ST_OFFSET);
721 
722 	RETURN_TOKEN(TC_OFFSET, yytext, yyleng);
723 }
724 yy30:
725 		YYDEBUG(30, *YYCURSOR);
726 		++YYCURSOR;
727 yy31:
728 		YYDEBUG(31, *YYCURSOR);
729 		yyleng = YYCURSOR - SCNG(yy_text);
730 		{ /* Comment */
731 	BEGIN(INITIAL);
732 	SCNG(lineno)++;
733 	return END_OF_LINE;
734 }
735 yy32:
736 		YYDEBUG(32, *YYCURSOR);
737 		yych = *++YYCURSOR;
738 		if (yych == '\n') goto yy30;
739 		goto yy31;
740 yy33:
741 		YYDEBUG(33, *YYCURSOR);
742 		yych = *++YYCURSOR;
743 		if (yych == 'L') goto yy43;
744 		if (yych == 'l') goto yy43;
745 		goto yy3;
746 yy34:
747 		YYDEBUG(34, *YYCURSOR);
748 		yych = *++YYCURSOR;
749 		if (yych <= '\'') {
750 			if (yych <= 0x1F) {
751 				if (yych <= '\n') {
752 					if (yych <= 0x08) goto yy3;
753 					if (yych <= '\t') goto yy44;
754 				} else {
755 					if (yych != '\r') goto yy3;
756 				}
757 			} else {
758 				if (yych <= '#') {
759 					if (yych <= ' ') goto yy46;
760 					if (yych >= '#') goto yy3;
761 				} else {
762 					if (yych == '%') goto yy3;
763 					if (yych >= '\'') goto yy3;
764 				}
765 			}
766 		} else {
767 			if (yych <= 'N') {
768 				if (yych <= ';') {
769 					if (yych <= ')') goto yy35;
770 					if (yych <= ':') goto yy3;
771 				} else {
772 					if (yych == '=') goto yy35;
773 					if (yych <= 'M') goto yy3;
774 					goto yy48;
775 				}
776 			} else {
777 				if (yych <= 'm') {
778 					if (yych != '^') goto yy3;
779 				} else {
780 					if (yych <= 'n') goto yy48;
781 					if (yych <= 'z') goto yy3;
782 					if (yych >= 0x7F) goto yy3;
783 				}
784 			}
785 		}
786 yy35:
787 		YYDEBUG(35, *YYCURSOR);
788 		yyleng = YYCURSOR - SCNG(yy_text);
789 		{ /* FALSE value (when used outside option value/offset this causes parse error!)*/
790 	RETURN_TOKEN(BOOL_FALSE, "", 0);
791 }
792 yy36:
793 		YYDEBUG(36, *YYCURSOR);
794 		yych = *++YYCURSOR;
795 		if (yych == 'L') goto yy49;
796 		if (yych == 'l') goto yy49;
797 		goto yy3;
798 yy37:
799 		YYDEBUG(37, *YYCURSOR);
800 		yych = *++YYCURSOR;
801 		if (yych == 'F') goto yy46;
802 		if (yych == 'f') goto yy46;
803 		goto yy3;
804 yy38:
805 		YYDEBUG(38, *YYCURSOR);
806 		++YYCURSOR;
807 		YYFILL(1);
808 		yych = *YYCURSOR;
809 		YYDEBUG(39, *YYCURSOR);
810 		if (yych <= '&') {
811 			if (yych <= 0x1F) {
812 				if (yych <= '\n') {
813 					if (yych <= 0x08) goto yy2;
814 					if (yych <= '\t') goto yy50;
815 				} else {
816 					if (yych != '\r') goto yy2;
817 				}
818 			} else {
819 				if (yych <= '#') {
820 					if (yych <= ' ') goto yy38;
821 					if (yych >= '#') goto yy2;
822 				} else {
823 					if (yych == '%') goto yy2;
824 				}
825 			}
826 		} else {
827 			if (yych <= '=') {
828 				if (yych <= ':') {
829 					if (yych <= '\'') goto yy2;
830 					if (yych >= '*') goto yy2;
831 				} else {
832 					if (yych == '<') goto yy2;
833 				}
834 			} else {
835 				if (yych <= ']') {
836 					if (yych == '[') goto yy27;
837 					goto yy2;
838 				} else {
839 					if (yych <= '^') goto yy40;
840 					if (yych <= 'z') goto yy2;
841 					if (yych >= 0x7F) goto yy2;
842 				}
843 			}
844 		}
845 yy40:
846 		YYDEBUG(40, *YYCURSOR);
847 		yyleng = YYCURSOR - SCNG(yy_text);
848 		{ /* TRUE value (when used outside option value/offset this causes parse error!) */
849 	RETURN_TOKEN(BOOL_TRUE, "1", 1);
850 }
851 yy41:
852 		YYDEBUG(41, *YYCURSOR);
853 		yych = *++YYCURSOR;
854 		if (yych == 'U') goto yy52;
855 		if (yych == 'u') goto yy52;
856 		goto yy3;
857 yy42:
858 		YYDEBUG(42, *YYCURSOR);
859 		yych = *++YYCURSOR;
860 		if (yych == 'S') goto yy38;
861 		if (yych == 's') goto yy38;
862 		goto yy3;
863 yy43:
864 		YYDEBUG(43, *YYCURSOR);
865 		yych = *++YYCURSOR;
866 		if (yych == 'S') goto yy48;
867 		if (yych == 's') goto yy48;
868 		goto yy3;
869 yy44:
870 		YYDEBUG(44, *YYCURSOR);
871 		++YYCURSOR;
872 		YYFILL(1);
873 		yych = *YYCURSOR;
874 		YYDEBUG(45, *YYCURSOR);
875 		if (yych == '\t') goto yy44;
876 		if (yych == ' ') goto yy44;
877 		goto yy35;
878 yy46:
879 		YYDEBUG(46, *YYCURSOR);
880 		++YYCURSOR;
881 		YYFILL(1);
882 		yych = *YYCURSOR;
883 		YYDEBUG(47, *YYCURSOR);
884 		if (yych <= '&') {
885 			if (yych <= 0x1F) {
886 				if (yych <= '\n') {
887 					if (yych <= 0x08) goto yy2;
888 					if (yych <= '\t') goto yy44;
889 					goto yy35;
890 				} else {
891 					if (yych == '\r') goto yy35;
892 					goto yy2;
893 				}
894 			} else {
895 				if (yych <= '#') {
896 					if (yych <= ' ') goto yy46;
897 					if (yych <= '"') goto yy35;
898 					goto yy2;
899 				} else {
900 					if (yych == '%') goto yy2;
901 					goto yy35;
902 				}
903 			}
904 		} else {
905 			if (yych <= '=') {
906 				if (yych <= ':') {
907 					if (yych <= '\'') goto yy2;
908 					if (yych <= ')') goto yy35;
909 					goto yy2;
910 				} else {
911 					if (yych == '<') goto yy2;
912 					goto yy35;
913 				}
914 			} else {
915 				if (yych <= ']') {
916 					if (yych == '[') goto yy27;
917 					goto yy2;
918 				} else {
919 					if (yych <= '^') goto yy35;
920 					if (yych <= 'z') goto yy2;
921 					if (yych <= '~') goto yy35;
922 					goto yy2;
923 				}
924 			}
925 		}
926 yy48:
927 		YYDEBUG(48, *YYCURSOR);
928 		yych = *++YYCURSOR;
929 		if (yych == 'E') goto yy46;
930 		if (yych == 'e') goto yy46;
931 		goto yy3;
932 yy49:
933 		YYDEBUG(49, *YYCURSOR);
934 		yych = *++YYCURSOR;
935 		if (yych == 'L') goto yy53;
936 		if (yych == 'l') goto yy53;
937 		goto yy3;
938 yy50:
939 		YYDEBUG(50, *YYCURSOR);
940 		++YYCURSOR;
941 		YYFILL(1);
942 		yych = *YYCURSOR;
943 		YYDEBUG(51, *YYCURSOR);
944 		if (yych == '\t') goto yy50;
945 		if (yych == ' ') goto yy50;
946 		goto yy40;
947 yy52:
948 		YYDEBUG(52, *YYCURSOR);
949 		yych = *++YYCURSOR;
950 		if (yych == 'E') goto yy38;
951 		if (yych == 'e') goto yy38;
952 		goto yy3;
953 yy53:
954 		YYDEBUG(53, *YYCURSOR);
955 		++YYCURSOR;
956 		YYFILL(1);
957 		yych = *YYCURSOR;
958 		YYDEBUG(54, *YYCURSOR);
959 		if (yych <= '&') {
960 			if (yych <= 0x1F) {
961 				if (yych <= '\n') {
962 					if (yych <= 0x08) goto yy2;
963 					if (yych <= '\t') goto yy56;
964 				} else {
965 					if (yych != '\r') goto yy2;
966 				}
967 			} else {
968 				if (yych <= '#') {
969 					if (yych <= ' ') goto yy53;
970 					if (yych >= '#') goto yy2;
971 				} else {
972 					if (yych == '%') goto yy2;
973 				}
974 			}
975 		} else {
976 			if (yych <= '=') {
977 				if (yych <= ':') {
978 					if (yych <= '\'') goto yy2;
979 					if (yych >= '*') goto yy2;
980 				} else {
981 					if (yych == '<') goto yy2;
982 				}
983 			} else {
984 				if (yych <= ']') {
985 					if (yych == '[') goto yy27;
986 					goto yy2;
987 				} else {
988 					if (yych <= '^') goto yy55;
989 					if (yych <= 'z') goto yy2;
990 					if (yych >= 0x7F) goto yy2;
991 				}
992 			}
993 		}
994 yy55:
995 		YYDEBUG(55, *YYCURSOR);
996 		yyleng = YYCURSOR - SCNG(yy_text);
997 		{
998 	RETURN_TOKEN(NULL_NULL, "", 0);
999 }
1000 yy56:
1001 		YYDEBUG(56, *YYCURSOR);
1002 		++YYCURSOR;
1003 		YYFILL(1);
1004 		yych = *YYCURSOR;
1005 		YYDEBUG(57, *YYCURSOR);
1006 		if (yych == '\t') goto yy56;
1007 		if (yych == ' ') goto yy56;
1008 		goto yy55;
1009 	}
1010 /* *********************************** */
1011 yyc_ST_OFFSET:
1012 	{
1013 		static const unsigned char yybm[] = {
1014 			132, 132, 132, 132, 132, 132, 132, 132,
1015 			132, 140, 128, 132, 132, 128, 132, 132,
1016 			132, 132, 132, 132, 132, 132, 132, 132,
1017 			132, 132, 132, 132, 132, 132, 132, 132,
1018 			140, 132, 128, 132, 192, 132, 132,   0,
1019 			132, 132, 132, 132, 132, 132, 132, 132,
1020 			180, 180, 180, 180, 180, 180, 180, 180,
1021 			180, 180, 132, 128, 132, 132, 132, 132,
1022 			132, 164, 164, 164, 164, 164, 164, 164,
1023 			164, 164, 164, 164, 164, 164, 164, 164,
1024 			164, 164, 164, 164, 164, 164, 164, 164,
1025 			164, 164, 164, 132, 192, 128, 132, 164,
1026 			132, 164, 164, 164, 164, 164, 164, 164,
1027 			164, 164, 164, 164, 164, 164, 164, 164,
1028 			164, 164, 164, 164, 164, 164, 164, 164,
1029 			164, 164, 164, 132, 132, 132, 132, 132,
1030 			132, 132, 132, 132, 132, 132, 132, 132,
1031 			132, 132, 132, 132, 132, 132, 132, 132,
1032 			132, 132, 132, 132, 132, 132, 132, 132,
1033 			132, 132, 132, 132, 132, 132, 132, 132,
1034 			132, 132, 132, 132, 132, 132, 132, 132,
1035 			132, 132, 132, 132, 132, 132, 132, 132,
1036 			132, 132, 132, 132, 132, 132, 132, 132,
1037 			132, 132, 132, 132, 132, 132, 132, 132,
1038 			132, 132, 132, 132, 132, 132, 132, 132,
1039 			132, 132, 132, 132, 132, 132, 132, 132,
1040 			132, 132, 132, 132, 132, 132, 132, 132,
1041 			132, 132, 132, 132, 132, 132, 132, 132,
1042 			132, 132, 132, 132, 132, 132, 132, 132,
1043 			132, 132, 132, 132, 132, 132, 132, 132,
1044 			132, 132, 132, 132, 132, 132, 132, 132,
1045 			132, 132, 132, 132, 132, 132, 132, 132,
1046 		};
1047 		YYDEBUG(58, *YYCURSOR);
1048 		YYFILL(2);
1049 		yych = *YYCURSOR;
1050 		if (yybm[0+yych] & 8) {
1051 			goto yy63;
1052 		}
1053 		if (yych <= '/') {
1054 			if (yych <= '"') {
1055 				if (yych <= '\f') {
1056 					if (yych <= 0x08) goto yy60;
1057 					if (yych <= '\n') goto yy65;
1058 				} else {
1059 					if (yych <= '\r') goto yy65;
1060 					if (yych >= '"') goto yy67;
1061 				}
1062 			} else {
1063 				if (yych <= '&') {
1064 					if (yych == '$') goto yy69;
1065 				} else {
1066 					if (yych <= '\'') goto yy70;
1067 					if (yych <= ',') goto yy60;
1068 					if (yych <= '.') goto yy71;
1069 				}
1070 			}
1071 		} else {
1072 			if (yych <= '[') {
1073 				if (yych <= ';') {
1074 					if (yych <= '9') goto yy72;
1075 					if (yych >= ';') goto yy65;
1076 				} else {
1077 					if (yych <= '@') goto yy60;
1078 					if (yych <= 'Z') goto yy75;
1079 				}
1080 			} else {
1081 				if (yych <= '^') {
1082 					if (yych <= '\\') goto yy78;
1083 					if (yych <= ']') goto yy79;
1084 				} else {
1085 					if (yych == '`') goto yy60;
1086 					if (yych <= 'z') goto yy75;
1087 				}
1088 			}
1089 		}
1090 yy60:
1091 		YYDEBUG(60, *YYCURSOR);
1092 		yyaccept = 0;
1093 		YYMARKER = ++YYCURSOR;
1094 		YYFILL(1);
1095 		yych = *YYCURSOR;
1096 yy61:
1097 		YYDEBUG(61, *YYCURSOR);
1098 		if (yybm[0+yych] & 4) {
1099 			goto yy60;
1100 		}
1101 		if (yych <= '"') goto yy62;
1102 		if (yych <= '$') goto yy81;
1103 		if (yych <= ';') goto yy62;
1104 		if (yych <= '\\') goto yy78;
1105 yy62:
1106 		YYDEBUG(62, *YYCURSOR);
1107 		yyleng = YYCURSOR - SCNG(yy_text);
1108 		{ /* Get rest as section/offset value */
1109 	RETURN_TOKEN(TC_STRING, yytext, yyleng);
1110 }
1111 yy63:
1112 		YYDEBUG(63, *YYCURSOR);
1113 		yyaccept = 0;
1114 		YYMARKER = ++YYCURSOR;
1115 		YYFILL(1);
1116 		yych = *YYCURSOR;
1117 		YYDEBUG(64, *YYCURSOR);
1118 		if (yybm[0+yych] & 8) {
1119 			goto yy63;
1120 		}
1121 		if (yych <= '$') {
1122 			if (yych <= '\r') {
1123 				if (yych <= 0x08) goto yy60;
1124 				if (yych <= '\n') goto yy62;
1125 				if (yych <= '\f') goto yy60;
1126 				goto yy62;
1127 			} else {
1128 				if (yych == '"') goto yy67;
1129 				if (yych <= '#') goto yy60;
1130 				goto yy81;
1131 			}
1132 		} else {
1133 			if (yych <= ';') {
1134 				if (yych == '\'') goto yy62;
1135 				if (yych <= ':') goto yy60;
1136 				goto yy62;
1137 			} else {
1138 				if (yych <= '[') goto yy60;
1139 				if (yych <= '\\') goto yy78;
1140 				if (yych <= ']') goto yy79;
1141 				goto yy60;
1142 			}
1143 		}
1144 yy65:
1145 		YYDEBUG(65, *YYCURSOR);
1146 		++YYCURSOR;
1147 yy66:
1148 		YYDEBUG(66, *YYCURSOR);
1149 		yyleng = YYCURSOR - SCNG(yy_text);
1150 		{
1151 	return 0;
1152 }
1153 yy67:
1154 		YYDEBUG(67, *YYCURSOR);
1155 		++YYCURSOR;
1156 		YYDEBUG(68, *YYCURSOR);
1157 		yyleng = YYCURSOR - SCNG(yy_text);
1158 		{ /* Double quoted '"' string start */
1159 	yy_push_state(ST_DOUBLE_QUOTES);
1160 	return '"';
1161 }
1162 yy69:
1163 		YYDEBUG(69, *YYCURSOR);
1164 		yych = *++YYCURSOR;
1165 		if (yych <= '\\') {
1166 			if (yych <= 0x00) goto yy66;
1167 			if (yych <= '[') goto yy60;
1168 			goto yy83;
1169 		} else {
1170 			if (yych == '{') goto yy85;
1171 			goto yy60;
1172 		}
1173 yy70:
1174 		YYDEBUG(70, *YYCURSOR);
1175 		yych = *++YYCURSOR;
1176 		if (yybm[0+yych] & 128) {
1177 			goto yy87;
1178 		}
1179 		goto yy66;
1180 yy71:
1181 		YYDEBUG(71, *YYCURSOR);
1182 		yyaccept = 0;
1183 		yych = *(YYMARKER = ++YYCURSOR);
1184 		if (yych <= '/') goto yy61;
1185 		if (yych <= '9') goto yy89;
1186 		goto yy61;
1187 yy72:
1188 		YYDEBUG(72, *YYCURSOR);
1189 		yyaccept = 1;
1190 		YYMARKER = ++YYCURSOR;
1191 		YYFILL(1);
1192 		yych = *YYCURSOR;
1193 		YYDEBUG(73, *YYCURSOR);
1194 		if (yybm[0+yych] & 16) {
1195 			goto yy72;
1196 		}
1197 		if (yych <= '&') {
1198 			if (yych <= '\r') {
1199 				if (yych == '\n') goto yy74;
1200 				if (yych <= '\f') goto yy60;
1201 			} else {
1202 				if (yych <= '"') {
1203 					if (yych <= '!') goto yy60;
1204 				} else {
1205 					if (yych == '$') goto yy81;
1206 					goto yy60;
1207 				}
1208 			}
1209 		} else {
1210 			if (yych <= ':') {
1211 				if (yych <= '\'') goto yy74;
1212 				if (yych == '.') goto yy89;
1213 				goto yy60;
1214 			} else {
1215 				if (yych <= '[') {
1216 					if (yych >= '<') goto yy60;
1217 				} else {
1218 					if (yych <= '\\') goto yy78;
1219 					if (yych >= '^') goto yy60;
1220 				}
1221 			}
1222 		}
1223 yy74:
1224 		YYDEBUG(74, *YYCURSOR);
1225 		yyleng = YYCURSOR - SCNG(yy_text);
1226 		{ /* Get number option value as string */
1227 	RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
1228 }
1229 yy75:
1230 		YYDEBUG(75, *YYCURSOR);
1231 		yyaccept = 2;
1232 		YYMARKER = ++YYCURSOR;
1233 		YYFILL(1);
1234 		yych = *YYCURSOR;
1235 		YYDEBUG(76, *YYCURSOR);
1236 		if (yybm[0+yych] & 32) {
1237 			goto yy75;
1238 		}
1239 		if (yych <= '$') {
1240 			if (yych <= '\r') {
1241 				if (yych == '\n') goto yy77;
1242 				if (yych <= '\f') goto yy60;
1243 			} else {
1244 				if (yych == '"') goto yy77;
1245 				if (yych <= '#') goto yy60;
1246 				goto yy81;
1247 			}
1248 		} else {
1249 			if (yych <= ';') {
1250 				if (yych == '\'') goto yy77;
1251 				if (yych <= ':') goto yy60;
1252 			} else {
1253 				if (yych <= '[') goto yy60;
1254 				if (yych <= '\\') goto yy78;
1255 				if (yych >= '^') goto yy60;
1256 			}
1257 		}
1258 yy77:
1259 		YYDEBUG(77, *YYCURSOR);
1260 		yyleng = YYCURSOR - SCNG(yy_text);
1261 		{ /* Get constant option value */
1262 	RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
1263 }
1264 yy78:
1265 		YYDEBUG(78, *YYCURSOR);
1266 		++YYCURSOR;
1267 		YYFILL(1);
1268 		yych = *YYCURSOR;
1269 		goto yy60;
1270 yy79:
1271 		YYDEBUG(79, *YYCURSOR);
1272 		++YYCURSOR;
1273 		YYDEBUG(80, *YYCURSOR);
1274 		yyleng = YYCURSOR - SCNG(yy_text);
1275 		{ /* End of section or an option offset */
1276 	BEGIN(INITIAL);
1277 	return ']';
1278 }
1279 yy81:
1280 		YYDEBUG(81, *YYCURSOR);
1281 		++YYCURSOR;
1282 		YYFILL(1);
1283 		yych = *YYCURSOR;
1284 		if (yych <= '\\') {
1285 			if (yych <= 0x00) goto yy82;
1286 			if (yych <= '[') goto yy60;
1287 			goto yy83;
1288 		} else {
1289 			if (yych != '{') goto yy60;
1290 		}
1291 yy82:
1292 		YYDEBUG(82, *YYCURSOR);
1293 		YYCURSOR = YYMARKER;
1294 		if (yyaccept <= 1) {
1295 			if (yyaccept == 0) {
1296 				goto yy62;
1297 			} else {
1298 				goto yy74;
1299 			}
1300 		} else {
1301 			goto yy77;
1302 		}
1303 yy83:
1304 		YYDEBUG(83, *YYCURSOR);
1305 		++YYCURSOR;
1306 		YYFILL(1);
1307 		yych = *YYCURSOR;
1308 		YYDEBUG(84, *YYCURSOR);
1309 		if (yybm[0+yych] & 64) {
1310 			goto yy83;
1311 		}
1312 		goto yy60;
1313 yy85:
1314 		YYDEBUG(85, *YYCURSOR);
1315 		++YYCURSOR;
1316 		YYDEBUG(86, *YYCURSOR);
1317 		yyleng = YYCURSOR - SCNG(yy_text);
1318 		{ /* Variable start */
1319 	yy_push_state(ST_VARNAME);
1320 	return TC_DOLLAR_CURLY;
1321 }
1322 yy87:
1323 		YYDEBUG(87, *YYCURSOR);
1324 		++YYCURSOR;
1325 		YYFILL(1);
1326 		yych = *YYCURSOR;
1327 		YYDEBUG(88, *YYCURSOR);
1328 		if (yybm[0+yych] & 128) {
1329 			goto yy87;
1330 		}
1331 		goto yy91;
1332 yy89:
1333 		YYDEBUG(89, *YYCURSOR);
1334 		yyaccept = 1;
1335 		YYMARKER = ++YYCURSOR;
1336 		YYFILL(1);
1337 		yych = *YYCURSOR;
1338 		YYDEBUG(90, *YYCURSOR);
1339 		if (yych <= '&') {
1340 			if (yych <= '\r') {
1341 				if (yych == '\n') goto yy74;
1342 				if (yych <= '\f') goto yy60;
1343 				goto yy74;
1344 			} else {
1345 				if (yych <= '"') {
1346 					if (yych <= '!') goto yy60;
1347 					goto yy74;
1348 				} else {
1349 					if (yych == '$') goto yy81;
1350 					goto yy60;
1351 				}
1352 			}
1353 		} else {
1354 			if (yych <= ':') {
1355 				if (yych <= '\'') goto yy74;
1356 				if (yych <= '/') goto yy60;
1357 				if (yych <= '9') goto yy89;
1358 				goto yy60;
1359 			} else {
1360 				if (yych <= '[') {
1361 					if (yych <= ';') goto yy74;
1362 					goto yy60;
1363 				} else {
1364 					if (yych <= '\\') goto yy78;
1365 					if (yych <= ']') goto yy74;
1366 					goto yy60;
1367 				}
1368 			}
1369 		}
1370 yy91:
1371 		YYDEBUG(91, *YYCURSOR);
1372 		++YYCURSOR;
1373 		YYDEBUG(92, *YYCURSOR);
1374 		yyleng = YYCURSOR - SCNG(yy_text);
1375 		{ /* Raw string */
1376 	/* Eat leading and trailing single quotes */
1377 	if (yytext[0] == '\'' && yytext[yyleng - 1] == '\'') {
1378 		SCNG(yy_text)++;
1379 		yyleng = yyleng - 2;
1380 	}
1381 	RETURN_TOKEN(TC_RAW, yytext, yyleng);
1382 }
1383 	}
1384 /* *********************************** */
1385 yyc_ST_SECTION_VALUE:
1386 	{
1387 		static const unsigned char yybm[] = {
1388 			132, 132, 132, 132, 132, 132, 132, 132,
1389 			132, 140, 128, 132, 132, 128, 132, 132,
1390 			132, 132, 132, 132, 132, 132, 132, 132,
1391 			132, 132, 132, 132, 132, 132, 132, 132,
1392 			140, 132, 128, 132, 192, 132, 132,   0,
1393 			132, 132, 132, 132, 132, 132, 132, 132,
1394 			180, 180, 180, 180, 180, 180, 180, 180,
1395 			180, 180, 132, 128, 132, 132, 132, 132,
1396 			132, 164, 164, 164, 164, 164, 164, 164,
1397 			164, 164, 164, 164, 164, 164, 164, 164,
1398 			164, 164, 164, 164, 164, 164, 164, 164,
1399 			164, 164, 164, 132, 192, 128, 132, 164,
1400 			132, 164, 164, 164, 164, 164, 164, 164,
1401 			164, 164, 164, 164, 164, 164, 164, 164,
1402 			164, 164, 164, 164, 164, 164, 164, 164,
1403 			164, 164, 164, 132, 132, 132, 132, 132,
1404 			132, 132, 132, 132, 132, 132, 132, 132,
1405 			132, 132, 132, 132, 132, 132, 132, 132,
1406 			132, 132, 132, 132, 132, 132, 132, 132,
1407 			132, 132, 132, 132, 132, 132, 132, 132,
1408 			132, 132, 132, 132, 132, 132, 132, 132,
1409 			132, 132, 132, 132, 132, 132, 132, 132,
1410 			132, 132, 132, 132, 132, 132, 132, 132,
1411 			132, 132, 132, 132, 132, 132, 132, 132,
1412 			132, 132, 132, 132, 132, 132, 132, 132,
1413 			132, 132, 132, 132, 132, 132, 132, 132,
1414 			132, 132, 132, 132, 132, 132, 132, 132,
1415 			132, 132, 132, 132, 132, 132, 132, 132,
1416 			132, 132, 132, 132, 132, 132, 132, 132,
1417 			132, 132, 132, 132, 132, 132, 132, 132,
1418 			132, 132, 132, 132, 132, 132, 132, 132,
1419 			132, 132, 132, 132, 132, 132, 132, 132,
1420 		};
1421 		YYDEBUG(93, *YYCURSOR);
1422 		YYFILL(2);
1423 		yych = *YYCURSOR;
1424 		if (yybm[0+yych] & 8) {
1425 			goto yy98;
1426 		}
1427 		if (yych <= '/') {
1428 			if (yych <= '"') {
1429 				if (yych <= '\f') {
1430 					if (yych <= 0x08) goto yy95;
1431 					if (yych <= '\n') goto yy100;
1432 				} else {
1433 					if (yych <= '\r') goto yy100;
1434 					if (yych >= '"') goto yy102;
1435 				}
1436 			} else {
1437 				if (yych <= '&') {
1438 					if (yych == '$') goto yy104;
1439 				} else {
1440 					if (yych <= '\'') goto yy105;
1441 					if (yych <= ',') goto yy95;
1442 					if (yych <= '.') goto yy106;
1443 				}
1444 			}
1445 		} else {
1446 			if (yych <= '[') {
1447 				if (yych <= ';') {
1448 					if (yych <= '9') goto yy107;
1449 					if (yych >= ';') goto yy100;
1450 				} else {
1451 					if (yych <= '@') goto yy95;
1452 					if (yych <= 'Z') goto yy110;
1453 				}
1454 			} else {
1455 				if (yych <= '^') {
1456 					if (yych <= '\\') goto yy113;
1457 					if (yych <= ']') goto yy114;
1458 				} else {
1459 					if (yych == '`') goto yy95;
1460 					if (yych <= 'z') goto yy110;
1461 				}
1462 			}
1463 		}
1464 yy95:
1465 		YYDEBUG(95, *YYCURSOR);
1466 		yyaccept = 0;
1467 		YYMARKER = ++YYCURSOR;
1468 		YYFILL(1);
1469 		yych = *YYCURSOR;
1470 yy96:
1471 		YYDEBUG(96, *YYCURSOR);
1472 		if (yybm[0+yych] & 4) {
1473 			goto yy95;
1474 		}
1475 		if (yych <= '"') goto yy97;
1476 		if (yych <= '$') goto yy117;
1477 		if (yych <= ';') goto yy97;
1478 		if (yych <= '\\') goto yy113;
1479 yy97:
1480 		YYDEBUG(97, *YYCURSOR);
1481 		yyleng = YYCURSOR - SCNG(yy_text);
1482 		{ /* Get rest as section/offset value */
1483 	RETURN_TOKEN(TC_STRING, yytext, yyleng);
1484 }
1485 yy98:
1486 		YYDEBUG(98, *YYCURSOR);
1487 		yyaccept = 0;
1488 		YYMARKER = ++YYCURSOR;
1489 		YYFILL(1);
1490 		yych = *YYCURSOR;
1491 		YYDEBUG(99, *YYCURSOR);
1492 		if (yybm[0+yych] & 8) {
1493 			goto yy98;
1494 		}
1495 		if (yych <= '$') {
1496 			if (yych <= '\r') {
1497 				if (yych <= 0x08) goto yy95;
1498 				if (yych <= '\n') goto yy97;
1499 				if (yych <= '\f') goto yy95;
1500 				goto yy97;
1501 			} else {
1502 				if (yych == '"') goto yy102;
1503 				if (yych <= '#') goto yy95;
1504 				goto yy117;
1505 			}
1506 		} else {
1507 			if (yych <= ';') {
1508 				if (yych == '\'') goto yy97;
1509 				if (yych <= ':') goto yy95;
1510 				goto yy97;
1511 			} else {
1512 				if (yych <= '[') goto yy95;
1513 				if (yych <= '\\') goto yy113;
1514 				if (yych <= ']') goto yy97;
1515 				goto yy95;
1516 			}
1517 		}
1518 yy100:
1519 		YYDEBUG(100, *YYCURSOR);
1520 		++YYCURSOR;
1521 yy101:
1522 		YYDEBUG(101, *YYCURSOR);
1523 		yyleng = YYCURSOR - SCNG(yy_text);
1524 		{
1525 	return 0;
1526 }
1527 yy102:
1528 		YYDEBUG(102, *YYCURSOR);
1529 		++YYCURSOR;
1530 		YYDEBUG(103, *YYCURSOR);
1531 		yyleng = YYCURSOR - SCNG(yy_text);
1532 		{ /* Double quoted '"' string start */
1533 	yy_push_state(ST_DOUBLE_QUOTES);
1534 	return '"';
1535 }
1536 yy104:
1537 		YYDEBUG(104, *YYCURSOR);
1538 		yych = *++YYCURSOR;
1539 		if (yych <= '\\') {
1540 			if (yych <= 0x00) goto yy101;
1541 			if (yych <= '[') goto yy95;
1542 			goto yy119;
1543 		} else {
1544 			if (yych == '{') goto yy121;
1545 			goto yy95;
1546 		}
1547 yy105:
1548 		YYDEBUG(105, *YYCURSOR);
1549 		yych = *++YYCURSOR;
1550 		if (yybm[0+yych] & 128) {
1551 			goto yy123;
1552 		}
1553 		goto yy101;
1554 yy106:
1555 		YYDEBUG(106, *YYCURSOR);
1556 		yyaccept = 0;
1557 		yych = *(YYMARKER = ++YYCURSOR);
1558 		if (yych <= '/') goto yy96;
1559 		if (yych <= '9') goto yy125;
1560 		goto yy96;
1561 yy107:
1562 		YYDEBUG(107, *YYCURSOR);
1563 		yyaccept = 1;
1564 		YYMARKER = ++YYCURSOR;
1565 		YYFILL(1);
1566 		yych = *YYCURSOR;
1567 		YYDEBUG(108, *YYCURSOR);
1568 		if (yybm[0+yych] & 16) {
1569 			goto yy107;
1570 		}
1571 		if (yych <= '&') {
1572 			if (yych <= '\r') {
1573 				if (yych == '\n') goto yy109;
1574 				if (yych <= '\f') goto yy95;
1575 			} else {
1576 				if (yych <= '"') {
1577 					if (yych <= '!') goto yy95;
1578 				} else {
1579 					if (yych == '$') goto yy117;
1580 					goto yy95;
1581 				}
1582 			}
1583 		} else {
1584 			if (yych <= ':') {
1585 				if (yych <= '\'') goto yy109;
1586 				if (yych == '.') goto yy125;
1587 				goto yy95;
1588 			} else {
1589 				if (yych <= '[') {
1590 					if (yych >= '<') goto yy95;
1591 				} else {
1592 					if (yych <= '\\') goto yy113;
1593 					if (yych >= '^') goto yy95;
1594 				}
1595 			}
1596 		}
1597 yy109:
1598 		YYDEBUG(109, *YYCURSOR);
1599 		yyleng = YYCURSOR - SCNG(yy_text);
1600 		{ /* Get number option value as string */
1601 	RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
1602 }
1603 yy110:
1604 		YYDEBUG(110, *YYCURSOR);
1605 		yyaccept = 2;
1606 		YYMARKER = ++YYCURSOR;
1607 		YYFILL(1);
1608 		yych = *YYCURSOR;
1609 		YYDEBUG(111, *YYCURSOR);
1610 		if (yybm[0+yych] & 32) {
1611 			goto yy110;
1612 		}
1613 		if (yych <= '$') {
1614 			if (yych <= '\r') {
1615 				if (yych == '\n') goto yy112;
1616 				if (yych <= '\f') goto yy95;
1617 			} else {
1618 				if (yych == '"') goto yy112;
1619 				if (yych <= '#') goto yy95;
1620 				goto yy117;
1621 			}
1622 		} else {
1623 			if (yych <= ';') {
1624 				if (yych == '\'') goto yy112;
1625 				if (yych <= ':') goto yy95;
1626 			} else {
1627 				if (yych <= '[') goto yy95;
1628 				if (yych <= '\\') goto yy113;
1629 				if (yych >= '^') goto yy95;
1630 			}
1631 		}
1632 yy112:
1633 		YYDEBUG(112, *YYCURSOR);
1634 		yyleng = YYCURSOR - SCNG(yy_text);
1635 		{ /* Get constant option value */
1636 	RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
1637 }
1638 yy113:
1639 		YYDEBUG(113, *YYCURSOR);
1640 		++YYCURSOR;
1641 		YYFILL(1);
1642 		yych = *YYCURSOR;
1643 		goto yy95;
1644 yy114:
1645 		YYDEBUG(114, *YYCURSOR);
1646 		++YYCURSOR;
1647 		YYFILL(2);
1648 		yych = *YYCURSOR;
1649 		YYDEBUG(115, *YYCURSOR);
1650 		if (yych <= '\f') {
1651 			if (yych <= 0x08) goto yy116;
1652 			if (yych <= '\t') goto yy114;
1653 			if (yych <= '\n') goto yy127;
1654 		} else {
1655 			if (yych <= '\r') goto yy128;
1656 			if (yych == ' ') goto yy114;
1657 		}
1658 yy116:
1659 		YYDEBUG(116, *YYCURSOR);
1660 		yyleng = YYCURSOR - SCNG(yy_text);
1661 		{ /* End of section */
1662 	BEGIN(INITIAL);
1663 	SCNG(lineno)++;
1664 	return ']';
1665 }
1666 yy117:
1667 		YYDEBUG(117, *YYCURSOR);
1668 		++YYCURSOR;
1669 		YYFILL(1);
1670 		yych = *YYCURSOR;
1671 		if (yych <= '\\') {
1672 			if (yych <= 0x00) goto yy118;
1673 			if (yych <= '[') goto yy95;
1674 			goto yy119;
1675 		} else {
1676 			if (yych != '{') goto yy95;
1677 		}
1678 yy118:
1679 		YYDEBUG(118, *YYCURSOR);
1680 		YYCURSOR = YYMARKER;
1681 		if (yyaccept <= 1) {
1682 			if (yyaccept == 0) {
1683 				goto yy97;
1684 			} else {
1685 				goto yy109;
1686 			}
1687 		} else {
1688 			goto yy112;
1689 		}
1690 yy119:
1691 		YYDEBUG(119, *YYCURSOR);
1692 		++YYCURSOR;
1693 		YYFILL(1);
1694 		yych = *YYCURSOR;
1695 		YYDEBUG(120, *YYCURSOR);
1696 		if (yybm[0+yych] & 64) {
1697 			goto yy119;
1698 		}
1699 		goto yy95;
1700 yy121:
1701 		YYDEBUG(121, *YYCURSOR);
1702 		++YYCURSOR;
1703 		YYDEBUG(122, *YYCURSOR);
1704 		yyleng = YYCURSOR - SCNG(yy_text);
1705 		{ /* Variable start */
1706 	yy_push_state(ST_VARNAME);
1707 	return TC_DOLLAR_CURLY;
1708 }
1709 yy123:
1710 		YYDEBUG(123, *YYCURSOR);
1711 		++YYCURSOR;
1712 		YYFILL(1);
1713 		yych = *YYCURSOR;
1714 		YYDEBUG(124, *YYCURSOR);
1715 		if (yybm[0+yych] & 128) {
1716 			goto yy123;
1717 		}
1718 		goto yy129;
1719 yy125:
1720 		YYDEBUG(125, *YYCURSOR);
1721 		yyaccept = 1;
1722 		YYMARKER = ++YYCURSOR;
1723 		YYFILL(1);
1724 		yych = *YYCURSOR;
1725 		YYDEBUG(126, *YYCURSOR);
1726 		if (yych <= '&') {
1727 			if (yych <= '\r') {
1728 				if (yych == '\n') goto yy109;
1729 				if (yych <= '\f') goto yy95;
1730 				goto yy109;
1731 			} else {
1732 				if (yych <= '"') {
1733 					if (yych <= '!') goto yy95;
1734 					goto yy109;
1735 				} else {
1736 					if (yych == '$') goto yy117;
1737 					goto yy95;
1738 				}
1739 			}
1740 		} else {
1741 			if (yych <= ':') {
1742 				if (yych <= '\'') goto yy109;
1743 				if (yych <= '/') goto yy95;
1744 				if (yych <= '9') goto yy125;
1745 				goto yy95;
1746 			} else {
1747 				if (yych <= '[') {
1748 					if (yych <= ';') goto yy109;
1749 					goto yy95;
1750 				} else {
1751 					if (yych <= '\\') goto yy113;
1752 					if (yych <= ']') goto yy109;
1753 					goto yy95;
1754 				}
1755 			}
1756 		}
1757 yy127:
1758 		YYDEBUG(127, *YYCURSOR);
1759 		++YYCURSOR;
1760 		goto yy116;
1761 yy128:
1762 		YYDEBUG(128, *YYCURSOR);
1763 		yych = *++YYCURSOR;
1764 		if (yych == '\n') goto yy127;
1765 		goto yy116;
1766 yy129:
1767 		YYDEBUG(129, *YYCURSOR);
1768 		++YYCURSOR;
1769 		YYDEBUG(130, *YYCURSOR);
1770 		yyleng = YYCURSOR - SCNG(yy_text);
1771 		{ /* Raw string */
1772 	/* Eat leading and trailing single quotes */
1773 	if (yytext[0] == '\'' && yytext[yyleng - 1] == '\'') {
1774 		SCNG(yy_text)++;
1775 		yyleng = yyleng - 2;
1776 	}
1777 	RETURN_TOKEN(TC_RAW, yytext, yyleng);
1778 }
1779 	}
1780 /* *********************************** */
1781 yyc_ST_VALUE:
1782 	{
1783 		static const unsigned char yybm[] = {
1784 			 80,  82,  82,  82,  82,  82,  82,  82,
1785 			 82,  84,  64,  82,  82,  64,  82,  82,
1786 			 82,  82,  82,  82,  82,  82,  82,  82,
1787 			 82,  82,  82,  82,  82,  82,  82,  82,
1788 			 84,  80,  80,  82, 208,  82,  80,  16,
1789 			 80,  80,  82,  82,  82,  82,  82,  82,
1790 			122, 122, 122, 122, 122, 122, 122, 122,
1791 			122, 122,  82,  80,  82,  80,  82,  82,
1792 			 82, 114, 114, 114, 114, 114, 114, 114,
1793 			114, 114, 114, 114, 114, 114, 114, 114,
1794 			114, 114, 114, 114, 114, 114, 114, 114,
1795 			114, 114, 114,  82,  82,  82,  80, 114,
1796 			 82, 114, 114, 114, 114, 114, 114, 114,
1797 			114, 114, 114, 114, 114, 114, 114, 114,
1798 			114, 114, 114, 114, 114, 114, 114, 114,
1799 			114, 114, 114,  82,  80,  82,  80,  82,
1800 			 82,  82,  82,  82,  82,  82,  82,  82,
1801 			 82,  82,  82,  82,  82,  82,  82,  82,
1802 			 82,  82,  82,  82,  82,  82,  82,  82,
1803 			 82,  82,  82,  82,  82,  82,  82,  82,
1804 			 82,  82,  82,  82,  82,  82,  82,  82,
1805 			 82,  82,  82,  82,  82,  82,  82,  82,
1806 			 82,  82,  82,  82,  82,  82,  82,  82,
1807 			 82,  82,  82,  82,  82,  82,  82,  82,
1808 			 82,  82,  82,  82,  82,  82,  82,  82,
1809 			 82,  82,  82,  82,  82,  82,  82,  82,
1810 			 82,  82,  82,  82,  82,  82,  82,  82,
1811 			 82,  82,  82,  82,  82,  82,  82,  82,
1812 			 82,  82,  82,  82,  82,  82,  82,  82,
1813 			 82,  82,  82,  82,  82,  82,  82,  82,
1814 			 82,  82,  82,  82,  82,  82,  82,  82,
1815 			 82,  82,  82,  82,  82,  82,  82,  82,
1816 		};
1817 		YYDEBUG(131, *YYCURSOR);
1818 		YYFILL(6);
1819 		yych = *YYCURSOR;
1820 		if (yybm[0+yych] & 4) {
1821 			goto yy138;
1822 		}
1823 		switch (yych) {
1824 		case 0x00:	goto yy133;
1825 		case '\t':
1826 		case '\n':	goto yy141;
1827 		case '\r':	goto yy143;
1828 		case ' ':
1829 		case '!':
1830 		case '&':
1831 		case '(':
1832 		case ')':
1833 		case '^':
1834 		case '|':
1835 		case '~':	goto yy144;
1836 		case '"':	goto yy147;
1837 		case '$':	goto yy149;
1838 		case '\'':	goto yy150;
1839 		case '-':
1840 		case '.':	goto yy151;
1841 		case '0':
1842 		case '1':
1843 		case '2':
1844 		case '3':
1845 		case '4':
1846 		case '5':
1847 		case '6':
1848 		case '7':
1849 		case '8':
1850 		case '9':	goto yy152;
1851 		case ';':	goto yy155;
1852 		case '=':	goto yy157;
1853 		case 'A':
1854 		case 'B':
1855 		case 'C':
1856 		case 'D':
1857 		case 'E':
1858 		case 'G':
1859 		case 'H':
1860 		case 'I':
1861 		case 'J':
1862 		case 'K':
1863 		case 'L':
1864 		case 'M':
1865 		case 'P':
1866 		case 'Q':
1867 		case 'R':
1868 		case 'S':
1869 		case 'U':
1870 		case 'V':
1871 		case 'W':
1872 		case 'X':
1873 		case 'Z':
1874 		case '_':
1875 		case 'a':
1876 		case 'b':
1877 		case 'c':
1878 		case 'd':
1879 		case 'e':
1880 		case 'g':
1881 		case 'h':
1882 		case 'i':
1883 		case 'j':
1884 		case 'k':
1885 		case 'l':
1886 		case 'm':
1887 		case 'p':
1888 		case 'q':
1889 		case 'r':
1890 		case 's':
1891 		case 'u':
1892 		case 'v':
1893 		case 'w':
1894 		case 'x':
1895 		case 'z':	goto yy159;
1896 		case 'F':
1897 		case 'f':	goto yy162;
1898 		case 'N':
1899 		case 'n':	goto yy163;
1900 		case 'O':
1901 		case 'o':	goto yy164;
1902 		case 'T':
1903 		case 't':	goto yy165;
1904 		case 'Y':
1905 		case 'y':	goto yy166;
1906 		default:	goto yy135;
1907 		}
1908 yy133:
1909 		YYDEBUG(133, *YYCURSOR);
1910 		++YYCURSOR;
1911 yy134:
1912 		YYDEBUG(134, *YYCURSOR);
1913 		yyleng = YYCURSOR - SCNG(yy_text);
1914 		{ /* End of option value (if EOF is reached before EOL */
1915 	BEGIN(INITIAL);
1916 	return END_OF_LINE;
1917 }
1918 yy135:
1919 		YYDEBUG(135, *YYCURSOR);
1920 		yyaccept = 0;
1921 		YYMARKER = ++YYCURSOR;
1922 		YYFILL(1);
1923 		yych = *YYCURSOR;
1924 yy136:
1925 		YYDEBUG(136, *YYCURSOR);
1926 		if (yybm[0+yych] & 2) {
1927 			goto yy135;
1928 		}
1929 		if (yych <= '"') goto yy137;
1930 		if (yych <= '$') goto yy167;
1931 yy137:
1932 		YYDEBUG(137, *YYCURSOR);
1933 		yyleng = YYCURSOR - SCNG(yy_text);
1934 		{ /* Get everything else as option/offset value */
1935 	RETURN_TOKEN(TC_STRING, yytext, yyleng);
1936 }
1937 yy138:
1938 		YYDEBUG(138, *YYCURSOR);
1939 		++YYCURSOR;
1940 		YYFILL(2);
1941 		yych = *YYCURSOR;
1942 		YYDEBUG(139, *YYCURSOR);
1943 		if (yybm[0+yych] & 4) {
1944 			goto yy138;
1945 		}
1946 		if (yych <= '\r') {
1947 			if (yych <= 0x08) goto yy140;
1948 			if (yych <= '\n') goto yy141;
1949 			if (yych >= '\r') goto yy143;
1950 		} else {
1951 			if (yych <= '"') {
1952 				if (yych >= '"') goto yy147;
1953 			} else {
1954 				if (yych == ';') goto yy155;
1955 			}
1956 		}
1957 yy140:
1958 		YYDEBUG(140, *YYCURSOR);
1959 		yyleng = YYCURSOR - SCNG(yy_text);
1960 		{
1961 	RETURN_TOKEN(TC_WHITESPACE, yytext, yyleng);
1962 }
1963 yy141:
1964 		YYDEBUG(141, *YYCURSOR);
1965 		++YYCURSOR;
1966 yy142:
1967 		YYDEBUG(142, *YYCURSOR);
1968 		yyleng = YYCURSOR - SCNG(yy_text);
1969 		{ /* End of option value */
1970 	BEGIN(INITIAL);
1971 	SCNG(lineno)++;
1972 	return END_OF_LINE;
1973 }
1974 yy143:
1975 		YYDEBUG(143, *YYCURSOR);
1976 		yych = *++YYCURSOR;
1977 		if (yych == '\n') goto yy141;
1978 		goto yy142;
1979 yy144:
1980 		YYDEBUG(144, *YYCURSOR);
1981 		++YYCURSOR;
1982 		YYFILL(1);
1983 		yych = *YYCURSOR;
1984 		YYDEBUG(145, *YYCURSOR);
1985 		if (yych == '\t') goto yy144;
1986 		if (yych == ' ') goto yy144;
1987 		YYDEBUG(146, *YYCURSOR);
1988 		yyleng = YYCURSOR - SCNG(yy_text);
1989 		{ /* Boolean operators */
1990 	return yytext[0];
1991 }
1992 yy147:
1993 		YYDEBUG(147, *YYCURSOR);
1994 		++YYCURSOR;
1995 		YYDEBUG(148, *YYCURSOR);
1996 		yyleng = YYCURSOR - SCNG(yy_text);
1997 		{ /* Double quoted '"' string start */
1998 	yy_push_state(ST_DOUBLE_QUOTES);
1999 	return '"';
2000 }
2001 yy149:
2002 		YYDEBUG(149, *YYCURSOR);
2003 		yych = *++YYCURSOR;
2004 		if (yych <= '\\') {
2005 			if (yych <= 0x00) goto yy134;
2006 			if (yych <= '[') goto yy135;
2007 			goto yy169;
2008 		} else {
2009 			if (yych == '{') goto yy170;
2010 			goto yy135;
2011 		}
2012 yy150:
2013 		YYDEBUG(150, *YYCURSOR);
2014 		yych = *++YYCURSOR;
2015 		if (yybm[0+yych] & 64) {
2016 			goto yy172;
2017 		}
2018 		goto yy134;
2019 yy151:
2020 		YYDEBUG(151, *YYCURSOR);
2021 		yyaccept = 0;
2022 		yych = *(YYMARKER = ++YYCURSOR);
2023 		if (yych <= '/') goto yy136;
2024 		if (yych <= '9') goto yy174;
2025 		goto yy136;
2026 yy152:
2027 		YYDEBUG(152, *YYCURSOR);
2028 		yyaccept = 1;
2029 		YYMARKER = ++YYCURSOR;
2030 		YYFILL(1);
2031 		yych = *YYCURSOR;
2032 		YYDEBUG(153, *YYCURSOR);
2033 		if (yybm[0+yych] & 8) {
2034 			goto yy152;
2035 		}
2036 		if (yych <= '-') {
2037 			if (yych <= 0x1F) {
2038 				if (yych <= '\n') {
2039 					if (yych <= 0x00) goto yy154;
2040 					if (yych <= 0x08) goto yy135;
2041 				} else {
2042 					if (yych != '\r') goto yy135;
2043 				}
2044 			} else {
2045 				if (yych <= '$') {
2046 					if (yych <= '"') goto yy154;
2047 					if (yych <= '#') goto yy135;
2048 					goto yy167;
2049 				} else {
2050 					if (yych <= '%') goto yy135;
2051 					if (yych >= '*') goto yy135;
2052 				}
2053 			}
2054 		} else {
2055 			if (yych <= ']') {
2056 				if (yych <= ';') {
2057 					if (yych <= '.') goto yy174;
2058 					if (yych <= ':') goto yy135;
2059 				} else {
2060 					if (yych != '=') goto yy135;
2061 				}
2062 			} else {
2063 				if (yych <= '|') {
2064 					if (yych <= '^') goto yy154;
2065 					if (yych <= '{') goto yy135;
2066 				} else {
2067 					if (yych != '~') goto yy135;
2068 				}
2069 			}
2070 		}
2071 yy154:
2072 		YYDEBUG(154, *YYCURSOR);
2073 		yyleng = YYCURSOR - SCNG(yy_text);
2074 		{ /* Get number option value as string */
2075 	RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
2076 }
2077 yy155:
2078 		YYDEBUG(155, *YYCURSOR);
2079 		++YYCURSOR;
2080 		YYFILL(2);
2081 		yych = *YYCURSOR;
2082 		YYDEBUG(156, *YYCURSOR);
2083 		if (yybm[0+yych] & 16) {
2084 			goto yy155;
2085 		}
2086 		if (yych <= '\n') goto yy176;
2087 		goto yy178;
2088 yy157:
2089 		YYDEBUG(157, *YYCURSOR);
2090 		++YYCURSOR;
2091 		YYDEBUG(158, *YYCURSOR);
2092 		yyleng = YYCURSOR - SCNG(yy_text);
2093 		{ /* Make = used in option value to trigger error */
2094 	yyless(0);
2095 	BEGIN(INITIAL);
2096 	return END_OF_LINE;
2097 }
2098 yy159:
2099 		YYDEBUG(159, *YYCURSOR);
2100 		yyaccept = 2;
2101 		YYMARKER = ++YYCURSOR;
2102 		YYFILL(1);
2103 		yych = *YYCURSOR;
2104 		YYDEBUG(160, *YYCURSOR);
2105 		if (yybm[0+yych] & 32) {
2106 			goto yy159;
2107 		}
2108 		if (yych <= ')') {
2109 			if (yych <= '\r') {
2110 				if (yych <= 0x08) {
2111 					if (yych >= 0x01) goto yy135;
2112 				} else {
2113 					if (yych <= '\n') goto yy161;
2114 					if (yych <= '\f') goto yy135;
2115 				}
2116 			} else {
2117 				if (yych <= '#') {
2118 					if (yych <= 0x1F) goto yy135;
2119 					if (yych >= '#') goto yy135;
2120 				} else {
2121 					if (yych <= '$') goto yy167;
2122 					if (yych <= '%') goto yy135;
2123 				}
2124 			}
2125 		} else {
2126 			if (yych <= ']') {
2127 				if (yych <= ';') {
2128 					if (yych <= ':') goto yy135;
2129 				} else {
2130 					if (yych != '=') goto yy135;
2131 				}
2132 			} else {
2133 				if (yych <= '|') {
2134 					if (yych <= '^') goto yy161;
2135 					if (yych <= '{') goto yy135;
2136 				} else {
2137 					if (yych != '~') goto yy135;
2138 				}
2139 			}
2140 		}
2141 yy161:
2142 		YYDEBUG(161, *YYCURSOR);
2143 		yyleng = YYCURSOR - SCNG(yy_text);
2144 		{ /* Get constant option value */
2145 	RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
2146 }
2147 yy162:
2148 		YYDEBUG(162, *YYCURSOR);
2149 		yyaccept = 2;
2150 		yych = *(YYMARKER = ++YYCURSOR);
2151 		if (yych <= '<') {
2152 			if (yych <= '"') {
2153 				if (yych <= '\n') {
2154 					if (yych <= 0x00) goto yy161;
2155 					if (yych <= 0x08) goto yy136;
2156 					goto yy161;
2157 				} else {
2158 					if (yych == '\r') goto yy161;
2159 					if (yych <= 0x1F) goto yy136;
2160 					goto yy161;
2161 				}
2162 			} else {
2163 				if (yych <= '/') {
2164 					if (yych <= '%') goto yy136;
2165 					if (yych <= ')') goto yy161;
2166 					goto yy136;
2167 				} else {
2168 					if (yych <= '9') goto yy159;
2169 					if (yych == ';') goto yy161;
2170 					goto yy136;
2171 				}
2172 			}
2173 		} else {
2174 			if (yych <= '_') {
2175 				if (yych <= 'A') {
2176 					if (yych <= '=') goto yy161;
2177 					if (yych <= '@') goto yy136;
2178 					goto yy179;
2179 				} else {
2180 					if (yych <= 'Z') goto yy159;
2181 					if (yych <= ']') goto yy136;
2182 					if (yych <= '^') goto yy161;
2183 					goto yy159;
2184 				}
2185 			} else {
2186 				if (yych <= '{') {
2187 					if (yych <= '`') goto yy136;
2188 					if (yych <= 'a') goto yy179;
2189 					if (yych <= 'z') goto yy159;
2190 					goto yy136;
2191 				} else {
2192 					if (yych == '}') goto yy136;
2193 					if (yych <= '~') goto yy161;
2194 					goto yy136;
2195 				}
2196 			}
2197 		}
2198 yy163:
2199 		YYDEBUG(163, *YYCURSOR);
2200 		yyaccept = 2;
2201 		yych = *(YYMARKER = ++YYCURSOR);
2202 		if (yych <= 'N') {
2203 			if (yych <= '%') {
2204 				if (yych <= '\f') {
2205 					if (yych <= 0x00) goto yy161;
2206 					if (yych <= 0x08) goto yy136;
2207 					if (yych <= '\n') goto yy161;
2208 					goto yy136;
2209 				} else {
2210 					if (yych <= '\r') goto yy161;
2211 					if (yych <= 0x1F) goto yy136;
2212 					if (yych <= '"') goto yy161;
2213 					goto yy136;
2214 				}
2215 			} else {
2216 				if (yych <= ':') {
2217 					if (yych <= ')') goto yy161;
2218 					if (yych <= '/') goto yy136;
2219 					if (yych <= '9') goto yy159;
2220 					goto yy136;
2221 				} else {
2222 					if (yych <= '<') {
2223 						if (yych <= ';') goto yy161;
2224 						goto yy136;
2225 					} else {
2226 						if (yych <= '=') goto yy161;
2227 						if (yych <= '@') goto yy136;
2228 						goto yy159;
2229 					}
2230 				}
2231 			}
2232 		} else {
2233 			if (yych <= 'n') {
2234 				if (yych <= 'Z') {
2235 					if (yych <= 'O') goto yy180;
2236 					if (yych == 'U') goto yy182;
2237 					goto yy159;
2238 				} else {
2239 					if (yych <= '^') {
2240 						if (yych <= ']') goto yy136;
2241 						goto yy161;
2242 					} else {
2243 						if (yych == '`') goto yy136;
2244 						goto yy159;
2245 					}
2246 				}
2247 			} else {
2248 				if (yych <= 'z') {
2249 					if (yych <= 'o') goto yy180;
2250 					if (yych == 'u') goto yy182;
2251 					goto yy159;
2252 				} else {
2253 					if (yych <= '|') {
2254 						if (yych <= '{') goto yy136;
2255 						goto yy161;
2256 					} else {
2257 						if (yych == '~') goto yy161;
2258 						goto yy136;
2259 					}
2260 				}
2261 			}
2262 		}
2263 yy164:
2264 		YYDEBUG(164, *YYCURSOR);
2265 		yyaccept = 2;
2266 		yych = *(YYMARKER = ++YYCURSOR);
2267 		if (yych <= 'E') {
2268 			if (yych <= '%') {
2269 				if (yych <= '\f') {
2270 					if (yych <= 0x00) goto yy161;
2271 					if (yych <= 0x08) goto yy136;
2272 					if (yych <= '\n') goto yy161;
2273 					goto yy136;
2274 				} else {
2275 					if (yych <= '\r') goto yy161;
2276 					if (yych <= 0x1F) goto yy136;
2277 					if (yych <= '"') goto yy161;
2278 					goto yy136;
2279 				}
2280 			} else {
2281 				if (yych <= ':') {
2282 					if (yych <= ')') goto yy161;
2283 					if (yych <= '/') goto yy136;
2284 					if (yych <= '9') goto yy159;
2285 					goto yy136;
2286 				} else {
2287 					if (yych <= '<') {
2288 						if (yych <= ';') goto yy161;
2289 						goto yy136;
2290 					} else {
2291 						if (yych <= '=') goto yy161;
2292 						if (yych <= '@') goto yy136;
2293 						goto yy159;
2294 					}
2295 				}
2296 			}
2297 		} else {
2298 			if (yych <= 'e') {
2299 				if (yych <= 'Z') {
2300 					if (yych <= 'F') goto yy183;
2301 					if (yych == 'N') goto yy184;
2302 					goto yy159;
2303 				} else {
2304 					if (yych <= '^') {
2305 						if (yych <= ']') goto yy136;
2306 						goto yy161;
2307 					} else {
2308 						if (yych == '`') goto yy136;
2309 						goto yy159;
2310 					}
2311 				}
2312 			} else {
2313 				if (yych <= 'z') {
2314 					if (yych <= 'f') goto yy183;
2315 					if (yych == 'n') goto yy184;
2316 					goto yy159;
2317 				} else {
2318 					if (yych <= '|') {
2319 						if (yych <= '{') goto yy136;
2320 						goto yy161;
2321 					} else {
2322 						if (yych == '~') goto yy161;
2323 						goto yy136;
2324 					}
2325 				}
2326 			}
2327 		}
2328 yy165:
2329 		YYDEBUG(165, *YYCURSOR);
2330 		yyaccept = 2;
2331 		yych = *(YYMARKER = ++YYCURSOR);
2332 		if (yych <= '=') {
2333 			if (yych <= '"') {
2334 				if (yych <= '\n') {
2335 					if (yych <= 0x00) goto yy161;
2336 					if (yych <= 0x08) goto yy136;
2337 					goto yy161;
2338 				} else {
2339 					if (yych == '\r') goto yy161;
2340 					if (yych <= 0x1F) goto yy136;
2341 					goto yy161;
2342 				}
2343 			} else {
2344 				if (yych <= '9') {
2345 					if (yych <= '%') goto yy136;
2346 					if (yych <= ')') goto yy161;
2347 					if (yych <= '/') goto yy136;
2348 					goto yy159;
2349 				} else {
2350 					if (yych == ';') goto yy161;
2351 					if (yych <= '<') goto yy136;
2352 					goto yy161;
2353 				}
2354 			}
2355 		} else {
2356 			if (yych <= '`') {
2357 				if (yych <= 'Z') {
2358 					if (yych <= '@') goto yy136;
2359 					if (yych == 'R') goto yy186;
2360 					goto yy159;
2361 				} else {
2362 					if (yych <= ']') goto yy136;
2363 					if (yych <= '^') goto yy161;
2364 					if (yych <= '_') goto yy159;
2365 					goto yy136;
2366 				}
2367 			} else {
2368 				if (yych <= '{') {
2369 					if (yych == 'r') goto yy186;
2370 					if (yych <= 'z') goto yy159;
2371 					goto yy136;
2372 				} else {
2373 					if (yych == '}') goto yy136;
2374 					if (yych <= '~') goto yy161;
2375 					goto yy136;
2376 				}
2377 			}
2378 		}
2379 yy166:
2380 		YYDEBUG(166, *YYCURSOR);
2381 		yyaccept = 2;
2382 		yych = *(YYMARKER = ++YYCURSOR);
2383 		if (yych <= '=') {
2384 			if (yych <= '"') {
2385 				if (yych <= '\n') {
2386 					if (yych <= 0x00) goto yy161;
2387 					if (yych <= 0x08) goto yy136;
2388 					goto yy161;
2389 				} else {
2390 					if (yych == '\r') goto yy161;
2391 					if (yych <= 0x1F) goto yy136;
2392 					goto yy161;
2393 				}
2394 			} else {
2395 				if (yych <= '9') {
2396 					if (yych <= '%') goto yy136;
2397 					if (yych <= ')') goto yy161;
2398 					if (yych <= '/') goto yy136;
2399 					goto yy159;
2400 				} else {
2401 					if (yych == ';') goto yy161;
2402 					if (yych <= '<') goto yy136;
2403 					goto yy161;
2404 				}
2405 			}
2406 		} else {
2407 			if (yych <= '`') {
2408 				if (yych <= 'Z') {
2409 					if (yych <= '@') goto yy136;
2410 					if (yych == 'E') goto yy187;
2411 					goto yy159;
2412 				} else {
2413 					if (yych <= ']') goto yy136;
2414 					if (yych <= '^') goto yy161;
2415 					if (yych <= '_') goto yy159;
2416 					goto yy136;
2417 				}
2418 			} else {
2419 				if (yych <= '{') {
2420 					if (yych == 'e') goto yy187;
2421 					if (yych <= 'z') goto yy159;
2422 					goto yy136;
2423 				} else {
2424 					if (yych == '}') goto yy136;
2425 					if (yych <= '~') goto yy161;
2426 					goto yy136;
2427 				}
2428 			}
2429 		}
2430 yy167:
2431 		YYDEBUG(167, *YYCURSOR);
2432 		++YYCURSOR;
2433 		YYFILL(1);
2434 		yych = *YYCURSOR;
2435 		if (yych <= '\\') {
2436 			if (yych <= 0x00) goto yy168;
2437 			if (yych <= '[') goto yy135;
2438 			goto yy169;
2439 		} else {
2440 			if (yych != '{') goto yy135;
2441 		}
2442 yy168:
2443 		YYDEBUG(168, *YYCURSOR);
2444 		YYCURSOR = YYMARKER;
2445 		if (yyaccept <= 2) {
2446 			if (yyaccept <= 1) {
2447 				if (yyaccept == 0) {
2448 					goto yy137;
2449 				} else {
2450 					goto yy154;
2451 				}
2452 			} else {
2453 				goto yy161;
2454 			}
2455 		} else {
2456 			if (yyaccept <= 4) {
2457 				if (yyaccept == 3) {
2458 					goto yy181;
2459 				} else {
2460 					goto yy185;
2461 				}
2462 			} else {
2463 				goto yy202;
2464 			}
2465 		}
2466 yy169:
2467 		YYDEBUG(169, *YYCURSOR);
2468 		++YYCURSOR;
2469 		YYFILL(1);
2470 		yych = *YYCURSOR;
2471 		if (yybm[0+yych] & 128) {
2472 			goto yy188;
2473 		}
2474 		goto yy135;
2475 yy170:
2476 		YYDEBUG(170, *YYCURSOR);
2477 		++YYCURSOR;
2478 		YYDEBUG(171, *YYCURSOR);
2479 		yyleng = YYCURSOR - SCNG(yy_text);
2480 		{ /* Variable start */
2481 	yy_push_state(ST_VARNAME);
2482 	return TC_DOLLAR_CURLY;
2483 }
2484 yy172:
2485 		YYDEBUG(172, *YYCURSOR);
2486 		++YYCURSOR;
2487 		YYFILL(1);
2488 		yych = *YYCURSOR;
2489 		YYDEBUG(173, *YYCURSOR);
2490 		if (yybm[0+yych] & 64) {
2491 			goto yy172;
2492 		}
2493 		goto yy190;
2494 yy174:
2495 		YYDEBUG(174, *YYCURSOR);
2496 		yyaccept = 1;
2497 		YYMARKER = ++YYCURSOR;
2498 		YYFILL(1);
2499 		yych = *YYCURSOR;
2500 		YYDEBUG(175, *YYCURSOR);
2501 		if (yych <= '/') {
2502 			if (yych <= 0x1F) {
2503 				if (yych <= '\n') {
2504 					if (yych <= 0x00) goto yy154;
2505 					if (yych <= 0x08) goto yy135;
2506 					goto yy154;
2507 				} else {
2508 					if (yych == '\r') goto yy154;
2509 					goto yy135;
2510 				}
2511 			} else {
2512 				if (yych <= '$') {
2513 					if (yych <= '"') goto yy154;
2514 					if (yych <= '#') goto yy135;
2515 					goto yy167;
2516 				} else {
2517 					if (yych <= '%') goto yy135;
2518 					if (yych <= ')') goto yy154;
2519 					goto yy135;
2520 				}
2521 			}
2522 		} else {
2523 			if (yych <= ']') {
2524 				if (yych <= ';') {
2525 					if (yych <= '9') goto yy174;
2526 					if (yych <= ':') goto yy135;
2527 					goto yy154;
2528 				} else {
2529 					if (yych == '=') goto yy154;
2530 					goto yy135;
2531 				}
2532 			} else {
2533 				if (yych <= '|') {
2534 					if (yych <= '^') goto yy154;
2535 					if (yych <= '{') goto yy135;
2536 					goto yy154;
2537 				} else {
2538 					if (yych == '~') goto yy154;
2539 					goto yy135;
2540 				}
2541 			}
2542 		}
2543 yy176:
2544 		YYDEBUG(176, *YYCURSOR);
2545 		++YYCURSOR;
2546 yy177:
2547 		YYDEBUG(177, *YYCURSOR);
2548 		yyleng = YYCURSOR - SCNG(yy_text);
2549 		{ /* Comment */
2550 	BEGIN(INITIAL);
2551 	SCNG(lineno)++;
2552 	return END_OF_LINE;
2553 }
2554 yy178:
2555 		YYDEBUG(178, *YYCURSOR);
2556 		yych = *++YYCURSOR;
2557 		if (yych == '\n') goto yy176;
2558 		goto yy177;
2559 yy179:
2560 		YYDEBUG(179, *YYCURSOR);
2561 		yyaccept = 2;
2562 		yych = *(YYMARKER = ++YYCURSOR);
2563 		if (yych <= '=') {
2564 			if (yych <= '"') {
2565 				if (yych <= '\n') {
2566 					if (yych <= 0x00) goto yy161;
2567 					if (yych <= 0x08) goto yy136;
2568 					goto yy161;
2569 				} else {
2570 					if (yych == '\r') goto yy161;
2571 					if (yych <= 0x1F) goto yy136;
2572 					goto yy161;
2573 				}
2574 			} else {
2575 				if (yych <= '9') {
2576 					if (yych <= '%') goto yy136;
2577 					if (yych <= ')') goto yy161;
2578 					if (yych <= '/') goto yy136;
2579 					goto yy159;
2580 				} else {
2581 					if (yych == ';') goto yy161;
2582 					if (yych <= '<') goto yy136;
2583 					goto yy161;
2584 				}
2585 			}
2586 		} else {
2587 			if (yych <= '`') {
2588 				if (yych <= 'Z') {
2589 					if (yych <= '@') goto yy136;
2590 					if (yych == 'L') goto yy192;
2591 					goto yy159;
2592 				} else {
2593 					if (yych <= ']') goto yy136;
2594 					if (yych <= '^') goto yy161;
2595 					if (yych <= '_') goto yy159;
2596 					goto yy136;
2597 				}
2598 			} else {
2599 				if (yych <= '{') {
2600 					if (yych == 'l') goto yy192;
2601 					if (yych <= 'z') goto yy159;
2602 					goto yy136;
2603 				} else {
2604 					if (yych == '}') goto yy136;
2605 					if (yych <= '~') goto yy161;
2606 					goto yy136;
2607 				}
2608 			}
2609 		}
2610 yy180:
2611 		YYDEBUG(180, *YYCURSOR);
2612 		yyaccept = 3;
2613 		yych = *(YYMARKER = ++YYCURSOR);
2614 		if (yych <= '<') {
2615 			if (yych <= ' ') {
2616 				if (yych <= '\n') {
2617 					if (yych <= 0x00) goto yy181;
2618 					if (yych <= 0x08) goto yy136;
2619 					if (yych <= '\t') goto yy193;
2620 				} else {
2621 					if (yych == '\r') goto yy181;
2622 					if (yych <= 0x1F) goto yy136;
2623 					goto yy193;
2624 				}
2625 			} else {
2626 				if (yych <= '/') {
2627 					if (yych <= '"') goto yy181;
2628 					if (yych <= '%') goto yy136;
2629 					if (yych >= '*') goto yy136;
2630 				} else {
2631 					if (yych <= '9') goto yy159;
2632 					if (yych != ';') goto yy136;
2633 				}
2634 			}
2635 		} else {
2636 			if (yych <= '_') {
2637 				if (yych <= 'N') {
2638 					if (yych <= '=') goto yy181;
2639 					if (yych <= '@') goto yy136;
2640 					if (yych <= 'M') goto yy159;
2641 					goto yy195;
2642 				} else {
2643 					if (yych <= 'Z') goto yy159;
2644 					if (yych <= ']') goto yy136;
2645 					if (yych >= '_') goto yy159;
2646 				}
2647 			} else {
2648 				if (yych <= 'z') {
2649 					if (yych <= '`') goto yy136;
2650 					if (yych == 'n') goto yy195;
2651 					goto yy159;
2652 				} else {
2653 					if (yych <= '|') {
2654 						if (yych <= '{') goto yy136;
2655 					} else {
2656 						if (yych != '~') goto yy136;
2657 					}
2658 				}
2659 			}
2660 		}
2661 yy181:
2662 		YYDEBUG(181, *YYCURSOR);
2663 		yyleng = YYCURSOR - SCNG(yy_text);
2664 		{ /* FALSE value (when used outside option value/offset this causes parse error!)*/
2665 	RETURN_TOKEN(BOOL_FALSE, "", 0);
2666 }
2667 yy182:
2668 		YYDEBUG(182, *YYCURSOR);
2669 		yyaccept = 2;
2670 		yych = *(YYMARKER = ++YYCURSOR);
2671 		if (yych <= '=') {
2672 			if (yych <= '"') {
2673 				if (yych <= '\n') {
2674 					if (yych <= 0x00) goto yy161;
2675 					if (yych <= 0x08) goto yy136;
2676 					goto yy161;
2677 				} else {
2678 					if (yych == '\r') goto yy161;
2679 					if (yych <= 0x1F) goto yy136;
2680 					goto yy161;
2681 				}
2682 			} else {
2683 				if (yych <= '9') {
2684 					if (yych <= '%') goto yy136;
2685 					if (yych <= ')') goto yy161;
2686 					if (yych <= '/') goto yy136;
2687 					goto yy159;
2688 				} else {
2689 					if (yych == ';') goto yy161;
2690 					if (yych <= '<') goto yy136;
2691 					goto yy161;
2692 				}
2693 			}
2694 		} else {
2695 			if (yych <= '`') {
2696 				if (yych <= 'Z') {
2697 					if (yych <= '@') goto yy136;
2698 					if (yych == 'L') goto yy196;
2699 					goto yy159;
2700 				} else {
2701 					if (yych <= ']') goto yy136;
2702 					if (yych <= '^') goto yy161;
2703 					if (yych <= '_') goto yy159;
2704 					goto yy136;
2705 				}
2706 			} else {
2707 				if (yych <= '{') {
2708 					if (yych == 'l') goto yy196;
2709 					if (yych <= 'z') goto yy159;
2710 					goto yy136;
2711 				} else {
2712 					if (yych == '}') goto yy136;
2713 					if (yych <= '~') goto yy161;
2714 					goto yy136;
2715 				}
2716 			}
2717 		}
2718 yy183:
2719 		YYDEBUG(183, *YYCURSOR);
2720 		yyaccept = 2;
2721 		yych = *(YYMARKER = ++YYCURSOR);
2722 		if (yych <= '=') {
2723 			if (yych <= '"') {
2724 				if (yych <= '\n') {
2725 					if (yych <= 0x00) goto yy161;
2726 					if (yych <= 0x08) goto yy136;
2727 					goto yy161;
2728 				} else {
2729 					if (yych == '\r') goto yy161;
2730 					if (yych <= 0x1F) goto yy136;
2731 					goto yy161;
2732 				}
2733 			} else {
2734 				if (yych <= '9') {
2735 					if (yych <= '%') goto yy136;
2736 					if (yych <= ')') goto yy161;
2737 					if (yych <= '/') goto yy136;
2738 					goto yy159;
2739 				} else {
2740 					if (yych == ';') goto yy161;
2741 					if (yych <= '<') goto yy136;
2742 					goto yy161;
2743 				}
2744 			}
2745 		} else {
2746 			if (yych <= '`') {
2747 				if (yych <= 'Z') {
2748 					if (yych <= '@') goto yy136;
2749 					if (yych == 'F') goto yy197;
2750 					goto yy159;
2751 				} else {
2752 					if (yych <= ']') goto yy136;
2753 					if (yych <= '^') goto yy161;
2754 					if (yych <= '_') goto yy159;
2755 					goto yy136;
2756 				}
2757 			} else {
2758 				if (yych <= '{') {
2759 					if (yych == 'f') goto yy197;
2760 					if (yych <= 'z') goto yy159;
2761 					goto yy136;
2762 				} else {
2763 					if (yych == '}') goto yy136;
2764 					if (yych <= '~') goto yy161;
2765 					goto yy136;
2766 				}
2767 			}
2768 		}
2769 yy184:
2770 		YYDEBUG(184, *YYCURSOR);
2771 		yyaccept = 4;
2772 		yych = *(YYMARKER = ++YYCURSOR);
2773 		if (yybm[0+yych] & 32) {
2774 			goto yy159;
2775 		}
2776 		if (yych <= ')') {
2777 			if (yych <= '\f') {
2778 				if (yych <= 0x08) {
2779 					if (yych >= 0x01) goto yy136;
2780 				} else {
2781 					if (yych <= '\t') goto yy198;
2782 					if (yych >= '\v') goto yy136;
2783 				}
2784 			} else {
2785 				if (yych <= ' ') {
2786 					if (yych <= '\r') goto yy185;
2787 					if (yych <= 0x1F) goto yy136;
2788 					goto yy198;
2789 				} else {
2790 					if (yych <= '"') goto yy185;
2791 					if (yych <= '%') goto yy136;
2792 				}
2793 			}
2794 		} else {
2795 			if (yych <= ']') {
2796 				if (yych <= ';') {
2797 					if (yych <= ':') goto yy136;
2798 				} else {
2799 					if (yych != '=') goto yy136;
2800 				}
2801 			} else {
2802 				if (yych <= '|') {
2803 					if (yych <= '^') goto yy185;
2804 					if (yych <= '{') goto yy136;
2805 				} else {
2806 					if (yych != '~') goto yy136;
2807 				}
2808 			}
2809 		}
2810 yy185:
2811 		YYDEBUG(185, *YYCURSOR);
2812 		yyleng = YYCURSOR - SCNG(yy_text);
2813 		{ /* TRUE value (when used outside option value/offset this causes parse error!) */
2814 	RETURN_TOKEN(BOOL_TRUE, "1", 1);
2815 }
2816 yy186:
2817 		YYDEBUG(186, *YYCURSOR);
2818 		yyaccept = 2;
2819 		yych = *(YYMARKER = ++YYCURSOR);
2820 		if (yych <= '=') {
2821 			if (yych <= '"') {
2822 				if (yych <= '\n') {
2823 					if (yych <= 0x00) goto yy161;
2824 					if (yych <= 0x08) goto yy136;
2825 					goto yy161;
2826 				} else {
2827 					if (yych == '\r') goto yy161;
2828 					if (yych <= 0x1F) goto yy136;
2829 					goto yy161;
2830 				}
2831 			} else {
2832 				if (yych <= '9') {
2833 					if (yych <= '%') goto yy136;
2834 					if (yych <= ')') goto yy161;
2835 					if (yych <= '/') goto yy136;
2836 					goto yy159;
2837 				} else {
2838 					if (yych == ';') goto yy161;
2839 					if (yych <= '<') goto yy136;
2840 					goto yy161;
2841 				}
2842 			}
2843 		} else {
2844 			if (yych <= '`') {
2845 				if (yych <= 'Z') {
2846 					if (yych <= '@') goto yy136;
2847 					if (yych == 'U') goto yy200;
2848 					goto yy159;
2849 				} else {
2850 					if (yych <= ']') goto yy136;
2851 					if (yych <= '^') goto yy161;
2852 					if (yych <= '_') goto yy159;
2853 					goto yy136;
2854 				}
2855 			} else {
2856 				if (yych <= '{') {
2857 					if (yych == 'u') goto yy200;
2858 					if (yych <= 'z') goto yy159;
2859 					goto yy136;
2860 				} else {
2861 					if (yych == '}') goto yy136;
2862 					if (yych <= '~') goto yy161;
2863 					goto yy136;
2864 				}
2865 			}
2866 		}
2867 yy187:
2868 		YYDEBUG(187, *YYCURSOR);
2869 		yyaccept = 2;
2870 		yych = *(YYMARKER = ++YYCURSOR);
2871 		if (yych <= '=') {
2872 			if (yych <= '"') {
2873 				if (yych <= '\n') {
2874 					if (yych <= 0x00) goto yy161;
2875 					if (yych <= 0x08) goto yy136;
2876 					goto yy161;
2877 				} else {
2878 					if (yych == '\r') goto yy161;
2879 					if (yych <= 0x1F) goto yy136;
2880 					goto yy161;
2881 				}
2882 			} else {
2883 				if (yych <= '9') {
2884 					if (yych <= '%') goto yy136;
2885 					if (yych <= ')') goto yy161;
2886 					if (yych <= '/') goto yy136;
2887 					goto yy159;
2888 				} else {
2889 					if (yych == ';') goto yy161;
2890 					if (yych <= '<') goto yy136;
2891 					goto yy161;
2892 				}
2893 			}
2894 		} else {
2895 			if (yych <= '`') {
2896 				if (yych <= 'Z') {
2897 					if (yych <= '@') goto yy136;
2898 					if (yych == 'S') goto yy184;
2899 					goto yy159;
2900 				} else {
2901 					if (yych <= ']') goto yy136;
2902 					if (yych <= '^') goto yy161;
2903 					if (yych <= '_') goto yy159;
2904 					goto yy136;
2905 				}
2906 			} else {
2907 				if (yych <= '{') {
2908 					if (yych == 's') goto yy184;
2909 					if (yych <= 'z') goto yy159;
2910 					goto yy136;
2911 				} else {
2912 					if (yych == '}') goto yy136;
2913 					if (yych <= '~') goto yy161;
2914 					goto yy136;
2915 				}
2916 			}
2917 		}
2918 yy188:
2919 		YYDEBUG(188, *YYCURSOR);
2920 		++YYCURSOR;
2921 		YYFILL(1);
2922 		yych = *YYCURSOR;
2923 		YYDEBUG(189, *YYCURSOR);
2924 		if (yybm[0+yych] & 128) {
2925 			goto yy188;
2926 		}
2927 		if (yych <= 0x00) goto yy137;
2928 		if (yych == '\\') goto yy169;
2929 		goto yy135;
2930 yy190:
2931 		YYDEBUG(190, *YYCURSOR);
2932 		++YYCURSOR;
2933 		YYDEBUG(191, *YYCURSOR);
2934 		yyleng = YYCURSOR - SCNG(yy_text);
2935 		{ /* Raw string */
2936 	/* Eat leading and trailing single quotes */
2937 	if (yytext[0] == '\'' && yytext[yyleng - 1] == '\'') {
2938 		SCNG(yy_text)++;
2939 		yyleng = yyleng - 2;
2940 	}
2941 	RETURN_TOKEN(TC_RAW, yytext, yyleng);
2942 }
2943 yy192:
2944 		YYDEBUG(192, *YYCURSOR);
2945 		yyaccept = 2;
2946 		yych = *(YYMARKER = ++YYCURSOR);
2947 		if (yych <= '=') {
2948 			if (yych <= '"') {
2949 				if (yych <= '\n') {
2950 					if (yych <= 0x00) goto yy161;
2951 					if (yych <= 0x08) goto yy136;
2952 					goto yy161;
2953 				} else {
2954 					if (yych == '\r') goto yy161;
2955 					if (yych <= 0x1F) goto yy136;
2956 					goto yy161;
2957 				}
2958 			} else {
2959 				if (yych <= '9') {
2960 					if (yych <= '%') goto yy136;
2961 					if (yych <= ')') goto yy161;
2962 					if (yych <= '/') goto yy136;
2963 					goto yy159;
2964 				} else {
2965 					if (yych == ';') goto yy161;
2966 					if (yych <= '<') goto yy136;
2967 					goto yy161;
2968 				}
2969 			}
2970 		} else {
2971 			if (yych <= '`') {
2972 				if (yych <= 'Z') {
2973 					if (yych <= '@') goto yy136;
2974 					if (yych == 'S') goto yy195;
2975 					goto yy159;
2976 				} else {
2977 					if (yych <= ']') goto yy136;
2978 					if (yych <= '^') goto yy161;
2979 					if (yych <= '_') goto yy159;
2980 					goto yy136;
2981 				}
2982 			} else {
2983 				if (yych <= '{') {
2984 					if (yych == 's') goto yy195;
2985 					if (yych <= 'z') goto yy159;
2986 					goto yy136;
2987 				} else {
2988 					if (yych == '}') goto yy136;
2989 					if (yych <= '~') goto yy161;
2990 					goto yy136;
2991 				}
2992 			}
2993 		}
2994 yy193:
2995 		YYDEBUG(193, *YYCURSOR);
2996 		++YYCURSOR;
2997 		YYFILL(1);
2998 		yych = *YYCURSOR;
2999 		YYDEBUG(194, *YYCURSOR);
3000 		if (yych == '\t') goto yy193;
3001 		if (yych == ' ') goto yy193;
3002 		goto yy181;
3003 yy195:
3004 		YYDEBUG(195, *YYCURSOR);
3005 		yyaccept = 2;
3006 		yych = *(YYMARKER = ++YYCURSOR);
3007 		if (yych <= '=') {
3008 			if (yych <= '"') {
3009 				if (yych <= '\n') {
3010 					if (yych <= 0x00) goto yy161;
3011 					if (yych <= 0x08) goto yy136;
3012 					goto yy161;
3013 				} else {
3014 					if (yych == '\r') goto yy161;
3015 					if (yych <= 0x1F) goto yy136;
3016 					goto yy161;
3017 				}
3018 			} else {
3019 				if (yych <= '9') {
3020 					if (yych <= '%') goto yy136;
3021 					if (yych <= ')') goto yy161;
3022 					if (yych <= '/') goto yy136;
3023 					goto yy159;
3024 				} else {
3025 					if (yych == ';') goto yy161;
3026 					if (yych <= '<') goto yy136;
3027 					goto yy161;
3028 				}
3029 			}
3030 		} else {
3031 			if (yych <= '`') {
3032 				if (yych <= 'Z') {
3033 					if (yych <= '@') goto yy136;
3034 					if (yych == 'E') goto yy197;
3035 					goto yy159;
3036 				} else {
3037 					if (yych <= ']') goto yy136;
3038 					if (yych <= '^') goto yy161;
3039 					if (yych <= '_') goto yy159;
3040 					goto yy136;
3041 				}
3042 			} else {
3043 				if (yych <= '{') {
3044 					if (yych == 'e') goto yy197;
3045 					if (yych <= 'z') goto yy159;
3046 					goto yy136;
3047 				} else {
3048 					if (yych == '}') goto yy136;
3049 					if (yych <= '~') goto yy161;
3050 					goto yy136;
3051 				}
3052 			}
3053 		}
3054 yy196:
3055 		YYDEBUG(196, *YYCURSOR);
3056 		yyaccept = 2;
3057 		yych = *(YYMARKER = ++YYCURSOR);
3058 		if (yych <= '=') {
3059 			if (yych <= '"') {
3060 				if (yych <= '\n') {
3061 					if (yych <= 0x00) goto yy161;
3062 					if (yych <= 0x08) goto yy136;
3063 					goto yy161;
3064 				} else {
3065 					if (yych == '\r') goto yy161;
3066 					if (yych <= 0x1F) goto yy136;
3067 					goto yy161;
3068 				}
3069 			} else {
3070 				if (yych <= '9') {
3071 					if (yych <= '%') goto yy136;
3072 					if (yych <= ')') goto yy161;
3073 					if (yych <= '/') goto yy136;
3074 					goto yy159;
3075 				} else {
3076 					if (yych == ';') goto yy161;
3077 					if (yych <= '<') goto yy136;
3078 					goto yy161;
3079 				}
3080 			}
3081 		} else {
3082 			if (yych <= '`') {
3083 				if (yych <= 'Z') {
3084 					if (yych <= '@') goto yy136;
3085 					if (yych == 'L') goto yy201;
3086 					goto yy159;
3087 				} else {
3088 					if (yych <= ']') goto yy136;
3089 					if (yych <= '^') goto yy161;
3090 					if (yych <= '_') goto yy159;
3091 					goto yy136;
3092 				}
3093 			} else {
3094 				if (yych <= '{') {
3095 					if (yych == 'l') goto yy201;
3096 					if (yych <= 'z') goto yy159;
3097 					goto yy136;
3098 				} else {
3099 					if (yych == '}') goto yy136;
3100 					if (yych <= '~') goto yy161;
3101 					goto yy136;
3102 				}
3103 			}
3104 		}
3105 yy197:
3106 		YYDEBUG(197, *YYCURSOR);
3107 		yyaccept = 3;
3108 		yych = *(YYMARKER = ++YYCURSOR);
3109 		if (yybm[0+yych] & 32) {
3110 			goto yy159;
3111 		}
3112 		if (yych <= ')') {
3113 			if (yych <= '\f') {
3114 				if (yych <= 0x08) {
3115 					if (yych <= 0x00) goto yy181;
3116 					goto yy136;
3117 				} else {
3118 					if (yych <= '\t') goto yy193;
3119 					if (yych <= '\n') goto yy181;
3120 					goto yy136;
3121 				}
3122 			} else {
3123 				if (yych <= ' ') {
3124 					if (yych <= '\r') goto yy181;
3125 					if (yych <= 0x1F) goto yy136;
3126 					goto yy193;
3127 				} else {
3128 					if (yych <= '"') goto yy181;
3129 					if (yych <= '%') goto yy136;
3130 					goto yy181;
3131 				}
3132 			}
3133 		} else {
3134 			if (yych <= ']') {
3135 				if (yych <= ';') {
3136 					if (yych <= ':') goto yy136;
3137 					goto yy181;
3138 				} else {
3139 					if (yych == '=') goto yy181;
3140 					goto yy136;
3141 				}
3142 			} else {
3143 				if (yych <= '|') {
3144 					if (yych <= '^') goto yy181;
3145 					if (yych <= '{') goto yy136;
3146 					goto yy181;
3147 				} else {
3148 					if (yych == '~') goto yy181;
3149 					goto yy136;
3150 				}
3151 			}
3152 		}
3153 yy198:
3154 		YYDEBUG(198, *YYCURSOR);
3155 		++YYCURSOR;
3156 		YYFILL(1);
3157 		yych = *YYCURSOR;
3158 		YYDEBUG(199, *YYCURSOR);
3159 		if (yych == '\t') goto yy198;
3160 		if (yych == ' ') goto yy198;
3161 		goto yy185;
3162 yy200:
3163 		YYDEBUG(200, *YYCURSOR);
3164 		yyaccept = 2;
3165 		yych = *(YYMARKER = ++YYCURSOR);
3166 		if (yych <= '=') {
3167 			if (yych <= '"') {
3168 				if (yych <= '\n') {
3169 					if (yych <= 0x00) goto yy161;
3170 					if (yych <= 0x08) goto yy136;
3171 					goto yy161;
3172 				} else {
3173 					if (yych == '\r') goto yy161;
3174 					if (yych <= 0x1F) goto yy136;
3175 					goto yy161;
3176 				}
3177 			} else {
3178 				if (yych <= '9') {
3179 					if (yych <= '%') goto yy136;
3180 					if (yych <= ')') goto yy161;
3181 					if (yych <= '/') goto yy136;
3182 					goto yy159;
3183 				} else {
3184 					if (yych == ';') goto yy161;
3185 					if (yych <= '<') goto yy136;
3186 					goto yy161;
3187 				}
3188 			}
3189 		} else {
3190 			if (yych <= '`') {
3191 				if (yych <= 'Z') {
3192 					if (yych <= '@') goto yy136;
3193 					if (yych == 'E') goto yy184;
3194 					goto yy159;
3195 				} else {
3196 					if (yych <= ']') goto yy136;
3197 					if (yych <= '^') goto yy161;
3198 					if (yych <= '_') goto yy159;
3199 					goto yy136;
3200 				}
3201 			} else {
3202 				if (yych <= '{') {
3203 					if (yych == 'e') goto yy184;
3204 					if (yych <= 'z') goto yy159;
3205 					goto yy136;
3206 				} else {
3207 					if (yych == '}') goto yy136;
3208 					if (yych <= '~') goto yy161;
3209 					goto yy136;
3210 				}
3211 			}
3212 		}
3213 yy201:
3214 		YYDEBUG(201, *YYCURSOR);
3215 		yyaccept = 5;
3216 		yych = *(YYMARKER = ++YYCURSOR);
3217 		if (yybm[0+yych] & 32) {
3218 			goto yy159;
3219 		}
3220 		if (yych <= ')') {
3221 			if (yych <= '\f') {
3222 				if (yych <= 0x08) {
3223 					if (yych >= 0x01) goto yy136;
3224 				} else {
3225 					if (yych <= '\t') goto yy203;
3226 					if (yych >= '\v') goto yy136;
3227 				}
3228 			} else {
3229 				if (yych <= ' ') {
3230 					if (yych <= '\r') goto yy202;
3231 					if (yych <= 0x1F) goto yy136;
3232 					goto yy203;
3233 				} else {
3234 					if (yych <= '"') goto yy202;
3235 					if (yych <= '%') goto yy136;
3236 				}
3237 			}
3238 		} else {
3239 			if (yych <= ']') {
3240 				if (yych <= ';') {
3241 					if (yych <= ':') goto yy136;
3242 				} else {
3243 					if (yych != '=') goto yy136;
3244 				}
3245 			} else {
3246 				if (yych <= '|') {
3247 					if (yych <= '^') goto yy202;
3248 					if (yych <= '{') goto yy136;
3249 				} else {
3250 					if (yych != '~') goto yy136;
3251 				}
3252 			}
3253 		}
3254 yy202:
3255 		YYDEBUG(202, *YYCURSOR);
3256 		yyleng = YYCURSOR - SCNG(yy_text);
3257 		{
3258 	RETURN_TOKEN(NULL_NULL, "", 0);
3259 }
3260 yy203:
3261 		YYDEBUG(203, *YYCURSOR);
3262 		++YYCURSOR;
3263 		YYFILL(1);
3264 		yych = *YYCURSOR;
3265 		YYDEBUG(204, *YYCURSOR);
3266 		if (yych == '\t') goto yy203;
3267 		if (yych == ' ') goto yy203;
3268 		goto yy202;
3269 	}
3270 /* *********************************** */
3271 yyc_ST_SECTION_RAW:
3272 	{
3273 		static const unsigned char yybm[] = {
3274 			 64,  64,  64,  64,  64,  64,  64,  64,
3275 			 64, 192,   0,  64,  64,   0,  64,  64,
3276 			 64,  64,  64,  64,  64,  64,  64,  64,
3277 			 64,  64,  64,  64,  64,  64,  64,  64,
3278 			192,  64,  64,  64,  64,  64,  64,  64,
3279 			 64,  64,  64,  64,  64,  64,  64,  64,
3280 			 64,  64,  64,  64,  64,  64,  64,  64,
3281 			 64,  64,  64,  64,  64,  64,  64,  64,
3282 			 64,  64,  64,  64,  64,  64,  64,  64,
3283 			 64,  64,  64,  64,  64,  64,  64,  64,
3284 			 64,  64,  64,  64,  64,  64,  64,  64,
3285 			 64,  64,  64,  64,  64,   0,  64,  64,
3286 			 64,  64,  64,  64,  64,  64,  64,  64,
3287 			 64,  64,  64,  64,  64,  64,  64,  64,
3288 			 64,  64,  64,  64,  64,  64,  64,  64,
3289 			 64,  64,  64,  64,  64,  64,  64,  64,
3290 			 64,  64,  64,  64,  64,  64,  64,  64,
3291 			 64,  64,  64,  64,  64,  64,  64,  64,
3292 			 64,  64,  64,  64,  64,  64,  64,  64,
3293 			 64,  64,  64,  64,  64,  64,  64,  64,
3294 			 64,  64,  64,  64,  64,  64,  64,  64,
3295 			 64,  64,  64,  64,  64,  64,  64,  64,
3296 			 64,  64,  64,  64,  64,  64,  64,  64,
3297 			 64,  64,  64,  64,  64,  64,  64,  64,
3298 			 64,  64,  64,  64,  64,  64,  64,  64,
3299 			 64,  64,  64,  64,  64,  64,  64,  64,
3300 			 64,  64,  64,  64,  64,  64,  64,  64,
3301 			 64,  64,  64,  64,  64,  64,  64,  64,
3302 			 64,  64,  64,  64,  64,  64,  64,  64,
3303 			 64,  64,  64,  64,  64,  64,  64,  64,
3304 			 64,  64,  64,  64,  64,  64,  64,  64,
3305 			 64,  64,  64,  64,  64,  64,  64,  64,
3306 		};
3307 		YYDEBUG(205, *YYCURSOR);
3308 		YYFILL(1);
3309 		yych = *YYCURSOR;
3310 		if (yybm[0+yych] & 64) {
3311 			goto yy207;
3312 		}
3313 		if (yych <= '\r') goto yy210;
3314 		goto yy212;
3315 yy207:
3316 		YYDEBUG(207, *YYCURSOR);
3317 		++YYCURSOR;
3318 		YYFILL(1);
3319 		yych = *YYCURSOR;
3320 		YYDEBUG(208, *YYCURSOR);
3321 		if (yybm[0+yych] & 64) {
3322 			goto yy207;
3323 		}
3324 		YYDEBUG(209, *YYCURSOR);
3325 		yyleng = YYCURSOR - SCNG(yy_text);
3326 		{ /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */
3327 	RETURN_TOKEN(TC_RAW, yytext, yyleng);
3328 }
3329 yy210:
3330 		YYDEBUG(210, *YYCURSOR);
3331 		++YYCURSOR;
3332 		YYDEBUG(211, *YYCURSOR);
3333 		yyleng = YYCURSOR - SCNG(yy_text);
3334 		{
3335 	return 0;
3336 }
3337 yy212:
3338 		YYDEBUG(212, *YYCURSOR);
3339 		++YYCURSOR;
3340 		YYFILL(2);
3341 		yych = *YYCURSOR;
3342 		YYDEBUG(213, *YYCURSOR);
3343 		if (yybm[0+yych] & 128) {
3344 			goto yy212;
3345 		}
3346 		if (yych <= 0x08) goto yy214;
3347 		if (yych <= '\n') goto yy215;
3348 		if (yych == '\r') goto yy216;
3349 yy214:
3350 		YYDEBUG(214, *YYCURSOR);
3351 		yyleng = YYCURSOR - SCNG(yy_text);
3352 		{ /* End of section */
3353 	BEGIN(INITIAL);
3354 	SCNG(lineno)++;
3355 	return ']';
3356 }
3357 yy215:
3358 		YYDEBUG(215, *YYCURSOR);
3359 		++YYCURSOR;
3360 		goto yy214;
3361 yy216:
3362 		YYDEBUG(216, *YYCURSOR);
3363 		yych = *++YYCURSOR;
3364 		if (yych == '\n') goto yy215;
3365 		goto yy214;
3366 	}
3367 /* *********************************** */
3368 yyc_ST_DOUBLE_QUOTES:
3369 	{
3370 		static const unsigned char yybm[] = {
3371 			  0,   0,   0,   0,   0,   0,   0,   0,
3372 			  0, 128,   0,   0,   0,   0,   0,   0,
3373 			  0,   0,   0,   0,   0,   0,   0,   0,
3374 			  0,   0,   0,   0,   0,   0,   0,   0,
3375 			128,   0,   0,   0,   0,   0,   0,   0,
3376 			  0,   0,   0,   0,   0,   0,   0,   0,
3377 			  0,   0,   0,   0,   0,   0,   0,   0,
3378 			  0,   0,   0,   0,   0,   0,   0,   0,
3379 			  0,   0,   0,   0,   0,   0,   0,   0,
3380 			  0,   0,   0,   0,   0,   0,   0,   0,
3381 			  0,   0,   0,   0,   0,   0,   0,   0,
3382 			  0,   0,   0,   0,   0,   0,   0,   0,
3383 			  0,   0,   0,   0,   0,   0,   0,   0,
3384 			  0,   0,   0,   0,   0,   0,   0,   0,
3385 			  0,   0,   0,   0,   0,   0,   0,   0,
3386 			  0,   0,   0,   0,   0,   0,   0,   0,
3387 			  0,   0,   0,   0,   0,   0,   0,   0,
3388 			  0,   0,   0,   0,   0,   0,   0,   0,
3389 			  0,   0,   0,   0,   0,   0,   0,   0,
3390 			  0,   0,   0,   0,   0,   0,   0,   0,
3391 			  0,   0,   0,   0,   0,   0,   0,   0,
3392 			  0,   0,   0,   0,   0,   0,   0,   0,
3393 			  0,   0,   0,   0,   0,   0,   0,   0,
3394 			  0,   0,   0,   0,   0,   0,   0,   0,
3395 			  0,   0,   0,   0,   0,   0,   0,   0,
3396 			  0,   0,   0,   0,   0,   0,   0,   0,
3397 			  0,   0,   0,   0,   0,   0,   0,   0,
3398 			  0,   0,   0,   0,   0,   0,   0,   0,
3399 			  0,   0,   0,   0,   0,   0,   0,   0,
3400 			  0,   0,   0,   0,   0,   0,   0,   0,
3401 			  0,   0,   0,   0,   0,   0,   0,   0,
3402 			  0,   0,   0,   0,   0,   0,   0,   0,
3403 		};
3404 		YYDEBUG(217, *YYCURSOR);
3405 		YYFILL(2);
3406 		yych = *YYCURSOR;
3407 		if (yych == '"') goto yy221;
3408 		if (yych == '$') goto yy224;
3409 		YYDEBUG(219, *YYCURSOR);
3410 		++YYCURSOR;
3411 yy220:
3412 		YYDEBUG(220, *YYCURSOR);
3413 		yyleng = YYCURSOR - SCNG(yy_text);
3414 		{ /* Escape double quoted string contents */
3415 	if (YYCURSOR > YYLIMIT) {
3416 		return 0;
3417 	}
3418 
3419 	unsigned char *s = SCNG(yy_text);
3420 
3421 	while (s < YYLIMIT) {
3422 		switch (*s++) {
3423 			case '"':
3424 				break;
3425 			case '$':
3426 				if (s < YYLIMIT && *s == '{') {
3427 					break;
3428 				}
3429 				continue;
3430 			case '\\':
3431 				if (s < YYLIMIT) {
3432 					unsigned char escaped = *s++;
3433 					/* A special case for Windows paths, e.g. key="C:\path\" */
3434 					if (escaped == '"' && (s >= YYLIMIT || *s == '\n' || *s == '\r')) {
3435 						break;
3436 					}
3437 				}
3438 				ZEND_FALLTHROUGH;
3439 			default:
3440 				continue;
3441 		}
3442 
3443 		s--;
3444 		break;
3445 	}
3446 
3447 	YYCURSOR = s;
3448 	yyleng = YYCURSOR - SCNG(yy_text);
3449 
3450 	zend_ini_escape_string(ini_lval, yytext, yyleng, '"');
3451 	return TC_QUOTED_STRING;
3452 }
3453 yy221:
3454 		YYDEBUG(221, *YYCURSOR);
3455 		++YYCURSOR;
3456 		YYFILL(1);
3457 		yych = *YYCURSOR;
3458 		YYDEBUG(222, *YYCURSOR);
3459 		if (yybm[0+yych] & 128) {
3460 			goto yy221;
3461 		}
3462 		YYDEBUG(223, *YYCURSOR);
3463 		yyleng = YYCURSOR - SCNG(yy_text);
3464 		{ /* Double quoted '"' string ends */
3465 	yy_pop_state();
3466 	return '"';
3467 }
3468 yy224:
3469 		YYDEBUG(224, *YYCURSOR);
3470 		yych = *++YYCURSOR;
3471 		if (yych != '{') goto yy220;
3472 		YYDEBUG(225, *YYCURSOR);
3473 		++YYCURSOR;
3474 		YYDEBUG(226, *YYCURSOR);
3475 		yyleng = YYCURSOR - SCNG(yy_text);
3476 		{ /* Variable start */
3477 	yy_push_state(ST_VARNAME);
3478 	return TC_DOLLAR_CURLY;
3479 }
3480 	}
3481 /* *********************************** */
3482 yyc_ST_VARNAME:
3483 	{
3484 		static const unsigned char yybm[] = {
3485 			128, 128, 128, 128, 128, 128, 128, 128,
3486 			128,   0,   0, 128, 128,   0, 128, 128,
3487 			128, 128, 128, 128, 128, 128, 128, 128,
3488 			128, 128, 128, 128, 128, 128, 128, 128,
3489 			128,   0,   0, 128,   0, 128,   0, 128,
3490 			  0,   0, 128, 128, 128, 128, 128, 128,
3491 			128, 128, 128, 128, 128, 128, 128, 128,
3492 			128, 128, 128,   0, 128,   0, 128, 128,
3493 			128, 128, 128, 128, 128, 128, 128, 128,
3494 			128, 128, 128, 128, 128, 128, 128, 128,
3495 			128, 128, 128, 128, 128, 128, 128, 128,
3496 			128, 128, 128,   0, 128, 128,   0, 128,
3497 			128, 128, 128, 128, 128, 128, 128, 128,
3498 			128, 128, 128, 128, 128, 128, 128, 128,
3499 			128, 128, 128, 128, 128, 128, 128, 128,
3500 			128, 128, 128,   0,   0,   0,   0, 128,
3501 			128, 128, 128, 128, 128, 128, 128, 128,
3502 			128, 128, 128, 128, 128, 128, 128, 128,
3503 			128, 128, 128, 128, 128, 128, 128, 128,
3504 			128, 128, 128, 128, 128, 128, 128, 128,
3505 			128, 128, 128, 128, 128, 128, 128, 128,
3506 			128, 128, 128, 128, 128, 128, 128, 128,
3507 			128, 128, 128, 128, 128, 128, 128, 128,
3508 			128, 128, 128, 128, 128, 128, 128, 128,
3509 			128, 128, 128, 128, 128, 128, 128, 128,
3510 			128, 128, 128, 128, 128, 128, 128, 128,
3511 			128, 128, 128, 128, 128, 128, 128, 128,
3512 			128, 128, 128, 128, 128, 128, 128, 128,
3513 			128, 128, 128, 128, 128, 128, 128, 128,
3514 			128, 128, 128, 128, 128, 128, 128, 128,
3515 			128, 128, 128, 128, 128, 128, 128, 128,
3516 			128, 128, 128, 128, 128, 128, 128, 128,
3517 		};
3518 		YYDEBUG(227, *YYCURSOR);
3519 		YYFILL(1);
3520 		yych = *YYCURSOR;
3521 		if (yybm[0+yych] & 128) {
3522 			goto yy229;
3523 		}
3524 		if (yych == '}') goto yy234;
3525 		goto yy232;
3526 yy229:
3527 		YYDEBUG(229, *YYCURSOR);
3528 		++YYCURSOR;
3529 		YYFILL(1);
3530 		yych = *YYCURSOR;
3531 		YYDEBUG(230, *YYCURSOR);
3532 		if (yybm[0+yych] & 128) {
3533 			goto yy229;
3534 		}
3535 		YYDEBUG(231, *YYCURSOR);
3536 		yyleng = YYCURSOR - SCNG(yy_text);
3537 		{ /* Variable name */
3538 	/* Eat leading whitespace */
3539 	EAT_LEADING_WHITESPACE();
3540 
3541 	/* Eat trailing whitespace */
3542 	EAT_TRAILING_WHITESPACE();
3543 
3544 	RETURN_TOKEN(TC_VARNAME, yytext, yyleng);
3545 }
3546 yy232:
3547 		YYDEBUG(232, *YYCURSOR);
3548 		++YYCURSOR;
3549 		YYDEBUG(233, *YYCURSOR);
3550 		yyleng = YYCURSOR - SCNG(yy_text);
3551 		{
3552 	return 0;
3553 }
3554 yy234:
3555 		YYDEBUG(234, *YYCURSOR);
3556 		++YYCURSOR;
3557 		YYDEBUG(235, *YYCURSOR);
3558 		yyleng = YYCURSOR - SCNG(yy_text);
3559 		{ /* Variable end */
3560 	yy_pop_state();
3561 	return '}';
3562 }
3563 	}
3564 /* *********************************** */
3565 yyc_ST_RAW:
3566 	{
3567 		static const unsigned char yybm[] = {
3568 			 64,  64,  64,  64,  64,  64,  64,  64,
3569 			 64, 192,   0,  64,  64,   0,  64,  64,
3570 			 64,  64,  64,  64,  64,  64,  64,  64,
3571 			 64,  64,  64,  64,  64,  64,  64,  64,
3572 			192,  64,  64,  64,  64,  64,  64,  64,
3573 			 64,  64,  64,  64,  64,  64,  64,  64,
3574 			 64,  64,  64,  64,  64,  64,  64,  64,
3575 			 64,  64,  64,  64,  64,  64,  64,  64,
3576 			 64,  64,  64,  64,  64,  64,  64,  64,
3577 			 64,  64,  64,  64,  64,  64,  64,  64,
3578 			 64,  64,  64,  64,  64,  64,  64,  64,
3579 			 64,  64,  64,  64,  64,  64,  64,  64,
3580 			 64,  64,  64,  64,  64,  64,  64,  64,
3581 			 64,  64,  64,  64,  64,  64,  64,  64,
3582 			 64,  64,  64,  64,  64,  64,  64,  64,
3583 			 64,  64,  64,  64,  64,  64,  64,  64,
3584 			 64,  64,  64,  64,  64,  64,  64,  64,
3585 			 64,  64,  64,  64,  64,  64,  64,  64,
3586 			 64,  64,  64,  64,  64,  64,  64,  64,
3587 			 64,  64,  64,  64,  64,  64,  64,  64,
3588 			 64,  64,  64,  64,  64,  64,  64,  64,
3589 			 64,  64,  64,  64,  64,  64,  64,  64,
3590 			 64,  64,  64,  64,  64,  64,  64,  64,
3591 			 64,  64,  64,  64,  64,  64,  64,  64,
3592 			 64,  64,  64,  64,  64,  64,  64,  64,
3593 			 64,  64,  64,  64,  64,  64,  64,  64,
3594 			 64,  64,  64,  64,  64,  64,  64,  64,
3595 			 64,  64,  64,  64,  64,  64,  64,  64,
3596 			 64,  64,  64,  64,  64,  64,  64,  64,
3597 			 64,  64,  64,  64,  64,  64,  64,  64,
3598 			 64,  64,  64,  64,  64,  64,  64,  64,
3599 			 64,  64,  64,  64,  64,  64,  64,  64,
3600 		};
3601 		YYDEBUG(236, *YYCURSOR);
3602 		YYFILL(3);
3603 		yych = *YYCURSOR;
3604 		if (yych <= '\f') {
3605 			if (yych <= 0x08) {
3606 				if (yych >= 0x01) goto yy240;
3607 			} else {
3608 				if (yych <= '\t') goto yy242;
3609 				if (yych <= '\n') goto yy243;
3610 				goto yy240;
3611 			}
3612 		} else {
3613 			if (yych <= ' ') {
3614 				if (yych <= '\r') goto yy245;
3615 				if (yych <= 0x1F) goto yy240;
3616 				goto yy242;
3617 			} else {
3618 				if (yych == ';') goto yy246;
3619 				goto yy240;
3620 			}
3621 		}
3622 		YYDEBUG(238, *YYCURSOR);
3623 		++YYCURSOR;
3624 		YYDEBUG(239, *YYCURSOR);
3625 		yyleng = YYCURSOR - SCNG(yy_text);
3626 		{ /* End of option value (if EOF is reached before EOL */
3627 	BEGIN(INITIAL);
3628 	return END_OF_LINE;
3629 }
3630 yy240:
3631 		YYDEBUG(240, *YYCURSOR);
3632 		++YYCURSOR;
3633 yy241:
3634 		YYDEBUG(241, *YYCURSOR);
3635 		yyleng = YYCURSOR - SCNG(yy_text);
3636 		{ /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */
3637 	unsigned char *sc = NULL;
3638 	EAT_LEADING_WHITESPACE();
3639 	while (YYCURSOR < YYLIMIT) {
3640 		switch (*YYCURSOR) {
3641 			case '\n':
3642 			case '\r':
3643 				goto end_raw_value_chars;
3644 				break;
3645 			case ';':
3646 				if (sc == NULL) {
3647 					sc = YYCURSOR;
3648 				}
3649 				YYCURSOR++;
3650 				break;
3651 			case '"':
3652 				if (yytext[0] == '"') {
3653 					sc = NULL;
3654 				}
3655 				YYCURSOR++;
3656 				break;
3657 			default:
3658 				YYCURSOR++;
3659 				break;
3660 		}
3661 	}
3662 end_raw_value_chars:
3663 	if (sc) {
3664 		yyleng = sc - SCNG(yy_text);
3665 	} else {
3666 		yyleng = YYCURSOR - SCNG(yy_text);
3667 	}
3668 
3669 	EAT_TRAILING_WHITESPACE();
3670 
3671 	/* Eat leading and trailing double quotes */
3672 	if (yyleng > 1 && yytext[0] == '"' && yytext[yyleng - 1] == '"') {
3673 		SCNG(yy_text)++;
3674 		yyleng = yyleng - 2;
3675 	}
3676 
3677 	RETURN_TOKEN(TC_RAW, yytext, yyleng);
3678 }
3679 yy242:
3680 		YYDEBUG(242, *YYCURSOR);
3681 		yych = *++YYCURSOR;
3682 		if (yych <= '\r') {
3683 			if (yych <= 0x08) goto yy241;
3684 			if (yych <= '\n') goto yy249;
3685 			if (yych <= '\f') goto yy241;
3686 			goto yy249;
3687 		} else {
3688 			if (yych <= ' ') {
3689 				if (yych <= 0x1F) goto yy241;
3690 				goto yy249;
3691 			} else {
3692 				if (yych == ';') goto yy249;
3693 				goto yy241;
3694 			}
3695 		}
3696 yy243:
3697 		YYDEBUG(243, *YYCURSOR);
3698 		++YYCURSOR;
3699 yy244:
3700 		YYDEBUG(244, *YYCURSOR);
3701 		yyleng = YYCURSOR - SCNG(yy_text);
3702 		{ /* End of option value */
3703 	BEGIN(INITIAL);
3704 	SCNG(lineno)++;
3705 	return END_OF_LINE;
3706 }
3707 yy245:
3708 		YYDEBUG(245, *YYCURSOR);
3709 		yych = *++YYCURSOR;
3710 		if (yych == '\n') goto yy243;
3711 		goto yy244;
3712 yy246:
3713 		YYDEBUG(246, *YYCURSOR);
3714 		++YYCURSOR;
3715 		YYFILL(2);
3716 		yych = *YYCURSOR;
3717 		YYDEBUG(247, *YYCURSOR);
3718 		if (yybm[0+yych] & 64) {
3719 			goto yy246;
3720 		}
3721 		if (yych <= '\n') goto yy251;
3722 		goto yy253;
3723 yy248:
3724 		YYDEBUG(248, *YYCURSOR);
3725 		++YYCURSOR;
3726 		YYFILL(2);
3727 		yych = *YYCURSOR;
3728 yy249:
3729 		YYDEBUG(249, *YYCURSOR);
3730 		if (yybm[0+yych] & 128) {
3731 			goto yy248;
3732 		}
3733 		if (yych <= '\f') {
3734 			if (yych <= 0x08) goto yy250;
3735 			if (yych <= '\n') goto yy243;
3736 		} else {
3737 			if (yych <= '\r') goto yy245;
3738 			if (yych == ';') goto yy246;
3739 		}
3740 yy250:
3741 		YYDEBUG(250, *YYCURSOR);
3742 		yyleng = YYCURSOR - SCNG(yy_text);
3743 		{
3744 	/* eat whitespace */
3745 	goto restart;
3746 }
3747 yy251:
3748 		YYDEBUG(251, *YYCURSOR);
3749 		++YYCURSOR;
3750 yy252:
3751 		YYDEBUG(252, *YYCURSOR);
3752 		yyleng = YYCURSOR - SCNG(yy_text);
3753 		{ /* Comment */
3754 	BEGIN(INITIAL);
3755 	SCNG(lineno)++;
3756 	return END_OF_LINE;
3757 }
3758 yy253:
3759 		YYDEBUG(253, *YYCURSOR);
3760 		yych = *++YYCURSOR;
3761 		if (yych == '\n') goto yy251;
3762 		goto yy252;
3763 	}
3764 }
3765 
3766 }
3767