]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix #644: harden-algo-downgrade option, if turned off, fixes the
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 9 Mar 2015 13:30:37 +0000 (13:30 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 9 Mar 2015 13:30:37 +0000 (13:30 +0000)
  reported excessive validation failure when multiple algorithms
  are present.  It allows the weakest algorithm to validate the zone.

git-svn-id: file:///svn/unbound/trunk@3354 be551aaa-1e26-0410-a405-d3ace91eadb9

13 files changed:
doc/Changelog
doc/example.conf.in
doc/unbound.conf.5.in
testdata/val_ta_algo_dnskey_dp.rpl [new file with mode: 0644]
testdata/val_ta_algo_missing_dp.rpl [new file with mode: 0644]
util/config_file.c
util/config_file.h
util/configlexer.c
util/configlexer.lex
util/configparser.c
util/configparser.h
util/configparser.y
validator/validator.c

index 4cb9fd38b18251d1aaae0db6b14268996c14f1d1..12113134517bd7602c8c0d7aa262f914e2ff4140 100644 (file)
@@ -1,3 +1,8 @@
+9 March 2015: Wouter
+       - Fix #644: harden-algo-downgrade option, if turned off, fixes the
+         reported excessive validation failure when multiple algorithms
+         are present.  It allows the weakest algorithm to validate the zone.
+
 5 March 2015: Wouter
        - contrib/unbound_smf22.tar.gz: Solaris SMF installation/removal
          scripts.  Contributed by Yuri Voinov.
index 371a66954d6355ee243bdbfea73983f270897630..48ea59e06f80a859d937d237990d33d98dfe00b8 100644 (file)
@@ -284,6 +284,11 @@ server:
        # implementation of draft-wijngaards-dnsext-resolver-side-mitigation.
        # harden-referral-path: no
 
+       # Harden against algorithm downgrade when multiple algorithms are
+       # advertised in the DS record.  If no, allows the weakest algorithm
+       # to validate the zone.
+       # harden-algo-downgrade: yes
+
        # Use 0x20-encoded random bits in the query to foil spoof attempts.
        # This feature is an experimental implementation of draft dns-0x20.
        # use-caps-for-id: no
index f083e91a67cc4a2155e19d22e5b7fae0cc6762e2..14bfa68b28d315a050a6ff96374f5f8863ad97c3 100644 (file)
@@ -550,6 +550,13 @@ extra query load that is generated.  Experimental option.
 If you enable it consider adding more numbers after the target\-fetch\-policy
 to increase the max depth that is checked to.
 .TP
+.B harden\-algo\-downgrade: \fI<yes or no>
+Harden against algorithm downgrade when multiple algorithms are
+advertised in the DS record.  If no, allows the weakest algorithm to
+validate the zone.  Default is yes.  Zone signers must produce zones
+that allow this feature to work, but sometimes they do not, and turning
+this option off avoids that validation failure.
+.TP
 .B use\-caps\-for\-id: \fI<yes or no>
 Use 0x20\-encoded random bits in the query to foil spoof attempts.
 This perturbs the lowercase and uppercase of query names sent to 
diff --git a/testdata/val_ta_algo_dnskey_dp.rpl b/testdata/val_ta_algo_dnskey_dp.rpl
new file mode 100644 (file)
index 0000000..b23c0f1
--- /dev/null
@@ -0,0 +1,182 @@
+; config options
+; The island of trust is at example.com
+server:
+       trust-anchor: "example.com.     3600    IN      DNSKEY  256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}"
+       trust-anchor: "example.com.     3600    IN      DS      30899 5 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512"
+       val-override-date: "20070916134226"
+       target-fetch-policy: "0 0 0 0 0"
+       harden-algo-downgrade: no
+
+stub-zone:
+       name: "."
+       stub-addr: 193.0.14.129         # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with multiple algorithm trust anchor without harden 
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+       ADDRESS 193.0.14.129 
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS        K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET.    IN      A       193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+com.   IN NS   a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net.    IN      A       192.5.6.30
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net.
+RANGE_BEGIN 0 100
+       ADDRESS 192.5.6.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION ANSWER
+com.    IN NS   a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net.     IN      A       192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+       ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com.    IN NS   ns.example.com.
+example.com.    3600    IN      RRSIG   NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+example.com.   3600    IN      RRSIG   NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899}
+SECTION ADDITIONAL
+ns.example.com.         IN      A       1.2.3.4
+ns.example.com. 3600    IN      RRSIG   A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ns.example.com.        3600    IN      RRSIG   A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.com.    IN NS   ns.example.com.
+example.com.    3600    IN      RRSIG   NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+example.com.   3600    IN      RRSIG   NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899}
+SECTION ADDITIONAL
+ns.example.com.         IN      A       1.2.3.4
+ns.example.com. 3600    IN      RRSIG   A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ns.example.com.        3600    IN      RRSIG   A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899}
+ENTRY_END
+
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com.   3600    IN      DNSKEY  256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}
+example.com.   3600    IN      DNSKEY  256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 512b}
+example.com.   3600    IN      RRSIG   DNSKEY 3 2 3600 20070926134150 20070829134150 2854 example.com. AKIIYDOGHogglFqJK94ZtOnF7EfGikgAyloMNRSMCrQgFaFkmcOyjrc= ;{id = 2854}
+example.com.   3600    IN      RRSIG   DNSKEY 5 2 3600 20070926134150 20070829134150 30899 example.com. J55fsz1GGMnngc4r50xvXDUdaVMlfcLKLVsfMhwNLF+ERac5XV/lLRAc/aSER+qQdsSo0CrjYjy1wat7YQpDAA== ;{id = 30899}
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+example.com.    3600    IN      RRSIG   NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+example.com.   3600    IN      RRSIG   NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899}
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ns.example.com. 3600    IN      RRSIG   A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ns.example.com.        3600    IN      RRSIG   A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A  10.20.30.40
+ns.example.com. 3600    IN      RRSIG   A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854}
+www.example.com.       3600    IN      RRSIG   A 5 3 3600 20070926134150 20070829134150 30899 example.com. JNWECShNE+nCLQwOXJJ3xpUkh2G+FCh5nk8uYAHIVQRse/BIvCMSlvRrtVyw9RnXvk5RR2bEgN0pRdLWW7ug5Q== ;{id = 30899}
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+example.com.    3600    IN      RRSIG   NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+example.com.   3600    IN      RRSIG   NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899}
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+www.example.com.        3600    IN      RRSIG   A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854}
+ns.example.com.        3600    IN      RRSIG   A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899}
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A  10.20.30.40
+www.example.com.       3600    IN      RRSIG   A 5 3 3600 20070926134150 20070829134150 30899 example.com. JNWECShNE+nCLQwOXJJ3xpUkh2G+FCh5nk8uYAHIVQRse/BIvCMSlvRrtVyw9RnXvk5RR2bEgN0pRdLWW7ug5Q== ;{id = 30899}
+www.example.com.        3600    IN      RRSIG   A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854}
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+example.com.    3600    IN      RRSIG   NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+example.com.   3600    IN      RRSIG   NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899}
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ns.example.com. 3600    IN      RRSIG   A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854}
+ns.example.com.        3600    IN      RRSIG   A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899}
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/val_ta_algo_missing_dp.rpl b/testdata/val_ta_algo_missing_dp.rpl
new file mode 100644 (file)
index 0000000..2cf0556
--- /dev/null
@@ -0,0 +1,185 @@
+; config options
+; The island of trust is at example.com
+server:
+       trust-anchor: "example.com.     3600    IN      DNSKEY  256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}"
+       trust-anchor: "example.com.     3600    IN      DS      30899 5 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512"
+       trust-anchor: "example.com.     3600    IN      DS      30899 7 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512"
+       val-override-date: "20070916134226"
+       target-fetch-policy: "0 0 0 0 0"
+       harden-algo-downgrade: no
+
+stub-zone:
+       name: "."
+       stub-addr: 193.0.14.129         # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with multiple algorithm missing one
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+       ADDRESS 193.0.14.129 
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS        K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET.    IN      A       193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+com.   IN NS   a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net.    IN      A       192.5.6.30
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net.
+RANGE_BEGIN 0 100
+       ADDRESS 192.5.6.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION ANSWER
+com.    IN NS   a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net.     IN      A       192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+       ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com.    IN NS   ns.example.com.
+example.com.    3600    IN      RRSIG   NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+example.com.   3600    IN      RRSIG   NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899}
+SECTION ADDITIONAL
+ns.example.com.         IN      A       1.2.3.4
+ns.example.com. 3600    IN      RRSIG   A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ns.example.com.        3600    IN      RRSIG   A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.com.    IN NS   ns.example.com.
+example.com.    3600    IN      RRSIG   NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+example.com.   3600    IN      RRSIG   NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899}
+SECTION ADDITIONAL
+ns.example.com.         IN      A       1.2.3.4
+ns.example.com. 3600    IN      RRSIG   A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ns.example.com.        3600    IN      RRSIG   A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899}
+ENTRY_END
+
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com.   3600    IN      DNSKEY  256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}
+example.com.   3600    IN      DNSKEY  256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 512b}
+example.com.   3600    IN      RRSIG   DNSKEY 3 2 3600 20070926134150 20070829134150 2854 example.com. AKIIYDOGHogglFqJK94ZtOnF7EfGikgAyloMNRSMCrQgFaFkmcOyjrc= ;{id = 2854}
+example.com.   3600    IN      RRSIG   DNSKEY 5 2 3600 20070926134150 20070829134150 30899 example.com. J55fsz1GGMnngc4r50xvXDUdaVMlfcLKLVsfMhwNLF+ERac5XV/lLRAc/aSER+qQdsSo0CrjYjy1wat7YQpDAA== ;{id = 30899}
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+example.com.    3600    IN      RRSIG   NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+example.com.   3600    IN      RRSIG   NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899}
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ns.example.com. 3600    IN      RRSIG   A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ns.example.com.        3600    IN      RRSIG   A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A  10.20.30.40
+ns.example.com. 3600    IN      RRSIG   A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854}
+www.example.com.       3600    IN      RRSIG   A 5 3 3600 20070926134150 20070829134150 30899 example.com. JNWECShNE+nCLQwOXJJ3xpUkh2G+FCh5nk8uYAHIVQRse/BIvCMSlvRrtVyw9RnXvk5RR2bEgN0pRdLWW7ug5Q== ;{id = 30899}
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+example.com.    3600    IN      RRSIG   NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+example.com.   3600    IN      RRSIG   NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899}
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+www.example.com.        3600    IN      RRSIG   A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854}
+ns.example.com.        3600    IN      RRSIG   A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899}
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com.       3600    IN      A       10.20.30.40
+www.example.com.       3600    IN      RRSIG   A 5 3 3600 20070926134150 20070829134150 30899 example.com. JNWECShNE+nCLQwOXJJ3xpUkh2G+FCh5nk8uYAHIVQRse/BIvCMSlvRrtVyw9RnXvk5RR2bEgN0pRdLWW7ug5Q== ;{id = 30899}
+www.example.com.       3600    IN      RRSIG   A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854}
+
+SECTION AUTHORITY
+example.com.   3600    IN      NS      ns.example.com.
+example.com.   3600    IN      RRSIG   NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+example.com.   3600    IN      RRSIG   NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899}
+
+SECTION ADDITIONAL
+ns.example.com.        3600    IN      A       1.2.3.4
+ns.example.com.        3600    IN      RRSIG   A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854}
+ns.example.com.        3600    IN      RRSIG   A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899}
+ENTRY_END
+
+SCENARIO_END
index 5c4e897da37399004bd9ef617e56eade3b525aa1..41f8cd52053f64b7b4fdc2882711de7b7060891d 100644 (file)
@@ -169,6 +169,7 @@ config_create(void)
        cfg->harden_dnssec_stripped = 1;
        cfg->harden_below_nxdomain = 0;
        cfg->harden_referral_path = 0;
+       cfg->harden_algo_downgrade = 1;
        cfg->use_caps_bits_for_id = 0;
        cfg->private_address = NULL;
        cfg->private_domain = NULL;
@@ -404,6 +405,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
        else S_YNO("harden-dnssec-stripped:", harden_dnssec_stripped)
        else S_YNO("harden-below-nxdomain:", harden_below_nxdomain)
        else S_YNO("harden-referral-path:", harden_referral_path)
+       else S_YNO("harden-algo-downgrade:", harden_algo_downgrade)
        else S_YNO("use-caps-for-id", use_caps_bits_for_id)
        else S_SIZET_OR_ZERO("unwanted-reply-threshold:", unwanted_threshold)
        else S_STRLIST("private-address:", private_address)
