]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[5535] kea-dhcp4 parsing now supports relay "ip-addresses"
authorThomas Markwalder <tmark@isc.org>
Thu, 26 Apr 2018 17:54:45 +0000 (13:54 -0400)
committerThomas Markwalder <tmark@isc.org>
Thu, 26 Apr 2018 17:54:45 +0000 (13:54 -0400)
src/bin/dhcp4/dhcp4_lexer.ll
src/bin/dhcp4/dhcp4_parser.yy
    Modified to support "ip-address" and
    "ip-addresses" under "relay"

src/bin/dhcp4/tests/get_config_unittest.cc
    Updated per process.

src/bin/dhcp4/tests/config_parser_unittest.cc
    void checkResult() - modified to output parsing error text

    TEST_F(Dhcp4ParserTest, subnetRelayInfo)
    TEST_F(Dhcp4ParserTest, classifySubnets)
    - updated to use new Network methods

    TEST_F(Dhcp4ParserTest, subnetRelayInfoList) - new test
    to verify a list of addresses in relay

13 files changed:
src/bin/dhcp4/dhcp4_lexer.cc
src/bin/dhcp4/dhcp4_lexer.ll
src/bin/dhcp4/dhcp4_parser.cc
src/bin/dhcp4/dhcp4_parser.h
src/bin/dhcp4/dhcp4_parser.yy
src/bin/dhcp4/location.hh
src/bin/dhcp4/position.hh
src/bin/dhcp4/stack.hh
src/bin/dhcp4/tests/config_parser_unittest.cc
src/bin/dhcp4/tests/get_config_unittest.cc
src/lib/eval/location.hh
src/lib/eval/position.hh
src/lib/eval/stack.hh

index 989843297c16abd83e4186dbd2e83df6c7a3d94b..63aa9cf0382ba32f1450cb2b60a392072e5dee30 100644 (file)
@@ -1,27 +1,22 @@
-#line 1 "dhcp4_lexer.cc"
+#line 2 "dhcp4_lexer.cc"
 
-#line 3 "dhcp4_lexer.cc"
+#line 4 "dhcp4_lexer.cc"
 
 #define  YY_INT_ALIGNED short int
 
 /* A lexical scanner generated by flex */
 
 /* %not-for-header */
+
 /* %if-c-only */
 /* %if-not-reentrant */
 #define yy_create_buffer parser4__create_buffer
 #define yy_delete_buffer parser4__delete_buffer
-#define yy_scan_buffer parser4__scan_buffer
-#define yy_scan_string parser4__scan_string
-#define yy_scan_bytes parser4__scan_bytes
+#define yy_flex_debug parser4__flex_debug
 #define yy_init_buffer parser4__init_buffer
 #define yy_flush_buffer parser4__flush_buffer
 #define yy_load_buffer_state parser4__load_buffer_state
 #define yy_switch_to_buffer parser4__switch_to_buffer
-#define yypush_buffer_state parser4_push_buffer_state
-#define yypop_buffer_state parser4_pop_buffer_state
-#define yyensure_buffer_stack parser4_ensure_buffer_stack
-#define yy_flex_debug parser4__flex_debug
 #define yyin parser4_in
 #define yyleng parser4_leng
 #define yylex parser4_lex
@@ -41,7 +36,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 4
+#define YY_FLEX_SUBMINOR_VERSION 0
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
 /* %endif */
 
 /* %if-c-only */
-#ifdef yy_create_buffer
-#define parser4__create_buffer_ALREADY_DEFINED
-#else
-#define yy_create_buffer parser4__create_buffer
-#endif
-
-#ifdef yy_delete_buffer
-#define parser4__delete_buffer_ALREADY_DEFINED
-#else
-#define yy_delete_buffer parser4__delete_buffer
-#endif
-
-#ifdef yy_scan_buffer
-#define parser4__scan_buffer_ALREADY_DEFINED
-#else
-#define yy_scan_buffer parser4__scan_buffer
-#endif
-
-#ifdef yy_scan_string
-#define parser4__scan_string_ALREADY_DEFINED
-#else
-#define yy_scan_string parser4__scan_string
-#endif
-
-#ifdef yy_scan_bytes
-#define parser4__scan_bytes_ALREADY_DEFINED
-#else
-#define yy_scan_bytes parser4__scan_bytes
-#endif
-
-#ifdef yy_init_buffer
-#define parser4__init_buffer_ALREADY_DEFINED
-#else
-#define yy_init_buffer parser4__init_buffer
-#endif
-
-#ifdef yy_flush_buffer
-#define parser4__flush_buffer_ALREADY_DEFINED
-#else
-#define yy_flush_buffer parser4__flush_buffer
-#endif
-
-#ifdef yy_load_buffer_state
-#define parser4__load_buffer_state_ALREADY_DEFINED
-#else
-#define yy_load_buffer_state parser4__load_buffer_state
-#endif
-
-#ifdef yy_switch_to_buffer
-#define parser4__switch_to_buffer_ALREADY_DEFINED
-#else
-#define yy_switch_to_buffer parser4__switch_to_buffer
-#endif
-
-#ifdef yypush_buffer_state
-#define parser4_push_buffer_state_ALREADY_DEFINED
-#else
-#define yypush_buffer_state parser4_push_buffer_state
-#endif
-
-#ifdef yypop_buffer_state
-#define parser4_pop_buffer_state_ALREADY_DEFINED
-#else
-#define yypop_buffer_state parser4_pop_buffer_state
-#endif
-
-#ifdef yyensure_buffer_stack
-#define parser4_ensure_buffer_stack_ALREADY_DEFINED
-#else
-#define yyensure_buffer_stack parser4_ensure_buffer_stack
-#endif
-
-#ifdef yylex
-#define parser4_lex_ALREADY_DEFINED
-#else
-#define yylex parser4_lex
-#endif
-
-#ifdef yyrestart
-#define parser4_restart_ALREADY_DEFINED
-#else
-#define yyrestart parser4_restart
-#endif
-
-#ifdef yylex_init
-#define parser4_lex_init_ALREADY_DEFINED
-#else
-#define yylex_init parser4_lex_init
-#endif
-
-#ifdef yylex_init_extra
-#define parser4_lex_init_extra_ALREADY_DEFINED
-#else
-#define yylex_init_extra parser4_lex_init_extra
-#endif
-
-#ifdef yylex_destroy
-#define parser4_lex_destroy_ALREADY_DEFINED
-#else
-#define yylex_destroy parser4_lex_destroy
-#endif
-
-#ifdef yyget_debug
-#define parser4_get_debug_ALREADY_DEFINED
-#else
-#define yyget_debug parser4_get_debug
-#endif
-
-#ifdef yyset_debug
-#define parser4_set_debug_ALREADY_DEFINED
-#else
-#define yyset_debug parser4_set_debug
-#endif
-
-#ifdef yyget_extra
-#define parser4_get_extra_ALREADY_DEFINED
-#else
-#define yyget_extra parser4_get_extra
-#endif
-
-#ifdef yyset_extra
-#define parser4_set_extra_ALREADY_DEFINED
-#else
-#define yyset_extra parser4_set_extra
-#endif
-
-#ifdef yyget_in
-#define parser4_get_in_ALREADY_DEFINED
-#else
-#define yyget_in parser4_get_in
-#endif
-
-#ifdef yyset_in
-#define parser4_set_in_ALREADY_DEFINED
-#else
-#define yyset_in parser4_set_in
-#endif
-
-#ifdef yyget_out
-#define parser4_get_out_ALREADY_DEFINED
-#else
-#define yyget_out parser4_get_out
-#endif
-
-#ifdef yyset_out
-#define parser4_set_out_ALREADY_DEFINED
-#else
-#define yyset_out parser4_set_out
-#endif
-
-#ifdef yyget_leng
-#define parser4_get_leng_ALREADY_DEFINED
-#else
-#define yyget_leng parser4_get_leng
-#endif
-
-#ifdef yyget_text
-#define parser4_get_text_ALREADY_DEFINED
-#else
-#define yyget_text parser4_get_text
-#endif
-
-#ifdef yyget_lineno
-#define parser4_get_lineno_ALREADY_DEFINED
-#else
-#define yyget_lineno parser4_get_lineno
-#endif
-
-#ifdef yyset_lineno
-#define parser4_set_lineno_ALREADY_DEFINED
-#else
-#define yyset_lineno parser4_set_lineno
-#endif
-
-#ifdef yywrap
-#define parser4_wrap_ALREADY_DEFINED
-#else
-#define yywrap parser4_wrap
-#endif
-
+    
 /* %endif */
 
-#ifdef yyalloc
-#define parser4_alloc_ALREADY_DEFINED
-#else
-#define yyalloc parser4_alloc
-#endif
-
-#ifdef yyrealloc
-#define parser4_realloc_ALREADY_DEFINED
-#else
-#define yyrealloc parser4_realloc
-#endif
-
-#ifdef yyfree
-#define parser4_free_ALREADY_DEFINED
-#else
-#define yyfree parser4_free
-#endif
-
 /* %if-c-only */
 
-#ifdef yytext
-#define parser4_text_ALREADY_DEFINED
-#else
-#define yytext parser4_text
-#endif
-
-#ifdef yyleng
-#define parser4_leng_ALREADY_DEFINED
-#else
-#define yyleng parser4_leng
-#endif
-
-#ifdef yyin
-#define parser4_in_ALREADY_DEFINED
-#else
-#define yyin parser4_in
-#endif
-
-#ifdef yyout
-#define parser4_out_ALREADY_DEFINED
-#else
-#define yyout parser4_out
-#endif
-
-#ifdef yy_flex_debug
-#define parser4__flex_debug_ALREADY_DEFINED
-#else
-#define yy_flex_debug parser4__flex_debug
-#endif
-
-#ifdef yylineno
-#define parser4_lineno_ALREADY_DEFINED
-#else
-#define yylineno parser4_lineno
-#endif
-
 /* %endif */
 
 /* First, we deal with  platform-specific or compiler-specific issues. */
@@ -365,39 +127,50 @@ typedef unsigned int flex_uint32_t;
 #define UINT32_MAX             (4294967295U)
 #endif
 
-#ifndef SIZE_MAX
-#define SIZE_MAX               (~(size_t)0)
-#endif
-
 #endif /* ! C99 */
 
 #endif /* ! FLEXINT_H */
 
 /* %endif */
 
-/* begin standard C++ headers. */
 /* %if-c++-only */
 /* %endif */
 
-/* TODO: this is always defined, so inline it */
-#define yyconst const
+#ifdef __cplusplus
 
-#if defined(__GNUC__) && __GNUC__ >= 3
-#define yynoreturn __attribute__((__noreturn__))
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else  /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
 #else
-#define yynoreturn
+#define yyconst
 #endif
 
 /* %not-for-header */
+
 /* Returned upon end-of-file. */
 #define YY_NULL 0
 /* %ok-for-header */
 
 /* %not-for-header */
-/* Promotes a possibly negative, possibly signed char to an
- *   integer in range [0..255] for use as an array index.
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
  */
-#define YY_SC_TO_UI(c) ((YY_CHAR) (c))
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
 /* %ok-for-header */
 
 /* %if-reentrant */
@@ -412,16 +185,20 @@ typedef unsigned int flex_uint32_t;
  * definition of BEGIN.
  */
 #define BEGIN (yy_start) = 1 + 2 *
+
 /* Translate the current start state into a value that can be later handed
  * to BEGIN to return to the state.  The YYSTATE alias is for lex
  * compatibility.
  */
 #define YY_START (((yy_start) - 1) / 2)
 #define YYSTATE YY_START
+
 /* Action number for EOF rule of a given start state. */
 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
 /* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( yyin  )
+#define YY_NEW_FILE parser4_restart(parser4_in  )
+
 #define YY_END_OF_BUFFER_CHAR 0
 
 /* Size of default input buffer. */
@@ -452,19 +229,19 @@ typedef size_t yy_size_t;
 #endif
 
 /* %if-not-reentrant */
-extern int yyleng;
+extern yy_size_t parser4_leng;
 /* %endif */
 
 /* %if-c-only */
 /* %if-not-reentrant */
-extern FILE *yyin, *yyout;
+extern FILE *parser4_in, *parser4_out;
 /* %endif */
 /* %endif */
 
 #define EOB_ACT_CONTINUE_SCAN 0
 #define EOB_ACT_END_OF_FILE 1
 #define EOB_ACT_LAST_MATCH 2
-    
+
     #define YY_LESS_LINENO(n)
     #define YY_LINENO_REWIND_TO(ptr)
     
@@ -472,15 +249,16 @@ extern FILE *yyin, *yyout;
 #define yyless(n) \
        do \
                { \
-               /* Undo effects of setting up yytext. */ \
+               /* Undo effects of setting up parser4_text. */ \
         int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
                *yy_cp = (yy_hold_char); \
                YY_RESTORE_YY_MORE_OFFSET \
                (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
-               YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+               YY_DO_BEFORE_ACTION; /* set up parser4_text again */ \
                } \
        while ( 0 )
+
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
 #ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -500,7 +278,7 @@ struct yy_buffer_state
        /* Size of input buffer in bytes, not including room for EOB
         * characters.
         */
-       int yy_buf_size;
+       yy_size_t yy_buf_size;
 
        /* Number of characters read into yy_ch_buf, not including EOB
         * characters.
@@ -528,7 +306,7 @@ struct yy_buffer_state
 
     int yy_bs_lineno; /**< The line count. */
     int yy_bs_column; /**< The column count. */
-
+    
        /* Whether to try to fill the input buffer when we reach the
         * end of it.
         */
@@ -545,8 +323,8 @@ struct yy_buffer_state
         * possible backing-up.
         *
         * When we actually see the EOF, we change the status to "new"
-        * (via yyrestart()), so that the user can continue scanning by
-        * just pointing yyin at a new input file.
+        * (via parser4_restart()), so that the user can continue scanning by
+        * just pointing parser4_in at a new input file.
         */
 #define YY_BUFFER_EOF_PENDING 2
 
@@ -555,12 +333,13 @@ struct yy_buffer_state
 
 /* %if-c-only Standard (non-C++) definition */
 /* %not-for-header */
+
 /* %if-not-reentrant */
 
 /* Stack of input buffers. */
 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
 /* %endif */
 /* %ok-for-header */
 
@@ -575,6 +354,7 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
                           ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
                           : NULL)
+
 /* Same as previous macro, but useful when we know that the buffer stack is not
  * NULL or when we need an lvalue. For internal use only.
  */
@@ -584,115 +364,126 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 
 /* %if-not-reentrant */
 /* %not-for-header */
-/* yy_hold_char holds the character lost when yytext is formed. */
+
+/* yy_hold_char holds the character lost when parser4_text is formed. */
 static char yy_hold_char;
 static int yy_n_chars;         /* number of characters read into yy_ch_buf */
-int yyleng;
+yy_size_t parser4_leng;
 
 /* Points to current character in buffer. */
-static char *yy_c_buf_p = NULL;
+static char *yy_c_buf_p = (char *) 0;
 static int yy_init = 0;                /* whether we need to initialize */
 static int yy_start = 0;       /* start state number */
 
-/* Flag which is used to allow yywrap()'s to do buffer switches
- * instead of setting up a fresh yyin.  A bit of a hack ...
+/* Flag which is used to allow parser4_wrap()'s to do buffer switches
+ * instead of setting up a fresh parser4_in.  A bit of a hack ...
  */
 static int yy_did_buffer_switch_on_eof;
 /* %ok-for-header */
 
 /* %endif */
 
-void yyrestart ( FILE *input_file  );
-void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer  );
-YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size  );
-void yy_delete_buffer ( YY_BUFFER_STATE b  );
-void yy_flush_buffer ( YY_BUFFER_STATE b  );
-void yypush_buffer_state ( YY_BUFFER_STATE new_buffer  );
-void yypop_buffer_state ( void );
+void parser4_restart (FILE *input_file  );
+void parser4__switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE parser4__create_buffer (FILE *file,int size  );
+void parser4__delete_buffer (YY_BUFFER_STATE b  );
+void parser4__flush_buffer (YY_BUFFER_STATE b  );
+void parser4_push_buffer_state (YY_BUFFER_STATE new_buffer  );
+void parser4_pop_buffer_state (void );
+
+static void parser4_ensure_buffer_stack (void );
+static void parser4__load_buffer_state (void );
+static void parser4__init_buffer (YY_BUFFER_STATE b,FILE *file  );
 
-static void yyensure_buffer_stack ( void );
-static void yy_load_buffer_state ( void );
-static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file  );
-#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER )
+#define YY_FLUSH_BUFFER parser4__flush_buffer(YY_CURRENT_BUFFER )
 
-YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size  );
-YY_BUFFER_STATE yy_scan_string ( const char *yy_str  );
-YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len  );
+YY_BUFFER_STATE parser4__scan_buffer (char *base,yy_size_t size  );
+YY_BUFFER_STATE parser4__scan_string (yyconst char *yy_str  );
+YY_BUFFER_STATE parser4__scan_bytes (yyconst char *bytes,yy_size_t len  );
 
 /* %endif */
 
-void *yyalloc ( yy_size_t  );
-void *yyrealloc ( void *, yy_size_t  );
-void yyfree ( void *  );
+void *parser4_alloc (yy_size_t  );
+void *parser4_realloc (void *,yy_size_t  );
+void parser4_free (void *  );
+
+#define yy_new_buffer parser4__create_buffer
 
-#define yy_new_buffer yy_create_buffer
 #define yy_set_interactive(is_interactive) \
        { \
        if ( ! YY_CURRENT_BUFFER ){ \
-        yyensure_buffer_stack (); \
+        parser4_ensure_buffer_stack (); \
                YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
+            parser4__create_buffer(parser4_in,YY_BUF_SIZE ); \
        } \
        YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
        }
+
 #define yy_set_bol(at_bol) \
        { \
        if ( ! YY_CURRENT_BUFFER ){\
-        yyensure_buffer_stack (); \
+        parser4_ensure_buffer_stack (); \
                YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
+            parser4__create_buffer(parser4_in,YY_BUF_SIZE ); \
        } \
        YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
        }
+
 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
 
-/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
+/* %% [1.0] parser4_text/parser4_in/parser4_out/yy_state_type/parser4_lineno etc. def's & init go here */
 /* Begin user sect3 */
 
 #define parser4_wrap() (/*CONSTCOND*/1)
 #define YY_SKIP_YYWRAP
 
 #define FLEX_DEBUG
-typedef flex_uint8_t YY_CHAR;
 
-FILE *yyin = NULL, *yyout = NULL;
+typedef unsigned char YY_CHAR;
+
+FILE *parser4_in = (FILE *) 0, *parser4_out = (FILE *) 0;
 
 typedef int yy_state_type;
 
-extern int yylineno;
-int yylineno = 1;
+extern int parser4_lineno;
+
+int parser4_lineno = 1;
 
-extern char *yytext;
+extern char *parser4_text;
 #ifdef yytext_ptr
 #undef yytext_ptr
 #endif
-#define yytext_ptr yytext
+#define yytext_ptr parser4_text
 
 /* %% [1.5] DFA */
 
 /* %if-c-only Standard (non-C++) definition */
 
-static yy_state_type yy_get_previous_state ( void );
-static yy_state_type yy_try_NUL_trans ( yy_state_type current_state  );
-static int yy_get_next_buffer ( void );
-static void yynoreturn yy_fatal_error ( const char* msg  );
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
+static int yy_get_next_buffer (void );
+#if defined(__GNUC__) && __GNUC__ >= 3
+__attribute__((__noreturn__))
+#endif
+static void yy_fatal_error (yyconst char msg[]  );
 
 /* %endif */
 
 /* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
+ * corresponding action - sets up parser4_text.
  */
 #define YY_DO_BEFORE_ACTION \
        (yytext_ptr) = yy_bp; \
-/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
-       yyleng = (int) (yy_cp - yy_bp); \
+/* %% [2.0] code to fiddle parser4_text and parser4_leng for yymore() goes here \ */\
+       parser4_leng = (size_t) (yy_cp - yy_bp); \
        (yy_hold_char) = *yy_cp; \
        *yy_cp = '\0'; \
-/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
+/* %% [3.0] code to copy yytext_ptr to parser4_text[] goes here, if %array \ */\
        (yy_c_buf_p) = yy_cp;
+
 /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 167
-#define YY_END_OF_BUFFER 168
+#define YY_NUM_RULES 168
+#define YY_END_OF_BUFFER 169
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -700,21 +491,21 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static const flex_int16_t yy_accept[1393] =
+static yyconst flex_int16_t yy_accept[1396] =
     {   0,
-      160,  160,    0,    0,    0,    0,    0,    0,    0,    0,
-      168,  166,   10,   11,  166,    1,  160,  157,  160,  160,
-      166,  159,  158,  166,  166,  166,  166,  166,  153,  154,
-      166,  166,  166,  155,  156,    5,    5,    5,  166,  166,
-      166,   10,   11,    0,    0,  149,    0,    0,    0,    0,
+      161,  161,    0,    0,    0,    0,    0,    0,    0,    0,
+      169,  167,   10,   11,  167,    1,  161,  158,  161,  161,
+      167,  160,  159,  167,  167,  167,  167,  167,  154,  155,
+      167,  167,  167,  156,  157,    5,    5,    5,  167,  167,
+      167,   10,   11,    0,    0,  150,    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,    1,
-      160,  160,    0,  159,  160,    3,    2,    6,    0,  160,
+      161,  161,    0,  160,  161,    3,    2,    6,    0,  161,
         0,    0,    0,    0,    0,    0,    4,    0,    0,    9,
 
-        0,  150,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  152,    0,    0,    0,
+        0,  151,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  153,    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,
@@ -722,7 +513,7 @@ static const flex_int16_t yy_accept[1393] =
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    2,    0,    0,    0,
         0,    0,    0,    0,    8,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  151,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  152,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -732,10 +523,10 @@ static const flex_int16_t yy_accept[1393] =
         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,  165,  163,    0,  162,  161,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  130,    0,
+        0,    0,    0,  166,  164,    0,  163,  162,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  131,    0,
 
-      129,    0,    0,   69,    0,    0,    0,    0,    0,    0,
+      130,    0,    0,   69,    0,    0,    0,    0,    0,    0,
         0,    0,    0,   30,    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,
@@ -744,9 +535,9 @@ static const flex_int16_t yy_accept[1393] =
         0,    0,    0,   15,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,   16,    0,    0,    0,    0,
-      164,  161,    0,    0,    0,    0,    0,    0,    0,    0,
+      165,  162,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,  131,    0,    0,  133,    0,    0,    0,    0,
+        0,    0,  132,    0,    0,  134,    0,    0,    0,    0,
         0,    0,    0,   70,    0,    0,    0,    0,    0,   54,
         0,    0,    0,    0,    0,   87,    0,    0,    0,    0,
         0,    0,    0,    0,    0,   33,    0,    0,    0,    0,
@@ -757,8 +548,8 @@ static const flex_int16_t yy_accept[1393] =
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,   84,   26,    0,    0,   31,
 
-        0,    0,    0,    0,    0,    0,    0,    0,   12,  138,
-        0,  135,    0,  134,    0,    0,    0,   97,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   12,  139,
+        0,  136,    0,  135,    0,    0,    0,   97,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,   77,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -768,7 +559,7 @@ static const flex_int16_t yy_accept[1393] =
         0,    0,   98,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,   93,    0,    0,    0,    0,    0,
 
-        0,    0,    7,    0,    0,  136,    0,    0,    0,    0,
+        0,    0,    7,    0,    0,  137,    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,
@@ -782,12 +573,12 @@ static const flex_int16_t yy_accept[1393] =
         0,    0,    0,    0,    0,    0,   59,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,   91,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  102,   73,    0,    0,    0,
+        0,    0,    0,    0,    0,  103,   73,    0,    0,    0,
         0,   78,   27,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,   35,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,   49,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  139,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  140,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,   66,    0,    0,
@@ -798,67 +589,67 @@ static const flex_int16_t yy_accept[1393] =
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,   80,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   89,    0,    0,    0,    0,    0,    0,  114,    0,
+        0,   89,    0,    0,    0,    0,    0,    0,  115,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
         0,    0,   61,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,   21,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  119,    0,
-        0,  117,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  143,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  120,    0,
+        0,  118,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  144,    0,    0,    0,    0,    0,    0,
        90,    0,    0,    0,    0,   94,   76,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        88,    0,   20,    0,   99,    0,    0,    0,    0,    0,
-        0,  123,    0,    0,    0,    0,   51,    0,    0,    0,
+        0,    0,  124,    0,    0,    0,    0,   51,    0,    0,
 
-        0,    0,  101,   29,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  102,   29,    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,   55,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   96,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   55,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   96,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  146,    0,   52,   68,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   46,    0,    0,    0,    0,
-        0,    0,  120,    0,  118,    0,  113,  112,    0,   42,
-        0,   19,    0,    0,    0,    0,    0,  132,    0,    0,
-
-       83,    0,    0,    0,    0,    0,    0,  110,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   62,    0,    0,
-       36,    0,    0,    0,    0,    0,  122,    0,    0,    0,
-        0,    0,    0,   64,   47,    0,    0,   95,    0,    0,
-        0,    0,   86,    0,    0,    0,    0,    0,   58,    0,
-      141,    0,  140,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  147,    0,   52,   68,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   46,    0,    0,
+        0,    0,    0,    0,  121,    0,  119,    0,  114,  113,
+        0,   42,    0,   19,    0,    0,    0,    0,    0,  133,
+
+        0,    0,   83,    0,    0,    0,    0,    0,    0,  111,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   62,
+        0,  100,    0,   36,    0,    0,    0,    0,    0,  123,
+        0,    0,    0,    0,    0,    0,   64,   47,    0,    0,
+       95,    0,    0,    0,    0,   86,    0,    0,    0,    0,
+        0,   58,    0,  142,    0,  141,    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,   41,    0,    0,    0,    0,    0,  148,
-
-       81,    0,   43,  111,    0,    0,  144,  115,    0,    0,
-        0,    0,    0,    0,   23,    0,    0,   22,    0,  121,
-        0,    0,    0,    0,    0,   74,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   45,
-        0,    0,    0,   37,    0,    0,    0,    0,    0,    0,
-      100,    0,   24,    0,  145,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   40,    0,    0,   18,
-      147,   50,    0,  142,  137,    0,    0,   14,    0,    0,
-      128,    0,    0,    0,    0,  108,    0,   85,    0,    0,
-        0,    0,    0,    0,    0,    0,   65,    0,    0,    0,
-
-        0,    0,    0,    0,   13,    0,    0,    0,    0,    0,
-      116,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  107,    0,   17,    0,  125,    0,    0,    0,
-        0,    0,  124,    0,    0,    0,  106,    0,   44,    0,
-        0,   39,  127,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   41,    0,    0,    0,
+
+        0,    0,  149,   81,    0,   43,  112,    0,    0,  145,
+      116,    0,    0,    0,    0,    0,    0,   23,    0,    0,
+       22,    0,  122,    0,    0,    0,    0,    0,   74,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   45,    0,    0,    0,   37,    0,    0,    0,
+        0,    0,    0,  101,    0,   24,    0,  146,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   40,
+        0,    0,   18,  148,   50,    0,  143,  138,    0,    0,
+       14,    0,    0,  129,    0,    0,    0,    0,  109,    0,
+       85,    0,    0,    0,    0,    0,    0,    0,    0,   65,
+
+        0,    0,    0,    0,    0,    0,    0,   13,    0,    0,
+        0,    0,    0,  117,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  108,    0,   17,    0,  126,
+        0,    0,    0,    0,    0,  125,    0,    0,    0,  107,
+        0,   44,    0,    0,   39,  128,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  126,    0,   82,    0,    0,
-        0,    0,    0,  104,  109,   48,    0,    0,    0,  103,
-        0,    0,    0,    0,    0,    0,    0,   71,    0,    0,
-      105,    0
+        0,    0,    0,    0,    0,    0,    0,    0,  127,    0,
+       82,    0,    0,    0,    0,    0,  105,  110,   48,    0,
+        0,    0,  104,    0,    0,    0,    0,    0,    0,    0,
+       71,    0,    0,  106,    0
 
     } ;
 
-static const YY_CHAR yy_ec[256] =
+static yyconst YY_CHAR yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
         1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
@@ -890,7 +681,7 @@ static const YY_CHAR yy_ec[256] =
         5,    5,    5,    5,    5
     } ;
 
-static const YY_CHAR yy_meta[72] =
+static yyconst YY_CHAR yy_meta[72] =
     {   0,
         1,    1,    2,    3,    3,    4,    3,    3,    3,    3,
         3,    3,    3,    5,    5,    5,    3,    3,    3,    3,
@@ -902,329 +693,329 @@ static const YY_CHAR yy_meta[72] =
         3
     } ;
 
-static const flex_int16_t yy_base[1405] =
+static yyconst flex_uint16_t yy_base[1408] =
     {   0,
         0,   70,   19,   29,   41,   49,   52,   58,   87,   95,
-     1755, 1756,   32, 1751,  141,    0,  201, 1756,  206,   88,
-       11,  213, 1756, 1733,  114,   25,    2,    6, 1756, 1756,
-       73,   11,   17, 1756, 1756, 1756,  104, 1739, 1694,    0,
-     1731,  107, 1746,  217,  247, 1756, 1690,  185, 1689, 1695,
-       93,   58, 1687,   91,  211,  195,   14,  273,  195, 1686,
-      181,  275,  202,  209, 1695,   66,  188, 1694,  232,  219,
-      296,  284,  207, 1677,   78,  287,  324,  305, 1696,    0,
-      339,  359,  367,  374,  379, 1756,    0, 1756,  301,  344,
-      223,  295,  196,  336,  348,  210, 1756, 1693, 1732, 1756,
-
-      322, 1756,  392, 1721,  330, 1679, 1689,  351,  366, 1684,
-      363,  370,  372,  379,  241, 1727,    0,  443,  376, 1671,
-     1673, 1669, 1677,  362, 1673, 1662, 1663,   89, 1679, 1662,
-     1671, 1671,  366, 1662,  353, 1663,  358, 1708, 1712, 1654,
-     1705, 1647, 1670, 1667, 1667, 1661,  358, 1654, 1647, 1652,
-     1646,  378, 1657, 1650, 1641, 1640, 1654,  373, 1640,  386,
-     1656,   72,  439, 1643,  413, 1654, 1651, 1652, 1650,  414,
-     1632, 1634,  420, 1626, 1643, 1635,    0,  389,  425,  331,
-      398,  442,  414, 1634, 1756,    0, 1677,  419, 1624, 1627,
-      438,  445, 1635,  456, 1678,  457, 1677,  446, 1676, 1756,
-
-      492, 1675,  465, 1636, 1616, 1632, 1629, 1628, 1619,  462,
-     1668, 1662, 1628, 1607, 1615, 1610, 1624, 1620, 1608, 1620,
-     1620, 1611, 1595, 1599, 1612, 1612, 1604, 1594, 1612, 1756,
-     1607, 1610, 1591, 1590, 1640, 1589, 1599, 1602,  466, 1598,
-     1586, 1597, 1633, 1580, 1636, 1573, 1588,  484, 1578, 1594,
-     1575, 1574, 1580, 1571, 1570, 1577, 1579, 1624, 1582, 1581,
-     1575,  311, 1582, 1577, 1569, 1559, 1574, 1573, 1573, 1554,
-     1570, 1556, 1562, 1569, 1557,  314, 1550, 1564, 1605, 1566,
-      450, 1557,  485, 1756, 1756,  487, 1756, 1756, 1544,    0,
-      468,  293, 1546,  508,  496, 1600, 1553,  489, 1756, 1598,
-
-     1756, 1592,  537, 1756,  487, 1534, 1590, 1536, 1542, 1592,
-     1549, 1548,  503, 1756, 1546, 1588, 1543, 1540,  415, 1546,
-     1584, 1578, 1533, 1528, 1525, 1574, 1533, 1522, 1571, 1519,
-      543, 1533, 1518, 1531, 1518, 1528, 1523, 1530, 1525, 1521,
-      485, 1519, 1522, 1517, 1513, 1561,  507, 1555, 1756, 1554,
-     1506, 1505, 1504, 1497, 1499, 1503, 1492, 1505,  528, 1550,
-     1505, 1502, 1506, 1756, 1504, 1493, 1493, 1505,  508, 1480,
-     1481, 1502,  519, 1484, 1533, 1495, 1494, 1480, 1492, 1491,
-     1490, 1489,  516, 1530, 1529, 1756, 1473, 1472,  566, 1485,
-     1756, 1756, 1484,    0, 1473, 1465,  514, 1470, 1521, 1520,
-
-     1478, 1518, 1756, 1466, 1516, 1756,  557,  603,  534, 1515,
-     1471, 1467, 1455, 1756, 1460, 1470, 1469, 1456, 1455, 1756,
-     1457, 1454,  480, 1452, 1454, 1756, 1462, 1459, 1444, 1457,
-     1452,  568, 1459, 1441, 1490, 1756, 1439, 1455, 1487, 1450,
-     1447, 1448, 1450, 1482, 1435, 1430, 1429, 1478, 1424, 1439,
-     1417, 1424, 1429, 1477, 1756, 1424, 1420, 1418, 1427, 1421,
-     1428, 1412, 1412, 1422, 1425, 1414, 1409, 1756, 1464, 1756,
-     1408, 1419, 1456, 1403, 1408, 1417, 1411, 1405, 1414, 1454,
-     1448, 1412, 1395, 1395, 1390, 1410, 1392, 1391, 1399, 1403,
-     1386, 1442, 1384, 1398, 1387, 1756, 1756, 1387, 1385, 1756,
-
-     1396, 1430, 1392,    0, 1376, 1393, 1431, 1381, 1756, 1756,
-     1378, 1756, 1384, 1756,  544,  545,  582, 1756, 1381, 1369,
-     1420, 1367, 1366, 1365, 1372, 1365, 1377, 1376, 1376, 1364,
-     1405, 1372, 1364, 1407, 1353, 1369, 1368, 1756, 1353, 1350,
-     1364, 1356, 1362, 1353, 1361, 1346, 1362, 1344, 1358, 1356,
-     1339, 1333, 1338, 1353, 1350, 1351, 1348, 1389, 1346, 1756,
-     1332, 1334, 1343, 1341, 1378, 1377, 1330,  551, 1339, 1322,
-     1323, 1320, 1756, 1334, 1313, 1334, 1331, 1323, 1366, 1320,
-     1327, 1363, 1756, 1310, 1324, 1308, 1322, 1325, 1306, 1356,
-     1355, 1302, 1353, 1352, 1756,   14, 1314, 1314, 1312, 1295,
-
-     1300, 1302, 1756, 1308, 1298, 1756, 1343, 1291, 1346,  545,
-      567,  539, 1296, 1339,  551, 1343, 1337, 1336, 1335, 1289,
-     1279, 1332, 1285, 1295, 1329, 1292, 1286, 1273, 1281, 1324,
-     1328, 1285, 1284, 1285, 1278, 1267, 1280, 1283, 1278, 1279,
-     1276, 1275, 1278, 1273, 1314, 1313, 1263, 1253,  540, 1310,
-     1756, 1309, 1258, 1250, 1251, 1300, 1263, 1250, 1261, 1756,
-     1249, 1258, 1257, 1257, 1297, 1240, 1249, 1242, 1253, 1230,
-     1234, 1285, 1249, 1231, 1241, 1281, 1280, 1279, 1226, 1277,
-      552,  561, 1219, 1229,  573, 1756, 1279, 1225, 1235, 1235,
-     1218, 1223, 1227, 1217, 1229, 1232, 1269, 1756, 1263,  573,
-
-     1216, 1224, 1223, 1218, 1214, 1221, 1756, 1204, 1207, 1203,
-     1220, 1215, 1203, 1199, 1206, 1200, 1252, 1209,    0,   24,
-       66, 1756,  191,  241,  438,  554,  561,  604,  558,  560,
-      575,  569,  626,  570,  573, 1756, 1756,  585,  590,  595,
-      583, 1756, 1756,  597,  584,  578,  583,  609,  587,  635,
-      595,  644,  595,  652, 1756,  599,  603,  605,  599,  657,
+     1758, 1759,   32, 1754,  141,    0,  201, 1759,  206,   88,
+       11,  213, 1759, 1736,  114,   25,    2,    6, 1759, 1759,
+       73,   11,   17, 1759, 1759, 1759,  104, 1742, 1697,    0,
+     1734,  107, 1749,  217,  247, 1759, 1693,  185, 1692, 1698,
+       93,   58, 1690,   91,  211,  195,   14,  273,  195, 1689,
+      181,  275,  202,  209, 1698,   66,  188, 1697,  232,  219,
+      296,  284,  207, 1680,   78,  287,  324,  305, 1699,    0,
+      339,  359,  367,  374,  379, 1759,    0, 1759,  301,  344,
+      223,  295,  196,  336,  348,  210, 1759, 1696, 1735, 1759,
+
+      322, 1759,  392, 1724,  330, 1682, 1692,  351,  366, 1687,
+      363,  370,  372,  379,  241, 1730,    0,  443,  376, 1674,
+     1676, 1672, 1680,  362, 1676, 1665, 1666,   89, 1682, 1665,
+     1674, 1674,  366, 1665,  353, 1666,  358, 1711, 1715, 1657,
+     1708, 1650, 1673, 1670, 1670, 1664,  358, 1657, 1650, 1655,
+     1649,  378, 1660, 1653, 1644, 1643, 1657,  373, 1643,  386,
+     1659,   72,  439, 1646,  413, 1657, 1654, 1655, 1653,  414,
+     1635, 1637,  420, 1629, 1646, 1638,    0,  389,  425,  331,
+      398,  442,  414, 1637, 1759,    0, 1680,  419, 1627, 1630,
+      438,  445, 1638,  456, 1681,  457, 1680,  446, 1679, 1759,
+
+      492, 1678,  465, 1639, 1619, 1635, 1632, 1631, 1622,  462,
+     1671, 1665, 1631, 1610, 1618, 1613, 1627, 1623, 1611, 1623,
+     1623, 1614, 1598, 1602, 1615, 1615, 1607, 1597, 1615, 1759,
+     1610, 1613, 1594, 1593, 1643, 1592, 1602, 1605,  466, 1601,
+     1589, 1600, 1636, 1583, 1639, 1576, 1591,  484, 1581, 1597,
+     1578, 1577, 1583, 1574, 1573, 1580, 1582, 1627, 1585, 1584,
+     1578,  311, 1585, 1580, 1572, 1562, 1577, 1576, 1576, 1557,
+     1573, 1559, 1565, 1572, 1560,  314, 1553, 1567, 1608, 1569,
+      450, 1560,  485, 1759, 1759,  487, 1759, 1759, 1547,    0,
+      468,  293, 1549,  508,  496, 1603, 1556,  489, 1759, 1601,
+
+     1759, 1595,  537, 1759,  487, 1537, 1593, 1539, 1545, 1595,
+     1552, 1551,  503, 1759, 1549, 1591, 1546, 1543,  415, 1549,
+     1587, 1581, 1536, 1531, 1528, 1577, 1536, 1525, 1574, 1522,
+      543, 1536, 1521, 1534, 1521, 1531, 1526, 1533, 1528, 1524,
+      485, 1522, 1525, 1520, 1516, 1564,  507, 1558, 1759, 1557,
+     1509, 1508, 1507, 1500, 1502, 1506, 1495, 1508,  528, 1553,
+     1508, 1505, 1509, 1759, 1507, 1496, 1496, 1508,  508, 1483,
+     1484, 1505,  519, 1487, 1536, 1498, 1497, 1483, 1495, 1494,
+     1493, 1492,  516, 1533, 1532, 1759, 1476, 1475,  566, 1488,
+     1759, 1759, 1487,    0, 1476, 1468,  514, 1473, 1524, 1523,
+
+     1481, 1521, 1759, 1469, 1519, 1759,  557,  603,  534, 1518,
+     1474, 1470, 1458, 1759, 1463, 1473, 1472, 1459, 1458, 1759,
+     1460, 1457,  480, 1455, 1457, 1759, 1465, 1462, 1447, 1460,
+     1455,  568, 1462, 1444, 1493, 1759, 1442, 1458, 1490, 1453,
+     1450, 1451, 1453, 1485, 1438, 1433, 1432, 1481, 1427, 1442,
+     1420, 1427, 1432, 1480, 1759, 1427, 1423, 1421, 1430, 1424,
+     1431, 1415, 1415, 1425, 1428, 1417, 1412, 1759, 1467, 1759,
+     1411, 1422, 1459, 1406, 1411, 1420, 1414, 1408, 1417, 1457,
+     1451, 1415, 1398, 1398, 1393, 1413, 1395, 1394, 1402, 1406,
+     1389, 1445, 1387, 1401, 1390, 1759, 1759, 1390, 1388, 1759,
+
+     1399, 1433, 1395,    0, 1379, 1396, 1434, 1384, 1759, 1759,
+     1381, 1759, 1387, 1759,  544,  545,  582, 1759, 1384, 1372,
+     1423, 1370, 1369, 1368, 1375, 1368, 1380, 1379, 1379, 1367,
+     1408, 1375, 1367, 1410, 1356, 1372, 1371, 1759, 1356, 1353,
+     1367, 1359, 1365, 1356, 1364, 1349, 1365, 1347, 1361, 1359,
+     1342, 1336, 1341, 1356, 1353, 1354, 1351, 1392, 1349, 1759,
+     1335, 1337, 1346, 1344, 1381, 1380, 1333,  551, 1342, 1325,
+     1326, 1323, 1759, 1337, 1316, 1337, 1334, 1326, 1369, 1323,
+     1330, 1366, 1759, 1313, 1327, 1311, 1325, 1328, 1309, 1359,
+     1358, 1305, 1356, 1355, 1759,   14, 1317, 1317, 1315, 1298,
+
+     1303, 1305, 1759, 1311, 1301, 1759, 1346, 1294, 1349,  545,
+      567,  539, 1299, 1342,  551, 1346, 1340, 1339, 1338, 1292,
+     1282, 1335, 1288, 1298, 1332, 1295, 1289, 1276, 1284, 1327,
+     1331, 1288, 1287, 1288, 1281, 1270, 1283, 1286, 1281, 1282,
+     1279, 1278, 1281, 1276, 1317, 1316, 1266, 1256,  540, 1313,
+     1759, 1312, 1261, 1253, 1254, 1303, 1266, 1253, 1264, 1759,
+     1252, 1261, 1260, 1260, 1300, 1243, 1252, 1245, 1256, 1233,
+     1237, 1288, 1252, 1234, 1244, 1284, 1283, 1282, 1229, 1280,
+      552,  561, 1222, 1232,  573, 1759, 1282, 1228, 1238, 1238,
+     1221, 1226, 1230, 1220, 1232, 1235, 1272, 1759, 1266,  573,
+
+     1219, 1227, 1226, 1221, 1217, 1224, 1759, 1207, 1210, 1206,
+     1223, 1218, 1206, 1202, 1209, 1203, 1255, 1212,    0,   24,
+       66, 1759,  191,  241,  438,  554,  561,  604,  558,  560,
+      575,  569,  626,  570,  573, 1759, 1759,  585,  590,  595,
+      583, 1759, 1759,  597,  584,  578,  583,  609,  587,  635,
+      595,  644,  595,  652, 1759,  599,  603,  605,  599,  657,
       612,  602,  603,  599,  612,  623,  607,  625,  620,  621,
-      615,  617,  618,  618,  620,  673,  632,  637,  614, 1756,
-      639,  629,  674,  634,  624,  639,  640,  627,  641, 1756,
+      615,  617,  618,  618,  620,  673,  632,  637,  614, 1759,
+      639,  629,  674,  634,  624,  639,  640,  627,  641, 1759,
       660,  668,  648,  638,  685,  650,  654,  693,  648,  643,
 
-      644,  640,  649,  644,  700,  659,  650, 1756,  652,  663,
-      648,  664,  658,  703,  671,  656,  657, 1756,  676,  659,
-      716,  661, 1756,  680,  660,  678,  717,  677,  673,  668,
+      644,  640,  649,  644,  700,  659,  650, 1759,  652,  663,
+      648,  664,  658,  703,  671,  656,  657, 1759,  676,  659,
+      716,  661, 1759,  680,  660,  678,  717,  677,  673,  668,
       686,  685,  686,  672,  687,  679,  686,  676,  694,  679,
-     1756,  687,  693,  688,  739, 1756,  690,  695,  737,  690,
+     1759,  687,  693,  688,  739, 1759,  690,  695,  737,  690,
       702,  697,  701,  699,  697,  699,  751,  697,  697,  754,
-      700, 1756,  699,  707,  705,  710,  722,  706,  711,  721,
+      700, 1759,  699,  707,  705,  710,  722,  706,  711,  721,
       722,  727,  766,  725,  741,  746,  720,  730,  722,  774,
-      719, 1756,  726,  731,  738,  779,  780,  729, 1756,  725,
+      719, 1759,  726,  731,  738,  779,  780,  729, 1759,  725,
       728,  727,  747,  744,  749,  750,  736,  744,  753,  733,
 
-      754,  794, 1756,  749,  798,  799,  761,  763,  751,  748,
+      754,  794, 1759,  749,  798,  799,  761,  763,  751,  748,
       755,  764,  807,  756,  754,  756,  773,  812,  764,  763,
-      769,  767,  765,  818,  819,  815,  775, 1756,  780,  773,
-      764,  783,  771,  781,  778,  783,  779,  792, 1756,  775,
-      776, 1756,  777,  775,  794,  795,  792,  777,  798,  797,
-      781,  786,  804, 1756,  794,  827,  818,  790,  849,  812,
-     1756,  795,  810,  802,  806, 1756, 1756,  816,  851,  800,
-      853,  802,  860,  805,  816,  808,  814,  810,  828,  829,
-     1756,  827, 1756,  830, 1756,  833,  823,  816,  828,  871,
-      837, 1756,  829,  879,  822,  881, 1756,  882,  826,  832,
-
-      839,  881, 1756, 1756,  831,  831,  834,  848,  853,  836,
-      893,  852,  853,  854,  892,  846,  899,  849,  901,  850,
-      903,  904,  846,  906,  867,  908,  852,  864,  869,  855,
-      885,  914,  874, 1756,  866,  917,  866,  862,  878,  883,
-      865,  923,  878,  883, 1756,  884,  877,  886,  887,  884,
-      874,  876,  933,  882,  879,  936,  932,  875,  890,  883,
-      942, 1756,  897, 1756, 1756,  902,  894,  904,  891,  892,
-      951,  952,  898,  908,  955, 1756,  905,  905,  907,  910,
-      961,  904, 1756,  925, 1756,  909, 1756, 1756,  923, 1756,
-      917, 1756,  967,  918,  969,  970,  952, 1756,  930,  931,
-
-     1756,  919,  918,  921,  921,  922,  918, 1756,  940,  926,
-      927,  942,  942,  945,  945,  942,  947, 1756,  939,  949,
-     1756,  946,  951,  953,  950,  992, 1756,  943,  944,  944,
-      950,  949,  960, 1756, 1756,  999,  948, 1756,  949,  949,
-      951,  957, 1756,  959,  961,  964, 1013,  976, 1756,  973,
-     1756,  970, 1756,  993, 1013, 1019, 1020,  964, 1022, 1023,
-      978,  972, 1026, 1027, 1023,  988,  984, 1026,  976,  981,
-     1034,  992, 1036,  996, 1038, 1001,  990,  984, 1000, 1000,
-     1045,  989, 1006, 1005,  989, 1045, 1046,  995, 1048, 1013,
-     1014, 1014, 1001, 1756, 1012, 1059, 1019, 1032, 1019, 1756,
-
-     1756, 1063, 1756, 1756, 1012, 1023, 1756, 1756, 1013, 1062,
-     1007, 1012, 1070, 1020, 1756, 1072, 1027, 1756, 1074, 1756,
-     1019, 1034, 1022, 1037, 1041, 1756, 1075, 1043, 1036, 1045,
-     1027, 1034, 1086, 1047, 1046, 1091, 1092, 1093, 1044, 1756,
-     1095, 1096, 1043, 1756, 1047, 1099, 1045, 1044, 1102, 1057,
-     1756, 1099, 1756, 1061, 1756, 1064, 1107, 1062, 1109, 1070,
-     1053, 1055, 1052, 1068, 1069, 1078, 1756, 1068, 1118, 1756,
-     1756, 1756, 1114, 1756, 1756, 1079, 1116, 1756, 1070, 1077,
-     1756, 1074, 1079, 1126, 1071, 1756, 1086, 1756, 1087, 1077,
-     1089, 1132, 1076, 1084, 1085, 1098, 1756, 1097, 1087, 1086,
-
-     1100, 1091, 1100, 1102, 1756, 1144, 1089, 1146, 1106, 1148,
-     1756, 1144, 1108, 1109, 1096, 1091, 1154, 1113, 1114, 1115,
-     1158, 1117, 1756, 1160, 1756, 1123, 1756, 1105, 1163, 1164,
-     1109, 1126, 1756, 1112, 1112, 1114, 1756, 1119, 1756, 1114,
-     1126, 1756, 1756, 1131, 1125, 1129, 1120, 1172, 1121, 1137,
-     1130, 1125, 1140, 1131, 1138, 1125, 1140, 1187, 1146, 1189,
-     1134, 1150, 1141, 1155, 1151, 1756, 1195, 1756, 1196, 1197,
-     1154, 1153, 1154, 1756, 1756, 1756, 1201, 1145, 1161, 1756,
-     1199, 1150, 1149, 1151, 1162, 1209, 1160, 1756, 1169, 1212,
-     1756, 1756, 1218, 1223, 1228, 1233, 1238, 1243, 1248, 1251,
-
-     1225, 1230, 1232, 1245
+      769,  767,  765,  818,  819,  815,  775, 1759,  780,  773,
+      764,  783,  771,  781,  778,  783,  779,  792, 1759,  775,
+      776, 1759,  777,  775,  794,  795,  792,  777,  798,  798,
+      782,  787,  805, 1759,  795,  828,  819,  791,  850,  813,
+     1759,  796,  811,  803,  807, 1759, 1759,  817,  852,  801,
+      854,  803,  861,  806,  817,  809,  815,  811,  829,  830,
+     1759,  828, 1759,  831, 1759,  816,  835,  825,  818,  831,
+      873,  839, 1759,  831,  881,  824,  883, 1759,  884,  828,
+
+      834,  841,  883, 1759, 1759,  833,  833,  836,  850,  855,
+      838,  895,  854,  855,  856,  894,  848,  901,  851,  903,
+      852,  905,  906,  848,  908,  869,  910,  854,  866,  871,
+      857,  887,  916,  876, 1759,  868,  919,  868,  864,  880,
+      885,  867,  925,  880,  885, 1759,  886,  879,  888,  889,
+      886,  876,  878,  935,  884,  937,  882,  939,  935,  878,
+      895,  885,  945, 1759,  900, 1759, 1759,  905,  897,  907,
+      893,  895,  954,  955,  901,  911,  958, 1759,  908,  908,
+      911,  913,  964,  907, 1759,  928, 1759,  912, 1759, 1759,
+      926, 1759,  920, 1759,  970,  921,  972,  973,  955, 1759,
+
+      933,  934, 1759,  922,  921,  924,  924,  925,  921, 1759,
+      943,  929,  930,  945,  945,  948,  948,  945,  950, 1759,
+      942, 1759,  952, 1759,  949,  954,  956,  953,  995, 1759,
+      946,  947,  947,  953,  952,  963, 1759, 1759, 1002,  951,
+     1759,  952,  952,  954,  960, 1759,  962,  964,  967, 1016,
+      979, 1759,  976, 1759,  973, 1759,  996, 1016, 1022, 1023,
+      967, 1025, 1026,  981,  975, 1029, 1030, 1026,  991,  987,
+     1029,  979,  984, 1037,  995, 1039,  999, 1041, 1004,  993,
+      987, 1003, 1003, 1048,  992, 1009, 1008,  992, 1048, 1049,
+      998, 1051, 1016, 1017, 1017, 1004, 1759, 1015, 1062, 1022,
+
+     1035, 1022, 1759, 1759, 1066, 1759, 1759, 1015, 1026, 1759,
+     1759, 1016, 1065, 1010, 1015, 1073, 1023, 1759, 1075, 1030,
+     1759, 1077, 1759, 1022, 1037, 1025, 1040, 1044, 1759, 1078,
+     1046, 1039, 1048, 1030, 1037, 1089, 1050, 1049, 1094, 1095,
+     1096, 1047, 1759, 1098, 1099, 1046, 1759, 1050, 1102, 1048,
+     1047, 1105, 1060, 1759, 1102, 1759, 1064, 1759, 1067, 1110,
+     1065, 1112, 1073, 1056, 1058, 1055, 1071, 1072, 1081, 1759,
+     1071, 1121, 1759, 1759, 1759, 1117, 1759, 1759, 1082, 1119,
+     1759, 1073, 1080, 1759, 1077, 1082, 1129, 1074, 1759, 1089,
+     1759, 1090, 1080, 1092, 1135, 1079, 1087, 1088, 1101, 1759,
+
+     1100, 1090, 1089, 1103, 1094, 1103, 1105, 1759, 1147, 1092,
+     1149, 1109, 1151, 1759, 1147, 1111, 1112, 1099, 1094, 1157,
+     1116, 1117, 1118, 1161, 1120, 1759, 1163, 1759, 1126, 1759,
+     1108, 1166, 1167, 1112, 1129, 1759, 1115, 1115, 1117, 1759,
+     1122, 1759, 1117, 1129, 1759, 1759, 1134, 1128, 1132, 1123,
+     1175, 1124, 1140, 1133, 1128, 1143, 1134, 1141, 1128, 1143,
+     1190, 1149, 1192, 1137, 1153, 1144, 1158, 1154, 1759, 1198,
+     1759, 1199, 1200, 1157, 1156, 1157, 1759, 1759, 1759, 1204,
+     1148, 1164, 1759, 1202, 1153, 1152, 1154, 1165, 1212, 1163,
+     1759, 1172, 1215, 1759, 1759, 1221, 1226, 1231, 1236, 1241,
+
+     1246, 1251, 1254, 1228, 1233, 1235, 1248
     } ;
 
-static const flex_int16_t yy_def[1405] =
+static yyconst flex_int16_t yy_def[1408] =
     {   0,
-     1393, 1393, 1394, 1394, 1393, 1393, 1393, 1393, 1393, 1393,
-     1392, 1392, 1392, 1392, 1392, 1395, 1392, 1392, 1392, 1392,
-     1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
-     1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1396,
-     1392, 1392, 1392, 1397,   15, 1392,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1398,   45,   45,
+     1396, 1396, 1397, 1397, 1396, 1396, 1396, 1396, 1396, 1396,
+     1395, 1395, 1395, 1395, 1395, 1398, 1395, 1395, 1395, 1395,
+     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1399,
+     1395, 1395, 1395, 1400,   15, 1395,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1401,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1395,
-     1392, 1392, 1392, 1392, 1392, 1392, 1399, 1392, 1392, 1392,
-     1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1396, 1392,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1398,
+     1395, 1395, 1395, 1395, 1395, 1395, 1402, 1395, 1395, 1395,
+     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1399, 1395,
 
-     1397, 1392, 1392,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1400,   45, 1398,   45,   45,
+     1400, 1395, 1395,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1403,   45, 1401,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1399, 1392, 1392, 1392,
-     1392, 1392, 1392, 1392, 1392, 1401,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1400, 1392,
+       45,   45,   45,   45,   45,   45, 1402, 1395, 1395, 1395,
+     1395, 1395, 1395, 1395, 1395, 1404,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1403, 1395,
 
-     1398,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1401,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1392,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1395,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1402,
-       45,   45,   45,   45,   45,   45,   45,   45, 1392,   45,
+       45,   45, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1405,
+       45,   45,   45,   45,   45,   45,   45,   45, 1395,   45,
 
-     1392,   45, 1398, 1392,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1392,   45,   45,   45,   45,   45,   45,
+     1395,   45, 1401, 1395,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1395,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1392,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1395,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1392,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1395,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1392,   45,   45,   45,   45,
-     1392, 1392, 1392, 1403,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1395,   45,   45,   45,   45,
+     1395, 1395, 1395, 1406,   45,   45,   45,   45,   45,   45,
 
-       45,   45, 1392,   45,   45, 1392,   45, 1398,   45,   45,
-       45,   45,   45, 1392,   45,   45,   45,   45,   45, 1392,
-       45,   45,   45,   45,   45, 1392,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1392,   45,   45,   45,   45,
+       45,   45, 1395,   45,   45, 1395,   45, 1401,   45,   45,
+       45,   45,   45, 1395,   45,   45,   45,   45,   45, 1395,
+       45,   45,   45,   45,   45, 1395,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1395,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1392,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1392,   45, 1392,
+       45,   45,   45,   45, 1395,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1395,   45, 1395,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1392, 1392,   45,   45, 1392,
+       45,   45,   45,   45,   45, 1395, 1395,   45,   45, 1395,
 
-       45,   45, 1392, 1404,   45,   45,   45,   45, 1392, 1392,
-       45, 1392,   45, 1392,   45,   45,   45, 1392,   45,   45,
+       45,   45, 1395, 1407,   45,   45,   45,   45, 1395, 1395,
+       45, 1395,   45, 1395,   45,   45,   45, 1395,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1392,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1395,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1392,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1395,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1392,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1392,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1392,   45,   45,   45,   45,   45,
+       45,   45, 1395,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1395,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1395,   45,   45,   45,   45,   45,
 
-       45,   45, 1392,   45,   45, 1392,   45,   45,   45,   45,
+       45,   45, 1395,   45,   45, 1395,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1392,   45,   45,   45,   45,   45,   45,   45,   45, 1392,
+     1395,   45,   45,   45,   45,   45,   45,   45,   45, 1395,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1392,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1392,   45,   45,
+       45,   45,   45,   45,   45, 1395,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1395,   45,   45,
 
-       45,   45,   45,   45,   45,   45, 1392,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1395,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1392,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1392, 1392,   45,   45,   45,
-       45, 1392, 1392,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1392,   45,   45,   45,   45,   45,
+       45, 1395,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1395, 1395,   45,   45,   45,
+       45, 1395, 1395,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1395,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1392,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1392,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1395,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1395,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45,   45, 1392,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1392,   45,   45,
-       45,   45, 1392,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1395,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1395,   45,   45,
+       45,   45, 1395,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1392,   45,   45,   45,   45, 1392,   45,   45,   45,   45,
+     1395,   45,   45,   45,   45, 1395,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1392,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1395,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1392,   45,   45,   45,   45,   45,   45, 1392,   45,
+       45, 1395,   45,   45,   45,   45,   45,   45, 1395,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45, 1392,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1395,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1392,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1392,   45,
-       45, 1392,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1392,   45,   45,   45,   45,   45,   45,
-     1392,   45,   45,   45,   45, 1392, 1392,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1395,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1395,   45,
+       45, 1395,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1395,   45,   45,   45,   45,   45,   45,
+     1395,   45,   45,   45,   45, 1395, 1395,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1392,   45, 1392,   45, 1392,   45,   45,   45,   45,   45,
-       45, 1392,   45,   45,   45,   45, 1392,   45,   45,   45,
+     1395,   45, 1395,   45, 1395,   45,   45,   45,   45,   45,
+       45,   45, 1395,   45,   45,   45,   45, 1395,   45,   45,
 
-       45,   45, 1392, 1392,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1395, 1395,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1392,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1392,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1395,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1395,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1395,   45, 1395, 1395,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1395,   45,   45,
+       45,   45,   45,   45, 1395,   45, 1395,   45, 1395, 1395,
+       45, 1395,   45, 1395,   45,   45,   45,   45,   45, 1395,
+
+       45,   45, 1395,   45,   45,   45,   45,   45,   45, 1395,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1395,
+       45, 1395,   45, 1395,   45,   45,   45,   45,   45, 1395,
+       45,   45,   45,   45,   45,   45, 1395, 1395,   45,   45,
+     1395,   45,   45,   45,   45, 1395,   45,   45,   45,   45,
+       45, 1395,   45, 1395,   45, 1395,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1392,   45, 1392, 1392,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1392,   45,   45,   45,   45,
-       45,   45, 1392,   45, 1392,   45, 1392, 1392,   45, 1392,
-       45, 1392,   45,   45,   45,   45,   45, 1392,   45,   45,
-
-     1392,   45,   45,   45,   45,   45,   45, 1392,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1392,   45,   45,
-     1392,   45,   45,   45,   45,   45, 1392,   45,   45,   45,
-       45,   45,   45, 1392, 1392,   45,   45, 1392,   45,   45,
-       45,   45, 1392,   45,   45,   45,   45,   45, 1392,   45,
-     1392,   45, 1392,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1395,   45,   45,   45,
+
+       45,   45, 1395, 1395,   45, 1395, 1395,   45,   45, 1395,
+     1395,   45,   45,   45,   45,   45,   45, 1395,   45,   45,
+     1395,   45, 1395,   45,   45,   45,   45,   45, 1395,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1392,   45,   45,   45,   45,   45, 1392,
-
-     1392,   45, 1392, 1392,   45,   45, 1392, 1392,   45,   45,
-       45,   45,   45,   45, 1392,   45,   45, 1392,   45, 1392,
-       45,   45,   45,   45,   45, 1392,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1392,
-       45,   45,   45, 1392,   45,   45,   45,   45,   45,   45,
-     1392,   45, 1392,   45, 1392,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1392,   45,   45, 1392,
-     1392, 1392,   45, 1392, 1392,   45,   45, 1392,   45,   45,
-     1392,   45,   45,   45,   45, 1392,   45, 1392,   45,   45,
-       45,   45,   45,   45,   45,   45, 1392,   45,   45,   45,
-
-       45,   45,   45,   45, 1392,   45,   45,   45,   45,   45,
-     1392,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1392,   45, 1392,   45, 1392,   45,   45,   45,
-       45,   45, 1392,   45,   45,   45, 1392,   45, 1392,   45,
-       45, 1392, 1392,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1395,   45,   45,   45, 1395,   45,   45,   45,
+       45,   45,   45, 1395,   45, 1395,   45, 1395,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1395,
+       45,   45, 1395, 1395, 1395,   45, 1395, 1395,   45,   45,
+     1395,   45,   45, 1395,   45,   45,   45,   45, 1395,   45,
+     1395,   45,   45,   45,   45,   45,   45,   45,   45, 1395,
+
+       45,   45,   45,   45,   45,   45,   45, 1395,   45,   45,
+       45,   45,   45, 1395,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1395,   45, 1395,   45, 1395,
+       45,   45,   45,   45,   45, 1395,   45,   45,   45, 1395,
+       45, 1395,   45,   45, 1395, 1395,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1392,   45, 1392,   45,   45,
-       45,   45,   45, 1392, 1392, 1392,   45,   45,   45, 1392,
-       45,   45,   45,   45,   45,   45,   45, 1392,   45,   45,
-     1392,    0, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
+       45,   45,   45,   45,   45,   45,   45,   45, 1395,   45,
+     1395,   45,   45,   45,   45,   45, 1395, 1395, 1395,   45,
+       45,   45, 1395,   45,   45,   45,   45,   45,   45,   45,
+     1395,   45,   45, 1395,    0, 1395, 1395, 1395, 1395, 1395,
 
-     1392, 1392, 1392, 1392
+     1395, 1395, 1395, 1395, 1395, 1395, 1395
     } ;
 
-static const flex_int16_t yy_nxt[1828] =
+static yyconst flex_uint16_t yy_nxt[1831] =
     {   0,
-     1392,   13,   14,   13, 1392,   15,   16, 1392,   17,   18,
+     1395,   13,   14,   13, 1395,   15,   16, 1395,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,   86,  686,
-       37,   14,   37,   87,   25,   26,   38, 1392,  687,   27,
+       37,   14,   37,   87,   25,   26,   38, 1395,  687,   27,
        37,   14,   37,   42,   28,   42,   38,   92,   93,   29,
       115,   30,   13,   14,   13,   91,   92,   25,   31,   93,
        13,   14,   13,   13,   14,   13,   32,   40,  810,   13,
@@ -1310,38 +1101,38 @@ static const flex_int16_t yy_nxt[1828] =
       962,  963,  964,  965,  966,  967,  968,  969,  970,  971,
       972,  973,  974,  975,  976,  977,  978,  979,  980,  981,
 
-      982,  956,  957,  983,  985,  986,  987,  988,  984,  989,
-      990,  991,  992,  993,  994,  995,  996,  997,  998,  999,
-     1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
-     1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019,
-     1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029,
+      982,  956,  957,  983,  985,  987,  988,  989,  984,  990,
+      991,  992,  993,  994,  995,  996,  997,  998,  999, 1000,
+     1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
+     1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020,
+     1021, 1022, 1023, 1024, 1025, 1026,  986, 1027, 1028, 1029,
      1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
      1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049,
-     1050, 1051, 1052, 1053, 1031, 1054, 1055, 1056, 1057, 1058,
-     1032, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067,
+     1050, 1051, 1052, 1053, 1054, 1032, 1055, 1056, 1057, 1058,
+     1059, 1033, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067,
      1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077,
 
-     1078, 1079, 1080, 1082, 1083, 1084, 1085, 1086, 1087, 1088,
+     1078, 1079, 1080, 1081, 1082, 1084, 1085, 1086, 1087, 1088,
      1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098,
-     1099, 1100, 1101, 1103, 1104, 1105, 1106, 1107, 1108, 1109,
+     1099, 1100, 1101, 1102, 1103, 1105, 1106, 1107, 1108, 1109,
      1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119,
-     1120, 1121, 1122, 1123, 1124, 1126, 1097, 1127, 1128, 1129,
-     1130, 1131, 1125, 1081, 1132, 1133, 1134, 1135, 1136, 1137,
-     1138, 1139, 1140, 1141, 1102, 1142, 1143, 1144, 1145, 1146,
-     1147, 1148, 1149, 1150, 1151, 1153, 1154, 1155, 1156, 1152,
-     1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166,
-     1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1154,
-
-     1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185,
+     1120, 1121, 1122, 1123, 1124, 1125, 1126, 1129, 1099, 1127,
+     1130, 1131, 1132, 1133, 1134, 1083, 1135, 1128, 1136, 1137,
+     1138, 1139, 1140, 1141, 1142, 1143, 1104, 1144, 1145, 1146,
+     1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1156, 1157,
+     1158, 1159, 1155, 1160, 1161, 1162, 1163, 1164, 1165, 1166,
+     1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176,
+
+     1177, 1178, 1157, 1179, 1180, 1181, 1182, 1183, 1184, 1185,
      1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195,
      1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205,
      1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215,
-     1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1198,
-     1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235,
+     1216, 1217, 1218, 1220, 1221, 1222, 1223, 1224, 1225, 1226,
+     1227, 1228, 1201, 1229, 1230, 1231, 1232, 1233, 1234, 1235,
      1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245,
      1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255,
      1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265,
-     1266, 1267, 1268, 1269, 1242, 1216, 1270, 1271, 1272, 1273,
+     1266, 1267, 1268, 1269, 1270, 1271, 1272, 1245, 1219, 1273,
 
      1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283,
      1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293,
@@ -1355,77 +1146,77 @@ static const flex_int16_t yy_nxt[1828] =
      1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373,
 
      1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383,
-     1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391,   12,   12,
-       12,   12,   12,   36,   36,   36,   36,   36,   80,  290,
-       80,   80,   80,   99,  394,   99,  504,   99,  101,  101,
-      101,  101,  101,  116,  116,  116,  116,  116,  177,  101,
-      177,  177,  177,  199,  199,  199,  809,  808,  807,  806,
-      805,  804,  803,  802,  801,  800,  799,  798,  797,  796,
-      795,  794,  793,  791,  790,  789,  788,  787,  786,  785,
-      784,  783,  782,  781,  780,  777,  776,  770,  769,  768,
-      767,  766,  765,  764,  763,  762,  761,  760,  759,  758,
-
-      757,  756,  755,  754,  753,  752,  751,  750,  749,  748,
-      747,  746,  745,  744,  743,  742,  739,  738,  737,  736,
-      735,  734,  733,  732,  731,  730,  729,  728,  727,  726,
-      725,  724,  723,  722,  721,  720,  719,  718,  717,  716,
-      715,  714,  713,  712,  711,  710,  709,  708,  707,  704,
-      703,  698,  697,  696,  695,  694,  693,  692,  691,  690,
-      689,  688,  685,  684,  683,  682,  681,  680,  679,  678,
-      677,  676,  675,  674,  673,  672,  671,  670,  669,  668,
-      667,  666,  665,  664,  663,  662,  659,  658,  657,  656,
-      655,  654,  653,  652,  651,  650,  649,  648,  647,  646,
-
-      645,  644,  643,  642,  641,  640,  639,  638,  637,  636,
-      635,  634,  633,  632,  631,  630,  629,  628,  627,  626,
-      625,  624,  623,  622,  621,  620,  619,  618,  617,  616,
-      615,  614,  613,  609,  608,  607,  606,  605,  604,  603,
-      602,  601,  600,  599,  598,  597,  596,  595,  594,  593,
-      592,  591,  590,  589,  588,  587,  586,  585,  584,  583,
-      582,  581,  580,  579,  578,  577,  576,  575,  574,  573,
-      572,  571,  570,  569,  568,  567,  566,  565,  564,  563,
-      562,  561,  560,  559,  558,  557,  556,  555,  554,  553,
-      552,  551,  550,  549,  548,  547,  546,  545,  544,  543,
-
-      542,  541,  540,  537,  536,  535,  534,  533,  532,  531,
-      528,  527,  526,  525,  524,  523,  522,  521,  520,  519,
-      518,  514,  513,  512,  511,  510,  509,  508,  506,  505,
-      503,  502,  499,  498,  497,  496,  493,  492,  491,  490,
-      489,  488,  487,  486,  485,  482,  481,  480,  477,  476,
-      475,  474,  473,  472,  471,  470,  467,  466,  465,  464,
-      463,  462,  461,  460,  459,  458,  455,  454,  453,  452,
-      451,  448,  447,  446,  445,  444,  443,  442,  441,  440,
-      435,  434,  433,  432,  431,  430,  429,  428,  427,  426,
-      425,  422,  421,  420,  419,  416,  415,  414,  413,  412,
-
-      411,  410,  407,  406,  404,  403,  398,  393,  390,  387,
-      386,  385,  384,  382,  381,  380,  379,  378,  377,  376,
-      375,  374,  373,  372,  371,  370,  367,  366,  365,  364,
-      363,  362,  361,  360,  359,  358,  357,  356,  355,  351,
-      350,  349,  348,  347,  346,  345,  344,  340,  339,  338,
-      337,  336,  335,  334,  333,  332,  331,  330,  329,  328,
-      327,  326,  325,  324,  323,  322,  321,  320,  319,  318,
-      317,  316,  315,  314,  311,  310,  309,  308,  307,  306,
-      304,  200,  301,  299,  297,  294,  293,  291,  289,  282,
-      281,  280,  278,  277,  275,  274,  273,  272,  268,  256,
-
-      252,  249,  248,  247,  246,  245,  243,  242,  241,  240,
-      237,  236,  235,  234,  233,  232,  231,  230,  229,  225,
-      222,  219,  218,  217,  216,  213,  212,  211,  207,  206,
-      205,  204,  200,  193,  190,  189,  187,  185,  184,  176,
-      161,  142,  136,  121,  110,  107,  106,  104,   43,  100,
-       98,   97,   88,   43, 1392,   11, 1392, 1392, 1392, 1392,
-     1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
-     1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
-     1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
-     1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
-
-     1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
-     1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
-     1392, 1392, 1392, 1392, 1392, 1392, 1392
+     1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393,
+     1394,   12,   12,   12,   12,   12,   36,   36,   36,   36,
+       36,   80,  290,   80,   80,   80,   99,  394,   99,  504,
+       99,  101,  101,  101,  101,  101,  116,  116,  116,  116,
+      116,  177,  101,  177,  177,  177,  199,  199,  199,  809,
+      808,  807,  806,  805,  804,  803,  802,  801,  800,  799,
+      798,  797,  796,  795,  794,  793,  791,  790,  789,  788,
+      787,  786,  785,  784,  783,  782,  781,  780,  777,  776,
+      770,  769,  768,  767,  766,  765,  764,  763,  762,  761,
+
+      760,  759,  758,  757,  756,  755,  754,  753,  752,  751,
+      750,  749,  748,  747,  746,  745,  744,  743,  742,  739,
+      738,  737,  736,  735,  734,  733,  732,  731,  730,  729,
+      728,  727,  726,  725,  724,  723,  722,  721,  720,  719,
+      718,  717,  716,  715,  714,  713,  712,  711,  710,  709,
+      708,  707,  704,  703,  698,  697,  696,  695,  694,  693,
+      692,  691,  690,  689,  688,  685,  684,  683,  682,  681,
+      680,  679,  678,  677,  676,  675,  674,  673,  672,  671,
+      670,  669,  668,  667,  666,  665,  664,  663,  662,  659,
+      658,  657,  656,  655,  654,  653,  652,  651,  650,  649,
+
+      648,  647,  646,  645,  644,  643,  642,  641,  640,  639,
+      638,  637,  636,  635,  634,  633,  632,  631,  630,  629,
+      628,  627,  626,  625,  624,  623,  622,  621,  620,  619,
+      618,  617,  616,  615,  614,  613,  609,  608,  607,  606,
+      605,  604,  603,  602,  601,  600,  599,  598,  597,  596,
+      595,  594,  593,  592,  591,  590,  589,  588,  587,  586,
+      585,  584,  583,  582,  581,  580,  579,  578,  577,  576,
+      575,  574,  573,  572,  571,  570,  569,  568,  567,  566,
+      565,  564,  563,  562,  561,  560,  559,  558,  557,  556,
+      555,  554,  553,  552,  551,  550,  549,  548,  547,  546,
+
+      545,  544,  543,  542,  541,  540,  537,  536,  535,  534,
+      533,  532,  531,  528,  527,  526,  525,  524,  523,  522,
+      521,  520,  519,  518,  514,  513,  512,  511,  510,  509,
+      508,  506,  505,  503,  502,  499,  498,  497,  496,  493,
+      492,  491,  490,  489,  488,  487,  486,  485,  482,  481,
+      480,  477,  476,  475,  474,  473,  472,  471,  470,  467,
+      466,  465,  464,  463,  462,  461,  460,  459,  458,  455,
+      454,  453,  452,  451,  448,  447,  446,  445,  444,  443,
+      442,  441,  440,  435,  434,  433,  432,  431,  430,  429,
+      428,  427,  426,  425,  422,  421,  420,  419,  416,  415,
+
+      414,  413,  412,  411,  410,  407,  406,  404,  403,  398,
+      393,  390,  387,  386,  385,  384,  382,  381,  380,  379,
+      378,  377,  376,  375,  374,  373,  372,  371,  370,  367,
+      366,  365,  364,  363,  362,  361,  360,  359,  358,  357,
+      356,  355,  351,  350,  349,  348,  347,  346,  345,  344,
+      340,  339,  338,  337,  336,  335,  334,  333,  332,  331,
+      330,  329,  328,  327,  326,  325,  324,  323,  322,  321,
+      320,  319,  318,  317,  316,  315,  314,  311,  310,  309,
+      308,  307,  306,  304,  200,  301,  299,  297,  294,  293,
+      291,  289,  282,  281,  280,  278,  277,  275,  274,  273,
+
+      272,  268,  256,  252,  249,  248,  247,  246,  245,  243,
+      242,  241,  240,  237,  236,  235,  234,  233,  232,  231,
+      230,  229,  225,  222,  219,  218,  217,  216,  213,  212,
+      211,  207,  206,  205,  204,  200,  193,  190,  189,  187,
+      185,  184,  176,  161,  142,  136,  121,  110,  107,  106,
+      104,   43,  100,   98,   97,   88,   43, 1395,   11, 1395,
+     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+
+     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395
     } ;
 
-static const flex_int16_t yy_chk[1828] =
+static yyconst flex_int16_t yy_chk[1831] =
     {   0,
         0,    1,    1,    1,    0,    1,    1,    0,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,   21,  596,
@@ -1519,143 +1310,143 @@ static const flex_int16_t yy_chk[1828] =
       911,  912,  913,  914,  915,  916,  917,  918,  919,  920,
       921,  922,  923,  924,  925,  926,  927,  929,  930,  931,
       932,  933,  934,  935,  936,  937,  938,  940,  941,  943,
-      944,  945,  946,  947,  948,  949,  950,  951,  952,  953,
-      955,  956,  957,  958,  959,  960,  962,  963,  964,  965,
-      968,  969,  970,  971,  972,  973,  974,  975,  976,  977,
-      978,  979,  980,  982,  956,  984,  986,  987,  988,  989,
-      957,  990,  991,  993,  994,  995,  996,  998,  999, 1000,
-     1001, 1002, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012,
-
-     1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022,
-     1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032,
-     1033, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043,
-     1044, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054,
-     1055, 1056, 1057, 1058, 1059, 1060, 1031, 1061, 1063, 1066,
-     1067, 1068, 1059, 1015, 1069, 1070, 1071, 1072, 1073, 1074,
-     1075, 1077, 1078, 1079, 1036, 1080, 1081, 1082, 1084, 1086,
-     1089, 1091, 1093, 1094, 1095, 1096, 1097, 1099, 1100, 1095,
-     1102, 1103, 1104, 1105, 1106, 1107, 1109, 1110, 1111, 1112,
-     1113, 1114, 1115, 1116, 1117, 1119, 1120, 1122, 1123, 1097,
-
-     1124, 1125, 1126, 1128, 1129, 1130, 1131, 1132, 1133, 1136,
-     1137, 1139, 1140, 1141, 1142, 1144, 1145, 1146, 1147, 1148,
-     1150, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161,
+      944,  945,  946,  947,  948,  949,  906,  950,  951,  952,
+      953,  955,  956,  957,  958,  959,  960,  962,  963,  964,
+      965,  968,  969,  970,  971,  972,  973,  974,  975,  976,
+      977,  978,  979,  980,  982,  956,  984,  986,  987,  988,
+      989,  957,  990,  991,  992,  994,  995,  996,  997,  999,
+     1000, 1001, 1002, 1003, 1006, 1007, 1008, 1009, 1010, 1011,
+
+     1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021,
+     1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031,
+     1032, 1033, 1034, 1036, 1037, 1038, 1039, 1040, 1041, 1042,
+     1043, 1044, 1045, 1047, 1048, 1049, 1050, 1051, 1052, 1053,
+     1054, 1055, 1056, 1057, 1058, 1059, 1060, 1062, 1032, 1061,
+     1063, 1065, 1068, 1069, 1070, 1016, 1071, 1061, 1072, 1073,
+     1074, 1075, 1076, 1077, 1079, 1080, 1037, 1081, 1082, 1083,
+     1084, 1086, 1088, 1091, 1093, 1095, 1096, 1097, 1098, 1099,
+     1101, 1102, 1097, 1104, 1105, 1106, 1107, 1108, 1109, 1111,
+     1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1121, 1123,
+
+     1125, 1126, 1099, 1127, 1128, 1129, 1131, 1132, 1133, 1134,
+     1135, 1136, 1139, 1140, 1142, 1143, 1144, 1145, 1147, 1148,
+     1149, 1150, 1151, 1153, 1155, 1157, 1158, 1159, 1160, 1161,
      1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171,
-     1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1154,
-     1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190,
-     1191, 1192, 1193, 1195, 1196, 1197, 1198, 1199, 1202, 1205,
-     1206, 1209, 1210, 1211, 1212, 1213, 1214, 1216, 1217, 1219,
-     1221, 1222, 1223, 1224, 1225, 1227, 1228, 1229, 1230, 1231,
-     1232, 1233, 1234, 1235, 1198, 1171, 1236, 1237, 1238, 1239,
-
-     1241, 1242, 1243, 1245, 1246, 1247, 1248, 1249, 1250, 1252,
-     1254, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264,
-     1265, 1266, 1268, 1269, 1273, 1276, 1277, 1279, 1280, 1282,
-     1283, 1284, 1285, 1287, 1289, 1290, 1291, 1292, 1293, 1294,
-     1295, 1296, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1306,
-     1307, 1308, 1309, 1310, 1312, 1313, 1314, 1315, 1316, 1317,
-     1318, 1319, 1320, 1321, 1322, 1324, 1326, 1328, 1329, 1330,
-     1331, 1332, 1334, 1335, 1336, 1338, 1340, 1341, 1344, 1345,
-     1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355,
+     1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181,
+     1182, 1183, 1157, 1184, 1185, 1186, 1187, 1188, 1189, 1190,
+     1191, 1192, 1193, 1194, 1195, 1196, 1198, 1199, 1200, 1201,
+     1202, 1205, 1208, 1209, 1212, 1213, 1214, 1215, 1216, 1217,
+     1219, 1220, 1222, 1224, 1225, 1226, 1227, 1228, 1230, 1231,
+     1232, 1233, 1234, 1235, 1236, 1237, 1238, 1201, 1174, 1239,
+
+     1240, 1241, 1242, 1244, 1245, 1246, 1248, 1249, 1250, 1251,
+     1252, 1253, 1255, 1257, 1259, 1260, 1261, 1262, 1263, 1264,
+     1265, 1266, 1267, 1268, 1269, 1271, 1272, 1276, 1279, 1280,
+     1282, 1283, 1285, 1286, 1287, 1288, 1290, 1292, 1293, 1294,
+     1295, 1296, 1297, 1298, 1299, 1301, 1302, 1303, 1304, 1305,
+     1306, 1307, 1309, 1310, 1311, 1312, 1313, 1315, 1316, 1317,
+     1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1327, 1329,
+     1331, 1332, 1333, 1334, 1335, 1337, 1338, 1339, 1341, 1343,
+     1344, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355,
      1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365,
 
-     1367, 1369, 1370, 1371, 1372, 1373, 1377, 1378, 1379, 1381,
-     1382, 1383, 1384, 1385, 1386, 1387, 1389, 1390, 1393, 1393,
-     1393, 1393, 1393, 1394, 1394, 1394, 1394, 1394, 1395, 1401,
-     1395, 1395, 1395, 1396, 1402, 1396, 1403, 1396, 1397, 1397,
-     1397, 1397, 1397, 1398, 1398, 1398, 1398, 1398, 1399, 1404,
-     1399, 1399, 1399, 1400, 1400, 1400,  718,  717,  716,  715,
-      714,  713,  712,  711,  710,  709,  708,  706,  705,  704,
-      703,  702,  701,  699,  697,  696,  695,  694,  693,  692,
-      691,  690,  689,  688,  687,  684,  683,  680,  679,  678,
-      677,  676,  675,  674,  673,  672,  671,  670,  669,  668,
-
-      667,  666,  665,  664,  663,  662,  661,  659,  658,  657,
-      656,  655,  654,  653,  652,  650,  648,  647,  646,  645,
-      644,  643,  642,  641,  640,  639,  638,  637,  636,  635,
-      634,  633,  632,  631,  630,  629,  628,  627,  626,  625,
-      624,  623,  622,  621,  620,  619,  618,  617,  616,  614,
-      613,  609,  608,  607,  605,  604,  602,  601,  600,  599,
-      598,  597,  594,  593,  592,  591,  590,  589,  588,  587,
-      586,  585,  584,  582,  581,  580,  579,  578,  577,  576,
-      575,  574,  572,  571,  570,  569,  567,  566,  565,  564,
-      563,  562,  561,  559,  558,  557,  556,  555,  554,  553,
-
-      552,  551,  550,  549,  548,  547,  546,  545,  544,  543,
-      542,  541,  540,  539,  537,  536,  535,  534,  533,  532,
-      531,  530,  529,  528,  527,  526,  525,  524,  523,  522,
-      521,  520,  519,  513,  511,  508,  507,  506,  505,  503,
-      502,  501,  499,  498,  495,  494,  493,  492,  491,  490,
-      489,  488,  487,  486,  485,  484,  483,  482,  481,  480,
-      479,  478,  477,  476,  475,  474,  473,  472,  471,  469,
-      467,  466,  465,  464,  463,  462,  461,  460,  459,  458,
-      457,  456,  454,  453,  452,  451,  450,  449,  448,  447,
-      446,  445,  444,  443,  442,  441,  440,  439,  438,  437,
-
-      435,  434,  433,  431,  430,  429,  428,  427,  425,  424,
-      422,  421,  419,  418,  417,  416,  415,  413,  412,  411,
-      410,  405,  404,  402,  401,  400,  399,  398,  396,  395,
-      393,  390,  388,  387,  385,  384,  382,  381,  380,  379,
-      378,  377,  376,  375,  374,  372,  371,  370,  368,  367,
-      366,  365,  363,  362,  361,  360,  358,  357,  356,  355,
-      354,  353,  352,  351,  350,  348,  346,  345,  344,  343,
-      342,  340,  339,  338,  337,  336,  335,  334,  333,  332,
-      330,  329,  328,  327,  326,  325,  324,  323,  322,  321,
-      320,  318,  317,  316,  315,  312,  311,  310,  309,  308,
-
-      307,  306,  302,  300,  297,  296,  293,  289,  282,  280,
-      279,  278,  277,  275,  274,  273,  272,  271,  270,  269,
-      268,  267,  266,  265,  264,  263,  261,  260,  259,  258,
-      257,  256,  255,  254,  253,  252,  251,  250,  249,  247,
-      246,  245,  244,  243,  242,  241,  240,  238,  237,  236,
-      235,  234,  233,  232,  231,  229,  228,  227,  226,  225,
-      224,  223,  222,  221,  220,  219,  218,  217,  216,  215,
-      214,  213,  212,  211,  209,  208,  207,  206,  205,  204,
-      202,  199,  197,  195,  193,  190,  189,  187,  184,  176,
-      175,  174,  172,  171,  169,  168,  167,  166,  164,  161,
-
-      159,  157,  156,  155,  154,  153,  151,  150,  149,  148,
-      146,  145,  144,  143,  142,  141,  140,  139,  138,  136,
-      134,  132,  131,  130,  129,  127,  126,  125,  123,  122,
-      121,  120,  116,  110,  107,  106,  104,   99,   98,   79,
-       74,   68,   65,   60,   53,   50,   49,   47,   43,   41,
-       39,   38,   24,   14,   11, 1392, 1392, 1392, 1392, 1392,
-     1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
-     1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
-     1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
-     1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
-
-     1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
-     1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
-     1392, 1392, 1392, 1392, 1392, 1392, 1392
+     1366, 1367, 1368, 1370, 1372, 1373, 1374, 1375, 1376, 1380,
+     1381, 1382, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1392,
+     1393, 1396, 1396, 1396, 1396, 1396, 1397, 1397, 1397, 1397,
+     1397, 1398, 1404, 1398, 1398, 1398, 1399, 1405, 1399, 1406,
+     1399, 1400, 1400, 1400, 1400, 1400, 1401, 1401, 1401, 1401,
+     1401, 1402, 1407, 1402, 1402, 1402, 1403, 1403, 1403,  718,
+      717,  716,  715,  714,  713,  712,  711,  710,  709,  708,
+      706,  705,  704,  703,  702,  701,  699,  697,  696,  695,
+      694,  693,  692,  691,  690,  689,  688,  687,  684,  683,
+      680,  679,  678,  677,  676,  675,  674,  673,  672,  671,
+
+      670,  669,  668,  667,  666,  665,  664,  663,  662,  661,
+      659,  658,  657,  656,  655,  654,  653,  652,  650,  648,
+      647,  646,  645,  644,  643,  642,  641,  640,  639,  638,
+      637,  636,  635,  634,  633,  632,  631,  630,  629,  628,
+      627,  626,  625,  624,  623,  622,  621,  620,  619,  618,
+      617,  616,  614,  613,  609,  608,  607,  605,  604,  602,
+      601,  600,  599,  598,  597,  594,  593,  592,  591,  590,
+      589,  588,  587,  586,  585,  584,  582,  581,  580,  579,
+      578,  577,  576,  575,  574,  572,  571,  570,  569,  567,
+      566,  565,  564,  563,  562,  561,  559,  558,  557,  556,
+
+      555,  554,  553,  552,  551,  550,  549,  548,  547,  546,
+      545,  544,  543,  542,  541,  540,  539,  537,  536,  535,
+      534,  533,  532,  531,  530,  529,  528,  527,  526,  525,
+      524,  523,  522,  521,  520,  519,  513,  511,  508,  507,
+      506,  505,  503,  502,  501,  499,  498,  495,  494,  493,
+      492,  491,  490,  489,  488,  487,  486,  485,  484,  483,
+      482,  481,  480,  479,  478,  477,  476,  475,  474,  473,
+      472,  471,  469,  467,  466,  465,  464,  463,  462,  461,
+      460,  459,  458,  457,  456,  454,  453,  452,  451,  450,
+      449,  448,  447,  446,  445,  444,  443,  442,  441,  440,
+
+      439,  438,  437,  435,  434,  433,  431,  430,  429,  428,
+      427,  425,  424,  422,  421,  419,  418,  417,  416,  415,
+      413,  412,  411,  410,  405,  404,  402,  401,  400,  399,
+      398,  396,  395,  393,  390,  388,  387,  385,  384,  382,
+      381,  380,  379,  378,  377,  376,  375,  374,  372,  371,
+      370,  368,  367,  366,  365,  363,  362,  361,  360,  358,
+      357,  356,  355,  354,  353,  352,  351,  350,  348,  346,
+      345,  344,  343,  342,  340,  339,  338,  337,  336,  335,
+      334,  333,  332,  330,  329,  328,  327,  326,  325,  324,
+      323,  322,  321,  320,  318,  317,  316,  315,  312,  311,
+
+      310,  309,  308,  307,  306,  302,  300,  297,  296,  293,
+      289,  282,  280,  279,  278,  277,  275,  274,  273,  272,
+      271,  270,  269,  268,  267,  266,  265,  264,  263,  261,
+      260,  259,  258,  257,  256,  255,  254,  253,  252,  251,
+      250,  249,  247,  246,  245,  244,  243,  242,  241,  240,
+      238,  237,  236,  235,  234,  233,  232,  231,  229,  228,
+      227,  226,  225,  224,  223,  222,  221,  220,  219,  218,
+      217,  216,  215,  214,  213,  212,  211,  209,  208,  207,
+      206,  205,  204,  202,  199,  197,  195,  193,  190,  189,
+      187,  184,  176,  175,  174,  172,  171,  169,  168,  167,
+
+      166,  164,  161,  159,  157,  156,  155,  154,  153,  151,
+      150,  149,  148,  146,  145,  144,  143,  142,  141,  140,
+      139,  138,  136,  134,  132,  131,  130,  129,  127,  126,
+      125,  123,  122,  121,  120,  116,  110,  107,  106,  104,
+       99,   98,   79,   74,   68,   65,   60,   53,   50,   49,
+       47,   43,   41,   39,   38,   24,   14,   11, 1395, 1395,
+     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+
+     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395
     } ;
 
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
 
-extern int yy_flex_debug;
-int yy_flex_debug = 1;
+extern int parser4__flex_debug;
+int parser4__flex_debug = 1;
 
-static const flex_int16_t yy_rule_linenum[167] =
+static yyconst flex_int16_t yy_rule_linenum[168] =
     {   0,
-      145,  147,  149,  154,  155,  160,  161,  162,  174,  177,
-      182,  189,  198,  207,  216,  225,  235,  244,  253,  262,
-      271,  280,  289,  298,  307,  316,  327,  336,  345,  354,
-      363,  373,  383,  393,  403,  413,  423,  433,  443,  453,
-      463,  473,  483,  493,  503,  514,  525,  536,  545,  555,
-      564,  574,  588,  603,  612,  621,  630,  639,  659,  679,
-      688,  698,  707,  716,  725,  735,  744,  753,  762,  771,
-      781,  790,  799,  808,  817,  826,  835,  844,  853,  862,
-      871,  881,  892,  904,  913,  922,  931,  941,  951,  961,
-      971,  981,  990, 1000, 1009, 1018, 1027, 1036, 1046, 1056,
-
-     1066, 1075, 1084, 1093, 1102, 1111, 1120, 1129, 1138, 1147,
-     1156, 1165, 1174, 1183, 1192, 1201, 1210, 1219, 1228, 1237,
-     1246, 1255, 1264, 1273, 1282, 1291, 1300, 1309, 1318, 1328,
-     1338, 1348, 1358, 1368, 1378, 1388, 1398, 1408, 1417, 1426,
-     1435, 1444, 1453, 1462, 1471, 1482, 1495, 1508, 1523, 1622,
-     1627, 1632, 1637, 1638, 1639, 1640, 1641, 1642, 1644, 1662,
-     1675, 1680, 1684, 1686, 1688, 1690
+      144,  146,  148,  153,  154,  159,  160,  161,  173,  176,
+      181,  188,  197,  206,  215,  224,  234,  243,  252,  261,
+      270,  279,  288,  297,  306,  315,  326,  335,  344,  353,
+      362,  372,  382,  392,  402,  412,  422,  432,  442,  452,
+      462,  472,  482,  492,  502,  513,  524,  535,  544,  554,
+      563,  573,  587,  602,  611,  620,  629,  638,  658,  678,
+      687,  697,  706,  715,  724,  734,  743,  752,  761,  770,
+      780,  789,  798,  807,  816,  825,  834,  843,  852,  861,
+      870,  880,  891,  903,  912,  921,  930,  940,  950,  960,
+      970,  980,  989,  999, 1008, 1017, 1026, 1035, 1045, 1055,
+
+     1064, 1074, 1083, 1092, 1101, 1110, 1119, 1128, 1137, 1146,
+     1155, 1164, 1173, 1182, 1191, 1200, 1209, 1218, 1227, 1236,
+     1245, 1254, 1263, 1272, 1281, 1290, 1299, 1308, 1317, 1326,
+     1336, 1346, 1356, 1366, 1376, 1386, 1396, 1406, 1416, 1425,
+     1434, 1443, 1452, 1461, 1470, 1479, 1490, 1503, 1516, 1531,
+     1630, 1635, 1640, 1645, 1646, 1647, 1648, 1649, 1650, 1652,
+     1670, 1683, 1688, 1692, 1694, 1696, 1698
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1665,7 +1456,7 @@ static const flex_int16_t yy_rule_linenum[167] =
 #define yymore() yymore_used_but_not_detected
 #define YY_MORE_ADJ 0
 #define YY_RESTORE_YY_MORE_OFFSET
-char *yytext;
+char *parser4_text;
 #line 1 "dhcp4_lexer.ll"
 /* Copyright (C) 2016-2018 Internet Systems Consortium, Inc. ("ISC")
 
@@ -1692,8 +1483,8 @@ char *yytext;
    2.5.31 through 2.5.33): it generates code that does
    not conform to C89.  See Debian bug 333231
    <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>. */
-# undef yywrap
-# define yywrap() 1
+# undef parser4_wrap
+# define parser4_wrap() 1
 
 namespace {
 
@@ -1708,10 +1499,9 @@ using namespace isc::dhcp;
 
 /* To avoid the call to exit... oops! */
 #define YY_FATAL_ERROR(msg) isc::dhcp::Parser4Context::fatal(msg)
-#line 1711 "dhcp4_lexer.cc"
 /* noyywrap disables automatic rewinding for the next file to parse. Since we
    always parse only a single string, there's no need to do any wraps. And
-   using yywrap requires linking with -lfl, which provides the default yywrap
+   using parser4_wrap requires linking with -lfl, which provides the default parser4_wrap
    implementation that always returns 1 anyway. */
 /* nounput simplifies the lexer, by removing support for putting a character
    back into the input stream. We never use such capability anyway. */
@@ -1719,23 +1509,23 @@ using namespace isc::dhcp;
 /* avoid to get static global variables to remain with C++. */
 /* in last resort %option reentrant */
 /* Enables debug mode. To see the debug messages, one needs to also set
-   yy_flex_debug to 1, then the debug messages will be printed on stderr. */
+   parser4__flex_debug to 1, then the debug messages will be printed on stderr. */
 /* I have no idea what this option does, except it was specified in the bison
    examples and Postgres folks added it to remove gcc 4.3 warnings. Let's
    be on the safe side and keep it. */
 #define YY_NO_INPUT 1
 
+
 /* These are not token expressions yet, just convenience expressions that
    can be used during actual token definitions. Note some can match
    incorrect inputs (e.g., IP addresses) which must be checked. */
 /* for errors */
 #line 94 "dhcp4_lexer.ll"
 /* This code run each time a pattern is matched. It updates the location
-   by moving it ahead by yyleng bytes. yyleng specifies the length of the
+   by moving it ahead by parser4_leng bytes. parser4_leng specifies the length of the
    currently matched token. */
-#define YY_USER_ACTION  driver.loc_.columns(yyleng);
-#line 1737 "dhcp4_lexer.cc"
-#line 1738 "dhcp4_lexer.cc"
+#define YY_USER_ACTION  driver.loc_.columns(parser4_leng);
+#line 1529 "dhcp4_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -1763,7 +1553,7 @@ using namespace isc::dhcp;
 /* %if-reentrant */
 /* %if-c-only */
 
-static int yy_init_globals ( void );
+static int yy_init_globals (void );
 
 /* %endif */
 /* %if-reentrant */
@@ -1773,31 +1563,31 @@ static int yy_init_globals ( void );
 /* Accessor methods to globals.
    These are made visible to non-reentrant scanners for convenience. */
 
-int yylex_destroy ( void );
+int parser4_lex_destroy (void );
 
-int yyget_debug ( void );
+int parser4_get_debug (void );
 
-void yyset_debug ( int debug_flag  );
+void parser4_set_debug (int debug_flag  );
 
-YY_EXTRA_TYPE yyget_extra ( void );
+YY_EXTRA_TYPE parser4_get_extra (void );
 
-void yyset_extra ( YY_EXTRA_TYPE user_defined  );
+void parser4_set_extra (YY_EXTRA_TYPE user_defined  );
 
-FILE *yyget_in ( void );
+FILE *parser4_get_in (void );
 
-void yyset_in  ( FILE * _in_str  );
+void parser4_set_in  (FILE * _in_str  );
 
-FILE *yyget_out ( void );
+FILE *parser4_get_out (void );
 
-void yyset_out  ( FILE * _out_str  );
+void parser4_set_out  (FILE * _out_str  );
 
-                       int yyget_leng ( void );
+yy_size_t parser4_get_leng (void );
 
-char *yyget_text ( void );
+char *parser4_get_text (void );
 
-int yyget_lineno ( void );
+int parser4_get_lineno (void );
 
-void yyset_lineno ( int _line_number  );
+void parser4_set_lineno (int _line_number  );
 
 /* %if-bison-bridge */
 /* %endif */
@@ -1808,13 +1598,14 @@ void yyset_lineno ( int _line_number  );
 
 #ifndef YY_SKIP_YYWRAP
 #ifdef __cplusplus
-extern "C" int yywrap ( void );
+extern "C" int parser4_wrap (void );
 #else
-extern int yywrap ( void );
+extern int parser4_wrap (void );
 #endif
 #endif
 
 /* %not-for-header */
+
 #ifndef YY_NO_UNPUT
     
 #endif
@@ -1823,20 +1614,21 @@ extern int yywrap ( void );
 /* %endif */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy ( char *, const char *, int );
+static void yy_flex_strncpy (char *,yyconst char *,int );
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen ( const char * );
+static int yy_flex_strlen (yyconst char * );
 #endif
 
 #ifndef YY_NO_INPUT
 /* %if-c-only Standard (non-C++) definition */
 /* %not-for-header */
+
 #ifdef __cplusplus
-static int yyinput ( void );
+static int yyinput (void );
 #else
-static int input ( void );
+static int input (void );
 #endif
 /* %ok-for-header */
 
@@ -1863,7 +1655,7 @@ static int input ( void );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
+#define ECHO do { if (fwrite( parser4_text, parser4_leng, 1, parser4_out )) {} } while (0)
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
@@ -1878,20 +1670,20 @@ static int input ( void );
        if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
                { \
                int c = '*'; \
-               int n; \
+               size_t n; \
                for ( n = 0; n < max_size && \
-                            (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+                            (c = getc( parser4_in )) != EOF && c != '\n'; ++n ) \
                        buf[n] = (char) c; \
                if ( c == '\n' ) \
                        buf[n++] = (char) c; \
-               if ( c == EOF && ferror( yyin ) ) \
+               if ( c == EOF && ferror( parser4_in ) ) \
                        YY_FATAL_ERROR( "input in flex scanner failed" ); \
                result = n; \
                } \
        else \
                { \
                errno=0; \
-               while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
+               while ( (result = fread(buf, 1, max_size, parser4_in))==0 && ferror(parser4_in)) \
                        { \
                        if( errno != EINTR) \
                                { \
@@ -1899,7 +1691,7 @@ static int input ( void );
                                break; \
                                } \
                        errno=0; \
-                       clearerr(yyin); \
+                       clearerr(parser4_in); \
                        } \
                }\
 \
@@ -1932,9 +1724,11 @@ static int input ( void );
 
 /* %if-tables-serialization structures and prototypes */
 /* %not-for-header */
+
 /* %ok-for-header */
 
 /* %not-for-header */
+
 /* %tables-yydmap generated elements */
 /* %endif */
 /* end tables serialization structures and prototypes */
@@ -1948,15 +1742,15 @@ static int input ( void );
 #define YY_DECL_IS_OURS 1
 /* %if-c-only Standard (non-C++) definition */
 
-extern int yylex (void);
+extern int parser4_lex (void);
 
-#define YY_DECL int yylex (void)
+#define YY_DECL int parser4_lex (void)
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
 #endif /* !YY_DECL */
 
-/* Code executed at the beginning of each rule, after yytext and yyleng
+/* Code executed at the beginning of each rule, after parser4_text and parser4_leng
  * have been set up.
  */
 #ifndef YY_USER_ACTION
@@ -1973,6 +1767,7 @@ extern int yylex (void);
        YY_USER_ACTION
 
 /* %not-for-header */
+
 /** The main scanner function which does all the work.
  */
 YY_DECL
@@ -1992,27 +1787,27 @@ YY_DECL
                if ( ! (yy_start) )
                        (yy_start) = 1; /* first start state */
 
-               if ( ! yyin )
+               if ( ! parser4_in )
 /* %if-c-only */
-                       yyin = stdin;
+                       parser4_in = stdin;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 
-               if ( ! yyout )
+               if ( ! parser4_out )
 /* %if-c-only */
-                       yyout = stdout;
+                       parser4_out = stdout;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 
                if ( ! YY_CURRENT_BUFFER ) {
-                       yyensure_buffer_stack ();
+                       parser4_ensure_buffer_stack ();
                        YY_CURRENT_BUFFER_LVALUE =
-                               yy_create_buffer( yyin, YY_BUF_SIZE );
+                               parser4__create_buffer(parser4_in,YY_BUF_SIZE );
                }
 
-               yy_load_buffer_state(  );
+               parser4__load_buffer_state( );
                }
 
        {
@@ -2021,12 +1816,11 @@ YY_DECL
 
 
 
-#line 104 "dhcp4_lexer.ll"
     /* This part of the code is copied over to the verbatim to the top
-       of the generated yylex function. Explanation:
+       of the generated parser4_lex function. Explanation:
        http://www.gnu.org/software/bison/manual/html_node/Multiple-start_002dsymbols.html */
 
-    /* Code run each time yylex is called. */
+    /* Code run each time parser4_lex is called. */
     driver.loc_.step();
 
     if (start_token_flag) {
@@ -2063,14 +1857,14 @@ YY_DECL
     }
 
 
-#line 2066 "dhcp4_lexer.cc"
+#line 1861 "dhcp4_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
 /* %% [8.0] yymore()-related code goes here */
                yy_cp = (yy_c_buf_p);
 
-               /* Support of yytext. */
+               /* Support of parser4_text. */
                *yy_cp = (yy_hold_char);
 
                /* yy_bp points to the position in yy_ch_buf of the start of
@@ -2092,13 +1886,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 >= 1393 )
-                                       yy_c = yy_meta[yy_c];
+                               if ( yy_current_state >= 1396 )
+                                       yy_c = yy_meta[(unsigned int) yy_c];
                                }
-                       yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+                       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 1392 );
+               while ( yy_current_state != 1395 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -2108,22 +1902,22 @@ yy_find_action:
 
                YY_DO_BEFORE_ACTION;
 
-/* %% [11.0] code for yylineno update goes here */
+/* %% [11.0] code for parser4_lineno update goes here */
 
 do_action:     /* This label is used only to access EOF actions. */
 
 /* %% [12.0] debug code goes here */
-               if ( yy_flex_debug )
+               if ( parser4__flex_debug )
                        {
                        if ( yy_act == 0 )
                                fprintf( stderr, "--scanner backing up\n" );
-                       else if ( yy_act < 167 )
+                       else if ( yy_act < 168 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
-                                        (long)yy_rule_linenum[yy_act], yytext );
-                       else if ( yy_act == 167 )
-                               fprintf( stderr, "--accepting default rule (\"%s\")\n",
-                                        yytext );
+                                        (long)yy_rule_linenum[yy_act], parser4_text );
                        else if ( yy_act == 168 )
+                               fprintf( stderr, "--accepting default rule (\"%s\")\n",
+                                        parser4_text );
+                       else if ( yy_act == 169 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -2141,17 +1935,17 @@ do_action:      /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 145 "dhcp4_lexer.ll"
+#line 144 "dhcp4_lexer.ll"
 ;
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 147 "dhcp4_lexer.ll"
+#line 146 "dhcp4_lexer.ll"
 ;
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 149 "dhcp4_lexer.ll"
+#line 148 "dhcp4_lexer.ll"
 {
   BEGIN(COMMENT);
   comment_start_line = driver.loc_.end.line;;
@@ -2159,38 +1953,38 @@ YY_RULE_SETUP
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 154 "dhcp4_lexer.ll"
+#line 153 "dhcp4_lexer.ll"
 BEGIN(INITIAL);
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 155 "dhcp4_lexer.ll"
+#line 154 "dhcp4_lexer.ll"
 ;
        YY_BREAK
 case YY_STATE_EOF(COMMENT):
-#line 156 "dhcp4_lexer.ll"
+#line 155 "dhcp4_lexer.ll"
 {
     isc_throw(Dhcp4ParseError, "Comment not closed. (/* in line " << comment_start_line);
 }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 160 "dhcp4_lexer.ll"
+#line 159 "dhcp4_lexer.ll"
 BEGIN(DIR_ENTER);
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 161 "dhcp4_lexer.ll"
+#line 160 "dhcp4_lexer.ll"
 BEGIN(DIR_INCLUDE);
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 162 "dhcp4_lexer.ll"
+#line 161 "dhcp4_lexer.ll"
 {
     /* Include directive. */
 
     /* Extract the filename. */
-    std::string tmp(yytext+1);
+    std::string tmp(parser4_text+1);
     tmp.resize(tmp.size() - 1);
 
     driver.includeFile(tmp);
@@ -2199,19 +1993,19 @@ YY_RULE_SETUP
 case YY_STATE_EOF(DIR_ENTER):
 case YY_STATE_EOF(DIR_INCLUDE):
 case YY_STATE_EOF(DIR_EXIT):
-#line 171 "dhcp4_lexer.ll"
+#line 170 "dhcp4_lexer.ll"
 {
     isc_throw(Dhcp4ParseError, "Directive not closed.");
 }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 174 "dhcp4_lexer.ll"
+#line 173 "dhcp4_lexer.ll"
 BEGIN(INITIAL);
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 177 "dhcp4_lexer.ll"
+#line 176 "dhcp4_lexer.ll"
 {
     /* Ok, we found a with space. Let's ignore it and update loc variable. */
     driver.loc_.step();
@@ -2220,16 +2014,16 @@ YY_RULE_SETUP
 case 11:
 /* rule 11 can match eol */
 YY_RULE_SETUP
-#line 182 "dhcp4_lexer.ll"
+#line 181 "dhcp4_lexer.ll"
 {
     /* Newline found. Let's update the location and continue. */
-    driver.loc_.lines(yyleng);
+    driver.loc_.lines(parser4_leng);
     driver.loc_.step();
 }
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 189 "dhcp4_lexer.ll"
+#line 188 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -2241,7 +2035,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 198 "dhcp4_lexer.ll"
+#line 197 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2253,7 +2047,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 207 "dhcp4_lexer.ll"
+#line 206 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::INTERFACES_CONFIG:
@@ -2265,7 +2059,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 216 "dhcp4_lexer.ll"
+#line 215 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_SOCKET_TYPE:
@@ -2277,7 +2071,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 225 "dhcp4_lexer.ll"
+#line 224 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_SOCKET_TYPE:
@@ -2290,7 +2084,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 235 "dhcp4_lexer.ll"
+#line 234 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case Parser4Context::INTERFACES_CONFIG:
@@ -2302,7 +2096,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 244 "dhcp4_lexer.ll"
+#line 243 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case Parser4Context::OUTBOUND_INTERFACE:
@@ -2314,7 +2108,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 253 "dhcp4_lexer.ll"
+#line 252 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case Parser4Context::OUTBOUND_INTERFACE:
@@ -2326,7 +2120,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 262 "dhcp4_lexer.ll"
+#line 261 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::INTERFACES_CONFIG:
@@ -2338,7 +2132,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 271 "dhcp4_lexer.ll"
+#line 270 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::INTERFACES_CONFIG:
@@ -2350,7 +2144,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 280 "dhcp4_lexer.ll"
+#line 279 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2362,7 +2156,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 289 "dhcp4_lexer.ll"
+#line 288 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2374,7 +2168,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 298 "dhcp4_lexer.ll"
+#line 297 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2386,7 +2180,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 307 "dhcp4_lexer.ll"
+#line 306 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
@@ -2398,7 +2192,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 316 "dhcp4_lexer.ll"
+#line 315 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2412,7 +2206,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 327 "dhcp4_lexer.ll"
+#line 326 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DATABASE_TYPE:
@@ -2424,7 +2218,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 336 "dhcp4_lexer.ll"
+#line 335 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DATABASE_TYPE:
@@ -2436,7 +2230,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 345 "dhcp4_lexer.ll"
+#line 344 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DATABASE_TYPE:
@@ -2448,7 +2242,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 354 "dhcp4_lexer.ll"
+#line 353 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DATABASE_TYPE:
@@ -2460,7 +2254,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 363 "dhcp4_lexer.ll"
+#line 362 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2473,7 +2267,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 373 "dhcp4_lexer.ll"
+#line 372 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2486,7 +2280,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 383 "dhcp4_lexer.ll"
+#line 382 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2499,7 +2293,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 393 "dhcp4_lexer.ll"
+#line 392 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2512,7 +2306,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 403 "dhcp4_lexer.ll"
+#line 402 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2525,7 +2319,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 413 "dhcp4_lexer.ll"
+#line 412 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2538,7 +2332,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 423 "dhcp4_lexer.ll"
+#line 422 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2551,7 +2345,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 433 "dhcp4_lexer.ll"
+#line 432 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2564,7 +2358,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 443 "dhcp4_lexer.ll"
+#line 442 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2577,7 +2371,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 453 "dhcp4_lexer.ll"
+#line 452 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2590,7 +2384,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 463 "dhcp4_lexer.ll"
+#line 462 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2603,7 +2397,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 473 "dhcp4_lexer.ll"
+#line 472 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2616,7 +2410,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 483 "dhcp4_lexer.ll"
+#line 482 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2629,7 +2423,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 493 "dhcp4_lexer.ll"
+#line 492 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2642,7 +2436,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 503 "dhcp4_lexer.ll"
+#line 502 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2656,7 +2450,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 514 "dhcp4_lexer.ll"
+#line 513 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2670,7 +2464,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 525 "dhcp4_lexer.ll"
+#line 524 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2684,7 +2478,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 536 "dhcp4_lexer.ll"
+#line 535 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2696,7 +2490,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 545 "dhcp4_lexer.ll"
+#line 544 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2709,7 +2503,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 555 "dhcp4_lexer.ll"
+#line 554 "dhcp4_lexer.ll"
 {
     switch (driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2721,7 +2515,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 564 "dhcp4_lexer.ll"
+#line 563 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2734,7 +2528,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 574 "dhcp4_lexer.ll"
+#line 573 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2751,7 +2545,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 588 "dhcp4_lexer.ll"
+#line 587 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2769,7 +2563,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 603 "dhcp4_lexer.ll"
+#line 602 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DATA:
@@ -2781,7 +2575,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 612 "dhcp4_lexer.ll"
+#line 611 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DATA:
@@ -2793,7 +2587,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 621 "dhcp4_lexer.ll"
+#line 620 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2805,7 +2599,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 630 "dhcp4_lexer.ll"
+#line 629 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::POOLS:
@@ -2817,7 +2611,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 639 "dhcp4_lexer.ll"
+#line 638 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2840,7 +2634,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 659 "dhcp4_lexer.ll"
+#line 658 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2863,7 +2657,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 679 "dhcp4_lexer.ll"
+#line 678 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2875,7 +2669,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 688 "dhcp4_lexer.ll"
+#line 687 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2888,7 +2682,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 698 "dhcp4_lexer.ll"
+#line 697 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2900,7 +2694,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 707 "dhcp4_lexer.ll"
+#line 706 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2912,7 +2706,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 716 "dhcp4_lexer.ll"
+#line 715 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2924,7 +2718,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 725 "dhcp4_lexer.ll"
+#line 724 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2937,7 +2731,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 735 "dhcp4_lexer.ll"
+#line 734 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -2949,7 +2743,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 744 "dhcp4_lexer.ll"
+#line 743 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -2961,7 +2755,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 753 "dhcp4_lexer.ll"
+#line 752 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -2973,7 +2767,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 762 "dhcp4_lexer.ll"
+#line 761 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -2985,7 +2779,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 771 "dhcp4_lexer.ll"
+#line 770 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -2998,7 +2792,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 781 "dhcp4_lexer.ll"
+#line 780 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3010,7 +2804,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 790 "dhcp4_lexer.ll"
+#line 789 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -3022,7 +2816,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 799 "dhcp4_lexer.ll"
+#line 798 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGING:
@@ -3034,7 +2828,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 808 "dhcp4_lexer.ll"
+#line 807 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -3046,7 +2840,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 817 "dhcp4_lexer.ll"
+#line 816 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -3058,7 +2852,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 826 "dhcp4_lexer.ll"
+#line 825 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -3070,7 +2864,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 835 "dhcp4_lexer.ll"
+#line 834 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -3082,7 +2876,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 844 "dhcp4_lexer.ll"
+#line 843 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -3094,7 +2888,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 853 "dhcp4_lexer.ll"
+#line 852 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -3106,7 +2900,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 862 "dhcp4_lexer.ll"
+#line 861 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -3118,7 +2912,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 871 "dhcp4_lexer.ll"
+#line 870 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3131,7 +2925,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 881 "dhcp4_lexer.ll"
+#line 880 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3145,7 +2939,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 892 "dhcp4_lexer.ll"
+#line 891 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3160,7 +2954,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 904 "dhcp4_lexer.ll"
+#line 903 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CLIENT_CLASSES:
@@ -3172,7 +2966,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 913 "dhcp4_lexer.ll"
+#line 912 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CLIENT_CLASSES:
@@ -3184,7 +2978,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 922 "dhcp4_lexer.ll"
+#line 921 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3196,7 +2990,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 931 "dhcp4_lexer.ll"
+#line 930 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3209,7 +3003,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 941 "dhcp4_lexer.ll"
+#line 940 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3222,7 +3016,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 951 "dhcp4_lexer.ll"
+#line 950 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3235,7 +3029,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 961 "dhcp4_lexer.ll"
+#line 960 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3248,7 +3042,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 971 "dhcp4_lexer.ll"
+#line 970 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3261,7 +3055,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 981 "dhcp4_lexer.ll"
+#line 980 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATIONS:
@@ -3273,7 +3067,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 990 "dhcp4_lexer.ll"
+#line 989 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -3286,7 +3080,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 1000 "dhcp4_lexer.ll"
+#line 999 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DATA:
@@ -3298,7 +3092,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 1009 "dhcp4_lexer.ll"
+#line 1008 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -3310,7 +3104,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 1018 "dhcp4_lexer.ll"
+#line 1017 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -3322,7 +3116,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 1027 "dhcp4_lexer.ll"
+#line 1026 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -3334,7 +3128,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 1036 "dhcp4_lexer.ll"
+#line 1035 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3347,7 +3141,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 1046 "dhcp4_lexer.ll"
+#line 1045 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RELAY:
@@ -3360,7 +3154,19 @@ YY_RULE_SETUP
        YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 1056 "dhcp4_lexer.ll"
+#line 1055 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::RELAY:
+    return isc::dhcp::Dhcp4Parser::make_IP_ADDRESSES(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("ip-addresses", driver.loc_);
+    }
+}
+       YY_BREAK
+case 101:
+YY_RULE_SETUP
+#line 1064 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3370,9 +3176,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 101:
+case 102:
 YY_RULE_SETUP
-#line 1066 "dhcp4_lexer.ll"
+#line 1074 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOOKS_LIBRARIES:
@@ -3382,9 +3188,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 102:
+case 103:
 YY_RULE_SETUP
-#line 1075 "dhcp4_lexer.ll"
+#line 1083 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOOKS_LIBRARIES:
@@ -3394,9 +3200,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 103:
+case 104:
 YY_RULE_SETUP
-#line 1084 "dhcp4_lexer.ll"
+#line 1092 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3406,9 +3212,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 104:
+case 105:
 YY_RULE_SETUP
-#line 1093 "dhcp4_lexer.ll"
+#line 1101 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3418,9 +3224,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 105:
+case 106:
 YY_RULE_SETUP
-#line 1102 "dhcp4_lexer.ll"
+#line 1110 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3430,9 +3236,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 106:
+case 107:
 YY_RULE_SETUP
-#line 1111 "dhcp4_lexer.ll"
+#line 1119 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3442,9 +3248,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 107:
+case 108:
 YY_RULE_SETUP
-#line 1120 "dhcp4_lexer.ll"
+#line 1128 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3454,9 +3260,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 108:
+case 109:
 YY_RULE_SETUP
-#line 1129 "dhcp4_lexer.ll"
+#line 1137 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3466,9 +3272,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 109:
+case 110:
 YY_RULE_SETUP
-#line 1138 "dhcp4_lexer.ll"
+#line 1146 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3478,9 +3284,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 110:
+case 111:
 YY_RULE_SETUP
-#line 1147 "dhcp4_lexer.ll"
+#line 1155 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3490,9 +3296,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 111:
+case 112:
 YY_RULE_SETUP
-#line 1156 "dhcp4_lexer.ll"
+#line 1164 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3502,9 +3308,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 112:
+case 113:
 YY_RULE_SETUP
-#line 1165 "dhcp4_lexer.ll"
+#line 1173 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONTROL_SOCKET:
@@ -3514,9 +3320,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 113:
+case 114:
 YY_RULE_SETUP
-#line 1174 "dhcp4_lexer.ll"
+#line 1182 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONTROL_SOCKET:
@@ -3526,9 +3332,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 114:
+case 115:
 YY_RULE_SETUP
-#line 1183 "dhcp4_lexer.ll"
+#line 1191 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3538,9 +3344,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 115:
+case 116:
 YY_RULE_SETUP
-#line 1192 "dhcp4_lexer.ll"
+#line 1200 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3550,9 +3356,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 116:
+case 117:
 YY_RULE_SETUP
-#line 1201 "dhcp4_lexer.ll"
+#line 1209 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3562,9 +3368,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 117:
+case 118:
 YY_RULE_SETUP
-#line 1210 "dhcp4_lexer.ll"
+#line 1218 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3574,9 +3380,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 118:
+case 119:
 YY_RULE_SETUP
-#line 1219 "dhcp4_lexer.ll"
+#line 1227 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3586,9 +3392,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 119:
+case 120:
 YY_RULE_SETUP
-#line 1228 "dhcp4_lexer.ll"
+#line 1236 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3598,9 +3404,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 120:
+case 121:
 YY_RULE_SETUP
-#line 1237 "dhcp4_lexer.ll"
+#line 1245 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3610,9 +3416,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 121:
+case 122:
 YY_RULE_SETUP
-#line 1246 "dhcp4_lexer.ll"
+#line 1254 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3622,9 +3428,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 122:
+case 123:
 YY_RULE_SETUP
-#line 1255 "dhcp4_lexer.ll"
+#line 1263 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3634,9 +3440,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 123:
+case 124:
 YY_RULE_SETUP
-#line 1264 "dhcp4_lexer.ll"
+#line 1272 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3646,9 +3452,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 124:
+case 125:
 YY_RULE_SETUP
-#line 1273 "dhcp4_lexer.ll"
+#line 1281 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3658,9 +3464,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 125:
+case 126:
 YY_RULE_SETUP
-#line 1282 "dhcp4_lexer.ll"
+#line 1290 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3670,9 +3476,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 126:
+case 127:
 YY_RULE_SETUP
-#line 1291 "dhcp4_lexer.ll"
+#line 1299 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3682,9 +3488,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 127:
+case 128:
 YY_RULE_SETUP
-#line 1300 "dhcp4_lexer.ll"
+#line 1308 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3694,9 +3500,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 128:
+case 129:
 YY_RULE_SETUP
-#line 1309 "dhcp4_lexer.ll"
+#line 1317 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3706,126 +3512,126 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 129:
+case 130:
 YY_RULE_SETUP
-#line 1318 "dhcp4_lexer.ll"
+#line 1326 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
          return isc::dhcp::Dhcp4Parser::make_UDP(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(parser4_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 130:
+case 131:
 YY_RULE_SETUP
-#line 1328 "dhcp4_lexer.ll"
+#line 1336 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
         return isc::dhcp::Dhcp4Parser::make_TCP(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(parser4_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 131:
+case 132:
 YY_RULE_SETUP
-#line 1338 "dhcp4_lexer.ll"
+#line 1346 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_FORMAT) {
         return isc::dhcp::Dhcp4Parser::make_JSON(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(parser4_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 132:
+case 133:
 YY_RULE_SETUP
-#line 1348 "dhcp4_lexer.ll"
+#line 1356 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
         return isc::dhcp::Dhcp4Parser::make_WHEN_PRESENT(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(parser4_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 133:
+case 134:
 YY_RULE_SETUP
-#line 1358 "dhcp4_lexer.ll"
+#line 1366 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
         return isc::dhcp::Dhcp4Parser::make_WHEN_PRESENT(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(parser4_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 134:
+case 135:
 YY_RULE_SETUP
-#line 1368 "dhcp4_lexer.ll"
+#line 1376 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
         return isc::dhcp::Dhcp4Parser::make_NEVER(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(parser4_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 135:
+case 136:
 YY_RULE_SETUP
-#line 1378 "dhcp4_lexer.ll"
+#line 1386 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
         return isc::dhcp::Dhcp4Parser::make_NEVER(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(parser4_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 136:
+case 137:
 YY_RULE_SETUP
-#line 1388 "dhcp4_lexer.ll"
+#line 1396 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
         return isc::dhcp::Dhcp4Parser::make_ALWAYS(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(parser4_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 137:
+case 138:
 YY_RULE_SETUP
-#line 1398 "dhcp4_lexer.ll"
+#line 1406 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
         return isc::dhcp::Dhcp4Parser::make_WHEN_NOT_PRESENT(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(parser4_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 138:
+case 139:
 YY_RULE_SETUP
-#line 1408 "dhcp4_lexer.ll"
+#line 1416 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -3835,9 +3641,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 139:
+case 140:
 YY_RULE_SETUP
-#line 1417 "dhcp4_lexer.ll"
+#line 1425 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -3847,9 +3653,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 140:
+case 141:
 YY_RULE_SETUP
-#line 1426 "dhcp4_lexer.ll"
+#line 1434 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -3859,9 +3665,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 141:
+case 142:
 YY_RULE_SETUP
-#line 1435 "dhcp4_lexer.ll"
+#line 1443 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3871,9 +3677,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 142:
+case 143:
 YY_RULE_SETUP
-#line 1444 "dhcp4_lexer.ll"
+#line 1452 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3883,9 +3689,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 143:
+case 144:
 YY_RULE_SETUP
-#line 1453 "dhcp4_lexer.ll"
+#line 1461 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3895,9 +3701,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 144:
+case 145:
 YY_RULE_SETUP
-#line 1462 "dhcp4_lexer.ll"
+#line 1470 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3907,9 +3713,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 145:
+case 146:
 YY_RULE_SETUP
-#line 1471 "dhcp4_lexer.ll"
+#line 1479 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3921,9 +3727,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 146:
+case 147:
 YY_RULE_SETUP
-#line 1482 "dhcp4_lexer.ll"
+#line 1490 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3937,9 +3743,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 147:
+case 148:
 YY_RULE_SETUP
-#line 1495 "dhcp4_lexer.ll"
+#line 1503 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3953,9 +3759,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 148:
+case 149:
 YY_RULE_SETUP
-#line 1508 "dhcp4_lexer.ll"
+#line 1516 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3969,14 +3775,14 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 149:
+case 150:
 YY_RULE_SETUP
-#line 1523 "dhcp4_lexer.ll"
+#line 1531 "dhcp4_lexer.ll"
 {
     /* A string has been matched. It contains the actual string and single quotes.
        We need to get those quotes out of the way and just use its content, e.g.
        for 'foo' we should get foo */
-    std::string raw(yytext+1);
+    std::string raw(parser4_text+1);
     size_t len = raw.size() - 1;
     raw.resize(len);
     std::string decoded;
@@ -4071,68 +3877,68 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(decoded, driver.loc_);
 }
        YY_BREAK
-case 150:
-/* rule 150 can match eol */
+case 151:
+/* rule 151 can match eol */
 YY_RULE_SETUP
-#line 1622 "dhcp4_lexer.ll"
+#line 1630 "dhcp4_lexer.ll"
 {
     /* Bad string with a forbidden control character inside */
-    driver.error(driver.loc_, "Invalid control in " + std::string(yytext));
+    driver.error(driver.loc_, "Invalid control in " + std::string(parser4_text));
 }
        YY_BREAK
-case 151:
-/* rule 151 can match eol */
+case 152:
+/* rule 152 can match eol */
 YY_RULE_SETUP
-#line 1627 "dhcp4_lexer.ll"
+#line 1635 "dhcp4_lexer.ll"
 {
     /* Bad string with a bad escape inside */
-    driver.error(driver.loc_, "Bad escape in " + std::string(yytext));
+    driver.error(driver.loc_, "Bad escape in " + std::string(parser4_text));
 }
        YY_BREAK
-case 152:
+case 153:
 YY_RULE_SETUP
-#line 1632 "dhcp4_lexer.ll"
+#line 1640 "dhcp4_lexer.ll"
 {
     /* Bad string with an open escape at the end */
-    driver.error(driver.loc_, "Overflow escape in " + std::string(yytext));
+    driver.error(driver.loc_, "Overflow escape in " + std::string(parser4_text));
 }
        YY_BREAK
-case 153:
+case 154:
 YY_RULE_SETUP
-#line 1637 "dhcp4_lexer.ll"
+#line 1645 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 154:
+case 155:
 YY_RULE_SETUP
-#line 1638 "dhcp4_lexer.ll"
+#line 1646 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 155:
+case 156:
 YY_RULE_SETUP
-#line 1639 "dhcp4_lexer.ll"
+#line 1647 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 156:
+case 157:
 YY_RULE_SETUP
-#line 1640 "dhcp4_lexer.ll"
+#line 1648 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 157:
+case 158:
 YY_RULE_SETUP
-#line 1641 "dhcp4_lexer.ll"
+#line 1649 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COMMA(driver.loc_); }
        YY_BREAK
-case 158:
+case 159:
 YY_RULE_SETUP
-#line 1642 "dhcp4_lexer.ll"
+#line 1650 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COLON(driver.loc_); }
        YY_BREAK
-case 159:
+case 160:
 YY_RULE_SETUP
-#line 1644 "dhcp4_lexer.ll"
+#line 1652 "dhcp4_lexer.ll"
 {
     /* An integer was found. */
-    std::string tmp(yytext);
+    std::string tmp(parser4_text);
     int64_t integer = 0;
     try {
         /* In substring we want to use negative values (e.g. -1).
@@ -4148,12 +3954,12 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_INTEGER(integer, driver.loc_);
 }
        YY_BREAK
-case 160:
+case 161:
 YY_RULE_SETUP
-#line 1662 "dhcp4_lexer.ll"
+#line 1670 "dhcp4_lexer.ll"
 {
     /* A floating point was found. */
-    std::string tmp(yytext);
+    std::string tmp(parser4_text);
     double fp = 0.0;
     try {
         fp = boost::lexical_cast<double>(tmp);
@@ -4164,43 +3970,43 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_FLOAT(fp, driver.loc_);
 }
        YY_BREAK
-case 161:
+case 162:
 YY_RULE_SETUP
-#line 1675 "dhcp4_lexer.ll"
+#line 1683 "dhcp4_lexer.ll"
 {
-    string tmp(yytext);
+    string tmp(parser4_text);
     return isc::dhcp::Dhcp4Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
-case 162:
+case 163:
 YY_RULE_SETUP
-#line 1680 "dhcp4_lexer.ll"
+#line 1688 "dhcp4_lexer.ll"
 {
    return isc::dhcp::Dhcp4Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
-case 163:
+case 164:
 YY_RULE_SETUP
-#line 1684 "dhcp4_lexer.ll"
+#line 1692 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
-case 164:
+case 165:
 YY_RULE_SETUP
-#line 1686 "dhcp4_lexer.ll"
+#line 1694 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
-case 165:
+case 166:
 YY_RULE_SETUP
-#line 1688 "dhcp4_lexer.ll"
+#line 1696 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
-case 166:
+case 167:
 YY_RULE_SETUP
-#line 1690 "dhcp4_lexer.ll"
-driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
+#line 1698 "dhcp4_lexer.ll"
+driver.error (driver.loc_, "Invalid character: " + std::string(parser4_text));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 1692 "dhcp4_lexer.ll"
+#line 1700 "dhcp4_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp4Parser::make_END(driver.loc_);
@@ -4224,12 +4030,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
        YY_BREAK
-case 167:
+case 168:
 YY_RULE_SETUP
-#line 1715 "dhcp4_lexer.ll"
+#line 1723 "dhcp4_lexer.ll"
 ECHO;
        YY_BREAK
-#line 4232 "dhcp4_lexer.cc"
+#line 4039 "dhcp4_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -4244,8 +4050,8 @@ ECHO;
                        {
                        /* We're scanning a new file or input source.  It's
                         * possible that this happened because the user
-                        * just pointed yyin at a new source and called
-                        * yylex().  If so, then we have to assure
+                        * just pointed parser4_in at a new source and called
+                        * parser4_lex().  If so, then we have to assure
                         * consistency between YY_CURRENT_BUFFER and our
                         * globals.  Here is the right place to do so, because
                         * this is the first action (other than possibly a
@@ -4253,7 +4059,7 @@ ECHO;
                         */
                        (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
 /* %if-c-only */
-                       YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+                       YY_CURRENT_BUFFER_LVALUE->yy_input_file = parser4_in;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4311,11 +4117,11 @@ ECHO;
                                {
                                (yy_did_buffer_switch_on_eof) = 0;
 
-                               if ( yywrap(  ) )
+                               if ( parser4_wrap( ) )
                                        {
                                        /* Note: because we've taken care in
                                         * yy_get_next_buffer() to have set up
-                                        * yytext, we can now set up
+                                        * parser4_text, we can now set up
                                         * yy_c_buf_p so that if some total
                                         * hoser (like flex itself) wants to
                                         * call the scanner after we return the
@@ -4365,11 +4171,12 @@ ECHO;
        } /* end of action switch */
                } /* end of scanning one token */
        } /* end of user's declarations */
-} /* end of yylex */
+} /* end of parser4_lex */
 /* %ok-for-header */
 
 /* %if-c++-only */
 /* %not-for-header */
+
 /* %ok-for-header */
 
 /* %endif */
@@ -4389,7 +4196,7 @@ static int yy_get_next_buffer (void)
 {
        char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
        char *source = (yytext_ptr);
-       int number_to_move, i;
+       yy_size_t number_to_move, i;
        int ret_val;
 
        if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
@@ -4418,7 +4225,7 @@ static int yy_get_next_buffer (void)
        /* Try to read more data. */
 
        /* First move last chars to start of buffer. */
-       number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);
+       number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1;
 
        for ( i = 0; i < number_to_move; ++i )
                *(dest++) = *(source++);
@@ -4431,7 +4238,7 @@ static int yy_get_next_buffer (void)
 
        else
                {
-                       int num_to_read =
+                       yy_size_t num_to_read =
                        YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
                while ( num_to_read <= 0 )
@@ -4445,7 +4252,7 @@ static int yy_get_next_buffer (void)
 
                        if ( b->yy_is_our_buffer )
                                {
-                               int new_size = b->yy_buf_size * 2;
+                               yy_size_t new_size = b->yy_buf_size * 2;
 
                                if ( new_size <= 0 )
                                        b->yy_buf_size += b->yy_buf_size / 8;
@@ -4454,12 +4261,11 @@ static int yy_get_next_buffer (void)
 
                                b->yy_ch_buf = (char *)
                                        /* Include room in for 2 EOB chars. */
-                                       yyrealloc( (void *) b->yy_ch_buf,
-                                                        (yy_size_t) (b->yy_buf_size + 2)  );
+                                       parser4_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
                                }
                        else
                                /* Can't grow it, we don't own it. */
-                               b->yy_ch_buf = NULL;
+                               b->yy_ch_buf = 0;
 
                        if ( ! b->yy_ch_buf )
                                YY_FATAL_ERROR(
@@ -4487,7 +4293,7 @@ static int yy_get_next_buffer (void)
                if ( number_to_move == YY_MORE_ADJ )
                        {
                        ret_val = EOB_ACT_END_OF_FILE;
-                       yyrestart( yyin  );
+                       parser4_restart(parser4_in  );
                        }
 
                else
@@ -4501,15 +4307,12 @@ static int yy_get_next_buffer (void)
        else
                ret_val = EOB_ACT_CONTINUE_SCAN;
 
-       if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+       if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
                /* Extend the array by 50%, plus the number we really need. */
                int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-               YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
-                       (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size  );
+               YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) parser4_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
                if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
                        YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
-               /* "- 2" to take care of EOB's */
-               YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
        }
 
        (yy_n_chars) += number_to_move;
@@ -4525,6 +4328,7 @@ static int yy_get_next_buffer (void)
 
 /* %if-c-only */
 /* %not-for-header */
+
     static yy_state_type yy_get_previous_state (void)
 /* %endif */
 /* %if-c++-only */
@@ -4548,10 +4352,10 @@ 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 >= 1393 )
-                               yy_c = yy_meta[yy_c];
+                       if ( yy_current_state >= 1396 )
+                               yy_c = yy_meta[(unsigned int) yy_c];
                        }
-               yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+               yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                }
 
        return yy_current_state;
@@ -4581,11 +4385,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 >= 1393 )
-                       yy_c = yy_meta[yy_c];
+               if ( yy_current_state >= 1396 )
+                       yy_c = yy_meta[(unsigned int) yy_c];
                }
-       yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-       yy_is_jam = (yy_current_state == 1392);
+       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+       yy_is_jam = (yy_current_state == 1395);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -4624,7 +4428,7 @@ static int yy_get_next_buffer (void)
 
                else
                        { /* need more input */
-                       int offset = (int) ((yy_c_buf_p) - (yytext_ptr));
+                       yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
                        ++(yy_c_buf_p);
 
                        switch ( yy_get_next_buffer(  ) )
@@ -4641,14 +4445,14 @@ static int yy_get_next_buffer (void)
                                         */
 
                                        /* Reset buffer status. */
-                                       yyrestart( yyin );
+                                       parser4_restart(parser4_in );
 
                                        /*FALLTHROUGH*/
 
                                case EOB_ACT_END_OF_FILE:
                                        {
-                                       if ( yywrap(  ) )
-                                               return 0;
+                                       if ( parser4_wrap( ) )
+                                               return EOF;
 
                                        if ( ! (yy_did_buffer_switch_on_eof) )
                                                YY_NEW_FILE;
@@ -4667,10 +4471,10 @@ static int yy_get_next_buffer (void)
                }
 
        c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
-       *(yy_c_buf_p) = '\0';   /* preserve yytext */
+       *(yy_c_buf_p) = '\0';   /* preserve parser4_text */
        (yy_hold_char) = *++(yy_c_buf_p);
 
-/* %% [19.0] update BOL and yylineno */
+/* %% [19.0] update BOL and parser4_lineno */
 
        return c;
 }
@@ -4684,20 +4488,20 @@ static int yy_get_next_buffer (void)
  * @note This function does not reset the start condition to @c INITIAL .
  */
 /* %if-c-only */
-    void yyrestart  (FILE * input_file )
+    void parser4_restart  (FILE * input_file )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
     
        if ( ! YY_CURRENT_BUFFER ){
-        yyensure_buffer_stack ();
+        parser4_ensure_buffer_stack ();
                YY_CURRENT_BUFFER_LVALUE =
-            yy_create_buffer( yyin, YY_BUF_SIZE );
+            parser4__create_buffer(parser4_in,YY_BUF_SIZE );
        }
 
-       yy_init_buffer( YY_CURRENT_BUFFER, input_file );
-       yy_load_buffer_state(  );
+       parser4__init_buffer(YY_CURRENT_BUFFER,input_file );
+       parser4__load_buffer_state( );
 }
 
 /* %if-c++-only */
@@ -4708,7 +4512,7 @@ static int yy_get_next_buffer (void)
  * 
  */
 /* %if-c-only */
-    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+    void parser4__switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4716,10 +4520,10 @@ static int yy_get_next_buffer (void)
     
        /* TODO. We should be able to replace this entire function body
         * with
-        *              yypop_buffer_state();
-        *              yypush_buffer_state(new_buffer);
+        *              parser4_pop_buffer_state();
+        *              parser4_push_buffer_state(new_buffer);
      */
-       yyensure_buffer_stack ();
+       parser4_ensure_buffer_stack ();
        if ( YY_CURRENT_BUFFER == new_buffer )
                return;
 
@@ -4732,18 +4536,18 @@ static int yy_get_next_buffer (void)
                }
 
        YY_CURRENT_BUFFER_LVALUE = new_buffer;
-       yy_load_buffer_state(  );
+       parser4__load_buffer_state( );
 
        /* We don't actually know whether we did this switch during
-        * EOF (yywrap()) processing, but the only time this flag
-        * is looked at is after yywrap() is called, so it's safe
+        * EOF (parser4_wrap()) processing, but the only time this flag
+        * is looked at is after parser4_wrap() is called, so it's safe
         * to go ahead and always set it.
         */
        (yy_did_buffer_switch_on_eof) = 1;
 }
 
 /* %if-c-only */
-static void yy_load_buffer_state  (void)
+static void parser4__load_buffer_state  (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4751,7 +4555,7 @@ static void yy_load_buffer_state  (void)
        (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
        (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
 /* %if-c-only */
-       yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+       parser4_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4765,29 +4569,29 @@ static void yy_load_buffer_state  (void)
  * @return the allocated buffer state.
  */
 /* %if-c-only */
-    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
+    YY_BUFFER_STATE parser4__create_buffer  (FILE * file, int  size )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
        YY_BUFFER_STATE b;
     
-       b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
+       b = (YY_BUFFER_STATE) parser4_alloc(sizeof( struct yy_buffer_state )  );
        if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+               YY_FATAL_ERROR( "out of dynamic memory in parser4__create_buffer()" );
 
-       b->yy_buf_size = size;
+       b->yy_buf_size = (yy_size_t)size;
 
        /* yy_ch_buf has to be 2 characters longer than the size given because
         * we need to put in 2 end-of-buffer characters.
         */
-       b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2)  );
+       b->yy_ch_buf = (char *) parser4_alloc(b->yy_buf_size + 2  );
        if ( ! b->yy_ch_buf )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+               YY_FATAL_ERROR( "out of dynamic memory in parser4__create_buffer()" );
 
        b->yy_is_our_buffer = 1;
 
-       yy_init_buffer( b, file );
+       parser4__init_buffer(b,file );
 
        return b;
 }
@@ -4796,11 +4600,11 @@ static void yy_load_buffer_state  (void)
 /* %endif */
 
 /** Destroy the buffer.
- * @param b a buffer created with yy_create_buffer()
+ * @param b a buffer created with parser4__create_buffer()
  * 
  */
 /* %if-c-only */
-    void yy_delete_buffer (YY_BUFFER_STATE  b )
+    void parser4__delete_buffer (YY_BUFFER_STATE  b )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4813,17 +4617,17 @@ static void yy_load_buffer_state  (void)
                YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
 
        if ( b->yy_is_our_buffer )
-               yyfree( (void *) b->yy_ch_buf  );
+               parser4_free((void *) b->yy_ch_buf  );
 
-       yyfree( (void *) b  );
+       parser4_free((void *) b  );
 }
 
 /* Initializes or reinitializes a buffer.
  * This function is sometimes called more than once on the same buffer,
- * such as during a yyrestart() or at EOF.
+ * such as during a parser4_restart() or at EOF.
  */
 /* %if-c-only */
-    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+    static void parser4__init_buffer  (YY_BUFFER_STATE  b, FILE * file )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4831,7 +4635,7 @@ static void yy_load_buffer_state  (void)
 {
        int oerrno = errno;
     
-       yy_flush_buffer( b );
+       parser4__flush_buffer(b );
 
 /* %if-c-only */
        b->yy_input_file = file;
@@ -4840,8 +4644,8 @@ static void yy_load_buffer_state  (void)
 /* %endif */
        b->yy_fill_buffer = 1;
 
-    /* If b is the current buffer, then yy_init_buffer was _probably_
-     * called from yyrestart() or through yy_get_next_buffer.
+    /* If b is the current buffer, then parser4__init_buffer was _probably_
+     * called from parser4_restart() or through yy_get_next_buffer.
      * In that case, we don't want to reset the lineno or column.
      */
     if (b != YY_CURRENT_BUFFER){
@@ -4864,7 +4668,7 @@ static void yy_load_buffer_state  (void)
  * 
  */
 /* %if-c-only */
-    void yy_flush_buffer (YY_BUFFER_STATE  b )
+    void parser4__flush_buffer (YY_BUFFER_STATE  b )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4887,7 +4691,7 @@ static void yy_load_buffer_state  (void)
        b->yy_buffer_status = YY_BUFFER_NEW;
 
        if ( b == YY_CURRENT_BUFFER )
-               yy_load_buffer_state(  );
+               parser4__load_buffer_state( );
 }
 
 /* %if-c-or-c++ */
@@ -4898,7 +4702,7 @@ static void yy_load_buffer_state  (void)
  *  
  */
 /* %if-c-only */
-void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+void parser4_push_buffer_state (YY_BUFFER_STATE new_buffer )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4906,9 +4710,9 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
        if (new_buffer == NULL)
                return;
 
-       yyensure_buffer_stack();
+       parser4_ensure_buffer_stack();
 
-       /* This block is copied from yy_switch_to_buffer. */
+       /* This block is copied from parser4__switch_to_buffer. */
        if ( YY_CURRENT_BUFFER )
                {
                /* Flush out information for old buffer. */
@@ -4922,8 +4726,8 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
                (yy_buffer_stack_top)++;
        YY_CURRENT_BUFFER_LVALUE = new_buffer;
 
-       /* copied from yy_switch_to_buffer. */
-       yy_load_buffer_state(  );
+       /* copied from parser4__switch_to_buffer. */
+       parser4__load_buffer_state( );
        (yy_did_buffer_switch_on_eof) = 1;
 }
 /* %endif */
@@ -4934,7 +4738,7 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
  *  
  */
 /* %if-c-only */
-void yypop_buffer_state (void)
+void parser4_pop_buffer_state (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4942,13 +4746,13 @@ void yypop_buffer_state (void)
        if (!YY_CURRENT_BUFFER)
                return;
 
-       yy_delete_buffer(YY_CURRENT_BUFFER );
+       parser4__delete_buffer(YY_CURRENT_BUFFER );
        YY_CURRENT_BUFFER_LVALUE = NULL;
        if ((yy_buffer_stack_top) > 0)
                --(yy_buffer_stack_top);
 
        if (YY_CURRENT_BUFFER) {
-               yy_load_buffer_state(  );
+               parser4__load_buffer_state( );
                (yy_did_buffer_switch_on_eof) = 1;
        }
 }
@@ -4959,7 +4763,7 @@ void yypop_buffer_state (void)
  *  Guarantees space for at least one push.
  */
 /* %if-c-only */
-static void yyensure_buffer_stack (void)
+static void parser4_ensure_buffer_stack (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4972,15 +4776,15 @@ static void yyensure_buffer_stack (void)
                 * scanner will even need a stack. We use 2 instead of 1 to avoid an
                 * immediate realloc on the next call.
          */
-      num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
-               (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+               num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
+               (yy_buffer_stack) = (struct yy_buffer_state**)parser4_alloc
                                                                (num_to_alloc * sizeof(struct yy_buffer_state*)
                                                                );
                if ( ! (yy_buffer_stack) )
-                       YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-
+                       YY_FATAL_ERROR( "out of dynamic memory in parser4_ensure_buffer_stack()" );
+                                                                 
                memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-
+                               
                (yy_buffer_stack_max) = num_to_alloc;
                (yy_buffer_stack_top) = 0;
                return;
@@ -4992,12 +4796,12 @@ static void yyensure_buffer_stack (void)
                yy_size_t grow_size = 8 /* arbitrary grow size */;
 
                num_to_alloc = (yy_buffer_stack_max) + grow_size;
-               (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+               (yy_buffer_stack) = (struct yy_buffer_state**)parser4_realloc
                                                                ((yy_buffer_stack),
                                                                num_to_alloc * sizeof(struct yy_buffer_state*)
                                                                );
                if ( ! (yy_buffer_stack) )
-                       YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+                       YY_FATAL_ERROR( "out of dynamic memory in parser4_ensure_buffer_stack()" );
 
                /* zero only the new slots.*/
                memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
@@ -5011,9 +4815,9 @@ static void yyensure_buffer_stack (void)
  * @param base the character buffer
  * @param size the size in bytes of the character buffer
  * 
- * @return the newly allocated buffer state object.
+ * @return the newly allocated buffer state object. 
  */
-YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
+YY_BUFFER_STATE parser4__scan_buffer  (char * base, yy_size_t  size )
 {
        YY_BUFFER_STATE b;
     
@@ -5021,73 +4825,73 @@ YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
             base[size-2] != YY_END_OF_BUFFER_CHAR ||
             base[size-1] != YY_END_OF_BUFFER_CHAR )
                /* They forgot to leave room for the EOB's. */
-               return NULL;
+               return 0;
 
-       b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
+       b = (YY_BUFFER_STATE) parser4_alloc(sizeof( struct yy_buffer_state )  );
        if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+               YY_FATAL_ERROR( "out of dynamic memory in parser4__scan_buffer()" );
 
-       b->yy_buf_size = (int) (size - 2);      /* "- 2" to take care of EOB's */
+       b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
        b->yy_buf_pos = b->yy_ch_buf = base;
        b->yy_is_our_buffer = 0;
-       b->yy_input_file = NULL;
+       b->yy_input_file = 0;
        b->yy_n_chars = b->yy_buf_size;
        b->yy_is_interactive = 0;
        b->yy_at_bol = 1;
        b->yy_fill_buffer = 0;
        b->yy_buffer_status = YY_BUFFER_NEW;
 
-       yy_switch_to_buffer( b  );
+       parser4__switch_to_buffer(b  );
 
        return b;
 }
 /* %endif */
 
 /* %if-c-only */
-/** Setup the input buffer state to scan a string. The next call to yylex() will
+/** Setup the input buffer state to scan a string. The next call to parser4_lex() will
  * scan from a @e copy of @a str.
  * @param yystr a NUL-terminated string to scan
  * 
  * @return the newly allocated buffer state object.
  * @note If you want to scan bytes that may contain NUL values, then use
- *       yy_scan_bytes() instead.
+ *       parser4__scan_bytes() instead.
  */
-YY_BUFFER_STATE yy_scan_string (const char * yystr )
+YY_BUFFER_STATE parser4__scan_string (yyconst char * yystr )
 {
     
-       return yy_scan_bytes( yystr, (int) strlen(yystr) );
+       return parser4__scan_bytes(yystr,strlen(yystr) );
 }
 /* %endif */
 
 /* %if-c-only */
-/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+/** Setup the input buffer state to scan the given bytes. The next call to parser4_lex() will
  * scan from a @e copy of @a bytes.
  * @param yybytes the byte buffer to scan
  * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
  * 
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
+YY_BUFFER_STATE parser4__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
 {
        YY_BUFFER_STATE b;
        char *buf;
        yy_size_t n;
-       int i;
+       yy_size_t i;
     
        /* Get memory for full buffer, including space for trailing EOB's. */
-       n = (yy_size_t) (_yybytes_len + 2);
-       buf = (char *) yyalloc( n  );
+       n = _yybytes_len + 2;
+       buf = (char *) parser4_alloc(n  );
        if ( ! buf )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+               YY_FATAL_ERROR( "out of dynamic memory in parser4__scan_bytes()" );
 
        for ( i = 0; i < _yybytes_len; ++i )
                buf[i] = yybytes[i];
 
        buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
 
-       b = yy_scan_buffer( buf, n );
+       b = parser4__scan_buffer(buf,n );
        if ( ! b )
-               YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+               YY_FATAL_ERROR( "bad buffer in parser4__scan_bytes()" );
 
        /* It's okay to grow etc. this buffer, and we should throw it
         * away when we're done.
@@ -5103,9 +4907,9 @@ YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
 #endif
 
 /* %if-c-only */
-static void yynoreturn yy_fatal_error (const char* msg )
+static void yy_fatal_error (yyconst char* msg )
 {
-                       fprintf( stderr, "%s\n", msg );
+                       (void) fprintf( stderr, "%s\n", msg );
        exit( YY_EXIT_FAILURE );
 }
 /* %endif */
@@ -5118,14 +4922,14 @@ static void yynoreturn yy_fatal_error (const char* msg )
 #define yyless(n) \
        do \
                { \
-               /* Undo effects of setting up yytext. */ \
+               /* Undo effects of setting up parser4_text. */ \
         int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
-               yytext[yyleng] = (yy_hold_char); \
-               (yy_c_buf_p) = yytext + yyless_macro_arg; \
+               parser4_text[parser4_leng] = (yy_hold_char); \
+               (yy_c_buf_p) = parser4_text + yyless_macro_arg; \
                (yy_hold_char) = *(yy_c_buf_p); \
                *(yy_c_buf_p) = '\0'; \
-               yyleng = yyless_macro_arg; \
+               parser4_leng = yyless_macro_arg; \
                } \
        while ( 0 )
 
@@ -5138,43 +4942,43 @@ static void yynoreturn yy_fatal_error (const char* msg )
 /** Get the current line number.
  * 
  */
-int yyget_lineno  (void)
+int parser4_get_lineno  (void)
 {
-    
-    return yylineno;
+        
+    return parser4_lineno;
 }
 
 /** Get the input stream.
  * 
  */
-FILE *yyget_in  (void)
+FILE *parser4_get_in  (void)
 {
-        return yyin;
+        return parser4_in;
 }
 
 /** Get the output stream.
  * 
  */
-FILE *yyget_out  (void)
+FILE *parser4_get_out  (void)
 {
-        return yyout;
+        return parser4_out;
 }
 
 /** Get the length of the current token.
  * 
  */
-int yyget_leng  (void)
+yy_size_t parser4_get_leng  (void)
 {
-        return yyleng;
+        return parser4_leng;
 }
 
 /** Get the current token.
  * 
  */
 
-char *yyget_text  (void)
+char *parser4_get_text  (void)
 {
-        return yytext;
+        return parser4_text;
 }
 
 /* %if-reentrant */
@@ -5184,36 +4988,36 @@ char *yyget_text  (void)
  * @param _line_number line number
  * 
  */
-void yyset_lineno (int  _line_number )
+void parser4_set_lineno (int  _line_number )
 {
     
-    yylineno = _line_number;
+    parser4_lineno = _line_number;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
  * @param _in_str A readable stream.
  * 
- * @see yy_switch_to_buffer
+ * @see parser4__switch_to_buffer
  */
-void yyset_in (FILE *  _in_str )
+void parser4_set_in (FILE *  _in_str )
 {
-        yyin = _in_str ;
+        parser4_in = _in_str ;
 }
 
-void yyset_out (FILE *  _out_str )
+void parser4_set_out (FILE *  _out_str )
 {
-        yyout = _out_str ;
+        parser4_out = _out_str ;
 }
 
-int yyget_debug  (void)
+int parser4_get_debug  (void)
 {
-        return yy_flex_debug;
+        return parser4__flex_debug;
 }
 
-void yyset_debug (int  _bdebug )
+void parser4_set_debug (int  _bdebug )
 {
-        yy_flex_debug = _bdebug ;
+        parser4__flex_debug = _bdebug ;
 }
 
 /* %endif */
@@ -5227,50 +5031,50 @@ void yyset_debug (int  _bdebug )
 static int yy_init_globals (void)
 {
         /* Initialization is the same as for the non-reentrant scanner.
-     * This function is called from yylex_destroy(), so don't allocate here.
+     * This function is called from parser4_lex_destroy(), so don't allocate here.
      */
 
-    (yy_buffer_stack) = NULL;
+    (yy_buffer_stack) = 0;
     (yy_buffer_stack_top) = 0;
     (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = NULL;
+    (yy_c_buf_p) = (char *) 0;
     (yy_init) = 0;
     (yy_start) = 0;
 
 /* Defined in main.c */
 #ifdef YY_STDINIT
-    yyin = stdin;
-    yyout = stdout;
+    parser4_in = stdin;
+    parser4_out = stdout;
 #else
-    yyin = NULL;
-    yyout = NULL;
+    parser4_in = (FILE *) 0;
+    parser4_out = (FILE *) 0;
 #endif
 
     /* For future reference: Set errno on error, since we are called by
-     * yylex_init()
+     * parser4_lex_init()
      */
     return 0;
 }
 /* %endif */
 
 /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
-/* yylex_destroy is for both reentrant and non-reentrant scanners. */
-int yylex_destroy  (void)
+/* parser4_lex_destroy is for both reentrant and non-reentrant scanners. */
+int parser4_lex_destroy  (void)
 {
     
     /* Pop the buffer stack, destroying each element. */
        while(YY_CURRENT_BUFFER){
-               yy_delete_buffer( YY_CURRENT_BUFFER  );
+               parser4__delete_buffer(YY_CURRENT_BUFFER  );
                YY_CURRENT_BUFFER_LVALUE = NULL;
-               yypop_buffer_state();
+               parser4_pop_buffer_state();
        }
 
        /* Destroy the stack itself. */
-       yyfree((yy_buffer_stack) );
+       parser4_free((yy_buffer_stack) );
        (yy_buffer_stack) = NULL;
 
     /* Reset the globals. This is important in a non-reentrant scanner so the next time
-     * yylex() is called, initialization will occur. */
+     * parser4_lex() is called, initialization will occur. */
     yy_init_globals( );
 
 /* %if-reentrant */
@@ -5284,7 +5088,7 @@ int yylex_destroy  (void)
  */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, const char * s2, int n )
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
 {
                
        int i;
@@ -5294,7 +5098,7 @@ static void yy_flex_strncpy (char* s1, const char * s2, int n )
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (const char * s )
+static int yy_flex_strlen (yyconst char * s )
 {
        int n;
        for ( n = 0; s[n]; ++n )
@@ -5304,12 +5108,12 @@ static int yy_flex_strlen (const char * s )
 }
 #endif
 
-void *yyalloc (yy_size_t  size )
+void *parser4_alloc (yy_size_t  size )
 {
-                       return malloc(size);
+                       return (void *) malloc( size );
 }
 
-void *yyrealloc  (void * ptr, yy_size_t  size )
+void *parser4_realloc  (void * ptr, yy_size_t  size )
 {
                
        /* The cast to (char *) in the following accommodates both
@@ -5319,12 +5123,12 @@ void *yyrealloc  (void * ptr, yy_size_t  size )
         * any pointer type to void*, and deal with argument conversions
         * as though doing an assignment.
         */
-       return realloc(ptr, size);
+       return (void *) realloc( (char *) ptr, size );
 }
 
-void yyfree (void * ptr )
+void parser4_free (void * ptr )
 {
-                       free( (char *) ptr );   /* see yyrealloc() for (char *) cast */
+                       free( (char *) ptr );   /* see parser4_realloc() for (char *) cast */
 }
 
 /* %if-tables-serialization definitions */
@@ -5334,7 +5138,8 @@ void yyfree (void * ptr )
 
 /* %ok-for-header */
 
-#line 1715 "dhcp4_lexer.ll"
+#line 1723 "dhcp4_lexer.ll"
+
 
 
 using namespace isc::dhcp;
@@ -5348,7 +5153,7 @@ Parser4Context::scanStringBegin(const std::string& str, ParserType parser_type)
     file_ = "<string>";
     sfile_ = 0;
     loc_.initialize(&file_);
-    yy_flex_debug = trace_scanning_;
+    parser4__flex_debug = trace_scanning_;
     YY_BUFFER_STATE buffer;
     buffer = parser4__scan_bytes(str.c_str(), str.size());
     if (!buffer) {
@@ -5368,7 +5173,7 @@ Parser4Context::scanFileBegin(FILE * f,
     file_ = filename;
     sfile_ = f;
     loc_.initialize(&file_);
-    yy_flex_debug = trace_scanning_;
+    parser4__flex_debug = trace_scanning_;
     YY_BUFFER_STATE buffer;
 
     /* See dhcp4_lexer.cc header for available definitions */
index 6dd8dd6a0225224a3c57bc586b319843b059f773..6650d75f957c393eaeb8bccb481af6dcfea35171 100644 (file)
@@ -1052,6 +1052,15 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     }
 }
 
+\"ip-addresses\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::RELAY:
+    return isc::dhcp::Dhcp4Parser::make_IP_ADDRESSES(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("ip-addresses", driver.loc_);
+    }
+}
+
 \"hooks-libraries\" {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
index ce05094ff6c5b1684848225abbfb3be545b83ece..cb76fa5babb01060bd1171c0f61748944a027266 100644 (file)
@@ -253,30 +253,30 @@ namespace isc { namespace dhcp {
   {
       switch (that.type_get ())
     {
-      case 175: // value
-      case 179: // map_value
-      case 217: // socket_type
-      case 220: // outbound_interface_value
-      case 236: // db_type
-      case 320: // hr_mode
-      case 467: // ncr_protocol_value
-      case 475: // replace_client_name_value
+      case 176: // value
+      case 180: // map_value
+      case 218: // socket_type
+      case 221: // outbound_interface_value
+      case 237: // db_type
+      case 321: // hr_mode
+      case 469: // ncr_protocol_value
+      case 477: // replace_client_name_value
         value.move< ElementPtr > (that.value);
         break;
 
-      case 159: // "boolean"
+      case 160: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 158: // "floating point"
+      case 159: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 157: // "integer"
+      case 158: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 156: // "constant string"
+      case 157: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -295,30 +295,30 @@ namespace isc { namespace dhcp {
     state = that.state;
       switch (that.type_get ())
     {
-      case 175: // value
-      case 179: // map_value
-      case 217: // socket_type
-      case 220: // outbound_interface_value
-      case 236: // db_type
-      case 320: // hr_mode
-      case 467: // ncr_protocol_value
-      case 475: // replace_client_name_value
+      case 176: // value
+      case 180: // map_value
+      case 218: // socket_type
+      case 221: // outbound_interface_value
+      case 237: // db_type
+      case 321: // hr_mode
+      case 469: // ncr_protocol_value
+      case 477: // replace_client_name_value
         value.copy< ElementPtr > (that.value);
         break;
 
-      case 159: // "boolean"
+      case 160: // "boolean"
         value.copy< bool > (that.value);
         break;
 
-      case 158: // "floating point"
+      case 159: // "floating point"
         value.copy< double > (that.value);
         break;
 
-      case 157: // "integer"
+      case 158: // "integer"
         value.copy< int64_t > (that.value);
         break;
 
-      case 156: // "constant string"
+      case 157: // "constant string"
         value.copy< std::string > (that.value);
         break;
 
@@ -358,86 +358,86 @@ namespace isc { namespace dhcp {
         << yysym.location << ": ";
     switch (yytype)
     {
-            case 156: // "constant string"
+            case 157: // "constant string"
 
-#line 234 "dhcp4_parser.yy" // lalr1.cc:636
+#line 235 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< std::string > (); }
 #line 366 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 157: // "integer"
+      case 158: // "integer"
 
-#line 234 "dhcp4_parser.yy" // lalr1.cc:636
+#line 235 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< int64_t > (); }
 #line 373 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 158: // "floating point"
+      case 159: // "floating point"
 
-#line 234 "dhcp4_parser.yy" // lalr1.cc:636
+#line 235 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< double > (); }
 #line 380 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 159: // "boolean"
+      case 160: // "boolean"
 
-#line 234 "dhcp4_parser.yy" // lalr1.cc:636
+#line 235 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< bool > (); }
 #line 387 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 175: // value
+      case 176: // value
 
-#line 234 "dhcp4_parser.yy" // lalr1.cc:636
+#line 235 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 394 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 179: // map_value
+      case 180: // map_value
 
-#line 234 "dhcp4_parser.yy" // lalr1.cc:636
+#line 235 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 401 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 217: // socket_type
+      case 218: // socket_type
 
-#line 234 "dhcp4_parser.yy" // lalr1.cc:636
+#line 235 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 408 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 220: // outbound_interface_value
+      case 221: // outbound_interface_value
 
-#line 234 "dhcp4_parser.yy" // lalr1.cc:636
+#line 235 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 415 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 236: // db_type
+      case 237: // db_type
 
-#line 234 "dhcp4_parser.yy" // lalr1.cc:636
+#line 235 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 422 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 320: // hr_mode
+      case 321: // hr_mode
 
-#line 234 "dhcp4_parser.yy" // lalr1.cc:636
+#line 235 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 429 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 467: // ncr_protocol_value
+      case 469: // ncr_protocol_value
 
-#line 234 "dhcp4_parser.yy" // lalr1.cc:636
+#line 235 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 436 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 475: // replace_client_name_value
+      case 477: // replace_client_name_value
 
-#line 234 "dhcp4_parser.yy" // lalr1.cc:636
+#line 235 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 443 "dhcp4_parser.cc" // lalr1.cc:636
         break;
@@ -639,30 +639,30 @@ namespace isc { namespace dhcp {
          when using variants.  */
         switch (yyr1_[yyn])
     {
-      case 175: // value
-      case 179: // map_value
-      case 217: // socket_type
-      case 220: // outbound_interface_value
-      case 236: // db_type
-      case 320: // hr_mode
-      case 467: // ncr_protocol_value
-      case 475: // replace_client_name_value
+      case 176: // value
+      case 180: // map_value
+      case 218: // socket_type
+      case 221: // outbound_interface_value
+      case 237: // db_type
+      case 321: // hr_mode
+      case 469: // ncr_protocol_value
+      case 477: // replace_client_name_value
         yylhs.value.build< ElementPtr > ();
         break;
 
-      case 159: // "boolean"
+      case 160: // "boolean"
         yylhs.value.build< bool > ();
         break;
 
-      case 158: // "floating point"
+      case 159: // "floating point"
         yylhs.value.build< double > ();
         break;
 
-      case 157: // "integer"
+      case 158: // "integer"
         yylhs.value.build< int64_t > ();
         break;
 
-      case 156: // "constant string"
+      case 157: // "constant string"
         yylhs.value.build< std::string > ();
         break;
 
@@ -684,127 +684,127 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2:
-#line 243 "dhcp4_parser.yy" // lalr1.cc:859
+#line 244 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.NO_KEYWORD; }
 #line 690 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 4:
-#line 244 "dhcp4_parser.yy" // lalr1.cc:859
+#line 245 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.CONFIG; }
 #line 696 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 6:
-#line 245 "dhcp4_parser.yy" // lalr1.cc:859
+#line 246 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP4; }
 #line 702 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 8:
-#line 246 "dhcp4_parser.yy" // lalr1.cc:859
+#line 247 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
 #line 708 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 10:
-#line 247 "dhcp4_parser.yy" // lalr1.cc:859
+#line 248 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.SUBNET4; }
 #line 714 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 12:
-#line 248 "dhcp4_parser.yy" // lalr1.cc:859
+#line 249 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.POOLS; }
 #line 720 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 14:
-#line 249 "dhcp4_parser.yy" // lalr1.cc:859
+#line 250 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.RESERVATIONS; }
 #line 726 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 16:
-#line 250 "dhcp4_parser.yy" // lalr1.cc:859
+#line 251 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP4; }
 #line 732 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 18:
-#line 251 "dhcp4_parser.yy" // lalr1.cc:859
+#line 252 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DEF; }
 #line 738 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 20:
-#line 252 "dhcp4_parser.yy" // lalr1.cc:859
+#line 253 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DATA; }
 #line 744 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 22:
-#line 253 "dhcp4_parser.yy" // lalr1.cc:859
+#line 254 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
 #line 750 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 24:
-#line 254 "dhcp4_parser.yy" // lalr1.cc:859
+#line 255 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP_DDNS; }
 #line 756 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 26:
-#line 255 "dhcp4_parser.yy" // lalr1.cc:859
+#line 256 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.LOGGING; }
 #line 762 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 28:
-#line 263 "dhcp4_parser.yy" // lalr1.cc:859
+#line 264 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
 #line 768 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 29:
-#line 264 "dhcp4_parser.yy" // lalr1.cc:859
+#line 265 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
 #line 774 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 30:
-#line 265 "dhcp4_parser.yy" // lalr1.cc:859
+#line 266 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
 #line 780 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 31:
-#line 266 "dhcp4_parser.yy" // lalr1.cc:859
+#line 267 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
 #line 786 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 32:
-#line 267 "dhcp4_parser.yy" // lalr1.cc:859
+#line 268 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
 #line 792 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 33:
-#line 268 "dhcp4_parser.yy" // lalr1.cc:859
+#line 269 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 798 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 34:
-#line 269 "dhcp4_parser.yy" // lalr1.cc:859
+#line 270 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 804 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 35:
-#line 272 "dhcp4_parser.yy" // lalr1.cc:859
+#line 273 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
@@ -813,7 +813,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 36:
-#line 277 "dhcp4_parser.yy" // lalr1.cc:859
+#line 278 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -824,7 +824,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 37:
-#line 282 "dhcp4_parser.yy" // lalr1.cc:859
+#line 283 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -834,13 +834,13 @@ namespace isc { namespace dhcp {
     break;
 
   case 38:
-#line 288 "dhcp4_parser.yy" // lalr1.cc:859
+#line 289 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 840 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 41:
-#line 295 "dhcp4_parser.yy" // lalr1.cc:859
+#line 296 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // map containing a single entry
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
@@ -849,7 +849,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 42:
-#line 299 "dhcp4_parser.yy" // lalr1.cc:859
+#line 300 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // map consisting of a shorter map followed by
                   // comma and string:value
@@ -859,7 +859,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 43:
-#line 306 "dhcp4_parser.yy" // lalr1.cc:859
+#line 307 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
@@ -868,7 +868,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 44:
-#line 309 "dhcp4_parser.yy" // lalr1.cc:859
+#line 310 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
 }
@@ -876,7 +876,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 47:
-#line 317 "dhcp4_parser.yy" // lalr1.cc:859
+#line 318 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
@@ -885,7 +885,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 48:
-#line 321 "dhcp4_parser.yy" // lalr1.cc:859
+#line 322 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
@@ -894,7 +894,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 49:
-#line 328 "dhcp4_parser.yy" // lalr1.cc:859
+#line 329 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // List parsing about to start
 }
@@ -902,7 +902,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 50:
-#line 330 "dhcp4_parser.yy" // lalr1.cc:859
+#line 331 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
@@ -911,7 +911,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 53:
-#line 339 "dhcp4_parser.yy" // lalr1.cc:859
+#line 340 "dhcp4_parser.yy" // lalr1.cc:859
     {
                           ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
@@ -920,7 +920,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 54:
-#line 343 "dhcp4_parser.yy" // lalr1.cc:859
+#line 344 "dhcp4_parser.yy" // lalr1.cc:859
     {
                           ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
@@ -929,7 +929,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 55:
-#line 354 "dhcp4_parser.yy" // lalr1.cc:859
+#line 355 "dhcp4_parser.yy" // lalr1.cc:859
     {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as< std::string > ();
@@ -940,7 +940,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 56:
-#line 364 "dhcp4_parser.yy" // lalr1.cc:859
+#line 365 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -951,7 +951,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 57:
-#line 369 "dhcp4_parser.yy" // lalr1.cc:859
+#line 370 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -964,7 +964,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 66:
-#line 393 "dhcp4_parser.yy" // lalr1.cc:859
+#line 394 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -977,7 +977,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 67:
-#line 400 "dhcp4_parser.yy" // lalr1.cc:859
+#line 401 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // No global parameter is required
     ctx.stack_.pop_back();
@@ -987,7 +987,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 68:
-#line 408 "dhcp4_parser.yy" // lalr1.cc:859
+#line 409 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the Dhcp4 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -997,7 +997,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 69:
-#line 412 "dhcp4_parser.yy" // lalr1.cc:859
+#line 413 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // No global parameter is required
     // parsing completed
@@ -1006,7 +1006,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 99:
-#line 452 "dhcp4_parser.yy" // lalr1.cc:859
+#line 453 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("valid-lifetime", prf);
@@ -1015,7 +1015,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 100:
-#line 457 "dhcp4_parser.yy" // lalr1.cc:859
+#line 458 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("renew-timer", prf);
@@ -1024,7 +1024,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 101:
-#line 462 "dhcp4_parser.yy" // lalr1.cc:859
+#line 463 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rebind-timer", prf);
@@ -1033,7 +1033,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 102:
-#line 467 "dhcp4_parser.yy" // lalr1.cc:859
+#line 468 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("decline-probation-period", dpp);
@@ -1042,7 +1042,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 103:
-#line 472 "dhcp4_parser.yy" // lalr1.cc:859
+#line 473 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr echo(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("echo-client-id", echo);
@@ -1051,7 +1051,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 104:
-#line 477 "dhcp4_parser.yy" // lalr1.cc:859
+#line 478 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr match(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("match-client-id", match);
@@ -1060,7 +1060,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 105:
-#line 483 "dhcp4_parser.yy" // lalr1.cc:859
+#line 484 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces-config", i);
@@ -1071,7 +1071,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 106:
-#line 488 "dhcp4_parser.yy" // lalr1.cc:859
+#line 489 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // No interfaces config param is required
     ctx.stack_.pop_back();
@@ -1081,7 +1081,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 116:
-#line 507 "dhcp4_parser.yy" // lalr1.cc:859
+#line 508 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1091,7 +1091,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 117:
-#line 511 "dhcp4_parser.yy" // lalr1.cc:859
+#line 512 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // No interfaces config param is required
     // parsing completed
@@ -1100,7 +1100,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 118:
-#line 516 "dhcp4_parser.yy" // lalr1.cc:859
+#line 517 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces", l);
@@ -1111,7 +1111,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 119:
-#line 521 "dhcp4_parser.yy" // lalr1.cc:859
+#line 522 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1120,7 +1120,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 120:
-#line 526 "dhcp4_parser.yy" // lalr1.cc:859
+#line 527 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DHCP_SOCKET_TYPE);
 }
@@ -1128,7 +1128,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 121:
-#line 528 "dhcp4_parser.yy" // lalr1.cc:859
+#line 529 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -1137,19 +1137,19 @@ namespace isc { namespace dhcp {
     break;
 
   case 122:
-#line 533 "dhcp4_parser.yy" // lalr1.cc:859
+#line 534 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); }
 #line 1143 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 123:
-#line 534 "dhcp4_parser.yy" // lalr1.cc:859
+#line 535 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); }
 #line 1149 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 124:
-#line 537 "dhcp4_parser.yy" // lalr1.cc:859
+#line 538 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.OUTBOUND_INTERFACE);
 }
@@ -1157,7 +1157,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 125:
-#line 539 "dhcp4_parser.yy" // lalr1.cc:859
+#line 540 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("outbound-interface", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -1166,7 +1166,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 126:
-#line 544 "dhcp4_parser.yy" // lalr1.cc:859
+#line 545 "dhcp4_parser.yy" // lalr1.cc:859
     {
     yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("same-as-inbound", ctx.loc2pos(yystack_[0].location)));
 }
@@ -1174,7 +1174,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 127:
-#line 546 "dhcp4_parser.yy" // lalr1.cc:859
+#line 547 "dhcp4_parser.yy" // lalr1.cc:859
     {
     yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("use-routing", ctx.loc2pos(yystack_[0].location)));
     }
@@ -1182,7 +1182,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 128:
-#line 550 "dhcp4_parser.yy" // lalr1.cc:859
+#line 551 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("re-detect", b);
@@ -1191,7 +1191,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 129:
-#line 556 "dhcp4_parser.yy" // lalr1.cc:859
+#line 557 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lease-database", i);
@@ -1202,7 +1202,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 130:
-#line 561 "dhcp4_parser.yy" // lalr1.cc:859
+#line 562 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -1213,7 +1213,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 131:
-#line 568 "dhcp4_parser.yy" // lalr1.cc:859
+#line 569 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-database", i);
@@ -1224,7 +1224,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 132:
-#line 573 "dhcp4_parser.yy" // lalr1.cc:859
+#line 574 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -1235,7 +1235,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 133:
-#line 580 "dhcp4_parser.yy" // lalr1.cc:859
+#line 581 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-databases", l);
@@ -1246,7 +1246,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 134:
-#line 585 "dhcp4_parser.yy" // lalr1.cc:859
+#line 586 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1255,7 +1255,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 139:
-#line 598 "dhcp4_parser.yy" // lalr1.cc:859
+#line 599 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1265,7 +1265,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 140:
-#line 602 "dhcp4_parser.yy" // lalr1.cc:859
+#line 603 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1275,7 +1275,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 161:
-#line 632 "dhcp4_parser.yy" // lalr1.cc:859
+#line 633 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DATABASE_TYPE);
 }
@@ -1283,7 +1283,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 162:
-#line 634 "dhcp4_parser.yy" // lalr1.cc:859
+#line 635 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -1292,31 +1292,31 @@ namespace isc { namespace dhcp {
     break;
 
   case 163:
-#line 639 "dhcp4_parser.yy" // lalr1.cc:859
+#line 640 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
 #line 1298 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 164:
-#line 640 "dhcp4_parser.yy" // lalr1.cc:859
+#line 641 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
 #line 1304 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 165:
-#line 641 "dhcp4_parser.yy" // lalr1.cc:859
+#line 642 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
 #line 1310 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 166:
-#line 642 "dhcp4_parser.yy" // lalr1.cc:859
+#line 643 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
 #line 1316 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 167:
-#line 645 "dhcp4_parser.yy" // lalr1.cc:859
+#line 646 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1324,7 +1324,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 168:
-#line 647 "dhcp4_parser.yy" // lalr1.cc:859
+#line 648 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
@@ -1334,7 +1334,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 169:
-#line 653 "dhcp4_parser.yy" // lalr1.cc:859
+#line 654 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1342,7 +1342,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 170:
-#line 655 "dhcp4_parser.yy" // lalr1.cc:859
+#line 656 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
@@ -1352,7 +1352,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 171:
-#line 661 "dhcp4_parser.yy" // lalr1.cc:859
+#line 662 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1360,7 +1360,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 172:
-#line 663 "dhcp4_parser.yy" // lalr1.cc:859
+#line 664 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
@@ -1370,7 +1370,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 173:
-#line 669 "dhcp4_parser.yy" // lalr1.cc:859
+#line 670 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr p(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("port", p);
@@ -1379,7 +1379,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 174:
-#line 674 "dhcp4_parser.yy" // lalr1.cc:859
+#line 675 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1387,7 +1387,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 175:
-#line 676 "dhcp4_parser.yy" // lalr1.cc:859
+#line 677 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
@@ -1397,7 +1397,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 176:
-#line 682 "dhcp4_parser.yy" // lalr1.cc:859
+#line 683 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("persist", n);
@@ -1406,7 +1406,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 177:
-#line 687 "dhcp4_parser.yy" // lalr1.cc:859
+#line 688 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lfc-interval", n);
@@ -1415,7 +1415,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 178:
-#line 692 "dhcp4_parser.yy" // lalr1.cc:859
+#line 693 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("readonly", n);
@@ -1424,7 +1424,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 179:
-#line 697 "dhcp4_parser.yy" // lalr1.cc:859
+#line 698 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("connect-timeout", n);
@@ -1433,7 +1433,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 180:
-#line 702 "dhcp4_parser.yy" // lalr1.cc:859
+#line 703 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("request-timeout", n);
@@ -1442,7 +1442,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 181:
-#line 707 "dhcp4_parser.yy" // lalr1.cc:859
+#line 708 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("tcp-keepalive", n);
@@ -1451,7 +1451,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 182:
-#line 712 "dhcp4_parser.yy" // lalr1.cc:859
+#line 713 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("tcp-nodelay", n);
@@ -1460,7 +1460,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 183:
-#line 717 "dhcp4_parser.yy" // lalr1.cc:859
+#line 718 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1468,7 +1468,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 184:
-#line 719 "dhcp4_parser.yy" // lalr1.cc:859
+#line 720 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr cp(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("contact-points", cp);
@@ -1478,7 +1478,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 185:
-#line 725 "dhcp4_parser.yy" // lalr1.cc:859
+#line 726 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1486,7 +1486,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 186:
-#line 727 "dhcp4_parser.yy" // lalr1.cc:859
+#line 728 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr ks(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("keyspace", ks);
@@ -1496,7 +1496,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 187:
-#line 733 "dhcp4_parser.yy" // lalr1.cc:859
+#line 734 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reconnect-tries", n);
@@ -1505,7 +1505,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 188:
-#line 738 "dhcp4_parser.yy" // lalr1.cc:859
+#line 739 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reconnect-wait-time", n);
@@ -1514,7 +1514,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 189:
-#line 743 "dhcp4_parser.yy" // lalr1.cc:859
+#line 744 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host-reservation-identifiers", l);
@@ -1525,7 +1525,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 190:
-#line 748 "dhcp4_parser.yy" // lalr1.cc:859
+#line 749 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1534,7 +1534,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 198:
-#line 764 "dhcp4_parser.yy" // lalr1.cc:859
+#line 765 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
@@ -1543,7 +1543,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 199:
-#line 769 "dhcp4_parser.yy" // lalr1.cc:859
+#line 770 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
@@ -1552,7 +1552,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 200:
-#line 774 "dhcp4_parser.yy" // lalr1.cc:859
+#line 775 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(circuit);
@@ -1561,7 +1561,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 201:
-#line 779 "dhcp4_parser.yy" // lalr1.cc:859
+#line 780 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(client);
@@ -1570,7 +1570,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 202:
-#line 784 "dhcp4_parser.yy" // lalr1.cc:859
+#line 785 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(flex_id);
@@ -1579,7 +1579,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 203:
-#line 789 "dhcp4_parser.yy" // lalr1.cc:859
+#line 790 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hooks-libraries", l);
@@ -1590,7 +1590,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 204:
-#line 794 "dhcp4_parser.yy" // lalr1.cc:859
+#line 795 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1599,7 +1599,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 209:
-#line 807 "dhcp4_parser.yy" // lalr1.cc:859
+#line 808 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1609,7 +1609,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 210:
-#line 811 "dhcp4_parser.yy" // lalr1.cc:859
+#line 812 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1619,7 +1619,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 211:
-#line 817 "dhcp4_parser.yy" // lalr1.cc:859
+#line 818 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1629,7 +1629,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 212:
-#line 821 "dhcp4_parser.yy" // lalr1.cc:859
+#line 822 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1639,7 +1639,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 218:
-#line 836 "dhcp4_parser.yy" // lalr1.cc:859
+#line 837 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1647,7 +1647,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 219:
-#line 838 "dhcp4_parser.yy" // lalr1.cc:859
+#line 839 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
@@ -1657,7 +1657,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 220:
-#line 844 "dhcp4_parser.yy" // lalr1.cc:859
+#line 845 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1665,7 +1665,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 221:
-#line 846 "dhcp4_parser.yy" // lalr1.cc:859
+#line 847 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -1674,7 +1674,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 222:
-#line 852 "dhcp4_parser.yy" // lalr1.cc:859
+#line 853 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("expired-leases-processing", m);
@@ -1685,7 +1685,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 223:
-#line 857 "dhcp4_parser.yy" // lalr1.cc:859
+#line 858 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // No expired lease parameter is required
     ctx.stack_.pop_back();
@@ -1695,7 +1695,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 232:
-#line 875 "dhcp4_parser.yy" // lalr1.cc:859
+#line 876 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reclaim-timer-wait-time", value);
@@ -1704,7 +1704,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 233:
-#line 880 "dhcp4_parser.yy" // lalr1.cc:859
+#line 881 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value);
@@ -1713,7 +1713,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 234:
-#line 885 "dhcp4_parser.yy" // lalr1.cc:859
+#line 886 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hold-reclaimed-time", value);
@@ -1722,7 +1722,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 235:
-#line 890 "dhcp4_parser.yy" // lalr1.cc:859
+#line 891 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-leases", value);
@@ -1731,7 +1731,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 236:
-#line 895 "dhcp4_parser.yy" // lalr1.cc:859
+#line 896 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-time", value);
@@ -1740,7 +1740,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 237:
-#line 900 "dhcp4_parser.yy" // lalr1.cc:859
+#line 901 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
@@ -1749,7 +1749,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 238:
-#line 908 "dhcp4_parser.yy" // lalr1.cc:859
+#line 909 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet4", l);
@@ -1760,7 +1760,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 239:
-#line 913 "dhcp4_parser.yy" // lalr1.cc:859
+#line 914 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1769,7 +1769,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 244:
-#line 933 "dhcp4_parser.yy" // lalr1.cc:859
+#line 934 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1779,7 +1779,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 245:
-#line 937 "dhcp4_parser.yy" // lalr1.cc:859
+#line 938 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -1805,7 +1805,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 246:
-#line 959 "dhcp4_parser.yy" // lalr1.cc:859
+#line 960 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the subnet4 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1815,7 +1815,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 247:
-#line 963 "dhcp4_parser.yy" // lalr1.cc:859
+#line 964 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The subnet subnet4 parameter is required
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1825,7 +1825,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 275:
-#line 1002 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1003 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1833,7 +1833,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 276:
-#line 1004 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1005 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
@@ -1843,7 +1843,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 277:
-#line 1010 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1011 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1851,7 +1851,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 278:
-#line 1012 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1013 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-interface", iface);
@@ -1861,7 +1861,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 279:
-#line 1018 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1019 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1869,7 +1869,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 280:
-#line 1020 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1021 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-interface-id", iface);
@@ -1879,7 +1879,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 281:
-#line 1026 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1027 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1887,7 +1887,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 282:
-#line 1028 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1029 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-subnet", iface);
@@ -1897,7 +1897,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 283:
-#line 1034 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1035 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1905,7 +1905,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 284:
-#line 1036 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1037 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
@@ -1915,7 +1915,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 285:
-#line 1042 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1043 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1923,7 +1923,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 286:
-#line 1044 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1045 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface-id", iface);
@@ -1933,7 +1933,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 287:
-#line 1050 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1051 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1941,7 +1941,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 288:
-#line 1052 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1053 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-class", cls);
@@ -1951,7 +1951,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 289:
-#line 1058 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1059 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("require-client-classes", c);
@@ -1962,7 +1962,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 290:
-#line 1063 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1064 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1971,7 +1971,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 291:
-#line 1068 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1069 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.RESERVATION_MODE);
 }
@@ -1979,7 +1979,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 292:
-#line 1070 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1071 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -1988,25 +1988,25 @@ namespace isc { namespace dhcp {
     break;
 
   case 293:
-#line 1075 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1076 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
 #line 1994 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 294:
-#line 1076 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1077 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
 #line 2000 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 295:
-#line 1077 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1078 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
 #line 2006 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 296:
-#line 1080 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1081 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
@@ -2015,7 +2015,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 297:
-#line 1085 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1086 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rapid-commit", rc);
@@ -2024,7 +2024,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 298:
-#line 1092 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1093 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("shared-networks", l);
@@ -2035,7 +2035,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 299:
-#line 1097 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1098 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2044,7 +2044,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 304:
-#line 1112 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1113 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2054,7 +2054,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 305:
-#line 1116 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1117 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
@@ -2062,7 +2062,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 326:
-#line 1148 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1149 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-def", l);
@@ -2073,7 +2073,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 327:
-#line 1153 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1154 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2082,7 +2082,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 328:
-#line 1161 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1162 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
@@ -2091,7 +2091,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 329:
-#line 1164 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1165 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
@@ -2099,7 +2099,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 334:
-#line 1180 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1181 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2109,7 +2109,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 335:
-#line 1184 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1185 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2121,7 +2121,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 336:
-#line 1195 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1196 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2131,7 +2131,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 337:
-#line 1199 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1200 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2143,7 +2143,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 353:
-#line 1231 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1232 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
@@ -2152,7 +2152,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 355:
-#line 1238 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1239 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2160,7 +2160,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 356:
-#line 1240 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1241 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
@@ -2170,7 +2170,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 357:
-#line 1246 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1247 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2178,7 +2178,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 358:
-#line 1248 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1249 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("record-types", rtypes);
@@ -2188,7 +2188,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 359:
-#line 1254 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1255 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2196,7 +2196,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 360:
-#line 1256 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1257 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
@@ -2206,7 +2206,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 362:
-#line 1264 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1265 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2214,7 +2214,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 363:
-#line 1266 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1267 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
@@ -2224,7 +2224,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 364:
-#line 1272 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1273 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
@@ -2233,7 +2233,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 365:
-#line 1281 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1282 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-data", l);
@@ -2244,7 +2244,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 366:
-#line 1286 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1287 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2253,7 +2253,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 371:
-#line 1305 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1306 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2263,7 +2263,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 372:
-#line 1309 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1310 "dhcp4_parser.yy" // lalr1.cc:859
     {
     /// @todo: the code or name parameters are required.
     ctx.stack_.pop_back();
@@ -2272,7 +2272,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 373:
-#line 1317 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1318 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2282,7 +2282,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 374:
-#line 1321 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1322 "dhcp4_parser.yy" // lalr1.cc:859
     {
     /// @todo: the code or name parameters are required.
     // parsing completed
@@ -2291,7 +2291,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 389:
-#line 1354 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1355 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2299,7 +2299,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 390:
-#line 1356 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1357 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
@@ -2309,7 +2309,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 393:
-#line 1366 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1367 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", space);
@@ -2318,7 +2318,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 394:
-#line 1371 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1372 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-send", persist);
@@ -2327,7 +2327,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 395:
-#line 1379 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1380 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pools", l);
@@ -2338,7 +2338,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 396:
-#line 1384 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1385 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2347,7 +2347,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 401:
-#line 1399 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1400 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2357,7 +2357,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 402:
-#line 1403 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1404 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2367,7 +2367,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 403:
-#line 1409 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1410 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2377,7 +2377,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 404:
-#line 1413 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1414 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2387,7 +2387,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 414:
-#line 1432 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1433 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2395,7 +2395,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 415:
-#line 1434 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1435 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
@@ -2405,7 +2405,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 416:
-#line 1440 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1441 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2413,7 +2413,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 417:
-#line 1442 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1443 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as< ElementPtr > ();
@@ -2440,7 +2440,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 418:
-#line 1465 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1466 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2448,7 +2448,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 419:
-#line 1467 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1468 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -2477,7 +2477,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 420:
-#line 1495 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1496 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations", l);
@@ -2488,7 +2488,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 421:
-#line 1500 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1501 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2497,7 +2497,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 426:
-#line 1513 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1514 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2507,7 +2507,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 427:
-#line 1517 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1518 "dhcp4_parser.yy" // lalr1.cc:859
     {
     /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
@@ -2516,7 +2516,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 428:
-#line 1522 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1523 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2526,7 +2526,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 429:
-#line 1526 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1527 "dhcp4_parser.yy" // lalr1.cc:859
     {
     /// @todo: an identifier parameter is required.
     // parsing completed
@@ -2535,7 +2535,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 449:
-#line 1557 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1558 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2543,7 +2543,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 450:
-#line 1559 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1560 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr next_server(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("next-server", next_server);
@@ -2553,7 +2553,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 451:
-#line 1565 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1566 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2561,7 +2561,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 452:
-#line 1567 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1568 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr srv(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-hostname", srv);
@@ -2571,7 +2571,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 453:
-#line 1573 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1574 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2579,7 +2579,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 454:
-#line 1575 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1576 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr bootfile(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("boot-file-name", bootfile);
@@ -2589,7 +2589,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 455:
-#line 1581 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1582 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2597,7 +2597,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 456:
-#line 1583 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1584 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr addr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", addr);
@@ -2607,146 +2607,146 @@ namespace isc { namespace dhcp {
     break;
 
   case 457:
-#line 1589 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1590 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("ip-addresses", l);
+    ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2615 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2618 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 458:
-#line 1591 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1595 "dhcp4_parser.yy" // lalr1.cc:859
     {
-    ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("duid", d);
+    ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2625 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2627 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 459:
-#line 1597 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1600 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2633 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2635 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 460:
-#line 1599 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1602 "dhcp4_parser.yy" // lalr1.cc:859
     {
-    ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("hw-address", hw);
+    ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 2643 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2645 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 461:
-#line 1605 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1608 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2651 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2653 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 462:
-#line 1607 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1610 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("client-id", hw);
+    ctx.stack_.back()->set("hw-address", hw);
     ctx.leave();
 }
-#line 2661 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2663 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 463:
-#line 1613 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1616 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2669 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2671 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 464:
-#line 1615 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1618 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("circuit-id", hw);
+    ctx.stack_.back()->set("client-id", hw);
     ctx.leave();
 }
-#line 2679 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2681 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 465:
-#line 1621 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1624 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2687 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2689 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 466:
-#line 1623 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1626 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("flex-id", hw);
+    ctx.stack_.back()->set("circuit-id", hw);
     ctx.leave();
 }
-#line 2697 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2699 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 467:
-#line 1629 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1632 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2705 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2707 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 468:
-#line 1631 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1634 "dhcp4_parser.yy" // lalr1.cc:859
     {
-    ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("hostname", host);
+    ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("flex-id", hw);
     ctx.leave();
 }
-#line 2715 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2717 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 469:
-#line 1637 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1640 "dhcp4_parser.yy" // lalr1.cc:859
     {
-    ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("client-classes", c);
-    ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2726 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2725 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 470:
 #line 1642 "dhcp4_parser.yy" // lalr1.cc:859
     {
-    ctx.stack_.pop_back();
+    ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
 #line 2735 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 471:
-#line 1650 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1648 "dhcp4_parser.yy" // lalr1.cc:859
     {
-    ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("relay", m);
-    ctx.stack_.push_back(m);
-    ctx.enter(ctx.RELAY);
+    ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("client-classes", c);
+    ctx.stack_.push_back(c);
+    ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2746 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 472:
-#line 1655 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1653 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2755,676 +2755,678 @@ namespace isc { namespace dhcp {
     break;
 
   case 473:
-#line 1660 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1661 "dhcp4_parser.yy" // lalr1.cc:859
     {
-    ctx.enter(ctx.NO_KEYWORD);
+    ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("relay", m);
+    ctx.stack_.push_back(m);
+    ctx.enter(ctx.RELAY);
 }
-#line 2763 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2766 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 474:
-#line 1662 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1666 "dhcp4_parser.yy" // lalr1.cc:859
     {
-    ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("ip-address", ip);
+    ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2773 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2775 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 475:
-#line 1671 "dhcp4_parser.yy" // lalr1.cc:859
+  case 477:
+#line 1678 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 2784 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2786 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 476:
-#line 1676 "dhcp4_parser.yy" // lalr1.cc:859
+  case 478:
+#line 1683 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2793 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2795 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 479:
-#line 1685 "dhcp4_parser.yy" // lalr1.cc:859
+  case 481:
+#line 1692 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2803 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2805 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 480:
-#line 1689 "dhcp4_parser.yy" // lalr1.cc:859
+  case 482:
+#line 1696 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The name client class parameter is required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2813 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2815 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 497:
-#line 1718 "dhcp4_parser.yy" // lalr1.cc:859
+  case 499:
+#line 1725 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2821 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2823 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 498:
-#line 1720 "dhcp4_parser.yy" // lalr1.cc:859
+  case 500:
+#line 1727 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 2831 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2833 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 499:
-#line 1726 "dhcp4_parser.yy" // lalr1.cc:859
+  case 501:
+#line 1733 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("only-if-required", b);
 }
-#line 2840 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2842 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 500:
-#line 1735 "dhcp4_parser.yy" // lalr1.cc:859
+  case 502:
+#line 1742 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 2849 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2851 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 501:
-#line 1742 "dhcp4_parser.yy" // lalr1.cc:859
+  case 503:
+#line 1749 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("control-socket", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 2860 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2862 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 502:
-#line 1747 "dhcp4_parser.yy" // lalr1.cc:859
+  case 504:
+#line 1754 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2869 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2871 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 510:
-#line 1763 "dhcp4_parser.yy" // lalr1.cc:859
+  case 512:
+#line 1770 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2877 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2879 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 511:
-#line 1765 "dhcp4_parser.yy" // lalr1.cc:859
+  case 513:
+#line 1772 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-type", stype);
     ctx.leave();
 }
-#line 2887 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2889 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 512:
-#line 1771 "dhcp4_parser.yy" // lalr1.cc:859
+  case 514:
+#line 1778 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2895 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2897 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 513:
-#line 1773 "dhcp4_parser.yy" // lalr1.cc:859
+  case 515:
+#line 1780 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-name", name);
     ctx.leave();
 }
-#line 2905 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2907 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 514:
-#line 1781 "dhcp4_parser.yy" // lalr1.cc:859
+  case 516:
+#line 1788 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp-ddns", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP_DDNS);
 }
-#line 2916 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2918 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 515:
-#line 1786 "dhcp4_parser.yy" // lalr1.cc:859
+  case 517:
+#line 1793 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The enable updates DHCP DDNS parameter is required.
     ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2927 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2929 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 516:
-#line 1793 "dhcp4_parser.yy" // lalr1.cc:859
+  case 518:
+#line 1800 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2937 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2939 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 517:
-#line 1797 "dhcp4_parser.yy" // lalr1.cc:859
+  case 519:
+#line 1804 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The enable updates DHCP DDNS parameter is required.
     ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2947 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2949 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 537:
-#line 1826 "dhcp4_parser.yy" // lalr1.cc:859
+  case 539:
+#line 1833 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-updates", b);
 }
-#line 2956 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2958 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 538:
-#line 1831 "dhcp4_parser.yy" // lalr1.cc:859
+  case 540:
+#line 1838 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2964 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2966 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 539:
-#line 1833 "dhcp4_parser.yy" // lalr1.cc:859
+  case 541:
+#line 1840 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("qualifying-suffix", s);
     ctx.leave();
 }
-#line 2974 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2976 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 540:
-#line 1839 "dhcp4_parser.yy" // lalr1.cc:859
+  case 542:
+#line 1846 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2982 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2984 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 541:
-#line 1841 "dhcp4_parser.yy" // lalr1.cc:859
+  case 543:
+#line 1848 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-ip", s);
     ctx.leave();
 }
-#line 2992 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2994 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 542:
-#line 1847 "dhcp4_parser.yy" // lalr1.cc:859
+  case 544:
+#line 1854 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-port", i);
 }
-#line 3001 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3003 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 543:
-#line 1852 "dhcp4_parser.yy" // lalr1.cc:859
+  case 545:
+#line 1859 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3009 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3011 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 544:
-#line 1854 "dhcp4_parser.yy" // lalr1.cc:859
+  case 546:
+#line 1861 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-ip", s);
     ctx.leave();
 }
-#line 3019 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3021 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 545:
-#line 1860 "dhcp4_parser.yy" // lalr1.cc:859
+  case 547:
+#line 1867 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-port", i);
 }
-#line 3028 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3030 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 546:
-#line 1865 "dhcp4_parser.yy" // lalr1.cc:859
+  case 548:
+#line 1872 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-queue-size", i);
 }
-#line 3037 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3039 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 547:
-#line 1870 "dhcp4_parser.yy" // lalr1.cc:859
+  case 549:
+#line 1877 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 3045 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3047 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 548:
-#line 1872 "dhcp4_parser.yy" // lalr1.cc:859
+  case 550:
+#line 1879 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3054 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3056 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 549:
-#line 1878 "dhcp4_parser.yy" // lalr1.cc:859
+  case 551:
+#line 1885 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 3060 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3062 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 550:
-#line 1879 "dhcp4_parser.yy" // lalr1.cc:859
+  case 552:
+#line 1886 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 3066 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3068 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 551:
-#line 1882 "dhcp4_parser.yy" // lalr1.cc:859
+  case 553:
+#line 1889 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 3074 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3076 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 552:
-#line 1884 "dhcp4_parser.yy" // lalr1.cc:859
+  case 554:
+#line 1891 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
     ctx.leave();
 }
-#line 3084 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3086 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 553:
-#line 1890 "dhcp4_parser.yy" // lalr1.cc:859
+  case 555:
+#line 1897 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-include-fqdn", b);
 }
-#line 3093 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3095 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 554:
-#line 1895 "dhcp4_parser.yy" // lalr1.cc:859
+  case 556:
+#line 1902 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-no-update", b);
 }
-#line 3102 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3104 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 555:
-#line 1900 "dhcp4_parser.yy" // lalr1.cc:859
+  case 557:
+#line 1907 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-client-update", b);
 }
-#line 3111 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3113 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 556:
-#line 1905 "dhcp4_parser.yy" // lalr1.cc:859
+  case 558:
+#line 1912 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
-#line 3119 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3121 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 557:
-#line 1907 "dhcp4_parser.yy" // lalr1.cc:859
+  case 559:
+#line 1914 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3128 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3130 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 558:
-#line 1913 "dhcp4_parser.yy" // lalr1.cc:859
+  case 560:
+#line 1920 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); 
       }
-#line 3136 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3138 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 559:
-#line 1916 "dhcp4_parser.yy" // lalr1.cc:859
+  case 561:
+#line 1923 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3144 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3146 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 560:
-#line 1919 "dhcp4_parser.yy" // lalr1.cc:859
+  case 562:
+#line 1926 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3152 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3154 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 561:
-#line 1922 "dhcp4_parser.yy" // lalr1.cc:859
+  case 563:
+#line 1929 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3160 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3162 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 562:
-#line 1925 "dhcp4_parser.yy" // lalr1.cc:859
+  case 564:
+#line 1932 "dhcp4_parser.yy" // lalr1.cc:859
     {
       error(yystack_[0].location, "boolean values for the replace-client-name are "
                 "no longer supported");
       }
-#line 3169 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3171 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 563:
-#line 1931 "dhcp4_parser.yy" // lalr1.cc:859
+  case 565:
+#line 1938 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3177 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3179 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 564:
-#line 1933 "dhcp4_parser.yy" // lalr1.cc:859
+  case 566:
+#line 1940 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("generated-prefix", s);
     ctx.leave();
 }
-#line 3187 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3189 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 565:
-#line 1941 "dhcp4_parser.yy" // lalr1.cc:859
+  case 567:
+#line 1948 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3195 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3197 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 566:
-#line 1943 "dhcp4_parser.yy" // lalr1.cc:859
+  case 568:
+#line 1950 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3204 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3206 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 567:
-#line 1948 "dhcp4_parser.yy" // lalr1.cc:859
+  case 569:
+#line 1955 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3212 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3214 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 568:
-#line 1950 "dhcp4_parser.yy" // lalr1.cc:859
+  case 570:
+#line 1957 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3221 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3223 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 569:
-#line 1955 "dhcp4_parser.yy" // lalr1.cc:859
+  case 571:
+#line 1962 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3229 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3231 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 570:
-#line 1957 "dhcp4_parser.yy" // lalr1.cc:859
+  case 572:
+#line 1964 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3238 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3240 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 571:
-#line 1967 "dhcp4_parser.yy" // lalr1.cc:859
+  case 573:
+#line 1974 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("Logging", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.LOGGING);
 }
-#line 3249 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3251 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 572:
-#line 1972 "dhcp4_parser.yy" // lalr1.cc:859
+  case 574:
+#line 1979 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3258 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3260 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 573:
-#line 1977 "dhcp4_parser.yy" // lalr1.cc:859
+  case 575:
+#line 1984 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the Logging map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3268 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3270 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 574:
-#line 1981 "dhcp4_parser.yy" // lalr1.cc:859
+  case 576:
+#line 1988 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 3276 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3278 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 578:
-#line 1997 "dhcp4_parser.yy" // lalr1.cc:859
+  case 580:
+#line 2004 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("loggers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 3287 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3289 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 579:
-#line 2002 "dhcp4_parser.yy" // lalr1.cc:859
+  case 581:
+#line 2009 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3296 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3298 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 582:
-#line 2014 "dhcp4_parser.yy" // lalr1.cc:859
+  case 584:
+#line 2021 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 3306 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3308 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 583:
-#line 2018 "dhcp4_parser.yy" // lalr1.cc:859
+  case 585:
+#line 2025 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3314 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3316 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 593:
-#line 2035 "dhcp4_parser.yy" // lalr1.cc:859
+  case 595:
+#line 2042 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 3323 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3325 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 594:
-#line 2040 "dhcp4_parser.yy" // lalr1.cc:859
+  case 596:
+#line 2047 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3331 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3333 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 595:
-#line 2042 "dhcp4_parser.yy" // lalr1.cc:859
+  case 597:
+#line 2049 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 3341 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3343 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 596:
-#line 2048 "dhcp4_parser.yy" // lalr1.cc:859
+  case 598:
+#line 2055 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output_options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 3352 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3354 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 597:
-#line 2053 "dhcp4_parser.yy" // lalr1.cc:859
+  case 599:
+#line 2060 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3361 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3363 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 600:
-#line 2062 "dhcp4_parser.yy" // lalr1.cc:859
+  case 602:
+#line 2069 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3371 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3373 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 601:
-#line 2066 "dhcp4_parser.yy" // lalr1.cc:859
+  case 603:
+#line 2073 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3379 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3381 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 608:
-#line 2080 "dhcp4_parser.yy" // lalr1.cc:859
+  case 610:
+#line 2087 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3387 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3389 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 609:
-#line 2082 "dhcp4_parser.yy" // lalr1.cc:859
+  case 611:
+#line 2089 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 3397 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3399 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 610:
-#line 2088 "dhcp4_parser.yy" // lalr1.cc:859
+  case 612:
+#line 2095 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 3406 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3408 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 611:
-#line 2093 "dhcp4_parser.yy" // lalr1.cc:859
+  case 613:
+#line 2100 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 3415 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3417 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 612:
-#line 2098 "dhcp4_parser.yy" // lalr1.cc:859
+  case 614:
+#line 2105 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 3424 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3426 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
 
-#line 3428 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3430 "dhcp4_parser.cc" // lalr1.cc:859
             default:
               break;
             }
@@ -3679,112 +3681,112 @@ namespace isc { namespace dhcp {
   }
 
 
-  const short int Dhcp4Parser::yypact_ninf_ = -763;
+  const short int Dhcp4Parser::yypact_ninf_ = -765;
 
   const signed char Dhcp4Parser::yytable_ninf_ = -1;
 
   const short int
   Dhcp4Parser::yypact_[] =
   {
-     391,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,    30,    22,    54,    62,    66,    70,
-     170,   213,   214,   221,   223,   231,   240,   250,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,    22,   -81,    43,    59,    75,   169,
-     210,    32,    48,    73,   271,   -50,   349,     4,  -763,   157,
-     255,   261,   268,   281,  -763,  -763,  -763,  -763,  -763,   282,
-    -763,    41,  -763,  -763,  -763,  -763,  -763,  -763,  -763,   293,
-     299,  -763,  -763,  -763,  -763,  -763,  -763,   300,   311,   315,
-     322,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,   324,  -763,  -763,  -763,    68,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,   331,  -763,    87,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,   333,   339,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,    97,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,   144,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,   280,
-     298,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,   310,  -763,  -763,   341,  -763,  -763,  -763,
-     342,  -763,  -763,   344,   304,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,   343,   345,
-    -763,  -763,  -763,  -763,   346,   352,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,   145,  -763,
-    -763,  -763,   358,  -763,  -763,   365,  -763,   367,   371,  -763,
-    -763,   373,   378,   379,  -763,  -763,  -763,  -763,  -763,   146,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,   153,  -763,  -763,  -763,
-      22,    22,  -763,   220,   385,   387,   394,   396,   398,  -763,
-      43,  -763,   399,   227,   246,   402,   411,   412,   413,   414,
-     417,   266,   267,   274,   275,   418,   421,   422,   429,   430,
-     431,   433,   436,   437,   440,   288,   442,   443,    59,  -763,
-     444,   445,   446,   292,    75,  -763,   448,   449,   450,   451,
-     454,   470,   471,   319,   320,   474,   476,   477,   480,   481,
-     169,  -763,   482,   210,  -763,   483,   484,   485,   486,   487,
-     488,   489,   491,  -763,    32,  -763,   492,   493,   347,   494,
-     495,   499,   348,  -763,    73,   502,   350,   351,  -763,   271,
-     504,   507,    89,  -763,   356,   512,   513,   361,   515,   363,
-     364,   518,   519,   366,   368,   370,   520,   522,   349,  -763,
-     526,     4,  -763,  -763,  -763,   527,   540,   541,    22,    22,
-      22,  -763,   542,  -763,  -763,   395,   397,   400,   543,   545,
-     549,  -763,  -763,  -763,  -763,   550,   552,   553,   554,   555,
-     404,   556,   558,   559,   560,  -763,   561,   562,  -763,   565,
-      78,   179,  -763,  -763,   409,   410,   415,   567,   419,   420,
-     423,  -763,  -763,    39,   565,   424,   568,   570,  -763,   425,
-    -763,   565,   426,   427,   428,   432,   434,   435,   438,  -763,
-     439,   441,  -763,   447,   452,   453,  -763,  -763,   455,  -763,
-    -763,  -763,   456,    22,  -763,  -763,   457,   458,  -763,   459,
-    -763,  -763,    17,   460,  -763,  -763,  -763,   -31,   461,  -763,
-     569,  -763,    22,    59,     4,  -763,  -763,  -763,    75,  -763,
-    -763,  -763,   167,   167,   571,   578,   580,   582,   585,  -763,
-    -763,  -763,   160,   586,   589,   209,    42,   349,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,   591,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,   592,
-     505,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,   594,  -763,   156,   164,   165,  -763,  -763,  -763,
-    -763,   598,   600,   601,   602,   603,  -763,  -763,   606,   612,
-     614,   615,   616,  -763,   168,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,   186,  -763,   617,   618,  -763,  -763,   619,
-     621,  -763,  -763,   620,   624,  -763,  -763,   622,   626,  -763,
-    -763,   625,   627,  -763,  -763,  -763,  -763,  -763,  -763,    35,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,   129,  -763,  -763,
-     628,   629,  -763,   631,   632,   633,   634,   635,   636,   224,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,   251,  -763,  -763,  -763,   263,   466,  -763,   637,
-     630,  -763,  -763,   638,   639,  -763,  -763,   640,  -763,   154,
-    -763,  -763,  -763,  -763,   641,   642,   643,   645,   496,   497,
-     498,   500,   501,   646,   647,   503,   506,   508,   509,   510,
-     167,  -763,  -763,   167,  -763,   571,   169,  -763,   578,    73,
-    -763,   580,   271,  -763,   582,   212,  -763,   585,   160,  -763,
-     372,   586,  -763,   -50,  -763,   589,   511,   514,   516,   517,
-     521,   523,   209,  -763,   648,   650,    42,  -763,  -763,  -763,
-     651,   658,   210,  -763,   591,    32,  -763,   592,   660,  -763,
-     303,   594,  -763,   382,   525,   528,   529,  -763,  -763,  -763,
-    -763,  -763,   530,   531,  -763,  -763,  -763,  -763,  -763,  -763,
-     265,  -763,   269,  -763,   654,  -763,   659,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,   284,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,   666,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,   664,   672,  -763,  -763,  -763,  -763,  -763,   291,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,   532,   533,  -763,
-    -763,   534,   297,  -763,   668,  -763,   535,  -763,   673,  -763,
-    -763,  -763,  -763,  -763,   313,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,   212,  -763,   675,   524,  -763,   372,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,   678,   536,   688,
-     303,  -763,  -763,   538,  -763,  -763,   690,  -763,   546,  -763,
-    -763,   689,  -763,  -763,   272,  -763,   -75,   689,  -763,  -763,
-     693,   694,   695,   314,  -763,  -763,  -763,  -763,  -763,  -763,
-     697,   548,   547,   551,   -75,  -763,   557,  -763,  -763,  -763,
-    -763,  -763
+     310,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,    30,    22,    66,    72,   108,   111,
+     125,   154,   195,   216,   233,   242,   249,   257,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,    22,     1,    34,    60,    43,   171,
+       6,   115,   157,   368,   382,   -51,   428,    82,  -765,   271,
+     273,   279,   281,   289,  -765,  -765,  -765,  -765,  -765,   291,
+    -765,    46,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   292,
+     294,  -765,  -765,  -765,  -765,  -765,  -765,   297,   299,   300,
+     302,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,   303,  -765,  -765,  -765,   126,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,   314,  -765,   137,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,   315,   317,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,   141,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,   143,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   285,
+     319,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,   318,  -765,  -765,   321,  -765,  -765,  -765,
+     325,  -765,  -765,   322,   320,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   327,   328,
+    -765,  -765,  -765,  -765,   326,   330,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   144,  -765,
+    -765,  -765,   331,  -765,  -765,   333,  -765,   337,   338,  -765,
+    -765,   339,   341,   342,  -765,  -765,  -765,  -765,  -765,   145,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,   147,  -765,  -765,  -765,
+      22,    22,  -765,   190,   345,   348,   350,   351,   357,  -765,
+      34,  -765,   358,   209,   213,   362,   367,   370,   371,   372,
+     373,   224,   225,   231,   236,   387,   391,   394,   396,   398,
+     399,   401,   423,   427,   431,   288,   433,   443,    60,  -765,
+     444,   445,   446,   307,    43,  -765,   447,   464,   465,   466,
+     467,   468,   469,   316,   324,   471,   472,   474,   475,   476,
+     171,  -765,   477,     6,  -765,   481,   482,   483,   484,   485,
+     486,   487,   488,  -765,   115,  -765,   489,   491,   346,   492,
+     493,   499,   347,  -765,   368,   501,   349,   355,  -765,   382,
+     502,   504,   100,  -765,   356,   506,   507,   359,   514,   361,
+     363,   516,   518,   364,   366,   369,   519,   523,   428,  -765,
+     524,    82,  -765,  -765,  -765,   526,   527,   529,    22,    22,
+      22,  -765,   530,  -765,  -765,   374,   381,   397,   548,   549,
+     552,  -765,  -765,  -765,  -765,   553,   554,   555,   556,   557,
+     405,   558,   560,   561,   562,  -765,   563,   564,  -765,   567,
+     215,   220,  -765,  -765,   410,   411,   416,   569,   418,   419,
+     420,  -765,  -765,   237,   567,   421,   574,   573,  -765,   424,
+    -765,   567,   425,   426,   429,   430,   432,   434,   435,  -765,
+     436,   437,  -765,   438,   439,   440,  -765,  -765,   441,  -765,
+    -765,  -765,   442,    22,  -765,  -765,   448,   449,  -765,   450,
+    -765,  -765,    17,   457,  -765,  -765,  -765,   -32,   451,  -765,
+     583,  -765,    22,    60,    82,  -765,  -765,  -765,    43,  -765,
+    -765,  -765,   378,   378,   593,   594,   595,   596,   597,  -765,
+    -765,  -765,    12,   602,   603,    18,    55,   428,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   604,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   605,
+     184,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,   606,  -765,   151,   166,   170,  -765,  -765,  -765,
+    -765,   586,   610,   611,   612,   613,  -765,  -765,   614,   615,
+     616,   617,   618,  -765,   180,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,   181,  -765,   619,   620,  -765,  -765,   621,
+     623,  -765,  -765,   622,   626,  -765,  -765,   624,   628,  -765,
+    -765,   627,   629,  -765,  -765,  -765,  -765,  -765,  -765,    47,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,    58,  -765,  -765,
+     630,   631,  -765,   633,   634,   635,   636,   637,   638,   193,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,   206,  -765,  -765,  -765,   208,   478,  -765,   639,
+     640,  -765,  -765,   641,   643,  -765,  -765,  -765,  -765,   642,
+    -765,    85,  -765,  -765,  -765,  -765,   644,   645,   647,   648,
+     495,   494,   497,   496,   500,   653,   655,   503,   505,   508,
+     509,   510,   378,  -765,  -765,   378,  -765,   593,   171,  -765,
+     594,   368,  -765,   595,   382,  -765,   596,   211,  -765,   597,
+      12,  -765,   229,   602,  -765,   -51,  -765,   603,   511,   513,
+     515,   517,   520,   521,    18,  -765,   656,   658,    55,  -765,
+    -765,  -765,   659,   661,     6,  -765,   604,   115,  -765,   605,
+     664,  -765,    -1,   606,  -765,   280,   525,   528,   531,  -765,
+    -765,  -765,  -765,  -765,   532,   533,  -765,  -765,  -765,  -765,
+    -765,  -765,   219,  -765,   228,  -765,   666,  -765,   668,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,   247,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,   673,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,   672,   669,  -765,  -765,  -765,  -765,  -765,
+     259,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   534,
+     535,  -765,  -765,   536,   263,  -765,   675,  -765,   567,  -765,
+     677,  -765,  -765,  -765,  -765,  -765,   267,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,   211,  -765,   680,   537,
+    -765,   229,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   682,
+     538,   683,    -1,  -765,  -765,   541,  -765,  -765,   689,  -765,
+     542,  -765,  -765,   688,  -765,  -765,   101,  -765,   -45,   688,
+    -765,  -765,   696,   697,   699,   270,  -765,  -765,  -765,  -765,
+    -765,  -765,   700,   546,   551,   566,   -45,  -765,   550,  -765,
+    -765,  -765,  -765,  -765
   };
 
   const unsigned short int
@@ -3796,33 +3798,33 @@ namespace isc { namespace dhcp {
       36,    32,    31,    28,    29,    30,    35,     3,    33,    34,
       56,     5,    68,     7,   116,     9,   246,    11,   403,    13,
      428,    15,   328,    17,   336,    19,   373,    21,   211,    23,
-     516,    25,   573,    27,    45,    39,     0,     0,     0,     0,
+     518,    25,   575,    27,    45,    39,     0,     0,     0,     0,
        0,   430,     0,   338,   375,     0,     0,     0,    47,     0,
-      46,     0,     0,    40,    66,   571,   565,   567,   569,     0,
+      46,     0,     0,    40,    66,   573,   567,   569,   571,     0,
       65,     0,    58,    60,    62,    63,    64,    61,   105,     0,
        0,   449,   451,   453,   129,   131,   133,     0,     0,     0,
-       0,   238,   326,   365,   298,   416,   418,   189,   475,   203,
-     222,     0,   501,   514,    98,     0,    70,    72,    73,    74,
+       0,   238,   326,   365,   298,   416,   418,   189,   477,   203,
+     222,     0,   503,   516,    98,     0,    70,    72,    73,    74,
       75,    91,    92,    78,    79,    80,    81,    82,    86,    87,
       76,    77,    84,    85,    96,    97,    93,    94,    95,    83,
       88,    89,    90,   118,   120,   124,     0,   115,     0,   107,
      109,   110,   111,   112,   113,   114,   277,   279,   281,   395,
-     275,   283,   285,     0,     0,   291,   289,   287,   420,   471,
+     275,   283,   285,     0,     0,   291,   289,   287,   420,   473,
      274,   250,   251,   252,   265,     0,   248,   255,   269,   270,
      271,   256,   257,   260,   261,   263,   258,   259,   253,   254,
      272,   273,   262,   266,   267,   268,   264,   414,   413,   409,
-     410,   408,     0,   405,   407,   411,   412,   469,   457,   459,
-     463,   461,   467,   465,   455,   448,   442,   446,   447,     0,
+     410,   408,     0,   405,   407,   411,   412,   471,   459,   461,
+     465,   463,   469,   467,   455,   448,   442,   446,   447,     0,
      431,   432,   443,   444,   445,   439,   434,   440,   436,   437,
      438,   441,   435,     0,   355,   174,     0,   359,   357,   362,
        0,   351,   352,     0,   339,   340,   342,   354,   343,   344,
      345,   361,   346,   347,   348,   349,   350,   389,     0,     0,
      387,   388,   391,   392,     0,   376,   377,   379,   380,   381,
      382,   383,   384,   385,   386,   218,   220,   215,     0,   213,
-     216,   217,     0,   538,   540,     0,   543,     0,     0,   547,
-     551,     0,     0,     0,   556,   563,   536,   534,   535,     0,
-     518,   520,   521,   522,   523,   524,   525,   526,   527,   528,
-     529,   530,   531,   532,   533,   578,     0,   575,   577,    44,
+     216,   217,     0,   540,   542,     0,   545,     0,     0,   549,
+     553,     0,     0,     0,   558,   565,   538,   536,   537,     0,
+     520,   522,   523,   524,   525,   526,   527,   528,   529,   530,
+     531,   532,   533,   534,   535,   580,     0,   577,   579,    44,
        0,     0,    37,     0,     0,     0,     0,     0,     0,    55,
        0,    57,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -3833,103 +3835,103 @@ namespace isc { namespace dhcp {
        0,     0,     0,   429,     0,   329,     0,     0,     0,     0,
        0,     0,     0,   337,     0,     0,     0,     0,   374,     0,
        0,     0,     0,   212,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   517,
-       0,     0,   574,    48,    41,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   519,
+       0,     0,   576,    48,    41,     0,     0,     0,     0,     0,
        0,    59,     0,   103,   104,     0,     0,     0,     0,     0,
        0,    99,   100,   101,   102,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   500,     0,     0,    71,     0,
+       0,     0,     0,     0,     0,   502,     0,     0,    71,     0,
        0,     0,   128,   108,     0,     0,     0,     0,     0,     0,
        0,   296,   297,     0,     0,     0,     0,     0,   249,     0,
      406,     0,     0,     0,     0,     0,     0,     0,     0,   433,
        0,     0,   353,     0,     0,     0,   364,   341,     0,   393,
-     394,   378,     0,     0,   214,   537,     0,     0,   542,     0,
-     545,   546,     0,     0,   553,   554,   555,     0,     0,   519,
-       0,   576,     0,     0,     0,   566,   568,   570,     0,   450,
+     394,   378,     0,     0,   214,   539,     0,     0,   544,     0,
+     547,   548,     0,     0,   555,   556,   557,     0,     0,   521,
+       0,   578,     0,     0,     0,   568,   570,   572,     0,   450,
      452,   454,     0,     0,   135,   240,   330,   367,   300,    38,
      417,   419,     0,     0,   205,     0,     0,     0,    49,   119,
      122,   123,   121,   126,   127,   125,   278,   280,   282,   397,
      276,   284,   286,   293,   294,   295,   292,   290,   288,   422,
-       0,   415,   470,   458,   460,   464,   462,   468,   466,   456,
-     356,   175,   360,   358,   363,   390,   219,   221,   539,   541,
-     544,   549,   550,   548,   552,   558,   559,   560,   561,   562,
-     557,   564,     0,    42,     0,     0,     0,   161,   167,   169,
+       0,   415,   472,   460,   462,   466,   464,   470,   468,   456,
+     356,   175,   360,   358,   363,   390,   219,   221,   541,   543,
+     546,   551,   552,   550,   554,   560,   561,   562,   563,   564,
+     559,   566,     0,    42,     0,     0,     0,   161,   167,   169,
      171,     0,     0,     0,     0,     0,   183,   185,     0,     0,
        0,     0,     0,   160,     0,   141,   143,   144,   145,   146,
      147,   148,   149,   150,   151,   152,   156,   157,   158,   153,
      159,   154,   155,     0,   139,     0,   136,   137,   244,     0,
      241,   242,   334,     0,   331,   332,   371,     0,   368,   369,
      304,     0,   301,   302,   198,   199,   200,   201,   202,     0,
-     191,   193,   194,   195,   196,   197,   479,     0,   477,   209,
+     191,   193,   194,   195,   196,   197,   481,     0,   479,   209,
        0,   206,   207,     0,     0,     0,     0,     0,     0,     0,
-     224,   226,   227,   228,   229,   230,   231,   510,   512,   509,
-     507,   508,     0,   503,   505,   506,     0,    51,   401,     0,
-     398,   399,   426,     0,   423,   424,   473,     0,   582,     0,
-     580,    67,   572,   106,     0,     0,     0,     0,     0,     0,
+     224,   226,   227,   228,   229,   230,   231,   512,   514,   511,
+     509,   510,     0,   505,   507,   508,     0,    51,   401,     0,
+     398,   399,   426,     0,   423,   424,   457,   475,   476,     0,
+     584,     0,   582,    67,   574,   106,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   130,   132,     0,   134,     0,     0,   239,     0,   338,
-     327,     0,   375,   366,     0,     0,   299,     0,     0,   190,
-     481,     0,   476,     0,   204,     0,     0,     0,     0,     0,
-       0,     0,     0,   223,     0,     0,     0,   502,   515,    53,
-       0,    52,     0,   396,     0,   430,   421,     0,     0,   472,
-       0,     0,   579,     0,     0,     0,     0,   173,   176,   177,
-     178,   179,     0,     0,   187,   188,   180,   181,   182,   142,
-       0,   138,     0,   243,     0,   333,     0,   370,   325,   322,
-     311,   312,   314,   308,   309,   310,   320,   321,   319,     0,
-     306,   313,   323,   324,   315,   316,   317,   318,   303,   192,
-     497,     0,   495,   496,   488,   489,   493,   494,   490,   491,
-     492,     0,   482,   483,   485,   486,   487,   478,     0,   208,
-     232,   233,   234,   235,   236,   237,   225,     0,     0,   504,
-      50,     0,     0,   400,     0,   425,     0,   596,     0,   594,
-     592,   586,   590,   591,     0,   584,   588,   589,   587,   581,
-     163,   164,   165,   166,   162,   168,   170,   172,   184,   186,
-     140,   245,   335,   372,     0,   305,     0,     0,   480,     0,
-     210,   511,   513,    54,   402,   427,   474,     0,     0,     0,
-       0,   583,   307,     0,   499,   484,     0,   593,     0,   585,
-     498,     0,   595,   600,     0,   598,     0,     0,   597,   608,
-       0,     0,     0,     0,   602,   604,   605,   606,   607,   599,
-       0,     0,     0,     0,     0,   601,     0,   610,   611,   612,
-     603,   609
+       0,     0,     0,   130,   132,     0,   134,     0,     0,   239,
+       0,   338,   327,     0,   375,   366,     0,     0,   299,     0,
+       0,   190,   483,     0,   478,     0,   204,     0,     0,     0,
+       0,     0,     0,     0,     0,   223,     0,     0,     0,   504,
+     517,    53,     0,    52,     0,   396,     0,   430,   421,     0,
+       0,   474,     0,     0,   581,     0,     0,     0,     0,   173,
+     176,   177,   178,   179,     0,     0,   187,   188,   180,   181,
+     182,   142,     0,   138,     0,   243,     0,   333,     0,   370,
+     325,   322,   311,   312,   314,   308,   309,   310,   320,   321,
+     319,     0,   306,   313,   323,   324,   315,   316,   317,   318,
+     303,   192,   499,     0,   497,   498,   490,   491,   495,   496,
+     492,   493,   494,     0,   484,   485,   487,   488,   489,   480,
+       0,   208,   232,   233,   234,   235,   236,   237,   225,     0,
+       0,   506,    50,     0,     0,   400,     0,   425,     0,   598,
+       0,   596,   594,   588,   592,   593,     0,   586,   590,   591,
+     589,   583,   163,   164,   165,   166,   162,   168,   170,   172,
+     184,   186,   140,   245,   335,   372,     0,   305,     0,     0,
+     482,     0,   210,   513,   515,    54,   402,   427,   458,     0,
+       0,     0,     0,   585,   307,     0,   501,   486,     0,   595,
+       0,   587,   500,     0,   597,   602,     0,   600,     0,     0,
+     599,   610,     0,     0,     0,     0,   604,   606,   607,   608,
+     609,   601,     0,     0,     0,     0,     0,   603,     0,   612,
+     613,   614,   605,   611
   };
 
   const short int
   Dhcp4Parser::yypgoto_[] =
   {
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,   -40,  -763,   172,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -444,  -763,  -763,  -763,
-     -66,  -763,  -763,  -763,   383,  -763,  -763,  -763,  -763,   162,
-     354,   -23,   -11,    -9,  -763,  -763,     9,  -763,  -763,   163,
-     353,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-     -41,  -763,  -547,   -35,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,   -22,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,   -47,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,   -57,  -763,  -763,  -763,   -38,   359,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,   -55,  -763,  -763,  -763,  -763,
-    -763,  -763,  -762,  -763,  -763,  -763,    -7,  -763,  -763,  -763,
-      -1,   377,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -754,  -763,  -763,  -763,   -42,  -763,    -5,  -763,  -749,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,    -4,  -763,  -763,
-    -150,   -61,  -763,  -763,  -763,  -763,  -763,    11,  -763,  -763,
-    -763,    16,  -763,   375,  -763,   -62,  -763,  -763,  -763,  -763,
-    -763,   -56,  -763,  -763,  -763,  -763,  -763,    -3,  -763,  -763,
-    -763,     6,  -763,  -763,  -763,    14,  -763,   374,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,   -17,
-    -763,  -763,  -763,   -12,   401,  -763,  -763,   -54,  -763,   -34,
-    -763,  -763,  -763,  -763,  -763,   -16,  -763,  -763,  -763,   -13,
-    -763,   392,   -46,  -763,   -26,  -763,     3,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -742,  -763,  -763,  -763,  -763,  -763,
-    -763,    19,  -763,  -763,  -763,  -134,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,     2,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,   234,   369,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,
-    -763,  -763,  -763,  -763,  -763,  -763,  -763,  -763,   259,   376,
-    -763,  -763,  -763,    -6,  -763,  -763,  -136,  -763,  -763,  -763,
-    -763,  -763,  -763,  -151,  -763,  -763,  -165,  -763,  -763,  -763,
-    -763,  -763
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,   -40,  -765,   155,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -468,  -765,  -765,  -765,
+     -66,  -765,  -765,  -765,   304,  -765,  -765,  -765,  -765,   167,
+     365,   -23,   -11,    -9,  -765,  -765,     9,  -765,  -765,   165,
+     352,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+     -52,  -765,  -547,   -37,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,   -22,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,   -53,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,   -58,  -765,  -765,  -765,   -55,   353,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,   -47,  -765,  -765,  -765,  -765,
+    -765,  -765,  -764,  -765,  -765,  -765,   -31,  -765,  -765,  -765,
+       8,   377,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -756,  -765,  -765,  -765,   -42,  -765,    -5,  -765,  -739,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,   -16,  -765,  -765,
+    -157,   -61,  -765,  -765,  -765,  -765,  -765,    10,  -765,  -765,
+    -765,    11,  -765,   375,  -765,   -62,  -765,  -765,  -765,  -765,
+    -765,   -56,  -765,  -765,  -765,  -765,  -765,    -3,  -765,  -765,
+    -765,    15,  -765,  -765,  -765,    13,  -765,   376,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   -18,
+    -765,  -765,  -765,   -20,   400,  -765,  -765,   -54,  -765,   -34,
+    -765,  -765,  -765,  -765,  -765,   -17,  -765,  -765,  -765,   -13,
+    -765,   392,   -46,  -765,   -26,  -765,     3,  -765,   207,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -736,  -765,  -765,  -765,
+    -765,  -765,    19,  -765,  -765,  -765,  -133,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,     2,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,   238,   379,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
+    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   262,
+     380,  -765,  -765,  -765,   -10,  -765,  -765,  -135,  -765,  -765,
+    -765,  -765,  -765,  -765,  -151,  -765,  -765,  -167,  -765,  -765,
+    -765,  -765,  -765
   };
 
   const short int
@@ -3937,409 +3939,409 @@ namespace isc { namespace dhcp {
   {
       -1,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    36,    37,    38,    65,   560,
-      82,    83,    39,    64,    79,    80,   569,   727,   800,   801,
+      82,    83,    39,    64,    79,    80,   569,   727,   802,   803,
      643,    41,    66,    91,    92,    93,   334,    43,    67,   125,
      126,   127,   128,   129,   130,   131,   132,   133,   342,   158,
      159,    45,    68,   160,   370,   161,   371,   572,   162,   372,
      575,   163,   134,   348,   135,   349,   136,   350,   665,   666,
-     667,   763,   644,   645,   646,   744,   914,   647,   745,   648,
-     746,   649,   747,   650,   651,   407,   652,   653,   654,   655,
-     656,   657,   658,   659,   753,   660,   754,   661,   662,   137,
+     667,   765,   644,   645,   646,   746,   916,   647,   747,   648,
+     748,   649,   749,   650,   651,   407,   652,   653,   654,   655,
+     656,   657,   658,   659,   755,   660,   756,   661,   662,   137,
      361,   689,   690,   691,   692,   693,   694,   695,   138,   363,
-     700,   701,   702,   783,    59,    75,   288,   289,   290,   420,
+     700,   701,   702,   785,    59,    75,   288,   289,   290,   420,
      291,   421,   139,   364,   709,   710,   711,   712,   713,   714,
-     715,   716,   140,   355,   669,   670,   671,   766,    47,    69,
+     715,   716,   140,   355,   669,   670,   671,   768,    47,    69,
      185,   186,   187,   380,   188,   376,   189,   377,   190,   378,
      191,   381,   192,   382,   193,   387,   194,   386,   195,   385,
-     586,   196,   197,   141,   358,   681,   682,   683,   775,   849,
-     850,   142,   356,    53,    72,   673,   674,   675,   769,    55,
+     586,   196,   197,   141,   358,   681,   682,   683,   777,   851,
+     852,   142,   356,    53,    72,   673,   674,   675,   771,    55,
       73,   253,   254,   255,   256,   257,   258,   259,   406,   260,
      410,   261,   409,   262,   263,   411,   264,   143,   357,   677,
-     678,   679,   772,    57,    74,   274,   275,   276,   277,   278,
+     678,   679,   774,    57,    74,   274,   275,   276,   277,   278,
      415,   279,   280,   281,   282,   199,   379,   729,   730,   731,
-     802,    49,    70,   212,   213,   214,   392,   144,   359,   145,
-     360,   202,   388,   733,   734,   735,   805,    51,    71,   229,
+     804,    49,    70,   212,   213,   214,   392,   144,   359,   145,
+     360,   202,   388,   733,   734,   735,   807,    51,    71,   229,
      230,   231,   146,   345,   147,   346,   148,   347,   235,   402,
-     236,   396,   237,   397,   238,   399,   239,   398,   240,   401,
-     241,   400,   242,   395,   206,   389,   737,   808,   149,   362,
-     697,   698,   780,   871,   872,   873,   874,   875,   926,   876,
-     150,   151,   366,   722,   723,   724,   794,   725,   795,   152,
-     367,    61,    76,   309,   310,   311,   312,   425,   313,   426,
-     314,   315,   428,   316,   317,   318,   431,   613,   319,   432,
-     320,   321,   322,   323,   436,   620,   324,   437,    94,   336,
-      95,   337,    96,   338,    97,   335,    63,    77,   326,   327,
-     328,   440,   739,   740,   810,   904,   905,   906,   907,   939,
-     908,   937,   954,   955,   956,   963,   964,   965,   970,   966,
-     967,   968
+     738,   810,   236,   396,   237,   397,   238,   399,   239,   398,
+     240,   401,   241,   400,   242,   395,   206,   389,   739,   149,
+     362,   697,   698,   782,   873,   874,   875,   876,   877,   928,
+     878,   150,   151,   366,   722,   723,   724,   796,   725,   797,
+     152,   367,    61,    76,   309,   310,   311,   312,   425,   313,
+     426,   314,   315,   428,   316,   317,   318,   431,   613,   319,
+     432,   320,   321,   322,   323,   436,   620,   324,   437,    94,
+     336,    95,   337,    96,   338,    97,   335,    63,    77,   326,
+     327,   328,   440,   741,   742,   812,   906,   907,   908,   909,
+     941,   910,   939,   956,   957,   958,   965,   966,   967,   972,
+     968,   969,   970
   };
 
   const unsigned short int
   Dhcp4Parser::yytable_[] =
   {
       90,   124,   157,   180,   208,   225,   663,   251,   270,   287,
-     306,   243,   272,   844,   164,   200,   215,   227,   273,   265,
-     283,   845,   307,   203,    78,   232,   848,    29,   209,    30,
-      28,    31,   611,   857,   165,   201,   216,   228,   778,   266,
-     284,   779,   308,   204,   340,   233,   181,   285,   286,   341,
-     587,   252,   271,    84,   101,   102,   103,   592,   182,   959,
-     183,    40,   960,   961,   962,   210,   198,   211,   226,    42,
-      98,   368,   205,    44,   234,    81,   369,    46,   184,    99,
-     100,   101,   102,   103,   104,   105,   106,   153,   154,   113,
-     374,   155,   570,   571,   156,   375,   615,   616,   617,   618,
-     390,   244,   115,   116,   112,   391,    89,   107,   108,   109,
-     110,   111,   115,   116,   217,   112,   113,   583,   584,   585,
-     218,   219,   220,   221,   222,   223,   114,   224,   619,   115,
-     116,   245,   781,   246,   247,   782,   325,   248,   249,   250,
-     117,   118,   612,   115,   116,   115,   116,   393,   422,   438,
-     717,   718,   394,   423,   439,   119,   441,   811,   120,   368,
-     812,   442,   844,   329,   741,   121,   122,   441,   374,   123,
-     845,   760,   742,   743,    85,   848,   761,    48,    32,    33,
-      34,    35,   857,    86,    87,    88,   285,   286,    89,   760,
-     100,   101,   102,   103,   762,   627,   573,   574,    89,    89,
-     628,   629,   630,   631,   632,   633,   634,   635,   636,   637,
-     638,   639,   640,   641,   642,    89,   830,   107,   108,   109,
-      50,    52,   166,   167,   168,   245,   113,   792,    54,    89,
-      56,    89,   793,   100,   101,   102,   103,   169,    58,   115,
-     116,   170,   171,   172,   173,   174,   175,    60,   684,   685,
-     686,   687,   176,   688,   796,   177,   178,    62,   330,   797,
-     107,   108,   109,   179,   111,   331,   438,   113,   760,   113,
-     245,   798,   390,   920,    90,   957,   332,   921,   958,   207,
-     115,   116,   115,   116,   333,   171,   339,   924,   403,   175,
-     443,   444,   925,   176,   422,   176,   177,   343,   177,   930,
-     393,   404,   124,   344,   351,   934,   179,   414,   157,   703,
-     704,   705,   706,   707,   708,   352,   940,   974,   405,   353,
-     164,   941,   975,    89,   180,    89,   354,   208,   365,   245,
-     267,   246,   247,   268,   269,   373,   200,   383,   225,   215,
-     165,   115,   116,   384,   203,   408,   412,   416,   251,   417,
-     227,   209,   413,   270,   418,   419,   201,   272,   232,   216,
-     265,   245,   424,   273,   204,   283,    89,   181,    89,   427,
-     228,   429,   306,   115,   116,   430,   445,   433,   233,   182,
-     266,   183,   434,   435,   307,   284,   453,   198,   210,   446,
-     211,   447,   252,   205,   101,   102,   103,   271,   448,   184,
-     449,   226,   450,   452,   308,   454,   455,   234,   545,   546,
-     547,   910,   911,   912,   913,   456,   457,   458,   459,   115,
-     116,   460,   465,   461,   462,   466,   467,    89,   112,   113,
-     245,   463,   464,   468,   469,   470,   897,   471,   898,   899,
-     472,   473,   115,   116,   474,   475,   476,   477,   479,   480,
-     481,   482,   484,   485,   486,   487,   860,   861,   488,    89,
+     306,   243,   272,   846,   164,   200,   215,   227,   273,   265,
+     283,   847,   307,   203,    78,   232,   587,    29,   209,    30,
+      28,    31,   611,   592,   165,   201,   216,   228,   850,   266,
+     284,   859,   308,   204,    84,   233,   181,   285,   286,   340,
+     780,   252,   271,   781,   341,   153,   154,   245,   182,   155,
+     183,   783,   156,   113,   784,   210,   198,   211,   226,   115,
+     116,    98,   205,    40,   234,   207,   115,   116,   184,    42,
+      99,   100,   101,   102,   103,   104,   105,   106,   813,   176,
+     961,   814,   177,   962,   963,   964,   615,   616,   617,   618,
+     684,   685,   686,   687,   959,   688,    89,   960,   107,   108,
+     109,   110,   111,   115,   116,    44,   112,   113,    46,   703,
+     704,   705,   706,   707,   708,   115,   116,   114,   619,   368,
+     115,   116,    48,   899,   369,   900,   901,   101,   102,   103,
+     374,   117,   118,   612,   390,   375,   393,   422,   438,   391,
+     441,   394,   423,   439,   368,   442,    89,   119,    81,   743,
+     120,    50,   846,    89,   717,   718,    85,   121,   122,   441,
+     847,   123,   113,   374,   744,    86,    87,    88,   745,    32,
+      33,    34,    35,   762,   762,   115,   116,   850,   763,   764,
+     859,    89,   100,   101,   102,   103,   794,   217,   285,   286,
+      89,   795,    52,   218,   219,   220,   221,   222,   223,   798,
+     224,   438,    89,   112,   799,   325,   800,    89,   832,   107,
+     108,   109,   762,    54,   166,   167,   168,   922,   113,   570,
+     571,   390,   100,   101,   102,   103,   923,   573,   574,   169,
+      56,   115,   116,   170,   171,   172,   173,   174,   175,    58,
+     926,   101,   102,   103,   176,   927,    60,   177,   178,   107,
+     108,   109,   422,   111,    62,   179,   393,   932,   113,   245,
+     942,   936,    89,   976,    90,   943,   330,   329,   977,   224,
+     736,   115,   116,   331,   171,   112,   113,   245,   175,   332,
+     443,   444,   333,   403,   176,   339,   343,   177,   344,   115,
+     116,   351,   124,   352,   353,   179,   354,   365,   157,   912,
+     913,   914,   915,   862,   863,   583,   584,   585,   373,   383,
+     164,   384,   404,   414,   180,   408,   405,   208,    89,   412,
+     413,   416,   417,   419,   418,   424,   200,   427,   225,   215,
+     165,   429,   430,   433,   203,   434,   435,   445,   251,   446,
+     227,   209,   447,   270,   448,   449,   201,   272,   232,   216,
+     265,   450,   452,   273,   204,   283,   455,   181,    89,   453,
+     228,   456,   306,   454,   457,   458,   459,   460,   233,   182,
+     266,   183,   461,   462,   307,   284,    89,   198,   210,   463,
+     211,   465,   252,   205,   464,   466,   244,   271,   467,   184,
+     468,   226,   469,   470,   308,   471,   627,   234,   545,   546,
+     547,   628,   629,   630,   631,   632,   633,   634,   635,   636,
+     637,   638,   639,   640,   641,   642,   245,   472,   246,   247,
+     938,   473,   248,   249,   250,   474,   245,   476,   115,   116,
+     245,   267,   246,   247,   268,   269,   475,   477,   479,   480,
+     481,   484,   115,   116,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,   482,   485,   486,
+     487,   488,   489,   490,   491,   493,   494,   124,   495,   496,
+     497,   499,   157,   607,   492,   501,   502,   503,   504,   505,
+     506,   507,   508,   510,   164,   511,   513,   514,   115,   116,
+     719,   306,   623,   515,   512,   518,   522,   516,   523,   519,
+     526,   527,   720,   307,   165,   520,   525,   528,   529,   530,
+     532,   531,   533,   537,   534,    89,   535,   538,   540,   536,
+     542,   549,   721,   308,   543,    89,   544,   548,   550,    89,
      292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,   303,   304,   305,   489,   490,   491,   124,   493,   492,
-     494,   495,   157,   607,   496,   497,   499,   501,   502,   503,
-     504,   505,   506,   507,   164,   508,   510,   511,   513,   514,
-     719,   306,   623,   515,   512,    89,   518,   516,   522,   519,
-     520,   523,   720,   307,   165,   525,   526,   527,   528,   529,
-     530,   531,   532,   533,   537,   534,   538,   535,    89,   536,
-     540,   542,   721,   308,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,   543,   544,   548,
-     552,   549,   553,   550,   554,   555,   551,   556,   557,   558,
-     561,   562,    30,   563,   564,   576,   577,   565,   566,   567,
-     568,   578,   579,   589,   622,   580,   581,   590,   664,   582,
-     588,   591,   593,   594,   595,   668,   614,   672,   596,   676,
-     597,   598,   680,   696,   599,   600,   699,   601,   728,   732,
-     736,   738,   748,   602,   749,   750,   751,   752,   603,   604,
-     755,   605,   606,   608,   609,   610,   756,   621,   757,   758,
-     759,   765,   799,   764,   768,   767,   770,   771,   773,   774,
-     777,   776,   785,   804,   784,   786,   787,   788,   789,   790,
-     791,   559,   807,   803,   806,   813,   814,   815,   809,   816,
-     822,   823,   887,   817,   888,   819,   818,   890,   821,   820,
-     824,   891,   922,   825,   896,   826,   827,   923,   880,   828,
-     927,   881,   928,   882,   883,   929,   935,   938,   884,   943,
-     885,   915,   946,   944,   916,   917,   918,   919,   931,   932,
-     933,   936,   948,   947,   950,   951,   953,   971,   972,   973,
-     180,   976,   952,   251,   978,   624,   270,   977,   979,   838,
-     272,   626,   200,   981,   862,   265,   273,   287,   283,   864,
-     203,   852,   478,   451,   831,   829,   866,   483,   879,   854,
-     719,   859,   201,   846,   868,   266,   208,   886,   284,   225,
-     204,   853,   720,   181,   900,   878,   867,   252,   215,   855,
-     271,   227,   839,   843,   869,   182,   902,   183,   863,   232,
-     209,   833,   721,   198,   840,   832,   841,   498,   216,   205,
-     847,   228,   851,   858,   942,   184,   903,   865,   856,   233,
-     837,   524,   835,   870,   842,   834,   836,   893,   901,   517,
-     892,   895,   894,   521,   500,   945,   509,   210,   889,   211,
-     877,   726,   226,   625,   949,   909,   969,   539,   234,   980,
-       0,     0,     0,     0,     0,     0,     0,   541,     0,     0,
+     302,   303,   304,   305,   551,   552,   553,   554,   555,   556,
+     557,   558,   561,   562,    30,   563,   564,   576,   577,   565,
+     566,   567,   568,   578,   579,   580,   581,   582,   588,   589,
+     590,   591,   593,   594,   614,    89,   595,   596,   622,   597,
+     750,   598,   599,   600,   601,   602,   603,   604,   605,   606,
+     664,   668,   672,   676,   680,   608,   609,   610,   621,   696,
+     699,   728,   732,   740,   751,   752,   753,   754,   757,   758,
+     759,   760,   761,   767,   559,   766,   770,   769,   772,   773,
+     775,   776,   779,   778,   787,   801,   786,   788,   789,   790,
+     791,   792,   793,   806,   451,   805,   809,   808,   815,   816,
+     811,   817,   818,   819,   820,   821,   822,   824,   823,   825,
+     889,   826,   890,   827,   893,   892,   828,   829,   898,   882,
+     830,   883,   931,   884,   924,   885,   925,   929,   886,   887,
+     930,   940,   917,   937,   945,   918,   948,   950,   919,   920,
+     921,   933,   934,   935,   953,   955,   949,   946,   952,   954,
+     973,   974,   180,   975,   978,   251,   979,   983,   270,   980,
+     624,   840,   272,   626,   200,   833,   864,   265,   273,   287,
+     283,   866,   203,   854,   981,   831,   483,   861,   868,   881,
+     880,   856,   719,   478,   201,   848,   870,   266,   208,   835,
+     284,   225,   204,   855,   720,   181,   902,   888,   869,   252,
+     215,   857,   271,   227,   841,   845,   871,   182,   904,   183,
+     865,   232,   209,   860,   721,   198,   842,   498,   843,   944,
+     216,   205,   849,   228,   853,   524,   834,   184,   905,   867,
+     858,   233,   836,   837,   894,   872,   844,   838,   895,   517,
+     903,   839,   897,   500,   896,   521,   509,   737,   947,   210,
+     891,   211,   879,   911,   226,   726,   625,   951,   971,   982,
+     234,     0,     0,     0,     0,     0,     0,   539,     0,     0,
+       0,   541,     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,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   838,     0,
-       0,     0,     0,   862,     0,     0,     0,     0,   864,     0,
-     852,     0,     0,     0,   900,   866,     0,     0,   854,     0,
-       0,     0,   846,   868,     0,     0,   902,     0,     0,     0,
-     853,     0,     0,     0,     0,   867,     0,     0,   855,     0,
-       0,   839,   843,   869,     0,     0,   903,   863,     0,     0,
-       0,     0,     0,   840,     0,   841,     0,     0,   901,   847,
-       0,   851,     0,     0,     0,     0,   865,   856,     0,     0,
-       0,     0,   870,   842
+     840,     0,     0,     0,     0,   864,     0,     0,     0,     0,
+     866,     0,   854,     0,     0,     0,   902,   868,     0,     0,
+     856,     0,     0,     0,   848,   870,     0,     0,   904,     0,
+       0,     0,   855,     0,     0,     0,     0,   869,     0,     0,
+     857,     0,     0,   841,   845,   871,     0,     0,   905,   865,
+       0,     0,     0,     0,     0,   842,     0,   843,     0,     0,
+     903,   849,     0,   853,     0,     0,     0,     0,   867,   858,
+       0,     0,     0,     0,   872,   844
   };
 
   const short int
   Dhcp4Parser::yycheck_[] =
   {
       66,    67,    68,    69,    70,    71,   553,    73,    74,    75,
-      76,    72,    74,   775,    68,    69,    70,    71,    74,    73,
-      74,   775,    76,    69,    64,    71,   775,     5,    70,     7,
-       0,     9,    15,   775,    68,    69,    70,    71,     3,    73,
-      74,     6,    76,    69,     3,    71,    69,    97,    98,     8,
-     494,    73,    74,    10,    22,    23,    24,   501,    69,   134,
-      69,     7,   137,   138,   139,    70,    69,    70,    71,     7,
-      11,     3,    69,     7,    71,   156,     8,     7,    69,    20,
-      21,    22,    23,    24,    25,    26,    27,    12,    13,    57,
-       3,    16,    14,    15,    19,     8,   127,   128,   129,   130,
-       3,    28,    70,    71,    56,     8,   156,    48,    49,    50,
-      51,    52,    70,    71,    82,    56,    57,    78,    79,    80,
-      88,    89,    90,    91,    92,    93,    67,    95,   159,    70,
-      71,    58,     3,    60,    61,     6,   132,    64,    65,    66,
-      81,    82,   125,    70,    71,    70,    71,     3,     3,     3,
-     108,   109,     8,     8,     8,    96,     3,     3,    99,     3,
-       6,     8,   924,     6,     8,   106,   107,     3,     3,   110,
-     924,     3,     8,     8,   131,   924,     8,     7,   156,   157,
-     158,   159,   924,   140,   141,   142,    97,    98,   156,     3,
-      21,    22,    23,    24,     8,    28,    17,    18,   156,   156,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,   156,   763,    48,    49,    50,
-       7,     7,    53,    54,    55,    58,    57,     3,     7,   156,
-       7,   156,     8,    21,    22,    23,    24,    68,     7,    70,
-      71,    72,    73,    74,    75,    76,    77,     7,    88,    89,
-      90,    91,    83,    93,     3,    86,    87,     7,     3,     8,
-      48,    49,    50,    94,    52,     4,     3,    57,     3,    57,
-      58,     8,     3,     8,   340,     3,     8,     8,     6,    69,
-      70,    71,    70,    71,     3,    73,     4,     3,     8,    77,
-     330,   331,     8,    83,     3,    83,    86,     4,    86,     8,
-       3,     3,   368,     4,     4,     8,    94,     3,   374,   100,
-     101,   102,   103,   104,   105,     4,     3,     3,     8,     4,
-     374,     8,     8,   156,   390,   156,     4,   393,     4,    58,
-      59,    60,    61,    62,    63,     4,   390,     4,   404,   393,
-     374,    70,    71,     4,   390,     4,     4,     4,   414,     4,
-     404,   393,     8,   419,     8,     3,   390,   419,   404,   393,
-     414,    58,     4,   419,   390,   419,   156,   390,   156,     4,
-     404,     4,   438,    70,    71,     4,   156,     4,   404,   390,
-     414,   390,     4,     4,   438,   419,   159,   390,   393,     4,
-     393,     4,   414,   390,    22,    23,    24,   419,     4,   390,
-       4,   404,     4,     4,   438,   159,     4,   404,   448,   449,
-     450,    29,    30,    31,    32,     4,     4,     4,     4,    70,
-      71,     4,     4,   157,   157,     4,     4,   156,    56,    57,
-      58,   157,   157,     4,     4,     4,   133,     4,   135,   136,
-       4,     4,    70,    71,     4,   157,     4,     4,     4,     4,
-       4,   159,     4,     4,     4,     4,    84,    85,     4,   156,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,     4,     4,   157,   543,     4,   159,
-       4,     4,   548,   523,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,   548,     4,     4,     4,     4,     4,
-     566,   567,   542,     4,   157,   156,     4,   159,     4,   159,
-     159,     4,   566,   567,   548,   159,     4,     4,   157,     4,
-     157,   157,     4,     4,     4,   159,     4,   159,   156,   159,
-       4,     4,   566,   567,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,     7,     7,     7,
-       7,   156,     7,   156,     5,     5,   156,     5,     5,     5,
-     156,     5,     7,     5,     5,   156,   156,     7,     7,     7,
-       5,   156,     5,     5,     5,   156,   156,     7,     7,   156,
-     156,   156,   156,   156,   156,     7,   126,     7,   156,     7,
-     156,   156,     7,     7,   156,   156,     7,   156,     7,     7,
-      95,     7,     4,   156,     4,     4,     4,     4,   156,   156,
-       4,   156,   156,   156,   156,   156,     4,   156,     4,     4,
-       4,     3,   156,     6,     3,     6,     6,     3,     6,     3,
-       3,     6,     3,     3,     6,     4,     4,     4,     4,     4,
-       4,   469,     3,     6,     6,     4,     4,     4,     8,     4,
-       4,     4,     4,   157,     4,   157,   159,     6,   157,   159,
-     157,     3,     8,   157,     4,   157,   157,     8,   157,   159,
-       4,   157,     8,   157,   157,     3,     8,     4,   157,     4,
-     157,   156,     4,   159,   156,   156,   156,   156,   156,   156,
-     156,   156,     4,   157,   156,     5,     7,     4,     4,     4,
-     766,     4,   156,   769,   157,   543,   772,   159,   157,   775,
-     772,   548,   766,   156,   780,   769,   772,   783,   772,   780,
-     766,   775,   368,   340,   765,   760,   780,   374,   785,   775,
-     796,   778,   766,   775,   780,   769,   802,   792,   772,   805,
-     766,   775,   796,   766,   810,   783,   780,   769,   802,   775,
-     772,   805,   775,   775,   780,   766,   810,   766,   780,   805,
-     802,   768,   796,   766,   775,   766,   775,   390,   802,   766,
-     775,   805,   775,   777,   924,   766,   810,   780,   775,   805,
-     774,   422,   771,   780,   775,   769,   772,   804,   810,   414,
-     802,   807,   805,   419,   393,   929,   404,   802,   796,   802,
-     781,   567,   805,   544,   940,   811,   957,   438,   805,   974,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   441,    -1,    -1,
+      76,    72,    74,   777,    68,    69,    70,    71,    74,    73,
+      74,   777,    76,    69,    64,    71,   494,     5,    70,     7,
+       0,     9,    15,   501,    68,    69,    70,    71,   777,    73,
+      74,   777,    76,    69,    10,    71,    69,    98,    99,     3,
+       3,    73,    74,     6,     8,    12,    13,    58,    69,    16,
+      69,     3,    19,    57,     6,    70,    69,    70,    71,    70,
+      71,    11,    69,     7,    71,    69,    70,    71,    69,     7,
+      20,    21,    22,    23,    24,    25,    26,    27,     3,    83,
+     135,     6,    86,   138,   139,   140,   128,   129,   130,   131,
+      88,    89,    90,    91,     3,    93,   157,     6,    48,    49,
+      50,    51,    52,    70,    71,     7,    56,    57,     7,   101,
+     102,   103,   104,   105,   106,    70,    71,    67,   160,     3,
+      70,    71,     7,   134,     8,   136,   137,    22,    23,    24,
+       3,    81,    82,   126,     3,     8,     3,     3,     3,     8,
+       3,     8,     8,     8,     3,     8,   157,    97,   157,     8,
+     100,     7,   926,   157,   109,   110,   132,   107,   108,     3,
+     926,   111,    57,     3,     8,   141,   142,   143,     8,   157,
+     158,   159,   160,     3,     3,    70,    71,   926,     8,     8,
+     926,   157,    21,    22,    23,    24,     3,    82,    98,    99,
+     157,     8,     7,    88,    89,    90,    91,    92,    93,     3,
+      95,     3,   157,    56,     8,   133,     8,   157,   765,    48,
+      49,    50,     3,     7,    53,    54,    55,     8,    57,    14,
+      15,     3,    21,    22,    23,    24,     8,    17,    18,    68,
+       7,    70,    71,    72,    73,    74,    75,    76,    77,     7,
+       3,    22,    23,    24,    83,     8,     7,    86,    87,    48,
+      49,    50,     3,    52,     7,    94,     3,     8,    57,    58,
+       3,     8,   157,     3,   340,     8,     3,     6,     8,    95,
+      96,    70,    71,     4,    73,    56,    57,    58,    77,     8,
+     330,   331,     3,     8,    83,     4,     4,    86,     4,    70,
+      71,     4,   368,     4,     4,    94,     4,     4,   374,    29,
+      30,    31,    32,    84,    85,    78,    79,    80,     4,     4,
+     374,     4,     3,     3,   390,     4,     8,   393,   157,     4,
+       8,     4,     4,     3,     8,     4,   390,     4,   404,   393,
+     374,     4,     4,     4,   390,     4,     4,   157,   414,     4,
+     404,   393,     4,   419,     4,     4,   390,   419,   404,   393,
+     414,     4,     4,   419,   390,   419,     4,   390,   157,   160,
+     404,     4,   438,   160,     4,     4,     4,     4,   404,   390,
+     414,   390,   158,   158,   438,   419,   157,   390,   393,   158,
+     393,     4,   414,   390,   158,     4,    28,   419,     4,   390,
+       4,   404,     4,     4,   438,     4,    28,   404,   448,   449,
+     450,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    58,     4,    60,    61,
+     898,     4,    64,    65,    66,     4,    58,     4,    70,    71,
+      58,    59,    60,    61,    62,    63,   158,     4,     4,     4,
+       4,     4,    70,    71,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   160,     4,     4,
+       4,     4,     4,     4,   158,     4,     4,   543,     4,     4,
+       4,     4,   548,   523,   160,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,   548,     4,     4,     4,    70,    71,
+     566,   567,   542,     4,   158,     4,     4,   160,     4,   160,
+       4,     4,   566,   567,   548,   160,   160,   158,     4,   158,
+       4,   158,     4,     4,   160,   157,   160,     4,     4,   160,
+       4,   157,   566,   567,     7,   157,     7,     7,   157,   157,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   157,     7,     7,     5,     5,     5,
+       5,     5,   157,     5,     7,     5,     5,   157,   157,     7,
+       7,     7,     5,   157,     5,   157,   157,   157,   157,     5,
+       7,   157,   157,   157,   127,   157,   157,   157,     5,   157,
+       4,   157,   157,   157,   157,   157,   157,   157,   157,   157,
+       7,     7,     7,     7,     7,   157,   157,   157,   157,     7,
+       7,     7,     7,     7,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     3,   469,     6,     3,     6,     6,     3,
+       6,     3,     3,     6,     3,   157,     6,     4,     4,     4,
+       4,     4,     4,     3,   340,     6,     3,     6,     4,     4,
+       8,     4,     4,   158,   160,   158,   160,     4,   158,     4,
+       4,   158,     4,   158,     3,     6,   158,   158,     4,   158,
+     160,   158,     3,   158,     8,   158,     8,     4,   158,   158,
+       8,     4,   157,     8,     4,   157,     4,     4,   157,   157,
+     157,   157,   157,   157,     5,     7,   158,   160,   157,   157,
+       4,     4,   768,     4,     4,   771,   160,   157,   774,   158,
+     543,   777,   774,   548,   768,   767,   782,   771,   774,   785,
+     774,   782,   768,   777,   158,   762,   374,   780,   782,   787,
+     785,   777,   798,   368,   768,   777,   782,   771,   804,   770,
+     774,   807,   768,   777,   798,   768,   812,   794,   782,   771,
+     804,   777,   774,   807,   777,   777,   782,   768,   812,   768,
+     782,   807,   804,   779,   798,   768,   777,   390,   777,   926,
+     804,   768,   777,   807,   777,   422,   768,   768,   812,   782,
+     777,   807,   771,   773,   804,   782,   777,   774,   806,   414,
+     812,   776,   809,   393,   807,   419,   404,   590,   931,   804,
+     798,   804,   783,   813,   807,   567,   544,   942,   959,   976,
+     807,    -1,    -1,    -1,    -1,    -1,    -1,   438,    -1,    -1,
+      -1,   441,    -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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   924,    -1,
-      -1,    -1,    -1,   929,    -1,    -1,    -1,    -1,   929,    -1,
-     924,    -1,    -1,    -1,   940,   929,    -1,    -1,   924,    -1,
-      -1,    -1,   924,   929,    -1,    -1,   940,    -1,    -1,    -1,
-     924,    -1,    -1,    -1,    -1,   929,    -1,    -1,   924,    -1,
-      -1,   924,   924,   929,    -1,    -1,   940,   929,    -1,    -1,
-      -1,    -1,    -1,   924,    -1,   924,    -1,    -1,   940,   924,
-      -1,   924,    -1,    -1,    -1,    -1,   929,   924,    -1,    -1,
-      -1,    -1,   929,   924
+     926,    -1,    -1,    -1,    -1,   931,    -1,    -1,    -1,    -1,
+     931,    -1,   926,    -1,    -1,    -1,   942,   931,    -1,    -1,
+     926,    -1,    -1,    -1,   926,   931,    -1,    -1,   942,    -1,
+      -1,    -1,   926,    -1,    -1,    -1,    -1,   931,    -1,    -1,
+     926,    -1,    -1,   926,   926,   931,    -1,    -1,   942,   931,
+      -1,    -1,    -1,    -1,    -1,   926,    -1,   926,    -1,    -1,
+     942,   926,    -1,   926,    -1,    -1,    -1,    -1,   931,   926,
+      -1,    -1,    -1,    -1,   931,   926
   };
 
   const unsigned short int
   Dhcp4Parser::yystos_[] =
   {
-       0,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,     0,     5,
-       7,     9,   156,   157,   158,   159,   175,   176,   177,   182,
-       7,   191,     7,   197,     7,   211,     7,   298,     7,   381,
-       7,   397,     7,   333,     7,   339,     7,   363,     7,   274,
-       7,   451,     7,   486,   183,   178,   192,   198,   212,   299,
-     382,   398,   334,   340,   364,   275,   452,   487,   175,   184,
-     185,   156,   180,   181,    10,   131,   140,   141,   142,   156,
-     190,   193,   194,   195,   478,   480,   482,   484,    11,    20,
+       0,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,     0,     5,
+       7,     9,   157,   158,   159,   160,   176,   177,   178,   183,
+       7,   192,     7,   198,     7,   212,     7,   299,     7,   382,
+       7,   398,     7,   334,     7,   340,     7,   364,     7,   275,
+       7,   453,     7,   488,   184,   179,   193,   199,   213,   300,
+     383,   399,   335,   341,   365,   276,   454,   489,   176,   185,
+     186,   157,   181,   182,    10,   132,   141,   142,   143,   157,
+     191,   194,   195,   196,   480,   482,   484,   486,    11,    20,
       21,    22,    23,    24,    25,    26,    27,    48,    49,    50,
-      51,    52,    56,    57,    67,    70,    71,    81,    82,    96,
-      99,   106,   107,   110,   190,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   222,   224,   226,   259,   268,   282,
-     292,   323,   331,   357,   387,   389,   402,   404,   406,   428,
-     440,   441,   449,    12,    13,    16,    19,   190,   209,   210,
-     213,   215,   218,   221,   387,   389,    53,    54,    55,    68,
+      51,    52,    56,    57,    67,    70,    71,    81,    82,    97,
+     100,   107,   108,   111,   191,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   223,   225,   227,   260,   269,   283,
+     293,   324,   332,   358,   388,   390,   403,   405,   407,   430,
+     442,   443,   451,    12,    13,    16,    19,   191,   210,   211,
+     214,   216,   219,   222,   388,   390,    53,    54,    55,    68,
       72,    73,    74,    75,    76,    77,    83,    86,    87,    94,
-     190,   201,   202,   203,   206,   300,   301,   302,   304,   306,
-     308,   310,   312,   314,   316,   318,   321,   322,   357,   375,
-     387,   389,   391,   402,   404,   406,   424,    69,   190,   314,
-     316,   357,   383,   384,   385,   387,   389,    82,    88,    89,
-      90,    91,    92,    93,    95,   190,   357,   387,   389,   399,
-     400,   401,   402,   404,   406,   408,   410,   412,   414,   416,
-     418,   420,   422,   331,    28,    58,    60,    61,    64,    65,
-      66,   190,   244,   341,   342,   343,   344,   345,   346,   347,
-     349,   351,   353,   354,   356,   387,   389,    59,    62,    63,
-     190,   244,   345,   351,   365,   366,   367,   368,   369,   371,
-     372,   373,   374,   387,   389,    97,    98,   190,   276,   277,
-     278,   280,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   190,   387,   389,   453,
-     454,   455,   456,   458,   460,   461,   463,   464,   465,   468,
-     470,   471,   472,   473,   476,   132,   488,   489,   490,     6,
-       3,     4,     8,     3,   196,   485,   479,   481,   483,     4,
-       3,     8,   208,     4,     4,   403,   405,   407,   223,   225,
-     227,     4,     4,     4,     4,   293,   332,   358,   324,   388,
-     390,   260,   429,   269,   283,     4,   442,   450,     3,     8,
-     214,   216,   219,     4,     3,     8,   305,   307,   309,   376,
-     303,   311,   313,     4,     4,   319,   317,   315,   392,   425,
-       3,     8,   386,     3,     8,   423,   411,   413,   417,   415,
-     421,   419,   409,     8,     3,     8,   348,   245,     4,   352,
-     350,   355,     4,     8,     3,   370,     4,     4,     8,     3,
-     279,   281,     3,     8,     4,   457,   459,     4,   462,     4,
-       4,   466,   469,     4,     4,     4,   474,   477,     3,     8,
-     491,     3,     8,   175,   175,   156,     4,     4,     4,     4,
-       4,   194,     4,   159,   159,     4,     4,     4,     4,     4,
-       4,   157,   157,   157,   157,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,   157,     4,     4,   200,     4,
-       4,     4,   159,   210,     4,     4,     4,     4,     4,     4,
-       4,   157,   159,     4,     4,     4,     4,     4,   301,     4,
-     384,     4,     4,     4,     4,     4,     4,     4,     4,   401,
-       4,     4,   157,     4,     4,     4,   159,   343,     4,   159,
-     159,   367,     4,     4,   277,   159,     4,     4,   157,     4,
-     157,   157,     4,     4,   159,   159,   159,     4,     4,   454,
-       4,   489,     4,     7,     7,   175,   175,   175,     7,   156,
-     156,   156,     7,     7,     5,     5,     5,     5,     5,   177,
-     179,   156,     5,     5,     5,     7,     7,     7,     5,   186,
-      14,    15,   217,    17,    18,   220,   156,   156,   156,     5,
-     156,   156,   156,    78,    79,    80,   320,   186,   156,     5,
-       7,   156,   186,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,   175,   156,   156,
-     156,    15,   125,   467,   126,   127,   128,   129,   130,   159,
-     475,   156,     5,   175,   199,   488,   209,    28,    33,    34,
+     191,   202,   203,   204,   207,   301,   302,   303,   305,   307,
+     309,   311,   313,   315,   317,   319,   322,   323,   358,   376,
+     388,   390,   392,   403,   405,   407,   427,    69,   191,   315,
+     317,   358,   384,   385,   386,   388,   390,    82,    88,    89,
+      90,    91,    92,    93,    95,   191,   358,   388,   390,   400,
+     401,   402,   403,   405,   407,   409,   413,   415,   417,   419,
+     421,   423,   425,   332,    28,    58,    60,    61,    64,    65,
+      66,   191,   245,   342,   343,   344,   345,   346,   347,   348,
+     350,   352,   354,   355,   357,   388,   390,    59,    62,    63,
+     191,   245,   346,   352,   366,   367,   368,   369,   370,   372,
+     373,   374,   375,   388,   390,    98,    99,   191,   277,   278,
+     279,   281,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   191,   388,   390,   455,
+     456,   457,   458,   460,   462,   463,   465,   466,   467,   470,
+     472,   473,   474,   475,   478,   133,   490,   491,   492,     6,
+       3,     4,     8,     3,   197,   487,   481,   483,   485,     4,
+       3,     8,   209,     4,     4,   404,   406,   408,   224,   226,
+     228,     4,     4,     4,     4,   294,   333,   359,   325,   389,
+     391,   261,   431,   270,   284,     4,   444,   452,     3,     8,
+     215,   217,   220,     4,     3,     8,   306,   308,   310,   377,
+     304,   312,   314,     4,     4,   320,   318,   316,   393,   428,
+       3,     8,   387,     3,     8,   426,   414,   416,   420,   418,
+     424,   422,   410,     8,     3,     8,   349,   246,     4,   353,
+     351,   356,     4,     8,     3,   371,     4,     4,     8,     3,
+     280,   282,     3,     8,     4,   459,   461,     4,   464,     4,
+       4,   468,   471,     4,     4,     4,   476,   479,     3,     8,
+     493,     3,     8,   176,   176,   157,     4,     4,     4,     4,
+       4,   195,     4,   160,   160,     4,     4,     4,     4,     4,
+       4,   158,   158,   158,   158,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,   158,     4,     4,   201,     4,
+       4,     4,   160,   211,     4,     4,     4,     4,     4,     4,
+       4,   158,   160,     4,     4,     4,     4,     4,   302,     4,
+     385,     4,     4,     4,     4,     4,     4,     4,     4,   402,
+       4,     4,   158,     4,     4,     4,   160,   344,     4,   160,
+     160,   368,     4,     4,   278,   160,     4,     4,   158,     4,
+     158,   158,     4,     4,   160,   160,   160,     4,     4,   456,
+       4,   491,     4,     7,     7,   176,   176,   176,     7,   157,
+     157,   157,     7,     7,     5,     5,     5,     5,     5,   178,
+     180,   157,     5,     5,     5,     7,     7,     7,     5,   187,
+      14,    15,   218,    17,    18,   221,   157,   157,   157,     5,
+     157,   157,   157,    78,    79,    80,   321,   187,   157,     5,
+       7,   157,   187,   157,   157,   157,   157,   157,   157,   157,
+     157,   157,   157,   157,   157,   157,   157,   176,   157,   157,
+     157,    15,   126,   469,   127,   128,   129,   130,   131,   160,
+     477,   157,     5,   176,   200,   490,   210,    28,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,   190,   232,   233,   234,   237,   239,   241,
-     243,   244,   246,   247,   248,   249,   250,   251,   252,   253,
-     255,   257,   258,   232,     7,   228,   229,   230,     7,   294,
-     295,   296,     7,   335,   336,   337,     7,   359,   360,   361,
-       7,   325,   326,   327,    88,    89,    90,    91,    93,   261,
-     262,   263,   264,   265,   266,   267,     7,   430,   431,     7,
-     270,   271,   272,   100,   101,   102,   103,   104,   105,   284,
-     285,   286,   287,   288,   289,   290,   291,   108,   109,   190,
-     387,   389,   443,   444,   445,   447,   453,   187,     7,   377,
-     378,   379,     7,   393,   394,   395,    95,   426,     7,   492,
-     493,     8,     8,     8,   235,   238,   240,   242,     4,     4,
-       4,     4,     4,   254,   256,     4,     4,     4,     4,     4,
-       3,     8,     8,   231,     6,     3,   297,     6,     3,   338,
-       6,     3,   362,     6,     3,   328,     6,     3,     3,     6,
-     432,     3,     6,   273,     6,     3,     4,     4,     4,     4,
-       4,     4,     3,     8,   446,   448,     3,     8,     8,   156,
-     188,   189,   380,     6,     3,   396,     6,     3,   427,     8,
-     494,     3,     6,     4,     4,     4,     4,   157,   159,   157,
-     159,   157,     4,     4,   157,   157,   157,   157,   159,   233,
-     232,   230,   300,   296,   341,   337,   365,   361,   190,   201,
-     202,   203,   206,   244,   292,   310,   314,   316,   318,   329,
-     330,   357,   387,   389,   402,   404,   406,   424,   327,   262,
-      84,    85,   190,   244,   331,   357,   387,   389,   402,   404,
-     406,   433,   434,   435,   436,   437,   439,   431,   276,   272,
-     157,   157,   157,   157,   157,   157,   285,     4,     4,   444,
-       6,     3,   383,   379,   399,   395,     4,   133,   135,   136,
-     190,   244,   387,   389,   495,   496,   497,   498,   500,   493,
-      29,    30,    31,    32,   236,   156,   156,   156,   156,   156,
-       8,     8,     8,     8,     3,     8,   438,     4,     8,     3,
-       8,   156,   156,   156,     8,     8,   156,   501,     4,   499,
-       3,     8,   330,     4,   159,   435,     4,   157,     4,   496,
-     156,     5,   156,     7,   502,   503,   504,     3,     6,   134,
-     137,   138,   139,   505,   506,   507,   509,   510,   511,   503,
-     508,     4,     4,     4,     3,     8,     4,   159,   157,   157,
-     506,   156
+      45,    46,    47,   191,   233,   234,   235,   238,   240,   242,
+     244,   245,   247,   248,   249,   250,   251,   252,   253,   254,
+     256,   258,   259,   233,     7,   229,   230,   231,     7,   295,
+     296,   297,     7,   336,   337,   338,     7,   360,   361,   362,
+       7,   326,   327,   328,    88,    89,    90,    91,    93,   262,
+     263,   264,   265,   266,   267,   268,     7,   432,   433,     7,
+     271,   272,   273,   101,   102,   103,   104,   105,   106,   285,
+     286,   287,   288,   289,   290,   291,   292,   109,   110,   191,
+     388,   390,   445,   446,   447,   449,   455,   188,     7,   378,
+     379,   380,     7,   394,   395,   396,    96,   409,   411,   429,
+       7,   494,   495,     8,     8,     8,   236,   239,   241,   243,
+       4,     4,     4,     4,     4,   255,   257,     4,     4,     4,
+       4,     4,     3,     8,     8,   232,     6,     3,   298,     6,
+       3,   339,     6,     3,   363,     6,     3,   329,     6,     3,
+       3,     6,   434,     3,     6,   274,     6,     3,     4,     4,
+       4,     4,     4,     4,     3,     8,   448,   450,     3,     8,
+       8,   157,   189,   190,   381,     6,     3,   397,     6,     3,
+     412,     8,   496,     3,     6,     4,     4,     4,     4,   158,
+     160,   158,   160,   158,     4,     4,   158,   158,   158,   158,
+     160,   234,   233,   231,   301,   297,   342,   338,   366,   362,
+     191,   202,   203,   204,   207,   245,   293,   311,   315,   317,
+     319,   330,   331,   358,   388,   390,   403,   405,   407,   427,
+     328,   263,    84,    85,   191,   245,   332,   358,   388,   390,
+     403,   405,   407,   435,   436,   437,   438,   439,   441,   433,
+     277,   273,   158,   158,   158,   158,   158,   158,   286,     4,
+       4,   446,     6,     3,   384,   380,   400,   396,     4,   134,
+     136,   137,   191,   245,   388,   390,   497,   498,   499,   500,
+     502,   495,    29,    30,    31,    32,   237,   157,   157,   157,
+     157,   157,     8,     8,     8,     8,     3,     8,   440,     4,
+       8,     3,     8,   157,   157,   157,     8,     8,   187,   503,
+       4,   501,     3,     8,   331,     4,   160,   437,     4,   158,
+       4,   498,   157,     5,   157,     7,   504,   505,   506,     3,
+       6,   135,   138,   139,   140,   507,   508,   509,   511,   512,
+     513,   505,   510,     4,     4,     4,     3,     8,     4,   160,
+     158,   158,   508,   157
   };
 
   const unsigned short int
   Dhcp4Parser::yyr1_[] =
   {
-       0,   160,   162,   161,   163,   161,   164,   161,   165,   161,
-     166,   161,   167,   161,   168,   161,   169,   161,   170,   161,
-     171,   161,   172,   161,   173,   161,   174,   161,   175,   175,
-     175,   175,   175,   175,   175,   176,   178,   177,   179,   180,
-     180,   181,   181,   183,   182,   184,   184,   185,   185,   187,
-     186,   188,   188,   189,   189,   190,   192,   191,   193,   193,
-     194,   194,   194,   194,   194,   194,   196,   195,   198,   197,
-     199,   199,   200,   200,   200,   200,   200,   200,   200,   200,
-     200,   200,   200,   200,   200,   200,   200,   200,   200,   200,
-     200,   200,   200,   200,   200,   200,   200,   200,   200,   201,
-     202,   203,   204,   205,   206,   208,   207,   209,   209,   210,
-     210,   210,   210,   210,   210,   210,   212,   211,   214,   213,
-     216,   215,   217,   217,   219,   218,   220,   220,   221,   223,
-     222,   225,   224,   227,   226,   228,   228,   229,   229,   231,
-     230,   232,   232,   233,   233,   233,   233,   233,   233,   233,
-     233,   233,   233,   233,   233,   233,   233,   233,   233,   233,
-     233,   235,   234,   236,   236,   236,   236,   238,   237,   240,
-     239,   242,   241,   243,   245,   244,   246,   247,   248,   249,
-     250,   251,   252,   254,   253,   256,   255,   257,   258,   260,
-     259,   261,   261,   262,   262,   262,   262,   262,   263,   264,
-     265,   266,   267,   269,   268,   270,   270,   271,   271,   273,
-     272,   275,   274,   276,   276,   276,   277,   277,   279,   278,
-     281,   280,   283,   282,   284,   284,   285,   285,   285,   285,
-     285,   285,   286,   287,   288,   289,   290,   291,   293,   292,
-     294,   294,   295,   295,   297,   296,   299,   298,   300,   300,
-     301,   301,   301,   301,   301,   301,   301,   301,   301,   301,
-     301,   301,   301,   301,   301,   301,   301,   301,   301,   301,
-     301,   301,   301,   301,   301,   303,   302,   305,   304,   307,
-     306,   309,   308,   311,   310,   313,   312,   315,   314,   317,
-     316,   319,   318,   320,   320,   320,   321,   322,   324,   323,
-     325,   325,   326,   326,   328,   327,   329,   329,   330,   330,
-     330,   330,   330,   330,   330,   330,   330,   330,   330,   330,
-     330,   330,   330,   330,   330,   330,   332,   331,   334,   333,
-     335,   335,   336,   336,   338,   337,   340,   339,   341,   341,
-     342,   342,   343,   343,   343,   343,   343,   343,   343,   343,
-     343,   343,   344,   345,   346,   348,   347,   350,   349,   352,
-     351,   353,   355,   354,   356,   358,   357,   359,   359,   360,
-     360,   362,   361,   364,   363,   365,   365,   366,   366,   367,
-     367,   367,   367,   367,   367,   367,   367,   367,   368,   370,
-     369,   371,   372,   373,   374,   376,   375,   377,   377,   378,
-     378,   380,   379,   382,   381,   383,   383,   384,   384,   384,
-     384,   384,   384,   384,   386,   385,   388,   387,   390,   389,
-     392,   391,   393,   393,   394,   394,   396,   395,   398,   397,
-     399,   399,   400,   400,   401,   401,   401,   401,   401,   401,
-     401,   401,   401,   401,   401,   401,   401,   401,   401,   403,
-     402,   405,   404,   407,   406,   409,   408,   411,   410,   413,
-     412,   415,   414,   417,   416,   419,   418,   421,   420,   423,
-     422,   425,   424,   427,   426,   429,   428,   430,   430,   432,
-     431,   433,   433,   434,   434,   435,   435,   435,   435,   435,
-     435,   435,   435,   435,   435,   435,   436,   438,   437,   439,
-     440,   442,   441,   443,   443,   444,   444,   444,   444,   444,
-     446,   445,   448,   447,   450,   449,   452,   451,   453,   453,
-     454,   454,   454,   454,   454,   454,   454,   454,   454,   454,
-     454,   454,   454,   454,   454,   454,   454,   455,   457,   456,
-     459,   458,   460,   462,   461,   463,   464,   466,   465,   467,
-     467,   469,   468,   470,   471,   472,   474,   473,   475,   475,
-     475,   475,   475,   477,   476,   479,   478,   481,   480,   483,
-     482,   485,   484,   487,   486,   488,   488,   489,   491,   490,
-     492,   492,   494,   493,   495,   495,   496,   496,   496,   496,
-     496,   496,   496,   497,   499,   498,   501,   500,   502,   502,
-     504,   503,   505,   505,   506,   506,   506,   506,   508,   507,
-     509,   510,   511
+       0,   161,   163,   162,   164,   162,   165,   162,   166,   162,
+     167,   162,   168,   162,   169,   162,   170,   162,   171,   162,
+     172,   162,   173,   162,   174,   162,   175,   162,   176,   176,
+     176,   176,   176,   176,   176,   177,   179,   178,   180,   181,
+     181,   182,   182,   184,   183,   185,   185,   186,   186,   188,
+     187,   189,   189,   190,   190,   191,   193,   192,   194,   194,
+     195,   195,   195,   195,   195,   195,   197,   196,   199,   198,
+     200,   200,   201,   201,   201,   201,   201,   201,   201,   201,
+     201,   201,   201,   201,   201,   201,   201,   201,   201,   201,
+     201,   201,   201,   201,   201,   201,   201,   201,   201,   202,
+     203,   204,   205,   206,   207,   209,   208,   210,   210,   211,
+     211,   211,   211,   211,   211,   211,   213,   212,   215,   214,
+     217,   216,   218,   218,   220,   219,   221,   221,   222,   224,
+     223,   226,   225,   228,   227,   229,   229,   230,   230,   232,
+     231,   233,   233,   234,   234,   234,   234,   234,   234,   234,
+     234,   234,   234,   234,   234,   234,   234,   234,   234,   234,
+     234,   236,   235,   237,   237,   237,   237,   239,   238,   241,
+     240,   243,   242,   244,   246,   245,   247,   248,   249,   250,
+     251,   252,   253,   255,   254,   257,   256,   258,   259,   261,
+     260,   262,   262,   263,   263,   263,   263,   263,   264,   265,
+     266,   267,   268,   270,   269,   271,   271,   272,   272,   274,
+     273,   276,   275,   277,   277,   277,   278,   278,   280,   279,
+     282,   281,   284,   283,   285,   285,   286,   286,   286,   286,
+     286,   286,   287,   288,   289,   290,   291,   292,   294,   293,
+     295,   295,   296,   296,   298,   297,   300,   299,   301,   301,
+     302,   302,   302,   302,   302,   302,   302,   302,   302,   302,
+     302,   302,   302,   302,   302,   302,   302,   302,   302,   302,
+     302,   302,   302,   302,   302,   304,   303,   306,   305,   308,
+     307,   310,   309,   312,   311,   314,   313,   316,   315,   318,
+     317,   320,   319,   321,   321,   321,   322,   323,   325,   324,
+     326,   326,   327,   327,   329,   328,   330,   330,   331,   331,
+     331,   331,   331,   331,   331,   331,   331,   331,   331,   331,
+     331,   331,   331,   331,   331,   331,   333,   332,   335,   334,
+     336,   336,   337,   337,   339,   338,   341,   340,   342,   342,
+     343,   343,   344,   344,   344,   344,   344,   344,   344,   344,
+     344,   344,   345,   346,   347,   349,   348,   351,   350,   353,
+     352,   354,   356,   355,   357,   359,   358,   360,   360,   361,
+     361,   363,   362,   365,   364,   366,   366,   367,   367,   368,
+     368,   368,   368,   368,   368,   368,   368,   368,   369,   371,
+     370,   372,   373,   374,   375,   377,   376,   378,   378,   379,
+     379,   381,   380,   383,   382,   384,   384,   385,   385,   385,
+     385,   385,   385,   385,   387,   386,   389,   388,   391,   390,
+     393,   392,   394,   394,   395,   395,   397,   396,   399,   398,
+     400,   400,   401,   401,   402,   402,   402,   402,   402,   402,
+     402,   402,   402,   402,   402,   402,   402,   402,   402,   404,
+     403,   406,   405,   408,   407,   410,   409,   412,   411,   414,
+     413,   416,   415,   418,   417,   420,   419,   422,   421,   424,
+     423,   426,   425,   428,   427,   429,   429,   431,   430,   432,
+     432,   434,   433,   435,   435,   436,   436,   437,   437,   437,
+     437,   437,   437,   437,   437,   437,   437,   437,   438,   440,
+     439,   441,   442,   444,   443,   445,   445,   446,   446,   446,
+     446,   446,   448,   447,   450,   449,   452,   451,   454,   453,
+     455,   455,   456,   456,   456,   456,   456,   456,   456,   456,
+     456,   456,   456,   456,   456,   456,   456,   456,   456,   457,
+     459,   458,   461,   460,   462,   464,   463,   465,   466,   468,
+     467,   469,   469,   471,   470,   472,   473,   474,   476,   475,
+     477,   477,   477,   477,   477,   479,   478,   481,   480,   483,
+     482,   485,   484,   487,   486,   489,   488,   490,   490,   491,
+     493,   492,   494,   494,   496,   495,   497,   497,   498,   498,
+     498,   498,   498,   498,   498,   499,   501,   500,   503,   502,
+     504,   504,   506,   505,   507,   507,   508,   508,   508,   508,
+     510,   509,   511,   512,   513
   };
 
   const unsigned char
@@ -4392,21 +4394,21 @@ namespace isc { namespace dhcp {
        1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
        4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
        4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
-       4,     0,     6,     0,     4,     0,     6,     1,     3,     0,
-       4,     0,     1,     1,     3,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     0,     4,     3,
-       3,     0,     6,     1,     3,     1,     1,     1,     1,     1,
-       0,     4,     0,     4,     0,     6,     0,     4,     1,     3,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     3,     0,     4,
-       0,     4,     3,     0,     4,     3,     3,     0,     4,     1,
-       1,     0,     4,     3,     3,     3,     0,     4,     1,     1,
-       1,     1,     1,     0,     4,     0,     4,     0,     4,     0,
-       4,     0,     6,     0,     4,     1,     3,     1,     0,     6,
+       4,     0,     4,     0,     6,     1,     1,     0,     6,     1,
+       3,     0,     4,     0,     1,     1,     3,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
+       4,     3,     3,     0,     6,     1,     3,     1,     1,     1,
+       1,     1,     0,     4,     0,     4,     0,     6,     0,     4,
+       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
+       0,     4,     0,     4,     3,     0,     4,     3,     3,     0,
+       4,     1,     1,     0,     4,     3,     3,     3,     0,     4,
+       1,     1,     1,     1,     1,     0,     4,     0,     4,     0,
+       4,     0,     4,     0,     6,     0,     4,     1,     3,     1,
+       0,     6,     1,     3,     0,     4,     1,     3,     1,     1,
+       1,     1,     1,     1,     1,     3,     0,     4,     0,     6,
        1,     3,     0,     4,     1,     3,     1,     1,     1,     1,
-       1,     1,     1,     3,     0,     4,     0,     6,     1,     3,
-       0,     4,     1,     3,     1,     1,     1,     1,     0,     4,
-       3,     3,     3
+       0,     4,     3,     3,     3
   };
 
 
@@ -4442,8 +4444,8 @@ namespace isc { namespace dhcp {
   "\"require-client-classes\"", "\"test\"", "\"only-if-required\"",
   "\"client-class\"", "\"reservations\"", "\"duid\"", "\"hw-address\"",
   "\"circuit-id\"", "\"client-id\"", "\"hostname\"", "\"flex-id\"",
-  "\"relay\"", "\"ip-address\"", "\"hooks-libraries\"", "\"library\"",
-  "\"parameters\"", "\"expired-leases-processing\"",
+  "\"relay\"", "\"ip-address\"", "\"ip-addresses\"", "\"hooks-libraries\"",
+  "\"library\"", "\"parameters\"", "\"expired-leases-processing\"",
   "\"reclaim-timer-wait-time\"", "\"flush-reclaimed-timer-wait-time\"",
   "\"hold-reclaimed-time\"", "\"max-reclaim-leases\"",
   "\"max-reclaim-time\"", "\"unwarned-reclaim-cycles\"",
@@ -4522,21 +4524,20 @@ namespace isc { namespace dhcp {
   "not_empty_reservations_list", "reservation", "$@76", "sub_reservation",
   "$@77", "reservation_params", "not_empty_reservation_params",
   "reservation_param", "next_server", "$@78", "server_hostname", "$@79",
-  "boot_file_name", "$@80", "ip_address", "$@81", "duid", "$@82",
-  "hw_address", "$@83", "client_id_value", "$@84", "circuit_id_value",
-  "$@85", "flex_id_value", "$@86", "hostname", "$@87",
-  "reservation_client_classes", "$@88", "relay", "$@89", "relay_map",
-  "$@90", "client_classes", "$@91", "client_classes_list",
-  "client_class_entry", "$@92", "client_class_params",
-  "not_empty_client_class_params", "client_class_param",
-  "client_class_name", "client_class_test", "$@93", "only_if_required",
-  "dhcp4o6_port", "control_socket", "$@94", "control_socket_params",
-  "control_socket_param", "control_socket_type", "$@95",
-  "control_socket_name", "$@96", "dhcp_ddns", "$@97", "sub_dhcp_ddns",
-  "$@98", "dhcp_ddns_params", "dhcp_ddns_param", "enable_updates",
-  "qualifying_suffix", "$@99", "server_ip", "$@100", "server_port",
-  "sender_ip", "$@101", "sender_port", "max_queue_size", "ncr_protocol",
-  "$@102", "ncr_protocol_value", "ncr_format", "$@103",
+  "boot_file_name", "$@80", "ip_address", "$@81", "ip_addresses", "$@82",
+  "duid", "$@83", "hw_address", "$@84", "client_id_value", "$@85",
+  "circuit_id_value", "$@86", "flex_id_value", "$@87", "hostname", "$@88",
+  "reservation_client_classes", "$@89", "relay", "$@90", "relay_map",
+  "client_classes", "$@91", "client_classes_list", "client_class_entry",
+  "$@92", "client_class_params", "not_empty_client_class_params",
+  "client_class_param", "client_class_name", "client_class_test", "$@93",
+  "only_if_required", "dhcp4o6_port", "control_socket", "$@94",
+  "control_socket_params", "control_socket_param", "control_socket_type",
+  "$@95", "control_socket_name", "$@96", "dhcp_ddns", "$@97",
+  "sub_dhcp_ddns", "$@98", "dhcp_ddns_params", "dhcp_ddns_param",
+  "enable_updates", "qualifying_suffix", "$@99", "server_ip", "$@100",
+  "server_port", "sender_ip", "$@101", "sender_port", "max_queue_size",
+  "ncr_protocol", "$@102", "ncr_protocol_value", "ncr_format", "$@103",
   "always_include_fqdn", "override_no_update", "override_client_update",
   "replace_client_name", "$@104", "replace_client_name_value",
   "generated_prefix", "$@105", "dhcp6_json_object", "$@106",
@@ -4553,68 +4554,68 @@ namespace isc { namespace dhcp {
   const unsigned short int
   Dhcp4Parser::yyrline_[] =
   {
-       0,   243,   243,   243,   244,   244,   245,   245,   246,   246,
-     247,   247,   248,   248,   249,   249,   250,   250,   251,   251,
-     252,   252,   253,   253,   254,   254,   255,   255,   263,   264,
-     265,   266,   267,   268,   269,   272,   277,   277,   288,   291,
-     292,   295,   299,   306,   306,   313,   314,   317,   321,   328,
-     328,   335,   336,   339,   343,   354,   364,   364,   380,   381,
-     385,   386,   387,   388,   389,   390,   393,   393,   408,   408,
-     417,   418,   423,   424,   425,   426,   427,   428,   429,   430,
-     431,   432,   433,   434,   435,   436,   437,   438,   439,   440,
-     441,   442,   443,   444,   445,   446,   447,   448,   449,   452,
-     457,   462,   467,   472,   477,   483,   483,   494,   495,   498,
-     499,   500,   501,   502,   503,   504,   507,   507,   516,   516,
-     526,   526,   533,   534,   537,   537,   544,   546,   550,   556,
-     556,   568,   568,   580,   580,   590,   591,   594,   595,   598,
-     598,   608,   609,   612,   613,   614,   615,   616,   617,   618,
-     619,   620,   621,   622,   623,   624,   625,   626,   627,   628,
-     629,   632,   632,   639,   640,   641,   642,   645,   645,   653,
-     653,   661,   661,   669,   674,   674,   682,   687,   692,   697,
-     702,   707,   712,   717,   717,   725,   725,   733,   738,   743,
-     743,   753,   754,   757,   758,   759,   760,   761,   764,   769,
-     774,   779,   784,   789,   789,   799,   800,   803,   804,   807,
-     807,   817,   817,   827,   828,   829,   832,   833,   836,   836,
-     844,   844,   852,   852,   863,   864,   867,   868,   869,   870,
-     871,   872,   875,   880,   885,   890,   895,   900,   908,   908,
-     921,   922,   925,   926,   933,   933,   959,   959,   970,   971,
-     975,   976,   977,   978,   979,   980,   981,   982,   983,   984,
-     985,   986,   987,   988,   989,   990,   991,   992,   993,   994,
-     995,   996,   997,   998,   999,  1002,  1002,  1010,  1010,  1018,
-    1018,  1026,  1026,  1034,  1034,  1042,  1042,  1050,  1050,  1058,
-    1058,  1068,  1068,  1075,  1076,  1077,  1080,  1085,  1092,  1092,
-    1103,  1104,  1108,  1109,  1112,  1112,  1120,  1121,  1124,  1125,
-    1126,  1127,  1128,  1129,  1130,  1131,  1132,  1133,  1134,  1135,
-    1136,  1137,  1138,  1139,  1140,  1141,  1148,  1148,  1161,  1161,
-    1170,  1171,  1174,  1175,  1180,  1180,  1195,  1195,  1209,  1210,
-    1213,  1214,  1217,  1218,  1219,  1220,  1221,  1222,  1223,  1224,
-    1225,  1226,  1229,  1231,  1236,  1238,  1238,  1246,  1246,  1254,
-    1254,  1262,  1264,  1264,  1272,  1281,  1281,  1293,  1294,  1299,
-    1300,  1305,  1305,  1317,  1317,  1329,  1330,  1335,  1336,  1341,
-    1342,  1343,  1344,  1345,  1346,  1347,  1348,  1349,  1352,  1354,
-    1354,  1362,  1364,  1366,  1371,  1379,  1379,  1391,  1392,  1395,
-    1396,  1399,  1399,  1409,  1409,  1419,  1420,  1423,  1424,  1425,
-    1426,  1427,  1428,  1429,  1432,  1432,  1440,  1440,  1465,  1465,
-    1495,  1495,  1505,  1506,  1509,  1510,  1513,  1513,  1522,  1522,
-    1531,  1532,  1535,  1536,  1540,  1541,  1542,  1543,  1544,  1545,
-    1546,  1547,  1548,  1549,  1550,  1551,  1552,  1553,  1554,  1557,
-    1557,  1565,  1565,  1573,  1573,  1581,  1581,  1589,  1589,  1597,
-    1597,  1605,  1605,  1613,  1613,  1621,  1621,  1629,  1629,  1637,
-    1637,  1650,  1650,  1660,  1660,  1671,  1671,  1681,  1682,  1685,
-    1685,  1695,  1696,  1699,  1700,  1703,  1704,  1705,  1706,  1707,
-    1708,  1709,  1710,  1711,  1712,  1713,  1716,  1718,  1718,  1726,
-    1735,  1742,  1742,  1752,  1753,  1756,  1757,  1758,  1759,  1760,
-    1763,  1763,  1771,  1771,  1781,  1781,  1793,  1793,  1803,  1804,
-    1807,  1808,  1809,  1810,  1811,  1812,  1813,  1814,  1815,  1816,
-    1817,  1818,  1819,  1820,  1821,  1822,  1823,  1826,  1831,  1831,
-    1839,  1839,  1847,  1852,  1852,  1860,  1865,  1870,  1870,  1878,
-    1879,  1882,  1882,  1890,  1895,  1900,  1905,  1905,  1913,  1916,
-    1919,  1922,  1925,  1931,  1931,  1941,  1941,  1948,  1948,  1955,
-    1955,  1967,  1967,  1977,  1977,  1988,  1989,  1993,  1997,  1997,
-    2009,  2010,  2014,  2014,  2022,  2023,  2026,  2027,  2028,  2029,
-    2030,  2031,  2032,  2035,  2040,  2040,  2048,  2048,  2058,  2059,
-    2062,  2062,  2070,  2071,  2074,  2075,  2076,  2077,  2080,  2080,
-    2088,  2093,  2098
+       0,   244,   244,   244,   245,   245,   246,   246,   247,   247,
+     248,   248,   249,   249,   250,   250,   251,   251,   252,   252,
+     253,   253,   254,   254,   255,   255,   256,   256,   264,   265,
+     266,   267,   268,   269,   270,   273,   278,   278,   289,   292,
+     293,   296,   300,   307,   307,   314,   315,   318,   322,   329,
+     329,   336,   337,   340,   344,   355,   365,   365,   381,   382,
+     386,   387,   388,   389,   390,   391,   394,   394,   409,   409,
+     418,   419,   424,   425,   426,   427,   428,   429,   430,   431,
+     432,   433,   434,   435,   436,   437,   438,   439,   440,   441,
+     442,   443,   444,   445,   446,   447,   448,   449,   450,   453,
+     458,   463,   468,   473,   478,   484,   484,   495,   496,   499,
+     500,   501,   502,   503,   504,   505,   508,   508,   517,   517,
+     527,   527,   534,   535,   538,   538,   545,   547,   551,   557,
+     557,   569,   569,   581,   581,   591,   592,   595,   596,   599,
+     599,   609,   610,   613,   614,   615,   616,   617,   618,   619,
+     620,   621,   622,   623,   624,   625,   626,   627,   628,   629,
+     630,   633,   633,   640,   641,   642,   643,   646,   646,   654,
+     654,   662,   662,   670,   675,   675,   683,   688,   693,   698,
+     703,   708,   713,   718,   718,   726,   726,   734,   739,   744,
+     744,   754,   755,   758,   759,   760,   761,   762,   765,   770,
+     775,   780,   785,   790,   790,   800,   801,   804,   805,   808,
+     808,   818,   818,   828,   829,   830,   833,   834,   837,   837,
+     845,   845,   853,   853,   864,   865,   868,   869,   870,   871,
+     872,   873,   876,   881,   886,   891,   896,   901,   909,   909,
+     922,   923,   926,   927,   934,   934,   960,   960,   971,   972,
+     976,   977,   978,   979,   980,   981,   982,   983,   984,   985,
+     986,   987,   988,   989,   990,   991,   992,   993,   994,   995,
+     996,   997,   998,   999,  1000,  1003,  1003,  1011,  1011,  1019,
+    1019,  1027,  1027,  1035,  1035,  1043,  1043,  1051,  1051,  1059,
+    1059,  1069,  1069,  1076,  1077,  1078,  1081,  1086,  1093,  1093,
+    1104,  1105,  1109,  1110,  1113,  1113,  1121,  1122,  1125,  1126,
+    1127,  1128,  1129,  1130,  1131,  1132,  1133,  1134,  1135,  1136,
+    1137,  1138,  1139,  1140,  1141,  1142,  1149,  1149,  1162,  1162,
+    1171,  1172,  1175,  1176,  1181,  1181,  1196,  1196,  1210,  1211,
+    1214,  1215,  1218,  1219,  1220,  1221,  1222,  1223,  1224,  1225,
+    1226,  1227,  1230,  1232,  1237,  1239,  1239,  1247,  1247,  1255,
+    1255,  1263,  1265,  1265,  1273,  1282,  1282,  1294,  1295,  1300,
+    1301,  1306,  1306,  1318,  1318,  1330,  1331,  1336,  1337,  1342,
+    1343,  1344,  1345,  1346,  1347,  1348,  1349,  1350,  1353,  1355,
+    1355,  1363,  1365,  1367,  1372,  1380,  1380,  1392,  1393,  1396,
+    1397,  1400,  1400,  1410,  1410,  1420,  1421,  1424,  1425,  1426,
+    1427,  1428,  1429,  1430,  1433,  1433,  1441,  1441,  1466,  1466,
+    1496,  1496,  1506,  1507,  1510,  1511,  1514,  1514,  1523,  1523,
+    1532,  1533,  1536,  1537,  1541,  1542,  1543,  1544,  1545,  1546,
+    1547,  1548,  1549,  1550,  1551,  1552,  1553,  1554,  1555,  1558,
+    1558,  1566,  1566,  1574,  1574,  1582,  1582,  1590,  1590,  1600,
+    1600,  1608,  1608,  1616,  1616,  1624,  1624,  1632,  1632,  1640,
+    1640,  1648,  1648,  1661,  1661,  1671,  1672,  1678,  1678,  1688,
+    1689,  1692,  1692,  1702,  1703,  1706,  1707,  1710,  1711,  1712,
+    1713,  1714,  1715,  1716,  1717,  1718,  1719,  1720,  1723,  1725,
+    1725,  1733,  1742,  1749,  1749,  1759,  1760,  1763,  1764,  1765,
+    1766,  1767,  1770,  1770,  1778,  1778,  1788,  1788,  1800,  1800,
+    1810,  1811,  1814,  1815,  1816,  1817,  1818,  1819,  1820,  1821,
+    1822,  1823,  1824,  1825,  1826,  1827,  1828,  1829,  1830,  1833,
+    1838,  1838,  1846,  1846,  1854,  1859,  1859,  1867,  1872,  1877,
+    1877,  1885,  1886,  1889,  1889,  1897,  1902,  1907,  1912,  1912,
+    1920,  1923,  1926,  1929,  1932,  1938,  1938,  1948,  1948,  1955,
+    1955,  1962,  1962,  1974,  1974,  1984,  1984,  1995,  1996,  2000,
+    2004,  2004,  2016,  2017,  2021,  2021,  2029,  2030,  2033,  2034,
+    2035,  2036,  2037,  2038,  2039,  2042,  2047,  2047,  2055,  2055,
+    2065,  2066,  2069,  2069,  2077,  2078,  2081,  2082,  2083,  2084,
+    2087,  2087,  2095,  2100,  2105
   };
 
   // Print the state stack on the debug stream.
@@ -4649,8 +4650,8 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp4_parser.yy" // lalr1.cc:1167
 } } // isc::dhcp
-#line 4653 "dhcp4_parser.cc" // lalr1.cc:1167
-#line 2103 "dhcp4_parser.yy" // lalr1.cc:1168
+#line 4654 "dhcp4_parser.cc" // lalr1.cc:1167
+#line 2110 "dhcp4_parser.yy" // lalr1.cc:1168
 
 
 void
index f5e0a12b9e40ed7927c067e80c875b2aba29d550..c7e972a12ba576a0b168523517bbcd691b05433c 100644 (file)
@@ -441,70 +441,71 @@ namespace isc { namespace dhcp {
         TOKEN_FLEX_ID = 348,
         TOKEN_RELAY = 349,
         TOKEN_IP_ADDRESS = 350,
-        TOKEN_HOOKS_LIBRARIES = 351,
-        TOKEN_LIBRARY = 352,
-        TOKEN_PARAMETERS = 353,
-        TOKEN_EXPIRED_LEASES_PROCESSING = 354,
-        TOKEN_RECLAIM_TIMER_WAIT_TIME = 355,
-        TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 356,
-        TOKEN_HOLD_RECLAIMED_TIME = 357,
-        TOKEN_MAX_RECLAIM_LEASES = 358,
-        TOKEN_MAX_RECLAIM_TIME = 359,
-        TOKEN_UNWARNED_RECLAIM_CYCLES = 360,
-        TOKEN_DHCP4O6_PORT = 361,
-        TOKEN_CONTROL_SOCKET = 362,
-        TOKEN_SOCKET_TYPE = 363,
-        TOKEN_SOCKET_NAME = 364,
-        TOKEN_DHCP_DDNS = 365,
-        TOKEN_ENABLE_UPDATES = 366,
-        TOKEN_QUALIFYING_SUFFIX = 367,
-        TOKEN_SERVER_IP = 368,
-        TOKEN_SERVER_PORT = 369,
-        TOKEN_SENDER_IP = 370,
-        TOKEN_SENDER_PORT = 371,
-        TOKEN_MAX_QUEUE_SIZE = 372,
-        TOKEN_NCR_PROTOCOL = 373,
-        TOKEN_NCR_FORMAT = 374,
-        TOKEN_ALWAYS_INCLUDE_FQDN = 375,
-        TOKEN_OVERRIDE_NO_UPDATE = 376,
-        TOKEN_OVERRIDE_CLIENT_UPDATE = 377,
-        TOKEN_REPLACE_CLIENT_NAME = 378,
-        TOKEN_GENERATED_PREFIX = 379,
-        TOKEN_TCP = 380,
-        TOKEN_JSON = 381,
-        TOKEN_WHEN_PRESENT = 382,
-        TOKEN_NEVER = 383,
-        TOKEN_ALWAYS = 384,
-        TOKEN_WHEN_NOT_PRESENT = 385,
-        TOKEN_LOGGING = 386,
-        TOKEN_LOGGERS = 387,
-        TOKEN_OUTPUT_OPTIONS = 388,
-        TOKEN_OUTPUT = 389,
-        TOKEN_DEBUGLEVEL = 390,
-        TOKEN_SEVERITY = 391,
-        TOKEN_FLUSH = 392,
-        TOKEN_MAXSIZE = 393,
-        TOKEN_MAXVER = 394,
-        TOKEN_DHCP6 = 395,
-        TOKEN_DHCPDDNS = 396,
-        TOKEN_CONTROL_AGENT = 397,
-        TOKEN_TOPLEVEL_JSON = 398,
-        TOKEN_TOPLEVEL_DHCP4 = 399,
-        TOKEN_SUB_DHCP4 = 400,
-        TOKEN_SUB_INTERFACES4 = 401,
-        TOKEN_SUB_SUBNET4 = 402,
-        TOKEN_SUB_POOL4 = 403,
-        TOKEN_SUB_RESERVATION = 404,
-        TOKEN_SUB_OPTION_DEFS = 405,
-        TOKEN_SUB_OPTION_DEF = 406,
-        TOKEN_SUB_OPTION_DATA = 407,
-        TOKEN_SUB_HOOKS_LIBRARY = 408,
-        TOKEN_SUB_DHCP_DDNS = 409,
-        TOKEN_SUB_LOGGING = 410,
-        TOKEN_STRING = 411,
-        TOKEN_INTEGER = 412,
-        TOKEN_FLOAT = 413,
-        TOKEN_BOOLEAN = 414
+        TOKEN_IP_ADDRESSES = 351,
+        TOKEN_HOOKS_LIBRARIES = 352,
+        TOKEN_LIBRARY = 353,
+        TOKEN_PARAMETERS = 354,
+        TOKEN_EXPIRED_LEASES_PROCESSING = 355,
+        TOKEN_RECLAIM_TIMER_WAIT_TIME = 356,
+        TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 357,
+        TOKEN_HOLD_RECLAIMED_TIME = 358,
+        TOKEN_MAX_RECLAIM_LEASES = 359,
+        TOKEN_MAX_RECLAIM_TIME = 360,
+        TOKEN_UNWARNED_RECLAIM_CYCLES = 361,
+        TOKEN_DHCP4O6_PORT = 362,
+        TOKEN_CONTROL_SOCKET = 363,
+        TOKEN_SOCKET_TYPE = 364,
+        TOKEN_SOCKET_NAME = 365,
+        TOKEN_DHCP_DDNS = 366,
+        TOKEN_ENABLE_UPDATES = 367,
+        TOKEN_QUALIFYING_SUFFIX = 368,
+        TOKEN_SERVER_IP = 369,
+        TOKEN_SERVER_PORT = 370,
+        TOKEN_SENDER_IP = 371,
+        TOKEN_SENDER_PORT = 372,
+        TOKEN_MAX_QUEUE_SIZE = 373,
+        TOKEN_NCR_PROTOCOL = 374,
+        TOKEN_NCR_FORMAT = 375,
+        TOKEN_ALWAYS_INCLUDE_FQDN = 376,
+        TOKEN_OVERRIDE_NO_UPDATE = 377,
+        TOKEN_OVERRIDE_CLIENT_UPDATE = 378,
+        TOKEN_REPLACE_CLIENT_NAME = 379,
+        TOKEN_GENERATED_PREFIX = 380,
+        TOKEN_TCP = 381,
+        TOKEN_JSON = 382,
+        TOKEN_WHEN_PRESENT = 383,
+        TOKEN_NEVER = 384,
+        TOKEN_ALWAYS = 385,
+        TOKEN_WHEN_NOT_PRESENT = 386,
+        TOKEN_LOGGING = 387,
+        TOKEN_LOGGERS = 388,
+        TOKEN_OUTPUT_OPTIONS = 389,
+        TOKEN_OUTPUT = 390,
+        TOKEN_DEBUGLEVEL = 391,
+        TOKEN_SEVERITY = 392,
+        TOKEN_FLUSH = 393,
+        TOKEN_MAXSIZE = 394,
+        TOKEN_MAXVER = 395,
+        TOKEN_DHCP6 = 396,
+        TOKEN_DHCPDDNS = 397,
+        TOKEN_CONTROL_AGENT = 398,
+        TOKEN_TOPLEVEL_JSON = 399,
+        TOKEN_TOPLEVEL_DHCP4 = 400,
+        TOKEN_SUB_DHCP4 = 401,
+        TOKEN_SUB_INTERFACES4 = 402,
+        TOKEN_SUB_SUBNET4 = 403,
+        TOKEN_SUB_POOL4 = 404,
+        TOKEN_SUB_RESERVATION = 405,
+        TOKEN_SUB_OPTION_DEFS = 406,
+        TOKEN_SUB_OPTION_DEF = 407,
+        TOKEN_SUB_OPTION_DATA = 408,
+        TOKEN_SUB_HOOKS_LIBRARY = 409,
+        TOKEN_SUB_DHCP_DDNS = 410,
+        TOKEN_SUB_LOGGING = 411,
+        TOKEN_STRING = 412,
+        TOKEN_INTEGER = 413,
+        TOKEN_FLOAT = 414,
+        TOKEN_BOOLEAN = 415
       };
     };
 
@@ -995,6 +996,10 @@ namespace isc { namespace dhcp {
     symbol_type
     make_IP_ADDRESS (const location_type& l);
 
+    static inline
+    symbol_type
+    make_IP_ADDRESSES (const location_type& l);
+
     static inline
     symbol_type
     make_HOOKS_LIBRARIES (const location_type& l);
@@ -1456,12 +1461,12 @@ namespace isc { namespace dhcp {
     enum
     {
       yyeof_ = 0,
-      yylast_ = 933,     ///< Last index in yytable_.
-      yynnts_ = 352,  ///< Number of nonterminal symbols.
+      yylast_ = 935,     ///< Last index in yytable_.
+      yynnts_ = 353,  ///< Number of nonterminal symbols.
       yyfinal_ = 28, ///< Termination state number.
       yyterror_ = 1,
       yyerrcode_ = 256,
-      yyntokens_ = 160  ///< Number of tokens.
+      yyntokens_ = 161  ///< Number of tokens.
     };
 
 
@@ -1519,9 +1524,9 @@ namespace isc { namespace dhcp {
      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
      145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159
+     155,   156,   157,   158,   159,   160
     };
-    const unsigned int user_token_number_max_ = 414;
+    const unsigned int user_token_number_max_ = 415;
     const token_number_type undef_token_ = 2;
 
     if (static_cast<int>(t) <= yyeof_)
@@ -1554,30 +1559,30 @@ namespace isc { namespace dhcp {
   {
       switch (other.type_get ())
     {
-      case 175: // value
-      case 179: // map_value
-      case 217: // socket_type
-      case 220: // outbound_interface_value
-      case 236: // db_type
-      case 320: // hr_mode
-      case 467: // ncr_protocol_value
-      case 475: // replace_client_name_value
+      case 176: // value
+      case 180: // map_value
+      case 218: // socket_type
+      case 221: // outbound_interface_value
+      case 237: // db_type
+      case 321: // hr_mode
+      case 469: // ncr_protocol_value
+      case 477: // replace_client_name_value
         value.copy< ElementPtr > (other.value);
         break;
 
-      case 159: // "boolean"
+      case 160: // "boolean"
         value.copy< bool > (other.value);
         break;
 
-      case 158: // "floating point"
+      case 159: // "floating point"
         value.copy< double > (other.value);
         break;
 
-      case 157: // "integer"
+      case 158: // "integer"
         value.copy< int64_t > (other.value);
         break;
 
-      case 156: // "constant string"
+      case 157: // "constant string"
         value.copy< std::string > (other.value);
         break;
 
@@ -1598,30 +1603,30 @@ namespace isc { namespace dhcp {
     (void) v;
       switch (this->type_get ())
     {
-      case 175: // value
-      case 179: // map_value
-      case 217: // socket_type
-      case 220: // outbound_interface_value
-      case 236: // db_type
-      case 320: // hr_mode
-      case 467: // ncr_protocol_value
-      case 475: // replace_client_name_value
+      case 176: // value
+      case 180: // map_value
+      case 218: // socket_type
+      case 221: // outbound_interface_value
+      case 237: // db_type
+      case 321: // hr_mode
+      case 469: // ncr_protocol_value
+      case 477: // replace_client_name_value
         value.copy< ElementPtr > (v);
         break;
 
-      case 159: // "boolean"
+      case 160: // "boolean"
         value.copy< bool > (v);
         break;
 
-      case 158: // "floating point"
+      case 159: // "floating point"
         value.copy< double > (v);
         break;
 
-      case 157: // "integer"
+      case 158: // "integer"
         value.copy< int64_t > (v);
         break;
 
-      case 156: // "constant string"
+      case 157: // "constant string"
         value.copy< std::string > (v);
         break;
 
@@ -1701,30 +1706,30 @@ namespace isc { namespace dhcp {
     // Type destructor.
     switch (yytype)
     {
-      case 175: // value
-      case 179: // map_value
-      case 217: // socket_type
-      case 220: // outbound_interface_value
-      case 236: // db_type
-      case 320: // hr_mode
-      case 467: // ncr_protocol_value
-      case 475: // replace_client_name_value
+      case 176: // value
+      case 180: // map_value
+      case 218: // socket_type
+      case 221: // outbound_interface_value
+      case 237: // db_type
+      case 321: // hr_mode
+      case 469: // ncr_protocol_value
+      case 477: // replace_client_name_value
         value.template destroy< ElementPtr > ();
         break;
 
-      case 159: // "boolean"
+      case 160: // "boolean"
         value.template destroy< bool > ();
         break;
 
-      case 158: // "floating point"
+      case 159: // "floating point"
         value.template destroy< double > ();
         break;
 
-      case 157: // "integer"
+      case 158: // "integer"
         value.template destroy< int64_t > ();
         break;
 
-      case 156: // "constant string"
+      case 157: // "constant string"
         value.template destroy< std::string > ();
         break;
 
@@ -1751,30 +1756,30 @@ namespace isc { namespace dhcp {
     super_type::move(s);
       switch (this->type_get ())
     {
-      case 175: // value
-      case 179: // map_value
-      case 217: // socket_type
-      case 220: // outbound_interface_value
-      case 236: // db_type
-      case 320: // hr_mode
-      case 467: // ncr_protocol_value
-      case 475: // replace_client_name_value
+      case 176: // value
+      case 180: // map_value
+      case 218: // socket_type
+      case 221: // outbound_interface_value
+      case 237: // db_type
+      case 321: // hr_mode
+      case 469: // ncr_protocol_value
+      case 477: // replace_client_name_value
         value.move< ElementPtr > (s.value);
         break;
 
-      case 159: // "boolean"
+      case 160: // "boolean"
         value.move< bool > (s.value);
         break;
 
-      case 158: // "floating point"
+      case 159: // "floating point"
         value.move< double > (s.value);
         break;
 
-      case 157: // "integer"
+      case 158: // "integer"
         value.move< int64_t > (s.value);
         break;
 
-      case 156: // "constant string"
+      case 157: // "constant string"
         value.move< std::string > (s.value);
         break;
 
@@ -1848,7 +1853,8 @@ namespace isc { namespace dhcp {
      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,   406,   407,   408,   409,   410,   411,   412,   413,   414
+     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
+     415
     };
     return static_cast<token_type> (yytoken_number_[type]);
   }
@@ -2417,6 +2423,12 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_IP_ADDRESS, l);
   }
 
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_IP_ADDRESSES (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_IP_ADDRESSES, l);
+  }
+
   Dhcp4Parser::symbol_type
   Dhcp4Parser::make_HOOKS_LIBRARIES (const location_type& l)
   {
@@ -2804,7 +2816,7 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp4_parser.yy" // lalr1.cc:377
 } } // isc::dhcp
-#line 2808 "dhcp4_parser.h" // lalr1.cc:377
+#line 2820 "dhcp4_parser.h" // lalr1.cc:377
 
 
 
index 8606eb1e6a0f2d464164328cefd8ad1903c213c7..555cb965f3465654f944fd5e3748c4ea6a0878af 100644 (file)
@@ -145,6 +145,7 @@ using namespace std;
 
   RELAY "relay"
   IP_ADDRESS "ip-address"
+  IP_ADDRESSES "ip-addresses"
 
   HOOKS_LIBRARIES "hooks-libraries"
   LIBRARY "library"
@@ -1586,6 +1587,16 @@ ip_address: IP_ADDRESS {
     ctx.leave();
 };
 
+ip_addresses: IP_ADDRESSES {
+    ElementPtr l(new ListElement(ctx.loc2pos(@1)));
+    ctx.stack_.back()->set("ip-addresses", l);
+    ctx.stack_.push_back(l);
+    ctx.enter(ctx.NO_KEYWORD);
+} COLON list_strings {
+    ctx.stack_.pop_back();
+    ctx.leave();
+};
+
 duid: DUID {
     ctx.enter(ctx.NO_KEYWORD);
 } COLON STRING {
@@ -1657,13 +1668,9 @@ relay: RELAY {
     ctx.leave();
 };
 
-relay_map: IP_ADDRESS {
-    ctx.enter(ctx.NO_KEYWORD);
-} COLON STRING {
-    ElementPtr ip(new StringElement($4, ctx.loc2pos(@4)));
-    ctx.stack_.back()->set("ip-address", ip);
-    ctx.leave();
-};
+relay_map: ip_address
+         | ip_addresses
+         ;
 
 // --- end of relay definitions ------------------------------
 
index 5bbfc189fc2aad5f5c6768d0f35a56341c67f590..7e23a2ccac4e6235bff281bd9ffdb2365482b554 100644 (file)
@@ -1,4 +1,3 @@
-// Generated 201804111443
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Locations for Bison parsers in C++
index 478d2535d58b0be3bf0c0b80a582b18d81bae110..c60fabbdf87798eaaf77c5d851308166f1c29ecc 100644 (file)
@@ -1,4 +1,3 @@
-// Generated 201804111443
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Positions for Bison parsers in C++
index ca204fb6e9ab775fdb9e2994d35b44304e0c287a..3dd2a2a3934851424d45b935573ab2e9e83f07a8 100644 (file)
@@ -1,4 +1,3 @@
-// Generated 201804111443
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Stack handling for Bison parsers in C++
index 61fc5ffbfef5d895609d1914b233512502f899f0..1e175c598ce034014574fdc6c60164a0ec0de29a 100644 (file)
@@ -260,7 +260,7 @@ public:
     void checkResult(ConstElementPtr status, int expected_code) {
         ASSERT_TRUE(status);
         comment_ = parseAnswer(rcode_, status);
-        EXPECT_EQ(expected_code, rcode_);
+        EXPECT_EQ(expected_code, rcode_) << "error text:" << comment_->stringValue();
     }
 
     /// @brief Convenience method for running configuration
@@ -1377,7 +1377,7 @@ TEST_F(Dhcp4ParserTest, nextServerOverride) {
         "\"renew-timer\": 1000, "
         "\"next-server\": \"192.0.0.1\", "
         "\"server-hostname\": \"nohost\","
-        "\"boot-file-name\": \"nofile\","        
+        "\"boot-file-name\": \"nofile\","
         "\"subnet4\": [ { "
         "    \"pools\": [ { \"pool\": \"192.0.2.1 - 192.0.2.100\" } ],"
         "    \"next-server\": \"1.2.3.4\", "
@@ -4089,9 +4089,50 @@ TEST_F(Dhcp4ParserTest, subnetRelayInfo) {
     Subnet4Ptr subnet = CfgMgr::instance().getStagingCfg()->
         getCfgSubnets4()->selectSubnet(IOAddress("192.0.2.200"));
     ASSERT_TRUE(subnet);
-    EXPECT_EQ("192.0.2.123", subnet->getRelayInfo().addr_.toText());
+
+    EXPECT_TRUE(subnet->hasRelays());
+    EXPECT_TRUE(subnet->hasRelayAddress(IOAddress("192.0.2.123")));
+}
+
+// This test checks if it is possible to specify a list of relays
+TEST_F(Dhcp4ParserTest, subnetRelayInfoList) {
+
+    ConstElementPtr status;
+
+    // A config with relay information.
+    string config = "{ " + genIfaceConfig() + "," +
+        "\"rebind-timer\": 2000, "
+        "\"renew-timer\": 1000, "
+        "\"subnet4\": [ { "
+        "    \"pools\": [ { \"pool\": \"192.0.2.1 - 192.0.2.100\" } ],"
+        "    \"renew-timer\": 1, "
+        "    \"rebind-timer\": 2, "
+        "    \"valid-lifetime\": 4,"
+        "    \"relay\": { "
+        "        \"ip-addresses\": [ \"192.0.2.123\", \"192.0.2.124\" ]"
+        "    },"
+        "    \"subnet\": \"192.0.2.0/24\" } ],"
+        "\"valid-lifetime\": 4000 }";
+
+    ConstElementPtr json;
+    ASSERT_NO_THROW(json = parseDHCP4(config));
+    extractConfig(config);
+
+    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+
+    // returned value should be 0 (configuration success)
+    checkResult(status, 0);
+
+    Subnet4Ptr subnet = CfgMgr::instance().getStagingCfg()->
+        getCfgSubnets4()->selectSubnet(IOAddress("192.0.2.200"));
+    ASSERT_TRUE(subnet);
+
+    EXPECT_TRUE(subnet->hasRelays());
+    EXPECT_TRUE(subnet->hasRelayAddress(IOAddress("192.0.2.123")));
+    EXPECT_TRUE(subnet->hasRelayAddress(IOAddress("192.0.2.124")));
 }
 
+
 // Goal of this test is to verify that multiple subnets can be configured
 // with defined client classes.
 TEST_F(Dhcp4ParserTest, classifySubnets) {
@@ -5652,7 +5693,7 @@ TEST_F(Dhcp4ParserTest, sharedNetworksDerive) {
     EXPECT_EQ(IOAddress("1.2.3.4"), s->getSiaddr());
     EXPECT_EQ("foo", s->getSname());
     EXPECT_EQ("bar", s->getFilename());
-    EXPECT_EQ(IOAddress("5.6.7.8"), s->getRelayInfo().addr_);
+    EXPECT_TRUE(s->hasRelayAddress(IOAddress("5.6.7.8")));
     EXPECT_EQ(Network::HR_OUT_OF_POOL, s->getHostReservationMode());
 
     // For the second subnet, the renew-timer should be 100, because it
@@ -5667,7 +5708,7 @@ TEST_F(Dhcp4ParserTest, sharedNetworksDerive) {
     EXPECT_EQ(IOAddress("11.22.33.44"), s->getSiaddr());
     EXPECT_EQ("some-name.example.org", s->getSname());
     EXPECT_EQ("bootfile.efi", s->getFilename());
-    EXPECT_EQ(IOAddress("55.66.77.88"), s->getRelayInfo().addr_);
+    EXPECT_TRUE(s->hasRelayAddress(IOAddress("55.66.77.88")));
     EXPECT_EQ(Network::HR_DISABLED, s->getHostReservationMode());
 
     // Ok, now check the second shared subnet.
@@ -5686,7 +5727,7 @@ TEST_F(Dhcp4ParserTest, sharedNetworksDerive) {
     EXPECT_EQ(IOAddress("0.0.0.0"), s->getSiaddr());
     EXPECT_TRUE(s->getSname().empty());
     EXPECT_TRUE(s->getFilename().empty());
-    EXPECT_EQ(IOAddress("0.0.0.0"), s->getRelayInfo().addr_);
+    EXPECT_FALSE(s->hasRelays());
     EXPECT_EQ(Network::HR_ALL, s->getHostReservationMode());
 }
 
index 6cca3383df85ffb456d0ca8f77496e7be2ee3e3d..064d61909d997728b62386b6fb2682e28bf78c4c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2017-2018 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -1196,6 +1196,32 @@ const char* EXTRACTED_CONFIGS[] = {
 "        \"renew-timer\": 1000,\n"
 "        \"subnet4\": [\n"
 "            {\n"
+"                \"pools\": [\n"
+"                    {\n"
+"                        \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
+"                    }\n"
+"                ],\n"
+"                \"rebind-timer\": 2,\n"
+"                \"relay\": {\n"
+"                    \"ip-addresses\": [ \"192.0.2.123\", \"192.0.2.124\" ]\n"
+"                },\n"
+"                \"renew-timer\": 1,\n"
+"                \"subnet\": \"192.0.2.0/24\",\n"
+"                \"valid-lifetime\": 4\n"
+"            }\n"
+"        ],\n"
+"        \"valid-lifetime\": 4000\n"
+"    }\n",
+    // CONFIGURATION 42
+"{\n"
+"        \"interfaces-config\": {\n"
+"            \"interfaces\": [ \"*\" ],\n"
+"            \"re-detect\": false\n"
+"        },\n"
+"        \"rebind-timer\": 2000,\n"
+"        \"renew-timer\": 1000,\n"
+"        \"subnet4\": [\n"
+"            {\n"
 "                \"client-class\": \"alpha\",\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -1233,7 +1259,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 42
+    // CONFIGURATION 43
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1265,7 +1291,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 43
+    // CONFIGURATION 44
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1364,7 +1390,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 44
+    // CONFIGURATION 45
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1406,7 +1432,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 45
+    // CONFIGURATION 46
 "{\n"
 "        \"rebind-timer\": 2000,\n"
 "        \"renew-timer\": 1000,\n"
@@ -1449,7 +1475,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 46
+    // CONFIGURATION 47
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1457,7 +1483,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        },\n"
 "        \"subnet4\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 47
+    // CONFIGURATION 48
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1465,7 +1491,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        },\n"
 "        \"subnet4\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 48
+    // CONFIGURATION 49
 "{\n"
 "        \"decline-probation-period\": 12345,\n"
 "        \"interfaces-config\": {\n"
@@ -1474,7 +1500,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        },\n"
 "        \"subnet4\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 49
+    // CONFIGURATION 50
 "{\n"
 "        \"expired-leases-processing\": {\n"
 "            \"flush-reclaimed-timer-wait-time\": 35,\n"
@@ -1490,7 +1516,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        },\n"
 "        \"subnet4\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 50
+    // CONFIGURATION 51
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1510,7 +1536,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 51
+    // CONFIGURATION 52
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1531,7 +1557,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 52
+    // CONFIGURATION 53
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1552,7 +1578,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 53
+    // CONFIGURATION 54
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1574,7 +1600,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 54
+    // CONFIGURATION 55
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1595,7 +1621,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 55
+    // CONFIGURATION 56
 "{\n"
 "        \"client-classes\": [\n"
 "            {\n"
@@ -1626,7 +1652,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 56
+    // CONFIGURATION 57
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1646,7 +1672,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 57
+    // CONFIGURATION 58
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1667,7 +1693,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 58
+    // CONFIGURATION 59
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1692,7 +1718,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 59
+    // CONFIGURATION 60
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1717,7 +1743,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 60
+    // CONFIGURATION 61
 "{\n"
 "        \"hosts-databases\": [\n"
 "            {\n"
@@ -1741,7 +1767,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        \"renew-timer\": 1000,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 61
+    // CONFIGURATION 62
 "{\n"
 "        \"comment\": \"A DHCPv4 server\",\n"
 "        \"client-classes\": [\n"
@@ -1932,7 +1958,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 900,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2002,7 +2028,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 1800,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2072,7 +2098,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2142,7 +2168,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2168,7 +2194,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2194,7 +2220,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2220,7 +2246,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2290,7 +2316,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2316,7 +2342,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2342,7 +2368,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2368,7 +2394,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2438,7 +2464,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2508,7 +2534,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2578,7 +2604,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2648,7 +2674,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2718,7 +2744,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2788,7 +2814,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2814,7 +2840,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2884,7 +2910,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2910,7 +2936,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2980,7 +3006,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -3054,7 +3080,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -3084,7 +3110,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -3154,7 +3180,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -3621,7 +3647,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -3708,7 +3734,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -3805,7 +3831,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4007,7 +4033,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4103,7 +4129,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4182,7 +4208,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4217,7 +4243,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4304,7 +4330,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4396,7 +4422,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4483,7 +4509,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4676,7 +4702,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4761,7 +4787,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4850,7 +4876,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5006,7 +5032,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5076,7 +5102,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"192.0.2.123\"\n"
+"                    \"ip-addresses\": [ \"192.0.2.123\" ]\n"
 "                },\n"
 "                \"renew-timer\": 1,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5134,6 +5160,76 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-interface-id\": \"\",\n"
 "                \"4o6-subnet\": \"\",\n"
 "                \"boot-file-name\": \"\",\n"
+"                \"id\": 1,\n"
+"                \"match-client-id\": true,\n"
+"                \"next-server\": \"0.0.0.0\",\n"
+"                \"option-data\": [ ],\n"
+"                \"pools\": [\n"
+"                    {\n"
+"                        \"option-data\": [ ],\n"
+"                        \"pool\": \"192.0.2.1-192.0.2.100\"\n"
+"                    }\n"
+"                ],\n"
+"                \"rebind-timer\": 2,\n"
+"                \"relay\": {\n"
+"                    \"ip-addresses\": [ \"192.0.2.123\", \"192.0.2.124\" ]\n"
+"                },\n"
+"                \"renew-timer\": 1,\n"
+"                \"reservation-mode\": \"all\",\n"
+"                \"reservations\": [ ],\n"
+"                \"server-hostname\": \"\",\n"
+"                \"subnet\": \"192.0.2.0/24\",\n"
+"                \"valid-lifetime\": 4\n"
+"            }\n"
+"        ]\n"
+"    }\n",
+    // CONFIGURATION 42
+"{\n"
+"        \"decline-probation-period\": 86400,\n"
+"        \"dhcp-ddns\": {\n"
+"            \"always-include-fqdn\": false,\n"
+"            \"enable-updates\": false,\n"
+"            \"generated-prefix\": \"myhost\",\n"
+"            \"max-queue-size\": 1024,\n"
+"            \"ncr-format\": \"JSON\",\n"
+"            \"ncr-protocol\": \"UDP\",\n"
+"            \"override-client-update\": false,\n"
+"            \"override-no-update\": false,\n"
+"            \"qualifying-suffix\": \"\",\n"
+"            \"replace-client-name\": \"never\",\n"
+"            \"sender-ip\": \"0.0.0.0\",\n"
+"            \"sender-port\": 0,\n"
+"            \"server-ip\": \"127.0.0.1\",\n"
+"            \"server-port\": 53001\n"
+"        },\n"
+"        \"dhcp4o6-port\": 0,\n"
+"        \"echo-client-id\": true,\n"
+"        \"expired-leases-processing\": {\n"
+"            \"flush-reclaimed-timer-wait-time\": 25,\n"
+"            \"hold-reclaimed-time\": 3600,\n"
+"            \"max-reclaim-leases\": 100,\n"
+"            \"max-reclaim-time\": 250,\n"
+"            \"reclaim-timer-wait-time\": 10,\n"
+"            \"unwarned-reclaim-cycles\": 5\n"
+"        },\n"
+"        \"hooks-libraries\": [ ],\n"
+"        \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
+"        \"interfaces-config\": {\n"
+"            \"interfaces\": [ \"*\" ],\n"
+"            \"re-detect\": false\n"
+"        },\n"
+"        \"lease-database\": {\n"
+"            \"type\": \"memfile\"\n"
+"        },\n"
+"        \"option-data\": [ ],\n"
+"        \"option-def\": [ ],\n"
+"        \"shared-networks\": [ ],\n"
+"        \"subnet4\": [\n"
+"            {\n"
+"                \"4o6-interface\": \"\",\n"
+"                \"4o6-interface-id\": \"\",\n"
+"                \"4o6-subnet\": \"\",\n"
+"                \"boot-file-name\": \"\",\n"
 "                \"client-class\": \"alpha\",\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
@@ -5147,7 +5243,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5174,7 +5270,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5201,7 +5297,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5227,7 +5323,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5238,7 +5334,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 42
+    // CONFIGURATION 43
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5312,7 +5408,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5323,7 +5419,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 43
+    // CONFIGURATION 44
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5382,7 +5478,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5408,7 +5504,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5489,7 +5585,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5548,7 +5644,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 44
+    // CONFIGURATION 45
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5617,7 +5713,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5648,7 +5744,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 45
+    // CONFIGURATION 46
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5707,7 +5803,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5733,7 +5829,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"out-of-pool\",\n"
@@ -5759,7 +5855,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"disabled\",\n"
@@ -5785,7 +5881,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5796,7 +5892,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 46
+    // CONFIGURATION 47
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5839,7 +5935,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"shared-networks\": [ ],\n"
 "        \"subnet4\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 47
+    // CONFIGURATION 48
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5882,7 +5978,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"shared-networks\": [ ],\n"
 "        \"subnet4\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 48
+    // CONFIGURATION 49
 "{\n"
 "        \"decline-probation-period\": 12345,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5925,7 +6021,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"shared-networks\": [ ],\n"
 "        \"subnet4\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 49
+    // CONFIGURATION 50
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5968,7 +6064,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"shared-networks\": [ ],\n"
 "        \"subnet4\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 50
+    // CONFIGURATION 51
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -6027,7 +6123,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -6038,7 +6134,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 51
+    // CONFIGURATION 52
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -6097,7 +6193,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -6108,7 +6204,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 52
+    // CONFIGURATION 53
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -6167,7 +6263,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -6178,7 +6274,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 53
+    // CONFIGURATION 54
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -6237,7 +6333,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -6248,7 +6344,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 54
+    // CONFIGURATION 55
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -6307,7 +6403,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -6318,7 +6414,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 55
+    // CONFIGURATION 56
 "{\n"
 "        \"client-classes\": [\n"
 "            {\n"
@@ -6403,7 +6499,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -6414,7 +6510,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 56
+    // CONFIGURATION 57
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -6473,7 +6569,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -6484,7 +6580,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 57
+    // CONFIGURATION 58
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -6544,7 +6640,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -6555,7 +6651,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 58
+    // CONFIGURATION 59
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -6619,7 +6715,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -6630,7 +6726,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 59
+    // CONFIGURATION 60
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -6694,7 +6790,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                ],\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -6705,7 +6801,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 60
+    // CONFIGURATION 61
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -6762,7 +6858,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"shared-networks\": [ ],\n"
 "        \"subnet4\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 61
+    // CONFIGURATION 62
 "{\n"
 "        \"comment\": \"A DHCPv4 server\",\n"
 "        \"client-classes\": [\n"
@@ -6871,7 +6967,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"option-data\": [ ],\n"
 "                \"rebind-timer\": 0,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"0.0.0.0\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 0,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -6895,7 +6991,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                        ],\n"
 "                        \"rebind-timer\": 1800,\n"
 "                        \"relay\": {\n"
-"                            \"ip-address\": \"0.0.0.0\"\n"
+"                            \"ip-addresses\": [ ]\n"
 "                        },\n"
 "                        \"renew-timer\": 900,\n"
 "                        \"reservation-mode\": \"all\",\n"
@@ -7175,12 +7271,17 @@ TEST_P(Dhcp4GetConfigTest, run) {
         ASSERT_NO_THROW(outputFormatted(dhcp->str()));
     } else {
         expected = UNPARSED_CONFIGS[config_counter];
+        // get the expected config using the dhcpv4 syntax parser
         ElementPtr jsond;
         ASSERT_NO_THROW(jsond = parseDHCP4(expected, true));
         ElementPtr jsonj;
+        // get the expected config using the generic JSON syntax parser
         ASSERT_NO_THROW(jsonj = parseJSON(expected));
-        EXPECT_TRUE(isEquivalent(dhcp, jsonj));
+        // the generic JSON parser does not handle comments
         EXPECT_TRUE(isEquivalent(jsond, moveComments(jsonj)));
+        // check that unparsed and expected values match
+        EXPECT_TRUE(isEquivalent(dhcp, jsonj));
+        // check on pretty prints too
         std::string current = prettyPrint(dhcp, 4, 4) + "\n";
         EXPECT_EQ(expected, current);
         if (expected != current) {
index e53cccdeebd965696546710e4515e26b29c6f2f2..291696d580d06209a4adb937b87134f60c30c91d 100644 (file)
@@ -1,4 +1,3 @@
-// Generated 201804111443
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Locations for Bison parsers in C++
index 4dda707c42f07529ccd547e30c65ca705f9c2b03..6d547f27460432a096949f45225629e231ab72c5 100644 (file)
@@ -1,4 +1,3 @@
-// Generated 201804111443
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Positions for Bison parsers in C++
index f57b7ff5b2b551dbf2b523af40340bd066823ec0..e0d2dfe10ffb954546fe71bea6738fb72e7a5c77 100644 (file)
@@ -1,4 +1,3 @@
-// Generated 201804111443
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Stack handling for Bison parsers in C++