Index: configure
===================================================================
--- configure	(revision 1)
+++ configure	(revision 114)
@@ -11086,7 +11086,7 @@
 if test "${with_nicklen+set}" = set; then
   withval=$with_nicklen; NICKLEN="$withval"
 else
-  NICKLEN="9"
+  NICKLEN="30"
 fi
 
 
@@ -11103,7 +11103,7 @@
  fi
 
 else
-  TOPICLEN=160
+  TOPICLEN=390
 fi
 
 
Index: include/s_user.h
===================================================================
--- include/s_user.h	(revision 1)
+++ include/s_user.h	(revision 114)
@@ -40,7 +40,7 @@
 extern unsigned int user_modes[];
 
 extern void assemble_umode_buffer(void);
-extern void set_user_mode(struct Client *, struct Client *, int, char **);
+extern void set_user_mode(struct Client *, struct Client *, int, char **, int);
 extern void send_umode(struct Client *, struct Client *,
                        unsigned int, unsigned int, char *);
 extern void send_umode_out(struct Client *, struct Client *, unsigned int);
Index: include/defaults.h
===================================================================
--- include/defaults.h	(revision 1)
+++ include/defaults.h	(revision 114)
@@ -105,8 +105,9 @@
 #define TS_WARN_DELTA_DEFAULT 30        /* default for ts_warn_delta */
 
 /* ServerInfo default values */
-#define NETWORK_NAME_DEFAULT "EFnet"             /* default for network_name */
-#define NETWORK_DESC_DEFAULT "Eris Free Network" /* default for network_desc */
+#define NETWORK_NAME_DEFAULT "NoNetwork"             /* default for network_name */
+#define NETWORK_DESC_DEFAULT "Default network" /* default for network_desc */
+#define HELP_CHANNEL_DEFAULT "#irchelp"            /* default for help_channel */
 
 /* General defaults */
 #define MAXIMUM_LINKS_DEFAULT 0         /* default for maximum_links */
Index: include/s_conf.h
===================================================================
--- include/s_conf.h	(revision 1)
+++ include/s_conf.h	(revision 114)
@@ -62,7 +62,8 @@
   GLINE_TYPE,
   CRESV_TYPE,     
   NRESV_TYPE,
-  GDENY_TYPE
+  GDENY_TYPE,
+  WEBIRC_TYPE
 } ConfType;
 
 struct split_nuh_item
@@ -196,6 +197,7 @@
 #define CONF_ULINE              0x00002000
 #define CONF_EXEMPTDLINE        0x00004000
 #define CONF_GLINE              0x00008000
+#define CONF_WEBIRC             0x00010000
 
 #define CONF_SERVER_MASK       CONF_SERVER
 #define CONF_CLIENT_MASK       (CONF_CLIENT | CONF_OPERATOR | CONF_SERVER_MASK)
@@ -306,10 +308,11 @@
 #define SHARED_TRESV		0x0080
 #define SHARED_UNRESV		0x0100
 #define SHARED_LOCOPS           0x0200
+#define SHARED_USERMODE     0x0400
 #define SHARED_ALL		(SHARED_KLINE | SHARED_TKLINE | SHARED_UNKLINE | \
 				 SHARED_XLINE | SHARED_TXLINE | SHARED_UNXLINE | \
 				 SHARED_RESV | SHARED_TRESV | SHARED_UNRESV |\
-                                 SHARED_LOCOPS)
+                                 SHARED_LOCOPS | SHARED_USERMODE)
 
 /* gline acl entry actions */
 #define GDENY_BLOCK		0x1
@@ -434,6 +437,8 @@
   char *description;
   char *network_name;
   char *network_desc;
+  char *services_name;
+  char *help_channel;
 #ifdef HAVE_LIBCRYPTO
   char *rsa_private_key_file;
   RSA *rsa_private_key;
Index: include/channel_mode.h
===================================================================
--- include/channel_mode.h	(revision 1)
+++ include/channel_mode.h	(revision 114)
@@ -28,7 +28,7 @@
 
 #include "ircd_defs.h"        /* buffer sizes */
 
-#define MODEBUFLEN    200
+#define MODEBUFLEN   200
 
 /* Maximum mode changes allowed per client, per server is different */
 #define MAXMODEPARAMS 4
@@ -55,6 +55,11 @@
 #define MODE_TOPICLIMIT 0x0008
 #define MODE_INVITEONLY 0x0010
 #define MODE_NOPRIVMSGS 0x0020
+#define MODE_REGONLY    0x0040      /* only identified users may join */
+#define MODE_REGMOD     0x0080      /* only identified users may speak */
+#define MODE_REGISTERED 0x0100      /* registered with services */
+#define MODE_COLORLESS  0x0200      /* no colors, bold, or italics */
+#define MODE_OPERONLY   0x0400      /* only opers may join/msg */
 
 /* cache flags for silence on ban */
 #define CHFL_BAN_CHECKED  0x0080
@@ -75,6 +80,7 @@
 /* knock is forbidden, halfops can't kick/deop other halfops.
  * +pi means paranoid and will generate notices on each invite */
 #define PrivateChannel(x)       (((x)->mode.mode & MODE_PRIVATE))
+#define RegisteredChannel(x)    (((x)->mode.mode & MODE_REGISTERED))
 
 struct ChModeChange
 {
Index: include/client.h
===================================================================
--- include/client.h	(revision 1)
+++ include/client.h	(revision 114)
@@ -173,7 +173,7 @@
   dlink_list	on_allow_list;	/* clients that have =me= on their allow list*/
 
   dlink_list     channel;   /* chain of channel pointer blocks */
-
+  
   struct LocalUser *localClient;
 };
 
@@ -292,9 +292,15 @@
 #define IsServer(x)             ((x)->status == STAT_SERVER)
 #define IsClient(x)             ((x)->status == STAT_CLIENT)
 
+#define IsServicesAdmin(x) ((x)->umodes & UMODE_SVCSADMIN)
 #define IsOper(x)		((x)->umodes & UMODE_OPER)
 #define IsAdmin(x)		((x)->umodes & UMODE_ADMIN)
 
+#define IsService(x)    \
+          ((ServerInfo.services_name != NULL && \
+           ((IsServer(x) && strcmp(x->name, ServerInfo.services_name) == 0) || \
+            (IsClient(x) && strcmp(x->servptr->name, ServerInfo.services_name) == 0))))
+
 #define SetConnecting(x)        {(x)->status = STAT_CONNECTING; \
 				 (x)->handler = UNREGISTERED_HANDLER; }
 
@@ -346,7 +352,7 @@
 #define FLAGS_CRYPTOUT      0x00000200 /* outgoing data must be encrypted          */
 #define FLAGS_WAITAUTH      0x00000400 /* waiting for CRYPTLINK AUTH command       */
 #define FLAGS_SERVLINK      0x00000800 /* servlink has servlink process            */
-#define FLAGS_MARK	    0x00001000 /* marked client                            */
+#define FLAGS_MARK	        0x00001000 /* marked client                            */
 #define FLAGS_CANFLOOD	    0x00002000 /* client has the ability to flood          */
 #define FLAGS_EXEMPTGLINE   0x00004000 /* client can't be G-lined                  */
 #define FLAGS_EXEMPTKLINE   0x00008000 /* client is exempt from kline              */
@@ -367,7 +373,6 @@
 #define FLAGS_PINGWARNING   0x40000000 /* unreplied ping warning already sent      */
 #define FLAGS_FINISHED_AUTH 0x80000000 /* Client has been released from auth       */
 
-
 /* umodes, settable flags */
 #define UMODE_SERVNOTICE   0x00000001 /* server notices such as kill */
 #define UMODE_CCONN        0x00000002 /* Client Connections */
@@ -388,15 +393,18 @@
 #define UMODE_LOCOPS       0x00010000 /* show locops */
 #define UMODE_DEAF         0x00020000 /* don't receive channel messages */
 #define UMODE_CCONN_FULL   0x00040000 /* add unused fields to connection monitoring */
+#define UMODE_REGNICK      0x00080000 /* registered and identified with services */
+#define UMODE_REGONLY      0x00100000 /* only identified users can speak to me */
 
 /* user information flags, only settable by remote mode or local oper */
+#define UMODE_SVCSADMIN    0x20000000 /* Services administrator */
 #define UMODE_OPER         0x40000000 /* Operator */
-#define UMODE_ADMIN        0x80000000 /* Admin on server */ 
+#define UMODE_ADMIN        0x80000000 /* Admin on server */
 
 #define UMODE_ALL	   UMODE_SERVNOTICE
 
 #define SEND_UMODES  (UMODE_INVISIBLE | UMODE_OPER | UMODE_WALLOP | \
-                      UMODE_ADMIN)
+                      UMODE_ADMIN | UMODE_REGNICK | UMODE_REGONLY | UMODE_SVCSADMIN)
 
 
 /* oper priv flags */
@@ -409,12 +417,13 @@
 #define OPER_FLAG_X            0x00000040 /* oper can xline              */
 #define OPER_FLAG_DIE          0x00000080 /* oper can die                */
 #define OPER_FLAG_REHASH       0x00000100 /* oper can rehash             */
-#define OPER_FLAG_ADMIN        0x00000200 /* oper can set umode +a       */
+#define OPER_FLAG_ADMIN        0x00000200 /* oper can set umode +A       */
 #define OPER_FLAG_HIDDEN_ADMIN 0x00000400 /* admin is hidden             */
 #define OPER_FLAG_OPERWALL     0x00000800 /* */
 #define OPER_FLAG_OPER_SPY     0x00001000 /* */
 #define OPER_FLAG_REMOTEBAN    0x00002000 /* */
 #define OPER_FLAG_HIDDEN_OPER  0x00004000 /* */
+#define OPER_FLAG_SNOOP        0x00008000 /* oper can see on +i users, +s channels */
 
 #define SetOFlag(x, y) ((x)->localClient->operflags |= (y))
 
@@ -452,12 +461,18 @@
 #define SetOper(x)              {(x)->umodes |= UMODE_OPER; \
 				 if (!IsServer((x))) (x)->handler = OPER_HANDLER;}
 
-#define ClearOper(x)            {(x)->umodes &= ~(UMODE_OPER|UMODE_ADMIN); \
+#define ClearOper(x)            {(x)->umodes &= ~(UMODE_OPER|UMODE_ADMIN|UMODE_SVCSADMIN); \
 				 if (!IsOper((x)) && !IsServer((x))) \
 				  (x)->handler = CLIENT_HANDLER; }
 
 #define IsPrivileged(x)         (IsOper(x) || IsServer(x))
 
+#define SetRegNick(x)           ((x)->umodes |= UMODE_REGNICK)
+#define ClearRegNick(x)         ((x)->umodes &= ~UMODE_REGNICK)
+
+#define SetServicesAdmin(x)      ((x)->umodes |= UMODE_SVCSADMIN)
+#define ClearServicesAdmin(x)    ((x)->umodes &= ~UMODE_SVCSADMIN)
+
 /* umode flags */
 #define IsInvisible(x)          ((x)->umodes & UMODE_INVISIBLE)
 #define SendWallops(x)          ((x)->umodes & UMODE_WALLOP)
@@ -466,6 +481,8 @@
 #define IsSoftCallerId(x)       ((x)->umodes & UMODE_SOFTCALLERID)
 #define IsDeaf(x)               ((x)->umodes & UMODE_DEAF)
 #define IsFull(x)		((x)->umodes & UMODE_CCONN_FULL)
+#define IsRegNick(x)    ((x)->umodes & UMODE_REGNICK)
+#define IsSetRegisteredOnly(x)  ((x)->umodes & UMODE_REGONLY)
 
 #define SetSendQExceeded(x)	((x)->flags |= FLAGS_SENDQEX)
 #define IsSendQExceeded(x)	((x)->flags &  FLAGS_SENDQEX)
@@ -546,6 +563,7 @@
 #define IsOperWall(x)           (MyConnect(x) ? (x)->localClient->operflags & OPER_FLAG_OPERWALL : 0)
 #define IsOperRemoteBan(x)      (MyConnect(x) ? (x)->localClient->operflags & OPER_FLAG_REMOTEBAN : 0)
 #define IsOperHidden(x)         (MyConnect(x) ? (x)->localClient->operflags & OPER_FLAG_HIDDEN_OPER : 0)
+#define IsOperSnoop(x)         (MyConnect(x) ? (x)->localClient->operflags & OPER_FLAG_SNOOP : 0)
 
 /*
  * definitions for get_client_name
Index: include/serno.h
===================================================================
--- include/serno.h	(revision 1)
+++ include/serno.h	(revision 114)
@@ -1 +1 @@
-#define SERIALNUM "SVN"
+#define SERIALNUM "terra"
Index: include/s_serv.h
===================================================================
--- include/s_serv.h	(revision 1)
+++ include/s_serv.h	(revision 114)
@@ -64,12 +64,12 @@
 #define CAP_ZIP		0x00000800 /* Can do ZIPlinks                     */
 #define CAP_ENC		0x00001000 /* Can do ENCrypted links              */
 #define CAP_KNOCK	0x00002000 /* supports KNOCK                      */
-#define CAP_TB	        0x00004000 /* supports TB                         */
-#define CAP_UNKLN	0x00008000 /* Can do UNKLINE message		  */
-#define CAP_CLUSTER	0x00010000 /* supports server clustering	  */
-#define CAP_ENCAP	0x00020000 /* supports ENCAP message		  */
-#define CAP_HOPS	0x00040000 /* supports HALFOPS			  */
-#define CAP_TBURST      0x00080000 /* supports TBURST                     */
+#define CAP_TB	    0x00004000 /* supports TB                         */
+#define CAP_UNKLN	0x00008000 /* Can do UNKLINE message		      */
+#define CAP_CLUSTER	0x00010000 /* supports server clustering	      */
+#define CAP_ENCAP	0x00020000 /* supports ENCAP message		      */
+#define CAP_HOPS	0x00040000 /* supports HALFOPS			          */
+#define CAP_TBURST  0x00080000 /* supports TBURST                     */
 
 #ifdef HAVE_LIBZ
 #define CAP_ZIP_SUPPORTED CAP_ZIP
Index: include/numeric.h
===================================================================
--- include/numeric.h	(revision 1)
+++ include/numeric.h	(revision 114)
@@ -122,6 +122,8 @@
 #define RPL_STATSDLINE       225
 #define RPL_STATSALINE	     226
 
+#define RPL_STATSWLINE       227
+
 /*	RPL_RULES	     232	unreal */
 
 /*      RPL_STATSIAUTH       239           IRCnet extension */
@@ -201,11 +203,11 @@
 #define RPL_TEXT             304
 #define RPL_UNAWAY           305
 #define RPL_NOWAWAY          306
-#define	RPL_USERIP	     307	/* Undernet extension */
-/*	RPL_WHOISREGNICK     307 	Numeric List: Dalnet */
+/*#define	RPL_USERIP	     307	 Undernet extension */
+#define	RPL_WHOISREGNICK     307
+#define RPL_WHOISREGONLY     308
 /*	RPL_SUSERHOST	     307	austnet */
 /*      RPL_NOTIFYACTION     308         aircd */
-#define RPL_WHOISADMIN	     308	/* Numeric List: Dalnet */
 /*	RPL_RULESSTART	     308	unreal */
 /*      RPL_NICKTRACE        309         aircd */
 /*	RPL_WHOISSADMIN	     309	Numeric List: Dalnet */
@@ -220,6 +222,7 @@
 #define RPL_WHOISOPERATOR    313
 
 #define RPL_WHOWASUSER       314
+
 /* rpl_endofwho below (315) */
 #define RPL_ENDOFWHOWAS      369
 
@@ -234,6 +237,10 @@
 #define RPL_LIST             322
 #define RPL_LISTEND          323
 #define RPL_CHANNELMODEIS    324
+
+#define RPL_WHOISADMIN	     325	/* Numeric List: Dalnet */
+#define RPL_WHOISSVCSADMIN   326
+
 /*      RPL_CHANNELPASSIS    325           IRCnet extension */
 /*      RPL_UNIQOPIS         325           IRCnet extension */
 /*      RPL_NOCHANPASS       326           IRCnet extension */
@@ -316,6 +323,7 @@
 #define ERR_TOOMANYCHANNELS  405
 #define ERR_WASNOSUCHNICK    406
 #define ERR_TOOMANYTARGETS   407
+#define ERR_NOCOLORSONCHAN   408
 #define ERR_NOORIGIN         409
 #define ERR_INVALIDCAPCMD    410
 
@@ -376,6 +384,8 @@
 #define ERR_INVITEONLYCHAN   473
 #define ERR_BANNEDFROMCHAN   474
 #define ERR_BADCHANNELKEY    475
+#define ERR_NOJOINCAPTURED   476
+#define ERR_NEEDREGGEDNICK   477
 /*      ERR_MODELESS         477           ircu numeric -db */
 #define ERR_BANLISTFULL      478        /* I stole the numeric from ircu -db */
 #define ERR_BADCHANNAME      479
@@ -407,6 +417,7 @@
 
 #define ERR_USERNOTONSERV    504
 
+#define ERR_SERVICESONLY    505
 /* #define ERR_LAST_ERR_MSG 505 
  * moved to 999
  */
@@ -484,6 +495,12 @@
 #define RPL_NOTESTLINE	     726
 #define RPL_ISCAPTURED	     727
 #define RPL_ISUNCAPTURED     728
+#define RPL_YOURECAPTURED    729
+#define RPL_YOUREUNCAPTURED  730
+#define ERR_CANNOTSENDCAPTURED 731
+#define ERR_YOURECAPTURED    732
+#define RPL_LOCALCAPTURECOUNT 733
+#define RPL_LOCALUNCAPTURECOUNT 734
 
 #define ERR_LAST_ERR_MSG     999
 
Index: include/ircd_defs.h
===================================================================
--- include/ircd_defs.h	(revision 1)
+++ include/ircd_defs.h	(revision 114)
@@ -47,8 +47,8 @@
 #define LOCAL_CHANNELLEN 50
 #define CHANNELLEN      200
 #define REASONLEN       120
-#define KICKLEN         160
-#define AWAYLEN         160
+#define KICKLEN         390
+#define AWAYLEN         390
 
 /* 23+1 for \0 */
 #define KEYLEN          24
Index: include/patchlevel.h
===================================================================
--- include/patchlevel.h	(revision 1)
+++ include/patchlevel.h	(revision 114)
@@ -23,5 +23,5 @@
  */
 
 #ifndef PATCHLEVEL
-#define PATCHLEVEL   "hybrid-7.2.3"
+#define PATCHLEVEL   "esphyb-1.0.0"
 #endif
Index: src/channel.c
===================================================================
--- src/channel.c	(revision 1)
+++ src/channel.c	(revision 114)
@@ -658,7 +658,7 @@
  * \param source_p pointer to client attempting to join
  * \param chptr    pointer to channel 
  * \param key      key sent by client attempting to join if present
- * \return ERR_BANNEDFROMCHAN, ERR_INVITEONLYCHAN, ERR_CHANNELISFULL
+ * \return ERR_BANNEDFROMCHAN, ERR_INVITEONLYCHAN, ERR_CHANNELISFULL, ERR_NEEDREGGEDNICK
  *         or 0 if allowed to join.
  */
 int
@@ -667,6 +667,9 @@
   if (is_banned(chptr, source_p))
     return ERR_BANNEDFROMCHAN;
 
+  if (IsCaptured(source_p) && irccmp(chptr->chname, ServerInfo.help_channel) != 0)
+    return ERR_NOJOINCAPTURED;
+
   if (chptr->mode.mode & MODE_INVITEONLY)
     if (!dlinkFind(&source_p->localClient->invited, chptr))
       if (!ConfigChannel.use_invex || !find_bmask(source_p, &chptr->invexlist))
@@ -679,6 +682,13 @@
       chptr->mode.limit)
     return ERR_CHANNELISFULL;
 
+  if (chptr->mode.mode & MODE_OPERONLY && !IsOper(source_p))
+    return ERR_INVITEONLYCHAN;  /* a little white lie to maintain compat */
+
+  if (chptr->mode.mode & MODE_REGONLY && !IsRegNick(source_p) &&
+     !IsOper(source_p) && !IsService(source_p))
+    return ERR_NEEDREGGEDNICK;
+
   return 0;
 }
 
@@ -716,9 +726,12 @@
 int
 can_send(struct Channel *chptr, struct Client *source_p, struct Membership *ms)
 {
-  if (IsServer(source_p))
+  if (IsServer(source_p) || IsService(source_p))
     return CAN_SEND_OPV;
 
+  if (IsCaptured(source_p) && irccmp(chptr->chname, ServerInfo.help_channel) != 0)
+    return CAN_SEND_NO;
+
   if (MyClient(source_p) && !IsExemptResv(source_p))
     if (!(IsOper(source_p) && ConfigFileEntry.oper_pass_resv))
       if (!hash_find_resv(chptr->chname) == ConfigChannel.restrict_channels)
@@ -750,6 +763,13 @@
   else if (chptr->mode.mode & MODE_NOPRIVMSGS)
     return CAN_SEND_NO;
 
+  if ((chptr->mode.mode & MODE_OPERONLY) && !IsOper(source_p))
+    return CAN_SEND_NO;
+
+  if (chptr->mode.mode & (MODE_REGMOD | MODE_REGONLY) &&
+     (!IsRegNick(source_p) && !IsOper(source_p)))
+    return CAN_SEND_NO;
+
   if (chptr->mode.mode & MODE_MODERATED)
     return CAN_SEND_NO;
 
Index: src/y.tab.c
===================================================================
--- src/y.tab.c	(revision 1)
+++ src/y.tab.c	(revision 114)
@@ -209,681 +209,700 @@
 #define IRCD_AUTH 329
 #define NEED_IDENT 330
 #define HAVENT_READ_CONF 331
-#define HIDDEN 332
-#define HIDDEN_ADMIN 333
-#define HIDDEN_NAME 334
-#define HIDDEN_OPER 335
-#define HIDE_SERVER_IPS 336
-#define HIDE_SERVERS 337
-#define HIDE_SPOOF_IPS 338
-#define HOST 339
-#define HUB 340
-#define HUB_MASK 341
-#define IDLETIME 342
-#define IGNORE_BOGUS_TS 343
-#define INVISIBLE_ON_CONNECT 344
-#define IP 345
-#define KILL 346
-#define KILL_CHASE_TIME_LIMIT 347
-#define KLINE 348
-#define KLINE_EXEMPT 349
-#define KLINE_REASON 350
-#define KLINE_WITH_REASON 351
-#define KNOCK_DELAY 352
-#define KNOCK_DELAY_CHANNEL 353
-#define LAZYLINK 354
-#define LEAF_MASK 355
-#define LINKS_DELAY 356
-#define LISTEN 357
-#define T_LOG 358
-#define LOGGING 359
-#define LOG_LEVEL 360
-#define MAX_ACCEPT 361
-#define MAX_BANS 362
-#define MAX_CHANS_PER_USER 363
-#define MAX_GLOBAL 364
-#define MAX_IDENT 365
-#define MAX_LOCAL 366
-#define MAX_NICK_CHANGES 367
-#define MAX_NICK_TIME 368
-#define MAX_NUMBER 369
-#define MAX_TARGETS 370
-#define MESSAGE_LOCALE 371
-#define MIN_NONWILDCARD 372
-#define MIN_NONWILDCARD_SIMPLE 373
-#define MODULE 374
-#define MODULES 375
-#define NAME 376
-#define NEED_PASSWORD 377
-#define NETWORK_DESC 378
-#define NETWORK_NAME 379
-#define NICK 380
-#define NICK_CHANGES 381
-#define NO_CREATE_ON_SPLIT 382
-#define NO_JOIN_ON_SPLIT 383
-#define NO_OPER_FLOOD 384
-#define NO_TILDE 385
-#define NOT 386
-#define NUMBER 387
-#define NUMBER_PER_IDENT 388
-#define NUMBER_PER_CIDR 389
-#define NUMBER_PER_IP 390
-#define NUMBER_PER_IP_GLOBAL 391
-#define OPERATOR 392
-#define OPERS_BYPASS_CALLERID 393
-#define OPER_LOG 394
-#define OPER_ONLY_UMODES 395
-#define OPER_PASS_RESV 396
-#define OPER_SPY_T 397
-#define OPER_UMODES 398
-#define JOIN_FLOOD_COUNT 399
-#define JOIN_FLOOD_TIME 400
-#define PACE_WAIT 401
-#define PACE_WAIT_SIMPLE 402
-#define PASSWORD 403
-#define PATH 404
-#define PING_COOKIE 405
-#define PING_TIME 406
-#define PING_WARNING 407
-#define PORT 408
-#define QSTRING 409
-#define QUIET_ON_BAN 410
-#define REASON 411
-#define REDIRPORT 412
-#define REDIRSERV 413
-#define REGEX_T 414
-#define REHASH 415
-#define TREJECT_HOLD_TIME 416
-#define REMOTE 417
-#define REMOTEBAN 418
-#define RESTRICT_CHANNELS 419
-#define RESTRICTED 420
-#define RSA_PRIVATE_KEY_FILE 421
-#define RSA_PUBLIC_KEY_FILE 422
-#define SSL_CERTIFICATE_FILE 423
-#define RESV 424
-#define RESV_EXEMPT 425
-#define SECONDS 426
-#define MINUTES 427
-#define HOURS 428
-#define DAYS 429
-#define WEEKS 430
-#define SENDQ 431
-#define SEND_PASSWORD 432
-#define SERVERHIDE 433
-#define SERVERINFO 434
-#define SERVLINK_PATH 435
-#define IRCD_SID 436
-#define TKLINE_EXPIRE_NOTICES 437
-#define T_SHARED 438
-#define T_CLUSTER 439
-#define TYPE 440
-#define SHORT_MOTD 441
-#define SILENT 442
-#define SPOOF 443
-#define SPOOF_NOTICE 444
-#define STATS_E_DISABLED 445
-#define STATS_I_OPER_ONLY 446
-#define STATS_K_OPER_ONLY 447
-#define STATS_O_OPER_ONLY 448
-#define STATS_P_OPER_ONLY 449
-#define TBOOL 450
-#define TMASKED 451
-#define T_REJECT 452
-#define TS_MAX_DELTA 453
-#define TS_WARN_DELTA 454
-#define TWODOTS 455
-#define T_ALL 456
-#define T_BOTS 457
-#define T_SOFTCALLERID 458
-#define T_CALLERID 459
-#define T_CCONN 460
-#define T_CCONN_FULL 461
-#define T_CLIENT_FLOOD 462
-#define T_DEAF 463
-#define T_DEBUG 464
-#define T_DRONE 465
-#define T_EXTERNAL 466
-#define T_FULL 467
-#define T_INVISIBLE 468
-#define T_IPV4 469
-#define T_IPV6 470
-#define T_LOCOPS 471
-#define T_LOGPATH 472
-#define T_L_CRIT 473
-#define T_L_DEBUG 474
-#define T_L_ERROR 475
-#define T_L_INFO 476
-#define T_L_NOTICE 477
-#define T_L_TRACE 478
-#define T_L_WARN 479
-#define T_MAX_CLIENTS 480
-#define T_NCHANGE 481
-#define T_OPERWALL 482
-#define T_REJ 483
-#define T_SERVNOTICE 484
-#define T_SKILL 485
-#define T_SPY 486
-#define T_SSL 487
-#define T_UMODES 488
-#define T_UNAUTH 489
-#define T_UNRESV 490
-#define T_UNXLINE 491
-#define T_WALLOP 492
-#define THROTTLE_TIME 493
-#define TOPICBURST 494
-#define TRUE_NO_OPER_FLOOD 495
-#define TKLINE 496
-#define TXLINE 497
-#define TRESV 498
-#define UNKLINE 499
-#define USER 500
-#define USE_EGD 501
-#define USE_EXCEPT 502
-#define USE_INVEX 503
-#define USE_KNOCK 504
-#define USE_LOGGING 505
-#define USE_WHOIS_ACTUALLY 506
-#define VHOST 507
-#define VHOST6 508
-#define XLINE 509
-#define WARN 510
-#define WARN_NO_NLINE 511
+#define HELP_CHANNEL 332
+#define HIDDEN 333
+#define HIDDEN_ADMIN 334
+#define HIDDEN_NAME 335
+#define HIDDEN_OPER 336
+#define HIDE_SERVER_IPS 337
+#define HIDE_SERVERS 338
+#define HIDE_SPOOF_IPS 339
+#define HOST 340
+#define HUB 341
+#define HUB_MASK 342
+#define IDLETIME 343
+#define IGNORE_BOGUS_TS 344
+#define INVISIBLE_ON_CONNECT 345
+#define IP 346
+#define KILL 347
+#define KILL_CHASE_TIME_LIMIT 348
+#define KLINE 349
+#define KLINE_EXEMPT 350
+#define KLINE_REASON 351
+#define KLINE_WITH_REASON 352
+#define KNOCK_DELAY 353
+#define KNOCK_DELAY_CHANNEL 354
+#define LAZYLINK 355
+#define LEAF_MASK 356
+#define LINKS_DELAY 357
+#define LISTEN 358
+#define T_LOG 359
+#define LOGGING 360
+#define LOG_LEVEL 361
+#define MAX_ACCEPT 362
+#define MAX_BANS 363
+#define MAX_CHANS_PER_USER 364
+#define MAX_GLOBAL 365
+#define MAX_IDENT 366
+#define MAX_LOCAL 367
+#define MAX_NICK_CHANGES 368
+#define MAX_NICK_TIME 369
+#define MAX_NUMBER 370
+#define MAX_TARGETS 371
+#define MESSAGE_LOCALE 372
+#define MIN_NONWILDCARD 373
+#define MIN_NONWILDCARD_SIMPLE 374
+#define MODULE 375
+#define MODULES 376
+#define NAME 377
+#define NEED_PASSWORD 378
+#define NETWORK_DESC 379
+#define NETWORK_NAME 380
+#define NICK 381
+#define NICK_CHANGES 382
+#define NO_CREATE_ON_SPLIT 383
+#define NO_JOIN_ON_SPLIT 384
+#define NO_OPER_FLOOD 385
+#define NO_TILDE 386
+#define NOT 387
+#define NUMBER 388
+#define NUMBER_PER_IDENT 389
+#define NUMBER_PER_CIDR 390
+#define NUMBER_PER_IP 391
+#define NUMBER_PER_IP_GLOBAL 392
+#define OPERATOR 393
+#define OPERS_BYPASS_CALLERID 394
+#define OPER_LOG 395
+#define OPER_ONLY_UMODES 396
+#define OPER_PASS_RESV 397
+#define OPER_SPY_T 398
+#define OPER_UMODES 399
+#define JOIN_FLOOD_COUNT 400
+#define JOIN_FLOOD_TIME 401
+#define PACE_WAIT 402
+#define PACE_WAIT_SIMPLE 403
+#define PASSWORD 404
+#define PATH 405
+#define PING_COOKIE 406
+#define PING_TIME 407
+#define PING_WARNING 408
+#define PORT 409
+#define QSTRING 410
+#define QUIET_ON_BAN 411
+#define REASON 412
+#define REDIRPORT 413
+#define REDIRSERV 414
+#define REGEX_T 415
+#define REHASH 416
+#define TREJECT_HOLD_TIME 417
+#define REMOTE 418
+#define REMOTEBAN 419
+#define RESTRICT_CHANNELS 420
+#define RESTRICTED 421
+#define RSA_PRIVATE_KEY_FILE 422
+#define RSA_PUBLIC_KEY_FILE 423
+#define SSL_CERTIFICATE_FILE 424
+#define RESV 425
+#define RESV_EXEMPT 426
+#define SECONDS 427
+#define MINUTES 428
+#define HOURS 429
+#define DAYS 430
+#define WEEKS 431
+#define SENDQ 432
+#define SEND_PASSWORD 433
+#define SERVERHIDE 434
+#define SERVERINFO 435
+#define SERVLINK_PATH 436
+#define SERVICES_NAME 437
+#define IRCD_SID 438
+#define TKLINE_EXPIRE_NOTICES 439
+#define T_SHARED 440
+#define T_CLUSTER 441
+#define T_SNOOP 442
+#define TYPE 443
+#define SHORT_MOTD 444
+#define SILENT 445
+#define SPOOF 446
+#define SPOOF_NOTICE 447
+#define STATS_E_DISABLED 448
+#define STATS_I_OPER_ONLY 449
+#define STATS_K_OPER_ONLY 450
+#define STATS_O_OPER_ONLY 451
+#define STATS_P_OPER_ONLY 452
+#define TBOOL 453
+#define TMASKED 454
+#define T_REJECT 455
+#define TS_MAX_DELTA 456
+#define TS_WARN_DELTA 457
+#define TWODOTS 458
+#define T_ALL 459
+#define T_BOTS 460
+#define T_SOFTCALLERID 461
+#define T_CALLERID 462
+#define T_CCONN 463
+#define T_CCONN_FULL 464
+#define T_CLIENT_FLOOD 465
+#define T_DEAF 466
+#define T_DEBUG 467
+#define T_DRONE 468
+#define T_EXTERNAL 469
+#define T_FULL 470
+#define T_INVISIBLE 471
+#define T_IPV4 472
+#define T_IPV6 473
+#define T_LOCOPS 474
+#define T_LOGPATH 475
+#define T_L_CRIT 476
+#define T_L_DEBUG 477
+#define T_L_ERROR 478
+#define T_L_INFO 479
+#define T_L_NOTICE 480
+#define T_L_TRACE 481
+#define T_L_WARN 482
+#define T_MAX_CLIENTS 483
+#define T_NCHANGE 484
+#define T_OPERWALL 485
+#define T_REJ 486
+#define T_SERVNOTICE 487
+#define T_SKILL 488
+#define T_SPY 489
+#define T_SSL 490
+#define T_UMODES 491
+#define T_UNAUTH 492
+#define T_UNRESV 493
+#define T_UNXLINE 494
+#define T_WALLOP 495
+#define THROTTLE_TIME 496
+#define TOPICBURST 497
+#define TRUE_NO_OPER_FLOOD 498
+#define TKLINE 499
+#define TXLINE 500
+#define TRESV 501
+#define UNKLINE 502
+#define USER 503
+#define T_USERMODE 504
+#define USE_EGD 505
+#define USE_EXCEPT 506
+#define USE_INVEX 507
+#define USE_KNOCK 508
+#define USE_LOGGING 509
+#define USE_WHOIS_ACTUALLY 510
+#define VHOST 511
+#define VHOST6 512
+#define XLINE 513
+#define WARN 514
+#define WARN_NO_NLINE 515
+#define WEBIRC 516
 const short yylhs[] = {                                        -1,
     0,    0,    5,    5,    5,    5,    5,    5,    5,    5,
     5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-    5,    5,    5,    5,    2,    2,    1,    1,    1,    1,
-    1,    1,    4,    4,    3,    3,    3,    3,   25,   26,
-   26,   27,   27,   27,   28,   29,   13,   30,   30,   31,
-   31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
-   31,   42,   39,   32,   41,   35,   36,   37,   33,   40,
-   38,   34,    6,   43,   43,   44,   44,   44,   44,   45,
-   47,   46,    7,   48,   48,   49,   49,   49,   49,   49,
-   49,   49,   49,   49,   49,   49,   49,   49,   50,   51,
-   54,   61,   55,   59,   56,   57,   60,   58,   52,   52,
-   52,   52,   52,   52,   52,   53,   63,    8,   62,   62,
-   64,   64,   66,   66,   66,   66,   66,   66,   66,   66,
-   66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
-   66,   66,   66,   66,   66,   67,   65,   68,   69,   86,
-   87,   73,   89,   72,   90,   90,   91,   91,   91,   91,
-   91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
-   91,   91,   91,   91,   91,   74,   75,   81,   76,   77,
-   78,   79,   80,   82,   83,   84,   70,   71,   85,   92,
-   88,   93,   93,   96,   94,   97,   94,   95,   95,   95,
+    5,    5,    5,    5,    5,    2,    2,    1,    1,    1,
+    1,    1,    1,    4,    4,    3,    3,    3,    3,   25,
+   27,   27,   28,   28,   28,   29,   30,   13,   31,   31,
+   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,
+   32,   32,   32,   32,   45,   42,   33,   44,   36,   37,
+   38,   39,   40,   34,   43,   41,   35,    6,   46,   46,
+   47,   47,   47,   47,   48,   50,   49,    7,   51,   51,
+   52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
+   52,   52,   52,   53,   54,   57,   64,   58,   62,   59,
+   60,   63,   61,   55,   55,   55,   55,   55,   55,   55,
+   56,   66,    8,   65,   65,   67,   67,   69,   69,   69,
+   69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
+   69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
+   69,   70,   68,   71,   72,   90,   91,   76,   93,   75,
+   94,   94,   95,   95,   95,   95,   95,   95,   95,   95,
    95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
-   95,   95,   95,   99,   10,   98,   98,  100,  100,  102,
-  102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
-  102,  102,  102,  103,  101,  106,  107,  109,  110,  111,
-  112,  113,  114,  115,  104,  105,  108,  116,   11,  119,
-  118,  120,  120,  121,  121,  117,  117,  122,  122,  122,
-  122,  122,  127,  123,  126,  126,  128,  128,  124,  125,
-  129,   12,  130,  130,  131,  131,  131,  131,  131,  131,
-  131,  131,  131,  131,  131,  131,  131,  131,  131,  131,
-  131,  132,  133,  142,  134,  147,  148,  135,  149,  149,
-  152,  150,  153,  150,  151,  151,  151,  151,  151,  151,
-  151,  151,  151,  151,  136,  137,  138,  145,  139,  140,
-  141,  143,  144,  146,  154,   15,  155,  155,  156,  156,
-  156,  156,  157,  158,  159,  160,   16,  161,  161,  162,
-  162,  162,  162,  163,  164,  166,  165,  167,  167,  168,
-  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
-  169,   17,  170,  170,  171,  171,  171,  172,  174,  173,
-  175,  175,  176,  176,  176,  176,  176,  176,  176,  176,
-  176,  176,  176,  178,   18,  177,  177,  179,  179,  181,
-  181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-  181,  181,  181,  181,  181,  181,  181,  181,  181,  182,
-  180,  183,  184,  185,  186,  188,  187,  187,  189,  201,
-  190,  202,  202,  205,  203,  206,  203,  204,  204,  204,
-  204,  204,  204,  198,  195,  197,  196,  194,  200,  191,
-  192,  193,  199,  207,   19,  210,  209,  211,  211,  212,
-  208,  208,  213,  213,  213,  213,  214,  215,  216,   20,
-  217,  217,  218,  218,  218,  219,  220,   21,  221,  221,
-  222,  222,  223,  224,   24,  227,  226,  228,  228,  229,
-  225,  225,  230,  230,  230,  230,  231,  232,   22,  233,
-  233,  234,  234,  234,  234,  234,  234,  234,  234,  234,
-  234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
-  234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
-  234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
-  234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
-  234,  234,  234,  234,  234,  234,  234,  285,  286,  283,
-  287,  288,  284,  245,  235,  236,  274,  237,  238,  239,
-  240,  241,  242,  243,  244,  279,  246,  247,  248,  249,
-  289,  251,  256,  252,  252,  254,  254,  253,  268,  269,
-  255,  257,  258,  259,  260,  262,  261,  250,  264,  273,
-  275,  276,  265,  266,  281,  282,  278,  290,  267,  291,
-  291,  292,  292,  292,  292,  292,  292,  292,  292,  292,
-  292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
-  293,  263,  294,  294,  295,  295,  295,  295,  295,  295,
-  295,  295,  295,  295,  295,  295,  295,  295,  295,  295,
-  295,  295,  295,  271,  272,  270,  277,  280,  296,   23,
-  297,  297,  298,  298,  298,  298,  298,  298,  298,  299,
-  300,  305,  301,  306,  306,  307,  307,  302,  303,  308,
-  304,  309,  309,  310,  310,    9,  311,  311,  312,  312,
-  312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
-  312,  312,  312,  312,  312,  312,  312,  330,  325,  313,
-  314,  315,  316,  318,  319,  320,  321,  317,  322,  323,
-  324,  326,  327,  328,  329,   14,  331,  331,  332,  332,
-  332,  332,  332,  332,  332,  332,  333,  334,  338,  335,
-  337,  336,  339,
+   95,   77,   78,   84,   79,   80,   81,   82,   83,   85,
+   86,   87,   73,   74,   88,   89,   96,   92,   97,   97,
+  100,   98,  101,   98,   99,   99,   99,   99,   99,   99,
+   99,   99,   99,   99,   99,   99,   99,   99,   99,   99,
+   99,  102,   26,  103,  103,  104,  104,  104,  105,  106,
+  108,   10,  107,  107,  109,  109,  111,  111,  111,  111,
+  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+  112,  110,  115,  116,  118,  119,  120,  121,  122,  123,
+  124,  113,  114,  117,  125,   11,  128,  127,  129,  129,
+  130,  130,  126,  126,  131,  131,  131,  131,  131,  136,
+  132,  135,  135,  137,  137,  133,  134,  138,   12,  139,
+  139,  140,  140,  140,  140,  140,  140,  140,  140,  140,
+  140,  140,  140,  140,  140,  140,  140,  140,  141,  142,
+  151,  143,  156,  157,  144,  158,  158,  161,  159,  162,
+  159,  160,  160,  160,  160,  160,  160,  160,  160,  160,
+  160,  145,  146,  147,  154,  148,  149,  150,  152,  153,
+  155,  163,   15,  164,  164,  165,  165,  165,  165,  166,
+  167,  168,  169,   16,  170,  170,  171,  171,  171,  171,
+  172,  173,  175,  174,  176,  176,  177,  177,  177,  177,
+  177,  177,  177,  177,  177,  177,  177,  177,  178,   17,
+  179,  179,  180,  180,  180,  181,  183,  182,  184,  184,
+  185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+  185,  187,   18,  186,  186,  188,  188,  190,  190,  190,
+  190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+  190,  190,  190,  190,  190,  190,  190,  191,  189,  192,
+  193,  194,  195,  197,  196,  196,  198,  210,  199,  211,
+  211,  214,  212,  215,  212,  213,  213,  213,  213,  213,
+  213,  207,  204,  206,  205,  203,  209,  200,  201,  202,
+  208,  216,   19,  219,  218,  220,  220,  221,  217,  217,
+  222,  222,  222,  222,  223,  224,  225,   20,  226,  226,
+  227,  227,  227,  228,  229,   21,  230,  230,  231,  231,
+  232,  233,   24,  236,  235,  237,  237,  238,  234,  234,
+  239,  239,  239,  239,  240,  241,   22,  242,  242,  243,
+  243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
+  243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
+  243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
+  243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
+  243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
+  243,  243,  243,  243,  243,  294,  295,  292,  296,  297,
+  293,  254,  244,  245,  283,  246,  247,  248,  249,  250,
+  251,  252,  253,  288,  255,  256,  257,  258,  298,  260,
+  265,  261,  261,  263,  263,  262,  277,  278,  264,  266,
+  267,  268,  269,  271,  270,  259,  273,  282,  284,  285,
+  274,  275,  290,  291,  287,  299,  276,  300,  300,  301,
+  301,  301,  301,  301,  301,  301,  301,  301,  301,  301,
+  301,  301,  301,  301,  301,  301,  301,  301,  302,  272,
+  303,  303,  304,  304,  304,  304,  304,  304,  304,  304,
+  304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
+  304,  280,  281,  279,  286,  289,  305,   23,  306,  306,
+  307,  307,  307,  307,  307,  307,  307,  308,  309,  314,
+  310,  315,  315,  316,  316,  311,  312,  317,  313,  318,
+  318,  319,  319,    9,  320,  320,  321,  321,  321,  321,
+  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,
+  321,  321,  321,  321,  321,  339,  334,  322,  323,  324,
+  325,  327,  328,  329,  330,  326,  331,  332,  333,  335,
+  336,  337,  338,   14,  340,  340,  341,  341,  341,  341,
+  341,  341,  341,  341,  342,  343,  347,  344,  346,  345,
+  348,
 };
 const short yylen[] = {                                         2,
     0,    2,    1,    1,    1,    1,    1,    1,    1,    1,
     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-    1,    1,    2,    2,    0,    1,    2,    3,    3,    3,
-    3,    3,    0,    1,    2,    3,    3,    3,    5,    2,
-    1,    1,    1,    2,    4,    4,    5,    2,    1,    1,
+    1,    1,    1,    2,    2,    0,    1,    2,    3,    3,
+    3,    3,    3,    0,    1,    2,    3,    3,    3,    5,
+    2,    1,    1,    1,    2,    4,    4,    5,    2,    1,
     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-    2,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-    4,    4,    5,    2,    1,    1,    1,    1,    2,    4,
-    4,    4,    5,    2,    1,    1,    1,    1,    1,    1,
-    1,    1,    1,    1,    1,    1,    1,    2,    4,    4,
+    1,    1,    1,    2,    4,    4,    4,    4,    4,    4,
+    4,    4,    4,    4,    4,    4,    4,    5,    2,    1,
+    1,    1,    1,    2,    4,    4,    4,    5,    2,    1,
+    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+    1,    1,    2,    4,    4,    4,    4,    4,    4,    4,
     4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-    4,    4,    4,    4,    4,    4,    0,    7,    0,    1,
-    2,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+    4,    0,    7,    0,    1,    2,    1,    1,    1,    1,
     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-    1,    1,    1,    1,    2,    4,    1,    4,    4,    4,
-    4,    4,    0,    5,    3,    1,    1,    1,    1,    1,
     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-    1,    1,    1,    1,    1,    4,    4,    4,    4,    4,
-    4,    4,    4,    4,    4,    4,    4,    4,    4,    0,
-    5,    3,    1,    0,    3,    0,    2,    1,    1,    1,
+    2,    4,    1,    4,    4,    4,    4,    4,    0,    5,
+    3,    1,    1,    1,    1,    1,    1,    1,    1,    1,
     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-    1,    1,    1,    0,    7,    0,    1,    2,    1,    1,
+    1,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+    4,    4,    4,    4,    4,    4,    0,    5,    3,    1,
+    0,    3,    0,    2,    1,    1,    1,    1,    1,    1,
     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-    1,    1,    2,    4,    1,    4,    4,    4,    4,    4,
-    4,    4,    4,    4,    4,    4,    4,    0,    6,    0,
-    5,    3,    1,    1,    1,    2,    1,    1,    1,    1,
-    1,    2,    0,    5,    3,    1,    1,    3,    4,    4,
-    0,    6,    2,    1,    1,    1,    1,    1,    1,    1,
+    1,    0,    6,    2,    1,    1,    1,    2,    4,    4,
+    0,    7,    0,    1,    2,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
+    4,    1,    4,    4,    4,    4,    4,    4,    4,    4,
+    4,    4,    4,    4,    0,    6,    0,    5,    3,    1,
+    1,    1,    2,    1,    1,    1,    1,    1,    2,    0,
+    5,    3,    1,    1,    3,    4,    4,    0,    6,    2,
     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-    2,    4,    4,    4,    4,    4,    0,    5,    3,    1,
-    0,    3,    0,    2,    1,    1,    1,    1,    1,    1,
-    1,    1,    1,    1,    4,    4,    4,    4,    4,    4,
-    4,    4,    4,    4,    0,    6,    2,    1,    1,    1,
-    1,    2,    4,    4,    4,    0,    6,    2,    1,    1,
-    1,    1,    2,    4,    4,    0,    5,    3,    1,    1,
+    1,    1,    1,    1,    1,    1,    1,    2,    4,    4,
+    4,    4,    4,    0,    5,    3,    1,    0,    3,    0,
+    2,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+    1,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+    4,    0,    6,    2,    1,    1,    1,    1,    2,    4,
+    4,    4,    0,    6,    2,    1,    1,    1,    1,    2,
+    4,    4,    0,    5,    3,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    1,    1,    1,    1,    0,    6,
+    2,    1,    1,    1,    2,    4,    0,    5,    3,    1,
     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-    0,    6,    2,    1,    1,    1,    2,    4,    0,    5,
-    3,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-    1,    1,    1,    0,    7,    0,    1,    2,    1,    1,
+    1,    0,    7,    0,    1,    2,    1,    1,    1,    1,
     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-    1,    1,    1,    1,    1,    1,    1,    1,    2,    4,
-    1,    4,    4,    4,    4,    4,    4,    4,    4,    0,
-    5,    3,    1,    0,    3,    0,    2,    1,    1,    1,
-    1,    1,    1,    4,    4,    4,    4,    4,    4,    4,
-    4,    4,    4,    0,    6,    0,    5,    3,    1,    1,
-    2,    1,    1,    1,    1,    1,    4,    4,    0,    6,
-    2,    1,    1,    1,    1,    4,    4,    5,    2,    1,
-    1,    1,    4,    0,    6,    0,    5,    3,    1,    1,
-    2,    1,    1,    1,    1,    1,    4,    4,    5,    2,
+    1,    1,    1,    1,    1,    1,    2,    4,    1,    4,
+    4,    4,    4,    4,    4,    4,    4,    0,    5,    3,
+    1,    0,    3,    0,    2,    1,    1,    1,    1,    1,
+    1,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+    4,    0,    6,    0,    5,    3,    1,    1,    2,    1,
+    1,    1,    1,    1,    4,    4,    0,    6,    2,    1,
+    1,    1,    1,    4,    4,    5,    2,    1,    1,    1,
+    4,    0,    6,    0,    5,    3,    1,    1,    2,    1,
+    1,    1,    1,    1,    4,    4,    5,    2,    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,    1,    1,    1,    1,    1,    1,
-    1,    1,    1,    1,    1,    1,    1,    4,    4,    4,
+    1,    1,    1,    1,    1,    4,    4,    4,    4,    4,
     4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
     4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
     4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
     4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-    4,    4,    4,    4,    4,    4,    4,    0,    5,    3,
+    4,    4,    4,    4,    4,    0,    5,    3,    1,    1,
     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    1,    1,    1,    1,    0,    5,
+    3,    1,    1,    1,    1,    1,    1,    1,    1,    1,
     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-    0,    5,    3,    1,    1,    1,    1,    1,    1,    1,
+    1,    4,    4,    4,    4,    4,    0,    6,    2,    1,
+    1,    1,    1,    1,    1,    1,    1,    4,    4,    0,
+    5,    3,    1,    1,    1,    4,    4,    0,    5,    3,
+    1,    1,    1,    5,    2,    1,    1,    1,    1,    1,
     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-    1,    1,    1,    4,    4,    4,    4,    4,    0,    6,
-    2,    1,    1,    1,    1,    1,    1,    1,    1,    4,
-    4,    0,    5,    3,    1,    1,    1,    4,    4,    0,
-    5,    3,    1,    1,    1,    5,    2,    1,    1,    1,
-    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-    1,    1,    1,    1,    1,    1,    1,    4,    4,    4,
+    1,    1,    1,    1,    1,    4,    4,    4,    4,    4,
     4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-    4,    4,    4,    4,    4,    5,    2,    1,    1,    1,
-    1,    1,    1,    1,    1,    1,    4,    4,    4,    4,
-    4,    4,    4,
+    4,    4,    4,    5,    2,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    4,    4,    4,    4,    4,    4,
+    4,
 };
 const short yydefred[] = {                                      1,
-    0,    0,    0,    0,  214,  384,  459,    0,  474,    0,
-  649,  271,  444,  248,    0,    0,  117,  325,    0,    0,
-  336,  361,    2,    3,    4,    5,    6,    7,    8,    9,
-   10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
-   20,   21,   22,   23,   24,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  231,  402,  477,    0,  492,    0,
+  667,  288,  462,  265,    0,    0,  122,  342,    0,    0,
+  353,  379,  222,    2,    3,    4,    5,    6,    7,    8,
+    9,   10,   11,   12,   13,   14,   15,   16,   17,   18,
+   19,   20,   21,   22,   23,   24,   25,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-   75,   76,   77,   78,  697,    0,    0,    0,    0,    0,
+    0,    0,    0,   80,   81,   82,   83,  715,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,  678,  679,  680,  681,  682,  683,
-  684,  685,  686,  687,  688,  689,  690,  691,  692,  693,
-  694,  695,  696,  235,    0,  217,  411,    0,  387,    0,
-  472,    0,    0,  470,  471,    0,  547,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  696,  697,  698,
+  699,  700,  701,  702,  703,  704,  705,  706,  707,  708,
+  709,  710,  711,  712,  713,  714,  252,    0,  234,  429,
+    0,  405,    0,  490,    0,    0,  488,  489,    0,  565,
     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,  621,
-    0,  598,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,  491,  492,  493,  494,  495,  496,  497,
-  498,  499,  500,  501,  502,  503,  504,  505,  506,  507,
-  508,  509,  510,  511,  512,  513,  514,  515,  516,  517,
-  518,  519,  520,  521,  522,  523,  524,  525,  526,  527,
-  528,  529,  530,  531,  532,  533,  534,  535,  536,  537,
-  538,  539,  540,  541,  542,  543,  544,  545,  546,    0,
+    0,    0,  639,    0,  616,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,   85,   86,   87,
-   88,   89,   90,   91,   92,   93,   94,   95,   96,   97,
-    0,    0,    0,    0,   41,   42,   43,  147,    0,  120,
-    0,  726,    0,    0,    0,    0,    0,    0,    0,    0,
-  718,  719,  720,  721,  722,  723,  724,  725,    0,    0,
+    0,    0,    0,    0,    0,    0,  509,  510,  511,  512,
+  513,  514,  515,  516,  517,  518,  519,  520,  521,  522,
+  523,  524,  525,  526,  527,  528,  529,  530,  531,  532,
+  533,  534,  535,  536,  537,  538,  539,  540,  541,  542,
+  543,  544,  545,  546,  547,  548,  549,  550,  551,  552,
+  553,  554,  555,  556,  557,  558,  559,  560,  561,  562,
+  563,  564,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,   49,   50,   51,   52,   53,   54,   55,   56,   57,
-   58,   59,   60,    0,    0,   79,    0,    0,    0,    0,
-   74,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+   90,   91,   92,   93,   94,   95,   96,   97,   98,   99,
+  100,  101,  102,    0,    0,    0,    0,   42,   43,   44,
+  153,    0,  125,    0,  744,    0,    0,    0,    0,    0,
+    0,    0,    0,  736,  737,  738,  739,  740,  741,  742,
+  743,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   50,   51,   52,   53,
+   54,   55,   56,   57,   58,   59,   60,   61,   62,   63,
+    0,    0,    0,   84,    0,    0,    0,    0,   79,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-  677,    0,    0,  465,    0,    0,    0,  462,  463,  464,
-    0,    0,  469,  486,    0,    0,  476,    0,  485,  482,
-  483,  484,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  695,    0,
+    0,  483,    0,    0,    0,  480,  481,  482,    0,    0,
+  487,  504,    0,    0,  494,    0,  503,  500,  501,  502,
     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,    0,    0,  490,  659,
-  670,    0,    0,  662,    0,    0,    0,  652,  653,  654,
-  655,  656,  657,  658,    0,    0,    0,    0,    0,  297,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  274,  275,  276,  277,  278,  279,  280,  281,
-  282,  283,  284,  285,  286,  287,  288,  289,  290,  456,
-    0,  446,    0,    0,  455,  452,  453,  454,    0,  250,
-    0,    0,    0,    0,  259,  257,  258,  260,  261,   98,
+    0,    0,    0,    0,    0,    0,  508,  677,  688,    0,
+    0,  680,    0,    0,    0,  670,  671,  672,  673,  674,
+  675,  676,    0,    0,    0,    0,    0,  314,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,   84,   44,    0,    0,    0,   40,    0,
-    0,    0,    0,    0,    0,  328,  329,  330,  331,    0,
-    0,    0,    0,    0,    0,    0,    0,  717,   61,    0,
+  291,  292,  293,  294,  295,  296,  297,  298,  299,  300,
+  301,  302,  303,  304,  305,  306,  307,  474,    0,  464,
+    0,    0,  473,  470,  471,  472,    0,  267,    0,    0,
+    0,    0,  276,  274,  275,  277,  278,  103,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,   48,    0,    0,  346,    0,    0,  339,  340,  341,
-  342,    0,    0,  369,    0,  364,  365,  366,    0,    0,
-    0,   73,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,   89,   45,    0,    0,    0,   41,    0,    0,    0,
+    0,    0,    0,  345,  346,  347,  348,    0,    0,    0,
+    0,    0,    0,    0,    0,  735,   64,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,  676,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,  219,  220,  221,
-  222,  223,  224,  225,  226,  227,  228,  229,  230,  231,
-  232,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,  420,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  389,  390,  391,  392,  393,  394,  395,  396,
-  397,  398,  399,  400,  401,  402,  403,  404,  405,  406,
-  407,  408,    0,    0,    0,  461,    0,  468,    0,    0,
-    0,    0,  481,    0,    0,    0,    0,    0,    0,    0,
+    0,   49,    0,    0,  363,    0,    0,  356,  357,  358,
+  359,    0,    0,  387,    0,  382,  383,  384,    0,    0,
+    0,    0,  225,  226,  227,    0,    0,    0,   78,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  694,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  236,  237,  238,  239,  240,  241,
+  242,  243,  244,  245,  246,  247,  248,  249,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  438,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  407,
+  408,  409,  410,  411,  412,  413,  414,  415,  416,  417,
+  418,  419,  420,  421,  422,  423,  424,  425,  426,    0,
+    0,    0,  479,    0,  486,    0,    0,    0,    0,  499,
     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,  489,    0,    0,    0,    0,    0,    0,    0,  651,
-  291,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,  273,    0,
-    0,    0,    0,  451,  262,    0,    0,    0,    0,    0,
-  256,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,   83,
-    0,    0,   39,    0,    0,    0,    0,    0,  190,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  153,    0,    0,    0,    0,  122,  123,  124,
-  125,  126,  127,  128,  129,  130,  131,  132,  133,  134,
-  135,  136,  137,  138,  139,  140,  141,  142,  143,  144,
-  332,    0,    0,    0,    0,  327,    0,    0,    0,    0,
-    0,    0,    0,  716,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,   47,  343,    0,    0,    0,
-    0,  338,  367,    0,    0,    0,  363,   82,   81,   80,
-  713,  710,  709,  698,  700,    0,    0,    0,    0,    0,
-   26,   27,  704,  705,  708,  706,  711,  712,  714,  715,
-  707,  699,  701,  702,  703,  233,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-  218,  409,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  507,    0,
+    0,    0,    0,    0,    0,    0,  669,  308,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  388,    0,    0,  460,  473,    0,    0,    0,
-  475,  559,  563,  550,  579,  592,  591,  646,  596,  557,
-  648,  588,  594,  558,  548,  549,  566,  555,  587,  556,
-  569,  554,  568,  567,  562,  561,  560,  589,  586,  644,
-  645,  583,  580,  625,  641,  642,  626,  627,  628,  629,
-  636,  630,  639,  643,  632,  637,  633,  638,  631,  635,
-  634,  640,    0,  624,  585,  602,  618,  619,  603,  604,
-  605,  606,  613,  607,  616,  620,  609,  614,  610,  615,
-  608,  612,  611,  617,    0,  601,  578,  581,  595,  552,
-  590,  553,  582,  571,  576,  577,  574,  575,  572,  573,
-  565,  564,    0,    0,    0,   34,   35,  647,  597,  584,
-  593,  551,  570,    0,    0,    0,    0,    0,    0,  650,
+    0,    0,    0,    0,    0,  290,    0,    0,    0,    0,
+  469,  279,    0,    0,    0,    0,    0,  273,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,  272,    0,    0,    0,
-  445,    0,    0,    0,    0,    0,  266,  249,  102,  108,
-  106,  105,  107,  103,  104,  101,  109,  115,  110,  114,
-  112,  113,  111,  100,   99,  116,   45,   46,  145,    0,
+    0,    0,    0,    0,    0,    0,   88,    0,    0,   40,
+    0,    0,    0,    0,    0,  197,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  159,    0,    0,    0,    0,  127,  128,  129,  130,  131,
+  132,  133,  134,  135,  136,  137,  138,  139,  140,  141,
+  142,  143,  144,  145,  146,  147,  148,  149,  150,  349,
+    0,    0,    0,    0,  344,    0,    0,    0,    0,    0,
+    0,    0,  734,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   48,  360,    0,    0,
+    0,    0,  355,  385,    0,    0,    0,  381,  228,    0,
+    0,    0,  224,   87,   86,   85,  731,  728,  727,  716,
+  718,    0,    0,    0,    0,    0,   27,   28,  722,  723,
+  726,  724,  729,  730,  732,  733,  725,  717,  719,  720,
+  721,  250,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  235,  427,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  121,    0,    0,    0,  326,  732,  727,  731,
-  729,  733,  728,  730,   66,   72,   64,   68,   67,   63,
-   62,   65,   71,   69,   70,    0,    0,    0,  337,    0,
-    0,  362,   28,   29,   30,   31,   32,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  406,    0,
+    0,  478,  491,    0,    0,    0,  493,  577,  581,  568,
+  597,  610,  609,  664,  614,  575,  666,  606,  612,  576,
+  566,  567,  584,  573,  605,  574,  587,  572,  586,  585,
+  580,  579,  578,  607,  604,  662,  663,  601,  598,  643,
+  659,  660,  644,  645,  646,  647,  654,  648,  657,  661,
+  650,  655,  651,  656,  649,  653,  652,  658,    0,  642,
+  603,  620,  636,  637,  621,  622,  623,  624,  631,  625,
+  634,  638,  627,  632,  628,  633,  626,  630,  629,  635,
+    0,  619,  596,  599,  613,  570,  608,  571,  600,  589,
+  594,  595,  592,  593,  590,  591,  583,  582,    0,    0,
+    0,   35,   36,  665,  615,  602,  611,  569,  588,    0,
+    0,    0,    0,    0,    0,  668,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-  215,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  289,    0,    0,    0,  463,    0,    0,    0,
+    0,    0,  283,  266,  107,  113,  111,  110,  112,  108,
+  109,  106,  114,  120,  115,  119,  117,  118,  116,  105,
+  104,  121,   46,   47,  151,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,  385,  466,  467,  487,  488,  480,    0,  479,  622,
-    0,  599,    0,   36,   37,   38,  675,  674,    0,  673,
-  661,  660,  667,  666,    0,  665,  669,  668,  318,  295,
-  296,  317,  301,    0,  300,    0,  320,  316,  315,  324,
-  319,  293,  323,  322,  321,  294,  292,  458,  450,    0,
-  449,  457,  255,  254,    0,  253,  270,  269,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  126,
+    0,    0,    0,  343,  750,  745,  749,  747,  751,  746,
+  748,   69,   73,   77,   67,   71,   70,   66,   65,   72,
+   68,   76,   74,   75,    0,    0,    0,  354,    0,    0,
+  380,    0,    0,  223,   29,   30,   31,   32,   33,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  232,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,  118,  334,  335,  333,  344,  350,  356,
-  360,  359,  358,  355,  351,  354,  357,  352,  353,    0,
-  349,  345,  368,  373,  379,  383,  382,  381,  378,  374,
-  377,  380,  375,  376,    0,  372,  245,  246,  239,  241,
-  243,  242,  240,  234,  247,  238,  236,  237,  244,  415,
-  417,  418,  438,  443,  442,  437,  436,  435,  419,  424,
-    0,  423,    0,  412,  440,  441,  410,  416,  434,  414,
-  439,  413,  477,    0,  623,  600,  671,    0,  663,    0,
-    0,  298,    0,  309,  310,  306,  312,  308,  307,  314,
-  311,  313,  305,  304,  447,    0,  251,    0,  268,  265,
-  264,  186,  152,  184,  150,  194,    0,  193,    0,  182,
-  176,  187,  188,  179,  146,  183,  149,  185,  177,  178,
-  151,  189,  157,  173,  174,  158,  159,  160,  161,  168,
-  162,  171,  175,  164,  169,  165,  170,  163,  167,  166,
-  172,    0,  156,  181,  148,  180,  347,    0,  370,    0,
-    0,  421,    0,  431,  432,  429,  430,  428,  433,  427,
-  478,  672,  664,  302,  299,  448,  252,    0,  191,    0,
-  206,  204,  213,  203,  198,  207,  211,  200,  208,  210,
-  205,  199,  212,  209,  201,  202,  197,  154,    0,  348,
-  371,  425,  422,  195,  192,  155,
+    0,    0,    0,  403,  484,  485,  505,  506,  498,    0,
+  497,  640,    0,  617,    0,   37,   38,   39,  693,  692,
+    0,  691,  679,  678,  685,  684,    0,  683,  687,  686,
+  335,  312,  313,  334,  318,    0,  317,    0,  337,  333,
+  332,  341,  336,  310,  340,  339,  338,  311,  309,  476,
+  468,    0,  467,  475,  272,  271,    0,  270,  287,  286,
+    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,  123,  351,  352,  350,
+  361,  367,  373,  378,  376,  375,  372,  368,  371,  374,
+  369,  377,  370,    0,  366,  362,  386,  391,  397,  401,
+  400,  399,  396,  392,  395,  398,  393,  394,    0,  390,
+  229,  230,  262,  263,  256,  258,  260,  259,  257,  251,
+  264,  255,  253,  254,  261,  433,  435,  436,  456,  461,
+  460,  455,  454,  453,  437,  442,    0,  441,    0,  430,
+  458,  459,  428,  434,  452,  432,  457,  431,  495,    0,
+  641,  618,  689,    0,  681,    0,    0,  315,    0,  326,
+  327,  323,  329,  325,  324,  331,  328,  330,  322,  321,
+  465,    0,  268,    0,  285,  282,  281,  192,  158,  190,
+  156,  201,    0,  200,    0,  188,  182,  193,  194,  185,
+  152,  189,  155,  191,  183,  184,  157,  196,  195,  163,
+  179,  180,  164,  165,  166,  167,  174,  168,  177,  181,
+  170,  175,  171,  176,  169,  173,  172,  178,    0,  162,
+  187,  154,  186,  364,    0,  388,    0,    0,  439,    0,
+  449,  450,  447,  448,  446,  451,  445,  496,  690,  682,
+  319,  316,  466,  269,    0,  198,    0,  213,  211,  220,
+  210,  205,  214,  218,  207,  215,  217,  212,  206,  219,
+  221,  216,  208,  209,  204,  160,    0,  365,  389,  443,
+  440,  202,  199,  161,
 };
 const short yydgoto[] = {                                       1,
-  891,  892, 1046, 1047,   23,   24,   25,   26,   27,   28,
-   29,   30,   31,   32,   33,   34,   35,   36,   37,   38,
-   39,   40,   41,   42,   43,  274,  275,  276,  277,  311,
-  312,  313,  314,  315,  316,  317,  318,  319,  320,  321,
-  322,  323,   70,   71,   72,   73,   74,  257,  258,  259,
+  917,  918, 1072, 1073,   24,   25,   26,   27,   28,   29,
+   30,   31,   32,   33,   34,   35,   36,   37,   38,   39,
+   40,   41,   42,   43,   44,   45,  277,  278,  279,  280,
+  316,  317,  318,  319,  320,  321,  322,  323,  324,  325,
+  326,  327,  328,  329,  330,   73,   74,   75,   76,   77,
   260,  261,  262,  263,  264,  265,  266,  267,  268,  269,
-  270,  279,   60,  817,  280,  818,  819,  820,  821,  822,
-  823,  824,  825,  826,  827,  828,  829,  830,  831,  832,
-  833,  834,  835,  836,  837,  838,  839,  840, 1128, 1422,
- 1423, 1114, 1387, 1388, 1467, 1448, 1389,  115,   48,  607,
-  116,  608,  609,  610,  611,  612,  613,  614,  615,  616,
-  617,  618,  619,  620,  621,   57,  494,  495,  766, 1255,
- 1256,  496,  497,  498,  499, 1086, 1261, 1087,   55,  462,
-  463,  464,  465,  466,  467,  468,  469,  470,  471,  472,
-  473,  474,  475,  476,  477,  478,  479,  746, 1234, 1235,
- 1374, 1361, 1236,   61,  525,  526,  527,  528,  529,   64,
-  557,  558,  559,  560,  561,  869, 1300, 1301,   65,  565,
-  566,  567,  568,  875, 1315, 1316,  118,   49,  642,  119,
-  643,  644,  645,  646,  647,  648,  649,  650,  651,  652,
-  653,  654,  655,  656,  657,  658,  659,  660,  661,  662,
-  932, 1341, 1342, 1440, 1431, 1343,   56,  484,  485,  761,
- 1250, 1251,  486,  487,  488,   50,  357,  358,  359,  360,
-  123,  124,  125,   52,  368,  369,  671, 1208, 1209,  370,
-  371,  372,  183,  184,  185,  186,  187,  188,  189,  190,
-  191,  192,  193,  194,  195,  196,  197,  198,  199,  200,
-  201,  202,  203,  204,  205,  206,  207,  208,  209,  210,
-  211,  212,  213,  214,  215,  216,  217,  218,  219,  220,
-  221,  222,  223,  224,  225,  226,  227,  228,  229,  230,
-  231,  232,  233,  234,  235,  236,  237,  238,  239,  407,
- 1025, 1026,  405, 1003, 1004,   54,  437,  438,  439,  440,
-  441,  442,  443,  444,  736, 1225, 1226,  733, 1219, 1220,
-   94,   95,   96,   97,   98,   99,  100,  101,  102,  103,
-  104,  105,  106,  107,  108,  109,  110,  111,  112,  113,
-  290,  291,  292,  293,  294,  295,  296,  297,  298,
+  270,  271,  272,  273,  282,   62,  835,  283,  836,  837,
+  838,  839,  840,  841,  842,  843,  844,  845,  846,  847,
+  848,  849,  850,  851,  852,  853,  854,  855,  856,  857,
+  858,  859, 1155, 1459, 1460, 1140, 1423, 1424, 1505, 1485,
+ 1425,   68,  582,  583,  584,  585,  118,   50,  624,  119,
+  625,  626,  627,  628,  629,  630,  631,  632,  633,  634,
+  635,  636,  637,  638,   59,  502,  503,  783, 1287, 1288,
+  504,  505,  506,  507, 1112, 1293, 1113,   57,  470,  471,
+  472,  473,  474,  475,  476,  477,  478,  479,  480,  481,
+  482,  483,  484,  485,  486,  487,  763, 1266, 1267, 1410,
+ 1397, 1268,   63,  533,  534,  535,  536,  537,   66,  567,
+  568,  569,  570,  571,  890, 1334, 1335,   67,  575,  576,
+  577,  578,  896, 1349, 1350,  121,   51,  659,  122,  660,
+  661,  662,  663,  664,  665,  666,  667,  668,  669,  670,
+  671,  672,  673,  674,  675,  676,  677,  678,  679,  958,
+ 1377, 1378, 1477, 1468, 1379,   58,  492,  493,  778, 1282,
+ 1283,  494,  495,  496,   52,  365,  366,  367,  368,  126,
+  127,  128,   54,  376,  377,  688, 1240, 1241,  378,  379,
+  380,  186,  187,  188,  189,  190,  191,  192,  193,  194,
+  195,  196,  197,  198,  199,  200,  201,  202,  203,  204,
+  205,  206,  207,  208,  209,  210,  211,  212,  213,  214,
+  215,  216,  217,  218,  219,  220,  221,  222,  223,  224,
+  225,  226,  227,  228,  229,  230,  231,  232,  233,  234,
+  235,  236,  237,  238,  239,  240,  241,  242,  415, 1051,
+ 1052,  413, 1029, 1030,   56,  445,  446,  447,  448,  449,
+  450,  451,  452,  753, 1257, 1258,  750, 1251, 1252,   97,
+   98,   99,  100,  101,  102,  103,  104,  105,  106,  107,
+  108,  109,  110,  111,  112,  113,  114,  115,  116,  293,
+  294,  295,  296,  297,  298,  299,  300,  301,
 };
 const short yysindex[] = {                                      0,
-  792,  -38,  -67,  -64,    0,    0,    0,  -59,    0,  -47,
-    0,    0,    0,    0,  -29,  -27,    0,    0,  -24,  -11,
+  320,  -40,  -95,  -77,    0,    0,    0,  -74,    0,  -69,
+    0,    0,    0,    0,  -66,  -60,    0,    0,  -55,  -53,
     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, -223,  643, -387, -291,    2,
- -229,    9,  376,   19,   23,   29,   31,  374, -218, -282,
-   35,  309,  440,   39,   40,   74,   78,   84,  100,  -90,
-    0,    0,    0,    0,    0,  109,  112,  113,  120,  122,
-  123,  126,  128,  131,  133,  134,  136,  142,  149,  150,
-  152,  154,  156,  164,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0, -247,  720, -386,
+ -314,  -22, -222,   -2,  425,    8,   10,   15,   25, -205,
+ -236, -287,   39,  234,  121,   59,   68,   70,  100,  117,
+  140,  142, -119,    0,    0,    0,    0,    0,  149,  150,
+  157,  159,  163,  167,  177,  180,  183,  184,  187,  199,
+  204,  210,  236,  239,  242,  244,  111,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,   95,    0,    0,   96,    0, -231,
-    0,  162, -119,    0,    0, -233,    0,  166,  170,  173,
-  176,  177,  179,  181,  182,  183,  197,  200,  217,  224,
-  226,  227,  231,  234,  235,  236,  237,  239,  240,  245,
-  246,  248,  253,  255,  256,  267,  269,  277,  281,    0,
-  282,    0,  283,  286,  287,  296,  297,  298,  299,  300,
-  301,  303,  306,  307,  308,  311,  313,  314,  315,  319,
-  320,  322, -122,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  188,    0,    0,
+  189,    0, -231,    0,  245, -103,    0,    0, -216,    0,
+  252,  257,  258,  259,  264,  270,  280,  281,  285,  286,
+  287,  289,  292,  293,  294,  296,  297,  298,  300,  301,
+  302,  303,  304,  308,  310,  311,  312,  318,  324,  328,
+  334,  335,    0,  337,    0,  340,  342,  352,  353,  355,
+  356,  364,  367,  368,  369,  370,  380,  381,  382,  383,
+  384,  388,  391,  396,  400, -122,    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,    0,    0,    0,    0,    0,    0,    0, -248,
-  714, -244, -236,  188,  324,  327,  330,  331,  334,  335,
-  337,  339,  340,  341,  342,  344,  -48,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-  347,  346,  351, -120,    0,    0,    0,    0,  247,    0,
- -242,    0,  352,  353,  356,  360,  364,  365,  367,  186,
-    0,    0,    0,    0,    0,    0,    0,    0,  349,  368,
-  369,  372,  375,  379,  380,  382,  383,  384,  387,  390,
-  -58,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0, -247, -226,    0,   28,   45,   46,  397,
-    0,  -15,   72,   75,   11,   13,   77,   77,   80,   81,
-   15,   20,   85,   77,   24,   25,   30,   32,   36,  414,
-    0,  796,  585,    0,  417,  418, -121,    0,    0,    0,
-   82,  428,    0,    0,  427,  431,    0,  -74,    0,    0,
-    0,    0,   43,   77,   44,   77,  118,   98,  121,   59,
-   61,   62,  137,  104,   86,  138,  141,  143,   87,   77,
-   89,   91,  144,  125,   93,  145,  157,   77,  158,  139,
-  167,  168,  101,  103,  468,  106,  497,   77,   77,  110,
-   77,  159,  111,  116,  117, -406, -327,  129,  132,   77,
-   77,  184,   77,  140,  148,  151,  153,  514,    0,    0,
-    0,  530,  531,    0,  532,  533,  -68,    0,    0,    0,
-    0,    0,    0,    0,  540,  539,  541,  544,  545,    0,
-  546,  547,  550,  551,  553,  554,  556,  557,  559,  560,
-  564,  210,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0, -241,  715, -246,   51,  404,  405,  406,  407,
+  412,  415,  416,  418,  419,  420,  421,  422,  424,  -25,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-  567,    0,  568, -107,    0,    0,    0,    0,  572,    0,
-  573,  574,  575, -109,    0,    0,    0,    0,    0,    0,
-  238,  241,  243,  250,  251,  252,  261,  262, -123,  263,
-  270,  190,  589,    0,    0,  271,  272,  596,    0,  499,
-  597,  583,  603,  615, -108,    0,    0,    0,    0,  207,
-  228,  232,  275,  244,  249,   77,  634,    0,    0,  288,
-  254,  289,  291,  292,  302,  304,  312,  318,  316,  321,
-  636,    0,  647,  648,    0,  651, -101,    0,    0,    0,
-    0,  649,  654,    0,  -99,    0,    0,    0,  657,  658,
-  663,    0,  665,  669,  670,  673,  674, -338,  676,  677,
-  679,  681,  682,  683,  686,  691,  692,  693,  694,  695,
-  697,    0,  698,  678,  700,  701,  702,  703,  704,  705,
-  706,  709,  712,  715,  721,  722,  220,    0,    0,    0,
+    0,    0,    0,  428,  427,  430, -109,    0,    0,    0,
+    0,  317,    0, -226,    0,  435,  436,  441,  442,  443,
+  444,  448,  213,    0,    0,    0,    0,    0,    0,    0,
+    0,  451,  452,  454,  455,  457,  458,  459,  460,  463,
+  464,  465,  466,  467,  469,  -56,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,  716,  723,  724,  725,  726,  727,  728,  729,  732,
-  733,    0,  734,  735,  736,  737,  738,  739,  740,  741,
-  743,  130,    0,    0,    0,    0,    0,    0,    0,    0,
+ -209, -227, -224,    0,   79,  123,  124,  479,    0,   96,
+  164,  166,  102,  103,  169,  169,  174,  176,  112,  113,
+  185,  169,  115,  131,  133,  134,  135,  524,    0,  170,
+  646,    0,  528,  532, -114,    0,    0,    0,  191,  535,
+    0,    0,  534,  536,    0, -104,    0,    0,    0,    0,
+  154,  169,  155,  169,  221,  201,  224,  160,  161,  162,
+  228,  211,  172,  232,  240,  241,  181,  169,  190,  192,
+  247,  220,  193,  248,  249,  169,  250,  238,  256,  262,
+  198,  202,  591,  203,  604,  169,  169,  217,  169,  261,
+  219,  222,  223, -418, -280,  226,  229,  169,  169,  278,
+  169,  230,  237,  251,  253,  609,    0,    0,    0,  613,
+  616,    0,  628,  631,  -44,    0,    0,    0,    0,    0,
+    0,    0,  614,  633,  634,  636,  639,    0,  642,  644,
+  647,  649,  654,  655,  656,  658,  659,  660,  664,  128,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  350,  396,  747,    0,  748,    0,  400,  401,
-  751,  755,    0,  756,  767,  769,  772,  774,  776,  777,
-  778,  780,  781,  784,  785,  789,  791,  793,  795,  797,
-  798,  799,  800,  801,  803,  808,  809,  813,  814,  815,
-  819,  822,  824,  825,  826,  775,  829,  811,  831,  832,
-  833,  836,  837,  838,  842,  844,  845,  846,  848,  849,
-  850,  852,  853,  854, -228,  859,  860,  864,  866,  869,
-  871,    0,  790,   77,  405,  873,  526,  527,  879,    0,
-    0,  456,  534,  491,  494,  885,  500,  501,  502,  503,
-  506,  548,  562,  555,  558,  509,  563,  901,    0,  569,
-  902,  570,  906,    0,    0,  905,  571,  577,  581,  912,
-    0,  914,  918,  923,  924,  925,  931,  933,  938,  941,
-  942,  943,  945,  954,  955,  956,  957,  961,  962,    0,
-  965,  968,    0,  969,  970,  971,  972,  974,    0,  975,
-  978,  979,  980,  984,  985,  986,  988,  989,  993,  994,
-  999, 1000,    0, 1003, 1006, 1008,    1,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  666,    0,
+  667, -111,    0,    0,    0,    0,  626,    0,  669,  670,
+  672, -107,    0,    0,    0,    0,    0,    0,  325,  326,
+  327,  329,  330,  331,  332,  333,  182,  336,  338,  291,
+  675,    0,    0,  339,  343,  679,    0,  559,  691,  697,
+  698,  701, -113,    0,    0,    0,    0,  313,  314,  319,
+  361,  321,  322,  169,  719,    0,    0,  372,  375,  347,
+  376,  378,  385,  392,  393,  394,  398,  401,  399,  402,
+  721,    0,  731,  718,    0,  730,  -99,    0,    0,    0,
+    0,  733,  740,    0,  -98,    0,    0,    0,  747,  750,
+  752, -121,    0,    0,    0,  755,  757,  758,    0,  761,
+  764,  766,  770,  771,   -8,  773,  774,  775,  776,  778,
+  779,  781,  782,  784,  785,  786,  787,  788,    0,  789,
+  791,  792,  793,  794,  795,  796,  797,  798,  799,  801,
+  804,  809,  810,  215,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  790,  811,
+  818,  823,  824,  825,  827,  828,  830,  831,    0,  833,
+  835,  836,  837,  838,  839,  840,  843,  844,  130,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  456,
+  497,  850,    0,  852,    0,  502,  503,  853,  856,    0,
+  858,  859,  860,  861,  863,  865,  870,  873,  874,  875,
+  878,  879,  880,  883,  884,  885,  887,  888,  889,  890,
+  892,  894,  897,  898,  900,  903,  905,  906,  907,  908,
+  909,  910,  722,  911,  769,  913,  915,  920,  921,  922,
+  924,  925,  926,  931,  932,  933,  934,  935,  937,  938,
+  939, -204,  940,  941,  944,  945,  946,  948,    0,  949,
+  169,  558,  951,  603,  605,  958,    0,    0,  565,  611,
+  572,  574,  967,  576,  577,  578,  579,  580,  625,  648,
+  629,  637,  581,  638,  982,    0,  641,  985,  643,  990,
+    0,    0,  991,  650,  653,  668,  995,    0,  998,  999,
+ 1000, 1005, 1008, 1009, 1011, 1016, 1017, 1018, 1019, 1021,
+ 1022, 1023, 1026, 1028, 1029, 1030,    0, 1031, 1032,    0,
+ 1033, 1034, 1035, 1036, 1037,    0, 1038, 1039, 1046, 1047,
+ 1049, 1054, 1056, 1057, 1061, 1062, 1063, 1066, 1069, 1071,
+    0, 1072, 1073, 1074,  -67,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,  621,  661,  662, 1018,    0, 1019, 1024, 1025, 1026,
- 1027, 1028, 1029,    0, 1030, 1031, 1035, 1036, 1037, 1038,
- 1043, 1045, 1051, 1054, 1056,    0,    0,  707, 1057,  711,
- 1063,    0,    0,  719, 1064, 1070,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,   77,   77,   77,   77,   77,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,  744,  745,   77,  746,
-  749,  750,  752,  754,  757,  761,   77,   77,  184, 1071,
-    0,    0,  759, -339,  684,  760,  762,  685,  720,  730,
-  764, 1080,  765,  766,  768,  770,  779,  773,  782,  731,
-  783, 1083,    0, 1084, 1093,    0,    0, 1094, 1095,  219,
+  684,  728,  729, 1082,    0, 1083, 1085, 1086, 1087, 1088,
+ 1089, 1090,    0, 1091, 1093, 1094, 1095, 1096, 1097, 1099,
+ 1100, 1101, 1104, 1105, 1106, 1107,    0,    0,  759, 1111,
+  763, 1108,    0,    0,  765, 1113, 1109,    0,    0,  777,
+  802, 1121,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  169,  169,  169,  169,  169,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  806,  807,  169,  812,  813,  814,  815,  803,
+  816,  817,  169,  169,  278, 1122,    0,    0,  832, -285,
+  744,  834,  841,  745,  746,  762,  842, 1155,  849,  867,
+  868,  871,  846,  872,  876,  767,  877, 1160,    0, 1162,
+ 1163,    0,    0, 1164, 1165,  822,    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,   -1,    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,    0,
-    0,    0,    0,    0,    3,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  184,  184,  184,    0,    0,    0,    0,    0,
-    0,    0,    0, -250, 1096, 1097, -246, 1100, 1105,    0,
- 1117, 1119, 1124, 1128,  802, 1130, 1131, 1134, 1135, 1136,
- 1137, 1138, 1139, 1140, 1141, 1142,    0, 1145,  794, 1146,
-    0, -296, 1147, 1148,  758, 1165,    0,    0,    0,    0,
+   -3,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  278,  278,
+  278,    0,    0,    0,    0,    0,    0,    0,    0, -260,
+ 1166, 1182, -257, 1186, 1187,    0, 1188, 1189, 1190, 1191,
+  886, 1201, 1203, 1204, 1211, 1221, 1224, 1225, 1226, 1229,
+ 1236, 1237,    0, 1239,  891, 1240,    0, -320, 1242, 1243,
+  845, 1260,    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,  771,
-  806,  787,  804, 1149,  805,  812,  816,  823,  830,  810,
-  834,  820,  835,  839,  840,  841,  851, 1150,  862,  843,
-  867, 1153,    0, 1158, 1159, 1161,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  854,  895,  855,  857, 1248,
+  862,  864,  866,  869,  881,  901,  882,  902,  893,  896,
+  899,  904,  912,  914, 1252,  916,  917,  918, 1257,    0,
+ 1259, 1261, 1262,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0, 1163,   79, 1164,    0, 1169,
-  610,    0,    0,    0,    0,    0,    0, 1181, 1185, 1186,
- 1188, 1189, 1190, 1192, 1194, 1204, 1206, 1217, 1222, 1224,
-    0, 1227, 1228, 1229, 1232, 1239, 1240, 1243, 1250, 1257,
- 1260,  934, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1275,
- 1276,    0,    0,    0,    0,    0,    0,    4,    0,    0,
-  775,    0,  811,    0,    0,    0,    0,    0,   10,    0,
-    0,    0,    0,    0,   16,    0,    0,    0,    0,    0,
-    0,    0,    0,   21,    0,  172,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,   22,
-    0,    0,    0,    0,   26,    0,    0,    0,  950,  581,
- 1279, 1281, 1282, 1283, 1284,  958, 1286, 1287, 1288, 1289,
- 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298,  847,
- 1299, 1300, 1301,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,   34,
+    0,    0,    0,    0, 1264,  612, 1265,    0, 1266,  677,
+    0, 1267, 1269,    0,    0,    0,    0,    0,    0, 1270,
+ 1271, 1272, 1273, 1274, 1277, 1278, 1279, 1280, 1281, 1282,
+ 1283, 1284,    0, 1285, 1286, 1288, 1289, 1291, 1292, 1294,
+ 1295, 1296, 1297,  970, 1299, 1300, 1301, 1302, 1303, 1304,
+ 1305, 1307, 1309,    0,    0,    0,    0,    0,    0,    1,
+    0,    0,  722,    0,  769,    0,    0,    0,    0,    0,
+   23,    0,    0,    0,    0,    0,   31,    0,    0,    0,
+    0,    0,    0,    0,    0,   33,    0, -232,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,   38,    0,    0,    0,    0,    0,
+    0,   35,    0,    0,    0,    0,   36,    0,    0,    0,
+  984,  668, 1311, 1314, 1315, 1316, 1317,  992, 1318, 1319,
+ 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330,
+ 1331, 1332,  805, 1333, 1334, 1335,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   43,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   44,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-   51,    0, -253,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,  219,    0,    0,    0, -250,    0, -246,
-  172,    0,  802,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,  794,    0, -296,    0,    0,
-    0,    0,    0,    0,    0,    0,   54,    0,  594,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   45,    0, -233,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  822,
+    0,    0,    0, -260,    0, -257, -232,    0,  886,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  891,    0, -320,    0,    0,    0,    0,    0,    0,
+    0,    0,   55,    0,  365,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,   56,    0,    0,    0,    0,    0,   79,    0,  610,
- -253,    0,  934,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,  594,    0,  958,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,  847,    0,
-    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   61,    0,
+    0,    0,    0,    0,  612,    0,  677, -233,    0,  970,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  365,    0,  992,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  805,    0,    0,    0,
+    0,    0,    0,    0,
 };
 const short yyrindex[] = {                                      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,    0,    0, 1101, 1238,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0, 1241,
+    0,    0,    0,    0,    0,    0,    0,    0,    0, 1275,
+ 1276,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0, 1287,    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,
@@ -935,8 +954,8 @@
     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, 1303,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0, 1336,    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,
@@ -950,8 +969,8 @@
     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, 1304,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0, 1337,    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,
@@ -966,9 +985,9 @@
     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, 1303, 1303, 1303, 1303, 1303,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0, 1336, 1336, 1336, 1336, 1336,    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,
@@ -982,12 +1001,13 @@
     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, 1304, 1304, 1304,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,  680,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0, 1337, 1337,
+ 1337,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,   58, 1306,    0,    0,    0,    0,
+  379,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+   73, 1338,    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,
@@ -997,15 +1017,15 @@
     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, -235,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0, -188,    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,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,  641,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  624,    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,
@@ -1014,347 +1034,360 @@
     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,  680,    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,  379,    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,    0,    0,    0,    0,    0,
-    0,    0, -235,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,  641,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0, -188,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  624,    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,
 };
 const short yygindex[] = {                                      0,
- -337, -782, -420, -923,    0,    0,    0,    0,    0,    0,
+ -345, -787, -428, -863,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0, 1092,    0,    0,    0,
- 1058,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0, 1302,    0,    0,    0,    0, 1110,    0,
+    0,    0,    0,    0,    0,    0,    0, 1123,    0,    0,
+    0, 1092,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0, 1339,    0,    0,    0,
+    0, 1141,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  567,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,  561,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0, -102,    0,    0,  -84,  -81,    0,
+    0,    0,    0,  829,    0,    0,    0,    0,    0,    0,
+  783,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   -5,
+  919,    0,    0,    0,    0,    0,  114,    0,    0,  943,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-  -98,    0,    0,  -82,  -78,    0,    0,    0,    0,    0,
-    0,  786,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   16,   17,
+    0,    0,    0,    0,  923,    0,    0,    0,    0,    0,
+  851,    0,    0,    0,    0,    0,  -49,    0,    0,  847,
+    0,    0,    0,    0,  -50,    0,    0,    0,    0,  760,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-   -5,  880,    0,    0,    0,    0,    0,  115,    0,    0,
-  915,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,   17,
-   18,    0,    0,    0,    0,  856,    0,    0,    0,    0,
-    0,  827,    0,    0,    0,    0,    0,  -52,    0,    0,
-  817,    0,    0,    0,    0,  -45,    0,    0,    0,    0,
-  753,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  -50,  -44,    0,    0,    0,    0,    0,    0,
-    0,   12,  907,    0,    0,    0,    0, 1032,    0,    0,
-    0, 1269,    0,    0,    0,    0,    0,    0,   42, 1022,
-    0,    0,    0, 1203,    0,    0,    0,    0,    0,    0,
+    0,  -47,  -48,    0,    0,    0,    0,    0,    0,    0,
+   12,  936,    0,    0,    0,    0, 1060,    0,    0,    0,
+ 1306,    0,    0,    0,    0,    0,    0,   37, 1050,    0,
+    0,    0, 1244,    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,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,  185,    0,    0,  189,    0,    0,  960,    0,    0,
-    0,    0,    0,    0,    0,    0,   41,    0,    0,   47,
-    0, 1305,    0,    0,    0,    0,    0,    0,    0,    0,
+  186,    0,    0,  194,    0,    0,  988,    0,    0,    0,
+    0,    0,    0,    0,    0,   38,    0,    0,   41,    0,
+ 1341,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0, 1104,    0,    0,    0,    0,    0,    0,    0,
+ 1136,    0,    0,    0,    0,    0,    0,    0,
 };
-#define YYTABLESIZE 1405
-const short yytable[] = {                                     579,
-  580,  726,  428,  665,  518,  362,  586,  430,  553,  431,
- 1434,  480, 1435,  521, 1217,  770,  845,  763, 1223,  489,
-   44,  114,  364,  871,  354,  876,  121, 1436,  426,  562,
-  426, 1437,   66,  522,  330, 1253,  675,  271,  677, 1043,
- 1044, 1045, 1211,  717,  718,  426, 1213, 1354,  578,  426,
-  672,  432,  691, 1358,  433,   46,  739, 1210,   47, 1360,
-  699, 1212, 1353,   51, 1363, 1376,  551,   67, 1357, 1378,
-  709,  710,  490,  712, 1359,   53,  513, 1428,   68, 1362,
- 1375, 1430,  723,  724, 1377,  727,   45,  886,  887,  888,
-  889,  890, 1427,   58, 1433,   59, 1429, 1450,   62, 1469,
- 1438,  267,  491, 1163, 1164, 1165, 1166, 1167,  492, 1432,
-  434,   63, 1449,  355, 1468,  122,  267,  117,  426, 1214,
- 1215, 1216,  719,  720,  120, 1132,  278,  435,  554, 1183,
- 1184,  126,  326,  127,  354,  271,  121,  523,  327,  128,
-  129,  240,  365,  130,  328,  241,  489,  521,  480,  563,
-  131,  242,   69,  243,  553,  272,  562,  281,  725,  132,
-  329,  324,  325,  133,  134,   66,  481,  522,  524,  332,
-  135,  493,  333,  334,  136,  137,  138,  366,  139,  356,
-  335,  364,  336,  337,  140,  273,  338,  430,  339,  431,
- 1254,  340,  555,  341,  342,  482,  343,  299,  853,  490,
-   67, 1218,  344,  141,  142, 1224,  367,  244,  143,  345,
-  346,   68,  347,  564,  348,  144,  349,  352,  353,  145,
-  146,  147,  361,  355,  148,  122,  373,  149,  150,  491,
-  374,  432,  300,  375,  433,  492,  376,  377,  151,  378,
- 1439,  379,  380,  381,  152,  153,  500,  154,  155,  156,
-  157,  436,  556,  272,  942,  483,  794,  382,  426,  795,
-  383,  158,  245,  246,  247,  248,  249,  250,  251,  252,
-  159,  523,  160,  161,  554,  162,  563,  384,  163,  164,
-  796,  301,  165,  273,  385,   69,  386,  387,  350,  356,
-  434,  388,  797,  166,  389,  390,  391,  392,  493,  393,
-  394,  365,  524,  481,  798,  395,  396,  435,  397,  799,
-  537,  253,  167,  398,  168,  399,  400,  302,  169,  303,
-  304,  800,  170,  171,  172,  173,  174,  401,  801,  402,
-  175,  176,  482,  802,  758,  803,  366,  403,  555,  177,
-  564,  404,  406,  408,  920,  254,  409,  410,  804,  780,
-  781,  782,  783,  784,  785,  786,  411,  412,  413,  414,
-  415,  416,  305,  417,  306,  367,  418,  419,  420,  520,
-  178,  421,  179,  422,  423,  424,  805,  307,  180,  425,
-  426,  806,  427,  181,  501,  622,  623,  502,  182,  624,
-  503,  504,  483,  625,  505,  506, 1055,  507,  556,  508,
-  509,  510,  511,  807,  512,  515,  516,  539,  626,  627,
-  628,  517,  530,  531,  629,  808,  532,  809,  810,   75,
-  533,  308,  811,  255,  534,  535, 1289,  536,  540,  541,
-   76,  436,  542,  630,  573,  543,  569,  631,  632,  544,
-  545,  282,  546,  547,  548, 1364, 1365,  549,  309,  310,
-  550,   77,   78,  570,  571,  572,  256,   79,  574,   80,
-  576,  575,  577,  578,  583,  445,  581,  582,  633,  584,
-  634,  585,  592,  587,  588,  593, 1366,  663,  664,  589,
-  283,  590,  812,  446,  635,  591,  668,  669,  813,  447,
-  667,  670,  674,  676, 1367,  284,  594,  595, 1180,  814,
-  815, 1368, 1290,  596,  678,  636,  679,  680,  681,  816,
-  682,  683,  685,  448,  449,   81,   82,  285,  450,  286,
- 1369,  287,  288,  684,  687,   83,   84,  688,  706,  689,
-  694,  697,  451,  695, 1291,  686,  690,  637,  692,  452,
-  693,  289,  696,  698,  700,   85,   86,  701, 1370, 1292,
-  704,  638,  705,  702,  703,  707, 1371,  708,  453,  711,
-  714,  639,   87,   88,  282,  715,  716,  713, 1293, 1294,
-  725, 1170,  732,   89, 1295, 1296, 1297, 1298,  721, 1178,
- 1179,  722,   90,  597,  598,  599,  454, 1299,  600,  728,
-  734,  735,  737,  738,  455,  601, 1372,  729,  741,  742,
-  730,  743,  731,  283,  744,  745,  747,  748,  602,  603,
-  749,  750,  456,  751,  752, 1373,  753,  754,  284,  755,
-  756,  457,  458,  640,  757,  604,  605,  760,  762,  244,
-  765,  127, 1207,  767,  768,  769,  641,  128,  129,  789,
-  285,  130,  286,  842,  287,  288,  772,  790,  131,  773,
-  606,  774,  459,  460,  793,  841,  847,  132,  775,  776,
-  777,  133,  134,  843,  289,   91,   92,   93,  135,  778,
-  779,  787,  136,  137,  138,  844,  139,  848,  788,  791,
-  792,  849,  140,  850,  245,  246,  247,  248,  249,  250,
-  251,  252,  854,  851,  866,  299,  855,  857,  852,  858,
-  859,  141,  142,  856,  863,  867,  143,  873,  868,  461,
-  860,  870,  861,  144,  874,  878,  879,  145,  146,  147,
-  862,  880,  148,  881,  864,  149,  150,  882,  883,  865,
-  300,  884,  885,  253,  893,  894,  151,  895,  907,  896,
-  897,  898,  152,  153,  899,  154,  155,  156,  157,  900,
-  901,  902,  903,  904,  794,  905,  906,  795,  944,  158,
-  908,  909,  910,  911,  912,  913,  914,  254,  159,  915,
-  160,  161,  916,  162,  922,  917,  163,  164,  796,  301,
-  165,  918,  919,  923,  924,  925,  926,  927,  928,  929,
-  797,  166,  930,  931,  933,  934,  935,  936,  937,  938,
-  939,  940,  798,  941,  945,  946,  947,  799,  948,  949,
-  167,  950,  168,  951,  952,  302,  169,  303,  304,  800,
-  170,  171,  172,  173,  174,  953,  801,  954,  175,  176,
-  955,  802,  956,  803,  957,  958,  959,  177,  960,  961,
-  622,  623,  962,  963,  624,  255,  804,  964,  625,  965,
- 1054,  966, 1451,  967, 1056,  968,  969,  970,  971,  972,
-  305,  973,  306,  626,  627,  628,  974,  975,  178,  629,
-  179,  976,  977,  978,  805,  307,  180,  979,  256,  806,
-  980,  181,  981,  982,  983, 1452,  182, 1005,  630, 1027,
- 1028, 1029,  631,  632, 1030, 1031, 1032, 1453,   75,  196,
- 1033,  807, 1034, 1035, 1036, 1061, 1037, 1038, 1039,   76,
- 1040, 1041, 1042,  808, 1454,  809,  810, 1048, 1049,  308,
-  811, 1455, 1050,  633, 1051,  634, 1456, 1052, 1457, 1053,
-   77,   78,  196, 1057, 1058, 1059,   79, 1060,   80,  635,
- 1063, 1458, 1062, 1064,  196, 1065,  309,  310, 1072, 1066,
- 1067, 1068, 1069,  303,  303, 1070, 1071, 1304, 1075, 1077,
-  636,  196, 1079, 1073, 1081, 1082, 1074, 1085,  196,  445,
- 1088, 1076, 1089,  196, 1459,  196, 1090, 1078, 1080, 1083,
-  812, 1091, 1092, 1093,  303, 1084,  813,  446,  196, 1094,
- 1460, 1095,  637,  447,   81,   82, 1096,  814,  815, 1097,
- 1098, 1099,  303, 1100,   83,   84,  638,  816, 1461,  303,
- 1462, 1463, 1101, 1102, 1103, 1104,  639,  448,  449, 1105,
- 1106,  196,  450, 1107,   85,   86, 1108, 1109,  303, 1134,
- 1110, 1111, 1112, 1305, 1113, 1115,  451,  196, 1116, 1117,
- 1118,   87,   88,  452, 1119, 1120, 1121,    2, 1122, 1123,
-    3,  593,   89, 1124, 1125,  196,  303,  196,  196, 1126,
- 1127,   90,  453, 1129,  303, 1306, 1130,    4, 1131, 1135,
- 1136,    5,  594,  595,    6, 1464, 1137, 1138,  640,  596,
- 1307,    7, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146,
-  454,  641, 1465, 1147, 1148, 1149, 1150,    8,  455, 1308,
- 1309, 1151, 1466, 1152,  303, 1310, 1311, 1312, 1313, 1153,
-    9,   10, 1154,   11, 1155, 1156,  456, 1157, 1314, 1158,
-   12, 1159,  196,  303, 1161,  457,  458, 1160, 1162, 1181,
- 1168, 1169, 1171, 1185, 1188, 1172, 1173,   13, 1174,  196,
- 1192, 1202, 1203, 1176,   91,   92,   93, 1177,   14,  196,
-   15, 1204, 1205, 1206, 1221, 1222,  459,  460, 1227,  597,
-  598,  599, 1175, 1228,  600, 1197,   16, 1182, 1186, 1189,
- 1187,  601, 1191, 1193, 1194, 1229, 1195, 1230, 1196, 1190,
- 1200, 1198, 1231,   17,  602,  603, 1232, 1233, 1237, 1238,
- 1199, 1201, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246,
- 1247,  604,  605, 1248, 1252, 1257, 1258, 1249, 1260, 1266,
- 1280, 1284, 1259,  461, 1263,   18, 1285, 1286, 1272, 1287,
- 1262, 1288, 1302,  216,   19,   20,  606, 1303, 1274,   21,
-   22,  984,  985,  986,  987,  988, 1264,  989,  990, 1317,
-  991,  992,  993, 1318, 1319,  994, 1320, 1321, 1322, 1278,
- 1323, 1282, 1324, 1265, 1267,  995,  996,  997,  998,  999,
- 1000, 1268, 1325, 1001, 1326, 1269, 1002, 1006, 1007, 1008,
- 1009, 1010, 1270, 1011, 1012, 1327, 1013, 1014, 1015, 1271,
- 1328, 1016, 1329, 1273, 1275, 1330, 1331, 1332, 1276, 1277,
- 1333, 1017, 1018, 1019, 1020, 1021, 1022, 1334, 1335, 1023,
- 1279, 1336, 1024, 1403, 1404, 1405, 1406, 1407, 1337, 1408,
- 1409, 1281, 1410, 1411, 1412, 1338, 1283, 1413, 1339, 1340,
- 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1414, 1415, 1416,
- 1417, 1418, 1419, 1351, 1352, 1420, 1379, 1381, 1421, 1382,
- 1383, 1384, 1385, 1386, 1390, 1391, 1392, 1393, 1394, 1395,
- 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1424, 1425, 1426,
-  386,   25,   33,  119,  263,  519,  514, 1475,  552, 1474,
- 1476,  331, 1447,  771, 1380, 1470,  759, 1133, 1444, 1445,
-  846,  877, 1473,  872, 1471,  429, 1472, 1446,  666,  673,
-  764,  363,  921,  538,  943, 1441,  740, 1356,  351, 1355,
- 1443,    0,    0,    0, 1442,
+#define YYTABLESIZE 1456
+const short yytable[] = {                                     596,
+  597,  743,  436,  902, 1249,  338,  603, 1255,   69,  488,
+  682,  864, 1285,  780,  438,  526,  439,  787,   46,  274,
+  689,  370, 1243,  117,  362,  892,  897,   48,  572,  529,
+ 1471,  579, 1472,  124,  734,  735,  692, 1242,  694,  372,
+ 1245, 1400, 1401,   70, 1390,   49,  563, 1473,   53,  530,
+  247, 1474,  708,   55,   71, 1244,   60, 1159,  440, 1389,
+  716,  441,   61, 1069, 1070, 1071, 1394,   64,  561,   65,
+  726,  727, 1402,  729, 1396,  444, 1399,  444, 1412, 1414,
+  756, 1393,  740,  741,   47,  744, 1465, 1467, 1470, 1395,
+ 1403, 1398,  444, 1411, 1413,  120,  444, 1404, 1487,  521,
+  123, 1464, 1466, 1469, 1507,  248,  249,  250,  251,  252,
+  253,  254,  255, 1486,  363,  580,  284, 1405,  442, 1506,
+  129, 1475,  281,  125, 1195, 1196, 1197, 1198, 1199,   72,
+  243,  284,  244,  130,  579,  443,   69,  245,  275,  131,
+  132,  362,  529,  133,  488, 1406,  274,  246,  497,  573,
+  134,  372,  124, 1407,  531,  256,  563,  572,  334,  135,
+  373,  284,  530,  136,  137,  489,  444,  564,  276, 1286,
+  138,   70,  736,  737,  139,  140,  141,  335,  142,  581,
+  364,  331,   71,  742,  143,  532, 1215, 1216,  811,  257,
+  332,  812,  333, 1408, 1250,  374,  490, 1256,  872,  302,
+  336,  498,  337,  144,  145, 1246, 1247, 1248,  146,  340,
+  341,  438,  813,  439, 1409,  574,  147,  342,  580,  343,
+  148,  149,  150,  344,  814,  151,  375,  345,  152,  153,
+  247,  363,  499,  565,  303,  358,  815,  346,  500,  154,
+  347,  816,  125,  348,  349,  155,  156,  350,  157,  158,
+  159,  160,  775,  817,  968,  440,  491,   72,  441,  351,
+  818,  444,  161, 1476,  352,  275,  819,  531,  820,  258,
+  353,  162,  373,  163,  164,  304,  165,  564,  573,  166,
+  167,  821,  581,  168,  305,  248,  249,  250,  251,  252,
+  253,  254,  255,  566,  169,  276,  354,  364,  532,  355,
+  489,  501,  356,  259,  357,  369,  497,  374,  444,  822,
+  360,  361,  381,  170,  823,  442,  171,  382,  383,  384,
+  306,  172,  307,  308,  385,  173,  174,  175,  176,  177,
+  386,  490,  443,  178,  179,  256,  824,  545,  375,  946,
+  387,  388,  180,  565,  574,  389,  390,  391,  825,  392,
+  826,  827,  393,  394,  395,  828,  396,  397,  398,  498,
+  399,  400,  401,  402,  403,  309,   78,  310,  404,  257,
+  405,  406,  407,  181,  829,  182,  302,   79,  408,  595,
+  311,  312,  183,  453,  409,  639,  640,  184,  410,  641,
+  499,  491,  185,  642,  411,  412,  500,  414,   80,   81,
+  416,  454,  417,  566,   82, 1081,   83,  455,  643,  644,
+  645,  303,  418,  419,  646,  420,  421,  830,  912,  913,
+  914,  915,  916,  831,  422,  610,  313,  423,  424,  425,
+  426,  456,  457,  647,  832,  833,  458,  648,  649,  528,
+  427,  428,  429,  430,  431,  834,  611,  612,  432,  258,
+  459,  433,  304,  613,  314,  315,  434,  460,  444,  501,
+  435,  305,  508,   84,   85,  509,  510,  511,  285,  650,
+  610,  651,  512,   86,   87,  513,  514,  461,  515,  516,
+  517,  518,  519,  259,  520,  652,  523,  524,  586,  285,
+  525,  611,  612,   88,   89,  538,  539,  306,  613,  307,
+  308,  540,  541,  542,  543,  462,  653,  286,  544,  547,
+   90,   91,  548,  463,  549,  550, 1212,  551,  552,  553,
+  554,   92,  287,  555,  556,  557,  558,  559,  286,  560,
+   93,  464,  587,  588,  614,  615,  616,  589,  654,  617,
+  465,  466,  309,  287,  310,  288,  618,  289,  590,  290,
+  291,  591,  655,  592,  593,  594,  595,  311,  312,  619,
+  620,  598,  656,  599,  600,  601,  288,  604,  289,  292,
+  290,  291,  602,  467,  468,    2,  621,  622,    3,  614,
+  615,  616,  609,  605,  617,  606,  607,  608,  680, 1202,
+  292,  618,  681,  685,  686,    4,  687, 1210, 1211,    5,
+  684,  623,    6,  313,  619,  620,  691,  693,  695,    7,
+  696,  697,  698,  699,  700,  701,   94,   95,   96,  704,
+  702,  621,  622, 1488,  703,    8,  657,  705,  706,  712,
+  469,  314,  315,  707,  711,  714,  715,  717,    9,   10,
+  658,   11,  709,  719,  710,  713,  623,  718,   12,  720,
+  721,  723,  320,  320,  722,  724, 1489,  797,  798,  799,
+  800,  801,  802,  803,  725,  742,   13,  749, 1490,  728,
+  730,  731,  758,  751,  732,  733,  752,   14,  738,   15,
+  130,  739,  745,  320,  782, 1491,  131,  132,  754,  746,
+  133,  755, 1492,  759,  760,   16,  761,  134, 1493,  762,
+ 1494,  320,  764,  747,  765,  748,  135,  766,  320,  767,
+  136,  137,   17, 1495,  768,  769,  770,  138,  771,  772,
+  773,  139,  140,  141,  774,  142,  777,  779,  320,  784,
+  785,  143,  786,  807,  789,  790,  791,  810,  792,  793,
+  794,  795,  796,  806,   18,  804, 1496,  805,  808,  860,
+  144,  145,  809,   19,   20,  146,  320,  861,  862,   21,
+   22,  863, 1497,  147,  320,  866,  867,  148,  149,  150,
+  869,  868,  151,  870,  871,  152,  153,  873,  889,  887,
+ 1498,  874, 1499, 1500,  875,  877,  154,  878,  884,  888,
+  891,  894,  155,  156,  879,  157,  158,  159,  160,  876,
+  895,  880,  881,  882,  320,  899, 1501,  883,  885,  161,
+  900,  886,  901,  904,  811,  905,  906,  812,  162,  907,
+  163,  164,  908,  165,  909,  320,  166,  167,  910,  911,
+  168,  919,  920,  921,  922,   23,  923,  924,  813,  925,
+  926,  169,  927,  928,  929,  930,  931,  932,  948, 1502,
+  814,  933,  934,  935,  936,  937,  938,  939,  940,  941,
+  170,  942,  815,  171,  943,  970, 1503,  816,  172,  944,
+  945,  949,  173,  174,  175,  176,  177, 1504,  950,  817,
+  178,  179,  203,  951,  952,  953,  818,  954,  955,  180,
+  956,  957,  819,  959,  820,  960,  961,  962,  963,  964,
+  965,  639,  640,  966,  967,  641,  971,  821,  972,  642,
+  973,  974,  975,  976,  977,  203,  978,  979,  980,  981,
+  181,  982,  182,  983,  643,  644,  645,  203,  984,  183,
+  646,  985,  986,  987,  184,  822,  988,  989,  990,  185,
+  823,  991,  992,  993,  203,  994,  995,  996,  997,  647,
+  998,  203,  999,  648,  649, 1000, 1001,  203, 1002,  203,
+ 1322, 1003,  824, 1004, 1005, 1006, 1007, 1008, 1009, 1031,
+  453, 1053,  203, 1054,  825,   78,  826,  827, 1055, 1056,
+ 1057,  828, 1058, 1059, 1060,  650,   79,  651,  454, 1061,
+ 1062, 1063, 1064, 1065,  455, 1066, 1067, 1068, 1074, 1075,
+  829,  652, 1076, 1077, 1078,  203, 1079,   80,   81, 1080,
+ 1082, 1083, 1084,   82, 1085,   83, 1086, 1087,  456,  457,
+ 1088,  203,  653,  458, 1089, 1338, 1090, 1091, 1092, 1093,
+ 1094, 1095, 1096, 1101, 1097, 1098, 1323,  459, 1099,  203,
+ 1103,  203,  203,  830,  460, 1105, 1100, 1102, 1107,  831,
+ 1104, 1108, 1106, 1114,  654, 1111, 1115, 1116, 1117, 1109,
+  832,  833, 1110, 1118,  461,  203, 1119, 1120,  655, 1121,
+ 1324,  834,   84,   85, 1122, 1123, 1124, 1125,  656, 1126,
+ 1127, 1128,   86,   87, 1129, 1325, 1130, 1131, 1132, 1133,
+ 1134, 1135,  462, 1161, 1136, 1137, 1138, 1139, 1141, 1142,
+  463, 1339,   88,   89, 1326, 1327, 1143, 1144,  203, 1145,
+ 1328, 1329, 1330, 1331, 1146, 1332, 1147, 1148,  464,   90,
+   91, 1149, 1150, 1151, 1333,  203, 1152,  465,  466, 1153,
+   92, 1154, 1156, 1157, 1158, 1340,  203, 1162, 1163,   93,
+ 1164, 1165,  657, 1166, 1167, 1168, 1169, 1170, 1171, 1172,
+ 1341, 1173, 1174, 1175, 1176, 1177,  658, 1178, 1179, 1180,
+  467,  468, 1181, 1182, 1183, 1184, 1188, 1191, 1185, 1342,
+ 1343, 1186, 1187, 1190, 1189, 1344, 1345, 1346, 1347, 1194,
+ 1213, 1010, 1011, 1012, 1013, 1014, 1192, 1015, 1016, 1348,
+ 1017, 1018, 1019, 1200, 1201, 1020, 1217, 1220, 1221, 1203,
+ 1204, 1205, 1206, 1208, 1209, 1021, 1022, 1023, 1024, 1025,
+ 1026, 1193, 1207, 1027, 1222, 1224, 1028,  469, 1234, 1232,
+ 1235, 1236, 1237, 1238, 1253,   94,   95,   96, 1032, 1033,
+ 1034, 1035, 1036, 1229, 1037, 1038, 1239, 1039, 1040, 1041,
+ 1254, 1214, 1042, 1218, 1259, 1260, 1261, 1262, 1263, 1264,
+ 1219, 1223, 1043, 1044, 1045, 1046, 1047, 1048, 1225, 1269,
+ 1049, 1270, 1271, 1050, 1440, 1441, 1442, 1443, 1444, 1272,
+ 1445, 1446, 1265, 1447, 1448, 1449, 1226, 1227, 1450, 1273,
+ 1228, 1230, 1274, 1275, 1276, 1231, 1233, 1277, 1451, 1452,
+ 1453, 1454, 1455, 1456, 1278, 1279, 1457, 1280, 1284, 1458,
+ 1289, 1290, 1291, 1292, 1295, 1281, 1294, 1296, 1298, 1297,
+ 1304, 1306, 1313, 1310, 1299, 1317, 1300, 1318, 1301, 1319,
+ 1320, 1302, 1321, 1336, 1337, 1351, 1315, 1352, 1353, 1354,
+ 1355, 1356, 1357, 1303, 1305, 1358, 1359, 1360, 1361, 1362,
+ 1363, 1364, 1365, 1366, 1367, 1307, 1368, 1369, 1308, 1370,
+ 1371, 1309, 1372, 1373, 1374, 1375, 1376, 1380, 1381, 1382,
+ 1383, 1384, 1385, 1386, 1311, 1387, 1312, 1388, 1314, 1417,
+ 1316, 1415, 1418, 1419, 1420, 1421, 1426, 1427, 1422, 1428,
+ 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438,
+ 1439, 1461, 1462, 1463,   26,   34,  280,  233,  404,  527,
+  522, 1160, 1513, 1512, 1514, 1416,  947,  562, 1484,  124,
+  903,  339,  776, 1481, 1482, 1508, 1509,  893,  969, 1510,
+  788,  898, 1511, 1483,  683,  690, 1478,  781,  546,  437,
+ 1392,  371,  757, 1480, 1479,    0, 1391,  359,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  865,
 };
-const short yycheck[] = {                                     337,
-  338,  422,  125,  125,  125,  125,  344,  256,  256,  258,
-  264,  256,  266,  256,  265,  125,  125,  125,  265,  256,
-   59,  409,  256,  125,  256,  125,  256,  281,  264,  256,
-  266,  285,  256,  276,  125,  332,  374,  256,  376,  268,
-  269,  270,   44,  450,  451,  281,   44,   44,  387,  285,
-  125,  300,  390,   44,  303,  123,  125,   59,  123,   44,
-  398,   59,   59,  123,   44,   44,  125,  291,   59,   44,
-  408,  409,  309,  411,   59,  123,  125,   44,  302,   59,
-   59,   44,  420,  421,   59,  423,  125,  426,  427,  428,
-  429,  430,   59,  123,   44,  123,   59,   44,  123,   44,
-  354,   44,  339,  886,  887,  888,  889,  890,  345,   59,
-  359,  123,   59,  345,   59,  345,   59,  409,  354, 1043,
- 1044, 1045,  450,  451,  123,  125,  409,  376,  376,  469,
-  470,  123,   59,  256,  256,  256,  256,  380,   61,  262,
-  263,  123,  376,  266,   61,  123,  256,  256,  256,  376,
-  273,  123,  376,  123,  256,  374,  256,  123,  387,  282,
-   61,  123,  123,  286,  287,  256,  411,  276,  411,   61,
-  293,  408,   61,   61,  297,  298,  299,  411,  301,  411,
-   61,  256,   61,   61,  307,  404,   61,  256,   61,  258,
-  487,   61,  440,   61,   61,  440,   61,  256,  536,  309,
-  291,  452,   61,  326,  327,  452,  440,  256,  331,   61,
-   61,  302,   61,  440,   61,  338,   61,  123,  123,  342,
-  343,  344,   61,  345,  347,  345,   61,  350,  351,  339,
-   61,  300,  291,   61,  303,  345,   61,   61,  361,   61,
-  494,   61,   61,   61,  367,  368,   59,  370,  371,  372,
-  373,  500,  500,  374,  125,  500,  256,   61,  494,  259,
-   61,  384,  311,  312,  313,  314,  315,  316,  317,  318,
-  393,  380,  395,  396,  376,  398,  376,   61,  401,  402,
-  280,  340,  405,  404,   61,  376,   61,   61,  125,  411,
-  359,   61,  292,  416,   61,   61,   61,   61,  408,   61,
-   61,  376,  411,  411,  304,   61,   61,  376,   61,  309,
-  125,  360,  435,   61,  437,   61,   61,  376,  441,  378,
-  379,  321,  445,  446,  447,  448,  449,   61,  328,   61,
-  453,  454,  440,  333,  125,  335,  411,   61,  440,  462,
-  440,   61,   61,   61,  125,  394,   61,   61,  348,  473,
-  474,  475,  476,  477,  478,  479,   61,   61,   61,   61,
-   61,   61,  421,   61,  423,  440,   61,   61,   61,  123,
-  493,   61,  495,   61,   61,   61,  376,  436,  501,   61,
-   61,  381,   61,  506,   61,  256,  257,   61,  511,  260,
-   61,   61,  500,  264,   61,   61,  734,   61,  500,   61,
-   61,   61,   61,  403,   61,   59,   61,   59,  279,  280,
-  281,   61,   61,   61,  285,  415,   61,  417,  418,  256,
-   61,  480,  422,  472,   61,   61,  348,   61,   61,   61,
-  267,  500,   61,  304,  450,   61,  409,  308,  309,   61,
-   61,  256,   61,   61,   61,  274,  275,   61,  507,  508,
-   61,  288,  289,  409,  409,   59,  505,  294,  387,  296,
-  450,  387,  450,  387,  450,  256,  387,  387,  339,  450,
-  341,  387,   59,  450,  450,  256,  305,   61,   61,  450,
-  295,  450,  482,  274,  355,  450,   59,   61,  488,  280,
-  409,   61,  450,  450,  323,  310,  277,  278,  919,  499,
-  500,  330,  424,  284,  387,  376,  409,  387,  450,  509,
-  450,  450,  409,  304,  305,  352,  353,  332,  309,  334,
-  349,  336,  337,  387,  387,  362,  363,  387,   61,  387,
-  387,  387,  323,  409,  456,  450,  450,  408,  450,  330,
-  450,  356,  450,  387,  387,  382,  383,  409,  377,  471,
-  450,  422,  450,  387,  387,  450,  385,   61,  349,  450,
-  450,  432,  399,  400,  256,  450,  450,  409,  490,  491,
-  387,  909,   59,  410,  496,  497,  498,  499,  450,  917,
-  918,  450,  419,  364,  365,  366,  377,  509,  369,  450,
-   61,   61,   61,   61,  385,  376,  425,  450,   59,   61,
-  450,   61,  450,  295,   61,   61,   61,   61,  389,  390,
-   61,   61,  403,   61,   61,  444,   61,   61,  310,   61,
-   61,  412,  413,  494,   61,  406,  407,   61,   61,  256,
-   59,  256,  414,   61,   61,   61,  507,  262,  263,  450,
-  332,  266,  334,   61,  336,  337,  409,   59,  273,  409,
-  431,  409,  443,  444,   59,   59,  450,  282,  409,  409,
-  409,  286,  287,   61,  356,  502,  503,  504,  293,  409,
-  409,  409,  297,  298,  299,   61,  301,  450,  409,  409,
-  409,  450,  307,  409,  311,  312,  313,  314,  315,  316,
-  317,  318,   59,  450,   59,  256,  409,  409,  450,  409,
-  409,  326,  327,  450,  387,   59,  331,   59,   61,  500,
-  409,   61,  409,  338,   61,   59,   59,  342,  343,  344,
-  409,   59,  347,   59,  409,  350,  351,   59,   59,  409,
-  291,   59,   59,  360,   59,   59,  361,   59,   61,   59,
-   59,   59,  367,  368,   59,  370,  371,  372,  373,   59,
-   59,   59,   59,   59,  256,   59,   59,  259,  409,  384,
-   61,   61,   61,   61,   61,   61,   61,  394,  393,   61,
-  395,  396,   61,  398,   59,   61,  401,  402,  280,  340,
-  405,   61,   61,   61,   61,   61,   61,   61,   61,   61,
-  292,  416,   61,   61,   61,   61,   61,   61,   61,   61,
-   61,   61,  304,   61,  409,   59,   59,  309,  409,  409,
-  435,   61,  437,   59,   59,  376,  441,  378,  379,  321,
-  445,  446,  447,  448,  449,   59,  328,   59,  453,  454,
-   59,  333,   59,  335,   59,   59,   59,  462,   59,   59,
-  256,  257,   59,   59,  260,  472,  348,   59,  264,   59,
-   61,   59,  259,   59,  450,   59,   59,   59,   59,   59,
-  421,   59,  423,  279,  280,  281,   59,   59,  493,  285,
-  495,   59,   59,   59,  376,  436,  501,   59,  505,  381,
-   59,  506,   59,   59,   59,  292,  511,   59,  304,   59,
-   59,   59,  308,  309,   59,   59,   59,  304,  256,  259,
-   59,  403,   59,   59,   59,  450,   59,   59,   59,  267,
-   59,   59,   59,  415,  321,  417,  418,   59,   59,  480,
-  422,  328,   59,  339,   59,  341,  333,   59,  335,   59,
-  288,  289,  292,   61,  409,  409,  294,   59,  296,  355,
-  450,  348,  409,  450,  304,   61,  507,  508,  387,  450,
-  450,  450,  450,  274,  275,  450,  409,  348,  450,   59,
-  376,  321,   61,  409,   59,   61,  409,  387,  328,  256,
-   59,  409,   59,  333,  381,  335,   59,  409,  409,  409,
-  482,   59,   59,   59,  305,  409,  488,  274,  348,   59,
-  397,   59,  408,  280,  352,  353,   59,  499,  500,   59,
-   59,   59,  323,   59,  362,  363,  422,  509,  415,  330,
-  417,  418,   59,   59,   59,   59,  432,  304,  305,   59,
-   59,  381,  309,   59,  382,  383,   59,   59,  349,  409,
-   61,   61,   61,  424,   61,   61,  323,  397,   61,   61,
-   61,  399,  400,  330,   61,   61,   61,  256,   61,   61,
-  259,  256,  410,   61,   61,  415,  377,  417,  418,   61,
-   61,  419,  349,   61,  385,  456,   61,  276,   61,  409,
-  409,  280,  277,  278,  283,  482,   59,   59,  494,  284,
-  471,  290,   59,   59,   59,   59,   59,   59,   59,   59,
-  377,  507,  499,   59,   59,   59,   59,  306,  385,  490,
-  491,   59,  509,   59,  425,  496,  497,  498,  499,   59,
-  319,  320,   59,  322,   59,  409,  403,   61,  509,  409,
-  329,   59,  482,  444,   61,  412,  413,  409,   59,   59,
-  387,  387,  387,  450,  450,  387,  387,  346,  387,  499,
-   61,   59,   59,  387,  502,  503,  504,  387,  357,  509,
-  359,   59,   59,   59,   59,   59,  443,  444,   59,  364,
-  365,  366,  409,   59,  369,  387,  375,  409,  409,  450,
-  409,  376,  409,  409,  409,   59,  409,   59,  409,  450,
-  450,  409,   59,  392,  389,  390,   59,  386,   59,   59,
-  409,  409,   59,   59,   59,   59,   59,   59,   59,   59,
-   59,  406,  407,   59,   59,   59,   59,  414,   44,   61,
-   61,   59,  455,  500,  409,  424,   59,   59,  409,   59,
-  450,   59,   59,  123,  433,  434,  431,   59,  409,  438,
-  439,  457,  458,  459,  460,  461,  450,  463,  464,   59,
-  466,  467,  468,   59,   59,  471,   59,   59,   59,  409,
-   59,  409,   59,  450,  450,  481,  482,  483,  484,  485,
-  486,  450,   59,  489,   59,  450,  492,  457,  458,  459,
-  460,  461,  450,  463,  464,   59,  466,  467,  468,  450,
-   59,  471,   59,  450,  450,   59,   59,   59,  450,  450,
-   59,  481,  482,  483,  484,  485,  486,   59,   59,  489,
-  450,   59,  492,  457,  458,  459,  460,  461,   59,  463,
-  464,  450,  466,  467,  468,   59,  450,  471,   59,  386,
-   59,   59,   59,   59,   59,   59,   59,  481,  482,  483,
-  484,  485,  486,   59,   59,  489,  387,   59,  492,   59,
-   59,   59,   59,  386,   59,   59,   59,   59,   59,   59,
+const short yycheck[] = {                                     345,
+  346,  430,  125,  125,  265,  125,  352,  265,  256,  256,
+  125,  125,  333,  125,  256,  125,  258,  125,   59,  256,
+  125,  125,   44,  410,  256,  125,  125,  123,  256,  256,
+  264,  256,  266,  256,  453,  454,  382,   59,  384,  256,
+   44,  274,  275,  291,   44,  123,  256,  281,  123,  276,
+  256,  285,  398,  123,  302,   59,  123,  125,  300,   59,
+  406,  303,  123,  268,  269,  270,   44,  123,  125,  123,
+  416,  417,  305,  419,   44,  264,   44,  266,   44,   44,
+  125,   59,  428,  429,  125,  431,   44,   44,   44,   59,
+  323,   59,  281,   59,   59,  410,  285,  330,   44,  125,
+  123,   59,   59,   59,   44,  311,  312,  313,  314,  315,
+  316,  317,  318,   59,  346,  340,   44,  350,  360,   59,
+  123,  355,  410,  346,  912,  913,  914,  915,  916,  377,
+  123,   59,  123,  256,  256,  377,  256,  123,  375,  262,
+  263,  256,  256,  266,  256,  378,  256,  123,  256,  377,
+  273,  256,  256,  386,  381,  361,  256,  256,   59,  282,
+  377,  123,  276,  286,  287,  412,  355,  377,  405,  490,
+  293,  291,  453,  454,  297,  298,  299,   61,  301,  404,
+  412,  123,  302,  388,  307,  412,  472,  473,  256,  395,
+  123,  259,  123,  426,  455,  412,  443,  455,  544,  256,
+   61,  309,   61,  326,  327, 1069, 1070, 1071,  331,   61,
+   61,  256,  280,  258,  447,  443,  339,   61,  340,   61,
+  343,  344,  345,   61,  292,  348,  443,   61,  351,  352,
+  256,  346,  340,  443,  291,  125,  304,   61,  346,  362,
+   61,  309,  346,   61,   61,  368,  369,   61,  371,  372,
+  373,  374,  125,  321,  125,  300,  503,  377,  303,   61,
+  328,  503,  385,  497,   61,  375,  334,  381,  336,  475,
+   61,  394,  377,  396,  397,  332,  399,  377,  377,  402,
+  403,  349,  404,  406,  341,  311,  312,  313,  314,  315,
+  316,  317,  318,  503,  417,  405,   61,  412,  412,   61,
+  412,  409,   61,  509,   61,   61,  256,  412,  497,  377,
+  123,  123,   61,  436,  382,  360,  439,   61,   61,   61,
+  377,  444,  379,  380,   61,  448,  449,  450,  451,  452,
+   61,  443,  377,  456,  457,  361,  404,  125,  443,  125,
+   61,   61,  465,  443,  443,   61,   61,   61,  416,   61,
+  418,  419,   61,   61,   61,  423,   61,   61,   61,  309,
+   61,   61,   61,   61,   61,  422,  256,  424,   61,  395,
+   61,   61,   61,  496,  442,  498,  256,  267,   61,  388,
+  437,  438,  505,  256,   61,  256,  257,  510,   61,  260,
+  340,  503,  515,  264,   61,   61,  346,   61,  288,  289,
+   61,  274,   61,  503,  294,  751,  296,  280,  279,  280,
+  281,  291,   61,   61,  285,   61,   61,  485,  427,  428,
+  429,  430,  431,  491,   61,  256,  483,   61,   61,   61,
+   61,  304,  305,  304,  502,  503,  309,  308,  309,  123,
+   61,   61,   61,   61,   61,  513,  277,  278,   61,  475,
+  323,   61,  332,  284,  511,  512,   61,  330,  503,  409,
+   61,  341,   59,  353,  354,   61,   61,   61,  256,  340,
+  256,  342,   61,  363,  364,   61,   61,  350,   61,   61,
+   61,   61,   61,  509,   61,  356,   59,   61,  410,  256,
+   61,  277,  278,  383,  384,   61,   61,  377,  284,  379,
+  380,   61,   61,   61,   61,  378,  377,  295,   61,   59,
+  400,  401,   61,  386,   61,   61,  945,   61,   61,   61,
+   61,  411,  310,   61,   61,   61,   61,   61,  295,   61,
+  420,  404,  410,  410,  365,  366,  367,   59,  409,  370,
+  413,  414,  422,  310,  424,  333,  377,  335,  453,  337,
+  338,  388,  423,  388,  453,  453,  388,  437,  438,  390,
+  391,  388,  433,  388,  453,  453,  333,  453,  335,  357,
+  337,  338,  388,  446,  447,  256,  407,  408,  259,  365,
+  366,  367,   59,  453,  370,  453,  453,  453,   61,  935,
+  357,  377,   61,   59,   61,  276,   61,  943,  944,  280,
+  410,  432,  283,  483,  390,  391,  453,  453,  388,  290,
+  410,  388,  453,  453,  453,  388,  506,  507,  508,  388,
+  410,  407,  408,  259,  453,  306,  497,  388,  388,  410,
+  503,  511,  512,  453,  388,  388,  388,  388,  319,  320,
+  511,  322,  453,  388,  453,  453,  432,  410,  329,  388,
+  453,   61,  274,  275,  453,  453,  292,  476,  477,  478,
+  479,  480,  481,  482,   61,  388,  347,   59,  304,  453,
+  410,  453,   59,   61,  453,  453,   61,  358,  453,  360,
+  256,  453,  453,  305,   59,  321,  262,  263,   61,  453,
+  266,   61,  328,   61,   61,  376,   61,  273,  334,   61,
+  336,  323,   61,  453,   61,  453,  282,   61,  330,   61,
+  286,  287,  393,  349,   61,   61,   61,  293,   61,   61,
+   61,  297,  298,  299,   61,  301,   61,   61,  350,   61,
+   61,  307,   61,   59,  410,  410,  410,   59,  410,  410,
+  410,  410,  410,  453,  425,  410,  382,  410,  410,   59,
+  326,  327,  410,  434,  435,  331,  378,   61,   61,  440,
+  441,   61,  398,  339,  386,  453,  453,  343,  344,  345,
+  410,  453,  348,  453,  453,  351,  352,   59,   61,   59,
+  416,  410,  418,  419,  410,  410,  362,  410,  388,   59,
+   61,   59,  368,  369,  410,  371,  372,  373,  374,  453,
+   61,  410,  410,  410,  426,   59,  442,  410,  410,  385,
+   61,  410,   61,   59,  256,   59,   59,  259,  394,   59,
+  396,  397,   59,  399,   59,  447,  402,  403,   59,   59,
+  406,   59,   59,   59,   59,  516,   59,   59,  280,   59,
+   59,  417,   59,   59,   59,   59,   59,   59,   59,  485,
+  292,   61,   61,   61,   61,   61,   61,   61,   61,   61,
+  436,   61,  304,  439,   61,  410,  502,  309,  444,   61,
+   61,   61,  448,  449,  450,  451,  452,  513,   61,  321,
+  456,  457,  259,   61,   61,   61,  328,   61,   61,  465,
+   61,   61,  334,   61,  336,   61,   61,   61,   61,   61,
+   61,  256,  257,   61,   61,  260,  410,  349,   59,  264,
+   59,  410,  410,   61,   59,  292,   59,   59,   59,   59,
+  496,   59,  498,   59,  279,  280,  281,  304,   59,  505,
+  285,   59,   59,   59,  510,  377,   59,   59,   59,  515,
+  382,   59,   59,   59,  321,   59,   59,   59,   59,  304,
+   59,  328,   59,  308,  309,   59,   59,  334,   59,  336,
+  349,   59,  404,   59,   59,   59,   59,   59,   59,   59,
+  256,   59,  349,   59,  416,  256,  418,  419,   59,   59,
+   59,  423,   59,   59,   59,  340,  267,  342,  274,   59,
+   59,   59,   59,   59,  280,   59,   59,   59,   59,   59,
+  442,  356,   59,   59,   59,  382,   59,  288,  289,   61,
+  453,   61,  410,  294,  410,  296,   59,  453,  304,  305,
+  410,  398,  377,  309,  453,  349,  453,   61,  453,  453,
+  453,  453,  453,  453,  410,  388,  425,  323,  410,  416,
+   59,  418,  419,  485,  330,   61,  410,  410,   59,  491,
+  410,   61,  410,   59,  409,  388,   59,   59,   59,  410,
+  502,  503,  410,   59,  350,  442,   59,   59,  423,   59,
+  459,  513,  353,  354,   59,   59,   59,   59,  433,   59,
+   59,   59,  363,  364,   59,  474,   59,   59,   59,   59,
+   59,   59,  378,  410,   61,   61,   61,   61,   61,   61,
+  386,  425,  383,  384,  493,  494,   61,   61,  485,   61,
+  499,  500,  501,  502,   61,  504,   61,   61,  404,  400,
+  401,   61,   61,   61,  513,  502,   61,  413,  414,   61,
+  411,   61,   61,   61,   61,  459,  513,  410,  410,  420,
+   59,   59,  497,   59,   59,   59,   59,   59,   59,   59,
+  474,   59,   59,   59,   59,   59,  511,   59,   59,   59,
+  446,  447,   59,   59,   59,   59,   59,   59,  410,  493,
+  494,   61,  410,   61,  410,  499,  500,  501,  502,   59,
+   59,  460,  461,  462,  463,  464,  410,  466,  467,  513,
+  469,  470,  471,  388,  388,  474,  453,  453,  453,  388,
+  388,  388,  388,  388,  388,  484,  485,  486,  487,  488,
+  489,  410,  410,  492,  453,   61,  495,  503,   59,  453,
+   59,   59,   59,   59,   59,  506,  507,  508,  460,  461,
+  462,  463,  464,  388,  466,  467,  415,  469,  470,  471,
+   59,  410,  474,  410,   59,   59,   59,   59,   59,   59,
+  410,  410,  484,  485,  486,  487,  488,  489,  410,   59,
+  492,   59,   59,  495,  460,  461,  462,  463,  464,   59,
+  466,  467,  387,  469,  470,  471,  410,  410,  474,   59,
+  410,  410,   59,   59,   59,  410,  410,   59,  484,  485,
+  486,  487,  488,  489,   59,   59,  492,   59,   59,  495,
+   59,   59,  458,   44,  410,  415,  453,  453,   61,  453,
+  410,  410,   61,  410,  453,   59,  453,   59,  453,   59,
+   59,  453,   59,   59,   59,   59,  410,   59,   59,   59,
+   59,   59,   59,  453,  453,   59,   59,   59,   59,   59,
+   59,   59,   59,   59,   59,  453,   59,   59,  453,   59,
+   59,  453,   59,   59,   59,   59,  387,   59,   59,   59,
+   59,   59,   59,   59,  453,   59,  453,   59,  453,   59,
+  453,  388,   59,   59,   59,   59,   59,   59,  387,   59,
    59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
-  123,   59,   59,  123,   59,  274,  257, 1450,  311, 1448,
- 1469,   70, 1378,  494, 1260, 1428,  462,  817, 1361, 1363,
-  525,  565, 1433,  557, 1430,  183, 1431, 1376,  357,  368,
-  484,  123,  607,  290,  642, 1354,  437, 1213,   94, 1211,
- 1360,   -1,   -1,   -1, 1358,
+   59,   59,   59,   59,   59,   59,   59,  123,  123,  277,
+  260,  835, 1487, 1485, 1507, 1292,  624,  316, 1414,  123,
+  582,   73,  470, 1397, 1399, 1465, 1467,  567,  659, 1468,
+  502,  575, 1470, 1412,  365,  376, 1390,  492,  293,  186,
+ 1245,  126,  445, 1396, 1394,   -1, 1243,   97,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  533,
 };
 #define YYFINAL 1
 #ifndef YYDEBUG
 #define YYDEBUG 0
 #endif
-#define YYMAXTOKEN 511
+#define YYMAXTOKEN 516
 #if YYDEBUG
 const char * const yyname[] = {
 "end-of-file",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,
@@ -1379,27 +1412,28 @@
 "FIOERRLOG","FOPERLOG","FOPERSPYLOG","FUSERLOG","GECOS","GENERAL","GLINE",
 "GLINES","GLINE_EXEMPT","GLINE_LOG","GLINE_TIME","GLINE_MIN_CIDR",
 "GLINE_MIN_CIDR6","GLOBAL_KILL","IRCD_AUTH","NEED_IDENT","HAVENT_READ_CONF",
-"HIDDEN","HIDDEN_ADMIN","HIDDEN_NAME","HIDDEN_OPER","HIDE_SERVER_IPS",
-"HIDE_SERVERS","HIDE_SPOOF_IPS","HOST","HUB","HUB_MASK","IDLETIME",
-"IGNORE_BOGUS_TS","INVISIBLE_ON_CONNECT","IP","KILL","KILL_CHASE_TIME_LIMIT",
-"KLINE","KLINE_EXEMPT","KLINE_REASON","KLINE_WITH_REASON","KNOCK_DELAY",
-"KNOCK_DELAY_CHANNEL","LAZYLINK","LEAF_MASK","LINKS_DELAY","LISTEN","T_LOG",
-"LOGGING","LOG_LEVEL","MAX_ACCEPT","MAX_BANS","MAX_CHANS_PER_USER","MAX_GLOBAL",
-"MAX_IDENT","MAX_LOCAL","MAX_NICK_CHANGES","MAX_NICK_TIME","MAX_NUMBER",
-"MAX_TARGETS","MESSAGE_LOCALE","MIN_NONWILDCARD","MIN_NONWILDCARD_SIMPLE",
-"MODULE","MODULES","NAME","NEED_PASSWORD","NETWORK_DESC","NETWORK_NAME","NICK",
-"NICK_CHANGES","NO_CREATE_ON_SPLIT","NO_JOIN_ON_SPLIT","NO_OPER_FLOOD",
-"NO_TILDE","NOT","NUMBER","NUMBER_PER_IDENT","NUMBER_PER_CIDR","NUMBER_PER_IP",
-"NUMBER_PER_IP_GLOBAL","OPERATOR","OPERS_BYPASS_CALLERID","OPER_LOG",
-"OPER_ONLY_UMODES","OPER_PASS_RESV","OPER_SPY_T","OPER_UMODES",
-"JOIN_FLOOD_COUNT","JOIN_FLOOD_TIME","PACE_WAIT","PACE_WAIT_SIMPLE","PASSWORD",
-"PATH","PING_COOKIE","PING_TIME","PING_WARNING","PORT","QSTRING","QUIET_ON_BAN",
-"REASON","REDIRPORT","REDIRSERV","REGEX_T","REHASH","TREJECT_HOLD_TIME",
-"REMOTE","REMOTEBAN","RESTRICT_CHANNELS","RESTRICTED","RSA_PRIVATE_KEY_FILE",
-"RSA_PUBLIC_KEY_FILE","SSL_CERTIFICATE_FILE","RESV","RESV_EXEMPT","SECONDS",
-"MINUTES","HOURS","DAYS","WEEKS","SENDQ","SEND_PASSWORD","SERVERHIDE",
-"SERVERINFO","SERVLINK_PATH","IRCD_SID","TKLINE_EXPIRE_NOTICES","T_SHARED",
-"T_CLUSTER","TYPE","SHORT_MOTD","SILENT","SPOOF","SPOOF_NOTICE",
+"HELP_CHANNEL","HIDDEN","HIDDEN_ADMIN","HIDDEN_NAME","HIDDEN_OPER",
+"HIDE_SERVER_IPS","HIDE_SERVERS","HIDE_SPOOF_IPS","HOST","HUB","HUB_MASK",
+"IDLETIME","IGNORE_BOGUS_TS","INVISIBLE_ON_CONNECT","IP","KILL",
+"KILL_CHASE_TIME_LIMIT","KLINE","KLINE_EXEMPT","KLINE_REASON",
+"KLINE_WITH_REASON","KNOCK_DELAY","KNOCK_DELAY_CHANNEL","LAZYLINK","LEAF_MASK",
+"LINKS_DELAY","LISTEN","T_LOG","LOGGING","LOG_LEVEL","MAX_ACCEPT","MAX_BANS",
+"MAX_CHANS_PER_USER","MAX_GLOBAL","MAX_IDENT","MAX_LOCAL","MAX_NICK_CHANGES",
+"MAX_NICK_TIME","MAX_NUMBER","MAX_TARGETS","MESSAGE_LOCALE","MIN_NONWILDCARD",
+"MIN_NONWILDCARD_SIMPLE","MODULE","MODULES","NAME","NEED_PASSWORD",
+"NETWORK_DESC","NETWORK_NAME","NICK","NICK_CHANGES","NO_CREATE_ON_SPLIT",
+"NO_JOIN_ON_SPLIT","NO_OPER_FLOOD","NO_TILDE","NOT","NUMBER","NUMBER_PER_IDENT",
+"NUMBER_PER_CIDR","NUMBER_PER_IP","NUMBER_PER_IP_GLOBAL","OPERATOR",
+"OPERS_BYPASS_CALLERID","OPER_LOG","OPER_ONLY_UMODES","OPER_PASS_RESV",
+"OPER_SPY_T","OPER_UMODES","JOIN_FLOOD_COUNT","JOIN_FLOOD_TIME","PACE_WAIT",
+"PACE_WAIT_SIMPLE","PASSWORD","PATH","PING_COOKIE","PING_TIME","PING_WARNING",
+"PORT","QSTRING","QUIET_ON_BAN","REASON","REDIRPORT","REDIRSERV","REGEX_T",
+"REHASH","TREJECT_HOLD_TIME","REMOTE","REMOTEBAN","RESTRICT_CHANNELS",
+"RESTRICTED","RSA_PRIVATE_KEY_FILE","RSA_PUBLIC_KEY_FILE",
+"SSL_CERTIFICATE_FILE","RESV","RESV_EXEMPT","SECONDS","MINUTES","HOURS","DAYS",
+"WEEKS","SENDQ","SEND_PASSWORD","SERVERHIDE","SERVERINFO","SERVLINK_PATH",
+"SERVICES_NAME","IRCD_SID","TKLINE_EXPIRE_NOTICES","T_SHARED","T_CLUSTER",
+"T_SNOOP","TYPE","SHORT_MOTD","SILENT","SPOOF","SPOOF_NOTICE",
 "STATS_E_DISABLED","STATS_I_OPER_ONLY","STATS_K_OPER_ONLY","STATS_O_OPER_ONLY",
 "STATS_P_OPER_ONLY","TBOOL","TMASKED","T_REJECT","TS_MAX_DELTA","TS_WARN_DELTA",
 "TWODOTS","T_ALL","T_BOTS","T_SOFTCALLERID","T_CALLERID","T_CCONN",
@@ -1409,8 +1443,9 @@
 "T_MAX_CLIENTS","T_NCHANGE","T_OPERWALL","T_REJ","T_SERVNOTICE","T_SKILL",
 "T_SPY","T_SSL","T_UMODES","T_UNAUTH","T_UNRESV","T_UNXLINE","T_WALLOP",
 "THROTTLE_TIME","TOPICBURST","TRUE_NO_OPER_FLOOD","TKLINE","TXLINE","TRESV",
-"UNKLINE","USER","USE_EGD","USE_EXCEPT","USE_INVEX","USE_KNOCK","USE_LOGGING",
-"USE_WHOIS_ACTUALLY","VHOST","VHOST6","XLINE","WARN","WARN_NO_NLINE",
+"UNKLINE","USER","T_USERMODE","USE_EGD","USE_EXCEPT","USE_INVEX","USE_KNOCK",
+"USE_LOGGING","USE_WHOIS_ACTUALLY","VHOST","VHOST6","XLINE","WARN",
+"WARN_NO_NLINE","WEBIRC",
 };
 const char * const yyrule[] = {
 "$accept : conf",
@@ -1436,6 +1471,7 @@
 "conf_item : gline_entry",
 "conf_item : gecos_entry",
 "conf_item : modules_entry",
+"conf_item : webirc_entry",
 "conf_item : error ';'",
 "conf_item : error '}'",
 "timespec_ :",
@@ -1469,6 +1505,8 @@
 "serverinfo_item : serverinfo_description",
 "serverinfo_item : serverinfo_network_name",
 "serverinfo_item : serverinfo_network_desc",
+"serverinfo_item : serverinfo_services_name",
+"serverinfo_item : serverinfo_help_channel",
 "serverinfo_item : serverinfo_max_clients",
 "serverinfo_item : serverinfo_rsa_private_key_file",
 "serverinfo_item : serverinfo_vhost6",
@@ -1482,6 +1520,8 @@
 "serverinfo_description : DESCRIPTION '=' QSTRING ';'",
 "serverinfo_network_name : NETWORK_NAME '=' QSTRING ';'",
 "serverinfo_network_desc : NETWORK_DESC '=' QSTRING ';'",
+"serverinfo_services_name : SERVICES_NAME '=' QSTRING ';'",
+"serverinfo_help_channel : HELP_CHANNEL '=' QSTRING ';'",
 "serverinfo_vhost : VHOST '=' QSTRING ';'",
 "serverinfo_vhost6 : VHOST6 '=' QSTRING ';'",
 "serverinfo_max_clients : T_MAX_CLIENTS '=' NUMBER ';'",
@@ -1555,6 +1595,7 @@
 "oper_item : oper_rehash",
 "oper_item : oper_admin",
 "oper_item : oper_operwall",
+"oper_item : oper_snoop",
 "oper_item : oper_encrypted",
 "oper_item : oper_rsa_public_key_file",
 "oper_item : oper_flags",
@@ -1603,6 +1644,7 @@
 "oper_hidden_admin : HIDDEN_ADMIN '=' TBOOL ';'",
 "oper_hidden_oper : HIDDEN_OPER '=' TBOOL ';'",
 "oper_operwall : T_OPERWALL '=' TBOOL ';'",
+"oper_snoop : T_SNOOP '=' TBOOL ';'",
 "$$3 :",
 "oper_flags : IRCD_FLAGS $$3 '=' oper_flags_items ';'",
 "oper_flags_items : oper_flags_items ',' oper_flags_item",
@@ -1627,8 +1669,18 @@
 "oper_flags_item_atom : HIDDEN_OPER",
 "oper_flags_item_atom : REMOTEBAN",
 "oper_flags_item_atom : ENCRYPTED",
+"oper_flags_item_atom : T_SNOOP",
 "$$6 :",
-"class_entry : CLASS $$6 class_name_b '{' class_items '}' ';'",
+"webirc_entry : WEBIRC $$6 '{' webirc_items '}' ';'",
+"webirc_items : webirc_items webirc_item",
+"webirc_items : webirc_item",
+"webirc_item : webirc_host",
+"webirc_item : webirc_passwd",
+"webirc_item : error ';'",
+"webirc_host : HOST '=' QSTRING ';'",
+"webirc_passwd : PASSWORD '=' QSTRING ';'",
+"$$7 :",
+"class_entry : CLASS $$7 class_name_b '{' class_items '}' ';'",
 "class_name_b :",
 "class_name_b : class_name_t",
 "class_items : class_items class_item",
@@ -1661,10 +1713,10 @@
 "class_cidr_bitlen_ipv4 : CIDR_BITLEN_IPV4 '=' NUMBER ';'",
 "class_cidr_bitlen_ipv6 : CIDR_BITLEN_IPV6 '=' NUMBER ';'",
 "class_number_per_cidr : NUMBER_PER_CIDR '=' NUMBER ';'",
-"$$7 :",
-"listen_entry : LISTEN $$7 '{' listen_items '}' ';'",
 "$$8 :",
-"listen_flags : IRCD_FLAGS $$8 '=' listen_flags_items ';'",
+"listen_entry : LISTEN $$8 '{' listen_items '}' ';'",
+"$$9 :",
+"listen_flags : IRCD_FLAGS $$9 '=' listen_flags_items ';'",
 "listen_flags_items : listen_flags_items ',' listen_flags_item",
 "listen_flags_items : listen_flags_item",
 "listen_flags_item : T_SSL",
@@ -1676,16 +1728,16 @@
 "listen_item : listen_address",
 "listen_item : listen_host",
 "listen_item : error ';'",
-"$$9 :",
-"listen_port : PORT '=' port_items $$9 ';'",
+"$$10 :",
+"listen_port : PORT '=' port_items $$10 ';'",
 "port_items : port_items ',' port_item",
 "port_items : port_item",
 "port_item : NUMBER",
 "port_item : NUMBER TWODOTS NUMBER",
 "listen_address : IP '=' QSTRING ';'",
 "listen_host : HOST '=' QSTRING ';'",
-"$$10 :",
-"auth_entry : IRCD_AUTH $$10 '{' auth_items '}' ';'",
+"$$11 :",
+"auth_entry : IRCD_AUTH $$11 '{' auth_items '}' ';'",
 "auth_items : auth_items auth_item",
 "auth_items : auth_item",
 "auth_item : auth_user",
@@ -1710,14 +1762,14 @@
 "auth_spoof_notice : SPOOF_NOTICE '=' TBOOL ';'",
 "auth_class : CLASS '=' QSTRING ';'",
 "auth_encrypted : ENCRYPTED '=' TBOOL ';'",
-"$$11 :",
-"auth_flags : IRCD_FLAGS $$11 '=' auth_flags_items ';'",
+"$$12 :",
+"auth_flags : IRCD_FLAGS $$12 '=' auth_flags_items ';'",
 "auth_flags_items : auth_flags_items ',' auth_flags_item",
 "auth_flags_items : auth_flags_item",
-"$$12 :",
-"auth_flags_item : NOT $$12 auth_flags_item_atom",
 "$$13 :",
-"auth_flags_item : $$13 auth_flags_item_atom",
+"auth_flags_item : NOT $$13 auth_flags_item_atom",
+"$$14 :",
+"auth_flags_item : $$14 auth_flags_item_atom",
 "auth_flags_item_atom : SPOOF_NOTICE",
 "auth_flags_item_atom : EXCEED_LIMIT",
 "auth_flags_item_atom : KLINE_EXEMPT",
@@ -1738,8 +1790,8 @@
 "auth_redir_serv : REDIRSERV '=' QSTRING ';'",
 "auth_redir_port : REDIRPORT '=' NUMBER ';'",
 "auth_need_password : NEED_PASSWORD '=' TBOOL ';'",
-"$$14 :",
-"resv_entry : RESV $$14 '{' resv_items '}' ';'",
+"$$15 :",
+"resv_entry : RESV $$15 '{' resv_items '}' ';'",
 "resv_items : resv_items resv_item",
 "resv_items : resv_item",
 "resv_item : resv_creason",
@@ -1749,8 +1801,8 @@
 "resv_creason : REASON '=' QSTRING ';'",
 "resv_channel : CHANNEL '=' QSTRING ';'",
 "resv_nick : NICK '=' QSTRING ';'",
-"$$15 :",
-"shared_entry : T_SHARED $$15 '{' shared_items '}' ';'",
+"$$16 :",
+"shared_entry : T_SHARED $$16 '{' shared_items '}' ';'",
 "shared_items : shared_items shared_item",
 "shared_items : shared_item",
 "shared_item : shared_name",
@@ -1759,8 +1811,8 @@
 "shared_item : error ';'",
 "shared_name : NAME '=' QSTRING ';'",
 "shared_user : USER '=' QSTRING ';'",
-"$$16 :",
-"shared_type : TYPE $$16 '=' shared_types ';'",
+"$$17 :",
+"shared_type : TYPE $$17 '=' shared_types ';'",
 "shared_types : shared_types ',' shared_type_item",
 "shared_types : shared_type_item",
 "shared_type_item : KLINE",
@@ -1773,17 +1825,18 @@
 "shared_type_item : TRESV",
 "shared_type_item : T_UNRESV",
 "shared_type_item : T_LOCOPS",
+"shared_type_item : T_USERMODE",
 "shared_type_item : T_ALL",
-"$$17 :",
-"cluster_entry : T_CLUSTER $$17 '{' cluster_items '}' ';'",
+"$$18 :",
+"cluster_entry : T_CLUSTER $$18 '{' cluster_items '}' ';'",
 "cluster_items : cluster_items cluster_item",
 "cluster_items : cluster_item",
 "cluster_item : cluster_name",
 "cluster_item : cluster_type",
 "cluster_item : error ';'",
 "cluster_name : NAME '=' QSTRING ';'",
-"$$18 :",
-"cluster_type : TYPE $$18 '=' cluster_types ';'",
+"$$19 :",
+"cluster_type : TYPE $$19 '=' cluster_types ';'",
 "cluster_types : cluster_types ',' cluster_type_item",
 "cluster_types : cluster_type_item",
 "cluster_type_item : KLINE",
@@ -1797,8 +1850,8 @@
 "cluster_type_item : T_UNRESV",
 "cluster_type_item : T_LOCOPS",
 "cluster_type_item : T_ALL",
-"$$19 :",
-"connect_entry : CONNECT $$19 connect_name_b '{' connect_items '}' ';'",
+"$$20 :",
+"connect_entry : CONNECT $$20 connect_name_b '{' connect_items '}' ';'",
 "connect_name_b :",
 "connect_name_b : connect_name_t",
 "connect_items : connect_items connect_item",
@@ -1833,14 +1886,14 @@
 "connect_aftype : AFTYPE '=' T_IPV4 ';'",
 "connect_aftype : AFTYPE '=' T_IPV6 ';'",
 "connect_fakename : FAKENAME '=' QSTRING ';'",
-"$$20 :",
-"connect_flags : IRCD_FLAGS $$20 '=' connect_flags_items ';'",
+"$$21 :",
+"connect_flags : IRCD_FLAGS $$21 '=' connect_flags_items ';'",
 "connect_flags_items : connect_flags_items ',' connect_flags_item",
 "connect_flags_items : connect_flags_item",
-"$$21 :",
-"connect_flags_item : NOT $$21 connect_flags_item_atom",
 "$$22 :",
-"connect_flags_item : $$22 connect_flags_item_atom",
+"connect_flags_item : NOT $$22 connect_flags_item_atom",
+"$$23 :",
+"connect_flags_item : $$23 connect_flags_item_atom",
 "connect_flags_item_atom : LAZYLINK",
 "connect_flags_item_atom : COMPRESSED",
 "connect_flags_item_atom : CRYPTLINK",
@@ -1857,10 +1910,10 @@
 "connect_leaf_mask : LEAF_MASK '=' QSTRING ';'",
 "connect_class : CLASS '=' QSTRING ';'",
 "connect_cipher_preference : CIPHER_PREFERENCE '=' QSTRING ';'",
-"$$23 :",
-"kill_entry : KILL $$23 '{' kill_items '}' ';'",
 "$$24 :",
-"kill_type : TYPE $$24 '=' kill_type_items ';'",
+"kill_entry : KILL $$24 '{' kill_items '}' ';'",
+"$$25 :",
+"kill_type : TYPE $$25 '=' kill_type_items ';'",
 "kill_type_items : kill_type_items ',' kill_type_item",
 "kill_type_items : kill_type_item",
 "kill_type_item : REGEX_T",
@@ -1872,8 +1925,8 @@
 "kill_item : error",
 "kill_user : USER '=' QSTRING ';'",
 "kill_reason : REASON '=' QSTRING ';'",
-"$$25 :",
-"deny_entry : DENY $$25 '{' deny_items '}' ';'",
+"$$26 :",
+"deny_entry : DENY $$26 '{' deny_items '}' ';'",
 "deny_items : deny_items deny_item",
 "deny_items : deny_item",
 "deny_item : deny_ip",
@@ -1887,10 +1940,10 @@
 "exempt_item : exempt_ip",
 "exempt_item : error",
 "exempt_ip : IP '=' QSTRING ';'",
-"$$26 :",
-"gecos_entry : GECOS $$26 '{' gecos_items '}' ';'",
 "$$27 :",
-"gecos_flags : TYPE $$27 '=' gecos_flags_items ';'",
+"gecos_entry : GECOS $$27 '{' gecos_items '}' ';'",
+"$$28 :",
+"gecos_flags : TYPE $$28 '=' gecos_flags_items ';'",
 "gecos_flags_items : gecos_flags_items ',' gecos_flags_item",
 "gecos_flags_items : gecos_flags_item",
 "gecos_flags_item : REGEX_T",
@@ -2011,8 +2064,8 @@
 "general_ping_cookie : PING_COOKIE '=' TBOOL ';'",
 "general_disable_auth : DISABLE_AUTH '=' TBOOL ';'",
 "general_throttle_time : THROTTLE_TIME '=' timespec ';'",
-"$$28 :",
-"general_oper_umodes : OPER_UMODES $$28 '=' umode_oitems ';'",
+"$$29 :",
+"general_oper_umodes : OPER_UMODES $$29 '=' umode_oitems ';'",
 "umode_oitems : umode_oitems ',' umode_oitem",
 "umode_oitems : umode_oitem",
 "umode_oitem : T_BOTS",
@@ -2034,8 +2087,8 @@
 "umode_oitem : T_SOFTCALLERID",
 "umode_oitem : T_CALLERID",
 "umode_oitem : T_LOCOPS",
-"$$29 :",
-"general_oper_only_umodes : OPER_ONLY_UMODES $$29 '=' umode_items ';'",
+"$$30 :",
+"general_oper_only_umodes : OPER_ONLY_UMODES $$30 '=' umode_items ';'",
 "umode_items : umode_items ',' umode_item",
 "umode_items : umode_item",
 "umode_item : T_BOTS",
@@ -2062,8 +2115,8 @@
 "general_default_floodcount : DEFAULT_FLOODCOUNT '=' NUMBER ';'",
 "general_client_flood : T_CLIENT_FLOOD '=' sizespec ';'",
 "general_dot_in_ip6_addr : DOT_IN_IP6_ADDR '=' TBOOL ';'",
-"$$30 :",
-"gline_entry : GLINES $$30 '{' gline_items '}' ';'",
+"$$31 :",
+"gline_entry : GLINES $$31 '{' gline_items '}' ';'",
 "gline_items : gline_items gline_item",
 "gline_items : gline_item",
 "gline_item : gline_enable",
@@ -2075,16 +2128,16 @@
 "gline_item : error",
 "gline_enable : ENABLE '=' TBOOL ';'",
 "gline_duration : DURATION '=' timespec ';'",
-"$$31 :",
-"gline_logging : LOGGING $$31 '=' gline_logging_types ';'",
+"$$32 :",
+"gline_logging : LOGGING $$32 '=' gline_logging_types ';'",
 "gline_logging_types : gline_logging_types ',' gline_logging_type_item",
 "gline_logging_types : gline_logging_type_item",
 "gline_logging_type_item : T_REJECT",
 "gline_logging_type_item : T_BLOCK",
 "gline_user : USER '=' QSTRING ';'",
 "gline_server : NAME '=' QSTRING ';'",
-"$$32 :",
-"gline_action : ACTION $$32 '=' gdeny_types ';'",
+"$$33 :",
+"gline_action : ACTION $$33 '=' gdeny_types ';'",
 "gdeny_types : gdeny_types ',' gdeny_type_item",
 "gdeny_types : gdeny_type_item",
 "gdeny_type_item : T_REJECT",
@@ -2370,68 +2423,68 @@
     yyval = yyvsp[1-yym];
     switch (yyn)
     {
-case 25:
-#line 424 "ircd_parser.y"
+case 26:
+#line 430 "ircd_parser.y"
 { yyval.number = 0; }
 break;
-case 27:
-#line 426 "ircd_parser.y"
+case 28:
+#line 432 "ircd_parser.y"
 {
 			yyval.number = yyvsp[-1].number + yyvsp[0].number;
 		}
 break;
-case 28:
-#line 430 "ircd_parser.y"
+case 29:
+#line 436 "ircd_parser.y"
 {
 			yyval.number = yyvsp[-2].number + yyvsp[0].number;
 		}
 break;
-case 29:
-#line 434 "ircd_parser.y"
+case 30:
+#line 440 "ircd_parser.y"
 {
 			yyval.number = yyvsp[-2].number * 60 + yyvsp[0].number;
 		}
 break;
-case 30:
-#line 438 "ircd_parser.y"
+case 31:
+#line 444 "ircd_parser.y"
 {
 			yyval.number = yyvsp[-2].number * 60 * 60 + yyvsp[0].number;
 		}
 break;
-case 31:
-#line 442 "ircd_parser.y"
+case 32:
+#line 448 "ircd_parser.y"
 {
 			yyval.number = yyvsp[-2].number * 60 * 60 * 24 + yyvsp[0].number;
 		}
 break;
-case 32:
-#line 446 "ircd_parser.y"
+case 33:
+#line 452 "ircd_parser.y"
 {
 			yyval.number = yyvsp[-2].number * 60 * 60 * 24 * 7 + yyvsp[0].number;
 		}
 break;
-case 33:
-#line 451 "ircd_parser.y"
+case 34:
+#line 457 "ircd_parser.y"
 { yyval.number = 0; }
 break;
-case 35:
-#line 452 "ircd_parser.y"
+case 36:
+#line 458 "ircd_parser.y"
 { yyval.number = yyvsp[-1].number + yyvsp[0].number; }
 break;
-case 36:
-#line 453 "ircd_parser.y"
+case 37:
+#line 459 "ircd_parser.y"
 { yyval.number = yyvsp[-2].number + yyvsp[0].number; }
 break;
-case 37:
-#line 454 "ircd_parser.y"
+case 38:
+#line 460 "ircd_parser.y"
 { yyval.number = yyvsp[-2].number * 1024 + yyvsp[0].number; }
 break;
-case 38:
-#line 455 "ircd_parser.y"
+case 39:
+#line 461 "ircd_parser.y"
 { yyval.number = yyvsp[-2].number * 1024 * 1024 + yyvsp[0].number; }
 break;
-case 45:
-#line 469 "ircd_parser.y"
+case 46:
+#line 475 "ircd_parser.y"
 {
 #ifndef STATIC_MODULES /* NOOP in the static case */
   if (ypass == 2)
@@ -2448,8 +2501,8 @@
 #endif
 }
 break;
-case 46:
-#line 486 "ircd_parser.y"
+case 47:
+#line 492 "ircd_parser.y"
 {
 #ifndef STATIC_MODULES
   if (ypass == 2)
@@ -2457,8 +2510,8 @@
 #endif
 }
 break;
-case 62:
-#line 510 "ircd_parser.y"
+case 65:
+#line 517 "ircd_parser.y"
 {
 #ifdef HAVE_LIBCRYPTO
   if (ypass == 2 && ServerInfo.ctx) 
@@ -2492,8 +2545,8 @@
 #endif
 }
 break;
-case 63:
-#line 544 "ircd_parser.y"
+case 66:
+#line 551 "ircd_parser.y"
 {
 #ifdef HAVE_LIBCRYPTO
   if (ypass == 1)
@@ -2553,8 +2606,8 @@
 #endif
 }
 break;
-case 64:
-#line 604 "ircd_parser.y"
+case 67:
+#line 611 "ircd_parser.y"
 {
   /* this isn't rehashable */
   if (ypass == 2)
@@ -2568,8 +2621,8 @@
   }
 }
 break;
-case 65:
-#line 618 "ircd_parser.y"
+case 68:
+#line 625 "ircd_parser.y"
 {
   /* this isn't rehashable */
   if (ypass == 2 && !ServerInfo.sid)
@@ -2584,8 +2637,8 @@
   }
 }
 break;
-case 66:
-#line 633 "ircd_parser.y"
+case 69:
+#line 640 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -2594,8 +2647,8 @@
   }
 }
 break;
-case 67:
-#line 642 "ircd_parser.y"
+case 70:
+#line 649 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -2609,8 +2662,8 @@
   }
 }
 break;
-case 68:
-#line 656 "ircd_parser.y"
+case 71:
+#line 663 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -2619,9 +2672,29 @@
   }
 }
 break;
-case 69:
-#line 665 "ircd_parser.y"
+case 72:
+#line 672 "ircd_parser.y"
 {
+  if (ypass == 2)
+  {
+    MyFree(ServerInfo.services_name);
+    DupString(ServerInfo.services_name, yylval.string);
+  }
+}
+break;
+case 73:
+#line 681 "ircd_parser.y"
+{
+  if (ypass == 2)
+  {
+    MyFree(ServerInfo.help_channel);
+    DupString(ServerInfo.help_channel, yylval.string);
+  }
+}
+break;
+case 74:
+#line 690 "ircd_parser.y"
+{
   if (ypass == 2 && *yylval.string != '*')
   {
     struct addrinfo hints, *res;
@@ -2648,8 +2721,8 @@
   }
 }
 break;
-case 70:
-#line 693 "ircd_parser.y"
+case 75:
+#line 718 "ircd_parser.y"
 {
 #ifdef IPV6
   if (ypass == 2 && *yylval.string != '*')
@@ -2679,8 +2752,8 @@
 #endif
 }
 break;
-case 71:
-#line 723 "ircd_parser.y"
+case 76:
+#line 748 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -2703,8 +2776,8 @@
   }
 }
 break;
-case 72:
-#line 746 "ircd_parser.y"
+case 77:
+#line 771 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -2751,8 +2824,8 @@
   }
 }
 break;
-case 80:
-#line 802 "ircd_parser.y"
+case 85:
+#line 827 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -2761,8 +2834,8 @@
   }
 }
 break;
-case 81:
-#line 811 "ircd_parser.y"
+case 86:
+#line 836 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -2771,8 +2844,8 @@
   }
 }
 break;
-case 82:
-#line 820 "ircd_parser.y"
+case 87:
+#line 845 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -2781,138 +2854,138 @@
   }
 }
 break;
-case 99:
-#line 847 "ircd_parser.y"
+case 104:
+#line 872 "ircd_parser.y"
 {
                         }
 break;
-case 100:
-#line 851 "ircd_parser.y"
+case 105:
+#line 876 "ircd_parser.y"
 {
                         }
 break;
-case 101:
-#line 855 "ircd_parser.y"
+case 106:
+#line 880 "ircd_parser.y"
 {
   if (ypass == 2)
     strlcpy(ConfigLoggingEntry.userlog, yylval.string,
             sizeof(ConfigLoggingEntry.userlog));
 }
 break;
-case 102:
-#line 862 "ircd_parser.y"
+case 107:
+#line 887 "ircd_parser.y"
 {
   if (ypass == 2)
     strlcpy(ConfigLoggingEntry.failed_operlog, yylval.string,
             sizeof(ConfigLoggingEntry.failed_operlog));
 }
 break;
-case 103:
-#line 869 "ircd_parser.y"
+case 108:
+#line 894 "ircd_parser.y"
 {
   if (ypass == 2)
     strlcpy(ConfigLoggingEntry.operlog, yylval.string,
             sizeof(ConfigLoggingEntry.operlog));
 }
 break;
-case 104:
-#line 876 "ircd_parser.y"
+case 109:
+#line 901 "ircd_parser.y"
 {
   if (ypass == 2)
     strlcpy(ConfigLoggingEntry.operspylog, yylval.string,
             sizeof(ConfigLoggingEntry.operspylog));
 }
 break;
-case 105:
-#line 883 "ircd_parser.y"
+case 110:
+#line 908 "ircd_parser.y"
 {
   if (ypass == 2)
     strlcpy(ConfigLoggingEntry.glinelog, yylval.string,
             sizeof(ConfigLoggingEntry.glinelog));
 }
 break;
-case 106:
-#line 890 "ircd_parser.y"
+case 111:
+#line 915 "ircd_parser.y"
 {
   if (ypass == 2)
     strlcpy(ConfigLoggingEntry.klinelog, yylval.string,
             sizeof(ConfigLoggingEntry.klinelog));
 }
 break;
-case 107:
-#line 897 "ircd_parser.y"
+case 112:
+#line 922 "ircd_parser.y"
 {
   if (ypass == 2)
     strlcpy(ConfigLoggingEntry.ioerrlog, yylval.string,
             sizeof(ConfigLoggingEntry.ioerrlog));
 }
 break;
-case 108:
-#line 904 "ircd_parser.y"
+case 113:
+#line 929 "ircd_parser.y"
 {
   if (ypass == 2)
     strlcpy(ConfigLoggingEntry.killlog, yylval.string,
             sizeof(ConfigLoggingEntry.killlog));
 }
 break;
-case 109:
-#line 911 "ircd_parser.y"
+case 114:
+#line 936 "ircd_parser.y"
 { 
   if (ypass == 2)
     set_log_level(L_CRIT);
 }
 break;
-case 110:
-#line 915 "ircd_parser.y"
+case 115:
+#line 940 "ircd_parser.y"
 {
   if (ypass == 2)
     set_log_level(L_ERROR);
 }
 break;
-case 111:
-#line 919 "ircd_parser.y"
+case 116:
+#line 944 "ircd_parser.y"
 {
   if (ypass == 2)
     set_log_level(L_WARN);
 }
 break;
-case 112:
-#line 923 "ircd_parser.y"
+case 117:
+#line 948 "ircd_parser.y"
 {
   if (ypass == 2)
     set_log_level(L_NOTICE);
 }
 break;
-case 113:
-#line 927 "ircd_parser.y"
+case 118:
+#line 952 "ircd_parser.y"
 {
   if (ypass == 2)
     set_log_level(L_TRACE);
 }
 break;
-case 114:
-#line 931 "ircd_parser.y"
+case 119:
+#line 956 "ircd_parser.y"
 {
   if (ypass == 2)
     set_log_level(L_INFO);
 }
 break;
-case 115:
-#line 935 "ircd_parser.y"
+case 120:
+#line 960 "ircd_parser.y"
 {
   if (ypass == 2)
     set_log_level(L_DEBUG);
 }
 break;
-case 116:
-#line 941 "ircd_parser.y"
+case 121:
+#line 966 "ircd_parser.y"
 {
   if (ypass == 2)
     ConfigLoggingEntry.use_logging = yylval.number;
 }
 break;
-case 117:
-#line 950 "ircd_parser.y"
+case 122:
+#line 975 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -2927,8 +3000,8 @@
   }
 }
 break;
-case 118:
-#line 963 "ircd_parser.y"
+case 123:
+#line 988 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3009,8 +3082,8 @@
   }
 }
 break;
-case 146:
-#line 1055 "ircd_parser.y"
+case 152:
+#line 1080 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3022,8 +3095,8 @@
   }
 }
 break;
-case 147:
-#line 1067 "ircd_parser.y"
+case 153:
+#line 1092 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3035,8 +3108,8 @@
   }
 }
 break;
-case 148:
-#line 1079 "ircd_parser.y"
+case 154:
+#line 1104 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3070,8 +3143,8 @@
   }
 }
 break;
-case 149:
-#line 1113 "ircd_parser.y"
+case 155:
+#line 1138 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3083,8 +3156,8 @@
   }
 }
 break;
-case 150:
-#line 1125 "ircd_parser.y"
+case 156:
+#line 1150 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3095,8 +3168,8 @@
   }
 }
 break;
-case 151:
-#line 1136 "ircd_parser.y"
+case 157:
+#line 1161 "ircd_parser.y"
 {
 #ifdef HAVE_LIBCRYPTO
   if (ypass == 2)
@@ -3138,8 +3211,8 @@
 #endif /* HAVE_LIBCRYPTO */
 }
 break;
-case 152:
-#line 1178 "ircd_parser.y"
+case 158:
+#line 1203 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3148,148 +3221,148 @@
   }
 }
 break;
-case 153:
-#line 1187 "ircd_parser.y"
+case 159:
+#line 1212 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes = 0;
 }
 break;
-case 157:
-#line 1194 "ircd_parser.y"
+case 163:
+#line 1219 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_BOTS;
 }
 break;
-case 158:
-#line 1198 "ircd_parser.y"
+case 164:
+#line 1223 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_CCONN;
 }
 break;
-case 159:
-#line 1202 "ircd_parser.y"
+case 165:
+#line 1227 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_CCONN_FULL;
 }
 break;
-case 160:
-#line 1206 "ircd_parser.y"
+case 166:
+#line 1231 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_DEAF;
 }
 break;
-case 161:
-#line 1210 "ircd_parser.y"
+case 167:
+#line 1235 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_DEBUG;
 }
 break;
-case 162:
-#line 1214 "ircd_parser.y"
+case 168:
+#line 1239 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_FULL;
 }
 break;
-case 163:
-#line 1218 "ircd_parser.y"
+case 169:
+#line 1243 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_SKILL;
 }
 break;
-case 164:
-#line 1222 "ircd_parser.y"
+case 170:
+#line 1247 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_NCHANGE;
 }
 break;
-case 165:
-#line 1226 "ircd_parser.y"
+case 171:
+#line 1251 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_REJ;
 }
 break;
-case 166:
-#line 1230 "ircd_parser.y"
+case 172:
+#line 1255 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_UNAUTH;
 }
 break;
-case 167:
-#line 1234 "ircd_parser.y"
+case 173:
+#line 1259 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_SPY;
 }
 break;
-case 168:
-#line 1238 "ircd_parser.y"
+case 174:
+#line 1263 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_EXTERNAL;
 }
 break;
-case 169:
-#line 1242 "ircd_parser.y"
+case 175:
+#line 1267 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_OPERWALL;
 }
 break;
-case 170:
-#line 1246 "ircd_parser.y"
+case 176:
+#line 1271 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_SERVNOTICE;
 }
 break;
-case 171:
-#line 1250 "ircd_parser.y"
+case 177:
+#line 1275 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_INVISIBLE;
 }
 break;
-case 172:
-#line 1254 "ircd_parser.y"
+case 178:
+#line 1279 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_WALLOP;
 }
 break;
-case 173:
-#line 1258 "ircd_parser.y"
+case 179:
+#line 1283 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_SOFTCALLERID;
 }
 break;
-case 174:
-#line 1262 "ircd_parser.y"
+case 180:
+#line 1287 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_CALLERID;
 }
 break;
-case 175:
-#line 1266 "ircd_parser.y"
+case 181:
+#line 1291 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->modes |= UMODE_LOCOPS;
 }
 break;
-case 176:
-#line 1272 "ircd_parser.y"
+case 182:
+#line 1297 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3300,8 +3373,8 @@
   }
 }
 break;
-case 177:
-#line 1283 "ircd_parser.y"
+case 183:
+#line 1308 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3312,8 +3385,8 @@
   }
 }
 break;
-case 178:
-#line 1294 "ircd_parser.y"
+case 184:
+#line 1319 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3324,8 +3397,8 @@
   }
 }
 break;
-case 179:
-#line 1305 "ircd_parser.y"
+case 185:
+#line 1330 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3336,8 +3409,8 @@
   }
 }
 break;
-case 180:
-#line 1316 "ircd_parser.y"
+case 186:
+#line 1341 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3348,8 +3421,8 @@
   }
 }
 break;
-case 181:
-#line 1327 "ircd_parser.y"
+case 187:
+#line 1352 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3360,8 +3433,8 @@
   }
 }
 break;
-case 182:
-#line 1338 "ircd_parser.y"
+case 188:
+#line 1363 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3372,8 +3445,8 @@
   }
 }
 break;
-case 183:
-#line 1349 "ircd_parser.y"
+case 189:
+#line 1374 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3384,8 +3457,8 @@
   }
 }
 break;
-case 184:
-#line 1360 "ircd_parser.y"
+case 190:
+#line 1385 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3396,8 +3469,8 @@
   }
 }
 break;
-case 185:
-#line 1371 "ircd_parser.y"
+case 191:
+#line 1396 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3408,8 +3481,8 @@
   }
 }
 break;
-case 186:
-#line 1382 "ircd_parser.y"
+case 192:
+#line 1407 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3420,8 +3493,8 @@
   }
 }
 break;
-case 187:
-#line 1393 "ircd_parser.y"
+case 193:
+#line 1418 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3432,8 +3505,8 @@
   }
 }
 break;
-case 188:
-#line 1404 "ircd_parser.y"
+case 194:
+#line 1429 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3444,8 +3517,8 @@
   }
 }
 break;
-case 189:
-#line 1415 "ircd_parser.y"
+case 195:
+#line 1440 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3456,21 +3529,33 @@
   }
 }
 break;
-case 190:
-#line 1426 "ircd_parser.y"
+case 196:
+#line 1451 "ircd_parser.y"
 {
+  if (ypass == 2)
+  {
+    if (yylval.number)
+      yy_aconf->port |= OPER_FLAG_SNOOP;
+    else
+      yy_aconf->port &= ~OPER_FLAG_SNOOP;
+  }
 }
 break;
-case 194:
-#line 1430 "ircd_parser.y"
+case 197:
+#line 1462 "ircd_parser.y"
+{
+}
+break;
+case 201:
+#line 1466 "ircd_parser.y"
 { not_atom = 1; }
 break;
-case 196:
-#line 1431 "ircd_parser.y"
+case 203:
+#line 1467 "ircd_parser.y"
 { not_atom = 0; }
 break;
-case 198:
-#line 1434 "ircd_parser.y"
+case 205:
+#line 1470 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3479,8 +3564,8 @@
   }
 }
 break;
-case 199:
-#line 1441 "ircd_parser.y"
+case 206:
+#line 1477 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3489,8 +3574,8 @@
   }
 }
 break;
-case 200:
-#line 1448 "ircd_parser.y"
+case 207:
+#line 1484 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3499,8 +3584,8 @@
   }
 }
 break;
-case 201:
-#line 1455 "ircd_parser.y"
+case 208:
+#line 1491 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3509,8 +3594,8 @@
   } 
 }
 break;
-case 202:
-#line 1462 "ircd_parser.y"
+case 209:
+#line 1498 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3519,8 +3604,8 @@
   }
 }
 break;
-case 203:
-#line 1469 "ircd_parser.y"
+case 210:
+#line 1505 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3529,8 +3614,8 @@
   }
 }
 break;
-case 204:
-#line 1476 "ircd_parser.y"
+case 211:
+#line 1512 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3539,8 +3624,8 @@
   }
 }
 break;
-case 205:
-#line 1483 "ircd_parser.y"
+case 212:
+#line 1519 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3549,8 +3634,8 @@
   }
 }
 break;
-case 206:
-#line 1490 "ircd_parser.y"
+case 213:
+#line 1526 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3559,8 +3644,8 @@
   }
 }
 break;
-case 207:
-#line 1497 "ircd_parser.y"
+case 214:
+#line 1533 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3569,8 +3654,8 @@
   }
 }
 break;
-case 208:
-#line 1504 "ircd_parser.y"
+case 215:
+#line 1540 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3579,8 +3664,8 @@
   }
 }
 break;
-case 209:
-#line 1511 "ircd_parser.y"
+case 216:
+#line 1547 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3589,8 +3674,8 @@
   }
 }
 break;
-case 210:
-#line 1518 "ircd_parser.y"
+case 217:
+#line 1554 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3599,8 +3684,8 @@
   }
 }
 break;
-case 211:
-#line 1525 "ircd_parser.y"
+case 218:
+#line 1561 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3609,8 +3694,8 @@
   }
 }
 break;
-case 212:
-#line 1532 "ircd_parser.y"
+case 219:
+#line 1568 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3619,8 +3704,8 @@
   }
 }
 break;
-case 213:
-#line 1539 "ircd_parser.y"
+case 220:
+#line 1575 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3629,9 +3714,62 @@
   }
 }
 break;
-case 214:
-#line 1552 "ircd_parser.y"
+case 221:
+#line 1582 "ircd_parser.y"
 {
+  if (ypass == 2)
+  {
+    if (not_atom) yy_aconf->port &= ~OPER_FLAG_SNOOP;
+    else yy_aconf->port |= OPER_FLAG_SNOOP;
+  }
+}
+break;
+case 222:
+#line 1594 "ircd_parser.y"
+{
+  if (ypass == 2)
+  {
+    yy_conf = make_conf_item(WEBIRC_TYPE);
+    yy_aconf = map_to_conf(yy_conf);
+  }
+}
+break;
+case 223:
+#line 1601 "ircd_parser.y"
+{
+  if (ypass == 2)
+  {
+    yy_conf = NULL;
+    yy_aconf = NULL;
+  }
+}
+break;
+case 229:
+#line 1613 "ircd_parser.y"
+{
+  if (ypass == 2)
+  {
+    MyFree(yy_aconf->host);
+    DupString(yy_aconf->host, yylval.string);
+  }
+}
+break;
+case 230:
+#line 1622 "ircd_parser.y"
+{
+  if (ypass == 2)
+  {
+    if (yy_aconf->passwd != NULL)
+      memset(yy_aconf->passwd, 0, strlen(yy_aconf->passwd));
+
+    MyFree(yy_aconf->passwd);
+    DupString(yy_aconf->passwd, yylval.string);
+  }
+}
+break;
+case 231:
+#line 1637 "ircd_parser.y"
+{
   if (ypass == 1)
   {
     yy_conf = make_conf_item(CLASS_TYPE);
@@ -3639,8 +3777,8 @@
   }
 }
 break;
-case 215:
-#line 1559 "ircd_parser.y"
+case 232:
+#line 1644 "ircd_parser.y"
 {
   if (ypass == 1)
   {
@@ -3683,8 +3821,8 @@
   }
 }
 break;
-case 234:
-#line 1619 "ircd_parser.y"
+case 251:
+#line 1704 "ircd_parser.y"
 {
   if (ypass == 1)
   {
@@ -3693,8 +3831,8 @@
   }
 }
 break;
-case 235:
-#line 1628 "ircd_parser.y"
+case 252:
+#line 1713 "ircd_parser.y"
 {
   if (ypass == 1)
   {
@@ -3703,92 +3841,92 @@
   }
 }
 break;
-case 236:
-#line 1637 "ircd_parser.y"
+case 253:
+#line 1722 "ircd_parser.y"
 {
   if (ypass == 1)
     PingFreq(yy_class) = yyvsp[-1].number;
 }
 break;
-case 237:
-#line 1643 "ircd_parser.y"
+case 254:
+#line 1728 "ircd_parser.y"
 {
   if (ypass == 1)
     PingWarning(yy_class) = yyvsp[-1].number;
 }
 break;
-case 238:
-#line 1649 "ircd_parser.y"
+case 255:
+#line 1734 "ircd_parser.y"
 {
   if (ypass == 1)
     MaxPerIp(yy_class) = yyvsp[-1].number;
 }
 break;
-case 239:
-#line 1655 "ircd_parser.y"
+case 256:
+#line 1740 "ircd_parser.y"
 {
   if (ypass == 1)
     ConFreq(yy_class) = yyvsp[-1].number;
 }
 break;
-case 240:
-#line 1661 "ircd_parser.y"
+case 257:
+#line 1746 "ircd_parser.y"
 {
   if (ypass == 1)
     MaxTotal(yy_class) = yyvsp[-1].number;
 }
 break;
-case 241:
-#line 1667 "ircd_parser.y"
+case 258:
+#line 1752 "ircd_parser.y"
 {
   if (ypass == 1)
     MaxGlobal(yy_class) = yyvsp[-1].number;
 }
 break;
-case 242:
-#line 1673 "ircd_parser.y"
+case 259:
+#line 1758 "ircd_parser.y"
 {
   if (ypass == 1)
     MaxLocal(yy_class) = yyvsp[-1].number;
 }
 break;
-case 243:
-#line 1679 "ircd_parser.y"
+case 260:
+#line 1764 "ircd_parser.y"
 {
   if (ypass == 1)
     MaxIdent(yy_class) = yyvsp[-1].number;
 }
 break;
-case 244:
-#line 1685 "ircd_parser.y"
+case 261:
+#line 1770 "ircd_parser.y"
 {
   if (ypass == 1)
     MaxSendq(yy_class) = yyvsp[-1].number;
 }
 break;
-case 245:
-#line 1691 "ircd_parser.y"
+case 262:
+#line 1776 "ircd_parser.y"
 {
   if (ypass == 1)
     CidrBitlenIPV4(yy_class) = yyvsp[-1].number;
 }
 break;
-case 246:
-#line 1697 "ircd_parser.y"
+case 263:
+#line 1782 "ircd_parser.y"
 {
   if (ypass == 1)
     CidrBitlenIPV6(yy_class) = yyvsp[-1].number;
 }
 break;
-case 247:
-#line 1703 "ircd_parser.y"
+case 264:
+#line 1788 "ircd_parser.y"
 {
   if (ypass == 1)
     NumberPerCidr(yy_class) = yyvsp[-1].number;
 }
 break;
-case 248:
-#line 1712 "ircd_parser.y"
+case 265:
+#line 1797 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3797,8 +3935,8 @@
   }
 }
 break;
-case 249:
-#line 1719 "ircd_parser.y"
+case 266:
+#line 1804 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3807,32 +3945,32 @@
   }
 }
 break;
-case 250:
-#line 1728 "ircd_parser.y"
+case 267:
+#line 1813 "ircd_parser.y"
 {
   listener_flags = 0;
 }
 break;
-case 254:
-#line 1734 "ircd_parser.y"
+case 271:
+#line 1819 "ircd_parser.y"
 {
   if (ypass == 2)
     listener_flags |= LISTENER_SSL;
 }
 break;
-case 255:
-#line 1738 "ircd_parser.y"
+case 272:
+#line 1823 "ircd_parser.y"
 {
   if (ypass == 2)
     listener_flags |= LISTENER_HIDDEN;
 }
 break;
-case 263:
-#line 1746 "ircd_parser.y"
+case 280:
+#line 1831 "ircd_parser.y"
 { listener_flags = 0; }
 break;
-case 267:
-#line 1751 "ircd_parser.y"
+case 284:
+#line 1836 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3848,8 +3986,8 @@
   }
 }
 break;
-case 268:
-#line 1765 "ircd_parser.y"
+case 285:
+#line 1850 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3869,8 +4007,8 @@
   }
 }
 break;
-case 269:
-#line 1785 "ircd_parser.y"
+case 286:
+#line 1870 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3879,8 +4017,8 @@
   }
 }
 break;
-case 270:
-#line 1794 "ircd_parser.y"
+case 287:
+#line 1879 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3889,8 +4027,8 @@
   }
 }
 break;
-case 271:
-#line 1806 "ircd_parser.y"
+case 288:
+#line 1891 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3904,8 +4042,8 @@
   }
 }
 break;
-case 272:
-#line 1818 "ircd_parser.y"
+case 289:
+#line 1903 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3962,8 +4100,8 @@
   }
 }
 break;
-case 292:
-#line 1883 "ircd_parser.y"
+case 309:
+#line 1968 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -3998,8 +4136,8 @@
   }
 }
 break;
-case 293:
-#line 1920 "ircd_parser.y"
+case 310:
+#line 2005 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4012,8 +4150,8 @@
   }
 }
 break;
-case 294:
-#line 1933 "ircd_parser.y"
+case 311:
+#line 2018 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4024,8 +4162,8 @@
   }
 }
 break;
-case 295:
-#line 1944 "ircd_parser.y"
+case 312:
+#line 2029 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4034,8 +4172,8 @@
   }
 }
 break;
-case 296:
-#line 1953 "ircd_parser.y"
+case 313:
+#line 2038 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4046,21 +4184,21 @@
   }
 }
 break;
-case 297:
-#line 1964 "ircd_parser.y"
+case 314:
+#line 2049 "ircd_parser.y"
 {
 }
 break;
-case 301:
-#line 1968 "ircd_parser.y"
+case 318:
+#line 2053 "ircd_parser.y"
 { not_atom = 1; }
 break;
-case 303:
-#line 1969 "ircd_parser.y"
+case 320:
+#line 2054 "ircd_parser.y"
 { not_atom = 0; }
 break;
-case 305:
-#line 1972 "ircd_parser.y"
+case 322:
+#line 2057 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4070,8 +4208,8 @@
 
 }
 break;
-case 306:
-#line 1980 "ircd_parser.y"
+case 323:
+#line 2065 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4080,8 +4218,8 @@
   }
 }
 break;
-case 307:
-#line 1987 "ircd_parser.y"
+case 324:
+#line 2072 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4090,8 +4228,8 @@
   } 
 }
 break;
-case 308:
-#line 1994 "ircd_parser.y"
+case 325:
+#line 2079 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4100,8 +4238,8 @@
   }
 }
 break;
-case 309:
-#line 2001 "ircd_parser.y"
+case 326:
+#line 2086 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4110,8 +4248,8 @@
   }
 }
 break;
-case 310:
-#line 2008 "ircd_parser.y"
+case 327:
+#line 2093 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4120,8 +4258,8 @@
   }
 }
 break;
-case 311:
-#line 2015 "ircd_parser.y"
+case 328:
+#line 2100 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4130,8 +4268,8 @@
   } 
 }
 break;
-case 312:
-#line 2022 "ircd_parser.y"
+case 329:
+#line 2107 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4140,8 +4278,8 @@
   } 
 }
 break;
-case 313:
-#line 2029 "ircd_parser.y"
+case 330:
+#line 2114 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4150,8 +4288,8 @@
   }
 }
 break;
-case 314:
-#line 2036 "ircd_parser.y"
+case 331:
+#line 2121 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4160,8 +4298,8 @@
   }
 }
 break;
-case 315:
-#line 2045 "ircd_parser.y"
+case 332:
+#line 2130 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4172,8 +4310,8 @@
   }
 }
 break;
-case 316:
-#line 2056 "ircd_parser.y"
+case 333:
+#line 2141 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4184,8 +4322,8 @@
   }
 }
 break;
-case 317:
-#line 2067 "ircd_parser.y"
+case 334:
+#line 2152 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4196,8 +4334,8 @@
   }
 }
 break;
-case 318:
-#line 2078 "ircd_parser.y"
+case 335:
+#line 2163 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4208,8 +4346,8 @@
   }
 }
 break;
-case 319:
-#line 2089 "ircd_parser.y"
+case 336:
+#line 2174 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4220,8 +4358,8 @@
   }
 }
 break;
-case 320:
-#line 2100 "ircd_parser.y"
+case 337:
+#line 2185 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4232,8 +4370,8 @@
   }
 }
 break;
-case 321:
-#line 2112 "ircd_parser.y"
+case 338:
+#line 2197 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4252,8 +4390,8 @@
   }
 }
 break;
-case 322:
-#line 2131 "ircd_parser.y"
+case 339:
+#line 2216 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4263,8 +4401,8 @@
   }
 }
 break;
-case 323:
-#line 2141 "ircd_parser.y"
+case 340:
+#line 2226 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4273,8 +4411,8 @@
   }
 }
 break;
-case 324:
-#line 2150 "ircd_parser.y"
+case 341:
+#line 2235 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4285,8 +4423,8 @@
   }
 }
 break;
-case 325:
-#line 2165 "ircd_parser.y"
+case 342:
+#line 2250 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4295,8 +4433,8 @@
   }
 }
 break;
-case 326:
-#line 2172 "ircd_parser.y"
+case 343:
+#line 2257 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4305,8 +4443,8 @@
   }
 }
 break;
-case 333:
-#line 2184 "ircd_parser.y"
+case 350:
+#line 2269 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4315,8 +4453,8 @@
   }
 }
 break;
-case 334:
-#line 2193 "ircd_parser.y"
+case 351:
+#line 2278 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4331,8 +4469,8 @@
    * its an erroneous name --fl_ */
 }
 break;
-case 335:
-#line 2208 "ircd_parser.y"
+case 352:
+#line 2293 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4342,8 +4480,8 @@
   }
 }
 break;
-case 336:
-#line 2221 "ircd_parser.y"
+case 353:
+#line 2306 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4353,8 +4491,8 @@
   }
 }
 break;
-case 337:
-#line 2229 "ircd_parser.y"
+case 354:
+#line 2314 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4362,8 +4500,8 @@
   }
 }
 break;
-case 344:
-#line 2240 "ircd_parser.y"
+case 361:
+#line 2325 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4372,8 +4510,8 @@
   }
 }
 break;
-case 345:
-#line 2249 "ircd_parser.y"
+case 362:
+#line 2334 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4395,92 +4533,99 @@
   }
 }
 break;
-case 346:
-#line 2271 "ircd_parser.y"
+case 363:
+#line 2356 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_match_item->action = 0;
 }
 break;
-case 350:
-#line 2278 "ircd_parser.y"
+case 367:
+#line 2363 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_match_item->action |= SHARED_KLINE;
 }
 break;
-case 351:
-#line 2282 "ircd_parser.y"
+case 368:
+#line 2367 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_match_item->action |= SHARED_TKLINE;
 }
 break;
-case 352:
-#line 2286 "ircd_parser.y"
+case 369:
+#line 2371 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_match_item->action |= SHARED_UNKLINE;
 }
 break;
-case 353:
-#line 2290 "ircd_parser.y"
+case 370:
+#line 2375 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_match_item->action |= SHARED_XLINE;
 }
 break;
-case 354:
-#line 2294 "ircd_parser.y"
+case 371:
+#line 2379 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_match_item->action |= SHARED_TXLINE;
 }
 break;
-case 355:
-#line 2298 "ircd_parser.y"
+case 372:
+#line 2383 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_match_item->action |= SHARED_UNXLINE;
 }
 break;
-case 356:
-#line 2302 "ircd_parser.y"
+case 373:
+#line 2387 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_match_item->action |= SHARED_RESV;
 }
 break;
-case 357:
-#line 2306 "ircd_parser.y"
+case 374:
+#line 2391 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_match_item->action |= SHARED_TRESV;
 }
 break;
-case 358:
-#line 2310 "ircd_parser.y"
+case 375:
+#line 2395 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_match_item->action |= SHARED_UNRESV;
 }
 break;
-case 359:
-#line 2314 "ircd_parser.y"
+case 376:
+#line 2399 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_match_item->action |= SHARED_LOCOPS;
 }
 break;
-case 360:
-#line 2318 "ircd_parser.y"
+case 377:
+#line 2403 "ircd_parser.y"
 {
   if (ypass == 2)
+    yy_match_item->action |= SHARED_USERMODE;
+}
+break;
+case 378:
+#line 2407 "ircd_parser.y"
+{
+  if (ypass == 2)
     yy_match_item->action = SHARED_ALL;
 }
 break;
-case 361:
-#line 2327 "ircd_parser.y"
+case 379:
+#line 2416 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4489,8 +4634,8 @@
   }
 }
 break;
-case 362:
-#line 2334 "ircd_parser.y"
+case 380:
+#line 2423 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4500,99 +4645,99 @@
   }
 }
 break;
-case 368:
-#line 2347 "ircd_parser.y"
+case 386:
+#line 2436 "ircd_parser.y"
 {
   if (ypass == 2)
     DupString(yy_conf->name, yylval.string);
 }
 break;
-case 369:
-#line 2353 "ircd_parser.y"
+case 387:
+#line 2442 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_conf->flags = 0;
 }
 break;
-case 373:
-#line 2360 "ircd_parser.y"
+case 391:
+#line 2449 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_conf->flags |= SHARED_KLINE;
 }
 break;
-case 374:
-#line 2364 "ircd_parser.y"
+case 392:
+#line 2453 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_conf->flags |= SHARED_TKLINE;
 }
 break;
-case 375:
-#line 2368 "ircd_parser.y"
+case 393:
+#line 2457 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_conf->flags |= SHARED_UNKLINE;
 }
 break;
-case 376:
-#line 2372 "ircd_parser.y"
+case 394:
+#line 2461 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_conf->flags |= SHARED_XLINE;
 }
 break;
-case 377:
-#line 2376 "ircd_parser.y"
+case 395:
+#line 2465 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_conf->flags |= SHARED_TXLINE;
 }
 break;
-case 378:
-#line 2380 "ircd_parser.y"
+case 396:
+#line 2469 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_conf->flags |= SHARED_UNXLINE;
 }
 break;
-case 379:
-#line 2384 "ircd_parser.y"
+case 397:
+#line 2473 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_conf->flags |= SHARED_RESV;
 }
 break;
-case 380:
-#line 2388 "ircd_parser.y"
+case 398:
+#line 2477 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_conf->flags |= SHARED_TRESV;
 }
 break;
-case 381:
-#line 2392 "ircd_parser.y"
+case 399:
+#line 2481 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_conf->flags |= SHARED_UNRESV;
 }
 break;
-case 382:
-#line 2396 "ircd_parser.y"
+case 400:
+#line 2485 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_conf->flags |= SHARED_LOCOPS;
 }
 break;
-case 383:
-#line 2400 "ircd_parser.y"
+case 401:
+#line 2489 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_conf->flags = SHARED_ALL;
 }
 break;
-case 384:
-#line 2409 "ircd_parser.y"
+case 402:
+#line 2498 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4612,8 +4757,8 @@
   }
 }
 break;
-case 385:
-#line 2427 "ircd_parser.y"
+case 403:
+#line 2516 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4741,8 +4886,8 @@
   }
 }
 break;
-case 410:
-#line 2566 "ircd_parser.y"
+case 428:
+#line 2655 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4754,8 +4899,8 @@
   }
 }
 break;
-case 411:
-#line 2578 "ircd_parser.y"
+case 429:
+#line 2667 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4767,8 +4912,8 @@
   }
 }
 break;
-case 412:
-#line 2590 "ircd_parser.y"
+case 430:
+#line 2679 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4777,8 +4922,8 @@
   }
 }
 break;
-case 413:
-#line 2599 "ircd_parser.y"
+case 431:
+#line 2688 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4804,8 +4949,8 @@
   }
 }
 break;
-case 414:
-#line 2625 "ircd_parser.y"
+case 432:
+#line 2714 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4823,8 +4968,8 @@
   }
 }
 break;
-case 415:
-#line 2643 "ircd_parser.y"
+case 433:
+#line 2732 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4842,22 +4987,22 @@
   }
 }
 break;
-case 416:
-#line 2661 "ircd_parser.y"
+case 434:
+#line 2750 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->port = yyvsp[-1].number;
 }
 break;
-case 417:
-#line 2667 "ircd_parser.y"
+case 435:
+#line 2756 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->aftype = AF_INET;
 }
 break;
-case 418:
-#line 2671 "ircd_parser.y"
+case 436:
+#line 2760 "ircd_parser.y"
 {
 #ifdef IPV6
   if (ypass == 2)
@@ -4865,8 +5010,8 @@
 #endif
 }
 break;
-case 419:
-#line 2679 "ircd_parser.y"
+case 437:
+#line 2768 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4875,21 +5020,21 @@
   }
 }
 break;
-case 420:
-#line 2688 "ircd_parser.y"
+case 438:
+#line 2777 "ircd_parser.y"
 {
 }
 break;
-case 424:
-#line 2692 "ircd_parser.y"
+case 442:
+#line 2781 "ircd_parser.y"
 { not_atom = 1; }
 break;
-case 426:
-#line 2693 "ircd_parser.y"
+case 444:
+#line 2782 "ircd_parser.y"
 { not_atom = 0; }
 break;
-case 428:
-#line 2696 "ircd_parser.y"
+case 446:
+#line 2785 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4898,8 +5043,8 @@
   }
 }
 break;
-case 429:
-#line 2703 "ircd_parser.y"
+case 447:
+#line 2792 "ircd_parser.y"
 {
   if (ypass == 2)
 #ifndef HAVE_LIBZ
@@ -4912,8 +5057,8 @@
 #endif
 }
 break;
-case 430:
-#line 2714 "ircd_parser.y"
+case 448:
+#line 2803 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4922,8 +5067,8 @@
   }
 }
 break;
-case 431:
-#line 2721 "ircd_parser.y"
+case 449:
+#line 2810 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4932,8 +5077,8 @@
   }
 }
 break;
-case 432:
-#line 2728 "ircd_parser.y"
+case 450:
+#line 2817 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4942,8 +5087,8 @@
   }
 }
 break;
-case 433:
-#line 2735 "ircd_parser.y"
+case 451:
+#line 2824 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -4952,8 +5097,8 @@
   }
 }
 break;
-case 434:
-#line 2745 "ircd_parser.y"
+case 452:
+#line 2834 "ircd_parser.y"
 {
 #ifdef HAVE_LIBCRYPTO
   if (ypass == 2)
@@ -4994,8 +5139,8 @@
 #endif /* HAVE_LIBCRYPTO */
 }
 break;
-case 435:
-#line 2786 "ircd_parser.y"
+case 453:
+#line 2875 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5006,8 +5151,8 @@
   }
 }
 break;
-case 436:
-#line 2797 "ircd_parser.y"
+case 454:
+#line 2886 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5018,8 +5163,8 @@
   }
 }
 break;
-case 437:
-#line 2808 "ircd_parser.y"
+case 455:
+#line 2897 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5034,8 +5179,8 @@
   }
 }
 break;
-case 438:
-#line 2823 "ircd_parser.y"
+case 456:
+#line 2912 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5046,8 +5191,8 @@
   }
 }
 break;
-case 439:
-#line 2834 "ircd_parser.y"
+case 457:
+#line 2923 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5058,8 +5203,8 @@
   }
 }
 break;
-case 440:
-#line 2845 "ircd_parser.y"
+case 458:
+#line 2934 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5072,8 +5217,8 @@
   }
 }
 break;
-case 441:
-#line 2858 "ircd_parser.y"
+case 459:
+#line 2947 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5086,8 +5231,8 @@
   }
 }
 break;
-case 442:
-#line 2871 "ircd_parser.y"
+case 460:
+#line 2960 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5096,8 +5241,8 @@
   }
 }
 break;
-case 443:
-#line 2880 "ircd_parser.y"
+case 461:
+#line 2969 "ircd_parser.y"
 {
 #ifdef HAVE_LIBCRYPTO
   if (ypass == 2)
@@ -5129,8 +5274,8 @@
 #endif
 }
 break;
-case 444:
-#line 2915 "ircd_parser.y"
+case 462:
+#line 3004 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5139,8 +5284,8 @@
   }
 }
 break;
-case 445:
-#line 2922 "ircd_parser.y"
+case 463:
+#line 3011 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5197,20 +5342,20 @@
   }
 }
 break;
-case 446:
-#line 2979 "ircd_parser.y"
+case 464:
+#line 3068 "ircd_parser.y"
 {
 }
 break;
-case 450:
-#line 2984 "ircd_parser.y"
+case 468:
+#line 3073 "ircd_parser.y"
 {
   if (ypass == 2)
     regex_ban = 1;
 }
 break;
-case 457:
-#line 2993 "ircd_parser.y"
+case 475:
+#line 3082 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5229,15 +5374,15 @@
   }
 }
 break;
-case 458:
-#line 3012 "ircd_parser.y"
+case 476:
+#line 3101 "ircd_parser.y"
 {
   if (ypass == 2)
     strlcpy(reasonbuf, yylval.string, sizeof(reasonbuf));
 }
 break;
-case 459:
-#line 3021 "ircd_parser.y"
+case 477:
+#line 3110 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5248,8 +5393,8 @@
   }
 }
 break;
-case 460:
-#line 3030 "ircd_parser.y"
+case 478:
+#line 3119 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5262,8 +5407,8 @@
   }
 }
 break;
-case 466:
-#line 3046 "ircd_parser.y"
+case 484:
+#line 3135 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5272,8 +5417,8 @@
   }
 }
 break;
-case 467:
-#line 3055 "ircd_parser.y"
+case 485:
+#line 3144 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5282,8 +5427,8 @@
   }
 }
 break;
-case 473:
-#line 3072 "ircd_parser.y"
+case 491:
+#line 3161 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5301,8 +5446,8 @@
   }
 }
 break;
-case 474:
-#line 3093 "ircd_parser.y"
+case 492:
+#line 3182 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5311,8 +5456,8 @@
   }
 }
 break;
-case 475:
-#line 3100 "ircd_parser.y"
+case 493:
+#line 3189 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5347,143 +5492,143 @@
   }
 }
 break;
-case 476:
-#line 3135 "ircd_parser.y"
+case 494:
+#line 3224 "ircd_parser.y"
 {
 }
 break;
-case 480:
-#line 3140 "ircd_parser.y"
+case 498:
+#line 3229 "ircd_parser.y"
 {
   if (ypass == 2)
     regex_ban = 1;
 }
 break;
-case 487:
-#line 3149 "ircd_parser.y"
+case 505:
+#line 3238 "ircd_parser.y"
 {
   if (ypass == 2)
     strlcpy(gecos_name, yylval.string, sizeof(gecos_name));
 }
 break;
-case 488:
-#line 3155 "ircd_parser.y"
+case 506:
+#line 3244 "ircd_parser.y"
 {
   if (ypass == 2)
     strlcpy(reasonbuf, yylval.string, sizeof(reasonbuf));
 }
 break;
-case 548:
-#line 3200 "ircd_parser.y"
+case 566:
+#line 3289 "ircd_parser.y"
 {
   ConfigFileEntry.gline_min_cidr = yyvsp[-1].number;
 }
 break;
-case 549:
-#line 3205 "ircd_parser.y"
+case 567:
+#line 3294 "ircd_parser.y"
 {
   ConfigFileEntry.gline_min_cidr6 = yyvsp[-1].number;
 }
 break;
-case 550:
-#line 3210 "ircd_parser.y"
+case 568:
+#line 3299 "ircd_parser.y"
 {
   ConfigFileEntry.burst_away = yylval.number;
 }
 break;
-case 551:
-#line 3215 "ircd_parser.y"
+case 569:
+#line 3304 "ircd_parser.y"
 {
   ConfigFileEntry.use_whois_actually = yylval.number;
 }
 break;
-case 552:
-#line 3220 "ircd_parser.y"
+case 570:
+#line 3309 "ircd_parser.y"
 {
   GlobalSetOptions.rejecttime = yylval.number;
 }
 break;
-case 553:
-#line 3225 "ircd_parser.y"
+case 571:
+#line 3314 "ircd_parser.y"
 {
   ConfigFileEntry.tkline_expire_notices = yylval.number;
 }
 break;
-case 554:
-#line 3230 "ircd_parser.y"
+case 572:
+#line 3319 "ircd_parser.y"
 {
   ConfigFileEntry.kill_chase_time_limit = yyvsp[-1].number;
 }
 break;
-case 555:
-#line 3235 "ircd_parser.y"
+case 573:
+#line 3324 "ircd_parser.y"
 {
   ConfigFileEntry.hide_spoof_ips = yylval.number;
 }
 break;
-case 556:
-#line 3240 "ircd_parser.y"
+case 574:
+#line 3329 "ircd_parser.y"
 {
   ConfigFileEntry.ignore_bogus_ts = yylval.number;
 }
 break;
-case 557:
-#line 3245 "ircd_parser.y"
+case 575:
+#line 3334 "ircd_parser.y"
 {
   ConfigFileEntry.disable_remote = yylval.number;
 }
 break;
-case 558:
-#line 3250 "ircd_parser.y"
+case 576:
+#line 3339 "ircd_parser.y"
 {
   ConfigFileEntry.failed_oper_notice = yylval.number;
 }
 break;
-case 559:
-#line 3255 "ircd_parser.y"
+case 577:
+#line 3344 "ircd_parser.y"
 {
   ConfigFileEntry.anti_nick_flood = yylval.number;
 }
 break;
-case 560:
-#line 3260 "ircd_parser.y"
+case 578:
+#line 3349 "ircd_parser.y"
 {
   ConfigFileEntry.max_nick_time = yyvsp[-1].number; 
 }
 break;
-case 561:
-#line 3265 "ircd_parser.y"
+case 579:
+#line 3354 "ircd_parser.y"
 {
   ConfigFileEntry.max_nick_changes = yyvsp[-1].number;
 }
 break;
-case 562:
-#line 3270 "ircd_parser.y"
+case 580:
+#line 3359 "ircd_parser.y"
 {
   ConfigFileEntry.max_accept = yyvsp[-1].number;
 }
 break;
-case 563:
-#line 3275 "ircd_parser.y"
+case 581:
+#line 3364 "ircd_parser.y"
 {
   ConfigFileEntry.anti_spam_exit_message_time = yyvsp[-1].number;
 }
 break;
-case 564:
-#line 3280 "ircd_parser.y"
+case 582:
+#line 3369 "ircd_parser.y"
 {
   ConfigFileEntry.ts_warn_delta = yyvsp[-1].number;
 }
 break;
-case 565:
-#line 3285 "ircd_parser.y"
+case 583:
+#line 3374 "ircd_parser.y"
 {
   if (ypass == 2)
     ConfigFileEntry.ts_max_delta = yyvsp[-1].number;
 }
 break;
-case 566:
-#line 3291 "ircd_parser.y"
+case 584:
+#line 3380 "ircd_parser.y"
 {
   if ((yyvsp[-1].number > 0) && ypass == 1)
   {
@@ -5494,14 +5639,14 @@
   }
 }
 break;
-case 567:
-#line 3302 "ircd_parser.y"
+case 585:
+#line 3391 "ircd_parser.y"
 {
   ConfigFileEntry.kline_with_reason = yylval.number;
 }
 break;
-case 568:
-#line 3307 "ircd_parser.y"
+case 586:
+#line 3396 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5510,110 +5655,110 @@
   }
 }
 break;
-case 569:
-#line 3316 "ircd_parser.y"
+case 587:
+#line 3405 "ircd_parser.y"
 {
   ConfigFileEntry.invisible_on_connect = yylval.number;
 }
 break;
-case 570:
-#line 3321 "ircd_parser.y"
+case 588:
+#line 3410 "ircd_parser.y"
 {
   ConfigFileEntry.warn_no_nline = yylval.number;
 }
 break;
-case 571:
-#line 3326 "ircd_parser.y"
+case 589:
+#line 3415 "ircd_parser.y"
 {
   ConfigFileEntry.stats_e_disabled = yylval.number;
 }
 break;
-case 572:
-#line 3331 "ircd_parser.y"
+case 590:
+#line 3420 "ircd_parser.y"
 {
   ConfigFileEntry.stats_o_oper_only = yylval.number;
 }
 break;
-case 573:
-#line 3336 "ircd_parser.y"
+case 591:
+#line 3425 "ircd_parser.y"
 {
   ConfigFileEntry.stats_P_oper_only = yylval.number;
 }
 break;
-case 574:
-#line 3341 "ircd_parser.y"
+case 592:
+#line 3430 "ircd_parser.y"
 {
   ConfigFileEntry.stats_k_oper_only = 2 * yylval.number;
 }
 break;
-case 575:
-#line 3344 "ircd_parser.y"
+case 593:
+#line 3433 "ircd_parser.y"
 {
   ConfigFileEntry.stats_k_oper_only = 1;
 }
 break;
-case 576:
-#line 3349 "ircd_parser.y"
+case 594:
+#line 3438 "ircd_parser.y"
 {
   ConfigFileEntry.stats_i_oper_only = 2 * yylval.number;
 }
 break;
-case 577:
-#line 3352 "ircd_parser.y"
+case 595:
+#line 3441 "ircd_parser.y"
 {
   ConfigFileEntry.stats_i_oper_only = 1;
 }
 break;
-case 578:
-#line 3357 "ircd_parser.y"
+case 596:
+#line 3446 "ircd_parser.y"
 {
   ConfigFileEntry.pace_wait = yyvsp[-1].number;
 }
 break;
-case 579:
-#line 3362 "ircd_parser.y"
+case 597:
+#line 3451 "ircd_parser.y"
 {
   ConfigFileEntry.caller_id_wait = yyvsp[-1].number;
 }
 break;
-case 580:
-#line 3367 "ircd_parser.y"
+case 598:
+#line 3456 "ircd_parser.y"
 {
   ConfigFileEntry.opers_bypass_callerid = yylval.number;
 }
 break;
-case 581:
-#line 3372 "ircd_parser.y"
+case 599:
+#line 3461 "ircd_parser.y"
 {
   ConfigFileEntry.pace_wait_simple = yyvsp[-1].number;
 }
 break;
-case 582:
-#line 3377 "ircd_parser.y"
+case 600:
+#line 3466 "ircd_parser.y"
 {
   ConfigFileEntry.short_motd = yylval.number;
 }
 break;
-case 583:
-#line 3382 "ircd_parser.y"
+case 601:
+#line 3471 "ircd_parser.y"
 {
   ConfigFileEntry.no_oper_flood = yylval.number;
 }
 break;
-case 584:
-#line 3387 "ircd_parser.y"
+case 602:
+#line 3476 "ircd_parser.y"
 {
   ConfigFileEntry.true_no_oper_flood = yylval.number;
 }
 break;
-case 585:
-#line 3392 "ircd_parser.y"
+case 603:
+#line 3481 "ircd_parser.y"
 {
   ConfigFileEntry.oper_pass_resv = yylval.number;
 }
 break;
-case 586:
-#line 3397 "ircd_parser.y"
+case 604:
+#line 3486 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5624,26 +5769,26 @@
   }
 }
 break;
-case 587:
-#line 3408 "ircd_parser.y"
+case 605:
+#line 3497 "ircd_parser.y"
 {
   ConfigFileEntry.idletime = yyvsp[-1].number;
 }
 break;
-case 588:
-#line 3413 "ircd_parser.y"
+case 606:
+#line 3502 "ircd_parser.y"
 {
   ConfigFileEntry.dots_in_ident = yyvsp[-1].number;
 }
 break;
-case 589:
-#line 3418 "ircd_parser.y"
+case 607:
+#line 3507 "ircd_parser.y"
 {
   ConfigFileEntry.max_targets = yyvsp[-1].number;
 }
 break;
-case 590:
-#line 3423 "ircd_parser.y"
+case 608:
+#line 3512 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5652,8 +5797,8 @@
   }
 }
 break;
-case 591:
-#line 3432 "ircd_parser.y"
+case 609:
+#line 3521 "ircd_parser.y"
 {
 #ifdef HAVE_LIBCRYPTO
   if (ypass == 2)
@@ -5685,8 +5830,8 @@
 #endif
 }
 break;
-case 592:
-#line 3464 "ircd_parser.y"
+case 610:
+#line 3553 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5704,14 +5849,14 @@
   }
 }
 break;
-case 593:
-#line 3482 "ircd_parser.y"
+case 611:
+#line 3571 "ircd_parser.y"
 {
   ConfigFileEntry.use_egd = yylval.number;
 }
 break;
-case 594:
-#line 3487 "ircd_parser.y"
+case 612:
+#line 3576 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -5720,296 +5865,296 @@
   }
 }
 break;
-case 595:
-#line 3496 "ircd_parser.y"
+case 613:
+#line 3585 "ircd_parser.y"
 {
   ConfigFileEntry.ping_cookie = yylval.number;
 }
 break;
-case 596:
-#line 3501 "ircd_parser.y"
+case 614:
+#line 3590 "ircd_parser.y"
 {
   ConfigFileEntry.disable_auth = yylval.number;
 }
 break;
-case 597:
-#line 3506 "ircd_parser.y"
+case 615:
+#line 3595 "ircd_parser.y"
 {
   ConfigFileEntry.throttle_time = yylval.number;
 }
 break;
-case 598:
-#line 3511 "ircd_parser.y"
+case 616:
+#line 3600 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes = 0;
 }
 break;
-case 602:
-#line 3517 "ircd_parser.y"
+case 620:
+#line 3606 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_BOTS;
 }
 break;
-case 603:
-#line 3520 "ircd_parser.y"
+case 621:
+#line 3609 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_CCONN;
 }
 break;
-case 604:
-#line 3523 "ircd_parser.y"
+case 622:
+#line 3612 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_CCONN_FULL;
 }
 break;
-case 605:
-#line 3526 "ircd_parser.y"
+case 623:
+#line 3615 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_DEAF;
 }
 break;
-case 606:
-#line 3529 "ircd_parser.y"
+case 624:
+#line 3618 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_DEBUG;
 }
 break;
-case 607:
-#line 3532 "ircd_parser.y"
+case 625:
+#line 3621 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_FULL;
 }
 break;
-case 608:
-#line 3535 "ircd_parser.y"
+case 626:
+#line 3624 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_SKILL;
 }
 break;
-case 609:
-#line 3538 "ircd_parser.y"
+case 627:
+#line 3627 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_NCHANGE;
 }
 break;
-case 610:
-#line 3541 "ircd_parser.y"
+case 628:
+#line 3630 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_REJ;
 }
 break;
-case 611:
-#line 3544 "ircd_parser.y"
+case 629:
+#line 3633 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_UNAUTH;
 }
 break;
-case 612:
-#line 3547 "ircd_parser.y"
+case 630:
+#line 3636 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_SPY;
 }
 break;
-case 613:
-#line 3550 "ircd_parser.y"
+case 631:
+#line 3639 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_EXTERNAL;
 }
 break;
-case 614:
-#line 3553 "ircd_parser.y"
+case 632:
+#line 3642 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_OPERWALL;
 }
 break;
-case 615:
-#line 3556 "ircd_parser.y"
+case 633:
+#line 3645 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_SERVNOTICE;
 }
 break;
-case 616:
-#line 3559 "ircd_parser.y"
+case 634:
+#line 3648 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_INVISIBLE;
 }
 break;
-case 617:
-#line 3562 "ircd_parser.y"
+case 635:
+#line 3651 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_WALLOP;
 }
 break;
-case 618:
-#line 3565 "ircd_parser.y"
+case 636:
+#line 3654 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_SOFTCALLERID;
 }
 break;
-case 619:
-#line 3568 "ircd_parser.y"
+case 637:
+#line 3657 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_CALLERID;
 }
 break;
-case 620:
-#line 3571 "ircd_parser.y"
+case 638:
+#line 3660 "ircd_parser.y"
 {
   ConfigFileEntry.oper_umodes |= UMODE_LOCOPS;
 }
 break;
-case 621:
-#line 3576 "ircd_parser.y"
+case 639:
+#line 3665 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes = 0;
 }
 break;
-case 625:
-#line 3582 "ircd_parser.y"
+case 643:
+#line 3671 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes |= UMODE_BOTS;
 }
 break;
-case 626:
-#line 3585 "ircd_parser.y"
+case 644:
+#line 3674 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes |= UMODE_CCONN;
 }
 break;
-case 627:
-#line 3588 "ircd_parser.y"
+case 645:
+#line 3677 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes |= UMODE_CCONN_FULL;
 }
 break;
-case 628:
-#line 3591 "ircd_parser.y"
+case 646:
+#line 3680 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes |= UMODE_DEAF;
 }
 break;
-case 629:
-#line 3594 "ircd_parser.y"
+case 647:
+#line 3683 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes |= UMODE_DEBUG;
 }
 break;
-case 630:
-#line 3597 "ircd_parser.y"
+case 648:
+#line 3686 "ircd_parser.y"
 { 
   ConfigFileEntry.oper_only_umodes |= UMODE_FULL;
 }
 break;
-case 631:
-#line 3600 "ircd_parser.y"
+case 649:
+#line 3689 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes |= UMODE_SKILL;
 }
 break;
-case 632:
-#line 3603 "ircd_parser.y"
+case 650:
+#line 3692 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes |= UMODE_NCHANGE;
 }
 break;
-case 633:
-#line 3606 "ircd_parser.y"
+case 651:
+#line 3695 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes |= UMODE_REJ;
 }
 break;
-case 634:
-#line 3609 "ircd_parser.y"
+case 652:
+#line 3698 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes |= UMODE_UNAUTH;
 }
 break;
-case 635:
-#line 3612 "ircd_parser.y"
+case 653:
+#line 3701 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes |= UMODE_SPY;
 }
 break;
-case 636:
-#line 3615 "ircd_parser.y"
+case 654:
+#line 3704 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes |= UMODE_EXTERNAL;
 }
 break;
-case 637:
-#line 3618 "ircd_parser.y"
+case 655:
+#line 3707 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes |= UMODE_OPERWALL;
 }
 break;
-case 638:
-#line 3621 "ircd_parser.y"
+case 656:
+#line 3710 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes |= UMODE_SERVNOTICE;
 }
 break;
-case 639:
-#line 3624 "ircd_parser.y"
+case 657:
+#line 3713 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes |= UMODE_INVISIBLE;
 }
 break;
-case 640:
-#line 3627 "ircd_parser.y"
+case 658:
+#line 3716 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes |= UMODE_WALLOP;
 }
 break;
-case 641:
-#line 3630 "ircd_parser.y"
+case 659:
+#line 3719 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes |= UMODE_SOFTCALLERID;
 }
 break;
-case 642:
-#line 3633 "ircd_parser.y"
+case 660:
+#line 3722 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes |= UMODE_CALLERID;
 }
 break;
-case 643:
-#line 3636 "ircd_parser.y"
+case 661:
+#line 3725 "ircd_parser.y"
 {
   ConfigFileEntry.oper_only_umodes |= UMODE_LOCOPS;
 }
 break;
-case 644:
-#line 3641 "ircd_parser.y"
+case 662:
+#line 3730 "ircd_parser.y"
 {
   ConfigFileEntry.min_nonwildcard = yyvsp[-1].number;
 }
 break;
-case 645:
-#line 3646 "ircd_parser.y"
+case 663:
+#line 3735 "ircd_parser.y"
 {
   ConfigFileEntry.min_nonwildcard_simple = yyvsp[-1].number;
 }
 break;
-case 646:
-#line 3651 "ircd_parser.y"
+case 664:
+#line 3740 "ircd_parser.y"
 {
   ConfigFileEntry.default_floodcount = yyvsp[-1].number;
 }
 break;
-case 647:
-#line 3656 "ircd_parser.y"
+case 665:
+#line 3745 "ircd_parser.y"
 {
   ConfigFileEntry.client_flood = yyvsp[-1].number;
 }
 break;
-case 648:
-#line 3661 "ircd_parser.y"
+case 666:
+#line 3750 "ircd_parser.y"
 {
   ConfigFileEntry.dot_in_ip6_addr = yylval.number;
 }
 break;
-case 649:
-#line 3669 "ircd_parser.y"
+case 667:
+#line 3758 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -6018,8 +6163,8 @@
   }
 }
 break;
-case 650:
-#line 3676 "ircd_parser.y"
+case 668:
+#line 3765 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -6036,43 +6181,43 @@
   }
 }
 break;
-case 660:
-#line 3702 "ircd_parser.y"
+case 678:
+#line 3791 "ircd_parser.y"
 {
   if (ypass == 2)
     ConfigFileEntry.glines = yylval.number;
 }
 break;
-case 661:
-#line 3708 "ircd_parser.y"
+case 679:
+#line 3797 "ircd_parser.y"
 {
   if (ypass == 2)
     ConfigFileEntry.gline_time = yyvsp[-1].number;
 }
 break;
-case 662:
-#line 3714 "ircd_parser.y"
+case 680:
+#line 3803 "ircd_parser.y"
 {
   if (ypass == 2)
     ConfigFileEntry.gline_logging = 0;
 }
 break;
-case 666:
-#line 3720 "ircd_parser.y"
+case 684:
+#line 3809 "ircd_parser.y"
 {
   if (ypass == 2)
     ConfigFileEntry.gline_logging |= GDENY_REJECT;
 }
 break;
-case 667:
-#line 3724 "ircd_parser.y"
+case 685:
+#line 3813 "ircd_parser.y"
 {
   if (ypass == 2)
     ConfigFileEntry.gline_logging |= GDENY_BLOCK;
 }
 break;
-case 668:
-#line 3730 "ircd_parser.y"
+case 686:
+#line 3819 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -6106,8 +6251,8 @@
   }
 }
 break;
-case 669:
-#line 3764 "ircd_parser.y"
+case 687:
+#line 3853 "ircd_parser.y"
 {
   if (ypass == 2)  
   {
@@ -6116,15 +6261,15 @@
   }
 }
 break;
-case 670:
-#line 3773 "ircd_parser.y"
+case 688:
+#line 3862 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->flags = 0;
 }
 break;
-case 671:
-#line 3777 "ircd_parser.y"
+case 689:
+#line 3866 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -6170,144 +6315,144 @@
   }
 }
 break;
-case 674:
-#line 3824 "ircd_parser.y"
+case 692:
+#line 3913 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->flags |= GDENY_REJECT;
 }
 break;
-case 675:
-#line 3828 "ircd_parser.y"
+case 693:
+#line 3917 "ircd_parser.y"
 {
   if (ypass == 2)
     yy_aconf->flags |= GDENY_BLOCK;
 }
 break;
-case 698:
-#line 3852 "ircd_parser.y"
+case 716:
+#line 3941 "ircd_parser.y"
 {
   ConfigChannel.disable_fake_channels = yylval.number;
 }
 break;
-case 699:
-#line 3857 "ircd_parser.y"
+case 717:
+#line 3946 "ircd_parser.y"
 {
   ConfigChannel.restrict_channels = yylval.number;
 }
 break;
-case 700:
-#line 3862 "ircd_parser.y"
+case 718:
+#line 3951 "ircd_parser.y"
 {
   ConfigChannel.disable_local_channels = yylval.number;
 }
 break;
-case 701:
-#line 3867 "ircd_parser.y"
+case 719:
+#line 3956 "ircd_parser.y"
 {
   ConfigChannel.use_except = yylval.number;
 }
 break;
-case 702:
-#line 3872 "ircd_parser.y"
+case 720:
+#line 3961 "ircd_parser.y"
 {
   ConfigChannel.use_invex = yylval.number;
 }
 break;
-case 703:
-#line 3877 "ircd_parser.y"
+case 721:
+#line 3966 "ircd_parser.y"
 {
   ConfigChannel.use_knock = yylval.number;
 }
 break;
-case 704:
-#line 3882 "ircd_parser.y"
+case 722:
+#line 3971 "ircd_parser.y"
 {
   ConfigChannel.knock_delay = yyvsp[-1].number;
 }
 break;
-case 705:
-#line 3887 "ircd_parser.y"
+case 723:
+#line 3976 "ircd_parser.y"
 {
   ConfigChannel.knock_delay_channel = yyvsp[-1].number;
 }
 break;
-case 706:
-#line 3892 "ircd_parser.y"
+case 724:
+#line 3981 "ircd_parser.y"
 {
   ConfigChannel.max_chans_per_user = yyvsp[-1].number;
 }
 break;
-case 707:
-#line 3897 "ircd_parser.y"
+case 725:
+#line 3986 "ircd_parser.y"
 {
   ConfigChannel.quiet_on_ban = yylval.number;
 }
 break;
-case 708:
-#line 3902 "ircd_parser.y"
+case 726:
+#line 3991 "ircd_parser.y"
 {
   ConfigChannel.max_bans = yyvsp[-1].number;
 }
 break;
-case 709:
-#line 3907 "ircd_parser.y"
+case 727:
+#line 3996 "ircd_parser.y"
 {
   ConfigChannel.default_split_user_count = yyvsp[-1].number;
 }
 break;
-case 710:
-#line 3912 "ircd_parser.y"
+case 728:
+#line 4001 "ircd_parser.y"
 {
   ConfigChannel.default_split_server_count = yyvsp[-1].number;
 }
 break;
-case 711:
-#line 3917 "ircd_parser.y"
+case 729:
+#line 4006 "ircd_parser.y"
 {
   ConfigChannel.no_create_on_split = yylval.number;
 }
 break;
-case 712:
-#line 3922 "ircd_parser.y"
+case 730:
+#line 4011 "ircd_parser.y"
 {
   ConfigChannel.no_join_on_split = yylval.number;
 }
 break;
-case 713:
-#line 3927 "ircd_parser.y"
+case 731:
+#line 4016 "ircd_parser.y"
 {
   ConfigChannel.burst_topicwho = yylval.number;
 }
 break;
-case 714:
-#line 3932 "ircd_parser.y"
+case 732:
+#line 4021 "ircd_parser.y"
 {
   GlobalSetOptions.joinfloodcount = yylval.number;
 }
 break;
-case 715:
-#line 3937 "ircd_parser.y"
+case 733:
+#line 4026 "ircd_parser.y"
 {
   GlobalSetOptions.joinfloodtime = yylval.number;
 }
 break;
-case 727:
-#line 3956 "ircd_parser.y"
+case 745:
+#line 4045 "ircd_parser.y"
 {
   if (ypass == 2)
     ConfigServerHide.flatten_links = yylval.number;
 }
 break;
-case 728:
-#line 3962 "ircd_parser.y"
+case 746:
+#line 4051 "ircd_parser.y"
 {
   if (ypass == 2)
     ConfigServerHide.hide_servers = yylval.number;
 }
 break;
-case 729:
-#line 3968 "ircd_parser.y"
+case 747:
+#line 4057 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -6316,8 +6461,8 @@
   }
 }
 break;
-case 730:
-#line 3977 "ircd_parser.y"
+case 748:
+#line 4066 "ircd_parser.y"
 {
   if (ypass == 2)
   {
@@ -6331,28 +6476,28 @@
   }
 }
 break;
-case 731:
-#line 3991 "ircd_parser.y"
+case 749:
+#line 4080 "ircd_parser.y"
 {
   if (ypass == 2)
     ConfigServerHide.hidden = yylval.number;
 }
 break;
-case 732:
-#line 3997 "ircd_parser.y"
+case 750:
+#line 4086 "ircd_parser.y"
 {
   if (ypass == 2)
     ConfigServerHide.disable_hidden = yylval.number;
 }
 break;
-case 733:
-#line 4003 "ircd_parser.y"
+case 751:
+#line 4092 "ircd_parser.y"
 {
   if (ypass == 2)
     ConfigServerHide.hide_server_ips = yylval.number;
 }
 break;
-#line 6356 "y.tab.c"
+#line 6501 "y.tab.c"
     }
     yyssp -= yym;
     yystate = *yyssp;
Index: src/y.tab.h
===================================================================
--- src/y.tab.h	(revision 1)
+++ src/y.tab.h	(revision 114)
@@ -77,186 +77,191 @@
 #define IRCD_AUTH 329
 #define NEED_IDENT 330
 #define HAVENT_READ_CONF 331
-#define HIDDEN 332
-#define HIDDEN_ADMIN 333
-#define HIDDEN_NAME 334
-#define HIDDEN_OPER 335
-#define HIDE_SERVER_IPS 336
-#define HIDE_SERVERS 337
-#define HIDE_SPOOF_IPS 338
-#define HOST 339
-#define HUB 340
-#define HUB_MASK 341
-#define IDLETIME 342
-#define IGNORE_BOGUS_TS 343
-#define INVISIBLE_ON_CONNECT 344
-#define IP 345
-#define KILL 346
-#define KILL_CHASE_TIME_LIMIT 347
-#define KLINE 348
-#define KLINE_EXEMPT 349
-#define KLINE_REASON 350
-#define KLINE_WITH_REASON 351
-#define KNOCK_DELAY 352
-#define KNOCK_DELAY_CHANNEL 353
-#define LAZYLINK 354
-#define LEAF_MASK 355
-#define LINKS_DELAY 356
-#define LISTEN 357
-#define T_LOG 358
-#define LOGGING 359
-#define LOG_LEVEL 360
-#define MAX_ACCEPT 361
-#define MAX_BANS 362
-#define MAX_CHANS_PER_USER 363
-#define MAX_GLOBAL 364
-#define MAX_IDENT 365
-#define MAX_LOCAL 366
-#define MAX_NICK_CHANGES 367
-#define MAX_NICK_TIME 368
-#define MAX_NUMBER 369
-#define MAX_TARGETS 370
-#define MESSAGE_LOCALE 371
-#define MIN_NONWILDCARD 372
-#define MIN_NONWILDCARD_SIMPLE 373
-#define MODULE 374
-#define MODULES 375
-#define NAME 376
-#define NEED_PASSWORD 377
-#define NETWORK_DESC 378
-#define NETWORK_NAME 379
-#define NICK 380
-#define NICK_CHANGES 381
-#define NO_CREATE_ON_SPLIT 382
-#define NO_JOIN_ON_SPLIT 383
-#define NO_OPER_FLOOD 384
-#define NO_TILDE 385
-#define NOT 386
-#define NUMBER 387
-#define NUMBER_PER_IDENT 388
-#define NUMBER_PER_CIDR 389
-#define NUMBER_PER_IP 390
-#define NUMBER_PER_IP_GLOBAL 391
-#define OPERATOR 392
-#define OPERS_BYPASS_CALLERID 393
-#define OPER_LOG 394
-#define OPER_ONLY_UMODES 395
-#define OPER_PASS_RESV 396
-#define OPER_SPY_T 397
-#define OPER_UMODES 398
-#define JOIN_FLOOD_COUNT 399
-#define JOIN_FLOOD_TIME 400
-#define PACE_WAIT 401
-#define PACE_WAIT_SIMPLE 402
-#define PASSWORD 403
-#define PATH 404
-#define PING_COOKIE 405
-#define PING_TIME 406
-#define PING_WARNING 407
-#define PORT 408
-#define QSTRING 409
-#define QUIET_ON_BAN 410
-#define REASON 411
-#define REDIRPORT 412
-#define REDIRSERV 413
-#define REGEX_T 414
-#define REHASH 415
-#define TREJECT_HOLD_TIME 416
-#define REMOTE 417
-#define REMOTEBAN 418
-#define RESTRICT_CHANNELS 419
-#define RESTRICTED 420
-#define RSA_PRIVATE_KEY_FILE 421
-#define RSA_PUBLIC_KEY_FILE 422
-#define SSL_CERTIFICATE_FILE 423
-#define RESV 424
-#define RESV_EXEMPT 425
-#define SECONDS 426
-#define MINUTES 427
-#define HOURS 428
-#define DAYS 429
-#define WEEKS 430
-#define SENDQ 431
-#define SEND_PASSWORD 432
-#define SERVERHIDE 433
-#define SERVERINFO 434
-#define SERVLINK_PATH 435
-#define IRCD_SID 436
-#define TKLINE_EXPIRE_NOTICES 437
-#define T_SHARED 438
-#define T_CLUSTER 439
-#define TYPE 440
-#define SHORT_MOTD 441
-#define SILENT 442
-#define SPOOF 443
-#define SPOOF_NOTICE 444
-#define STATS_E_DISABLED 445
-#define STATS_I_OPER_ONLY 446
-#define STATS_K_OPER_ONLY 447
-#define STATS_O_OPER_ONLY 448
-#define STATS_P_OPER_ONLY 449
-#define TBOOL 450
-#define TMASKED 451
-#define T_REJECT 452
-#define TS_MAX_DELTA 453
-#define TS_WARN_DELTA 454
-#define TWODOTS 455
-#define T_ALL 456
-#define T_BOTS 457
-#define T_SOFTCALLERID 458
-#define T_CALLERID 459
-#define T_CCONN 460
-#define T_CCONN_FULL 461
-#define T_CLIENT_FLOOD 462
-#define T_DEAF 463
-#define T_DEBUG 464
-#define T_DRONE 465
-#define T_EXTERNAL 466
-#define T_FULL 467
-#define T_INVISIBLE 468
-#define T_IPV4 469
-#define T_IPV6 470
-#define T_LOCOPS 471
-#define T_LOGPATH 472
-#define T_L_CRIT 473
-#define T_L_DEBUG 474
-#define T_L_ERROR 475
-#define T_L_INFO 476
-#define T_L_NOTICE 477
-#define T_L_TRACE 478
-#define T_L_WARN 479
-#define T_MAX_CLIENTS 480
-#define T_NCHANGE 481
-#define T_OPERWALL 482
-#define T_REJ 483
-#define T_SERVNOTICE 484
-#define T_SKILL 485
-#define T_SPY 486
-#define T_SSL 487
-#define T_UMODES 488
-#define T_UNAUTH 489
-#define T_UNRESV 490
-#define T_UNXLINE 491
-#define T_WALLOP 492
-#define THROTTLE_TIME 493
-#define TOPICBURST 494
-#define TRUE_NO_OPER_FLOOD 495
-#define TKLINE 496
-#define TXLINE 497
-#define TRESV 498
-#define UNKLINE 499
-#define USER 500
-#define USE_EGD 501
-#define USE_EXCEPT 502
-#define USE_INVEX 503
-#define USE_KNOCK 504
-#define USE_LOGGING 505
-#define USE_WHOIS_ACTUALLY 506
-#define VHOST 507
-#define VHOST6 508
-#define XLINE 509
-#define WARN 510
-#define WARN_NO_NLINE 511
+#define HELP_CHANNEL 332
+#define HIDDEN 333
+#define HIDDEN_ADMIN 334
+#define HIDDEN_NAME 335
+#define HIDDEN_OPER 336
+#define HIDE_SERVER_IPS 337
+#define HIDE_SERVERS 338
+#define HIDE_SPOOF_IPS 339
+#define HOST 340
+#define HUB 341
+#define HUB_MASK 342
+#define IDLETIME 343
+#define IGNORE_BOGUS_TS 344
+#define INVISIBLE_ON_CONNECT 345
+#define IP 346
+#define KILL 347
+#define KILL_CHASE_TIME_LIMIT 348
+#define KLINE 349
+#define KLINE_EXEMPT 350
+#define KLINE_REASON 351
+#define KLINE_WITH_REASON 352
+#define KNOCK_DELAY 353
+#define KNOCK_DELAY_CHANNEL 354
+#define LAZYLINK 355
+#define LEAF_MASK 356
+#define LINKS_DELAY 357
+#define LISTEN 358
+#define T_LOG 359
+#define LOGGING 360
+#define LOG_LEVEL 361
+#define MAX_ACCEPT 362
+#define MAX_BANS 363
+#define MAX_CHANS_PER_USER 364
+#define MAX_GLOBAL 365
+#define MAX_IDENT 366
+#define MAX_LOCAL 367
+#define MAX_NICK_CHANGES 368
+#define MAX_NICK_TIME 369
+#define MAX_NUMBER 370
+#define MAX_TARGETS 371
+#define MESSAGE_LOCALE 372
+#define MIN_NONWILDCARD 373
+#define MIN_NONWILDCARD_SIMPLE 374
+#define MODULE 375
+#define MODULES 376
+#define NAME 377
+#define NEED_PASSWORD 378
+#define NETWORK_DESC 379
+#define NETWORK_NAME 380
+#define NICK 381
+#define NICK_CHANGES 382
+#define NO_CREATE_ON_SPLIT 383
+#define NO_JOIN_ON_SPLIT 384
+#define NO_OPER_FLOOD 385
+#define NO_TILDE 386
+#define NOT 387
+#define NUMBER 388
+#define NUMBER_PER_IDENT 389
+#define NUMBER_PER_CIDR 390
+#define NUMBER_PER_IP 391
+#define NUMBER_PER_IP_GLOBAL 392
+#define OPERATOR 393
+#define OPERS_BYPASS_CALLERID 394
+#define OPER_LOG 395
+#define OPER_ONLY_UMODES 396
+#define OPER_PASS_RESV 397
+#define OPER_SPY_T 398
+#define OPER_UMODES 399
+#define JOIN_FLOOD_COUNT 400
+#define JOIN_FLOOD_TIME 401
+#define PACE_WAIT 402
+#define PACE_WAIT_SIMPLE 403
+#define PASSWORD 404
+#define PATH 405
+#define PING_COOKIE 406
+#define PING_TIME 407
+#define PING_WARNING 408
+#define PORT 409
+#define QSTRING 410
+#define QUIET_ON_BAN 411
+#define REASON 412
+#define REDIRPORT 413
+#define REDIRSERV 414
+#define REGEX_T 415
+#define REHASH 416
+#define TREJECT_HOLD_TIME 417
+#define REMOTE 418
+#define REMOTEBAN 419
+#define RESTRICT_CHANNELS 420
+#define RESTRICTED 421
+#define RSA_PRIVATE_KEY_FILE 422
+#define RSA_PUBLIC_KEY_FILE 423
+#define SSL_CERTIFICATE_FILE 424
+#define RESV 425
+#define RESV_EXEMPT 426
+#define SECONDS 427
+#define MINUTES 428
+#define HOURS 429
+#define DAYS 430
+#define WEEKS 431
+#define SENDQ 432
+#define SEND_PASSWORD 433
+#define SERVERHIDE 434
+#define SERVERINFO 435
+#define SERVLINK_PATH 436
+#define SERVICES_NAME 437
+#define IRCD_SID 438
+#define TKLINE_EXPIRE_NOTICES 439
+#define T_SHARED 440
+#define T_CLUSTER 441
+#define T_SNOOP 442
+#define TYPE 443
+#define SHORT_MOTD 444
+#define SILENT 445
+#define SPOOF 446
+#define SPOOF_NOTICE 447
+#define STATS_E_DISABLED 448
+#define STATS_I_OPER_ONLY 449
+#define STATS_K_OPER_ONLY 450
+#define STATS_O_OPER_ONLY 451
+#define STATS_P_OPER_ONLY 452
+#define TBOOL 453
+#define TMASKED 454
+#define T_REJECT 455
+#define TS_MAX_DELTA 456
+#define TS_WARN_DELTA 457
+#define TWODOTS 458
+#define T_ALL 459
+#define T_BOTS 460
+#define T_SOFTCALLERID 461
+#define T_CALLERID 462
+#define T_CCONN 463
+#define T_CCONN_FULL 464
+#define T_CLIENT_FLOOD 465
+#define T_DEAF 466
+#define T_DEBUG 467
+#define T_DRONE 468
+#define T_EXTERNAL 469
+#define T_FULL 470
+#define T_INVISIBLE 471
+#define T_IPV4 472
+#define T_IPV6 473
+#define T_LOCOPS 474
+#define T_LOGPATH 475
+#define T_L_CRIT 476
+#define T_L_DEBUG 477
+#define T_L_ERROR 478
+#define T_L_INFO 479
+#define T_L_NOTICE 480
+#define T_L_TRACE 481
+#define T_L_WARN 482
+#define T_MAX_CLIENTS 483
+#define T_NCHANGE 484
+#define T_OPERWALL 485
+#define T_REJ 486
+#define T_SERVNOTICE 487
+#define T_SKILL 488
+#define T_SPY 489
+#define T_SSL 490
+#define T_UMODES 491
+#define T_UNAUTH 492
+#define T_UNRESV 493
+#define T_UNXLINE 494
+#define T_WALLOP 495
+#define THROTTLE_TIME 496
+#define TOPICBURST 497
+#define TRUE_NO_OPER_FLOOD 498
+#define TKLINE 499
+#define TXLINE 500
+#define TRESV 501
+#define UNKLINE 502
+#define USER 503
+#define T_USERMODE 504
+#define USE_EGD 505
+#define USE_EXCEPT 506
+#define USE_INVEX 507
+#define USE_KNOCK 508
+#define USE_LOGGING 509
+#define USE_WHOIS_ACTUALLY 510
+#define VHOST 511
+#define VHOST6 512
+#define XLINE 513
+#define WARN 514
+#define WARN_NO_NLINE 515
+#define WEBIRC 516
 typedef union {
   int number;
   char *string;
Index: src/hash.c
===================================================================
--- src/hash.c	(revision 1)
+++ src/hash.c	(revision 114)
@@ -36,6 +36,7 @@
 #include "resv.h"
 #include "userhost.h"
 #include "irc_string.h"
+#include "sprintf_irc.h"
 #include "ircd.h"
 #include "numeric.h"
 #include "send.h"
@@ -899,8 +900,10 @@
 list_one_channel(struct Client *source_p, struct Channel *chptr,
                  struct ListTask *list_task, int remote_request)
 {
+  char chan_name[CHANNELLEN + 2];
+
   if ((remote_request && chptr->chname[0] == '&') ||
-      (SecretChannel(chptr) && !IsMember(source_p, chptr)))
+      (SecretChannel(chptr) && !IsMember(source_p, chptr) && !IsOperSnoop(source_p)))
     return;
   if ((unsigned int)dlink_list_length(&chptr->members) < list_task->users_min ||
       (unsigned int)dlink_list_length(&chptr->members) > list_task->users_max ||
@@ -914,8 +917,13 @@
 
   if (!list_allow_channel(chptr->chname, list_task))
     return;
+
+  /* highlight secret channels to oper snoops */
+  ircsprintf(chan_name, "%s%s",
+         (SecretChannel(chptr) && IsOperSnoop(source_p)) ? "*" : "", chptr->chname);
+
   sendto_one(source_p, form_str(RPL_LIST), me.name, source_p->name,
-             chptr->chname, dlink_list_length(&chptr->members),
+             chan_name, dlink_list_length(&chptr->members),
              chptr->topic == NULL ? "" : chptr->topic);
 }
 
Index: src/lex.yy.c
===================================================================
--- src/lex.yy.c	(revision 1)
+++ src/lex.yy.c	(revision 114)
@@ -271,13 +271,9 @@
 
 #define yywrap() 1
 #define YY_SKIP_YYWRAP
-
-#define FLEX_DEBUG
 typedef unsigned char YY_CHAR;
 FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
 typedef int yy_state_type;
-
-#define FLEX_DEBUG
 extern char *yytext;
 #define yytext_ptr yytext
 
@@ -297,215 +293,219 @@
 	*yy_cp = '\0'; \
 	yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 289
-#define YY_END_OF_BUFFER 290
-static yyconst short int yy_accept[1862] =
+#define YY_NUM_RULES 294
+#define YY_END_OF_BUFFER 295
+static yyconst short int yy_accept[1894] =
     {   0,
-        4,    4,  290,  288,    4,    3,  288,    5,  288,  288,
-        6,  288,  288,  288,  288,  288,  288,  288,  288,  288,
-      288,  288,  288,  288,  288,  288,  288,  288,  288,  288,
-      288,  288,  288,  288,  288,  288,    8,    4,    3,    0,
-        7,    5,  287,    0,    2,    5,    6,    0,    0,    0,
+        4,    4,  295,  293,    4,    3,  293,    5,  293,  293,
+        6,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,    8,    4,    3,    0,
+        7,    5,  292,    0,    2,    5,    6,    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,  281,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   98,    0,  271,    0,    0,    0,
+        0,    0,    0,  286,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   99,    0,  276,    0,    0,
 
-        0,    0,    0,    0,    0,    0,  276,    0,    0,    0,
-        0,    0,    0,    0,  136,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  281,    0,    0,
+        0,    0,    0,    0,    0,  137,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  286,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  291,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   14,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   14,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  258,    0,    0,    0,    0,    0,   43,    0,
+        0,    0,    0,    0,  263,    0,    0,    0,    0,    0,
+       43,    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,   93,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   94,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  118,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  119,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  242,    0,    0,    0,    0,    0,    0,    0,    0,
-      178,    0,    0,    0,    0,  244,  169,    0,    0,    0,
+        0,    0,    0,    0,  247,    0,    0,    0,    0,    0,
+        0,    0,    0,  180,    0,    0,    0,    0,    0,  249,
+      170,    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,  202,
 
-        0,    0,    0,    0,    0,    0,    0,   16,    0,    0,
-      234,    0,  266,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  257,  237,    0,    0,   41,
+        0,    0,    0,    0,  207,    0,    0,    0,    0,    0,
+        0,    0,   16,    0,    0,  239,    0,  271,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      262,  242,    0,    0,   41,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  239,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   92,  260,    0,    0,    0,
-        0,   99,  100,    0,    0,  103,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  244,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   93,  265,    0,    0,    0,    0,  100,  101,    0,
+        0,  104,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,  130,    0,    0,    0,  134,    0,    0,    0,
-        0,    0,  143,    0,    0,  228,    0,  152,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  165,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  131,    0,
+        0,    0,  135,    0,    0,    0,    0,    0,  144,    0,
+        0,  233,    0,  153,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  166,    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,
-      183,    0,    0,    0,    0,    0,    0,  194,    0,    0,
-      200,  256,    0,    0,    0,    0,   11,    0,   15,    0,
-        0,   18,    0,  265,    0,    0,    0,  235,    0,    0,
-        0,   29,    0,    0,    0,    0,    0,  238,    0,    0,
-        0,    0,    0,  252,    0,    0,   53,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  186,    0,    0,
+        0,    0,    0,    0,  197,    0,    0,  204,    0,  261,
+        0,    0,    0,    0,   11,    0,   15,    0,    0,   18,
+        0,  270,    0,    0,    0,  240,    0,    0,    0,   29,
+        0,    0,    0,    0,    0,  243,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   59,
-        0,    0,    0,    0,  280,   74,    0,    0,   76,    0,
-        0,    0,    0,    0,  259,    0,    0,    0,    0,    0,
-      270,    0,    0,  105,    0,    0,    0,    0,    0,    0,
+        0,  257,    0,    0,   53,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   59,    0,    0,
+        0,    0,  285,   74,    0,    0,   76,    0,    0,    0,
+        0,    0,    0,  264,    0,    0,    0,    0,    0,  275,
+        0,    0,  106,    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,  275,
+        0,    0,    0,    0,    0,    0,    0,    0,  280,    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,  158,    0,    0,    0,    0,
-        0,    0,    0,    0,  172,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  159,    0,    0,    0,    0,    0,
 
-        0,  240,    0,  180,    0,    0,  285,    0,    0,    0,
-        0,  197,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  198,    0,    0,  255,
-      201,    0,    0,   10,    0,   13,    0,    0,    0,    0,
+        0,    0,    0,  173,    0,    0,    0,    0,    0,    0,
+        0,  245,  182,    0,  183,    0,    0,  290,    0,    0,
+        0,    0,  201,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  202,    0,
+        0,    0,  260,  206,    0,    0,   10,    0,   13,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   54,
-        0,    0,   57,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  279,    0,    0,    0,   77,
-        0,    0,    0,   85,    0,    0,    0,    0,    0,    0,
-      269,    0,    0,    0,    0,  107,    0,    0,  110,    0,
-
-        0,  113,    0,    0,    0,  116,  253,    0,    0,    0,
-      121,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  274,    0,    0,    0,  262,  227,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  147,    0,    0,    0,    0,
-        0,    0,  155,    0,    0,  159,  160,  162,    0,    0,
-        0,    0,  264,    0,    0,    0,    0,  176,    0,  179,
-        0,    0,    0,    0,  284,    0,    0,  195,    0,    0,
-        0,    0,  196,  185,  243,    0,  231,    0,    0,    0,
-        0,    0,    0,    0,  199,  249,    0,    0,    0,    0,
+        0,    0,   54,    0,    0,   57,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  284,    0,
+        0,    0,   77,    0,    0,    0,    0,   86,    0,    0,
 
+        0,    0,    0,    0,  274,    0,    0,    0,    0,  108,
+        0,    0,  111,    0,    0,  114,    0,    0,    0,  117,
+      258,    0,    0,    0,  122,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  279,    0,    0,    0,  267,
+      232,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  148,
+        0,    0,    0,    0,    0,    0,  156,    0,    0,  160,
+      161,  163,    0,    0,    0,    0,  269,    0,    0,    0,
+        0,    0,  178,    0,  181,    0,    0,    0,    0,  289,
+        0,    0,  199,    0,    0,    0,    0,  200,  188,  248,
+
+        0,  236,    0,    0,    0,    0,    0,    0,    0,    0,
+      203,  254,    0,  205,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   25,    0,    0,
+        0,   31,    0,   34,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       25,    0,    0,    0,   31,    0,   34,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       75,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   75,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  108,  109,    0,  112,    0,    0,
-        0,    0,  119,  120,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  261,  226,  241,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  109,  110,    0,  113,    0,    0,    0,    0,
+      120,  121,    0,    0,    0,    0,    0,    0,    0,    0,
 
+        0,    0,    0,    0,    0,  266,  231,  246,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  263,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  268,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  186,  230,  187,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  189,  235,  190,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,   17,    0,    0,
-        0,  250,    0,   22,    0,    0,    0,    0,    0,    0,
+        0,  255,    0,   22,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,   51,    0,    0,    0,
-      245,    0,   58,    0,    0,    0,   63,    0,    0,    0,
-        0,    0,    0,    0,    0,   71,   73,  278,    0,    0,
 
-        0,    0,    0,    0,    0,    0,    0,    0,   94,   95,
-        0,    0,    0,    0,  268,    0,    0,    0,    0,  111,
-      114,    0,    0,    0,    0,  225,    0,    0,    0,    0,
-        0,    0,    0,    0,  273,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  140,    0,  144,    0,    0,    0,
-      146,    0,  246,    0,  148,    0,    0,    0,    0,    0,
+      250,    0,   58,    0,    0,    0,   63,    0,    0,    0,
+        0,    0,    0,    0,    0,   71,   73,  283,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   95,
+       96,    0,    0,    0,    0,  273,    0,    0,    0,    0,
+      112,  115,    0,    0,    0,    0,  230,    0,    0,    0,
+        0,    0,    0,    0,    0,  278,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  141,    0,  145,    0,    0,
+        0,  147,    0,  251,    0,  149,    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,  283,    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,   36,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   55,    0,    0,    0,
-       61,   64,   67,    0,    0,    0,    0,    0,    0,    0,
-      277,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  248,    0,    0,  267,    0,    0,    0,    0,
-      115,    0,  117,    0,    0,    0,    0,  123,  124,    0,
-        0,    0,  272,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  221,    0,
-      150,    0,    0,    0,  156,  157,    0,  163,    0,    0,
+        0,    0,    0,    0,  288,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  198,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   21,    0,
+        0,    0,    0,    0,    0,    0,   36,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   55,
+        0,    0,    0,   61,   64,   67,    0,    0,    0,    0,
+        0,    0,    0,  282,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  253,    0,    0,  272,
+        0,    0,    0,    0,  116,    0,  118,    0,    0,    0,
+        0,  124,  125,    0,    0,    0,  277,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  282,    0,    0,    0,
-        0,    0,    0,    0,  189,  190,    0,    0,    0,    0,
-        1,    0,    1,    0,    0,    0,    0,   19,    0,    0,
-      236,    0,    0,    0,   32,    0,    0,    0,    0,    0,
+        0,    0,  226,    0,  151,    0,    0,    0,  157,  158,
+        0,  164,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  287,    0,    0,    0,    0,    0,    0,    0,  192,
+      193,    0,    0,    0,    0,    1,    0,    1,    0,    0,
+        0,    0,   19,    0,    0,  241,    0,    0,    0,   32,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   82,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  204,    0,
-        0,  125,    0,    0,  126,    0,    0,    0,   83,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   82,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  153,    0,    0,    0,    0,    0,
-        0,    0,  173,  174,    0,  247,  177,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  254,    0,    0,
-        0,  188,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   35,    0,    0,    0,   42,
+        0,    0,    0,    0,  209,    0,    0,  126,    0,    0,
+      127,    0,    0,    0,   83,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      154,    0,    0,    0,    0,    0,    0,    0,  174,  175,
+        0,    0,  252,  179,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  259,    0,    0,    0,  191,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       81,    0,    0,   87,   88,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  223,  212,    0,  122,    0,    0,
+        0,    0,   35,    0,    0,    0,   42,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-      229,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  233,    0,    0,  149,    0,    0,    0,
-        0,  166,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  191,
+        0,    0,    0,    0,    0,    0,    0,   81,    0,    0,
+        0,   88,   89,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  228,  217,    0,  123,    0,    0,  234,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       30,    0,    0,    0,    0,   44,    0,    0,    0,    0,
-        0,    0,   52,   56,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   78,    0,    0,   86,    0,   90,    0,
-        0,    0,    0,    0,    0,  106,  213,    0,    0,    0,
-        0,    0,    0,    0,    0,  132,  133,  135,    0,    0,
+        0,  238,    0,    0,  150,    0,    0,    0,    0,  167,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  194,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   30,
+        0,    0,    0,    0,   44,    0,    0,    0,    0,    0,
+        0,   52,   56,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,    0,  151,  154,    0,
-        0,    0,    0,    0,    0,  251,  181,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  210,    0,    0,    0,
-        0,   12,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   50,    0,    0,
-       60,    0,    0,   66,    0,   70,   72,    0,    0,    0,
+        0,    0,   78,    0,    0,   85,   87,    0,   91,    0,
+        0,    0,    0,    0,    0,  107,  218,    0,    0,    0,
+        0,    0,    0,    0,    0,  133,  134,  136,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  152,  155,    0,
+        0,    0,    0,    0,    0,    0,  256,  184,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  215,    0,    0,
+        0,    0,   12,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   50,    0,
+        0,   60,    0,    0,   66,    0,   70,   72,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      207,    0,    0,  131,    0,    0,  139,    0,  142,    0,
-        0,    0,    0,    0,    0,    0,    0,  171,  175,    0,
-        0,    0,    0,    0,    0,  193,    0,    0,  211,    0,
 
-      215,    0,    0,    0,   20,   23,    0,    0,    0,    0,
-        0,    0,    0,   46,    0,    0,    0,    0,    0,   62,
-       65,   68,   79,    0,    0,   91,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  127,    0,    0,    0,    0,
-        0,  145,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    9,  208,    0,
+        0,  212,    0,    0,  132,    0,    0,  140,    0,  143,
+        0,    0,    0,    0,    0,    0,    0,    0,  172,  177,
+      176,    0,    0,    0,    0,    0,    0,  196,    0,    0,
+      216,    0,  220,    0,    0,    0,   20,   23,    0,    0,
+        0,    0,    0,    0,    0,   46,    0,    0,    0,    0,
+        0,   62,   65,   68,   79,    0,    0,   92,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  128,    0,    0,
+        0,    0,    0,  146,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    9,
+      213,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,   49,    0,   69,   80,    0,   90,   97,    0,
+        0,  103,    0,    0,    0,    0,    0,  129,    0,    0,
+      142,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   26,   27,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       49,    0,   69,   80,    0,   89,   96,    0,    0,  102,
-        0,    0,    0,    0,    0,  128,    0,    0,  141,    0,
+       84,    0,  102,    0,    0,    0,    0,  210,    0,    0,
+      139,  237,    0,  227,  162,    0,    0,    0,    0,  221,
+        0,    0,    0,    0,    0,    0,    0,    0,   28,   33,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      219,    0,    0,    0,    0,    0,  165,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,   26,   27,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   84,    0,
-      101,    0,    0,    0,    0,  205,    0,    0,  138,  232,
-        0,  222,  161,    0,    0,    0,    0,  216,    0,    0,
-        0,    0,    0,    0,    0,    0,   28,   33,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  214,    0,
-        0,    0,    0,    0,  164,    0,    0,    0,  219,  218,
-      217,  220,    0,    0,    0,    0,    0,   38,    0,    0,
-        0,    0,    0,  203,    0,    0,    0,  206,    0,  137,
-        0,    0,    0,    0,    0,  184,  192,    0,    0,    0,
+      224,  223,  222,  225,    0,    0,    0,    0,    0,   38,
+        0,    0,    0,    0,    0,  208,    0,    0,    0,  211,
+        0,  138,    0,    0,    0,    0,    0,  187,  195,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  229,    0,
+        0,    0,  169,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   98,    0,    0,    0,  168,  171,    0,    0,
+        0,    0,    0,   45,    0,    0,  105,    0,   24,  185,
+        0,    0,    0,    0,   47,    0,  130,    0,    0,    0,
+        0,   48,    0,    0,    0,   40,    0,   37,    0,    0,
+       39,  214,    0
 
-        0,    0,    0,    0,    0,    0,  224,    0,    0,    0,
-      168,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       97,    0,    0,    0,  167,  170,    0,    0,    0,    0,
-        0,   45,    0,    0,  104,    0,   24,  182,    0,    0,
-        0,    0,   47,    0,  129,    0,    0,    0,    0,   48,
-        0,    0,    0,   40,    0,   37,    0,    0,   39,  209,
-        0
     } ;
 
 static yyconst int yy_ec[256] =
@@ -549,523 +549,531 @@
         1
     } ;
 
-static yyconst short int yy_base[1867] =
+static yyconst short int yy_base[1899] =
     {   0,
-        0,    0, 1882, 1883, 1879,    0,   39,    0,   37,   39,
-       39,   35,   30,   56,   57,   30,   78,   58,   79,   91,
-     1851,   94,  109,  110,  125, 1849,   68, 1843,   97,  142,
-      161,  108, 1855,   47, 1850, 1856, 1883, 1872,    0,   92,
-     1883,    0, 1883, 1845, 1883,    0,  136,  117, 1845, 1837,
-     1844, 1835, 1834, 1838, 1832, 1833, 1830,  124, 1834, 1847,
-       57,  134,  128, 1822, 1821,  169,  140, 1825, 1829, 1825,
-     1838, 1840,  151,  162,  178, 1839, 1827, 1823,   41, 1836,
-     1835, 1819,   85, 1809,  146, 1826,  108, 1810, 1827,  171,
-     1828, 1817, 1814, 1805, 1804, 1816, 1799, 1811, 1813, 1806,
+        0,    0, 1914, 1915, 1911,    0,   39,    0,   37,   39,
+       39,   35,   30,   56,   57,   30,   78,   58,   93,   93,
+     1883,   74,  110,  111,  126, 1881,  121, 1875,   72,  143,
+      162,   82, 1887,   47, 1882, 1888, 1915, 1904,    0,   91,
+     1915,    0, 1915, 1877, 1915,    0,  108,  103, 1877, 1869,
+     1876, 1867, 1866, 1870, 1864, 1865, 1862,  120, 1866, 1879,
+       57,  144,  104, 1854, 1853,  136,  141, 1857, 1861, 1857,
+     1870, 1872,  165,  169,  160, 1871, 1859, 1855,   41, 1868,
+     1867, 1851,  109, 1841,  130, 1858,  134, 1842, 1851, 1858,
+      157, 1859, 1848, 1845, 1836, 1835, 1847, 1830, 1842, 1844,
 
-      190, 1794, 1818,   72,  141,  149, 1793,   94, 1803, 1812,
-     1802, 1806,  176, 1810, 1812, 1798, 1805,  181, 1795, 1790,
-       31,  213, 1806,  188,  163,  193, 1797, 1799,  114, 1792,
-     1802, 1777, 1783, 1782, 1787, 1782,  198, 1797, 1784, 1779,
-     1779,  207, 1788, 1777,  197, 1786, 1781, 1770, 1785, 1782,
-     1777, 1776, 1759, 1768, 1773,  214, 1778, 1761, 1760, 1773,
-     1765, 1776, 1761, 1760, 1755, 1764, 1752, 1765, 1750, 1752,
-     1753, 1750, 1746, 1758, 1742, 1761, 1736, 1757, 1883, 1758,
-      211, 1744, 1756, 1740, 1746, 1752, 1735, 1747, 1738, 1745,
-     1737, 1743, 1738, 1737, 1740, 1732, 1734,  217, 1729, 1736,
+     1837,  187, 1825, 1849,  142,  172,  164, 1824,  175, 1834,
+     1843, 1833, 1837,  119, 1841, 1843, 1829, 1836,  192, 1826,
+     1821,   31,  212, 1837,  190,  183,  193, 1828, 1821, 1829,
+      184, 1822, 1832, 1807, 1813, 1812, 1817, 1812,  197, 1827,
+     1814, 1809, 1809,  216, 1818, 1807,  188,  219, 1812, 1801,
+     1816, 1813, 1808, 1807, 1790, 1799, 1804,  215, 1809, 1792,
+     1791, 1804, 1796, 1807, 1792, 1791, 1786, 1795, 1783, 1796,
+     1781, 1783, 1784, 1781, 1777, 1789, 1773, 1792, 1767, 1788,
+     1915, 1789,  214, 1775, 1787, 1771, 1777, 1783, 1766, 1778,
+     1769, 1776, 1768, 1774, 1769, 1768, 1771, 1763, 1765,   62,
 
-     1728, 1734, 1718, 1722, 1731, 1734, 1720, 1731, 1727,  223,
-     1711, 1712, 1729, 1723, 1712, 1717,  237, 1711, 1704,  162,
-     1709, 1719, 1703, 1715, 1701, 1704, 1702, 1698, 1714, 1689,
-     1707, 1701, 1691, 1695,  235, 1698, 1708, 1687, 1705, 1686,
-      236, 1683, 1698, 1701, 1697, 1677, 1688,  235, 1696, 1679,
-     1691, 1676, 1686, 1686, 1672, 1673, 1685, 1670, 1679, 1682,
-     1685, 1680, 1669,  219, 1683, 1667, 1677, 1658, 1661, 1660,
-     1883, 1672, 1664, 1655, 1659, 1883, 1673, 1652, 1651, 1669,
-     1654, 1659, 1658, 1647, 1660,  230, 1655, 1658, 1658, 1640,
-     1648, 1654, 1646,  198, 1638, 1644, 1641, 1643, 1639, 1883,
+     1760, 1767, 1759, 1765, 1749, 1753, 1762, 1765, 1751, 1762,
+     1758, 1746,  224, 1741, 1742, 1759, 1753, 1742, 1747,  239,
+     1741, 1734,  226, 1739, 1749, 1733, 1745, 1731, 1734, 1732,
+     1728, 1744, 1719, 1737, 1731, 1721, 1725,  232, 1728, 1738,
+     1717, 1735, 1716,  226, 1713, 1728, 1731, 1727, 1707, 1718,
+      234, 1726, 1709, 1721, 1706, 1716, 1716, 1702, 1703, 1715,
+     1700, 1709, 1712, 1715, 1710, 1699,  223, 1713, 1697, 1707,
+     1688, 1691, 1690, 1915, 1702, 1694, 1690, 1684, 1688, 1915,
+     1702, 1681, 1680, 1698, 1683, 1688, 1687, 1676, 1689,  229,
+     1684, 1687, 1687, 1669, 1677, 1683, 1675,  185, 1667, 1673,
 
-     1640, 1635, 1635, 1635, 1632, 1624, 1646, 1883, 1642, 1633,
-     1883, 1623, 1623, 1636,  238, 1626, 1625, 1638, 1632, 1617,
-     1621, 1614, 1615, 1627, 1611, 1883, 1883, 1623, 1608, 1883,
-     1610, 1625, 1617, 1625, 1619, 1603, 1607, 1609, 1608, 1594,
-     1613, 1601, 1598, 1610, 1600, 1601, 1598, 1593, 1598, 1595,
-     1589, 1587, 1601, 1587, 1883, 1586, 1598, 1583, 1583, 1598,
-     1594, 1597,  240, 1592, 1596, 1883, 1576, 1581, 1573, 1574,
-     1572, 1883, 1883, 1590, 1584, 1588, 1585, 1581, 1574, 1575,
-     1581, 1564, 1575, 1560, 1578, 1560, 1565, 1576, 1556, 1569,
-     1557, 1560, 1562, 1569, 1564,  257, 1563, 1565, 1565, 1551,
+     1670, 1674, 1671, 1667, 1915, 1668, 1663, 1663, 1663, 1660,
+     1652, 1674, 1915, 1670, 1661, 1915, 1651, 1651, 1664,  244,
+     1654, 1653, 1666, 1660, 1645, 1649, 1642, 1643, 1655, 1639,
+     1915, 1915, 1651, 1636, 1915, 1638, 1653, 1645, 1653, 1647,
+     1631, 1635, 1637, 1636, 1622, 1641, 1629, 1626, 1638, 1628,
+     1629, 1626, 1621, 1626, 1623, 1617, 1615, 1629, 1615, 1915,
+     1614, 1626, 1611, 1611, 1626, 1622, 1625,  246, 1625, 1619,
+     1623, 1915, 1603, 1608, 1600, 1601, 1599, 1915, 1915, 1617,
+     1611, 1615, 1612, 1608, 1601, 1602, 1608, 1591, 1602, 1587,
+     1605, 1587, 1592, 1603, 1583, 1596, 1584, 1587, 1589, 1596,
 
-     1544, 1551, 1883, 1548, 1561, 1545, 1559, 1540, 1542, 1540,
-     1546, 1549,  261, 1553, 1529, 1883, 1551, 1883, 1549, 1529,
-     1533, 1529, 1522, 1526, 1541, 1523, 1524, 1541, 1524, 1525,
-      246,  260, 1533, 1517, 1522, 1523, 1531, 1527, 1529, 1512,
-     1525, 1527, 1508, 1513, 1523, 1503, 1524, 1522, 1521, 1507,
-     1883, 1515, 1499, 1509, 1498, 1507,  270, 1883, 1495, 1499,
-     1513, 1493, 1506, 1489, 1489, 1494, 1498, 1501, 1883,  193,
-     1490, 1883, 1504, 1883, 1485, 1490, 1497, 1500, 1494, 1496,
-     1479, 1883, 1476, 1490, 1489, 1490, 1480, 1883, 1479, 1481,
-     1477, 1474, 1478, 1883, 1477, 1470, 1883, 1479, 1467, 1478,
+     1591,  260, 1590, 1592, 1592, 1578, 1571, 1578, 1915, 1575,
+     1588, 1572, 1586, 1567, 1569, 1567, 1573, 1576,  256, 1580,
+     1556, 1915, 1578, 1915, 1576, 1556, 1560, 1556, 1549, 1553,
+     1568, 1550, 1551, 1568, 1551, 1552,  251,  272, 1560, 1544,
+     1549, 1550, 1545, 1557, 1553, 1555, 1538, 1551, 1553, 1534,
+     1539, 1549, 1529, 1550, 1548, 1547, 1533, 1915, 1541, 1525,
+     1535, 1524, 1533,  278, 1528, 1520, 1524, 1538, 1519, 1517,
+     1530, 1513, 1513, 1518, 1522, 1525, 1915,  245, 1514, 1915,
+     1528, 1915, 1509, 1514, 1521, 1524, 1518, 1520, 1503, 1915,
+     1500, 1514, 1513, 1514, 1504, 1915, 1503, 1505, 1501, 1498,
 
-     1461, 1466, 1475, 1477, 1472, 1471, 1457, 1462, 1468, 1883,
-     1467, 1471, 1458, 1457, 1449, 1883, 1466, 1441,  248, 1453,
-     1455, 1443, 1448, 1442, 1883, 1459, 1450, 1453, 1448, 1450,
-     1436, 1451, 1428, 1452, 1451, 1430, 1428, 1433, 1432, 1437,
-     1442, 1430, 1434, 1429, 1441, 1426, 1420, 1433, 1423, 1416,
-     1431, 1431, 1432,  244, 1420, 1427, 1415,  264, 1428, 1409,
-     1402, 1419, 1410, 1419, 1418, 1415,  267, 1403, 1417, 1414,
-     1409, 1412, 1404, 1397,  274, 1394, 1413, 1411, 1388,  283,
-      285, 1396, 1409, 1394,  275, 1883, 1399, 1386, 1400, 1395,
-     1398,  278, 1398, 1385, 1883, 1382, 1390, 1383, 1393, 1396,
+     1502, 1915, 1501, 1494, 1915, 1503, 1491, 1502, 1485, 1490,
+     1499, 1501, 1496, 1495, 1481, 1486, 1492, 1915, 1491, 1495,
+     1482, 1481, 1473, 1915, 1490, 1465,  266, 1477, 1479, 1467,
+     1483, 1471, 1465, 1915, 1482, 1473, 1476, 1471, 1473, 1459,
+     1474, 1451, 1475, 1474, 1453, 1451, 1456, 1455, 1460, 1465,
+     1453, 1457, 1452, 1464, 1449, 1443, 1456, 1446, 1439, 1454,
+     1454, 1455,  270, 1443, 1450, 1438,  249, 1451, 1432, 1425,
+     1442, 1433, 1442, 1441, 1438,  279, 1426, 1440, 1437, 1432,
+     1435, 1427, 1420,  281, 1417, 1436, 1434, 1411,  261,  288,
+     1419, 1432, 1417,  284, 1915, 1422, 1409, 1423, 1418, 1421,
 
-     1375, 1883, 1393, 1393, 1387, 1391, 1371, 1364, 1368, 1382,
-     1384, 1883, 1371, 1360, 1365, 1377, 1362, 1372, 1365, 1356,
-     1363,  285, 1362, 1361, 1359, 1365, 1375, 1355, 1356, 1883,
-     1883,   72,  156, 1883,  230, 1883,  259,  254,  264,  296,
-      301,  285,  290,  297,  292,  297,  307,  311,  294,  294,
-      294,  306,  297,  302,  314,  320,  307,  307,  311, 1883,
-      304,  325, 1883,  325,  327,  315,  325,  318,  319,  317,
-      321,  320,  328,  321,  323, 1883,  328,  321,  337, 1883,
-      344,  341,  346,  347,  343,  332,  339,  353,  352,  343,
-     1883,  348,  337,  353,  356, 1883,  354,  344, 1883,  360,
+      286, 1421, 1408, 1915, 1405, 1419, 1412, 1405, 1415, 1418,
+     1397, 1915, 1915, 1415, 1415, 1409, 1413, 1393, 1386, 1390,
+     1404, 1406, 1915, 1393, 1382, 1387, 1399, 1384, 1394,  126,
+      193,  241,  285,  257,  259,  279,  290,  284,  308,  290,
+      296,  309, 1915, 1915,  309,  314, 1915,  296, 1915,  307,
+      301,  304,  318,  320,  306,  310,  317,  312,  316,  326,
+      327,  310,  311,  311,  323,  313,  318,  330,  336,  323,
+      324,  328, 1915,  321,  342, 1915,  342,  344,  332,  342,
+      335,  336,  334,  338,  337,  345,  338,  340, 1915,  345,
+      338,  354, 1915,  361,  358,  363,  356,  365,  363,  350,
 
-      359, 1883,  351,  365,  363, 1883, 1883,  346,  362,  362,
-     1883,  369,  359,  373,  366,  362,  373,  376,  377,  368,
-      364, 1883,  363,  379,  371,  367,  368,  383,  385,  389,
-      380,  384,  392,  380,  377,  392,  397,  383,  385,  399,
-      388,  387,  401,  392,  404, 1883,  388,  392,  399,  408,
-      390,  396, 1883,  397,  408, 1883,  414,  413,  413,  393,
-      409,  417,  401,  420,  414,  410,  405, 1883,  413, 1883,
-      415,  414,  411,  425, 1883,  411,  420,  433,  414,  422,
-      438,  425, 1883, 1883, 1883,  437, 1883,  438,  440,  442,
-      424,  432,  441,  434, 1883, 1883,  435,  446,  436,  433,
+      357,  371,  370,  361, 1915,  366,  355,  371,  373, 1915,
+      371,  362, 1915,  378,  377, 1915,  369,  383,  381, 1915,
+     1915,  364,  380,  380, 1915,  387,  377,  391,  384,  380,
+      391,  394,  395,  386,  382, 1915,  381,  397,  389,  385,
+      386,  401,  403,  407,  398,  402,  410,  398,  395,  410,
+      415,  401,  403,  417,  406,  405,  419,  410,  422, 1915,
+      406,  410,  417,  426,  408,  414, 1915,  415,  426, 1915,
+      432,  431,  431,  411,  427,  435,  419,  438,  432,  437,
+      429,  424, 1915,  432, 1915,  434,  433,  430,  444, 1915,
+      430,  439,  452,  433,  441,  457,  444, 1915, 1915, 1915,
 
-      451,  454,  442,  434,  443,  450,  456,  446,  457,  442,
-     1883,  444,  449,  460, 1883,  448,  462,  455,  470,  451,
-      472,  464,  474,  461,  476,  472,  466,  467,  465,  476,
-      482,  468,  469,  478,  471,  487,  476,  474,  481,  475,
-      473,  487,  488, 1883,  491,  473,  489,  488,  495,  483,
-      501,  485,  489,  494,  501,  505,  496,  494,  509,  506,
-      488,  508,  505,  512, 1883, 1883,  513, 1883,  508,  501,
-      516,  517, 1883, 1883,  518,  505,  511,  521,  525,  514,
-      528,  519,  529,  525,  528,  534,  512, 1883, 1883, 1883,
-      531,  518,  538,  538,  520,  541,  542,  538,  528,  538,
+      456, 1915,  457,  459,  461,  443,  451,  460,  453,  465,
+     1915, 1915,  455, 1915,  466,  456,  453,  471,  474,  462,
+      454,  463,  470,  476,  466,  477,  462, 1915,  464,  469,
+      480, 1915,  468,  482,  475,  490,  471,  492,  484,  494,
+      481,  496,  492,  486,  487,  485,  496,  502,  488,  489,
+      498,  491,  507,  496,  494,  501,  495,  493,  507,  508,
+     1915,  511,  493,  509,  508,  515,  503,  521,  522,  506,
+      510,  515,  522,  526,  517,  515,  530,  527,  509,  529,
+      526,  533, 1915, 1915,  534, 1915,  529,  522,  537,  538,
+     1915, 1915,  539,  526,  532,  542,  546,  535,  549,  540,
 
-      534,  528,  533,  531,  525,  539,  543,  549,  539,  542,
-      538,  548,  544,  541,  542,  553,  561,  543,  559,  543,
-      554, 1883,  548,  559,  555,  559,  562,  557,  561,  559,
-      555,  576,  577,  578,  579,  580,  576,  577,  578,  566,
-      585,  582,  587, 1883, 1883, 1883,  583,  584,  587,  584,
-      583,  593,  606,  594,  579,  587,  586, 1883,  599,  585,
-      598, 1883,  599, 1883,  593,  594,  589,  596,  604,  592,
-      600,  609,  605,  615,  601,  609, 1883,  603,  616,  613,
-     1883,  608, 1883,  610,  619,  622, 1883,  623,  619,  623,
-      629,  623,  627,  632,  633, 1883, 1883,  620,  635,  627,
+      550,  546,  549,  555,  533, 1915, 1915, 1915,  552,  539,
+      559,  559,  541,  562,  563,  559,  549,  559,  555,  549,
+      554,  552,  546,  560,  564,  570,  560,  563,  559,  569,
+      565,  562,  563,  574,  582,  564,  580,  564,  575, 1915,
+      569,  580,  576,  572,  581,  584,  579,  583,  581,  577,
+      598,  599,  600,  601,  602,  598,  599,  600,  588,  607,
+      604,  609, 1915, 1915, 1915,  605,  606,  609,  606,  605,
+      610,  616,  629,  617,  602,  610,  609, 1915,  622,  608,
+      621, 1915,  622, 1915,  616,  617,  612,  619,  627,  615,
+      623,  632,  628,  638,  624,  632, 1915,  626,  639,  636,
 
-      633,  629,  639,  641,  645,  631,  626,  634, 1883, 1883,
-      635,  646,  637,  634,  635,  650,  655,  637,  646, 1883,
-     1883,  648,  648,  649,  646, 1883,  644,  650,  664,  646,
-      655,  668,  664,  665,  652,  660,  664,  660,  656,  672,
-      663,  673,  664,  674, 1883,  676, 1883,  657,  664,  680,
-     1883,  669, 1883,  667, 1883,  677,  684,  676,  677,  692,
-      673,  672,  680,  682,  697,  685,  698,  691,  682,  698,
-      697,  704,  702,  686,  702,  688,  700,  706,  696,  697,
-      698,  699,  696,  716,  693,  699,  704,  715,  717,  706,
-      699,  713,  716,  707,  713,  740,  739,  732,  713,  732,
+     1915,  631, 1915,  633,  642,  645, 1915,  646,  642,  646,
+      652,  646,  650,  655,  656, 1915, 1915,  643,  658,  650,
+      656,  652,  662,  654,  665,  669,  655,  650,  658, 1915,
+     1915,  659,  670,  661,  658,  659,  674,  679,  661,  670,
+     1915, 1915,  672,  672,  673,  670, 1915,  668,  674,  688,
+      670,  679,  692,  688,  689,  676,  684,  688,  684,  680,
+      696,  687,  697,  688,  698, 1915,  700, 1915,  681,  688,
+      704, 1915,  693, 1915,  691, 1915,  701,  708,  700,  701,
+      716,  697,  696,  704,  706,  721,  709,  722,  715,  706,
+      722,  721,  728,  729,  727,  711,  727,  713,  725,  731,
 
-      734,  735,  711,  728,  739, 1883,  728,  736,  737,  728,
-      740,  730,  741, 1883,  738,  736,  733,  735,  730,  751,
-      744,  739,  750,  759,  753,  757, 1883,  746,  755,  745,
-     1883, 1883, 1883,  753,  749,  746,  753,  752,  749,  750,
-     1883,  756,  770,  759,  752,  772,  761,  762,  771,  772,
-      772,  772,  780,  777,  777, 1883,  770,  765,  777,  785,
-     1883,  786, 1883,  768,  789,  770,  779, 1883, 1883,  789,
-      775,  774, 1883,  780,  784,  777,  775,  794,  799,  794,
-      802,  789,  792,  787,  806,  807,  803,  809,  811,  803,
-     1883,  804,  809,  813, 1883, 1883,  804, 1883,  814,  802,
+      721,  722,  723,  724,  721,  741,  718,  724,  729,  740,
+      742,  731,  724,  738,  741,  732, 1915,  738,  765,  764,
+      757,  738,  757,  759,  760,  736,  753,  764, 1915,  753,
+      761,  762,  753,  765,  755,  766, 1915,  763,  761,  758,
+      760,  755,  776,  769,  764,  775,  784,  778,  782, 1915,
+      771,  780,  770, 1915, 1915, 1915,  778,  774,  771,  778,
+      777,  774,  775, 1915,  781,  795,  784,  777,  797,  785,
+      787,  788,  797,  798,  798,  798,  806,  803,  803, 1915,
+      796,  791,  803,  811, 1915,  812, 1915,  794,  815,  796,
+      805, 1915, 1915,  815,  801,  800, 1915,  806,  810,  803,
 
-      799,  817,  798,  817,  808,  808,  820,  822,  809,  819,
-      823,  821,  815,  816,  817,  818, 1883,  815,  820,  817,
-      822,  827,  835,  821, 1883, 1883,  828,  843,  832,  855,
-      856,  848,  849,  830,  830,  845,  847, 1883,  850,  831,
-     1883,  841,  850,  842, 1883,  844,  842,  844,  846,  850,
-      849,  844,  854,  862,  864,  855,  869,  865,  851,  863,
-      855,  869,  861,  871,  859,  866,  874,  868,  869,  866,
-      880,  872, 1883,  881,  877,  882,  870,  871,  890,  870,
-      877,  893,  894,  879,  881,  897,  873,  874, 1883,  884,
-      882, 1883,  894,  894, 1883,  885,  902,  902, 1883,  892,
+      801,  820,  825,  820,  828,  815,  818,  813,  832,  833,
+      829,  835,  837,  829, 1915,  830,  835,  839, 1915, 1915,
+      830, 1915,  840,  828,  825,  843,  824,  843,  834,  836,
+      835,  847,  849,  836,  846,  850,  848,  842,  843,  844,
+      845, 1915,  842,  847,  844,  849,  854,  862,  848, 1915,
+     1915,  855,  870,  859,  882,  883,  875,  876,  857,  857,
+      872,  874, 1915,  877,  858, 1915,  868,  877,  869, 1915,
+      871,  869,  871,  873,  877,  876,  871,  881,  889,  891,
+      882,  896,  892,  878,  890,  882,  896,  888,  898,  886,
+      893,  901,  895,  896,  893,  907,  899, 1915,  908,  908,
 
-      889,  896,  905,  896,  912,  898,  914,  894,  898,  898,
-      899,  900,  915,  907, 1883,  921,  919,  916,  905,  921,
-      927,  913, 1883, 1883,  928, 1883, 1883,  921,  928,  923,
-      914,  929,  930,  931,  932,  929,  930, 1883,  935,  921,
-      930, 1883,  936,  943,  936,  923,  932,  936,  925,  927,
-      950,  952,  948,  950,  955, 1883,  948,  942,  949, 1883,
-      951,  955,  957,  961,  948,  963,  951,  958,  947,  968,
-      951,  959,  959,  960,  958,  962,  960,  961,  957,  969,
-     1883,  979,  966, 1883, 1883,  981,  973,  964,  970,  982,
-      966,  967,  974,  971,  990, 1883,  986, 1883,  991,  980,
+      905,  910,  898,  899,  918,  898,  905,  921,  922,  907,
+      909,  925,  901,  902, 1915,  912,  910, 1915,  922,  922,
+     1915,  913,  930,  930, 1915,  920,  917,  924,  933,  924,
+      940,  926,  942,  922,  926,  926,  927,  928,  943,  935,
+     1915,  949,  947,  944,  933,  949,  955,  941, 1915, 1915,
+      956,  957, 1915, 1915,  950,  957,  952,  943,  958,  959,
+      960,  961,  958,  959, 1915,  964,  950,  959, 1915,  965,
+      972,  965,  952,  961,  965,  954,  956,  979,  981,  977,
+      979,  984, 1915,  977,  971,  978, 1915,  980,  984,  986,
+      990,  977,  992,  980,  987,  976,  997,  980,  988,  988,
 
-     1883,  993,  992,  978,  994,  993,  980,  987,  984,  989,
-     1002,  993, 1002, 1883,  989, 1000, 1883, 1003,  998, 1013,
-     1013, 1883, 1015, 1005,  999,  998, 1015, 1015, 1018, 1021,
-     1005, 1006, 1007, 1008, 1014, 1010, 1011, 1029, 1011, 1883,
-     1029, 1019, 1019, 1017, 1021, 1028, 1030, 1030, 1031, 1023,
-     1883, 1030, 1038, 1040, 1025, 1883, 1046, 1042, 1036, 1029,
-     1046, 1031, 1883, 1883, 1038, 1041, 1035, 1040, 1041, 1050,
-     1043, 1052, 1053, 1883, 1057, 1059, 1883, 1054, 1883, 1048,
-     1065, 1066, 1052, 1059, 1060, 1883, 1883, 1065, 1068, 1054,
-     1059, 1069, 1063, 1075, 1073, 1883, 1883, 1883, 1078, 1063,
+      989,  987,  991,  989,  990,  986,  998, 1915, 1008,  997,
+      996, 1915, 1915, 1011, 1003,  994, 1000, 1012,  996,  997,
+     1004, 1001, 1020, 1915, 1016, 1915, 1021, 1010, 1915, 1023,
+     1022, 1008, 1024, 1023, 1010, 1017, 1014, 1019, 1032, 1023,
+     1032, 1915, 1019, 1030, 1915, 1033, 1028, 1043, 1043, 1915,
+     1045, 1035, 1029, 1035, 1029, 1046, 1046, 1049, 1052, 1036,
+     1037, 1038, 1039, 1045, 1041, 1042, 1060, 1042, 1915, 1060,
+     1050, 1050, 1048, 1052, 1059, 1061, 1061, 1062, 1054, 1915,
+     1061, 1069, 1071, 1056, 1915, 1077, 1073, 1067, 1060, 1077,
+     1062, 1915, 1915, 1069, 1072, 1066, 1071, 1072, 1081, 1074,
 
-     1076, 1072, 1066, 1068, 1065, 1085, 1073, 1883, 1883, 1067,
-     1074, 1078, 1085, 1087, 1084, 1883, 1883, 1092, 1092, 1095,
-     1096, 1097, 1098, 1094, 1095, 1101, 1883, 1101, 1083, 1099,
-     1087, 1883, 1091, 1087, 1093, 1089, 1094, 1106, 1107, 1095,
-     1111, 1115, 1113, 1103, 1118, 1114, 1116, 1883, 1106, 1107,
-     1883, 1116, 1117, 1883, 1118, 1883, 1883, 1108, 1112, 1112,
-     1110, 1110, 1128, 1111, 1120, 1121, 1134, 1128, 1137, 1131,
-     1883, 1134, 1122, 1883, 1122, 1130, 1883, 1139, 1883, 1140,
-     1123, 1143, 1131, 1139, 1135, 1145, 1126, 1883, 1883, 1132,
-     1141, 1139, 1140, 1141, 1142, 1883, 1158, 1153, 1883, 1139,
+     1083, 1084, 1915, 1088, 1090, 1915, 1915, 1085, 1915, 1079,
+     1096, 1097, 1083, 1090, 1091, 1915, 1915, 1096, 1099, 1085,
+     1090, 1100, 1094, 1106, 1104, 1915, 1915, 1915, 1109, 1094,
+     1107, 1103, 1097, 1099, 1096, 1116, 1104, 1915, 1915, 1098,
+     1105, 1109, 1116, 1118, 1118, 1116, 1915, 1915, 1124, 1124,
+     1127, 1128, 1129, 1130, 1126, 1127, 1133, 1915, 1133, 1115,
+     1131, 1119, 1915, 1123, 1119, 1125, 1121, 1126, 1138, 1139,
+     1127, 1143, 1147, 1145, 1135, 1150, 1146, 1148, 1915, 1138,
+     1139, 1915, 1148, 1149, 1915, 1150, 1915, 1915, 1140, 1144,
+     1144, 1142, 1142, 1160, 1143, 1152, 1153, 1166, 1160, 1169,
 
-     1883, 1157, 1158, 1163, 1883, 1883, 1142, 1151, 1144, 1167,
-     1153, 1150, 1162, 1883, 1169, 1173, 1156, 1155, 1169, 1883,
-     1883, 1883, 1180, 1164, 1160, 1883, 1161, 1166, 1168, 1178,
-     1179, 1166, 1185, 1166, 1183, 1883, 1185, 1174, 1182, 1174,
-     1188, 1883, 1193, 1183, 1183, 1192, 1173, 1199, 1195, 1196,
-     1188, 1189, 1190, 1191, 1192, 1195, 1207, 1883, 1883, 1196,
-     1214, 1209, 1208, 1198, 1194, 1211, 1198, 1217, 1211, 1217,
-     1883, 1212, 1883, 1883, 1216, 1883, 1883, 1209, 1204, 1883,
-     1225, 1211, 1213, 1209, 1210, 1230, 1219, 1212, 1883, 1214,
-     1222, 1230, 1231, 1225, 1238, 1233, 1240, 1237, 1230, 1231,
+     1163, 1915, 1166, 1154, 1915, 1154, 1162, 1915, 1171, 1915,
+     1172, 1155, 1175, 1163, 1171, 1167, 1177, 1158, 1915, 1915,
+     1915, 1164, 1173, 1171, 1172, 1173, 1174, 1915, 1190, 1185,
+     1915, 1171, 1915, 1189, 1190, 1195, 1915, 1915, 1174, 1183,
+     1176, 1199, 1185, 1182, 1194, 1915, 1201, 1205, 1188, 1187,
+     1201, 1915, 1915, 1915, 1212, 1196, 1192, 1915, 1193, 1198,
+     1200, 1210, 1211, 1198, 1217, 1198, 1215, 1915, 1217, 1206,
+     1214, 1206, 1220, 1915, 1225, 1215, 1215, 1224, 1205, 1231,
+     1227, 1228, 1220, 1221, 1222, 1223, 1224, 1227, 1239, 1915,
+     1915, 1228, 1246, 1241, 1240, 1230, 1226, 1243, 1230, 1249,
 
-     1232, 1233, 1231, 1232, 1236, 1244, 1883, 1883, 1245, 1239,
-     1234, 1239, 1236, 1250, 1242, 1256, 1243, 1256, 1883, 1246,
-     1883, 1249, 1248, 1249, 1259, 1883, 1246, 1257, 1883, 1883,
-     1255, 1883, 1883, 1249, 1263, 1261, 1265, 1883, 1247, 1248,
-     1249, 1250, 1256, 1262, 1266, 1260, 1883, 1883, 1275, 1261,
-     1260, 1265, 1270, 1271, 1273, 1282, 1283, 1280, 1883, 1285,
-     1273, 1283, 1273, 1289, 1883, 1286, 1284, 1288, 1883, 1883,
-     1883, 1883, 1289, 1295, 1275, 1282, 1296, 1883, 1298, 1304,
-     1300, 1292, 1294, 1883, 1305, 1296, 1298, 1883, 1298, 1883,
-     1294, 1301, 1309, 1303, 1313, 1883, 1883, 1316, 1313, 1301,
+     1243, 1249, 1915, 1244, 1915, 1915, 1248, 1915, 1915, 1241,
+     1236, 1915, 1257, 1243, 1245, 1241, 1242, 1262, 1251, 1244,
+     1915, 1246, 1254, 1262, 1263, 1257, 1270, 1265, 1272, 1269,
+     1262, 1263, 1264, 1265, 1263, 1264, 1268, 1276, 1915, 1915,
+     1277, 1271, 1266, 1271, 1268, 1282, 1274, 1288, 1275, 1288,
+     1915, 1278, 1915, 1281, 1280, 1281, 1291, 1915, 1278, 1289,
+     1915, 1915, 1287, 1915, 1915, 1281, 1295, 1293, 1297, 1915,
+     1279, 1280, 1281, 1282, 1288, 1294, 1298, 1292, 1915, 1915,
+     1307, 1293, 1292, 1297, 1302, 1303, 1305, 1314, 1315, 1312,
+     1915, 1317, 1305, 1315, 1305, 1321, 1915, 1318, 1316, 1320,
 
-     1317, 1309, 1317, 1322, 1304, 1316, 1883, 1310, 1318, 1323,
-     1883, 1324, 1325, 1324, 1314, 1333, 1319, 1316, 1324, 1323,
-     1883, 1318, 1327, 1336, 1883, 1883, 1322, 1337, 1338, 1341,
-     1324, 1883, 1327, 1343, 1883, 1343, 1883, 1883, 1349, 1336,
-     1336, 1338, 1883, 1334, 1883, 1334, 1352, 1335, 1337, 1883,
-     1349, 1354, 1346, 1883, 1348, 1883, 1342, 1358, 1883, 1883,
-     1883, 1377, 1378, 1380, 1381, 1382
+     1915, 1915, 1915, 1915, 1321, 1327, 1307, 1314, 1328, 1915,
+     1330, 1336, 1332, 1324, 1326, 1915, 1337, 1328, 1330, 1915,
+     1330, 1915, 1326, 1333, 1341, 1335, 1345, 1915, 1915, 1348,
+     1345, 1333, 1349, 1341, 1349, 1354, 1336, 1348, 1915, 1342,
+     1350, 1355, 1915, 1356, 1357, 1356, 1346, 1365, 1351, 1348,
+     1356, 1355, 1915, 1350, 1359, 1368, 1915, 1915, 1354, 1369,
+     1370, 1373, 1356, 1915, 1359, 1375, 1915, 1375, 1915, 1915,
+     1381, 1368, 1368, 1370, 1915, 1366, 1915, 1366, 1384, 1367,
+     1369, 1915, 1381, 1386, 1378, 1915, 1380, 1915, 1374, 1390,
+     1915, 1915, 1915, 1409, 1410, 1412, 1413, 1414
+
     } ;
 
-static yyconst short int yy_def[1867] =
+static yyconst short int yy_def[1899] =
     {   0,
-     1861,    1, 1861, 1861, 1861, 1862, 1863, 1864, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1862, 1863,
-     1861, 1864, 1861, 1861, 1861, 1864, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+     1893,    1, 1893, 1893, 1893, 1894, 1895, 1896, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1894, 1895,
+     1893, 1896, 1893, 1893, 1893, 1896, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1865, 1866, 1861, 1861,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1897,
+     1898, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1865,
-     1865, 1866, 1866, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1897, 1897, 1898, 1898, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-        0, 1861, 1861, 1861, 1861, 1861
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893,    0, 1893, 1893, 1893, 1893, 1893
+
     } ;
 
-static yyconst short int yy_nxt[1925] =
+static yyconst short int yy_nxt[1957] =
     {   0,
         4,    5,    6,    7,    8,    4,    9,   10,   11,   11,
        11,    4,    4,    4,   12,   13,   14,   15,   16,   17,
        18,   19,   20,   21,   22,   23,   24,   25,   26,   27,
        28,   29,   30,   31,   32,   33,   34,   35,   36,    4,
-       37,   41,   41,   43,   45,  256,   46,   47,   47,   47,
-       71,   48,   49,  257,   50,   54,   72,   73,   55,   44,
-       51,  145,   52,  196,   56,  146,  197,   74,   57,   53,
-       58,   65,   59,   84,  165,   66,   85,   60,   61,   67,
-       86,   62,  118,   87,   63,   68,  166,   64,   69,  798,
-      119,   70,   75,   88,   41,   41,  120,   76,   77,  232,
+       37,   41,   41,   43,   45,  259,   46,   47,   47,   47,
+       71,   48,   49,  260,   50,   54,   72,   73,   55,   44,
+       51,  147,   52,  198,   56,  148,  199,   74,   57,   53,
+       58,   65,   59,   84,  167,   66,   85,   60,   61,   67,
+       86,   62,  356,   87,   63,   68,  168,   64,   69,   98,
+      123,   70,   75,   41,   41,  357,   99,   76,   77,  100,
 
-       78,   89,   79,   80,  233,   81,   82,   90,   92,   97,
-      201,   93,   83,   91,  239,  122,   98,  202,   94,   99,
-       95,  100,  101,  102,  106,  107,  240,  103,  108,  123,
-      207,  104,  109,  150,  141,  142,  208,  105,  110,  111,
-      143,  112,  275,  113,   47,   47,   47,  114,  167,  161,
-      151,  162,  276,  115,  170,  171,  168,  234,  179,  116,
-      124,  235,  204,  125,  126,  186,  127,  187,  169,  799,
-      128,  129,  180,  205,  130,  131,  132,  269,  188,  133,
-      189,  236,  134,  174,  175,  135,  237,  376,  176,  136,
-      377,  270,  137,  138,  245,  190,  177,  251,  139,  140,
+       78,  101,   79,   80,  124,   81,   82,   88,  143,  144,
+       93,   89,   83,   94,  145,   90,   47,   47,   47,  152,
+       95,   91,   96,  102,  103,  107,  108,   92,  104,  109,
+      172,  173,  105,  110,  203,  119,  153,  248,  106,  111,
+      112,  204,  113,  120,  114,  163,  206,  164,  115,  121,
+      176,  177,  249,  801,  116,  178,  209,  207,  169,  181,
+      117,  125,  210,  179,  126,  127,  170,  128,  180,  235,
+      129,  130,  131,  182,  236,  132,  133,  134,  171,  188,
+      135,  189,  193,  136,  194,  190,  137,  191,  237,  214,
+      138,  215,  238,  139,  140,  242,  239,  272,  464,  141,
 
-      191,  178,  192,  211,  266,  212,  223,  224,  225,  246,
-      271,  457,  226,  252,  253,  267,  284,  227,  272,  268,
-      637,  290,  296,  228,  333,  638,  229,  258,  297,  458,
-      259,  291,  285,  260,  261,  308,  262,  351,  292,  263,
-      364,  365,  309,  334,  293,  264,  372,  373,  392,  400,
-      352,  408,  427,  521,  428,  393,  448,  476,  409,  594,
-      477,  679,  800,  410,  394,  714,  449,  522,  411,  715,
-      401,  552,  553,  554,  575,  576,  595,  555,  596,  556,
-      680,  801,  557,  802,  558,  597,  719,  598,  622,  729,
-      559,  803,  623,  577,  624,  625,  730,  578,  720,  738,
+      142,  240,  192,  226,  227,  228,  269,  243,  254,  229,
+      274,  273,  279,  300,  230,  288,  465,  270,  275,  301,
+      231,  271,  280,  232,  255,  256,  261,  338,  802,  262,
+      294,  289,  263,  264,  302,  265,  313,  303,  266,  406,
+      295,  370,  371,  314,  267,  398,  339,  296,  378,  379,
+      414,  382,  399,  297,  383,  455,  433,  415,  434,  529,
+      407,  400,  416,  484,  603,  456,  485,  417,  803,  584,
+      585,  733,  650,  530,  561,  562,  563,  651,  760,  692,
+      564,  604,  565,  734,  806,  566,  807,  567,  586,  761,
+      605,  728,  587,  568,  606,  729,  633,  607,  693,  608,
 
-      746,  748,  739,  740,  754,  789,  626,  755,  741,  761,
-      804,  747,  762,  808,  806,  809,  810,  811,  749,  812,
-      813,  750,  790,  807,  814,  815,  816,  817,  818,  805,
-      819,  820,  821,  822,  823,  824,  825,  826,  827,  828,
-      829,  830,  831,  832,  833,  834,  835,  836,  837,  842,
-      838,  843,  839,  844,  845,  846,  840,  848,  849,  850,
-      851,  852,  841,  847,  854,  855,  856,  857,  858,  859,
-      860,  861,  853,  864,  865,  866,  867,  868,  869,  870,
-      871,  872,  873,  874,  862,  875,  876,  877,  878,  863,
-      879,  880,  881,  882,  883,  884,  885,  886,  887,  888,
+      634,  743,  635,  636,  762,  804,  752,  808,  744,  753,
+      754,  809,  810,  768,  637,  755,  769,  775,  811,  812,
+      776,  763,  805,  813,  764,  814,  815,  816,  817,  818,
+      819,  820,  821,  823,  825,  826,  827,  828,  829,  830,
+      831,  832,  824,  833,  834,  835,  836,  837,  838,  839,
+      840,  822,  841,  842,  843,  844,  845,  846,  847,  848,
+      849,  850,  851,  852,  853,  854,  859,  855,  860,  856,
+      861,  862,  863,  857,  865,  866,  867,  868,  869,  858,
+      864,  870,  872,  873,  874,  875,  876,  877,  878,  879,
+      882,  883,  871,  884,  885,  886,  887,  888,  889,  890,
 
-      889,  890,  891,  892,  893,  894,  895,  896,  897,  898,
+      891,  892,  880,  893,  894,  895,  896,  881,  897,  898,
       899,  900,  901,  902,  903,  904,  905,  906,  907,  908,
       909,  910,  911,  912,  913,  914,  915,  916,  917,  918,
       919,  920,  921,  922,  923,  924,  925,  926,  927,  928,
-      929,  930,  931,  932,  937,  938,  939,  933,  940,  934,
-      941,  942,  943,  935,  936,  944,  945,  946,  947,  948,
-      949,  950,  951,  952,  953,  954,  955,  956,  957,  958,
-      959,  960,  961,  962,  963,  964,  965,  966,  967,  968,
+      929,  930,  931,  932,  933,  934,  935,  936,  937,  938,
+      939,  940,  941,  942,  943,  944,  945,  946,  947,  948,
+      949,  950,  951,  956,  957,  958,  952,  959,  953,  960,
+      961,  962,  954,  955,  963,  964,  965,  966,  967,  968,
       969,  970,  971,  972,  973,  974,  975,  976,  977,  978,
       979,  980,  981,  982,  983,  984,  985,  986,  987,  988,
 
-      989,  990,  991,  992,  994,  995,  993,  996,  997,  998,
-      999, 1000, 1001, 1002, 1003, 1004, 1007, 1008, 1009, 1010,
-     1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1005, 1006,
-     1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028,
-     1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038,
-     1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048,
+      989,  990,  991,  992,  993,  994,  995,  996,  997,  998,
+      999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
+     1009, 1010, 1011, 1012, 1014, 1015, 1013, 1016, 1017, 1018,
+     1019, 1020, 1021, 1022, 1023, 1024, 1025, 1028, 1029, 1030,
+     1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1026,
+     1027, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048,
      1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058,
      1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068,
      1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078,
      1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088,
 
-     1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1099, 1097,
-     1100, 1101, 1102, 1103, 1104, 1105, 1106, 1098, 1107, 1108,
-     1109, 1110, 1111, 1113, 1114, 1115, 1112, 1118, 1116, 1119,
-     1124, 1125, 1126, 1127, 1120, 1128, 1121, 1129, 1130, 1131,
-     1122, 1117, 1132, 1133, 1134, 1135, 1123, 1136, 1137, 1138,
-     1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148,
-     1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158,
+     1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098,
+     1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108,
+     1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118,
+     1119, 1122, 1120, 1123, 1124, 1125, 1126, 1127, 1128, 1129,
+     1121, 1130, 1131, 1132, 1133, 1134, 1136, 1137, 1138, 1135,
+     1141, 1139, 1142, 1147, 1148, 1149, 1150, 1143, 1151, 1144,
+     1152, 1153, 1154, 1145, 1140, 1155, 1156, 1157, 1158, 1146,
      1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168,
      1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178,
-     1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1179,
+     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, 1216, 1217, 1218,
+     1199, 1200, 1201, 1202, 1204, 1205, 1206, 1207, 1208, 1209,
+     1210, 1211, 1212, 1203, 1213, 1214, 1215, 1216, 1217, 1218,
      1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228,
-     1229, 1096, 1231, 1097, 1233, 1234, 1235, 1236, 1237, 1238,
-     1239, 1098, 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,
+     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, 1119, 1256, 1120, 1258,
+     1259, 1260, 1261, 1262, 1263, 1264, 1121, 1265, 1266, 1267,
      1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277,
      1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287,
 
-     1288, 1289, 1290, 1291, 1292, 1293, 1295, 1296, 1297, 1298,
-     1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308,
-     1309, 1310, 1294, 1311, 1312, 1313, 1314, 1315, 1316, 1317,
-     1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327,
-     1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337,
-     1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1231, 1231,
-     1233, 1233, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353,
-     1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363,
-     1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373,
+     1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297,
+     1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307,
+     1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317,
+     1318, 1319, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328,
+     1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1320, 1337,
+     1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347,
+     1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357,
+     1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367,
+     1368, 1369, 1370, 1371, 1372, 1256, 1256, 1258, 1258, 1373,
      1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383,
 
      1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393,
@@ -1077,14 +1085,14 @@
      1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453,
      1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463,
      1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473,
-     1474, 1475, 1476, 1477, 1478, 1480, 1481, 1482, 1483, 1485,
+     1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483,
 
-     1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495,
-     1496, 1497, 1498, 1479, 1499, 1484, 1500, 1501, 1502, 1504,
-     1505, 1506, 1507, 1508, 1503, 1509, 1510, 1511, 1512, 1513,
-     1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523,
-     1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533,
-     1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543,
+     1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493,
+     1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503,
+     1504, 1505, 1506, 1507, 1508, 1510, 1511, 1512, 1513, 1515,
+     1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525,
+     1526, 1527, 1528, 1509, 1529, 1514, 1530, 1531, 1532, 1534,
+     1535, 1536, 1537, 1538, 1533, 1539, 1540, 1541, 1542, 1543,
      1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553,
      1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563,
      1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573,
@@ -1098,11 +1106,11 @@
      1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643,
      1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653,
      1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663,
-     1664, 1665, 1666, 1668, 1667, 1669, 1670, 1671, 1672, 1673,
+     1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673,
      1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683,
 
      1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693,
-     1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703,
+     1694, 1695, 1696, 1697, 1698, 1700, 1699, 1701, 1702, 1703,
      1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713,
      1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723,
      1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733,
@@ -1119,327 +1127,295 @@
      1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833,
      1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843,
      1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853,
-     1854, 1855, 1856, 1857, 1858, 1859, 1860,   39,   40,   40,
-       42, 1230, 1232,  797,  796,  795,  794,  793,  792,  791,
-      788,  787,  786,  785,  784,  783,  782,  781,  780,  779,
+     1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863,
+     1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873,
+     1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883,
 
-      778,  777,  776,  775,  774,  773,  772,  771,  770,  769,
-      768,  767,  766,  765,  764,  763,  760,  759,  758,  757,
-      756,  753,  752,  751,  745,  744,  743,  742,  737,  736,
-      735,  734,  733,  732,  731,  728,  727,  726,  725,  724,
-      723,  722,  721,  718,  717,  716,  713,  712,  711,  710,
-      709,  708,  707,  706,  705,  704,  703,  702,  701,  700,
-      699,  698,  697,  696,  695,  694,  693,  692,  691,  690,
-      689,  688,  687,  686,  685,  684,  683,  682,  681,  678,
-      677,  676,  675,  674,  673,  672,  671,  670,  669,  668,
-      667,  666,  665,  664,  663,  662,  661,  660,  659,  658,
+     1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892,   39,
+       40,   40,   42, 1255, 1257,  800,  799,  798,  797,  796,
+      795,  794,  793,  792,  791,  790,  789,  788,  787,  786,
+      785,  784,  783,  782,  781,  780,  779,  778,  777,  774,
+      773,  772,  771,  770,  767,  766,  765,  759,  758,  757,
+      756,  751,  750,  749,  748,  747,  746,  745,  742,  741,
+      740,  739,  738,  737,  736,  735,  732,  731,  730,  727,
+      726,  725,  724,  723,  722,  721,  720,  719,  718,  717,
+      716,  715,  714,  713,  712,  711,  710,  709,  708,  707,
+      706,  705,  704,  703,  702,  701,  700,  699,  698,  697,
 
-      657,  656,  655,  654,  653,  652,  651,  650,  649,  648,
-      647,  646,  645,  644,  643,  642,  641,  640,  639,  636,
-      635,  634,  633,  632,  631,  630,  629,  628,  627,  621,
-      620,  619,  618,  617,  616,  615,  614,  613,  612,  611,
-      610,  609,  608,  607,  606,  605,  604,  603,  602,  601,
-      600,  599,  593,  592,  591,  590,  589,  588,  587,  586,
-      585,  584,  583,  582,  581,  580,  579,  574,  573,  572,
-      571,  570,  569,  568,  567,  566,  565,  564,  563,  562,
-      561,  560,  551,  550,  549,  548,  547,  546,  545,  544,
-      543,  542,  541,  540,  539,  538,  537,  536,  535,  534,
+      696,  695,  694,  691,  690,  689,  688,  687,  686,  685,
+      684,  683,  682,  681,  680,  679,  678,  677,  676,  675,
+      674,  673,  672,  671,  670,  669,  668,  667,  666,  665,
+      664,  663,  662,  661,  660,  659,  658,  657,  656,  655,
+      654,  653,  652,  649,  648,  647,  646,  645,  644,  643,
+      642,  641,  640,  639,  638,  632,  631,  630,  629,  628,
+      627,  626,  625,  624,  623,  622,  621,  620,  619,  618,
+      617,  616,  615,  614,  613,  612,  611,  610,  609,  602,
+      601,  600,  599,  598,  597,  596,  595,  594,  593,  592,
+      591,  590,  589,  588,  583,  582,  581,  580,  579,  578,
 
-      533,  532,  531,  530,  529,  528,  527,  526,  525,  524,
-      523,  520,  519,  518,  517,  516,  515,  514,  513,  512,
-      511,  510,  509,  508,  507,  506,  505,  504,  503,  502,
-      501,  500,  499,  498,  497,  496,  495,  494,  493,  492,
-      491,  490,  489,  488,  487,  486,  485,  484,  483,  482,
-      481,  480,  479,  478,  475,  474,  473,  472,  471,  470,
-      469,  468,  467,  466,  465,  464,  463,  462,  461,  460,
-      459,  456,  455,  454,  453,  452,  451,  450,  447,  446,
-      445,  444,  443,  442,  441,  440,  439,  438,  437,  436,
-      435,  434,  433,  432,  431,  430,  429,  426,  425,  424,
+      577,  576,  575,  574,  573,  572,  571,  570,  569,  560,
+      559,  558,  557,  556,  555,  554,  553,  552,  551,  550,
+      549,  548,  547,  546,  545,  544,  543,  542,  541,  540,
+      539,  538,  537,  536,  535,  534,  533,  532,  531,  528,
+      527,  526,  525,  524,  523,  522,  521,  520,  519,  518,
+      517,  516,  515,  514,  513,  512,  511,  510,  509,  508,
+      507,  506,  505,  504,  503,  502,  501,  500,  499,  498,
+      497,  496,  495,  494,  493,  492,  491,  490,  489,  488,
+      487,  486,  483,  482,  481,  480,  479,  478,  477,  476,
+      475,  474,  473,  472,  471,  470,  469,  468,  467,  466,
 
-      423,  422,  421,  420,  419,  418,  417,  416,  415,  414,
-      413,  412,  407,  406,  405,  404,  403,  402,  399,  398,
-      397,  396,  395,  391,  390,  389,  388,  387,  386,  385,
-      384,  383,  382,  381,  380,  379,  378,  375,  374,  371,
-      370,  369,  368,  367,  366,  363,  362,  361,  360,  359,
-      358,  357,  356,  355,  354,  353,  350,  349,  348,  347,
-      346,  345,  344,  343,  342,  341,  340,  339,  338,  337,
-      336,  335,  332,  331,  330,  329,  328,  327,  326,  325,
-      324,  323,  322,  321,  320,  319,  318,  317,  316,  315,
-      314,  313,  312,  311,  310,  307,  306,  305,  304,  303,
+      463,  462,  461,  460,  459,  458,  457,  454,  453,  452,
+      451,  450,  449,  448,  447,  446,  445,  444,  443,  442,
+      441,  440,  439,  438,  437,  436,  435,  432,  431,  430,
+      429,  428,  427,  426,  425,  424,  423,  422,  421,  420,
+      419,  418,  413,  412,  411,  410,  409,  408,  405,  404,
+      403,  402,  401,  397,  396,  395,  394,  393,  392,  391,
+      390,  389,  388,  387,  386,  385,  384,  381,  380,  377,
+      376,  375,  374,  373,  372,  369,  368,  367,  366,  365,
+      364,  363,  362,  361,  360,  359,  358,  355,  354,  353,
+      352,  351,  350,  349,  348,  347,  346,  345,  344,  343,
 
-      302,  301,  300,  299,  298,  295,  294,  289,  288,  287,
-      286,  283,  282,  281,  280,  279,  278,  277,  274,  273,
-      265,  255,  254,  250,  249,  248,  247,  244,  243,  242,
-      241,  238,  231,  230,  222,  221,  220,  219,  218,  217,
-      216,  215,  214,  213,  210,  209,  206,  203,  200,  199,
-      198,  195,  194,  193,  185,  184,  183,  182,  181,  173,
-      172,  164,  163,  160,  159,  158,  157,  156,  155,  154,
-      153,  152,  149,   38,  148,  147,  144,  121,  117,   96,
-       38, 1861,    3, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+      342,  341,  340,  337,  336,  335,  334,  333,  332,  331,
+      330,  329,  328,  327,  326,  325,  324,  323,  322,  321,
+      320,  319,  318,  317,  316,  315,  312,  311,  310,  309,
+      308,  307,  306,  305,  304,  299,  298,  293,  292,  291,
+      290,  287,  286,  285,  284,  283,  282,  281,  278,  277,
+      276,  268,  258,  257,  253,  252,  251,  250,  247,  246,
+      245,  244,  241,  234,  233,  225,  224,  223,  222,  221,
+      220,  219,  218,  217,  216,  213,  212,  211,  208,  205,
+      202,  201,  200,  197,  196,  195,  187,  186,  185,  184,
+      183,  175,  174,  166,  165,  162,  161,  160,  159,  158,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861
+      157,  156,  155,  154,  151,   38,  150,  149,  146,  122,
+      118,   97,   38, 1893,    3, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893
     } ;
 
-static yyconst short int yy_chk[1925] =
+static yyconst short int yy_chk[1957] =
     {   0,
         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,    7,    7,    9,   10,  121,   10,   11,   11,   11,
-       16,   12,   12,  121,   12,   13,   16,   16,   13,    9,
+        1,    7,    7,    9,   10,  122,   10,   11,   11,   11,
+       16,   12,   12,  122,   12,   13,   16,   16,   13,    9,
        12,   34,   12,   79,   13,   34,   79,   16,   13,   12,
        14,   15,   14,   18,   61,   15,   18,   14,   14,   15,
-       18,   14,   27,   18,   14,   15,   61,   14,   15,  632,
-       27,   15,   17,   19,   40,   40,   27,   17,   17,  104,
+       18,   14,  200,   18,   14,   15,   61,   14,   15,   22,
+       29,   15,   17,   40,   40,  200,   22,   17,   17,   22,
 
-       17,   19,   17,   17,  104,   17,   17,   19,   20,   22,
-       83,   20,   17,   19,  108,   29,   22,   83,   20,   22,
-       20,   22,   23,   23,   24,   24,  108,   23,   24,   29,
-       87,   23,   24,   48,   32,   32,   87,   23,   24,   25,
-       32,   25,  129,   25,   47,   47,   47,   25,   62,   58,
-       48,   58,  129,   25,   63,   63,   62,  105,   67,   25,
-       30,  105,   85,   30,   30,   73,   30,   73,   62,  633,
-       30,   30,   67,   85,   30,   30,   31,  125,   74,   31,
-       74,  106,   31,   66,   66,   31,  106,  220,   66,   31,
-      220,  125,   31,   31,  113,   74,   66,  118,   31,   31,
+       17,   22,   17,   17,   29,   17,   17,   19,   32,   32,
+       20,   19,   17,   20,   32,   19,   47,   47,   47,   48,
+       20,   19,   20,   23,   23,   24,   24,   19,   23,   24,
+       63,   63,   23,   24,   83,   27,   48,  114,   23,   24,
+       25,   83,   25,   27,   25,   58,   85,   58,   25,   27,
+       66,   66,  114,  630,   25,   66,   87,   85,   62,   67,
+       25,   30,   87,   66,   30,   30,   62,   30,   66,  105,
+       30,   30,   30,   67,  105,   30,   30,   31,   62,   73,
+       31,   73,   75,   31,   75,   74,   31,   74,  106,   91,
+       31,   91,  106,   31,   31,  109,  107,  126,  298,   31,
 
-       75,   66,   75,   90,  124,   90,  101,  101,  101,  113,
-      126,  294,  101,  118,  118,  124,  137,  101,  126,  124,
-      470,  142,  145,  101,  181,  470,  101,  122,  145,  294,
-      122,  142,  137,  122,  122,  156,  122,  198,  142,  122,
-      210,  210,  156,  181,  142,  122,  217,  217,  235,  241,
-      198,  248,  264,  363,  264,  235,  286,  315,  248,  431,
-      315,  519,  635,  248,  235,  554,  286,  363,  248,  554,
-      241,  396,  396,  396,  413,  413,  431,  396,  432,  396,
-      519,  637,  396,  638,  396,  432,  558,  432,  457,  567,
-      396,  639,  457,  413,  457,  457,  567,  413,  558,  575,
+       31,  107,   74,  102,  102,  102,  125,  109,  119,  102,
+      127,  126,  131,  147,  102,  139,  298,  125,  127,  147,
+      102,  125,  131,  102,  119,  119,  123,  183,  631,  123,
+      144,  139,  123,  123,  148,  123,  158,  148,  123,  244,
+      144,  213,  213,  158,  123,  238,  183,  144,  220,  220,
+      251,  223,  238,  144,  223,  290,  267,  251,  267,  368,
+      244,  238,  251,  320,  437,  290,  320,  251,  632,  419,
+      419,  567,  478,  368,  402,  402,  402,  478,  589,  527,
+      402,  437,  402,  567,  634,  402,  635,  402,  419,  589,
+      438,  563,  419,  402,  438,  563,  464,  438,  527,  438,
 
-      580,  581,  575,  575,  585,  622,  457,  585,  575,  592,
-      640,  580,  592,  642,  641,  643,  644,  645,  581,  646,
-      647,  581,  622,  641,  648,  649,  650,  651,  652,  640,
-      653,  654,  655,  656,  657,  658,  659,  661,  662,  664,
-      665,  666,  667,  668,  669,  670,  671,  672,  673,  674,
-      673,  675,  673,  677,  678,  679,  673,  681,  682,  683,
-      684,  685,  673,  679,  686,  687,  688,  689,  690,  692,
-      693,  694,  685,  695,  697,  698,  700,  701,  703,  704,
-      705,  708,  709,  710,  694,  712,  713,  714,  715,  694,
-      716,  717,  718,  719,  720,  721,  723,  724,  725,  726,
+      464,  576,  464,  464,  590,  633,  584,  636,  576,  584,
+      584,  637,  638,  594,  464,  584,  594,  601,  639,  640,
+      601,  590,  633,  641,  590,  642,  645,  646,  648,  650,
+      651,  652,  653,  654,  655,  656,  657,  658,  659,  660,
+      661,  662,  654,  663,  664,  665,  666,  667,  668,  669,
+      670,  653,  671,  672,  674,  675,  677,  678,  679,  680,
+      681,  682,  683,  684,  685,  686,  687,  686,  688,  686,
+      690,  691,  692,  686,  694,  695,  696,  697,  698,  686,
+      692,  699,  700,  701,  702,  703,  704,  706,  707,  708,
+      709,  711,  699,  712,  714,  715,  717,  718,  719,  722,
 
-      727,  728,  729,  730,  731,  732,  733,  734,  735,  736,
-      737,  738,  739,  740,  741,  742,  743,  744,  745,  747,
-      748,  749,  750,  751,  752,  754,  755,  757,  758,  759,
-      760,  761,  762,  763,  764,  765,  765,  766,  767,  769,
-      771,  772,  773,  774,  776,  777,  778,  774,  779,  774,
-      780,  781,  782,  774,  774,  786,  788,  789,  790,  791,
-      792,  793,  794,  797,  798,  799,  800,  801,  802,  803,
-      804,  805,  806,  807,  808,  809,  810,  812,  813,  814,
-      816,  817,  818,  819,  820,  821,  822,  823,  824,  825,
-      826,  827,  828,  829,  830,  831,  832,  833,  834,  835,
+      723,  724,  708,  726,  727,  728,  729,  708,  730,  731,
+      732,  733,  734,  735,  737,  738,  739,  740,  741,  742,
+      743,  744,  745,  746,  747,  748,  749,  750,  751,  752,
+      753,  754,  755,  756,  757,  758,  759,  761,  762,  763,
+      764,  765,  766,  768,  769,  771,  772,  773,  774,  775,
+      776,  777,  778,  779,  779,  780,  781,  782,  784,  786,
+      787,  788,  789,  791,  792,  793,  789,  794,  789,  795,
+      796,  797,  789,  789,  801,  803,  804,  805,  806,  807,
+      808,  809,  810,  813,  815,  816,  817,  818,  819,  820,
+      821,  822,  823,  824,  825,  826,  827,  829,  830,  831,
 
-      836,  837,  838,  839,  840,  841,  839,  842,  843,  845,
-      846,  847,  848,  849,  850,  851,  852,  853,  854,  855,
-      856,  857,  858,  859,  860,  861,  862,  863,  851,  851,
-      864,  867,  869,  870,  871,  872,  875,  876,  877,  878,
-      879,  880,  881,  882,  883,  884,  885,  886,  887,  891,
-      892,  893,  894,  895,  896,  897,  898,  899,  900,  901,
-      902,  903,  904,  905,  906,  907,  908,  909,  910,  911,
-      912,  913,  914,  915,  916,  917,  918,  919,  920,  921,
-      923,  924,  925,  926,  927,  928,  929,  930,  931,  932,
-      933,  934,  935,  936,  937,  938,  939,  940,  941,  942,
+      833,  834,  835,  836,  837,  838,  839,  840,  841,  842,
+      843,  844,  845,  846,  847,  848,  849,  850,  851,  852,
+      853,  854,  855,  856,  857,  858,  856,  859,  860,  862,
+      863,  864,  865,  866,  867,  868,  869,  870,  871,  872,
+      873,  874,  875,  876,  877,  878,  879,  880,  881,  869,
+      869,  882,  885,  887,  888,  889,  890,  893,  894,  895,
+      896,  897,  898,  899,  900,  901,  902,  903,  904,  905,
+      909,  910,  911,  912,  913,  914,  915,  916,  917,  918,
+      919,  920,  921,  922,  923,  924,  925,  926,  927,  928,
+      929,  930,  931,  932,  933,  934,  935,  936,  937,  938,
 
-      943,  947,  948,  949,  950,  951,  952,  953,  954,  953,
-      955,  956,  957,  959,  960,  961,  963,  953,  965,  966,
-      967,  968,  969,  970,  971,  972,  969,  973,  972,  974,
-      975,  976,  978,  979,  974,  980,  974,  982,  984,  985,
-      974,  972,  986,  988,  989,  990,  974,  991,  992,  993,
-      994,  995,  998,  999, 1000, 1001, 1002, 1003, 1004, 1005,
-     1006, 1007, 1008, 1011, 1012, 1013, 1014, 1015, 1016, 1017,
-     1018, 1019, 1022, 1023, 1024, 1025, 1027, 1028, 1029, 1030,
-     1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040,
-     1041, 1042, 1043, 1044, 1046, 1048, 1049, 1050, 1052, 1040,
+      939,  941,  942,  943,  944,  945,  946,  947,  948,  949,
+      950,  951,  952,  953,  954,  955,  956,  957,  958,  959,
+      960,  961,  962,  966,  967,  968,  969,  970,  971,  972,
+      973,  974,  973,  975,  976,  977,  979,  980,  981,  983,
+      973,  985,  986,  987,  988,  989,  990,  991,  992,  989,
+      993,  992,  994,  995,  996,  998,  999,  994, 1000,  994,
+     1002, 1004, 1005,  994,  992, 1006, 1008, 1009, 1010,  994,
+     1011, 1012, 1013, 1014, 1015, 1018, 1019, 1020, 1021, 1022,
+     1023, 1024, 1025, 1026, 1027, 1028, 1029, 1032, 1033, 1034,
+     1035, 1036, 1037, 1038, 1039, 1040, 1043, 1044, 1045, 1046,
 
-     1054, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064,
-     1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074,
-     1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084,
-     1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094,
-     1095, 1096, 1097, 1096, 1098, 1099, 1100, 1101, 1102, 1103,
-     1104, 1096, 1105, 1107, 1108, 1109, 1110, 1111, 1112, 1113,
-     1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124,
-     1125, 1126, 1128, 1129, 1130, 1134, 1135, 1136, 1137, 1138,
-     1139, 1140, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149,
-     1150, 1151, 1152, 1153, 1154, 1155, 1157, 1158, 1159, 1160,
+     1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057,
+     1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1067, 1069,
+     1070, 1071, 1073, 1061, 1075, 1077, 1078, 1079, 1080, 1081,
+     1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091,
+     1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101,
+     1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111,
+     1112, 1113, 1114, 1115, 1116, 1118, 1119, 1120, 1119, 1121,
+     1122, 1123, 1124, 1125, 1126, 1127, 1119, 1128, 1130, 1131,
+     1132, 1133, 1134, 1135, 1136, 1138, 1139, 1140, 1141, 1142,
+     1143, 1144, 1145, 1146, 1147, 1148, 1149, 1151, 1152, 1153,
 
-     1162, 1164, 1165, 1166, 1167, 1170, 1171, 1172, 1174, 1175,
-     1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185,
-     1186, 1187, 1170, 1188, 1189, 1190, 1192, 1193, 1194, 1197,
-     1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208,
-     1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1218, 1219,
-     1220, 1221, 1222, 1223, 1224, 1227, 1228, 1229, 1230, 1231,
-     1232, 1233, 1234, 1235, 1236, 1237, 1239, 1240, 1242, 1243,
-     1244, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254,
-     1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264,
-     1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1274, 1275,
+     1157, 1158, 1159, 1160, 1161, 1162, 1163, 1165, 1166, 1167,
+     1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177,
+     1178, 1179, 1181, 1182, 1183, 1184, 1186, 1188, 1189, 1190,
+     1191, 1194, 1195, 1196, 1198, 1199, 1200, 1201, 1202, 1203,
+     1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1194, 1212,
+     1213, 1214, 1216, 1217, 1218, 1221, 1223, 1224, 1225, 1226,
+     1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236,
+     1237, 1238, 1239, 1240, 1241, 1243, 1244, 1245, 1246, 1247,
+     1248, 1249, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259,
+     1260, 1261, 1262, 1264, 1265, 1267, 1268, 1269, 1271, 1272,
 
-     1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285,
-     1286, 1287, 1288, 1290, 1291, 1293, 1294, 1296, 1297, 1298,
-     1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309,
-     1310, 1311, 1312, 1313, 1314, 1316, 1317, 1318, 1319, 1320,
-     1321, 1322, 1325, 1328, 1329, 1330, 1331, 1332, 1333, 1334,
-     1335, 1336, 1337, 1339, 1340, 1341, 1343, 1344, 1345, 1346,
-     1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1357,
-     1358, 1359, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368,
-     1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378,
-     1379, 1380, 1382, 1383, 1386, 1387, 1388, 1389, 1390, 1391,
+     1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282,
+     1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292,
+     1293, 1294, 1295, 1296, 1297, 1299, 1300, 1301, 1302, 1303,
+     1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313,
+     1314, 1316, 1317, 1319, 1320, 1322, 1323, 1324, 1326, 1327,
+     1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337,
+     1338, 1339, 1340, 1342, 1343, 1344, 1345, 1346, 1347, 1348,
+     1351, 1352, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362,
+     1363, 1364, 1366, 1367, 1368, 1370, 1371, 1372, 1373, 1374,
+     1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1384, 1385,
 
-     1392, 1393, 1394, 1395, 1397, 1399, 1400, 1402, 1403, 1404,
-     1405, 1406, 1407, 1386, 1408, 1390, 1409, 1410, 1411, 1412,
-     1413, 1415, 1416, 1418, 1411, 1419, 1420, 1421, 1423, 1424,
-     1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434,
-     1435, 1436, 1437, 1438, 1439, 1441, 1442, 1443, 1444, 1445,
-     1446, 1447, 1448, 1449, 1450, 1452, 1453, 1454, 1455, 1457,
-     1458, 1459, 1460, 1461, 1462, 1465, 1466, 1467, 1468, 1469,
-     1470, 1471, 1472, 1473, 1475, 1476, 1478, 1480, 1481, 1482,
-     1483, 1484, 1485, 1488, 1489, 1490, 1491, 1492, 1493, 1494,
-     1495, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507,
+     1386, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396,
+     1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406,
+     1407, 1409, 1410, 1411, 1414, 1415, 1416, 1417, 1418, 1419,
+     1420, 1421, 1422, 1423, 1425, 1427, 1428, 1430, 1431, 1432,
+     1433, 1434, 1435, 1414, 1436, 1418, 1437, 1438, 1439, 1440,
+     1441, 1443, 1444, 1446, 1439, 1447, 1448, 1449, 1451, 1452,
+     1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462,
+     1463, 1464, 1465, 1466, 1467, 1468, 1470, 1471, 1472, 1473,
+     1474, 1475, 1476, 1477, 1478, 1479, 1481, 1482, 1483, 1484,
+     1486, 1487, 1488, 1489, 1490, 1491, 1494, 1495, 1496, 1497,
 
-     1510, 1511, 1512, 1513, 1514, 1515, 1518, 1519, 1520, 1521,
-     1522, 1523, 1524, 1525, 1526, 1528, 1529, 1530, 1531, 1533,
-     1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543,
-     1544, 1545, 1546, 1547, 1549, 1550, 1552, 1553, 1555, 1558,
-     1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568,
-     1569, 1570, 1572, 1573, 1575, 1576, 1578, 1580, 1581, 1582,
-     1583, 1584, 1585, 1586, 1587, 1590, 1591, 1592, 1593, 1594,
-     1595, 1597, 1598, 1600, 1602, 1603, 1604, 1607, 1608, 1609,
-     1610, 1611, 1612, 1613, 1612, 1615, 1616, 1617, 1618, 1619,
-     1623, 1624, 1625, 1627, 1628, 1629, 1630, 1631, 1632, 1633,
+     1498, 1499, 1500, 1501, 1502, 1504, 1505, 1508, 1510, 1511,
+     1512, 1513, 1514, 1515, 1518, 1519, 1520, 1521, 1522, 1523,
+     1524, 1525, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536,
+     1537, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1549, 1550,
+     1551, 1552, 1553, 1554, 1555, 1556, 1557, 1559, 1560, 1561,
+     1562, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572,
+     1573, 1574, 1575, 1576, 1577, 1578, 1580, 1581, 1583, 1584,
+     1586, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597,
+     1598, 1599, 1600, 1601, 1603, 1604, 1606, 1607, 1609, 1611,
+     1612, 1613, 1614, 1615, 1616, 1617, 1618, 1622, 1623, 1624,
 
-     1634, 1635, 1637, 1638, 1639, 1640, 1641, 1643, 1644, 1645,
-     1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655,
-     1656, 1657, 1660, 1661, 1661, 1662, 1663, 1664, 1665, 1666,
-     1667, 1668, 1669, 1670, 1672, 1675, 1678, 1679, 1681, 1682,
-     1683, 1684, 1685, 1686, 1687, 1688, 1690, 1691, 1692, 1693,
-     1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703,
-     1704, 1705, 1706, 1709, 1710, 1711, 1712, 1713, 1714, 1715,
-     1716, 1717, 1718, 1720, 1722, 1723, 1724, 1725, 1727, 1728,
-     1731, 1734, 1735, 1736, 1737, 1739, 1740, 1741, 1742, 1743,
-     1744, 1745, 1746, 1749, 1750, 1751, 1752, 1753, 1754, 1755,
+     1625, 1626, 1627, 1629, 1630, 1632, 1634, 1635, 1636, 1639,
+     1640, 1641, 1642, 1643, 1644, 1645, 1644, 1647, 1648, 1649,
+     1650, 1651, 1655, 1656, 1657, 1659, 1660, 1661, 1662, 1663,
+     1664, 1665, 1666, 1667, 1669, 1670, 1671, 1672, 1673, 1675,
+     1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685,
+     1686, 1687, 1688, 1689, 1692, 1693, 1693, 1694, 1695, 1696,
+     1697, 1698, 1699, 1700, 1701, 1702, 1704, 1707, 1710, 1711,
+     1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1722, 1723,
+     1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733,
+     1734, 1735, 1736, 1737, 1738, 1741, 1742, 1743, 1744, 1745,
 
-     1756, 1757, 1758, 1760, 1761, 1762, 1763, 1764, 1766, 1767,
-     1768, 1773, 1774, 1775, 1776, 1777, 1779, 1780, 1781, 1782,
-     1783, 1785, 1786, 1787, 1789, 1791, 1792, 1793, 1794, 1795,
-     1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1808,
-     1809, 1810, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819,
-     1820, 1822, 1823, 1824, 1827, 1828, 1829, 1830, 1831, 1833,
-     1834, 1836, 1839, 1840, 1841, 1842, 1844, 1846, 1847, 1848,
-     1849, 1851, 1852, 1853, 1855, 1857, 1858, 1862, 1863, 1863,
-     1864, 1865, 1866,  629,  628,  627,  626,  625,  624,  623,
-      621,  620,  619,  618,  617,  616,  615,  614,  613,  611,
+     1746, 1747, 1748, 1749, 1750, 1752, 1754, 1755, 1756, 1757,
+     1759, 1760, 1763, 1766, 1767, 1768, 1769, 1771, 1772, 1773,
+     1774, 1775, 1776, 1777, 1778, 1781, 1782, 1783, 1784, 1785,
+     1786, 1787, 1788, 1789, 1790, 1792, 1793, 1794, 1795, 1796,
+     1798, 1799, 1800, 1805, 1806, 1807, 1808, 1809, 1811, 1812,
+     1813, 1814, 1815, 1817, 1818, 1819, 1821, 1823, 1824, 1825,
+     1826, 1827, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837,
+     1838, 1840, 1841, 1842, 1844, 1845, 1846, 1847, 1848, 1849,
+     1850, 1851, 1852, 1854, 1855, 1856, 1859, 1860, 1861, 1862,
+     1863, 1865, 1866, 1868, 1871, 1872, 1873, 1874, 1876, 1878,
 
-      610,  609,  608,  607,  606,  605,  604,  603,  601,  600,
-      599,  598,  597,  596,  594,  593,  591,  590,  589,  588,
-      587,  584,  583,  582,  579,  578,  577,  576,  574,  573,
-      572,  571,  570,  569,  568,  566,  565,  564,  563,  562,
-      561,  560,  559,  557,  556,  555,  553,  552,  551,  550,
-      549,  548,  547,  546,  545,  544,  543,  542,  541,  540,
-      539,  538,  537,  536,  535,  534,  533,  532,  531,  530,
-      529,  528,  527,  526,  524,  523,  522,  521,  520,  518,
-      517,  515,  514,  513,  512,  511,  509,  508,  507,  506,
-      505,  504,  503,  502,  501,  500,  499,  498,  496,  495,
+     1879, 1880, 1881, 1883, 1884, 1885, 1887, 1889, 1890, 1894,
+     1895, 1895, 1896, 1897, 1898,  629,  628,  627,  626,  625,
+      624,  622,  621,  620,  619,  618,  617,  616,  615,  614,
+      611,  610,  609,  608,  607,  606,  605,  603,  602,  600,
+      599,  598,  597,  596,  593,  592,  591,  588,  587,  586,
+      585,  583,  582,  581,  580,  579,  578,  577,  575,  574,
+      573,  572,  571,  570,  569,  568,  566,  565,  564,  562,
+      561,  560,  559,  558,  557,  556,  555,  554,  553,  552,
+      551,  550,  549,  548,  547,  546,  545,  544,  543,  542,
+      541,  540,  539,  538,  537,  536,  535,  533,  532,  531,
 
-      493,  492,  491,  490,  489,  487,  486,  485,  484,  483,
-      481,  480,  479,  478,  477,  476,  475,  473,  471,  468,
-      467,  466,  465,  464,  463,  462,  461,  460,  459,  456,
-      455,  454,  453,  452,  450,  449,  448,  447,  446,  445,
-      444,  443,  442,  441,  440,  439,  438,  437,  436,  435,
-      434,  433,  430,  429,  428,  427,  426,  425,  424,  423,
-      422,  421,  420,  419,  417,  415,  414,  412,  411,  410,
-      409,  408,  407,  406,  405,  404,  402,  401,  400,  399,
-      398,  397,  395,  394,  393,  392,  391,  390,  389,  388,
-      387,  386,  385,  384,  383,  382,  381,  380,  379,  378,
+      530,  529,  528,  526,  525,  523,  522,  521,  520,  519,
+      517,  516,  515,  514,  513,  512,  511,  510,  509,  508,
+      507,  506,  504,  503,  501,  500,  499,  498,  497,  495,
+      494,  493,  492,  491,  489,  488,  487,  486,  485,  484,
+      483,  481,  479,  476,  475,  474,  473,  472,  471,  470,
+      469,  468,  467,  466,  465,  463,  462,  461,  460,  459,
+      457,  456,  455,  454,  453,  452,  451,  450,  449,  448,
+      447,  446,  445,  444,  443,  442,  441,  440,  439,  436,
+      435,  434,  433,  432,  431,  430,  429,  428,  427,  426,
+      425,  423,  421,  420,  418,  417,  416,  415,  414,  413,
 
-      377,  376,  375,  374,  371,  370,  369,  368,  367,  365,
-      364,  362,  361,  360,  359,  358,  357,  356,  354,  353,
-      352,  351,  350,  349,  348,  347,  346,  345,  344,  343,
-      342,  341,  340,  339,  338,  337,  336,  335,  334,  333,
-      332,  331,  329,  328,  325,  324,  323,  322,  321,  320,
-      319,  318,  317,  316,  314,  313,  312,  310,  309,  307,
-      306,  305,  304,  303,  302,  301,  299,  298,  297,  296,
-      295,  293,  292,  291,  290,  289,  288,  287,  285,  284,
-      283,  282,  281,  280,  279,  278,  277,  275,  274,  273,
-      272,  270,  269,  268,  267,  266,  265,  263,  262,  261,
+      412,  411,  410,  408,  407,  406,  405,  404,  403,  401,
+      400,  399,  398,  397,  396,  395,  394,  393,  392,  391,
+      390,  389,  388,  387,  386,  385,  384,  383,  382,  381,
+      380,  377,  376,  375,  374,  373,  371,  370,  369,  367,
+      366,  365,  364,  363,  362,  361,  359,  358,  357,  356,
+      355,  354,  353,  352,  351,  350,  349,  348,  347,  346,
+      345,  344,  343,  342,  341,  340,  339,  338,  337,  336,
+      334,  333,  330,  329,  328,  327,  326,  325,  324,  323,
+      322,  321,  319,  318,  317,  315,  314,  312,  311,  310,
+      309,  308,  307,  306,  304,  303,  302,  301,  300,  299,
 
-      260,  259,  258,  257,  256,  255,  254,  253,  252,  251,
-      250,  249,  247,  246,  245,  244,  243,  242,  240,  239,
-      238,  237,  236,  234,  233,  232,  231,  230,  229,  228,
-      227,  226,  225,  224,  223,  222,  221,  219,  218,  216,
-      215,  214,  213,  212,  211,  209,  208,  207,  206,  205,
-      204,  203,  202,  201,  200,  199,  197,  196,  195,  194,
-      193,  192,  191,  190,  189,  188,  187,  186,  185,  184,
-      183,  182,  180,  178,  177,  176,  175,  174,  173,  172,
-      171,  170,  169,  168,  167,  166,  165,  164,  163,  162,
-      161,  160,  159,  158,  157,  155,  154,  153,  152,  151,
+      297,  296,  295,  294,  293,  292,  291,  289,  288,  287,
+      286,  285,  284,  283,  282,  281,  279,  278,  277,  276,
+      275,  273,  272,  271,  270,  269,  268,  266,  265,  264,
+      263,  262,  261,  260,  259,  258,  257,  256,  255,  254,
+      253,  252,  250,  249,  248,  247,  246,  245,  243,  242,
+      241,  240,  239,  237,  236,  235,  234,  233,  232,  231,
+      230,  229,  228,  227,  226,  225,  224,  222,  221,  219,
+      218,  217,  216,  215,  214,  212,  211,  210,  209,  208,
+      207,  206,  205,  204,  203,  202,  201,  199,  198,  197,
+      196,  195,  194,  193,  192,  191,  190,  189,  188,  187,
 
-      150,  149,  148,  147,  146,  144,  143,  141,  140,  139,
-      138,  136,  135,  134,  133,  132,  131,  130,  128,  127,
-      123,  120,  119,  117,  116,  115,  114,  112,  111,  110,
-      109,  107,  103,  102,  100,   99,   98,   97,   96,   95,
-       94,   93,   92,   91,   89,   88,   86,   84,   82,   81,
-       80,   78,   77,   76,   72,   71,   70,   69,   68,   65,
-       64,   60,   59,   57,   56,   55,   54,   53,   52,   51,
-       50,   49,   44,   38,   36,   35,   33,   28,   26,   21,
-        5,    3, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+      186,  185,  184,  182,  180,  179,  178,  177,  176,  175,
+      174,  173,  172,  171,  170,  169,  168,  167,  166,  165,
+      164,  163,  162,  161,  160,  159,  157,  156,  155,  154,
+      153,  152,  151,  150,  149,  146,  145,  143,  142,  141,
+      140,  138,  137,  136,  135,  134,  133,  132,  130,  129,
+      128,  124,  121,  120,  118,  117,  116,  115,  113,  112,
+      111,  110,  108,  104,  103,  101,  100,   99,   98,   97,
+       96,   95,   94,   93,   92,   90,   89,   88,   86,   84,
+       82,   81,   80,   78,   77,   76,   72,   71,   70,   69,
+       68,   65,   64,   60,   59,   57,   56,   55,   54,   53,
 
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
-     1861, 1861, 1861, 1861
+       52,   51,   50,   49,   44,   38,   36,   35,   33,   28,
+       26,   21,    5,    3, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
+     1893, 1893, 1893, 1893, 1893, 1893
     } ;
 
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
 
-extern int yy_flex_debug;
-int yy_flex_debug = 1;
-
-static yyconst short int yy_rule_linenum[289] =
-    {   0,
-       71,   72,   74,   76,   77,   79,   81,  126,  127,  128,
-      129,  130,  131,  132,  133,  134,  135,  136,  137,  138,
-      139,  140,  141,  142,  143,  144,  145,  146,  147,  148,
-      149,  150,  151,  152,  153,  154,  155,  156,  157,  158,
-      159,  160,  161,  162,  163,  164,  165,  166,  167,  168,
-      169,  170,  171,  172,  173,  174,  175,  176,  177,  178,
-      179,  180,  181,  182,  183,  184,  185,  186,  187,  188,
-      189,  190,  191,  192,  193,  194,  195,  196,  197,  198,
-      199,  200,  201,  202,  203,  204,  205,  206,  207,  208,
-      209,  210,  211,  212,  213,  214,  215,  216,  217,  218,
-
-      219,  220,  221,  222,  223,  224,  225,  226,  227,  228,
-      229,  230,  231,  232,  233,  234,  235,  236,  237,  238,
-      239,  240,  241,  242,  243,  244,  245,  246,  247,  248,
-      249,  250,  251,  252,  253,  254,  255,  256,  257,  258,
-      259,  260,  261,  262,  263,  264,  265,  266,  267,  268,
-      269,  270,  271,  272,  273,  274,  275,  276,  277,  278,
-      279,  280,  281,  282,  283,  284,  285,  286,  287,  288,
-      289,  290,  291,  292,  293,  294,  295,  296,  297,  298,
-      299,  300,  301,  302,  303,  304,  305,  306,  307,  308,
-      309,  310,  311,  312,  313,  314,  315,  316,  317,  318,
-
-      319,  320,  322,  323,  324,  325,  326,  327,  328,  329,
-      330,  331,  332,  333,  334,  336,  337,  338,  339,  340,
-      341,  342,  343,  344,  345,  346,  347,  348,  349,  351,
-      352,  354,  355,  356,  357,  358,  359,  360,  361,  362,
-      363,  364,  365,  366,  367,  368,  369,  370,  371,  372,
-      373,  374,  375,  376,  378,  379,  380,  381,  382,  383,
-      384,  385,  386,  387,  389,  390,  391,  392,  393,  394,
-      395,  396,  397,  398,  399,  400,  401,  402,  403,  404,
-      405,  406,  407,  408,  409,  410,  411,  413
-    } ;
-
 /* The intent behind this definition is that it'll catch
  * any uses of REJECT which flex missed.
  */
@@ -1473,7 +1449,7 @@
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
  *  USA
  *
- *  $Id: lex.yy.c 853 2007-02-22 06:01:30Z db $
+ *  $Id: ircd_lexer.l 849 2007-02-19 19:41:59Z db $
  */
 #define YY_NO_UNPUT 1
 #define YY_NEVER_INTERACTIVE 1
@@ -1509,7 +1485,7 @@
 static void ccomment(void);
 static void cinclude(void);
 static int ieof(void);
-#line 1513 "lex.yy.c"
+#line 1489 "lex.yy.c"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1662,7 +1638,7 @@
 
 #line 70 "ircd_lexer.l"
 
-#line 1666 "lex.yy.c"
+#line 1642 "lex.yy.c"
 
 	if ( yy_init )
 		{
@@ -1719,13 +1695,13 @@
 			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 >= 1862 )
+				if ( yy_current_state >= 1894 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_base[yy_current_state] != 1883 );
+		while ( yy_base[yy_current_state] != 1915 );
 
 yy_find_action:
 		yy_act = yy_accept[yy_current_state];
@@ -1741,21 +1717,6 @@
 
 do_action:	/* This label is used only to access EOF actions. */
 
-		if ( yy_flex_debug )
-			{
-			if ( yy_act == 0 )
-				fprintf( stderr, "--scanner backing up\n" );
-			else if ( yy_act < 289 )
-				fprintf( stderr, "--accepting rule at line %d (\"%s\")\n",
-				         yy_rule_linenum[yy_act], yytext );
-			else if ( yy_act == 289 )
-				fprintf( stderr, "--accepting default rule (\"%s\")\n",
-				         yytext );
-			else if ( yy_act == 290 )
-				fprintf( stderr, "--(end of buffer or a NUL)\n" );
-			else
-				fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
-			}
 
 		switch ( yy_act )
 	{ /* beginning of action switch */
@@ -2232,172 +2193,172 @@
 case 85:
 YY_RULE_SETUP
 #line 203 "ircd_lexer.l"
-{ return HIDDEN; }
+{ return HELP_CHANNEL; }
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
 #line 204 "ircd_lexer.l"
-{ return HIDDEN_ADMIN; }
+{ return HIDDEN; }
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
 #line 205 "ircd_lexer.l"
-{ return HIDDEN_NAME; }
+{ return HIDDEN_ADMIN; }
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
 #line 206 "ircd_lexer.l"
-{ return HIDDEN_OPER; }
+{ return HIDDEN_NAME; }
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
 #line 207 "ircd_lexer.l"
-{ return HIDE_SERVER_IPS; }
+{ return HIDDEN_OPER; }
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
 #line 208 "ircd_lexer.l"
-{ return HIDE_SERVERS; }
+{ return HIDE_SERVER_IPS; }
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
 #line 209 "ircd_lexer.l"
-{ return HIDE_SPOOF_IPS; }
+{ return HIDE_SERVERS; }
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
 #line 210 "ircd_lexer.l"
-{ return HOST; }
+{ return HIDE_SPOOF_IPS; }
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
 #line 211 "ircd_lexer.l"
-{ return HUB; }
+{ return HOST; }
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
 #line 212 "ircd_lexer.l"
-{ return HUB_MASK; }
+{ return HUB; }
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
 #line 213 "ircd_lexer.l"
-{ return IDLETIME; }
+{ return HUB_MASK; }
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
 #line 214 "ircd_lexer.l"
-{ return IGNORE_BOGUS_TS; }
+{ return IDLETIME; }
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
 #line 215 "ircd_lexer.l"
-{ return INVISIBLE_ON_CONNECT; }
+{ return IGNORE_BOGUS_TS; }
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
 #line 216 "ircd_lexer.l"
-{ return IP; }
+{ return INVISIBLE_ON_CONNECT; }
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
 #line 217 "ircd_lexer.l"
-{ return T_IPV4; }
+{ return IP; }
 	YY_BREAK
 case 100:
 YY_RULE_SETUP
 #line 218 "ircd_lexer.l"
-{ return T_IPV6; }
+{ return T_IPV4; }
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
 #line 219 "ircd_lexer.l"
-{ return JOIN_FLOOD_COUNT; }
+{ return T_IPV6; }
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
 #line 220 "ircd_lexer.l"
-{ return JOIN_FLOOD_TIME; }
+{ return JOIN_FLOOD_COUNT; }
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
 #line 221 "ircd_lexer.l"
-{ return KILL; }
+{ return JOIN_FLOOD_TIME; }
 	YY_BREAK
 case 104:
 YY_RULE_SETUP
 #line 222 "ircd_lexer.l"
-{ return KILL_CHASE_TIME_LIMIT; }
+{ return KILL; }
 	YY_BREAK
 case 105:
 YY_RULE_SETUP
 #line 223 "ircd_lexer.l"
-{ return KLINE; }
+{ return KILL_CHASE_TIME_LIMIT; }
 	YY_BREAK
 case 106:
 YY_RULE_SETUP
 #line 224 "ircd_lexer.l"
-{ return KLINE_EXEMPT; }
+{ return KLINE; }
 	YY_BREAK
 case 107:
 YY_RULE_SETUP
 #line 225 "ircd_lexer.l"
-{ return T_L_CRIT; }
+{ return KLINE_EXEMPT; }
 	YY_BREAK
 case 108:
 YY_RULE_SETUP
 #line 226 "ircd_lexer.l"
-{ return T_L_DEBUG; }
+{ return T_L_CRIT; }
 	YY_BREAK
 case 109:
 YY_RULE_SETUP
 #line 227 "ircd_lexer.l"
-{ return T_L_ERROR; }
+{ return T_L_DEBUG; }
 	YY_BREAK
 case 110:
 YY_RULE_SETUP
 #line 228 "ircd_lexer.l"
-{ return T_L_INFO; }
+{ return T_L_ERROR; }
 	YY_BREAK
 case 111:
 YY_RULE_SETUP
 #line 229 "ircd_lexer.l"
-{ return T_L_NOTICE; }
+{ return T_L_INFO; }
 	YY_BREAK
 case 112:
 YY_RULE_SETUP
 #line 230 "ircd_lexer.l"
-{ return T_L_TRACE; }
+{ return T_L_NOTICE; }
 	YY_BREAK
 case 113:
 YY_RULE_SETUP
 #line 231 "ircd_lexer.l"
-{ return T_L_WARN; }
+{ return T_L_TRACE; }
 	YY_BREAK
 case 114:
 YY_RULE_SETUP
 #line 232 "ircd_lexer.l"
-{ return LAZYLINK; }
+{ return T_L_WARN; }
 	YY_BREAK
 case 115:
 YY_RULE_SETUP
 #line 233 "ircd_lexer.l"
-{ return LEAF_MASK; }
+{ return LAZYLINK; }
 	YY_BREAK
 case 116:
 YY_RULE_SETUP
 #line 234 "ircd_lexer.l"
-{ return LISTEN; }
+{ return LEAF_MASK; }
 	YY_BREAK
 case 117:
 YY_RULE_SETUP
 #line 235 "ircd_lexer.l"
-{ return LOG_LEVEL; }
+{ return LISTEN; }
 	YY_BREAK
 case 118:
 YY_RULE_SETUP
 #line 236 "ircd_lexer.l"
-{ return LOGGING; }
+{ return LOG_LEVEL; }
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
@@ -2407,142 +2368,142 @@
 case 120:
 YY_RULE_SETUP
 #line 238 "ircd_lexer.l"
-{ return T_LOGPATH; }
+{ return LOGGING; }
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
 #line 239 "ircd_lexer.l"
-{ return TMASKED; }
+{ return T_LOGPATH; }
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
 #line 240 "ircd_lexer.l"
-{ return T_MAX_CLIENTS; }
+{ return TMASKED; }
 	YY_BREAK
 case 123:
 YY_RULE_SETUP
 #line 241 "ircd_lexer.l"
-{ return MAX_IDENT; }
+{ return T_MAX_CLIENTS; }
 	YY_BREAK
 case 124:
 YY_RULE_SETUP
 #line 242 "ircd_lexer.l"
-{ return MAX_LOCAL; }
+{ return MAX_IDENT; }
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
 #line 243 "ircd_lexer.l"
-{ return MAX_GLOBAL; }
+{ return MAX_LOCAL; }
 	YY_BREAK
 case 126:
 YY_RULE_SETUP
 #line 244 "ircd_lexer.l"
-{ return MAX_NUMBER; }
+{ return MAX_GLOBAL; }
 	YY_BREAK
 case 127:
 YY_RULE_SETUP
 #line 245 "ircd_lexer.l"
-{ return MESSAGE_LOCALE; }
+{ return MAX_NUMBER; }
 	YY_BREAK
 case 128:
 YY_RULE_SETUP
 #line 246 "ircd_lexer.l"
-{ return MIN_NONWILDCARD; }
+{ return MESSAGE_LOCALE; }
 	YY_BREAK
 case 129:
 YY_RULE_SETUP
 #line 247 "ircd_lexer.l"
-{ return MIN_NONWILDCARD_SIMPLE; }
+{ return MIN_NONWILDCARD; }
 	YY_BREAK
 case 130:
 YY_RULE_SETUP
 #line 248 "ircd_lexer.l"
-{ return NAME; }
+{ return MIN_NONWILDCARD_SIMPLE; }
 	YY_BREAK
 case 131:
 YY_RULE_SETUP
 #line 249 "ircd_lexer.l"
-{ return NEED_PASSWORD; }
+{ return NAME; }
 	YY_BREAK
 case 132:
 YY_RULE_SETUP
 #line 250 "ircd_lexer.l"
-{ return NETWORK_DESC; }
+{ return NEED_PASSWORD; }
 	YY_BREAK
 case 133:
 YY_RULE_SETUP
 #line 251 "ircd_lexer.l"
-{ return NETWORK_NAME; }
+{ return NETWORK_DESC; }
 	YY_BREAK
 case 134:
 YY_RULE_SETUP
 #line 252 "ircd_lexer.l"
-{ return NICK; }
+{ return NETWORK_NAME; }
 	YY_BREAK
 case 135:
 YY_RULE_SETUP
 #line 253 "ircd_lexer.l"
-{ return NICK_CHANGES; }
+{ return NICK; }
 	YY_BREAK
 case 136:
 YY_RULE_SETUP
 #line 254 "ircd_lexer.l"
-{ yylval.number = NO; return TBOOL; }
+{ return NICK_CHANGES; }
 	YY_BREAK
 case 137:
 YY_RULE_SETUP
 #line 255 "ircd_lexer.l"
-{ return NO_CREATE_ON_SPLIT; }
+{ yylval.number = NO; return TBOOL; }
 	YY_BREAK
 case 138:
 YY_RULE_SETUP
 #line 256 "ircd_lexer.l"
-{ return NO_JOIN_ON_SPLIT; }
+{ return NO_CREATE_ON_SPLIT; }
 	YY_BREAK
 case 139:
 YY_RULE_SETUP
 #line 257 "ircd_lexer.l"
-{ return NO_OPER_FLOOD; }
+{ return NO_JOIN_ON_SPLIT; }
 	YY_BREAK
 case 140:
 YY_RULE_SETUP
 #line 258 "ircd_lexer.l"
-{ return NO_TILDE; }
+{ return NO_OPER_FLOOD; }
 	YY_BREAK
 case 141:
 YY_RULE_SETUP
 #line 259 "ircd_lexer.l"
-{ return NUMBER_PER_CIDR; }
+{ return NO_TILDE; }
 	YY_BREAK
 case 142:
 YY_RULE_SETUP
 #line 260 "ircd_lexer.l"
-{ return NUMBER_PER_IP; }
+{ return NUMBER_PER_CIDR; }
 	YY_BREAK
 case 143:
 YY_RULE_SETUP
 #line 261 "ircd_lexer.l"
-{ return OPERATOR; }
+{ return NUMBER_PER_IP; }
 	YY_BREAK
 case 144:
 YY_RULE_SETUP
 #line 262 "ircd_lexer.l"
-{ return OPER_LOG; }
+{ return OPERATOR; }
 	YY_BREAK
 case 145:
 YY_RULE_SETUP
 #line 263 "ircd_lexer.l"
-{ return OPER_PASS_RESV; }
+{ return OPER_LOG; }
 	YY_BREAK
 case 146:
 YY_RULE_SETUP
 #line 264 "ircd_lexer.l"
-{ return OPERATOR; }
+{ return OPER_PASS_RESV; }
 	YY_BREAK
 case 147:
 YY_RULE_SETUP
 #line 265 "ircd_lexer.l"
-{ return PASSWORD; }
+{ return OPERATOR; }
 	YY_BREAK
 case 148:
 YY_RULE_SETUP
@@ -2552,713 +2513,738 @@
 case 149:
 YY_RULE_SETUP
 #line 267 "ircd_lexer.l"
-{ return PING_COOKIE; }
+{ return PASSWORD; }
 	YY_BREAK
 case 150:
 YY_RULE_SETUP
 #line 268 "ircd_lexer.l"
-{ return PING_TIME; }
+{ return PING_COOKIE; }
 	YY_BREAK
 case 151:
 YY_RULE_SETUP
 #line 269 "ircd_lexer.l"
-{ return PING_WARNING; }
+{ return PING_TIME; }
 	YY_BREAK
 case 152:
 YY_RULE_SETUP
 #line 270 "ircd_lexer.l"
-{ return PORT; }
+{ return PING_WARNING; }
 	YY_BREAK
 case 153:
 YY_RULE_SETUP
 #line 271 "ircd_lexer.l"
-{ return RESV; }
+{ return PORT; }
 	YY_BREAK
 case 154:
 YY_RULE_SETUP
 #line 272 "ircd_lexer.l"
-{ return QUIET_ON_BAN; }
+{ return RESV; }
 	YY_BREAK
 case 155:
 YY_RULE_SETUP
 #line 273 "ircd_lexer.l"
-{ return REASON; }
+{ return QUIET_ON_BAN; }
 	YY_BREAK
 case 156:
 YY_RULE_SETUP
 #line 274 "ircd_lexer.l"
-{ return REDIRPORT; }
+{ return REASON; }
 	YY_BREAK
 case 157:
 YY_RULE_SETUP
 #line 275 "ircd_lexer.l"
-{ return REDIRSERV; }
+{ return REDIRPORT; }
 	YY_BREAK
 case 158:
 YY_RULE_SETUP
 #line 276 "ircd_lexer.l"
-{ return REGEX_T; }
+{ return REDIRSERV; }
 	YY_BREAK
 case 159:
 YY_RULE_SETUP
 #line 277 "ircd_lexer.l"
-{ return REHASH; }
+{ return REGEX_T; }
 	YY_BREAK
 case 160:
 YY_RULE_SETUP
 #line 278 "ircd_lexer.l"
-{ return T_REJECT; }
+{ return REHASH; }
 	YY_BREAK
 case 161:
 YY_RULE_SETUP
 #line 279 "ircd_lexer.l"
-{ return TREJECT_HOLD_TIME; }
+{ return T_REJECT; }
 	YY_BREAK
 case 162:
 YY_RULE_SETUP
 #line 280 "ircd_lexer.l"
-{ return REMOTE; }
+{ return TREJECT_HOLD_TIME; }
 	YY_BREAK
 case 163:
 YY_RULE_SETUP
 #line 281 "ircd_lexer.l"
-{ return REMOTEBAN; }
+{ return REMOTE; }
 	YY_BREAK
 case 164:
 YY_RULE_SETUP
 #line 282 "ircd_lexer.l"
-{ return RESTRICT_CHANNELS; }
+{ return REMOTEBAN; }
 	YY_BREAK
 case 165:
 YY_RULE_SETUP
 #line 283 "ircd_lexer.l"
-{ return RESV; }
+{ return RESTRICT_CHANNELS; }
 	YY_BREAK
 case 166:
 YY_RULE_SETUP
 #line 284 "ircd_lexer.l"
-{ return RESV_EXEMPT; }
+{ return RESV; }
 	YY_BREAK
 case 167:
 YY_RULE_SETUP
 #line 285 "ircd_lexer.l"
-{ return RSA_PRIVATE_KEY_FILE; }
+{ return RESV_EXEMPT; }
 	YY_BREAK
 case 168:
 YY_RULE_SETUP
 #line 286 "ircd_lexer.l"
-{ return RSA_PUBLIC_KEY_FILE; }
+{ return RSA_PRIVATE_KEY_FILE; }
 	YY_BREAK
 case 169:
 YY_RULE_SETUP
 #line 287 "ircd_lexer.l"
-{ return T_SSL; }
+{ return RSA_PUBLIC_KEY_FILE; }
 	YY_BREAK
 case 170:
 YY_RULE_SETUP
 #line 288 "ircd_lexer.l"
-{ return SSL_CERTIFICATE_FILE; }
+{ return T_SSL; }
 	YY_BREAK
 case 171:
 YY_RULE_SETUP
 #line 289 "ircd_lexer.l"
-{ return SEND_PASSWORD; }
+{ return SSL_CERTIFICATE_FILE; }
 	YY_BREAK
 case 172:
 YY_RULE_SETUP
 #line 290 "ircd_lexer.l"
-{ return SENDQ; }
+{ return SEND_PASSWORD; }
 	YY_BREAK
 case 173:
 YY_RULE_SETUP
 #line 291 "ircd_lexer.l"
-{ return SERVERHIDE; }
+{ return SENDQ; }
 	YY_BREAK
 case 174:
 YY_RULE_SETUP
 #line 292 "ircd_lexer.l"
-{ return SERVERINFO; }
+{ return SERVERHIDE; }
 	YY_BREAK
 case 175:
 YY_RULE_SETUP
 #line 293 "ircd_lexer.l"
-{ return SERVLINK_PATH; }
+{ return SERVERINFO; }
 	YY_BREAK
 case 176:
 YY_RULE_SETUP
 #line 294 "ircd_lexer.l"
-{ return T_SHARED; }
+{ return SERVLINK_PATH; }
 	YY_BREAK
 case 177:
 YY_RULE_SETUP
 #line 295 "ircd_lexer.l"
-{ return SHORT_MOTD; }
+{ return SERVICES_NAME; }
 	YY_BREAK
 case 178:
 YY_RULE_SETUP
 #line 296 "ircd_lexer.l"
-{ return IRCD_SID; }
+{ return T_SHARED; }
 	YY_BREAK
 case 179:
 YY_RULE_SETUP
 #line 297 "ircd_lexer.l"
-{ return SILENT; }
+{ return SHORT_MOTD; }
 	YY_BREAK
 case 180:
 YY_RULE_SETUP
 #line 298 "ircd_lexer.l"
-{ return SPOOF; }
+{ return IRCD_SID; }
 	YY_BREAK
 case 181:
 YY_RULE_SETUP
 #line 299 "ircd_lexer.l"
-{ return SPOOF_NOTICE; }
+{ return SILENT; }
 	YY_BREAK
 case 182:
 YY_RULE_SETUP
 #line 300 "ircd_lexer.l"
-{ return TKLINE_EXPIRE_NOTICES; }
+{ return T_SNOOP; }
 	YY_BREAK
 case 183:
 YY_RULE_SETUP
 #line 301 "ircd_lexer.l"
-{ return TYPE; }
+{ return SPOOF; }
 	YY_BREAK
 case 184:
 YY_RULE_SETUP
 #line 302 "ircd_lexer.l"
-{ return TRUE_NO_OPER_FLOOD; }
+{ return SPOOF_NOTICE; }
 	YY_BREAK
 case 185:
 YY_RULE_SETUP
 #line 303 "ircd_lexer.l"
-{ return T_UMODES; }
+{ return TKLINE_EXPIRE_NOTICES; }
 	YY_BREAK
 case 186:
 YY_RULE_SETUP
 #line 304 "ircd_lexer.l"
-{ return UNKLINE; }
+{ return TYPE; }
 	YY_BREAK
 case 187:
 YY_RULE_SETUP
 #line 305 "ircd_lexer.l"
-{ return USE_EGD; }
+{ return TRUE_NO_OPER_FLOOD; }
 	YY_BREAK
 case 188:
 YY_RULE_SETUP
 #line 306 "ircd_lexer.l"
-{ return USE_EXCEPT; }
+{ return T_UMODES; }
 	YY_BREAK
 case 189:
 YY_RULE_SETUP
 #line 307 "ircd_lexer.l"
-{ return USE_INVEX; }
+{ return UNKLINE; }
 	YY_BREAK
 case 190:
 YY_RULE_SETUP
 #line 308 "ircd_lexer.l"
-{ return USE_KNOCK; }
+{ return USE_EGD; }
 	YY_BREAK
 case 191:
 YY_RULE_SETUP
 #line 309 "ircd_lexer.l"
-{ return USE_LOGGING; }
+{ return USE_EXCEPT; }
 	YY_BREAK
 case 192:
 YY_RULE_SETUP
 #line 310 "ircd_lexer.l"
-{ return USE_WHOIS_ACTUALLY; }
+{ return USE_INVEX; }
 	YY_BREAK
 case 193:
 YY_RULE_SETUP
 #line 311 "ircd_lexer.l"
-{ return THROTTLE_TIME; }
+{ return USE_KNOCK; }
 	YY_BREAK
 case 194:
 YY_RULE_SETUP
 #line 312 "ircd_lexer.l"
-{ return USER; } 
+{ return USE_LOGGING; }
 	YY_BREAK
 case 195:
 YY_RULE_SETUP
 #line 313 "ircd_lexer.l"
-{ return TKLINE; } 
+{ return USE_WHOIS_ACTUALLY; }
 	YY_BREAK
 case 196:
 YY_RULE_SETUP
 #line 314 "ircd_lexer.l"
-{ return TXLINE; } 
+{ return THROTTLE_TIME; }
 	YY_BREAK
 case 197:
 YY_RULE_SETUP
 #line 315 "ircd_lexer.l"
-{ return TRESV; } 
+{ return USER; } 
 	YY_BREAK
 case 198:
 YY_RULE_SETUP
 #line 316 "ircd_lexer.l"
-{ return VHOST; }
+{ return T_USERMODE; }
 	YY_BREAK
 case 199:
 YY_RULE_SETUP
 #line 317 "ircd_lexer.l"
-{ return VHOST6; }
+{ return TKLINE; } 
 	YY_BREAK
 case 200:
 YY_RULE_SETUP
 #line 318 "ircd_lexer.l"
-{ return WARN; }
+{ return TXLINE; } 
 	YY_BREAK
 case 201:
 YY_RULE_SETUP
 #line 319 "ircd_lexer.l"
-{ return XLINE; }
+{ return TRESV; } 
 	YY_BREAK
 case 202:
 YY_RULE_SETUP
 #line 320 "ircd_lexer.l"
-{ yylval.number = YES; return TBOOL; }
+{ return VHOST; }
 	YY_BREAK
 case 203:
 YY_RULE_SETUP
-#line 322 "ircd_lexer.l"
-{ return FAILED_OPER_NOTICE; }
+#line 321 "ircd_lexer.l"
+{ return VHOST6; }
 	YY_BREAK
 case 204:
 YY_RULE_SETUP
-#line 323 "ircd_lexer.l"
-{ return MAX_ACCEPT; }
+#line 322 "ircd_lexer.l"
+{ return WARN; }
 	YY_BREAK
 case 205:
 YY_RULE_SETUP
-#line 324 "ircd_lexer.l"
-{ return MAX_NICK_CHANGES; }
+#line 323 "ircd_lexer.l"
+{ return WEBIRC; }
 	YY_BREAK
 case 206:
 YY_RULE_SETUP
-#line 325 "ircd_lexer.l"
-{ return MAX_CHANS_PER_USER; }
+#line 324 "ircd_lexer.l"
+{ return XLINE; }
 	YY_BREAK
 case 207:
 YY_RULE_SETUP
-#line 326 "ircd_lexer.l"
-{ return MAX_NICK_TIME; }
+#line 325 "ircd_lexer.l"
+{ yylval.number = YES; return TBOOL; }
 	YY_BREAK
 case 208:
 YY_RULE_SETUP
 #line 327 "ircd_lexer.l"
-{ return ANTI_NICK_FLOOD; }
+{ return FAILED_OPER_NOTICE; }
 	YY_BREAK
 case 209:
 YY_RULE_SETUP
 #line 328 "ircd_lexer.l"
-{ return ANTI_SPAM_EXIT_MESSAGE_TIME; }
+{ return MAX_ACCEPT; }
 	YY_BREAK
 case 210:
 YY_RULE_SETUP
 #line 329 "ircd_lexer.l"
-{ return TS_MAX_DELTA; }
+{ return MAX_NICK_CHANGES; }
 	YY_BREAK
 case 211:
 YY_RULE_SETUP
 #line 330 "ircd_lexer.l"
-{ return TS_WARN_DELTA; }
+{ return MAX_CHANS_PER_USER; }
 	YY_BREAK
 case 212:
 YY_RULE_SETUP
 #line 331 "ircd_lexer.l"
-{ return LINKS_DELAY; }
+{ return MAX_NICK_TIME; }
 	YY_BREAK
 case 213:
 YY_RULE_SETUP
 #line 332 "ircd_lexer.l"
-{ return KLINE_REASON; }
+{ return ANTI_NICK_FLOOD; }
 	YY_BREAK
 case 214:
 YY_RULE_SETUP
 #line 333 "ircd_lexer.l"
-{ return KLINE_WITH_REASON; }
+{ return ANTI_SPAM_EXIT_MESSAGE_TIME; }
 	YY_BREAK
 case 215:
 YY_RULE_SETUP
 #line 334 "ircd_lexer.l"
-{ return WARN_NO_NLINE; }
+{ return TS_MAX_DELTA; }
 	YY_BREAK
 case 216:
 YY_RULE_SETUP
-#line 336 "ircd_lexer.l"
-{ return STATS_E_DISABLED; }
+#line 335 "ircd_lexer.l"
+{ return TS_WARN_DELTA; }
 	YY_BREAK
 case 217:
 YY_RULE_SETUP
-#line 337 "ircd_lexer.l"
-{ return STATS_O_OPER_ONLY; }
+#line 336 "ircd_lexer.l"
+{ return LINKS_DELAY; }
 	YY_BREAK
 case 218:
 YY_RULE_SETUP
-#line 338 "ircd_lexer.l"
-{ return STATS_K_OPER_ONLY; }
+#line 337 "ircd_lexer.l"
+{ return KLINE_REASON; }
 	YY_BREAK
 case 219:
 YY_RULE_SETUP
-#line 339 "ircd_lexer.l"
-{ return STATS_I_OPER_ONLY; }
+#line 338 "ircd_lexer.l"
+{ return KLINE_WITH_REASON; }
 	YY_BREAK
 case 220:
 YY_RULE_SETUP
-#line 340 "ircd_lexer.l"
-{ return STATS_P_OPER_ONLY; }
+#line 339 "ircd_lexer.l"
+{ return WARN_NO_NLINE; }
 	YY_BREAK
 case 221:
 YY_RULE_SETUP
 #line 341 "ircd_lexer.l"
-{ return PACE_WAIT; }
+{ return STATS_E_DISABLED; }
 	YY_BREAK
 case 222:
 YY_RULE_SETUP
 #line 342 "ircd_lexer.l"
-{ return PACE_WAIT_SIMPLE; }
+{ return STATS_O_OPER_ONLY; }
 	YY_BREAK
 case 223:
 YY_RULE_SETUP
 #line 343 "ircd_lexer.l"
-{ return KNOCK_DELAY; }
+{ return STATS_K_OPER_ONLY; }
 	YY_BREAK
 case 224:
 YY_RULE_SETUP
 #line 344 "ircd_lexer.l"
-{ return KNOCK_DELAY_CHANNEL; }
+{ return STATS_I_OPER_ONLY; }
 	YY_BREAK
 case 225:
 YY_RULE_SETUP
 #line 345 "ircd_lexer.l"
-{ return MAX_BANS; }
+{ return STATS_P_OPER_ONLY; }
 	YY_BREAK
 case 226:
 YY_RULE_SETUP
 #line 346 "ircd_lexer.l"
-{ return MODULES; }
+{ return PACE_WAIT; }
 	YY_BREAK
 case 227:
 YY_RULE_SETUP
 #line 347 "ircd_lexer.l"
-{ return MODULE; }
+{ return PACE_WAIT_SIMPLE; }
 	YY_BREAK
 case 228:
 YY_RULE_SETUP
 #line 348 "ircd_lexer.l"
-{ return PATH; }
+{ return KNOCK_DELAY; }
 	YY_BREAK
 case 229:
 YY_RULE_SETUP
 #line 349 "ircd_lexer.l"
-{ return MAX_TARGETS; }
+{ return KNOCK_DELAY_CHANNEL; }
 	YY_BREAK
 case 230:
 YY_RULE_SETUP
-#line 351 "ircd_lexer.l"
-{ return T_UNXLINE; }
+#line 350 "ircd_lexer.l"
+{ return MAX_BANS; }
 	YY_BREAK
 case 231:
 YY_RULE_SETUP
-#line 352 "ircd_lexer.l"
-{ return T_UNRESV; }
+#line 351 "ircd_lexer.l"
+{ return MODULES; }
 	YY_BREAK
 case 232:
 YY_RULE_SETUP
-#line 354 "ircd_lexer.l"
-{ return OPER_ONLY_UMODES; }
+#line 352 "ircd_lexer.l"
+{ return MODULE; }
 	YY_BREAK
 case 233:
 YY_RULE_SETUP
-#line 355 "ircd_lexer.l"
-{ return OPER_UMODES; }
+#line 353 "ircd_lexer.l"
+{ return PATH; }
 	YY_BREAK
 case 234:
 YY_RULE_SETUP
-#line 356 "ircd_lexer.l"
-{ return T_BOTS; }
+#line 354 "ircd_lexer.l"
+{ return MAX_TARGETS; }
 	YY_BREAK
 case 235:
 YY_RULE_SETUP
-#line 357 "ircd_lexer.l"
-{ return T_CCONN; }
+#line 356 "ircd_lexer.l"
+{ return T_UNXLINE; }
 	YY_BREAK
 case 236:
 YY_RULE_SETUP
-#line 358 "ircd_lexer.l"
-{ return T_CCONN_FULL; }
+#line 357 "ircd_lexer.l"
+{ return T_UNRESV; }
 	YY_BREAK
 case 237:
 YY_RULE_SETUP
 #line 359 "ircd_lexer.l"
-{ return T_DEAF; }
+{ return OPER_ONLY_UMODES; }
 	YY_BREAK
 case 238:
 YY_RULE_SETUP
 #line 360 "ircd_lexer.l"
-{ return T_DEBUG; }
+{ return OPER_UMODES; }
 	YY_BREAK
 case 239:
 YY_RULE_SETUP
 #line 361 "ircd_lexer.l"
-{ return T_FULL; }
+{ return T_BOTS; }
 	YY_BREAK
 case 240:
 YY_RULE_SETUP
 #line 362 "ircd_lexer.l"
-{ return T_SKILL; }
+{ return T_CCONN; }
 	YY_BREAK
 case 241:
 YY_RULE_SETUP
 #line 363 "ircd_lexer.l"
-{ return T_NCHANGE; }
+{ return T_CCONN_FULL; }
 	YY_BREAK
 case 242:
 YY_RULE_SETUP
 #line 364 "ircd_lexer.l"
-{ return T_REJ; }
+{ return T_DEAF; }
 	YY_BREAK
 case 243:
 YY_RULE_SETUP
 #line 365 "ircd_lexer.l"
-{ return T_UNAUTH; }
+{ return T_DEBUG; }
 	YY_BREAK
 case 244:
 YY_RULE_SETUP
 #line 366 "ircd_lexer.l"
-{ return T_SPY; }
+{ return T_FULL; }
 	YY_BREAK
 case 245:
 YY_RULE_SETUP
 #line 367 "ircd_lexer.l"
-{ return T_EXTERNAL; }
+{ return T_SKILL; }
 	YY_BREAK
 case 246:
 YY_RULE_SETUP
 #line 368 "ircd_lexer.l"
-{ return T_OPERWALL; }
+{ return T_NCHANGE; }
 	YY_BREAK
 case 247:
 YY_RULE_SETUP
 #line 369 "ircd_lexer.l"
-{ return T_SERVNOTICE; }
+{ return T_REJ; }
 	YY_BREAK
 case 248:
 YY_RULE_SETUP
 #line 370 "ircd_lexer.l"
-{ return T_INVISIBLE; }
+{ return T_UNAUTH; }
 	YY_BREAK
 case 249:
 YY_RULE_SETUP
 #line 371 "ircd_lexer.l"
-{ return T_WALLOP; }
+{ return T_SPY; }
 	YY_BREAK
 case 250:
 YY_RULE_SETUP
 #line 372 "ircd_lexer.l"
-{ return T_CALLERID; }
+{ return T_EXTERNAL; }
 	YY_BREAK
 case 251:
 YY_RULE_SETUP
 #line 373 "ircd_lexer.l"
-{ return T_SOFTCALLERID; }
+{ return T_OPERWALL; }
 	YY_BREAK
 case 252:
 YY_RULE_SETUP
 #line 374 "ircd_lexer.l"
-{ return T_DRONE; }
+{ return T_SERVNOTICE; }
 	YY_BREAK
 case 253:
 YY_RULE_SETUP
 #line 375 "ircd_lexer.l"
-{ return T_LOCOPS; }
+{ return T_INVISIBLE; }
 	YY_BREAK
 case 254:
 YY_RULE_SETUP
 #line 376 "ircd_lexer.l"
-{ return TOPICBURST; }
+{ return T_WALLOP; }
 	YY_BREAK
 case 255:
 YY_RULE_SETUP
-#line 378 "ircd_lexer.l"
-{ return WEEKS; }
+#line 377 "ircd_lexer.l"
+{ return T_CALLERID; }
 	YY_BREAK
 case 256:
 YY_RULE_SETUP
-#line 379 "ircd_lexer.l"
-{ return WEEKS; }
+#line 378 "ircd_lexer.l"
+{ return T_SOFTCALLERID; }
 	YY_BREAK
 case 257:
 YY_RULE_SETUP
-#line 380 "ircd_lexer.l"
-{ return DAYS; }
+#line 379 "ircd_lexer.l"
+{ return T_DRONE; }
 	YY_BREAK
 case 258:
 YY_RULE_SETUP
-#line 381 "ircd_lexer.l"
-{ return DAYS; }
+#line 380 "ircd_lexer.l"
+{ return T_LOCOPS; }
 	YY_BREAK
 case 259:
 YY_RULE_SETUP
-#line 382 "ircd_lexer.l"
-{ return HOURS; }
+#line 381 "ircd_lexer.l"
+{ return TOPICBURST; }
 	YY_BREAK
 case 260:
 YY_RULE_SETUP
 #line 383 "ircd_lexer.l"
-{ return HOURS; }
+{ return WEEKS; }
 	YY_BREAK
 case 261:
 YY_RULE_SETUP
 #line 384 "ircd_lexer.l"
-{ return MINUTES; }
+{ return WEEKS; }
 	YY_BREAK
 case 262:
 YY_RULE_SETUP
 #line 385 "ircd_lexer.l"
-{ return MINUTES; }
+{ return DAYS; }
 	YY_BREAK
 case 263:
 YY_RULE_SETUP
 #line 386 "ircd_lexer.l"
-{ return SECONDS; }
+{ return DAYS; }
 	YY_BREAK
 case 264:
 YY_RULE_SETUP
 #line 387 "ircd_lexer.l"
-{ return SECONDS; }
+{ return HOURS; }
 	YY_BREAK
 case 265:
 YY_RULE_SETUP
-#line 389 "ircd_lexer.l"
-{ return BYTES; }
+#line 388 "ircd_lexer.l"
+{ return HOURS; }
 	YY_BREAK
 case 266:
 YY_RULE_SETUP
-#line 390 "ircd_lexer.l"
-{ return BYTES; }
+#line 389 "ircd_lexer.l"
+{ return MINUTES; }
 	YY_BREAK
 case 267:
 YY_RULE_SETUP
-#line 391 "ircd_lexer.l"
-{ return KBYTES; }
+#line 390 "ircd_lexer.l"
+{ return MINUTES; }
 	YY_BREAK
 case 268:
 YY_RULE_SETUP
-#line 392 "ircd_lexer.l"
-{ return KBYTES; }
+#line 391 "ircd_lexer.l"
+{ return SECONDS; }
 	YY_BREAK
 case 269:
 YY_RULE_SETUP
-#line 393 "ircd_lexer.l"
-{ return KBYTES; }
+#line 392 "ircd_lexer.l"
+{ return SECONDS; }
 	YY_BREAK
 case 270:
 YY_RULE_SETUP
 #line 394 "ircd_lexer.l"
-{ return KBYTES; }
+{ return BYTES; }
 	YY_BREAK
 case 271:
 YY_RULE_SETUP
 #line 395 "ircd_lexer.l"
-{ return KBYTES; }
+{ return BYTES; }
 	YY_BREAK
 case 272:
 YY_RULE_SETUP
 #line 396 "ircd_lexer.l"
-{ return MBYTES; }
+{ return KBYTES; }
 	YY_BREAK
 case 273:
 YY_RULE_SETUP
 #line 397 "ircd_lexer.l"
-{ return MBYTES; }
+{ return KBYTES; }
 	YY_BREAK
 case 274:
 YY_RULE_SETUP
 #line 398 "ircd_lexer.l"
-{ return MBYTES; }
+{ return KBYTES; }
 	YY_BREAK
 case 275:
 YY_RULE_SETUP
 #line 399 "ircd_lexer.l"
-{ return MBYTES; }
+{ return KBYTES; }
 	YY_BREAK
 case 276:
 YY_RULE_SETUP
 #line 400 "ircd_lexer.l"
-{ return MBYTES; }
+{ return KBYTES; }
 	YY_BREAK
 case 277:
 YY_RULE_SETUP
 #line 401 "ircd_lexer.l"
-{ return GBYTES; }
+{ return MBYTES; }
 	YY_BREAK
 case 278:
 YY_RULE_SETUP
 #line 402 "ircd_lexer.l"
-{ return GBYTES; }
+{ return MBYTES; }
 	YY_BREAK
 case 279:
 YY_RULE_SETUP
 #line 403 "ircd_lexer.l"
-{ return GBYTES; }
+{ return MBYTES; }
 	YY_BREAK
 case 280:
 YY_RULE_SETUP
 #line 404 "ircd_lexer.l"
-{ return GBYTES; }
+{ return MBYTES; }
 	YY_BREAK
 case 281:
 YY_RULE_SETUP
 #line 405 "ircd_lexer.l"
-{ return GBYTES; }
+{ return MBYTES; }
 	YY_BREAK
 case 282:
 YY_RULE_SETUP
 #line 406 "ircd_lexer.l"
-{ return TBYTES; }
+{ return GBYTES; }
 	YY_BREAK
 case 283:
 YY_RULE_SETUP
 #line 407 "ircd_lexer.l"
-{ return TBYTES; }
+{ return GBYTES; }
 	YY_BREAK
 case 284:
 YY_RULE_SETUP
 #line 408 "ircd_lexer.l"
-{ return TBYTES; }
+{ return GBYTES; }
 	YY_BREAK
 case 285:
 YY_RULE_SETUP
 #line 409 "ircd_lexer.l"
-{ return TBYTES; }
+{ return GBYTES; }
 	YY_BREAK
 case 286:
 YY_RULE_SETUP
 #line 410 "ircd_lexer.l"
-{ return TBYTES; }
+{ return GBYTES; }
 	YY_BREAK
 case 287:
 YY_RULE_SETUP
 #line 411 "ircd_lexer.l"
-{ return TWODOTS; }
+{ return TBYTES; }
 	YY_BREAK
 case 288:
 YY_RULE_SETUP
+#line 412 "ircd_lexer.l"
+{ return TBYTES; }
+	YY_BREAK
+case 289:
+YY_RULE_SETUP
 #line 413 "ircd_lexer.l"
+{ return TBYTES; }
+	YY_BREAK
+case 290:
+YY_RULE_SETUP
+#line 414 "ircd_lexer.l"
+{ return TBYTES; }
+	YY_BREAK
+case 291:
+YY_RULE_SETUP
+#line 415 "ircd_lexer.l"
+{ return TBYTES; }
+	YY_BREAK
+case 292:
+YY_RULE_SETUP
+#line 416 "ircd_lexer.l"
+{ return TWODOTS; }
+	YY_BREAK
+case 293:
+YY_RULE_SETUP
+#line 418 "ircd_lexer.l"
 { return yytext[0]; }
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 414 "ircd_lexer.l"
+#line 419 "ircd_lexer.l"
 { if (ieof()) yyterminate(); }
 	YY_BREAK
-case 289:
+case 294:
 YY_RULE_SETUP
-#line 416 "ircd_lexer.l"
+#line 421 "ircd_lexer.l"
 ECHO;
 	YY_BREAK
-#line 3262 "lex.yy.c"
+#line 3248 "lex.yy.c"
 
 	case YY_END_OF_BUFFER:
 		{
@@ -3548,7 +3534,7 @@
 		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 >= 1862 )
+			if ( yy_current_state >= 1894 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -3583,11 +3569,11 @@
 	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 >= 1862 )
+		if ( yy_current_state >= 1894 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 1861);
+	yy_is_jam = (yy_current_state == 1893);
 
 	return yy_is_jam ? 0 : yy_current_state;
 	}
@@ -4142,7 +4128,7 @@
 	return 0;
 	}
 #endif
-#line 416 "ircd_lexer.l"
+#line 421 "ircd_lexer.l"
 
 
 /* C-comment ignoring routine -kre*/
Index: src/version.c
===================================================================
--- src/version.c	(revision 1)
+++ src/version.c	(revision 114)
@@ -49,24 +49,23 @@
   "IRC --",
   "Based on the original code written by Jarkko Oikarinen",
   "Copyright 1988, 1989, 1990, 1991 University of Oulu, Computing Center",
-  "Copyright (c) 1997-2006 Hybrid Development Team", 
+  "Copyright (c) 1997-2006 Hybrid Development Team",
+  "Copyright (c) 2008 The EsperNet IRC Network",
   "",
   "This program is free software; you can redistribute it and/or",
   "modify it under the terms of the GNU General Public License as",
   "published by the Free Software Foundation; either version 2, or",
   "(at your option) any later version.",
   "",
+  "This release of esphyb is based off of ircd-hybrid-7.2.3. It is",
+  "with great humility and reverence that EsperNet Coding Team",
+  "thanks the Hybrid team for such a wonderful release.",
   "",
   "The hybrid team is a group of ircd coders who were frustrated",
   "with the instability and all-out dirtiness of the EFnet ircd's",
   "available. hybrid is the name for the collective efforts of a group",
   "of people, all of us.",
   "",
-  "Anyone is welcome to contribute to this effort. You are encouraged",
-  "to participate in the Hybrid mailing list. To subscribe to the",
-  "Hybrid List, use this link:",
-  "  https://lists.ircd-hybrid.org/mailman/listinfo/hybrid",
-  "",
   "The core team as, of this major release:",
   "",
   "adx, Piotr Nizynski <adx@irc7.pl>",
@@ -115,6 +114,12 @@
   "previous versions of this ircd and its ancestors, too many to list",
   "here.",
   "",
-  "Send bug fixes/complaints/rotten tomatoes to bugs@ircd-hybrid.org.",
+  "For The EsperNet IRC Network, the following people have contributed",
+  "to this release:",
+  "",
+  "eri, Sean Rees, <eri@esper.net>",
+  "Kage, Kelmar Firesun, <kage@esper.net>",
+  "",
+  "The EsperNet IRC Network: irc.esper.net:5555 (http://www.esper.net)",
   "", 0
 };
Index: src/s_user.c
===================================================================
--- src/s_user.c	(revision 1)
+++ src/s_user.c	(revision 114)
@@ -93,7 +93,7 @@
   /* 0x20 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x2F */
   /* 0x30 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x3F */
   0,                  /* @ */
-  0,                  /* A */
+  UMODE_ADMIN,        /* A */
   0,                  /* B */
   UMODE_CCONN_FULL,   /* C */
   UMODE_DEAF,         /* D */
@@ -110,7 +110,7 @@
   0,                  /* O */
   0,                  /* P */
   0,                  /* Q */
-  0,                  /* R */
+  UMODE_REGONLY,      /* R */
   0,                  /* S */
   0,                  /* T */
   0,                  /* U */
@@ -121,7 +121,7 @@
   0,                  /* Z 0x5A */
   0, 0, 0, 0, 0,      /* 0x5F   */ 
   0,                  /* 0x60   */
-  UMODE_ADMIN,        /* a */
+  UMODE_SVCSADMIN,    /* a */
   UMODE_BOTS,         /* b */
   UMODE_CCONN,        /* c */
   UMODE_DEBUG,        /* d */
@@ -130,7 +130,7 @@
   UMODE_CALLERID,     /* g */
   0,                  /* h */
   UMODE_INVISIBLE,    /* i */
-  0,                  /* j */
+  UMODE_REJ,          /* j */
   UMODE_SKILL,        /* k */
   UMODE_LOCOPS,       /* l */
   0,                  /* m */
@@ -138,7 +138,7 @@
   UMODE_OPER,         /* o */
   0,                  /* p */
   0,                  /* q */
-  UMODE_REJ,          /* r */
+  UMODE_REGNICK,      /* r */
   UMODE_SERVNOTICE,   /* s */
   0,                  /* t */
   UMODE_UNAUTH,       /* u */
@@ -900,10 +900,12 @@
  * parv[0] - sender
  * parv[1] - username to change mode for
  * parv[2] - modes to change
+ *
+ * restricted == TRUE means umodes 'a' and 'r' can be set, but 'o' cannot.
  */
 void
 set_user_mode(struct Client *client_p, struct Client *source_p,
-              int parc, char *parv[])
+              int parc, char *parv[], int restricted)
 {
   unsigned int flag, setflags;
   char **p, *m, buf[IRCD_BUFSIZE];
@@ -970,7 +972,8 @@
         case 'o':
           if (what == MODE_ADD)
           {
-            if (IsServer(client_p) && !IsOper(source_p))
+            // cannot oper if restricted modes are allowed
+            if (IsServer(client_p) && !IsOper(source_p) && !restricted)
             {
               ++Count.oper;
               SetOper(source_p);
@@ -1011,6 +1014,11 @@
         case '\t':
           break;
 
+        case 'r':
+        case 'a':
+          if (!IsServer(client_p) && !restricted)
+            break;
+
         default:
           if ((flag = user_modes[(unsigned char)*m]))
           {
Index: src/s_conf.c
===================================================================
--- src/s_conf.c	(revision 1)
+++ src/s_conf.c	(revision 114)
@@ -73,6 +73,7 @@
 dlink_list nresv_items   = { NULL, NULL, 0 };
 dlink_list class_items   = { NULL, NULL, 0 };
 dlink_list gdeny_items	 = { NULL, NULL, 0 };
+dlink_list webirc_items  = { NULL, NULL, 0 };
 
 dlink_list temporary_klines  = { NULL, NULL, 0 };
 dlink_list temporary_dlines  = { NULL, NULL, 0 };
@@ -231,6 +232,7 @@
   case KLINE_TYPE:
   case CLIENT_TYPE:
   case OPER_TYPE:
+  case WEBIRC_TYPE:
   case SERVER_TYPE:
     conf = MyMalloc(sizeof(struct ConfItem) +
                     sizeof(struct AccessItem));
@@ -265,6 +267,11 @@
       dlinkAdd(conf, &conf->node, &oconf_items);
       break;
 
+    case WEBIRC_TYPE:
+      status = CONF_WEBIRC;
+      dlinkAdd(conf, &conf->node, &webirc_items);
+      break;
+
     case SERVER_TYPE:
       status = CONF_SERVER;
       dlinkAdd(conf, &conf->node, &server_items);
@@ -437,6 +444,17 @@
     }
     break;
 
+  case WEBIRC_TYPE:
+    aconf = map_to_conf(conf);
+
+    MyFree(aconf->host);
+    MyFree(aconf->passwd);
+    MyFree(conf);
+
+    dlinkDelete(&conf->node, &webirc_items);
+
+    break;
+
   case HUB_TYPE:
     match_item = map_to_conf(conf);
     MyFree(match_item->user);
@@ -568,7 +586,7 @@
 }
 
 static const unsigned int shared_bit_table[] =
-  { 'K', 'k', 'U', 'X', 'x', 'Y', 'Q', 'q', 'R', 'L', 0};
+  { 'K', 'k', 'U', 'X', 'x', 'Y', 'Q', 'q', 'R', 'L', 'M', 0};
 
 /* report_confitem_types()
  *
@@ -797,6 +815,16 @@
     }
     break;
 
+  case WEBIRC_TYPE:
+    DLINK_FOREACH(ptr, webirc_items.head)
+    {
+      conf = ptr->data;
+      aconf = map_to_conf(conf);
+      sendto_one(source_p, form_str(RPL_STATSWLINE), me.name,
+          source_p->name, aconf->host);
+    }
+    break;
+
   case GLINE_TYPE:
   case KLINE_TYPE:
   case DLINE_TYPE:
@@ -1565,6 +1593,9 @@
   case CLUSTER_TYPE:
     return(&cluster_items);
     break;
+  case WEBIRC_TYPE:
+    return(&webirc_items);
+    break;
   case CONF_TYPE:
   case GLINE_TYPE:
   case KLINE_TYPE:
@@ -1718,6 +1749,17 @@
     }
     break;
 
+  case WEBIRC_TYPE:
+    DLINK_FOREACH(ptr, list_p->head)
+    {
+      conf = ptr->data;
+      aconf = (struct AccessItem *)map_to_conf(conf);
+
+     if (match(aconf->host, host))
+       return (conf);
+    }
+    break;
+
   case SERVER_TYPE:
     DLINK_FOREACH(ptr, list_p->head)
     {
@@ -1825,6 +1867,7 @@
   ServerInfo.description = NULL;
   DupString(ServerInfo.network_name, NETWORK_NAME_DEFAULT);
   DupString(ServerInfo.network_desc, NETWORK_DESC_DEFAULT);
+  DupString(ServerInfo.help_channel, HELP_CHANNEL_DEFAULT);
 
   memset(&ServerInfo.ip, 0, sizeof(ServerInfo.ip));
   ServerInfo.specific_ipv4_vhost = 0;
@@ -1986,6 +2029,9 @@
   if (ServerInfo.network_desc == NULL)
     DupString(ServerInfo.network_desc,NETWORK_DESC_DEFAULT);
 
+  if (ServerInfo.help_channel == NULL)
+    DupString(ServerInfo.help_channel,HELP_CHANNEL_DEFAULT);
+
   if ((ConfigFileEntry.client_flood < CLIENT_FLOOD_MIN) ||
       (ConfigFileEntry.client_flood > CLIENT_FLOOD_MAX))
     ConfigFileEntry.client_flood = CLIENT_FLOOD_MAX;
@@ -2347,6 +2393,7 @@
   { OPER_FLAG_OPERWALL,    0,                       'L' },
   { OPER_FLAG_N,           0,                       'N' },
   { OPER_FLAG_GLOBAL_KILL, 0,                       'O' },
+  { OPER_FLAG_SNOOP,       0,                       'P' },
   { OPER_FLAG_REMOTE,      0,                       'R' },
   { OPER_FLAG_OPER_SPY,    0,                       'S' },
   { OPER_FLAG_UNKLINE,     0,                       'U' },
@@ -2477,13 +2524,14 @@
 	     ConfigChannel.max_chans_per_user);
   add_isupport("CHANLIMIT", chanlimit, -1);
   ircsprintf(chanmodes, "%s%s%s", ConfigChannel.use_except ? "e" : "",
-	     ConfigChannel.use_invex ? "I" : "", "b,k,l,imnpst");
+	     ConfigChannel.use_invex ? "I" : "", "b,k,l,cimMnOpRst");
   add_isupport("CHANNELLEN", NULL, LOCAL_CHANNELLEN);
   if (ConfigChannel.use_except)
     add_isupport("EXCEPTS", "e", -1);
   if (ConfigChannel.use_invex)
     add_isupport("INVEX", "I", -1);
   add_isupport("CHANMODES", chanmodes, -1);
+  add_isupport("HELPCHANNEL", ServerInfo.help_channel, -1);
 
   /*
    * message_locale may have changed.  rebuild isupport since it relies
@@ -2546,7 +2594,7 @@
   dlink_list *free_items [] = {
     &server_items,   &oconf_items,    &hub_items, &leaf_items,
      &uconf_items,   &xconf_items, &rxconf_items, &rkconf_items,
-     &nresv_items, &cluster_items,  &gdeny_items, NULL
+     &nresv_items, &cluster_items,  &gdeny_items, &webirc_items, NULL
   };
 
   dlink_list ** iterator = free_items; /* C is dumb */
@@ -2658,6 +2706,14 @@
   ServerInfo.network_name = NULL;
   MyFree(ServerInfo.network_desc);
   ServerInfo.network_desc = NULL;
+  MyFree(ServerInfo.help_channel);
+  ServerInfo.help_channel = NULL;
+
+  if (ServerInfo.services_name != NULL) {
+    MyFree(ServerInfo.services_name);
+    ServerInfo.services_name = NULL;
+  }
+
   MyFree(ConfigFileEntry.egdpool_path);
   ConfigFileEntry.egdpool_path = NULL;
 #ifdef HAVE_LIBCRYPTO
Index: src/channel_mode.c
===================================================================
--- src/channel_mode.c	(revision 1)
+++ src/channel_mode.c	(revision 114)
@@ -333,6 +333,10 @@
   { MODE_PRIVATE,    'p' },
   { MODE_SECRET,     's' },
   { MODE_TOPICLIMIT, 't' },
+  { MODE_REGONLY,    'R' },
+  { MODE_REGMOD,     'M' },
+  { MODE_COLORLESS,  'c' },
+  { MODE_OPERONLY,   'O' },
   { 0, '\0' }
 };
 
@@ -1319,12 +1323,12 @@
   {chm_nosuch, NULL},                             /* J */
   {chm_nosuch, NULL},                             /* K */
   {chm_nosuch, NULL},                             /* L */
-  {chm_nosuch, NULL},                             /* M */
+  {chm_simple, (void *) MODE_REGMOD},             /* M */
   {chm_nosuch, NULL},                             /* N */
-  {chm_nosuch, NULL},                             /* O */
+  {chm_simple, (void *) MODE_OPERONLY},           /* O */
   {chm_nosuch, NULL},                             /* P */
   {chm_nosuch, NULL},                             /* Q */
-  {chm_nosuch, NULL},                             /* R */
+  {chm_simple, (void *) MODE_REGONLY},            /* R */
   {chm_nosuch, NULL},                             /* S */
   {chm_nosuch, NULL},                             /* T */
   {chm_nosuch, NULL},                             /* U */
@@ -1341,7 +1345,7 @@
   {chm_nosuch, NULL},
   {chm_nosuch, NULL},				  /* a */
   {chm_ban, NULL},                                /* b */
-  {chm_nosuch, NULL},                             /* c */
+  {chm_simple, (void *) MODE_COLORLESS},          /* c */
   {chm_nosuch, NULL},                             /* d */
   {chm_except, NULL},                             /* e */
   {chm_nosuch, NULL},                             /* f */
Index: src/client.c
===================================================================
--- src/client.c	(revision 1)
+++ src/client.c	(revision 114)
@@ -1232,6 +1232,12 @@
 {
   dlink_node *ptr;
 
+  /* Services always gets a pass */
+  if (IsService(source))
+  {
+    return (1);
+  }
+
   DLINK_FOREACH(ptr, target->allow_list.head)
   {
     struct Client *target_p = ptr->data;
Index: src/csvlib.c
===================================================================
--- src/csvlib.c	(revision 1)
+++ src/csvlib.c	(revision 114)
@@ -187,6 +187,7 @@
     case ULINE_TYPE:
     case EXEMPTDLINE_TYPE:
     case CLASS_TYPE:
+    case WEBIRC_TYPE:
       break;
     }
   }
Index: src/ircd_parser.y
===================================================================
--- src/ircd_parser.y	(revision 1)
+++ src/ircd_parser.y	(revision 114)
@@ -207,6 +207,7 @@
 %token  IRCD_AUTH
 %token  NEED_IDENT
 %token  HAVENT_READ_CONF
+%token  HELP_CHANNEL
 %token  HIDDEN
 %token  HIDDEN_ADMIN
 %token	HIDDEN_NAME
@@ -307,10 +308,12 @@
 %token  SERVERHIDE
 %token  SERVERINFO
 %token  SERVLINK_PATH
+%token  SERVICES_NAME
 %token  IRCD_SID
 %token	TKLINE_EXPIRE_NOTICES
 %token  T_SHARED
 %token  T_CLUSTER
+%token  T_SNOOP
 %token  TYPE
 %token  SHORT_MOTD
 %token  SILENT
@@ -372,6 +375,7 @@
 %token  TRESV
 %token  UNKLINE
 %token  USER
+%token  T_USERMODE
 %token  USE_EGD
 %token  USE_EXCEPT
 %token  USE_INVEX
@@ -383,6 +387,7 @@
 %token  XLINE
 %token  WARN
 %token  WARN_NO_NLINE
+%token  WEBIRC
 
 %type <string> QSTRING
 %type <number> NUMBER
@@ -416,6 +421,7 @@
 		| gline_entry
                 | gecos_entry
                 | modules_entry
+                | webirc_entry
                 | error ';'
                 | error '}'
         ;
@@ -501,6 +507,7 @@
 serverinfo_item:        serverinfo_name | serverinfo_vhost |
                         serverinfo_hub | serverinfo_description |
                         serverinfo_network_name | serverinfo_network_desc |
+                        serverinfo_services_name | serverinfo_help_channel |
                         serverinfo_max_clients | 
                         serverinfo_rsa_private_key_file | serverinfo_vhost6 |
                         serverinfo_sid | serverinfo_ssl_certificate_file |
@@ -661,6 +668,24 @@
   }
 };
 
+serverinfo_services_name: SERVICES_NAME '=' QSTRING ';'
+{
+  if (ypass == 2)
+  {
+    MyFree(ServerInfo.services_name);
+    DupString(ServerInfo.services_name, yylval.string);
+  }
+};
+
+serverinfo_help_channel: HELP_CHANNEL '=' QSTRING ';'
+{
+  if (ypass == 2)
+  {
+    MyFree(ServerInfo.help_channel);
+    DupString(ServerInfo.help_channel, yylval.string);
+  }
+};
+
 serverinfo_vhost: VHOST '=' QSTRING ';'
 {
   if (ypass == 2 && *yylval.string != '*')
@@ -1047,7 +1072,7 @@
 		oper_class | oper_global_kill | oper_remote |
                 oper_kline | oper_xline | oper_unkline |
 		oper_gline | oper_nick_changes | oper_remoteban |
-                oper_die | oper_rehash | oper_admin | oper_operwall |
+                oper_die | oper_rehash | oper_admin | oper_operwall | oper_snoop |
 		oper_encrypted | oper_rsa_public_key_file |
                 oper_flags | error ';' ;
 
@@ -1422,6 +1447,17 @@
   }
 };
 
+oper_snoop: T_SNOOP '=' TBOOL ';'
+{
+  if (ypass == 2)
+  {
+    if (yylval.number)
+      yy_aconf->port |= OPER_FLAG_SNOOP;
+    else
+      yy_aconf->port &= ~OPER_FLAG_SNOOP;
+  }
+};
+
 oper_flags: IRCD_FLAGS
 {
 } '='  oper_flags_items ';';
@@ -1542,9 +1578,58 @@
     if (not_atom) ClearConfEncrypted(yy_aconf);
     else SetConfEncrypted(yy_aconf);
   }
+} | T_SNOOP
+{
+  if (ypass == 2)
+  {
+    if (not_atom) yy_aconf->port &= ~OPER_FLAG_SNOOP;
+    else yy_aconf->port |= OPER_FLAG_SNOOP;
+  }
 };
 
+/***************************************************************************
+ *  section webirc 
+ ***************************************************************************/
+webirc_entry: WEBIRC
+{
+  if (ypass == 2)
+  {
+    yy_conf = make_conf_item(WEBIRC_TYPE);
+    yy_aconf = map_to_conf(yy_conf);
+  }
+} '{' webirc_items '}' ';'
+{
+  if (ypass == 2)
+  {
+    yy_conf = NULL;
+    yy_aconf = NULL;
+  }
+};
 
+webirc_items:    webirc_items webirc_item | webirc_item;
+webirc_item: webirc_host | webirc_passwd | error ';' ;
+
+webirc_host: HOST '=' QSTRING ';'
+{
+  if (ypass == 2)
+  {
+    MyFree(yy_aconf->host);
+    DupString(yy_aconf->host, yylval.string);
+  }
+};
+
+webirc_passwd: PASSWORD '=' QSTRING ';'
+{
+  if (ypass == 2)
+  {
+    if (yy_aconf->passwd != NULL)
+      memset(yy_aconf->passwd, 0, strlen(yy_aconf->passwd));
+
+    MyFree(yy_aconf->passwd);
+    DupString(yy_aconf->passwd, yylval.string);
+  }
+};
+
 /***************************************************************************
  *  section class
  ***************************************************************************/
@@ -2314,6 +2399,10 @@
 {
   if (ypass == 2)
     yy_match_item->action |= SHARED_LOCOPS;
+} | T_USERMODE
+{
+  if (ypass == 2)
+    yy_match_item->action |= SHARED_USERMODE;
 } | T_ALL
 {
   if (ypass == 2)
Index: src/ircd_lexer.l
===================================================================
--- src/ircd_lexer.l	(revision 1)
+++ src/ircd_lexer.l	(revision 114)
@@ -200,6 +200,7 @@
 have_ident	{ return NEED_IDENT; }
 need_ident	{ return NEED_IDENT; }
 havent_read_conf { return HAVENT_READ_CONF; }
+help_channel { return HELP_CHANNEL; }
 hidden		{ return HIDDEN; }
 hidden_admin	{ return HIDDEN_ADMIN; }
 hidden_name	{ return HIDDEN_NAME; }
@@ -291,10 +292,12 @@
 serverhide	{ return SERVERHIDE; }
 serverinfo	{ return SERVERINFO; }
 servlink_path   { return SERVLINK_PATH; }
+services_name { return SERVICES_NAME; }
 shared          { return T_SHARED; }
 short_motd      { return SHORT_MOTD; }
 sid		{ return IRCD_SID; }
 silent          { return SILENT; }
+snoop   { return T_SNOOP; }
 spoof		{ return SPOOF; }
 spoof_notice	{ return SPOOF_NOTICE; }
 tkline_expire_notices { return TKLINE_EXPIRE_NOTICES; }
@@ -310,12 +313,14 @@
 use_whois_actually { return USE_WHOIS_ACTUALLY; }
 throttle_time { return THROTTLE_TIME; }
 user		{ return USER; } 
+usermode    { return T_USERMODE; }
 tkline		{ return TKLINE; } 
 txline		{ return TXLINE; } 
 tresv		{ return TRESV; } 
 vhost	{ return VHOST; }
 vhost6	{ return VHOST6; }
 warn		{ return WARN; }
+webirc      { return WEBIRC; }
 xline		{ return XLINE; }
 yes		{ yylval.number = YES; return TBOOL; }
 
Index: src/messages.tab
===================================================================
--- src/messages.tab	(revision 1)
+++ src/messages.tab	(revision 114)
@@ -251,7 +251,7 @@
 /* 224 */  {NULL, NULL, NULL},
 /* 225 */  {"RPL_STATSDLINE", ":%s 225 %s %c %s :%s | %s", NULL},
 /* 226 */  {"RPL_STATSALINE", ":%s 226 %s %s", NULL},
-/* 227 */  {NULL, NULL, NULL},
+/* 227 */  {"RPL_STATSWLINE", ":%s 227 %s %s", NULL},
 /* 228 */  {NULL, NULL, NULL},
 /* 229 */  {NULL, NULL, NULL},
 /* 230 */  {NULL, NULL, NULL},
@@ -331,8 +331,8 @@
 /* 304 */  {"RPL_TEXT", NULL, NULL},
 /* 305 */  {"RPL_UNAWAY", ":%s 305 %s :You are no longer marked as being away", NULL},
 /* 306 */  {"RPL_NOWAWAY", ":%s 306 %s :You have been marked as being away", NULL},
-/* 307 */  {NULL, NULL, NULL},
-/* 308 */  {"RPL_WHOISADMIN", ":%s 313 %s %s :is a Server Administrator", NULL},
+/* 307 */  {"RPL_WHOISREGNICK", ":%s 307 %s %s :has identified for this nick", NULL},
+/* 308 */  {"RPL_WHOISREGONLY", ":%s 308 %s %s :accepts messages from identified users only", NULL},
 /* 309 */  {NULL, NULL, NULL},
 /* 310 */  {NULL, NULL, NULL},
 /* 311 */  {"RPL_WHOISUSER", ":%s 311 %s %s %s %s * :%s", NULL},
@@ -349,8 +349,8 @@
 /* 322 */  {"RPL_LIST", ":%s 322 %s %s %d :%s", NULL},
 /* 323 */  {"RPL_LISTEND", ":%s 323 %s :End of /LIST", NULL},
 /* 324 */  {"RPL_CHANNELMODEIS", ":%s 324 %s %s %s %s", NULL},
-/* 325 */  {NULL, NULL, NULL},
-/* 326 */  {NULL, NULL, NULL},
+/* 325 */  {"RPL_WHOISADMIN", ":%s 313 %s %s :is an IRC Operator - Server Administrator", NULL},
+/* 326 */  {"RPL_WHOISSVCSADMIN", ":%s 313 %s %s :is an IRC Operator - Services Administrator", NULL},
 /* 327 */  {NULL, NULL, NULL},
 /* 328 */  {NULL, NULL, NULL},
 /* 329 */  {"RPL_CREATIONTIME", ":%s 329 %s %s %lu",  NULL},
@@ -432,7 +432,7 @@
 /* 405 */  {"ERR_TOOMANYCHANNELS", ":%s 405 %s %s :You have joined too many channels", NULL},
 /* 406 */  {"ERR_WASNOSUCHNICK", ":%s 406 %s %s :There was no such nickname", NULL},
 /* 407 */  {"ERR_TOOMANYTARGETS", ":%s 407 %s %s :Too many recipients. Only %d processed", NULL},
-/* 408 */  {NULL, NULL, NULL},
+/* 408 */  {"ERR_NOCOLORSONCHAN", ":%s 408 %s %s :Cannot send to channel; colors are not permitted on %s", NULL},
 /* 409 */  {"ERR_NOORIGIN", ":%s 409 %s :No origin specified", NULL},
 /* 410 */  {"ERR_INVALIDCAPCMD", ":%s 410 %s %s :Invalid CAP subcommand", NULL},
 /* 411 */  {"ERR_NORECIPIENT", ":%s 411 %s :No recipient given (%s)", NULL},
@@ -500,8 +500,8 @@
 /* 473 */  {"ERR_INVITEONLYCHAN", ":%s 473 %s %s :Cannot join channel (+i)", NULL},
 /* 474 */  {"ERR_BANNEDFROMCHAN", ":%s 474 %s %s :Cannot join channel (+b)", NULL},
 /* 475 */  {"ERR_BADCHANNELKEY", ":%s 475 %s %s :Cannot join channel (+k)", NULL},
-/* 476 */  {NULL, NULL, NULL},
-/* 477 */  {NULL, NULL, NULL},
+/* 476 */  {"ERR_NOJOINCAPTURED", ":%s 474 %s %s :Cannot join channel. Your connection has been muted.", NULL},
+/* 477 */  {"ERR_NEEDREGGEDNICK", ":%s 477 %s %s :Cannot join channel (+R). Please identify yourself to services.", NULL},
 /* 478 */  {"ERR_BANLISTFULL", ":%s 478 %s %s %s :Channel ban list is full", NULL},
 /* 479 */  {"ERR_BADCHANNAME", ":%s 479 %s %s :Illegal channel name", NULL},
 /* 480 */  {NULL, NULL, NULL},
@@ -529,7 +529,7 @@
 /* 502 */  {"ERR_USERSDONTMATCH", ":%s 502 %s :Can't change mode for other users", NULL},
 /* 503 */  {"ERR_GHOSTEDCLIENT", ":%s 503 %s :Message could not be delivered to %s", NULL},
 /* 504 */  {"ERR_USERNOTONSERV", ":%s 504 %s %s :User is not on this server", NULL},
-/* 505 */  {NULL, NULL, NULL},
+/* 505 */  {"ERR_SERVICESONLY", ":%s 481 %s :Permission Denied", NULL},
 /* 506 */  {NULL, NULL, NULL},
 /* 507 */  {NULL, NULL, NULL},
 /* 508 */  {NULL, NULL, NULL},
@@ -751,14 +751,14 @@
 /* 724 */  {"RPL_TESTMASK", ":%s 724 %s %s!%s@%s %u %u :Local/remote clients match.", NULL },
 /* 725 */  {"RPL_TESTLINE", ":%s 725 %s %c %ld %s :%s | %s", NULL },
 /* 726 */  {"RPL_NOTESTLINE", ":%s 726 %s %s :No matches", NULL },
-/* 727 */  {"RPL_ISCAPTURED", ":%s 727 %s :%s Is Captured.", NULL},
-/* 728 */  {"RPL_ISUNCAPTURED", ":%s 728 %s :%s Is UnCaptured.", NULL},
-/* 729 */  {NULL, NULL, NULL},
-/* 730 */  {NULL, NULL, NULL},
-/* 731 */  {NULL, NULL, NULL},
-/* 732 */  {NULL, NULL, NULL},
-/* 733 */  {NULL, NULL, NULL},
-/* 734 */  {NULL, NULL, NULL},
+/* 727 */  {"RPL_ISCAPTURED", ":%s 727 %s :%s is captured.", NULL},
+/* 728 */  {"RPL_ISUNCAPTURED", ":%s 728 %s :%s is uncaptured.", NULL},
+/* 729 */  {"RPL_YOURECAPTURED", ":%s 729 %s :Your connection has been muted for %s. You may only speak with network operations staff. Please /join %s for more information.", NULL},
+/* 730 */  {"RPL_YOUREUNCAPTURED", ":%s 730 %s :Your connection has been unmuted. You may use IRC normally.", NULL},
+/* 731 */  {"ERR_CANNOTSENDCAPTURED", ":%s 731 %s %s :Cannot send to channel. Your connection has been muted. Please /join %s for more information.", NULL},
+/* 732 */  {"ERR_YOURECAPTURED", ":%s 732 %s :Cannot send message. Your connection has been muted. Please /join %s for more information.", NULL},
+/* 733 */  {"RPL_LOCALCAPTURECOUNT", ":%s 733 %s :Capture complete for %s!%s@%s. %u local match(es).", NULL},
+/* 734 */  {"RPL_LOCALUNCAPTURECOUNT", ":%s 734 %s :Uncapture complete for %s!%s@%s. %u local match(es).", NULL},
 /* 735 */  {NULL, NULL, NULL},
 /* 736 */  {NULL, NULL, NULL},
 /* 737 */  {NULL, NULL, NULL},
Index: help/opers/webirc
===================================================================
--- help/opers/webirc	(revision 0)
+++ help/opers/webirc	(revision 114)
@@ -0,0 +1,18 @@
+WEBIRC password [unused] hostname ip_address
+
+password   - shared password between IRC server and 
+             WEBIRC gateway
+hostname   - actual hostname of the connecting user
+             as seen by the WEBIRC gateway
+ip_address - actual IP address of the connecting user
+             as seen by the WEBIRC gateway
+
+WEBIRC is used to rewrite the hostname and ip address
+of a connecting user if they are connecting through an
+authorized WEBIRC (or CGI:IRC) gateway. This has the
+effect of the connecting user displaying their actual
+hostname and IP address.
+
+The password is the password agreed upon by the WEBIRC
+server and the IRC server as specified in the webirc 
+configuration block.
Index: help/opers/cmode
===================================================================
--- help/opers/cmode	(revision 1)
+++ help/opers/cmode	(revision 114)
@@ -31,7 +31,19 @@
               channel who hasn't received an /invite or whose host isn't in
               the +I list.
 
+     +c     - 'Colorless'.  This prevents users from sending messages with
+              colors or control characters to the channel.
 
+     +R     - 'Identified Only'.  This prevents users who have not identified
+              to NickServ from joining the channel.
+
+     +M     - 'Identify Moderated'.  This will prevent any user who isn't
+              identified to NickServ from sending messages to the channel.
+
+     +O     - 'Opers Only'.  This will prevent any user who isn't also an
+              IRC Operator from joining or sending messages to the channel.
+              Use with extreme care.
+
 WITH PARAMETERS:
 ----------------
 
Index: help/opers/umode
===================================================================
--- help/opers/umode	(revision 1)
+++ help/opers/umode	(revision 114)
@@ -14,7 +14,7 @@
        * +s     - Can see generic server messages and oper kills.
        * +c     - Can see client connections and exits.
        * +u     - Can see unauthorized client connections.
-       * +r     - Can see 'rejected' client notices.
+       * +j     - Can see 'rejected' client notices.
        * +k     - Can see server kill messages.
        * +f     - Can see 'I-line is full' notices.
        * +y     - Can see stats/links/admin requests to name a few.
@@ -22,8 +22,12 @@
        * +n     - Can see client nick changes.
        * +x     - Can see new server introduction and split messages.
        * +b     - Can see possible bot / join flood warnings.
-       * +a     - Is marked as a server admin in stats p/o.
+       * +A     - Is marked as a server admin in stats p/o.
+       * +a     - Is marked as a services administrator.
          +D     - "deaf": don't receive channel messages
          +G     - "soft caller id": block private messages from people not on
                   any common channels with you (unless they are /accept'ed)
          +g     - "caller id" mode: only allow /accept clients to message you
+         +r     - Is marked as being identified to NickServ/services.
+         +R     - "identified only": block private messages from people not
+                  identified to NickServ.
Index: help/opers/capture
===================================================================
--- help/opers/capture	(revision 0)
+++ help/opers/capture	(revision 114)
@@ -0,0 +1,11 @@
+CAPTURE nickname :reason
+CAPTURE hostmask :reason
+
+Mutes a nickname (or a group of nicknames matching hostmask).
+Users that are captured may only speak to opers and in the 
+network help channel. 
+
+Captured users may only use: JOIN (help channel only),
+QUIT, PONG, and PRIVMSG/NOTICE (to opers and to the help channel only).
+
+Users may be unmuted by using UNCAPTURE.
Index: help/opers/stats
===================================================================
--- help/opers/stats	(revision 1)
+++ help/opers/stats	(revision 114)
@@ -35,6 +35,7 @@
 * U - Shows shared blocks (Old U: lines)
   u - Shows server uptime
 * v - Shows connected servers and their idle times
+* w - Shows WEBIRC hostnames
 * x - Shows gecos bans (Old X: lines)
 * y - Shows Y lines
 * z - Shows memory stats
Index: help/opers/uncapture
===================================================================
--- help/opers/uncapture	(revision 0)
+++ help/opers/uncapture	(revision 114)
@@ -0,0 +1,5 @@
+UNCAPTURE nickname
+UNCAPTURE hostmask
+
+Unmutes a user. This restores normal IRC capability to that
+user.
Index: contrib/Makefile.in
===================================================================
--- contrib/Makefile.in	(revision 1)
+++ contrib/Makefile.in	(revision 114)
@@ -36,12 +36,12 @@
   m_change.c    \
   m_clearchan.c \
   m_classlist.c \
-  m_ctrace.c \
+  m_ctrace.c 	\
   m_flags.c     \
   m_force.c     \
   m_jupe.c      \
   m_killhost.c  \
-  m_ltrace.c \
+  m_ltrace.c 	\
   m_mkpasswd.c  \
   m_ojoin.c     \
   m_operspy.c   \
Index: configure.ac
===================================================================
--- configure.ac	(revision 1)
+++ configure.ac	(revision 114)
@@ -909,7 +909,7 @@
 	NICKLEN="$withval", NICKLEN="9")
 
 AC_ARG_WITH(topiclen,           
-AC_HELP_STRING([--with-topiclen=NUMBER],[Set the max topic length to NUMBER (default 160, max 390)]),
+AC_HELP_STRING([--with-topiclen=NUMBER],[Set the max topic length to NUMBER (default 390, max 390)]),
 [
  if test $withval -ge 390; then
 	TOPICLEN=390
@@ -917,7 +917,7 @@
  else
  	TOPICLEN=$withval
  fi
-], [TOPICLEN=160])
+], [TOPICLEN=390])
 
 AC_DEFINE_UNQUOTED(TOPICLEN, ${TOPICLEN}, [Maximum topic length (<=390)])
 AC_DEFINE_UNQUOTED(NICKLEN, (${NICKLEN}+1), [Nickname length])
Index: doc/modes.txt
===================================================================
--- doc/modes.txt	(revision 1)
+++ doc/modes.txt	(revision 114)
@@ -8,12 +8,15 @@
 These describe the user modes, channel modes, and channel modes that require
 arguments that are available to the user. It is hardcoded into src/messages.tab.
 
+This has been updated for esphyb-1.0.0.
+
 Here is a guide to the preceding modes:
 
 User Modes:
 
-+a - admin        - Admin status.  Able to load and unload modules,
++A - admin        - Admin status.  Able to load and unload modules,
                     and see IP's in STATS c
++a - services admin - Special WHOIS response for "Services Administrator"
 +b - bots         - See bot and drone flooding notices
 +c - cconn        - Client connection/quit notices
 +D - deaf         - Don't receive channel messages
@@ -22,11 +25,13 @@
 +G - softcallerid - Server Side Ignore for users not on your channels
 +g - callerid     - Server Side Ignore (see modeg.txt)
 +i - invisible    - Not shown in NAMES or WHO unless you share a channel
++j - rej          - See rejected client notices
 +k - skill        - See server generated KILL messages
 +l - locops       - See LOCOPS messages
 +n - nchange      - See client nick changes
 +o - oper         - Operator status
-+r - rej          - See rejected client notices
++r - regnick      - Identified to services (only services may set this)
++R - regonly      - Only users identified to services may message you
 +s - servnotice   - See general server notices
 +u - unauth       - See unauthorized client notices
 +w - wallop       - See server generated WALLOPS
@@ -37,6 +42,7 @@
 Channel Modes:
 
 +b - ban          - Channel ban on nick!user@host
++c - colorless    - No colors or control characters
 +e - exempt       - Exemption from bans
 +I - invex        - Invite exceptions, nick!user@host does not need to be
                     explicitly INVITE'd into the channel before being able
@@ -45,10 +51,13 @@
 +k - key          - Key/password for the channel
 +l - limit        - Limit the number of users in a channel
 +m - moderated    - Users without +v/h/o cannot send text to the channel
++M - regmod       - Only identified users may speak
 +n - noexternal   - Users must be in the channel to send text to it
 +o - chanop       - Full operator status
++O - operonly     - Only Operators may join/speak
 +p - private      - Private is obsolete, this now restricts KNOCK, and can be
                     set at the same time as +s.
++R - regonly      - Only identified users may join/speak
 +s - secret       - The channel does not show up on NAMES or LIST or in the 
                     WHOIS channel list unless you are a member of the channel
 +t - topic        - Only chanops can change the topic
Index: modules/m_services.c
===================================================================
--- modules/m_services.c	(revision 0)
+++ modules/m_services.c	(revision 114)
@@ -0,0 +1,436 @@
+/*
+ *  ircd-hybrid: an advanced Internet Relay Chat Daemon(ircd).
+ *  m_services.c: SVS commands and Services support
+ *
+ *  Copyright (C) 2005 by the past and present ircd coders, and others.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+ *  USA
+ *
+ *  $Id: m_services.c 512 2006-03-04 16:21:54Z michael $
+ */
+/*
+ *
+ * With code from 'bane' the URL following is valid as of this date.
+ * http://hybserv2.net/file/trunk/contrib/hybrid_services.c
+ *
+ *
+ *   Copyright (C) 2002, 2003, 2004, 2005 by Dragan 'bane' Dosen and the
+ *   Hybrid Development Team.
+ *
+ *   Based on m_services.c, originally from bahamut ircd.
+ *
+ *   Contact info:
+ *
+ *     E-mail : bane@idolnet.org
+ *     IRC    : (*) bane, idolNET, irc.idolnet.org, #twilight_zone
+ */
+
+#include "stdinc.h"
+#include "handlers.h"
+#include "client.h"
+#include "hash.h"
+#include "fdlist.h"
+#include "irc_string.h"
+#include "ircd.h"
+#include "numeric.h"
+#include "s_conf.h"
+#include "s_stats.h"
+#include "s_user.h"
+#include "whowas.h"
+#include "s_serv.h"
+#include "send.h"
+#include "list.h"
+#include "channel.h"
+#include "s_log.h"
+#include "resv.h"
+#include "msg.h"
+#include "parse.h"
+#include "modules.h"
+#include "common.h"
+#include "packet.h"
+#include "sprintf_irc.h"
+
+/* Custom Macros */
+#define services_function(a,b,c) static void a(struct Client *client_p,\
+        struct Client *source_p, int parc,\
+        char *parv[]) \
+{ deliver_services_msg(b, c, client_p, source_p, parc, parv); }
+
+static void ms_svsnick(struct Client *, struct Client *, int, char *[]);
+static void ms_svsmode(struct Client *, struct Client *, int, char *[]);
+
+static void m_chanserv(struct Client *, struct Client *, int, char *[]);
+static void m_helpserv(struct Client *, struct Client *, int, char *[]);
+static void m_identify(struct Client *, struct Client *, int, char *[]);
+static void m_memoserv(struct Client *, struct Client *, int, char *[]);
+static void m_nickserv(struct Client *, struct Client *, int, char *[]);
+static void m_operserv(struct Client *, struct Client *, int, char *[]);
+static void m_statserv(struct Client *, struct Client *, int, char *[]);
+
+static void get_string(int, char *[], char *);
+static int clean_nick_name(char *, int);
+static void deliver_services_msg(const char *, const char *, struct Client *,
+                                 struct Client *, int, char *[]);
+
+/* SVS commands */
+struct Message svsnick_msgtab = {
+  "SVSNICK", 0, 0, 3, 0, MFLG_SLOW, 0,
+  {m_unregistered, m_ignore, ms_svsnick, ms_svsnick, m_ignore, m_ignore}
+};
+
+struct Message svsmode_msgtab = {
+  "SVSMODE", 0, 0, 3, 0, MFLG_SLOW, 0,
+  {m_unregistered, m_ignore, ms_svsmode, ms_svsmode, m_ignore, m_ignore}
+};
+
+/* Services */
+struct Message chanserv_msgtab = {
+  "CHANSERV", 0, 0, 1, 0, MFLG_SLOW, 0,
+  {m_unregistered, m_chanserv, m_ignore, m_ignore, m_chanserv, m_ignore}
+};
+
+struct Message helpserv_msgtab = {
+  "HELPSERV", 0, 0, 1, 0, MFLG_SLOW, 0,
+  {m_unregistered, m_helpserv, m_ignore, m_ignore, m_helpserv, m_ignore}
+};
+
+
+struct Message memoserv_msgtab = {
+  "MEMOSERV", 0, 0, 1, 0, MFLG_SLOW, 0,
+  {m_unregistered, m_memoserv, m_ignore, m_ignore, m_memoserv, m_ignore}
+};
+
+struct Message nickserv_msgtab = {
+  "NICKSERV", 0, 0, 1, 0, MFLG_SLOW, 0,
+  {m_unregistered, m_nickserv, m_ignore, m_ignore, m_nickserv, m_ignore}
+};
+
+struct Message operserv_msgtab = {
+  "OPERSERV", 0, 0, 1, 0, MFLG_SLOW, 0,
+  {m_unregistered, m_operserv, m_ignore, m_ignore, m_operserv, m_ignore}
+};
+
+struct Message statserv_msgtab = {
+  "STATSERV", 0, 0, 1, 0, MFLG_SLOW, 0,
+  {m_unregistered, m_statserv, m_ignore, m_ignore, m_statserv, m_ignore}
+};
+
+/* Short-hand aliases for NickServ, ChanServ, MemoServ and OperServ */
+struct Message cs_msgtab = {
+  "CS", 0, 0, 1, 0, MFLG_SLOW, 0,
+  {m_unregistered, m_chanserv, m_ignore, m_ignore, m_chanserv, m_ignore}
+};
+
+struct Message identify_msgtab = {
+  "IDENTIFY", 0, 0, 0, 2, MFLG_SLOW, 0,
+  {m_unregistered, m_identify, m_ignore, m_ignore, m_identify, m_ignore}
+};
+
+struct Message ms_msgtab = {
+  "MS", 0, 0, 1, 0, MFLG_SLOW, 0,
+  {m_unregistered, m_memoserv, m_ignore, m_ignore, m_memoserv, m_ignore}
+};
+
+struct Message ns_msgtab = {
+  "NS", 0, 0, 1, 0, MFLG_SLOW, 0,
+  {m_unregistered, m_nickserv, m_ignore, m_ignore, m_nickserv, m_ignore}
+};
+
+struct Message os_msgtab = {
+  "OS", 0, 0, 1, 0, MFLG_SLOW, 0,
+  {m_unregistered, m_operserv, m_ignore, m_ignore, m_operserv, m_ignore}
+};
+
+#ifndef STATIC_MODULES
+void
+_modinit(void)
+{
+  mod_add_cmd(&svsnick_msgtab);
+  mod_add_cmd(&svsmode_msgtab);
+  mod_add_cmd(&chanserv_msgtab);
+  mod_add_cmd(&helpserv_msgtab);
+  mod_add_cmd(&identify_msgtab);
+  mod_add_cmd(&memoserv_msgtab);
+  mod_add_cmd(&nickserv_msgtab);
+  mod_add_cmd(&operserv_msgtab);
+  mod_add_cmd(&statserv_msgtab);
+  mod_add_cmd(&ns_msgtab);
+  mod_add_cmd(&cs_msgtab);
+  mod_add_cmd(&ms_msgtab);
+  mod_add_cmd(&os_msgtab);
+}
+
+void
+_moddeinit(void)
+{
+  mod_del_cmd(&svsnick_msgtab);
+  mod_del_cmd(&svsmode_msgtab);
+  mod_del_cmd(&chanserv_msgtab);
+  mod_del_cmd(&helpserv_msgtab);
+  mod_del_cmd(&identify_msgtab);
+  mod_del_cmd(&memoserv_msgtab);
+  mod_del_cmd(&nickserv_msgtab);
+  mod_del_cmd(&operserv_msgtab);
+  mod_del_cmd(&statserv_msgtab);
+  mod_del_cmd(&ns_msgtab);
+  mod_del_cmd(&cs_msgtab);
+  mod_del_cmd(&ms_msgtab);
+  mod_del_cmd(&os_msgtab);
+}
+
+const char *_version = "$Revision: 512 $";
+#endif
+
+/*
+ * ms_svsnick()
+ *
+ * parv[0] = sender prefix
+ * parv[1] = user to force
+ * parv[2] = nick to force them to
+ */
+static void
+ms_svsnick(struct Client *client_p, struct Client *source_p,
+           int parc, char *parv[])
+{
+  char newnick[NICKLEN];
+  struct Client *target_p = NULL;
+
+  if (!IsService(source_p))
+  {
+    sendto_one(source_p, form_str(ERR_NOPRIVS),
+               me.name, parv[0], "SVSNICK");
+    return;
+  }
+
+  if (parc < 3 || *parv[2] == '\0')
+  {
+    sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS),
+               me.name, parv[0], "SVSNICK");
+    return;
+  }
+
+  if ((target_p = find_person(client_p, parv[1])) == NULL)
+  {
+    sendto_one(source_p, form_str(ERR_NOSUCHNICK),
+               me.name, parv[0], parv[1]);
+    return;
+  }
+
+  /* terminate nick to NICKLEN */
+  strlcpy(newnick, parv[2], sizeof(newnick));
+
+  if (!clean_nick_name(newnick, 1))
+  {
+    if (IsClient(source_p))
+      sendto_one(source_p,
+                 ":%s NOTICE %s :*** Notice -- Invalid new nickname: %s", 
+                 me.name, parv[0], newnick);
+    return;
+  }
+
+  if (find_client(newnick) != NULL)
+  {
+    if (IsClient(source_p))
+      sendto_one(source_p, ":%s NOTICE %s :*** Notice -- Nickname %s is "
+                 "already in use", me.name, parv[0], newnick);
+    return;
+  }
+
+  if (MyConnect(target_p))
+    change_local_nick(&me, target_p, newnick);
+  else
+    sendto_one(target_p, ":%s ENCAP %s SVSNICK %s %s",
+               source_p->name, target_p->servptr->name, ID(target_p), newnick);
+}
+
+/*
+ * ms_svsmode()
+ *
+ * parv[0] = sender prefix
+ * parv[1] = user to force
+ * parv[2] = mode to force them to
+ */
+static void
+ms_svsmode(struct Client *client_p, struct Client *source_p,
+           int parc, char *parv[])
+{
+  struct Client *target_p = NULL;
+
+  if ((IsClient(source_p) && !find_matching_name_conf(ULINE_TYPE,
+                              source_p->servptr->name,
+                              source_p->username, source_p->host,
+                              SHARED_USERMODE)) ||
+      (IsServer(source_p) && !find_matching_name_conf(ULINE_TYPE,
+                             source_p->name, NULL, NULL, SHARED_USERMODE)))
+  {
+    sendto_one(source_p, form_str(ERR_NOPRIVS),
+               me.name, parv[0], "SVSMODE");
+    return;
+  }
+
+  if (parc < 3 || *parv[2] == '\0')
+  {
+    sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS),
+               me.name, parv[0], "SVSMODE");
+    return;
+  }
+
+  if ((target_p = find_person(client_p, parv[1])) == NULL)
+  {
+    sendto_one(source_p, form_str(ERR_NOSUCHNICK),
+               me.name, parv[0], parv[1]);
+    return;
+  }
+
+  if (MyConnect(target_p))
+    set_user_mode(target_p, target_p, parc, parv, TRUE);
+  else
+    sendto_one(target_p, ":%s ENCAP %s SVSMODE %s %s",
+               source_p->name, target_p->servptr->name, parv[1], parv[2]);
+}
+
+/*
+ * These generate the services functions through
+ * a macro.
+ */
+services_function(m_chanserv, "ChanServ", "CHANSERV")
+services_function(m_helpserv, "HelpServ", "HELPSERV")
+services_function(m_memoserv, "MemoServ", "MEMOSERV")
+services_function(m_nickserv, "NickServ", "NICKSERV")
+services_function(m_operserv, "OperServ", "OPERSERV")
+services_function(m_statserv, "StatServ", "STATSERV")
+
+/*
+ * get_string() 
+ *
+ * Reverse the array parv back into a normal string assuming
+ * there are "parc" indicies in the array.
+ *
+ * Originally GetString() written by sidewndr.
+ * Modified by Michael for use with hybrid-7.
+*/
+static void
+get_string(int parc, char *parv[], char *buf)
+{
+  int ii = 0;
+  int bw = 0;
+
+  for (; ii < parc; ++ii)
+    bw += ircsprintf(buf+bw, "%s ", parv[ii]);
+  buf[bw-1] = '\0';
+}
+
+/*
+ * clean_nick_name()
+ *
+ * input        - nickname
+ * output       - none
+ * side effects - walks through the nickname, returning 0 if erroneous
+ */
+static int
+clean_nick_name(char *nick, int local)
+{
+  assert(nick);
+
+  /* nicks can't start with a digit or - or be 0 length */
+  /* This closer duplicates behaviour of hybrid-6 */
+
+  if (*nick == '-' || (IsDigit(*nick) && local) || *nick == '\0')
+    return 0;
+
+  for (; *nick; ++nick)
+    if (!IsNickChar(*nick))
+      return 0;
+
+  return 1;
+}
+
+/*
+ * m_identify()
+ *
+ * parv[0] = sender prefix
+ * parv[1] = NickServ Password or Channel
+ * parv[2] = ChanServ Password
+ */
+static void
+m_identify(struct Client *client_p, struct Client *source_p,
+           int parc, char *parv[])
+{
+  struct Client *target_p = NULL;
+
+  switch (parc)
+  {
+    case 2:
+
+      if (ServerInfo.services_name == NULL || !(target_p = find_server(ServerInfo.services_name)))
+        sendto_one(source_p, form_str(ERR_SERVICESDOWN),
+                   me.name, source_p->name);
+      else
+        sendto_one(target_p, ":%s PRIVMSG NickServ@%s :IDENTIFY %s",
+                   source_p->name, ServerInfo.services_name, parv[1]);
+      break;
+
+    case 3:
+      if (ServerInfo.services_name == NULL || !(target_p = find_server(ServerInfo.services_name)))
+        sendto_one(source_p, form_str(ERR_SERVICESDOWN),
+                   me.name, source_p->name);
+      else
+        sendto_one(target_p, ":%s PRIVMSG ChanServ@%s :IDENTIFY %s %s",
+                   source_p->name, ServerInfo.services_name, parv[1], parv[2]);
+      break;
+
+    default:
+      sendto_one(source_p, ":%s NOTICE %s :Syntax: IDENTIFY <password> "
+                 "- for nickname", me.name, source_p->name);
+      sendto_one(source_p, ":%s NOTICE %s :Syntax: IDENTIFY <channel> "
+                 "<password> - for channel", me.name, source_p->name);
+      break;
+  }
+}
+
+/*
+ * deliver_services_msg()
+ *
+ * parv[0] = sender prefix
+ * servmsg = message for services (utilising GetString())
+ *
+ * Borrowed from HybServ -- knight-
+ */
+static void
+deliver_services_msg(const char *service, const char *command,
+                     struct Client *client_p,
+                     struct Client *source_p, int parc, char *parv[])
+{
+  struct Client *target_p = NULL;
+  char buf[IRCD_BUFSIZE] = { '\0' };
+
+  if (parc < 2 || *parv[1] == '\0')
+  {
+    sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS),
+               me.name, source_p->name, command);
+    return;
+  }
+
+  if (ServerInfo.services_name == NULL || !(target_p = find_server(ServerInfo.services_name)))
+    sendto_one(source_p, form_str(ERR_SERVICESDOWN),
+               me.name, source_p->name);
+  else
+  {
+    get_string(parc - 1, parv + 1, buf);
+    sendto_one(target_p, ":%s PRIVMSG %s@%s :%s",
+               source_p->name, service, ServerInfo.services_name, buf);
+  }
+}
Index: modules/Makefile.in
===================================================================
--- modules/Makefile.in	(revision 1)
+++ modules/Makefile.in	(revision 114)
@@ -53,6 +53,7 @@
   m_admin.c \
   m_away.c \
   m_cap.c \
+  m_capture.c \
   m_capab.c \
   m_cburst.c \
   m_close.c \
@@ -68,6 +69,7 @@
   m_info.c \
   m_invite.c \
   m_ison.c \
+  m_killhost.c \
   m_kline.c \
   m_knock.c \
   m_links.c \
@@ -80,9 +82,11 @@
   m_motd.c \
   m_names.c \
   m_nburst.c \
+  m_ojoin.c \
   m_omotd.c \
   m_oper.c \
   m_operwall.c \
+  m_opme.c \
   m_pass.c \
   m_ping.c \
   m_pong.c \
@@ -92,6 +96,7 @@
   m_resv.c \
   m_rkline.c \
   m_rxline.c \
+  m_services.c \
   m_set.c \
   m_stats.c \
   m_svinfo.c \
@@ -106,6 +111,7 @@
   m_users.c \
   m_version.c \
   m_wallops.c \
+  m_webirc.c \
   m_who.c \
   m_whois.c \
   m_whowas.c \
Index: modules/m_info.c
===================================================================
--- modules/m_info.c	(revision 1)
+++ modules/m_info.c	(revision 114)
@@ -116,6 +116,12 @@
     "Network description"
   },
   {
+    "services_name",
+    OUTPUT_STRING,
+    &ServerInfo.services_name,
+    "Services server name"
+  },
+  {
     "hub",
     OUTPUT_BOOLEAN_YN,
     &ServerInfo.hub,
Index: modules/m_capture.c
===================================================================
--- modules/m_capture.c	(revision 0)
+++ modules/m_capture.c	(revision 114)
@@ -0,0 +1,317 @@
+/*
+ *  ircd-hybrid: an advanced Internet Relay Chat Daemon(ircd).
+ *  m_capture.c: Makes a designated client captive
+ *
+ *  Copyright (C) 2002 by the past and present ircd coders, and others.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+ *  USA
+ *
+ *  $Id: m_capture.c 33 2005-10-02 20:50:00Z knight $
+ */
+
+#include "stdinc.h"
+#include "tools.h"
+#include "common.h"  
+#include "handlers.h"
+#include "client.h"
+#include "hash.h"
+#include "channel.h"
+#include "channel_mode.h"
+#include "hash.h"
+#include "ircd.h"
+#include "numeric.h"
+#include "s_conf.h"
+#include "s_serv.h"
+#include "send.h"
+#include "list.h"
+#include "irc_string.h"
+#include "sprintf_irc.h"
+#include "msg.h"
+#include "parse.h"
+#include "modules.h"
+#include "hook.h"
+
+static void mo_capture(struct Client *, struct Client *, int, char *[]);
+static void mo_uncapture(struct Client *, struct Client *, int, char *[]);
+
+struct Message capture_msgtab = {
+  "CAPTURE", 0, 0, 0, 0, MFLG_SLOW, 0,
+  {m_unregistered, m_ignore, mo_capture, mo_capture, mo_capture, m_ignore}
+};
+
+struct Message hurt_msgtab = {
+  "HURT", 0, 0, 0, 0, MFLG_SLOW, 0,
+  {m_unregistered, m_ignore, mo_capture, mo_capture, mo_capture, m_ignore}
+};
+
+struct Message uncapture_msgtab = {
+  "UNCAPTURE", 0, 0, 0, 0, MFLG_SLOW, 0,
+  {m_unregistered, m_ignore, mo_uncapture, mo_uncapture, mo_uncapture, m_ignore}
+};
+
+struct Message heal_msgtab = {
+  "HEAL", 0, 0, 0, 0, MFLG_SLOW, 0,
+  {m_unregistered, m_ignore, mo_uncapture, mo_uncapture, mo_uncapture, m_ignore}
+};
+
+#ifndef STATIC_MODULES
+void
+_modinit(void)
+{
+  mod_add_cmd(&capture_msgtab);
+  mod_add_cmd(&hurt_msgtab);
+  mod_add_cmd(&uncapture_msgtab);
+  mod_add_cmd(&heal_msgtab);
+}
+
+void
+_moddeinit(void)
+{
+  mod_del_cmd(&capture_msgtab);
+  mod_del_cmd(&hurt_msgtab);
+  mod_del_cmd(&uncapture_msgtab);
+  mod_del_cmd(&heal_msgtab);
+}
+
+const char *_version = "$Revision: 33 $";
+#endif
+
+/* mo_capture
+ *      parv[0] = sender prefix
+ *      parv[1] = nickname masklist
+ *      parv[2] = reason
+ */
+static void
+mo_capture(struct Client *client_p, struct Client *source_p,
+           int parc, char *parv[])
+{
+  struct Client *target_p = NULL;
+  char *nick = NULL, *user = NULL, *host = NULL;
+  char *p = NULL;
+  char *reason = NULL;
+  dlink_node *ptr = NULL;
+
+  if (parc < 3 || EmptyString(parv[1]) || EmptyString(parv[2]))
+  {
+    sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS),
+               me.name, source_p->name, "CAPTURE");
+    return;
+  }
+
+  reason = parv[2];
+
+  /* XXX Add oper flag in future ? */
+
+  if (MyClient(source_p) && !IsOper(source_p))
+  {
+    sendto_one(source_p, form_str(ERR_NOPRIVS),
+               me.name, source_p->name, "CAPTURE");
+    return;
+  }
+
+  if ((p = strchr(parv[1], '@')) == NULL)
+  {
+    if ((target_p = find_client(parv[1])) != NULL && IsClient(target_p))
+    {
+      if (MyConnect(target_p) && source_p != target_p)
+      {
+        if (IsOper(target_p))
+        {
+          sendto_one(source_p, form_str(ERR_NOPRIVS),
+                     me.name, source_p->name, "CAPTURE");
+          return;
+        }
+
+        if (!IsCaptured(target_p))
+        {
+          sendto_realops_flags(UMODE_ALL, L_ALL,
+                               "Received CAPTURE message for %s (%s@%s). From %s (%s)",
+                               target_p->name, target_p->username,
+                               target_p->host, source_p->name, reason);
+          sendto_one(target_p, form_str(RPL_YOURECAPTURED),
+                     me.name, target_p->name, reason, ServerInfo.help_channel);
+          SetCaptured(target_p);
+        }
+
+        sendto_one(source_p, form_str(RPL_ISCAPTURED),
+                   me.name, source_p->name, target_p->name);
+      }
+      else if (IsCapable(target_p->from, CAP_ENCAP))
+        sendto_one(target_p, ":%s ENCAP %s CAPTURE %s :%s",
+                   source_p->name, target_p->from->name, target_p->name, reason);
+    }
+    else
+      sendto_one(source_p, form_str(ERR_NOSUCHNICK),
+                 me.name, source_p->name, parv[1]);
+  }
+  else
+  {
+    unsigned int matches = 0;
+
+    /* p != NULL so user @ host given */
+    nick = parv[1];
+    *p++ = '\0';
+    host = p;
+
+    if ((p = strchr(nick, '!')) != NULL)
+    {
+      *p++ = '\0';
+      user = p;
+    }
+    else
+    {
+      user = nick;
+      nick = "*";
+    }
+
+    if (!valid_wild_card(source_p, YES, 3, nick, user, host))
+      return;
+
+    if (IsClient(client_p))
+      sendto_server(client_p, NULL, NULL, CAP_ENCAP, 0, 0,
+                    ":%s ENCAP * CAPTURE %s!%s@%s :%s",
+                    source_p->name, nick, user, host, reason);
+
+    DLINK_FOREACH(ptr, local_client_list.head)
+    {
+      target_p = ptr->data;
+
+      if ((source_p == target_p) || IsOper(target_p) || IsCaptured(target_p))
+        continue;
+
+      if (match(nick, target_p->name) &&
+          match(host, target_p->host) && match(user, target_p->username))
+      {
+        sendto_one(target_p, form_str(RPL_YOURECAPTURED),
+                   me.name, target_p->name, reason, ServerInfo.help_channel);
+        SetCaptured(target_p);
+        ++matches;
+      }
+    }
+
+    sendto_realops_flags(UMODE_ALL, L_ALL,
+                         "Received BULK CAPTURE for %s!%s@%s, %u local match(es). From %s (%s)",
+                         nick, user, host, matches, source_p->name, reason);
+
+    sendto_one(source_p, form_str(RPL_LOCALCAPTURECOUNT),
+               me.name, source_p->name, nick, user, host, matches);
+  }
+}
+
+/* mo_uncapture
+ *      parv[0] = sender prefix
+ *      parv[1] = nickname masklist
+ */
+static void
+mo_uncapture(struct Client *client_p, struct Client *source_p,
+             int parc, char *parv[])
+{
+  struct Client *target_p = NULL;
+  char *nick = NULL, *user = NULL, *host = NULL, *p = NULL;
+  dlink_node *ptr = NULL;
+
+  if (MyClient(source_p) && !IsOper(source_p))
+  {
+    sendto_one(source_p, form_str(ERR_NOPRIVS),
+               me.name, source_p->name, "CAPTURE");
+    return;
+  }
+
+  if (parc < 2 || EmptyString(parv[1]))
+  {
+    sendto_one(source_p, form_str(ERR_NONICKNAMEGIVEN),
+               me.name, source_p->name);
+    return;
+  }
+
+  if ((p = strchr(parv[1], '@')) == NULL)
+  {
+    if ((target_p = find_client(parv[1])) != NULL && IsClient(target_p))
+    {
+      if (MyConnect(target_p))
+      {
+        if (IsCaptured(target_p))
+        {
+          ClearCaptured(target_p);
+
+          sendto_realops_flags(UMODE_ALL, L_ALL, "Received UNCAPTURE message for %s (%s@%s). From %s",
+                               target_p->name, target_p->username,
+                               target_p->host, source_p->name);
+
+          sendto_one(target_p, form_str(RPL_YOUREUNCAPTURED),
+                   me.name,  target_p->name);
+        }
+
+        sendto_one(source_p, form_str(RPL_ISUNCAPTURED),
+                   me.name, source_p->name, target_p->name);
+      }
+      else if (IsCapable(target_p->from, CAP_ENCAP))
+        sendto_one(target_p, ":%s ENCAP %s UNCAPTURE %s",
+                   source_p->name, target_p->from->name, target_p->name);
+    }
+    else
+      sendto_one(source_p, form_str(ERR_NOSUCHNICK),
+                 me.name, source_p->name, parv[1]);
+  }
+  else
+  {
+    unsigned int matches = 0;
+
+    /* p != NULL so user @ host given */
+    nick = parv[1];
+    *p++ = '\0';
+    host = p;
+
+    if ((p = strchr(nick, '!')) != NULL)
+    {
+      *p++ = '\0';
+      user = p;
+    }
+    else
+    {
+      user = nick;
+      nick = "*";
+    }
+
+    if (IsClient(client_p))
+      sendto_server(client_p, NULL, NULL, CAP_ENCAP, 0, 0,
+                    ":%s ENCAP * UNCAPTURE %s!%s@%s",
+                    source_p->name, nick, user, host);
+
+    DLINK_FOREACH(ptr, local_client_list.head)
+    {
+      target_p = ptr->data;
+
+      if (!IsCaptured(target_p))
+        continue;
+
+      if (match(nick, target_p->name) &&
+          match(host, target_p->host) && match(user, target_p->username))
+      {
+        ClearCaptured(target_p);
+        sendto_one(target_p, form_str(RPL_YOUREUNCAPTURED), me.name, target_p->name);
+        ++matches;
+      }
+    }
+
+    sendto_realops_flags(UMODE_ALL, L_ALL,
+                         "Received BULK UNCAPTURE message for %s!%s@%s, %u local match(es). From %s",
+                         nick, user, host, matches, source_p->name);
+
+    sendto_one(source_p, form_str(RPL_LOCALUNCAPTURECOUNT),
+               me.name, source_p->name, nick, user, host, matches);
+  }
+}
Index: modules/m_killhost.c
===================================================================
--- modules/m_killhost.c	(revision 0)
+++ modules/m_killhost.c	(revision 114)
@@ -0,0 +1,246 @@
+/*
+ *  ircd-hybrid: an advanced Internet Relay Chat Daemon(ircd).
+ *  m_killhost.c: Kills a users with agree host.
+ *
+ *  Copyright (C) 2002 by Ilya Shtift.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+ *  USA
+ *
+ *  $Id: m_killhost.c 620 2006-05-24 18:54:19Z michael $
+ *
+ */
+
+#include "stdinc.h"
+#include "handlers.h"
+#include "client.h"
+#include "common.h"
+#include "hash.h"
+#include "ircd.h"
+#include "numeric.h"
+#include "s_log.h"
+#include "s_serv.h"
+#include "s_conf.h"
+#include "send.h"
+#include "whowas.h"
+#include "irc_string.h"
+#include "sprintf_irc.h"
+#include "msg.h"
+#include "parse.h"
+#include "channel_mode.h"    /* needed only for split_nuh() */
+#include "modules.h"
+
+static void mo_killhost(struct Client *, struct Client *, int, char *[]);
+static void kh_relay_kill(struct Client *, struct Client *, struct Client *,
+                          const char *, const char *);
+
+struct Message killhost_msgtab = {
+  "KILLHOST", 0, 0, 2, 0, MFLG_SLOW, 0,
+  { m_unregistered, m_ignore, m_ignore, m_ignore, mo_killhost, m_ignore }
+};
+
+#ifndef STATIC_MODULES
+void
+_modinit(void)
+{
+  mod_add_cmd(&killhost_msgtab);
+}
+
+void
+_moddeinit(void)
+{
+  mod_del_cmd(&killhost_msgtab);
+}
+
+const char *_version = "$Revision: 620 $";
+#endif
+
+/* mo_killhost()
+ * Created May 5, 2003
+ * common (Ilya Shtift) ishtift@tagil.svrw.ru
+ *
+ *      parv[0] = sender prefix
+ *      parv[1] = host
+ *      parv[2] = reason
+ */
+static void
+mo_killhost(struct Client *client_p, struct Client *source_p,
+            int parc, char *parv[])
+{
+  dlink_node *ptr = NULL, *ptr_next = NULL;
+  struct Client *target_p = NULL;
+  const char *inpath = client_p->name;
+  char *reason = NULL;
+  char bufhost[IRCD_BUFSIZE];
+  char nick[NICKLEN + 1];
+  char user[USERLEN + 1];
+  char host[HOSTLEN + 1];
+  char def_reason[] = "No reason";
+  unsigned int count = 0;
+  struct split_nuh_item nuh;
+
+  if (!(IsOperK(source_p) || IsOperGlobalKill(source_p)))
+  {
+    sendto_one(source_p, form_str(ERR_NOPRIVILEGES),
+               me.name, source_p->name);
+    return;
+  }
+
+  nuh.nuhmask  = parv[1];
+  nuh.nickptr  = nick;
+  nuh.userptr  = user;
+  nuh.hostptr  = host;
+
+  nuh.nicksize = sizeof(nick);
+  nuh.usersize = sizeof(user);
+  nuh.hostsize = sizeof(host);
+
+  split_nuh(&nuh);
+
+  if (!valid_wild_card(source_p, YES, 3, nick, user, host))
+    return;
+
+  if (!EmptyString(parv[2]))
+  {
+    reason = parv[2];
+    if (strlen(reason) > (size_t)KILLLEN)
+      reason[KILLLEN] = '\0';
+  }
+  else
+    reason = def_reason;
+
+  DLINK_FOREACH_SAFE(ptr, ptr_next, global_client_list.head)
+  {
+    target_p = ptr->data;
+
+    if (!IsClient(target_p) || (source_p == target_p))
+      continue;
+
+    if (!MyConnect(target_p) && !IsOperGlobalKill(source_p))
+      continue;
+
+    if (match(nick, target_p->name) &&
+        match(user, target_p->username) &&
+        match(host, target_p->host))
+    {
+      if (MyConnect(target_p))
+        sendto_one(target_p, ":%s!%s@%s KILL %s :%s",
+                   source_p->name, source_p->username, source_p->host,
+                   target_p->name, reason);
+
+      sendto_realops_flags(UMODE_ALL, L_ALL,
+                           "Received KILL message for %s. From %s Path: %s (%s)",
+                           target_p->name, source_p->name, me.name, reason);
+
+      ilog(L_INFO,"KILL From %s For %s Path %s (%s)",
+           source_p->name, target_p->name, me.name, reason);
+
+      if (!MyConnect(target_p))
+      {
+        kh_relay_kill(client_p, source_p, target_p, inpath, reason);
+        SetKilled(target_p);
+      }
+
+      if (!count++)
+        ircsprintf(bufhost, "Killed (%s (%s))", source_p->name, reason);
+
+      exit_client(target_p, source_p, bufhost);
+    }
+  }
+
+  if (count > 0)
+    sendto_wallops_flags(UMODE_OPERWALL, source_p, "OPERWALL - KILLHOST %s %s",
+                         host, reason);
+
+  sendto_one(source_p,":%s NOTICE %s :%u clients killed",
+             me.name, source_p->name, count);
+}
+
+static void
+kh_relay_kill(struct Client *one, struct Client *source_p, struct Client *target_p,
+              const char *inpath, const char *reason)
+{
+  dlink_node *ptr;
+  struct Client *client_p;
+  int introduce_killed_client;
+  char *user; 
+  
+  /* LazyLinks:
+   * Check if each lazylink knows about target_p.
+   *   If it does, send the kill, introducing source_p if required.
+   *   If it doesn't either:
+   *     a) don't send the kill (risk ghosts)
+   *     b) introduce the client (and source_p, if required)
+   *        [rather redundant]
+   *
+   * Use a) if IsServer(source_p), but if an oper kills someone,
+   * ensure we blow away any ghosts.
+   *
+   * -davidt
+   */
+
+  if(IsServer(source_p))
+    introduce_killed_client = 0;
+  else
+    introduce_killed_client = 1;
+
+  DLINK_FOREACH(ptr, serv_list.head)
+  {
+    client_p = ptr->data;
+    
+    if (client_p == one)
+      continue;
+
+    if (!introduce_killed_client)
+    {
+      if (ServerInfo.hub && IsCapable(client_p, CAP_LL) )
+      {
+        if (((client_p->localClient->serverMask &
+             target_p->lazyLinkClientExists) == 0))
+        {
+          /* target isn't known to lazy leaf, skip it */
+          continue;
+        }
+      }
+    }
+    /* force introduction of killed client but check that
+     * its not on the server we're bursting too.. */
+    else if (strcmp(target_p->servptr->name,client_p->name))
+      client_burst_if_needed(client_p, target_p);
+
+    /* introduce source of kill */
+    client_burst_if_needed(client_p, source_p);
+
+    /* check the server supports TS6 */
+    if (IsCapable(client_p, CAP_TS6))
+      user = ID(target_p);
+    else
+      user = target_p->name;
+
+    if (MyClient(source_p))
+    {
+      sendto_one(client_p, ":%s KILL %s :%s!%s!%s!%s (%s)",
+                 source_p->name, user,
+                 me.name, source_p->host, source_p->username,
+                 source_p->name, reason);
+    }
+    else
+    {
+      sendto_one(client_p, ":%s KILL %s :%s %s",
+                 source_p->name, user,
+                 inpath, reason);
+    }
+  }
+}
Index: modules/m_ojoin.c
===================================================================
--- modules/m_ojoin.c	(revision 0)
+++ modules/m_ojoin.c	(revision 114)
@@ -0,0 +1,199 @@
+/*
+ *  ircd-hybrid: an advanced Internet Relay Chat Daemon(ircd).
+ *  m_ojoin.c: Allows opers join channels with @%+ modes
+ *
+ *  Copyright (C) 2002 by the past and present ircd coders, and others.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+ *  USA
+ *
+ *  $Id$
+ */
+
+#include "stdinc.h"
+#include "tools.h"
+#include "handlers.h"
+#include "channel.h"
+#include "client.h"
+#include "ircd.h"
+#include "numeric.h"
+#include "send.h"
+#include "irc_string.h"
+#include "hash.h"
+#include "msg.h"
+#include "s_serv.h"
+#include "modules.h"
+#include "list.h"
+#include "channel_mode.h"
+#include "common.h"
+
+static void mo_ojoin(struct Client *, struct Client *, int, char *[]);
+
+struct Message ojoin_msgtab = {
+  "OJOIN", 0, 0, 2, 0, MFLG_SLOW, 0,
+  { m_unregistered, m_not_oper, m_ignore, m_ignore, mo_ojoin, m_ignore }
+};
+
+#ifndef STATIC_MODULES
+void
+_modinit(void)
+{
+  mod_add_cmd(&ojoin_msgtab);
+}
+
+void
+_moddeinit(void)
+{
+  mod_del_cmd(&ojoin_msgtab);
+}
+
+const char *_version = "$Revision$";
+#endif
+
+/* mo_ojoin()
+ *      parv[0] = sender prefix
+ *      parv[1] = channels separated by commas
+ */
+static void
+mo_ojoin(struct Client *client_p, struct Client *source_p,
+         int parc, char *parv[])
+{
+  struct Channel *chptr = NULL;
+  const char *prefix = "";
+  char modeletter = '\0';
+  char *name = parv[1];
+  char *t = NULL;
+  unsigned int flags = 0;
+  dlink_node *ptr;
+
+  /* opers only */
+  if (!IsOper(source_p))
+  {
+    sendto_one(source_p, form_str(ERR_NOPRIVILEGES),
+               me.name, source_p->name);
+    return;
+  }
+
+  for (name = strtoken(&t, name, ","); name;
+       name = strtoken(&t, NULL, ","))
+  {
+    switch (*name)
+    {
+      case '@':
+        prefix = "@";
+        flags = CHFL_CHANOP;
+        modeletter = 'o';
+        ++name;
+        break;
+#ifdef HALFOPS
+      case '%':
+        prefix = "%";
+        flags = CHFL_HALFOP;
+        modeletter = 'h';
+        ++name;
+        break;
+#endif
+      case '+':
+        prefix = "+";
+        flags = CHFL_VOICE;
+        modeletter = 'v';
+        ++name;
+        break;
+      case '#':
+      case '&':
+        prefix = "";
+        flags = 0;
+        modeletter = '\0';
+        break;
+
+      default:
+        sendto_one(source_p, form_str(ERR_NOSUCHCHANNEL),
+                   me.name, source_p->name, name);
+        continue;
+    }
+
+    /* Error checking here */
+    if ((chptr = hash_find_channel(name)) == NULL)
+    {
+      sendto_one(source_p, form_str(ERR_NOSUCHCHANNEL),
+                 me.name, source_p->name, name);
+    }
+    else if (IsMember(source_p, chptr))
+    {
+      sendto_one(source_p, ":%s NOTICE %s :Please part %s before using OJOIN",
+                 me.name, source_p->name, name);
+    }
+    else
+    {
+      add_user_to_channel(chptr, source_p, flags, NO);
+
+      if (chptr->chname[0] == '#')
+      {
+        DLINK_FOREACH(ptr, serv_list.head)
+        {
+          struct Client *serv_p = ptr->data;
+
+          sendto_one(serv_p, ":%s SJOIN %lu %s + :%s%s", ID_or_name(&me, serv_p),
+                     (unsigned long)chptr->channelts, chptr->chname,
+                     (*prefix == '%' && !IsCapable(serv_p, CAP_HOPS)) ?
+                     "@" : prefix, ID_or_name(source_p, serv_p));
+
+
+
+        }
+
+        sendto_wallops_flags(UMODE_WALLOP, &me,
+                             "OJOIN called for [%s] by %s!%s@%s",
+                             chptr->chname, source_p->name, source_p->username,
+                             source_p->host);
+
+        sendto_server(NULL, source_p, NULL, NOCAPS, NOCAPS, LL_ICLIENT,
+                      ":%s WALLOPS :OJOIN called for [%s] by %s!%s@%s",
+                      me.name, chptr->chname, source_p->name, source_p->username,
+                      source_p->host);
+      }
+      else if (chptr->chname[0] == '&')
+      {
+        sendto_wallops_flags(UMODE_LOCOPS, &me,
+                             "OJOIN called for [%s] by %s!%s@%s",
+                             chptr->chname, source_p->name, source_p->username,
+                             source_p->host);
+      }
+
+      sendto_channel_local(ALL_MEMBERS, NO, chptr, ":%s!%s@%s JOIN %s",
+                           source_p->name, source_p->username,
+                           source_p->host,
+                           chptr->chname);
+
+      if (modeletter != '\0')
+        sendto_channel_local(ALL_MEMBERS, NO, chptr, ":%s MODE %s +%c %s",
+                             me.name, chptr->chname, modeletter, source_p->name);
+
+      /* send the topic... */
+      if (chptr->topic != NULL)
+      {
+        sendto_one(source_p, form_str(RPL_TOPIC),
+                   me.name, source_p->name, chptr->chname,
+                   chptr->topic);
+        sendto_one(source_p, form_str(RPL_TOPICWHOTIME),
+                   me.name, source_p->name, chptr->chname,
+                   chptr->topic_info, chptr->topic_time);
+      }
+
+      source_p->localClient->last_join_time = CurrentTime;
+      channel_member_names(source_p, chptr, 1);
+    }
+  }
+}

Property changes on: modules/m_ojoin.c
___________________________________________________________________
Name: svn:eol-style
   + native
Name: svn:mime-type
   + text/plain
Name: svn:keywords
   + "Author Date Id Rev URL"

Index: modules/m_operwall.c
===================================================================
--- modules/m_operwall.c	(revision 1)
+++ modules/m_operwall.c	(revision 114)
@@ -44,17 +44,24 @@
   {m_unregistered, m_not_oper, ms_operwall, me_operwall, mo_operwall, m_ignore}
 };
 
+struct Message globops_msgtab = {
+  "GLOBOPS", 0, 0, 2, 0, MFLG_SLOW, 0,
+  {m_unregistered, m_not_oper, ms_operwall, me_operwall, mo_operwall, m_ignore}
+};
+
 #ifndef STATIC_MODULES
 void
 _modinit(void)
 {
   mod_add_cmd(&operwall_msgtab);
+  mod_add_cmd(&globops_msgtab);
 }
 
 void
 _moddeinit(void)
 {
   mod_del_cmd(&operwall_msgtab);
+  mod_del_cmd(&globops_msgtab);
 }
 
 const char *_version = "$Revision: 33 $";
Index: modules/m_whois.c
===================================================================
--- modules/m_whois.c	(revision 1)
+++ modules/m_whois.c	(revision 114)
@@ -25,7 +25,7 @@
 #include "stdinc.h"
 #include "fdlist.h"
 #include "tools.h"
-#include "common.h"  
+#include "common.h"
 #include "handlers.h"
 #include "client.h"
 #include "hash.h"
@@ -373,20 +373,28 @@
     ms = lp->data;
     chptr = ms->chptr;
 
-    if (ShowChannel(source_p, chptr))
+    if (ShowChannel(source_p, chptr) || IsOperSnoop(source_p))
     {
       /* Don't show local channels if user is doing a remote whois */
       if (!MyConnect(source_p) && (chptr->chname[0] == '&'))
-	continue;
+	    continue;
 
       if ((cur_len + 3 + strlen(chptr->chname) + 1) > (IRCD_BUFSIZE - 2))
       {
-	*(t - 1) = '\0';
-	sendto_one(source_p, "%s", buf);
-	cur_len = mlen;
-	t = buf + mlen;
+	    *(t - 1) = '\0';
+	    sendto_one(source_p, "%s", buf);
+	    cur_len = mlen;
+	    t = buf + mlen;
       }
 
+      /* Let oper snoops know that they're looking at a secret channel */
+      if (!PubChannel(chptr) && !IsMember(source_p, chptr) && IsOperSnoop(source_p))
+      {
+        tlen = ircsprintf(t, "*");
+        t += tlen;
+        cur_len += tlen;
+      }
+
       tlen = ircsprintf(t, "%s%s ", get_member_status(ms, YES), chptr->chname);
       t += tlen;
       cur_len += tlen;
@@ -410,6 +418,14 @@
                ConfigServerHide.hidden_name,
 	       ServerInfo.network_desc);
 
+  if (IsRegNick(target_p))
+    sendto_one(source_p, form_str(RPL_WHOISREGNICK),
+               me.name, source_p->name, target_p->name);
+
+  if (IsSetRegisteredOnly(target_p))
+    sendto_one(source_p, form_str(RPL_WHOISREGONLY),
+               me.name, source_p->name, target_p->name);
+
   if (target_p->away != NULL)
     sendto_one(source_p, form_str(RPL_AWAY),
                me.name, source_p->name, target_p->name,
@@ -420,10 +436,19 @@
                me.name, source_p->name, target_p->name);
 
   if (IsOper(target_p))
-    sendto_one(source_p, form_str((IsAdmin(target_p) &&
-               !IsOperHiddenAdmin(target_p)) ? RPL_WHOISADMIN :
-               RPL_WHOISOPERATOR), me.name, source_p->name, target_p->name);
+  {
+    int rpl = RPL_WHOISOPERATOR;
 
+    if (IsAdmin(target_p) && !IsOperHiddenAdmin(target_p))
+      rpl = RPL_WHOISADMIN;
+
+    if (IsServicesAdmin(target_p))
+      rpl = RPL_WHOISSVCSADMIN;
+
+    sendto_one(source_p, form_str(rpl),
+               me.name, source_p->name, target_p->name);
+  }
+
   if (IsOper(source_p) && IsCaptured(target_p))
     sendto_one(source_p, form_str(RPL_ISCAPTURED),
                me.name, source_p->name, target_p->name);
Index: modules/core/m_quit.c
===================================================================
--- modules/core/m_quit.c	(revision 1)
+++ modules/core/m_quit.c	(revision 114)
@@ -39,7 +39,7 @@
 
 struct Message quit_msgtab = {
   "QUIT", 0, 0, 0, 0, MFLG_SLOW | MFLG_UNREG, 0,
-  {m_quit, m_quit, ms_quit, m_ignore, m_quit, m_ignore}
+  {m_quit, m_quit, ms_quit, m_ignore, m_quit, m_quit}
 };
 
 #ifndef STATIC_MODULES
@@ -73,10 +73,15 @@
   if (comment[0] && (IsOper(source_p) ||
       (source_p->firsttime + ConfigFileEntry.anti_spam_exit_message_time)
       < CurrentTime))
-    strlcpy(reason+6, comment, sizeof(reason)-6);
+  {
+    strlcpy(reason + 6, comment, sizeof(reason) - 6);
+  }
   else
-    reason[0] = 0;
+    strlcpy(reason + 6, "Client Exited", sizeof(reason) - 6);
 
+  if (IsCaptured(source_p))
+    strlcpy(reason + 6, "Client Exited", sizeof(reason) - 6);
+
   exit_client(source_p, source_p, reason);
 }
 
Index: modules/core/m_sjoin.c
===================================================================
--- modules/core/m_sjoin.c	(revision 1)
+++ modules/core/m_sjoin.c	(revision 114)
@@ -153,6 +153,18 @@
   {
     switch (*s)
     {
+      case 'M':
+        mode.mode |= MODE_REGMOD;
+        break;
+      case 'O':
+        mode.mode |= MODE_OPERONLY;
+        break;
+      case 'R':
+        mode.mode |= MODE_REGONLY;
+        break;
+      case 'c':
+        mode.mode |= MODE_COLORLESS;
+        break;
       case 't':
         mode.mode |= MODE_TOPICLIMIT;
         break;
@@ -630,6 +642,10 @@
   { MODE_MODERATED,  'm' },
   { MODE_INVITEONLY, 'i' },
   { MODE_PRIVATE,    'p' },
+  { MODE_REGONLY,    'R' },
+  { MODE_REGMOD,     'M' },
+  { MODE_COLORLESS,  'c' },
+  { MODE_OPERONLY,   'O' },
   { 0, '\0' }
 };
 
Index: modules/core/m_message.c
===================================================================
--- modules/core/m_message.c	(revision 1)
+++ modules/core/m_message.c	(revision 114)
@@ -58,6 +58,8 @@
                                 struct Channel *chptr, char *chname);
 static struct Client* find_userhost (char *, char *, int *);
 
+static int has_ctrl_chars(char *msg);
+
 #define ENTITY_NONE    0
 #define ENTITY_CHANNEL 1
 #define ENTITY_CHANOPS_ON_CHANNEL 2
@@ -94,12 +96,12 @@
 
 struct Message privmsg_msgtab = {
   "PRIVMSG", 0, 0, 1, 0, MFLG_SLOW | MFLG_UNREG, 0L,
-  {m_unregistered, m_privmsg, m_privmsg, m_ignore, m_privmsg, m_ignore}
+  {m_unregistered, m_privmsg, m_privmsg, m_ignore, m_privmsg, m_privmsg}
 };
 
 struct Message notice_msgtab = {
   "NOTICE", 0, 0, 1, 0, MFLG_SLOW, 0L,
-  {m_unregistered, m_notice, m_notice, m_ignore, m_notice, m_ignore}
+  {m_unregistered, m_notice, m_notice, m_ignore, m_notice, m_privmsg}
 };
 
 #ifndef STATIC_MODULES
@@ -489,6 +491,17 @@
   execute_callback(channel_message, source_p, chptr, text);
 #endif
 
+  /* Test for control characters */
+  if ((chptr->mode.mode & MODE_COLORLESS) && has_ctrl_chars(text))
+  {
+    if (p_or_n != NOTICE)
+      sendto_one(source_p, form_str(ERR_NOCOLORSONCHAN),
+                 ID_or_name(&me, client_p),
+                 ID_or_name(source_p, client_p), chptr->chname, chptr->chname);
+
+    return;
+  }
+
   /* chanops and voiced can flood their own channel with impunity */
   if ((result = can_send(chptr, source_p, NULL)))
   {
@@ -501,9 +514,16 @@
   else
   {
     if (p_or_n != NOTICE)
-      sendto_one(source_p, form_str(ERR_CANNOTSENDTOCHAN),
+    {
+      if (IsCaptured(source_p))
+        sendto_one(source_p, form_str(ERR_CANNOTSENDCAPTURED),
+            ID_or_name(&me, client_p), ID_or_name(source_p, client_p),
+            chptr->chname, ServerInfo.help_channel);
+      else
+        sendto_one(source_p, form_str(ERR_CANNOTSENDTOCHAN),
                  ID_or_name(&me, client_p),
                  ID_or_name(source_p, client_p), chptr->chname);
+    }
   }
 }
 
@@ -528,6 +548,13 @@
   int type;
   char c;
 
+  if (IsCaptured(source_p))
+  {
+    sendto_one(source_p, form_str(ERR_YOURECAPTURED), ID_or_name(&me, client_p),
+               ID_or_name(source_p, client_p), ServerInfo.help_channel);
+    return;
+  }
+
   if (flags & CHFL_VOICE)
   {
     type = CHFL_VOICE|CHFL_HALFOP|CHFL_CHANOP;
@@ -606,6 +633,13 @@
       source_p->localClient->last = CurrentTime;
   }
 
+  if (IsCaptured(source_p) && !IsOper(target_p))
+  {
+    sendto_one(source_p, form_str(ERR_YOURECAPTURED), me.name,
+               source_p->name, ServerInfo.help_channel);
+    return;
+  }
+
 #ifndef STATIC_MODULES
   execute_callback(client_message, source_p, target_p, text);
 #endif
@@ -616,6 +650,17 @@
 
   if (MyClient(target_p))
   {
+    if (!IsServer(source_p) && IsSetRegisteredOnly(target_p))
+    {
+      /* prevent non +r users from messaging +R users (excepting opers) */
+      /* note - the user can /accept users, but we don't advertise it. -eri */
+      /* also note - accept_message checks for services */
+      if (!IsRegNick(source_p) && !IsOper(source_p) && !accept_message(source_p, target_p))
+      {
+        return;
+      }
+    }
+
     if (!IsServer(source_p) && IsSetCallerId(target_p))
     {
       /* Here is the anti-flood bot/spambot code -db */
@@ -1005,3 +1050,51 @@
 
   return(res);
 }
+
+/*
+ * has_ctrl_chars
+ * inputs   - msg
+ * outputs  - returns 1 if message has controls, 0 otherwise
+ * side-effects - none
+ * 
+ * shamelessly stolen from bahamut 1.8.4
+*/
+static int
+has_ctrl_chars(char *msg)
+{
+  char *c;
+
+  if (msg == NULL)
+    return 0;
+
+  for (c = msg; *c != '\0'; ++c)
+  {
+    /* not a control code */
+    if (*c > 31)
+      continue;
+
+    /* ctcp */
+    if (*c == 1)
+      continue;
+
+    /* escape */
+    if (*c == 27)
+    {
+      /* ISO 2022 charset shift sequence */
+      if (c[1] == '$' || c[1] == '(')
+      {
+        c++;
+        continue;
+      }
+    }
+
+    /* control code */
+    break;
+  }
+
+  if (*c != '\0')
+    return 1;
+
+  return 0;
+}
+
Index: modules/core/m_mode.c
===================================================================
--- modules/core/m_mode.c	(revision 1)
+++ modules/core/m_mode.c	(revision 114)
@@ -107,12 +107,12 @@
   if (!IsChanPrefix(*parv[1]))
   {
     /* if here, it has to be a non-channel name */
-    set_user_mode(client_p, source_p, parc, parv);
+    set_user_mode(client_p, source_p, parc, parv, FALSE);
     return;
   }
 
   if (!check_channel_name(parv[1], !!MyConnect(source_p)))
-  { 
+  {
     sendto_one(source_p, form_str(ERR_BADCHANNAME),
                me.name, source_p->name, parv[1]);
     return;
Index: modules/core/m_nick.c
===================================================================
--- modules/core/m_nick.c	(revision 1)
+++ modules/core/m_nick.c	(revision 114)
@@ -716,6 +716,7 @@
 	  Count.oper++;
 
         source_p->umodes |= flag & SEND_UMODES;
+
         m++;
       }
 
@@ -794,6 +795,7 @@
       Count.oper++;
 
     source_p->umodes |= flag & SEND_UMODES;
+
     m++;
   }
 
Index: modules/core/m_join.c
===================================================================
--- modules/core/m_join.c	(revision 1)
+++ modules/core/m_join.c	(revision 114)
@@ -58,7 +58,7 @@
 
 struct Message join_msgtab = {
   "JOIN", 0, 0, 2, 0, MFLG_SLOW, 0,
-  {m_unregistered, m_join, ms_join, m_ignore, m_join, m_ignore}
+  {m_unregistered, m_join, ms_join, m_ignore, m_join, m_join}
 };
 
 #ifndef STATIC_MODULES
@@ -498,6 +498,10 @@
   { MODE_MODERATED,  'm' },
   { MODE_INVITEONLY, 'i' },
   { MODE_PRIVATE,    'p' },
+  { MODE_REGONLY,    'R' },
+  { MODE_REGMOD,     'M' },
+  { MODE_COLORLESS,  'c' },
+  { MODE_OPERONLY,   'O' },
   { 0, '\0' }
 };
 
Index: modules/m_who.c
===================================================================
--- modules/m_who.c	(revision 1)
+++ modules/m_who.c	(revision 114)
@@ -135,7 +135,7 @@
     {
       if (IsMember(source_p, chptr))
         do_who_on_channel(source_p, chptr, chptr->chname, YES, server_oper);
-      else if (!SecretChannel(chptr))
+      else if (!SecretChannel(chptr) || IsOper(source_p))
         do_who_on_channel(source_p, chptr, chptr->chname, NO, server_oper);
     }
 
@@ -278,7 +278,7 @@
     if (!IsClient(target_p))
       continue;
 
-    if (IsInvisible(target_p))
+    if ((IsInvisible(target_p) && !IsOper(source_p)) || IsMarked(target_p))
     {
       ClearMark(target_p);
       continue;
@@ -329,7 +329,7 @@
     ms = ptr->data;
     target_p = ms->client_p;
 
-    if (member || !IsInvisible(target_p))
+    if (member || !IsInvisible(target_p) || IsOperSnoop(source_p))
     {
       if (server_oper && !IsOper(target_p))
         continue;
@@ -366,9 +366,10 @@
   }
 
   if (IsOper(source_p))
-    ircsprintf(status, "%c%s%s%s", 
+    ircsprintf(status, "%c%s%s%s%s",
 	       target_p->away ? 'G' : 'H',
-	       IsOper(target_p) ? "*" : "", IsCaptured(target_p) ? "#" : "", op_flags);
+	       IsOper(target_p) ? "*" : "", IsCaptured(target_p) ? "#" : "",
+           IsInvisible(target_p) ? "I" : "", op_flags);
   else
     ircsprintf(status, "%c%s%s", target_p->away ? 'G' : 'H',
 	       IsOper(target_p) ? "*" : "", op_flags);
Index: modules/m_webirc.c
===================================================================
--- modules/m_webirc.c	(revision 0)
+++ modules/m_webirc.c	(revision 114)
@@ -0,0 +1,113 @@
+/*
+ *  ircd-hybrid: an advanced Internet Relay Chat Daemon(ircd).
+ *  m_webirc.c: Enables WEBIRC user protocol
+ *
+ *  Copyright (C) 2008 Sean Rees (eri) <seanrees@gmail.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+ *  USA
+ *
+ *  $Id$
+ */
+
+#include "stdinc.h"
+#include "tools.h"
+#include "handlers.h"
+#include "client.h"
+#include "common.h"
+#include "irc_string.h"
+#include "ircd.h"
+#include "numeric.h"
+#include "s_bsd.h"
+#include "s_conf.h"
+#include "s_log.h"
+#include "s_user.h"
+#include "send.h"
+#include "list.h"
+#include "msg.h"
+#include "parse.h"
+#include "modules.h"
+#include "packet.h"
+
+static void mr_webirc(struct Client *, struct Client *, int, char *[]);
+
+struct Message webirc_msgtab = {
+  "WEBIRC", 0, 0, 5, 0, MFLG_SLOW, 0,
+  { mr_webirc, m_ignore, m_ignore, m_ignore, m_ignore, m_ignore }
+};
+
+#ifndef STATIC_MODULES
+void
+_modinit(void)
+{
+  mod_add_cmd(&webirc_msgtab);
+}
+
+void
+_moddeinit(void)
+{
+  mod_del_cmd(&webirc_msgtab);
+}
+
+const char *_version = "$Revision: 33 $";
+#endif
+
+/*
+** mr_webirc
+**      parv[0] = sender prefix
+**      parv[1] = password
+**      parv[2] = "cgiirc" (don't care about this param)
+**      parv[3] = hostname
+**      parv[4] = ip address
+*/
+static void
+mr_webirc(struct Client *client_p, struct Client *source_p,
+       int parc, char *parv[])
+{
+  struct ConfItem *conf;
+  struct AccessItem *aconf=NULL;
+  const char *password = parv[1];
+  const char *hostname = parv[3];
+  const char *address = parv[4];
+
+  if (EmptyString(password))
+  {
+    sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS),
+	       me.name, source_p->name, "WEBIRC");
+    return;
+  }
+
+  if ((conf = find_exact_name_conf(WEBIRC_TYPE, NULL, NULL, source_p->host)) == NULL)
+  {
+    exit_client(source_p, &me, "No CGI:IRC access");
+    ilog(L_NOTICE, "INVALID WEBIRC (no host) from %s for %s (%s)", source_p->host, hostname, address);
+    return;
+  }
+
+  aconf = (struct AccessItem *)map_to_conf(conf);
+
+  if (match_conf_password(password, aconf))
+  {
+    ilog(L_NOTICE, "WEBIRC from %s for %s (%s)", source_p->host, hostname, address);
+
+    strlcpy(client_p->host, hostname, HOSTLEN + 1);
+    strlcpy(client_p->sockhost, address, HOSTIPLEN + 1);
+  }
+  else
+  {
+    exit_client(source_p, &me, "No CGI:IRC access");
+    ilog(L_NOTICE, "INVALID WEBIRC (bad password) from %s for %s (%s)", source_p->host, hostname, address);
+  }
+}

Property changes on: modules/m_webirc.c
___________________________________________________________________
Name: svn:eol-style
   + native
Name: svn:mime-type
   + text/plain
Name: svn:keywords
   + Id

Index: modules/m_stats.c
===================================================================
--- modules/m_stats.c	(revision 1)
+++ modules/m_stats.c	(revision 114)
@@ -125,6 +125,7 @@
 static void stats_servlinks(struct Client *);
 static void stats_ltrace(struct Client *, int, char **);
 static void stats_ziplinks(struct Client *);
+static void stats_webirc(struct Client *);
 
 /* This table contains the possible stats items, in order:
  * /stats name,  function to call, operonly? adminonly? /stats letter
@@ -173,6 +174,7 @@
   { 'U',	stats_shared,		1,	0,	},
   { 'v',	stats_servers,		1,	0,	},
   { 'V',	stats_gdeny,		1,	0,	},
+  { 'w',    stats_webirc,       1,  0,  },
   { 'x',	stats_gecos,		1,	0,	},
   { 'X',	stats_gecos,		1,	0,	},
   { 'y',	stats_class,		1,	0,	},
@@ -1302,6 +1304,12 @@
                from, to, "STATS");
 }
 
+static void
+stats_webirc(struct Client *source_p)
+{
+  report_confitem_types(source_p, WEBIRC_TYPE, 0);
+}
+
 /*
  * ms_stats - STATS message handler
  *      parv[0] = sender prefix
Index: modules/m_opme.c
===================================================================
--- modules/m_opme.c	(revision 0)
+++ modules/m_opme.c	(revision 114)
@@ -0,0 +1,149 @@
+/*
+ *  ircd-hybrid: an advanced Internet Relay Chat Daemon(ircd).
+ *  m_opme.c: Regains ops on opless channels
+ *
+ *  Copyright (C) 2002 by the past and present ircd coders, and others.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+ *  USA
+ *
+ *  $Id: m_opme.c 33 2005-10-02 20:50:00Z knight $
+ */
+
+#include "stdinc.h"
+#include "tools.h"
+#include "handlers.h"
+#include "channel.h"
+#include "channel_mode.h"
+#include "client.h"
+#include "ircd.h"
+#include "numeric.h"
+#include "s_log.h"
+#include "s_serv.h"
+#include "send.h"
+#include "whowas.h"
+#include "irc_string.h"
+#include "hash.h"
+#include "msg.h"
+#include "parse.h"
+#include "modules.h"
+#include "common.h"
+
+static void mo_opme(struct Client *, struct Client *, int, char *[]);
+
+struct Message opme_msgtab = {
+  "OPME", 0, 0, 2, 0, MFLG_SLOW, 0,
+  { m_unregistered, m_not_oper, m_ignore, m_ignore, mo_opme, m_ignore }
+};
+
+#ifndef STATIC_MODULES
+void
+_modinit(void)
+{
+  mod_add_cmd(&opme_msgtab);
+}
+
+void
+_moddeinit(void)
+{
+  mod_del_cmd(&opme_msgtab);
+}
+
+const char *_version = "$Revision: 33 $";
+#endif
+
+/*
+ * mo_opme()
+ *      parv[0] = sender prefix
+ *      parv[1] = channel
+ */
+static void
+mo_opme(struct Client *client_p, struct Client *source_p,
+        int parc, char *parv[])
+{
+  struct Channel *chptr = NULL;
+  struct Membership *member = NULL;
+
+  /*if (!IsAdmin(source_p))
+  {
+    sendto_one(source_p, form_str(ERR_NOPRIVILEGES),
+               me.name, source_p->name);
+    return;
+  }*/
+
+  /* XXX - we might not have CBURSTed this channel if we are a lazylink
+   * yet. */
+  if ((chptr = hash_find_channel(parv[1])) == NULL)
+  {
+    sendto_one(source_p, form_str(ERR_NOSUCHCHANNEL),
+               me.name, source_p->name, parv[1]);
+    return;
+  }
+
+  if ((member = find_channel_link(source_p, chptr)) == NULL)
+  {
+    sendto_one(source_p, form_str(ERR_NOTONCHANNEL),
+               me.name, source_p->name, chptr->chname);
+    return;
+  }
+
+  /*if (chan_is_opless(chptr) == 0)
+  {
+    sendto_one(source_p, ":%s NOTICE %s :%s Channel is not opless",
+               me.name, source_p->name, chptr->chname);
+    return;
+  }*/
+
+  AddMemberFlag(member, CHFL_CHANOP);
+
+  if (*parv[1] == '&')
+  {
+    sendto_wallops_flags(UMODE_LOCOPS, &me,
+                         "OPME called for [%s] by %s!%s@%s",
+                         chptr->chname, source_p->name, source_p->username,
+                         source_p->host);
+  }
+  else
+  {
+    sendto_wallops_flags(UMODE_WALLOP, &me,
+                         "OPME called for [%s] by %s!%s@%s",
+                         chptr->chname, source_p->name, source_p->username,
+                         source_p->host);
+    sendto_server(NULL, source_p, NULL, NOCAPS, NOCAPS, LL_ICLIENT,
+                  ":%s WALLOPS :OPME called for [%s] by %s!%s@%s",
+                  me.name, chptr->chname, source_p->name, source_p->username,
+                  source_p->host);
+  }
+
+  ilog(L_NOTICE, "OPME called for [%s] by %s!%s@%s",
+       chptr->chname, source_p->name, source_p->username,
+       source_p->host);
+
+  sendto_server(NULL, source_p, chptr, CAP_TS6, NOCAPS, NOFLAGS,
+                 ":%s PART %s", ID(source_p), chptr->chname);
+  sendto_server(NULL, source_p, chptr, NOCAPS, CAP_TS6, NOFLAGS,
+                ":%s PART %s", source_p->name, chptr->chname);
+  sendto_server(NULL, source_p, chptr, CAP_TS6, NOCAPS, NOFLAGS,
+                ":%s SJOIN %lu %s + :@%s",
+                me.id, (unsigned long)chptr->channelts,
+                chptr->chname, ID(source_p));
+  sendto_server(NULL, source_p, chptr, NOCAPS, CAP_TS6, NOFLAGS,
+                ":%s SJOIN %lu %s + :@%s",
+                me.name, (unsigned long)chptr->channelts,
+                chptr->chname, source_p->name);
+
+  sendto_channel_local(ALL_MEMBERS, NO, chptr, ":%s MODE %s +o %s",
+                       me.name, chptr->chname, source_p->name);
+}
Index: modules/m_pong.c
===================================================================
--- modules/m_pong.c	(revision 1)
+++ modules/m_pong.c	(revision 114)
@@ -41,7 +41,7 @@
 
 struct Message pong_msgtab = {
   "PONG", 0, 0, 1, 0, MFLG_SLOW | MFLG_UNREG, 0,
-  {mr_pong, m_ignore, ms_pong, m_ignore, m_ignore, m_ignore}
+  {mr_pong, m_ignore, ms_pong, m_ignore, m_ignore, mr_pong}
 };
 
 #ifndef STATIC_MODULES
Index: TRAINING
===================================================================
--- TRAINING	(revision 0)
+++ TRAINING	(revision 114)
@@ -0,0 +1,31 @@
+Differences between bahamut and esphyb:
+
+1) GLOBOPS is now /OPERWALL
+   -- The usermode for OPERWALL messages is +z
+
+2) S*LINE alternates: SGLINEs, SQLINEs, or SZLINEs.
+   -- These may be used at the IRCD-level:
+      SGLINE (ban by gecos/realname)    -- use /XLINE
+      SQLINE (ban by nickname)          -- use /RESV
+      SZLINE (ban by IP address)        -- use /DLINE
+
+      esphyb has clustering support; all servers will share these
+      tables.
+
+3) esphyb has "caller ID" or server-side ignore
+   -- Usermode +g for regular caller ID, +G for soft caller ID
+   -- In a nutshell, this feature lets users forbid private messages from
+      users until they /ACCEPT them.
+   -- Services is immune to caller ID.
+
+4) CAPTURE/UNCAPTURE (aliases HURT/HEAL).
+   -- Use thusly: /CAPTURE nickname reason
+      Or: /CAPTURE hostmask reason
+
+   -- To uncapture: /UNCAPTURE nickname
+      Or: /UNCAPTURE hostmask
+
+   -- Users are warned of their capturedness:
+   Your connection has been muted for (reason). You may only
+   speak with network operations staff. Please /join (help channel) for
+   more information.
Index: etc/example.conf
===================================================================
--- etc/example.conf	(revision 1)
+++ etc/example.conf	(revision 114)
@@ -68,6 +68,13 @@
 	network_name = "MyNet";
 	network_desc = "This is My Network";
 
+    /*
+     * services_name: name of your services server. this enables
+     * the services aliases (/ChanServ, et. al) to work. it also permits
+     * services users to bypass various privmsg restrictions.
+    */
+    services_name = "services.my.net";
+
 	/*
 	 * hub: allow this server to act as a hub and have multiple servers
 	 * connected to it.  This may not be changed if there are active
@@ -647,6 +654,7 @@
 	 * 	tresv	- allow temporary resvs
 	 *	unresv	- allow oper/server to unresv
 	 *      locops  - allow oper/server to locops - only used for servers that cluster
+     *  usermode - allow oper/serv to change user modes
 	 *	all	- allow oper/server to do all of the above (default)
 	 */
 	type = kline, unkline, resv;
@@ -1271,6 +1279,23 @@
 	action = block;
 };
 
+/*
+ * WEBIRC/CGI:IRC client support
+ *
+ * For web-based IRC gateways that support the WEBIRC message, enter the
+ * hostname and password for each known gateway. A list of active gateways is
+ * available during runtime using /STATS w
+*/
+webirc {
+  host = "cgiirc.mynetwork.net";
+  password = "supersecret";
+};
+
+webirc {
+  host = "cgiirc2.mynetwork.net";
+  password = "reallysecret";
+};
+
 modules {
 	/*
 	 * module path: other paths to search for modules specified below