@@ -662,6 +664,7 @@ config_get_option(struct config_file* cfg, const char* opt,
        else O_YNO(opt, "harden-dnssec-stripped", harden_dnssec_stripped)
        else O_YNO(opt, "harden-below-nxdomain", harden_below_nxdomain)
        else O_YNO(opt, "harden-referral-path", harden_referral_path)
+       else O_YNO(opt, "harden-algo-downgrade", harden_algo_downgrade)
        else O_YNO(opt, "use-caps-for-id", use_caps_bits_for_id)
        else O_DEC(opt, "unwanted-reply-threshold", unwanted_threshold)
        else O_YNO(opt, "do-not-query-localhost", donotquery_localhost)
index ca512d720ebdeae423bae33ee5a5e16ede9713cd..faa275accbbc55b198c9405975638e0c0966a5f6 100644 (file)
@@ -173,6 +173,8 @@ struct config_file {
        int harden_below_nxdomain;
        /** harden the referral path, query for NS,A,AAAA and validate */
        int harden_referral_path;
+       /** harden against algorithm downgrade */
+       int harden_algo_downgrade;
        /** use 0x20 bits in query as random ID bits */
        int use_caps_bits_for_id;
        /** strip away these private addrs from answers, no DNS Rebinding */
index a288aacc1fd5364efd0d97540760d7bb16037a19..d708977188be498368d827032d7d7c8c55bd46ad 100644 (file)
@@ -363,8 +363,8 @@ static void yy_fatal_error (yyconst char msg[]  );
        *yy_cp = '\0'; \
        (yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 164
-#define YY_END_OF_BUFFER 165
+#define YY_NUM_RULES 165
+#define YY_END_OF_BUFFER 166
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -372,187 +372,189 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[1628] =
+static yyconst flex_int16_t yy_accept[1643] =
     {   0,
-        1,    1,  146,  146,  150,  150,  154,  154,  158,  158,
-        1,    1,  165,  162,    1,  144,  144,  163,    2,  163,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  146,
-      147,  147,  148,  163,  150,  151,  151,  152,  163,  157,
-      154,  155,  155,  156,  163,  158,  159,  159,  160,  163,
-      161,  145,    2,  149,  163,  161,  162,    0,    1,    2,
-        2,    2,    2,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  146,    0,  150,    0,  157,    0,  154,  158,
-        0,  161,    0,    2,    2,  161,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  161,  162,  162,  162,  162,  162,  162,
-
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  161,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-
-      162,  162,  162,  162,  162,   66,  162,  162,  162,  162,
-      162,    6,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  161,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  161,  162,  162,  162,  162,   29,  162,  162,  162,
-      162,  162,  162,  162,  162,  131,  162,   12,   13,  162,
-       15,   14,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  124,
-      162,  162,  162,  162,  162,    3,  162,  162,  162,  162,
-
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  161,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      153,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,   32,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,   33,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,   81,  153,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,   80,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-       64,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-
-      162,  162,  162,   20,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-       30,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,   31,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,   22,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-
-      162,  162,  162,  162,  162,  162,   26,  162,   27,  162,
-      162,  162,   67,  162,   68,  162,   65,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,    5,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,   83,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,   23,
-      162,  162,  162,  162,  108,  107,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-
-      162,  162,  162,  162,  162,   34,  162,  162,  162,  162,
-      162,  162,  162,  162,   70,   69,  162,  162,  162,  162,
-      162,  162,  162,  104,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,   51,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,   55,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  106,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,    4,  162,  162,  162,  162,  162,  162,
-
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  101,  162,  162,
-      162,  162,  162,  162,  162,  117,  162,  102,  162,  129,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-       21,  162,  162,  162,  162,   72,  162,   73,   71,  162,
-      162,  162,  162,  162,  162,   79,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  103,  162,  162,  162,
-      162,  128,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,   63,  162,  162,  162,  162,  162,  162,
-
-      162,  162,   28,  162,  162,   17,  162,  162,  162,   16,
-      162,   88,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,   41,   42,  162,  162,  162,
-      162,  162,  162,  162,  132,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,   74,  162,
-      162,  162,  162,  162,   78,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-       82,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  123,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,   92,
-
-      162,   96,  162,  162,  162,  162,   77,  162,  162,  115,
-      162,  162,  162,  162,  130,  162,  162,  162,  162,  162,
-      162,  162,  137,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,   95,  162,  162,  162,  162,  162,   43,
-       44,  162,   50,   97,  162,  109,  105,  162,  162,   37,
-      162,   99,  162,  162,  162,  162,  162,    7,  162,   62,
-      114,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,   84,  136,  162,
-      162,  162,  162,  162,  162,  162,  162,  125,  162,  162,
-
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,   98,  162,   36,   38,  162,  162,  162,  162,  162,
-       61,  162,  162,  162,  162,  119,   18,   19,  162,  162,
-      162,  162,  162,  162,  162,   59,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  121,  118,  162,  162,  162,
-      162,  162,  162,  162,  162,   35,  162,  162,  162,  162,
-      162,  162,   11,  162,  162,  162,  162,  162,  162,  162,
-      162,   10,  162,  162,   39,  162,  127,  120,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,   91,
-       90,  162,  122,  116,  162,  162,  162,  162,  162,  162,
-
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,   45,  162,  126,  162,  162,  162,  162,   40,  162,
-      162,  162,   85,   87,  110,  162,  162,  162,   89,  162,
-      162,  162,  162,  162,  162,  162,  162,  133,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,   24,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  135,  162,  162,
-      113,  162,  162,  162,  162,  162,  162,   48,  162,   25,
-      162,    9,  162,  162,  111,   52,  162,  162,  162,   94,
-      162,  162,  162,  162,  162,  162,  134,   75,  162,  162,
-
-      162,   54,   58,   53,  162,   46,  162,    8,  162,  162,
-       93,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-       57,  162,   47,  162,  112,  162,  162,   86,  162,  162,
-      162,  162,  162,  162,   76,   56,   49,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,   60,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  100,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-
-      162,  140,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  138,  162,  141,  142,  162,
-      162,  162,  162,  162,  139,  143,    0
+        1,    1,  147,  147,  151,  151,  155,  155,  159,  159,
+        1,    1,  166,  163,    1,  145,  145,  164,    2,  164,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  147,
+      148,  148,  149,  164,  151,  152,  152,  153,  164,  158,
+      155,  156,  156,  157,  164,  159,  160,  160,  161,  164,
+      162,  146,    2,  150,  164,  162,  163,    0,    1,    2,
+        2,    2,    2,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  147,    0,  151,    0,  158,    0,  155,  159,
+        0,  162,    0,    2,    2,  162,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  162,  163,  163,  163,  163,  163,  163,
+
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  162,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+
+      163,  163,  163,  163,  163,   67,  163,  163,  163,  163,
+      163,    6,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  162,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  162,  163,  163,  163,  163,   29,  163,  163,  163,
+      163,  163,  163,  163,  163,  132,  163,   12,   13,  163,
+       15,   14,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  125,
+      163,  163,  163,  163,  163,    3,  163,  163,  163,  163,
+
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  162,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  154,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,   32,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,   33,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,   82,  154,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,   81,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,   65,  163,  163,  163,  163,  163,  163,  163,
+
+      163,  163,  163,  163,  163,   20,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,   30,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,   31,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,   22,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+
+      163,  163,  163,  163,  163,  163,  163,  163,  163,   26,
+      163,   27,  163,  163,  163,   68,  163,   69,  163,   66,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,    5,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+       84,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,   23,  163,  163,  163,  163,  109,  108,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+
+      163,  163,  163,  163,  163,  163,  163,  163,  163,   34,
+      163,  163,  163,  163,  163,  163,  163,  163,   71,   70,
+      163,  163,  163,  163,  163,  163,  163,  105,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,   51,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,   55,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  107,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,    4,  163,
+
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  102,  163,  163,  163,  163,  163,  163,  163,
+      118,  163,  103,  163,  130,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,   21,  163,  163,  163,  163,
+       73,  163,   74,   72,  163,  163,  163,  163,  163,  163,
+      163,   80,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  104,  163,  163,  163,  163,  129,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,   64,
+
+      163,  163,  163,  163,  163,  163,  163,  163,   28,  163,
+      163,   17,  163,  163,  163,   16,  163,   89,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,   41,   42,  163,  163,  163,  163,  163,  163,  163,
+      133,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,   75,  163,  163,  163,  163,  163,
+      163,   79,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,   83,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  124,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+
+      163,  163,  163,  163,  163,  163,   93,  163,   97,  163,
+      163,  163,  163,   78,  163,  163,  116,  163,  163,  163,
+      163,  131,  163,  163,  163,  163,  163,  163,  163,  138,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,   96,  163,  163,  163,  163,  163,   43,   44,  163,
+       50,   98,  163,  110,  106,  163,  163,   37,  163,  100,
+      163,  163,  163,  163,  163,    7,  163,   63,  115,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,   85,  137,  163,  163,  163,
+
+      163,  163,  163,  163,  163,  126,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+       99,  163,   36,   38,  163,  163,  163,  163,  163,   62,
+      163,  163,  163,  163,  120,   18,   19,  163,  163,  163,
+      163,  163,  163,  163,   60,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  122,  119,  163,  163,  163,  163,
+      163,  163,  163,  163,   35,  163,  163,  163,  163,  163,
+      163,  163,   11,  163,  163,  163,  163,  163,  163,  163,
+      163,   10,  163,  163,   39,  163,  128,  121,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,   92,
+
+       91,  163,  123,  117,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,   45,  163,  127,  163,  163,  163,  163,   40,
+      163,  163,  163,   86,   88,  111,  163,  163,  163,   90,
+      163,  163,  163,  163,  163,  163,  163,  163,  134,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,   24,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  136,
+      163,  163,  114,  163,  163,  163,  163,  163,  163,  163,
+       48,  163,   25,  163,    9,  163,  163,  112,   52,  163,
+
+      163,  163,   95,  163,  163,  163,  163,  163,  163,  135,
+       76,  163,  163,  163,  163,   54,   58,   53,  163,   46,
+      163,    8,  163,  163,   94,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,   59,   57,  163,   47,  163,  113,
+      163,  163,   87,  163,  163,  163,  163,  163,  163,   77,
+       56,   49,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,   61,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  101,  163,  163,
+
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  141,  163,  163,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      139,  163,  142,  143,  163,  163,  163,  163,  163,  140,
+      144,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -595,15 +597,15 @@ static yyconst flex_int32_t yy_meta[40] =
         1,    1,    1,    1,    1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[1642] =
+static yyconst flex_int16_t yy_base[1657] =
     {   0,
         0,    0,   37,   40,   44,   51,   63,   75,   56,   68,
-       87,  108, 2422, 2151,   50, 3237, 3237, 3237,  129,   94,
+       87,  108, 2902, 2887,   50, 3255, 3255, 3255,  129,   94,
        70,  104,  130,   90,   92,  115,  127,   95,   84,  111,
-      137,  148,   50,  150,  155,  157,  163,  171,  178, 1935,
-     3237, 3237, 3237,   70, 1925, 3237, 3237, 3237,   42, 1776,
-     1709, 3237, 3237, 3237,  195, 1559, 3237, 3237, 3237,  141,
-     1156, 3237,  202, 3237,  206,  122, 1017,  212,  120,    0,
+      137,  148,   50,  150,  155,  157,  163,  171,  178, 2486,
+     3255, 3255, 3255,   70, 2352, 3255, 3255, 3255,   42, 2150,
+     2132, 3255, 3255, 3255,  195, 2010, 3255, 3255, 3255,  141,
+     1942, 3255,  202, 3255,  206,  122, 1156,  212,  120,    0,
       223,    0,    0,  103,  147,  154,  158,  192,  199,  207,
       208,  205,  209,  221,  218,  220,  224,  225,  229,  230,
       231,  238,  251,  236,  247,  250,  237,  248,  256,  259,
@@ -630,8 +632,8 @@ static yyconst flex_int16_t yy_base[1642] =
       635,  637,  638,  640,  641,  644,  645,  656,  659,  648,
       665,  662,  667,  664,  670,  593,  677,  673,  675,  674,
 
-      676,  646,  682,  678,  688, 3237,  690,  679,  685,  692,
-      695, 3237,  696,  697,  698,  703,  702,  709,  705,  706,
+      676,  646,  682,  678,  688, 3255,  690,  679,  685,  692,
+      695, 3255,  696,  697,  698,  703,  702,  709,  705,  706,
       711,  714,  715,  719,  713,  720,  740,  722,  721,  731,
       735,  725,  733,  727,  743,  747,  749,  750,  751,  753,
       754,  755,  757,  758,  763,  774,  760,  768,  771,  778,
@@ -644,328 +646,330 @@ static yyconst flex_int16_t yy_base[1642] =
       892,  893,  888,  894,  897,  898,  899,  900,  901,  902,
       906,  908,  909,  917,  903,  913,  919,  925,  927,  928,
       910,  930,  931,  934,  933,  937,  941,  935,  945,  947,
-      948,  949,  955,  957,  950,  959, 3237,  969,  963,  965,
-      966,  970,  972,  951,  991, 3237,  973, 3237, 3237,  975,
-     3237, 3237,  974,  979,  982,  994, 1014,  993,  981,  980,
-     1001, 1007,  995, 1008,  997, 1019, 1022, 1023, 1011, 1015,
-     1027, 1029, 1024, 1036, 1037, 1041, 1043, 1049, 1045, 1046,
-     1047, 1050, 1051, 1056, 1053, 1063, 1057, 1064, 1066, 3237,
-     1067, 1068, 1071, 1073, 1075, 3237, 1074, 1076, 1077, 1079,
+      948,  949,  955,  957,  950,  959, 3255,  969,  963,  965,
+      966,  970,  972,  951,  991, 3255,  973, 3255, 3255,  975,
+     3255, 3255,  974,  979,  982,  994, 1014,  993,  981,  980,
+     1001, 1007,  995, 1008,  997, 1019, 1022, 1023, 1011, 1017,
+     1027, 1029, 1024, 1034, 1037, 1041, 1043, 1049, 1045, 1047,
+     1046, 1050, 1051, 1055, 1056, 1062, 1057, 1064, 1066, 3255,
+     1067, 1068, 1071, 1073, 1075, 3255, 1074, 1076, 1077, 1079,
 
      1080, 1083, 1084, 1087, 1089, 1090, 1092, 1094, 1100, 1096,
      1097, 1110, 1117, 1114, 1104, 1113, 1115, 1119, 1121, 1129,
      1127, 1126, 1128, 1136, 1132, 1134, 1138, 1135, 1139, 1142,
      1145, 1146, 1170, 1147, 1148, 1149, 1153, 1154, 1157, 1158,
      1162, 1165, 1177, 1178, 1176, 1164, 1184, 1187, 1194, 1195,
-     1197, 1199, 1155, 1204, 1206, 1200, 1209, 1188, 1215, 1212,
-     3237, 1222, 1224, 1210, 1218, 1220, 1219, 1226, 1228, 1232,
-     1230, 1234, 1233, 1241, 3237, 1239, 1243, 1240, 1244, 1246,
-     1252, 1245, 1259, 1267, 3237, 1269, 1270, 1253, 1263, 1265,
-     1272, 1266, 1276, 1277, 1273, 1280, 1283, 1291, 1284, 1286,
-
-     1292, 1288, 1294, 1297, 1298, 1300, 1302, 1301, 1309, 1299,
-     1303, 1321, 1323, 1314, 1325, 1308, 1320, 1326, 1332, 1322,
-     1330, 1331, 1333, 3237,  239, 1335, 1336, 1337, 1346, 1347,
-     1343, 1345, 1352, 1355, 1353, 1344, 1354, 1356, 1362, 1364,
-     1365, 1367, 1372, 1374, 1370, 1376, 1378, 1380, 1383, 1384,
-     1385, 1386, 1388, 1393, 1394, 1395, 1396, 1400, 1399, 1401,
-     1402, 1408, 1406, 1405, 1415, 3237, 1428, 1413, 1409, 1416,
-     1426, 1434, 1419, 1430, 1432, 1440, 1444, 1437, 1446, 1447,
-     1449, 1450, 1439, 1452, 1459, 1461, 1457, 1460, 1463, 1465,
-     3237, 1467, 1468, 1466, 1473, 1469, 1474, 1475, 1478, 1480,
-
-     1486, 1491, 1493, 3237, 1494, 1490, 1498, 1500, 1501, 1503,
-     1504, 1508, 1510, 1511, 1512, 1513, 1514, 1519, 1522, 1524,
-     3237, 1532, 1534, 1533, 1540, 1536, 1523, 1539, 1526, 1541,
-     1543, 1549, 1547, 1548, 1546, 1551, 1553, 1554, 1556, 1555,
-     1557, 1558, 3237, 1570, 1562, 1575, 1576, 1572, 1582, 1581,
-     1584, 1587, 1588, 1589, 1591, 1590, 1592, 1593, 1598, 1594,
-     1601, 1602, 1599, 1600, 1603, 1604, 1611, 1619, 1620, 1621,
-     1622, 1625, 1631, 1637, 1623, 3237, 1634, 1636, 1638, 1639,
-     1645, 1647, 1642, 1648, 1649, 1650, 1651, 1659, 1653, 1655,
-     1660, 1662, 1656, 1663, 1665, 1676, 1666, 1664, 1673, 1678,
-
-     1682, 1689, 1685, 1691, 1683, 1697, 3237, 1693, 3237, 1694,
-     1700, 1709, 3237, 1706, 3237, 1708, 3237, 1710, 1714, 1712,
-     1696, 1716, 1717, 1718, 1720, 1723, 1724, 1726, 1728, 1731,
-     1732, 1729, 3237, 1736, 1738, 1740, 1737, 1742, 1744, 1745,
-     1750, 1758, 1746, 1761, 1749, 1760, 1765, 3237, 1767, 1768,
-     1770, 1772, 1775, 1779, 1780, 1777, 1783, 1773, 1784, 1794,
-     1795, 1790, 1797, 1799, 1800, 1801, 1802, 1804, 1806, 1809,
-     1810, 1812, 1814, 1813, 1818, 1820, 1817, 1821, 1822, 3237,
-     1823, 1826, 1835, 1829, 3237, 3237, 1840, 1846, 1848, 1834,
-     1842, 1836, 1852, 1854, 1862, 1859, 1856, 1860, 1865, 1866,
-
-     1867, 1868, 1869, 1871, 1872, 3237, 1879, 1875, 1882, 1878,
-     1881, 1894, 1885, 1888, 3237, 3237, 1895, 1896, 1899, 1900,
-     1907, 1904, 1905, 3237, 1906, 1908, 1910, 1911, 1913, 1921,
-     1914, 1924, 1928, 1922, 1929, 1931, 1938, 1932, 1934, 1940,
-     1948, 1942, 1950, 3237, 1951, 1954, 1955, 1956, 1957, 1958,
-     1959, 1963, 1962, 1965, 1964, 1973, 1980, 1969, 1976, 1977,
-     1982, 1978, 1987, 1989, 1996, 1999, 3237, 2005, 1983, 2008,
-     1992, 1994, 2006, 2009, 2010, 2011, 2012, 2013, 2014, 2016,
-     2018, 2019, 2021, 3237, 2025, 2027, 2028, 2030, 2036, 2038,
-     2039, 2042, 2046, 3237, 2047, 2053, 2049, 2050, 2055, 2051,
-
-     2058, 2059, 2060, 2061, 2063, 2065, 2072, 2074, 2066, 2084,
-     2070, 2076, 2092, 2086, 2094, 2100, 2088, 2096, 2102, 2098,
-     2099, 2101, 2104, 2111, 2105, 2112, 2109, 3237, 2115, 2117,
-     2120, 2122, 2125, 2126, 2124, 3237, 2131, 3237, 2123, 3237,
-     2134, 2138, 2139, 2140, 2142, 2143, 2141, 2147, 2153, 2144,
-     3237, 2154, 2150, 2156, 2161, 3237, 2164, 3237, 3237, 2157,
-     2172, 2169, 2173, 2175, 2179, 3237, 2176, 2180, 2181, 2184,
-     2185, 2187, 2189, 2190, 2188, 2191, 3237, 2192, 2194, 2195,
-     2198, 3237, 2204, 2209, 2205, 2210, 2212, 2216, 2217, 2219,
-     2220, 2228, 2224, 3237, 2225, 2227, 2233, 2226, 2230, 2234,
-
-     2243, 2235, 3237, 2245, 2246, 3237, 2248, 2249, 2254, 3237,
-     2253, 3237, 2256, 2257, 2255, 2258, 2264, 2265, 2276, 2260,
-     2273, 2266, 2268, 2283, 2278, 3237, 3237, 2284, 2288, 2289,
-     2285, 2291, 2294, 2296, 3237, 2292, 2298, 2300, 2301, 2302,
-     2304, 2305, 2311, 2308, 2313, 2314, 2306, 2315, 3237, 2318,
-     2320, 2324, 2325, 2326, 3237, 2330, 2333, 2327, 2335, 2331,
-     2350, 2353, 2355, 2343, 2358, 2360, 2346, 2362, 2364, 2348,
-     3237, 2366, 2369, 2370, 2373, 2374, 2375, 2338, 2377, 2380,
-     2376, 2383, 3237, 2385, 2386, 2387, 2390, 2391, 2396, 2394,
-     2397, 2400, 2402, 2398, 2405, 2406, 2404, 2416, 2420, 3237,
-
-     2408, 3237, 2417, 2422, 2430, 2431, 3237, 2427, 2429, 3237,
-     2433, 2434, 2435, 2438, 3237, 2444, 2445, 2446, 2448, 2449,
-     2450, 2451, 3237, 2453, 2458, 2465, 2462, 2454, 2466, 2456,
-     2468, 2477, 2475, 3237, 2471, 2478, 2484, 2480, 2489, 3237,
-     3237, 2485, 3237, 3237, 2493, 3237, 3237, 2490, 2497, 3237,
-     2499, 3237, 2505, 2501, 2494, 2482, 2503, 3237, 2507, 3237,
-     3237, 2509, 2511, 2512, 2515, 2517, 2519, 2522, 2523, 2524,
-     2525, 2527, 2528, 2529, 2530, 2532, 2536, 2533, 2538, 2541,
-     2543, 2546, 2544, 2547, 2548, 2556, 2564, 3237, 3237, 2549,
-     2557, 2551, 2561, 2565, 2566, 2570, 2571, 3237, 2577, 2578,
-
-     2568, 2579, 2580, 2584, 2582, 2590, 2596, 2585, 2592, 2593,
-     2594, 3237, 2599, 3237, 3237, 2595, 2602, 2609, 2604, 2606,
-     3237, 2611, 2613, 2617, 2621, 3237, 3237, 3237, 2622, 2625,
-     2626, 2628, 2629, 2627, 2630, 3237, 2636, 2637, 2639, 2640,
-     2649, 2653, 2650, 2657, 2659, 3237, 3237, 2665, 2662, 2663,
-     2661, 2654, 2664, 2671, 2631, 3237, 2674, 2667, 2673, 2675,
-     2678, 2681, 3237, 2683, 2685, 2687, 2689, 2686, 2692, 2693,
-     2694, 3237, 2698, 2696, 3237, 2704, 3237, 3237, 2697, 2710,
-     2712, 2714, 2719, 2721, 2708, 2716, 2727, 2724, 2725, 3237,
-     3237, 2728, 3237, 3237, 2731, 2732, 2733, 2735, 2736, 2739,
-
-     2740, 2744, 2741, 2742, 2745, 2753, 2746, 2747, 2754, 2756,
-     2757, 3237, 2762, 3237, 2764, 2768, 2770, 2769, 3237, 2771,
-     2772, 2775, 3237, 3237, 3237, 2781, 2787, 2783, 3237, 2785,
-     2789, 2791, 2794, 2779, 2801, 2793, 2803, 3237, 2795, 2804,
-     2806, 2807, 2808, 2809, 2813, 2810, 2811, 2823, 2817, 2826,
-     2827, 3237, 2830, 2820, 2831, 2834, 2839, 2835, 2843, 2841,
-     2845, 2846, 2842, 2848, 2856, 2852, 2850, 3237, 2860, 2857,
-     3237, 2863, 2866, 2865, 2873, 2875, 2878, 3237, 2880, 3237,
-     2881, 3237, 2885, 2886, 3237, 3237, 2887, 2889, 2892, 3237,
-     2893, 2890, 2894, 2896, 2899, 2900, 3237, 3237, 2901, 2903,
-
-     2907, 3237, 3237, 3237, 2916, 3237, 2918, 3237, 2924, 2904,
-     3237, 2909, 2926, 2906, 2917, 2912, 2929, 2930, 2928, 2937,
-     3237, 2939, 3237, 2941, 3237, 2942, 2943, 3237, 2950, 2946,
-     2948, 2949, 2951, 2955, 3237, 3237, 3237, 2952, 2957, 2959,
-     2961, 2958, 2962, 2963, 2964, 2966, 2973, 2970, 2981, 2967,
-     2974, 2990, 2983, 3237, 2984, 2987, 2996, 2998, 2994, 3000,
-     2995, 3001, 3002, 3003, 3004, 3005, 3007, 3018, 3009, 3010,
-     3020, 3022, 3026, 3019, 3034, 3033, 3030, 3035, 3036, 3044,
-     3040, 3043, 3237, 3041, 3042, 3045, 3047, 3048, 3052, 3050,
-     3062, 3065, 3053, 3067, 3051, 3072, 3068, 3073, 3076, 3077,
-
-     3078, 3237, 3079, 3081, 3083, 3085, 3087, 3089, 3090, 3091,
-     3094, 3096, 3099, 3101, 3105, 3237, 3106, 3237, 3237, 3110,
-     3107, 3113, 3117, 3119, 3237, 3237, 3237, 3145, 3152, 3159,
-     3166, 3173,   94, 3180, 3187, 3194, 3201, 3208, 3215, 3222,
-     3229
+     1155, 1197, 1199, 1188, 1204, 1206, 1207, 1208, 1209, 1217,
+     1210, 3255, 1223, 1224, 1212, 1219, 1220, 1226, 1229, 1230,
+     1234, 1233, 1236, 1235, 1242, 3255, 1240, 1243, 1241, 1246,
+     1247, 1255, 1248, 1262, 1269, 3255, 1271, 1272, 1265, 1267,
+     1254, 1275, 1258, 1280, 1281, 1277, 1284, 1287, 1289, 1290,
+
+     1291, 1292, 1294, 1296, 1297, 1298, 1301, 1302, 1303, 1305,
+     1313, 1304, 1319, 1323, 1310, 1327, 1320, 1322, 1328, 1333,
+     1330, 1332, 1331, 1334, 3255,  239, 1335, 1337, 1338, 1347,
+     1351, 1355, 1343, 1353, 1356, 1354, 1344, 1362, 1345, 1366,
+     1368, 1370, 1371, 1372, 1374, 1375, 1378, 1380, 1381, 1384,
+     1385, 1387, 1389, 1388, 1396, 1395, 1397, 1398, 1401, 1402,
+     1403, 1405, 1409, 1410, 1415, 1411, 1419, 3255, 1423, 1420,
+     1417, 1421, 1424, 1437, 1433, 1435, 1438, 1444, 1442, 1440,
+     1446, 1449, 1453, 1454, 1455, 1456, 1463, 1465, 1461, 1464,
+     1467, 1471, 3255, 1473, 1457, 1470, 1475, 1478, 1479, 1480,
+
+     1484, 1486, 1491, 1492, 1496, 3255, 1498, 1499, 1493, 1506,
+     1500, 1509, 1510, 1514, 1503, 1516, 1517, 1519, 1526, 1518,
+     1522, 1530, 3255, 1534, 1538, 1535, 1544, 1532, 1531, 1542,
+     1546, 1543, 1547, 1554, 1548, 1551, 1555, 1556, 1552, 1558,
+     1559, 1560, 1561, 1562, 3255, 1579, 1566, 1580, 1585, 1576,
+     1569, 1582, 1581, 1589, 1591, 1593, 1594, 1595, 1596, 1597,
+     1600, 1602, 1598, 1604, 1605, 1603, 1609, 1623, 1610, 1606,
+     1625, 1626, 1627, 1607, 1631, 1637, 1640, 1638, 3255, 1643,
+     1644, 1645, 1629, 1651, 1653, 1647, 1654, 1655, 1656, 1657,
+     1665, 1658, 1661, 1664, 1667, 1662, 1668, 1669, 1670, 1674,
+
+     1678, 1672, 1687, 1688, 1691, 1692, 1694, 1693, 1700, 3255,
+     1699, 3255, 1701, 1702, 1709, 3255, 1711, 3255, 1715, 3255,
+     1716, 1720, 1707, 1705, 1712, 1718, 1724, 1728, 1725, 1731,
+     1729, 1733, 1734, 1735, 1736, 3255, 1737, 1742, 1746, 1740,
+     1743, 1748, 1750, 1753, 1762, 1749, 1764, 1761, 1766, 1767,
+     3255, 1770, 1771, 1774, 1776, 1777, 1784, 1782, 1781, 1788,
+     1778, 1789, 1802, 1798, 1791, 1785, 1800, 1801, 1810, 1807,
+     1808, 1812, 1814, 1815, 1816, 1817, 1818, 1822, 1825, 1826,
+     1823, 1824, 1827, 3255, 1831, 1828, 1840, 1829, 3255, 3255,
+     1842, 1847, 1851, 1839, 1853, 1854, 1857, 1858, 1864, 1861,
+
+     1863, 1865, 1868, 1870, 1871, 1872, 1874, 1876, 1877, 3255,
+     1885, 1879, 1887, 1888, 1881, 1898, 1889, 1900, 3255, 3255,
+     1891, 1904, 1905, 1906, 1912, 1908, 1910, 3255, 1911, 1914,
+     1915, 1916, 1922, 1926, 1913, 1919, 1930, 1932, 1933, 1937,
+     1943, 1939, 1940, 1941, 1953, 1954, 1956, 3255, 1950, 1961,
+     1962, 1963, 1964, 1965, 1966, 1967, 1969, 1970, 1971, 1976,
+     1984, 1980, 1983, 1985, 1988, 1989, 1993, 1995, 1944, 2003,
+     1996, 3255, 2011, 1982, 2012, 1997, 2014, 2015, 2023, 2017,
+     2004, 2008, 2019, 2020, 2026, 2021, 2032, 2034, 3255, 2035,
+     2038, 2027, 2043, 2040, 2045, 2051, 2046, 2048, 3255, 2053,
+
+     2060, 2056, 2059, 2062, 2063, 2065, 2057, 2067, 2069, 2070,
+     2073, 2075, 2081, 2078, 2087, 2083, 2091, 2095, 2093, 2101,
+     2102, 2098, 2099, 2108, 2106, 2109, 2107, 2110, 2117, 2114,
+     2120, 2116, 3255, 2122, 2127, 2130, 2131, 2133, 2134, 2123,
+     3255, 2139, 3255, 2141, 3255, 2142, 2146, 2143, 2147, 2148,
+     2149, 2151, 2152, 2164, 2158, 3255, 2161, 2160, 2165, 2167,
+     3255, 2170, 3255, 3255, 2171, 2175, 2182, 2179, 2180, 2183,
+     2188, 3255, 2184, 2190, 2192, 2194, 2195, 2197, 2199, 2200,
+     2198, 2201, 3255, 2202, 2204, 2205, 2208, 3255, 2214, 2219,
+     2215, 2220, 2222, 2226, 2227, 2229, 2230, 2238, 2234, 3255,
+
+     2235, 2237, 2243, 2236, 2240, 2244, 2253, 2245, 3255, 2255,
+     2256, 3255, 2258, 2259, 2264, 3255, 2263, 3255, 2266, 2267,
+     2265, 2268, 2274, 2275, 2286, 2270, 2283, 2276, 2278, 2293,
+     2288, 3255, 3255, 2294, 2298, 2299, 2295, 2301, 2304, 2306,
+     3255, 2302, 2308, 2310, 2311, 2312, 2314, 2315, 2321, 2318,
+     2323, 2324, 2316, 2325, 3255, 2328, 2330, 2334, 2335, 2336,
+     2337, 3255, 2340, 2343, 2347, 2341, 2349, 2363, 2366, 2368,
+     2357, 2372, 2374, 2350, 2376, 2378, 2361, 3255, 2379, 2382,
+     2383, 2386, 2387, 2388, 2389, 2390, 2396, 2393, 2398, 3255,
+     2400, 2401, 2403, 2407, 2408, 2409, 2410, 2411, 2413, 2417,
+
+     2415, 2419, 2423, 2345, 2426, 2425, 3255, 2418, 3255, 2431,
+     2436, 2444, 2441, 3255, 2433, 2443, 3255, 2446, 2447, 2445,
+     2454, 3255, 2457, 2458, 2459, 2451, 2461, 2462, 2466, 3255,
+     2464, 2470, 2477, 2469, 2471, 2478, 2479, 2480, 2482, 2489,
+     2488, 3255, 2485, 2490, 2498, 2496, 2497, 3255, 3255, 2502,
+     3255, 3255, 2506, 3255, 3255, 2507, 2509, 3255, 2511, 3255,
+     2518, 2514, 2516, 2517, 2519, 3255, 2521, 3255, 3255, 2522,
+     2523, 2526, 2528, 2530, 2535, 2537, 2531, 2538, 2541, 2542,
+     2545, 2544, 2546, 2548, 2550, 2551, 2552, 2555, 2558, 2560,
+     2561, 2562, 2564, 2571, 2576, 3255, 3255, 2563, 2573, 2565,
+
+     2578, 2580, 2581, 2584, 2585, 3255, 2593, 2588, 2596, 2590,
+     2594, 2595, 2599, 2600, 2607, 2609, 2608, 2610, 2611, 2614,
+     3255, 2616, 3255, 3255, 2617, 2618, 2623, 2624, 2620, 3255,
+     2628, 2629, 2632, 2641, 3255, 3255, 3255, 2642, 2633, 2636,
+     2644, 2646, 2647, 2650, 3255, 2652, 2654, 2656, 2653, 2663,
+     2665, 2674, 2671, 2673, 3255, 3255, 2680, 2677, 2678, 2676,
+     2679, 2682, 2684, 2686, 3255, 2657, 2687, 2688, 2691, 2693,
+     2695, 2697, 3255, 2692, 2699, 2703, 2708, 2704, 2710, 2712,
+     2716, 3255, 2714, 2715, 3255, 2718, 3255, 3255, 2724, 2725,
+     2727, 2732, 2734, 2736, 2729, 2737, 2743, 2740, 2741, 3255,
+
+     3255, 2742, 3255, 3255, 2746, 2749, 2750, 2752, 2753, 2756,
+     2757, 2758, 2759, 2760, 2769, 2765, 2774, 2762, 2771, 2775,
+     2773, 2780, 3255, 2783, 3255, 2777, 2788, 2785, 2790, 3255,
+     2792, 2791, 2794, 3255, 3255, 3255, 2802, 2804, 2806, 3255,
+     2808, 2809, 2796, 2811, 2810, 2825, 2798, 2822, 3255, 2812,
+     2814, 2827, 2830, 2824, 2832, 2835, 2836, 2837, 2838, 2840,
+     2841, 2846, 2847, 3255, 2850, 2843, 2851, 2856, 2858, 2853,
+     2859, 2861, 2866, 2862, 2870, 2867, 2882, 2876, 2869, 3255,
+     2879, 2880, 3255, 2883, 2884, 2885, 2892, 2896, 2901, 2897,
+     3255, 2904, 3255, 2905, 3255, 2908, 2909, 3255, 3255, 2910,
+
+     2912, 2915, 3255, 2916, 2913, 2917, 2919, 2922, 2923, 3255,
+     3255, 2924, 2926, 2930, 2934, 3255, 3255, 3255, 2940, 3255,
+     2941, 3255, 2947, 2927, 3255, 2932, 2949, 2935, 2951, 2952,
+     2953, 2954, 2955, 2957, 3255, 3255, 2962, 3255, 2964, 3255,
+     2965, 2967, 3255, 2975, 2969, 2971, 2972, 2978, 2979, 3255,
+     3255, 3255, 2980, 2981, 2985, 2986, 2982, 2987, 2988, 2989,
+     2993, 2990, 2997, 3006, 2994, 3007, 3014, 3010, 3255, 3008,
+     3012, 3020, 3021, 3018, 3017, 3025, 3026, 3027, 3028, 3029,
+     3033, 3034, 3038, 3035, 3036, 3045, 3048, 3051, 3047, 3060,
+     3058, 3061, 3059, 3062, 3069, 3063, 3067, 3255, 3065, 3071,
+
+     3072, 3073, 3074, 3079, 3076, 3087, 3092, 3089, 3096, 3083,
+     3098, 3099, 3100, 3085, 3105, 3101, 3255, 3108, 3109, 3111,
+     3112, 3115, 3117, 3118, 3121, 3124, 3119, 3128, 3133, 3134,
+     3255, 3135, 3255, 3255, 3138, 3125, 3129, 3146, 3150, 3255,
+     3255, 3255, 3163, 3170, 3177, 3184, 3191,   94, 3198, 3205,
+     3212, 3219, 3226, 3233, 3240, 3247
     } ;
 
-static yyconst flex_int16_t yy_def[1642] =
+static yyconst flex_int16_t yy_def[1657] =
     {   0,
-     1627,    1, 1628, 1628, 1629, 1629, 1630, 1630, 1631, 1631,
-     1632, 1632, 1627, 1633, 1627, 1627, 1627, 1627, 1634, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1635,
-     1627, 1627, 1627, 1635, 1636, 1627, 1627, 1627, 1636, 1637,
-     1627, 1627, 1627, 1627, 1637, 1638, 1627, 1627, 1627, 1638,
-     1639, 1627, 1640, 1627, 1639, 1639, 1633, 1633, 1627, 1641,
-     1634, 1641, 1634, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1635, 1635, 1636, 1636, 1637, 1637, 1627, 1638,
-     1638, 1639, 1639, 1640, 1640, 1639, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1639, 1633, 1633, 1633, 1633, 1633, 1633,
-
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1639, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-
-     1633, 1633, 1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633,
-     1633, 1627, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1639, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1639, 1633, 1633, 1633, 1633, 1627, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1627, 1633, 1627, 1627, 1633,
-     1627, 1627, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1627,
-     1633, 1633, 1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633,
-
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1639, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1627, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1627, 1639, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1627, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-
-     1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1627, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-
-     1633, 1633, 1633, 1633, 1633, 1633, 1627, 1633, 1627, 1633,
-     1633, 1633, 1627, 1633, 1627, 1633, 1627, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1627, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1627,
-     1633, 1633, 1633, 1633, 1627, 1627, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-
-     1633, 1633, 1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1627, 1627, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1627, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633, 1633,
-
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1627, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1627, 1633, 1627, 1633, 1627,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1627, 1633, 1633, 1633, 1633, 1627, 1633, 1627, 1627, 1633,
-     1633, 1633, 1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1627, 1633, 1633, 1633,
-     1633, 1627, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633, 1633,
-
-     1633, 1633, 1627, 1633, 1633, 1627, 1633, 1633, 1633, 1627,
-     1633, 1627, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1627, 1627, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1627, 1633,
-     1633, 1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1627, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1627,
-
-     1633, 1627, 1633, 1633, 1633, 1633, 1627, 1633, 1633, 1627,
-     1633, 1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633, 1627,
-     1627, 1633, 1627, 1627, 1633, 1627, 1627, 1633, 1633, 1627,
-     1633, 1627, 1633, 1633, 1633, 1633, 1633, 1627, 1633, 1627,
-     1627, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1627, 1627, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1627, 1633, 1633,
-
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1627, 1633, 1627, 1627, 1633, 1633, 1633, 1633, 1633,
-     1627, 1633, 1633, 1633, 1633, 1627, 1627, 1627, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1627, 1627, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633,
-     1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1627, 1633, 1633, 1627, 1633, 1627, 1627, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1627,
-     1627, 1633, 1627, 1627, 1633, 1633, 1633, 1633, 1633, 1633,
-
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1627, 1633, 1627, 1633, 1633, 1633, 1633, 1627, 1633,
-     1633, 1633, 1627, 1627, 1627, 1633, 1633, 1633, 1627, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1627, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1627, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1627, 1633, 1633,
-     1627, 1633, 1633, 1633, 1633, 1633, 1633, 1627, 1633, 1627,
-     1633, 1627, 1633, 1633, 1627, 1627, 1633, 1633, 1633, 1627,
-     1633, 1633, 1633, 1633, 1633, 1633, 1627, 1627, 1633, 1633,
-
-     1633, 1627, 1627, 1627, 1633, 1627, 1633, 1627, 1633, 1633,
-     1627, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1627, 1633, 1627, 1633, 1627, 1633, 1633, 1627, 1633, 1633,
-     1633, 1633, 1633, 1633, 1627, 1627, 1627, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1627, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-
-     1633, 1627, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
-     1633, 1633, 1633, 1633, 1633, 1627, 1633, 1627, 1627, 1633,
-     1633, 1633, 1633, 1633, 1627, 1627,    0, 1627, 1627, 1627,
-     1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
-     1627
+     1642,    1, 1643, 1643, 1644, 1644, 1645, 1645, 1646, 1646,
+     1647, 1647, 1642, 1648, 1642, 1642, 1642, 1642, 1649, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1650,
+     1642, 1642, 1642, 1650, 1651, 1642, 1642, 1642, 1651, 1652,
+     1642, 1642, 1642, 1642, 1652, 1653, 1642, 1642, 1642, 1653,
+     1654, 1642, 1655, 1642, 1654, 1654, 1648, 1648, 1642, 1656,
+     1649, 1656, 1649, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1650, 1650, 1651, 1651, 1652, 1652, 1642, 1653,
+     1653, 1654, 1654, 1655, 1655, 1654, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1654, 1648, 1648, 1648, 1648, 1648, 1648,
+
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1654, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+
+     1648, 1648, 1648, 1648, 1648, 1642, 1648, 1648, 1648, 1648,
+     1648, 1642, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1654, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1654, 1648, 1648, 1648, 1648, 1642, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1642, 1648, 1642, 1642, 1648,
+     1642, 1642, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642,
+     1648, 1648, 1648, 1648, 1648, 1642, 1648, 1648, 1648, 1648,
+
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1654, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1642, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1642, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1642, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1642, 1654, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1642, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+
+     1648, 1648, 1648, 1648, 1648, 1642, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1642, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1642, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642,
+     1648, 1642, 1648, 1648, 1648, 1642, 1648, 1642, 1648, 1642,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1642, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1642, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1642, 1648, 1648, 1648, 1648, 1642, 1642,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642, 1642,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1642, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642, 1648,
+
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1642, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1642, 1648, 1642, 1648, 1642, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1642, 1648, 1648, 1648, 1648,
+     1642, 1648, 1642, 1642, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1642, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1642, 1648, 1648, 1648, 1648, 1642, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642,
+
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642, 1648,
+     1648, 1642, 1648, 1648, 1648, 1642, 1648, 1642, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1642, 1642, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1642, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1642, 1648, 1648, 1648, 1648, 1648,
+     1648, 1642, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+
+     1648, 1648, 1648, 1648, 1648, 1648, 1642, 1648, 1642, 1648,
+     1648, 1648, 1648, 1642, 1648, 1648, 1642, 1648, 1648, 1648,
+     1648, 1642, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1642, 1648, 1648, 1648, 1648, 1648, 1642, 1642, 1648,
+     1642, 1642, 1648, 1642, 1642, 1648, 1648, 1642, 1648, 1642,
+     1648, 1648, 1648, 1648, 1648, 1642, 1648, 1642, 1642, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1642, 1642, 1648, 1648, 1648,
+
+     1648, 1648, 1648, 1648, 1648, 1642, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1642, 1648, 1642, 1642, 1648, 1648, 1648, 1648, 1648, 1642,
+     1648, 1648, 1648, 1648, 1642, 1642, 1642, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1642, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1642, 1642, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1642, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1642, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1642, 1648, 1648, 1642, 1648, 1642, 1642, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642,
+
+     1642, 1648, 1642, 1642, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1642, 1648, 1642, 1648, 1648, 1648, 1648, 1642,
+     1648, 1648, 1648, 1642, 1642, 1642, 1648, 1648, 1648, 1642,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1642, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642,
+     1648, 1648, 1642, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1642, 1648, 1642, 1648, 1642, 1648, 1648, 1642, 1642, 1648,
+
+     1648, 1648, 1642, 1648, 1648, 1648, 1648, 1648, 1648, 1642,
+     1642, 1648, 1648, 1648, 1648, 1642, 1642, 1642, 1648, 1642,
+     1648, 1642, 1648, 1648, 1642, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1642, 1642, 1648, 1642, 1648, 1642,
+     1648, 1648, 1642, 1648, 1648, 1648, 1648, 1648, 1648, 1642,
+     1642, 1642, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1642, 1648, 1648,
+
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1642, 1648, 1648, 1648,
+     1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+     1642, 1648, 1642, 1642, 1648, 1648, 1648, 1648, 1648, 1642,
+     1642,    0, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642,
+     1642, 1642, 1642, 1642, 1642, 1642
     } ;
 
-static yyconst flex_int16_t yy_nxt[3277] =
+static yyconst flex_int16_t yy_nxt[3295] =
     {   0,
        14,   15,   16,   17,   18,   19,   18,   14,   14,   14,
        14,   18,   20,   21,   14,   22,   23,   24,   25,   14,
@@ -1078,258 +1082,261 @@ static yyconst flex_int16_t yy_nxt[3277] =
       537,   68,   68,   68,   68,  547,  536,  548,  549,  124,
 
       545,  550,  538,   68,  546,   68,   68,   68,  540,   68,
-      557,  558,  541,   68,  562,  542,  560,  559,  561,   68,
-       68,  563,  543,   68,  564,  544,   68,   68,  551,   68,
-      552,   68,  565,  553,   68,   68,   68,  566,  554,   68,
-      567,   68,  571,  568,  555,  556,  569,  570,   68,   68,
-      576,  572,  575,   68,  574,   68,  577,   68,   68,   68,
-      578,   68,   68,   68,  579,   68,  573,  580,   68,   68,
-      581,  587,  584,  583,  585,   68,   68,  586,   68,   68,
-       68,  582,  589,   68,  591,   68,   68,   68,   68,   68,
-      593,   68,   68,  596,  590,   68,   68,  588,  594,   68,
-
-      592,   68,   68,  602,   68,  601,   68,  595,   68,   68,
-      597,  598,   68,  605,  599,  600,   68,  610,  607,  603,
-      606,  604,   68,  609,  611,   68,   68,   68,  608,   68,
-      612,   68,  615,   68,  617,  613,  618,  614,   68,   68,
-       68,   68,  619,  622,   68,  624,   68,   68,   68,  625,
-      133,   68,  616,  621,   68,  627,  620,   68,   68,   68,
-       68,   68,  626,  637,  623,   68,   68,   68,  133,   68,
-       68,  641,  630,  628,   68,  638,   68,   68,  644,  660,
-      640,  629,   68,  642,  643,  631,  639,  632,   68,   68,
-       68,  633,  645,  634,  646,  648,   68,  650,  635,   68,
-
-       68,  653,  649,  636,  647,  652,   68,   68,  654,   68,
-      651,   68,   68,  655,  658,  656,   68,  661,   68,  665,
-      663,   68,   68,  662,   68,  659,  666,   68,  667,  668,
-       68,   68,   68,  657,   68,  664,   68,  672,   68,  669,
-       68,  670,   68,  671,   68,   68,   68,  674,  680,  676,
-      673,   68,   68,   68,  679,   68,   68,   68,   68,  675,
-      678,  684,  677,  685,   68,   68,  687,  683,  694,  686,
-      681,   68,  688,  682,  689,   68,  690,   68,   68,   68,
-      691,   68,   68,  692,   68,   68,  693,  697,   68,   68,
-      695,  701,   68,  699,  700,   68,   68,  696,   68,  698,
-
-       68,  703,  704,   68,   68,  705,   68,  707,  702,   68,
-       68,   68,   68,   68,   68,   68,  706,  712,  708,  713,
-       68,   68,  716,  711,  715,  709,   68,  717,  718,  710,
-      719,  714,   68,   68,   68,   68,  721,   68,   68,  722,
-      725,  720,   68,   68,   68,   68,  723,   68,   68,   68,
-      724,  727,  726,  733,  734,   68,   68,   68,   68,   68,
-      735,  730,  728,  731,   68,   68,   68,   68,   68,  732,
-      729,  736,  738,  743,   68,  740,   68,   68,  737,   68,
-      739,  741,   68,  745,   68,  747,   68,  742,   68,  749,
-       68,  748,   68,  751,  744,   68,   68,   68,   68,  746,
-
-       68,  754,  750,  756,  753,   68,   68,   68,   68,  758,
-      752,   68,   68,   68,   68,  759,  755,   68,   68,  757,
-       68,   68,  760,  761,  762,   68,  766,   68,   68,  772,
-      763,   68,  765,  767,  764,  770,  769,  768,   68,  771,
-       68,  775,   68,  774,   68,  776,   68,  780,  773,   68,
-      777,   68,   68,  779,  782,  778,   68,  781,   68,   68,
-      784,   68,   68,  783,   68,  787,  789,  786,  790,   68,
-      785,   68,   68,   68,  791,   68,  792,   68,   68,   68,
-       68,   68,  788,  798,  793,   68,   68,   68,  797,  794,
-       68,  795,   68,  796,  803,  799,  800,  807,   68,  801,
-
-      802,  804,   68,   68,  809,   68,   68,  811,  805,  810,
-       68,  813,   68,   68,  815,   68,   68,  806,  808,  817,
-       68,  816,   68,   68,   68,   68,   68,  822,  819,  812,
-      821,   68,  820,  814,   68,   68,   68,  833,   68,  826,
-      824,  827,  818,  825,   68,   68,   68,  829,   68,  823,
-      828,   68,   68,   68,  831,   68,  836,  830,   68,   68,
-       68,   68,  832,   68,  840,   68,   68,   68,   68,   68,
-       68,  131,  844,  834,   68,  846,  839,  847,  835,  837,
-      838,  848,   68,  849,   68,  841,  843,   68,   68,  853,
-      851,  842,  845,   68,   68,  850,   68,  854,  852,   68,
-
-       68,   68,   68,   68,   68,   68,   68,  855,  859,  862,
-       68,   68,   68,   68,   68,   68,   68,  868,  856,  858,
-      860,  870,  869,   68,  861,  864,  857,  865,  863,  866,
-      867,   68,   68,   68,   68,   68,  879,   68,  877,  874,
-      872,  871,  876,   68,  878,  880,   68,  873,   68,   68,
-       68,   68,  884,  881,   68,  875,  885,   68,  886,   68,
-       68,   68,   68,   68,  882,   68,  892,   68,   68,  891,
-      883,   68,   68,  887,   68,   68,   68,   68,   68,  888,
-      902,  890,  897,  901,  893,   68,  894,  889,   68,  900,
-       68,  895,  899,  896,   68,   68,  898,   68,  903,  904,
-
-      906,   68,  907,   68,  910,   68,   68,  908,   68,   68,
-      129,  912,   68,  913,  905,  909,  914,  915,   68,  916,
-       68,   68,   68,  911,   68,  917,   68,  918,   68,   68,
-       68,  924,   68,  920,  922,   68,   68,  926,   68,  919,
-       68,   68,  921,   68,   68,  923,  931,  929,   68,   68,
-       68,  928,   68,  934,   68,  925,   68,   68,   68,  938,
-      927,   68,   68,  930,  933,  940,  932,  939,  942,  935,
-       68,  944,   68,   68,  936,  943,  937,   68,  941,   68,
-       68,  947,   68,  945,   68,   68,  953,   68,  128,   68,
-      950,   68,   68,  951,  948,   68,   68,  954,  955,  958,
-
-      956,  959,   68,  946,  949,  952,   68,   68,  960,   68,
-      957,   68,   68,   68,   68,  967,   68,  964,   68,  966,
-      961,   68,   68,  968,   68,   68,   68,  975,  962,   68,
-       68,  963,   68,   68,   68,   68,  965,  973,   68,  969,
-      972,   68,  970,  974,  971,  980,   68,   68,   68,  976,
-      979,  984,   68,  977,   68,  978,  981,  983,   68,  982,
-       68,  985,  987,  988,   68,  986,   68,  989,   68,  993,
-      994,   68,   68,  990,   68,  992,  991,   68,   68,   68,
-       68,   68, 1001,   68,   68,  996, 1004,   68,  995, 1006,
-       68,   68,  998,   68,   68,  997, 1007,   68, 1000, 1002,
-
-       68, 1009, 1003, 1011,  999, 1005,   68,   68,   68, 1012,
-     1010,   68,   68, 1008, 1017, 1013,   68,   68,   68,   68,
-       68, 1014,   68,   68, 1021,   68,   68, 1022, 1023, 1015,
-     1024, 1016, 1018,   68,   68, 1019,   68,  126, 1020, 1028,
-       68,   68, 1025,   68,   68, 1032,   68,  124, 1029, 1026,
-       68, 1027,   68, 1030,   68, 1031, 1033, 1037, 1035, 1036,
-       68, 1038,   68,   68, 1034, 1040,   68,   68,   68,   68,
-       68,   68, 1039, 1042,   68,   68,   68,   68, 1043, 1041,
-     1046,   68, 1044, 1047, 1051,   68, 1045, 1052,   68,   68,
-       68, 1050,   68, 1056,   68,   68, 1048, 1049, 1058,   68,
-
-     1059,   68, 1053, 1060,   68, 1066,   68, 1054,   68, 1055,
-     1057,   68, 1062, 1063, 1061, 1064, 1068,   68,   68, 1067,
-       68,   68,   68,   68,   68,   68,   68, 1077,   68, 1065,
-       68,   68, 1079,   68, 1069, 1070, 1071,   68, 1082,   68,
-       68, 1072,   68, 1073, 1074, 1075, 1081, 1076,   68, 1084,
-       68,   68, 1087, 1080,   68, 1083, 1078, 1085,   68,   68,
-     1091,   68,   68,   68, 1090,   68, 1094,   68, 1095, 1093,
-       68,   68,   68,   68, 1089,   68, 1086,   68,   68, 1096,
-     1088, 1092,   68, 1101,   68, 1103,   68, 1098,   68, 1104,
-     1100, 1097, 1099, 1102, 1105, 1106,   68, 1110,   68, 1109,
-
-       68, 1111, 1108, 1107,   68, 1112,   68, 1113,   68, 1116,
-       68,   68,   68,   68,   68, 1118,   68,   68, 1121, 1123,
-     1115,   68, 1117,   68,   68, 1119, 1114,   68, 1126,   68,
-     1125, 1127,   68, 1124,   68,   68,   68,   68,   68, 1122,
-     1128, 1120, 1129,   68, 1130, 1131,   68, 1133, 1132, 1135,
-       68,   68,   68,   68,   68,   68,   68, 1140, 1134,   68,
-     1142, 1137,   68,   68, 1141,   68,   68, 1144,   68,   68,
-     1143, 1136, 1138,   68, 1139, 1149,   68, 1147, 1145, 1151,
-     1146,   68, 1148, 1150,   68,   68, 1153,   68,   68, 1154,
-     1155,   68,   68,   68, 1158, 1156,   68,   68, 1152,   68,
-
-       68,   68,   68,   68,   68, 1159,   68,   68, 1167, 1166,
-       68, 1161, 1157, 1162, 1163, 1164,   68,   68, 1160, 1169,
-     1171,   68,   68, 1165,   68, 1168, 1174, 1173,   68,   68,
-     1170,   68,   68, 1175, 1176, 1179,   68,   68,   68,   68,
-       68, 1180,   68, 1172, 1183,   68,   68,   68, 1187, 1177,
-     1184, 1185, 1178, 1182, 1186,   68, 1181,   68,   68, 1189,
-       68,   68, 1190, 1191, 1188,   68,   68,   68,   68,   68,
-       68, 1195,   68, 1192, 1196, 1200,   68,   68,   68, 1199,
-       68, 1193, 1194, 1205, 1197,   68, 1201, 1202,   68, 1204,
-       68, 1203, 1198, 1206, 1207,   68,   68,   68, 1208, 1210,
-
-       68,   68, 1211,   68,   68, 1209,   68, 1215,   68, 1212,
-       68, 1214,   68,   68,   68, 1217,   68,   68,   68, 1220,
-       68, 1213, 1223,   68, 1224,   68,   68,   68, 1219, 1216,
-       68, 1226,   68, 1222, 1221, 1218,   68,   68,   68,   68,
-     1225, 1234,   68,   68, 1227,   68, 1228,   68, 1235, 1232,
-       68, 1230, 1236, 1255, 1229,   68, 1238, 1231,   68, 1233,
-       68, 1237,   68, 1239, 1240,   68, 1241,   68, 1242, 1243,
-       68, 1244,   68, 1246,   68, 1247,   68, 1245,   68, 1248,
-     1250,   68,   68, 1249, 1252,   68,   68,   68,   68,   68,
-     1256, 1258,   68, 1254, 1260,   68, 1261,   68,   68,   68,
-
-     1263, 1251,   68,   68, 1253, 1257,   68, 1259,   68,   68,
-       68, 1264,   68, 1266,   68, 1265,   68,   68,   68, 1270,
-       68, 1627, 1268, 1275, 1262, 1271, 1272, 1273,   68,   68,
-     1274, 1267,   68, 1269,   68, 1279, 1276, 1280, 1278,   68,
-     1277,   68,   68,   68, 1281,   68,   68,   68, 1285, 1288,
-       68, 1286, 1282, 1284, 1283, 1289,   68,   68,   68, 1291,
-       68,   68,   68,   68, 1295,   68,   68, 1287,   68, 1296,
-       68, 1290, 1292, 1297,   68, 1293, 1298,   68,   68, 1299,
-       68, 1294, 1301,   68, 1304, 1303, 1300,   68, 1302,   68,
-       68, 1308,   68, 1305,   68, 1307,   68,   68, 1311, 1306,
-
-     1309,   68,   68, 1310, 1312,   68,   68, 1313, 1314,   68,
-     1315,   68, 1316,   68, 1317,   68, 1319,   68, 1321,   68,
-     1320,   68, 1318,   68,   68, 1323, 1322,   68, 1326,   68,
-     1327,   68, 1325, 1328,   68,   68,   68,   68, 1324,   68,
-       68,   68,   68, 1336,   68,   68, 1334, 1329,   68, 1331,
-       68, 1332, 1333,   68, 1330,   68,   68, 1337,   68,   68,
-       68,   68, 1335,   68, 1344, 1345, 1340, 1346,   68,   68,
-     1339, 1338, 1342,   68, 1343, 1347,   68,   68,   68, 1341,
-       68, 1348,   68,   68, 1355, 1350, 1352, 1349, 1356,   68,
-       68,   68,   68, 1351,   68, 1358,   68,   68, 1353, 1357,
-
-     1354, 1363,   68, 1364,   68,   68,   68,   68,   68, 1359,
-     1360,   68, 1361, 1362,   68, 1365,   68, 1371,   68, 1366,
-     1372,   68, 1375,   68, 1367,   68, 1368, 1370, 1377,   68,
-     1369, 1373, 1378,   68,   68, 1379, 1374,   68,   68,   68,
-       68,   68,   68,   68, 1376, 1382, 1383, 1381,   68,   68,
-     1385,   68,   68, 1627, 1387, 1402, 1388, 1392, 1384, 1380,
-     1390,   68,   68, 1386, 1391,   68,   68, 1389, 1393,   68,
-     1394,   68, 1395,   68,   68,   68,   68,   68, 1396,   68,
-     1397, 1399, 1398,   68, 1400,   68,   68,   68, 1401, 1403,
-       68, 1407, 1404,   68, 1405,   68, 1406,   68,   68,   68,
-
-     1412,   68, 1408, 1414,   68,   68,   68, 1413,   68,   68,
-       68, 1416, 1627, 1415, 1409, 1419,   68, 1410, 1411, 1417,
-       68, 1418,   68, 1421,   68, 1423,   68, 1422,   68, 1420,
-     1424,   68, 1425,   68, 1428, 1429,   68,   68, 1426,   68,
-       68, 1430, 1427,   68,   68,   68, 1431,   68,   68, 1434,
-     1438,   68,   68,   68,   68, 1442,   68,   68,   68,   68,
-     1432, 1433, 1437, 1435, 1440,   68,   68, 1436,   68,   68,
-     1444, 1439, 1441, 1443,   68, 1447,   68, 1450, 1445, 1452,
-       68,   68,   68,   68,   68, 1446, 1453,   68, 1448, 1449,
-     1454,   68, 1455,   68, 1451,   68, 1456,   68, 1458,   68,
-
-     1459,   68, 1461,   68, 1460,   68,   68,   68, 1466, 1465,
-     1462, 1464, 1457,   68, 1468,   68,   68, 1471,   68,   68,
-       68,   68,   68,   68, 1463,   68, 1469, 1476, 1472,   68,
-     1467, 1470,   68, 1475, 1478,   68, 1473, 1480,   68,   68,
-     1474, 1482,   68,   68, 1481, 1485,   68,   68, 1479, 1477,
-     1486,   68, 1483,   68,   68,   68, 1490,   68,   68, 1492,
-       68, 1497,   68, 1494,   68, 1484, 1487, 1488,   68,   68,
-     1491, 1498,   68, 1489, 1627,   68, 1502,   68,   68, 1493,
-     1627, 1495, 1496, 1501, 1503,   68, 1504,   68, 1499, 1500,
-       68, 1506,   68,   68, 1507, 1505, 1508,   68,   68,   68,
-
-     1511,   68,   68, 1509,   68,   68,   68, 1510,   68, 1512,
-     1513,   68,   68,   68, 1521,   68,   68, 1519,   68,   68,
-     1514,   68, 1515, 1522,   68, 1516, 1517, 1523,   68,   68,
-       68, 1526, 1518, 1520, 1524, 1525,   68, 1528,   68, 1527,
-       68,   68,   68, 1529, 1530, 1531, 1532, 1533, 1535,   68,
-     1536,   68, 1537,   68,   68,   68, 1539, 1540,   68, 1534,
-       68,   68,   68,   68,   68, 1542, 1538,   68, 1546,   68,
-       68,   68, 1541,   68,   68,   68,   68, 1554,   68,   68,
-     1543, 1544,   68, 1545, 1548,   68,   68, 1556, 1550, 1547,
-     1551, 1553, 1549,   68, 1555,   68,   68, 1560, 1557,   68,
-
-     1552, 1559,   68, 1564, 1558, 1565,   68,   68,   68, 1561,
-       68, 1562,   68,   68,   68,   68,   68,   68, 1563,   68,
-     1566,   68,   68, 1577, 1574, 1567, 1568, 1569, 1571, 1572,
-       68,   68,   68, 1570,   68, 1575, 1573, 1578,   68, 1579,
-     1576, 1582,   68, 1580, 1583,   68,   68,   68,   68, 1584,
-     1581, 1587,   68,   68,   68,   68,   68,   68, 1590,   68,
-       68, 1594,   68,   68,   68,   68, 1585, 1586, 1589, 1595,
-     1599, 1588, 1593, 1591,   68, 1597, 1592,   68, 1598,   68,
-       68, 1596, 1601, 1602,   68,   68, 1600, 1603,   68,   68,
-       68,   68, 1604,   68, 1606,   68, 1608,   68, 1609,   68,
-
-     1612,   68,   68,   68, 1615, 1616,   68, 1605,   68, 1607,
-     1618,   68, 1619,   68, 1610, 1617, 1611,   68,   68,   68,
-     1613, 1614,   68, 1621, 1620,   68, 1627, 1622, 1625,   68,
-     1626,   68, 1627, 1627, 1627, 1627, 1627, 1627, 1623, 1627,
-     1627, 1627, 1627, 1627, 1624,   40,   40,   40,   40,   40,
-       40,   40,   45,   45,   45,   45,   45,   45,   45,   50,
-       50,   50,   50,   50,   50,   50,   56,   56,   56,   56,
-       56,   56,   56,   61,   61,   61,   61,   61,   61,   61,
-       71,   71, 1627,   71,   71,   71,   71,  123,  123, 1627,
-     1627, 1627,  123,  123,  125,  125, 1627, 1627,  125, 1627,
-
-      125,  127, 1627, 1627, 1627, 1627, 1627,  127,  130,  130,
-     1627, 1627, 1627,  130,  130,  132, 1627, 1627, 1627, 1627,
-     1627,  132,  134,  134, 1627,  134,  134,  134,  134,   72,
-       72, 1627,   72,   72,   72,   72,   13, 1627, 1627, 1627,
-     1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
-     1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
-     1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
-     1627, 1627, 1627, 1627, 1627, 1627
+      558,  559,  541,   68,  563,  542,  561,  560,  562,   68,
+       68,  564,  543,   68,  565,  544,   68,  551,  552,   68,
+      553,   68,  566,  554,   68,   68,   68,  567,  555,   68,
+      568,   68,  572,  569,  556,  557,   68,  571,  570,   68,
+      577,  573,  576,   68,  575,   68,  578,   68,   68,   68,
+      579,   68,   68,   68,  574,  580,  581,   68,   68,   68,
+      582,  588,  584,  586,   68,  585,   68,  587,   68,   68,
+       68,  583,  590,   68,  592,   68,   68,   68,   68,   68,
+      594,   68,   68,  597,  591,   68,   68,  589,  595,   68,
+
+      593,   68,   68,  603,   68,  602,   68,  596,   68,   68,
+      598,  599,   68,  606,  600,  601,   68,  611,  608,  604,
+      607,  605,   68,  610,  612,   68,   68,   68,  609,   68,
+      613,   68,  616,   68,  618,  614,  619,  615,   68,   68,
+       68,   68,  620,  623,   68,  625,   68,   68,   68,  626,
+      133,   68,  617,  622,   68,  628,  621,   68,   68,   68,
+       68,   68,  627,  638,  624,   68,   68,   68,   68,   68,
+       68,  642,  631,  629,   68,  639,   68,   68,  645,  659,
+      641,  630,   68,  643,  644,  632,  640,  633,   68,   68,
+       68,  634,  646,  635,  647,  649,   68,  651,  636,   68,
+
+       68,  654,  650,  637,  648,  653,   68,   68,  655,   68,
+      652,   68,  662,  656,  660,  657,   68,  663,   68,   68,
+       68,   68,   68,  664,   68,  661,  669,  665,  668,   68,
+      670,   68,   68,  658,  666,   68,   68,  674,   68,  671,
+      667,   68,   68,  672,  673,   68,   68,   68,   68,  682,
+      676,  678,   68,   68,   68,   68,  681,  675,   68,   68,
+       68,  677,  680,  686,  687,  679,   68,   68,  685,  689,
+       68,  683,  688,  684,   68,  690,  691,   68,  692,   68,
+      696,   68,  693,   68,   68,  694,  698,   68,  695,   68,
+      699,  700,   68,   68,  697,  703,   68,  701,  702,   68,
+
+      706,   68,   68,   68,   68,  705,   68,  709,   68,   68,
+       68,  707,  704,   68,   68,   68,   68,   68,  714,  715,
+      717,  708,   68,  713,  710,   68,  720,  711,  719,  712,
+      721,   68,   68,  716,   68,   68,  718,  722,  723,   68,
+       68,  727,   68,   68,   68,   68,   68,   68,  725,   68,
+       68,  724,  726,  729,  735,   68,   68,   68,  736,   68,
+      728,  732,  730,   68,  733,   68,   68,   68,   68,  738,
+      734,  731,  737,  740,   68,  742,  744,  745,   68,  739,
+       68,  741,   68,   68,   68,  749,   68,   68,  747,  743,
+       68,  750,   68,   68,  751,  753,   68,   68,  746,   68,
+
+       68,   68,  756,  748,  752,  755,  758,   68,   68,   68,
+       68,  754,  760,   68,   68,   68,  761,   68,  757,  759,
+      764,   68,   68,   68,  762,  763,  765,   68,  769,   68,
+      773,   68,   68,   68,  766,   68,   68,  775,  767,  768,
+      772,  777,  770,  771,  778,   68,  774,   68,  779,   68,
+       68,  783,   68,  776,   68,  784,   68,  785,   68,  782,
+      781,   68,  787,  786,  780,   68,   68,   68,   68,   68,
+      792,  789,  793,   68,  788,   68,   68,   68,  794,   68,
+      795,  790,   68,   68,  802,   68,  791,   68,  796,  801,
+       68,   68,   68,  797,  800,  798,   68,  799,   68,  806,
+
+      803,  804,  810,   68,   68,   68,  807,  812,   68,  805,
+       68,   68,   68,  813,  808,   68,  814,  816,   68,  811,
+      818,   68,   68,  809,  815,  820,   68,  819,   68,   68,
+       68,   68,  817,  822,   68,  821,  824,  823,   68,  825,
+      827,  829,   68,   68,   68,  830,   68,   68,  826,  828,
+       68,  832,  831,  833,   68,   68,   68,  836,   68,   68,
+       68,  839,  834,   68,   68,  835,   68,   68,   68,  843,
+       68,   68,   68,   68,   68,  837,  856,  847,   68,  849,
+      840,   68,  838,  841,  844,  842,  850,  852,   68,  846,
+      851,   68,   68,   68,   68,  845,  848,   68,  857,  854,
+
+      853,   68,  855,   68,  858,   68,   68,   68,   68,   68,
+       68,  862,   68,  865,   68,   68,   68,   68,   68,   68,
+      859,   68,   68,  861,  868,  863,  872,  874,  864,  860,
+      866,  869,  870,  867,  871,   68,  875,   68,   68,   68,
+      879,   68,  873,   68,  881,  878,  876,  882,  880,   68,
+       68,  883,   68,  877,  884,   68,   68,   68,  888,   68,
+      887,  885,  889,   68,  890,   68,   68,   68,   68,   68,
+       68,  886,  896,   68,   68,  895,   68,   68,  891,   68,
+       68,   68,   68,  904,   68,  892,   68,  894,  901,  897,
+       68,  905,  898,  893,  906,  899,  903,  907,  900,   68,
+
+       68,  902,  910,   68,   68,   68,   68,  914,  908,  911,
+      912,   68,   68,   68,   68,  917,  918,   68,  916,   68,
+      909,   68,  919,   68,   68,  913,  920,   68,   68,  915,
+       68,  921,   68,  922,  923,  926,   68,   68,  925,  928,
+       68,   68,  924,   68,  930,   68,   68,   68,   68,   68,
+      933,  927,   68,  935,   68,   68,  932,  929,   68,  938,
+       68,   68,   68,  931,  942,   68,  934,  936,  937,  944,
+      943,  946,  939,   68,   68,  940,   68,  948,   68,   68,
+      941,  945,   68,   68,  951,  949,   68,  947,   68,   68,
+       68,  957,  954,   68,   68,  955,   68,   68,  952,  958,
+
+       68,   68,  959,   68,  962,  960,  950,  956,  953,  963,
+       68,  964,   68,   68,   68,  961,  966,  969,  968,   68,
+       68,  965,   68,  972,   68,  971,   68,   68,   68,   68,
+       68,  973,  967,  980,   68,   68,   68,   68,   68,   68,
+       68,   68,  970,   68,  977,  974,  978,  985,  975,  976,
+      979,   68,   68,  989,   68,  981,  982,  988,  984,   68,
+      983,  986,  990,   68,  987,   68,   68,  992,  991,   68,
+       68,  998,  999,   68,  993,   68,   68,   68,  995,  997,
+       68,  996,   68,   68,   68,  994,   68, 1006,   68,   68,
+     1001,   68, 1009,   68, 1011, 1000, 1003,   68, 1002,   68,
+
+       68,   68, 1005,   68, 1007, 1014, 1012, 1008, 1004, 1010,
+       68, 1018,   68, 1013, 1015, 1016,   68,   68,   68, 1022,
+       68, 1017,   68,   68,   68,   68,   68,   68,   68, 1019,
+     1026,   68, 1027, 1028,   68, 1020, 1023, 1021,   68, 1029,
+     1024, 1033,   68, 1025,   68,   68, 1032, 1030, 1031,   68,
+     1037,   68,   68,   68,  133,   68,   68, 1035, 1034, 1040,
+     1065, 1036,   68, 1038, 1041,   68,   68, 1043,   68, 1042,
+     1039, 1044, 1045,   68,   68,   68,   68,   68,   68,   68,
+     1047,   68,   68,   68, 1051, 1048, 1046, 1056,   68, 1049,
+     1052, 1057,   68, 1050,   68,   68,   68,   68, 1055, 1061,
+
+       68,   68, 1054, 1053, 1063,   68, 1064,   68,   68,   68,
+     1066, 1067, 1069, 1058, 1059,   68,   68, 1060, 1068, 1070,
+       68, 1062,  131,   68,   68, 1072,   68,   68, 1073,   68,
+     1074,   68,   68,   68, 1071,   68, 1079, 1083,   68,   68,
+     1080, 1075, 1076, 1077,   68, 1085,   68,   68, 1078, 1088,
+       68, 1081,   68, 1082, 1089,   68, 1087,   68,   68, 1084,
+       68, 1091, 1090,   68, 1093,   68, 1086, 1097,   68,   68,
+     1096,   68,   68, 1100,   68,   68, 1095,   68, 1099,   68,
+     1101,   68,   68, 1092, 1094,   68, 1102,   68, 1098, 1103,
+       68, 1107, 1109,   68, 1104,   68, 1108, 1106, 1112,   68,
+
+     1105, 1110, 1115,   68, 1116,   68, 1111,   68, 1117, 1119,
+       68,   68, 1118,   68,   68, 1122, 1113, 1114,   68,   68,
+       68,   68,   68, 1121, 1127, 1124,   68, 1129,   68,   68,
+     1123, 1125,   68,  129,   68,   68, 1120, 1131, 1132,   68,
+     1130, 1133,   68,   68, 1137,   68,   68, 1126, 1128, 1134,
+     1135,   68, 1136,   68,   68,   68, 1138, 1141,   68,   68,
+       68,   68,  128,   68,   68, 1139, 1140, 1146, 1143, 1147,
+       68, 1148,   68,   68, 1150, 1142,   68,   68, 1144,   68,
+     1145, 1155,   68,   68, 1149, 1151, 1153,   68, 1154, 1158,
+     1152,   68,   68, 1160,   68,   68,   68, 1161, 1156, 1162,
+
+       68, 1157,   68, 1163,   68, 1165,   68,   68, 1159,   68,
+       68,   68,   68,   68,   68, 1166,   68,   68, 1174, 1173,
+       68, 1168, 1164, 1169, 1170, 1171,   68,   68, 1167, 1176,
+     1178,   68,   68, 1172,   68, 1175, 1181, 1180,   68,   68,
+     1177,   68,   68, 1182, 1183, 1186,   68,   68,   68,   68,
+       68, 1187,   68, 1179, 1190,   68,   68,   68, 1194, 1184,
+     1191, 1192, 1185, 1189, 1193,   68, 1188,   68,   68, 1196,
+       68,   68, 1197, 1198, 1195,   68,   68,   68,   68,   68,
+       68, 1202,   68, 1199, 1203, 1207,   68,   68,   68, 1206,
+       68, 1200, 1201, 1212, 1204,   68, 1208, 1209,   68, 1211,
+
+       68, 1210, 1205, 1213, 1214,   68,   68,   68, 1215, 1217,
+       68,   68, 1218,   68,   68, 1216,   68, 1222,   68, 1219,
+       68, 1221,   68,   68,   68, 1224,   68,   68,   68, 1227,
+       68, 1220, 1230,   68, 1231,   68,   68,   68, 1226, 1223,
+       68, 1233,   68, 1229, 1228, 1225,   68,   68,   68,   68,
+     1232, 1242,   68,   68, 1234,   68, 1235,   68, 1243,   68,
+     1240,   68,   68, 1236,  126, 1238, 1237, 1245, 1239,   68,
+     1241, 1282, 1244,   68, 1246,   68, 1247, 1248,   68, 1249,
+       68, 1253, 1250, 1251,   68, 1252,   68, 1254,   68, 1255,
+       68,   68, 1256, 1258,   68,   68, 1257, 1260,   68,   68,
+
+       68,   68,   68, 1264, 1263,   68, 1262, 1266,   68, 1268,
+       68, 1269,   68,   68, 1259,   68, 1271, 1261, 1265,   68,
+       68,   68,   68,   68, 1267,   68, 1274,   68, 1272,   68,
+       68,   68, 1273, 1283, 1278,   68, 1276,   68,   68, 1270,
+     1280, 1284, 1279,   68, 1281,   68, 1277, 1275,   68, 1287,
+     1285, 1288, 1286,   68, 1289,   68,   68,   68,   68,   68,
+     1291, 1293, 1290,   68, 1294, 1296,   68, 1292, 1297,   68,
+       68,   68, 1299,   68,   68, 1300,   68, 1295,   68, 1303,
+     1304,   68,   68,   68, 1298, 1305, 1307, 1301, 1306,   68,
+       68,   68,   68, 1302,   68, 1310, 1313,   68,  124, 1312,
+
+       68,   68,   68, 1308, 1309, 1317, 1314, 1316,   68,   68,
+       68, 1319, 1311, 1315,   68, 1320, 1318, 1321,   68,   68,
+     1323,   68, 1324,   68, 1322, 1325,   68, 1326,   68,   68,
+       68,   68, 1330,   68,   68,   68, 1329, 1332,   68, 1331,
+       68, 1335,   68,   68, 1327, 1334, 1336,   68, 1337,   68,
+       68, 1328, 1333,   68,   68, 1338,   68,   68,   68, 1345,
+       68, 1343,   68,   68,   68, 1340, 1341,   68, 1339, 1342,
+       68, 1346,   68,   68,   68,   68,   68,   68, 1344, 1353,
+     1349, 1354, 1355,   68, 1348,   68, 1351, 1356,   68, 1347,
+       68, 1352,   68,   68, 1350, 1357,   68,   68, 1364, 1359,
+
+       68, 1361,   68, 1358, 1365,   68,   68,   68,   68, 1366,
+     1360,   68,   68, 1362, 1363, 1367, 1374, 1368, 1373,   68,
+       68,   68,   68,   68, 1369, 1370,   68, 1371,   68,   68,
+       68, 1372,   68, 1381, 1382,   68,   68, 1376, 1375, 1385,
+       68,   68, 1377, 1387,   68,   68, 1378, 1379,   68, 1380,
+     1384, 1383, 1388,   68,   68, 1389,   68, 1391,   68,   68,
+     1386, 1392,   68, 1393,   68,   68,   68, 1390,   68,   68,
+     1395, 1397, 1413, 1398, 1400,   68, 1401,   68, 1394, 1396,
+     1399, 1402, 1403,   68, 1404,   68,   68, 1405,   68,   68,
+       68,   68,   68, 1406,   68, 1407,   68, 1408,   68,   68,
+
+       68, 1411, 1410,   68,   68,   68, 1409,   68, 1418,   68,
+     1412,   68, 1416, 1415, 1417,   68,   68, 1414, 1419, 1423,
+       68, 1425,   68, 1420,   68, 1424,   68,   68,   68, 1430,
+       68, 1421, 1426, 1427, 1422, 1428,   68,   68, 1432,   68,
+     1429,   68, 1433, 1434,   68, 1435,   68, 1436,   68,   68,
+     1439, 1440,   68,   68,   68,   68, 1431, 1441,   68, 1437,
+     1442,   68,   68, 1438,   68,   68, 1445, 1449,   68,   68,
+       68,   68,   68, 1453,   68, 1443, 1444,   68, 1451, 1448,
+     1446,   68, 1454,   68, 1447,   68,   68,   68, 1450,   68,
+     1452, 1456,   68, 1455, 1457,   68, 1459,   68, 1462, 1464,
+
+       68, 1465,   68,   68,   68, 1460,   68, 1463,   68, 1458,
+       68, 1466, 1461, 1467,   68, 1468,   68, 1471,   68, 1470,
+       68,   68,   68,   68,   68, 1473,   68, 1472, 1476, 1475,
+     1474, 1469, 1478, 1480,   68, 1479,   68,   68, 1483,   68,
+     1477, 1482,   68, 1481,   68, 1485, 1484,   68,   68,   68,
+       68, 1491,   68,   68, 1489,   68, 1488, 1493,   68,   68,
+     1486, 1495,   68,   68, 1494,   68, 1487, 1498,   68, 1499,
+       68,   68, 1492,   68,   68, 1496, 1490, 1503,   68,   68,
+     1510,   68,   68, 1501, 1500, 1497, 1504, 1505,   68, 1507,
+     1511,   68,   68, 1502,   68,   68,   68,   68, 1506,   68,
+
+     1513, 1642, 1515, 1516,   68, 1508, 1509, 1517,   68,   68,
+     1514, 1512, 1518,   68, 1519, 1520,   68,   68, 1521, 1522,
+       68,   68,   68, 1525,   68,   68, 1523,   68,   68,   68,
+     1524,   68, 1526, 1527,   68,   68,   68, 1535,   68,   68,
+     1533, 1536,   68, 1528,   68, 1529,   68,   68, 1530, 1531,
+     1537, 1538,   68,   68, 1541, 1532, 1534, 1539, 1540,   68,
+     1543,   68, 1542,   68,   68,   68,   68,   68, 1550,   68,
+     1547, 1548, 1544, 1551,   68, 1552,   68,   68, 1545,   68,
+     1554,   68, 1555,   68,   68, 1546, 1549,   68, 1557, 1553,
+       68,   68,   68,   68,   68, 1556, 1561,   68,   68,   68,
+
+       68,   68,   68, 1558, 1569,   68,   68, 1560, 1559,   68,
+     1563, 1570, 1565, 1562, 1571, 1566, 1568, 1564,   68,   68,
+       68, 1575,   68, 1572,   68, 1567,   68, 1579, 1580,   68,
+       68, 1573,   68,   68, 1574, 1577, 1576,   68,   68,   68,
+       68,   68, 1582, 1578, 1581,   68,   68,   68,   68, 1592,
+       68, 1589, 1584, 1586, 1587, 1590, 1583,   68, 1585,   68,
+       68, 1642, 1593,   68, 1588, 1594, 1591, 1597, 1595, 1598,
+       68,   68,   68,   68,   68,   68, 1602,   68, 1596,   68,
+     1599,   68, 1605,   68,   68,   68,   68, 1609,   68, 1642,
+     1600,   68, 1604, 1601, 1603,   68, 1610,   68, 1608,   68,
+
+     1612,   68, 1606, 1607,   68, 1613, 1614, 1611,   68, 1617,
+       68,   68,   68,   68, 1616, 1615, 1620,   68, 1618, 1619,
+       68,   68, 1621,   68,   68, 1623, 1624,   68, 1627,   68,
+       68,   68, 1622,   68, 1630, 1631,   68,   68, 1632, 1633,
+       68,   68, 1625, 1626, 1634,   68,   68,   68, 1628, 1629,
+       68, 1642, 1636, 1635, 1642, 1637, 1638, 1640,   68, 1642,
+     1639, 1641,   68,   40,   40,   40,   40,   40,   40,   40,
+       45,   45,   45,   45,   45,   45,   45,   50,   50,   50,
+       50,   50,   50,   50,   56,   56,   56,   56,   56,   56,
+       56,   61,   61,   61,   61,   61,   61,   61,   71,   71,
+
+     1642,   71,   71,   71,   71,  123,  123, 1642, 1642, 1642,
+      123,  123,  125,  125, 1642, 1642,  125, 1642,  125,  127,
+     1642, 1642, 1642, 1642, 1642,  127,  130,  130, 1642, 1642,
+     1642,  130,  130,  132, 1642, 1642, 1642, 1642, 1642,  132,
+      134,  134, 1642,  134,  134,  134,  134,   72,   72, 1642,
+       72,   72,   72,   72,   13, 1642, 1642, 1642, 1642, 1642,
+     1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642,
+     1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642,
+     1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642,
+     1642, 1642, 1642, 1642
+
     } ;
 
-static yyconst flex_int16_t yy_chk[3277] =
+static yyconst flex_int16_t yy_chk[3295] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1340,7 +1347,7 @@ static yyconst flex_int16_t yy_chk[3277] =
         9,  151,   33,    6,    7,    7,    7,    7,    9,    7,
        10,   10,   10,   44,   44,    7,    8,    8,    8,    8,
        10,    8,   21,   33,  151,   21,   21,    8,   11,   11,
-       11,   11,   11,   11, 1633,   20,   29,   20,   20,   11,
+       11,   11,   11,   11, 1648,   20,   29,   20,   20,   11,
 
        20,   29,   24,   21,   25,   20,   24,   28,   11,   12,
        12,   12,   12,   12,   12,   74,   22,   22,   74,   25,
@@ -1358,7 +1365,7 @@ static yyconst flex_int16_t yy_chk[3277] =
        81,   83,   78,   68,   71,   79,   71,   71,   84,   71,
        85,   80,   86,   84,   71,   71,   87,   88,   81,   82,
        83,   89,   90,   91,   85,   89,   84,   90,   94,   97,
-       92,  625,   86,   92,   87,   88,   92,   91,   93,   95,
+       92,  626,   86,   92,   87,   88,   92,   91,   93,   95,
        98,  104,   96,   93,   95,   96,  103,   94,   99,   96,
        92,  100,   99,   97,   98,  102,  105,  106,  100,  103,
       105,  104,  102,  107,   95,  108,  109,  111,  107,  112,
@@ -1443,12 +1450,12 @@ static yyconst flex_int16_t yy_chk[3277] =
 
       447,  456,  443,  445,  450,  458,  456,  463,  445,  465,
       458,  459,  445,  461,  463,  445,  461,  460,  462,  462,
-      464,  464,  445,  469,  465,  445,  457,  470,  457,   67,
+      464,  464,  445,  469,  465,  445,  457,  457,  457,  470,
       457,  466,  466,  457,  467,  468,  473,  467,  457,  471,
-      468,  472,  472,  469,  457,  457,  470,  471,  474,  475,
-      477,  473,  476,  476,  475,  477,  478,  479,  480,  481,
-      479,  478,  482,  483,  480,  485,  474,  481,  484,  487,
-      482,  488,  485,  484,  486,  486,  488,  487,  489,  491,
+      468,  472,  472,  469,  457,  457,  474,  471,  470,  475,
+      477,  473,  476,  476,  475,  477,  478,  479,  481,  480,
+      479,  478,  482,  483,  474,  480,  481,  484,  485,  487,
+      482,  488,  484,  486,  486,  485,  488,  487,  489,  491,
       492,  483,  491,  493,  493,  494,  497,  495,  498,  499,
       495,  500,  501,  498,  492,  502,  503,  489,  495,  504,
 
@@ -1458,239 +1465,242 @@ static yyconst flex_int16_t yy_chk[3277] =
       514,  518,  517,  519,  519,  515,  520,  516,  522,  521,
       523,  520,  521,  524,  525,  526,  526,  528,  524,  527,
       527,  529,  518,  523,  530,  529,  522,  531,  532,  534,
-      535,  536,  528,  534,  525,  537,  538,  553,   61,  539,
-      540,  538,  532,  530,  541,  535,  546,  542,  541,  553,
+      535,  536,  528,  534,  525,  537,  538,  551,   67,  539,
+      540,  538,  532,  530,  541,  535,  546,  542,  541,  551,
       537,  531,  533,  539,  540,  533,  536,  533,  545,  543,
       544,  533,  542,  533,  543,  544,  547,  546,  533,  548,
 
-      558,  549,  545,  533,  543,  548,  549,  550,  550,  551,
-      547,  552,  556,  550,  551,  550,  554,  554,  555,  558,
-      556,  557,  564,  555,  560,  552,  559,  559,  560,  562,
-      565,  567,  566,  550,  562,  557,  563,  566,  568,  563,
-      569,  564,  571,  565,  570,  573,  572,  568,  574,  570,
-      567,  576,  578,  574,  573,  577,  579,  582,  580,  569,
-      572,  579,  571,  580,  581,  588,  582,  578,  588,  581,
-      576,  583,  583,  577,  584,  589,  586,  590,  592,  584,
-      586,  586,  587,  587,  591,  595,  587,  591,  593,  594,
-      589,  595,  596,  593,  594,  597,  599,  590,  600,  592,
-
-      602,  597,  598,  598,  601,  599,  603,  601,  596,  604,
-      605,  610,  606,  608,  607,  611,  600,  606,  602,  607,
-      616,  609,  610,  605,  609,  603,  614,  611,  612,  604,
-      613,  608,  617,  612,  620,  613,  615,  615,  618,  616,
-      619,  614,  621,  622,  619,  623,  617,  626,  627,  628,
-      618,  621,  620,  629,  630,  631,  636,  632,  629,  630,
-      631,  626,  622,  627,  633,  635,  637,  634,  638,  628,
-      623,  632,  634,  639,  639,  636,  640,  641,  633,  642,
-      635,  637,  645,  641,  643,  643,  644,  638,  646,  645,
-      647,  644,  648,  647,  640,  649,  650,  651,  652,  642,
-
-      653,  650,  646,  652,  649,  654,  655,  656,  657,  654,
-      648,  659,  658,  660,  661,  655,  651,  664,  663,  653,
-      662,  669,  656,  657,  658,  668,  662,  665,  670,  669,
-      659,  673,  661,  663,  660,  667,  665,  664,  671,  668,
-      667,  672,  674,  671,  675,  672,  672,  676,  670,  678,
-      673,  683,  676,  675,  678,  674,  677,  677,  679,  680,
-      680,  681,  682,  679,  684,  683,  685,  682,  686,  687,
-      681,  685,  688,  686,  687,  689,  688,  690,  694,  692,
-      693,  696,  684,  692,  689,  695,  697,  698,  690,  689,
-      699,  689,  700,  689,  697,  693,  694,  701,  701,  695,
-
-      696,  698,  706,  702,  703,  703,  705,  706,  699,  705,
-      707,  708,  708,  709,  710,  710,  711,  700,  702,  712,
-      712,  711,  713,  714,  715,  716,  717,  717,  714,  707,
-      716,  718,  715,  709,  719,  727,  720,  729,  729,  722,
-      719,  723,  713,  720,  722,  724,  723,  725,  726,  718,
-      724,  728,  725,  730,  727,  731,  732,  726,  735,  733,
-      734,  732,  728,  736,  736,  737,  738,  740,  739,  741,
-      742,   56,  740,  730,  745,  742,  735,  744,  731,  733,
-      734,  744,  744,  745,  748,  737,  739,  746,  747,  749,
-      747,  738,  741,  750,  749,  746,  751,  750,  748,  752,
-
-      753,  754,  756,  755,  757,  758,  760,  751,  755,  758,
-      759,  763,  764,  761,  762,  765,  766,  764,  752,  754,
-      756,  766,  765,  767,  757,  760,  753,  761,  759,  762,
-      763,  768,  769,  770,  771,  775,  775,  772,  773,  770,
-      768,  767,  772,  773,  774,  777,  777,  769,  778,  774,
-      779,  780,  781,  778,  783,  771,  781,  781,  782,  782,
-      784,  785,  786,  787,  779,  789,  788,  790,  793,  787,
-      780,  788,  791,  783,  792,  794,  798,  795,  797,  784,
-      798,  786,  793,  797,  789,  799,  790,  785,  796,  796,
-      800,  791,  795,  792,  801,  805,  794,  803,  799,  800,
-
-      802,  802,  803,  804,  806,  808,  810,  804,  821,  806,
-       51,  810,  811,  811,  801,  805,  812,  814,  814,  816,
-      816,  812,  818,  808,  820,  818,  819,  819,  822,  823,
-      824,  825,  825,  821,  823,  826,  827,  827,  828,  820,
-      829,  832,  822,  830,  831,  824,  832,  830,  834,  837,
-      835,  829,  836,  836,  838,  826,  839,  840,  843,  840,
-      828,  845,  841,  831,  835,  842,  834,  841,  844,  837,
-      842,  846,  846,  844,  838,  845,  839,  847,  843,  849,
-      850,  850,  851,  847,  852,  858,  854,  853,   50,  856,
-      853,  854,  855,  853,  851,  857,  859,  855,  856,  859,
-
-      857,  860,  862,  849,  852,  853,  860,  861,  861,  863,
-      858,  864,  865,  866,  867,  868,  868,  865,  869,  867,
-      862,  870,  871,  869,  872,  874,  873,  876,  863,  877,
-      875,  864,  876,  878,  879,  881,  866,  874,  882,  870,
-      873,  884,  871,  875,  872,  882,  890,  883,  892,  877,
-      881,  887,  887,  878,  891,  879,  883,  884,  888,  883,
-      889,  888,  890,  891,  893,  889,  894,  892,  897,  895,
-      896,  896,  898,  893,  895,  894,  893,  899,  900,  901,
-      902,  903,  903,  904,  905,  898,  907,  908,  897,  909,
-      910,  907,  900,  911,  909,  899,  910,  913,  902,  904,
-
-      914,  912,  905,  914,  901,  908,  912,  917,  918,  914,
-      913,  919,  920,  911,  921,  917,  922,  923,  925,  921,
-      926,  918,  927,  928,  926,  929,  931,  927,  928,  919,
-      929,  920,  922,  930,  934,  923,  932,   45,  925,  933,
-      933,  935,  930,  936,  938,  937,  939,   40,  934,  931,
-      937,  932,  940,  935,  942,  936,  938,  942,  940,  941,
-      941,  943,  943,  945,  939,  946,  946,  947,  948,  949,
-      950,  951,  945,  948,  953,  952,  955,  954,  949,  947,
-      952,  958,  950,  953,  956,  956,  951,  957,  959,  960,
-      962,  955,  957,  961,  961,  969,  953,  954,  963,  963,
-
-      964,  964,  958,  965,  971,  972,  972,  959,  965,  960,
-      962,  966,  968,  969,  966,  970,  974,  968,  973,  973,
-      970,  974,  975,  976,  977,  978,  979,  980,  980,  971,
-      981,  982,  982,  983,  975,  975,  975,  985,  986,  986,
-      987,  975,  988,  976,  977,  978,  985,  979,  989,  988,
-      990,  991,  991,  983,  992,  987,  981,  989,  993,  995,
-      996,  997,  998, 1000,  995,  996,  999,  999, 1000,  998,
-     1001, 1002, 1003, 1004,  993, 1005,  990, 1006, 1009, 1001,
-      992,  997, 1011, 1006, 1007, 1008, 1008, 1003, 1012, 1009,
-     1005, 1002, 1004, 1007, 1009, 1010, 1010, 1014, 1014, 1013,
-
-     1017, 1015, 1012, 1011, 1013, 1015, 1015, 1016, 1018, 1019,
-     1020, 1021, 1016, 1022, 1019, 1021, 1023, 1025, 1024, 1026,
-     1018, 1027, 1020, 1024, 1026, 1022, 1017, 1029, 1030, 1030,
-     1029, 1031, 1031, 1027, 1032, 1039, 1035, 1033, 1034, 1025,
-     1032, 1023, 1033, 1037, 1034, 1035, 1041, 1039, 1037, 1042,
-     1042, 1043, 1044, 1047, 1045, 1046, 1050, 1047, 1041, 1048,
-     1049, 1044, 1053,   14, 1048, 1049, 1052, 1052, 1054, 1060,
-     1050, 1043, 1045, 1055, 1046, 1057, 1057, 1054, 1052, 1061,
-     1053, 1062, 1055, 1060, 1061, 1063, 1063, 1064, 1067, 1064,
-     1065, 1065, 1068, 1069, 1069, 1067, 1070, 1071, 1062, 1072,
-
-     1075, 1073, 1074, 1076, 1078, 1070, 1079, 1080, 1079, 1078,
-     1081, 1072, 1068, 1073, 1074, 1075, 1083, 1085, 1071, 1081,
-     1084, 1084, 1086, 1076, 1087, 1080, 1087, 1086, 1088, 1089,
-     1083, 1090, 1091, 1088, 1089, 1092, 1093, 1095, 1098, 1096,
-     1092, 1093, 1099, 1085, 1097, 1097, 1100, 1102, 1100, 1090,
-     1098, 1099, 1091, 1096, 1099, 1101, 1095, 1104, 1105, 1102,
-     1107, 1108, 1104, 1105, 1101, 1111, 1109, 1115, 1113, 1114,
-     1116, 1111, 1120, 1107, 1113, 1117, 1117, 1118, 1122, 1116,
-     1123, 1108, 1109, 1122, 1114, 1121, 1118, 1119, 1119, 1121,
-     1125, 1120, 1115, 1123, 1124, 1124, 1128, 1131, 1125, 1129,
-
-     1129, 1130, 1130, 1132, 1136, 1128, 1133, 1134, 1134, 1131,
-     1137, 1133, 1138, 1139, 1140, 1137, 1141, 1142, 1147, 1140,
-     1144, 1132, 1143, 1143, 1144, 1145, 1146, 1148, 1139, 1136,
-     1150, 1146, 1151, 1142, 1141, 1138, 1152, 1153, 1154, 1158,
-     1145, 1156, 1156, 1160, 1147, 1157, 1148, 1159, 1157, 1153,
-     1178, 1151, 1158, 1178, 1150, 1164, 1160, 1152, 1167, 1154,
-     1170, 1159, 1161, 1161, 1162, 1162, 1163, 1163, 1164, 1165,
-     1165, 1166, 1166, 1168, 1168, 1169, 1169, 1167, 1172, 1170,
-     1173, 1173, 1174, 1172, 1175, 1175, 1176, 1177, 1181, 1179,
-     1179, 1180, 1180, 1177, 1182, 1182, 1184, 1184, 1185, 1186,
-
-     1186, 1174, 1187, 1188, 1176, 1179, 1190, 1181, 1189, 1191,
-     1194, 1187, 1192, 1189, 1193, 1188, 1197, 1195, 1196, 1193,
-     1201,   13, 1191, 1198, 1185, 1194, 1195, 1196, 1198, 1203,
-     1197, 1190, 1199, 1192, 1204, 1204, 1199, 1205, 1203, 1208,
-     1201, 1209, 1205, 1206, 1206, 1211, 1212, 1213, 1211, 1214,
-     1214, 1212, 1206, 1209, 1208, 1216, 1216, 1217, 1218, 1218,
-     1219, 1220, 1221, 1222, 1222, 1224, 1228, 1213, 1230, 1224,
-     1225, 1217, 1219, 1225, 1227, 1220, 1226, 1226, 1229, 1227,
-     1231, 1221, 1229, 1235, 1232, 1231, 1228, 1233, 1230, 1232,
-     1236, 1237, 1238, 1233, 1256, 1236, 1237, 1242, 1242, 1235,
-
-     1238, 1239, 1248, 1239, 1245, 1245, 1255, 1248, 1249, 1249,
-     1251, 1251, 1253, 1254, 1254, 1257, 1256, 1253, 1259, 1259,
-     1257, 1262, 1255, 1263, 1264, 1263, 1262, 1265, 1266, 1266,
-     1267, 1267, 1265, 1268, 1268, 1269, 1270, 1271, 1264, 1272,
-     1273, 1274, 1275, 1276, 1276, 1278, 1274, 1269, 1277, 1271,
-     1279, 1272, 1273, 1280, 1270, 1281, 1283, 1277, 1282, 1284,
-     1285, 1290, 1275, 1292, 1284, 1285, 1280, 1286, 1286, 1291,
-     1279, 1278, 1282, 1293, 1283, 1287, 1287, 1294, 1295, 1281,
-     1301, 1290, 1296, 1297, 1297, 1292, 1294, 1291, 1299, 1299,
-     1300, 1302, 1303, 1293, 1305, 1301, 1304, 1308, 1295, 1300,
-
-     1296, 1306, 1306, 1307, 1309, 1310, 1311, 1316, 1307, 1302,
-     1303, 1313, 1304, 1305, 1317, 1308, 1319, 1317, 1320, 1309,
-     1318, 1318, 1322, 1322, 1310, 1323, 1311, 1316, 1324, 1324,
-     1313, 1319, 1325, 1325, 1329, 1329, 1320, 1330, 1331, 1334,
-     1332, 1333, 1335, 1355, 1323, 1332, 1333, 1331, 1337, 1338,
-     1335, 1339, 1340,    0, 1338, 1355, 1339, 1343, 1334, 1330,
-     1341, 1341, 1343, 1337, 1342, 1342, 1352, 1340, 1344, 1344,
-     1345, 1345, 1348, 1351, 1349, 1350, 1353, 1348, 1349, 1358,
-     1350, 1352, 1351, 1354, 1353, 1359, 1357, 1360, 1354, 1357,
-     1361, 1361, 1358, 1362, 1359, 1364, 1360, 1365, 1368, 1366,
-
-     1367, 1367, 1362, 1369, 1369, 1370, 1371, 1368, 1374, 1379,
-     1373, 1371,    0, 1370, 1364, 1376, 1376, 1365, 1366, 1373,
-     1385, 1374, 1380, 1380, 1381, 1382, 1382, 1381, 1386, 1379,
-     1383, 1383, 1384, 1384, 1387, 1388, 1388, 1389, 1385, 1387,
-     1392, 1389, 1386, 1395, 1396, 1397, 1392, 1398, 1399, 1396,
-     1400, 1400, 1401, 1403, 1404, 1404, 1402, 1405, 1407, 1408,
-     1395, 1395, 1399, 1397, 1402, 1406, 1409, 1398, 1410, 1411,
-     1406, 1401, 1403, 1405, 1413, 1409, 1415, 1413, 1407, 1416,
-     1416, 1418, 1417, 1420, 1421, 1408, 1417, 1422, 1410, 1411,
-     1418, 1434, 1420, 1426, 1415, 1428, 1421, 1430, 1426, 1427,
-
-     1427, 1431, 1430, 1432, 1428, 1436, 1433, 1439, 1435, 1434,
-     1431, 1433, 1422, 1435, 1437, 1437, 1440, 1441, 1441, 1442,
-     1443, 1444, 1446, 1447, 1432, 1445, 1439, 1446, 1442, 1449,
-     1436, 1440, 1454, 1445, 1448, 1448, 1443, 1450, 1450, 1451,
-     1444, 1453, 1453, 1455, 1451, 1456, 1456, 1458, 1449, 1447,
-     1457, 1457, 1454, 1460, 1463, 1459, 1461, 1461, 1462, 1463,
-     1464, 1467, 1467, 1465, 1466, 1455, 1458, 1459, 1465, 1470,
-     1462, 1469, 1469, 1460,    0, 1472, 1474, 1474, 1473, 1464,
-        0, 1466, 1466, 1473, 1475, 1475, 1476, 1476, 1470, 1472,
-     1477, 1479, 1479, 1481, 1481, 1477, 1483, 1483, 1484, 1487,
-
-     1488, 1488, 1492, 1484, 1489, 1491, 1493, 1487, 1494, 1489,
-     1491, 1495, 1496, 1499, 1500, 1500, 1510, 1496, 1514, 1501,
-     1492, 1512, 1493, 1501, 1516, 1494, 1494, 1505, 1505, 1515,
-     1507, 1510, 1495, 1499, 1507, 1509, 1509, 1513, 1513, 1512,
-     1519, 1517, 1518, 1514, 1515, 1516, 1517, 1518, 1520, 1520,
-     1522, 1522, 1524, 1524, 1526, 1527, 1527, 1529, 1530, 1519,
-     1531, 1532, 1529, 1533, 1538, 1531, 1526, 1534, 1538, 1539,
-     1542, 1540, 1530, 1541, 1543, 1544, 1545, 1546, 1546, 1550,
-     1532, 1533, 1548, 1534, 1540, 1547, 1551, 1548, 1542, 1539,
-     1543, 1545, 1541, 1549, 1547, 1553, 1555, 1552, 1549, 1556,
-
-     1544, 1551, 1552, 1557, 1550, 1558, 1559, 1561, 1557, 1553,
-     1558, 1555, 1560, 1562, 1563, 1564, 1565, 1566, 1556, 1567,
-     1559, 1569, 1570, 1570, 1567, 1560, 1561, 1562, 1564, 1565,
-     1568, 1574, 1571, 1563, 1572, 1568, 1566, 1571, 1573, 1572,
-     1569, 1575, 1577, 1573, 1576, 1576, 1575, 1578, 1579, 1577,
-     1574, 1580, 1581, 1584, 1585, 1582, 1580, 1586, 1584, 1587,
-     1588, 1588, 1590, 1595, 1589, 1593, 1578, 1579, 1582, 1589,
-     1593, 1581, 1587, 1585, 1591, 1591, 1586, 1592, 1592, 1594,
-     1597, 1590, 1595, 1596, 1596, 1598, 1594, 1597, 1599, 1600,
-     1601, 1603, 1598, 1604, 1600, 1605, 1603, 1606, 1604, 1607,
-
-     1607, 1608, 1609, 1610, 1610, 1611, 1611, 1599, 1612, 1601,
-     1613, 1613, 1614, 1614, 1605, 1612, 1606, 1615, 1617, 1621,
-     1608, 1609, 1620, 1617, 1615, 1622,    0, 1620, 1623, 1623,
-     1624, 1624,    0,    0,    0,    0,    0,    0, 1621,    0,
-        0,    0,    0,    0, 1622, 1628, 1628, 1628, 1628, 1628,
-     1628, 1628, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1630,
-     1630, 1630, 1630, 1630, 1630, 1630, 1631, 1631, 1631, 1631,
-     1631, 1631, 1631, 1632, 1632, 1632, 1632, 1632, 1632, 1632,
-     1634, 1634,    0, 1634, 1634, 1634, 1634, 1635, 1635,    0,
-        0,    0, 1635, 1635, 1636, 1636,    0,    0, 1636,    0,
-
-     1636, 1637,    0,    0,    0,    0,    0, 1637, 1638, 1638,
-        0,    0,    0, 1638, 1638, 1639,    0,    0,    0,    0,
-        0, 1639, 1640, 1640,    0, 1640, 1640, 1640, 1640, 1641,
-     1641,    0, 1641, 1641, 1641, 1641, 1627, 1627, 1627, 1627,
-     1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
-     1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
-     1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
-     1627, 1627, 1627, 1627, 1627, 1627
+      554,  549,  545,  533,  543,  548,  549,  550,  550,  552,
+      547,  553,  554,  550,  552,  550,  555,  555,  556,  557,
+      558,  559,  561,  556,  565,  553,  561,  557,  560,  560,
+      563,  566,  567,  550,  558,  563,  564,  567,  568,  564,
+      559,  569,  570,  565,  566,  572,  571,  574,  573,  575,
+      569,  571,  577,  579,  575,  578,  574,  568,  580,  581,
+      583,  570,  573,  580,  581,  572,  591,  582,  579,  583,
+      593,  577,  582,  578,  584,  584,  585,  589,  587,  590,
+      589,  585,  587,  587,  588,  588,  591,  592,  588,  596,
+      592,  593,  594,  595,  590,  596,  597,  594,  595,  598,
+
+      599,  599,  600,  601,  602,  598,  603,  602,  604,  605,
+      606,  600,  597,  607,  608,  609,  612,  610,  607,  608,
+      610,  601,  615,  606,  603,  611,  613,  604,  612,  605,
+      614,  613,  617,  609,  618,  614,  611,  615,  616,  616,
+      619,  620,  621,  623,  622,  620,  624,  627,  618,  628,
+      629,  617,  619,  622,  630,  633,  637,  639,  631,  630,
+      621,  627,  623,  631,  628,  634,  636,  632,  635,  633,
+      629,  624,  632,  635,  638,  637,  639,  640,  640,  634,
+      641,  636,  642,  643,  644,  644,  645,  646,  642,  638,
+      647,  645,  648,  649,  646,  648,  650,  651,  641,  652,
+
+      654,  653,  651,  643,  647,  650,  653,  656,  655,  657,
+      658,  649,  655,  659,  660,  661,  656,  662,  652,  654,
+      659,  663,  664,  666,  657,  658,  660,  665,  664,  671,
+      669,  667,  670,  672,  661,  669,  673,  671,  662,  663,
+      667,  673,  665,  666,  674,  675,  670,  676,  674,  674,
+      677,  678,  680,  672,  679,  679,  678,  680,  681,  677,
+      676,  682,  682,  681,  675,  683,  684,  685,  686,  695,
+      687,  684,  688,  689,  683,  687,  690,  688,  689,  691,
+      690,  685,  696,  692,  695,  694,  686,  697,  691,  694,
+      698,  699,  700,  691,  692,  691,  701,  691,  702,  699,
+
+      696,  697,  703,  703,  704,  709,  700,  705,  705,  698,
+      707,  708,  711,  707,  701,  715,  708,  710,  710,  704,
+      712,  712,  713,  702,  709,  714,  714,  713,  716,  717,
+      720,  718,  711,  716,  721,  715,  718,  717,  719,  719,
+      721,  724,  722,  729,  728,  725,  724,  726,  720,  722,
+      725,  727,  726,  728,  730,  732,  727,  731,  731,  733,
+      735,  734,  729,  736,  739,  730,  734,  737,  738,  738,
+      740,  741,  742,  743,  744,  732,  751,  742,  747,  744,
+      735,  751,  733,  736,  739,  737,  746,  747,  750,  741,
+      746,  746,  748,  753,  752,  740,  743,  749,  752,  749,
+
+      748,  754,  750,  755,  753,  756,  757,  758,  759,  760,
+      763,  757,  761,  760,  762,  766,  764,  765,  770,  774,
+      754,  767,  769,  756,  763,  758,  767,  769,  759,  755,
+      761,  764,  765,  762,  766,  768,  770,  771,  772,  773,
+      774,  783,  768,  775,  776,  773,  771,  777,  775,  776,
+      778,  778,  777,  772,  780,  780,  781,  782,  784,  786,
+      783,  781,  784,  784,  785,  785,  787,  788,  789,  790,
+      792,  782,  791,  793,  796,  790,  794,  791,  786,  795,
+      797,  798,  799,  799,  802,  787,  800,  789,  796,  792,
+      801,  800,  793,  788,  801,  794,  798,  802,  795,  803,
+
+      804,  797,  805,  805,  806,  808,  807,  809,  803,  806,
+      807,  811,  809,  813,  814,  814,  815,  824,  813,  823,
+      804,  815,  817,  817,  825,  808,  819,  819,  821,  811,
+      826,  821,  822,  822,  823,  826,  827,  829,  825,  828,
+      828,  831,  824,  830,  830,  832,  833,  834,  835,  837,
+      833,  827,  840,  835,  838,  841,  832,  829,  839,  839,
+      842,  846,  843,  831,  843,  844,  834,  837,  838,  845,
+      844,  847,  840,  848,  845,  841,  847,  849,  849,  850,
+      842,  846,  852,  853,  853,  850,  854,  848,  855,  856,
+      861,  857,  856,  859,  858,  856,  857,  866,  854,  858,
+
+      860,  862,  859,  865,  862,  860,  852,  856,  855,  863,
+      864,  864,  867,  868,  863,  861,  866,  869,  868,  870,
+      871,  865,  869,  872,  872,  871,  873,  874,  875,  876,
+      877,  873,  867,  880,  878,  881,  882,  879,  880,  883,
+      886,  888,  870,  885,  877,  874,  878,  886,  875,  876,
+      879,  894,  887,  891,  891,  881,  882,  888,  885,  892,
+      883,  887,  892,  893,  887,  895,  896,  894,  893,  897,
+      898,  899,  900,  900,  895,  901,  899,  902,  897,  898,
+      903,  897,  904,  905,  906,  896,  907,  907,  908,  909,
+      902,  912,  911,  915,  913,  901,  904,  911,  903,  913,
+
+      914,  917,  906,  921,  908,  916,  914,  909,  905,  912,
+      916,  921,  918,  915,  917,  918,  922,  923,  924,  925,
+      926,  918,  927,  929,  925,  935,  930,  931,  932,  922,
+      930,  936,  931,  932,  933,  923,  926,  924,  934,  933,
+      927,  937,  937,  929,  938,  939,  936,  934,  935,  940,
+      941,  942,  943,  944,   61,  941,  969,  939,  938,  944,
+      969,  940,  949,  942,  945,  945,  946,  947,  947,  946,
+      943,  949,  950,  950,  951,  952,  953,  954,  955,  956,
+      952,  957,  958,  959,  956,  953,  951,  960,  960,  954,
+      957,  961,  962,  955,  974,  963,  961,  964,  959,  965,
+
+      965,  966,  958,  957,  967,  967,  968,  968,  971,  976,
+      970,  971,  974,  962,  963,  970,  981,  964,  973,  975,
+      982,  966,   56,  973,  975,  977,  977,  978,  978,  980,
+      979,  983,  984,  986,  976,  979,  981,  985,  985,  992,
+      982,  980,  980,  980,  987,  987,  988,  990,  980,  991,
+      991,  983,  994,  984,  992,  993,  990,  995,  997,  986,
+      998,  994,  993,  996,  996, 1000,  988, 1001, 1002, 1007,
+     1000, 1003, 1001, 1004, 1004, 1005,  998, 1006, 1003, 1008,
+     1005, 1009, 1010,  995,  997, 1011, 1006, 1012, 1002, 1007,
+     1014, 1011, 1013, 1013, 1008, 1016, 1012, 1010, 1015, 1015,
+
+     1009, 1014, 1018, 1017, 1019, 1019, 1014, 1018, 1020, 1021,
+     1022, 1023, 1020, 1020, 1021, 1024, 1016, 1017, 1025, 1027,
+     1024, 1026, 1028, 1023, 1029, 1026, 1030, 1031, 1032, 1029,
+     1025, 1027, 1031,   51, 1034, 1040, 1022, 1034, 1035, 1035,
+     1032, 1036, 1036, 1037, 1040, 1038, 1039, 1028, 1030, 1037,
+     1038, 1042, 1039, 1044, 1046, 1048, 1042, 1047, 1047, 1049,
+     1050, 1051,   50, 1052, 1053, 1044, 1046, 1052, 1049, 1053,
+     1055, 1054, 1058, 1057, 1057, 1048, 1054, 1059, 1050, 1060,
+     1051, 1062, 1062, 1065, 1055, 1057, 1059, 1066, 1060, 1067,
+     1058, 1068, 1069, 1069, 1067, 1070, 1073, 1070, 1065, 1071,
+
+     1071, 1066, 1074, 1073, 1075, 1075, 1076, 1077, 1068, 1078,
+     1081, 1079, 1080, 1082, 1084, 1076, 1085, 1086, 1085, 1084,
+     1087, 1078, 1074, 1079, 1080, 1081, 1089, 1091, 1077, 1087,
+     1090, 1090, 1092, 1082, 1093, 1086, 1093, 1092, 1094, 1095,
+     1089, 1096, 1097, 1094, 1095, 1098, 1099, 1101, 1104, 1102,
+     1098, 1099, 1105, 1091, 1103, 1103, 1106, 1108, 1106, 1096,
+     1104, 1105, 1097, 1102, 1105, 1107, 1101, 1110, 1111, 1108,
+     1113, 1114, 1110, 1111, 1107, 1117, 1115, 1121, 1119, 1120,
+     1122, 1117, 1126, 1113, 1119, 1123, 1123, 1124, 1128, 1122,
+     1129, 1114, 1115, 1128, 1120, 1127, 1124, 1125, 1125, 1127,
+
+     1131, 1126, 1121, 1129, 1130, 1130, 1134, 1137, 1131, 1135,
+     1135, 1136, 1136, 1138, 1142, 1134, 1139, 1140, 1140, 1137,
+     1143, 1139, 1144, 1145, 1146, 1143, 1147, 1148, 1153, 1146,
+     1150, 1138, 1149, 1149, 1150, 1151, 1152, 1154, 1145, 1142,
+     1156, 1152, 1157, 1148, 1147, 1144, 1158, 1159, 1160, 1161,
+     1151, 1163, 1163, 1166, 1153, 1164, 1154, 1204, 1164, 1165,
+     1160, 1167, 1174, 1156,   45, 1158, 1157, 1166, 1159, 1171,
+     1161, 1204, 1165, 1177, 1167, 1168, 1168, 1169, 1169, 1170,
+     1170, 1174, 1171, 1172, 1172, 1173, 1173, 1175, 1175, 1176,
+     1176, 1179, 1177, 1180, 1180, 1181, 1179, 1182, 1182, 1183,
+
+     1184, 1185, 1186, 1186, 1185, 1188, 1184, 1187, 1187, 1189,
+     1189, 1191, 1191, 1192, 1181, 1193, 1193, 1183, 1186, 1194,
+     1195, 1196, 1197, 1198, 1188, 1199, 1196, 1201, 1194, 1200,
+     1208, 1202, 1195, 1205, 1200, 1203, 1198, 1206, 1205, 1192,
+     1202, 1206, 1201, 1210, 1203, 1215, 1199, 1197, 1211, 1211,
+     1208, 1212, 1210, 1213, 1213, 1216, 1212, 1220, 1218, 1219,
+     1215, 1218, 1213, 1226, 1219, 1221, 1221, 1216, 1223, 1223,
+     1224, 1225, 1225, 1227, 1228, 1226, 1231, 1220, 1229, 1229,
+     1231, 1234, 1232, 1235, 1224, 1232, 1234, 1227, 1233, 1233,
+     1236, 1237, 1238, 1228, 1239, 1237, 1240, 1243,   40, 1239,
+
+     1241, 1240, 1244, 1235, 1236, 1245, 1241, 1244, 1246, 1247,
+     1245, 1247, 1238, 1243, 1250, 1250, 1246, 1253, 1253, 1256,
+     1257, 1257, 1259, 1259, 1256, 1261, 1262, 1262, 1263, 1264,
+     1261, 1265, 1267, 1267, 1270, 1271, 1265, 1271, 1272, 1270,
+     1273, 1274, 1274, 1277, 1263, 1273, 1275, 1275, 1276, 1276,
+     1278, 1264, 1272, 1279, 1280, 1277, 1282, 1281, 1283, 1284,
+     1284, 1282, 1285, 1286, 1287, 1279, 1280, 1288, 1278, 1281,
+     1289, 1285, 1290, 1291, 1292, 1298, 1293, 1300, 1283, 1292,
+     1288, 1293, 1294, 1294, 1287, 1299, 1290, 1295, 1295, 1286,
+     1301, 1291, 1302, 1303, 1289, 1298, 1304, 1305, 1305, 1300,
+
+     1308, 1302, 1310, 1299, 1307, 1307, 1311, 1312, 1309, 1308,
+     1301, 1313, 1314, 1303, 1304, 1309, 1316, 1310, 1315, 1315,
+     1317, 1316, 1318, 1319, 1311, 1312, 1320, 1313, 1322, 1325,
+     1326, 1314, 1329, 1326, 1327, 1327, 1328, 1318, 1317, 1331,
+     1331, 1332, 1319, 1333, 1333, 1339, 1320, 1322, 1340, 1325,
+     1329, 1328, 1334, 1334, 1338, 1338, 1341, 1340, 1342, 1343,
+     1332, 1341, 1344, 1342, 1346, 1349, 1347, 1339, 1348, 1366,
+     1344, 1347, 1366, 1348, 1350, 1350, 1351, 1351, 1343, 1346,
+     1349, 1352, 1353, 1353, 1354, 1354, 1352, 1357, 1360, 1358,
+     1359, 1361, 1357, 1358, 1362, 1359, 1363, 1360, 1364, 1367,
+
+     1368, 1363, 1362, 1369, 1374, 1370, 1361, 1371, 1371, 1372,
+     1364, 1375, 1369, 1368, 1370, 1376, 1378, 1367, 1372, 1377,
+     1377, 1379, 1379, 1374, 1380, 1378, 1383, 1384, 1381, 1386,
+     1386, 1375, 1380, 1381, 1376, 1383, 1389, 1390, 1390, 1391,
+     1384, 1395, 1391, 1392, 1392, 1393, 1393, 1394, 1394, 1396,
+     1397, 1398, 1398, 1399, 1402, 1397, 1389, 1399, 1405, 1395,
+     1402, 1406, 1407, 1396, 1408, 1409, 1406, 1410, 1410, 1411,
+     1412, 1413, 1414, 1414, 1418, 1405, 1405, 1416, 1412, 1409,
+     1407, 1415, 1415, 1419, 1408, 1421, 1417, 1420, 1411, 1426,
+     1413, 1417, 1422, 1416, 1418, 1424, 1420, 1428, 1424, 1427,
+
+     1427, 1428, 1429, 1432, 1431, 1421, 1433, 1426, 1443, 1419,
+     1447, 1429, 1422, 1431, 1437, 1432, 1438, 1438, 1439, 1437,
+     1441, 1442, 1445, 1444, 1450, 1441, 1451, 1439, 1444, 1443,
+     1442, 1433, 1446, 1448, 1448, 1447, 1454, 1446, 1452, 1452,
+     1445, 1451, 1453, 1450, 1455, 1454, 1453, 1456, 1457, 1458,
+     1459, 1460, 1460, 1461, 1458, 1466, 1457, 1462, 1462, 1463,
+     1455, 1465, 1465, 1467, 1463, 1470, 1456, 1468, 1468, 1469,
+     1469, 1471, 1461, 1472, 1474, 1466, 1459, 1473, 1473, 1476,
+     1479, 1479, 1475, 1471, 1470, 1467, 1474, 1475, 1478, 1477,
+     1481, 1481, 1482, 1472, 1477, 1484, 1485, 1486, 1476,   14,
+
+     1484,   13, 1486, 1487, 1487, 1478, 1478, 1488, 1488, 1490,
+     1485, 1482, 1489, 1489, 1490, 1492, 1492, 1494, 1494, 1496,
+     1496, 1497, 1500, 1501, 1501, 1505, 1497, 1502, 1504, 1506,
+     1500, 1507, 1502, 1504, 1508, 1509, 1512, 1513, 1513, 1524,
+     1509, 1514, 1514, 1505, 1526, 1506, 1515, 1528, 1507, 1507,
+     1515, 1519, 1519, 1521, 1524, 1508, 1512, 1521, 1523, 1523,
+     1527, 1527, 1526, 1529, 1530, 1531, 1532, 1533, 1534, 1534,
+     1531, 1532, 1528, 1537, 1537, 1539, 1539, 1541, 1529, 1542,
+     1542, 1545, 1544, 1546, 1547, 1530, 1533, 1544, 1546, 1541,
+     1548, 1549, 1553, 1554, 1557, 1545, 1553, 1555, 1556, 1558,
+
+     1559, 1560, 1562, 1547, 1561, 1561, 1565, 1549, 1548, 1563,
+     1555, 1562, 1557, 1554, 1563, 1558, 1560, 1556, 1564, 1566,
+     1570, 1567, 1568, 1564, 1571, 1559, 1567, 1572, 1573, 1575,
+     1574, 1565, 1572, 1573, 1566, 1570, 1568, 1576, 1577, 1578,
+     1579, 1580, 1575, 1571, 1574, 1581, 1582, 1584, 1585, 1585,
+     1583, 1582, 1577, 1579, 1580, 1583, 1576, 1586, 1578, 1589,
+     1587,    0, 1586, 1588, 1581, 1587, 1584, 1590, 1588, 1591,
+     1591, 1593, 1590, 1592, 1594, 1596, 1595, 1599, 1589, 1597,
+     1592, 1595, 1599, 1600, 1601, 1602, 1603, 1603, 1605,    0,
+     1593, 1604, 1597, 1594, 1596, 1610, 1604, 1614, 1602, 1606,
+
+     1606, 1608, 1600, 1601, 1607, 1607, 1608, 1605, 1609, 1611,
+     1611, 1612, 1613, 1616, 1610, 1609, 1614, 1615, 1612, 1613,
+     1618, 1619, 1615, 1620, 1621, 1618, 1619, 1622, 1622, 1623,
+     1624, 1627, 1616, 1625, 1625, 1626, 1626, 1636, 1627, 1628,
+     1628, 1637, 1620, 1621, 1629, 1629, 1630, 1632, 1623, 1624,
+     1635,    0, 1632, 1630,    0, 1635, 1636, 1638, 1638,    0,
+     1637, 1639, 1639, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+     1644, 1644, 1644, 1644, 1644, 1644, 1644, 1645, 1645, 1645,
+     1645, 1645, 1645, 1645, 1646, 1646, 1646, 1646, 1646, 1646,
+     1646, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1649, 1649,
+
+        0, 1649, 1649, 1649, 1649, 1650, 1650,    0,    0,    0,
+     1650, 1650, 1651, 1651,    0,    0, 1651,    0, 1651, 1652,
+        0,    0,    0,    0,    0, 1652, 1653, 1653,    0,    0,
+        0, 1653, 1653, 1654,    0,    0,    0,    0,    0, 1654,
+     1655, 1655,    0, 1655, 1655, 1655, 1655, 1656, 1656,    0,
+     1656, 1656, 1656, 1656, 1642, 1642, 1642, 1642, 1642, 1642,
+     1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642,
+     1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642,
+     1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642,
+     1642, 1642, 1642, 1642
+
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1891,7 +1901,7 @@ static void config_end_include(void)
 #define YY_NO_INPUT 1
 #endif
 
-#line 1893 "<stdout>"
+#line 1903 "<stdout>"
 
 #define INITIAL 0
 #define quotedstring 1
@@ -2078,7 +2088,7 @@ YY_DECL
     
 #line 197 "./util/configlexer.lex"
 
-#line 2080 "<stdout>"
+#line 2090 "<stdout>"
 
        if ( !(yy_init) )
                {
@@ -2137,13 +2147,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 >= 1628 )
+                               if ( yy_current_state >= 1643 )
                                        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] != 3237 );
+               while ( yy_base[yy_current_state] != 3255 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -2463,470 +2473,475 @@ YY_RULE_SETUP
 case 59:
 YY_RULE_SETUP
 #line 259 "./util/configlexer.lex"
-{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
+{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) }
        YY_BREAK
 case 60:
 YY_RULE_SETUP
 #line 260 "./util/configlexer.lex"
-{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
+{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
        YY_BREAK
 case 61:
 YY_RULE_SETUP
 #line 261 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
+{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
        YY_BREAK
 case 62:
 YY_RULE_SETUP
 #line 262 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
+{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
        YY_BREAK
 case 63:
 YY_RULE_SETUP
 #line 263 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PREFETCH_KEY) }
+{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
        YY_BREAK
 case 64:
 YY_RULE_SETUP
 #line 264 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PREFETCH) }
+{ YDVAR(1, VAR_PREFETCH_KEY) }
        YY_BREAK
 case 65:
 YY_RULE_SETUP
 #line 265 "./util/configlexer.lex"
-{ YDVAR(0, VAR_STUB_ZONE) }
+{ YDVAR(1, VAR_PREFETCH) }
        YY_BREAK
 case 66:
 YY_RULE_SETUP
 #line 266 "./util/configlexer.lex"
-{ YDVAR(1, VAR_NAME) }
+{ YDVAR(0, VAR_STUB_ZONE) }
        YY_BREAK
 case 67:
 YY_RULE_SETUP
 #line 267 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_ADDR) }
+{ YDVAR(1, VAR_NAME) }
        YY_BREAK
 case 68:
 YY_RULE_SETUP
 #line 268 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_HOST) }
+{ YDVAR(1, VAR_STUB_ADDR) }
        YY_BREAK
 case 69:
 YY_RULE_SETUP
 #line 269 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_PRIME) }
+{ YDVAR(1, VAR_STUB_HOST) }
        YY_BREAK
 case 70:
 YY_RULE_SETUP
 #line 270 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_FIRST) }
+{ YDVAR(1, VAR_STUB_PRIME) }
        YY_BREAK
 case 71:
 YY_RULE_SETUP
 #line 271 "./util/configlexer.lex"
-{ YDVAR(0, VAR_FORWARD_ZONE) }
+{ YDVAR(1, VAR_STUB_FIRST) }
        YY_BREAK
 case 72:
 YY_RULE_SETUP
 #line 272 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_ADDR) }
+{ YDVAR(0, VAR_FORWARD_ZONE) }
        YY_BREAK
 case 73:
 YY_RULE_SETUP
 #line 273 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_HOST) }
+{ YDVAR(1, VAR_FORWARD_ADDR) }
        YY_BREAK
 case 74:
 YY_RULE_SETUP
 #line 274 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_FIRST) }
+{ YDVAR(1, VAR_FORWARD_HOST) }
        YY_BREAK
 case 75:
 YY_RULE_SETUP
 #line 275 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
+{ YDVAR(1, VAR_FORWARD_FIRST) }
        YY_BREAK
 case 76:
 YY_RULE_SETUP
 #line 276 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
+{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
        YY_BREAK
 case 77:
 YY_RULE_SETUP
 #line 277 "./util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL) }
+{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
        YY_BREAK
 case 78:
 YY_RULE_SETUP
 #line 278 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_IDENTITY) }
+{ YDVAR(2, VAR_ACCESS_CONTROL) }
        YY_BREAK
 case 79:
 YY_RULE_SETUP
 #line 279 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_VERSION) }
+{ YDVAR(1, VAR_HIDE_IDENTITY) }
        YY_BREAK
 case 80:
 YY_RULE_SETUP
 #line 280 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IDENTITY) }
+{ YDVAR(1, VAR_HIDE_VERSION) }
        YY_BREAK
 case 81:
 YY_RULE_SETUP
 #line 281 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VERSION) }
+{ YDVAR(1, VAR_IDENTITY) }
        YY_BREAK
 case 82:
 YY_RULE_SETUP
 #line 282 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MODULE_CONF) }
+{ YDVAR(1, VAR_VERSION) }
        YY_BREAK
 case 83:
 YY_RULE_SETUP
 #line 283 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR) }
+{ YDVAR(1, VAR_MODULE_CONF) }
        YY_BREAK
 case 84:
 YY_RULE_SETUP
 #line 284 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
+{ YDVAR(1, VAR_DLV_ANCHOR) }
        YY_BREAK
 case 85:
 YY_RULE_SETUP
 #line 285 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
+{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
        YY_BREAK
 case 86:
 YY_RULE_SETUP
 #line 286 "./util/configlexer.lex"
-{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
+{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
        YY_BREAK
 case 87:
 YY_RULE_SETUP
 #line 287 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
+{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
        YY_BREAK
 case 88:
 YY_RULE_SETUP
 #line 288 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR) }
+{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
        YY_BREAK
 case 89:
 YY_RULE_SETUP
 #line 289 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
+{ YDVAR(1, VAR_TRUST_ANCHOR) }
        YY_BREAK
 case 90:
 YY_RULE_SETUP
 #line 290 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
+{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
        YY_BREAK
 case 91:
 YY_RULE_SETUP
 #line 291 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
        YY_BREAK
 case 92:
 YY_RULE_SETUP
 #line 292 "./util/configlexer.lex"
-{ YDVAR(1, VAR_BOGUS_TTL) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
        YY_BREAK
 case 93:
 YY_RULE_SETUP
 #line 293 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
+{ YDVAR(1, VAR_BOGUS_TTL) }
        YY_BREAK
 case 94:
 YY_RULE_SETUP
 #line 294 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
+{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
        YY_BREAK
 case 95:
 YY_RULE_SETUP
 #line 295 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
+{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
        YY_BREAK
 case 96:
 YY_RULE_SETUP
 #line 296 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
+{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
        YY_BREAK
 case 97:
 YY_RULE_SETUP
 #line 297 "./util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
+{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
        YY_BREAK
 case 98:
 YY_RULE_SETUP
 #line 298 "./util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
+{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
        YY_BREAK
 case 99:
 YY_RULE_SETUP
 #line 299 "./util/configlexer.lex"
-{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
+{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
        YY_BREAK
 case 100:
 YY_RULE_SETUP
 #line 300 "./util/configlexer.lex"
-{ 
-                                 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
+{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
        YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 302 "./util/configlexer.lex"
-{ YDVAR(1, VAR_ADD_HOLDDOWN) }
+#line 301 "./util/configlexer.lex"
+{ 
+                                 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
        YY_BREAK
 case 102:
 YY_RULE_SETUP
 #line 303 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DEL_HOLDDOWN) }
+{ YDVAR(1, VAR_ADD_HOLDDOWN) }
        YY_BREAK
 case 103:
 YY_RULE_SETUP
 #line 304 "./util/configlexer.lex"
-{ YDVAR(1, VAR_KEEP_MISSING) }
+{ YDVAR(1, VAR_DEL_HOLDDOWN) }
        YY_BREAK
 case 104:
 YY_RULE_SETUP
 #line 305 "./util/configlexer.lex"
-{ YDVAR(1, VAR_USE_SYSLOG) }
+{ YDVAR(1, VAR_KEEP_MISSING) }
        YY_BREAK
 case 105:
 YY_RULE_SETUP
 #line 306 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_TIME_ASCII) }
+{ YDVAR(1, VAR_USE_SYSLOG) }
        YY_BREAK
 case 106:
 YY_RULE_SETUP
 #line 307 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_QUERIES) }
+{ YDVAR(1, VAR_LOG_TIME_ASCII) }
        YY_BREAK
 case 107:
 YY_RULE_SETUP
 #line 308 "./util/configlexer.lex"
-{ YDVAR(2, VAR_LOCAL_ZONE) }
+{ YDVAR(1, VAR_LOG_QUERIES) }
        YY_BREAK
 case 108:
 YY_RULE_SETUP
 #line 309 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA) }
+{ YDVAR(2, VAR_LOCAL_ZONE) }
        YY_BREAK
 case 109:
 YY_RULE_SETUP
 #line 310 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
+{ YDVAR(1, VAR_LOCAL_DATA) }
        YY_BREAK
 case 110:
 YY_RULE_SETUP
 #line 311 "./util/configlexer.lex"
-{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
+{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
        YY_BREAK
 case 111:
 YY_RULE_SETUP
 #line 312 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
+{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
        YY_BREAK
 case 112:
 YY_RULE_SETUP
 #line 313 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
+{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
        YY_BREAK
 case 113:
 YY_RULE_SETUP
 #line 314 "./util/configlexer.lex"
-{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
+{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
        YY_BREAK
 case 114:
 YY_RULE_SETUP
 #line 315 "./util/configlexer.lex"
-{ YDVAR(0, VAR_REMOTE_CONTROL) }
+{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
        YY_BREAK
 case 115:
 YY_RULE_SETUP
 #line 316 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_ENABLE) }
+{ YDVAR(0, VAR_REMOTE_CONTROL) }
        YY_BREAK
 case 116:
 YY_RULE_SETUP
 #line 317 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_INTERFACE) }
+{ YDVAR(1, VAR_CONTROL_ENABLE) }
        YY_BREAK
 case 117:
 YY_RULE_SETUP
 #line 318 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_PORT) }
+{ YDVAR(1, VAR_CONTROL_INTERFACE) }
        YY_BREAK
 case 118:
 YY_RULE_SETUP
 #line 319 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_USE_CERT) }
+{ YDVAR(1, VAR_CONTROL_PORT) }
        YY_BREAK
 case 119:
 YY_RULE_SETUP
 #line 320 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_KEY_FILE) }
+{ YDVAR(1, VAR_CONTROL_USE_CERT) }
        YY_BREAK
 case 120:
 YY_RULE_SETUP
 #line 321 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_CERT_FILE) }
+{ YDVAR(1, VAR_SERVER_KEY_FILE) }
        YY_BREAK
 case 121:
 YY_RULE_SETUP
 #line 322 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
+{ YDVAR(1, VAR_SERVER_CERT_FILE) }
        YY_BREAK
 case 122:
 YY_RULE_SETUP
 #line 323 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
+{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
        YY_BREAK
 case 123:
 YY_RULE_SETUP
 #line 324 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PYTHON_SCRIPT) }
+{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
        YY_BREAK
 case 124:
 YY_RULE_SETUP
 #line 325 "./util/configlexer.lex"
-{ YDVAR(0, VAR_PYTHON) }
+{ YDVAR(1, VAR_PYTHON_SCRIPT) }
        YY_BREAK
 case 125:
 YY_RULE_SETUP
 #line 326 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DOMAIN_INSECURE) }
+{ YDVAR(0, VAR_PYTHON) }
        YY_BREAK
 case 126:
 YY_RULE_SETUP
 #line 327 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
+{ YDVAR(1, VAR_DOMAIN_INSECURE) }
        YY_BREAK
 case 127:
 YY_RULE_SETUP
 #line 328 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
+{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
        YY_BREAK
 case 128:
 YY_RULE_SETUP
 #line 329 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_UDP_SIZE) }
+{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
        YY_BREAK
 case 129:
 YY_RULE_SETUP
 #line 330 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_PREFIX) }
+{ YDVAR(1, VAR_MAX_UDP_SIZE) }
        YY_BREAK
 case 130:
 YY_RULE_SETUP
 #line 331 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_SYNTHALL) }
+{ YDVAR(1, VAR_DNS64_PREFIX) }
        YY_BREAK
 case 131:
 YY_RULE_SETUP
 #line 332 "./util/configlexer.lex"
-{ YDVAR(0, VAR_DNSTAP) }
+{ YDVAR(1, VAR_DNS64_SYNTHALL) }
        YY_BREAK
 case 132:
 YY_RULE_SETUP
 #line 333 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_ENABLE) }
+{ YDVAR(0, VAR_DNSTAP) }
        YY_BREAK
 case 133:
 YY_RULE_SETUP
 #line 334 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
+{ YDVAR(1, VAR_DNSTAP_ENABLE) }
        YY_BREAK
 case 134:
 YY_RULE_SETUP
 #line 335 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
+{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
        YY_BREAK
 case 135:
 YY_RULE_SETUP
 #line 336 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
        YY_BREAK
 case 136:
 YY_RULE_SETUP
 #line 337 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
+{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
        YY_BREAK
 case 137:
 YY_RULE_SETUP
 #line 338 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
        YY_BREAK
 case 138:
 YY_RULE_SETUP
 #line 339 "./util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_VERSION) }
+       YY_BREAK
+case 139:
+YY_RULE_SETUP
+#line 340 "./util/configlexer.lex"
 {
                YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
        YY_BREAK
-case 139:
+case 140:
 YY_RULE_SETUP
-#line 341 "./util/configlexer.lex"
+#line 342 "./util/configlexer.lex"
 {
                YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
        YY_BREAK
-case 140:
+case 141:
 YY_RULE_SETUP
-#line 343 "./util/configlexer.lex"
+#line 344 "./util/configlexer.lex"
 {
                YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
        YY_BREAK
-case 141:
+case 142:
 YY_RULE_SETUP
-#line 345 "./util/configlexer.lex"
+#line 346 "./util/configlexer.lex"
 {
                YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
        YY_BREAK
-case 142:
+case 143:
 YY_RULE_SETUP
-#line 347 "./util/configlexer.lex"
+#line 348 "./util/configlexer.lex"
 {
                YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
        YY_BREAK
-case 143:
+case 144:
 YY_RULE_SETUP
-#line 349 "./util/configlexer.lex"
+#line 350 "./util/configlexer.lex"
 {
                YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
        YY_BREAK
-case 144:
-/* rule 144 can match eol */
+case 145:
+/* rule 145 can match eol */
 YY_RULE_SETUP
-#line 351 "./util/configlexer.lex"
+#line 352 "./util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++; }
        YY_BREAK
 /* Quoted strings. Strip leading and ending quotes */
-case 145:
+case 146:
 YY_RULE_SETUP
-#line 354 "./util/configlexer.lex"
+#line 355 "./util/configlexer.lex"
 { BEGIN(quotedstring); LEXOUT(("QS ")); }
        YY_BREAK
 case YY_STATE_EOF(quotedstring):
-#line 355 "./util/configlexer.lex"
+#line 356 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 146:
+case 147:
 YY_RULE_SETUP
-#line 360 "./util/configlexer.lex"
+#line 361 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 147:
-/* rule 147 can match eol */
+case 148:
+/* rule 148 can match eol */
 YY_RULE_SETUP
-#line 361 "./util/configlexer.lex"
+#line 362 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end \""); 
                          cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 148:
+case 149:
 YY_RULE_SETUP
-#line 363 "./util/configlexer.lex"
+#line 364 "./util/configlexer.lex"
 {
         LEXOUT(("QE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -2939,34 +2954,34 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* Single Quoted strings. Strip leading and ending quotes */
-case 149:
+case 150:
 YY_RULE_SETUP
-#line 375 "./util/configlexer.lex"
+#line 376 "./util/configlexer.lex"
 { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
        YY_BREAK
 case YY_STATE_EOF(singlequotedstr):
-#line 376 "./util/configlexer.lex"
+#line 377 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 150:
+case 151:
 YY_RULE_SETUP
-#line 381 "./util/configlexer.lex"
+#line 382 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 151:
-/* rule 151 can match eol */
+case 152:
+/* rule 152 can match eol */
 YY_RULE_SETUP
-#line 382 "./util/configlexer.lex"
+#line 383 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end '"); 
                             cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 152:
+case 153:
 YY_RULE_SETUP
-#line 384 "./util/configlexer.lex"
+#line 385 "./util/configlexer.lex"
 {
         LEXOUT(("SQE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -2979,38 +2994,38 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* include: directive */
-case 153:
+case 154:
 YY_RULE_SETUP
-#line 396 "./util/configlexer.lex"
+#line 397 "./util/configlexer.lex"
 { 
        LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
        YY_BREAK
 case YY_STATE_EOF(include):
-#line 398 "./util/configlexer.lex"
+#line 399 "./util/configlexer.lex"
 {
         yyerror("EOF inside include directive");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 154:
-YY_RULE_SETUP
-#line 402 "./util/configlexer.lex"
-{ LEXOUT(("ISP ")); /* ignore */ }
-       YY_BREAK
 case 155:
-/* rule 155 can match eol */
 YY_RULE_SETUP
 #line 403 "./util/configlexer.lex"
-{ LEXOUT(("NL\n")); cfg_parser->line++;}
+{ LEXOUT(("ISP ")); /* ignore */ }
        YY_BREAK
 case 156:
+/* rule 156 can match eol */
 YY_RULE_SETUP
 #line 404 "./util/configlexer.lex"
-{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+{ LEXOUT(("NL\n")); cfg_parser->line++;}
        YY_BREAK
 case 157:
 YY_RULE_SETUP
 #line 405 "./util/configlexer.lex"
+{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+       YY_BREAK
+case 158:
+YY_RULE_SETUP
+#line 406 "./util/configlexer.lex"
 {
        LEXOUT(("Iunquotedstr(%s) ", yytext));
        config_start_include_glob(yytext);
@@ -3018,27 +3033,27 @@ YY_RULE_SETUP
 }
        YY_BREAK
 case YY_STATE_EOF(include_quoted):
-#line 410 "./util/configlexer.lex"
+#line 411 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 158:
+case 159:
 YY_RULE_SETUP
-#line 414 "./util/configlexer.lex"
+#line 415 "./util/configlexer.lex"
 { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 159:
-/* rule 159 can match eol */
+case 160:
+/* rule 160 can match eol */
 YY_RULE_SETUP
-#line 415 "./util/configlexer.lex"
+#line 416 "./util/configlexer.lex"
 { yyerror("newline before \" in include name"); 
                                  cfg_parser->line++; BEGIN(inc_prev); }
        YY_BREAK
-case 160:
+case 161:
 YY_RULE_SETUP
-#line 417 "./util/configlexer.lex"
+#line 418 "./util/configlexer.lex"
 {
        LEXOUT(("IQE "));
        yytext[yyleng - 1] = '\0';
@@ -3048,7 +3063,7 @@ YY_RULE_SETUP
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(val):
-#line 423 "./util/configlexer.lex"
+#line 424 "./util/configlexer.lex"
 {
        LEXOUT(("LEXEOF "));
        yy_set_bol(1); /* Set beginning of line, so "^" rules match.  */
@@ -3060,33 +3075,33 @@ case YY_STATE_EOF(val):
        }
 }
        YY_BREAK
-case 161:
+case 162:
 YY_RULE_SETUP
-#line 434 "./util/configlexer.lex"
+#line 435 "./util/configlexer.lex"
 { LEXOUT(("unquotedstr(%s) ", yytext)); 
                        if(--num_args == 0) { BEGIN(INITIAL); }
                        yylval.str = strdup(yytext); return STRING_ARG; }
        YY_BREAK
-case 162:
+case 163:
 YY_RULE_SETUP
-#line 438 "./util/configlexer.lex"
+#line 439 "./util/configlexer.lex"
 {
        ub_c_error_msg("unknown keyword '%s'", yytext);
        }
        YY_BREAK
-case 163:
+case 164:
 YY_RULE_SETUP
-#line 442 "./util/configlexer.lex"
+#line 443 "./util/configlexer.lex"
 {
        ub_c_error_msg("stray '%s'", yytext);
        }
        YY_BREAK
-case 164:
+case 165:
 YY_RULE_SETUP
-#line 446 "./util/configlexer.lex"
+#line 447 "./util/configlexer.lex"
 ECHO;
        YY_BREAK
-#line 3088 "<stdout>"
+#line 3103 "<stdout>"
 
        case YY_END_OF_BUFFER:
                {
@@ -3376,7 +3391,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 >= 1628 )
+                       if ( yy_current_state >= 1643 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -3404,11 +3419,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 >= 1628 )
+               if ( yy_current_state >= 1643 )
                        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 == 1627);
+       yy_is_jam = (yy_current_state == 1642);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -4041,7 +4056,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 446 "./util/configlexer.lex"
+#line 447 "./util/configlexer.lex"
 
 
 
index dbde8113c491ef5cc68c940684cee1a7679a121f..c2b00ceeb24e82a49097bcf7161378867435088c 100644 (file)
@@ -256,6 +256,7 @@ harden-glue{COLON}          { YDVAR(1, VAR_HARDEN_GLUE) }
 harden-dnssec-stripped{COLON}  { YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
 harden-below-nxdomain{COLON}   { YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
 harden-referral-path{COLON}    { YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
+harden-algo-downgrade{COLON}   { YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) }
 use-caps-for-id{COLON}         { YDVAR(1, VAR_USE_CAPS_FOR_ID) }
 unwanted-reply-threshold{COLON}        { YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
 private-address{COLON}         { YDVAR(1, VAR_PRIVATE_ADDRESS) }
index 09df3f34531d18d1282816d425fcb44fbe74a1bd..476449fc08b5f066278696ea084984100bec36cd 100644 (file)
@@ -274,7 +274,8 @@ extern int yydebug;
      VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 402,
      VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 403,
      VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 404,
-     VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 405
+     VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 405,
+     VAR_HARDEN_ALGO_DOWNGRADE = 406
    };
 #endif
 /* Tokens.  */
@@ -426,6 +427,7 @@ extern int yydebug;
 #define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 403
 #define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 404
 #define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 405
+#define VAR_HARDEN_ALGO_DOWNGRADE 406
 
 
 
@@ -439,7 +441,7 @@ typedef union YYSTYPE
 
 
 /* Line 387 of yacc.c  */
-#line 443 "util/configparser.c"
+#line 445 "util/configparser.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -467,7 +469,7 @@ int yyparse ();
 /* Copy the second part of user declarations.  */
 
 /* Line 390 of yacc.c  */
-#line 471 "util/configparser.c"
+#line 473 "util/configparser.c"
 
 #ifdef short
 # undef short
@@ -687,20 +689,20 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   280
+#define YYLAST   281
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  151
+#define YYNTOKENS  152
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  156
+#define YYNNTS  157
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  297
+#define YYNRULES  299
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  435
+#define YYNSTATES  438
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   405
+#define YYMAXUTOK   406
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -748,7 +750,7 @@ static const yytype_uint8 yytranslate[] =
      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
+     145,   146,   147,   148,   149,   150,   151
 };
 
 #if YYDEBUG
@@ -768,138 +770,139 @@ static const yytype_uint16 yyprhs[] =
      185,   187,   189,   191,   193,   195,   197,   199,   201,   203,
      205,   207,   209,   211,   213,   215,   217,   219,   221,   223,
      225,   227,   229,   231,   233,   235,   237,   239,   241,   243,
-     246,   247,   249,   251,   253,   255,   257,   259,   262,   263,
-     265,   267,   269,   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,   394,   397,   400,   403,   406,   409,
-     412,   415,   418,   421,   424,   427,   430,   433,   436,   439,
-     442,   445,   448,   451,   454,   457,   460,   463,   466,   469,
-     472,   475,   478,   481,   484,   487,   490,   493,   496,   499,
-     502,   505,   509,   512,   515,   518,   521,   524,   527,   530,
-     533,   536,   539,   542,   545,   548,   551,   554,   557,   560,
-     563,   567,   570,   573,   576,   579,   582,   585,   588,   591,
-     594,   597,   600,   603,   606,   609,   612,   615,   617,   620,
-     621,   623,   625,   627,   629,   631,   633,   635,   637,   640,
-     643,   646,   649,   652,   655,   658,   661,   663,   666,   667,
-     669,   671,   673,   675,   677,   679,   681,   683,   685,   687,
-     689,   691,   694,   697,   700,   703,   706,   709,   712,   715,
-     718,   721,   724,   727,   729,   732,   733,   735
+     245,   248,   249,   251,   253,   255,   257,   259,   261,   264,
+     265,   267,   269,   271,   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,   390,   393,   396,   399,   402,   405,   408,
+     411,   414,   417,   420,   423,   426,   429,   432,   435,   438,
+     441,   444,   447,   450,   453,   456,   459,   462,   465,   468,
+     471,   474,   477,   480,   483,   486,   489,   492,   495,   498,
+     501,   504,   507,   510,   514,   517,   520,   523,   526,   529,
+     532,   535,   538,   541,   544,   547,   550,   553,   556,   559,
+     562,   565,   568,   572,   575,   578,   581,   584,   587,   590,
+     593,   596,   599,   602,   605,   608,   611,   614,   617,   620,
+     622,   625,   626,   628,   630,   632,   634,   636,   638,   640,
+     642,   645,   648,   651,   654,   657,   660,   663,   666,   668,
+     671,   672,   674,   676,   678,   680,   682,   684,   686,   688,
+     690,   692,   694,   696,   699,   702,   705,   708,   711,   714,
+     717,   720,   723,   726,   729,   732,   734,   737,   738,   740
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     152,     0,    -1,    -1,   152,   153,    -1,   154,   155,    -1,
-     157,   158,    -1,   160,   161,    -1,   303,   304,    -1,   277,
-     278,    -1,   288,   289,    -1,    11,    -1,   155,   156,    -1,
-      -1,   163,    -1,   164,    -1,   168,    -1,   171,    -1,   177,
-      -1,   178,    -1,   179,    -1,   180,    -1,   169,    -1,   190,
-      -1,   191,    -1,   192,    -1,   193,    -1,   194,    -1,   212,
-      -1,   213,    -1,   214,    -1,   218,    -1,   219,    -1,   174,
-      -1,   220,    -1,   221,    -1,   224,    -1,   222,    -1,   223,
-      -1,   226,    -1,   227,    -1,   228,    -1,   239,    -1,   203,
-      -1,   204,    -1,   205,    -1,   206,    -1,   229,    -1,   242,
-      -1,   199,    -1,   201,    -1,   243,    -1,   248,    -1,   249,
-      -1,   250,    -1,   175,    -1,   211,    -1,   257,    -1,   258,
-      -1,   200,    -1,   253,    -1,   187,    -1,   170,    -1,   195,
-      -1,   240,    -1,   246,    -1,   230,    -1,   241,    -1,   260,
-      -1,   261,    -1,   176,    -1,   165,    -1,   186,    -1,   233,
-      -1,   166,    -1,   172,    -1,   173,    -1,   196,    -1,   197,
-      -1,   259,    -1,   232,    -1,   234,    -1,   235,    -1,   167,
-      -1,   262,    -1,   215,    -1,   238,    -1,   188,    -1,   202,
-      -1,   244,    -1,   245,    -1,   247,    -1,   252,    -1,   198,
-      -1,   254,    -1,   255,    -1,   256,    -1,   207,    -1,   210,
-      -1,   236,    -1,   237,    -1,   208,    -1,   231,    -1,   251,
-      -1,   189,    -1,   181,    -1,   182,    -1,   183,    -1,   184,
-      -1,   185,    -1,   263,    -1,   264,    -1,   265,    -1,   209,
-      -1,   216,    -1,   217,    -1,   266,    -1,   267,    -1,   225,
-      -1,    38,    -1,   158,   159,    -1,    -1,   268,    -1,   269,
-      -1,   270,    -1,   272,    -1,   271,    -1,    44,    -1,   161,
-     162,    -1,    -1,   273,    -1,   274,    -1,   275,    -1,   276,
-      -1,    13,    10,    -1,    12,    10,    -1,    76,    10,    -1,
-      79,    10,    -1,    97,    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,   123,    10,    -1,   124,    10,
-      -1,   125,    10,    -1,   126,    10,    -1,   127,    10,    -1,
-      77,    10,    -1,    66,    10,    -1,   102,    10,    -1,   122,
-      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,   110,    10,    -1,    54,
-      10,    -1,    64,    10,    -1,    55,    10,    -1,   103,    10,
-      -1,    48,    10,    -1,    49,    10,    -1,    50,    10,    -1,
-      51,    10,    -1,   114,    10,    -1,   118,    10,    -1,   119,
-      10,    -1,   115,    10,    -1,    61,    10,    -1,    26,    10,
-      -1,    27,    10,    -1,    28,    10,    -1,    99,    10,    -1,
-     133,    10,    -1,   134,    10,    -1,    29,    10,    -1,    30,
-      10,    -1,    32,    10,    -1,    33,    10,    -1,    35,    10,
-      -1,    36,    10,    -1,    34,    10,    -1,   135,    10,    -1,
-      41,    10,    -1,    42,    10,    -1,    43,    10,    -1,    52,
-      10,    -1,    71,    10,    -1,   120,    10,    -1,    85,    10,
-      -1,    78,    10,    -1,    86,    10,    -1,    87,    10,    -1,
-     116,    10,    -1,   117,    10,    -1,   101,    10,    -1,    47,
-      10,    -1,    69,    10,    -1,    72,    10,    10,    -1,    53,
-      10,    -1,    56,    10,    -1,   106,    10,    -1,   107,    10,
-      -1,    70,    10,    -1,   108,    10,    -1,    57,    10,    -1,
-      58,    10,    -1,    59,    10,    -1,   121,    10,    -1,   109,
-      10,    -1,    65,    10,    -1,   112,    10,    -1,   113,    10,
-      -1,   111,    10,    -1,    62,    10,    -1,    63,    10,    -1,
-      84,    10,    -1,    73,    10,    10,    -1,    74,    10,    -1,
-      98,    10,    -1,   130,    10,    -1,   131,    10,    -1,   132,
-      10,    -1,   136,    10,    -1,   137,    10,    -1,    37,    10,
-      -1,    39,    10,    -1,    40,    10,    -1,   129,    10,    -1,
-     100,    10,    -1,    37,    10,    -1,    45,    10,    -1,    46,
-      10,    -1,   128,    10,    -1,    88,    -1,   278,   279,    -1,
-      -1,   280,    -1,   282,    -1,   281,    -1,   284,    -1,   285,
-      -1,   286,    -1,   287,    -1,   283,    -1,    89,    10,    -1,
-      91,    10,    -1,    90,    10,    -1,    96,    10,    -1,    92,
-      10,    -1,    93,    10,    -1,    94,    10,    -1,    95,    10,
-      -1,   138,    -1,   289,   290,    -1,    -1,   291,    -1,   292,
-      -1,   293,    -1,   294,    -1,   295,    -1,   296,    -1,   297,
-      -1,   298,    -1,   299,    -1,   300,    -1,   301,    -1,   302,
-      -1,   139,    10,    -1,   140,    10,    -1,   141,    10,    -1,
-     142,    10,    -1,   143,    10,    -1,   144,    10,    -1,   145,
-      10,    -1,   146,    10,    -1,   147,    10,    -1,   148,    10,
-      -1,   149,    10,    -1,   150,    10,    -1,   104,    -1,   304,
-     305,    -1,    -1,   306,    -1,   105,    10,    -1
+     153,     0,    -1,    -1,   153,   154,    -1,   155,   156,    -1,
+     158,   159,    -1,   161,   162,    -1,   305,   306,    -1,   279,
+     280,    -1,   290,   291,    -1,    11,    -1,   156,   157,    -1,
+      -1,   164,    -1,   165,    -1,   169,    -1,   172,    -1,   178,
+      -1,   179,    -1,   180,    -1,   181,    -1,   170,    -1,   191,
+      -1,   192,    -1,   193,    -1,   194,    -1,   195,    -1,   213,
+      -1,   214,    -1,   215,    -1,   219,    -1,   220,    -1,   175,
+      -1,   221,    -1,   222,    -1,   225,    -1,   223,    -1,   224,
+      -1,   227,    -1,   228,    -1,   229,    -1,   241,    -1,   204,
+      -1,   205,    -1,   206,    -1,   207,    -1,   230,    -1,   244,
+      -1,   200,    -1,   202,    -1,   245,    -1,   250,    -1,   251,
+      -1,   252,    -1,   176,    -1,   212,    -1,   259,    -1,   260,
+      -1,   201,    -1,   255,    -1,   188,    -1,   171,    -1,   196,
+      -1,   242,    -1,   248,    -1,   231,    -1,   243,    -1,   262,
+      -1,   263,    -1,   177,    -1,   166,    -1,   187,    -1,   235,
+      -1,   167,    -1,   173,    -1,   174,    -1,   197,    -1,   198,
+      -1,   261,    -1,   233,    -1,   236,    -1,   237,    -1,   168,
+      -1,   264,    -1,   216,    -1,   240,    -1,   189,    -1,   203,
+      -1,   246,    -1,   247,    -1,   249,    -1,   254,    -1,   199,
+      -1,   256,    -1,   257,    -1,   258,    -1,   208,    -1,   211,
+      -1,   238,    -1,   239,    -1,   209,    -1,   232,    -1,   253,
+      -1,   190,    -1,   182,    -1,   183,    -1,   184,    -1,   185,
+      -1,   186,    -1,   265,    -1,   266,    -1,   267,    -1,   210,
+      -1,   217,    -1,   218,    -1,   268,    -1,   269,    -1,   226,
+      -1,   234,    -1,    38,    -1,   159,   160,    -1,    -1,   270,
+      -1,   271,    -1,   272,    -1,   274,    -1,   273,    -1,    44,
+      -1,   162,   163,    -1,    -1,   275,    -1,   276,    -1,   277,
+      -1,   278,    -1,    13,    10,    -1,    12,    10,    -1,    76,
+      10,    -1,    79,    10,    -1,    97,    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,   123,    10,    -1,
+     124,    10,    -1,   125,    10,    -1,   126,    10,    -1,   127,
+      10,    -1,    77,    10,    -1,    66,    10,    -1,   102,    10,
+      -1,   122,    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,   110,    10,
+      -1,    54,    10,    -1,    64,    10,    -1,    55,    10,    -1,
+     103,    10,    -1,    48,    10,    -1,    49,    10,    -1,    50,
+      10,    -1,    51,    10,    -1,   114,    10,    -1,   118,    10,
+      -1,   119,    10,    -1,   115,    10,    -1,    61,    10,    -1,
+      26,    10,    -1,    27,    10,    -1,    28,    10,    -1,    99,
+      10,    -1,   133,    10,    -1,   134,    10,    -1,    29,    10,
+      -1,    30,    10,    -1,    32,    10,    -1,    33,    10,    -1,
+      35,    10,    -1,    36,    10,    -1,    34,    10,    -1,   135,
+      10,    -1,    41,    10,    -1,    42,    10,    -1,    43,    10,
+      -1,    52,    10,    -1,    71,    10,    -1,   120,    10,    -1,
+      85,    10,    -1,   151,    10,    -1,    78,    10,    -1,    86,
+      10,    -1,    87,    10,    -1,   116,    10,    -1,   117,    10,
+      -1,   101,    10,    -1,    47,    10,    -1,    69,    10,    -1,
+      72,    10,    10,    -1,    53,    10,    -1,    56,    10,    -1,
+     106,    10,    -1,   107,    10,    -1,    70,    10,    -1,   108,
+      10,    -1,    57,    10,    -1,    58,    10,    -1,    59,    10,
+      -1,   121,    10,    -1,   109,    10,    -1,    65,    10,    -1,
+     112,    10,    -1,   113,    10,    -1,   111,    10,    -1,    62,
+      10,    -1,    63,    10,    -1,    84,    10,    -1,    73,    10,
+      10,    -1,    74,    10,    -1,    98,    10,    -1,   130,    10,
+      -1,   131,    10,    -1,   132,    10,    -1,   136,    10,    -1,
+     137,    10,    -1,    37,    10,    -1,    39,    10,    -1,    40,
+      10,    -1,   129,    10,    -1,   100,    10,    -1,    37,    10,
+      -1,    45,    10,    -1,    46,    10,    -1,   128,    10,    -1,
+      88,    -1,   280,   281,    -1,    -1,   282,    -1,   284,    -1,
+     283,    -1,   286,    -1,   287,    -1,   288,    -1,   289,    -1,
+     285,    -1,    89,    10,    -1,    91,    10,    -1,    90,    10,
+      -1,    96,    10,    -1,    92,    10,    -1,    93,    10,    -1,
+      94,    10,    -1,    95,    10,    -1,   138,    -1,   291,   292,
+      -1,    -1,   293,    -1,   294,    -1,   295,    -1,   296,    -1,
+     297,    -1,   298,    -1,   299,    -1,   300,    -1,   301,    -1,
+     302,    -1,   303,    -1,   304,    -1,   139,    10,    -1,   140,
+      10,    -1,   141,    10,    -1,   142,    10,    -1,   143,    10,
+      -1,   144,    10,    -1,   145,    10,    -1,   146,    10,    -1,
+     147,    10,    -1,   148,    10,    -1,   149,    10,    -1,   150,
+      10,    -1,   104,    -1,   306,   307,    -1,    -1,   308,    -1,
+     105,    10,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   123,   123,   123,   124,   124,   125,   125,   126,   126,
-     130,   135,   136,   137,   137,   137,   138,   138,   139,   139,
-     139,   140,   140,   140,   141,   141,   141,   142,   142,   143,
-     143,   144,   144,   145,   145,   146,   146,   147,   147,   148,
-     148,   149,   149,   150,   150,   150,   151,   151,   151,   152,
-     152,   152,   153,   153,   154,   154,   155,   155,   156,   156,
-     157,   157,   157,   158,   158,   159,   159,   160,   160,   160,
-     161,   161,   162,   162,   163,   163,   164,   164,   164,   165,
-     165,   166,   166,   167,   167,   168,   168,   169,   169,   170,
-     170,   170,   171,   171,   172,   172,   172,   173,   173,   173,
-     174,   174,   174,   175,   175,   175,   176,   176,   176,   177,
-     177,   177,   178,   178,   178,   179,   179,   180,   182,   194,
-     195,   196,   196,   196,   196,   196,   198,   210,   211,   212,
-     212,   212,   212,   214,   223,   232,   243,   252,   261,   270,
-     283,   298,   307,   316,   325,   334,   343,   352,   361,   370,
-     379,   388,   397,   406,   413,   420,   429,   438,   452,   461,
-     470,   477,   484,   491,   499,   506,   513,   520,   527,   535,
-     543,   551,   558,   565,   574,   583,   590,   597,   605,   613,
-     623,   636,   647,   655,   668,   677,   686,   695,   705,   713,
-     726,   735,   743,   752,   760,   773,   782,   789,   799,   809,
-     819,   829,   839,   849,   859,   866,   873,   882,   891,   900,
-     907,   917,   934,   941,   959,   972,   985,   994,  1003,  1012,
-    1022,  1032,  1041,  1050,  1057,  1066,  1075,  1084,  1092,  1105,
-    1113,  1136,  1143,  1158,  1168,  1178,  1185,  1192,  1201,  1211,
-    1218,  1225,  1234,  1244,  1254,  1261,  1268,  1277,  1282,  1283,
-    1284,  1284,  1284,  1285,  1285,  1285,  1286,  1286,  1288,  1298,
-    1307,  1314,  1324,  1331,  1338,  1345,  1352,  1357,  1358,  1359,
-    1359,  1360,  1360,  1361,  1361,  1362,  1363,  1364,  1365,  1366,
-    1367,  1369,  1377,  1384,  1392,  1400,  1407,  1414,  1423,  1432,
-    1441,  1450,  1459,  1468,  1473,  1474,  1475,  1477
+       0,   124,   124,   124,   125,   125,   126,   126,   127,   127,
+     131,   136,   137,   138,   138,   138,   139,   139,   140,   140,
+     140,   141,   141,   141,   142,   142,   142,   143,   143,   144,
+     144,   145,   145,   146,   146,   147,   147,   148,   148,   149,
+     149,   150,   150,   151,   151,   151,   152,   152,   152,   153,
+     153,   153,   154,   154,   155,   155,   156,   156,   157,   157,
+     158,   158,   158,   159,   159,   160,   160,   161,   161,   161,
+     162,   162,   163,   163,   164,   164,   165,   165,   165,   166,
+     166,   167,   167,   168,   168,   169,   169,   170,   170,   171,
+     171,   171,   172,   172,   173,   173,   173,   174,   174,   174,
+     175,   175,   175,   176,   176,   176,   177,   177,   177,   178,
+     178,   178,   179,   179,   179,   180,   180,   181,   181,   183,
+     195,   196,   197,   197,   197,   197,   197,   199,   211,   212,
+     213,   213,   213,   213,   215,   224,   233,   244,   253,   262,
+     271,   284,   299,   308,   317,   326,   335,   344,   353,   362,
+     371,   380,   389,   398,   407,   414,   421,   430,   439,   453,
+     462,   471,   478,   485,   492,   500,   507,   514,   521,   528,
+     536,   544,   552,   559,   566,   575,   584,   591,   598,   606,
+     614,   624,   637,   648,   656,   669,   678,   687,   696,   706,
+     714,   727,   736,   744,   753,   761,   774,   783,   790,   800,
+     810,   820,   830,   840,   850,   860,   870,   877,   884,   893,
+     902,   911,   918,   928,   945,   952,   970,   983,   996,  1005,
+    1014,  1023,  1033,  1043,  1052,  1061,  1068,  1077,  1086,  1095,
+    1103,  1116,  1124,  1147,  1154,  1169,  1179,  1189,  1196,  1203,
+    1212,  1222,  1229,  1236,  1245,  1255,  1265,  1272,  1279,  1288,
+    1293,  1294,  1295,  1295,  1295,  1296,  1296,  1296,  1297,  1297,
+    1299,  1309,  1318,  1325,  1335,  1342,  1349,  1356,  1363,  1368,
+    1369,  1370,  1370,  1371,  1371,  1372,  1372,  1373,  1374,  1375,
+    1376,  1377,  1378,  1380,  1388,  1395,  1403,  1411,  1418,  1425,
+    1434,  1443,  1452,  1461,  1470,  1479,  1484,  1485,  1486,  1488
 };
 #endif
 
@@ -960,17 +963,18 @@ static const char *const yytname[] =
   "VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES",
   "VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES",
   "VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES",
-  "VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES", "$accept", "toplevelvars",
-  "toplevelvar", "serverstart", "contents_server", "content_server",
-  "stubstart", "contents_stub", "content_stub", "forwardstart",
-  "contents_forward", "content_forward", "server_num_threads",
-  "server_verbosity", "server_statistics_interval",
-  "server_statistics_cumulative", "server_extended_statistics",
-  "server_port", "server_interface", "server_outgoing_interface",
-  "server_outgoing_range", "server_outgoing_port_permit",
-  "server_outgoing_port_avoid", "server_outgoing_num_tcp",
-  "server_incoming_num_tcp", "server_interface_automatic", "server_do_ip4",
-  "server_do_ip6", "server_do_udp", "server_do_tcp", "server_tcp_upstream",
+  "VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES",
+  "VAR_HARDEN_ALGO_DOWNGRADE", "$accept", "toplevelvars", "toplevelvar",
+  "serverstart", "contents_server", "content_server", "stubstart",
+  "contents_stub", "content_stub", "forwardstart", "contents_forward",
+  "content_forward", "server_num_threads", "server_verbosity",
+  "server_statistics_interval", "server_statistics_cumulative",
+  "server_extended_statistics", "server_port", "server_interface",
+  "server_outgoing_interface", "server_outgoing_range",
+  "server_outgoing_port_permit", "server_outgoing_port_avoid",
+  "server_outgoing_num_tcp", "server_incoming_num_tcp",
+  "server_interface_automatic", "server_do_ip4", "server_do_ip6",
+  "server_do_udp", "server_do_tcp", "server_tcp_upstream",
   "server_ssl_upstream", "server_ssl_service_key",
   "server_ssl_service_pem", "server_ssl_port", "server_do_daemonize",
   "server_use_syslog", "server_log_time_ascii", "server_log_queries",
@@ -992,14 +996,14 @@ static const char *const yytname[] =
   "server_target_fetch_policy", "server_harden_short_bufsize",
   "server_harden_large_queries", "server_harden_glue",
   "server_harden_dnssec_stripped", "server_harden_below_nxdomain",
-  "server_harden_referral_path", "server_use_caps_for_id",
-  "server_private_address", "server_private_domain", "server_prefetch",
-  "server_prefetch_key", "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_val_sig_skew_min",
-  "server_val_sig_skew_max", "server_cache_max_ttl",
-  "server_cache_min_ttl", "server_bogus_ttl",
+  "server_harden_referral_path", "server_harden_algo_downgrade",
+  "server_use_caps_for_id", "server_private_address",
+  "server_private_domain", "server_prefetch", "server_prefetch_key",
+  "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_val_sig_skew_min", "server_val_sig_skew_max",
+  "server_cache_max_ttl", "server_cache_min_ttl", "server_bogus_ttl",
   "server_val_clean_additional", "server_val_permissive_mode",
   "server_ignore_cd_flag", "server_val_log_level",
   "server_val_nsec3_keysize_iterations", "server_add_holddown",
@@ -1046,27 +1050,27 @@ static const yytype_uint16 yytoknum[] =
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
-     405
+     405,   406
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   151,   152,   152,   153,   153,   153,   153,   153,   153,
-     154,   155,   155,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,   156,   157,   158,
-     158,   159,   159,   159,   159,   159,   160,   161,   161,   162,
-     162,   162,   162,   163,   164,   165,   166,   167,   168,   169,
+       0,   152,   153,   153,   154,   154,   154,   154,   154,   154,
+     155,   156,   156,   157,   157,   157,   157,   157,   157,   157,
+     157,   157,   157,   157,   157,   157,   157,   157,   157,   157,
+     157,   157,   157,   157,   157,   157,   157,   157,   157,   157,
+     157,   157,   157,   157,   157,   157,   157,   157,   157,   157,
+     157,   157,   157,   157,   157,   157,   157,   157,   157,   157,
+     157,   157,   157,   157,   157,   157,   157,   157,   157,   157,
+     157,   157,   157,   157,   157,   157,   157,   157,   157,   157,
+     157,   157,   157,   157,   157,   157,   157,   157,   157,   157,
+     157,   157,   157,   157,   157,   157,   157,   157,   157,   157,
+     157,   157,   157,   157,   157,   157,   157,   157,   157,   157,
+     157,   157,   157,   157,   157,   157,   157,   157,   157,   158,
+     159,   159,   160,   160,   160,   160,   160,   161,   162,   162,
+     163,   163,   163,   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,   192,   193,   194,   195,   196,   197,   198,   199,
@@ -1077,12 +1081,12 @@ static const yytype_uint16 yyr1[] =
      240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
      250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
      260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
-     270,   271,   272,   273,   274,   275,   276,   277,   278,   278,
-     279,   279,   279,   279,   279,   279,   279,   279,   280,   281,
-     282,   283,   284,   285,   286,   287,   288,   289,   289,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,   303,   304,   304,   305,   306
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   280,   281,   281,   281,   281,   281,   281,   281,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     291,   292,   292,   292,   292,   292,   292,   292,   292,   292,
+     292,   292,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   306,   307,   308
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1099,9 +1103,9 @@ 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,     1,     2,
-       0,     1,     1,     1,     1,     1,     1,     2,     0,     1,
-       1,     1,     1,     2,     2,     2,     2,     2,     2,     2,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       2,     0,     1,     1,     1,     1,     1,     1,     2,     0,
+       1,     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,
@@ -1109,15 +1113,15 @@ static const yytype_uint8 yyr2[] =
        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,     2,     3,     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,     2,     2,     2,     2,     2,     2,     1,     2,     0,
-       1,     1,     1,     1,     1,     1,     1,     1,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     0,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     1,     2,     0,     1,     2
+       2,     2,     3,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     1,
+       2,     0,     1,     1,     1,     1,     1,     1,     1,     1,
+       2,     2,     2,     2,     2,     2,     2,     2,     1,     2,
+       0,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     1,     2,     0,     1,     2
 };
 
 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
@@ -1125,8 +1129,8 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       2,     0,     1,    10,   118,   126,   247,   293,   266,     3,
-      12,   120,   128,   249,   268,   295,     4,     5,     6,     8,
+       2,     0,     1,    10,   119,   127,   249,   295,   268,     3,
+      12,   121,   129,   251,   270,   297,     4,     5,     6,     8,
        9,     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,
@@ -1137,131 +1141,131 @@ static const yytype_uint16 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,     0,     0,     0,    11,    13,    14,
-      70,    73,    82,    15,    21,    61,    16,    74,    75,    32,
-      54,    69,    17,    18,    19,    20,   104,   105,   106,   107,
-     108,    71,    60,    86,   103,    22,    23,    24,    25,    26,
-      62,    76,    77,    92,    48,    58,    49,    87,    42,    43,
-      44,    45,    96,   100,   112,    97,    55,    27,    28,    29,
-      84,   113,   114,    30,    31,    33,    34,    36,    37,    35,
-     117,    38,    39,    40,    46,    65,   101,    79,    72,    80,
-      81,    98,    99,    85,    41,    63,    66,    47,    50,    88,
-      89,    64,    90,    51,    52,    53,   102,    91,    59,    93,
-      94,    95,    56,    57,    78,    67,    68,    83,   109,   110,
-     111,   115,   116,     0,     0,     0,     0,     0,   119,   121,
-     122,   123,   125,   124,     0,     0,     0,     0,   127,   129,
-     130,   131,   132,     0,     0,     0,     0,     0,     0,     0,
-       0,   248,   250,   252,   251,   257,   253,   254,   255,   256,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   267,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,     0,   294,   296,   134,   133,
-     138,   141,   139,   147,   148,   149,   150,   160,   161,   162,
-     163,   164,   182,   183,   184,   188,   189,   144,   190,   191,
-     194,   192,   193,   196,   197,   198,   209,   173,   174,   175,
-     176,   199,   212,   169,   171,   213,   218,   219,   220,   145,
-     181,   227,   228,   170,   223,   157,   140,   165,   210,   216,
-     200,     0,     0,   231,   146,   135,   156,   203,   136,   142,
-     143,   166,   167,   229,   202,   204,   205,   137,   232,   185,
-     208,   158,   172,   214,   215,   217,   222,   168,   226,   224,
-     225,   177,   180,   206,   207,   178,   179,   201,   221,   159,
-     151,   152,   153,   154,   155,   233,   234,   235,   186,   187,
-     195,   236,   237,   238,   239,   240,   242,   241,   243,   244,
-     245,   246,   258,   260,   259,   262,   263,   264,   265,   261,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   297,   211,   230
+       0,     0,     0,     0,     0,     0,     0,     0,    11,    13,
+      14,    70,    73,    82,    15,    21,    61,    16,    74,    75,
+      32,    54,    69,    17,    18,    19,    20,   104,   105,   106,
+     107,   108,    71,    60,    86,   103,    22,    23,    24,    25,
+      26,    62,    76,    77,    92,    48,    58,    49,    87,    42,
+      43,    44,    45,    96,   100,   112,    97,    55,    27,    28,
+      29,    84,   113,   114,    30,    31,    33,    34,    36,    37,
+      35,   117,    38,    39,    40,    46,    65,   101,    79,   118,
+      72,    80,    81,    98,    99,    85,    41,    63,    66,    47,
+      50,    88,    89,    64,    90,    51,    52,    53,   102,    91,
+      59,    93,    94,    95,    56,    57,    78,    67,    68,    83,
+     109,   110,   111,   115,   116,     0,     0,     0,     0,     0,
+     120,   122,   123,   124,   126,   125,     0,     0,     0,     0,
+     128,   130,   131,   132,   133,     0,     0,     0,     0,     0,
+       0,     0,     0,   250,   252,   254,   253,   259,   255,   256,
+     257,   258,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   269,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,     0,   296,   298,
+     135,   134,   139,   142,   140,   148,   149,   150,   151,   161,
+     162,   163,   164,   165,   183,   184,   185,   189,   190,   145,
+     191,   192,   195,   193,   194,   197,   198,   199,   211,   174,
+     175,   176,   177,   200,   214,   170,   172,   215,   220,   221,
+     222,   146,   182,   229,   230,   171,   225,   158,   141,   166,
+     212,   218,   201,     0,     0,   233,   147,   136,   157,   205,
+     137,   143,   144,   167,   168,   231,   203,   206,   207,   138,
+     234,   186,   210,   159,   173,   216,   217,   219,   224,   169,
+     228,   226,   227,   178,   181,   208,   209,   179,   180,   202,
+     223,   160,   152,   153,   154,   155,   156,   235,   236,   237,
+     187,   188,   196,   238,   239,   204,   240,   241,   242,   244,
+     243,   245,   246,   247,   248,   260,   262,   261,   264,   265,
+     266,   267,   263,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   299,   213,   232
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,     9,    10,    16,   127,    11,    17,   238,    12,
-      18,   248,   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,   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,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   239,   240,   241,
-     242,   243,   249,   250,   251,   252,    13,    19,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,    14,    20,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,    15,    21,   296,   297
+      -1,     1,     9,    10,    16,   128,    11,    17,   240,    12,
+      18,   250,   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,   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,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
+     227,   228,   229,   230,   231,   232,   233,   234,   241,   242,
+     243,   244,   245,   251,   252,   253,   254,    13,    19,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,    14,    20,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,    15,    21,   298,   299
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -125
+#define YYPACT_NINF -81
 static const yytype_int16 yypact[] =
 {
-    -125,     0,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,    93,   -36,   -32,   -62,
-    -124,  -103,    -4,    -3,    -2,    -1,     2,    25,    26,    27,
-      29,    30,    31,    32,    33,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    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,    84,    85,    87,    88,    89,    90,    91,    92,   120,
-     121,   122,   123,   127,   129,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   183,   187,   188,   211,   212,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   235,   236,   237,   238,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,   239,   240,   241,   242,   243,  -125,  -125,
-    -125,  -125,  -125,  -125,   244,   245,   246,   247,  -125,  -125,
-    -125,  -125,  -125,   248,   249,   250,   251,   252,   253,   254,
-     255,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,   268,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,   269,   270,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125
+     -81,   116,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -12,    40,    47,    39,
+       2,   -80,    16,    17,    18,    22,    23,    24,    66,    68,
+      71,    72,    73,    78,   107,   126,   127,   128,   143,   145,
+     146,   147,   148,   149,   151,   152,   153,   154,   155,   156,
+     157,   158,   160,   161,   162,   163,   164,   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,   192,   193,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   239,   240,   241,   242,   243,
+     -81,   -81,   -81,   -81,   -81,   -81,   245,   246,   247,   248,
+     -81,   -81,   -81,   -81,   -81,   249,   250,   251,   252,   253,
+     254,   255,   256,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   269,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   270,   271,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int8 yypgoto[] =
 {
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
-    -125,  -125,  -125,  -125,  -125,  -125
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -1270,83 +1274,83 @@ static const yytype_int8 yypgoto[] =
 #define YYTABLE_NINF -1
 static const yytype_uint16 yytable[] =
 {
-       2,   233,   295,   234,   235,   244,   298,   299,   300,   301,
-       0,     3,   302,   245,   246,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   253,   254,   255,
-     256,   257,   258,   259,   260,   303,   304,   305,     4,   306,
-     307,   308,   309,   310,     5,   311,   312,   313,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
-     326,   327,   328,   329,   236,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   348,   349,   350,   351,   352,     6,   353,
-     354,   355,   356,   237,   357,   358,   247,   359,   360,   361,
-     362,   363,   364,     0,     7,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-     365,   366,   367,   368,    47,    48,    49,   369,     8,   370,
-      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,    88,    89,
-      90,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-      91,    92,    93,   380,    94,    95,    96,   381,   382,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   383,   384,   119,   120,   121,   122,   123,   124,   125,
-     126,   385,   386,   387,   388,   389,   390,   391,   392,   393,
-     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
-     404,   405,   406,   407,   408,   409,   410,   411,   412,   413,
-     414,   415,   416,   417,   418,   419,   420,   421,   422,   423,
-     424,   425,   426,   427,   428,   429,   430,   431,   432,   433,
-     434
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,   297,   300,   301,   302,    47,
+      48,    49,   303,   304,   305,    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,    88,    89,    90,   306,   235,   307,   236,
+     237,   308,   309,   310,   246,    91,    92,    93,   311,    94,
+      95,    96,   247,   248,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,     2,   312,   119,   120,
+     121,   122,   123,   124,   125,   126,     0,     3,   255,   256,
+     257,   258,   259,   260,   261,   262,   313,   314,   315,   127,
+     238,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   316,     4,   317,   318,   319,   320,   321,
+       5,   322,   323,   324,   325,   326,   327,   328,   329,   239,
+     330,   331,   332,   333,   334,   249,   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,   360,   361,   362,     6,   363,   364,   365,   366,   367,
+     368,   369,   370,   371,   372,   373,   374,   375,   376,   377,
+       7,   378,   379,   380,   381,   382,   383,   384,   385,   386,
+     387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+     397,   398,   399,   400,   401,   402,   403,   404,   405,   406,
+     407,   408,   409,   410,     8,   411,   412,   413,   414,   415,
+     416,   417,   418,   419,   420,   421,   422,   423,   424,   425,
+     426,   427,   428,   429,   430,   431,   432,   433,   434,   435,
+     436,   437
 };
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-125)))
+  (!!((Yystate) == (-81)))
 
 #define yytable_value_is_error(Yytable_value) \
   YYID (0)
 
 static const yytype_int16 yycheck[] =
 {
-       0,    37,   105,    39,    40,    37,    10,    10,    10,    10,
-      -1,    11,    10,    45,    46,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,    89,    90,    91,
-      92,    93,    94,    95,    96,    10,    10,    10,    38,    10,
-      10,    10,    10,    10,    44,    10,    10,    10,    10,    10,
+      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,   105,    10,    10,    10,    41,
+      42,    43,    10,    10,    10,    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,    10,    37,    10,    39,
+      40,    10,    10,    10,    37,    97,    98,    99,    10,   101,
+     102,   103,    45,    46,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,     0,    10,   130,   131,
+     132,   133,   134,   135,   136,   137,    -1,    11,    89,    90,
+      91,    92,    93,    94,    95,    96,    10,    10,    10,   151,
+     100,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,    10,    38,    10,    10,    10,    10,    10,
+      44,    10,    10,    10,    10,    10,    10,    10,    10,   129,
+      10,    10,    10,    10,    10,   128,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,   100,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    88,    10,
-      10,    10,    10,   129,    10,    10,   128,    10,    10,    10,
-      10,    10,    10,    -1,   104,    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,
-      10,    10,    10,    10,    41,    42,    43,    10,   138,    10,
-      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,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      97,    98,    99,    10,   101,   102,   103,    10,    10,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,    10,    10,   130,   131,   132,   133,   134,   135,   136,
-     137,    10,    10,    10,    10,    10,    10,    10,    10,    10,
+      10,    10,    10,    10,    88,    10,    10,    10,    10,    10,
+      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
+     104,    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,   138,    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
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,   152,     0,    11,    38,    44,    88,   104,   138,   153,
-     154,   157,   160,   277,   288,   303,   155,   158,   161,   278,
-     289,   304,    12,    13,    14,    15,    16,    17,    18,    19,
+       0,   153,     0,    11,    38,    44,    88,   104,   138,   154,
+     155,   158,   161,   279,   290,   305,   156,   159,   162,   280,
+     291,   306,    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,    50,    51,    52,    53,    54,    55,    56,
@@ -1356,7 +1360,7 @@ static const yytype_uint16 yystos[] =
       87,    97,    98,    99,   101,   102,   103,   106,   107,   108,
      109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
      119,   120,   121,   122,   123,   124,   125,   126,   127,   130,
-     131,   132,   133,   134,   135,   136,   137,   156,   163,   164,
+     131,   132,   133,   134,   135,   136,   137,   151,   157,   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,   192,   193,   194,
@@ -1367,13 +1371,13 @@ static const yytype_uint16 yystos[] =
      235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
      245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
      255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,    37,    39,    40,   100,   129,   159,   268,
-     269,   270,   271,   272,    37,    45,    46,   128,   162,   273,
-     274,   275,   276,    89,    90,    91,    92,    93,    94,    95,
-      96,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,   105,   305,   306,    10,    10,
+     265,   266,   267,   268,   269,    37,    39,    40,   100,   129,
+     160,   270,   271,   272,   273,   274,    37,    45,    46,   128,
+     163,   275,   276,   277,   278,    89,    90,    91,    92,    93,
+      94,    95,    96,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   105,   307,   308,
       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,
@@ -1387,7 +1391,7 @@ static const yytype_uint16 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,    10,    10,    10,    10,    10
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2189,15 +2193,15 @@ yyreduce:
     {
         case 10:
 /* Line 1792 of yacc.c  */
-#line 131 "./util/configparser.y"
+#line 132 "./util/configparser.y"
     { 
                OUTYY(("\nP(server:)\n")); 
        }
     break;
 
-  case 118:
+  case 119:
 /* Line 1792 of yacc.c  */
-#line 183 "./util/configparser.y"
+#line 184 "./util/configparser.y"
     {
                struct config_stub* s;
                OUTYY(("\nP(stub_zone:)\n")); 
@@ -2210,9 +2214,9 @@ yyreduce:
        }
     break;
 
-  case 126:
+  case 127:
 /* Line 1792 of yacc.c  */
-#line 199 "./util/configparser.y"
+#line 200 "./util/configparser.y"
     {
                struct config_stub* s;
                OUTYY(("\nP(forward_zone:)\n")); 
@@ -2225,9 +2229,9 @@ yyreduce:
        }
     break;
 
-  case 133:
+  case 134:
 /* Line 1792 of yacc.c  */
-#line 215 "./util/configparser.y"
+#line 216 "./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)
@@ -2237,9 +2241,9 @@ yyreduce:
        }
     break;
 
-  case 134:
+  case 135:
 /* Line 1792 of yacc.c  */
-#line 224 "./util/configparser.y"
+#line 225 "./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)
@@ -2249,9 +2253,9 @@ yyreduce:
        }
     break;
 
-  case 135:
+  case 136:
 /* Line 1792 of yacc.c  */
-#line 233 "./util/configparser.y"
+#line 234 "./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)
@@ -2263,9 +2267,9 @@ yyreduce:
        }
     break;
 
-  case 136:
+  case 137:
 /* Line 1792 of yacc.c  */
-#line 244 "./util/configparser.y"
+#line 245 "./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)
@@ -2275,9 +2279,9 @@ yyreduce:
        }
     break;
 
-  case 137:
+  case 138:
 /* Line 1792 of yacc.c  */
-#line 253 "./util/configparser.y"
+#line 254 "./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)
@@ -2287,9 +2291,9 @@ yyreduce:
        }
     break;
 
-  case 138:
+  case 139:
 /* Line 1792 of yacc.c  */
-#line 262 "./util/configparser.y"
+#line 263 "./util/configparser.y"
     {
                OUTYY(("P(server_port:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2299,9 +2303,9 @@ yyreduce:
        }
     break;
 
-  case 139:
+  case 140:
 /* Line 1792 of yacc.c  */
-#line 271 "./util/configparser.y"
+#line 272 "./util/configparser.y"
     {
                OUTYY(("P(server_interface:%s)\n", (yyvsp[(2) - (2)].str)));
                if(cfg_parser->cfg->num_ifs == 0)
@@ -2315,9 +2319,9 @@ yyreduce:
        }
     break;
 
-  case 140:
+  case 141:
 /* Line 1792 of yacc.c  */
-#line 284 "./util/configparser.y"
+#line 285 "./util/configparser.y"
     {
                OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[(2) - (2)].str)));
                if(cfg_parser->cfg->num_out_ifs == 0)
@@ -2333,9 +2337,9 @@ yyreduce:
        }
     break;
 
-  case 141:
+  case 142:
 /* Line 1792 of yacc.c  */
-#line 299 "./util/configparser.y"
+#line 300 "./util/configparser.y"
     {
                OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2345,9 +2349,9 @@ yyreduce:
        }
     break;
 
-  case 142:
+  case 143:
 /* Line 1792 of yacc.c  */
-#line 308 "./util/configparser.y"
+#line 309 "./util/configparser.y"
     {
                OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 1, 
@@ -2357,9 +2361,9 @@ yyreduce:
        }
     break;
 
-  case 143:
+  case 144:
 /* Line 1792 of yacc.c  */
-#line 317 "./util/configparser.y"
+#line 318 "./util/configparser.y"
     {
                OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 0, 
@@ -2369,9 +2373,9 @@ yyreduce:
        }
     break;
 
-  case 144:
+  case 145:
 /* Line 1792 of yacc.c  */
-#line 326 "./util/configparser.y"
+#line 327 "./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)
@@ -2381,9 +2385,9 @@ yyreduce:
        }
     break;
 
-  case 145:
+  case 146:
 /* Line 1792 of yacc.c  */
-#line 335 "./util/configparser.y"
+#line 336 "./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)
@@ -2393,9 +2397,9 @@ yyreduce:
        }
     break;
 
-  case 146:
+  case 147:
 /* Line 1792 of yacc.c  */
-#line 344 "./util/configparser.y"
+#line 345 "./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)
@@ -2405,9 +2409,9 @@ yyreduce:
        }
     break;
 
-  case 147:
+  case 148:
 /* Line 1792 of yacc.c  */
-#line 353 "./util/configparser.y"
+#line 354 "./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)
@@ -2417,9 +2421,9 @@ yyreduce:
        }
     break;
 
-  case 148:
+  case 149:
 /* Line 1792 of yacc.c  */
-#line 362 "./util/configparser.y"
+#line 363 "./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)
@@ -2429,9 +2433,9 @@ yyreduce:
        }
     break;
 
-  case 149:
+  case 150:
 /* Line 1792 of yacc.c  */
-#line 371 "./util/configparser.y"
+#line 372 "./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)
@@ -2441,9 +2445,9 @@ yyreduce:
        }
     break;
 
-  case 150:
+  case 151:
 /* Line 1792 of yacc.c  */
-#line 380 "./util/configparser.y"
+#line 381 "./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)
@@ -2453,9 +2457,9 @@ yyreduce:
        }
     break;
 
-  case 151:
+  case 152:
 /* Line 1792 of yacc.c  */
-#line 389 "./util/configparser.y"
+#line 390 "./util/configparser.y"
     {
                OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2465,9 +2469,9 @@ yyreduce:
        }
     break;
 
-  case 152:
+  case 153:
 /* Line 1792 of yacc.c  */
-#line 398 "./util/configparser.y"
+#line 399 "./util/configparser.y"
     {
                OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2477,9 +2481,9 @@ yyreduce:
        }
     break;
 
-  case 153:
+  case 154:
 /* Line 1792 of yacc.c  */
-#line 407 "./util/configparser.y"
+#line 408 "./util/configparser.y"
     {
                OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->ssl_service_key);
@@ -2487,9 +2491,9 @@ yyreduce:
        }
     break;
 
-  case 154:
+  case 155:
 /* Line 1792 of yacc.c  */
-#line 414 "./util/configparser.y"
+#line 415 "./util/configparser.y"
     {
                OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->ssl_service_pem);
@@ -2497,9 +2501,9 @@ yyreduce:
        }
     break;
 
-  case 155:
+  case 156:
 /* Line 1792 of yacc.c  */
-#line 421 "./util/configparser.y"
+#line 422 "./util/configparser.y"
     {
                OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2509,9 +2513,9 @@ yyreduce:
        }
     break;
 
-  case 156:
+  case 157:
 /* Line 1792 of yacc.c  */
-#line 430 "./util/configparser.y"
+#line 431 "./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)
@@ -2521,9 +2525,9 @@ yyreduce:
        }
     break;
 
-  case 157:
+  case 158:
 /* Line 1792 of yacc.c  */
-#line 439 "./util/configparser.y"
+#line 440 "./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)
@@ -2538,9 +2542,9 @@ yyreduce:
        }
     break;
 
-  case 158:
+  case 159:
 /* Line 1792 of yacc.c  */
-#line 453 "./util/configparser.y"
+#line 454 "./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)
@@ -2550,9 +2554,9 @@ yyreduce:
        }
     break;
 
-  case 159:
+  case 160:
 /* Line 1792 of yacc.c  */
-#line 462 "./util/configparser.y"
+#line 463 "./util/configparser.y"
     {
                OUTYY(("P(server_log_queries:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2562,9 +2566,9 @@ yyreduce:
        }
     break;
 
-  case 160:
+  case 161:
 /* Line 1792 of yacc.c  */
-#line 471 "./util/configparser.y"
+#line 472 "./util/configparser.y"
     {
                OUTYY(("P(server_chroot:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->chrootdir);
@@ -2572,9 +2576,9 @@ yyreduce:
        }
     break;
 
-  case 161:
+  case 162:
 /* Line 1792 of yacc.c  */
-#line 478 "./util/configparser.y"
+#line 479 "./util/configparser.y"
     {
                OUTYY(("P(server_username:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->username);
@@ -2582,9 +2586,9 @@ yyreduce:
        }
     break;
 
-  case 162:
+  case 163:
 /* Line 1792 of yacc.c  */
-#line 485 "./util/configparser.y"
+#line 486 "./util/configparser.y"
     {
                OUTYY(("P(server_directory:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->directory);
@@ -2592,9 +2596,9 @@ yyreduce:
        }
     break;
 
-  case 163:
+  case 164:
 /* Line 1792 of yacc.c  */
-#line 492 "./util/configparser.y"
+#line 493 "./util/configparser.y"
     {
                OUTYY(("P(server_logfile:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->logfile);
@@ -2603,9 +2607,9 @@ yyreduce:
        }
     break;
 
-  case 164:
+  case 165:
 /* Line 1792 of yacc.c  */
-#line 500 "./util/configparser.y"
+#line 501 "./util/configparser.y"
     {
                OUTYY(("P(server_pidfile:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->pidfile);
@@ -2613,9 +2617,9 @@ yyreduce:
        }
     break;
 
-  case 165:
+  case 166:
 /* Line 1792 of yacc.c  */
-#line 507 "./util/configparser.y"
+#line 508 "./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)))
@@ -2623,9 +2627,9 @@ yyreduce:
        }
     break;
 
-  case 166:
+  case 167:
 /* Line 1792 of yacc.c  */
-#line 514 "./util/configparser.y"
+#line 515 "./util/configparser.y"
     {
                OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->dlv_anchor_file);
@@ -2633,9 +2637,9 @@ yyreduce:
        }
     break;
 
-  case 167:
+  case 168:
 /* Line 1792 of yacc.c  */
-#line 521 "./util/configparser.y"
+#line 522 "./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)))
@@ -2643,9 +2647,9 @@ yyreduce:
        }
     break;
 
-  case 168:
+  case 169:
 /* Line 1792 of yacc.c  */
-#line 528 "./util/configparser.y"
+#line 529 "./util/configparser.y"
     {
                OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
@@ -2654,9 +2658,9 @@ yyreduce:
        }
     break;
 
-  case 169:
+  case 170:
 /* Line 1792 of yacc.c  */
-#line 536 "./util/configparser.y"
+#line 537 "./util/configparser.y"
     {
                OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
@@ -2665,9 +2669,9 @@ yyreduce:
        }
     break;
 
-  case 170:
+  case 171:
 /* Line 1792 of yacc.c  */
-#line 544 "./util/configparser.y"
+#line 545 "./util/configparser.y"
     {
                OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
@@ -2676,9 +2680,9 @@ yyreduce:
        }
     break;
 
-  case 171:
+  case 172:
 /* Line 1792 of yacc.c  */
-#line 552 "./util/configparser.y"
+#line 553 "./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)))
@@ -2686,9 +2690,9 @@ yyreduce:
        }
     break;
 
-  case 172:
+  case 173:
 /* Line 1792 of yacc.c  */
-#line 559 "./util/configparser.y"
+#line 560 "./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)))
@@ -2696,9 +2700,9 @@ yyreduce:
        }
     break;
 
-  case 173:
+  case 174:
 /* Line 1792 of yacc.c  */
-#line 566 "./util/configparser.y"
+#line 567 "./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)
@@ -2708,9 +2712,9 @@ yyreduce:
        }
     break;
 
-  case 174:
+  case 175:
 /* Line 1792 of yacc.c  */
-#line 575 "./util/configparser.y"
+#line 576 "./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)
@@ -2720,9 +2724,9 @@ yyreduce:
        }
     break;
 
-  case 175:
+  case 176:
 /* Line 1792 of yacc.c  */
-#line 584 "./util/configparser.y"
+#line 585 "./util/configparser.y"
     {
                OUTYY(("P(server_identity:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->identity);
@@ -2730,9 +2734,9 @@ yyreduce:
        }
     break;
 
-  case 176:
+  case 177:
 /* Line 1792 of yacc.c  */
-#line 591 "./util/configparser.y"
+#line 592 "./util/configparser.y"
     {
                OUTYY(("P(server_version:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->version);
@@ -2740,9 +2744,9 @@ yyreduce:
        }
     break;
 
-  case 177:
+  case 178:
 /* Line 1792 of yacc.c  */
-#line 598 "./util/configparser.y"
+#line 599 "./util/configparser.y"
     {
                OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->so_rcvbuf))
@@ -2751,9 +2755,9 @@ yyreduce:
        }
     break;
 
-  case 178:
+  case 179:
 /* Line 1792 of yacc.c  */
-#line 606 "./util/configparser.y"
+#line 607 "./util/configparser.y"
     {
                OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->so_sndbuf))
@@ -2762,9 +2766,9 @@ yyreduce:
        }
     break;
 
-  case 179:
+  case 180:
 /* Line 1792 of yacc.c  */
-#line 614 "./util/configparser.y"
+#line 615 "./util/configparser.y"
     {
         OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[(2) - (2)].str)));
         if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2775,9 +2779,9 @@ yyreduce:
     }
     break;
 
-  case 180:
+  case 181:
 /* Line 1792 of yacc.c  */
-#line 624 "./util/configparser.y"
+#line 625 "./util/configparser.y"
     {
                OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2791,9 +2795,9 @@ yyreduce:
        }
     break;
 
-  case 181:
+  case 182:
 /* Line 1792 of yacc.c  */
-#line 637 "./util/configparser.y"
+#line 638 "./util/configparser.y"
     {
                OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2805,9 +2809,9 @@ yyreduce:
        }
     break;
 
-  case 182:
+  case 183:
 /* Line 1792 of yacc.c  */
-#line 648 "./util/configparser.y"
+#line 649 "./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))
@@ -2816,9 +2820,9 @@ yyreduce:
        }
     break;
 
-  case 183:
+  case 184:
 /* Line 1792 of yacc.c  */
-#line 656 "./util/configparser.y"
+#line 657 "./util/configparser.y"
     {
                OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2832,9 +2836,9 @@ yyreduce:
        }
     break;
 
-  case 184:
+  case 185:
 /* Line 1792 of yacc.c  */
-#line 669 "./util/configparser.y"
+#line 670 "./util/configparser.y"
     {
                OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2844,9 +2848,9 @@ yyreduce:
        }
     break;
 
-  case 185:
+  case 186:
 /* Line 1792 of yacc.c  */
-#line 678 "./util/configparser.y"
+#line 679 "./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)
@@ -2856,9 +2860,9 @@ yyreduce:
        }
     break;
 
-  case 186:
+  case 187:
 /* Line 1792 of yacc.c  */
-#line 687 "./util/configparser.y"
+#line 688 "./util/configparser.y"
     {
                OUTYY(("P(server_delay_close:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2868,9 +2872,9 @@ yyreduce:
        }
     break;
 
-  case 187:
+  case 188:
 /* Line 1792 of yacc.c  */
-#line 696 "./util/configparser.y"
+#line 697 "./util/configparser.y"
     {
                OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2881,9 +2885,9 @@ yyreduce:
        }
     break;
 
-  case 188:
+  case 189:
 /* Line 1792 of yacc.c  */
-#line 706 "./util/configparser.y"
+#line 707 "./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))
@@ -2892,9 +2896,9 @@ yyreduce:
        }
     break;
 
-  case 189:
+  case 190:
 /* Line 1792 of yacc.c  */
-#line 714 "./util/configparser.y"
+#line 715 "./util/configparser.y"
     {
                OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2908,9 +2912,9 @@ yyreduce:
        }
     break;
 
-  case 190:
+  case 191:
 /* Line 1792 of yacc.c  */
-#line 727 "./util/configparser.y"
+#line 728 "./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)
@@ -2920,9 +2924,9 @@ yyreduce:
        }
     break;
 
-  case 191:
+  case 192:
 /* Line 1792 of yacc.c  */
-#line 736 "./util/configparser.y"
+#line 737 "./util/configparser.y"
     {
                OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
                verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
@@ -2931,9 +2935,9 @@ yyreduce:
        }
     break;
 
-  case 192:
+  case 193:
 /* Line 1792 of yacc.c  */
-#line 744 "./util/configparser.y"
+#line 745 "./util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2943,9 +2947,9 @@ yyreduce:
        }
     break;
 
-  case 193:
+  case 194:
 /* Line 1792 of yacc.c  */
-#line 753 "./util/configparser.y"
+#line 754 "./util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[(2) - (2)].str)));
                verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
@@ -2954,9 +2958,9 @@ yyreduce:
        }
     break;
 
-  case 194:
+  case 195:
 /* Line 1792 of yacc.c  */
-#line 761 "./util/configparser.y"
+#line 762 "./util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2970,9 +2974,9 @@ yyreduce:
        }
     break;
 
-  case 195:
+  case 196:
 /* Line 1792 of yacc.c  */
-#line 774 "./util/configparser.y"
+#line 775 "./util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2982,9 +2986,9 @@ yyreduce:
        }
     break;
 
-  case 196:
+  case 197:
 /* Line 1792 of yacc.c  */
-#line 783 "./util/configparser.y"
+#line 784 "./util/configparser.y"
     {
                OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->target_fetch_policy);
@@ -2992,9 +2996,9 @@ yyreduce:
        }
     break;
 
-  case 197:
+  case 198:
 /* Line 1792 of yacc.c  */
-#line 790 "./util/configparser.y"
+#line 791 "./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)
@@ -3005,9 +3009,9 @@ yyreduce:
        }
     break;
 
-  case 198:
+  case 199:
 /* Line 1792 of yacc.c  */
-#line 800 "./util/configparser.y"
+#line 801 "./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)
@@ -3018,9 +3022,9 @@ yyreduce:
        }
     break;
 
-  case 199:
+  case 200:
 /* Line 1792 of yacc.c  */
-#line 810 "./util/configparser.y"
+#line 811 "./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)
@@ -3031,9 +3035,9 @@ yyreduce:
        }
     break;
 
-  case 200:
+  case 201:
 /* Line 1792 of yacc.c  */
-#line 820 "./util/configparser.y"
+#line 821 "./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)
@@ -3044,9 +3048,9 @@ yyreduce:
        }
     break;
 
-  case 201:
+  case 202:
 /* Line 1792 of yacc.c  */
-#line 830 "./util/configparser.y"
+#line 831 "./util/configparser.y"
     {
                OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3057,9 +3061,9 @@ yyreduce:
        }
     break;
 
-  case 202:
+  case 203:
 /* Line 1792 of yacc.c  */
-#line 840 "./util/configparser.y"
+#line 841 "./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)
@@ -3070,9 +3074,22 @@ yyreduce:
        }
     break;
 
-  case 203:
+  case 204:
 /* Line 1792 of yacc.c  */
-#line 850 "./util/configparser.y"
+#line 851 "./util/configparser.y"
+    {
+               OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[(2) - (2)].str)));
+               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+                       yyerror("expected yes or no.");
+               else cfg_parser->cfg->harden_algo_downgrade = 
+                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
+               free((yyvsp[(2) - (2)].str));
+       }
+    break;
+
+  case 205:
+/* Line 1792 of yacc.c  */
+#line 861 "./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)
@@ -3083,9 +3100,9 @@ yyreduce:
        }
     break;
 
-  case 204:
+  case 206:
 /* Line 1792 of yacc.c  */
-#line 860 "./util/configparser.y"
+#line 871 "./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)))
@@ -3093,9 +3110,9 @@ yyreduce:
        }
     break;
 
-  case 205:
+  case 207:
 /* Line 1792 of yacc.c  */
-#line 867 "./util/configparser.y"
+#line 878 "./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)))
@@ -3103,9 +3120,9 @@ yyreduce:
        }
     break;
 
-  case 206:
+  case 208:
 /* Line 1792 of yacc.c  */
-#line 874 "./util/configparser.y"
+#line 885 "./util/configparser.y"
     {
                OUTYY(("P(server_prefetch:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3115,9 +3132,9 @@ yyreduce:
        }
     break;
 
-  case 207:
+  case 209:
 /* Line 1792 of yacc.c  */
-#line 883 "./util/configparser.y"
+#line 894 "./util/configparser.y"
     {
                OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3127,9 +3144,9 @@ yyreduce:
        }
     break;
 
-  case 208:
+  case 210:
 /* Line 1792 of yacc.c  */
-#line 892 "./util/configparser.y"
+#line 903 "./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)
@@ -3139,9 +3156,9 @@ yyreduce:
        }
     break;
 
-  case 209:
+  case 211:
 /* Line 1792 of yacc.c  */
-#line 901 "./util/configparser.y"
+#line 912 "./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)))
@@ -3149,9 +3166,9 @@ yyreduce:
        }
     break;
 
-  case 210:
+  case 212:
 /* Line 1792 of yacc.c  */
-#line 908 "./util/configparser.y"
+#line 919 "./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)
@@ -3162,9 +3179,9 @@ yyreduce:
        }
     break;
 
-  case 211:
+  case 213:
 /* Line 1792 of yacc.c  */
-#line 918 "./util/configparser.y"
+#line 929 "./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 &&
@@ -3182,9 +3199,9 @@ yyreduce:
        }
     break;
 
-  case 212:
+  case 214:
 /* Line 1792 of yacc.c  */
-#line 935 "./util/configparser.y"
+#line 946 "./util/configparser.y"
     {
                OUTYY(("P(server_module_conf:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->module_conf);
@@ -3192,9 +3209,9 @@ yyreduce:
        }
     break;
 
-  case 213:
+  case 215:
 /* Line 1792 of yacc.c  */
-#line 942 "./util/configparser.y"
+#line 953 "./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) {
@@ -3213,9 +3230,9 @@ yyreduce:
        }
     break;
 
-  case 214:
+  case 216:
 /* Line 1792 of yacc.c  */
-#line 960 "./util/configparser.y"
+#line 971 "./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) {
@@ -3229,9 +3246,9 @@ yyreduce:
        }
     break;
 
-  case 215:
+  case 217:
 /* Line 1792 of yacc.c  */
-#line 973 "./util/configparser.y"
+#line 984 "./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) {
@@ -3245,9 +3262,9 @@ yyreduce:
        }
     break;
 
-  case 216:
+  case 218:
 /* Line 1792 of yacc.c  */
-#line 986 "./util/configparser.y"
+#line 997 "./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)
@@ -3257,9 +3274,9 @@ yyreduce:
        }
     break;
 
-  case 217:
+  case 219:
 /* Line 1792 of yacc.c  */
-#line 995 "./util/configparser.y"
+#line 1006 "./util/configparser.y"
     {
                OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -3269,9 +3286,9 @@ yyreduce:
        }
     break;
 
-  case 218:
+  case 220:
 /* Line 1792 of yacc.c  */
-#line 1004 "./util/configparser.y"
+#line 1015 "./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)
@@ -3281,9 +3298,9 @@ yyreduce:
        }
     break;
 
-  case 219:
+  case 221:
 /* Line 1792 of yacc.c  */
-#line 1013 "./util/configparser.y"
+#line 1024 "./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)
@@ -3294,9 +3311,9 @@ yyreduce:
        }
     break;
 
-  case 220:
+  case 222:
 /* Line 1792 of yacc.c  */
-#line 1023 "./util/configparser.y"
+#line 1034 "./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)
@@ -3307,9 +3324,9 @@ yyreduce:
        }
     break;
 
-  case 221:
+  case 223:
 /* Line 1792 of yacc.c  */
-#line 1033 "./util/configparser.y"
+#line 1044 "./util/configparser.y"
     {
                OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3319,9 +3336,9 @@ yyreduce:
        }
     break;
 
-  case 222:
+  case 224:
 /* Line 1792 of yacc.c  */
-#line 1042 "./util/configparser.y"
+#line 1053 "./util/configparser.y"
     {
                OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -3331,9 +3348,9 @@ yyreduce:
        }
     break;
 
-  case 223:
+  case 225:
 /* Line 1792 of yacc.c  */
-#line 1051 "./util/configparser.y"
+#line 1062 "./util/configparser.y"
     {
                OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->val_nsec3_key_iterations);
@@ -3341,9 +3358,9 @@ yyreduce:
        }
     break;
 
-  case 224:
+  case 226:
 /* Line 1792 of yacc.c  */
-#line 1058 "./util/configparser.y"
+#line 1069 "./util/configparser.y"
     {
                OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -3353,9 +3370,9 @@ yyreduce:
        }
     break;
 
-  case 225:
+  case 227:
 /* Line 1792 of yacc.c  */
-#line 1067 "./util/configparser.y"
+#line 1078 "./util/configparser.y"
     {
                OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -3365,9 +3382,9 @@ yyreduce:
        }
     break;
 
-  case 226:
+  case 228:
 /* Line 1792 of yacc.c  */
-#line 1076 "./util/configparser.y"
+#line 1087 "./util/configparser.y"
     {
                OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -3377,9 +3394,9 @@ yyreduce:
        }
     break;
 
-  case 227:
+  case 229:
 /* Line 1792 of yacc.c  */
-#line 1085 "./util/configparser.y"
+#line 1096 "./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))
@@ -3388,9 +3405,9 @@ yyreduce:
        }
     break;
 
-  case 228:
+  case 230:
 /* Line 1792 of yacc.c  */
-#line 1093 "./util/configparser.y"
+#line 1104 "./util/configparser.y"
     {
                OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -3404,9 +3421,9 @@ yyreduce:
        }
     break;
 
-  case 229:
+  case 231:
 /* Line 1792 of yacc.c  */
-#line 1106 "./util/configparser.y"
+#line 1117 "./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))
@@ -3415,9 +3432,9 @@ yyreduce:
        }
     break;
 
-  case 230:
+  case 232:
 /* Line 1792 of yacc.c  */
-#line 1114 "./util/configparser.y"
+#line 1125 "./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 &&
@@ -3441,9 +3458,9 @@ yyreduce:
        }
     break;
 
-  case 231:
+  case 233:
 /* Line 1792 of yacc.c  */
-#line 1137 "./util/configparser.y"
+#line 1148 "./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)))
@@ -3451,9 +3468,9 @@ yyreduce:
        }
     break;
 
-  case 232:
+  case 234:
 /* Line 1792 of yacc.c  */
-#line 1144 "./util/configparser.y"
+#line 1155 "./util/configparser.y"
     {
                char* ptr;
                OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -3469,9 +3486,9 @@ yyreduce:
        }
     break;
 
-  case 233:
+  case 235:
 /* Line 1792 of yacc.c  */
-#line 1159 "./util/configparser.y"
+#line 1170 "./util/configparser.y"
     {
                OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3482,9 +3499,9 @@ yyreduce:
        }
     break;
 
-  case 234:
+  case 236:
 /* Line 1792 of yacc.c  */
-#line 1169 "./util/configparser.y"
+#line 1180 "./util/configparser.y"
     {
                OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3495,9 +3512,9 @@ yyreduce:
        }
     break;
 
-  case 235:
+  case 237:
 /* Line 1792 of yacc.c  */
-#line 1179 "./util/configparser.y"
+#line 1190 "./util/configparser.y"
     {
                OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[(2) - (2)].str)));
                cfg_parser->cfg->max_udp_size = atoi((yyvsp[(2) - (2)].str));
@@ -3505,9 +3522,9 @@ yyreduce:
        }
     break;
 
-  case 236:
+  case 238:
 /* Line 1792 of yacc.c  */
-#line 1186 "./util/configparser.y"
+#line 1197 "./util/configparser.y"
     {
                OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->dns64_prefix);
@@ -3515,9 +3532,9 @@ yyreduce:
        }
     break;
 
-  case 237:
+  case 239:
 /* Line 1792 of yacc.c  */
-#line 1193 "./util/configparser.y"
+#line 1204 "./util/configparser.y"
     {
                OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3527,9 +3544,9 @@ yyreduce:
        }
     break;
 
-  case 238:
+  case 240:
 /* Line 1792 of yacc.c  */
-#line 1202 "./util/configparser.y"
+#line 1213 "./util/configparser.y"
     {
                OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str)));
                if(cfg_parser->cfg->stubs->name)
@@ -3540,9 +3557,9 @@ yyreduce:
        }
     break;
 
-  case 239:
+  case 241:
 /* Line 1792 of yacc.c  */
-#line 1212 "./util/configparser.y"
+#line 1223 "./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)))
@@ -3550,9 +3567,9 @@ yyreduce:
        }
     break;
 
-  case 240:
+  case 242:
 /* Line 1792 of yacc.c  */
-#line 1219 "./util/configparser.y"
+#line 1230 "./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)))
@@ -3560,9 +3577,9 @@ yyreduce:
        }
     break;
 
-  case 241:
+  case 243:
 /* Line 1792 of yacc.c  */
-#line 1226 "./util/configparser.y"
+#line 1237 "./util/configparser.y"
     {
                OUTYY(("P(stub-first:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3572,9 +3589,9 @@ yyreduce:
        }
     break;
 
-  case 242:
+  case 244:
 /* Line 1792 of yacc.c  */
-#line 1235 "./util/configparser.y"
+#line 1246 "./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)
@@ -3585,9 +3602,9 @@ yyreduce:
        }
     break;
 
-  case 243:
+  case 245:
 /* Line 1792 of yacc.c  */
-#line 1245 "./util/configparser.y"
+#line 1256 "./util/configparser.y"
     {
                OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str)));
                if(cfg_parser->cfg->forwards->name)
@@ -3598,9 +3615,9 @@ yyreduce:
        }
     break;
 
