]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
signature clock skew code.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 6 Apr 2009 14:09:33 +0000 (14:09 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 6 Apr 2009 14:09:33 +0000 (14:09 +0000)
git-svn-id: file:///svn/unbound/trunk@1590 be551aaa-1e26-0410-a405-d3ace91eadb9

13 files changed:
doc/Changelog
doc/example.conf.in
doc/unbound.conf.5.in
util/config_file.c
util/config_file.h
util/configlexer.c
util/configlexer.lex
util/configparser.c
util/configparser.h
util/configparser.y
validator/val_sigcrypt.c
validator/validator.c
validator/validator.h

index 7a11065a45aece3f5241df43275778051e164dc9..de87d18f34b296c4d9cc6c318c2a640c23fb6511 100644 (file)
@@ -11,6 +11,7 @@
          The example python scripts (pythonmod/examples and
          libunbound/python/examples) are not installed.
        - python invalidate routine respects packed rrset ids and locks.
+       - clock skew checks in unbound, config statements.
 
 3 April 2009: Wouter
        - Fixed a bug that caused messages to be stored in the cache too 
index d7ece167dc8f1d468d648c8aa33b70336c27fb43..d5760f0adf55fda4ce02416efe5f88868cd288e4 100644 (file)
@@ -319,6 +319,12 @@ server:
        # some of the revalidation, until the time interval expires. in secs.
        # val-bogus-ttl: 60
        
+       # The signature inception and expiration dates are allowed to be off
+       # by 10% of the lifetime of the signature from our local clock.
+       # This leeway is capped with a minimum and a maximum.  In seconds.
+       # val-sig-skew-min: 3600
+       # val-sig-skew-max: 86400
+       
        # Should additional section of secure message also be kept clean of
        # unsecure data. Useful to shield the users of this validator from
        # potential bogus data in the additional section. All unsigned data 
index 6c071d52e134a51ea73da6e77ec93ab1678469e6..75dc24b4de885822d8244f3c71ab9c20ed47adaf 100644 (file)
@@ -528,6 +528,20 @@ giving a RRSIG style date, that date is used for verifying RRSIG inception
 and expiration dates, instead of the current date. Do not set this unless 
 you are debugging signature inception and expiration.
 .TP
+.B val\-sig\-skew\-min: \fI<seconds>
+Minimum number of seconds of clock skew to apply to validated signatures.
+A value of 10% of the signature lifetime is used, capped by this setting.  
+Default is 3600 (1 hour) which allows for daylight savings differences.  
+Lower this value for more strict checking of short lived signatures.
+.TP
+.B val\-sig\-skew\-max: \fI<seconds>
+Maximum number of seconds of clock skew to apply to validated signatures.
+A value of 10% of the signature lifetime is used, capped by this setting.  
+Default is 86400 (24 hours) which allows for timezone setting problems in 
+stable domains.  Setting both min and max very low disables the clock skew 
+allowances.  Setting both min and max very high makes the validator check
+the signature timestamps less strictly.
+.TP
 .B val\-bogus\-ttl: \fI<number>
 The time to live for bogus data. This is data that has failed validation;
 due to invalid signatures or other checks. The TTL from that data cannot be
index bb52ceefbe254142bf4f1ddd3564b5f546c54854..fb27519eee5444f55151c251822ff1c6062dc6b5 100644 (file)
@@ -148,6 +148,8 @@ config_create()
        cfg->dlv_anchor_list = NULL;
        cfg->domain_insecure = NULL;
        cfg->val_date_override = 0;
+       cfg->val_sig_skew_min = 3600; /* at least daylight savings trouble */
+       cfg->val_sig_skew_max = 86400; /* at most timezone settings trouble */
        cfg->val_clean_additional = 1;
        cfg->val_permissive_mode = 0;
        cfg->key_cache_size = 4 * 1024 * 1024;
index b5f88239b1c913de13501a0a6bbe47b78c172fb6..74da245479b1a221b5d55174cfafd8302f89fa4e 100644 (file)
@@ -203,6 +203,10 @@ struct config_file {
        int max_ttl;
        /** if not 0, this value is the validation date for RRSIGs */
        int32_t val_date_override;
+       /** the minimum for signature clock skew */
+       int32_t val_sig_skew_min;
+       /** the maximum for signature clock skew */
+       int32_t val_sig_skew_max;
        /** this value sets the number of seconds before revalidating bogus */
        int bogus_ttl; 
        /** should validator clean additional section for secure msgs */
index d7dbde8ffbbc28b0f28c57a3132088eaa0e8d134..86dfb39713664c8a0644d43d2451c01537b2209e 100644 (file)
@@ -362,8 +362,8 @@ static void yy_fatal_error (yyconst char msg[]  );
        *yy_cp = '\0'; \
        (yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 117
-#define YY_END_OF_BUFFER 118
+#define YY_NUM_RULES 119
+#define YY_END_OF_BUFFER 120
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -371,127 +371,130 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[1088] =
+static yyconst flex_int16_t yy_accept[1104] =
     {   0,
-        1,    1,   99,   99,  103,  103,  107,  107,  111,  111,
-        1,    1,  118,  115,    1,   97,   97,  116,  115,  116,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,   99,
-      100,  100,  101,  116,  103,  104,  104,  105,  116,  110,
-      107,  108,  108,  109,  116,  111,  112,  112,  113,  116,
-      114,   98,  114,  102,  116,  114,  115,    0,    1,    0,
-      115,    0,    2,    0,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,   99,    0,  103,    0,  110,    0,  107,  111,    0,
-      114,    0,  114,    0,  114,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  114,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  114,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,   50,  115,
-      115,  115,  115,  115,    6,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  114,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  114,  115,
-      115,   20,  115,  115,  115,  115,   12,   13,  115,   15,
-       14,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-       95,  115,  115,  115,  115,    3,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-
-      115,  115,  115,  115,  115,  114,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  106,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,   23,  115,  115,  115,  115,
-      115,  115,  115,   24,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,   63,
-      106,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,   62,  115,  115,  115,  115,  115,
-
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,   21,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,   22,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,   17,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,   51,   52,  115,   49,  115,  115,  115,  115,  115,
-
-      115,  115,  115,  115,  115,  115,    5,  115,  115,  115,
-      115,  115,  115,  115,  115,   65,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,   81,   80,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,   25,  115,  115,  115,  115,
-       53,  115,  115,  115,  115,  115,   78,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,   42,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-        4,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-       89,  115,   16,  115,  115,  115,   55,   56,   54,  115,
-      115,  115,  115,  115,   61,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,   69,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,   31,  115,
-
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,   60,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,   64,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,   94,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-       71,  115,  115,  115,  115,   59,  115,   87,  115,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,   32,   33,  115,   38,   74,  115,   82,
-       79,  115,   27,  115,   76,  115,  115,  115,  115,  115,
-        7,  115,   48,   86,  115,  115,  115,  115,  115,  115,
-
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,   66,  115,  115,   96,  115,  115,  115,  115,
-      115,  115,  115,  115,  115,  115,   75,   26,   28,  115,
-      115,  115,  115,  115,   47,  115,  115,  115,   90,  115,
-      115,  115,  115,  115,  115,   45,  115,  115,  115,  115,
-      115,  115,   92,  115,  115,  115,  115,  115,  115,  115,
-       11,  115,  115,  115,  115,  115,  115,   10,  115,  115,
-       29,  115,   91,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,   93,   88,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,   34,  115,  115,  115,  115,  115,
-
-       30,  115,  115,  115,   67,   68,  115,  115,  115,   70,
-      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,   18,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  115,  115,   85,  115,  115,  115,  115,  115,
-      115,   19,  115,    9,  115,  115,   83,   39,  115,  115,
-      115,   73,   57,  115,  115,   41,   44,   40,  115,   35,
-      115,    8,  115,  115,   72,  115,  115,  115,   36,  115,
-       84,  115,  115,   58,   43,   37,  115,  115,  115,  115,
-       46,  115,  115,  115,  115,   77,    0
+        1,    1,  101,  101,  105,  105,  109,  109,  113,  113,
+        1,    1,  120,  117,    1,   99,   99,  118,  117,  118,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  101,
+      102,  102,  103,  118,  105,  106,  106,  107,  118,  112,
+      109,  110,  110,  111,  118,  113,  114,  114,  115,  118,
+      116,  100,  116,  104,  118,  116,  117,    0,    1,    0,
+      117,    0,    2,    0,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  101,    0,  105,    0,  112,    0,  109,  113,    0,
+      116,    0,  116,    0,  116,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  116,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  116,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,   50,  117,
+      117,  117,  117,  117,    6,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  116,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      116,  117,  117,   20,  117,  117,  117,  117,   12,   13,
+      117,   15,   14,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,   97,  117,  117,  117,  117,    3,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+
+      117,  117,  117,  117,  117,  117,  117,  117,  116,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  108,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,   23,  117,
+      117,  117,  117,  117,  117,  117,   24,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,   63,  108,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,   62,  117,
+
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,   21,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+       22,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,   17,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,   51,   52,  117,   49,
+
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,    5,  117,  117,  117,  117,  117,  117,  117,
+      117,   65,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,   83,   82,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,   25,  117,  117,  117,  117,   53,  117,  117,  117,
+      117,  117,   80,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,   42,  117,  117,  117,  117,
+
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,    4,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,   91,  117,
+       16,  117,  117,  117,   55,   56,   54,  117,  117,  117,
+      117,  117,   61,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,   69,  117,  117,  117,
+
+      117,  117,  117,  117,  117,  117,  117,   31,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,   60,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,   64,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,   96,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,   73,
+      117,  117,  117,  117,  117,   59,  117,   89,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,   32,   33,  117,   38,   76,  117,   84,
+       81,  117,   27,  117,   78,  117,  117,  117,  117,  117,
+
+        7,  117,   48,   88,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,   66,  117,  117,   98,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,   77,   26,
+       28,  117,  117,  117,  117,  117,   47,  117,  117,  117,
+       92,  117,  117,  117,  117,  117,  117,   45,  117,  117,
+      117,  117,  117,  117,  117,  117,   94,  117,  117,  117,
+      117,  117,  117,  117,   11,  117,  117,  117,  117,  117,
+      117,   10,  117,  117,   29,  117,   93,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,   72,   71,   95,
+
+       90,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+       34,  117,  117,  117,  117,  117,   30,  117,  117,  117,
+       67,   68,  117,  117,  117,   70,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,   18,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+       87,  117,  117,  117,  117,  117,  117,   19,  117,    9,
+      117,  117,   85,   39,  117,  117,  117,   75,   57,  117,
+      117,   41,   44,   40,  117,   35,  117,    8,  117,  117,
+       74,  117,  117,  117,   36,  117,   86,  117,  117,   58,
+       43,   37,  117,  117,  117,  117,   46,  117,  117,  117,
+
+      117,   79,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -534,22 +537,22 @@ static yyconst flex_int32_t yy_meta[40] =
         1,    1,    1,    1,    1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[1102] =
+static yyconst flex_int16_t yy_base[1118] =
     {   0,
         0,    0,   37,   40,   44,   51,   63,   75,   56,   68,
-       87,  108, 2101, 2087,   50, 2184, 2184, 2184,  129,   94,
+       87,  108, 2128, 2114,   50, 2218, 2218, 2218,  129,   94,
        33,  124,   94,   49,   74,   61,   91,   92,  110,  111,
-      112,  133,   50,  135,  137,  136,  145,  143,  164, 2086,
-     2184, 2184, 2184,  122, 2084, 2184, 2184, 2184,  157, 2081,
-     2091, 2184, 2184, 2184,  179, 2079, 2184, 2184, 2184,  167,
-     2078, 2184,  185, 2184,  189,   90, 2077,  195,  199, 2086,
-      206, 1658, 2184, 1620,  190,  199,  122,  116,  149,  182,
+      112,  133,   50,  135,  137,  136,  145,  143,  164, 2113,
+     2218, 2218, 2218,  122, 2112, 2218, 2218, 2218,  157, 2110,
+     1950, 2218, 2218, 2218,  179, 1739, 2218, 2218, 2218,  167,
+     1324, 2218,  185, 2218,  189,   90, 1191,  195,  199, 1155,
+      206, 1110, 2218, 1062,  190,  199,  122,  116,  149,  182,
       208,  191,  201,  207,  209,  161,  212,  210,  147,  217,
       222,  216,  214,  228,  230,  231,  233,  234,  236,  238,
 
       240,  239,  241,  244,  246,  248,  242,  249,  250,   72,
-      256, 1547,  273,  880,  277,  812,  284,  736,  600,  278,
-      526,  288,  294,  502,  287,  291,  281,  292,  293,  295,
+      256, 1042,  273,  939,  277,  885,  284,  740,  663,  278,
+      521,  288,  294,  502,  287,  291,  281,  292,  293,  295,
       302,  314,  298,  301,  303,  257,  304,  305,  310,  311,
       312,  316,  320,  330,  332,  321,  344,  340,  346,  348,
       347,  349,  333,  337,  350,  351,  352,  356,  357,  360,
@@ -560,233 +563,235 @@ static yyconst flex_int16_t yy_base[1102] =
 
       445,  447,  449,  452,  453,  460,  456,  458,  459,  466,
       464,  462,  465,  471,  470,  491,  472,  477,  475,  478,
-      485,  481,  483,  488,  489,  495,  512,  499,  502,  504,
-      511,  513,  514,  515,  521,  522,  523,  524,  539,  535,
-      537,  544,  551,  538,  516,  548,  536,  549, 2184,  554,
-      540,  552,  556,  558, 2184,  559,  562,  563,  564,  571,
-      567,  569,  573,  575,  582,  578,  583,  580,  590,  586,
-      592,  593,  594,  597,  596,  603,  606,  613,  607,  622,
-      611,  609,  614,  619,  626,  628,  634,  631,  636,  638,
-      637,  639,  645,  644,  641,  647,  649,  650,  653,  651,
-
-      660,  659,  666,  658,  663,  674,  672,  673,  677,  679,
-      657,  681,  682,  683,  690,  691,  693,  694,  701,  698,
-      699,  704,  705,  706,  712,  708,  710,  711,  713,  715,
-      717,  720,  726,  728,  732,  722,  735,  724,  736,  739,
-      745, 2184,  748,  747,  749,  751, 2184, 2184,  750, 2184,
-     2184,  752,  754,  760,  768,  759,  753,  756,  763,  769,
-      773,  770,  777,  779,  783,  784,  788,  790,  791,  794,
-      795,  800,  799,  801,  797,  808,  804,  817,  819,  802,
-     2184,  820,  810,  825,  827, 2184,  822,  828,  818,  833,
-      829,  834,  835,  841,  844,  839,  845,  846,  847,  852,
-
-      856,  854,  850,  855,  861,  865,  862,  866,  891,  867,
-      869,  871,  874,  873,  881,  878,  883,  870,  888,  893,
-      901,  899,  903,  906, 2184,  915,  908,  912,  914,  916,
-      917,  918,  919,  920,  929, 2184,  925,  928,  930,  932,
-      936,  941,  943, 2184,  946,  948,  944,  949,  952,  953,
-      956,  954,  960,  962,  963,  965,  966,  964,  968,  977,
-      980,  973,  984,  974,  981,  989,  986,  987,  990, 2184,
-      259,  991,  997,  994,  998, 1000, 1001, 1002, 1008, 1003,
-     1009, 1011, 1010, 1013, 1019, 1020, 1022, 1024, 1025, 1026,
-     1027, 1030, 1028, 1031, 2184, 1036, 1034, 1038, 1047, 1054,
-
-     1051, 1060, 1056, 1061, 1062, 1059, 1065, 1072, 1074, 1070,
-     1076, 1068, 1081, 1078, 1071, 1087, 1079, 1088, 1090, 1091,
-     1092, 1095, 1100, 1097, 1104, 1105, 1106, 1107, 1109, 1113,
-     1110, 2184, 1120, 1123, 1126, 1122, 1124, 1129, 1130, 1132,
-     1133, 1134, 1136, 1137, 1139, 2184, 1145, 1138, 1141, 1142,
-     1146, 1149, 1148, 1154, 1155, 1158, 1165, 1170, 1160, 1171,
-     1161, 1169, 1177, 1184, 1186, 1187, 2184, 1189, 1173, 1196,
-     1198, 1183, 1193, 1205, 1185, 1201, 1203, 1206, 1207, 1208,
-     1209, 1210, 1212, 1213, 1214, 1215, 1218, 1227, 1219, 1233,
-     1236, 2184, 2184, 1238, 2184, 1240, 1230, 1234, 1241, 1242,
-
-     1248, 1244, 1249, 1251, 1252, 1253, 2184, 1255, 1254, 1258,
-     1039, 1260, 1266, 1263, 1269, 2184, 1271, 1267, 1277, 1281,
-     1268, 1270, 1279, 1288, 1295, 1291, 1285, 1287, 1289, 1297,
-     1299, 1305, 1298, 1301, 1302, 1304, 1308, 1306, 2184, 2184,
-     1310, 1315, 1314, 1316, 1326, 1332, 1330, 1331, 1334, 1336,
-     1338, 1337, 1339, 1341, 1342, 2184, 1348, 1349, 1350, 1358,
-     2184, 1345, 1346, 1359, 1363, 1362, 2184, 1365, 1366, 1368,
-     1369, 1372, 1371, 1375, 1382, 1376, 1383, 1384, 1392, 1389,
-     1394, 1400, 1396, 1399, 1403, 1405, 1407, 1408, 2184, 1414,
-     1397, 1418, 1410, 1421, 1427, 1412, 1416, 1423, 1425, 1428,
-
-     1429, 1432, 1430, 1437, 1434, 1438, 1439, 1451, 1440, 1442,
-     2184, 1448, 1459, 1444, 1456, 1457, 1460, 1461, 1467, 1468,
-     1470, 1471, 1472, 1474, 1478, 1484, 1490, 1477, 1491, 1492,
-     1494, 1475, 1501, 1495, 1497, 1503, 1499, 1506, 1507, 1510,
-     2184, 1508, 2184, 1514, 1512, 1516, 2184, 2184, 2184, 1523,
-     1521, 1527, 1522, 1532, 2184, 1529, 1533, 1535, 1536, 1539,
-     1540, 1542, 1541, 1545, 1544, 1537, 1553, 1559, 1543, 1560,
-     1564, 1563, 1567, 1570, 1554, 1576, 1573, 1575, 1577, 1580,
-     1581, 1583, 1587, 1585, 1586, 1582, 1584, 1598, 2184, 1601,
-     1589, 1603, 1606, 1608, 1590, 1611, 1613, 1620, 2184, 1616,
-
-     1622, 1623, 1626, 1627, 1629, 1628, 1630, 1631, 1634, 1636,
-     1637, 1639, 2184, 1641, 1642, 1645, 1646, 1652, 1662, 1654,
-     1664, 1666, 1640, 1669, 1671, 2184, 1672, 1674, 1656, 1679,
-     1676, 1680, 1681, 1682, 1688, 1685, 1690, 2184, 1692, 1693,
-     1695, 1697, 1700, 1699, 1701, 1702, 1703, 1707, 1713, 1710,
-     2184, 1711, 1715, 1721, 1723, 2184, 1725, 2184, 1726, 1727,
-     1734, 1735, 1738, 1743, 1728, 1730, 1740, 1749, 1746, 1747,
-     1751, 1753, 1755, 2184, 2184, 1758, 2184, 2184, 1765, 2184,
-     2184, 1767, 2184, 1769, 2184, 1775, 1771, 1760, 1762, 1773,
-     2184, 1780, 2184, 2184, 1777, 1781, 1785, 1787, 1788, 1736,
-
-     1789, 1791, 1792, 1774, 1796, 1793, 1797, 1798, 1799, 1805,
-     1806, 1808, 2184, 1809, 1813, 2184, 1815, 1816, 1817, 1820,
-     1819, 1822, 1830, 1826, 1828, 1829, 2184, 2184, 2184, 1831,
-     1837, 1833, 1839, 1842, 2184, 1844, 1845, 1853, 2184, 1855,
-     1846, 1848, 1858, 1861, 1859, 2184, 1850, 1869, 1870, 1862,
-     1872, 1879, 2184, 1876, 1873, 1880, 1882, 1884, 1886, 1888,
-     2184, 1889, 1890, 1895, 1892, 1896, 1898, 2184, 1902, 1899,
-     2184, 1906, 2184, 1900, 1913, 1907, 1916, 1918, 1919, 1921,
-     1927, 1924, 1925, 2184, 2184, 1926, 1928, 1930, 1931, 1933,
-     1932, 1934, 1939, 1941, 2184, 1940, 1944, 1951, 1942, 1954,
-
-     2184, 1955, 1953, 1956, 2184, 2184, 1966, 1957, 1959, 2184,
-     1967, 1969, 1970, 1974, 1975, 1976, 1978, 1977, 1979, 1980,
-     1984, 1987, 2184, 1990, 1993, 1994, 1997, 2001, 1998, 2002,
-     2003, 2007, 2009, 2010, 2184, 2015, 2012, 2019, 2022, 2025,
-     2027, 2184, 2031, 2184, 2034, 2035, 2184, 2184, 2028, 2038,
-     2039, 2184, 2184, 2004, 2041, 2184, 2184, 2184, 2043, 2184,
-     2046, 2184, 2048, 2049, 2184, 2051, 2053, 2055, 2184, 2057,
-     2184, 2058, 2059, 2184, 2184, 2184, 2061, 2062, 2067, 2063,
-     2184, 2068, 2071, 2073, 2075, 2184, 2184, 2105, 2111, 2117,
-     2123, 2129,   94, 2135, 2141, 2147, 2153, 2159, 2165, 2171,
-
-     2177
+      485,  481,  483,  488,  489,  495,  514,  499,  502,  504,
+      509,  513,  515,  516,  522,  525,  524,  526,  532,  536,
+      538,  539,  546,  545,  537,  547,  529,  555, 2218,  557,
+      548,  551,  553,  560, 2218,  561,  563,  565,  566,  573,
+      564,  567,  575,  578,  584,  580,  587,  571,  592,  590,
+      585,  594,  595,  599,  602,  603,  606,  608,  614,  607,
+      616,  618,  610,  623,  619,  628,  634,  629,  636,  638,
+      644,  640,  642,  648,  647,  649,  641,  650,  652,  656,
+
+      657,  665,  667,  669,  662,  671,  677,  674,  678,  679,
+      683,  684,  685,  686,  687,  694,  701,  697,  700,  709,
+      690,  707,  698,  705,  712,  719,  715,  717,  720,  718,
+      722,  724,  726,  730,  731,  738,  728,  732,  740,  742,
+      745,  744,  751, 2218,  753,  754,  755,  758, 2218, 2218,
+      757, 2218, 2218,  759,  760,  766,  775,  762,  765,  770,
+      777,  771,  780,  769,  785,  788,  789,  790,  796,  792,
+      799,  801,  802,  806,  803,  808,  810,  813,  814,  820,
+      822,  815, 2218,  823,  824,  829,  832, 2218,  827,  833,
+      825,  831,  839,  841,  842,  850,  848,  846,  849,  854,
+
+      851,  857,  860,  855,  862,  869,  866,  868,  871,  874,
+      876,  901,  877,  878,  880,  882,  881,  884,  890,  883,
+      887,  907,  909,  888,  905,  892,  921, 2218,  918,  922,
+      915,  923,  924,  926,  927,  928,  930,  938, 2218,  931,
+      937,  940,  947,  941,  953,  956, 2218,  957,  959,  949,
+      943,  965,  955,  966,  967,  969,  972,  973,  974,  975,
+      978,  977,  989,  990,  976,  983,  993,  994,  999,  996,
+      997,  998, 1000, 2218,  259, 1001, 1007, 1004, 1005, 1010,
+     1011, 1003, 1021, 1013, 1023, 1022, 1026, 1028, 1029, 1034,
+     1035, 1036, 1030, 1038, 1037, 1039, 1040, 1044, 2218, 1048,
+
+     1057, 1041, 1058, 1069, 1046, 1071, 1072, 1070, 1076, 1067,
+     1074, 1083, 1084, 1080, 1082, 1087, 1089, 1091, 1090, 1088,
+     1094, 1099, 1097, 1095, 1098, 1110, 1112, 1114, 1122, 1104,
+     1118, 1123, 1116, 1125, 1129, 2218, 1132, 1135, 1138, 1137,
+     1139, 1140, 1142, 1143, 1144, 1147, 1148, 1150, 1152, 1153,
+     2218, 1160, 1154, 1156, 1157, 1161, 1168, 1166, 1169, 1167,
+     1173, 1175, 1179, 1176, 1187, 1188, 1189, 1190, 1197, 1198,
+     1199, 2218, 1201, 1202, 1209, 1212, 1205, 1207, 1219, 1215,
+     1216, 1217, 1218, 1225, 1220, 1223, 1226, 1228, 1229, 1222,
+     1230, 1244, 1240, 1233, 1251, 1252, 2218, 2218, 1249, 2218,
+
+     1254, 1255, 1256, 1258, 1259, 1261, 1262, 1264, 1266, 1267,
+     1268, 1273, 2218, 1272, 1269, 1275, 1283, 1279, 1291, 1276,
+     1288, 2218, 1292, 1280, 1298, 1299, 1293, 1302, 1303, 1304,
+     1307, 1310, 1312, 1313, 1314, 1317, 1316, 1323, 1319, 1320,
+     1321, 1326, 1335, 1327, 2218, 2218, 1325, 1336, 1332, 1337,
+     1348, 1355, 1353, 1338, 1354, 1356, 1359, 1360, 1361, 1363,
+     1364, 2218, 1370, 1371, 1369, 1377, 2218, 1368, 1372, 1381,
+     1383, 1384, 2218, 1385, 1387, 1388, 1389, 1392, 1395, 1396,
+     1397, 1403, 1404, 1406, 1407, 1415, 1408, 1420, 1426, 1410,
+     1412, 1423, 1428, 1430, 1433, 2218, 1439, 1425, 1440, 1437,
+
+     1442, 1449, 1438, 1445, 1446, 1447, 1448, 1451, 1453, 1455,
+     1459, 1456, 1461, 1458, 1471, 1460, 1464, 2218, 1473, 1479,
+     1476, 1481, 1482, 1483, 1485, 1489, 1490, 1491, 1493, 1494,
+     1498, 1500, 1508, 1506, 1499, 1518, 1510, 1516, 1514, 1524,
+      631, 1526, 1517, 1528, 1525, 1530, 1532, 1533, 2218, 1534,
+     2218, 1536, 1523, 1540, 2218, 2218, 2218, 1550, 1543, 1551,
+     1553, 1557, 2218, 1544, 1558, 1547, 1554, 1561, 1562, 1563,
+     1565, 1567, 1569, 1570, 1575, 1577, 1579, 1581, 1580, 1587,
+     1589, 1583, 1590, 1596, 1593, 1595, 1597, 1600, 1603, 1604,
+     1608, 1606, 1607, 1602, 1609, 1621, 2218, 1623, 1612, 1619,
+
+     1631, 1624, 1626, 1632, 1634, 1635, 1641, 2218, 1638, 1643,
+     1649, 1644, 1646, 1653, 1652, 1654, 1655, 1658, 1660, 1661,
+     1662, 2218, 1663, 1665, 1669, 1670, 1676, 1680, 1672, 1687,
+     1689, 1684, 1691, 1693, 2218, 1694, 1696, 1697, 1701, 1702,
+     1698, 1705, 1706, 1710, 1711, 1713, 2218, 1715, 1717, 1718,
+     1721, 1723, 1724, 1726, 1725, 1727, 1729, 1737, 1664, 2218,
+     1734, 1735, 1741, 1751, 1747, 2218, 1749, 2218, 1750, 1752,
+     1759, 1760, 1762, 1767, 1755, 1763, 1768, 1774, 1770, 1771,
+     1772, 1778, 1779, 2218, 2218, 1784, 2218, 2218, 1789, 2218,
+     2218, 1791, 2218, 1793, 2218, 1799, 1795, 1782, 1780, 1800,
+
+     2218, 1804, 2218, 2218, 1801, 1807, 1808, 1811, 1812, 1797,
+     1814, 1816, 1817, 1818, 1820, 1821, 1822, 1823, 1827, 1825,
+     1831, 1832, 1834, 1836, 2218, 1833, 1841, 2218, 1844, 1846,
+     1847, 1850, 1852, 1855, 1861, 1857, 1858, 1859, 2218, 2218,
+     2218, 1860, 1867, 1863, 1868, 1869, 2218, 1874, 1875, 1882,
+     2218, 1884, 1876, 1886, 1888, 1891, 1889, 2218, 1890, 1899,
+     1901, 1892, 1903, 1909, 1911, 1913, 2218, 1914, 1915, 1917,
+     1916, 1921, 1922, 1924, 2218, 1918, 1926, 1929, 1931, 1934,
+     1936, 2218, 1935, 1938, 2218, 1947, 2218, 1932, 1948, 1950,
+     1955, 1957, 1943, 1958, 1964, 1963, 1965, 2218, 2218, 2218,
+
+     2218, 1960, 1966, 1967, 1968, 1970, 1971, 1973, 1976, 1977,
+     2218, 1978, 1980, 1983, 1988, 1987, 2218, 1993, 1989, 1990,
+     2218, 2218, 1995, 2003, 2005, 2218, 2006, 1994, 2007, 2009,
+     2010, 2012, 2016, 2018, 2017, 2019, 2021, 2025, 2218, 2028,
+     2029, 1878, 2033, 2035, 2036, 2039, 2037, 2041, 2045, 2042,
+     2218, 2047, 2054, 2059, 2063, 2060, 2067, 2218, 2068, 2218,
+     2071, 2072, 2218, 2218, 2048, 2074, 2075, 2218, 2218, 2064,
+     2046, 2218, 2218, 2218, 2079, 2218, 2081, 2218, 2083, 2076,
+     2218, 2086, 2088, 2090, 2218, 2093, 2218, 2094, 2095, 2218,
+     2218, 2218, 2097, 2098, 2100, 2102, 2218, 2105, 2103, 2107,
+
+     2109, 2218, 2218, 2139, 2145, 2151, 2157, 2163,   94, 2169,
+     2175, 2181, 2187, 2193, 2199, 2205, 2211
     } ;
 
-static yyconst flex_int16_t yy_def[1102] =
+static yyconst flex_int16_t yy_def[1118] =
     {   0,
-     1087,    1, 1088, 1088, 1089, 1089, 1090, 1090, 1091, 1091,
-     1092, 1092, 1087, 1093, 1087, 1087, 1087, 1087, 1094, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1095,
-     1087, 1087, 1087, 1095, 1096, 1087, 1087, 1087, 1096, 1097,
-     1087, 1087, 1087, 1087, 1097, 1098, 1087, 1087, 1087, 1098,
-     1099, 1087, 1100, 1087, 1099, 1099, 1093, 1093, 1087, 1101,
-     1094, 1101, 1087, 1094, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1095, 1095, 1096, 1096, 1097, 1097, 1087, 1098, 1098,
-     1099, 1099, 1100, 1100, 1099, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1099, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1099, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1087, 1093,
-     1093, 1093, 1093, 1093, 1087, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1099, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1099, 1093,
-     1093, 1087, 1093, 1093, 1093, 1093, 1087, 1087, 1093, 1087,
-     1087, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1087, 1093, 1093, 1093, 1093, 1087, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-
-     1093, 1093, 1093, 1093, 1093, 1099, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1087, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1087, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1087, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1087,
-     1099, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1087, 1093, 1093, 1093, 1093, 1093,
-
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1087, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1087, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1087, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1087, 1087, 1093, 1087, 1093, 1093, 1093, 1093, 1093,
-
-     1093, 1093, 1093, 1093, 1093, 1093, 1087, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1087, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1087, 1087,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1087, 1093, 1093, 1093, 1093,
-     1087, 1093, 1093, 1093, 1093, 1093, 1087, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1087, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1087, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1087, 1093, 1087, 1093, 1093, 1093, 1087, 1087, 1087, 1093,
-     1093, 1093, 1093, 1093, 1087, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1087, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1087, 1093,
-
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1087, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1087, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1087, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1087, 1093, 1093, 1093, 1093, 1087, 1093, 1087, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1087, 1087, 1093, 1087, 1087, 1093, 1087,
-     1087, 1093, 1087, 1093, 1087, 1093, 1093, 1093, 1093, 1093,
-     1087, 1093, 1087, 1087, 1093, 1093, 1093, 1093, 1093, 1093,
-
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1087, 1093, 1093, 1087, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1093, 1093, 1087, 1087, 1087, 1093,
-     1093, 1093, 1093, 1093, 1087, 1093, 1093, 1093, 1087, 1093,
-     1093, 1093, 1093, 1093, 1093, 1087, 1093, 1093, 1093, 1093,
-     1093, 1093, 1087, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1087, 1093, 1093, 1093, 1093, 1093, 1093, 1087, 1093, 1093,
-     1087, 1093, 1087, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1087, 1087, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1087, 1093, 1093, 1093, 1093, 1093,
-
-     1087, 1093, 1093, 1093, 1087, 1087, 1093, 1093, 1093, 1087,
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1087, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1087, 1093, 1093, 1093, 1093, 1093,
-     1093, 1087, 1093, 1087, 1093, 1093, 1087, 1087, 1093, 1093,
-     1093, 1087, 1087, 1093, 1093, 1087, 1087, 1087, 1093, 1087,
-     1093, 1087, 1093, 1093, 1087, 1093, 1093, 1093, 1087, 1093,
-     1087, 1093, 1093, 1087, 1087, 1087, 1093, 1093, 1093, 1093,
-     1087, 1093, 1093, 1093, 1093, 1087,    0, 1087, 1087, 1087,
-     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
-
-     1087
+     1103,    1, 1104, 1104, 1105, 1105, 1106, 1106, 1107, 1107,
+     1108, 1108, 1103, 1109, 1103, 1103, 1103, 1103, 1110, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1111,
+     1103, 1103, 1103, 1111, 1112, 1103, 1103, 1103, 1112, 1113,
+     1103, 1103, 1103, 1103, 1113, 1114, 1103, 1103, 1103, 1114,
+     1115, 1103, 1116, 1103, 1115, 1115, 1109, 1109, 1103, 1117,
+     1110, 1117, 1103, 1110, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1111, 1111, 1112, 1112, 1113, 1113, 1103, 1114, 1114,
+     1115, 1115, 1116, 1116, 1115, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1115, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1115, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109,
+     1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1115, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1115, 1109, 1109, 1103, 1109, 1109, 1109, 1109, 1103, 1103,
+     1109, 1103, 1103, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1103, 1109, 1109, 1109, 1109, 1103, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1115, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1103, 1115, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109,
+
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1103, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1103, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1103, 1103, 1109, 1103,
+
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1103, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1103, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1103, 1103, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1103, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109,
+     1109, 1109, 1103, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109, 1109,
+
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109,
+     1103, 1109, 1109, 1109, 1103, 1103, 1103, 1109, 1109, 1109,
+     1109, 1109, 1103, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109,
+
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1103, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103,
+     1109, 1109, 1109, 1109, 1109, 1103, 1109, 1103, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1103, 1103, 1109, 1103, 1103, 1109, 1103,
+     1103, 1109, 1103, 1109, 1103, 1109, 1109, 1109, 1109, 1109,
+
+     1103, 1109, 1103, 1103, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1103, 1109, 1109, 1103, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1103,
+     1103, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109,
+     1103, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109, 1109, 1109,
+     1109, 1103, 1109, 1109, 1103, 1109, 1103, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1103, 1103,
+
+     1103, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1103, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109,
+     1103, 1103, 1109, 1109, 1109, 1103, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1103, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1103,
+     1109, 1109, 1103, 1103, 1109, 1109, 1109, 1103, 1103, 1109,
+     1109, 1103, 1103, 1103, 1109, 1103, 1109, 1103, 1109, 1109,
+     1103, 1109, 1109, 1109, 1103, 1109, 1103, 1109, 1109, 1103,
+     1103, 1103, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109,
+
+     1109, 1103,    0, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103
     } ;
 
-static yyconst flex_int16_t yy_nxt[2224] =
+static yyconst flex_int16_t yy_nxt[2258] =
     {   0,
        14,   15,   16,   17,   18,   19,   18,   14,   14,   14,
        14,   18,   20,   21,   14,   22,   23,   24,   25,   14,
@@ -841,201 +846,204 @@ static yyconst flex_int16_t yy_nxt[2224] =
       251,   68,  256,  252,   68,   68,  254,  259,   68,  253,
        68,   68,   68,  263,   68,  261,   68,   68,   68,  257,
       262,  264,   68,   68,   68,  258,  267,  122,  260,   68,
-       68,  266,  279,   68,  265,   68,  269,   68,  276,  275,
-
-       68,   68,  268,   68,   73,  270,  271,   68,  277,  278,
-      281,   68,  284,  280,   68,  283,   68,  272,  273,  274,
-      282,  285,  286,   68,   68,   68,   68,   68,   68,  291,
-      288,  287,  289,   68,   68,   68,   68,  290,  122,  297,
-      305,  293,  294,  296,  292,  298,  299,   68,   68,   68,
-       68,   68,   68,  300,  301,  295,   68,  302,  303,  304,
-       68,   68,  308,   68,   68,  306,   68,  309,   68,  307,
-       68,   68,  311,  310,   68,   68,   68,  312,  318,   68,
-      316,   68,  313,   68,  317,   68,  321,   68,  315,  326,
-       68,  314,   68,  322,   68,   68,  329,  319,   68,  327,
-
-      320,  323,   68,  331,   68,   68,   68,  325,   68,   68,
-      328,  324,  120,  332,  336,   68,  333,  330,  122,   68,
-      340,   68,  339,   68,  334,   68,   68,  337,  335,  345,
-      338,   68,  341,  342,   68,  343,  344,  347,   68,  348,
-       68,  349,  350,   68,  346,  352,   68,  351,   68,   68,
-       68,   68,  355,   68,  353,  354,   68,   68,  357,   68,
-      356,   68,   68,   68,  364,   68,  359,  365,  361,   68,
-       68,   68,   68,  362,  366,   68,  360,  363,   68,  358,
-      370,  371,  367,  369,   68,   68,   68,  376,  373,   68,
-      372,   68,  374,   68,   68,   68,  375,  380,  382,  378,
-
-      379,  381,   68,   68,  368,   68,   68,  377,  385,  384,
-       68,   68,  386,   68,  383,  388,   68,   68,   68,  392,
-       68,  393,   68,   68,   68,   68,  394,   68,  395,   68,
-      387,  389,   68,  391,   68,  390,   68,  118,   68,  399,
-       68,  396,  398,  400,   68,  401,  397,   68,  122,  402,
-      405,   68,  403,  406,  407,  409,  404,   68,  408,   68,
-       68,   68,   68,   68,   68,   68,   68,  416,   68,  411,
-      415,   68,   68,  414,  425,   68,  422,  410,  412,  413,
-       68,   68,   68,  423,  417,   68,  427,  418,  426,   68,
-      429,   68,  419,  424,  430,   68,   68,  428,  420,  421,
-
-       68,  433,   68,   68,  432,  436,   68,   68,  435,   68,
-      437,   68,   68,   68,   68,  431,   68,  434,  438,  439,
-       68,  440,   68,  443,  117,  442,  445,  441,  444,   68,
-       68,   68,   68,  446,   68,  447,  448,   68,  449,   68,
-       68,   68,  450,  452,  453,   68,   68,   68,  459,  454,
-      451,   68,  457,   68,  455,  456,   68,   68,   68,   68,
-      460,  458,   68,  463,   68,  465,   68,   68,   68,  462,
-      461,  466,  470,   68,   68,  468,  471,  122,   68,   68,
-      464,   68,   68,   68,  467,   68,   68,  469,  484,  472,
-       68,  485,  115,   68,  489,   68,  480,  481,  486,  483,
-
-       68,  490,  473,   68,  479,   68,  474,  482,  475,  488,
-      491,   68,  476,   68,  477,   68,  487,  495,   68,  478,
-       68,  492,  496,  497,   68,  493,   68,   68,   68,   68,
-       68,   68,   68,  500,  494,  502,  505,   68,  501,  499,
-       68,   68,   68,  498,   68,  507,  504,  508,   68,  509,
-      512,  503,  506,   68,  511,   68,   68,  510,   68,  513,
-       68,   68,  514,  515,   68,   68,   68,  518,   68,  521,
-      519,  516,   68,  520,   68,   68,   68,   68,   68,  527,
-       68,  517,  525,  526,  529,   68,   68,  530,  524,   68,
-      522,  528,   68,   68,  523,  532,   68,  535,   68,   68,
-
-      531,   68,   68,   68,  540,  533,   68,  534,  537,   68,
-       68,  541,   68,   68,   68,   68,  536,  539,  544,  546,
-       68,   68,   68,   68,  542,   68,  543,  538,  549,  545,
-      548,   68,   68,  547,   68,  552,   68,   68,   68,   68,
-       68,  550,   68,   68,  551,  558,   68,  553,   68,  554,
-       68,   68,  561,  676,  563,  555,  557,  559,  556,   68,
-      560,  566,  562,   68,  565,  567,   68,  569,   68,  570,
-      564,   68,   68,   68,   68,  572,  568,   68,  571,  575,
-       68,  576,   68,   68,   68,  573,   68,  577,   68,  579,
-       68,   68,  578,   68,  580,  574,  581,  583,  582,   68,
-
-       68,  585,   68,   68,   68,  584,  592,   68,  588,   68,
-      587,  593,   68,  586,  594,  595,   68,   68,   68,   68,
-      589,   68,   68,  591,  598,   68,  597,  602,  590,  601,
-      603,  600,   68,  604,   68,   68,   68,  596,   68,  599,
-      607,   68,   68,  605,   68,   68,   68,  611,   68,   68,
-       68,   68,  615,   68,   68,  606,  616,   68,   68,  619,
-       68,   68,  608,  610,  609,  621,   68,   68,  612,  614,
-       68,  618,   68,   68,  613,  625,  617,   68,  620,  622,
-      623,   68,   68,   68,  626,   68,  624,  627,  630,   68,
-      628,  633,  629,  634,  632,   68,   68,   68,   68,   68,
-
-      635,   68,  631,  638,  637,   68,  636,  639,   68,  640,
-       68,  642,  643,   68,  641,   68,  644,   68,   68,   68,
-       68,   68,   68,  651,   68,   68,   68,   68,  652,  656,
-       68,   68,  645,  648,  646,  654,  650,  647,  653,   68,
-      659,  649,   68,  660,  657,   68,   68,  655,   68,  661,
-       68,  658,   68,   68,   68,  662,   68,  663,  665,  667,
-       68,   68,  669,   68,   68,   68,   68,   68,  671,  666,
-       68,  664,   68,  678,  670,   68,  668,  677,   68,   68,
-       68,   68,   68,   68,  672,  673,  674,  680,  681,   68,
-      675,   68,  683,   68,  684,  679,  687,   68,  685,   68,
-
-       68,   68,  686,   68,  682,  688,  689,   68,  690,   68,
-       68,   68,  696,   68,   68,  691,   68,   68,   68,  692,
-       68,  693,   68,  694,  695,  704,   68,   68,   68,  701,
-      697,  700,  702,  698,  703,  699,  705,  707,   68,  710,
-      708,  711,   68,   68,   68,  706,   68,  709,   68,   68,
-       68,   68,  717,   68,   68,  720,  721,   68,   68,  713,
-       68,   68,   68,  712,  715,  725,  714,  716,  722,  718,
-       68,   68,  719,  723,   68,   68,  726,   68,   68,  724,
-       68,   68,  731,   68,   68,  732,  733,   68,   68,  737,
-      727,  728,  729,  734,   68,   68,   68,  730,  735,  736,
-
-      738,   68,  740,  741,   68,  743,   68,  744,   68,   68,
-      742,   68,   68,  739,  747,   68,  748,   68,  749,   68,
-       68,  751,   68,  750,   68,  753,   68,  752,   68,  745,
-       68,  746,  755,   68,  756,   68,  757,   68,  758,   68,
-       68,   68,   68,  759,   68,  765,   68,  754,  760,   68,
-       68,   68,   68,  768,   68,  761,   68,  762,  767,  769,
-       68,  763,  766,   68,  771,  774,  775,  764,   68,   68,
-      773,   68,   68,   68,  778,  777,  776,  770,  772,   68,
-       68,  779,   68,   68,   68,  787,   68,   68,  783,   68,
-       68,  788,  784,  780,  781,  789,   68,  790,  792,  782,
-
-      786,  791,   68,   68,   68,  785,   68,   68,  796,   68,
-      794,   68,  795,   68,  799,   68,  793,  800,   68,   68,
-       68,  798,   68,  801,   68,  802,   68,  805,   68,  797,
-      809,  803,  804,   68,   68,   68,  812,  808,  806,   68,
-      811,   68,  807,  813,   68,   68,  815,   68,   68,   68,
-      810,   68,   68,   68,   68,   68,   68,   68,  823,  113,
-      817,  814,  822,  818,  819,   68,   68,  824,  816,  820,
-      826,   68,   68,  821,  825,   68,   68,  828,  829,   68,
-      830,  827,   68,  834,  831,   68,  833,   68,   68,   68,
-      835,  838,   68,   68,   68,   68,   68,   68,   68,   68,
-
-      832,   68,   68,  837,  840,  839,  836,  841,  842,  843,
-       68,  844,  846,   68,  845,   68,  847,  851,   68,  848,
-       68,  853,   73,   68,  850,   68,  849,  854,   68,  852,
-      855,  856,   68,  858,   68,   68,  859,  857,   68,   68,
-       68,   68,   68,   68,  861,  862,   68,  864,   68,   68,
-      860,   68,   68,   68,   68,  863,  870,   68,   68,  873,
-       73,  868,  865,  874,   68,  866,   68,  871,   68,  867,
-      872,  879,  869,  875,   68,  877,   68,  878,   68,  876,
-      880,   68,  881,   68,   68,  883,   68,  884,   68,  882,
-      885,   68,   68,   68,   68,  889,  888,   68,  887,  891,
-
-       68,  893,   68,  894,   68,   68,  886,   68,  896,   68,
-      890,   68,   68,   68,   68,   68,  892,  898,  900,   68,
-      904,  897,   68,   68,  902,   68,  905,   68,  903,  901,
-      909,  895,  899,   68,  908,   68,  907,   68,   68,   68,
-       68,  911,   68,  906,  912,  913,   68,   68,   68,  910,
-       68,  914,   68,  915,  916,   68,  920,  919,   68,   68,
-      917,   68,  918,   68,  921,   68,  941,   68,  923,  925,
-       68,  926,   68,  924,   68,  922,  927,   68,  928,   68,
-      929,   68,  930,   68,  931,   68,   68,   68,  932,   68,
-      934,  935,   68,   68,  936,  937,  933,   68,  939,   68,
-
-       68,   68,  938,   68,   68,   68,  945,  946,   68,   68,
-       68,   68,  940,  942,  947,  943,  944,   68,   68,  953,
-       68,   68,  951,  952,  950,   68,  955,   68,   68,   68,
-      949,   68,   68,  961,   68,  948,  956,  962,   68,  954,
-       68,   68,   68,   68,  968,   68,  957,  958,  959,   68,
-      960,   68,  967,  963,   68,  971,   68,   68,   68,  964,
-       68,  965,   68,  966,  973,   68,  969,   68,  974,  976,
-       68,   68,  970,   68,   68,  977,  972,  980,  978,  979,
-      975,   68,   68,  984,   68,   68,  981,  982,   68,  983,
-      985,   68,   68,  986,   68,  988,   68,  987,   68,  991,
-
-       68,   68,   68,  989,   68,  990,  995,   68,   68,  992,
-       68,   68,   68,  996,   68,  998,  997, 1001,   68,   68,
-      993,  994, 1004,  999, 1000,   68, 1003, 1005,   68, 1006,
-       68,   68, 1002,   68, 1009, 1010,   68,   68,   68,   68,
-       68, 1011,   68,   68,   68,   68,   68, 1008, 1013, 1007,
-     1016,   68,   68,   68,   68, 1021,   68, 1012, 1024, 1015,
-     1019, 1014, 1023,   68, 1017,   68,   68,   68,   68,   68,
-     1030,   68, 1018, 1020, 1022, 1025, 1026, 1027,   68,   68,
-     1031,   68,   68, 1029, 1032, 1035,   68,   68,   68,   68,
-       68,   68,   68, 1028, 1039, 1042,   68, 1034, 1038,   68,
-
-     1033, 1044,   68, 1036, 1043,   68,   68, 1037, 1047,   68,
-       68, 1041, 1048,   68,   68,   68,   68, 1040, 1052,   68,
-     1053,   68,   68, 1056,   68, 1045, 1050,   68, 1046, 1049,
-     1057,   68, 1055, 1058,   68, 1051, 1067,   68, 1060,   68,
-       68, 1054, 1059,   68, 1061, 1062,   68,   68, 1064, 1065,
-       68,   68, 1063,   68, 1069,   68, 1066, 1068,   68, 1071,
-       68,   68, 1070,   68, 1074,   68, 1075,   68, 1076,   68,
-       68,   68, 1078,   68,   68,   68, 1072, 1079, 1081,   68,
-       68, 1073, 1077,   68, 1082,   68, 1086,   68,   73,   68,
-      122,  120,  118,  117, 1080, 1083,  115, 1084,  113,   68,
-
-     1087, 1087, 1087, 1087, 1085,   40,   40,   40,   40,   40,
-       40,   45,   45,   45,   45,   45,   45,   50,   50,   50,
-       50,   50,   50,   56,   56,   56,   56,   56,   56,   61,
-       61,   61,   61,   61,   61,   71,   71,   71,   71,   71,
-       71,  112,  112, 1087, 1087,  112,  112,  114,  114, 1087,
-      114, 1087,  114,  116, 1087, 1087, 1087, 1087,  116,  119,
-      119, 1087, 1087,  119,  119,  121, 1087, 1087, 1087, 1087,
-      121,  123,  123,  123,  123,  123,  123,   72,   72,   72,
-       72,   72,   72,   13, 1087, 1087, 1087, 1087, 1087, 1087,
-     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
-
-     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
-     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
-     1087, 1087, 1087
+       68,  266,  280,   68,  265,   68,  269,   68,  277,  276,
+
+       68,   68,  268,   68,   73,  270,  271,   68,  278,  279,
+      282,   68,  285,  281,   68,  284,   68,  272,  273,  274,
+      283,   68,  275,  286,  287,   68,   68,   68,   68,  292,
+      289,  288,  290,  122,   68,  291,   68,   68,   68,  300,
+      298,   68,  294,  295,   68,  293,  297,  299,   68,   68,
+       68,   68,  303,  304,  301,  302,  296,   68,   68,   68,
+       68,  306,  308,   68,  307,   68,  305,   68,  309,   68,
+      310,  312,   68,   68,  313,   68,   68,   68,   68,   68,
+      319,  311,  317,   68,  314,   68,  318,   68,  322,  316,
+       68,  327,   68,  315,  320,  323,   68,   68,  321,   68,
+
+      330,  328,   68,  324,   68,  332,   68,   68,  331,  334,
+      326,   68,  329,  325,   68,   68,  337,  333,   68,   68,
+      122,  342,   68,  338,  341,  335,   68,  344,   68,  336,
+       68,   68,  343,  340,  339,   68,  351,  346,  347,  349,
+       68,   68,  345,   68,  348,  350,   68,  352,   68,  353,
+       68,  354,   68,   68,   68,  357,   68,  355,  356,   68,
+       68,   68,   68,  358,   68,  805,  359,  361,   68,   68,
+      366,  363,  367,  360,   68,  120,  364,   68,  362,   68,
+      365,   68,  368,   68,  373,  369,   68,  371,  372,   68,
+       68,   68,  374,  375,  376,   68,   68,   68,   68,   68,
+
+      377,  382,   68,  380,  381,  383,   68,  370,  384,   68,
+       68,  379,   68,   68,  378,  386,  387,   68,  385,   68,
+      388,   68,  389,  390,   68,  391,  394,   68,  395,   68,
+       68,   68,   68,  396,   68,  392,   68,  397,   68,  393,
+       68,  118,   68,   68,   68,  401,  398,  402,  403,  400,
+       68,  406,   68,  399,   68,  404,   68,  122,  405,  410,
+      412,  407,  409,   68,  411,   68,   68,   68,  408,   68,
+       68,   68,   68,  419,   68,  414,  418,   68,   68,  425,
+      417,   68,   68,   68,  413,  415,  416,   68,  428,   68,
+      429,  420,   68,  430,  421,  426,  431,   68,  432,  422,
+
+       68,   68,   68,  433,   68,  423,  424,  427,   68,  436,
+      435,   68,  439,   68,   68,   68,  438,  440,   68,  437,
+       68,  434,   68,  442,  441,   68,   68,   68,  443,  448,
+      445,  447,   68,  446,   68,   68,   68,   68,  450,   68,
+      444,   68,  452,   68,   68,   68,  449,  453,  455,  456,
+      451,   68,  458,   68,   68,  454,  457,  462,   68,  460,
+       68,   68,   68,   68,  463,  459,   68,   68,  461,   68,
+      468,  466,   68,  465,   68,  469,  472,  464,   68,  474,
+       68,   68,  475,  122,  467,  470,   68,  471,   68,   68,
+       68,  488,   68,   68,   68,   68,   68,  117,  473,   68,
+
+       68,  476,   68,  489,   68,  484,  485,  487,  496,  492,
+      490,  493,  477,   68,  483,  486,  478,   68,  479,   68,
+      494,   68,  480,  498,  481,  500,  495,   68,  491,  482,
+       68,  497,  499,   68,   68,   68,   68,  501,   68,   68,
+       68,  504,   68,   68,  506,  509,  502,  505,  503,   68,
+       68,  115,   68,   68,  511,   68,  508,  512,  510,   68,
+      507,   68,  514,  516,  513,   68,  515,   68,   68,   68,
+      517,   68,  523,  518,  519,  521,  520,   68,   68,   68,
+      522,   68,  525,  524,   68,   68,   68,   68,   68,   68,
+       68,  529,  530,  531,  536,   68,  533,  534,  528,  526,
+
+      532,   68,   68,  535,  527,   68,   68,  539,   68,   68,
+       68,   68,   68,   68,  545,   68,   68,   68,  541,   68,
+      538,  546,   68,   68,  537,   68,  540,  544,  549,  542,
+      550,  547,  551,   68,   68,   68,  548,  543,   68,  554,
+       68,   68,   68,  552,  553,  557,   68,   68,   68,   68,
+       68,   68,   68,   68,  113,  563,   68,  555,   68,  556,
+       68,  558,  559,  561,   73,  566,  564,  560,  562,   68,
+       68,  573,  565,  569,  567,  570,  571,  568,  574,   68,
+      572,   68,   68,   68,   68,  575,   68,  576,   68,  577,
+      580,  581,   68,  578,   68,   68,   68,  582,  583,   68,
+
+       68,   68,   68,   68,  579,  588,   68,   68,  584,   68,
+       68,   68,   73,  585,  591,  586,   68,  587,  589,  593,
+      590,  597,   68,  598,   68,  592,   68,  594,   68,  596,
+       68,  599,  595,  600,   68,   68,  601,   68,  602,  607,
+      603,   68,  608,  605,   68,  609,  604,   68,  606,   68,
+       68,   68,   68,  613,   68,   68,   68,   73,  610,   68,
+       68,  617,   68,  612,   68,   68,   68,  621,   68,   68,
+      611,  622,   68,   68,  625,  614,  615,  616,   68,   68,
+       68,   68,  618,  620,  627,   68,  624,   68,   68,  619,
+      631,   68,  623,  626,  632,  629,  633,  628,  630,   68,
+
+       68,   68,   68,   68,  639,  640,  634,  638,  635,   68,
+       68,   68,  641,   68,   68,  636,  644,   68,  642,   68,
+      645,   68,  637,  646,   68,  648,  649,   68,   68,   68,
+       68,   68,   68,  643,   68,   68,  647,   68,   68,  657,
+       68,   68,   68,  660,  658,   68,  650,  651,  652,  653,
+      656,  654,   68,  655,  659,  662,   68,  663,  665,  666,
+      667,   68,  661,   68,   68,  664,   68,   68,   68,  668,
+       68,   68,  673,   68,   68,  671,   68,  675,   68,   68,
+       68,   68,  669,  677,   68,   68,  672,   68,   68,  676,
+      679,   68,   68,  670,  674,   68,  684,  683,  685,  678,
+
+       68,  681,  680,   68,   68,   68,  687,  682,  686,  688,
+       68,   68,  691,  690,   68,   68,   68,  689,  696,   68,
+      694,  695,   68,  692,   68,   68,   68,  697,   68,   68,
+      703,   68,   68,   68,  693,   68,  122,   68,   68,   68,
+      711,  702,  698,  701,   68,  699,  700,   68,   68,   68,
+       68,  704,  705,  707,  706,  710,  708,  712,  714,  709,
+       68,  715,  717,  713,  718,   68,   68,   68,   68,  716,
+      719,   68,   68,   68,  724,   68,   68,  727,  728,  720,
+       68,   68,   68,   68,   68,  722,  721,  729,  732,   68,
+      723,  725,  730,   68,  726,   68,   68,   68,  731,   68,
+
+       68,   68,  733,  738,   68,  739,  740,   68,   68,   68,
+      745,  735,  734,  741,  736,   68,   68,  737,   68,   68,
+       68,  744,   68,  743,   68,  748,  749,   68,  746,  750,
+      742,  751,   68,  752,  755,   68,  747,   68,   68,  756,
+       68,  757,   68,  753,  754,   68,  759,  761,  758,   68,
+       68,   68,   68,  763,   68,  760,  764,   68,   68,   68,
+       68,   68,  765,   68,  766,   68,  773,   68,   68,  767,
+       68,   68,   68,   68,  762,  776,   68,  768,  769,  770,
+      775,  771,  777,   68,  779,   68,  783,  774,   68,  772,
+      782,   68,  781,   68,   68,   68,  778,   68,  780,  786,
+
+      785,   68,   68,   68,  787,   68,   68,  795,  784,  791,
+       68,   68,   68,  798,  792,  796,  789,  788,   68,  797,
+       68,  790,   68,  799,  794,  800,   68,  793,   68,   68,
+       68,  804,  802,  806,  801,   68,   68,   68,   68,  808,
+       68,  807,   68,  809,   68,   68,   68,  810,   68,  814,
+      811,  803,   68,  816,  812,   68,   68,  818,  813,   68,
+      815,  817,   68,   68,  820,   68,   68,  821,  822,   68,
+       68,  824,  819,   68,   68,   68,  823,   68,  826,   68,
+      825,   68,   68,  832,  831,  827,  828,   68,  835,   68,
+      829,   68,   68,   68,  838,   68,  834,  830,  837,   68,
+
+      833,   68,   68,  843,  839,   68,  840,   68,   68,   68,
+      844,  847,   68,  841,   68,   68,   68,  836,   68,   68,
+       68,   68,  842,  846,   68,  849,  845,  848,  850,  851,
+      852,   68,  853,   68,  854,   68,   68,  855,   68,  856,
+      859,  857,  860,   68,   68,  861,   68,   68,  863,  858,
+       68,  864,  866,   68,  868,   68,   68,  862,   68,  867,
+      865,   68,  869,  871,   68,   68,   68,   68,  870,  872,
+       68,  874,   68,   68,   68,   68,   68,   68,  880,  873,
+      915,   68,   68,  883,   68,  878,  875,  884,   68,  876,
+      881,  885,   68,  877,  882,  879,   68,  886,  887,   68,
+
+      888,   68,  890,   68,  891,   68,   68,  893,   68,   68,
+       68,  892,  895,   68,   68,  889,  897,   68,   68,  899,
+      898,  901,   68,   68,  903,   68,  904,   68,  894,   68,
+       68,  906,  896,   68,  900,   68,   68,   68,   68,   68,
+      908,   68,  902,  910,  914,  907,   68,   68,  912,   68,
+      913,  120,  911,   68,  918,  905,  917,  909,  919,   68,
+      920,   68,   68,   68,   68,  923,  916,   68,  921,  924,
+      925,   68,   68,  922,   68,   68,  926,  927,  928,   68,
+       68,  932,   68,   68,   68,  931,   68,  929,  933,  935,
+       68,   68,   68,  937,   68,  930,   68,  938,  936,  934,
+
+      939,   68,  940,   68,  941,   68,  942,   68,  943,   68,
+      944,   68,   68,   68,  945,  947,   68,  946,  948,   68,
+       68,  949,  951,   68,   68,  950,   68,  953,   68,   68,
+       68,  958,   68,   68,   68,   68,  952,   68,  954,   68,
+      955,  956,  959,   68,   68,   68,   68,  967,   68,  965,
+      957,  966,  962,   68,  969,  961,   68,  964,   68,   68,
+      960,  963,   68,  968,   68,  970,  975,   68,  976,   68,
+       68,   68,   68,   68,  982,   68,  971,  972,  973,   68,
+       68,   68,  981,  974,  977,  985,   68,   68,   68,  978,
+       68,  979,  980,  987,   68,  983,   68,  988,   68,  984,
+
+       68,   68,   68,   68,   68,  991,  986,  990,  992,  993,
+      989,   68, 1062,   68,  998,   68,  995,  994,  996,  997,
+      999,   68, 1000,   68, 1001,   68,   68,   68,   68,   68,
+       68, 1002, 1004,   68,   68, 1007,   68, 1005,   68, 1003,
+     1011,   68, 1006,   68,   68, 1008,   68,   68,   68, 1009,
+       68,  118, 1012, 1014, 1013,   68, 1015, 1010, 1017,   68,
+       68, 1019,   68, 1016, 1018, 1020, 1021,   68, 1022,   68,
+       68, 1025,   68, 1023, 1026,   68,   68,   68,   68,   68,
+       68, 1027,   68,   68, 1024,   68, 1029, 1032,   68,   68,
+       68, 1028,   68, 1037, 1039,   68, 1031, 1035, 1030,   68,
+
+       68,   68,   68, 1033, 1040,   68,   68,   68, 1041, 1036,
+     1038, 1034, 1045, 1043, 1042,   68, 1046,   68,   68,   68,
+     1051,   68,   68, 1048,   68, 1049, 1047, 1044,   68,   68,
+       68,   68, 1058,   68, 1050, 1055, 1054,   68, 1052, 1060,
+       68,   68, 1059, 1053, 1063,   68, 1064,   68,   68,   68,
+     1057,   68, 1068,   68,   68, 1056, 1069,   68,   68,   68,
+       68, 1061, 1084, 1066, 1071, 1072,   68, 1065, 1080, 1067,
+     1073,   68,   68, 1070, 1074,   68,   68, 1075, 1076,   68,
+       68, 1077, 1078,   68,   68, 1081,   68,   68,   68, 1079,
+     1085,   68, 1082,   68, 1087,   68, 1083, 1086,   68, 1090,
+
+       68, 1091,   68, 1088, 1092,   68,   68,   68, 1094,   68,
+       68, 1097,   68, 1095,   68,   68, 1089,   68, 1093,   68,
+     1102,   68,  117, 1098,  115,  113,   68, 1103, 1103, 1100,
+     1096, 1103, 1099, 1103, 1103, 1103, 1103, 1103, 1101,   40,
+       40,   40,   40,   40,   40,   45,   45,   45,   45,   45,
+       45,   50,   50,   50,   50,   50,   50,   56,   56,   56,
+       56,   56,   56,   61,   61,   61,   61,   61,   61,   71,
+       71,   71,   71,   71,   71,  112,  112, 1103, 1103,  112,
+      112,  114,  114, 1103,  114, 1103,  114,  116, 1103, 1103,
+     1103, 1103,  116,  119,  119, 1103, 1103,  119,  119,  121,
+
+     1103, 1103, 1103, 1103,  121,  123,  123,  123,  123,  123,
+      123,   72,   72,   72,   72,   72,   72,   13, 1103, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103
     } ;
 
-static yyconst flex_int16_t yy_chk[2224] =
+static yyconst flex_int16_t yy_chk[2258] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1046,7 +1054,7 @@ static yyconst flex_int16_t yy_chk[2224] =
         9,   24,   33,    6,    7,    7,    7,    7,    9,    7,
        10,   10,   10,   26,   26,    7,    8,    8,    8,    8,
        10,    8,   26,   33,  110,   24,   25,    8,   11,   11,
-       11,   11,   11,   11, 1093,   20,  110,   20,   20,   11,
+       11,   11,   11,   11, 1109,   20,  110,   20,   20,   11,
 
        20,   25,   66,   27,   28,   20,   23,   27,   11,   12,
        12,   12,   12,   12,   12,   23,   66,   27,   23,   28,
@@ -1066,7 +1074,7 @@ static yyconst flex_int16_t yy_chk[2224] =
        94,   88,   95,   96,   87,   97,   98,   94,   99,   97,
       100,  102,  101,  103,  107,   95,  104,   99,  105,  105,
       106,  108,  109,   96,   98,  101,  102,  109,  111,  136,
-      100,  471,  103,  136,  104,  107,  113,  113,  106,  105,
+      100,  475,  103,  136,  104,  107,  113,  113,  106,  105,
       115,  120,  120,  115,  108,  117,  111,  117,  117,  122,
       117,  122,  122,  127,  122,  123,  123,  123,  123,  125,
 
@@ -1094,194 +1102,197 @@ static yyconst flex_int16_t yy_chk[2224] =
 
       224,  225,  214,  216,  124,  216,  216,  226,  219,  220,
       223,  228,  226,  222,  229,  225,  230,  216,  216,  216,
-      224,  227,  227,  231,  227,  232,  233,  234,  245,  232,
-      229,  228,  230,  235,  236,  237,  238,  231,  121,  237,
-      245,  234,  235,  236,  233,  238,  239,  240,  247,  241,
-      244,  239,  251,  240,  241,  235,  242,  242,  243,  244,
-      246,  248,  248,  243,  252,  246,  250,  250,  253,  247,
-      254,  256,  252,  251,  257,  258,  259,  253,  260,  261,
-      258,  262,  254,  260,  259,  263,  263,  264,  257,  265,
-      266,  256,  268,  263,  265,  267,  267,  261,  270,  265,
-
-      262,  263,  269,  269,  271,  272,  273,  264,  275,  274,
-      266,  263,  119,  270,  274,  276,  271,  268,  277,  279,
-      278,  282,  277,  281,  272,  278,  283,  275,  273,  283,
-      276,  284,  279,  280,  280,  281,  282,  285,  285,  286,
-      286,  287,  288,  288,  284,  290,  287,  289,  289,  291,
-      290,  292,  293,  295,  291,  292,  294,  293,  295,  296,
-      294,  297,  298,  300,  300,  299,  297,  301,  299,  311,
-      304,  302,  301,  299,  302,  305,  298,  299,  303,  296,
-      305,  306,  303,  304,  307,  308,  306,  311,  308,  309,
-      307,  310,  309,  312,  313,  314,  310,  315,  316,  313,
-
-      314,  315,  315,  316,  303,  317,  318,  312,  319,  318,
-      320,  321,  319,  319,  317,  321,  322,  323,  324,  325,
-      326,  326,  327,  328,  325,  329,  327,  330,  328,  331,
-      320,  322,  332,  324,  336,  323,  338,  118,  333,  332,
-      334,  329,  331,  333,  335,  334,  330,  337,  339,  335,
-      338,  340,  336,  339,  340,  343,  337,  341,  341,  344,
-      343,  345,  349,  346,  352,  357,  353,  354,  358,  345,
-      353,  356,  354,  352,  359,  359,  356,  344,  346,  349,
-      355,  360,  362,  357,  355,  361,  361,  355,  360,  363,
-      363,  364,  355,  358,  364,  365,  366,  362,  355,  355,
-
-      367,  367,  368,  369,  366,  370,  370,  371,  369,  375,
-      371,  373,  372,  374,  380,  365,  377,  368,  372,  373,
-      376,  374,  383,  377,  116,  376,  379,  375,  378,  378,
-      389,  379,  382,  380,  387,  382,  383,  384,  384,  385,
-      388,  391,  385,  387,  388,  390,  392,  393,  394,  389,
-      385,  396,  392,  394,  390,  391,  395,  397,  398,  399,
-      395,  393,  403,  398,  400,  400,  402,  404,  401,  397,
-      396,  401,  405,  405,  407,  403,  406,  406,  408,  410,
-      399,  411,  418,  412,  402,  414,  413,  404,  415,  407,
-      416,  416,  114,  415,  418,  417,  411,  412,  416,  414,
-
-      419,  419,  408,  409,  410,  420,  409,  413,  409,  417,
-      420,  422,  409,  421,  409,  423,  416,  424,  424,  409,
-      427,  421,  426,  427,  428,  422,  429,  426,  430,  431,
-      432,  433,  434,  430,  423,  432,  435,  437,  431,  429,
-      438,  435,  439,  428,  440,  438,  434,  439,  441,  440,
-      443,  433,  437,  442,  442,  443,  447,  441,  445,  445,
-      446,  448,  445,  446,  449,  450,  452,  449,  451,  452,
-      450,  447,  453,  451,  454,  455,  458,  456,  457,  458,
-      459,  448,  456,  457,  460,  462,  464,  461,  455,  460,
-      453,  459,  461,  465,  454,  463,  463,  466,  467,  468,
-
-      462,  466,  469,  472,  473,  464,  474,  465,  468,  473,
-      475,  474,  476,  477,  478,  480,  467,  472,  477,  479,
-      479,  481,  483,  482,  475,  484,  476,  469,  482,  478,
-      481,  485,  486,  480,  487,  485,  488,  489,  490,  491,
-      493,  483,  492,  494,  484,  491,  497,  486,  496,  487,
-      498,  611,  494,  611,  497,  488,  490,  492,  489,  499,
-      493,  500,  496,  501,  499,  500,  500,  502,  503,  503,
-      498,  506,  502,  504,  505,  505,  501,  507,  504,  508,
-      512,  509,  510,  515,  508,  506,  509,  510,  511,  512,
-      514,  517,  511,  513,  512,  507,  512,  513,  512,  516,
-
-      518,  515,  519,  520,  521,  514,  522,  522,  518,  524,
-      517,  523,  523,  516,  524,  525,  525,  526,  527,  528,
-      519,  529,  531,  521,  528,  530,  527,  533,  520,  531,
-      534,  530,  533,  535,  536,  534,  537,  526,  535,  529,
-      538,  538,  539,  536,  540,  541,  542,  542,  543,  544,
-      548,  545,  547,  549,  550,  537,  547,  547,  551,  550,
-      553,  552,  539,  541,  540,  552,  554,  555,  543,  545,
-      556,  549,  559,  561,  544,  556,  548,  557,  551,  553,
-      554,  562,  558,  560,  557,  569,  555,  558,  561,  563,
-      559,  564,  560,  565,  563,  572,  564,  575,  565,  566,
-
-      566,  568,  562,  570,  569,  573,  568,  570,  570,  571,
-      571,  573,  574,  576,  572,  577,  575,  574,  578,  579,
-      580,  581,  582,  582,  583,  584,  585,  586,  583,  587,
-      587,  589,  576,  579,  577,  585,  581,  578,  584,  588,
-      590,  580,  597,  591,  588,  590,  598,  586,  591,  594,
-      594,  589,  596,  599,  600,  596,  602,  597,  599,  601,
-      601,  603,  603,  604,  605,  606,  609,  608,  605,  600,
-      610,  598,  612,  613,  604,  614,  602,  612,  613,  618,
-      621,  615,  622,  617,  606,  608,  609,  615,  617,  619,
-      610,  623,  619,  620,  620,  614,  623,  627,  621,  628,
-
-      624,  629,  622,  626,  618,  624,  625,  625,  626,  630,
-      633,  631,  632,  634,  635,  627,  636,  632,  638,  628,
-      637,  629,  641,  630,  631,  641,  643,  642,  644,  637,
-      633,  636,  637,  634,  638,  635,  642,  644,  645,  646,
-      644,  647,  647,  648,  646,  643,  649,  645,  650,  652,
-      651,  653,  653,  654,  655,  657,  658,  662,  663,  649,
-      657,  658,  659,  648,  651,  662,  650,  652,  659,  654,
-      660,  664,  655,  660,  666,  665,  663,  668,  669,  660,
-      670,  671,  669,  673,  672,  670,  671,  674,  676,  675,
-      664,  665,  666,  672,  675,  677,  678,  668,  673,  674,
-
-      676,  680,  678,  679,  679,  681,  681,  682,  683,  691,
-      680,  684,  682,  677,  685,  685,  686,  686,  687,  687,
-      688,  690,  693,  688,  696,  692,  690,  691,  697,  683,
-      692,  684,  694,  694,  695,  698,  696,  699,  696,  695,
-      700,  701,  703,  696,  702,  702,  705,  693,  697,  704,
-      706,  707,  709,  705,  710,  698,  714,  699,  704,  706,
-      712,  700,  703,  708,  708,  712,  713,  701,  715,  716,
-      710,  713,  717,  718,  716,  715,  714,  707,  709,  719,
-      720,  717,  721,  722,  723,  725,  724,  732,  721,  728,
-      725,  726,  722,  718,  719,  726,  726,  727,  729,  720,
-
-      724,  728,  727,  729,  730,  723,  731,  734,  733,  735,
-      731,  737,  732,  733,  736,  736,  730,  737,  738,  739,
-      742,  735,  740,  738,  745,  739,  744,  744,  746,  734,
-      750,  740,  742,  751,  753,  750,  753,  746,  744,  752,
-      752,  756,  745,  754,  754,  757,  757,  758,  759,  766,
-      751,  760,  761,  763,  762,  769,  765,  764,  765,  112,
-      759,  756,  764,  760,  761,  767,  775,  766,  758,  762,
-      768,  768,  770,  763,  767,  772,  771,  770,  771,  773,
-      772,  769,  774,  776,  773,  777,  775,  778,  776,  779,
-      777,  780,  780,  781,  786,  782,  787,  784,  785,  783,
-
-      774,  791,  795,  779,  782,  781,  778,  782,  783,  784,
-      788,  785,  787,  790,  786,  792,  788,  793,  793,  790,
-      794,  795,   74,  796,  792,  797,  791,  796,  800,  794,
-      797,  798,  798,  801,  801,  802,  802,  800,  803,  804,
-      806,  805,  807,  808,  804,  805,  809,  807,  810,  811,
-      803,  812,  823,  814,  815,  806,  814,  816,  817,  817,
-       72,  811,  808,  818,  818,  809,  820,  815,  829,  810,
-      816,  823,  812,  819,  819,  821,  821,  822,  822,  820,
-      824,  824,  825,  825,  827,  828,  828,  829,  831,  827,
-      830,  830,  832,  833,  834,  834,  833,  836,  832,  835,
-
-      835,  837,  837,  839,  839,  840,  831,  841,  841,  842,
-      834,  844,  843,  845,  846,  847,  836,  843,  845,  848,
-      849,  842,  850,  852,  847,  849,  850,  853,  848,  846,
-      855,  840,  844,  854,  854,  855,  853,  857,  859,  860,
-      865,  859,  866,  852,  860,  861,  861,  862,  900,  857,
-      863,  862,  867,  863,  864,  864,  868,  867,  869,  870,
-      865,  868,  866,  871,  869,  872,  900,  873,  871,  873,
-      876,  876,  888,  872,  889,  870,  879,  879,  882,  882,
-      884,  884,  886,  887,  887,  890,  904,  886,  888,  895,
-      890,  892,  892,  896,  895,  896,  889,  897,  898,  898,
-
-      899,  901,  897,  902,  903,  906,  904,  905,  905,  907,
-      908,  909,  899,  901,  906,  902,  903,  910,  911,  912,
-      912,  914,  910,  911,  909,  915,  915,  917,  918,  919,
-      908,  921,  920,  922,  922,  907,  917,  923,  924,  914,
-      925,  926,  923,  930,  932,  932,  918,  919,  920,  931,
-      921,  933,  931,  924,  934,  936,  936,  937,  941,  925,
-      942,  926,  947,  930,  938,  938,  933,  940,  940,  942,
-      943,  945,  934,  944,  950,  943,  937,  947,  944,  945,
-      941,  948,  949,  951,  951,  955,  948,  949,  954,  950,
-      952,  952,  956,  954,  957,  956,  958,  955,  959,  959,
-
-      960,  962,  963,  957,  965,  958,  964,  964,  966,  960,
-      967,  970,  974,  965,  969,  967,  966,  972,  972,  976,
-      962,  963,  976,  969,  970,  975,  975,  977,  977,  978,
-      978,  979,  974,  980,  981,  982,  982,  983,  986,  981,
-      987,  983,  988,  989,  991,  990,  992,  980,  987,  979,
-      990,  993,  996,  994,  999,  996,  997,  986,  999,  989,
-      993,  988,  998,  998,  991, 1003, 1000, 1002, 1004, 1008,
-     1008, 1009,  992,  994,  997, 1000, 1002, 1003, 1007, 1011,
-     1009, 1012, 1013, 1007, 1011, 1014, 1014, 1015, 1016, 1018,
-     1017, 1019, 1020, 1004, 1018, 1021, 1021, 1013, 1017, 1022,
-
-     1012, 1024, 1024, 1015, 1022, 1025, 1026, 1016, 1027, 1027,
-     1029, 1020, 1028, 1028, 1030, 1031, 1054, 1019, 1032, 1032,
-     1033, 1033, 1034, 1037, 1037, 1025, 1030, 1036, 1026, 1029,
-     1038, 1038, 1036, 1039, 1039, 1031, 1054, 1040, 1041, 1041,
-     1049, 1034, 1040, 1043, 1043, 1045, 1045, 1046, 1049, 1050,
-     1050, 1051, 1046, 1055, 1059, 1059, 1051, 1055, 1061, 1063,
-     1063, 1064, 1061, 1066, 1067, 1067, 1068, 1068, 1070, 1070,
-     1072, 1073, 1073, 1077, 1078, 1080, 1064, 1077, 1079, 1079,
-     1082, 1066, 1072, 1083, 1080, 1084, 1085, 1085,   70,   67,
-       61,   56,   51,   50, 1078, 1082,   45, 1083,   40,   14,
-
-       13,    0,    0,    0, 1084, 1088, 1088, 1088, 1088, 1088,
-     1088, 1089, 1089, 1089, 1089, 1089, 1089, 1090, 1090, 1090,
-     1090, 1090, 1090, 1091, 1091, 1091, 1091, 1091, 1091, 1092,
-     1092, 1092, 1092, 1092, 1092, 1094, 1094, 1094, 1094, 1094,
-     1094, 1095, 1095,    0,    0, 1095, 1095, 1096, 1096,    0,
-     1096,    0, 1096, 1097,    0,    0,    0,    0, 1097, 1098,
-     1098,    0,    0, 1098, 1098, 1099,    0,    0,    0,    0,
-     1099, 1100, 1100, 1100, 1100, 1100, 1100, 1101, 1101, 1101,
-     1101, 1101, 1101, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
-     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
-
-     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
-     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
-     1087, 1087, 1087
+      224,  231,  216,  227,  227,  232,  227,  233,  234,  232,
+      229,  228,  230,  121,  235,  231,  237,  236,  238,  239,
+      237,  247,  234,  235,  239,  233,  236,  238,  240,  245,
+      241,  242,  242,  243,  240,  241,  235,  244,  243,  246,
+      251,  245,  247,  252,  246,  253,  244,  248,  248,  250,
+      250,  252,  254,  256,  253,  257,  261,  258,  259,  262,
+      260,  251,  258,  268,  254,  260,  259,  263,  263,  257,
+      264,  265,  266,  256,  261,  263,  265,  271,  262,  267,
+
+      267,  265,  270,  263,  269,  269,  272,  273,  268,  271,
+      264,  274,  266,  263,  275,  276,  274,  270,  277,  280,
+      278,  279,  283,  275,  278,  272,  279,  281,  281,  273,
+      282,  285,  280,  277,  276,  284,  288,  283,  284,  286,
+      286,  288,  282,  741,  285,  287,  287,  289,  289,  290,
+      290,  291,  292,  297,  293,  294,  291,  292,  293,  295,
+      294,  296,  298,  295,  299,  741,  296,  298,  300,  301,
+      301,  300,  302,  297,  305,  119,  300,  302,  299,  303,
+      300,  304,  303,  306,  307,  304,  308,  305,  306,  307,
+      309,  310,  308,  309,  310,  311,  312,  313,  314,  315,
+
+      311,  316,  321,  314,  315,  316,  316,  304,  317,  318,
+      323,  313,  319,  317,  312,  319,  320,  324,  318,  322,
+      320,  320,  321,  322,  325,  323,  326,  327,  327,  328,
+      330,  326,  329,  328,  331,  324,  332,  329,  333,  325,
+      337,  118,  334,  335,  338,  333,  330,  334,  335,  332,
+      336,  338,  339,  331,  340,  336,  342,  341,  337,  342,
+      345,  339,  341,  343,  343,  345,  346,  347,  340,  351,
+      348,  354,  355,  356,  358,  347,  355,  359,  356,  358,
+      354,  364,  360,  362,  346,  348,  351,  357,  361,  361,
+      362,  357,  363,  363,  357,  359,  364,  365,  365,  357,
+
+      366,  367,  368,  366,  370,  357,  357,  360,  369,  369,
+      368,  371,  372,  372,  373,  375,  371,  373,  374,  370,
+      376,  367,  377,  375,  374,  378,  379,  382,  376,  381,
+      378,  380,  380,  379,  381,  384,  385,  391,  384,  389,
+      377,  386,  386,  392,  387,  390,  382,  387,  389,  390,
+      385,  393,  392,  394,  395,  387,  391,  396,  398,  394,
+      397,  399,  396,  401,  397,  393,  400,  404,  395,  402,
+      402,  400,  403,  399,  405,  403,  406,  398,  407,  408,
+      408,  406,  409,  409,  401,  404,  410,  405,  411,  413,
+      414,  418,  415,  417,  416,  420,  418,  116,  407,  421,
+
+      424,  410,  419,  419,  426,  414,  415,  417,  424,  420,
+      419,  421,  411,  412,  413,  416,  412,  425,  412,  422,
+      422,  423,  412,  426,  412,  429,  423,  431,  419,  412,
+      429,  425,  427,  427,  430,  432,  433,  430,  434,  435,
+      436,  433,  437,  440,  435,  438,  431,  434,  432,  441,
+      438,  114,  442,  444,  441,  451,  437,  442,  440,  443,
+      436,  450,  444,  446,  443,  445,  445,  453,  446,  448,
+      448,  449,  453,  448,  449,  451,  450,  452,  454,  455,
+      452,  456,  455,  454,  457,  458,  459,  460,  465,  462,
+      461,  459,  460,  461,  466,  466,  463,  464,  458,  456,
+
+      462,  463,  464,  465,  457,  467,  468,  469,  470,  471,
+      472,  469,  473,  476,  477,  482,  478,  479,  471,  477,
+      468,  478,  480,  481,  467,  484,  470,  476,  481,  472,
+      482,  479,  483,  483,  486,  485,  480,  473,  487,  486,
+      488,  489,  493,  484,  485,  489,  490,  491,  492,  495,
+      494,  496,  497,  502,  112,  495,  498,  487,  505,  488,
+      500,  490,  491,  493,   74,  498,  496,  492,  494,  501,
+      503,  505,  497,  502,  500,  503,  504,  501,  506,  510,
+      504,  504,  508,  506,  507,  507,  511,  508,  509,  509,
+      512,  513,  514,  510,  515,  512,  513,  514,  515,  516,
+
+      520,  517,  519,  518,  511,  517,  521,  524,  516,  523,
+      525,  522,   72,  516,  520,  516,  530,  516,  518,  522,
+      519,  526,  526,  527,  527,  521,  528,  523,  533,  525,
+      531,  528,  524,  529,  529,  532,  530,  534,  531,  537,
+      532,  535,  538,  534,  537,  539,  533,  538,  535,  540,
+      539,  541,  542,  543,  543,  544,  545,   70,  540,  546,
+      547,  547,  548,  542,  549,  550,  553,  552,  554,  555,
+      541,  552,  552,  556,  555,  544,  545,  546,  558,  560,
+      557,  559,  548,  550,  557,  561,  554,  562,  564,  549,
+      561,  563,  553,  556,  562,  559,  563,  558,  560,  565,
+
+      566,  567,  568,   67,  569,  570,  564,  568,  565,  569,
+      570,  571,  571,  573,  574,  566,  575,  577,  573,  578,
+      575,  575,  567,  576,  576,  578,  579,  580,  581,  582,
+      583,  579,  585,  574,  590,  586,  577,  584,  587,  587,
+      588,  589,  591,  590,  588,  594,  580,  581,  582,  583,
+      586,  584,  593,  585,  589,  592,  592,  593,  595,  596,
+      599,  599,  591,  595,  596,  594,  601,  602,  603,  601,
+      604,  605,  606,  606,  607,  604,  608,  608,  609,  610,
+      611,  615,  602,  610,  614,  612,  605,  616,  620,  609,
+      612,  618,  624,  603,  607,  617,  618,  617,  619,  611,
+
+      621,  615,  614,  619,  623,  627,  621,  616,  620,  623,
+      625,  626,  626,  625,  628,  629,  630,  624,  631,  631,
+      629,  630,  632,  627,  633,  634,  635,  632,  637,  636,
+      638,  639,  640,  641,  628,  638,   61,  647,  642,  644,
+      647,  637,  633,  636,  649,  634,  635,  643,  648,  650,
+      654,  639,  640,  642,  641,  644,  643,  648,  650,  643,
+      651,  650,  652,  649,  653,  653,  655,  652,  656,  651,
+      654,  657,  658,  659,  659,  660,  661,  663,  664,  655,
+      668,  665,  663,  664,  669,  657,  656,  665,  668,  666,
+      658,  660,  666,  670,  661,  671,  672,  674,  666,  675,
+
+      676,  677,  669,  675,  678,  676,  677,  679,  680,  681,
+      682,  671,  670,  678,  672,  682,  683,  674,  684,  685,
+      687,  681,  690,  680,  691,  685,  686,  686,  683,  687,
+      679,  688,  688,  689,  692,  692,  684,  698,  689,  693,
+      693,  694,  694,  690,  691,  695,  697,  699,  695,  700,
+      703,  697,  699,  701,  701,  698,  702,  704,  705,  706,
+      707,  702,  703,  708,  703,  709,  709,  710,  712,  703,
+      714,  711,  716,  713,  700,  712,  717,  704,  705,  706,
+      711,  707,  713,  715,  715,  719,  720,  710,  721,  708,
+      719,  720,  717,  722,  723,  724,  714,  725,  716,  723,
+
+      722,  726,  727,  728,  724,  729,  730,  732,  721,  728,
+      731,  735,  732,  734,  729,  733,  726,  725,  734,  733,
+      733,  727,  737,  735,  731,  736,  739,  730,  738,  743,
+      736,  740,  738,  742,  737,  753,  740,  745,  742,  744,
+      744,  743,  746,  745,  747,  748,  750,  746,  752,  752,
+      747,  739,  754,  753,  748,  759,  764,  758,  750,  766,
+      752,  754,  758,  760,  760,  761,  767,  761,  762,  762,
+      765,  765,  759,  768,  769,  770,  764,  771,  767,  772,
+      766,  773,  774,  773,  772,  768,  769,  775,  776,  776,
+      770,  777,  779,  778,  779,  782,  775,  771,  778,  780,
+
+      774,  781,  783,  784,  780,  785,  781,  786,  784,  787,
+      785,  788,  788,  782,  794,  789,  790,  777,  792,  793,
+      791,  795,  783,  787,  799,  790,  786,  789,  790,  791,
+      792,  800,  793,  796,  794,  798,  802,  795,  803,  796,
+      800,  798,  801,  801,  804,  802,  805,  806,  804,  799,
+      809,  805,  807,  807,  810,  810,  812,  803,  813,  809,
+      806,  811,  811,  813,  815,  814,  816,  817,  812,  814,
+      818,  816,  819,  820,  821,  823,  859,  824,  823,  815,
+      859,  825,  826,  826,  829,  820,  817,  827,  827,  818,
+      824,  828,  828,  819,  825,  821,  832,  829,  830,  830,
+
+      831,  831,  833,  833,  834,  834,  836,  837,  837,  838,
+      841,  836,  839,  839,  840,  832,  841,  842,  843,  843,
+      842,  844,  844,  845,  846,  846,  848,  848,  838,  849,
+      850,  850,  840,  851,  843,  852,  853,  855,  854,  856,
+      852,  857,  845,  854,  858,  851,  861,  862,  856,  858,
+      857,   56,  855,  863,  863,  849,  862,  853,  864,  865,
+      865,  867,  869,  864,  870,  869,  861,  875,  865,  870,
+      871,  871,  872,  867,  873,  876,  872,  873,  874,  874,
+      877,  878,  879,  880,  881,  877,  878,  875,  879,  881,
+      882,  883,  899,  883,  898,  876,  886,  886,  882,  880,
+
+      889,  889,  892,  892,  894,  894,  896,  897,  897,  910,
+      898,  896,  900,  905,  899,  902,  902,  900,  905,  906,
+      907,  906,  908,  908,  909,  907,  911,  910,  912,  913,
+      914,  915,  915,  916,  917,  918,  909,  920,  911,  919,
+      912,  913,  916,  921,  922,  926,  923,  924,  924,  922,
+      914,  923,  919,  927,  927,  918,  929,  921,  930,  931,
+      917,  920,  932,  926,  933,  929,  934,  934,  935,  936,
+      937,  938,  942,  935,  944,  944,  930,  931,  932,  943,
+      945,  946,  943,  933,  936,  948,  948,  949,  953,  937,
+     1042,  938,  942,  950,  950,  945,  952,  952,  954,  946,
+
+      955,  957,  959,  956,  962,  955,  949,  954,  956,  957,
+      953,  960, 1042,  961,  963,  963,  960,  959,  961,  962,
+      964,  964,  965,  965,  966,  966,  968,  969,  971,  970,
+      976,  968,  970,  972,  973,  973,  974,  971,  977,  969,
+      978,  978,  972,  979,  988,  974,  980,  983,  981,  976,
+      984,   51,  979,  981,  980,  993,  983,  977,  986,  986,
+      989,  989,  990,  984,  988,  990,  991,  991,  992,  992,
+      994,  995, 1002,  993,  996,  996,  995,  997, 1003, 1004,
+     1005,  997, 1006, 1007,  994, 1008, 1003, 1006, 1009, 1010,
+     1012, 1002, 1013, 1012, 1014, 1014, 1005, 1009, 1004, 1016,
+
+     1015, 1019, 1020, 1007, 1015, 1018, 1028, 1023, 1016, 1010,
+     1013, 1008, 1023, 1019, 1018, 1024, 1024, 1025, 1027, 1029,
+     1030, 1030, 1031, 1027, 1032, 1028, 1025, 1020, 1033, 1035,
+     1034, 1036, 1037, 1037, 1029, 1034, 1033, 1038, 1031, 1040,
+     1040, 1041, 1038, 1032, 1043, 1043, 1044, 1044, 1045, 1047,
+     1036, 1046, 1048, 1048, 1050, 1035, 1049, 1049, 1071, 1052,
+     1065, 1041, 1071, 1046, 1052, 1053, 1053, 1045, 1065, 1047,
+     1054, 1054, 1056, 1050, 1055, 1055, 1070, 1056, 1057, 1057,
+     1059, 1059, 1061, 1061, 1062, 1066, 1066, 1067, 1080, 1062,
+     1075, 1075, 1067, 1077, 1079, 1079, 1070, 1077, 1082, 1083,
+
+     1083, 1084, 1084, 1080, 1086, 1086, 1088, 1089, 1089, 1093,
+     1094, 1095, 1095, 1093, 1096, 1099, 1082, 1098, 1088, 1100,
+     1101, 1101,   50, 1096,   45,   40,   14,   13,    0, 1099,
+     1094,    0, 1098,    0,    0,    0,    0,    0, 1100, 1104,
+     1104, 1104, 1104, 1104, 1104, 1105, 1105, 1105, 1105, 1105,
+     1105, 1106, 1106, 1106, 1106, 1106, 1106, 1107, 1107, 1107,
+     1107, 1107, 1107, 1108, 1108, 1108, 1108, 1108, 1108, 1110,
+     1110, 1110, 1110, 1110, 1110, 1111, 1111,    0,    0, 1111,
+     1111, 1112, 1112,    0, 1112,    0, 1112, 1113,    0,    0,
+        0,    0, 1113, 1114, 1114,    0,    0, 1114, 1114, 1115,
+
+        0,    0,    0,    0, 1115, 1116, 1116, 1116, 1116, 1116,
+     1116, 1117, 1117, 1117, 1117, 1117, 1117, 1103, 1103, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1405,7 +1416,7 @@ static void config_end_include(void)
 #define YY_NO_INPUT 1
 #endif
 
-#line 1407 "<stdout>"
+#line 1418 "<stdout>"
 
 #define INITIAL 0
 #define quotedstring 1
@@ -1592,7 +1603,7 @@ YY_DECL
     
 #line 120 "util/configlexer.lex"
 
-#line 1594 "<stdout>"
+#line 1605 "<stdout>"
 
        if ( !(yy_init) )
                {
@@ -1651,13 +1662,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 1088 )
+                               if ( yy_current_state >= 1104 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 2184 );
+               while ( yy_base[yy_current_state] != 2218 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -2039,169 +2050,179 @@ YY_RULE_SETUP
 case 71:
 YY_RULE_SETUP
 #line 193 "util/configlexer.lex"
-{ YDVAR(1, VAR_BOGUS_TTL) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
        YY_BREAK
 case 72:
 YY_RULE_SETUP
 #line 194 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
        YY_BREAK
 case 73:
 YY_RULE_SETUP
 #line 195 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
+{ YDVAR(1, VAR_BOGUS_TTL) }
        YY_BREAK
 case 74:
 YY_RULE_SETUP
 #line 196 "util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
+{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
        YY_BREAK
 case 75:
 YY_RULE_SETUP
 #line 197 "util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
+{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
        YY_BREAK
 case 76:
 YY_RULE_SETUP
 #line 198 "util/configlexer.lex"
-{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
+{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
        YY_BREAK
 case 77:
 YY_RULE_SETUP
 #line 199 "util/configlexer.lex"
-{ 
-                                 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
+{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 201 "util/configlexer.lex"
-{ YDVAR(1, VAR_USE_SYSLOG) }
+#line 200 "util/configlexer.lex"
+{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 202 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_TIME_ASCII) }
+#line 201 "util/configlexer.lex"
+{ 
+                                 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
        YY_BREAK
 case 80:
 YY_RULE_SETUP
 #line 203 "util/configlexer.lex"
-{ YDVAR(2, VAR_LOCAL_ZONE) }
+{ YDVAR(1, VAR_USE_SYSLOG) }
        YY_BREAK
 case 81:
 YY_RULE_SETUP
 #line 204 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA) }
+{ YDVAR(1, VAR_LOG_TIME_ASCII) }
        YY_BREAK
 case 82:
 YY_RULE_SETUP
 #line 205 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
+{ YDVAR(2, VAR_LOCAL_ZONE) }
        YY_BREAK
 case 83:
 YY_RULE_SETUP
 #line 206 "util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
+{ YDVAR(1, VAR_LOCAL_DATA) }
        YY_BREAK
 case 84:
 YY_RULE_SETUP
 #line 207 "util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
+{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
        YY_BREAK
 case 85:
 YY_RULE_SETUP
 #line 208 "util/configlexer.lex"
-{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
+{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
        YY_BREAK
 case 86:
 YY_RULE_SETUP
 #line 209 "util/configlexer.lex"
-{ YDVAR(0, VAR_REMOTE_CONTROL) }
+{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
        YY_BREAK
 case 87:
 YY_RULE_SETUP
 #line 210 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_ENABLE) }
+{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
        YY_BREAK
 case 88:
 YY_RULE_SETUP
 #line 211 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_INTERFACE) }
+{ YDVAR(0, VAR_REMOTE_CONTROL) }
        YY_BREAK
 case 89:
 YY_RULE_SETUP
 #line 212 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_PORT) }
+{ YDVAR(1, VAR_CONTROL_ENABLE) }
        YY_BREAK
 case 90:
 YY_RULE_SETUP
 #line 213 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_KEY_FILE) }
+{ YDVAR(1, VAR_CONTROL_INTERFACE) }
        YY_BREAK
 case 91:
 YY_RULE_SETUP
 #line 214 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_CERT_FILE) }
+{ YDVAR(1, VAR_CONTROL_PORT) }
        YY_BREAK
 case 92:
 YY_RULE_SETUP
 #line 215 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
+{ YDVAR(1, VAR_SERVER_KEY_FILE) }
        YY_BREAK
 case 93:
 YY_RULE_SETUP
 #line 216 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
+{ YDVAR(1, VAR_SERVER_CERT_FILE) }
        YY_BREAK
 case 94:
 YY_RULE_SETUP
 #line 217 "util/configlexer.lex"
-{ YDVAR(1, VAR_PYTHON_SCRIPT) }
+{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
        YY_BREAK
 case 95:
 YY_RULE_SETUP
 #line 218 "util/configlexer.lex"
-{ YDVAR(0, VAR_PYTHON) }
+{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
        YY_BREAK
 case 96:
 YY_RULE_SETUP
 #line 219 "util/configlexer.lex"
-{ YDVAR(1, VAR_DOMAIN_INSECURE) }
+{ YDVAR(1, VAR_PYTHON_SCRIPT) }
        YY_BREAK
 case 97:
-/* rule 97 can match eol */
 YY_RULE_SETUP
 #line 220 "util/configlexer.lex"
+{ YDVAR(0, VAR_PYTHON) }
+       YY_BREAK
+case 98:
+YY_RULE_SETUP
+#line 221 "util/configlexer.lex"
+{ YDVAR(1, VAR_DOMAIN_INSECURE) }
+       YY_BREAK
+case 99:
+/* rule 99 can match eol */
+YY_RULE_SETUP
+#line 222 "util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++; }
        YY_BREAK
 /* Quoted strings. Strip leading and ending quotes */
-case 98:
+case 100:
 YY_RULE_SETUP
-#line 223 "util/configlexer.lex"
+#line 225 "util/configlexer.lex"
 { BEGIN(quotedstring); LEXOUT(("QS ")); }
        YY_BREAK
 case YY_STATE_EOF(quotedstring):
-#line 224 "util/configlexer.lex"
+#line 226 "util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 99:
+case 101:
 YY_RULE_SETUP
-#line 229 "util/configlexer.lex"
+#line 231 "util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 100:
-/* rule 100 can match eol */
+case 102:
+/* rule 102 can match eol */
 YY_RULE_SETUP
-#line 230 "util/configlexer.lex"
+#line 232 "util/configlexer.lex"
 { yyerror("newline inside quoted string, no end \""); 
                          cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 101:
+case 103:
 YY_RULE_SETUP
-#line 232 "util/configlexer.lex"
+#line 234 "util/configlexer.lex"
 {
         LEXOUT(("QE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -2214,34 +2235,34 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* Single Quoted strings. Strip leading and ending quotes */
-case 102:
+case 104:
 YY_RULE_SETUP
-#line 244 "util/configlexer.lex"
+#line 246 "util/configlexer.lex"
 { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
        YY_BREAK
 case YY_STATE_EOF(singlequotedstr):
-#line 245 "util/configlexer.lex"
+#line 247 "util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 103:
+case 105:
 YY_RULE_SETUP
-#line 250 "util/configlexer.lex"
+#line 252 "util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 104:
-/* rule 104 can match eol */
+case 106:
+/* rule 106 can match eol */
 YY_RULE_SETUP
-#line 251 "util/configlexer.lex"
+#line 253 "util/configlexer.lex"
 { yyerror("newline inside quoted string, no end '"); 
                             cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 105:
+case 107:
 YY_RULE_SETUP
-#line 253 "util/configlexer.lex"
+#line 255 "util/configlexer.lex"
 {
         LEXOUT(("SQE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -2254,38 +2275,38 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* include: directive */
-case 106:
+case 108:
 YY_RULE_SETUP
-#line 265 "util/configlexer.lex"
+#line 267 "util/configlexer.lex"
 { 
        LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
        YY_BREAK
 case YY_STATE_EOF(include):
-#line 267 "util/configlexer.lex"
+#line 269 "util/configlexer.lex"
 {
         yyerror("EOF inside include directive");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 107:
+case 109:
 YY_RULE_SETUP
-#line 271 "util/configlexer.lex"
+#line 273 "util/configlexer.lex"
 { LEXOUT(("ISP ")); /* ignore */ }
        YY_BREAK
-case 108:
-/* rule 108 can match eol */
+case 110:
+/* rule 110 can match eol */
 YY_RULE_SETUP
-#line 272 "util/configlexer.lex"
+#line 274 "util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++;}
        YY_BREAK
-case 109:
+case 111:
 YY_RULE_SETUP
-#line 273 "util/configlexer.lex"
+#line 275 "util/configlexer.lex"
 { LEXOUT(("IQS ")); BEGIN(include_quoted); }
        YY_BREAK
-case 110:
+case 112:
 YY_RULE_SETUP
-#line 274 "util/configlexer.lex"
+#line 276 "util/configlexer.lex"
 {
        LEXOUT(("Iunquotedstr(%s) ", yytext));
        config_start_include(yytext);
@@ -2293,27 +2314,27 @@ YY_RULE_SETUP
 }
        YY_BREAK
 case YY_STATE_EOF(include_quoted):
-#line 279 "util/configlexer.lex"
+#line 281 "util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 111:
+case 113:
 YY_RULE_SETUP
-#line 283 "util/configlexer.lex"
+#line 285 "util/configlexer.lex"
 { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 112:
-/* rule 112 can match eol */
+case 114:
+/* rule 114 can match eol */
 YY_RULE_SETUP
-#line 284 "util/configlexer.lex"
+#line 286 "util/configlexer.lex"
 { yyerror("newline before \" in include name"); 
                                  cfg_parser->line++; BEGIN(inc_prev); }
        YY_BREAK
-case 113:
+case 115:
 YY_RULE_SETUP
-#line 286 "util/configlexer.lex"
+#line 288 "util/configlexer.lex"
 {
        LEXOUT(("IQE "));
        yytext[yyleng - 1] = '\0';
@@ -2323,7 +2344,7 @@ YY_RULE_SETUP
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(val):
-#line 292 "util/configlexer.lex"
+#line 294 "util/configlexer.lex"
 {
        yy_set_bol(1); /* Set beginning of line, so "^" rules match.  */
        if (config_include_stack_ptr == 0) {
@@ -2334,33 +2355,33 @@ case YY_STATE_EOF(val):
        }
 }
        YY_BREAK
-case 114:
+case 116:
 YY_RULE_SETUP
-#line 302 "util/configlexer.lex"
+#line 304 "util/configlexer.lex"
 { LEXOUT(("unquotedstr(%s) ", yytext)); 
                        if(--num_args == 0) { BEGIN(INITIAL); }
                        yylval.str = strdup(yytext); return STRING; }
        YY_BREAK
-case 115:
+case 117:
 YY_RULE_SETUP
-#line 306 "util/configlexer.lex"
+#line 308 "util/configlexer.lex"
 {
        ub_c_error_msg("unknown keyword '%s'", yytext);
        }
        YY_BREAK
-case 116:
+case 118:
 YY_RULE_SETUP
-#line 310 "util/configlexer.lex"
+#line 312 "util/configlexer.lex"
 {
        ub_c_error_msg("stray '%s'", yytext);
        }
        YY_BREAK
-case 117:
+case 119:
 YY_RULE_SETUP
-#line 314 "util/configlexer.lex"
+#line 316 "util/configlexer.lex"
 ECHO;
        YY_BREAK
-#line 2362 "<stdout>"
+#line 2383 "<stdout>"
 
        case YY_END_OF_BUFFER:
                {
@@ -2650,7 +2671,7 @@ static int yy_get_next_buffer (void)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 1088 )
+                       if ( yy_current_state >= 1104 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2678,11 +2699,11 @@ static int yy_get_next_buffer (void)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 1088 )
+               if ( yy_current_state >= 1104 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 1087);
+       yy_is_jam = (yy_current_state == 1103);
 
        return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3319,7 +3340,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 314 "util/configlexer.lex"
+#line 316 "util/configlexer.lex"
 
 
 
index 1d47b77e32b2553c1a3423fc7354c721aec24d02..c49ecf8712a0bfb6b51f8f41e5704d31dea4c96b 100644 (file)
@@ -190,6 +190,8 @@ trust-anchor-file{COLON}    { YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
 trusted-keys-file{COLON}       { YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
 trust-anchor{COLON}            { YDVAR(1, VAR_TRUST_ANCHOR) }
 val-override-date{COLON}       { YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
+val-sig-skew-min{COLON}                { YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
+val-sig-skew-max{COLON}                { YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
 val-bogus-ttl{COLON}           { YDVAR(1, VAR_BOGUS_TTL) }
 val-clean-additional{COLON}    { YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
 val-permissive-mode{COLON}     { YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
index b63ece88360b0f22054ce2a00d200cf3d002416b..0fd1db1a16f2dcf413ccd85a2678a0768e0c8f75 100644 (file)
      VAR_LOG_TIME_ASCII = 356,
      VAR_DOMAIN_INSECURE = 357,
      VAR_PYTHON = 358,
-     VAR_PYTHON_SCRIPT = 359
+     VAR_PYTHON_SCRIPT = 359,
+     VAR_VAL_SIG_SKEW_MIN = 360,
+     VAR_VAL_SIG_SKEW_MAX = 361
    };
 #endif
 /* Tokens.  */
 #define VAR_DOMAIN_INSECURE 357
 #define VAR_PYTHON 358
 #define VAR_PYTHON_SCRIPT 359
+#define VAR_VAL_SIG_SKEW_MIN 360
+#define VAR_VAL_SIG_SKEW_MAX 361
 
 
 
@@ -331,7 +335,7 @@ typedef union YYSTYPE
        char*   str;
 }
 /* Line 187 of yacc.c.  */
-#line 335 "util/configparser.c"
+#line 339 "util/configparser.c"
        YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -344,7 +348,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 348 "util/configparser.c"
+#line 352 "util/configparser.c"
 
 #ifdef short
 # undef short
@@ -559,20 +563,20 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   194
+#define YYLAST   198
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  105
+#define YYNTOKENS  107
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  108
+#define YYNNTS  110
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  203
+#define YYNRULES  207
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  296
+#define YYNSTATES  302
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   359
+#define YYMAXUTOK   361
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -615,7 +619,8 @@ static const yytype_uint8 yytranslate[] =
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106
 };
 
 #if YYDEBUG
@@ -631,101 +636,102 @@ static const yytype_uint16 yyprhs[] =
      104,   106,   108,   110,   112,   114,   116,   118,   120,   122,
      124,   126,   128,   130,   132,   134,   136,   138,   140,   142,
      144,   146,   148,   150,   152,   154,   156,   158,   160,   162,
-     164,   166,   168,   170,   172,   174,   176,   178,   180,   183,
-     184,   186,   188,   190,   192,   194,   197,   198,   200,   202,
-     204,   207,   210,   213,   216,   219,   222,   225,   228,   231,
-     234,   237,   240,   243,   246,   249,   252,   255,   258,   261,
-     264,   267,   270,   273,   276,   279,   282,   285,   288,   291,
-     294,   297,   300,   303,   306,   309,   312,   315,   318,   321,
-     324,   327,   330,   333,   336,   339,   342,   345,   348,   351,
-     354,   357,   360,   363,   366,   369,   372,   375,   378,   381,
-     384,   387,   391,   394,   397,   400,   403,   406,   409,   412,
-     415,   418,   421,   425,   428,   431,   434,   437,   440,   443,
-     446,   449,   452,   454,   457,   458,   460,   462,   464,   466,
-     468,   470,   472,   475,   478,   481,   484,   487,   490,   493,
-     495,   498,   499,   501
+     164,   166,   168,   170,   172,   174,   176,   178,   180,   182,
+     184,   187,   188,   190,   192,   194,   196,   198,   201,   202,
+     204,   206,   208,   211,   214,   217,   220,   223,   226,   229,
+     232,   235,   238,   241,   244,   247,   250,   253,   256,   259,
+     262,   265,   268,   271,   274,   277,   280,   283,   286,   289,
+     292,   295,   298,   301,   304,   307,   310,   313,   316,   319,
+     322,   325,   328,   331,   334,   337,   340,   343,   346,   349,
+     352,   355,   358,   361,   364,   367,   370,   373,   376,   379,
+     382,   385,   388,   391,   395,   398,   401,   404,   407,   410,
+     413,   416,   419,   422,   425,   428,   431,   435,   438,   441,
+     444,   447,   450,   453,   456,   459,   462,   464,   467,   468,
+     470,   472,   474,   476,   478,   480,   482,   485,   488,   491,
+     494,   497,   500,   503,   505,   508,   509,   511
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     106,     0,    -1,    -1,   106,   107,    -1,   108,   109,    -1,
-     111,   112,    -1,   114,   115,    -1,   209,   210,    -1,   199,
-     200,    -1,    11,    -1,   109,   110,    -1,    -1,   117,    -1,
-     118,    -1,   122,    -1,   125,    -1,   131,    -1,   132,    -1,
-     133,    -1,   134,    -1,   123,    -1,   138,    -1,   139,    -1,
-     140,    -1,   141,    -1,   142,    -1,   155,    -1,   156,    -1,
-     157,    -1,   159,    -1,   160,    -1,   128,    -1,   161,    -1,
-     162,    -1,   165,    -1,   163,    -1,   164,    -1,   166,    -1,
-     167,    -1,   168,    -1,   176,    -1,   150,    -1,   151,    -1,
-     152,    -1,   153,    -1,   169,    -1,   179,    -1,   146,    -1,
-     148,    -1,   180,    -1,   182,    -1,   183,    -1,   184,    -1,
-     129,    -1,   154,    -1,   186,    -1,   187,    -1,   147,    -1,
-     185,    -1,   136,    -1,   124,    -1,   143,    -1,   177,    -1,
-     181,    -1,   170,    -1,   178,    -1,   189,    -1,   190,    -1,
-     130,    -1,   119,    -1,   135,    -1,   172,    -1,   120,    -1,
-     126,    -1,   127,    -1,   144,    -1,   145,    -1,   188,    -1,
-     171,    -1,   173,    -1,   174,    -1,   121,    -1,   191,    -1,
-     158,    -1,   175,    -1,   137,    -1,   149,    -1,    38,    -1,
-     112,   113,    -1,    -1,   192,    -1,   193,    -1,   194,    -1,
-     195,    -1,    44,    -1,   115,   116,    -1,    -1,   196,    -1,
-     197,    -1,   198,    -1,    13,    10,    -1,    12,    10,    -1,
-      76,    10,    -1,    79,    10,    -1,    96,    10,    -1,    14,
-      10,    -1,    16,    10,    -1,    67,    10,    -1,    15,    10,
-      -1,    80,    10,    -1,    81,    10,    -1,    31,    10,    -1,
-      60,    10,    -1,    75,    10,    -1,    17,    10,    -1,    18,
-      10,    -1,    19,    10,    -1,    20,    10,    -1,    77,    10,
-      -1,    66,    10,    -1,   101,    10,    -1,    21,    10,    -1,
-      22,    10,    -1,    23,    10,    -1,    24,    10,    -1,    25,
-      10,    -1,    68,    10,    -1,    82,    10,    -1,    83,    10,
-      -1,    54,    10,    -1,    64,    10,    -1,    55,    10,    -1,
-     102,    10,    -1,    48,    10,    -1,    49,    10,    -1,    50,
-      10,    -1,    51,    10,    -1,    61,    10,    -1,    26,    10,
-      -1,    27,    10,    -1,    28,    10,    -1,    98,    10,    -1,
-      29,    10,    -1,    30,    10,    -1,    32,    10,    -1,    33,
-      10,    -1,    35,    10,    -1,    36,    10,    -1,    34,    10,
-      -1,    41,    10,    -1,    42,    10,    -1,    43,    10,    -1,
-      52,    10,    -1,    71,    10,    -1,    85,    10,    -1,    78,
-      10,    -1,    86,    10,    -1,    87,    10,    -1,   100,    10,
-      -1,    47,    10,    -1,    69,    10,    -1,    72,    10,    10,
-      -1,    53,    10,    -1,    56,    10,    -1,    70,    10,    -1,
+     108,     0,    -1,    -1,   108,   109,    -1,   110,   111,    -1,
+     113,   114,    -1,   116,   117,    -1,   213,   214,    -1,   203,
+     204,    -1,    11,    -1,   111,   112,    -1,    -1,   119,    -1,
+     120,    -1,   124,    -1,   127,    -1,   133,    -1,   134,    -1,
+     135,    -1,   136,    -1,   125,    -1,   140,    -1,   141,    -1,
+     142,    -1,   143,    -1,   144,    -1,   157,    -1,   158,    -1,
+     159,    -1,   161,    -1,   162,    -1,   130,    -1,   163,    -1,
+     164,    -1,   167,    -1,   165,    -1,   166,    -1,   168,    -1,
+     169,    -1,   170,    -1,   178,    -1,   152,    -1,   153,    -1,
+     154,    -1,   155,    -1,   171,    -1,   181,    -1,   148,    -1,
+     150,    -1,   182,    -1,   186,    -1,   187,    -1,   188,    -1,
+     131,    -1,   156,    -1,   190,    -1,   191,    -1,   149,    -1,
+     189,    -1,   138,    -1,   126,    -1,   145,    -1,   179,    -1,
+     185,    -1,   172,    -1,   180,    -1,   193,    -1,   194,    -1,
+     132,    -1,   121,    -1,   137,    -1,   174,    -1,   122,    -1,
+     128,    -1,   129,    -1,   146,    -1,   147,    -1,   192,    -1,
+     173,    -1,   175,    -1,   176,    -1,   123,    -1,   195,    -1,
+     160,    -1,   177,    -1,   139,    -1,   151,    -1,   183,    -1,
+     184,    -1,    38,    -1,   114,   115,    -1,    -1,   196,    -1,
+     197,    -1,   198,    -1,   199,    -1,    44,    -1,   117,   118,
+      -1,    -1,   200,    -1,   201,    -1,   202,    -1,    13,    10,
+      -1,    12,    10,    -1,    76,    10,    -1,    79,    10,    -1,
+      96,    10,    -1,    14,    10,    -1,    16,    10,    -1,    67,
+      10,    -1,    15,    10,    -1,    80,    10,    -1,    81,    10,
+      -1,    31,    10,    -1,    60,    10,    -1,    75,    10,    -1,
+      17,    10,    -1,    18,    10,    -1,    19,    10,    -1,    20,
+      10,    -1,    77,    10,    -1,    66,    10,    -1,   101,    10,
+      -1,    21,    10,    -1,    22,    10,    -1,    23,    10,    -1,
+      24,    10,    -1,    25,    10,    -1,    68,    10,    -1,    82,
+      10,    -1,    83,    10,    -1,    54,    10,    -1,    64,    10,
+      -1,    55,    10,    -1,   102,    10,    -1,    48,    10,    -1,
+      49,    10,    -1,    50,    10,    -1,    51,    10,    -1,    61,
+      10,    -1,    26,    10,    -1,    27,    10,    -1,    28,    10,
+      -1,    98,    10,    -1,    29,    10,    -1,    30,    10,    -1,
+      32,    10,    -1,    33,    10,    -1,    35,    10,    -1,    36,
+      10,    -1,    34,    10,    -1,    41,    10,    -1,    42,    10,
+      -1,    43,    10,    -1,    52,    10,    -1,    71,    10,    -1,
+      85,    10,    -1,    78,    10,    -1,    86,    10,    -1,    87,
+      10,    -1,   100,    10,    -1,    47,    10,    -1,    69,    10,
+      -1,    72,    10,    10,    -1,    53,    10,    -1,    56,    10,
+      -1,   105,    10,    -1,   106,    10,    -1,    70,    10,    -1,
       57,    10,    -1,    58,    10,    -1,    59,    10,    -1,    65,
       10,    -1,    62,    10,    -1,    63,    10,    -1,    84,    10,
       -1,    73,    10,    10,    -1,    74,    10,    -1,    97,    10,
       -1,    37,    10,    -1,    39,    10,    -1,    40,    10,    -1,
       99,    10,    -1,    37,    10,    -1,    45,    10,    -1,    46,
-      10,    -1,    88,    -1,   200,   201,    -1,    -1,   202,    -1,
-     204,    -1,   203,    -1,   205,    -1,   206,    -1,   207,    -1,
-     208,    -1,    89,    10,    -1,    91,    10,    -1,    90,    10,
+      10,    -1,    88,    -1,   204,   205,    -1,    -1,   206,    -1,
+     208,    -1,   207,    -1,   209,    -1,   210,    -1,   211,    -1,
+     212,    -1,    89,    10,    -1,    91,    10,    -1,    90,    10,
       -1,    92,    10,    -1,    93,    10,    -1,    94,    10,    -1,
-      95,    10,    -1,   103,    -1,   210,   211,    -1,    -1,   212,
+      95,    10,    -1,   103,    -1,   214,   215,    -1,    -1,   216,
       -1,   104,    10,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   103,   103,   103,   104,   104,   105,   105,   106,   110,
-     115,   116,   117,   117,   117,   118,   118,   119,   119,   119,
-     120,   120,   120,   121,   121,   121,   122,   122,   123,   123,
-     124,   124,   125,   125,   126,   126,   127,   127,   128,   128,
-     129,   129,   130,   130,   130,   131,   131,   131,   132,   132,
-     132,   133,   133,   134,   134,   135,   135,   136,   136,   137,
-     137,   137,   138,   138,   139,   139,   140,   140,   140,   141,
-     141,   142,   142,   143,   143,   144,   144,   144,   145,   145,
-     146,   146,   147,   147,   148,   148,   149,   151,   163,   164,
-     165,   165,   165,   165,   167,   179,   180,   181,   181,   181,
-     183,   192,   201,   212,   221,   230,   239,   252,   267,   276,
-     285,   294,   303,   312,   321,   330,   339,   348,   357,   366,
-     380,   389,   396,   403,   410,   418,   425,   432,   439,   446,
-     454,   462,   469,   476,   485,   494,   501,   508,   519,   527,
-     540,   549,   558,   566,   579,   588,   597,   606,   615,   628,
-     635,   645,   655,   665,   675,   685,   695,   702,   709,   718,
-     725,   735,   749,   756,   774,   783,   792,   802,   812,   819,
-     827,   840,   848,   868,   875,   890,   897,   904,   911,   921,
-     928,   935,   942,   947,   948,   949,   949,   949,   950,   950,
-     950,   951,   953,   963,   972,   979,   986,   993,  1000,  1007,
-    1012,  1013,  1014,  1016
+       0,   104,   104,   104,   105,   105,   106,   106,   107,   111,
+     116,   117,   118,   118,   118,   119,   119,   120,   120,   120,
+     121,   121,   121,   122,   122,   122,   123,   123,   124,   124,
+     125,   125,   126,   126,   127,   127,   128,   128,   129,   129,
+     130,   130,   131,   131,   131,   132,   132,   132,   133,   133,
+     133,   134,   134,   135,   135,   136,   136,   137,   137,   138,
+     138,   138,   139,   139,   140,   140,   141,   141,   141,   142,
+     142,   143,   143,   144,   144,   145,   145,   145,   146,   146,
+     147,   147,   148,   148,   149,   149,   150,   150,   151,   153,
+     165,   166,   167,   167,   167,   167,   169,   181,   182,   183,
+     183,   183,   185,   194,   203,   214,   223,   232,   241,   254,
+     269,   278,   287,   296,   305,   314,   323,   332,   341,   350,
+     359,   368,   382,   391,   398,   405,   412,   420,   427,   434,
+     441,   448,   456,   464,   471,   478,   487,   496,   503,   510,
+     521,   529,   542,   551,   560,   568,   581,   590,   599,   608,
+     617,   630,   637,   647,   657,   667,   677,   687,   697,   704,
+     711,   720,   727,   737,   751,   758,   776,   789,   802,   811,
+     820,   830,   840,   847,   855,   868,   876,   896,   903,   918,
+     925,   932,   939,   949,   956,   963,   970,   975,   976,   977,
+     977,   977,   978,   978,   978,   979,   981,   991,  1000,  1007,
+    1014,  1021,  1028,  1035,  1040,  1041,  1042,  1044
 };
 #endif
 
@@ -766,7 +772,8 @@ static const char *const yytname[] =
   "VAR_SERVER_CERT_FILE", "VAR_CONTROL_KEY_FILE", "VAR_CONTROL_CERT_FILE",
   "VAR_EXTENDED_STATISTICS", "VAR_LOCAL_DATA_PTR", "VAR_JOSTLE_TIMEOUT",
   "VAR_STUB_PRIME", "VAR_UNWANTED_REPLY_THRESHOLD", "VAR_LOG_TIME_ASCII",
-  "VAR_DOMAIN_INSECURE", "VAR_PYTHON", "VAR_PYTHON_SCRIPT", "$accept",
+  "VAR_DOMAIN_INSECURE", "VAR_PYTHON", "VAR_PYTHON_SCRIPT",
+  "VAR_VAL_SIG_SKEW_MIN", "VAR_VAL_SIG_SKEW_MAX", "$accept",
   "toplevelvars", "toplevelvar", "serverstart", "contents_server",
   "content_server", "stubstart", "contents_stub", "content_stub",
   "forwardstart", "contents_forward", "content_forward",
@@ -796,17 +803,19 @@ static const char *const yytname[] =
   "server_private_address", "server_private_domain",
   "server_unwanted_reply_threshold", "server_do_not_query_address",
   "server_do_not_query_localhost", "server_access_control",
-  "server_module_conf", "server_val_override_date", "server_cache_max_ttl",
-  "server_bogus_ttl", "server_val_clean_additional",
-  "server_val_permissive_mode", "server_val_nsec3_keysize_iterations",
-  "server_key_cache_size", "server_key_cache_slabs",
-  "server_neg_cache_size", "server_local_zone", "server_local_data",
-  "server_local_data_ptr", "stub_name", "stub_host", "stub_addr",
-  "stub_prime", "forward_name", "forward_host", "forward_addr", "rcstart",
-  "contents_rc", "content_rc", "rc_control_enable", "rc_control_port",
-  "rc_control_interface", "rc_server_key_file", "rc_server_cert_file",
-  "rc_control_key_file", "rc_control_cert_file", "pythonstart",
-  "contents_py", "content_py", "py_script", 0
+  "server_module_conf", "server_val_override_date",
+  "server_val_sig_skew_min", "server_val_sig_skew_max",
+  "server_cache_max_ttl", "server_bogus_ttl",
+  "server_val_clean_additional", "server_val_permissive_mode",
+  "server_val_nsec3_keysize_iterations", "server_key_cache_size",
+  "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone",
+  "server_local_data", "server_local_data_ptr", "stub_name", "stub_host",
+  "stub_addr", "stub_prime", "forward_name", "forward_host",
+  "forward_addr", "rcstart", "contents_rc", "content_rc",
+  "rc_control_enable", "rc_control_port", "rc_control_interface",
+  "rc_server_key_file", "rc_server_cert_file", "rc_control_key_file",
+  "rc_control_cert_file", "pythonstart", "contents_py", "content_py",
+  "py_script", 0
 };
 #endif
 
@@ -825,24 +834,24 @@ static const yytype_uint16 yytoknum[] =
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359
+     355,   356,   357,   358,   359,   360,   361
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   105,   106,   106,   107,   107,   107,   107,   107,   108,
-     109,   109,   110,   110,   110,   110,   110,   110,   110,   110,
-     110,   110,   110,   110,   110,   110,   110,   110,   110,   110,
-     110,   110,   110,   110,   110,   110,   110,   110,   110,   110,
-     110,   110,   110,   110,   110,   110,   110,   110,   110,   110,
-     110,   110,   110,   110,   110,   110,   110,   110,   110,   110,
-     110,   110,   110,   110,   110,   110,   110,   110,   110,   110,
-     110,   110,   110,   110,   110,   110,   110,   110,   110,   110,
-     110,   110,   110,   110,   110,   110,   110,   111,   112,   112,
-     113,   113,   113,   113,   114,   115,   115,   116,   116,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+       0,   107,   108,   108,   109,   109,   109,   109,   109,   110,
+     111,   111,   112,   112,   112,   112,   112,   112,   112,   112,
+     112,   112,   112,   112,   112,   112,   112,   112,   112,   112,
+     112,   112,   112,   112,   112,   112,   112,   112,   112,   112,
+     112,   112,   112,   112,   112,   112,   112,   112,   112,   112,
+     112,   112,   112,   112,   112,   112,   112,   112,   112,   112,
+     112,   112,   112,   112,   112,   112,   112,   112,   112,   112,
+     112,   112,   112,   112,   112,   112,   112,   112,   112,   112,
+     112,   112,   112,   112,   112,   112,   112,   112,   112,   113,
+     114,   114,   115,   115,   115,   115,   116,   117,   117,   118,
+     118,   118,   119,   120,   121,   122,   123,   124,   125,   126,
      127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
      137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
      147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
@@ -850,9 +859,9 @@ static const yytype_uint8 yyr1[] =
      167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
      177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
      187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   200,   201,   201,   201,   201,   201,
-     201,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   210,   211,   212
+     197,   198,   199,   200,   201,   202,   203,   204,   204,   205,
+     205,   205,   205,   205,   205,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   214,   215,   216
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -866,19 +875,19 @@ static const yytype_uint8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     2,     0,
-       1,     1,     1,     1,     1,     2,     0,     1,     1,     1,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       2,     0,     1,     1,     1,     1,     1,     2,     0,     1,
+       1,     1,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     3,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     3,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     1,     2,     0,     1,     1,     1,     1,     1,
-       1,     1,     2,     2,     2,     2,     2,     2,     2,     1,
-       2,     0,     1,     2
+       2,     2,     2,     3,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     3,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     0,     1,
+       1,     1,     1,     1,     1,     1,     2,     2,     2,     2,
+       2,     2,     2,     1,     2,     0,     1,     2
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -886,8 +895,8 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       2,     0,     1,     9,    87,    94,   182,   199,     3,    11,
-      89,    96,   184,   201,     4,     5,     6,     8,     7,     0,
+       2,     0,     1,     9,    89,    96,   186,   203,     3,    11,
+      91,    98,   188,   205,     4,     5,     6,     8,     7,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -895,43 +904,44 @@ static const yytype_uint8 yydefact[] =
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    10,    12,    13,    69,    72,    81,
-      14,    20,    60,    15,    73,    74,    31,    53,    68,    16,
-      17,    18,    19,    70,    59,    85,    21,    22,    23,    24,
-      25,    61,    75,    76,    47,    57,    48,    86,    41,    42,
-      43,    44,    54,    26,    27,    28,    83,    29,    30,    32,
-      33,    35,    36,    34,    37,    38,    39,    45,    64,    78,
-      71,    79,    80,    84,    40,    62,    65,    46,    49,    63,
-      50,    51,    52,    58,    55,    56,    77,    66,    67,    82,
-       0,     0,     0,     0,    88,    90,    91,    92,    93,     0,
-       0,     0,    95,    97,    98,    99,     0,     0,     0,     0,
-       0,     0,     0,   183,   185,   187,   186,   188,   189,   190,
-     191,     0,   200,   202,   101,   100,   105,   108,   106,   114,
-     115,   116,   117,   121,   122,   123,   124,   125,   138,   139,
-     140,   142,   143,   111,   144,   145,   148,   146,   147,   149,
-     150,   151,   159,   133,   134,   135,   136,   152,   162,   129,
-     131,   163,   165,   166,   167,   112,   137,   169,   170,   130,
-     168,   119,   107,   126,   160,   164,   153,     0,     0,   173,
-     113,   102,   118,   155,   103,   109,   110,   127,   128,   171,
-     154,   156,   157,   104,   174,   141,   158,   120,   132,   175,
-     176,   177,   178,   179,   180,   181,   192,   194,   193,   195,
-     196,   197,   198,   203,   161,   172
+       0,     0,     0,     0,     0,     0,    10,    12,    13,    69,
+      72,    81,    14,    20,    60,    15,    73,    74,    31,    53,
+      68,    16,    17,    18,    19,    70,    59,    85,    21,    22,
+      23,    24,    25,    61,    75,    76,    47,    57,    48,    86,
+      41,    42,    43,    44,    54,    26,    27,    28,    83,    29,
+      30,    32,    33,    35,    36,    34,    37,    38,    39,    45,
+      64,    78,    71,    79,    80,    84,    40,    62,    65,    46,
+      49,    87,    88,    63,    50,    51,    52,    58,    55,    56,
+      77,    66,    67,    82,     0,     0,     0,     0,    90,    92,
+      93,    94,    95,     0,     0,     0,    97,    99,   100,   101,
+       0,     0,     0,     0,     0,     0,     0,   187,   189,   191,
+     190,   192,   193,   194,   195,     0,   204,   206,   103,   102,
+     107,   110,   108,   116,   117,   118,   119,   123,   124,   125,
+     126,   127,   140,   141,   142,   144,   145,   113,   146,   147,
+     150,   148,   149,   151,   152,   153,   161,   135,   136,   137,
+     138,   154,   164,   131,   133,   165,   169,   170,   171,   114,
+     139,   173,   174,   132,   172,   121,   109,   128,   162,   168,
+     155,     0,     0,   177,   115,   104,   120,   157,   105,   111,
+     112,   129,   130,   175,   156,   158,   159,   106,   178,   143,
+     160,   122,   134,   166,   167,   179,   180,   181,   182,   183,
+     184,   185,   196,   198,   197,   199,   200,   201,   202,   207,
+     163,   176
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,     8,     9,    14,    94,    10,    15,   174,    11,
-      16,   182,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   175,   176,   177,
-     178,   183,   184,   185,    12,    17,   193,   194,   195,   196,
-     197,   198,   199,   200,    13,    18,   202,   203
+      -1,     1,     8,     9,    14,    96,    10,    15,   178,    11,
+      16,   186,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   179,
+     180,   181,   182,   187,   188,   189,    12,    17,   197,   198,
+     199,   200,   201,   202,   203,   204,    13,    18,   206,   207
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -948,7 +958,7 @@ static const yytype_int16 yypact[] =
       50,    51,    52,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    79,    80,    81,
-      82,    83,    84,    85,  -103,  -103,  -103,  -103,  -103,  -103,
+      82,    83,    84,    85,    86,    87,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
@@ -956,19 +966,20 @@ static const yytype_int16 yypact[] =
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
-      86,    87,    88,    89,  -103,  -103,  -103,  -103,  -103,    90,
-      91,   119,  -103,  -103,  -103,  -103,   120,   121,   122,   126,
-     127,   128,   170,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
-    -103,   171,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
+    -103,  -103,  -103,  -103,    88,    89,    90,    91,  -103,  -103,
+    -103,  -103,  -103,   119,   120,   121,  -103,  -103,  -103,  -103,
+     122,   126,   127,   128,   170,   171,   172,  -103,  -103,  -103,
+    -103,  -103,  -103,  -103,  -103,   173,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
-    -103,  -103,  -103,  -103,  -103,  -103,  -103,   172,   173,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
+    -103,   174,   175,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
-    -103,  -103,  -103,  -103,  -103,  -103
+    -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
+    -103,  -103
 };
 
 /* YYPGOTO[NTERM-NUM].  */
@@ -984,7 +995,7 @@ static const yytype_int8 yypgoto[] =
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
-    -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103
+    -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -994,26 +1005,26 @@ static const yytype_int8 yypgoto[] =
 #define YYTABLE_NINF -1
 static const yytype_uint16 yytable[] =
 {
-       2,   170,   201,   171,   172,   179,   204,   205,   206,   207,
-       0,     3,   208,   180,   181,   186,   187,   188,   189,   190,
-     191,   192,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,     4,   225,
-     226,   227,   228,   229,     5,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   173,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,     6,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,     0,     7,    19,    20,    21,    22,    23,    24,
+       2,   174,   205,   175,   176,   183,   208,   209,   210,   211,
+       0,     3,   212,   184,   185,   190,   191,   192,   193,   194,
+     195,   196,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,     4,   229,
+     230,   231,   232,   233,     5,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   177,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,     6,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,     0,     7,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,   285,
-     286,   287,   288,    44,    45,    46,   289,   290,   291,    47,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,   289,
+     290,   291,   292,    44,    45,    46,   293,   294,   295,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-     292,   293,   294,   295,     0,     0,     0,     0,    88,    89,
-      90,     0,    91,    92,    93
+     296,   297,   298,   299,   300,   301,     0,     0,    88,    89,
+      90,     0,    91,    92,    93,     0,     0,    94,    95
 };
 
 static const yytype_int8 yycheck[] =
@@ -1036,16 +1047,16 @@ static const yytype_int8 yycheck[] =
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      10,    10,    10,    10,    -1,    -1,    -1,    -1,    96,    97,
-      98,    -1,   100,   101,   102
+      10,    10,    10,    10,    10,    10,    -1,    -1,    96,    97,
+      98,    -1,   100,   101,   102,    -1,    -1,   105,   106
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,   106,     0,    11,    38,    44,    88,   103,   107,   108,
-     111,   114,   199,   209,   109,   112,   115,   200,   210,    12,
+       0,   108,     0,    11,    38,    44,    88,   103,   109,   110,
+     113,   116,   203,   213,   111,   114,   117,   204,   214,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    41,    42,    43,    47,    48,    49,
@@ -1053,7 +1064,7 @@ static const yytype_uint8 yystos[] =
       60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
       80,    81,    82,    83,    84,    85,    86,    87,    96,    97,
-      98,   100,   101,   102,   110,   117,   118,   119,   120,   121,
+      98,   100,   101,   102,   105,   106,   112,   119,   120,   121,
      122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
      132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
      142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
@@ -1061,10 +1072,11 @@ static const yytype_uint8 yystos[] =
      162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
      172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
      182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-      37,    39,    40,    99,   113,   192,   193,   194,   195,    37,
-      45,    46,   116,   196,   197,   198,    89,    90,    91,    92,
-      93,    94,    95,   201,   202,   203,   204,   205,   206,   207,
-     208,   104,   211,   212,    10,    10,    10,    10,    10,    10,
+     192,   193,   194,   195,    37,    39,    40,    99,   115,   196,
+     197,   198,   199,    37,    45,    46,   118,   200,   201,   202,
+      89,    90,    91,    92,    93,    94,    95,   205,   206,   207,
+     208,   209,   210,   211,   212,   104,   215,   216,    10,    10,
+      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
@@ -1073,7 +1085,7 @@ static const yytype_uint8 yystos[] =
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10
+      10,    10
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1888,14 +1900,14 @@ yyreduce:
   switch (yyn)
     {
         case 9:
-#line 111 "util/configparser.y"
+#line 112 "util/configparser.y"
     { 
                OUTYY(("\nP(server:)\n")); 
        }
     break;
 
-  case 87:
-#line 152 "util/configparser.y"
+  case 89:
+#line 154 "util/configparser.y"
     {
                struct config_stub* s;
                OUTYY(("\nP(stub_zone:)\n")); 
@@ -1908,8 +1920,8 @@ yyreduce:
        }
     break;
 
-  case 94:
-#line 168 "util/configparser.y"
+  case 96:
+#line 170 "util/configparser.y"
     {
                struct config_stub* s;
                OUTYY(("\nP(forward_zone:)\n")); 
@@ -1922,8 +1934,8 @@ yyreduce:
        }
     break;
 
-  case 100:
-#line 184 "util/configparser.y"
+  case 102:
+#line 186 "util/configparser.y"
     { 
                OUTYY(("P(server_num_threads:%s)\n", (yyvsp[(2) - (2)].str))); 
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -1933,8 +1945,8 @@ yyreduce:
        }
     break;
 
-  case 101:
-#line 193 "util/configparser.y"
+  case 103:
+#line 195 "util/configparser.y"
     { 
                OUTYY(("P(server_verbosity:%s)\n", (yyvsp[(2) - (2)].str))); 
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -1944,8 +1956,8 @@ yyreduce:
        }
     break;
 
-  case 102:
-#line 202 "util/configparser.y"
+  case 104:
+#line 204 "util/configparser.y"
     { 
                OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[(2) - (2)].str))); 
                if(strcmp((yyvsp[(2) - (2)].str), "") == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0)
@@ -1957,8 +1969,8 @@ yyreduce:
        }
     break;
 
-  case 103:
-#line 213 "util/configparser.y"
+  case 105:
+#line 215 "util/configparser.y"
     {
                OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -1968,8 +1980,8 @@ yyreduce:
        }
     break;
 
-  case 104:
-#line 222 "util/configparser.y"
+  case 106:
+#line 224 "util/configparser.y"
     {
                OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -1979,8 +1991,8 @@ yyreduce:
        }
     break;
 
-  case 105:
-#line 231 "util/configparser.y"
+  case 107:
+#line 233 "util/configparser.y"
     {
                OUTYY(("P(server_port:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -1990,8 +2002,8 @@ yyreduce:
        }
     break;
 
-  case 106:
-#line 240 "util/configparser.y"
+  case 108:
+#line 242 "util/configparser.y"
     {
                OUTYY(("P(server_interface:%s)\n", (yyvsp[(2) - (2)].str)));
                if(cfg_parser->cfg->num_ifs == 0)
@@ -2005,8 +2017,8 @@ yyreduce:
        }
     break;
 
-  case 107:
-#line 253 "util/configparser.y"
+  case 109:
+#line 255 "util/configparser.y"
     {
                OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[(2) - (2)].str)));
                if(cfg_parser->cfg->num_out_ifs == 0)
@@ -2022,8 +2034,8 @@ yyreduce:
        }
     break;
 
-  case 108:
-#line 268 "util/configparser.y"
+  case 110:
+#line 270 "util/configparser.y"
     {
                OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2033,8 +2045,8 @@ yyreduce:
        }
     break;
 
-  case 109:
-#line 277 "util/configparser.y"
+  case 111:
+#line 279 "util/configparser.y"
     {
                OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 1, 
@@ -2044,8 +2056,8 @@ yyreduce:
        }
     break;
 
-  case 110:
-#line 286 "util/configparser.y"
+  case 112:
+#line 288 "util/configparser.y"
     {
                OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 0, 
@@ -2055,8 +2067,8 @@ yyreduce:
        }
     break;
 
-  case 111:
-#line 295 "util/configparser.y"
+  case 113:
+#line 297 "util/configparser.y"
     {
                OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2066,8 +2078,8 @@ yyreduce:
        }
     break;
 
-  case 112:
-#line 304 "util/configparser.y"
+  case 114:
+#line 306 "util/configparser.y"
     {
                OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2077,8 +2089,8 @@ yyreduce:
        }
     break;
 
-  case 113:
-#line 313 "util/configparser.y"
+  case 115:
+#line 315 "util/configparser.y"
     {
                OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2088,8 +2100,8 @@ yyreduce:
        }
     break;
 
-  case 114:
-#line 322 "util/configparser.y"
+  case 116:
+#line 324 "util/configparser.y"
     {
                OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2099,8 +2111,8 @@ yyreduce:
        }
     break;
 
-  case 115:
-#line 331 "util/configparser.y"
+  case 117:
+#line 333 "util/configparser.y"
     {
                OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2110,8 +2122,8 @@ yyreduce:
        }
     break;
 
-  case 116:
-#line 340 "util/configparser.y"
+  case 118:
+#line 342 "util/configparser.y"
     {
                OUTYY(("P(server_do_udp:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2121,8 +2133,8 @@ yyreduce:
        }
     break;
 
-  case 117:
-#line 349 "util/configparser.y"
+  case 119:
+#line 351 "util/configparser.y"
     {
                OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2132,8 +2144,8 @@ yyreduce:
        }
     break;
 
-  case 118:
-#line 358 "util/configparser.y"
+  case 120:
+#line 360 "util/configparser.y"
     {
                OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2143,8 +2155,8 @@ yyreduce:
        }
     break;
 
-  case 119:
-#line 367 "util/configparser.y"
+  case 121:
+#line 369 "util/configparser.y"
     {
                OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2159,8 +2171,8 @@ yyreduce:
        }
     break;
 
-  case 120:
-#line 381 "util/configparser.y"
+  case 122:
+#line 383 "util/configparser.y"
     {
                OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2170,8 +2182,8 @@ yyreduce:
        }
     break;
 
-  case 121:
-#line 390 "util/configparser.y"
+  case 123:
+#line 392 "util/configparser.y"
     {
                OUTYY(("P(server_chroot:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->chrootdir);
@@ -2179,8 +2191,8 @@ yyreduce:
        }
     break;
 
-  case 122:
-#line 397 "util/configparser.y"
+  case 124:
+#line 399 "util/configparser.y"
     {
                OUTYY(("P(server_username:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->username);
@@ -2188,8 +2200,8 @@ yyreduce:
        }
     break;
 
-  case 123:
-#line 404 "util/configparser.y"
+  case 125:
+#line 406 "util/configparser.y"
     {
                OUTYY(("P(server_directory:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->directory);
@@ -2197,8 +2209,8 @@ yyreduce:
        }
     break;
 
-  case 124:
-#line 411 "util/configparser.y"
+  case 126:
+#line 413 "util/configparser.y"
     {
                OUTYY(("P(server_logfile:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->logfile);
@@ -2207,8 +2219,8 @@ yyreduce:
        }
     break;
 
-  case 125:
-#line 419 "util/configparser.y"
+  case 127:
+#line 421 "util/configparser.y"
     {
                OUTYY(("P(server_pidfile:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->pidfile);
@@ -2216,8 +2228,8 @@ yyreduce:
        }
     break;
 
-  case 126:
-#line 426 "util/configparser.y"
+  case 128:
+#line 428 "util/configparser.y"
     {
                OUTYY(("P(server_root_hints:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[(2) - (2)].str)))
@@ -2225,8 +2237,8 @@ yyreduce:
        }
     break;
 
-  case 127:
-#line 433 "util/configparser.y"
+  case 129:
+#line 435 "util/configparser.y"
     {
                OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->dlv_anchor_file);
@@ -2234,8 +2246,8 @@ yyreduce:
        }
     break;
 
-  case 128:
-#line 440 "util/configparser.y"
+  case 130:
+#line 442 "util/configparser.y"
     {
                OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[(2) - (2)].str)))
@@ -2243,8 +2255,8 @@ yyreduce:
        }
     break;
 
-  case 129:
-#line 447 "util/configparser.y"
+  case 131:
+#line 449 "util/configparser.y"
     {
                OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
@@ -2253,8 +2265,8 @@ yyreduce:
        }
     break;
 
-  case 130:
-#line 455 "util/configparser.y"
+  case 132:
+#line 457 "util/configparser.y"
     {
                OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
@@ -2263,8 +2275,8 @@ yyreduce:
        }
     break;
 
-  case 131:
-#line 463 "util/configparser.y"
+  case 133:
+#line 465 "util/configparser.y"
     {
                OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[(2) - (2)].str)))
@@ -2272,8 +2284,8 @@ yyreduce:
        }
     break;
 
-  case 132:
-#line 470 "util/configparser.y"
+  case 134:
+#line 472 "util/configparser.y"
     {
                OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[(2) - (2)].str)))
@@ -2281,8 +2293,8 @@ yyreduce:
        }
     break;
 
-  case 133:
-#line 477 "util/configparser.y"
+  case 135:
+#line 479 "util/configparser.y"
     {
                OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2292,8 +2304,8 @@ yyreduce:
        }
     break;
 
-  case 134:
-#line 486 "util/configparser.y"
+  case 136:
+#line 488 "util/configparser.y"
     {
                OUTYY(("P(server_hide_version:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2303,8 +2315,8 @@ yyreduce:
        }
     break;
 
-  case 135:
-#line 495 "util/configparser.y"
+  case 137:
+#line 497 "util/configparser.y"
     {
                OUTYY(("P(server_identity:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->identity);
@@ -2312,8 +2324,8 @@ yyreduce:
        }
     break;
 
-  case 136:
-#line 502 "util/configparser.y"
+  case 138:
+#line 504 "util/configparser.y"
     {
                OUTYY(("P(server_version:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->version);
@@ -2321,8 +2333,8 @@ yyreduce:
        }
     break;
 
-  case 137:
-#line 509 "util/configparser.y"
+  case 139:
+#line 511 "util/configparser.y"
     {
                OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2334,8 +2346,8 @@ yyreduce:
        }
     break;
 
-  case 138:
-#line 520 "util/configparser.y"
+  case 140:
+#line 522 "util/configparser.y"
     {
                OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->msg_cache_size))
@@ -2344,8 +2356,8 @@ yyreduce:
        }
     break;
 
-  case 139:
-#line 528 "util/configparser.y"
+  case 141:
+#line 530 "util/configparser.y"
     {
                OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2359,8 +2371,8 @@ yyreduce:
        }
     break;
 
-  case 140:
-#line 541 "util/configparser.y"
+  case 142:
+#line 543 "util/configparser.y"
     {
                OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2370,8 +2382,8 @@ yyreduce:
        }
     break;
 
-  case 141:
-#line 550 "util/configparser.y"
+  case 143:
+#line 552 "util/configparser.y"
     {
                OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2381,8 +2393,8 @@ yyreduce:
        }
     break;
 
-  case 142:
-#line 559 "util/configparser.y"
+  case 144:
+#line 561 "util/configparser.y"
     {
                OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->rrset_cache_size))
@@ -2391,8 +2403,8 @@ yyreduce:
        }
     break;
 
-  case 143:
-#line 567 "util/configparser.y"
+  case 145:
+#line 569 "util/configparser.y"
     {
                OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2406,8 +2418,8 @@ yyreduce:
        }
     break;
 
-  case 144:
-#line 580 "util/configparser.y"
+  case 146:
+#line 582 "util/configparser.y"
     {
                OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2417,8 +2429,8 @@ yyreduce:
        }
     break;
 
-  case 145:
-#line 589 "util/configparser.y"
+  case 147:
+#line 591 "util/configparser.y"
     {
                OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2428,8 +2440,8 @@ yyreduce:
        }
     break;
 
-  case 146:
-#line 598 "util/configparser.y"
+  case 148:
+#line 600 "util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2439,8 +2451,8 @@ yyreduce:
        }
     break;
 
-  case 147:
-#line 607 "util/configparser.y"
+  case 149:
+#line 609 "util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->
@@ -2450,8 +2462,8 @@ yyreduce:
        }
     break;
 
-  case 148:
-#line 616 "util/configparser.y"
+  case 150:
+#line 618 "util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2465,8 +2477,8 @@ yyreduce:
        }
     break;
 
-  case 149:
-#line 629 "util/configparser.y"
+  case 151:
+#line 631 "util/configparser.y"
     {
                OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->target_fetch_policy);
@@ -2474,8 +2486,8 @@ yyreduce:
        }
     break;
 
-  case 150:
-#line 636 "util/configparser.y"
+  case 152:
+#line 638 "util/configparser.y"
     {
                OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2486,8 +2498,8 @@ yyreduce:
        }
     break;
 
-  case 151:
-#line 646 "util/configparser.y"
+  case 153:
+#line 648 "util/configparser.y"
     {
                OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2498,8 +2510,8 @@ yyreduce:
        }
     break;
 
-  case 152:
-#line 656 "util/configparser.y"
+  case 154:
+#line 658 "util/configparser.y"
     {
                OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2510,8 +2522,8 @@ yyreduce:
        }
     break;
 
-  case 153:
-#line 666 "util/configparser.y"
+  case 155:
+#line 668 "util/configparser.y"
     {
                OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2522,8 +2534,8 @@ yyreduce:
        }
     break;
 
-  case 154:
-#line 676 "util/configparser.y"
+  case 156:
+#line 678 "util/configparser.y"
     {
                OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2534,8 +2546,8 @@ yyreduce:
        }
     break;
 
-  case 155:
-#line 686 "util/configparser.y"
+  case 157:
+#line 688 "util/configparser.y"
     {
                OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2546,8 +2558,8 @@ yyreduce:
        }
     break;
 
-  case 156:
-#line 696 "util/configparser.y"
+  case 158:
+#line 698 "util/configparser.y"
     {
                OUTYY(("P(server_private_address:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[(2) - (2)].str)))
@@ -2555,8 +2567,8 @@ yyreduce:
        }
     break;
 
-  case 157:
-#line 703 "util/configparser.y"
+  case 159:
+#line 705 "util/configparser.y"
     {
                OUTYY(("P(server_private_domain:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[(2) - (2)].str)))
@@ -2564,8 +2576,8 @@ yyreduce:
        }
     break;
 
-  case 158:
-#line 710 "util/configparser.y"
+  case 160:
+#line 712 "util/configparser.y"
     {
                OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2575,8 +2587,8 @@ yyreduce:
        }
     break;
 
-  case 159:
-#line 719 "util/configparser.y"
+  case 161:
+#line 721 "util/configparser.y"
     {
                OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[(2) - (2)].str)))
@@ -2584,8 +2596,8 @@ yyreduce:
        }
     break;
 
-  case 160:
-#line 726 "util/configparser.y"
+  case 162:
+#line 728 "util/configparser.y"
     {
                OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2596,8 +2608,8 @@ yyreduce:
        }
     break;
 
-  case 161:
-#line 736 "util/configparser.y"
+  case 163:
+#line 738 "util/configparser.y"
     {
                OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)));
                if(strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 &&
@@ -2612,8 +2624,8 @@ yyreduce:
        }
     break;
 
-  case 162:
-#line 750 "util/configparser.y"
+  case 164:
+#line 752 "util/configparser.y"
     {
                OUTYY(("P(server_module_conf:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->module_conf);
@@ -2621,8 +2633,8 @@ yyreduce:
        }
     break;
 
-  case 163:
-#line 757 "util/configparser.y"
+  case 165:
+#line 759 "util/configparser.y"
     {
                OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strlen((yyvsp[(2) - (2)].str)) == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) {
@@ -2641,8 +2653,38 @@ yyreduce:
        }
     break;
 
-  case 164:
-#line 775 "util/configparser.y"
+  case 166:
+#line 777 "util/configparser.y"
+    {
+               OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[(2) - (2)].str)));
+               if(strlen((yyvsp[(2) - (2)].str)) == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) {
+                       cfg_parser->cfg->val_sig_skew_min = 0;
+               } else {
+                       cfg_parser->cfg->val_sig_skew_min = atoi((yyvsp[(2) - (2)].str));
+                       if(!cfg_parser->cfg->val_sig_skew_min)
+                               yyerror("number expected");
+               }
+               free((yyvsp[(2) - (2)].str));
+       }
+    break;
+
+  case 167:
+#line 790 "util/configparser.y"
+    {
+               OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[(2) - (2)].str)));
+               if(strlen((yyvsp[(2) - (2)].str)) == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) {
+                       cfg_parser->cfg->val_sig_skew_max = 0;
+               } else {
+                       cfg_parser->cfg->val_sig_skew_max = atoi((yyvsp[(2) - (2)].str));
+                       if(!cfg_parser->cfg->val_sig_skew_max)
+                               yyerror("number expected");
+               }
+               free((yyvsp[(2) - (2)].str));
+       }
+    break;
+
+  case 168:
+#line 803 "util/configparser.y"
     {
                OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2652,8 +2694,8 @@ yyreduce:
        }
     break;
 
-  case 165:
-#line 784 "util/configparser.y"
+  case 169:
+#line 812 "util/configparser.y"
     {
                OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2663,8 +2705,8 @@ yyreduce:
        }
     break;
 
-  case 166:
-#line 793 "util/configparser.y"
+  case 170:
+#line 821 "util/configparser.y"
     {
                OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2675,8 +2717,8 @@ yyreduce:
        }
     break;
 
-  case 167:
-#line 803 "util/configparser.y"
+  case 171:
+#line 831 "util/configparser.y"
     {
                OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2687,8 +2729,8 @@ yyreduce:
        }
     break;
 
-  case 168:
-#line 813 "util/configparser.y"
+  case 172:
+#line 841 "util/configparser.y"
     {
                OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->val_nsec3_key_iterations);
@@ -2696,8 +2738,8 @@ yyreduce:
        }
     break;
 
-  case 169:
-#line 820 "util/configparser.y"
+  case 173:
+#line 848 "util/configparser.y"
     {
                OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->key_cache_size))
@@ -2706,8 +2748,8 @@ yyreduce:
        }
     break;
 
-  case 170:
-#line 828 "util/configparser.y"
+  case 174:
+#line 856 "util/configparser.y"
     {
                OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2721,8 +2763,8 @@ yyreduce:
        }
     break;
 
-  case 171:
-#line 841 "util/configparser.y"
+  case 175:
+#line 869 "util/configparser.y"
     {
                OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->neg_cache_size))
@@ -2731,8 +2773,8 @@ yyreduce:
        }
     break;
 
-  case 172:
-#line 849 "util/configparser.y"
+  case 176:
+#line 877 "util/configparser.y"
     {
                OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)));
                if(strcmp((yyvsp[(3) - (3)].str), "static")!=0 && strcmp((yyvsp[(3) - (3)].str), "deny")!=0 &&
@@ -2753,8 +2795,8 @@ yyreduce:
        }
     break;
 
-  case 173:
-#line 869 "util/configparser.y"
+  case 177:
+#line 897 "util/configparser.y"
     {
                OUTYY(("P(server_local_data:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[(2) - (2)].str)))
@@ -2762,8 +2804,8 @@ yyreduce:
        }
     break;
 
-  case 174:
-#line 876 "util/configparser.y"
+  case 178:
+#line 904 "util/configparser.y"
     {
                char* ptr;
                OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2779,8 +2821,8 @@ yyreduce:
        }
     break;
 
-  case 175:
-#line 891 "util/configparser.y"
+  case 179:
+#line 919 "util/configparser.y"
     {
                OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->stubs->name);
@@ -2788,8 +2830,8 @@ yyreduce:
        }
     break;
 
-  case 176:
-#line 898 "util/configparser.y"
+  case 180:
+#line 926 "util/configparser.y"
     {
                OUTYY(("P(stub-host:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[(2) - (2)].str)))
@@ -2797,8 +2839,8 @@ yyreduce:
        }
     break;
 
-  case 177:
-#line 905 "util/configparser.y"
+  case 181:
+#line 933 "util/configparser.y"
     {
                OUTYY(("P(stub-addr:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[(2) - (2)].str)))
@@ -2806,8 +2848,8 @@ yyreduce:
        }
     break;
 
-  case 178:
-#line 912 "util/configparser.y"
+  case 182:
+#line 940 "util/configparser.y"
     {
                OUTYY(("P(stub-prime:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2818,8 +2860,8 @@ yyreduce:
        }
     break;
 
-  case 179:
-#line 922 "util/configparser.y"
+  case 183:
+#line 950 "util/configparser.y"
     {
                OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->forwards->name);
@@ -2827,8 +2869,8 @@ yyreduce:
        }
     break;
 
-  case 180:
-#line 929 "util/configparser.y"
+  case 184:
+#line 957 "util/configparser.y"
     {
                OUTYY(("P(forward-host:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[(2) - (2)].str)))
@@ -2836,8 +2878,8 @@ yyreduce:
        }
     break;
 
-  case 181:
-#line 936 "util/configparser.y"
+  case 185:
+#line 964 "util/configparser.y"
     {
                OUTYY(("P(forward-addr:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[(2) - (2)].str)))
@@ -2845,15 +2887,15 @@ yyreduce:
        }
     break;
 
-  case 182:
-#line 943 "util/configparser.y"
+  case 186:
+#line 971 "util/configparser.y"
     { 
                OUTYY(("\nP(remote-control:)\n")); 
        }
     break;
 
-  case 192:
-#line 954 "util/configparser.y"
+  case 196:
+#line 982 "util/configparser.y"
     {
                OUTYY(("P(control_enable:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2864,8 +2906,8 @@ yyreduce:
        }
     break;
 
-  case 193:
-#line 964 "util/configparser.y"
+  case 197:
+#line 992 "util/configparser.y"
     {
                OUTYY(("P(control_port:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2875,8 +2917,8 @@ yyreduce:
        }
     break;
 
-  case 194:
-#line 973 "util/configparser.y"
+  case 198:
+#line 1001 "util/configparser.y"
     {
                OUTYY(("P(control_interface:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, (yyvsp[(2) - (2)].str)))
@@ -2884,8 +2926,8 @@ yyreduce:
        }
     break;
 
-  case 195:
-#line 980 "util/configparser.y"
+  case 199:
+#line 1008 "util/configparser.y"
     {
                OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->server_key_file);
@@ -2893,8 +2935,8 @@ yyreduce:
        }
     break;
 
-  case 196:
-#line 987 "util/configparser.y"
+  case 200:
+#line 1015 "util/configparser.y"
     {
                OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->server_cert_file);
@@ -2902,8 +2944,8 @@ yyreduce:
        }
     break;
 
-  case 197:
-#line 994 "util/configparser.y"
+  case 201:
+#line 1022 "util/configparser.y"
     {
                OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->control_key_file);
@@ -2911,8 +2953,8 @@ yyreduce:
        }
     break;
 
-  case 198:
-#line 1001 "util/configparser.y"
+  case 202:
+#line 1029 "util/configparser.y"
     {
                OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->control_cert_file);
@@ -2920,15 +2962,15 @@ yyreduce:
        }
     break;
 
-  case 199:
-#line 1008 "util/configparser.y"
+  case 203:
+#line 1036 "util/configparser.y"
     { 
                OUTYY(("\nP(python:)\n")); 
        }
     break;
 
-  case 203:
-#line 1017 "util/configparser.y"
+  case 207:
+#line 1045 "util/configparser.y"
     {
                OUTYY(("P(python-script:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->python_script);
@@ -2938,7 +2980,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 2942 "util/configparser.c"
+#line 2984 "util/configparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -3152,7 +3194,7 @@ yyreturn:
 }
 
 
-#line 1022 "util/configparser.y"
+#line 1050 "util/configparser.y"
 
 
 /* parse helper routines could be here */
index 1112a9f3498510cdaf69ae613aa173fa6c3ecf47..1762c799daec8f418b823394f900efdcb59bb0a0 100644 (file)
      VAR_LOG_TIME_ASCII = 356,
      VAR_DOMAIN_INSECURE = 357,
      VAR_PYTHON = 358,
-     VAR_PYTHON_SCRIPT = 359
+     VAR_PYTHON_SCRIPT = 359,
+     VAR_VAL_SIG_SKEW_MIN = 360,
+     VAR_VAL_SIG_SKEW_MAX = 361
    };
 #endif
 /* Tokens.  */
 #define VAR_DOMAIN_INSECURE 357
 #define VAR_PYTHON 358
 #define VAR_PYTHON_SCRIPT 359
+#define VAR_VAL_SIG_SKEW_MIN 360
+#define VAR_VAL_SIG_SKEW_MAX 361
 
 
 
@@ -257,7 +261,7 @@ typedef union YYSTYPE
        char*   str;
 }
 /* Line 1489 of yacc.c.  */
-#line 261 "util/configparser.h"
+#line 265 "util/configparser.h"
        YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
index 85c9e78a5daca4b65df891ba9e9c3608ab6b19ed..eac9e5b9cfa36bb7ed46d64aa7173961da8a0de6 100644 (file)
@@ -97,7 +97,8 @@ extern struct config_parser_state* cfg_parser;
 %token VAR_SERVER_CERT_FILE VAR_CONTROL_KEY_FILE VAR_CONTROL_CERT_FILE
 %token VAR_EXTENDED_STATISTICS VAR_LOCAL_DATA_PTR VAR_JOSTLE_TIMEOUT
 %token VAR_STUB_PRIME VAR_UNWANTED_REPLY_THRESHOLD VAR_LOG_TIME_ASCII
-%token VAR_DOMAIN_INSECURE VAR_PYTHON VAR_PYTHON_SCRIPT
+%token VAR_DOMAIN_INSECURE VAR_PYTHON VAR_PYTHON_SCRIPT VAR_VAL_SIG_SKEW_MIN
+%token VAR_VAL_SIG_SKEW_MAX
 
 %%
 toplevelvars: /* empty */ | toplevelvars toplevelvar ;
@@ -146,7 +147,8 @@ content_server: server_num_threads | server_verbosity | server_port |
        server_private_domain | server_extended_statistics | 
        server_local_data_ptr | server_jostle_timeout | 
        server_unwanted_reply_threshold | server_log_time_ascii | 
-       server_domain_insecure
+       server_domain_insecure | server_val_sig_skew_min | 
+       server_val_sig_skew_max
        ;
 stubstart: VAR_STUB_ZONE
        {
@@ -771,6 +773,32 @@ server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING
                free($2);
        }
        ;
+server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING
+       {
+               OUTYY(("P(server_val_sig_skew_min:%s)\n", $2));
+               if(strlen($2) == 0 || strcmp($2, "0") == 0) {
+                       cfg_parser->cfg->val_sig_skew_min = 0;
+               } else {
+                       cfg_parser->cfg->val_sig_skew_min = atoi($2);
+                       if(!cfg_parser->cfg->val_sig_skew_min)
+                               yyerror("number expected");
+               }
+               free($2);
+       }
+       ;
+server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING
+       {
+               OUTYY(("P(server_val_sig_skew_max:%s)\n", $2));
+               if(strlen($2) == 0 || strcmp($2, "0") == 0) {
+                       cfg_parser->cfg->val_sig_skew_max = 0;
+               } else {
+                       cfg_parser->cfg->val_sig_skew_max = atoi($2);
+                       if(!cfg_parser->cfg->val_sig_skew_max)
+                               yyerror("number expected");
+               }
+               free($2);
+       }
+       ;
 server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING
        {
                OUTYY(("P(server_cache_max_ttl:%s)\n", $2));
index f0b4c70d5316972272bce7a2f5ec7dd8c0f3b2d8..b973d54ef0468958291cff481122f7d58eb46a94 100644 (file)
@@ -1073,13 +1073,29 @@ check_dates(struct val_env* ve, uint32_t unow,
                return 0;
        }
        if(incep - now > 0) {
-               sigdate_error("verify: signature bad, current time is"
-                       " before inception date", expi, incep, now);
-               return 0;
+               /* within skew ? (calc here to avoid calculation normally) */
+               int32_t skew = (expi-incep)/10;
+               if(skew < ve->skew_min) skew = ve->skew_min;
+               if(skew > ve->skew_max) skew = ve->skew_max;
+               if(incep - now > skew) {
+                       sigdate_error("verify: signature bad, current time is"
+                               " before inception date", expi, incep, now);
+                       return 0;
+               }
+               sigdate_error("verify warning suspicious signature inception "
+                       " or bad local clock", expi, incep, now);
        }
        if(now - expi > 0) {
-               sigdate_error("verify: signature expired", expi, incep, now);
-               return 0;
+               int32_t skew = (expi-incep)/10;
+               if(skew < ve->skew_min) skew = ve->skew_min;
+               if(skew > ve->skew_max) skew = ve->skew_max;
+               if(now - expi > skew) {
+                       sigdate_error("verify: signature expired", expi, 
+                               incep, now);
+                       return 0;
+               }
+               sigdate_error("verify warning suspicious signature expiration "
+                       " or bad local clock", expi, incep, now);
        }
        return 1;
 
index 5b1a166323d58cccf93b04c338c72395e5bf5592..5ae36442b2b82e92a43ea74f546ac95e6fca378b 100644 (file)
@@ -122,6 +122,8 @@ val_apply_cfg(struct module_env* env, struct val_env* val_env,
                return 0;
        }
        val_env->date_override = cfg->val_date_override;
+       val_env->skew_min = cfg->val_sig_skew_min;
+       val_env->skew_max = cfg->val_sig_skew_max;
        c = cfg_count_numbers(cfg->val_nsec3_key_iterations);
        if(c < 1 || (c&1)) {
                log_err("validator: unparseable or odd nsec3 key "
index 968fcf2cd001c4d1508548fba166c2e9f85de8ae..cdc4796192de21e09786f0e11172c7d229e42575 100644 (file)
@@ -71,6 +71,12 @@ struct val_env {
         * if 0, current time is used for rrsig validation */
        int32_t date_override;
 
+       /** clock skew min for signatures */
+       int32_t skew_min;
+
+       /** clock skew max for signatures */
+       int32_t skew_max;
+
        /** TTL for bogus data; used instead of untrusted TTL from data.
         * Bogus data will not be verified more often than this interval. 
         * seconds. */