-  case 244:
+  case 246:
 /* Line 1792 of yacc.c  */
-#line 1255 "./util/configparser.y"
+#line 1266 "./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)))
@@ -3608,9 +3625,9 @@ yyreduce:
        }
     break;
 
-  case 245:
+  case 247:
 /* Line 1792 of yacc.c  */
-#line 1262 "./util/configparser.y"
+#line 1273 "./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)))
@@ -3618,9 +3635,9 @@ yyreduce:
        }
     break;
 
-  case 246:
+  case 248:
 /* Line 1792 of yacc.c  */
-#line 1269 "./util/configparser.y"
+#line 1280 "./util/configparser.y"
     {
                OUTYY(("P(forward-first:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3630,17 +3647,17 @@ yyreduce:
        }
     break;
 
-  case 247:
+  case 249:
 /* Line 1792 of yacc.c  */
-#line 1278 "./util/configparser.y"
+#line 1289 "./util/configparser.y"
     { 
                OUTYY(("\nP(remote-control:)\n")); 
        }
     break;
 
-  case 258:
+  case 260:
 /* Line 1792 of yacc.c  */
-#line 1289 "./util/configparser.y"
+#line 1300 "./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)
@@ -3651,9 +3668,9 @@ yyreduce:
        }
     break;
 
-  case 259:
+  case 261:
 /* Line 1792 of yacc.c  */
-#line 1299 "./util/configparser.y"
+#line 1310 "./util/configparser.y"
     {
                OUTYY(("P(control_port:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -3663,9 +3680,9 @@ yyreduce:
        }
     break;
 
-  case 260:
+  case 262:
 /* Line 1792 of yacc.c  */
-#line 1308 "./util/configparser.y"
+#line 1319 "./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)))
@@ -3673,9 +3690,9 @@ yyreduce:
        }
     break;
 
-  case 261:
+  case 263:
 /* Line 1792 of yacc.c  */
-#line 1315 "./util/configparser.y"
+#line 1326 "./util/configparser.y"
     {
                OUTYY(("P(control_use_cert:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3686,9 +3703,9 @@ yyreduce:
        }
     break;
 
-  case 262:
+  case 264:
 /* Line 1792 of yacc.c  */
-#line 1325 "./util/configparser.y"
+#line 1336 "./util/configparser.y"
     {
                OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->server_key_file);
@@ -3696,9 +3713,9 @@ yyreduce:
        }
     break;
 
-  case 263:
+  case 265:
 /* Line 1792 of yacc.c  */
-#line 1332 "./util/configparser.y"
+#line 1343 "./util/configparser.y"
     {
                OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->server_cert_file);
@@ -3706,9 +3723,9 @@ yyreduce:
        }
     break;
 
-  case 264:
+  case 266:
 /* Line 1792 of yacc.c  */
-#line 1339 "./util/configparser.y"
+#line 1350 "./util/configparser.y"
     {
                OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->control_key_file);
@@ -3716,9 +3733,9 @@ yyreduce:
        }
     break;
 
-  case 265:
+  case 267:
 /* Line 1792 of yacc.c  */
-#line 1346 "./util/configparser.y"
+#line 1357 "./util/configparser.y"
     {
                OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->control_cert_file);
@@ -3726,17 +3743,17 @@ yyreduce:
        }
     break;
 
-  case 266:
+  case 268:
 /* Line 1792 of yacc.c  */
-#line 1353 "./util/configparser.y"
+#line 1364 "./util/configparser.y"
     {
                OUTYY(("\nP(dnstap:)\n"));
        }
     break;
 
-  case 281:
+  case 283:
 /* Line 1792 of yacc.c  */
-#line 1370 "./util/configparser.y"
+#line 1381 "./util/configparser.y"
     {
                OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3745,9 +3762,9 @@ yyreduce:
        }
     break;
 
-  case 282:
+  case 284:
 /* Line 1792 of yacc.c  */
-#line 1378 "./util/configparser.y"
+#line 1389 "./util/configparser.y"
     {
                OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->dnstap_socket_path);
@@ -3755,9 +3772,9 @@ yyreduce:
        }
     break;
 
-  case 283:
+  case 285:
 /* Line 1792 of yacc.c  */
-#line 1385 "./util/configparser.y"
+#line 1396 "./util/configparser.y"
     {
                OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3766,9 +3783,9 @@ yyreduce:
        }
     break;
 
-  case 284:
+  case 286:
 /* Line 1792 of yacc.c  */
-#line 1393 "./util/configparser.y"
+#line 1404 "./util/configparser.y"
     {
                OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3777,9 +3794,9 @@ yyreduce:
        }
     break;
 
-  case 285:
+  case 287:
 /* Line 1792 of yacc.c  */
-#line 1401 "./util/configparser.y"
+#line 1412 "./util/configparser.y"
     {
                OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->dnstap_identity);
@@ -3787,9 +3804,9 @@ yyreduce:
        }
     break;
 
-  case 286:
+  case 288:
 /* Line 1792 of yacc.c  */
-#line 1408 "./util/configparser.y"
+#line 1419 "./util/configparser.y"
     {
                OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->dnstap_version);
@@ -3797,9 +3814,9 @@ yyreduce:
        }
     break;
 
-  case 287:
+  case 289:
 /* Line 1792 of yacc.c  */
-#line 1415 "./util/configparser.y"
+#line 1426 "./util/configparser.y"
     {
                OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3809,9 +3826,9 @@ yyreduce:
        }
     break;
 
-  case 288:
+  case 290:
 /* Line 1792 of yacc.c  */
-#line 1424 "./util/configparser.y"
+#line 1435 "./util/configparser.y"
     {
                OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3821,9 +3838,9 @@ yyreduce:
        }
     break;
 
-  case 289:
+  case 291:
 /* Line 1792 of yacc.c  */
-#line 1433 "./util/configparser.y"
+#line 1444 "./util/configparser.y"
     {
                OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3833,9 +3850,9 @@ yyreduce:
        }
     break;
 
-  case 290:
+  case 292:
 /* Line 1792 of yacc.c  */
-#line 1442 "./util/configparser.y"
+#line 1453 "./util/configparser.y"
     {
                OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3845,9 +3862,9 @@ yyreduce:
        }
     break;
 
-  case 291:
+  case 293:
 /* Line 1792 of yacc.c  */
-#line 1451 "./util/configparser.y"
+#line 1462 "./util/configparser.y"
     {
                OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3857,9 +3874,9 @@ yyreduce:
        }
     break;
 
-  case 292:
+  case 294:
 /* Line 1792 of yacc.c  */
-#line 1460 "./util/configparser.y"
+#line 1471 "./util/configparser.y"
     {
                OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3869,17 +3886,17 @@ yyreduce:
        }
     break;
 
-  case 293:
+  case 295:
 /* Line 1792 of yacc.c  */
-#line 1469 "./util/configparser.y"
+#line 1480 "./util/configparser.y"
     { 
                OUTYY(("\nP(python:)\n")); 
        }
     break;
 
-  case 297:
+  case 299:
 /* Line 1792 of yacc.c  */
-#line 1478 "./util/configparser.y"
+#line 1489 "./util/configparser.y"
     {
                OUTYY(("P(python-script:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->python_script);
@@ -3889,7 +3906,7 @@ yyreduce:
 
 
 /* Line 1792 of yacc.c  */
-#line 3893 "util/configparser.c"
+#line 3910 "util/configparser.c"
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4121,7 +4138,7 @@ yyreturn:
 
 
 /* Line 2055 of yacc.c  */
-#line 1483 "./util/configparser.y"
+#line 1494 "./util/configparser.y"
 
 
 /* parse helper routines could be here */
index ec321093a1472f2e2a3275d6e4f28e7209e84707..ffdc2e5244ea7326feeb751f1ea9672bb86265eb 100644 (file)
@@ -193,7 +193,8 @@ extern int yydebug;
      VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 402,
      VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 403,
      VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 404,
-     VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 405
+     VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 405,
+     VAR_HARDEN_ALGO_DOWNGRADE = 406
    };
 #endif
 /* Tokens.  */
@@ -345,6 +346,7 @@ extern int yydebug;
 #define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 403
 #define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 404
 #define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 405
+#define VAR_HARDEN_ALGO_DOWNGRADE 406
 
 
 
@@ -358,7 +360,7 @@ typedef union YYSTYPE
 
 
 /* Line 2058 of yacc.c  */
-#line 362 "util/configparser.h"
+#line 364 "util/configparser.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
index 396ea3c64d64ab9b20978e7e4dba4624e6d10256..08610a78ce361f67c99f3cd403afe4d8e8c5907a 100644 (file)
@@ -118,6 +118,7 @@ extern struct config_parser_state* cfg_parser;
 %token VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES
 %token VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES
 %token VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES
+%token VAR_HARDEN_ALGO_DOWNGRADE
 
 %%
 toplevelvars: /* empty */ | toplevelvars toplevelvar ;
@@ -177,7 +178,7 @@ content_server: server_num_threads | server_verbosity | server_port |
        server_minimal_responses | server_rrset_roundrobin | server_max_udp_size |
        server_so_reuseport | server_delay_close | server_unblock_lan_zones |
        server_dns64_prefix | server_dns64_synthall |
-       server_infra_cache_min_rtt
+       server_infra_cache_min_rtt | server_harden_algo_downgrade
        ;
 stubstart: VAR_STUB_ZONE
        {
@@ -846,6 +847,16 @@ server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG
                free($2);
        }
        ;
+server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG
+       {
+               OUTYY(("P(server_harden_algo_downgrade:%s)\n", $2));
+               if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+                       yyerror("expected yes or no.");
+               else cfg_parser->cfg->harden_algo_downgrade = 
+                       (strcmp($2, "yes")==0);
+               free($2);
+       }
+       ;
 server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG
        {
                OUTYY(("P(server_use_caps_for_id:%s)\n", $2));
index cc07cc2b15255f59b099d58f52404bdc089af722..45ac18b11d94a7824e1b225e4e0af1e54e199791 100644 (file)
@@ -2352,7 +2352,7 @@ primeResponseToKE(struct ub_packed_rrset_key* dnskey_rrset,
        struct key_entry_key* kkey = NULL;
        enum sec_status sec = sec_status_unchecked;
        char* reason = NULL;
-       int downprot = 1;
+       int downprot = qstate->env->cfg->harden_algo_downgrade;
 
        if(!dnskey_rrset) {
                log_nametypeclass(VERB_OPS, "failed to prime trust anchor -- "