[inseparable changes from patch from perl5.003_13 to perl5.003_14]
Perl 5 Porters [Mon, 23 Dec 1996 00:58:58 +0000 (12:58 +1200)]
 CORE LANGUAGE CHANGES

Subject: Eliminate support for {if,unless,while,until} BLOCK BLOCK
From: Chip Salzenberg <chip@atlantic.net>
Files: perly.c perly.c.diff perly.y toke.c

Subject: Taint $x after $x =~ s/pat/xyz/ if pat or xyz is tainted by locale
From: Chip Salzenberg <chip@atlantic.net>
Files: cop.h mg.c pp_ctl.c pp_hot.c

Subject: Complete support for modifying undefined array members in foreach
From: Chip Salzenberg <chip@atlantic.net>
Files: global.sym mg.c perl.h pp.c pp_hot.c proto.h sv.c

 DOCUMENTATION

Subject: Update pod/Makefile; s/perli18n/perllocale/
From: Chip Salzenberg <chip@atlantic.net>
Files: ext/POSIX/POSIX.pod lib/I18N/Collate.pm pod/Makefile pod/perl.pod pod/perlmod.pod pod/perlnews.pod pod/roffitall

 OTHER CORE CHANGES

Subject: Bug in debugger with import manipulations
Date: Mon, 23 Dec 1996 05:37:48 -0500 (EST)
From: Ilya Zakharevich <ilya@math.ohio-state.edu>
Files: pp_hot.c

    Finally I traced why MakeMaker runs wrongly under debugger: debugger
    function calling sequence was assuming that
     GvCV(CvGV(cv)) == cv
    for non-anonymous subs (ne END). MakeMaker managed to break it by
     *A::B = \&C::D;
     eval 'sub C::D {new one}';

    After this CvGV(\&A::B) is *C::D, but &{*C::D} is the "new one".

    Patch follows (note that in this case we do not sacrifice having a
    subroutine name in debugger output ;-).

    Enjoy,

    p5p-msgid: <199612231037.FAA08617@monk.mps.ohio-state.edu>

Subject: Import and dynamic methods
Date: Mon, 23 Dec 1996 01:45:37 -0500 (EST)
From: Ilya Zakharevich <ilya@math.ohio-state.edu>
Files: gv.c hv.c sv.c

    Here is the patch which corrects bad things which happens when you
    import subroutines and otherwise manipulate the symbol tree.

    I put forward the only chunk which may be controversal, since it may
    have a minor performance penalty. It is independent of the others, so
    it can be freely deleted.

    The manipulations which correctly propagate to method calls:
     a) Pruning globs: delete $B::{method}
     b) Undefing subroutines: undef &B::method;
     c) Importing: *B::method = \&mymethod;

    Enjoy,

    p5p-msgid: <199612230645.BAA08378@monk.mps.ohio-state.edu>

Subject: sv_gets patch
Date: Sun, 22 Dec 1996 03:24:04 -0500 (EST)
From: Ilya Zakharevich <ilya@math.ohio-state.edu>
Files: pp_hot.c

    I sent this patch before as a part of
     pos $str =
     $str = /failing/g
    patch. Now I separate it in the case it was tainted by environment:

    Synopsis:
     $a = <FH>;
    does not work as expected if $a is magic (say, tied).

    Enjoy,

    p5p-msgid: <199612220824.DAA07235@monk.mps.ohio-state.edu>

Subject: pos $str patch
Date: Sun, 22 Dec 1996 03:31:21 -0500 (EST)
From: Ilya Zakharevich <ilya@math.ohio-state.edu>
Files: mg.c pp_hot.c t/op/pat.t

    This patch was (mostly) posted already.

    It fixes the bug:
     pos $str
    is reset to undef if
     $str =~ /failing/g
    fails.

    Additionally, if fixes the hidded bit (=MGf_MINMATCH) surviving
    setting
     pos $str = ...

    Enjoy,

    p5p-msgid: <199612220831.DAA07247@monk.mps.ohio-state.edu>

 PORTABILITY

Subject: Fix bugs in bincompat3 usage
From: Chip Salzenberg <chip@atlantic.net>
Files: perl.h perl_exp.SH

Subject: VMS patches to 5.003_13
Date: Mon, 23 Dec 1996 01:26:47 -0500 (EST)
From: Charles Bailey <bailey@HMIVAX.HUMGEN.UPENN.EDU>
Files: deb.c ext/POSIX/POSIX.xs gv.c lib/File/Copy.pm mg.c perl.c perl.h proto.h sv.c t/lib/filecopy.t taint.c toke.c util.c vms/Makefile vms/config.vms vms/descrip.mms vms/gen_shrfls.pl vms/genconfig.pl vms/genopt.com vms/perly_c.vms vms/perly_h.vms vms/test.com vms/vms.c vms/vms_yfix.pl

    private-msgid: <01IDBYYFYPIS002ASE@hmivax.humgen.upenn.edu>

 UTILITIES, LIBRARY, AND EXTENSIONS

Subject: Remove libnet
From: Chip Salzenberg <chip@atlantic.net>
Files: MANIFEST pod/perlmod.pod

Subject: Update IO->VERSION() to 1.1201 for CPAN's sake
From: Chip Salzenberg <chip@atlantic.net>
Files: ext/IO/lib/IO/Handle.pm lib/IO/Handle.pm

Subject: Remodel File::Copy.
From: Chip Salzenberg <chip@atlantic.net>
Files: lib/File/Copy.pm

55 files changed:
Changes
MANIFEST
cop.h
deb.c
embed.h
ext/IO/lib/IO/Handle.pm
ext/POSIX/POSIX.pod
ext/POSIX/POSIX.xs
global.sym
gv.c
hv.c
hv.h
installperl
lib/File/Copy.pm
lib/I18N/Collate.pm
mg.c
myconfig
patchlevel.h
perl.c
perl.h
perl_exp.SH
perly.c
perly.c.diff
perly.y
pod/Makefile
pod/perl.pod
pod/perlfunc.pod
pod/perlmod.pod
pod/perlnews.pod
pod/perlobj.pod
pod/perltoot.pod
pod/roffitall
pp.c
pp_ctl.c
pp_hot.c
proto.h
sv.c
t/lib/filecopy.t
t/lib/open2.t
t/lib/open3.t
t/op/pat.t
taint.c
toke.c
util.c
vms/Makefile
vms/config.vms
vms/descrip.mms
vms/gen_shrfls.pl
vms/genconfig.pl
vms/genopt.com
vms/perly_c.vms
vms/perly_h.vms
vms/test.com
vms/vms.c
vms/vms_yfix.pl

diff --git a/Changes b/Changes
index 26c4ad8..01b4730 100644 (file)
--- a/Changes
+++ b/Changes
@@ -7,6 +7,166 @@ site, in the .../src/5.0 directory for full version releases,
 or in the .../src/5/0/unsupported directory for sub-version
 releases.)
 
+
+----------------
+Version 5.003_14
+----------------
+
+We seem to have achieved "release candidate" status.
+
+ CORE LANGUAGE CHANGES
+
+  Title:  "Eliminate support for {if,unless,while,until} BLOCK BLOCK"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  perly.c perly.c.diff perly.y toke.c
+
+  Title:  "Taint $x after $x =~ s/pat/xyz/ if pat or xyz is tainted by locale"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  cop.h mg.c pp_ctl.c pp_hot.c
+
+  Title:  "Complete support for modifying undefined array members in foreach"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  global.sym mg.c perl.h pp.c pp_hot.c proto.h sv.c
+
+ OTHER CORE CHANGES
+
+  Title:  "patch for regex bug: (x|x){n}"
+   From:  Gurusamy Sarathy <gsar@engin.umich.edu>
+ Msg-ID:  <199612210259.VAA10170@aatma.engin.umich.edu>
+   Date:  Fri, 20 Dec 1996 21:59:22 -0500
+  Files:  regexec.c
+
+  Title:  "Bug in debugger with import manipulations"
+   From:  Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Msg-ID:  <199612231037.FAA08617@monk.mps.ohio-state.edu>
+   Date:  Mon, 23 Dec 1996 05:37:48 -0500 (EST)
+  Files:  pp_hot.c
+
+  Title:  "Import and dynamic methods"
+   From:  Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Msg-ID:  <199612230645.BAA08378@monk.mps.ohio-state.edu>
+   Date:  Mon, 23 Dec 1996 01:45:37 -0500 (EST)
+  Files:  gv.c hv.c sv.c
+
+  Title:  "malloc.c patch"
+   From:  Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Msg-ID:  <199612220748.CAA07164@monk.mps.ohio-state.edu>
+   Date:  Sun, 22 Dec 1996 02:48:58 -0500 (EST)
+  Files:  malloc.c
+
+  Title:  "sv_gets patch"
+   From:  Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Msg-ID:  <199612220824.DAA07235@monk.mps.ohio-state.edu>
+   Date:  Sun, 22 Dec 1996 03:24:04 -0500 (EST)
+  Files:  pp_hot.c
+
+  Title:  "pos $str patch"
+   From:  Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Msg-ID:  <199612220831.DAA07247@monk.mps.ohio-state.edu>
+   Date:  Sun, 22 Dec 1996 03:31:21 -0500 (EST)
+  Files:  mg.c pp_hot.c t/op/pat.t
+
+  Title:  "Prevent warnings when STDCHAR is unsigned"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  perlio.c perlio.h
+
+ PORTABILITY
+
+  Title:  "Fix bugs in bincompat3 usage"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  perl.h perl_exp.SH
+
+  Title:  "Support shared libperl on SunOS"
+   From:  Ulrich Pfeifer
+  Files:  Makefile.SH
+
+  Title:  "Configure on OS/2"
+   From:  Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Msg-ID:  <199612202325.SAA05505@monk.mps.ohio-state.edu>
+   Date:  Fri, 20 Dec 1996 18:25:30 -0500 (EST)
+  Files:  Configure
+
+  Title:  "Fixes for Interactive Unix"
+   From:  win@in.rhein-main.de (Winfried Koenig)
+ Msg-ID:  <m0vbeNO-00003WC@incom.rhein-main.de>
+   Date:  Sun, 22 Dec 96 05:14 EET
+  Files:  hints/isc.sh op.c pp_sys.c universal.c
+
+  Title:  "Use "proto" instead of "_" in sdbm.h"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  ext/SDBM_File/sdbm/sdbm.h
+
+  Title:  "VMS patches to 5.003_13"
+   From:  Charles Bailey <bailey@HMIVAX.HUMGEN.UPENN.EDU>
+ Msg-ID:  <01IDBYYFYPIS002ASE@hmivax.humgen.upenn.edu>
+   Date:  Mon, 23 Dec 1996 01:26:47 -0500 (EST)
+  Files:  deb.c ext/POSIX/POSIX.xs gv.c lib/File/Copy.pm mg.c perl.c
+          perl.h proto.h sv.c t/lib/filecopy.t taint.c toke.c util.c
+          vms/Makefile vms/config.vms vms/descrip.mms
+          vms/gen_shrfls.pl vms/genconfig.pl vms/genopt.com
+          vms/perly_c.vms vms/perly_h.vms vms/test.com vms/vms.c
+          vms/vms_yfix.pl
+
+ UTILITIES, LIBRARY, AND EXTENSIONS
+
+  Title:  "Remove libnet"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  MANIFEST pod/perlmod.pod
+
+  Title:  "Refresh CPAN module to 1.08"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  lib/CPAN.pm lib/CPAN/FirstTime.pm
+
+  Title:  "Refresh ExtUtils::Manifest to version 1.28"
+   From:  Andreas Koenig
+  Files:  lib/ExtUtils/Manifest.pm
+
+  Title:  "Update IO->VERSION() to 1.1201 for CPAN's sake"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  ext/IO/lib/IO/Handle.pm lib/IO/Handle.pm
+
+  Title:  "Remodel File::Copy."
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  lib/File/Copy.pm
+
+  Title:  "dumb bug in User::pwent.pm"
+   From:  Tom Christiansen <tchrist@mox.perl.com>
+ Msg-ID:  <199612201145.EAA27860@mox.perl.com>
+   Date:  Fri, 20 Dec 1996 04:45:37 -0700
+  Files:  lib/User/pwent.pm
+
+ DOCUMENTATION
+
+  Title:  "Better support for =for"
+   From:  Kenneth Albanowski <kjahds@kjahds.com>
+ Msg-ID:  <Pine.LNX.3.93.961220163747.298T-100000@kjahds.com>
+   Date:  Fri, 20 Dec 1996 16:43:35 -0500 (EST)
+  Files:  lib/Pod/Text.pm pod/pod2latex.PL pod/pod2man.PL
+
+  Title:  "perllocale.pod -- second draft"
+   From:  Dominic Dunlop <domo@slipper.ip.lu>
+ Msg-ID:  <v03007800aee1923e30a2@[194.51.248.68]>
+   Date:  Sat, 21 Dec 1996 15:00:50 +0100
+  Files:  pod/perllocale.pod
+
+  Title:  "Perlguts, version 26"
+   From:  Jeff Okamoto <okamoto@hpcc123.corp.hp.com>
+ Msg-ID:  <199612201943.AA048111018@hpcc123.corp.hp.com>
+   Date:  Fri, 20 Dec 1996 11:43:38 -0800
+  Files:  pod/perlguts.pod
+
+  Title:  "Update pod/Makefile; s/perli18n/perllocale/"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  ext/POSIX/POSIX.pod lib/I18N/Collate.pm pod/Makefile
+          pod/perl.pod pod/perlmod.pod pod/perlnews.pod pod/roffitall
+
+  Title:  "obstruct pod2man doc tweaks"
+   From:  Roderick Schertler <roderick@gate.net>
+ Msg-ID:  <3923.851106237@eeyore.ibcinc.com>
+   Date:  Fri, 20 Dec 1996 13:23:57 -0500
+  Files:  lib/Class/Template.pm lib/Time/tm.pm
+
+
 ----------------
 Version 5.003_13
 ----------------
index 79e9203..d256010 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -1,18 +1,18 @@
 Artistic               The "Artistic License"
-Changes                        Differences from previous versions.
-Changes5.000           Differences from perl4.
-Changes5.001           Differences from 5.000.
-Changes5.002           Differences from 5.001.
-Changes5.003           Differences from 5.002.
+Changes                        Differences from previous version
+Changes5.000           Differences between 4.x and 5.000
+Changes5.001           Differences between 5.000 and 5.001
+Changes5.002           Differences between 5.001 and 5.002
+Changes5.003           Differences between 5.002 and 5.003
 Configure              Portability tool
 configure              Crude emulation of GNU configure
 Copying                        The GNU General Public License
 EXTERN.h               Included before foreign .h files
-INSTALL                        Detailed installation instructions.
+INSTALL                        Detailed installation instructions
 INTERN.h               Included before domestic .h files
 MANIFEST               This list of files
 Makefile.SH            A script that generates Makefile
-Porting/Glossary       Glossary of config.sh variables.
+Porting/Glossary       Glossary of config.sh variables
 README                 The Instructions
 README.os2             Notes about OS/2 port
 README.plan9           Notes about Plan9 port
@@ -197,8 +197,8 @@ h2pl/tcbreak2               cbreak test routine using .pl
 handy.h                        Handy definitions
 hints/3b1.sh           Hints for named architecture
 hints/3b1cc            Hints for named architecture
-hints/README.NeXT      Notes about NeXT hints.
-hints/README.hints     Notes about hints.
+hints/README.NeXT      Notes about NeXT hints
+hints/README.hints     Notes about hints
 hints/aix.sh           Hints for named architecture
 hints/altos486.sh      Hints for named architecture
 hints/amigaos.sh       Hints for named architecture
@@ -262,15 +262,15 @@ hints/utekv.sh            Hints for named architecture
 hints/uts.sh           Hints for named architecture
 hv.c                   Hash value code
 hv.h                   Hash value header
-installman             Perl script to install man pages for pods.
+installman             Perl script to install man pages for pods
 installperl            Perl script to do "make install" dirty work
 interp.sym             Interpreter specific symbols to hide in a struct
 keywords.h             The keyword numbers
 keywords.pl            Program to write keywords.h
 lib/AnyDBM_File.pm     Perl module to emulate dbmopen
 lib/AutoLoader.pm      Autoloader base class
-lib/AutoSplit.pm       A module to split up autoload functions
-lib/Benchmark.pm       A module to time pieces of code and such
+lib/AutoSplit.pm       Split up autoload functions
+lib/Benchmark.pm       Measure execution time
 lib/CPAN.pm            Interface to Comprehensive Perl Archive Network
 lib/CPAN/FirstTime.pm  Utility for creating CPAN config files
 lib/CPAN/Nox.pm                Runs CPAN while avoiding compiled extensions
@@ -287,7 +287,7 @@ lib/ExtUtils/Install.pm     Handles 'make install' on extensions
 lib/ExtUtils/Liblist.pm        Locates libraries
 lib/ExtUtils/MM_OS2.pm         MakeMaker methods for OS/2
 lib/ExtUtils/MM_Unix.pm                MakeMaker base class for Unix
-lib/ExtUtils/MM_VMS.pm         MakeMaker methods for VMS.
+lib/ExtUtils/MM_VMS.pm         MakeMaker methods for VMS
 lib/ExtUtils/MakeMaker.pm      Write Makefiles for extensions
 lib/ExtUtils/Manifest.pm       Utilities to write MANIFEST files
 lib/ExtUtils/Mkbootstrap.pm    Writes a bootstrap file (see MakeMaker)
@@ -296,46 +296,35 @@ lib/ExtUtils/testlib.pm           Fixes up @INC to use just-built extension
 lib/ExtUtils/typemap           Extension interface types
 lib/ExtUtils/xsubpp            External subroutine preprocessor
 lib/Fatal.pm           Make do-or-die equivalents of functions
-lib/File/Basename.pm   A module to emulate the basename program
+lib/File/Basename.pm   Emulate the basename program
 lib/File/CheckTree.pm  Perl module supporting wholesale file mode validation
 lib/File/Compare.pm    Emulation of cmp command
 lib/File/Copy.pm       Emulation of cp command
 lib/File/Find.pm       Routines to do a find
-lib/File/Path.pm       A module to do things like `mkdir -p' and `rm -r'
+lib/File/Path.pm       Do things like `mkdir -p' and `rm -r'
 lib/File/stat.pm       By-name interface to Perl's built-in stat
 lib/FileCache.pm       Keep more files open than the system permits
 lib/FileHandle.pm      Backward-compatible front end to IO extension
 lib/FindBin.pm         Find name of currently executing program
-lib/Getopt/Long.pm     A module to fetch command options (GetOptions)
-lib/Getopt/Std.pm      A module to fetch command options (getopt, getopts)
+lib/Getopt/Long.pm     Fetch command options (GetOptions)
+lib/Getopt/Std.pm      Fetch command options (getopt, getopts)
 lib/I18N/Collate.pm    Routines to do strxfrm-based collation
 lib/IPC/Open2.pm       Open a two-ended pipe
 lib/IPC/Open3.pm       Open a three-ended pipe!
 lib/Math/BigFloat.pm   An arbitrary precision floating-point arithmetic package
 lib/Math/BigInt.pm     An arbitrary precision integer arithmetic package
 lib/Math/Complex.pm    A Complex package
-lib/Net/Cmd.pm         Base class for command-based protocols (libnet-1.01)
-lib/Net/Domain.pm      DNS Domain name lookup (libnet-1.01)
-lib/Net/DummyInetd.pm  Place holder for future Net::Inetd (libnet-1.01)
-lib/Net/FTP.pm         File Transfer Protocol client (libnet-1.01)
-lib/Net/NNTP.pm                Network News Transfer Protocol (libnet-1.01)
-lib/Net/Netrc.pm       .netrc lookup routines (libnet-1.01)
-lib/Net/POP3.pm                Post Office Protocol (libnet-1.01)
 lib/Net/Ping.pm                Hello, anybody home?
-lib/Net/SMTP.pm                Simple Mail Transfer Protocol client (libnet-1.01)
-lib/Net/SNPP.pm                Simple Network Pager Protocol client (libnet-1.01)
-lib/Net/Telnet.pm      Telnet client (libnet-1.01)
-lib/Net/Time.pm                Time & NetTime protocols (libnet-1.01)
 lib/Net/hostent.pm     By-name interface to Perl's built-in gethost*
 lib/Net/netent.pm      By-name interface to Perl's built-in getnet*
 lib/Net/protoent.pm    By-name interface to Perl's built-in getproto*
 lib/Net/servent.pm     By-name interface to Perl's built-in getserv*
 lib/Pod/Functions.pm   used by pod/splitpod
 lib/Pod/Text.pm                Convert POD data to formatted ASCII text
-lib/Search/Dict.pm     A module to do binary search on dictionaries
-lib/SelectSaver.pm     A module to enforce proper select scoping
-lib/SelfLoader.pm      A module to load functions only on demand.
-lib/Shell.pm           A module to make AUTOLOADed system() calls
+lib/Search/Dict.pm     Perform binary search on dictionaries
+lib/SelectSaver.pm     Enforce proper select scoping
+lib/SelfLoader.pm      Load functions only on demand
+lib/Shell.pm           Make AUTOLOADed system() calls
 lib/Symbol.pm          Symbol table manipulation routines
 lib/Sys/Hostname.pm    Hostname methods
 lib/Sys/Syslog.pm      Perl module supporting syslogging
@@ -356,7 +345,7 @@ lib/Time/Local.pm   Reverse translation of localtime, gmtime
 lib/Time/gmtime.pm     By-name interface to Perl's built-in gmtime
 lib/Time/localtime.pm  By-name interface to Perl's built-in localtime
 lib/Time/tm.pm         Internal oject for Time::{gm,local}time
-lib/UNIVERSAL.pm       Base class for ALL classes.
+lib/UNIVERSAL.pm       Base class for ALL classes
 lib/User/grent.pm      By-name interface to Perl's built-in getgr*
 lib/User/pwent.pm      By-name interface to Perl's built-in getpw*
 lib/abbrev.pl          An abbreviation table builder
@@ -390,9 +379,9 @@ lib/lib.pm          For "use lib"
 lib/locale.pm          For "use locale"
 lib/look.pl            A "look" equivalent
 lib/newgetopt.pl       A perl library supporting long option parsing
-lib/open2.pl           Open a two-ended pipe
-lib/open3.pl           Open a three-ended pipe
-lib/overload.pm                Module for overloading perl operators.
+lib/open2.pl           Open a two-ended pipe (uses IPC::Open2)
+lib/open3.pl           Open a three-ended pipe (uses IPC::Open3)
+lib/overload.pm                Module for overloading perl operators
 lib/perl5db.pl         Perl debugging routines
 lib/pwd.pl             Routines to keep track of PWD environment variable
 lib/shellwords.pl      Perl library to split into words with shell quoting
@@ -456,7 +445,7 @@ os2/OS2/REXX/t/rx_tievar.t  DLL access module
 os2/OS2/REXX/t/rx_tieydb.t     DLL access module
 os2/OS2/REXX/t/rx_varset.t     DLL access module
 os2/OS2/REXX/t/rx_vrexx.t      DLL access module
-os2/POSIX.mkfifo       POSIX.xs patch.
+os2/POSIX.mkfifo       POSIX.xs patch
 os2/diff.configure     Patches to Configure
 os2/dl_os2.c           Addon for dl_open
 os2/dlfcn.h            Addon for dl_open
@@ -466,9 +455,9 @@ os2/perl2cmd.pl             Corrects installed binaries under OS/2
 patchlevel.h           The current patch level of perl
 perl.c                 main()
 perl.h                 Global declarations
-perl_exp.SH            Creates list of exported symbols for AIX.
-perlio.c               C code for PerlIO abstraction.
-perlio.h               Interface to PerlIO abstraction.
+perl_exp.SH            Creates list of exported symbols for AIX
+perlio.c               C code for PerlIO abstraction
+perlio.h               Interface to PerlIO abstraction
 perlsdio.h             Fake stdio using perlio
 perlsfio.h             Prototype sfio mapping for PerlIO
 perlsh                 A poor man's perl shell
@@ -494,7 +483,7 @@ plan9/setup.rc              Plan9 port: script for easy build+install
 plan9/versnum          Plan9 port: script to print version number
 pod/Makefile           Make pods into something else
 pod/buildtoc           generate perltoc.pod
-pod/checkpods.PL       Tool to check for common errors in pods.
+pod/checkpods.PL       Tool to check for common errors in pods
 pod/perl.pod           Top level perl man page
 pod/perlapio.pod       IO API info
 pod/perlbook.pod       Book info
@@ -620,8 +609,8 @@ t/lib/io_xs.t               See if XSUB methods from IO work
 t/lib/ndbm.t           See if NDBM_File works
 t/lib/odbm.t           See if ODBM_File works
 t/lib/opcode.t         See if Opcode works
-t/lib/open2.t          See if IPC::Open3 works
-t/lib/open3.t          See if IPC::Open2 works
+t/lib/open2.t          See if IPC::Open2 works
+t/lib/open3.t          See if IPC::Open3 works
 t/lib/ops.t            See if Opcode works
 t/lib/parsewords.t     See if Text::ParseWords works
 t/lib/posix.t          See if POSIX works
@@ -701,7 +690,7 @@ universal.c         The default UNIVERSAL package methods
 unixish.h              Defines that are assumed on Unix
 util.c                 Utility routines
 util.h                 Dummy header
-utils/Makefile         Extract the utility scripts.
+utils/Makefile         Extract the utility scripts
 utils/c2ph.PL          program to translate dbx stabs to perl
 utils/h2ph.PL          A thing to turn C .h files into perl .ph files
 utils/h2xs.PL          Program to make .xs files from C header files
diff --git a/cop.h b/cop.h
index 299873b..c062dc6 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -177,8 +177,9 @@ struct subst {
     I32                sbu_iters;
     I32                sbu_maxiters;
     I32                sbu_safebase;
-    I32                sbu_once;
     I32                sbu_oldsave;
+    bool       sbu_once;
+    bool       sbu_rxtainted;
     char *     sbu_orig;
     SV *       sbu_dstr;
     SV *       sbu_targ;
@@ -191,8 +192,9 @@ struct subst {
 #define sb_iters       cx_u.cx_subst.sbu_iters
 #define sb_maxiters    cx_u.cx_subst.sbu_maxiters
 #define sb_safebase    cx_u.cx_subst.sbu_safebase
-#define sb_once                cx_u.cx_subst.sbu_once
 #define sb_oldsave     cx_u.cx_subst.sbu_oldsave
+#define sb_once                cx_u.cx_subst.sbu_once
+#define sb_rxtainted   cx_u.cx_subst.sbu_rxtainted
 #define sb_orig                cx_u.cx_subst.sbu_orig
 #define sb_dstr                cx_u.cx_subst.sbu_dstr
 #define sb_targ                cx_u.cx_subst.sbu_targ
@@ -206,8 +208,9 @@ struct subst {
        cx->sb_iters            = iters,                                \
        cx->sb_maxiters         = maxiters,                             \
        cx->sb_safebase         = safebase,                             \
-       cx->sb_once             = once,                                 \
        cx->sb_oldsave          = oldsave,                              \
+       cx->sb_once             = once,                                 \
+       cx->sb_rxtainted        = rxtainted,                            \
        cx->sb_orig             = orig,                                 \
        cx->sb_dstr             = dstr,                                 \
        cx->sb_targ             = targ,                                 \
diff --git a/deb.c b/deb.c
index fea6ffa..f270835 100644 (file)
--- a/deb.c
+++ b/deb.c
@@ -42,12 +42,12 @@ deb(pat,a1,a2,a3,a4,a5,a6,a7,a8)
 
 #  ifdef I_STDARG
 void
-deb(char *pat, ...)
+deb(const char *pat, ...)
 #  else
 /*VARARGS1*/
 void
 deb(pat, va_alist)
-    char *pat;
+    const char *pat;
     va_dcl
 #  endif
 {
diff --git a/embed.h b/embed.h
index 82cb97f..84c3371 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define magic_clearpack                Perl_magic_clearpack
 #define magic_clearsig         Perl_magic_clearsig
 #define magic_existspack       Perl_magic_existspack
-#define magic_freevivary       Perl_magic_freevivary
+#define magic_freeitervar      Perl_magic_freeitervar
 #define magic_get              Perl_magic_get
 #define magic_getarylen                Perl_magic_getarylen
 #define magic_getglob          Perl_magic_getglob
+#define magic_getitervar       Perl_magic_getitervar
 #define magic_getpack          Perl_magic_getpack
 #define magic_getpos           Perl_magic_getpos
 #define magic_getsig           Perl_magic_getsig
 #define magic_setfm            Perl_magic_setfm
 #define magic_setglob          Perl_magic_setglob
 #define magic_setisa           Perl_magic_setisa
+#define magic_setitervar       Perl_magic_setitervar
 #define magic_setmglob         Perl_magic_setmglob
 #define magic_setnkeys         Perl_magic_setnkeys
 #define magic_setpack          Perl_magic_setpack
 #define magic_settaint         Perl_magic_settaint
 #define magic_setuvar          Perl_magic_setuvar
 #define magic_setvec           Perl_magic_setvec
-#define magic_setvivary                Perl_magic_setvivary
 #define magic_wipepack         Perl_magic_wipepack
 #define magicname              Perl_magicname
 #define markstack              Perl_markstack
 #define utilize                        Perl_utilize
 #define varies                 Perl_varies
 #define vert                   Perl_vert
+#define vivify_itervar         Perl_vivify_itervar
 #define vtbl_amagic            Perl_vtbl_amagic
 #define vtbl_amagicelem                Perl_vtbl_amagicelem
 #define vtbl_arylen            Perl_vtbl_arylen
index 925b208..7b8c709 100644 (file)
@@ -180,6 +180,8 @@ class from C<IO::Handle> and inherit those methods.
 
 Derived from FileHandle.pm by Graham Barr E<lt>F<bodg@tiuk.ti.com>E<gt>
 
+Version 1.1201 specialized from 1.12 for inclusion in Perl distribution
+
 =cut
 
 require 5.000;
@@ -191,7 +193,7 @@ use SelectSaver;
 require Exporter;
 @ISA = qw(Exporter);
 
-$VERSION = "1.12";
+$VERSION = "1.1201";
 $RCS = sprintf("%s", q$Revision: 1.15 $ =~ /([\d\.]+)/);
 
 @EXPORT_OK = qw(
index 7dee4a3..2bb8743 100644 (file)
@@ -862,13 +862,13 @@ LC_CTYPE category.
 The following will set the LC_CTYPE behaviour according to the locale
 environment variables (the second argument C<"">).
 Please see your systems L<setlocale(3)> documentation for the locale
-environment variables' meaning or consult L<perli18n>.
+environment variables' meaning or consult L<perllocale>.
 
        $loc = POSIX::setlocale( &POSIX::LC_CTYPE, "");
 
 The following will set the LC_COLLATE behaviour to Argentinian
 Spanish. B<NOTE>: The naming and availability of locales depends on
-your operating system. Please consult L<perli18n> for how to find
+your operating system. Please consult L<perllocale> for how to find
 out which locales are available in your system.
 
        $loc = POSIX::setlocale( &POSIX::LC_ALL, "es_AR.ISO8859-1" );
index 70527cd..6354dc3 100644 (file)
@@ -41,8 +41,9 @@
 #include <sys/types.h>
 #include <time.h>
 #include <unistd.h>
+#include <fcntl.h>
+
 #if defined(__VMS) && !defined(__POSIX_SOURCE)
-#  include <file.h>         /* == fcntl.h for DECC; no fcntl.h for VAXC */
 #  include <libdef.h>       /* LIB$_INVARG constant */
 #  include <lib$routines.h> /* prototype for lib$ediv() */
 #  include <starlet.h>      /* prototype for sys$gettim() */
 #  define mkfifo(a,b) (not_here("mkfifo"),-1)
 #  define tzset() not_here("tzset")
 
-   /* The default VMS emulation of Unix signals isn't very POSIXish */
-   typedef int sigset_t;
-#  define sigpending(a) (not_here("sigpending"),0)
+#  if __VMS_VER < 70000000
+     /* The default VMS emulation of Unix signals isn't very POSIXish */
+     typedef int sigset_t;
+#    define sigpending(a) (not_here("sigpending"),0)
 
-   /* sigset_t is atomic under VMS, so these routines are easy */
-   int sigemptyset(sigset_t *set) {
+     /* sigset_t is atomic under VMS, so these routines are easy */
+     int sigemptyset(sigset_t *set) {
        if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
        *set = 0; return 0;
-   }
-   int sigfillset(sigset_t *set) {
+     }
+     int sigfillset(sigset_t *set) {
        int i;
        if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
        for (i = 0; i < NSIG; i++) *set |= (1 << i);
        return 0;
-   }
-   int sigaddset(sigset_t *set, int sig) {
+     }
+     int sigaddset(sigset_t *set, int sig) {
        if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
        if (sig > NSIG) { SETERRNO(EINVAL,LIB$_INVARG); return -1; }
        *set |= (1 << (sig - 1));
        return 0;
-   }
-   int sigdelset(sigset_t *set, int sig) {
+     }
+     int sigdelset(sigset_t *set, int sig) {
        if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
        if (sig > NSIG) { SETERRNO(EINVAL,LIB$_INVARG); return -1; }
        *set &= ~(1 << (sig - 1));
        return 0;
-   }
-   int sigismember(sigset_t *set, int sig) {
+     }
+     int sigismember(sigset_t *set, int sig) {
        if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
        if (sig > NSIG) { SETERRNO(EINVAL,LIB$_INVARG); return -1; }
        *set & (1 << (sig - 1));
-   }
-   /* The tools for sigprocmask() are there, just not the routine itself */
-#  ifndef SIG_UNBLOCK
-#    define SIG_UNBLOCK 1
-#  endif
-#  ifndef SIG_BLOCK
-#    define SIG_BLOCK 2
-#  endif
-#  ifndef SIG_SETMASK
-#    define SIG_SETMASK 3
-#  endif
-   int sigprocmask(int how, sigset_t *set, sigset_t *oset) {
+     }
+     /* The tools for sigprocmask() are there, just not the routine itself */
+#    ifndef SIG_UNBLOCK
+#      define SIG_UNBLOCK 1
+#    endif
+#    ifndef SIG_BLOCK
+#      define SIG_BLOCK 2
+#    endif
+#    ifndef SIG_SETMASK
+#      define SIG_SETMASK 3
+#    endif
+     int sigprocmask(int how, sigset_t *set, sigset_t *oset) {
        if (!set || !oset) {
          set_errno(EFAULT); set_vaxc_errno(SS$_ACCVIO);
          return -1;
            return -1;
        }
        return 0;
-    }
-#  define sigaction sigvec
-#  define sa_flags sv_onstack
-#  define sa_handler sv_handler
-#  define sa_mask sv_mask
-#  define sigsuspend(set) sigpause(*set)
+     }
+#    define sigaction sigvec
+#    define sa_flags sv_onstack
+#    define sa_handler sv_handler
+#    define sa_mask sv_mask
+#    define sigsuspend(set) sigpause(*set)
+#  else
+#    define HAS_TZNAME  /* shows up in VMS 7.0 */
+#  endif /* __VMS_VER < 70000000 */
 
    /* The POSIX notion of ttyname() is better served by getname() under VMS */
    static char ttnambuf[64];
    }
 #  define times(t) vms_times(t)
 #else
-#  include <fcntl.h>
 #  include <grp.h>
 #  include <sys/times.h>
 #  ifdef HAS_UNAME
index 3e9f9de..1226991 100644 (file)
@@ -240,6 +240,7 @@ tokenbuf
 uid
 varies
 vert
+vivify_itervar
 vtbl_amagic
 vtbl_amagicelem
 vtbl_arylen
@@ -487,10 +488,11 @@ magic_clearenv
 magic_clearpack
 magic_clearsig
 magic_existspack
-magic_freevivary
+magic_freeitervar
 magic_get
 magic_getarylen
 magic_getglob
+magic_getitervar
 magic_getpack
 magic_getpos
 magic_getsig
@@ -508,6 +510,7 @@ magic_setenv
 magic_setfm
 magic_setglob
 magic_setisa
+magic_setitervar
 magic_setmglob
 magic_setnkeys
 magic_setpack
@@ -517,7 +520,6 @@ magic_setsubstr
 magic_settaint
 magic_setuvar
 magic_setvec
-magic_setvivary
 magic_wipepack
 magicname
 markstack_grow
diff --git a/gv.c b/gv.c
index 95efca8..8db44b4 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -19,7 +19,7 @@
 #include "EXTERN.h"
 #include "perl.h"
 
-extern char rcsid[];
+EXT char rcsid[];
 
 GV *
 gv_AVadd(gv)
@@ -143,19 +143,18 @@ I32 level;
     if (SvTYPE(topgv) != SVt_PVGV)
        gv_init(topgv, stash, name, len, TRUE);
 
-    if (cv=GvCV(topgv)) {
-       if (GvCVGEN(topgv) >= sub_generation)
-           return topgv;       /* valid cached inheritance */
-       if (!GvCVGEN(topgv)) {  /* not an inheritance cache */
-           return topgv;
-       }
-       else {
-           /* stale cached entry, just junk it */
-           GvCV(topgv) = cv = 0;
-           GvCVGEN(topgv) = 0;
+    if (cv = GvCV(topgv)) {
+       if (CvXSUB(cv) || CvROOT(cv)) { /* Not undefed. */
+           if (!GvCVGEN(topgv) ||      /* not an inheritance cache */
+               GvCVGEN(topgv) >= sub_generation) /* valid inh. cache */
+               return topgv;
        }
+       /* stale cached entry, just junk it */
+       SvREFCNT_dec(cv);
+       GvCV(topgv) = cv = 0;
+       GvCVGEN(topgv) = 0;
     }
-    /* if cv is still set, we have to free it if we find something to cache */
+    /* Now cv = 0, and there is no cv in topgv. */
 
     gvp = (GV**)hv_fetch(stash,"ISA",3,FALSE);
     if (gvp && (gv = *gvp) != (GV*)&sv_undef && (av = GvAV(gv))) {
@@ -172,13 +171,9 @@ I32 level;
            }
            gv = gv_fetchmeth(basestash, name, len, level + 1);
            if (gv) {
-               if (cv) {                               /* junk old undef */
-                   assert(SvREFCNT(topgv) > 1);
-                   SvREFCNT_dec(topgv);
-                   SvREFCNT_dec(cv);
-               }
                GvCV(topgv) = GvCV(gv);                 /* cache the CV */
                GvCVGEN(topgv) = sub_generation;        /* valid for now */
+               SvREFCNT_inc(GvCV(gv));
                return gv;
            }
        }
@@ -187,13 +182,9 @@ I32 level;
     if (!level) {
        if (lastchance = gv_stashpvn("UNIVERSAL", 9, FALSE)) {
            if (gv = gv_fetchmeth(lastchance, name, len, level + 1)) {
-               if (cv) {                               /* junk old undef */
-                   assert(SvREFCNT(topgv) > 1);
-                   SvREFCNT_dec(topgv);
-                   SvREFCNT_dec(cv);
-               }
                GvCV(topgv) = GvCV(gv);                 /* cache the CV */
                GvCVGEN(topgv) = sub_generation;        /* valid for now */
+               SvREFCNT_inc(GvCV(gv));
                return gv;
            }
        }
diff --git a/hv.c b/hv.c
index ecbd548..806e573 100644 (file)
--- a/hv.c
+++ b/hv.c
@@ -752,6 +752,8 @@ I32 shared;
 {
     if (!hent)
        return;
+    if (SvTYPE(HeVAL(hent)) == SVt_PVGV)
+       sub_generation++;               /* May be deletion of method? */
     SvREFCNT_dec(HeVAL(hent));
     if (HeKLEN(hent) == HEf_SVKEY) {
        SvREFCNT_dec(HeKEY_sv(hent));
diff --git a/hv.h b/hv.h
index 5256eac..7c04cc2 100644 (file)
--- a/hv.h
+++ b/hv.h
@@ -111,7 +111,7 @@ struct xpvhv {
 #define HeSVKEY_set(he,sv)     (HeKEY_sv(he) = sv)
 
 #define Nullhek Null(HEK*)
-#define HEK_BASESIZE           OFFSETOF(HEK, hek_key[0])
+#define HEK_BASESIZE           STRUCT_OFFSET(HEK, hek_key[0])
 #define HEK_HASH(hek)          (hek)->hek_hash
 #define HEK_LEN(hek)           (hek)->hek_len
 #define HEK_KEY(hek)           (hek)->hek_key
index ddbe595..c9913ca 100755 (executable)
@@ -344,9 +344,6 @@ sub installlib {
 
     $name = "$dir/$name" if $dir ne '';
 
-    # ignore Chip-style patch backups.
-    return if grep(/^P\d+$/, split(m{/+}, $name));
-
     my $installlib = $installprivlib;
     if ($dir =~ /^auto/ || $name =~ /^(Config|FileHandle|Safe)\.pm$/) {
         $installlib = $installarchlib;
index 6afbd39..70c5eb8 100644 (file)
@@ -2,64 +2,93 @@
 # source code has been placed in the public domain by the author.
 # Please be kind and preserve the documentation.
 #
+# Additions copyright 1996 by Charles Bailey.  Permission is granted
+# to distribute the revised code under the same terms as Perl itself.
 
 package File::Copy;
 
-use Exporter;
+use strict;
 use Carp;
 use UNIVERSAL qw(isa);
-use vars qw( @ISA @EXPORT @EXPORT_OK $VERSION $Too_Big);
-use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION $Too_Big
+           &copy &syscopy &cp &mv);
+
+# Note that this module implements only *part* of the API defined by
+# the File/Copy.pm module of the File-Tools-2.0 package.  However, that
+# package has not yet been updated to work with Perl 5.004, and so it
+# would be a Bad Thing for the CPAN module to grab it and replace this
+# module.  Therefore, we set this module's version higher than 2.0.
+$VERSION = '2.01';
 
-@ISA=qw(Exporter);
-@EXPORT=qw(copy move);
-@EXPORT_OK=qw(cp mv);
+require Exporter;
+@ISA = qw(Exporter);
+@EXPORT = qw(copy move);
+@EXPORT_OK = qw(cp mv);
 
-$VERSION = '1.6';
 $Too_Big = 1024 * 1024 * 2;
 
-sub VERSION {
-    # Version of File::Copy
-    return $VERSION;
+sub _catname { #  Will be replaced by File::Spec when it arrives
+    my($from, $to) = @_;
+    if (not defined &basename) {
+       require File::Basename;
+       import  File::Basename 'basename';
+    }
+    if ($^O eq 'VMS')  { $to = VMS::Filespec::vmspath($to) . basename($from); }
+    elsif ($^O eq 'MacOS') { $to .= ':' . basename($from); }
+    elsif ($to =~ m|\\|)   { $to .= '\\' . basename($from); }
+    else                   { $to .= '/' . basename($from); }
 }
 
 sub copy {
-    croak("Usage: copy( file1, file2 [, buffersize]) ")
+    croak("Usage: copy(FROM, TO [, BUFFERSIZE]) ")
       unless(@_ == 2 || @_ == 3);
 
-    if (defined &File::Copy::syscopy &&
-       \&File::Copy::syscopy != \&File::Copy::copy &&
-       ref(\$_[1]) ne 'GLOB' &&
-        !(defined ref $_[1] and isa($_[1], 'GLOB')))
-           { return File::Copy::syscopy($_[0],$_[1]) }
-
     my $from = shift;
     my $to = shift;
-    my $closefrom=0;
-    my $closeto=0;
+
+    my $from_a_handle = (ref($from)
+                        ? (ref($from) eq 'GLOB'
+                           || isa($from, 'GLOB') || isa($from, 'IO::Handle'))
+                        : (ref(\$from) eq 'GLOB'));
+    my $to_a_handle =   (ref($to)
+                        ? (ref($to) eq 'GLOB'
+                           || isa($to, 'GLOB') || isa($to, 'IO::Handle'))
+                        : (ref(\$to) eq 'GLOB'));
+
+    if (!$from_a_handle && !$to_a_handle && -d $to && ! -d $from) {
+       $to = _catname($from, $to);
+    }
+
+    if (defined &syscopy && \&syscopy != \&copy
+       && $from_a_handle
+       && ($to_a_handle || $^O eq 'os2'))
+    {
+       return syscopy($from, $to);
+    }
+
+    my $closefrom = 0;
+    my $closeto = 0;
     my ($size, $status, $r, $buf);
     local(*FROM, *TO);
     local($\) = '';
 
-    if (ref($from) && (isa($from,'GLOB') || isa($from,'IO::Handle'))) {
-       *FROM = *$from;
-    } elsif (ref(\$from) eq 'GLOB') {
-       *FROM = $from;
+    if ($from_a_handle) {
+       *FROM = *$from{FILEHANDLE};
     } else {
-       open(FROM,"<$from") or goto fail_open1;
-       binmode FROM;
+       $from = "./$from" if $from =~ /^\s/;
+       open(FROM, "< $from\0") or goto fail_open1;
+       binmode FROM or die "($!,$^E)";
        $closefrom = 1;
-    }
-
-    if (ref($to) && (isa($to,'GLOB') || isa($to,'IO::Handle'))) {
-       *TO = *$to;
-    } elsif (ref(\$to) eq 'GLOB') {
-       *TO = $to;
-    } else {
-       open(TO,">$to") or goto fail_open2;
-       binmode TO;
-       $closeto=1;
-    }
+    } 
+    if ($to_a_handle) {
+       *TO = *$to{FILEHANDLE};
+    } else {        
+       $to = "./$to" if $to =~ /^\s/;
+       open(TO,"> $to\0") or goto fail_open2;
+       binmode TO or die "($!,$^E)";
+       $closeto = 1;
+    }  
 
     if (@_) {
        $size = shift(@_) + 0;
@@ -70,15 +99,21 @@ sub copy {
        $size = $Too_Big if ($size > $Too_Big);
     }
 
-    $buf = '';
-    while(defined($r = read(FROM,$buf,$size)) && $r > 0) {
-       if (syswrite (TO,$buf,$r) != $r) {
-           goto fail_inner;    
+    $! = 0;
+    for (;;) {
+       my ($r, $w, $t);
+       defined($r = sysread(FROM, $buf, $size))
+           or goto fail_inner;
+       last unless $r;
+       for ($w = 0; $w < $r; $w += $t) {
+           $t = syswrite(TO, $buf, $r - $w, $w)
+               or goto fail_inner;
        }
     }
-    goto fail_inner unless defined($r);
+
     close(TO) || goto fail_open2 if $closeto;
     close(FROM) || goto fail_open1 if $closefrom;
+
     # Use this idiom to avoid uninitialized value warning.
     return 1;
     
@@ -102,26 +137,37 @@ sub copy {
 }
 
 sub move {
-  my($from,$to) = @_;
-  my($copied,$tosz1,$tomt1,$tosz2,$tomt2,$sts,$ossts);
+    my($from,$to) = @_;
+    my($copied,$fromsz,$tosz1,$tomt1,$tosz2,$tomt2,$sts,$ossts);
 
-  return 1 if rename $from, $to;
+    if (-d $to && ! -d $from) {
+       $to = _catname($from, $to);
+    }
+
+    ($tosz1,$tomt1) = (stat($to))[7,9];
+    $fromsz = -s $from;
+    return 1 if rename $from, $to;
+
+    ($sts,$ossts) = ($! + 0, $^E + 0);
+    # Did rename return an error even though it succeeded, because $to
+    # is on a remote NFS file system, and NFS lost the server's ack?
+    return 1 if defined($fromsz) && !-e $from &&           # $from disappeared
+                (($tosz2,$tomt2) = (stat($to))[7,9]) &&    # $to's there
+                ($tosz1 != $tosz2 or $tomt1 != $tomt2) &&  #   and changed
+                $tosz2 == $fromsz;                         # it's all there
  
-  ($tosz1,$tomt1) = (stat($to))[7,9];
-  return 1 if ($copied = copy($from,$to)) && unlink($from);
+    ($tosz1,$tomt1) = (stat($to))[7,9];  # just in case rename did something
+    return 1 if ($copied = copy($from,$to)) && unlink($from);
   
-  ($sts,$ossts) = ($! + 0, $^E + 0);
-  ($tosz2,$tomt2) = ((stat($to))[7,9],0,0) if defined $tomt1;
-  unlink($to) if !defined($tomt1) || $tomt1 != $tomt2 || $tosz1 != $tosz2;
-  ($!,$^E) = ($sts,$ossts);
-  return 0;
+    ($tosz2,$tomt2) = ((stat($to))[7,9],0,0) if defined $tomt1;
+    unlink($to) if !defined($tomt1) or $tomt1 != $tomt2 or $tosz1 != $tosz2;
+    ($!,$^E) = ($sts,$ossts);
+    return 0;
 }
 
-{
-  local($^W) = 0;  # Hush up used-once warning
-  *cp = \&copy;
-  *mv = \&move;
-}
+*cp = \&copy;
+*mv = \&move;
+
 # &syscopy is an XSUB under OS/2
 *syscopy = ($^O eq 'VMS' ? \&rmscopy : \&copy) unless defined &syscopy;
 
@@ -163,10 +209,14 @@ argument may be a string, a FileHandle reference or a FileHandle
 glob. Obviously, if the first argument is a filehandle of some
 sort, it will be read from, and if it is a file I<name> it will
 be opened for reading. Likewise, the second argument will be
-written to (and created if need be).  Note that passing in
+written to (and created if need be).  If the second argument is
+a file name and specifies an existing directory, and the first
+argument does not specify
+
+B<Note that passing in
 files as handles instead of names may lead to loss of information
 on some operating systems; it is recommended that you use file
-names whenever possible.
+names whenever possible.>
 
 An optional third parameter can be used to specify the buffer
 size used for copying. This is the number of bytes from the
@@ -181,10 +231,14 @@ You may use the syntax C<use File::Copy "cp"> to get at the
 =item *
 
 The C<move> function also takes two parameters: the current name
-and the intended name of the file to be moved.  If possible, it
-will simply rename the file.  Otherwise, it copies the file to
-the new location and deletes the original.  If an error occurs during
-this copy-and-delete process, you may be left with a (possibly partial)
+and the intended name of the file to be moved.  If the destination
+already exists and is a directory, and the source is not a
+directory, then the source file will be renamed into the directory
+specified by the destination.
+
+If possible, move() will simply rename the file.  Otherwise, it copies
+the file to the new location and deletes the original.  If an error occurs
+during this copy-and-delete process, you may be left with a (possibly partial)
 copy of the file under the destination name.
 
 You may use the "mv" alias for this function in the same way that
@@ -202,25 +256,26 @@ XSUB directly.
 
 =head2 Special behavior if C<syscopy> is defined (VMS and OS/2)
 
-If the second argument to C<copy> is not a file handle for an
-already opened file, then C<copy> will perform a "system copy" of
+If both arguments to C<copy> are not file handles,
+then C<copy> will perform a "system copy" of
 the input file to a new output file, in order to preserve file
 attributes, indexed file structure, I<etc.>  The buffer size
-parameter is ignored.  If the second argument to C<copy> is a
-Perl handle to an opened file, then data is copied using Perl
+parameter is ignored.  If either argument to C<copy> is a
+handle to an opened file, then data is copied using Perl
 operators, and no effort is made to preserve file attributes
 or record structure.
 
 The system copy routine may also be called directly under VMS and OS/2
 as C<File::Copy::syscopy> (or under VMS as C<File::Copy::rmscopy>, which
-is just an alias for this routine).
+is the routine that does the actual work for syscopy).
 
 =over 4
 
 =item rmscopy($from,$to[,$date_flag])
 
-The first and second arguments may be strings, typeglobs, or
-typeglob references; they are used in all cases to obtain the
+The first and second arguments may be strings, typeglobs, typeglob
+references, or objects inheriting from IO::Handle;
+they are used in all cases to obtain the
 I<filespec> of the input and output files, respectively.  The
 name and type of the input file are used as defaults for the
 output file, if necessary.
index 18c46da..343cb02 100644 (file)
@@ -125,7 +125,7 @@ sub new {
   migrate the old applications away from it) because its functionality was
   integrated into the Perl core language in the release 5.003_06.
 
-  See pod/perli18n.pod for further information.
+  See pod/perllocale.pod for further information.
 
 ***
 ___EOD___
diff --git a/mg.c b/mg.c
index d4c781e..0225ca4 100644 (file)
--- a/mg.c
+++ b/mg.c
 #endif
 
 #define TAINT_FROM_REGEX(sv,rx) \
-       if ((rx)->exec_tainted) \
-           SvTAINTED_on(sv);   \
-       else                    \
+       if ((rx)->exec_tainted) {       \
+           TAINT;                      \
+           SvTAINTED_on(sv);           \
+       }                               \
+       else                            \
            SvTAINTED_off(sv);
 
 /*
@@ -287,10 +289,8 @@ MAGIC *mg;
                (t = rx->endp[paren]))
            {
                i = t - s;
-               if (i >= 0) {
-                   TAINT_IF(rx->exec_tainted);
+               if (i >= 0)
                    return i;
-               }
            }
        }
        return 0;
@@ -308,10 +308,8 @@ MAGIC *mg;
        if (curpm && (rx = curpm->op_pmregexp)) {
            if ((s = rx->subbeg)) {
                i = rx->startp[0] - s;
-               if (i >= 0) {
-                   TAINT_IF(rx->exec_tainted);
+               if (i >= 0)
                    return i;
-               }
            }
        }
        return 0;
@@ -1005,6 +1003,7 @@ MAGIC* mg;
     else if (pos > len)
        pos = len;
     mg->mg_len = pos;
+    mg->mg_flags &= ~MGf_MINMATCH;
 
     return 0;
 }
@@ -1101,34 +1100,62 @@ MAGIC* mg;
 }
 
 int
-magic_setvivary(sv,mg)
+magic_getitervar(sv,mg)
 SV* sv;
 MAGIC* mg;
 {
+    SV *targ = Nullsv;
     if (LvTARGLEN(sv)) {
        AV* av = (AV*)LvTARG(sv);
-       if (LvTARGOFF(sv) <= AvFILL(av)) {
-           SV** svp = AvARRAY(av) + LvTARGOFF(sv);
-           LvTARG(sv) = newSVsv(*svp);
-           SvREFCNT_dec(*svp);
-           *svp = SvREFCNT_inc(LvTARG(sv));
-       }
-       else
-           LvTARG(sv) = Nullsv;
-       LvTARGLEN(sv) = 0;
-       SvREFCNT_dec(av);
+       if (LvTARGOFF(sv) <= AvFILL(av))
+           targ = AvARRAY(av)[LvTARGOFF(sv)];
     }
+    else
+       targ = LvTARG(sv);
+    sv_setsv(sv, targ ? targ : &sv_undef);
+    return 0;
+}
+
+int
+magic_setitervar(sv,mg)
+SV* sv;
+MAGIC* mg;
+{
+    if (LvTARGLEN(sv))
+       vivify_itervar(sv);
     if (LvTARG(sv))
        sv_setsv(LvTARG(sv), sv);
     return 0;
 }
 
 int
-magic_freevivary(sv,mg)
+magic_freeitervar(sv,mg)
 SV* sv;
 MAGIC* mg;
 {
     SvREFCNT_dec(LvTARG(sv));
+    return 0;
+}
+
+void
+vivify_itervar(sv)
+SV* sv;
+{
+    AV* av;
+
+    if (!LvTARGLEN(sv))
+       return;
+    av = (AV*)LvTARG(sv);
+    if (LvTARGOFF(sv) <= AvFILL(av)) {
+       SV** svp = AvARRAY(av) + LvTARGOFF(sv);
+       LvTARG(sv) = newSVsv(*svp);
+       SvREFCNT_dec(*svp);
+       *svp = SvREFCNT_inc(LvTARG(sv));
+    }
+    else
+       LvTARG(sv) = Nullsv;
+    SvREFCNT_dec(av);
+    LvTARGLEN(sv) = 0;
 }
 
 int
index 444eca0..5beb42a 100755 (executable)
--- a/myconfig
+++ b/myconfig
@@ -24,7 +24,7 @@ Summary of my $package ($baserev patchlevel $PATCHLEVEL subversion $SUBVERSION)
     osname=$osname, osvers=$osvers, archname=$archname
     uname='$myuname'
     hint=$hint, useposix=$useposix, d_sigaction=$d_sigaction
-    useperlio=$useperlio d_sfio=$d_sfio
+    bincompat3=$bincompat3 useperlio=$useperlio d_sfio=$d_sfio
   Compiler:
     cc='$cc', optimize='$optimize', gccversion=$gccversion
     cppflags='$cppflags'
index 066db70..a3ad66d 100644 (file)
@@ -1,5 +1,5 @@
 #define PATCHLEVEL 3
-#define SUBVERSION 13
+#define SUBVERSION 14
 
 /*
        local_patches -- list of locally applied less-than-subversion patches.
diff --git a/perl.c b/perl.c
index 3e03044..d4c626c 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -20,7 +20,7 @@
 #include <unistd.h>
 #endif
 
-dEXT char rcsid[] = "perl.c\nPatch level: ###\n";
+dEXTCONST char rcsid[] = "perl.c\nPatch level: ###\n";
 
 #ifdef IAMSUID
 #ifndef DOSUID
diff --git a/perl.h b/perl.h
index 85c7c86..470a44d 100644 (file)
--- a/perl.h
+++ b/perl.h
 #define USE_STDIO
 #endif /* PERL_FOR_X2P */
 
+#define VOIDUSED 1
+#include "config.h"
+
+#include "embed.h"
+
 /*
  * STMT_START { statements; } STMT_END;
  * can be used as a single statement, as in
 # endif
 #endif
 
-#include "embed.h"
-
-#define VOIDUSED 1
-#include "config.h"
-
 /*
  * SOFT_CAST can be used for args to prototyped functions to retain some
  * type checking; it only casts if the compiler does not know prototypes.
 
 #if defined(STANDARD_C) && defined(I_STDDEF)
 #   include <stddef.h>
-#   define OFFSETOF(s,m)  offsetof(s,m)
+#   define STRUCT_OFFSET(s,m)  offsetof(s,m)
 #else
-#   define OFFSETOF(s,m)  (Size_t)(&(((s *)0)->m))
+#   define STRUCT_OFFSET(s,m)  (Size_t)(&(((s *)0)->m))
 #endif
 
 #if defined(I_STRING) || defined(__cplusplus)
@@ -1300,43 +1300,43 @@ EXT short *     ds;
 EXT char *     dc;
 
 /* handy constants */
-EXT char *     Yes INIT("1");
-EXT char *     No INIT("");
-EXT char *     hexdigit INIT("0123456789abcdef0123456789ABCDEFx");
-EXT char *     patleave INIT("\\.^$@dDwWsSbB+*?|()-nrtfeaxc0123456789[{]}");
-EXT char *     vert INIT("|");
+EXTCONST char *        Yes INIT("1");
+EXTCONST char *        No INIT("");
+EXTCONST char *        hexdigit INIT("0123456789abcdef0123456789ABCDEFx");
+EXTCONST char *        patleave INIT("\\.^$@dDwWsSbB+*?|()-nrtfeaxc0123456789[{]}");
+EXTCONST char *        vert INIT("|");
 
-EXT char       warn_uninit[]
+EXTCONST char  warn_uninit[]
   INIT("Use of uninitialized value");
-EXT char       warn_nosemi[]
+EXTCONST char  warn_nosemi[]
   INIT("Semicolon seems to be missing");
-EXT char       warn_reserved[]
+EXTCONST char  warn_reserved[]
   INIT("Unquoted string \"%s\" may clash with future reserved word");
-EXT char       warn_nl[]
+EXTCONST char  warn_nl[]
   INIT("Unsuccessful %s on filename containing newline");
-EXT char       no_wrongref[]
+EXTCONST char  no_wrongref[]
   INIT("Can't use %s ref as %s ref");
-EXT char       no_symref[]
+EXTCONST char  no_symref[]
   INIT("Can't use string (\"%.32s\") as %s ref while \"strict refs\" in use");
-EXT char       no_usym[]
+EXTCONST char  no_usym[]
   INIT("Can't use an undefined value as %s reference");
-EXT char       no_aelem[]
+EXTCONST char  no_aelem[]
   INIT("Modification of non-creatable array value attempted, subscript %d");
-EXT char       no_helem[]
+EXTCONST char  no_helem[]
   INIT("Modification of non-creatable hash value attempted, subscript \"%s\"");
-EXT char       no_modify[]
+EXTCONST char  no_modify[]
   INIT("Modification of a read-only value attempted");
-EXT char       no_mem[]
+EXTCONST char  no_mem[]
   INIT("Out of memory!\n");
-EXT char       no_security[]
+EXTCONST char  no_security[]
   INIT("Insecure dependency in %s%s");
-EXT char       no_sock_func[]
+EXTCONST char  no_sock_func[]
   INIT("Unsupported socket function \"%s\" called");
-EXT char       no_dir_func[]
+EXTCONST char  no_dir_func[]
   INIT("Unsupported directory function \"%s\" called");
-EXT char       no_func[]
+EXTCONST char  no_func[]
   INIT("The %s function is unimplemented");
-EXT char       no_myglob[]
+EXTCONST char  no_myglob[]
   INIT("\"my\" variable %s can't be in a package");
 
 EXT SV         sv_undef;
@@ -1397,7 +1397,7 @@ EXTCONST  unsigned char fold[] = {
        248,    249,    250,    251,    252,    253,    254,    255
 };
 #else
-EXT unsigned char fold[];
+EXTCONST unsigned char fold[];
 #endif
 
 #ifdef DOINIT
@@ -1440,7 +1440,7 @@ EXT unsigned char fold_locale[];
 #endif
 
 #ifdef DOINIT
-EXT unsigned char freq[] = {   /* letter frequencies for mixed English/C */
+EXTCONST unsigned char freq[] = {      /* letter frequencies for mixed English/C */
        1,      2,      84,     151,    154,    155,    156,    157,
        165,    246,    250,    3,      158,    7,      18,     29,
        40,     51,     62,     73,     85,     96,     107,    118,
@@ -1475,12 +1475,12 @@ EXT unsigned char freq[] = {    /* letter frequencies for mixed English/C */
        138,    139,    141,    142,    143,    144,    145,    146
 };
 #else
-EXT unsigned char freq[];
+EXTCONST unsigned char freq[];
 #endif
 
 #ifdef DEBUGGING
 #ifdef DOINIT
-EXT char* block_type[] = {
+EXTCONST char* block_type[] = {
        "NULL",
        "SUB",
        "EVAL",
@@ -1489,7 +1489,7 @@ EXT char* block_type[] = {
        "BLOCK",
 };
 #else
-EXT char* block_type[];
+EXTCONST char* block_type[];
 #endif
 #endif
 
@@ -1885,8 +1885,6 @@ EXT MGVTBL vtbl_substr =  {0,     magic_setsubstr,
                                        0,      0,      0};
 EXT MGVTBL vtbl_vec =  {0,     magic_setvec,
                                        0,      0,      0};
-EXT MGVTBL vtbl_vivary = {0,   magic_setvivary,
-                                       0,      0,      magic_freevivary};
 EXT MGVTBL vtbl_pos =  {magic_getpos,
                                magic_setpos,
                                        0,      0,      0};
@@ -1897,6 +1895,8 @@ EXT MGVTBL vtbl_fm =      {0,     magic_setfm,
 EXT MGVTBL vtbl_uvar = {magic_getuvar,
                                magic_setuvar,
                                        0,      0,      0};
+EXT MGVTBL vtbl_itervar = {magic_getitervar,magic_setitervar,
+                                       0,      0,      magic_freeitervar};
 
 #ifdef USE_LOCALE_COLLATE
 EXT MGVTBL vtbl_collxfrm = {0,
@@ -1930,11 +1930,11 @@ EXT MGVTBL vtbl_nkeys;
 EXT MGVTBL vtbl_taint;
 EXT MGVTBL vtbl_substr;
 EXT MGVTBL vtbl_vec;
-EXT MGVTBL vtbl_vivary;
 EXT MGVTBL vtbl_pos;
 EXT MGVTBL vtbl_bm;
 EXT MGVTBL vtbl_fm;
 EXT MGVTBL vtbl_uvar;
+EXT MGVTBL vtbl_itervar;
 
 #ifdef USE_LOCALE_COLLATE
 EXT MGVTBL vtbl_collxfrm;
@@ -1952,7 +1952,7 @@ EXT long amagic_generation;
 
 #define NofAMmeth 29
 #ifdef DOINIT
-EXT char * AMG_names[NofAMmeth][2] = {
+EXTCONST char * AMG_names[NofAMmeth][2] = {
   {"fallback","abs"},
   {"bool", "nomethod"},
   {"\"\"", "0+"},
@@ -1984,7 +1984,7 @@ EXT char * AMG_names[NofAMmeth][2] = {
   {"=","neg"}
 };
 #else
-EXT char * AMG_names[NofAMmeth][2];
+EXTCONST char * AMG_names[NofAMmeth][2];
 #endif /* def INITAMAGIC */
 
 struct  am_table        {
index 49e8119..d964bdf 100755 (executable)
@@ -1,19 +1,37 @@
 #!/bin/sh
-
+#
 # Written: Nov 1994 Wayne Scott (wscott@ichips.intel.com)
-
+#
 # Create the export list for perl.
 # Needed by AIX to do dynamic linking.
-
-# NOTE: If you're using 'old_embed.pl', don't use this script!
-#       Use 'old_perl_exp.SH' instead.
-
+#
 # This simple program relys on 'global.sym' being up to date
 # with all of the global symbols that a dynamicly link library
 # might want to access.
+#
+# Most symbols have a Perl_ prefix because that's what embed.h sticks
+# in front of them.  Variations depend on binary compatibility with
+# Perl 5.003.
+#
 
-# All symbols have a Perl_ prefix because that's what embed.h
-# sticks in front of them.
+case $CONFIG in
+'')
+       if test -f config.sh; then TOP=.;
+       elif test -f ../config.sh; then TOP=..;
+       elif test -f ../../config.sh; then TOP=../..;
+       elif test -f ../../../config.sh; then TOP=../../..;
+       elif test -f ../../../../config.sh; then TOP=../../../..;
+       else
+               echo "Can't find config.sh."; exit 1
+       fi
+       . $TOP/config.sh
+       ;;
+esac
+: This forces SH files to create target in same directory as SH file.
+: This is so that make depend always knows where to find SH derivatives.
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
 
 echo "Extracting perl.exp"
 
@@ -22,25 +40,31 @@ echo "#!" > perl.exp
 
 case "$bincompat3" in
 y*)
-       global=/tmp/exp$$g
-       interp=/tmp/exp$$i
-       compat3=/tmp/exp$$c
-       trap 'rm -f $global $interp $compat3' 0
-       trap 'exit 1' 1 2 3 13 15
-       grep '^[A-Za-z]' global.sym | sort >$global
-       grep '^[A-Za-z]' interp.sym | sort >$interp
-       grep '^[A-Za-z]' compat3.sym | sort >$compat3
-       comm -23 $global $compat3 | sed 's/^/Perl_/p' >> perl.exp
-       comm -12 $global $compat3 >> perl.exp
-       comm -12 $interp $compat3 | sed 's/^/Perl_/p' >> perl.exp
-       comm -23 $interp $compat3 >> perl.exp
+       (
+         global=/tmp/exp$$g
+         interp=/tmp/exp$$i
+         compat3=/tmp/exp$$c
+         trap 'rm -f $global $interp $compat3' 0
+         trap 'exit 1' 1 2 3 13 15
+         grep '^[A-Za-z]' global.sym | sort >$global
+         grep '^[A-Za-z]' interp.sym | sort >$interp
+         grep '^[A-Za-z]' compat3.sym | sort >$compat3
+         comm -23 $global $compat3 | sed 's/^/Perl_/' >> perl.exp
+         comm -12 $interp $compat3 | sed 's/^/Perl_/' >> perl.exp
+         comm -12 $global $compat3 >> perl.exp
+         comm -23 $interp $compat3 >> perl.exp
+       )
        ;;
 *)
        sed -n '/^[A-Za-z]/ s/^/Perl_/p' global.sym interp.sym >> perl.exp
        ;;
 esac
 
-# extra globals not included above.
+#
+# Extra globals not included above (including a few that might
+# not actually be defined, but there's no harm in that).
+#
+
 cat <<END >> perl.exp
 perl_init_i18nl10n
 perl_init_i18nl14n
@@ -64,4 +88,12 @@ perl_call_pv
 perl_call_method
 perl_call_sv
 perl_requirepv
+Mymalloc
+Mycalloc
+Myremalloc
+Myfree
+Perl_malloc
+Perl_calloc
+Perl_realloc
+Perl_free
 END
diff --git a/perly.c b/perly.c
index 8f1de62..6ff2f58 100644 (file)
--- a/perly.c
+++ b/perly.c
@@ -17,1044 +17,1007 @@ dep()
 short yylhs[] = {                                        -1,
    40,    0,    7,    5,    8,    6,    9,    9,    9,   10,
    10,   10,   10,   22,   22,   22,   22,   22,   22,   13,
-   13,   13,   12,   12,   12,   12,   37,   37,   11,   11,
-   11,   11,   11,   11,   11,   11,   11,   24,   24,   25,
-   25,   26,   27,   28,   29,   30,   39,   39,    1,    1,
-    1,    1,    3,    3,   41,   41,   36,   36,    4,   42,
-   42,   43,   14,   14,   14,   23,   23,   23,   34,   34,
-   34,   34,   34,   34,   34,   34,   35,   35,   15,   15,
+   13,   13,   12,   12,   37,   37,   11,   11,   11,   11,
+   11,   11,   11,   24,   24,   25,   25,   26,   27,   28,
+   29,   30,   39,   39,    1,    1,    1,    1,    3,    3,
+   41,   41,   36,   36,    4,   42,   42,   43,   14,   14,
+   14,   23,   23,   23,   34,   34,   34,   34,   34,   34,
+   34,   34,   35,   35,   15,   15,   15,   15,   15,   15,
    15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
    15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
    15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
    15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
    15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
    15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-   15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-   15,   15,   31,   31,   32,   32,   32,    2,    2,   38,
-   21,   16,   17,   18,   19,   20,   33,   33,   33,   33,
+   15,   15,   15,   15,   15,   15,   15,   15,   31,   31,
+   32,   32,   32,    2,    2,   38,   21,   16,   17,   18,
+   19,   20,   33,   33,   33,   33,
 };
 short yylen[] = {                                         2,
     0,    2,    4,    0,    4,    0,    0,    2,    2,    2,
     1,    2,    3,    1,    1,    3,    3,    3,    3,    0,
-    2,    6,    7,    7,    4,    4,    0,    2,    8,    8,
-    5,    5,   10,    9,    8,   11,    3,    0,    1,    0,
-    1,    1,    1,    1,    1,    1,    0,    1,    1,    1,
-    1,    1,    4,    3,    5,    5,    0,    1,    0,    3,
-    2,    6,    3,    3,    1,    2,    3,    1,    3,    5,
-    6,    3,    5,    2,    4,    4,    1,    1,    3,    3,
-    3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-    5,    3,    2,    2,    2,    2,    2,    2,    2,    2,
-    2,    2,    3,    2,    3,    2,    4,    3,    4,    1,
-    5,    1,    4,    5,    4,    1,    1,    1,    5,    6,
-    5,    6,    5,    4,    5,    1,    1,    3,    4,    3,
-    2,    2,    4,    5,    4,    5,    1,    2,    2,    1,
-    2,    2,    2,    1,    3,    1,    3,    4,    4,    6,
-    1,    1,    0,    1,    0,    1,    2,    1,    1,    1,
-    2,    2,    2,    2,    2,    2,    1,    1,    1,    1,
+    2,    6,    7,    7,    0,    2,    8,    8,   10,    9,
+    8,   11,    3,    0,    1,    0,    1,    1,    1,    1,
+    1,    1,    0,    1,    1,    1,    1,    1,    4,    3,
+    5,    5,    0,    1,    0,    3,    2,    6,    3,    3,
+    1,    2,    3,    1,    3,    5,    6,    3,    5,    2,
+    4,    4,    1,    1,    3,    3,    3,    3,    3,    3,
+    3,    3,    3,    3,    3,    3,    5,    3,    2,    2,
+    2,    2,    2,    2,    2,    2,    2,    2,    3,    2,
+    3,    2,    4,    3,    4,    1,    5,    1,    4,    5,
+    4,    1,    1,    1,    5,    6,    5,    6,    5,    4,
+    5,    1,    1,    3,    4,    3,    2,    2,    4,    5,
+    4,    5,    1,    2,    2,    1,    2,    2,    2,    1,
+    3,    1,    3,    4,    4,    6,    1,    1,    0,    1,
+    0,    1,    2,    1,    1,    1,    2,    2,    2,    2,
+    2,    2,    1,    1,    1,    1,
 };
 short yydefred[] = {                                      1,
-    0,    7,    0,   48,   59,   59,    0,   59,    8,   49,
-    9,   11,    0,   50,   51,   52,    0,    0,    0,   61,
-    0,   14,    4,  151,    0,    0,  126,    0,  146,    0,
-   59,   59,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,  158,  159,    0,
+    0,    7,    0,   44,   55,   55,    0,   55,    8,   45,
+    9,   11,    0,   46,   47,   48,    0,    0,    0,   57,
+    0,   14,    4,  147,    0,    0,  122,    0,  142,    0,
+   55,   55,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  154,  155,    0,
     0,    0,    0,    0,    0,    0,    0,   12,    0,    0,
     0,    0,    0,    0,    0,    0,    0,   10,    0,    0,
-    0,    0,  116,  118,    0,    0,    0,    0,  152,    0,
-   54,    0,   60,    0,    7,  167,  170,  169,  168,    0,
-    0,    0,    0,    0,    0,    4,    0,    4,    0,    4,
-    0,    4,    0,    4,    4,    0,    0,    0,    0,    0,
-  141,    0,    0,    0,    0,   74,    0,  165,    0,  132,
-    0,    0,    0,    0,    0,  161,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,  106,    0,  162,  163,
-  164,  166,    0,    0,   37,    0,    0,    0,    0,    0,
+    0,    0,  112,  114,    0,    0,    0,    0,  148,    0,
+   50,    0,   56,    0,    7,  163,  166,  165,  164,    0,
+    0,    0,    0,    0,    0,    4,    4,    4,    4,    4,
+    4,    0,    0,    0,    0,    0,  137,    0,    0,    0,
+    0,   70,    0,  161,    0,  128,    0,    0,    0,    0,
+    0,  157,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  102,    0,  158,  159,  160,  162,    0,    0,
+   33,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   94,   95,    0,    0,    0,    0,    0,    0,
+    0,    0,   13,    0,   49,   54,    0,    0,    0,   68,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,   98,   99,    0,    0,
-    0,    0,    0,    0,    0,    0,   13,    0,   53,   58,
-    0,    0,    0,   72,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    4,  145,
-  147,    0,    0,    0,    0,    0,    0,    0,  108,    0,
-  130,    0,    0,  105,   28,    0,    0,   19,    0,    0,
-    0,   63,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,   77,    0,
-   78,    0,    0,    0,    0,    0,    0,    0,  128,    0,
-    0,   56,   55,    0,    3,    0,  149,    0,   76,  109,
-    0,   45,    0,   31,   46,    0,   32,    0,    0,    0,
-    0,   25,    0,   26,  160,    0,    0,   39,   44,    0,
-    0,    0,  148,  157,   75,    0,  133,    0,  135,    0,
-  107,    0,    0,    0,    0,    0,    0,    0,  115,    0,
-  113,    0,  124,    0,  129,   62,   73,    0,    0,    0,
-    0,    6,   21,    0,    0,    0,    0,    0,    0,   70,
-  134,  136,  123,    0,  121,    0,    0,  114,    0,  119,
-  125,  111,  150,    0,    0,    0,    7,    0,    0,    0,
-    0,    0,    0,  122,  120,   71,   29,   30,   23,    0,
-    0,   24,    0,   35,    0,    0,    5,    0,    0,    0,
-   34,   22,   33,    0,   36,
+    4,  141,  143,    0,    0,    0,    0,    0,    0,    0,
+  104,    0,  126,    0,    0,  101,   26,    0,    0,   19,
+    0,    0,    0,   59,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+   73,    0,   74,    0,    0,    0,    0,    0,    0,    0,
+  124,    0,    0,   52,   51,    0,    3,    0,  145,    0,
+   72,  105,    0,   41,    0,   42,    0,    0,    0,    0,
+  156,    0,    0,   35,   40,    0,    0,    0,  144,  153,
+   71,    0,  129,    0,  131,    0,  103,    0,    0,    0,
+    0,    0,    0,    0,  111,    0,  109,    0,  120,    0,
+  125,   58,   69,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   66,  130,  132,  119,    0,  117,    0,    0,
+  110,    0,  115,  121,  107,  146,    6,    0,    0,    0,
+    0,    0,    0,    0,    0,  118,  116,   67,    7,   27,
+   28,    0,    0,   23,   24,    0,   31,    0,    0,    0,
+   21,    0,    0,    0,   30,    5,    0,   29,    0,    0,
+   32,    0,   22,
 };
 short yydgoto[] = {                                       1,
-    9,   66,   10,   17,   85,  337,   88,  313,    3,   11,
-   12,   68,  272,  268,   70,   71,   72,   73,   74,   75,
-   76,  278,   78,  279,  262,  265,  269,  281,  263,  266,
-  116,  204,   90,   79,  242,  181,  145,  276,   13,    2,
+    9,   66,   10,   17,   85,  329,   88,  318,    3,   11,
+   12,   68,  334,  258,   70,   71,   72,   73,   74,   75,
+   76,  264,   78,  265,  254,  256,  259,  267,  255,  257,
+  112,  196,   90,   79,  234,  177,  141,  262,   13,    2,
    14,   15,   16,
 };
 short yysindex[] = {                                      0,
-    0,    0, -178,    0,    0,    0,  -49,    0,    0,    0,
-    0,    0,  616,    0,    0,    0, -108, -233,    3,    0,
- -230,    0,    0,    0,  -24,  -24,    0,   28,    0, 1899,
-    0,    0,  -17,  -12,  -11,  -10,  -35, 1899,   39,   54,
-   60,  992,  936,  -24, 1055, 1319, -217,    0,    0,  -24,
- 1899, 1899, 1899, 1899, 1899, 1899, 1375,    0, 1899, 1899,
- 1431,  -24,  -24,  -24,  -24, 1899, -161,    0,  277, 3829,
-  -69,  -42,    0,    0,   -4,   88,   89,   97,    0,   24,
-    0, -107,    0, -105,    0,    0,    0,    0,    0, 1899,
-  114, 1899,  328,   24, -107,    0,   24,    0,   24,    0,
-   24,    0,   24,    0,    0,  115, 3829,  133, 1490,  936,
-    0,  328,    0,  -69,   97,    0, 1899,    0,  137,    0,
-  328,  -19,   56,   19, 1899,    0,   97,   98,   98,   98,
-  -82,  -82,   93,  -21,   98,   98,    0,  -87,    0,    0,
-    0,    0,  328,   24,    0, 1899, 1899, 1899, 1899, 1899,
- 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
- 1899, 1899, 1899, 1899, 1899, 1899,    0,    0,  -32, 1899,
- 1899, 1899, 1899, 1899, 1899, 1665,    0, 1899,    0,    0,
-   -8, 1899,  357,    0, 1899,   82, 1899,   24, 1899, -161,
- 1899, -161, 1899, -234, 1899, -234,  144, 1724,    0,    0,
-    0,    4,   11,  138, 1899,   97, 1780, 1836,    0,   61,
-    0, 1899,   96,    0,    0, -176, -176,    0, -176, -176,
-  -95,    0,   21, 1092,  328,  373,  434,   92, 3829, 1204,
- 3238, 3721, 2430,  815,  419,   98,   98, 1899,    0, 1899,
-    0,  173,  -80,   55,  -68,   57,  -54,   68,    0,    6,
- 3829,    0,    0,  157,    0,  178,    0, 1899,    0,    0,
- -176,    0,  181,    0,    0,  183,    0, -176,  190,  112,
-  209,    0,  231,    0,    0,  210,  277,    0,    0,  237,
-  224, 1899,    0,    0,    0,    9,    0,   15,    0,   17,
-    0,  105, 1899,  163, 1899,   81,  119, 1899,    0,  168,
-    0,  175,    0,  185,    0,    0,    0, 1146,  112,  112,
-  112,    0,    0, 1899,  112, 1899,  112, 1899,  279,    0,
-    0,    0,    0,  143,    0, 3863,  202,    0,  300,    0,
-    0,    0,    0, -161, -161, -234,    0,  321, -234,  326,
- -161,  309,  112,    0,    0,    0,    0,    0,    0,  398,
-  112,    0,  112,    0, 1724, -161,    0, -234, -161,  336,
-    0,    0,    0,  112,    0,
+    0,    0,  236,    0,    0,    0,  -45,    0,    0,    0,
+    0,    0,  557,    0,    0,    0, -106, -232,  -20,    0,
+ -216,    0,    0,    0,   -8,   -8,    0,    9,    0, 1840,
+    0,    0,   11,   15,   19,   22,  -33, 1840,   38,   47,
+   51,  933,  877,   -8,  996, 1260, -212,    0,    0,   -8,
+ 1840, 1840, 1840, 1840, 1840, 1840, 1316,    0, 1840, 1840,
+ 1372,   -8,   -8,   -8,   -8, 1840, -193,    0,  273, 3713,
+  -67,  -55,    0,    0,  -26,   72,   57,   59,    0,    3,
+    0, -137,    0, -130,    0,    0,    0,    0,    0, 1840,
+   96, 1840, 1871,    3, -137,    0,    0,    0,    0,    0,
+    0,   97, 3713,   99, 1431,  877,    0, 1871,    0,  -67,
+   59,    0, 1840,    0,  106,    0, 1871,  -25,   27,   52,
+ 1840,    0,   59,   98,   98,   98,  -85,  -85,   74,  -40,
+   98,   98,    0,  -88,    0,    0,    0,    0, 1871,    3,
+    0, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840,
+ 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840,
+ 1840, 1840,    0,    0,  -34, 1840, 1840, 1840, 1840, 1840,
+ 1840, 1606,    0, 1840,    0,    0,  -51, 1840,  242,    0,
+ 1840, 1089, 1840,    3, 1840, 1840, 1840, 1840,  130, 1665,
+    0,    0,    0,  -30,   44,  126, 1840,   59, 1721, 1777,
+    0,   53,    0, 1840,   79,    0,    0, -244, -244,    0,
+ -244, -244, -127,    0,   54, 1027, 1871,  756,  360,  869,
+ 3713, 3679, 3540, 3764, 1195,  340, 1054,   98,   98, 1840,
+    0, 1840,    0,  134,  -83,   58,  -75,   60,  -71,   62,
+    0,  -18, 3713,    0,    0,  117,    0,  138,    0, 1840,
+    0,    0, -244,    0,  139,    0,  140, -244,  141,  142,
+    0,  145,  273,    0,    0,  149,  136, 1840,    0,    0,
+    0,  -15,    0,   40,    0,   42,    0,  -59, 1840,   68,
+ 1840,   85,   46, 1840,    0,   75,    0,   77,    0,   80,
+    0,    0,    0, 1143,   84,   84,   84,   84, 1840,   84,
+ 1840,  167,    0,    0,    0,    0,   95,    0,  263,   86,
+    0,  172,    0,    0,    0,    0,    0, -193, -193, -177,
+ -177,  175, -193,  159,   84,    0,    0,    0,    0,    0,
+    0,   84,  194,    0,    0,   84,    0, 1665, -193,  256,
+    0, 1840, -193,  191,    0,    0,  196,    0,   84,   84,
+    0, -177,    0,
 };
 short yyrindex[] = {                                      0,
-    0,    0,  220,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  161,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0, 2100, 1930,    0,
+    0, 2740, 2808,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0, 2159, 1989,    0,
-    0, 2799, 2867,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   37,    0,   -9, 3616,
+ 2851, 2895,    0,    0, 2166, 1989,    0,   17,    0,    0,
+    0,  -39,    0,    0,    0,    0,    0,    0,    0, 2225,
+    0,    0, 3367,    0,  112,    0,    0,    0,    0,    0,
+    0,    0, 3635,    0,    0,  215,    0, 3410,  437,  498,
+ 2336,    0,    0,    0, 2052,    0, 3448, 2851,    0,    0,
+ 2225,    0, 2461, 2938, 2976, 3014,  -28,  600, 2504,    0,
+ 3087, 3131,    0,    0,    0,    0,    0,    0, 3486,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,   65,    0,  -25,  193,
- 2910, 2954,    0,    0, 2225, 2048,    0,  333,    0,    0,
-    0,    2,    0,    0,    0,    0,    0,    0,    0, 2284,
-    0,    0, 3575,    0,  257,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0, 3017,    0,    0,  348,
-    0, 3642,  496,  557, 2395,    0,    0,    0, 2111,    0,
- 3695, 2910,    0,    0, 2284,    0, 2520, 3065, 3103, 3190,
-  659, 2997, 2563,    0, 3301, 3354,    0,    0,    0,    0,
-    0,    0, 3741,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0, 2631,    0,    0,
-    0,  331,  880,    0,  348,    0, 2284,    0,  352,   65,
-    0,   65,    0,  164,    0,  164,    0,  338,    0,    0,
-    0,    0,  358,    0,    0, 2674,    0,    0,    0,    0,
-    0,    0, 2718,    0,    0,  -22,   36,    0,   91,  110,
-  -33,    0,    0, 2573, 1267, 1531, 3476, 3521, 3675,    0,
-  -27, 3826, 3794, 1587,   -6, 3392, 3440,    0,    0,    0,
+    0,    0,    0, 2572,    0,    0,    0,  205,  821,    0,
+  215,    0, 2225,    0,  245,    0,    0,    0,    0,  240,
+    0,    0,    0,    0,  272,    0,    0, 2615,    0,    0,
+    0,    0,    0,    0, 2659,    0,    0,    5,   45,    0,
+   49,   61,  -32,    0,    0,  192, 1472, 1528, 3250, 3286,
+ 3645,    0, 2514, 3603, 3559, 3522, 3323, 3174, 3212,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
- 3787,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-  134,    0,    0,    0,    0,    0,    0,  359,    0,    0,
-    0,    0,    0,    0,    0,    0,  155,    0,    0,    0,
+    0,    0, 3675,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   65,    0,    0,    0,    0,  277,    0,    0,
+    0,    0,   66,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,  348,    0,    0,
+    0,    0,    0,  215,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,  349,    0,    0,
-    0,    0,    0,    0,    0, 1953,    0,    0,    0,    0,
-    0,    0,    0,   65,   65,  164,    0,    0,  164,    0,
-   65,    0,    0,    0,    0,    0,    0,    0,    0,  880,
-    0,    0,    0,    0,  368,   65,    0,  164,   65,    0,
-    0,    0,    0,    0,    0,
+  265,    0,    0,    0,    0,    0,    0,    0, 1894,    0,
+    0,    0,    0,    0,    0,    0,    0,   37,   37,  105,
+  105,    0,   37,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  286,   37,  821,
+    0,    0,   37,    0,    0,    0,    0,    0,    0,    0,
+    0,  105,    0,
 };
 short yygindex[] = {                                      0,
-    0,    0,    0,  136,  -29,    0, 4145,  680,  -78,    0,
-    0,    0, -193,  -13, 3266,  519,    0,    0,    0,    0,
-    0,  400,  885,    0,    0,  267, -196,   63,  124,  250,
-  -16, -167,   20,    0,    0,  320,  356,    0,    0,    0,
+    0,    0,    0,   63,  418,    0,  914,  335,  -81,    0,
+    0,    0, -292,  -13, 3885, 2516,    0,    0,    0,    0,
+    0,  321,  530,    0,    0,  203, -150,   -3,   93,  165,
+  -69, -162,  575,    0,    0,  300, -276,    0,    0,    0,
     0,    0,    0,
 };
-#define YYTABLESIZE 4333
+#define YYTABLESIZE 4166
 short yytable[] = {                                      69,
-   62,  280,  274,   62,  105,  214,  183,   64,  170,   20,
-   64,   62,  299,   90,   23,   15,   90,  256,   18,  213,
-  208,  172,   96,   82,  301,   64,   84,   98,  100,  102,
-   90,   90,  124,   15,   83,   90,   18,   83,  303,  125,
-  152,  270,  271,  134,  283,   91,  305,  138,  174,  320,
-  252,   83,   83,  171,  284,  321,   83,  322,  240,   64,
-   57,   83,  117,  118,   27,   90,  189,   92,  191,  126,
-  193,  172,  195,  184,  197,  198,   42,  210,  108,  294,
-  173,  139,  140,  141,  142,  319,   83,    4,    5,    6,
-  238,    7,    8,  109,   42,  202,  203,   27,   23,  110,
-   27,   27,   27,  171,   27,   23,   27,   27,  211,   27,
-   23,   23,   23,  300,   23,  302,  144,  338,  175,  340,
-  150,  151,  257,   27,   57,  258,  304,  176,   27,  205,
-  329,   16,  216,  217,  219,  220,  221,  222,  223,  327,
-  178,   18,  349,   21,  159,  352,   23,  177,   80,   16,
-   17,  182,  180,  185,  199,   27,  243,  244,  245,  246,
-  247,  248,  250,   20,  362,  254,   94,   95,   17,  282,
-  259,  203,  170,  200,   41,  261,  207,  217,  285,   62,
-  209,  217,  170,  212,  277,  291,  293,   27,  170,   27,
-   27,  286,   41,  288,  290,   43,   20,  323,  292,   20,
-   20,   20,  151,   20,  152,   20,   20,   19,   20,  150,
-  151,  328,  298,   15,  152,  306,  150,  151,  307,    2,
-  152,  309,   20,  310,  296,  239,  297,   20,  150,  151,
-  311,  169,   86,   68,  312,  344,   68,   87,   64,   64,
-   64,   64,  150,  151,   90,   90,   90,   90,  314,  316,
-   68,   68,   47,   90,   20,   47,   47,   47,  350,   47,
-  104,   47,   47,   64,   47,   83,   83,   83,   83,   90,
-   90,  315,   90,   90,   83,  150,  151,  317,   47,  324,
-   83,   83,  318,   47,  203,   68,   20,  325,   20,   20,
-   83,   83,  330,   83,   83,   83,   83,   83,   83,  331,
-  150,  151,  150,  151,  261,  150,  151,  150,  151,  332,
-   47,  150,  151,  150,  151,  150,  151,  150,  151,  343,
-   27,   27,   27,   27,   27,   27,  345,   27,   27,   27,
-   27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
-  346,   69,   47,   27,   27,   47,   27,   27,   27,   27,
-   27,  150,  151,  150,  151,   27,   27,   27,   27,   27,
-   27,  351,  153,   27,  150,  151,  353,  355,  154,  155,
-  156,  157,   27,   65,   27,   27,  364,  150,  151,   57,
-  156,  158,  160,  161,  162,  163,  164,  165,  155,  153,
-  166,   65,   40,  167,  168,  169,   38,  165,  156,   43,
-  166,  150,  151,  167,  168,  169,  166,   40,   38,  167,
-  168,  169,   77,  218,  188,  150,  151,  360,  170,   20,
-   20,   20,   20,   20,   20,   65,   20,   20,   20,   20,
-   20,   20,   20,   20,   20,   20,   20,   20,   20,  150,
-  151,  342,   20,   20,  273,   20,   20,   20,   20,   20,
-  152,    0,    0,    0,   20,   20,   20,   20,   20,   20,
-    0,    0,   20,  170,   68,   68,   68,   68,    0,    0,
-    0,   20,    0,   20,   20,   47,   47,   47,   47,   47,
-   47,  255,   47,   47,   47,    0,    0,    0,   47,   68,
-   68,   47,   47,   47,   47,  152,    0,    0,   47,   47,
-    0,   47,   47,   47,   47,   47,    0,    0,    0,  170,
-   47,   47,   47,   47,   47,   47,    0,    0,   47,    0,
-    0,    0,  357,    0,  170,    0,    0,   47,  167,   47,
-   47,  167,  167,  167,    0,  167,  151,  167,  167,  151,
-  167,  152,    0,   89,   89,  264,    0,  267,  146,  147,
-  148,  149,    0,  151,  151,  106,  152,    0,  151,  167,
-    0,  114,   89,  122,    0,    0,    0,    0,   89,    0,
-    0,    0,    0,  150,  151,    0,    0,    0,    0,    0,
-   89,   89,   89,   89,    0,    0,  151,    0,  151,  168,
-    0,    0,  168,  168,  168,    0,  168,  110,  168,  168,
-  110,  168,    0,    0,   65,   65,   65,   65,    0,    0,
-    0,    0,    0,    0,  110,  110,  156,  157,  151,  110,
-  168,  167,    4,    5,    6,    0,    7,    8,  114,   65,
-   65,    0,  164,  165,    0,    0,  166,    0,    0,  167,
-  168,  169,    0,    0,    0,    0,    0,    0,   52,  110,
-    0,   62,   64,   50,    0,   57,    0,   65,   60,  154,
-   59,  156,  157,    4,    5,    6,    0,    7,    8,    0,
-    0,    0,    0,    0,   58,    0,    0,  164,  165,   63,
-    0,  166,  168,    0,  167,  168,  169,  241,    0,  347,
-  348,    0,    0,    0,    0,    0,  354,    0,    0,  100,
-    0,    0,  100,    0,    0,    0,   61,  156,  157,    0,
-    0,  361,    0,    0,  363,  275,  100,  100,    0,    0,
-    0,  100,    0,    0,  165,    0,    0,  166,    0,    0,
-  167,  168,  169,    0,    0,    0,    0,    0,   23,  165,
-    0,   53,  166,    0,    0,  167,  168,  169,    0,    0,
-    0,  100,  167,  167,  167,  167,  167,    0,  167,  167,
-  167,    0,    0,    0,  167,    0,    0,  151,  151,  151,
-  151,    0,    0,    0,    0,  167,  151,  167,  167,  167,
-  167,  167,  151,  151,  151,  151,  167,  167,  167,  167,
-  167,  167,  151,  151,  167,  151,  151,  151,  151,  151,
-  151,  151,    0,  167,  151,  167,  167,  151,  151,  151,
-    0,    0,    0,  168,  168,  168,  168,  168,    0,  168,
-  168,  168,    0,    0,    0,  168,    0,    0,  110,  110,
-  110,  110,    0,    0,    0,    0,  168,  110,  168,  168,
-  168,  168,  168,  110,  110,  110,  110,  168,  168,  168,
-  168,  168,  168,  110,  110,  168,  110,  110,  110,  110,
-  110,  110,  110,    0,  168,  110,  168,  168,  110,  110,
-  110,   22,   24,   25,   26,   27,   28,    0,   29,   30,
-   31,    0,    0,    0,   32,    0,    0,   33,   34,   35,
-   36,    0,    0,    0,   37,   38,    0,   39,   40,   41,
-   42,   43,    0,    0,    0,  170,   44,   45,   46,   47,
-   48,   49,   47,    0,   51,   47,   47,   47,    0,   47,
-    0,   47,   47,   54,   47,   55,   56,  115,    0,    0,
-  100,  100,  100,  100,    0,  127,    0,  152,   47,  100,
-    0,    0,    0,   47,    0,  100,  100,  100,  100,    0,
-    0,    0,    0,    0,    0,  100,  100,    0,  100,  100,
-  100,  100,  100,  100,  100,    0,    0,  100,   52,    0,
-   47,   62,   64,   50,  115,   57,    0,   65,   60,    0,
-   59,    0,    0,    0,    0,    0,    0,    0,  334,  335,
-  336,    0,    0,    0,  339,    0,  341,    0,    0,   63,
-    0,  206,   47,    0,    0,   47,    0,    0,    0,  115,
+  205,   62,   62,  179,  206,  166,  101,  244,   60,  285,
+  269,   60,   96,   20,  200,   96,   23,  287,  248,   53,
+  180,  289,  291,  168,   82,  303,   60,   62,  335,   96,
+   96,   15,  120,  306,   96,  170,   25,  148,   83,  266,
+   84,  330,  331,  130,  121,   18,  337,  134,   92,   15,
+   96,  203,  146,  147,   97,  167,  232,   61,   98,  353,
+   60,   99,  345,   18,   96,  168,  348,  169,   18,   25,
+   21,   23,   25,   25,   25,   61,   25,  104,   25,   25,
+  304,   25,  305,   53,  140,   38,  105,  270,  230,   16,
+  106,  194,  195,   94,   95,   25,  171,  167,  332,  333,
+   25,   17,  174,   38,   20,   37,   39,   16,  246,   61,
+  202,  172,  280,  251,   23,  173,  286,  302,  288,   17,
+  290,  312,  176,   37,   15,   23,  178,   25,  208,  209,
+  211,  212,  213,  214,  215,  181,  191,   20,  311,  192,
+   20,   20,   20,  310,   20,  199,   20,   20,  322,   20,
+   80,  201,  235,  236,  237,  238,  239,  240,  242,   25,
+    2,   25,   25,   20,  204,   62,  271,  195,   20,  279,
+  147,  253,  209,  284,  209,  292,  263,  277,  293,  295,
+  296,  297,  298,  272,  299,  274,  276,  326,  166,  300,
+  278,  347,  308,   43,  301,   20,   43,   43,   43,  313,
+   43,  314,   43,   43,  315,   43,  317,  325,  146,  147,
+  327,   19,  328,  146,  147,  336,  282,  338,  283,   43,
+  148,  146,  147,  231,   43,  146,  147,   20,  165,   20,
+   20,  349,   84,  342,   53,   84,  350,  146,  147,   60,
+   60,   60,   60,   96,   96,   96,   96,  340,   86,   84,
+   84,   43,   96,   87,   84,  151,  146,  147,   96,   96,
+   96,   96,  100,  149,   60,  307,  146,  147,   96,   96,
+  195,   96,   96,   96,   96,   96,   96,   96,  146,  147,
+   96,  146,  147,   43,   84,   36,   43,  253,   61,   61,
+   61,   61,   25,   25,   25,   25,   25,   25,   34,   25,
+   25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+   25,   25,  152,   61,   61,   25,   25,   39,   25,   25,
+   25,   25,   25,   36,   69,  155,   34,   25,   25,   25,
+   25,   25,   25,   77,  344,   25,  146,  147,  146,  147,
+  146,  147,  146,  147,   25,  210,   25,   25,  146,  147,
+  146,  147,  260,  166,  146,  147,  146,  147,  146,  147,
+   20,   20,   20,   20,   20,   20,  247,   20,   20,   20,
+   20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
+  346,  146,  147,   20,   20,  148,   20,   20,   20,   20,
+   20,  146,  147,  324,  184,   20,   20,   20,   20,   20,
+   20,    0,    0,   20,    0,    0,  162,    0,    0,  163,
+  164,  165,   20,    0,   20,   20,   43,   43,   43,   43,
+   43,   43,    0,   43,   43,   43,    0,    0,    0,   43,
+  166,    0,   43,   43,   43,   43,    0,    0,    0,   43,
+   43,    0,   43,   43,   43,   43,   43,    0,    0,    0,
+  166,   43,   43,   43,   43,   43,   43,    0,    0,   43,
+    0,    0,  148,   84,   84,   84,   84,    0,   43,  163,
+   43,   43,  163,  163,  163,    0,  163,  147,  163,  163,
+  147,  163,  148,    0,    0,    0,    0,    0,   84,   84,
+    0,   84,    0,    0,  147,  147,    0,    0,    0,  147,
+  163,    4,    5,    6,    0,    7,    8,    4,    5,    6,
+    0,    7,    8,  185,  186,  187,  188,  189,  190,    0,
+    0,    4,    5,    6,    0,    7,    8,  147,    0,  147,
+  164,    0,    0,  164,  164,  164,    0,  164,  106,  164,
+  164,  106,  164,  149,  142,  143,  144,  145,    0,  150,
+  151,  152,  153,    0,    0,  106,  106,    0,    0,  147,
+  106,  164,  163,  156,  157,  158,  159,  160,  161,  146,
+  147,  162,  111,    0,  163,  164,  165,    0,    0,    0,
+  123,    0,    0,    0,    0,    0,    0,    0,    0,   52,
+  106,    0,   62,   64,   50,    0,   57,    0,   65,   60,
+   91,   59,    0,    0,    0,    0,    0,    0,  268,    0,
+    0,    0,    0,    0,    0,   58,    0,  113,  114,  111,
+   63,    0,    0,  164,  122,    0,  150,  151,  152,  153,
+  319,  320,  321,    0,  323,    0,  135,  136,  137,  138,
+   97,    0,  198,   97,  160,  161,    0,   61,  162,    0,
+  111,  163,  164,  165,    0,    0,    0,   97,   97,  339,
+    0,    0,   97,    0,    0,  161,  341,    0,  162,    0,
+  343,  163,  164,  165,    0,    0,    0,    0,    0,   23,
+  197,    0,   53,  351,  352,    0,    0,    0,    0,    0,
+    0,    0,   97,  163,  163,  163,  163,  163,    0,  163,
+  163,  163,    0,    0,    0,  163,    0,  111,  147,  147,
+  147,  147,  111,    0,    0,    0,  163,  147,  163,  163,
+  163,  163,  163,  147,  147,  147,  147,  163,  163,  163,
+  163,  163,  163,  147,  147,  163,  147,  147,  147,  147,
+  147,  147,  147,    0,  163,  147,  163,  163,  147,  147,
+  147,    0,    0,    0,  164,  164,  164,  164,  164,    0,
+  164,  164,  164,    0,    0,    0,  164,    0,    0,  106,
+  106,  106,  106,    0,    0,    0,    0,  164,  106,  164,
+  164,  164,  164,  164,  106,  106,  106,  106,  164,  164,
+  164,  164,  164,  164,  106,  106,  164,  106,  106,  106,
+  106,  106,  106,  106,    0,  164,  106,  164,  164,  106,
+  106,  106,   22,   24,   25,   26,   27,   28,    0,   29,
+   30,   31,    0,    0,    0,   32,    0,    0,   33,   34,
+   35,   36,    0,    0,    0,   37,   38,    0,   39,   40,
+   41,   42,   43,    0,    0,    0,  166,   44,   45,   46,
+   47,   48,   49,   43,    0,   51,   43,   43,   43,    0,
+   43,    0,   43,   43,   54,   43,   55,   56,    0,    0,
+    0,   97,   97,   97,   97,    0,    0,    0,  148,   43,
+   97,    0,    0,    0,   43,    0,   97,   97,   97,   97,
+    0,    0,    0,    0,    0,    0,   97,   97,    0,   97,
+   97,   97,   97,   97,   97,   97,    0,    0,   97,   52,
+    0,   43,   62,   64,   50,    0,   57,    0,   65,   60,
+    0,   59,    0,    0,    0,    0,   67,    0,    0,    0,
+   81,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+   63,    0,    0,   43,    0,    0,   43,    0,    0,    0,
+    0,    0,    0,    0,    0,  107,    0,    0,  116,  166,
+    0,    0,    0,    0,    0,   52,    0,   61,   62,   64,
+   50,    0,   57,    0,   65,   60,    0,   59,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  356,    0,   52,    0,   61,   62,   64,   50,
-  358,   57,  359,   65,   60,    0,   59,    0,    0,    0,
-    0,    0,    0,  365,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,   63,    0,    0,   23,    0,
-    0,   53,    0,    0,    0,    0,  115,    0,    0,    0,
-    0,  115,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   61,    0,    0,    0,    0,   52,    0,    0,
-   62,   64,   50,    0,   57,    0,   65,   60,    0,   59,
-    0,  154,  155,  156,  157,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,   23,    0,    0,   53,   63,  164,
-  165,    0,    0,  166,    0,    0,  167,  168,  169,    0,
-    0,    0,    0,    0,    0,   47,   47,   47,   47,   47,
-   47,    0,   47,   47,   47,   61,    0,    0,   47,    0,
-    0,   47,   47,   47,   47,    0,    0,    0,   47,   47,
-    0,   47,   47,   47,   47,   47,    0,    0,    0,    0,
-   47,   47,   47,   47,   47,   47,    0,   23,   47,    0,
-   53,    0,  170,    0,    0,    0,  333,   47,    0,   47,
-   47,    0,  113,   25,   26,   27,   28,   87,   29,   30,
-   31,    0,    0,    0,   32,    0,    0,    0,  159,    0,
-    0,    0,    0,    0,  152,   38,    0,   39,   40,   41,
+    0,  148,    0,  175,    0,    0,   63,    0,    0,   23,
+    0,    0,   53,    0,    0,    0,    0,  183,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   61,    0,    0,    0,    0,   52,    0,
+    0,   62,   64,   50,    0,   57,    0,   65,   60,    0,
+   59,    0,  150,    0,  152,  153,    0,    0,    0,    0,
+    0,    0,    0,  207,    0,   23,    0,    0,   53,   63,
+  160,  161,    0,    0,  162,    0,    0,  163,  164,  165,
+    0,    0,    0,    0,    0,    0,   43,   43,   43,   43,
+   43,   43,    0,   43,   43,   43,   61,    0,    0,   43,
+  245,    0,   43,   43,   43,   43,    0,  252,    0,   43,
+   43,    0,   43,   43,   43,   43,   43,    0,    0,    0,
+    0,   43,   43,   43,   43,   43,   43,  166,   23,   43,
+    0,   53,    0,    0,    0,    0,    0,    0,   43,  249,
+   43,   43,  250,  109,   25,   26,   27,   28,   87,   29,
+   30,   31,    0,    0,  166,   32,    0,    0,    0,  148,
+    0,  155,    0,    0,    0,    0,   38,  152,   39,   40,
+   41,   42,   43,    0,    0,    0,    0,   44,   45,   46,
+   47,   48,   49,    0,  161,   51,  148,  162,    0,  166,
+  163,  164,  165,  316,   54,    0,   55,   56,    0,   24,
+   25,   26,   27,   28,    0,   29,   30,   31,    0,    0,
+    0,   32,    0,    0,    0,  155,    0,    0,    0,    0,
+    0,  148,   38,    0,   39,   40,   41,   42,   43,    0,
+    0,    0,    0,   44,   45,   46,   47,   48,   49,    0,
+    0,   51,    0,  166,    0,    0,    0,    0,    0,    0,
+   54,    0,   55,   56,    0,    0,    0,    0,    0,    0,
+    0,    0,  115,   25,   26,   27,   28,    0,   29,   30,
+   31,    0,    0,    0,   32,  148,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,   38,    0,   39,   40,   41,
+   42,   43,    0,    0,    0,  166,   44,   45,   46,   47,
+   48,   49,   52,    0,   51,   62,   64,   50,    0,   57,
+    0,   65,   60,   54,   59,   55,   56,    0,    0,    0,
+    0,    0,    0,  150,  151,  152,  153,  148,  119,    0,
+    0,    0,    0,   63,    0,    0,    0,  156,  157,  158,
+  159,  160,  161,    0,    0,  162,    0,    0,  163,  164,
+  165,    0,  152,  153,    0,    0,    0,    0,   52,    0,
+   61,   62,   64,   50,    0,   57,  129,   65,   60,  161,
+   59,    0,  162,    0,    0,  163,  164,  165,    0,  149,
+    0,    0,    0,    0,    0,  150,  151,  152,  153,   63,
+    0,    0,    0,    0,    0,   53,    0,    0,  154,  156,
+  157,  158,  159,  160,  161,    0,    0,  162,    0,    0,
+  163,  164,  165,    0,   52,    0,   61,   62,   64,   50,
+    0,   57,    0,   65,   60,    0,   59,    0,    0,    0,
+    0,    0,    0,  149,    0,    0,    0,    0,    0,  150,
+  151,  152,  153,    0,    0,   63,    0,    0,    0,    0,
+    0,   53,  154,  156,  157,  158,  159,  160,  161,    0,
+    0,  162,    0,    0,  163,  164,  165,    0,    0,    0,
+    0,    0,   61,   52,  133,    0,   62,   64,   50,    0,
+   57,  193,   65,   60,    0,   59,    0,    0,    0,    0,
+    0,  150,  151,  152,  153,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   63,    0,    0,   53,  159,  160,
+  161,    0,    0,  162,    0,    0,  163,  164,  165,    0,
+    0,    0,   80,    0,    0,   80,   24,   25,   26,   27,
+   28,   61,   29,   30,   31,    0,    0,    0,   32,   80,
+   80,    0,    0,    0,   80,    0,    0,    0,    0,   38,
+    0,   39,   40,   41,   42,   43,    0,    0,    0,    0,
+   44,   45,   46,   47,   48,   49,   53,    0,   51,    0,
+    0,    0,    0,    0,   80,    0,    0,   54,   81,   55,
+   56,   81,   24,   25,   26,   27,   28,    0,   29,   30,
+   31,    0,    0,    0,   32,   81,   81,    0,    0,    0,
+   81,    0,    0,    0,    0,   38,    0,   39,   40,   41,
    42,   43,    0,    0,    0,    0,   44,   45,   46,   47,
-   48,   49,    0,    0,   51,    0,  170,    0,    0,    0,
-    0,    0,    0,   54,    0,   55,   56,    0,   24,   25,
-   26,   27,   28,    0,   29,   30,   31,    0,    0,    0,
-   32,  295,    0,    0,    0,    0,  159,    0,  152,    0,
-    0,   38,    0,   39,   40,   41,   42,   43,    0,    0,
-    0,    0,   44,   45,   46,   47,   48,   49,    0,    0,
-   51,    0,    0,    0,  170,    0,    0,    0,    0,   54,
-    0,   55,   56,    0,    0,    0,    0,   84,    0,    0,
-   84,  119,   25,   26,   27,   28,    0,   29,   30,   31,
-    0,    0,    0,   32,   84,   84,  152,    0,    0,   84,
-    0,    0,    0,    0,   38,    0,   39,   40,   41,   42,
-   43,    0,    0,    0,    0,   44,   45,   46,   47,   48,
-   49,   52,    0,   51,   62,   64,   50,    0,   57,   84,
-   65,   60,   54,   59,   55,   56,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,  123,  154,  155,
-  156,  157,   63,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  160,  161,  162,  163,  164,  165,    0,    0,
-  166,    0,    0,  167,  168,  169,    0,   52,    0,   61,
-   62,   64,   50,    0,   57,  133,   65,   60,    0,   59,
-    0,    0,    0,    0,    0,    0,  153,    0,    0,    0,
-    0,    0,  154,  155,  156,  157,    0,    0,   63,    0,
-    0,    0,    0,    0,   53,  158,  160,  161,  162,  163,
-  164,  165,    0,    0,  166,    0,    0,  167,  168,  169,
-    0,    0,    0,   52,    0,   61,   62,   64,   50,    0,
-   57,    0,   65,   60,    0,   59,    0,    0,    0,    0,
-    0,    0,    0,    0,  153,    0,    0,    0,    0,    0,
-  154,  155,  156,  157,   63,    0,    0,    0,    0,    0,
-   53,    0,    0,  158,  160,  161,  162,  163,  164,  165,
-    0,    0,  166,    0,    0,  167,  168,  169,    0,    0,
-    0,   61,   52,  137,    0,   62,   64,   50,    0,   57,
-  201,   65,   60,    0,   59,    0,    0,    0,   84,   84,
-   84,   84,    0,    0,    0,    0,    0,   84,    0,    0,
-    0,    0,    0,   63,   84,    0,   53,    0,    0,    0,
-    0,    0,    0,   84,   84,    0,   84,   84,   84,   84,
-   84,   85,    0,    0,   85,   24,   25,   26,   27,   28,
-   61,   29,   30,   31,    0,    0,    0,   32,   85,   85,
-    0,    0,    0,   85,    0,    0,    0,    0,   38,    0,
-   39,   40,   41,   42,   43,    0,    0,    0,    0,   44,
-   45,   46,   47,   48,   49,   53,    0,   51,    0,    0,
-    0,    0,    0,   85,    0,    0,   54,   86,   55,   56,
-   86,   24,   25,   26,   27,   28,    0,   29,   30,   31,
-    0,    0,    0,   32,   86,   86,    0,    0,    0,   86,
-    0,    0,    0,    0,   38,    0,   39,   40,   41,   42,
-   43,    0,    0,    0,    0,   44,   45,   46,   47,   48,
-   49,    0,    0,   51,    0,    0,    0,    0,    0,   86,
-    0,    0,   54,    0,   55,   56,    0,   24,   25,   26,
-   27,   28,    0,   29,   30,   31,    0,   52,    0,   32,
-   62,   64,   50,    0,   57,  249,   65,   60,    0,   59,
+   48,   49,    0,    0,   51,    0,    0,    0,    0,    0,
+   81,    0,    0,   54,    0,   55,   56,    0,   24,   25,
+   26,   27,   28,    0,   29,   30,   31,    0,   52,    0,
+   32,   62,   64,   50,    0,   57,  241,   65,   60,    0,
+   59,   38,    0,   39,   40,   41,   42,   43,    0,    0,
+    0,    0,   44,   45,   46,   47,   48,   49,    0,   63,
+   51,    0,    0,    0,    0,    0,    0,    0,    0,   54,
+    0,   55,   56,    0,    0,    0,    0,   24,   25,   26,
+   27,   28,    0,   29,   30,   31,   61,   52,    0,   32,
+   62,   64,   50,    0,   57,    0,   65,   60,    0,   59,
    38,    0,   39,   40,   41,   42,   43,    0,    0,    0,
     0,   44,   45,   46,   47,   48,   49,    0,   63,   51,
-    0,    0,    0,    0,    0,    0,    0,    0,   54,    0,
-   55,   56,    0,    0,    0,    0,   24,   25,   26,   27,
-   28,    0,   29,   30,   31,   61,   52,    0,   32,   62,
-   64,   50,    0,   57,    0,   65,   60,    0,   59,   38,
-    0,   39,   40,   41,   42,   43,    0,    0,    0,    0,
-   44,   45,   46,   47,   48,   49,    0,   63,   51,    0,
-   53,    0,    0,    0,    0,    0,    0,   54,    0,   55,
-   56,    0,   85,   85,   85,   85,    0,    0,    0,    0,
-    0,   85,   52,    0,   61,   62,   64,   50,    0,   57,
-  287,   65,   60,    0,   59,    0,    0,   85,   85,    0,
-   85,   85,   85,   85,   85,    0,    0,    0,    0,    0,
-    0,    0,    0,   63,    0,    0,    0,    0,    0,   53,
-    0,    0,    0,    0,    0,    0,    0,    0,   86,   86,
-   86,   86,    0,    0,    0,    0,    0,   86,   52,    0,
-   61,   62,   64,   50,    0,   57,  289,   65,   60,    0,
-   59,    0,    0,   86,   86,    0,   86,   86,   86,   86,
-   86,    0,    0,    0,    0,    0,    0,    0,    0,   63,
-    0,    0,    0,    0,    0,   53,    0,    0,    0,    0,
+    0,   53,    0,    0,    0,    0,    0,    0,   54,    0,
+   55,   56,    0,   80,   80,   80,   80,    0,    0,    0,
+    0,    0,   80,   52,    0,   61,   62,   64,   50,   80,
+   57,  273,   65,   60,    0,   59,    0,    0,   80,   80,
+    0,   80,   80,   80,   80,   80,    0,    0,    0,    0,
+    0,    0,    0,    0,   63,    0,    0,    0,    0,    0,
+   53,    0,    0,    0,    0,    0,    0,    0,    0,   81,
+   81,   81,   81,    0,    0,    0,    0,    0,   81,   52,
+    0,   61,   62,   64,   50,    0,   57,  275,   65,   60,
+    0,   59,    0,    0,   81,   81,    0,   81,   81,   81,
+   81,   81,    0,    0,    0,    0,    0,    0,    0,    0,
+   63,    0,    0,    0,    0,    0,   53,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,   24,   25,   26,   27,   28,   61,   29,   30,   31,
-    0,   52,    0,   32,   62,   64,   50,    0,   57,    0,
-   65,   60,    0,   59,   38,    0,   39,   40,   41,   42,
-   43,    0,    0,    0,    0,   44,   45,   46,   47,   48,
-   49,   53,   63,   51,    0,    0,    0,    0,    0,    0,
-    0,    0,   54,    0,   55,   56,    0,    0,    0,   22,
-   24,   25,   26,   27,   28,    0,   29,   30,   31,   61,
-    0,    0,   32,   91,    0,    0,   91,    0,    0,    0,
-    0,    0,    0,   38,    0,   39,   40,   41,   42,   43,
-   91,   91,    0,    0,   44,   45,   46,   47,   48,   49,
-    0,    0,   51,    0,   53,    0,    0,    0,    0,  144,
-    0,   54,  144,   55,   56,    0,   24,   25,   26,   27,
-   28,    0,   29,   30,   31,   91,  144,  144,   32,    0,
-    0,  144,    0,    0,    0,    0,    0,    0,    0,   38,
-    0,   39,   40,   41,   42,   43,    0,    0,    0,    0,
-   44,   45,   46,   47,   48,   49,    0,    0,   51,  144,
-    0,  144,    0,    0,    0,    0,    0,   54,  127,   55,
-   56,  127,   24,   25,   26,   27,   28,    0,   29,   30,
-   31,    0,    0,    0,   32,  127,  127,    0,    0,    0,
-  127,  144,    0,    0,    0,   38,    0,   39,   40,   41,
+    0,    0,   24,   25,   26,   27,   28,   61,   29,   30,
+   31,    0,   52,    0,   32,   62,   64,   50,    0,   57,
+    0,   65,   60,    0,   59,   38,    0,   39,   40,   41,
    42,   43,    0,    0,    0,    0,   44,   45,   46,   47,
-   48,   49,    0,    0,   51,    0,    0,    0,  127,    0,
-  127,    0,    0,   54,    0,   55,   56,    0,    0,    0,
-    0,  151,    0,    0,  151,   24,   25,   26,   27,   28,
-    0,   29,   30,   31,    0,    0,    0,   32,  151,  151,
-  127,    0,    0,  151,    0,    0,    0,    0,   38,    0,
-   39,   40,   41,   42,   43,    0,    0,    0,    0,   44,
-   45,   46,   47,   48,   49,    0,    0,   51,    0,  137,
-    0,  151,  137,  151,    0,    0,   54,    0,   55,   56,
-    0,    0,    0,    0,    0,    0,  137,  137,    0,    0,
-    0,  137,    0,    0,   91,   91,   91,   91,    0,    0,
-    0,    0,    0,  151,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,   91,
-   91,  137,   91,    0,    0,    0,    0,    0,    0,    0,
-  144,  144,  144,  144,    0,  112,    0,    0,  112,  144,
-    0,    0,    0,    0,    0,  144,  144,  144,  144,    0,
-    0,  137,  112,  112,    0,  144,  144,  112,  144,  144,
-  144,  144,  144,  144,  144,    0,    0,  144,    0,    0,
-  144,  144,  144,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,  112,    0,  112,    0,  127,
-  127,  127,  127,    0,  153,    0,    0,  153,  127,    0,
-    0,    0,    0,    0,  127,  127,  127,  127,    0,    0,
-    0,  153,  153,    0,  127,  127,  153,  127,  127,  127,
-  127,  127,  127,  127,    0,    0,  127,    0,    0,  127,
-  127,  127,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,  153,    0,    0,    0,
-    0,    0,  151,  151,  151,  151,    0,    0,    0,    0,
-    0,  151,    0,    0,    0,    0,    0,  151,  151,  151,
-  151,    0,    0,    0,    0,    0,  153,  151,  151,    0,
-  151,  151,  151,  151,  151,  151,  151,    0,    0,  151,
-    0,    0,  151,  151,  151,    0,    0,    0,    0,    0,
-  137,  137,  137,  137,    0,  154,    0,    0,    0,  137,
-    0,    0,    0,    0,    0,  137,  137,  137,  137,    0,
-    0,    0,  154,  154,    0,  137,  137,  154,  137,  137,
-  137,  137,  137,  137,  137,    0,    0,  137,    0,    0,
-  137,  137,  137,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,  154,    0,  154,    0,    0,
-    0,    0,    0,    0,    0,    0,  112,  112,  112,  112,
-    0,    0,    0,    0,    0,  112,    0,    0,    0,    0,
-    0,  112,  112,  112,  112,    0,    0,  154,    0,    0,
-  170,  112,  112,    0,  112,  112,  112,  112,  112,  112,
-  112,    0,    0,  112,    0,    0,  112,  112,  112,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  152,    0,    0,  153,  153,  153,  153,    0,
-  139,    0,    0,    0,  153,    0,    0,    0,    0,    0,
-  153,  153,  153,  153,    0,    0,    0,  139,  139,    0,
-  153,  153,  139,  153,  153,  153,  153,  153,  153,  153,
-    0,    0,  153,    0,    0,  153,  153,  153,    0,    0,
-    0,    0,    0,  104,    0,    0,  104,    0,    0,    0,
-  139,    0,  139,   88,    0,    0,   88,    0,    0,    0,
-  104,  104,    0,    0,    0,  104,    0,    0,    0,    0,
-   88,   88,    0,    0,    0,   88,    0,    0,    0,    0,
-    0,    0,  139,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,  104,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,   88,  154,  154,  154,  154,
-    0,   66,    0,    0,   66,  154,    0,    0,    0,    0,
-    0,  154,  154,  154,  154,  104,    0,    0,   66,   66,
-    0,  154,  154,   66,  154,  154,  154,  154,  154,  154,
-  154,    0,    0,  154,    0,    0,  154,  154,  154,    0,
-    0,    0,    0,    0,   69,    0,  154,  155,  156,  157,
-    0,    0,    0,   66,    0,    0,    0,    0,    0,    0,
-    0,   69,   69,  163,  164,  165,   69,    0,  166,    0,
-    0,  167,  168,  169,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,   66,    0,    0,    0,    0,  103,    0,
-    0,  103,    0,    0,   69,    0,   69,    0,    0,    0,
-    0,    0,    0,    0,    0,  103,  103,    0,    0,    0,
-  103,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,  139,  139,  139,  139,    0,   69,    0,    0,    0,
-  139,    0,    0,    0,    0,    0,  139,  139,  139,  139,
-  103,    0,    0,    0,    0,    0,  139,  139,    0,  139,
-  139,  139,  139,  139,  139,  139,    0,    0,  139,    0,
-    0,  139,  139,  139,  104,  104,  104,  104,    0,  140,
-  103,    0,  140,  104,   88,   88,   88,   88,    0,  104,
-  104,  104,  104,    0,    0,    0,  140,  140,    0,  104,
-  104,  140,  104,  104,  104,  104,  104,  104,  104,   88,
-   88,  104,   88,    0,  104,  104,  104,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,  140,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   66,   66,   66,   66,    0,  153,    0,    0,
-  153,   66,    0,    0,    0,    0,    0,   66,   66,   66,
-   66,    0,    0,    0,  153,  153,    0,   66,   66,  153,
-   66,   66,   66,   66,   66,   66,   66,    0,    0,   66,
-    0,    0,   66,   66,   66,   69,   69,   69,   69,    0,
-  110,    0,    0,  110,   69,    0,    0,    0,    0,  153,
-   69,   69,   69,   69,    0,    0,    0,  110,  110,    0,
-   69,   69,  110,   69,   69,   69,   69,   69,   69,   69,
-    0,    0,   69,    0,    0,   69,   69,   69,    0,  103,
-  103,  103,  103,    0,  117,    0,    0,  117,  103,    0,
-    0,    0,  110,    0,  103,  103,  103,  103,    0,    0,
-    0,  117,  117,    0,  103,  103,  117,  103,  103,  103,
-  103,  103,  103,  103,    0,    0,  103,    0,    0,  103,
-  103,  103,    0,    0,    0,    0,    0,  101,    0,    0,
-  101,    0,    0,    0,    0,    0,  117,    0,    0,    0,
-    0,    0,    0,    0,  101,  101,    0,  138,    0,  101,
-  138,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-  140,  140,  140,  140,  138,  138,    0,    0,    0,  140,
-    0,    0,    0,    0,    0,  140,  140,  140,  140,  101,
-    0,    0,    0,    0,    0,  140,  140,    0,  140,  140,
-  140,  140,  140,  140,  140,   95,    0,  140,   95,  138,
-  140,  140,  140,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   95,   95,    0,    0,    0,   95,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,  153,  153,
-  153,  153,    0,   96,    0,    0,   96,  153,    0,    0,
-    0,    0,    0,  153,  153,  153,  153,   95,    0,    0,
-   96,   96,    0,  153,  153,   96,  153,  153,  153,  153,
-  153,  153,  153,    0,    0,  153,    0,    0,  153,  153,
-  153,  110,  110,  110,  110,    0,    0,    0,    0,    0,
-  110,    0,    0,    0,    0,   96,  110,  110,  110,  110,
-    0,    0,    0,    0,    0,    0,  110,  110,    0,  110,
-  110,  110,  110,  110,  110,  110,    0,    0,  110,    0,
-    0,  110,  110,  110,    0,  117,  117,  117,  117,    0,
-   97,    0,    0,   97,  117,    0,    0,    0,    0,    0,
-  117,  117,  117,  117,    0,    0,    0,   97,   97,    0,
-  117,  117,   97,  117,  117,  117,  117,  117,  117,  117,
-    0,    0,  117,    0,    0,  117,  117,  117,  101,  101,
-  101,  101,    0,    0,    0,    0,    0,  101,    0,    0,
-    0,    0,   97,  101,  101,  101,  101,    0,  138,  138,
-  138,  138,    0,  101,  101,   93,  101,  101,  101,  101,
-  101,  101,  101,  107,    0,  101,    0,  112,    0,    0,
-  121,    0,    0,  138,  138,    0,    0,  128,  129,  130,
-  131,  132,    0,    0,  135,  136,    0,    0,  170,    0,
-    0,  143,    0,    0,    0,    0,   95,   95,   95,   95,
-    0,   93,    0,    0,   93,   95,    0,    0,    0,    0,
-    0,   95,   95,   95,   95,    0,    0,  186,   93,   93,
-  152,   95,   95,   93,   95,   95,   95,   95,   95,   95,
-   95,    0,    0,    0,   96,   96,   96,   96,    0,    0,
-    0,    0,    0,   96,    0,    0,    0,    0,    0,   96,
-   96,   96,   96,   93,   94,    0,    0,   94,    0,   96,
-   96,    0,   96,   96,   96,   96,   96,   96,   96,    0,
-    0,   94,   94,    0,    0,    0,   94,    0,  224,  225,
-  226,  227,  228,  229,  230,  231,  232,  233,  234,  235,
-  236,  237,   92,    0,    0,   92,    0,    0,    0,    0,
-    0,    0,    0,  251,    0,    0,   94,    0,    0,   92,
-   92,    0,    0,    0,   92,    0,    0,    0,    0,    0,
-    0,   97,   97,   97,   97,    0,    0,    0,    0,    0,
-   97,    0,    0,    0,    0,    0,   97,   97,   97,   97,
-   80,    0,    0,   80,   92,    0,   97,   97,    0,   97,
-   97,   97,   97,   97,   97,   97,    0,   80,   80,    0,
-    0,    0,   80,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,   81,    0,    0,   81,
-    0,    0,    0,  308,  154,  155,  156,  157,    0,    0,
-    0,    0,   80,   81,   81,    0,    0,    0,   81,  161,
-  162,  163,  164,  165,    0,    0,  166,    0,    0,  167,
-  168,  169,    0,    0,    0,    0,    0,    0,    0,    0,
-  326,   82,    0,    0,   82,    0,    0,    0,   81,    0,
-    0,    0,   93,   93,   93,   93,    0,    0,   82,   82,
-    0,   93,    0,   82,    0,    0,    0,   93,   93,   93,
-   93,    0,    0,    0,    0,    0,    0,   93,   93,    0,
-   93,   93,   93,   93,   93,   93,   93,    0,    0,    0,
-    0,    0,    0,   82,    0,  143,    0,    0,  143,    0,
-    0,    0,    0,    0,    0,   94,   94,   94,   94,    0,
-    0,    0,  143,  143,   94,    0,    0,  143,    0,    0,
-   94,   94,   94,   94,    0,    0,    0,    0,    0,    0,
-   94,   94,    0,   94,   94,   94,   94,   94,   94,   94,
-    0,    0,    0,   92,   92,   92,   92,  143,    0,    0,
-    0,    0,   92,    0,    0,    0,    0,    0,   92,   92,
-   92,   92,  142,    0,    0,  142,    0,    0,   92,   92,
-    0,   92,   92,   92,   92,   92,   92,   92,    0,  142,
-  142,    0,    0,    0,  142,    0,    0,    0,    0,    0,
-    0,   80,   80,   80,   80,   79,    0,    0,   79,    0,
-   80,    0,    0,    0,    0,    0,   80,   80,   80,   80,
-    0,    0,   79,   79,  142,  131,   80,   80,  131,   80,
-   80,   80,   80,   80,   80,   80,    0,   81,   81,   81,
-   81,    0,  131,  131,    0,    0,   81,  131,    0,    0,
-    0,    0,   81,   81,   81,   81,    0,   79,    0,    0,
-    0,    0,   81,   81,    0,   81,   81,   81,   81,   81,
-   81,  102,    0,    0,  102,    0,    0,  131,    0,    0,
-    0,    0,   82,   82,   82,   82,    0,    0,  102,  102,
-    0,   82,    0,  102,    0,    0,    0,   82,   82,    0,
-   82,  170,    0,    0,    0,    0,    0,   82,   82,    0,
-   82,   82,   82,   82,   82,   82,    0,   67,    0,    0,
-   67,    0,    0,  102,   87,    0,    0,   87,    0,    0,
-    0,    0,    0,  152,   67,   67,  143,  143,  143,  143,
-    0,   87,   87,    0,    0,  143,   87,    0,    0,    0,
-    0,  143,  143,    0,    0,    0,   89,    0,    0,   89,
-    0,  143,  143,    0,  143,  143,  143,  143,  143,   67,
-    0,    0,    0,   89,   89,    0,   87,    0,   89,    0,
-    0,  159,    0,    0,    0,    0,    0,    0,    0,    0,
+   48,   49,   53,   63,   51,    0,    0,    0,    0,    0,
+    0,    0,    0,   54,    0,   55,   56,    0,    0,    0,
+   22,   24,   25,   26,   27,   28,    0,   29,   30,   31,
+   61,    0,    0,   32,   87,    0,    0,   87,    0,    0,
+    0,    0,    0,    0,   38,    0,   39,   40,   41,   42,
+   43,   87,   87,    0,    0,   44,   45,   46,   47,   48,
+   49,  166,    0,   51,    0,   53,    0,    0,    0,    0,
+  140,    0,   54,  140,   55,   56,    0,   24,   25,   26,
+   27,   28,    0,   29,   30,   31,   87,  140,  140,   32,
+    0,    0,  140,  148,    0,    0,    0,    0,    0,    0,
+   38,    0,   39,   40,   41,   42,   43,    0,    0,    0,
+    0,   44,   45,   46,   47,   48,   49,    0,    0,   51,
+  140,    0,  140,    0,    0,    0,    0,    0,   54,  123,
+   55,   56,  123,   24,   25,   26,   27,   28,    0,   29,
+   30,   31,    0,    0,    0,   32,  123,  123,    0,    0,
+    0,  123,  140,    0,    0,    0,   38,    0,   39,   40,
+   41,   42,   43,    0,    0,    0,    0,   44,   45,   46,
+   47,   48,   49,    0,    0,   51,    0,    0,    0,  123,
+    0,  123,    0,    0,   54,    0,   55,   56,    0,    0,
+    0,    0,  147,    0,    0,  147,   24,   25,   26,   27,
+   28,    0,   29,   30,   31,    0,    0,    0,   32,  147,
+  147,  123,    0,    0,  147,    0,    0,    0,    0,   38,
+    0,   39,   40,   41,   42,   43,    0,    0,    0,    0,
+   44,   45,   46,   47,   48,   49,    0,    0,   51,    0,
+  133,    0,  147,  133,  147,    0,    0,   54,    0,   55,
+   56,    0,    0,    0,    0,    0,    0,  133,  133,  152,
+  153,    0,  133,    0,    0,   87,   87,   87,   87,    0,
+    0,    0,    0,    0,  147,  160,  161,    0,    0,  162,
+    0,    0,  163,  164,  165,    0,    0,    0,    0,    0,
+   87,   87,  133,   87,    0,    0,    0,    0,    0,    0,
+    0,  140,  140,  140,  140,    0,  108,    0,    0,  108,
+  140,    0,    0,    0,    0,    0,  140,  140,  140,  140,
+    0,    0,  133,  108,  108,    0,  140,  140,  108,  140,
+  140,  140,  140,  140,  140,  140,    0,    0,  140,    0,
+    0,  140,  140,  140,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  108,    0,  108,    0,
+  123,  123,  123,  123,    0,  149,    0,    0,  149,  123,
+    0,    0,    0,    0,    0,  123,  123,  123,  123,    0,
+    0,    0,  149,  149,    0,  123,  123,  149,  123,  123,
+  123,  123,  123,  123,  123,    0,    0,  123,    0,    0,
+  123,  123,  123,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  149,    0,    0,
+    0,    0,    0,  147,  147,  147,  147,    0,    0,    0,
+    0,    0,  147,    0,    0,    0,    0,    0,  147,  147,
+  147,  147,    0,    0,    0,    0,    0,  149,  147,  147,
+    0,  147,  147,  147,  147,  147,  147,  147,    0,    0,
+  147,    0,    0,  147,  147,  147,    0,    0,    0,    0,
+    0,  133,  133,  133,  133,    0,  150,    0,    0,    0,
+  133,    0,    0,    0,    0,    0,  133,  133,  133,  133,
+    0,    0,    0,  150,  150,    0,  133,  133,  150,  133,
+  133,  133,  133,  133,  133,  133,    0,    0,  133,    0,
+    0,  133,  133,  133,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  150,    0,  150,    0,
+    0,    0,    0,    0,    0,    0,    0,  108,  108,  108,
+  108,    0,    0,    0,    0,    0,  108,    0,    0,    0,
+    0,    0,  108,  108,  108,  108,    0,    0,  150,    0,
+    0,    0,  108,  108,    0,  108,  108,  108,  108,  108,
+  108,  108,    0,    0,  108,    0,    0,  108,  108,  108,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,  142,  142,  142,  142,    0,   89,  170,
-    0,    0,  142,    0,    0,  159,    0,    0,  142,  142,
-    0,    0,    0,    0,    0,    0,    0,    0,  142,  142,
-    0,  142,  142,  142,  142,  142,   79,   79,   79,   79,
-    0,  152,    0,  170,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,  131,  131,  131,  131,
-    0,   79,   79,    0,    0,  131,    0,    0,    0,    0,
-    0,  131,  131,    0,    0,  152,    0,    0,    0,    0,
-    0,  131,  131,    0,  131,  131,  131,  131,  131,    0,
-    0,    0,    0,    0,    0,    0,    0,  154,  155,  156,
-  157,    0,  102,  102,  102,  102,    0,    0,    0,    0,
-    0,  102,    0,  162,  163,  164,  165,  102,  102,  166,
-    0,    0,  167,  168,  169,    0,    0,  102,  102,    0,
-  102,  102,  102,  102,  102,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,   67,   67,
-   67,   67,    0,    0,    0,   87,   87,   87,   87,    0,
-    0,    0,    0,    0,   87,    0,    0,    0,    0,    0,
-    0,    0,    0,   67,   67,    0,    0,    0,    0,    0,
-   87,   87,    0,   87,   87,   87,   87,   89,   89,   89,
-   89,    0,    0,    0,    0,    0,   89,    0,    0,  153,
-    0,    0,    0,    0,    0,  154,  155,  156,  157,    0,
-    0,    0,   89,   89,    0,   89,   89,   89,  158,  160,
-  161,  162,  163,  164,  165,    0,    0,  166,    0,    0,
-  167,  168,  169,  153,    0,    0,    0,    0,    0,  154,
-  155,  156,  157,    0,    0,    0,    0,   67,    0,    0,
-    0,   81,    0,  160,  161,  162,  163,  164,  165,    0,
-    0,  166,    0,    0,  167,  168,  169,   97,   99,  101,
-  103,    0,    0,    0,    0,    0,  111,    0,    0,  120,
+    0,    0,    0,    0,    0,    0,  149,  149,  149,  149,
+    0,  135,    0,    0,    0,  149,    0,    0,    0,    0,
+    0,  149,  149,  149,  149,    0,    0,    0,  135,  135,
+    0,  149,  149,  135,  149,  149,  149,  149,  149,  149,
+  149,    0,    0,  149,    0,    0,  149,  149,  149,    0,
+   89,   89,    0,    0,  100,    0,    0,  100,    0,    0,
+    0,  135,  102,  135,   86,    0,    0,   86,  110,   89,
+  118,  100,  100,    0,    0,   89,  100,    0,    0,    0,
+    0,   86,   86,    0,    0,    0,   86,   89,   89,   89,
+   89,    0,    0,  135,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  100,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   86,  150,  150,  150,
+  150,    0,   62,    0,    0,   62,  150,    0,    0,    0,
+    0,  110,  150,  150,  150,  150,  100,    0,    0,   62,
+   62,    0,  150,  150,   62,  150,  150,  150,  150,  150,
+  150,  150,    0,    0,  150,    0,    0,  150,  150,  150,
+    0,    0,    0,    0,    0,   65,    0,    0,    0,    0,
+    0,    0,    0,    0,   62,    0,    0,    0,    0,    0,
+    0,    0,   65,   65,    0,    0,    0,   65,    0,    0,
+  233,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   62,    0,    0,    0,    0,   99,
+    0,    0,   99,    0,  261,   65,    0,   65,    0,    0,
+    0,    0,    0,    0,    0,    0,   99,   99,    0,    0,
+    0,   99,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  135,  135,  135,  135,    0,   65,    0,    0,
+    0,  135,    0,    0,    0,    0,    0,  135,  135,  135,
+  135,   99,    0,    0,    0,    0,    0,  135,  135,    0,
+  135,  135,  135,  135,  135,  135,  135,    0,    0,  135,
+    0,    0,  135,  135,  135,  100,  100,  100,  100,    0,
+  136,   99,    0,  136,  100,   86,   86,   86,   86,    0,
+  100,  100,  100,  100,   86,    0,    0,  136,  136,    0,
+  100,  100,  136,  100,  100,  100,  100,  100,  100,  100,
+   86,   86,  100,   86,   86,  100,  100,  100,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  136,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   62,   62,   62,   62,    0,  149,    0,
+    0,  149,   62,    0,    0,    0,    0,    0,   62,   62,
+   62,   62,    0,    0,    0,  149,  149,    0,   62,   62,
+  149,   62,   62,   62,   62,   62,   62,   62,    0,    0,
+   62,    0,    0,   62,   62,   62,   65,   65,   65,   65,
+    0,  106,    0,    0,  106,   65,    0,    0,    0,    0,
+  149,   65,   65,   65,   65,    0,    0,    0,  106,  106,
+    0,   65,   65,  106,   65,   65,   65,   65,   65,   65,
+   65,    0,    0,   65,    0,    0,   65,   65,   65,    0,
+   99,   99,   99,   99,    0,  113,    0,    0,  113,   99,
+    0,    0,    0,  106,    0,   99,   99,   99,   99,    0,
+    0,    0,  113,  113,    0,   99,   99,  113,   99,   99,
+   99,   99,   99,   99,   99,    0,    0,   99,    0,    0,
+   99,   99,   99,    0,    0,    0,    0,    0,   91,    0,
+    0,   91,    0,    0,    0,    0,    0,  113,    0,    0,
+    0,    0,    0,    0,    0,   91,   91,    0,    0,    0,
+   91,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  136,  136,  136,  136,    0,   92,    0,    0,   92,
+  136,    0,    0,    0,    0,    0,  136,  136,  136,  136,
+   91,    0,    0,   92,   92,    0,  136,  136,   92,  136,
+  136,  136,  136,  136,  136,  136,    0,    0,  136,    0,
+    0,  136,  136,  136,   93,    0,    0,   93,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   92,    0,
+    0,   93,   93,    0,    0,    0,   93,    0,    0,  149,
+  149,  149,  149,    0,    0,    0,    0,    0,  149,    0,
+    0,    0,    0,    0,  149,  149,  149,  149,    0,    0,
+    0,    0,    0,    0,  149,  149,   93,  149,  149,  149,
+  149,  149,  149,  149,    0,    0,  149,    0,    0,  149,
+  149,  149,  106,  106,  106,  106,    0,   89,    0,    0,
+   89,  106,    0,    0,    0,    0,    0,  106,  106,  106,
+  106,    0,    0,    0,   89,   89,    0,  106,  106,   89,
+  106,  106,  106,  106,  106,  106,  106,    0,    0,  106,
+    0,    0,  106,  106,  106,    0,  113,  113,  113,  113,
+    0,   90,    0,    0,   90,  113,    0,    0,    0,   89,
+    0,  113,  113,  113,  113,    0,    0,    0,   90,   90,
+    0,  113,  113,   90,  113,  113,  113,  113,  113,  113,
+  113,    0,    0,  113,    0,    0,  113,  113,  113,   91,
+   91,   91,   91,    0,   88,    0,    0,   88,   91,    0,
+    0,    0,    0,   90,   91,   91,   91,   91,    0,    0,
+    0,   88,   88,    0,   91,   91,   88,   91,   91,   91,
+   91,   91,   91,   91,    0,    0,    0,   92,   92,   92,
+   92,    0,   76,    0,    0,   76,   92,    0,    0,    0,
+    0,    0,   92,   92,   92,   92,   88,    0,    0,   76,
+   76,    0,   92,   92,   76,   92,   92,   92,   92,   92,
+   92,   92,    0,    0,    0,   93,   93,   93,   93,    0,
+   77,    0,    0,   77,   93,    0,    0,    0,    0,    0,
+   93,   93,   93,   93,   76,    0,    0,   77,   77,    0,
+   93,   93,   77,   93,   93,   93,   93,   93,   93,   93,
+    0,    0,    0,    0,    0,    0,   78,    0,    0,   78,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   77,   78,   78,    0,    0,    0,   78,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   89,   89,
+   89,   89,    0,   79,    0,    0,   79,   89,    0,    0,
+    0,    0,    0,   89,   89,   89,   89,    0,   78,    0,
+   79,   79,    0,   89,   89,   79,   89,   89,   89,   89,
+   89,   89,   89,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   90,   90,   90,   90,    0,  139,    0,    0,
+  139,   90,    0,    0,    0,   79,    0,   90,   90,   90,
+   90,    0,    0,    0,  139,  139,    0,   90,   90,  139,
+   90,   90,   90,   90,   90,   90,   90,    0,    0,    0,
+    0,    0,    0,    0,    0,   88,   88,   88,   88,    0,
+  138,    0,    0,  138,   88,    0,    0,    0,    0,  139,
+   88,   88,   88,   88,    0,    0,    0,  138,  138,    0,
+   88,   88,  138,   88,   88,   88,   88,   88,   88,   88,
+    0,    0,    0,   76,   76,   76,   76,    0,  127,    0,
+    0,  127,   76,    0,    0,    0,    0,    0,   76,   76,
+   76,   76,  138,    0,    0,  127,  127,    0,   76,   76,
+  127,   76,   76,   76,   76,   76,   76,   76,    0,    0,
+    0,   77,   77,   77,   77,    0,   98,    0,    0,   98,
+   77,    0,    0,    0,    0,    0,   77,   77,   77,   77,
+  127,    0,    0,   98,   98,    0,   77,   77,   98,   77,
+   77,   77,   77,   77,   77,    0,    0,   78,   78,   78,
+   78,    0,   82,    0,    0,   82,   78,    0,    0,    0,
+    0,    0,   78,   78,    0,   78,    0,    0,   98,   82,
+   82,    0,   78,   78,   82,   78,   78,   78,   78,   78,
+   78,    0,    0,    0,   79,   79,   79,   79,    0,   83,
+    0,    0,   83,   79,    0,    0,    0,    0,    0,   79,
+   79,    0,    0,    0,   82,    0,   83,   83,    0,   79,
+   79,   83,   79,   79,   79,   79,   79,   79,    0,    0,
+  166,    0,    0,    0,    0,    0,    0,    0,  139,  139,
+  139,  139,    0,   85,    0,    0,   85,  139,    0,    0,
+    0,   83,    0,  139,  139,    0,   64,    0,    0,   64,
+   85,   85,  148,  139,  139,   85,  139,  139,  139,  139,
+  139,    0,    0,   64,   64,  134,    0,    0,  134,    0,
+    0,  138,  138,  138,  138,   75,    0,    0,   75,    0,
+  138,    0,  134,  134,    0,   85,  138,  138,    0,    0,
+    0,    0,   75,   75,    0,    0,  138,  138,   64,  138,
+  138,  138,  138,  138,    0,   63,    0,    0,   63,  127,
+  127,  127,  127,    0,    0,    0,    0,  134,  127,    0,
+    0,    0,   63,   63,  127,  127,  281,   75,    0,    0,
+    0,  155,    0,    0,  127,  127,    0,  127,  127,  127,
+  127,  127,    0,    0,    0,    0,    0,   98,   98,   98,
+   98,    0,    0,    0,    0,    0,   98,   63,    0,  166,
+    0,    0,   98,   98,    0,  155,    0,    0,    0,    0,
+    0,    0,   98,   98,    0,   98,   98,   98,   98,   98,
+    0,    0,    0,   82,   82,   82,   82,    0,    0,    0,
+    0,  148,   82,  166,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   82,   82,
+    0,   82,   82,   82,   82,   82,  150,  151,  152,  153,
+   83,   83,   83,   83,    0,  148,    0,    0,    0,   83,
+    0,  157,  158,  159,  160,  161,    0,    0,  162,    0,
+    0,  163,  164,  165,  166,   83,   83,    0,   83,   83,
+   83,   83,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   85,   85,   85,   85,    0,    0,
+    0,    0,    0,   85,    0,    0,  148,   64,   64,   64,
+   64,    0,    0,    0,    0,    0,    0,    0,    0,   85,
+   85,    0,   85,   85,   85,    0,  134,  134,  134,  134,
+    0,    0,   64,   64,   93,    0,   75,   75,   75,   75,
+    0,    0,  103,    0,    0,    0,  108,    0,    0,  117,
+    0,  134,  134,    0,    0,    0,  124,  125,  126,  127,
+  128,   75,   75,  131,  132,    0,   63,   63,   63,   63,
+  139,    0,    0,    0,    0,    0,    0,    0,    0,  149,
+    0,    0,    0,    0,    0,  150,  151,  152,  153,    0,
+    0,   63,   63,    0,    0,    0,  182,    0,  154,  156,
+  157,  158,  159,  160,  161,    0,    0,  162,    0,    0,
+  163,  164,  165,  149,    0,    0,    0,    0,    0,  150,
+  151,  152,  153,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  154,  156,  157,  158,  159,  160,  161,    0,
+    0,  162,    0,    0,  163,  164,  165,    0,    0,    0,
+    0,    0,    0,  216,  217,  218,  219,  220,  221,  222,
+  223,  224,  225,  226,  227,  228,  229,    0,    0,    0,
+  150,  151,  152,  153,    0,    0,    0,    0,  243,    0,
+    0,    0,    0,    0,    0,    0,  158,  159,  160,  161,
+    0,    0,  162,    0,    0,  163,  164,  165,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,  179,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,  187,    0,
-    0,  190,    0,  192,    0,  194,    0,  196,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    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,
+    0,    0,    0,    0,  294,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,  253,    0,    0,    0,    0,
-    0,    0,  260,
+    0,    0,    0,    0,    0,  309,
 };
 short yycheck[] = {                                      13,
-   36,  198,  196,   36,   40,   93,   85,   41,   91,   59,
-   44,   36,   93,   41,  123,   41,   44,  185,   41,   41,
-   40,   91,   40,  257,   93,   59,  257,   40,   40,   40,
-   58,   59,   46,   59,   41,   63,   59,   44,   93,  257,
-  123,  276,  277,   57,   41,   26,   41,   61,   91,   41,
-   59,   58,   59,  123,   44,   41,   63,   41,   91,   93,
-   59,   59,   43,   44,    0,   93,   96,   40,   98,   50,
-  100,   91,  102,   90,  104,  105,   41,   59,   40,   59,
-  123,   62,   63,   64,   65,  282,   93,  266,  267,  268,
-  123,  270,  271,   40,   59,  109,  110,   33,  123,   40,
-   36,   37,   38,  123,   40,  123,   42,   43,  125,   45,
-  123,  123,  123,   59,  123,   59,  278,  314,  123,  316,
-  297,  298,   41,   59,  123,   44,   59,   40,   64,  110,
-  298,   41,  146,  147,  148,  149,  150,  151,  152,   59,
-   44,    6,  336,    8,   63,  339,  123,   59,  257,   59,
-   41,  257,  260,   40,   40,   91,  170,  171,  172,  173,
-  174,  175,  176,    0,  358,  182,   31,   32,   59,  199,
-  187,  185,   91,   41,   41,  189,   40,  191,   41,   36,
-  125,  195,   91,   91,  198,  125,   91,  123,   91,  125,
-  126,  205,   59,  207,  208,   41,   33,   93,  212,   36,
-   37,   38,  298,   40,  123,   42,   43,  257,   45,  297,
-  298,   93,   40,   59,  123,   59,  297,  298,   41,    0,
-  123,   41,   59,   41,  238,  258,  240,   64,  297,  298,
-   41,  314,  257,   41,  123,   93,   44,  262,  272,  273,
-  274,  275,  297,  298,  272,  273,  274,  275,   40,   40,
-   58,   59,   33,  281,   91,   36,   37,   38,  337,   40,
-  296,   42,   43,  297,   45,  272,  273,  274,  275,  297,
-  298,   41,  300,  301,  281,  297,  298,   41,   59,  293,
-  287,  288,   59,   64,  298,   93,  123,  125,  125,  126,
-  297,  298,  125,  300,  301,  302,  303,  304,  305,  125,
-  297,  298,  297,  298,  318,  297,  298,  297,  298,  125,
-   91,  297,  298,  297,  298,  297,  298,  297,  298,   41,
+   41,   36,   36,   85,   93,   91,   40,   59,   41,   93,
+   41,   44,   41,   59,   40,   44,  123,   93,  181,   59,
+   90,   93,   41,   91,  257,   41,   59,   36,  321,   58,
+   59,   41,   46,   93,   63,   91,    0,  123,   59,  190,
+  257,  318,  319,   57,  257,   41,  323,   61,   40,   59,
+   40,  121,  297,  298,   40,  123,   91,   41,   40,  352,
+   93,   40,  339,   59,   93,   91,  343,  123,    6,   33,
+    8,  123,   36,   37,   38,   59,   40,   40,   42,   43,
+   41,   45,   41,  123,  278,   41,   40,   44,  123,   41,
+   40,  105,  106,   31,   32,   59,  123,  123,  276,  277,
+   64,   41,   44,   59,    0,   41,   41,   59,  178,   93,
+   59,   40,   59,  183,  123,   59,   59,  268,   59,   59,
+   59,  284,  260,   59,   59,  123,  257,   91,  142,  143,
+  144,  145,  146,  147,  148,   40,   40,   33,   93,   41,
+   36,   37,   38,   59,   40,   40,   42,   43,  299,   45,
+  257,  125,  166,  167,  168,  169,  170,  171,  172,  123,
+    0,  125,  126,   59,   91,   36,   41,  181,   64,   91,
+  298,  185,  186,   40,  188,   59,  190,  125,   41,   41,
+   41,   41,   41,  197,   40,  199,  200,   93,   91,   41,
+  204,  342,  125,   33,   59,   91,   36,   37,   38,  125,
+   40,  125,   42,   43,  125,   45,  123,   41,  297,  298,
+  125,  257,   41,  297,  298,   41,  230,   59,  232,   59,
+  123,  297,  298,  258,   64,  297,  298,  123,  314,  125,
+  126,   41,   41,   40,  123,   44,   41,  297,  298,  272,
+  273,  274,  275,  272,  273,  274,  275,  329,  257,   58,
+   59,   91,  281,  262,   63,   41,  297,  298,  287,  288,
+  289,  290,  296,   59,  297,  279,  297,  298,  297,  298,
+  284,  300,  301,  302,  303,  304,  305,  306,  297,  298,
+  309,  297,  298,  123,   93,   41,  126,  301,  272,  273,
+  274,  275,  256,  257,  258,  259,  260,  261,   59,  263,
+  264,  265,  266,  267,  268,  269,  270,  271,  272,  273,
+  274,  275,   41,  297,  298,  279,  280,   41,  282,  283,
+  284,  285,  286,   59,  338,   63,   41,  291,  292,  293,
+  294,  295,  296,   13,  338,  299,  297,  298,  297,  298,
+  297,  298,  297,  298,  308,  143,  310,  311,  297,  298,
+  297,  298,  188,   91,  297,  298,  297,  298,  297,  298,
   256,  257,  258,  259,  260,  261,  125,  263,  264,  265,
   266,  267,  268,  269,  270,  271,  272,  273,  274,  275,
-   41,  355,  123,  279,  280,  126,  282,  283,  284,  285,
-  286,  297,  298,  297,  298,  291,  292,  293,  294,  295,
-  296,   41,  281,  299,  297,  298,   41,   59,  287,  288,
-  289,  290,  308,   41,  310,  311,   41,  297,  298,  123,
-  289,  300,  301,  302,  303,  304,  305,  306,   41,   59,
-  309,   59,   41,  312,  313,  314,   59,  306,   41,   41,
-  309,  297,  298,  312,  313,  314,  309,   59,   41,  312,
-  313,  314,   13,  147,   95,  297,  298,  355,   91,  256,
-  257,  258,  259,  260,  261,   93,  263,  264,  265,  266,
-  267,  268,  269,  270,  271,  272,  273,  274,  275,  297,
-  298,  318,  279,  280,  195,  282,  283,  284,  285,  286,
-  123,   -1,   -1,   -1,  291,  292,  293,  294,  295,  296,
-   -1,   -1,  299,   91,  272,  273,  274,  275,   -1,   -1,
-   -1,  308,   -1,  310,  311,  256,  257,  258,  259,  260,
-  261,  125,  263,  264,  265,   -1,   -1,   -1,  269,  297,
-  298,  272,  273,  274,  275,  123,   -1,   -1,  279,  280,
-   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,   91,
-  291,  292,  293,  294,  295,  296,   -1,   -1,  299,   -1,
-   -1,   -1,  125,   -1,   91,   -1,   -1,  308,   33,  310,
-  311,   36,   37,   38,   -1,   40,   41,   42,   43,   44,
-   45,  123,   -1,   25,   26,  190,   -1,  192,  272,  273,
-  274,  275,   -1,   58,   59,   37,  123,   -1,   63,   64,
-   -1,   43,   44,   45,   -1,   -1,   -1,   -1,   50,   -1,
-   -1,   -1,   -1,  297,  298,   -1,   -1,   -1,   -1,   -1,
-   62,   63,   64,   65,   -1,   -1,   91,   -1,   93,   33,
-   -1,   -1,   36,   37,   38,   -1,   40,   41,   42,   43,
-   44,   45,   -1,   -1,  272,  273,  274,  275,   -1,   -1,
-   -1,   -1,   -1,   -1,   58,   59,  289,  290,  123,   63,
-   64,  126,  266,  267,  268,   -1,  270,  271,  110,  297,
-  298,   -1,  305,  306,   -1,   -1,  309,   -1,   -1,  312,
-  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,   33,   93,
-   -1,   36,   37,   38,   -1,   40,   -1,   42,   43,  287,
-   45,  289,  290,  266,  267,  268,   -1,  270,  271,   -1,
-   -1,   -1,   -1,   -1,   59,   -1,   -1,  305,  306,   64,
-   -1,  309,  126,   -1,  312,  313,  314,  169,   -1,  334,
-  335,   -1,   -1,   -1,   -1,   -1,  341,   -1,   -1,   41,
-   -1,   -1,   44,   -1,   -1,   -1,   91,  289,  290,   -1,
-   -1,  356,   -1,   -1,  359,  197,   58,   59,   -1,   -1,
-   -1,   63,   -1,   -1,  306,   -1,   -1,  309,   -1,   -1,
-  312,  313,  314,   -1,   -1,   -1,   -1,   -1,  123,  306,
-   -1,  126,  309,   -1,   -1,  312,  313,  314,   -1,   -1,
-   -1,   93,  257,  258,  259,  260,  261,   -1,  263,  264,
-  265,   -1,   -1,   -1,  269,   -1,   -1,  272,  273,  274,
-  275,   -1,   -1,   -1,   -1,  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,   -1,  308,  309,  310,  311,  312,  313,  314,
-   -1,   -1,   -1,  257,  258,  259,  260,  261,   -1,  263,
-  264,  265,   -1,   -1,   -1,  269,   -1,   -1,  272,  273,
-  274,  275,   -1,   -1,   -1,   -1,  280,  281,  282,  283,
+  125,  297,  298,  279,  280,  123,  282,  283,  284,  285,
+  286,  297,  298,  301,   95,  291,  292,  293,  294,  295,
+  296,   -1,   -1,  299,   -1,   -1,  309,   -1,   -1,  312,
+  313,  314,  308,   -1,  310,  311,  256,  257,  258,  259,
+  260,  261,   -1,  263,  264,  265,   -1,   -1,   -1,  269,
+   91,   -1,  272,  273,  274,  275,   -1,   -1,   -1,  279,
+  280,   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,
+   91,  291,  292,  293,  294,  295,  296,   -1,   -1,  299,
+   -1,   -1,  123,  272,  273,  274,  275,   -1,  308,   33,
+  310,  311,   36,   37,   38,   -1,   40,   41,   42,   43,
+   44,   45,  123,   -1,   -1,   -1,   -1,   -1,  297,  298,
+   -1,  300,   -1,   -1,   58,   59,   -1,   -1,   -1,   63,
+   64,  266,  267,  268,   -1,  270,  271,  266,  267,  268,
+   -1,  270,  271,   96,   97,   98,   99,  100,  101,   -1,
+   -1,  266,  267,  268,   -1,  270,  271,   91,   -1,   93,
+   33,   -1,   -1,   36,   37,   38,   -1,   40,   41,   42,
+   43,   44,   45,  281,  272,  273,  274,  275,   -1,  287,
+  288,  289,  290,   -1,   -1,   58,   59,   -1,   -1,  123,
+   63,   64,  126,  301,  302,  303,  304,  305,  306,  297,
+  298,  309,   43,   -1,  312,  313,  314,   -1,   -1,   -1,
+   51,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   33,
+   93,   -1,   36,   37,   38,   -1,   40,   -1,   42,   43,
+   26,   45,   -1,   -1,   -1,   -1,   -1,   -1,  191,   -1,
+   -1,   -1,   -1,   -1,   -1,   59,   -1,   43,   44,   90,
+   64,   -1,   -1,  126,   50,   -1,  287,  288,  289,  290,
+  296,  297,  298,   -1,  300,   -1,   62,   63,   64,   65,
+   41,   -1,  113,   44,  305,  306,   -1,   91,  309,   -1,
+  121,  312,  313,  314,   -1,   -1,   -1,   58,   59,  325,
+   -1,   -1,   63,   -1,   -1,  306,  332,   -1,  309,   -1,
+  336,  312,  313,  314,   -1,   -1,   -1,   -1,   -1,  123,
+  106,   -1,  126,  349,  350,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   93,  257,  258,  259,  260,  261,   -1,  263,
+  264,  265,   -1,   -1,   -1,  269,   -1,  178,  272,  273,
+  274,  275,  183,   -1,   -1,   -1,  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,   -1,  308,  309,  310,  311,  312,  313,
-  314,  256,  257,  258,  259,  260,  261,   -1,  263,  264,
-  265,   -1,   -1,   -1,  269,   -1,   -1,  272,  273,  274,
-  275,   -1,   -1,   -1,  279,  280,   -1,  282,  283,  284,
+  314,   -1,   -1,   -1,  257,  258,  259,  260,  261,   -1,
+  263,  264,  265,   -1,   -1,   -1,  269,   -1,   -1,  272,
+  273,  274,  275,   -1,   -1,   -1,   -1,  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,   -1,  308,  309,  310,  311,  312,
+  313,  314,  256,  257,  258,  259,  260,  261,   -1,  263,
+  264,  265,   -1,   -1,   -1,  269,   -1,   -1,  272,  273,
+  274,  275,   -1,   -1,   -1,  279,  280,   -1,  282,  283,
+  284,  285,  286,   -1,   -1,   -1,   91,  291,  292,  293,
+  294,  295,  296,   33,   -1,  299,   36,   37,   38,   -1,
+   40,   -1,   42,   43,  308,   45,  310,  311,   -1,   -1,
+   -1,  272,  273,  274,  275,   -1,   -1,   -1,  123,   59,
+  281,   -1,   -1,   -1,   64,   -1,  287,  288,  289,  290,
+   -1,   -1,   -1,   -1,   -1,   -1,  297,  298,   -1,  300,
+  301,  302,  303,  304,  305,  306,   -1,   -1,  309,   33,
+   -1,   91,   36,   37,   38,   -1,   40,   -1,   42,   43,
+   -1,   45,   -1,   -1,   -1,   -1,   13,   -1,   -1,   -1,
+   17,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   64,   -1,   -1,  123,   -1,   -1,  126,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   42,   -1,   -1,   45,   91,
+   -1,   -1,   -1,   -1,   -1,   33,   -1,   91,   36,   37,
+   38,   -1,   40,   -1,   42,   43,   -1,   45,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  123,   -1,   80,   -1,   -1,   64,   -1,   -1,  123,
+   -1,   -1,  126,   -1,   -1,   -1,   -1,   94,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   91,   -1,   -1,   -1,   -1,   33,   -1,
+   -1,   36,   37,   38,   -1,   40,   -1,   42,   43,   -1,
+   45,   -1,  287,   -1,  289,  290,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  140,   -1,  123,   -1,   -1,  126,   64,
+  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,  257,  258,  259,
+  260,  261,   -1,  263,  264,  265,   91,   -1,   -1,  269,
+  177,   -1,  272,  273,  274,  275,   -1,  184,   -1,  279,
+  280,   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,
+   -1,  291,  292,  293,  294,  295,  296,   91,  123,  299,
+   -1,  126,   -1,   -1,   -1,   -1,   -1,   -1,  308,   41,
+  310,  311,   44,  257,  258,  259,  260,  261,  262,  263,
+  264,  265,   -1,   -1,   91,  269,   -1,   -1,   -1,  123,
+   -1,   63,   -1,   -1,   -1,   -1,  280,  289,  282,  283,
+  284,  285,  286,   -1,   -1,   -1,   -1,  291,  292,  293,
+  294,  295,  296,   -1,  306,  299,  123,  309,   -1,   91,
+  312,  313,  314,   41,  308,   -1,  310,  311,   -1,  257,
+  258,  259,  260,  261,   -1,  263,  264,  265,   -1,   -1,
+   -1,  269,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,
+   -1,  123,  280,   -1,  282,  283,  284,  285,  286,   -1,
+   -1,   -1,   -1,  291,  292,  293,  294,  295,  296,   -1,
+   -1,  299,   -1,   91,   -1,   -1,   -1,   -1,   -1,   -1,
+  308,   -1,  310,  311,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  257,  258,  259,  260,  261,   -1,  263,  264,
+  265,   -1,   -1,   -1,  269,  123,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  280,   -1,  282,  283,  284,
   285,  286,   -1,   -1,   -1,   91,  291,  292,  293,  294,
   295,  296,   33,   -1,  299,   36,   37,   38,   -1,   40,
-   -1,   42,   43,  308,   45,  310,  311,   43,   -1,   -1,
-  272,  273,  274,  275,   -1,   51,   -1,  123,   59,  281,
-   -1,   -1,   -1,   64,   -1,  287,  288,  289,  290,   -1,
-   -1,   -1,   -1,   -1,   -1,  297,  298,   -1,  300,  301,
-  302,  303,  304,  305,  306,   -1,   -1,  309,   33,   -1,
-   91,   36,   37,   38,   90,   40,   -1,   42,   43,   -1,
-   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  309,  310,
-  311,   -1,   -1,   -1,  315,   -1,  317,   -1,   -1,   64,
-   -1,  117,  123,   -1,   -1,  126,   -1,   -1,   -1,  125,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  343,   -1,   33,   -1,   91,   36,   37,   38,
-  351,   40,  353,   42,   43,   -1,   45,   -1,   -1,   -1,
-   -1,   -1,   -1,  364,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   64,   -1,   -1,  123,   -1,
-   -1,  126,   -1,   -1,   -1,   -1,  182,   -1,   -1,   -1,
-   -1,  187,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   91,   -1,   -1,   -1,   -1,   33,   -1,   -1,
-   36,   37,   38,   -1,   40,   -1,   42,   43,   -1,   45,
+   -1,   42,   43,  308,   45,  310,  311,   -1,   -1,   -1,
+   -1,   -1,   -1,  287,  288,  289,  290,  123,   59,   -1,
+   -1,   -1,   -1,   64,   -1,   -1,   -1,  301,  302,  303,
+  304,  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,
+  314,   -1,  289,  290,   -1,   -1,   -1,   -1,   33,   -1,
+   91,   36,   37,   38,   -1,   40,   41,   42,   43,  306,
+   45,   -1,  309,   -1,   -1,  312,  313,  314,   -1,  281,
+   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,   64,
+   -1,   -1,   -1,   -1,   -1,  126,   -1,   -1,  300,  301,
+  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,
+  312,  313,  314,   -1,   33,   -1,   91,   36,   37,   38,
+   -1,   40,   -1,   42,   43,   -1,   45,   -1,   -1,   -1,
+   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,  287,
+  288,  289,  290,   -1,   -1,   64,   -1,   -1,   -1,   -1,
+   -1,  126,  300,  301,  302,  303,  304,  305,  306,   -1,
+   -1,  309,   -1,   -1,  312,  313,  314,   -1,   -1,   -1,
+   -1,   -1,   91,   33,   93,   -1,   36,   37,   38,   -1,
+   40,   41,   42,   43,   -1,   45,   -1,   -1,   -1,   -1,
    -1,  287,  288,  289,  290,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,  123,   -1,   -1,  126,   64,  305,
+   -1,   -1,   -1,   -1,   64,   -1,   -1,  126,  304,  305,
   306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,
-   -1,   -1,   -1,   -1,   -1,  256,  257,  258,  259,  260,
-  261,   -1,  263,  264,  265,   91,   -1,   -1,  269,   -1,
-   -1,  272,  273,  274,  275,   -1,   -1,   -1,  279,  280,
+   -1,   -1,   41,   -1,   -1,   44,  257,  258,  259,  260,
+  261,   91,  263,  264,  265,   -1,   -1,   -1,  269,   58,
+   59,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,  280,
    -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,   -1,
-  291,  292,  293,  294,  295,  296,   -1,  123,  299,   -1,
-  126,   -1,   91,   -1,   -1,   -1,   41,  308,   -1,  310,
-  311,   -1,  257,  258,  259,  260,  261,  262,  263,  264,
-  265,   -1,   -1,   -1,  269,   -1,   -1,   -1,   63,   -1,
-   -1,   -1,   -1,   -1,  123,  280,   -1,  282,  283,  284,
+  291,  292,  293,  294,  295,  296,  126,   -1,  299,   -1,
+   -1,   -1,   -1,   -1,   93,   -1,   -1,  308,   41,  310,
+  311,   44,  257,  258,  259,  260,  261,   -1,  263,  264,
+  265,   -1,   -1,   -1,  269,   58,   59,   -1,   -1,   -1,
+   63,   -1,   -1,   -1,   -1,  280,   -1,  282,  283,  284,
   285,  286,   -1,   -1,   -1,   -1,  291,  292,  293,  294,
-  295,  296,   -1,   -1,  299,   -1,   91,   -1,   -1,   -1,
-   -1,   -1,   -1,  308,   -1,  310,  311,   -1,  257,  258,
-  259,  260,  261,   -1,  263,  264,  265,   -1,   -1,   -1,
-  269,   58,   -1,   -1,   -1,   -1,   63,   -1,  123,   -1,
-   -1,  280,   -1,  282,  283,  284,  285,  286,   -1,   -1,
-   -1,   -1,  291,  292,  293,  294,  295,  296,   -1,   -1,
-  299,   -1,   -1,   -1,   91,   -1,   -1,   -1,   -1,  308,
-   -1,  310,  311,   -1,   -1,   -1,   -1,   41,   -1,   -1,
-   44,  257,  258,  259,  260,  261,   -1,  263,  264,  265,
-   -1,   -1,   -1,  269,   58,   59,  123,   -1,   -1,   63,
-   -1,   -1,   -1,   -1,  280,   -1,  282,  283,  284,  285,
-  286,   -1,   -1,   -1,   -1,  291,  292,  293,  294,  295,
-  296,   33,   -1,  299,   36,   37,   38,   -1,   40,   93,
-   42,   43,  308,   45,  310,  311,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   59,  287,  288,
-  289,  290,   64,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  301,  302,  303,  304,  305,  306,   -1,   -1,
-  309,   -1,   -1,  312,  313,  314,   -1,   33,   -1,   91,
-   36,   37,   38,   -1,   40,   41,   42,   43,   -1,   45,
-   -1,   -1,   -1,   -1,   -1,   -1,  281,   -1,   -1,   -1,
-   -1,   -1,  287,  288,  289,  290,   -1,   -1,   64,   -1,
-   -1,   -1,   -1,   -1,  126,  300,  301,  302,  303,  304,
-  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,
-   -1,   -1,   -1,   33,   -1,   91,   36,   37,   38,   -1,
-   40,   -1,   42,   43,   -1,   45,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,
-  287,  288,  289,  290,   64,   -1,   -1,   -1,   -1,   -1,
-  126,   -1,   -1,  300,  301,  302,  303,  304,  305,  306,
-   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,   -1,
-   -1,   91,   33,   93,   -1,   36,   37,   38,   -1,   40,
-   41,   42,   43,   -1,   45,   -1,   -1,   -1,  272,  273,
-  274,  275,   -1,   -1,   -1,   -1,   -1,  281,   -1,   -1,
-   -1,   -1,   -1,   64,  288,   -1,  126,   -1,   -1,   -1,
-   -1,   -1,   -1,  297,  298,   -1,  300,  301,  302,  303,
-  304,   41,   -1,   -1,   44,  257,  258,  259,  260,  261,
-   91,  263,  264,  265,   -1,   -1,   -1,  269,   58,   59,
-   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,  280,   -1,
-  282,  283,  284,  285,  286,   -1,   -1,   -1,   -1,  291,
-  292,  293,  294,  295,  296,  126,   -1,  299,   -1,   -1,
-   -1,   -1,   -1,   93,   -1,   -1,  308,   41,  310,  311,
-   44,  257,  258,  259,  260,  261,   -1,  263,  264,  265,
-   -1,   -1,   -1,  269,   58,   59,   -1,   -1,   -1,   63,
-   -1,   -1,   -1,   -1,  280,   -1,  282,  283,  284,  285,
-  286,   -1,   -1,   -1,   -1,  291,  292,  293,  294,  295,
-  296,   -1,   -1,  299,   -1,   -1,   -1,   -1,   -1,   93,
-   -1,   -1,  308,   -1,  310,  311,   -1,  257,  258,  259,
-  260,  261,   -1,  263,  264,  265,   -1,   33,   -1,  269,
-   36,   37,   38,   -1,   40,   41,   42,   43,   -1,   45,
+  295,  296,   -1,   -1,  299,   -1,   -1,   -1,   -1,   -1,
+   93,   -1,   -1,  308,   -1,  310,  311,   -1,  257,  258,
+  259,  260,  261,   -1,  263,  264,  265,   -1,   33,   -1,
+  269,   36,   37,   38,   -1,   40,   41,   42,   43,   -1,
+   45,  280,   -1,  282,  283,  284,  285,  286,   -1,   -1,
+   -1,   -1,  291,  292,  293,  294,  295,  296,   -1,   64,
+  299,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  308,
+   -1,  310,  311,   -1,   -1,   -1,   -1,  257,  258,  259,
+  260,  261,   -1,  263,  264,  265,   91,   33,   -1,  269,
+   36,   37,   38,   -1,   40,   -1,   42,   43,   -1,   45,
   280,   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,
    -1,  291,  292,  293,  294,  295,  296,   -1,   64,  299,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  308,   -1,
-  310,  311,   -1,   -1,   -1,   -1,  257,  258,  259,  260,
-  261,   -1,  263,  264,  265,   91,   33,   -1,  269,   36,
-   37,   38,   -1,   40,   -1,   42,   43,   -1,   45,  280,
-   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,   -1,
-  291,  292,  293,  294,  295,  296,   -1,   64,  299,   -1,
-  126,   -1,   -1,   -1,   -1,   -1,   -1,  308,   -1,  310,
-  311,   -1,  272,  273,  274,  275,   -1,   -1,   -1,   -1,
-   -1,  281,   33,   -1,   91,   36,   37,   38,   -1,   40,
-   41,   42,   43,   -1,   45,   -1,   -1,  297,  298,   -1,
-  300,  301,  302,  303,  304,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   64,   -1,   -1,   -1,   -1,   -1,  126,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,  273,
-  274,  275,   -1,   -1,   -1,   -1,   -1,  281,   33,   -1,
-   91,   36,   37,   38,   -1,   40,   41,   42,   43,   -1,
-   45,   -1,   -1,  297,  298,   -1,  300,  301,  302,  303,
-  304,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   64,
-   -1,   -1,   -1,   -1,   -1,  126,   -1,   -1,   -1,   -1,
+   -1,  126,   -1,   -1,   -1,   -1,   -1,   -1,  308,   -1,
+  310,  311,   -1,  272,  273,  274,  275,   -1,   -1,   -1,
+   -1,   -1,  281,   33,   -1,   91,   36,   37,   38,  288,
+   40,   41,   42,   43,   -1,   45,   -1,   -1,  297,  298,
+   -1,  300,  301,  302,  303,  304,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   64,   -1,   -1,   -1,   -1,   -1,
+  126,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,
+  273,  274,  275,   -1,   -1,   -1,   -1,   -1,  281,   33,
+   -1,   91,   36,   37,   38,   -1,   40,   41,   42,   43,
+   -1,   45,   -1,   -1,  297,  298,   -1,  300,  301,  302,
+  303,  304,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   64,   -1,   -1,   -1,   -1,   -1,  126,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,  257,  258,  259,  260,  261,   91,  263,  264,  265,
-   -1,   33,   -1,  269,   36,   37,   38,   -1,   40,   -1,
-   42,   43,   -1,   45,  280,   -1,  282,  283,  284,  285,
-  286,   -1,   -1,   -1,   -1,  291,  292,  293,  294,  295,
-  296,  126,   64,  299,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  308,   -1,  310,  311,   -1,   -1,   -1,  256,
-  257,  258,  259,  260,  261,   -1,  263,  264,  265,   91,
-   -1,   -1,  269,   41,   -1,   -1,   44,   -1,   -1,   -1,
-   -1,   -1,   -1,  280,   -1,  282,  283,  284,  285,  286,
-   58,   59,   -1,   -1,  291,  292,  293,  294,  295,  296,
-   -1,   -1,  299,   -1,  126,   -1,   -1,   -1,   -1,   41,
-   -1,  308,   44,  310,  311,   -1,  257,  258,  259,  260,
-  261,   -1,  263,  264,  265,   93,   58,   59,  269,   -1,
-   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  280,
-   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,   -1,
-  291,  292,  293,  294,  295,  296,   -1,   -1,  299,   91,
-   -1,   93,   -1,   -1,   -1,   -1,   -1,  308,   41,  310,
-  311,   44,  257,  258,  259,  260,  261,   -1,  263,  264,
-  265,   -1,   -1,   -1,  269,   58,   59,   -1,   -1,   -1,
-   63,  123,   -1,   -1,   -1,  280,   -1,  282,  283,  284,
+   -1,   -1,  257,  258,  259,  260,  261,   91,  263,  264,
+  265,   -1,   33,   -1,  269,   36,   37,   38,   -1,   40,
+   -1,   42,   43,   -1,   45,  280,   -1,  282,  283,  284,
   285,  286,   -1,   -1,   -1,   -1,  291,  292,  293,  294,
-  295,  296,   -1,   -1,  299,   -1,   -1,   -1,   91,   -1,
-   93,   -1,   -1,  308,   -1,  310,  311,   -1,   -1,   -1,
-   -1,   41,   -1,   -1,   44,  257,  258,  259,  260,  261,
-   -1,  263,  264,  265,   -1,   -1,   -1,  269,   58,   59,
-  123,   -1,   -1,   63,   -1,   -1,   -1,   -1,  280,   -1,
-  282,  283,  284,  285,  286,   -1,   -1,   -1,   -1,  291,
-  292,  293,  294,  295,  296,   -1,   -1,  299,   -1,   41,
-   -1,   91,   44,   93,   -1,   -1,  308,   -1,  310,  311,
-   -1,   -1,   -1,   -1,   -1,   -1,   58,   59,   -1,   -1,
-   -1,   63,   -1,   -1,  272,  273,  274,  275,   -1,   -1,
-   -1,   -1,   -1,  123,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  297,
-  298,   93,  300,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,  281,
-   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,   -1,
-   -1,  123,   58,   59,   -1,  297,  298,   63,  300,  301,
-  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,
-  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   91,   -1,   93,   -1,  272,
-  273,  274,  275,   -1,   41,   -1,   -1,   44,  281,   -1,
-   -1,   -1,   -1,   -1,  287,  288,  289,  290,   -1,   -1,
-   -1,   58,   59,   -1,  297,  298,   63,  300,  301,  302,
-  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,  312,
-  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,   -1,
-   -1,   -1,  272,  273,  274,  275,   -1,   -1,   -1,   -1,
-   -1,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,
-  290,   -1,   -1,   -1,   -1,   -1,  123,  297,  298,   -1,
-  300,  301,  302,  303,  304,  305,  306,   -1,   -1,  309,
+  295,  296,  126,   64,  299,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  308,   -1,  310,  311,   -1,   -1,   -1,
+  256,  257,  258,  259,  260,  261,   -1,  263,  264,  265,
+   91,   -1,   -1,  269,   41,   -1,   -1,   44,   -1,   -1,
+   -1,   -1,   -1,   -1,  280,   -1,  282,  283,  284,  285,
+  286,   58,   59,   -1,   -1,  291,  292,  293,  294,  295,
+  296,   91,   -1,  299,   -1,  126,   -1,   -1,   -1,   -1,
+   41,   -1,  308,   44,  310,  311,   -1,  257,  258,  259,
+  260,  261,   -1,  263,  264,  265,   93,   58,   59,  269,
+   -1,   -1,   63,  123,   -1,   -1,   -1,   -1,   -1,   -1,
+  280,   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,
+   -1,  291,  292,  293,  294,  295,  296,   -1,   -1,  299,
+   91,   -1,   93,   -1,   -1,   -1,   -1,   -1,  308,   41,
+  310,  311,   44,  257,  258,  259,  260,  261,   -1,  263,
+  264,  265,   -1,   -1,   -1,  269,   58,   59,   -1,   -1,
+   -1,   63,  123,   -1,   -1,   -1,  280,   -1,  282,  283,
+  284,  285,  286,   -1,   -1,   -1,   -1,  291,  292,  293,
+  294,  295,  296,   -1,   -1,  299,   -1,   -1,   -1,   91,
+   -1,   93,   -1,   -1,  308,   -1,  310,  311,   -1,   -1,
+   -1,   -1,   41,   -1,   -1,   44,  257,  258,  259,  260,
+  261,   -1,  263,  264,  265,   -1,   -1,   -1,  269,   58,
+   59,  123,   -1,   -1,   63,   -1,   -1,   -1,   -1,  280,
+   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,   -1,
+  291,  292,  293,  294,  295,  296,   -1,   -1,  299,   -1,
+   41,   -1,   91,   44,   93,   -1,   -1,  308,   -1,  310,
+  311,   -1,   -1,   -1,   -1,   -1,   -1,   58,   59,  289,
+  290,   -1,   63,   -1,   -1,  272,  273,  274,  275,   -1,
+   -1,   -1,   -1,   -1,  123,  305,  306,   -1,   -1,  309,
    -1,   -1,  312,  313,  314,   -1,   -1,   -1,   -1,   -1,
-  272,  273,  274,  275,   -1,   41,   -1,   -1,   -1,  281,
+  297,  298,   93,  300,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,
+  281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,
+   -1,   -1,  123,   58,   59,   -1,  297,  298,   63,  300,
+  301,  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,
+   -1,  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   91,   -1,   93,   -1,
+  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,  281,
    -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,   -1,
    -1,   -1,   58,   59,   -1,  297,  298,   63,  300,  301,
   302,  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,
   312,  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   91,   -1,   93,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,
+   -1,   -1,   -1,  272,  273,  274,  275,   -1,   -1,   -1,
+   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,
+  289,  290,   -1,   -1,   -1,   -1,   -1,  123,  297,  298,
+   -1,  300,  301,  302,  303,  304,  305,  306,   -1,   -1,
+  309,   -1,   -1,  312,  313,  314,   -1,   -1,   -1,   -1,
+   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,   -1,
+  281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,
+   -1,   -1,   -1,   58,   59,   -1,  297,  298,   63,  300,
+  301,  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,
+   -1,  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   91,   -1,   93,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,  273,  274,
+  275,   -1,   -1,   -1,   -1,   -1,  281,   -1,   -1,   -1,
+   -1,   -1,  287,  288,  289,  290,   -1,   -1,  123,   -1,
+   -1,   -1,  297,  298,   -1,  300,  301,  302,  303,  304,
+  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,  272,  273,  274,  275,
-   -1,   -1,   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,
-   -1,  287,  288,  289,  290,   -1,   -1,  123,   -1,   -1,
-   91,  297,  298,   -1,  300,  301,  302,  303,  304,  305,
+   -1,   41,   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,
+   -1,  287,  288,  289,  290,   -1,   -1,   -1,   58,   59,
+   -1,  297,  298,   63,  300,  301,  302,  303,  304,  305,
   306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  123,   -1,   -1,  272,  273,  274,  275,   -1,
-   41,   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,
-  287,  288,  289,  290,   -1,   -1,   -1,   58,   59,   -1,
+   25,   26,   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,
+   -1,   91,   37,   93,   41,   -1,   -1,   44,   43,   44,
+   45,   58,   59,   -1,   -1,   50,   63,   -1,   -1,   -1,
+   -1,   58,   59,   -1,   -1,   -1,   63,   62,   63,   64,
+   65,   -1,   -1,  123,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   93,  272,  273,  274,
+  275,   -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,
+   -1,  106,  287,  288,  289,  290,  123,   -1,   -1,   58,
+   59,   -1,  297,  298,   63,  300,  301,  302,  303,  304,
+  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,
+   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   93,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   58,   59,   -1,   -1,   -1,   63,   -1,   -1,
+  165,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  123,   -1,   -1,   -1,   -1,   41,
+   -1,   -1,   44,   -1,  189,   91,   -1,   93,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   58,   59,   -1,   -1,
+   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  272,  273,  274,  275,   -1,  123,   -1,   -1,
+   -1,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,
+  290,   93,   -1,   -1,   -1,   -1,   -1,  297,  298,   -1,
+  300,  301,  302,  303,  304,  305,  306,   -1,   -1,  309,
+   -1,   -1,  312,  313,  314,  272,  273,  274,  275,   -1,
+   41,  123,   -1,   44,  281,  272,  273,  274,  275,   -1,
+  287,  288,  289,  290,  281,   -1,   -1,   58,   59,   -1,
   297,  298,   63,  300,  301,  302,  303,  304,  305,  306,
-   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,   -1,
-   -1,   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,
-   91,   -1,   93,   41,   -1,   -1,   44,   -1,   -1,   -1,
-   58,   59,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,
-   58,   59,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,
-   -1,   -1,  123,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   93,  272,  273,  274,  275,
+  297,  298,  309,  300,  301,  312,  313,  314,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   93,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  272,  273,  274,  275,   -1,   41,   -1,
+   -1,   44,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,
+  289,  290,   -1,   -1,   -1,   58,   59,   -1,  297,  298,
+   63,  300,  301,  302,  303,  304,  305,  306,   -1,   -1,
+  309,   -1,   -1,  312,  313,  314,  272,  273,  274,  275,
    -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,   -1,
-   -1,  287,  288,  289,  290,  123,   -1,   -1,   58,   59,
+   93,  287,  288,  289,  290,   -1,   -1,   -1,   58,   59,
    -1,  297,  298,   63,  300,  301,  302,  303,  304,  305,
   306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,
-   -1,   -1,   -1,   -1,   41,   -1,  287,  288,  289,  290,
-   -1,   -1,   -1,   93,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   58,   59,  304,  305,  306,   63,   -1,  309,   -1,
-   -1,  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,  123,   -1,   -1,   -1,   -1,   41,   -1,
-   -1,   44,   -1,   -1,   91,   -1,   93,   -1,   -1,   -1,
+  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,  281,
+   -1,   -1,   -1,   93,   -1,  287,  288,  289,  290,   -1,
+   -1,   -1,   58,   59,   -1,  297,  298,   63,  300,  301,
+  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,
+  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   41,   -1,
+   -1,   44,   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   58,   59,   -1,   -1,   -1,
    63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,  272,  273,  274,  275,   -1,  123,   -1,   -1,   -1,
+   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,
   281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,
-   93,   -1,   -1,   -1,   -1,   -1,  297,  298,   -1,  300,
+   93,   -1,   -1,   58,   59,   -1,  297,  298,   63,  300,
   301,  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,
-   -1,  312,  313,  314,  272,  273,  274,  275,   -1,   41,
-  123,   -1,   44,  281,  272,  273,  274,  275,   -1,  287,
-  288,  289,  290,   -1,   -1,   -1,   58,   59,   -1,  297,
-  298,   63,  300,  301,  302,  303,  304,  305,  306,  297,
-  298,  309,  300,   -1,  312,  313,  314,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   93,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,
+   -1,  312,  313,  314,   41,   -1,   -1,   44,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   93,   -1,
+   -1,   58,   59,   -1,   -1,   -1,   63,   -1,   -1,  272,
+  273,  274,  275,   -1,   -1,   -1,   -1,   -1,  281,   -1,
+   -1,   -1,   -1,   -1,  287,  288,  289,  290,   -1,   -1,
+   -1,   -1,   -1,   -1,  297,  298,   93,  300,  301,  302,
+  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,  312,
+  313,  314,  272,  273,  274,  275,   -1,   41,   -1,   -1,
    44,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,
   290,   -1,   -1,   -1,   58,   59,   -1,  297,  298,   63,
   300,  301,  302,  303,  304,  305,  306,   -1,   -1,  309,
-   -1,   -1,  312,  313,  314,  272,  273,  274,  275,   -1,
-   41,   -1,   -1,   44,  281,   -1,   -1,   -1,   -1,   93,
-  287,  288,  289,  290,   -1,   -1,   -1,   58,   59,   -1,
-  297,  298,   63,  300,  301,  302,  303,  304,  305,  306,
-   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,  272,
+   -1,   -1,  312,  313,  314,   -1,  272,  273,  274,  275,
+   -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,   93,
+   -1,  287,  288,  289,  290,   -1,   -1,   -1,   58,   59,
+   -1,  297,  298,   63,  300,  301,  302,  303,  304,  305,
+  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,  272,
   273,  274,  275,   -1,   41,   -1,   -1,   44,  281,   -1,
-   -1,   -1,   93,   -1,  287,  288,  289,  290,   -1,   -1,
+   -1,   -1,   -1,   93,  287,  288,  289,  290,   -1,   -1,
    -1,   58,   59,   -1,  297,  298,   63,  300,  301,  302,
-  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,  312,
-  313,  314,   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,
-   44,   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   58,   59,   -1,   41,   -1,   63,
-   44,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-  272,  273,  274,  275,   58,   59,   -1,   -1,   -1,  281,
-   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,   93,
-   -1,   -1,   -1,   -1,   -1,  297,  298,   -1,  300,  301,
-  302,  303,  304,  305,  306,   41,   -1,  309,   44,   93,
-  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   58,   59,   -1,   -1,   -1,   63,   -1,   -1,
+  303,  304,  305,  306,   -1,   -1,   -1,  272,  273,  274,
+  275,   -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,
+   -1,   -1,  287,  288,  289,  290,   93,   -1,   -1,   58,
+   59,   -1,  297,  298,   63,  300,  301,  302,  303,  304,
+  305,  306,   -1,   -1,   -1,  272,  273,  274,  275,   -1,
+   41,   -1,   -1,   44,  281,   -1,   -1,   -1,   -1,   -1,
+  287,  288,  289,  290,   93,   -1,   -1,   58,   59,   -1,
+  297,  298,   63,  300,  301,  302,  303,  304,  305,  306,
+   -1,   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,   44,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   93,   58,   59,   -1,   -1,   -1,   63,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,  273,
   274,  275,   -1,   41,   -1,   -1,   44,  281,   -1,   -1,
-   -1,   -1,   -1,  287,  288,  289,  290,   93,   -1,   -1,
+   -1,   -1,   -1,  287,  288,  289,  290,   -1,   93,   -1,
    58,   59,   -1,  297,  298,   63,  300,  301,  302,  303,
-  304,  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,
-  314,  272,  273,  274,  275,   -1,   -1,   -1,   -1,   -1,
-  281,   -1,   -1,   -1,   -1,   93,  287,  288,  289,  290,
-   -1,   -1,   -1,   -1,   -1,   -1,  297,  298,   -1,  300,
-  301,  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,
-   -1,  312,  313,  314,   -1,  272,  273,  274,  275,   -1,
-   41,   -1,   -1,   44,  281,   -1,   -1,   -1,   -1,   -1,
+  304,  305,  306,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,
+   44,  281,   -1,   -1,   -1,   93,   -1,  287,  288,  289,
+  290,   -1,   -1,   -1,   58,   59,   -1,  297,  298,   63,
+  300,  301,  302,  303,  304,  305,  306,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  272,  273,  274,  275,   -1,
+   41,   -1,   -1,   44,  281,   -1,   -1,   -1,   -1,   93,
   287,  288,  289,  290,   -1,   -1,   -1,   58,   59,   -1,
   297,  298,   63,  300,  301,  302,  303,  304,  305,  306,
-   -1,   -1,  309,   -1,   -1,  312,  313,  314,  272,  273,
-  274,  275,   -1,   -1,   -1,   -1,   -1,  281,   -1,   -1,
-   -1,   -1,   93,  287,  288,  289,  290,   -1,  272,  273,
-  274,  275,   -1,  297,  298,   30,  300,  301,  302,  303,
-  304,  305,  306,   38,   -1,  309,   -1,   42,   -1,   -1,
-   45,   -1,   -1,  297,  298,   -1,   -1,   52,   53,   54,
-   55,   56,   -1,   -1,   59,   60,   -1,   -1,   91,   -1,
-   -1,   66,   -1,   -1,   -1,   -1,  272,  273,  274,  275,
-   -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,   -1,
-   -1,  287,  288,  289,  290,   -1,   -1,   92,   58,   59,
-  123,  297,  298,   63,  300,  301,  302,  303,  304,  305,
-  306,   -1,   -1,   -1,  272,  273,  274,  275,   -1,   -1,
-   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,  287,
-  288,  289,  290,   93,   41,   -1,   -1,   44,   -1,  297,
-  298,   -1,  300,  301,  302,  303,  304,  305,  306,   -1,
-   -1,   58,   59,   -1,   -1,   -1,   63,   -1,  153,  154,
-  155,  156,  157,  158,  159,  160,  161,  162,  163,  164,
-  165,  166,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,  178,   -1,   -1,   93,   -1,   -1,   58,
-   59,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,   -1,
-   -1,  272,  273,  274,  275,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  272,  273,  274,  275,   -1,   41,   -1,
+   -1,   44,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,
+  289,  290,   93,   -1,   -1,   58,   59,   -1,  297,  298,
+   63,  300,  301,  302,  303,  304,  305,  306,   -1,   -1,
+   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,
   281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,
-   41,   -1,   -1,   44,   93,   -1,  297,  298,   -1,  300,
-  301,  302,  303,  304,  305,  306,   -1,   58,   59,   -1,
-   -1,   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,   44,
-   -1,   -1,   -1,  258,  287,  288,  289,  290,   -1,   -1,
-   -1,   -1,   93,   58,   59,   -1,   -1,   -1,   63,  302,
-  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,  312,
-  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-  295,   41,   -1,   -1,   44,   -1,   -1,   -1,   93,   -1,
-   -1,   -1,  272,  273,  274,  275,   -1,   -1,   58,   59,
-   -1,  281,   -1,   63,   -1,   -1,   -1,  287,  288,  289,
-  290,   -1,   -1,   -1,   -1,   -1,   -1,  297,  298,   -1,
-  300,  301,  302,  303,  304,  305,  306,   -1,   -1,   -1,
-   -1,   -1,   -1,   93,   -1,   41,   -1,   -1,   44,   -1,
-   -1,   -1,   -1,   -1,   -1,  272,  273,  274,  275,   -1,
-   -1,   -1,   58,   59,  281,   -1,   -1,   63,   -1,   -1,
-  287,  288,  289,  290,   -1,   -1,   -1,   -1,   -1,   -1,
-  297,  298,   -1,  300,  301,  302,  303,  304,  305,  306,
-   -1,   -1,   -1,  272,  273,  274,  275,   93,   -1,   -1,
-   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,
-  289,  290,   41,   -1,   -1,   44,   -1,   -1,  297,  298,
-   -1,  300,  301,  302,  303,  304,  305,  306,   -1,   58,
-   59,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,   -1,
+   93,   -1,   -1,   58,   59,   -1,  297,  298,   63,  300,
+  301,  302,  303,  304,  305,   -1,   -1,  272,  273,  274,
+  275,   -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,
+   -1,   -1,  287,  288,   -1,  290,   -1,   -1,   93,   58,
+   59,   -1,  297,  298,   63,  300,  301,  302,  303,  304,
+  305,   -1,   -1,   -1,  272,  273,  274,  275,   -1,   41,
+   -1,   -1,   44,  281,   -1,   -1,   -1,   -1,   -1,  287,
+  288,   -1,   -1,   -1,   93,   -1,   58,   59,   -1,  297,
+  298,   63,  300,  301,  302,  303,  304,  305,   -1,   -1,
+   91,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,  273,
+  274,  275,   -1,   41,   -1,   -1,   44,  281,   -1,   -1,
+   -1,   93,   -1,  287,  288,   -1,   41,   -1,   -1,   44,
+   58,   59,  123,  297,  298,   63,  300,  301,  302,  303,
+  304,   -1,   -1,   58,   59,   41,   -1,   -1,   44,   -1,
    -1,  272,  273,  274,  275,   41,   -1,   -1,   44,   -1,
-  281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,
-   -1,   -1,   58,   59,   93,   41,  297,  298,   44,  300,
-  301,  302,  303,  304,  305,  306,   -1,  272,  273,  274,
-  275,   -1,   58,   59,   -1,   -1,  281,   63,   -1,   -1,
-   -1,   -1,  287,  288,  289,  290,   -1,   93,   -1,   -1,
+  281,   -1,   58,   59,   -1,   93,  287,  288,   -1,   -1,
+   -1,   -1,   58,   59,   -1,   -1,  297,  298,   93,  300,
+  301,  302,  303,  304,   -1,   41,   -1,   -1,   44,  272,
+  273,  274,  275,   -1,   -1,   -1,   -1,   93,  281,   -1,
+   -1,   -1,   58,   59,  287,  288,   58,   93,   -1,   -1,
+   -1,   63,   -1,   -1,  297,  298,   -1,  300,  301,  302,
+  303,  304,   -1,   -1,   -1,   -1,   -1,  272,  273,  274,
+  275,   -1,   -1,   -1,   -1,   -1,  281,   93,   -1,   91,
+   -1,   -1,  287,  288,   -1,   63,   -1,   -1,   -1,   -1,
    -1,   -1,  297,  298,   -1,  300,  301,  302,  303,  304,
-  305,   41,   -1,   -1,   44,   -1,   -1,   93,   -1,   -1,
-   -1,   -1,  272,  273,  274,  275,   -1,   -1,   58,   59,
-   -1,  281,   -1,   63,   -1,   -1,   -1,  287,  288,   -1,
-  290,   91,   -1,   -1,   -1,   -1,   -1,  297,  298,   -1,
-  300,  301,  302,  303,  304,  305,   -1,   41,   -1,   -1,
-   44,   -1,   -1,   93,   41,   -1,   -1,   44,   -1,   -1,
-   -1,   -1,   -1,  123,   58,   59,  272,  273,  274,  275,
-   -1,   58,   59,   -1,   -1,  281,   63,   -1,   -1,   -1,
-   -1,  287,  288,   -1,   -1,   -1,   41,   -1,   -1,   44,
-   -1,  297,  298,   -1,  300,  301,  302,  303,  304,   93,
-   -1,   -1,   -1,   58,   59,   -1,   93,   -1,   63,   -1,
-   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,  272,  273,  274,  275,   -1,   93,   91,
-   -1,   -1,  281,   -1,   -1,   63,   -1,   -1,  287,  288,
+   -1,   -1,   -1,  272,  273,  274,  275,   -1,   -1,   -1,
+   -1,  123,  281,   91,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  297,  298,
-   -1,  300,  301,  302,  303,  304,  272,  273,  274,  275,
-   -1,  123,   -1,   91,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,  272,  273,  274,  275,
-   -1,  297,  298,   -1,   -1,  281,   -1,   -1,   -1,   -1,
-   -1,  287,  288,   -1,   -1,  123,   -1,   -1,   -1,   -1,
-   -1,  297,  298,   -1,  300,  301,  302,  303,  304,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,
-  290,   -1,  272,  273,  274,  275,   -1,   -1,   -1,   -1,
-   -1,  281,   -1,  303,  304,  305,  306,  287,  288,  309,
-   -1,   -1,  312,  313,  314,   -1,   -1,  297,  298,   -1,
-  300,  301,  302,  303,  304,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,  273,
-  274,  275,   -1,   -1,   -1,  272,  273,  274,  275,   -1,
-   -1,   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,  297,  298,   -1,   -1,   -1,   -1,   -1,
-  297,  298,   -1,  300,  301,  302,  303,  272,  273,  274,
-  275,   -1,   -1,   -1,   -1,   -1,  281,   -1,   -1,  281,
+   -1,  300,  301,  302,  303,  304,  287,  288,  289,  290,
+  272,  273,  274,  275,   -1,  123,   -1,   -1,   -1,  281,
+   -1,  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,
+   -1,  312,  313,  314,   91,  297,  298,   -1,  300,  301,
+  302,  303,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  272,  273,  274,  275,   -1,   -1,
+   -1,   -1,   -1,  281,   -1,   -1,  123,  272,  273,  274,
+  275,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  297,
+  298,   -1,  300,  301,  302,   -1,  272,  273,  274,  275,
+   -1,   -1,  297,  298,   30,   -1,  272,  273,  274,  275,
+   -1,   -1,   38,   -1,   -1,   -1,   42,   -1,   -1,   45,
+   -1,  297,  298,   -1,   -1,   -1,   52,   53,   54,   55,
+   56,  297,  298,   59,   60,   -1,  272,  273,  274,  275,
+   66,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  281,
    -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,   -1,
-   -1,   -1,  297,  298,   -1,  300,  301,  302,  300,  301,
+   -1,  297,  298,   -1,   -1,   -1,   92,   -1,  300,  301,
   302,  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,
   312,  313,  314,  281,   -1,   -1,   -1,   -1,   -1,  287,
-  288,  289,  290,   -1,   -1,   -1,   -1,   13,   -1,   -1,
-   -1,   17,   -1,  301,  302,  303,  304,  305,  306,   -1,
-   -1,  309,   -1,   -1,  312,  313,  314,   33,   34,   35,
-   36,   -1,   -1,   -1,   -1,   -1,   42,   -1,   -1,   45,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  288,  289,  290,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  300,  301,  302,  303,  304,  305,  306,   -1,
+   -1,  309,   -1,   -1,  312,  313,  314,   -1,   -1,   -1,
+   -1,   -1,   -1,  149,  150,  151,  152,  153,  154,  155,
+  156,  157,  158,  159,  160,  161,  162,   -1,   -1,   -1,
+  287,  288,  289,  290,   -1,   -1,   -1,   -1,  174,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  303,  304,  305,  306,
+   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   80,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   94,   -1,
-   -1,   97,   -1,   99,   -1,  101,   -1,  103,   -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,  144,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  250,   -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,  181,   -1,   -1,   -1,   -1,
-   -1,   -1,  188,
+   -1,   -1,   -1,   -1,   -1,  281,
 };
 #define YYFINAL 1
 #ifndef YYDEBUG
@@ -1105,14 +1068,10 @@ char *yyrule[] = {
 "else : ELSIF '(' mexpr ')' mblock else",
 "cond : IF '(' remember mexpr ')' mblock else",
 "cond : UNLESS '(' remember miexpr ')' mblock else",
-"cond : IF block block else",
-"cond : UNLESS block block else",
 "cont :",
 "cont : CONTINUE block",
 "loop : label WHILE '(' remember mtexpr ')' mblock cont",
 "loop : label UNTIL '(' remember miexpr ')' mblock cont",
-"loop : label WHILE block block cont",
-"loop : label UNTIL block block cont",
 "loop : label FOR MY remember my_scalar '(' mexpr ')' mblock cont",
 "loop : label FOR scalar '(' remember mexpr ')' mblock cont",
 "loop : label FOR '(' remember mexpr ')' mblock cont",
@@ -1273,9 +1232,9 @@ int yyerrflag;
 int yychar;
 YYSTYPE yyval;
 YYSTYPE yylval;
-#line 624 "perly.y"
+#line 602 "perly.y"
  /* PROGRAM */
-#line 1349 "perly.c"
+#line 1308 "perly.c"
 #define YYABORT goto yyabort
 #define YYACCEPT goto yyaccept
 #define YYERROR goto yyerrlab
@@ -1619,77 +1578,47 @@ case 24:
                                   newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); }
 break;
 case 25:
-#line 177 "perly.y"
-{ copline = yyvsp[-3].ival;
-                           deprecate("if BLOCK BLOCK");
-                           yyval.opval = newCONDOP(0, scope(yyvsp[-2].opval), scope(yyvsp[-1].opval), yyvsp[0].opval); }
+#line 179 "perly.y"
+{ yyval.opval = Nullop; }
 break;
 case 26:
 #line 181 "perly.y"
-{ copline = yyvsp[-3].ival;
-                           deprecate("unless BLOCK BLOCK");
-                           yyval.opval = newCONDOP(0, invert(scalar(scope(yyvsp[-2].opval))),
-                                               scope(yyvsp[-1].opval), yyvsp[0].opval); }
-break;
-case 27:
-#line 188 "perly.y"
-{ yyval.opval = Nullop; }
-break;
-case 28:
-#line 190 "perly.y"
 { yyval.opval = scope(yyvsp[0].opval); }
 break;
-case 29:
-#line 194 "perly.y"
+case 27:
+#line 185 "perly.y"
 { copline = yyvsp[-6].ival;
                            yyval.opval = block_end(yyvsp[-4].ival,
                                   newSTATEOP(0, yyvsp[-7].pval,
                                     newWHILEOP(0, 1, (LOOP*)Nullop,
                                                yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); }
 break;
-case 30:
-#line 200 "perly.y"
+case 28:
+#line 191 "perly.y"
 { copline = yyvsp[-6].ival;
                            yyval.opval = block_end(yyvsp[-4].ival,
                                   newSTATEOP(0, yyvsp[-7].pval,
                                     newWHILEOP(0, 1, (LOOP*)Nullop,
                                                yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); }
 break;
-case 31:
-#line 206 "perly.y"
-{ copline = yyvsp[-3].ival;
-                           deprecate("while BLOCK BLOCK");
-                           yyval.opval = newSTATEOP(0, yyvsp[-4].pval,
-                                  newWHILEOP(0, 1, (LOOP*)Nullop,
-                                             scope(yyvsp[-2].opval), yyvsp[-1].opval, yyvsp[0].opval)); }
-break;
-case 32:
-#line 212 "perly.y"
-{ copline = yyvsp[-3].ival;
-                           deprecate("until BLOCK BLOCK");
-                           yyval.opval = newSTATEOP(0, yyvsp[-4].pval,
-                                  newWHILEOP(0, 1, (LOOP*)Nullop,
-                                             invert(scalar(scope(yyvsp[-2].opval))),
-                                             yyvsp[-1].opval, yyvsp[0].opval)); }
-break;
-case 33:
-#line 219 "perly.y"
+case 29:
+#line 197 "perly.y"
 { yyval.opval = block_end(yyvsp[-6].ival,
                                 newFOROP(0, yyvsp[-9].pval, yyvsp[-8].ival, yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
-case 34:
-#line 222 "perly.y"
+case 30:
+#line 200 "perly.y"
 { yyval.opval = block_end(yyvsp[-4].ival,
                                 newFOROP(0, yyvsp[-8].pval, yyvsp[-7].ival, mod(yyvsp[-6].opval, OP_ENTERLOOP),
                                          yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
-case 35:
-#line 226 "perly.y"
+case 31:
+#line 204 "perly.y"
 { yyval.opval = block_end(yyvsp[-4].ival,
                                 newFOROP(0, yyvsp[-7].pval, yyvsp[-6].ival, Nullop, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
-case 36:
-#line 230 "perly.y"
+case 32:
+#line 208 "perly.y"
 { copline = yyvsp[-9].ival;
                            yyval.opval = block_end(yyvsp[-7].ival,
                                   append_elem(OP_LINESEQ, scalar(yyvsp[-6].opval),
@@ -1698,365 +1627,365 @@ case 36:
                                                  scalar(yyvsp[-4].opval),
                                                  yyvsp[0].opval, scalar(yyvsp[-2].opval))))); }
 break;
-case 37:
-#line 238 "perly.y"
+case 33:
+#line 216 "perly.y"
 { yyval.opval = newSTATEOP(0,
                                yyvsp[-2].pval, newWHILEOP(0, 1, (LOOP*)Nullop,
                                        Nullop, yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
-case 38:
-#line 244 "perly.y"
+case 34:
+#line 222 "perly.y"
 { yyval.opval = Nullop; }
 break;
-case 40:
-#line 249 "perly.y"
+case 36:
+#line 227 "perly.y"
 { (void)scan_num("1"); yyval.opval = yylval.opval; }
 break;
-case 42:
-#line 254 "perly.y"
+case 38:
+#line 232 "perly.y"
 { yyval.opval = invert(scalar(yyvsp[0].opval)); }
 break;
-case 43:
-#line 258 "perly.y"
+case 39:
+#line 236 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
-case 44:
-#line 262 "perly.y"
+case 40:
+#line 240 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
-case 45:
-#line 266 "perly.y"
+case 41:
+#line 244 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
-case 46:
-#line 270 "perly.y"
+case 42:
+#line 248 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
-case 47:
-#line 274 "perly.y"
+case 43:
+#line 252 "perly.y"
 { yyval.pval = Nullch; }
 break;
-case 49:
-#line 279 "perly.y"
+case 45:
+#line 257 "perly.y"
 { yyval.ival = 0; }
 break;
-case 50:
-#line 281 "perly.y"
+case 46:
+#line 259 "perly.y"
 { yyval.ival = 0; }
 break;
-case 51:
-#line 283 "perly.y"
+case 47:
+#line 261 "perly.y"
 { yyval.ival = 0; }
 break;
-case 52:
-#line 285 "perly.y"
+case 48:
+#line 263 "perly.y"
 { yyval.ival = 0; }
 break;
-case 53:
-#line 289 "perly.y"
+case 49:
+#line 267 "perly.y"
 { newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
-case 54:
-#line 291 "perly.y"
+case 50:
+#line 269 "perly.y"
 { newFORM(yyvsp[-1].ival, Nullop, yyvsp[0].opval); }
 break;
-case 55:
-#line 295 "perly.y"
+case 51:
+#line 273 "perly.y"
 { newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
-case 56:
-#line 297 "perly.y"
+case 52:
+#line 275 "perly.y"
 { newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, Nullop); expect = XSTATE; }
 break;
-case 57:
-#line 301 "perly.y"
+case 53:
+#line 279 "perly.y"
 { yyval.opval = Nullop; }
 break;
-case 59:
-#line 306 "perly.y"
+case 55:
+#line 284 "perly.y"
 { yyval.ival = start_subparse(); }
 break;
-case 60:
-#line 310 "perly.y"
+case 56:
+#line 288 "perly.y"
 { package(yyvsp[-1].opval); }
 break;
-case 61:
-#line 312 "perly.y"
+case 57:
+#line 290 "perly.y"
 { package(Nullop); }
 break;
-case 62:
-#line 316 "perly.y"
+case 58:
+#line 294 "perly.y"
 { utilize(yyvsp[-5].ival, yyvsp[-4].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval); }
 break;
-case 63:
-#line 320 "perly.y"
+case 59:
+#line 298 "perly.y"
 { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 64:
-#line 322 "perly.y"
+case 60:
+#line 300 "perly.y"
 { yyval.opval = newLOGOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 66:
-#line 327 "perly.y"
+case 62:
+#line 305 "perly.y"
 { yyval.opval = yyvsp[-1].opval; }
 break;
-case 67:
-#line 329 "perly.y"
+case 63:
+#line 307 "perly.y"
 { yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 69:
-#line 334 "perly.y"
+case 65:
+#line 312 "perly.y"
 { yyval.opval = convert(yyvsp[-2].ival, OPf_STACKED,
                                prepend_elem(OP_LIST, newGVREF(yyvsp[-2].ival,yyvsp[-1].opval), yyvsp[0].opval) ); }
 break;
-case 70:
-#line 337 "perly.y"
+case 66:
+#line 315 "perly.y"
 { yyval.opval = convert(yyvsp[-4].ival, OPf_STACKED,
                                prepend_elem(OP_LIST, newGVREF(yyvsp[-4].ival,yyvsp[-2].opval), yyvsp[-1].opval) ); }
 break;
-case 71:
-#line 340 "perly.y"
+case 67:
+#line 318 "perly.y"
 { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, scalar(yyvsp[-5].opval), yyvsp[-1].opval),
                                    newUNOP(OP_METHOD, 0, yyvsp[-3].opval))); }
 break;
-case 72:
-#line 345 "perly.y"
+case 68:
+#line 323 "perly.y"
 { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, yyvsp[-1].opval, yyvsp[0].opval),
                                    newUNOP(OP_METHOD, 0, yyvsp[-2].opval))); }
 break;
-case 73:
-#line 350 "perly.y"
+case 69:
+#line 328 "perly.y"
 { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, yyvsp[-3].opval, yyvsp[-1].opval),
                                    newUNOP(OP_METHOD, 0, yyvsp[-4].opval))); }
 break;
-case 74:
-#line 355 "perly.y"
+case 70:
+#line 333 "perly.y"
 { yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
-case 75:
-#line 357 "perly.y"
+case 71:
+#line 335 "perly.y"
 { yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
 break;
-case 76:
-#line 359 "perly.y"
+case 72:
+#line 337 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST,
                              prepend_elem(OP_LIST, newANONSUB(yyvsp[-2].ival, 0, yyvsp[-1].opval), yyvsp[0].opval),
                              yyvsp[-3].opval)); }
 break;
-case 79:
-#line 370 "perly.y"
+case 75:
+#line 348 "perly.y"
 { yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); }
 break;
-case 80:
-#line 372 "perly.y"
+case 76:
+#line 350 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 81:
-#line 374 "perly.y"
+case 77:
+#line 352 "perly.y"
 {   if (yyvsp[-1].ival != OP_REPEAT)
                                scalar(yyvsp[-2].opval);
                            yyval.opval = newBINOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, scalar(yyvsp[0].opval)); }
 break;
-case 82:
-#line 378 "perly.y"
+case 78:
+#line 356 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 83:
-#line 380 "perly.y"
+case 79:
+#line 358 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 84:
-#line 382 "perly.y"
+case 80:
+#line 360 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 85:
-#line 384 "perly.y"
+case 81:
+#line 362 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 86:
-#line 386 "perly.y"
+case 82:
+#line 364 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 87:
-#line 388 "perly.y"
+case 83:
+#line 366 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 88:
-#line 390 "perly.y"
+case 84:
+#line 368 "perly.y"
 { yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));}
 break;
-case 89:
-#line 392 "perly.y"
+case 85:
+#line 370 "perly.y"
 { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 90:
-#line 394 "perly.y"
+case 86:
+#line 372 "perly.y"
 { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 91:
-#line 396 "perly.y"
+case 87:
+#line 374 "perly.y"
 { yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 92:
-#line 398 "perly.y"
+case 88:
+#line 376 "perly.y"
 { yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 93:
-#line 401 "perly.y"
+case 89:
+#line 379 "perly.y"
 { yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); }
 break;
-case 94:
-#line 403 "perly.y"
+case 90:
+#line 381 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 95:
-#line 405 "perly.y"
+case 91:
+#line 383 "perly.y"
 { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
 break;
-case 96:
-#line 407 "perly.y"
+case 92:
+#line 385 "perly.y"
 { yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));}
 break;
-case 97:
-#line 409 "perly.y"
+case 93:
+#line 387 "perly.y"
 { yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); }
 break;
-case 98:
-#line 411 "perly.y"
+case 94:
+#line 389 "perly.y"
 { yyval.opval = newUNOP(OP_POSTINC, 0,
                                        mod(scalar(yyvsp[-1].opval), OP_POSTINC)); }
 break;
-case 99:
-#line 414 "perly.y"
+case 95:
+#line 392 "perly.y"
 { yyval.opval = newUNOP(OP_POSTDEC, 0,
                                        mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); }
 break;
-case 100:
-#line 417 "perly.y"
+case 96:
+#line 395 "perly.y"
 { yyval.opval = newUNOP(OP_PREINC, 0,
                                        mod(scalar(yyvsp[0].opval), OP_PREINC)); }
 break;
-case 101:
-#line 420 "perly.y"
+case 97:
+#line 398 "perly.y"
 { yyval.opval = newUNOP(OP_PREDEC, 0,
                                        mod(scalar(yyvsp[0].opval), OP_PREDEC)); }
 break;
-case 102:
-#line 423 "perly.y"
+case 98:
+#line 401 "perly.y"
 { yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); }
 break;
-case 103:
-#line 425 "perly.y"
+case 99:
+#line 403 "perly.y"
 { yyval.opval = sawparens(yyvsp[-1].opval); }
 break;
-case 104:
-#line 427 "perly.y"
+case 100:
+#line 405 "perly.y"
 { yyval.opval = sawparens(newNULLLIST()); }
 break;
-case 105:
-#line 429 "perly.y"
+case 101:
+#line 407 "perly.y"
 { yyval.opval = newANONLIST(yyvsp[-1].opval); }
 break;
-case 106:
-#line 431 "perly.y"
+case 102:
+#line 409 "perly.y"
 { yyval.opval = newANONLIST(Nullop); }
 break;
-case 107:
-#line 433 "perly.y"
+case 103:
+#line 411 "perly.y"
 { yyval.opval = newANONHASH(yyvsp[-2].opval); }
 break;
-case 108:
-#line 435 "perly.y"
+case 104:
+#line 413 "perly.y"
 { yyval.opval = newANONHASH(Nullop); }
 break;
-case 109:
-#line 437 "perly.y"
+case 105:
+#line 415 "perly.y"
 { yyval.opval = newANONSUB(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
-case 110:
-#line 439 "perly.y"
+case 106:
+#line 417 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 111:
-#line 441 "perly.y"
+case 107:
+#line 419 "perly.y"
 { yyval.opval = newBINOP(OP_GELEM, 0, newGVREF(0,yyvsp[-4].opval), yyvsp[-2].opval); }
 break;
-case 112:
-#line 443 "perly.y"
+case 108:
+#line 421 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 113:
-#line 445 "perly.y"
+case 109:
+#line 423 "perly.y"
 { yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); }
 break;
-case 114:
-#line 447 "perly.y"
+case 110:
+#line 425 "perly.y"
 { yyval.opval = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF(yyvsp[-4].opval),OP_RV2AV),
                                        scalar(yyvsp[-1].opval));}
 break;
-case 115:
-#line 451 "perly.y"
+case 111:
+#line 429 "perly.y"
 { assertref(yyvsp[-3].opval); yyval.opval = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF(yyvsp[-3].opval),OP_RV2AV),
                                        scalar(yyvsp[-1].opval));}
 break;
-case 116:
-#line 455 "perly.y"
+case 112:
+#line 433 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 117:
-#line 457 "perly.y"
+case 113:
+#line 435 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 118:
-#line 459 "perly.y"
+case 114:
+#line 437 "perly.y"
 { yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));}
 break;
-case 119:
-#line 461 "perly.y"
+case 115:
+#line 439 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval));
                            expect = XOPERATOR; }
 break;
-case 120:
-#line 464 "perly.y"
+case 116:
+#line 442 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF(yyvsp[-5].opval),OP_RV2HV),
                                        jmaybe(yyvsp[-2].opval));
                            expect = XOPERATOR; }
 break;
-case 121:
-#line 469 "perly.y"
+case 117:
+#line 447 "perly.y"
 { assertref(yyvsp[-4].opval); yyval.opval = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF(yyvsp[-4].opval),OP_RV2HV),
                                        jmaybe(yyvsp[-2].opval));
                            expect = XOPERATOR; }
 break;
-case 122:
-#line 474 "perly.y"
+case 118:
+#line 452 "perly.y"
 { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); }
 break;
-case 123:
-#line 476 "perly.y"
+case 119:
+#line 454 "perly.y"
 { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); }
 break;
-case 124:
-#line 478 "perly.y"
+case 120:
+#line 456 "perly.y"
 { yyval.opval = prepend_elem(OP_ASLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_ASLICE, 0,
                                        list(yyvsp[-1].opval),
                                        ref(yyvsp[-3].opval, OP_ASLICE))); }
 break;
-case 125:
-#line 484 "perly.y"
+case 121:
+#line 462 "perly.y"
 { yyval.opval = prepend_elem(OP_HSLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_HSLICE, 0,
@@ -2064,38 +1993,38 @@ case 125:
                                        ref(oopsHV(yyvsp[-4].opval), OP_HSLICE)));
                            expect = XOPERATOR; }
 break;
-case 126:
-#line 491 "perly.y"
+case 122:
+#line 469 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 127:
-#line 493 "perly.y"
+case 123:
+#line 471 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); }
 break;
-case 128:
-#line 495 "perly.y"
+case 124:
+#line 473 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); }
 break;
-case 129:
-#line 497 "perly.y"
+case 125:
+#line 475 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); }
 break;
-case 130:
-#line 500 "perly.y"
+case 126:
+#line 478 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); }
 break;
-case 131:
-#line 503 "perly.y"
+case 127:
+#line 481 "perly.y"
 { yyval.opval = newUNOP(OP_DOFILE, 0, scalar(yyvsp[0].opval)); }
 break;
-case 132:
-#line 505 "perly.y"
+case 128:
+#line 483 "perly.y"
 { yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); }
 break;
-case 133:
-#line 507 "perly.y"
+case 129:
+#line 485 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
@@ -2104,8 +2033,8 @@ case 133:
                                    scalar(yyvsp[-2].opval)
                                )),Nullop)); dep();}
 break;
-case 134:
-#line 515 "perly.y"
+case 130:
+#line 493 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            append_elem(OP_LIST,
@@ -2115,151 +2044,151 @@ case 134:
                                    scalar(yyvsp[-3].opval)
                                )))); dep();}
 break;
-case 135:
-#line 524 "perly.y"
+case 131:
+#line 502 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
                                scalar(newCVREF(0,scalar(yyvsp[-2].opval))), Nullop)); dep();}
 break;
-case 136:
-#line 528 "perly.y"
+case 132:
+#line 506 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
                                yyvsp[-1].opval,
                                scalar(newCVREF(0,scalar(yyvsp[-3].opval))))); dep();}
 break;
-case 137:
-#line 533 "perly.y"
+case 133:
+#line 511 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL);
                            hints |= HINT_BLOCK_SCOPE; }
 break;
-case 138:
-#line 536 "perly.y"
+case 134:
+#line 514 "perly.y"
 { yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); }
 break;
-case 139:
-#line 538 "perly.y"
+case 135:
+#line 516 "perly.y"
 { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
 break;
-case 140:
-#line 540 "perly.y"
+case 136:
+#line 518 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, 0); }
 break;
-case 141:
-#line 542 "perly.y"
+case 137:
+#line 520 "perly.y"
 { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
-case 142:
-#line 544 "perly.y"
+case 138:
+#line 522 "perly.y"
 { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
-case 143:
-#line 546 "perly.y"
+case 139:
+#line 524 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); }
 break;
-case 144:
-#line 549 "perly.y"
+case 140:
+#line 527 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, 0); }
 break;
-case 145:
-#line 551 "perly.y"
+case 141:
+#line 529 "perly.y"
 { yyval.opval = newOP(yyvsp[-2].ival, 0); }
 break;
-case 146:
-#line 553 "perly.y"
+case 142:
+#line 531 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, 0,
                                scalar(yyvsp[0].opval)); }
 break;
-case 147:
-#line 556 "perly.y"
+case 143:
+#line 534 "perly.y"
 { yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); }
 break;
-case 148:
-#line 558 "perly.y"
+case 144:
+#line 536 "perly.y"
 { yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
 break;
-case 149:
-#line 560 "perly.y"
+case 145:
+#line 538 "perly.y"
 { yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); }
 break;
-case 150:
-#line 562 "perly.y"
+case 146:
+#line 540 "perly.y"
 { yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); }
 break;
-case 153:
-#line 568 "perly.y"
+case 149:
+#line 546 "perly.y"
 { yyval.opval = Nullop; }
 break;
-case 154:
-#line 570 "perly.y"
+case 150:
+#line 548 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 155:
-#line 574 "perly.y"
+case 151:
+#line 552 "perly.y"
 { yyval.opval = Nullop; }
 break;
-case 156:
-#line 576 "perly.y"
+case 152:
+#line 554 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 157:
-#line 578 "perly.y"
+case 153:
+#line 556 "perly.y"
 { yyval.opval = yyvsp[-1].opval; }
 break;
-case 158:
-#line 581 "perly.y"
+case 154:
+#line 559 "perly.y"
 { yyval.ival = 0; }
 break;
-case 159:
-#line 582 "perly.y"
+case 155:
+#line 560 "perly.y"
 { yyval.ival = 1; }
 break;
-case 160:
-#line 586 "perly.y"
+case 156:
+#line 564 "perly.y"
 { in_my = 0; yyval.opval = my(yyvsp[0].opval); }
 break;
-case 161:
-#line 590 "perly.y"
+case 157:
+#line 568 "perly.y"
 { yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); }
 break;
-case 162:
-#line 594 "perly.y"
+case 158:
+#line 572 "perly.y"
 { yyval.opval = newSVREF(yyvsp[0].opval); }
 break;
-case 163:
-#line 598 "perly.y"
+case 159:
+#line 576 "perly.y"
 { yyval.opval = newAVREF(yyvsp[0].opval); }
 break;
-case 164:
-#line 602 "perly.y"
+case 160:
+#line 580 "perly.y"
 { yyval.opval = newHVREF(yyvsp[0].opval); }
 break;
-case 165:
-#line 606 "perly.y"
+case 161:
+#line 584 "perly.y"
 { yyval.opval = newAVREF(yyvsp[0].opval); }
 break;
-case 166:
-#line 610 "perly.y"
+case 162:
+#line 588 "perly.y"
 { yyval.opval = newGVREF(0,yyvsp[0].opval); }
 break;
-case 167:
-#line 614 "perly.y"
+case 163:
+#line 592 "perly.y"
 { yyval.opval = scalar(yyvsp[0].opval); }
 break;
-case 168:
-#line 616 "perly.y"
+case 164:
+#line 594 "perly.y"
 { yyval.opval = scalar(yyvsp[0].opval);  }
 break;
-case 169:
-#line 618 "perly.y"
+case 165:
+#line 596 "perly.y"
 { yyval.opval = scope(yyvsp[0].opval); }
 break;
-case 170:
-#line 621 "perly.y"
+case 166:
+#line 599 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-#line 2249 "perly.c"
+#line 2178 "perly.c"
     }
     yyssp -= yym;
     yystate = *yyssp;
index a347250..dae42d3 100644 (file)
@@ -78,7 +78,7 @@ Index: perly.c
   #define YYERRCODE 256
   short yylhs[] = {                                        -1,
 ***************
-*** 1337,1347 ****
+*** 1296,1306 ****
   int yyerrflag;
   int yychar;
 - short *yyssp;
@@ -88,12 +88,12 @@ Index: perly.c
 - short yyss[YYSTACKSIZE];
 - YYSTYPE yyvs[YYSTACKSIZE];
 - #define yystacksize YYSTACKSIZE
-  #line 624 "perly.y"
+  #line 602 "perly.y"
    /* PROGRAM */
---- 1272,1277 ----
+--- 1231,1236 ----
 ***************
-*** 1350,1361 ****
---- 1280,1336 ----
+*** 1309,1320 ****
+--- 1239,1295 ----
   #define YYACCEPT goto yyaccept
   #define YYERROR goto yyerrlab
 + 
@@ -152,8 +152,8 @@ Index: perly.c
       if (yys = getenv("YYDEBUG"))
       {
 ***************
-*** 1370,1373 ****
---- 1345,1356 ----
+*** 1329,1332 ****
+--- 1304,1315 ----
       yychar = (-1);
   
 +     /*
@@ -167,20 +167,20 @@ Index: perly.c
       yyssp = yyss;
       yyvsp = yyvs;
 ***************
-*** 1385,1389 ****
+*** 1344,1348 ****
               if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
               if (!yys) yys = "illegal-symbol";
 !             printf("yydebug: state %d, reading %d (%s)\n", yystate,
                       yychar, yys);
           }
---- 1368,1372 ----
+--- 1327,1331 ----
               if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
               if (!yys) yys = "illegal-symbol";
 !             fprintf(stderr, "yydebug: state %d, reading %d (%s)\n", yystate,
                       yychar, yys);
           }
 ***************
-*** 1395,1404 ****
+*** 1354,1363 ****
   #if YYDEBUG
           if (yydebug)
 !             printf("yydebug: state %d, shifting to state %d\n",
@@ -191,7 +191,7 @@ Index: perly.c
 !             goto yyoverflow;
           }
           *++yyssp = yystate = yytable[yyn];
---- 1378,1401 ----
+--- 1337,1360 ----
   #if YYDEBUG
           if (yydebug)
 !             fprintf(stderr, "yydebug: state %d, shifting to state %d\n",
@@ -217,7 +217,7 @@ Index: perly.c
           }
           *++yyssp = yystate = yytable[yyn];
 ***************
-*** 1436,1445 ****
+*** 1395,1404 ****
   #if YYDEBUG
                   if (yydebug)
 !                     printf("yydebug: state %d, error recovery shifting\
@@ -228,7 +228,7 @@ Index: perly.c
 !                     goto yyoverflow;
                   }
                   *++yyssp = yystate = yytable[yyn];
---- 1433,1457 ----
+--- 1392,1416 ----
   #if YYDEBUG
                   if (yydebug)
 !                     fprintf(stderr,
@@ -255,14 +255,14 @@ Index: perly.c
                   }
                   *++yyssp = yystate = yytable[yyn];
 ***************
-*** 1451,1456 ****
+*** 1410,1415 ****
   #if YYDEBUG
                   if (yydebug)
 !                     printf("yydebug: error recovery discarding state %d\n",
 !                             *yyssp);
   #endif
                   if (yyssp <= yyss) goto yyabort;
---- 1463,1469 ----
+--- 1422,1428 ----
   #if YYDEBUG
                   if (yydebug)
 !                     fprintf(stderr,
@@ -271,14 +271,14 @@ Index: perly.c
   #endif
                   if (yyssp <= yyss) goto yyabort;
 ***************
-*** 1469,1474 ****
+*** 1428,1433 ****
               if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
               if (!yys) yys = "illegal-symbol";
 !             printf("yydebug: state %d, error recovery discards token %d (%s)\n",
 !                     yystate, yychar, yys);
           }
   #endif
---- 1482,1488 ----
+--- 1441,1447 ----
               if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
               if (!yys) yys = "illegal-symbol";
 !             fprintf(stderr,
@@ -287,27 +287,27 @@ Index: perly.c
           }
   #endif
 ***************
-*** 1479,1483 ****
+*** 1438,1442 ****
   #if YYDEBUG
       if (yydebug)
 !         printf("yydebug: state %d, reducing by rule %d (%s)\n",
                   yystate, yyn, yyrule[yyn]);
   #endif
---- 1493,1497 ----
+--- 1452,1456 ----
   #if YYDEBUG
       if (yydebug)
 !         fprintf(stderr, "yydebug: state %d, reducing by rule %d (%s)\n",
                   yystate, yyn, yyrule[yyn]);
   #endif
 ***************
-*** 2256,2261 ****
+*** 2185,2190 ****
   #if YYDEBUG
           if (yydebug)
 !             printf("yydebug: after reduction, shifting from state 0 to\
 !  state %d\n", YYFINAL);
   #endif
           yystate = YYFINAL;
---- 2270,2276 ----
+--- 2199,2205 ----
   #if YYDEBUG
           if (yydebug)
 !             fprintf(stderr,
@@ -316,20 +316,20 @@ Index: perly.c
   #endif
           yystate = YYFINAL;
 ***************
-*** 2271,2275 ****
+*** 2200,2204 ****
                   if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
                   if (!yys) yys = "illegal-symbol";
 !                 printf("yydebug: state %d, reading %d (%s)\n",
                           YYFINAL, yychar, yys);
               }
---- 2286,2290 ----
+--- 2215,2219 ----
                   if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
                   if (!yys) yys = "illegal-symbol";
 !                 fprintf(stderr, "yydebug: state %d, reading %d (%s)\n",
                           YYFINAL, yychar, yys);
               }
 ***************
-*** 2286,2295 ****
+*** 2215,2224 ****
   #if YYDEBUG
       if (yydebug)
 !         printf("yydebug: after reduction, shifting from state %d \
@@ -340,7 +340,7 @@ Index: perly.c
 !         goto yyoverflow;
       }
       *++yyssp = yystate;
---- 2301,2325 ----
+--- 2230,2254 ----
   #if YYDEBUG
       if (yydebug)
 !         fprintf(stderr,
@@ -367,7 +367,7 @@ Index: perly.c
       }
       *++yyssp = yystate;
 ***************
-*** 2297,2304 ****
+*** 2226,2233 ****
       goto yyloop;
   yyoverflow:
 !     yyerror("yacc stack overflow");
@@ -376,7 +376,7 @@ Index: perly.c
   yyaccept:
 !     return (0);
   }
---- 2327,2334 ----
+--- 2256,2263 ----
       goto yyloop;
   yyoverflow:
 !     yyerror("Out of memory for yacc stack");
diff --git a/perly.y b/perly.y
index 5ee78f8..a281dff 100644 (file)
--- a/perly.y
+++ b/perly.y
@@ -173,15 +173,6 @@ cond       :       IF '(' remember mexpr ')' mblock else
                        { copline = $1;
                            $$ = block_end($3,
                                   newCONDOP(0, $4, scope($6), $7)); }
-       |       IF block block else
-                       { copline = $1;
-                           deprecate("if BLOCK BLOCK");
-                           $$ = newCONDOP(0, scope($2), scope($3), $4); }
-       |       UNLESS block block else
-                       { copline = $1;
-                           deprecate("unless BLOCK BLOCK");
-                           $$ = newCONDOP(0, invert(scalar(scope($2))),
-                                               scope($3), $4); }
        ;
 
 cont   :       /* NULL */
@@ -202,19 +193,6 @@ loop       :       label WHILE '(' remember mtexpr ')' mblock cont
                                   newSTATEOP(0, $1,
                                     newWHILEOP(0, 1, (LOOP*)Nullop,
                                                $5, $7, $8))); }
-       |       label WHILE block block cont
-                       { copline = $2;
-                           deprecate("while BLOCK BLOCK");
-                           $$ = newSTATEOP(0, $1,
-                                  newWHILEOP(0, 1, (LOOP*)Nullop,
-                                             scope($3), $4, $5)); }
-       |       label UNTIL block block cont
-                       { copline = $2;
-                           deprecate("until BLOCK BLOCK");
-                           $$ = newSTATEOP(0, $1,
-                                  newWHILEOP(0, 1, (LOOP*)Nullop,
-                                             invert(scalar(scope($3))),
-                                             $4, $5)); }
        |       label FOR MY remember my_scalar '(' mexpr ')' mblock cont
                        { $$ = block_end($4,
                                 newFOROP(0, $1, $2, $5, $7, $9, $10)); }
index 564a63a..9012b57 100644 (file)
@@ -17,10 +17,11 @@ POD =       \
        perlform.pod    \
        perlfunc.pod    \
        perlguts.pod    \
-       perli18n.pod    \
        perlipc.pod     \
+       perllocale.pod  \
        perllol.pod     \
        perlmod.pod     \
+       perlnews.pod    \
        perlobj.pod     \
        perlop.pod      \
        perlovl.pod     \
@@ -34,6 +35,7 @@ POD =         \
        perlsyn.pod     \
        perltie.pod     \
        perltoc.pod     \
+       perltoot.pod    \
        perltrap.pod    \
        perlvar.pod     \
        perlxs.pod      \
@@ -53,10 +55,11 @@ MAN =       \
        perlform.man    \
        perlfunc.man    \
        perlguts.man    \
-       perli18n.man    \
        perlipc.man     \
+       perllocale.man  \
        perllol.man     \
        perlmod.man     \
+       perlnews.man    \
        perlobj.man     \
        perlop.man      \
        perlovl.man     \
@@ -70,6 +73,7 @@ MAN =         \
        perlsyn.man     \
        perltie.man     \
        perltoc.man     \
+       perltoot.man    \
        perltrap.man    \
        perlvar.man     \
        perlxs.man      \
@@ -89,10 +93,11 @@ HTML =      \
        perlform.html   \
        perlfunc.html   \
        perlguts.html   \
-       perli18n.html   \
        perlipc.html    \
+       perllocale.html \
        perllol.html    \
        perlmod.html    \
+       perlnews.html   \
        perlobj.html    \
        perlop.html     \
        perlovl.html    \
@@ -106,6 +111,7 @@ HTML =      \
        perlsyn.html    \
        perltie.html    \
        perltoc.html    \
+       perltoot.html   \
        perltrap.html   \
        perlvar.html    \
        perlxs.html     \
@@ -125,10 +131,11 @@ TEX =     \
        perlform.tex    \
        perlfunc.tex    \
        perlguts.tex    \
-       perli18n.tex    \
        perlipc.tex     \
+       perllocale.tex  \
        perllol.tex     \
        perlmod.tex     \
+       perlnews.tex    \
        perlobj.tex     \
        perlop.tex      \
        perlovl.tex     \
@@ -142,6 +149,7 @@ TEX =       \
        perlsyn.tex     \
        perltie.tex     \
        perltoc.tex     \
+       perltoot.tex    \
        perltrap.tex    \
        perlvar.tex     \
        perlxs.tex      \
index e43424f..76a0f26 100644 (file)
@@ -268,7 +268,7 @@ directory.  If PERL5LIB is defined, PERLLIB is not used.
 =back
 
 Perl also has environment variables that control how Perl handles
-language-specific data. Please consult the L<perli18n> section.
+language-specific data.  Please consult L<perllocale>.
 
 Apart from these, Perl uses no other environment variables, except
 to make them available to the script being executed, and to child
index 9e6a7f1..fe3da14 100644 (file)
@@ -3392,8 +3392,11 @@ That is exactly equivalent to
     BEGIN { require Module; }
 
 If the VERSION argument is present between Module and LIST, then the
-C<use> will fail if the C<$VERSION> variable in package Module is
-less than VERSION.
+C<use> will call the VERSION method in class Module with the given
+version as an argument.  The default VERSION method, inherited from
+the Universal class, croaks if the given version is larger than the
+value of the variable $Module::VERSION.  (Note that there is not a
+comma after VERSION!)
 
 Because this is a wide-open interface, pragmas (compiler directives)
 are also implemented this way.  Currently implemented pragmas are:
index e6081aa..c2b1f6c 100644 (file)
@@ -380,7 +380,7 @@ manipulate @INC at compile time
 
 =item locale
 
-use or ignore current locale for built-in operations (see L<perli18n>)
+use or ignore current locale for built-in operations (see L<perllocale>)
 
 =item ops
 
@@ -432,6 +432,18 @@ split a package for autoloading
 
 benchmark running times of code
 
+=item CPAN
+
+interface to Comprehensive Perl Archive Network
+
+=item CPAN::FirstTime
+
+create a CPAN configuration file
+
+=item CPAN::Nox
+
+run CPAN while avoiding compiled extensions
+
 =item Carp
 
 warn of errors (from perspective of caller)
@@ -520,18 +532,6 @@ write linker options files for dynamic extension
 
 add blib/* directories to @INC
 
-=item CPAN
-
-interface to Comprehensive Perl Archive Network
-
-=item CPAN::FirstTime
-
-create a CPAN configuration file
-
-=item CPAN::Nox
-
-run CPAN while avoiding compiled extensions
-
 =item Fatal
 
 replace functions with equivalents which succeed or die
@@ -648,50 +648,10 @@ complex numbers and associated mathematical functions
 
 tied access to ndbm files
 
-=item Net::Cmd
-
-Base class for command-oriented protocols
-
-=item Net::Domain
-
-Domain Name System client
-
-=item Net::FTP
-
-File Transfer Protocol client
-
-=item Net::NNTP
-
-Network News Transfer Protocol client
-
-=item Net::Netrc
-
-.netrc lookup routines
-
 =item Net::Ping
 
 Hello, anybody home?
 
-=item Net::POP3
-
-Post Office Protocol client
-
-=item Net::SMTP
-
-Simple Mail Transfer Protocol client
-
-=item Net::SNPP
-
-Simple Network Pager Protocol client
-
-=item Net::Telnet
-
-Telnet client
-
-=item Net::Time
-
-Time and NetTime protocols
-
 =item Net::hostent
 
 by-name interface to Perl's built-in gethost*() functions
index 7e6e626..a624b21 100644 (file)
@@ -162,10 +162,11 @@ this more than we have to.)
 =item use Module VERSION LIST
 
 If the VERSION argument is present between Module and LIST, then the
-C<use> will fail if the $VERSION variable in package Module is
-less than VERSION.
-
-Note that there is not a comma after the version!
+C<use> will call the VERSION method in class Module with the given
+version as an argument.  The default VERSION method, inherited from
+the Universal class, croaks if the given version is larger than the
+value of the variable $Module::VERSION.  (Note that there is not a
+comma after VERSION!)
 
 =item prototype(FUNCTION)
 
@@ -209,16 +210,16 @@ I<undef> is returned.
 
 =item VERSION( [NEED] )
 
-C<VERSION> returns the version number of the class (package). If the
-NEED argument is given then it will check that the current version is
-not less than NEED and die if this is not the case. This method is
-normally called as a class method. This method is also called when the
-C<VERSION> form of C<use> is used.
+C<VERSION> returns the version number of the class (package).  If the
+NEED argument is given then it will check that the current version (as
+defined by the $VERSION variable in the given package) not less than
+NEED; it will die if this is not the case.  This method is normally
+called as a class method.  This method is called automatically by the
+C<VERSION> form of C<use>.
 
     use A 1.2 qw(some imported subs);
-
-    A->VERSION( 1.2 );
-    $ref->is_instance();    # True
+    # implies:
+    A->VERSION(1.2);
 
 =item class()
 
@@ -425,18 +426,22 @@ new pods are included in section 1:
 
 =over 4
 
-=item L<perli18n>
+=item L<perlnews>
 
-Internationalization.
+This document.
 
-=item L<perlapio>
+=item L<perllocale>
 
-Perl internal IO abstraction interface.
+Locale support (internationalization and localization).
 
 =item L<perltoot>
 
 Tutorial on Perl OO programming.
 
+=item L<perlapio>
+
+Perl internal IO abstraction interface.
+
 =item L<perldebug>
 
 Although not new, this has been massively updated.
index 1d13d90..9b1ede1 100644 (file)
@@ -281,7 +281,7 @@ are inherited by all other classes:
 
 =over 4
 
-=item isa ( CLASS )
+=item isa(CLASS)
 
 C<isa> returns I<true> if its object is blessed into a sub-class of C<CLASS>
 
@@ -294,29 +294,30 @@ allows the ability to check what a reference points to. Example
        ...
     }
 
-=item can ( METHOD )
+=item can(METHOD)
 
 C<can> checks to see if its object has a method called C<METHOD>,
 if it does then a reference to the sub is returned, if it does not then
 I<undef> is returned.
 
-=item VERSION ( [ VERSION ] )
+=item VERSION( [NEED] )
 
-C<VERSION> returns the VERSION number of the class (package). If
-an argument is given then it will check that the current version is not 
-less that the given argument. This method is normally called as a class
-method. This method is also called when the C<VERSION> form of C<use> is
-used.
+C<VERSION> returns the version number of the class (package).  If the
+NEED argument is given then it will check that the current version (as
+defined by the $VERSION variable in the given package) not less than
+NEED; it will die if this is not the case.  This method is normally
+called as a class method.  This method is called automatically by the
+C<VERSION> form of C<use>.
 
     use A 1.2 qw(some imported subs);
-    
-    A->VERSION( 1.2 );
+    # implies:
+    A->VERSION(1.2);
 
-=item class ()
+=item class()
 
 C<class> returns the class name of its object.
 
-=item is_instance ()
+=item is_instance()
 
 C<is_instance> returns true if its object is an instance of some
 class, false if its object is the class (package) itself. Example
@@ -336,6 +337,9 @@ C<isa> uses a very similar method and cache-ing strategy. This may cause
 strange effects if the Perl code dynamically changes @ISA in any package.
 
 You may add other methods to the UNIVERSAL class via Perl or XS code.
+You do not need to C<use UNIVERSAL> in order to make these methods
+available to your program.  This is necessary only if you wish to
+have C<isa> available as a plain subroutine in the current package.
 
 =head2 Destructors        
 
index 3fdedc2..ff8e24f 100644 (file)
@@ -928,7 +928,7 @@ superclass's name.  This in particular is bad if you change which classes
 you inherit from, or add others.  Fortunately, the pseudoclass SUPER
 comes to the rescue here.
 
-    $class->SUPER::debug($Debugging);
+    $self->SUPER::debug($Debugging);
 
 This way it starts looking in my class's @ISA.  This only makes sense
 from I<within> a method call, though.  Don't try to access anything
@@ -1271,7 +1271,7 @@ Although this is the same function each time, it contains a different
 version of $self.
 
 When a method like C<$him-E<gt>name("Jason")> is called, its implicit
-zeroth argument is as the invoking object just as it is with all method
+zeroth argument is the invoking object just as it is with all method
 calls.  But in this case, it's our code reference (something like a
 function pointer in C++, but with deep binding of lexical variables).
 There's not a lot to be done with a code reference beyond calling it, so
index 024279a..3df9386 100644 (file)
@@ -2,11 +2,13 @@
 #psroff -t -man -rC1 -rD1 -rF1 > /tmp/PerlDoc.ps 2>/tmp/PerlTOC.raw \
 nroff -man -rC1 -rD1 -rF1 > /tmp/PerlDoc.txt 2>/tmp/PerlTOC.nr.raw \
     /usr/local/man/man1/perl.1 \
+    /usr/local/man/man1/perlnews.1     \
     /usr/local/man/man1/perldata.1     \
     /usr/local/man/man1/perlsyn.1      \
     /usr/local/man/man1/perlop.1       \
     /usr/local/man/man1/perlre.1       \
     /usr/local/man/man1/perlrun.1      \
+    /usr/local/man/man1/perllocale.1   \
     /usr/local/man/man1/perlfunc.1     \
     /usr/local/man/man1/perlvar.1      \
     /usr/local/man/man1/perlsub.1      \
diff --git a/pp.c b/pp.c
index ab1816d..b07a54b 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -29,7 +29,8 @@
 typedef int IBW;
 typedef unsigned UBW;
 
-static void doencodes _((SV *sv, char *s, I32 len));
+static SV* refto _((SV* sv));
+static void doencodes _((SV* sv, char* s, I32 len));
 
 /* variations on pp_null */
 
@@ -283,49 +284,49 @@ PP(pp_anoncode)
 
 PP(pp_srefgen)
 {
-    dSP; dTOPss;
-    SV* rv;
-    rv = sv_newmortal();
-    sv_upgrade(rv, SVt_RV);
-    if (SvPADTMP(sv))
-       sv = newSVsv(sv);
-    else {
-       SvTEMP_off(sv);
-       (void)SvREFCNT_inc(sv);
-    }
-    SvRV(rv) = sv;
-    SvROK_on(rv);
-    SETs(rv);
+    dSP;
+    *SP = refto(*SP);
     RETURN;
 } 
 
 PP(pp_refgen)
 {
     dSP; dMARK;
-    SV* sv;
-    SV* rv;
     if (GIMME != G_ARRAY) {
        MARK[1] = *SP;
        SP = MARK + 1;
     }
     EXTEND_MORTAL(SP - MARK);
-    while (MARK < SP) {
-       sv = *++MARK;
-       rv = sv_newmortal();
-       sv_upgrade(rv, SVt_RV);
-       if (SvPADTMP(sv))
-           sv = newSVsv(sv);
-       else {
-           SvTEMP_off(sv);
-           (void)SvREFCNT_inc(sv);
-       }
-       SvRV(rv) = sv;
-       SvROK_on(rv);
-       *MARK = rv;
-    }
+    while (++MARK <= SP)
+       *MARK = refto(*MARK);
     RETURN;
 }
 
+static SV*
+refto(sv)
+SV* sv;
+{
+    SV* rv;
+
+    if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
+       if (LvTARGLEN(sv))
+           vivify_itervar(sv);
+       if (LvTARG(sv))
+           sv = LvTARG(sv);
+    }
+    else if (SvPADTMP(sv))
+       sv = newSVsv(sv);
+    else {
+       SvTEMP_off(sv);
+       (void)SvREFCNT_inc(sv);
+    }
+    rv = sv_newmortal();
+    sv_upgrade(rv, SVt_RV);
+    SvRV(rv) = sv;
+    SvROK_on(rv);
+    return rv;
+}
+
 PP(pp_ref)
 {
     dSP; dTARGET;
index 6018793..332ae48 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -109,6 +109,8 @@ PP(pp_substcont)
        if (cx->sb_iters > cx->sb_maxiters)
            DIE("Substitution loop");
 
+       if (!cx->sb_rxtainted)
+           cx->sb_rxtainted = SvTAINTED(TOPs);
        sv_catsv(dstr, POPs);
        if (rx->subbase)
            Safefree(rx->subbase);
@@ -131,6 +133,8 @@ PP(pp_substcont)
 
            (void)SvPOK_only(targ);
            SvSETMAGIC(targ);
+           if (cx->sb_rxtainted)
+               SvTAINTED_on(targ);
            PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
            LEAVE_SCOPE(cx->sb_oldsave);
            POPSUBST(cx);
@@ -148,6 +152,7 @@ PP(pp_substcont)
     sv_catpvn(dstr, s, m-s);
     cx->sb_s = rx->endp[0];
     cx->sb_subbase = rx->subbase;
+    cx->sb_rxtainted |= rx->exec_tainted;
 
     rx->subbase = Nullch;      /* so recursion works */
     RETURNOP(pm->op_pmreplstart);
index fb28bfe..ba49535 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -894,8 +894,6 @@ play_it_again:
                else
                    mg->mg_flags &= ~MGf_MINMATCH;
            }
-           else
-               mg->mg_len = -1;
        }
        LEAVE_SCOPE(oldsave);
        RETPUSHYES;
@@ -932,13 +930,6 @@ nope:
        ++BmUSEFUL(pm->op_pmshort);
 
 ret_no:
-    if (global) {
-       if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
-           MAGIC* mg = mg_find(TARG, 'g');
-           if (mg)
-               mg->mg_len = -1;
-       }
-    }
     LEAVE_SCOPE(oldsave);
     if (gimme == G_ARRAY)
        RETURN;
@@ -1157,6 +1148,7 @@ do_readline()
            SvTAINTED_on(sv);
        }
        IoLINES(io)++;
+       SvSETMAGIC(sv);
        XPUSHs(sv);
        if (type == OP_GLOB) {
            char *tmps;
@@ -1314,11 +1306,9 @@ PP(pp_iter)
     cx = &cxstack[cxstack_ix];
     if (cx->cx_type != CXt_LOOP)
        DIE("panic: pp_iter");
-    av = cx->blk_loop.iterary;
-    if (av == curstack && cx->blk_loop.iterix >= cx->blk_oldsp)
-       RETPUSHNO;
 
-    if (cx->blk_loop.iterix >= AvFILL(av))
+    av = cx->blk_loop.iterary;
+    if (cx->blk_loop.iterix >= (av == curstack ? cx->blk_oldsp : AvFILL(av)))
        RETPUSHNO;
 
     if (sv = AvARRAY(av)[++cx->blk_loop.iterix])
@@ -1327,6 +1317,10 @@ PP(pp_iter)
        sv = &sv_undef;
     if (av != curstack && SvIMMORTAL(sv)) {
        SV *lv = cx->blk_loop.iterlval;
+       if (lv && SvREFCNT(lv) > 1) {
+           SvREFCNT_dec(lv);
+           lv = Nullsv;
+       }
        if (lv)
            SvREFCNT_dec(LvTARG(lv));
        else {
@@ -1360,6 +1354,7 @@ PP(pp_subst)
     I32 maxiters;
     register I32 i;
     bool once;
+    bool rxtainted;
     char *orig;
     I32 safebase;
     register REGEXP *rx = pm->op_pmregexp;
@@ -1427,116 +1422,105 @@ PP(pp_subst)
            pm->op_pmshort = Nullsv;    /* opt is being useless */
        }
     }
+
+    /* only replace once? */
     once = !(rpm->op_pmflags & PMf_GLOBAL);
-    if (rpm->op_pmflags & PMf_CONST) { /* known replacement string? */
-       c = SvPV(dstr, clen);
-       if (clen <= rx->minlen) {
-                                       /* can do inplace substitution */
-           if (pregexec(rx, s, strend, orig, 0,
-             SvSCREAM(TARG) ? TARG : Nullsv, safebase)) {
-               if (force_on_match) {
-                   force_on_match = 0;
-                   s = SvPV_force(TARG, len);
-                   goto force_it;
+
+    /* known replacement string? */
+    c = (rpm->op_pmflags & PMf_CONST) ? SvPV(dstr, clen) : Nullch;
+
+    /* can do inplace substitution? */
+    if (c && clen <= rx->minlen) {
+       if (! pregexec(rx, s, strend, orig, 0,
+                      SvSCREAM(TARG) ? TARG : Nullsv, safebase)) {
+           PUSHs(&sv_no);
+           LEAVE_SCOPE(oldsave);
+           RETURN;
+       }
+       if (force_on_match) {
+           force_on_match = 0;
+           s = SvPV_force(TARG, len);
+           goto force_it;
+       }
+       if (rx->subbase)        /* oops, no we can't */
+           goto long_way;
+       d = s;
+       curpm = pm;
+       SvSCREAM_off(TARG);     /* disable possible screamer */
+       if (once) {
+           rxtainted = rx->exec_tainted;
+           m = rx->startp[0];
+           d = rx->endp[0];
+           s = orig;
+           if (m - s > strend - d) {  /* faster to shorten from end */
+               if (clen) {
+                   Copy(c, m, clen, char);
+                   m += clen;
                }
-               if (rx->subbase)        /* oops, no we can't */
-                   goto long_way;
-               d = s;
-               curpm = pm;
-               SvSCREAM_off(TARG);     /* disable possible screamer */
-               if (once) {
-                   m = rx->startp[0];
-                   d = rx->endp[0];
-                   s = orig;
-                   if (m - s > strend - d) {   /* faster to shorten from end */
-                       if (clen) {
-                           Copy(c, m, clen, char);
-                           m += clen;
-                       }
-                       i = strend - d;
-                       if (i > 0) {
-                           Move(d, m, i, char);
-                           m += i;
-                       }
-                       *m = '\0';
-                       SvCUR_set(TARG, m - s);
-                       (void)SvPOK_only(TARG);
-                       SvSETMAGIC(TARG);
-                       PUSHs(&sv_yes);
-                       LEAVE_SCOPE(oldsave);
-                       RETURN;
-                   }
-                   /*SUPPRESS 560*/
-                   else if (i = m - s) {       /* faster from front */
-                       d -= clen;
-                       m = d;
-                       sv_chop(TARG, d-i);
-                       s += i;
-                       while (i--)
-                           *--d = *--s;
-                       if (clen)
-                           Copy(c, m, clen, char);
-                       (void)SvPOK_only(TARG);
-                       SvSETMAGIC(TARG);
-                       PUSHs(&sv_yes);
-                       LEAVE_SCOPE(oldsave);
-                       RETURN;
-                   }
-                   else if (clen) {
-                       d -= clen;
-                       sv_chop(TARG, d);
-                       Copy(c, d, clen, char);
-                       (void)SvPOK_only(TARG);
-                       SvSETMAGIC(TARG);
-                       PUSHs(&sv_yes);
-                       LEAVE_SCOPE(oldsave);
-                       RETURN;
-                   }
-                   else {
-                       sv_chop(TARG, d);
-                       (void)SvPOK_only(TARG);
-                       SvSETMAGIC(TARG);
-                       PUSHs(&sv_yes);
-                       LEAVE_SCOPE(oldsave);
-                       RETURN;
-                   }
-                   /* NOTREACHED */
+               i = strend - d;
+               if (i > 0) {
+                   Move(d, m, i, char);
+                   m += i;
                }
-               do {
-                   if (iters++ > maxiters)
-                       DIE("Substitution loop");
-                   m = rx->startp[0];
-                   /*SUPPRESS 560*/
-                   if (i = m - s) {
-                       if (s != d)
-                           Move(s, d, i, char);
-                       d += i;
-                   }
-                   if (clen) {
-                       Copy(c, d, clen, char);
-                       d += clen;
-                   }
-                   s = rx->endp[0];
-               } while (pregexec(rx, s, strend, orig, s == m,
-                   Nullsv, TRUE));     /* (don't match same null twice) */
-               if (s != d) {
-                   i = strend - s;
-                   SvCUR_set(TARG, d - SvPVX(TARG) + i);
-                   Move(s, d, i+1, char);              /* include the Null */
+               *m = '\0';
+               SvCUR_set(TARG, m - s);
+           }
+           /*SUPPRESS 560*/
+           else if (i = m - s) {       /* faster from front */
+               d -= clen;
+               m = d;
+               sv_chop(TARG, d-i);
+               s += i;
+               while (i--)
+                   *--d = *--s;
+               if (clen)
+                   Copy(c, m, clen, char);
+           }
+           else if (clen) {
+               d -= clen;
+               sv_chop(TARG, d);
+               Copy(c, d, clen, char);
+           }
+           else {
+               sv_chop(TARG, d);
+           }
+           PUSHs(&sv_yes);
+       }
+       else {
+           rxtainted = 0;
+           do {
+               if (iters++ > maxiters)
+                   DIE("Substitution loop");
+               rxtainted |= rx->exec_tainted;
+               m = rx->startp[0];
+               /*SUPPRESS 560*/
+               if (i = m - s) {
+                   if (s != d)
+                       Move(s, d, i, char);
+                   d += i;
                }
-               (void)SvPOK_only(TARG);
-               SvSETMAGIC(TARG);
-               PUSHs(sv_2mortal(newSViv((I32)iters)));
-               LEAVE_SCOPE(oldsave);
-               RETURN;
+               if (clen) {
+                   Copy(c, d, clen, char);
+                   d += clen;
+               }
+               s = rx->endp[0];
+           } while (pregexec(rx, s, strend, orig, s == m,
+                             Nullsv, TRUE)); /* don't match same null twice */
+           if (s != d) {
+               i = strend - s;
+               SvCUR_set(TARG, d - SvPVX(TARG) + i);
+               Move(s, d, i+1, char);          /* include the NUL */
            }
-           PUSHs(&sv_no);
-           LEAVE_SCOPE(oldsave);
-           RETURN;
+           PUSHs(sv_2mortal(newSViv((I32)iters)));
        }
+       (void)SvPOK_only(TARG);
+       SvSETMAGIC(TARG);
+       if (rxtainted)
+           SvTAINTED_on(TARG);
+       LEAVE_SCOPE(oldsave);
+       RETURN;
     }
-    else
-       c = Nullch;
+
     if (pregexec(rx, s, strend, orig, 0,
                 SvSCREAM(TARG) ? TARG : Nullsv, safebase)) {
     long_way:
@@ -1545,6 +1529,7 @@ PP(pp_subst)
            s = SvPV_force(TARG, len);
            goto force_it;
        }
+       rxtainted = rx->exec_tainted;
        dstr = NEWSV(25, sv_len(TARG));
        sv_setpvn(dstr, m, s-m);
        curpm = pm;
@@ -1556,6 +1541,7 @@ PP(pp_subst)
        do {
            if (iters++ > maxiters)
                DIE("Substitution loop");
+           rxtainted |= rx->exec_tainted;
            if (rx->subbase && rx->subbase != orig) {
                m = s;
                s = orig;
@@ -1583,6 +1569,8 @@ PP(pp_subst)
 
        (void)SvPOK_only(TARG);
        SvSETMAGIC(TARG);
+       if (rxtainted)
+           SvTAINTED_on(TARG);
        PUSHs(sv_2mortal(newSViv((I32)iters)));
        LEAVE_SCOPE(oldsave);
        RETURN;
@@ -1762,12 +1750,16 @@ PP(pp_entersub)
 
     gimme = GIMME;
     if ((op->op_private & OPpENTERSUB_DB)) {
+       SV *oldsv = sv;
        sv = GvSV(DBsub);
        save_item(sv);
        gv = CvGV(cv);
-       if ( CvFLAGS(cv) & (CVf_ANON | CVf_CLONED)
-            || strEQ(GvNAME(gv), "END") ) {
-           /* GV is potentially non-unique */
+       if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED))
+            || strEQ(GvNAME(gv), "END") 
+            || ((GvCV(gv) != cv) && /* Could be imported, and old sub redefined. */
+                !( (SvTYPE(oldsv) == SVt_PVGV) && (GvCV((GV*)oldsv) == cv)
+                   && (gv = (GV*)oldsv) ))) { /* Use GV from the stack as a fallback. */
+           /* GV is potentially non-unique, or contain different CV. */
            sv_setsv(sv, newRV((SV*)cv));
        }
        else {
diff --git a/proto.h b/proto.h
index cbf38d4..fe06b48 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -43,7 +43,8 @@ OP *  ck_gvconst _((OP * o));
 OP *   ck_retarget _((OP *op));
 OP*    convert _((I32 optype, I32 flags, OP* op));
 char*  cpytill _((char* to, char* from, char* fromend, int delim, I32* retlen));
-void   croak _((char* pat,...)) __attribute__((format(printf,1,2),noreturn));
+void   croak _((const char* pat,...))
+               __attribute__((format(printf,1,2),noreturn));
 CV*    cv_clone _((CV* proto));
 void   cv_undef _((CV* cv));
 SV*    cv_const_sv _((CV* cv));
@@ -54,7 +55,7 @@ SV *  filter_add _((filter_t funcp, SV *datasv));
 void   filter_del _((filter_t funcp));
 I32    filter_read _((int idx, SV *buffer, int maxlen));
 I32    cxinc _((void));
-void   deb _((char* pat,...)) __attribute__((format(printf,1,2)));
+void   deb _((const char* pat,...)) __attribute__((format(printf,1,2)));
 void   deb_growlevel _((void));
 I32    debop _((OP* op));
 I32    debstackptrs _((void));
@@ -63,7 +64,8 @@ void  debprofdump _((void));
 #endif
 I32    debstack _((void));
 void   deprecate _((char* s));
-OP*    die _((char* pat,...)) __attribute__((format(printf,1,2)));
+OP*    die _((const char* pat,...))
+               __attribute__((format(printf,1,2),noreturn));
 OP*    die_where _((char* message));
 void   dounwind _((I32 cxix));
 bool   do_aexec _((SV* really, SV** mark, SV** sp));
@@ -179,11 +181,12 @@ int       magic_clearenv  _((SV* sv, MAGIC* mg));
 int    magic_clearpack _((SV* sv, MAGIC* mg));
 int    magic_clearsig  _((SV* sv, MAGIC* mg));
 int    magic_existspack _((SV* sv, MAGIC* mg));
-int    magic_freevivary _((SV* sv, MAGIC* mg));
+int    magic_freeitervar _((SV* sv, MAGIC* mg));
 int    magic_get       _((SV* sv, MAGIC* mg));
 int    magic_getarylen _((SV* sv, MAGIC* mg));
 int    magic_getpack   _((SV* sv, MAGIC* mg));
 int    magic_getglob   _((SV* sv, MAGIC* mg));
+int    magic_getitervar _((SV* sv, MAGIC* mg));
 int    magic_getpos    _((SV* sv, MAGIC* mg));
 int    magic_getsig    _((SV* sv, MAGIC* mg));
 int    magic_gettaint  _((SV* sv, MAGIC* mg));
@@ -201,6 +204,7 @@ int magic_setcollxfrm _((SV* sv, MAGIC* mg));
 int    magic_setenv    _((SV* sv, MAGIC* mg));
 int    magic_setfm     _((SV* sv, MAGIC* mg));
 int    magic_setisa    _((SV* sv, MAGIC* mg));
+int    magic_setitervar _((SV* sv, MAGIC* mg));
 int    magic_setglob   _((SV* sv, MAGIC* mg));
 int    magic_setmglob  _((SV* sv, MAGIC* mg));
 int    magic_setnkeys  _((SV* sv, MAGIC* mg));
@@ -211,7 +215,6 @@ int magic_setsubstr _((SV* sv, MAGIC* mg));
 int    magic_settaint  _((SV* sv, MAGIC* mg));
 int    magic_setuvar   _((SV* sv, MAGIC* mg));
 int    magic_setvec    _((SV* sv, MAGIC* mg));
-int    magic_setvivary _((SV* sv, MAGIC* mg));
 int    magic_wipepack  _((SV* sv, MAGIC* mg));
 void   magicname _((char* sym, char* name, I32 namlen));
 int    main _((int argc, char** argv, char** env));
@@ -219,7 +222,7 @@ void        markstack_grow _((void));
 #ifdef USE_LOCALE_COLLATE
 char*  mem_collxfrm _((const char *s, STRLEN len, STRLEN *xlen));
 #endif
-char*  mess _((char* pat, va_list* args));
+char*  mess _((const char* pat, va_list* args));
 int    mg_clear _((SV* sv));
 int    mg_copy _((SV *, SV *, char *, I32));
 MAGIC* mg_find _((SV* sv, int type));
@@ -371,10 +374,6 @@ I32        same_dirent _((char* a, char* b));
 #endif
 char*  savepv _((char* sv));
 char*  savepvn _((char* sv, I32 len));
-char*  sharepvn _((char* sv, I32 len, U32 hash));
-void   unsharepvn _((char* sv, I32 len, U32 hash));
-HEK*   share_hek _((char* sv, I32 len, U32 hash));
-void   unshare_hek _((HEK* hek));
 void   savestack_grow _((void));
 void   save_aptr _((AV** aptr));
 AV*    save_ary _((GV* gv));
@@ -415,6 +414,8 @@ char*       screaminstr _((SV* bigsv, SV* littlesv));
 I32    setenv_getix _((char* nam));
 #endif
 void   setdefout _((GV *gv));
+char*  sharepvn _((char* sv, I32 len, U32 hash));
+HEK*   share_hek _((char* sv, I32 len, U32 hash));
 Signal_t sighandler _((int sig));
 SV**   stack_grow _((SV** sp, SV**p, int n));
 int    start_subparse _((void));
@@ -475,8 +476,8 @@ SV* sv_setref_iv _((SV *rv, char *classname, IV iv));
 SV*    sv_setref_nv _((SV *rv, char *classname, double nv));
 SV*    sv_setref_pv _((SV *rv, char *classname, void* pv));
 SV*    sv_setref_pvn _((SV *rv, char *classname, char* pv, I32 n));
-void   sv_setpv _((SV* sv, char* ptr));
-void   sv_setpvn _((SV* sv, char* ptr, STRLEN len));
+void   sv_setpv _((SV* sv, const char* ptr));
+void   sv_setpvn _((SV* sv, const char* ptr, STRLEN len));
 void   sv_setsv _((SV* dsv, SV* ssv));
 void   sv_taint _((SV* sv));
 bool   sv_tainted _((SV* sv));
@@ -486,13 +487,16 @@ void      sv_untaint _((SV* sv));
 bool   sv_upgrade _((SV* sv, U32 mt));
 void   sv_usepvn _((SV* sv, char* ptr, STRLEN len));
 void   taint_env _((void));
-void   taint_proper _((char* f, char* s));
+void   taint_proper _((const char* f, char* s));
 #ifdef UNLINK_ALL_VERSIONS
 I32    unlnk _((char* f));
 #endif
+void   unsharepvn _((char* sv, I32 len, U32 hash));
+void   unshare_hek _((HEK* hek));
 void   utilize _((int aver, I32 floor, OP* version, OP* id, OP* arg));
+void   vivify_itervar _((SV* sv));
 I32    wait4pid _((int pid, int* statusp, int flags));
-void   warn _((char* pat,...)) __attribute__((format(printf,1,2)));
+void   warn _((const char* pat,...)) __attribute__((format(printf,1,2)));
 void   watch _((char **addr));
 I32    whichsig _((char* sig));
 int    yyerror _((char* s));
diff --git a/sv.c b/sv.c
index 3784350..47869b1 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -1949,11 +1949,14 @@ register SV *sstr;
                                    (CvROOT(cv) || CvXSUB(cv)) )
                                warn("Subroutine %s redefined",
                                    GvENAME((GV*)dstr));
-                           SvFAKE_on(cv);
+                           if (SvREFCNT(cv) == 1)
+                               SvFAKE_on(cv);
                        }
                    }
+                   sub_generation++;
                    if (GvCV(dstr) != (CV*)sref) {
                        GvCV(dstr) = (CV*)sref;
+                       GvCVGEN(dstr) = 0; /* Switch off cacheness. */
                        GvASSUMECV_on(dstr);
                    }
                    if (curcop->cop_stash != GvSTASH(dstr))
@@ -2077,7 +2080,7 @@ register SV *sstr;
 void
 sv_setpvn(sv,ptr,len)
 register SV *sv;
-register char *ptr;
+register const char *ptr;
 register STRLEN len;
 {
     assert(len >= 0);  /* STRLEN is probably unsigned, so this may
@@ -2109,7 +2112,7 @@ register STRLEN len;
 void
 sv_setpv(sv,ptr)
 register SV *sv;
-register char *ptr;
+register const char *ptr;
 {
     register STRLEN len;
 
@@ -2394,7 +2397,7 @@ I32 namlen;
        mg->mg_virtual = &vtbl_substr;
        break;
     case 'y':
-       mg->mg_virtual = &vtbl_vivary;
+       mg->mg_virtual = &vtbl_itervar;
        break;
     case '*':
        mg->mg_virtual = &vtbl_glob;
index 8c64be1..0a5f4c1 100755 (executable)
@@ -5,7 +5,7 @@ BEGIN {
     @INC = '../lib';
 }
 
-print "1..5\n";
+print "1..11\n";
 
 $| = 1;
 
@@ -29,15 +29,56 @@ print "not " unless $foo eq "ok 3\n";
 print "ok 2\n";
 
 copy "copy-$$", \*STDOUT;
+unlink "copy-$$";
 
+open(F,"file-$$");
+copy(*F, "copy-$$");
+open(R, "copy-$$") or die; $foo = <R>; close(R);
+print "not " unless $foo eq "ok 3\n";
+print "ok 4\n";
+unlink "copy-$$";
+open(F,"file-$$");
+copy(\*F, "copy-$$");
+open(R, "copy-$$") or die; $foo = <R>; close(R);
+print "not " unless $foo eq "ok 3\n";
+print "ok 5\n";
+unlink "copy-$$";
+
+require IO::File;
+$fh = IO::File->new(">copy-$$") or die "Cannot open copy-$$:$!";
+copy("file-$$",$fh);
+$fh->close;
+open(R, "copy-$$") or die; $foo = <R>; close(R);
+print "not " unless $foo eq "ok 3\n";
+print "ok 6\n";
+unlink "copy-$$";
+require FileHandle;
+my $fh = FileHandle->new(">copy-$$") or die "Cannot open copy-$$:$!";
+copy("file-$$",$fh);
+$fh->close;
+open(R, "copy-$$") or die; $foo = <R>; close(R);
+print "not " unless $foo eq "ok 3\n";
+print "ok 7\n";
 unlink "file-$$";
 
 print "not " if move("file-$$", "copy-$$") or not -e "copy-$$";
-print "ok 4\n";
+print "ok 8\n";
 
 move "copy-$$", "file-$$";
-
 print "not " unless -e "file-$$" and not -e "copy-$$";
-print "ok 5\n";
+open(R, "file-$$") or die; $foo = <R>; close(R);
+print "not " unless $foo eq "ok 3\n";
+print "ok 9\n";
+
+copy "file-$$", "lib";
+open(R, "lib/file-$$") or die; $foo = <R>; close(R);
+print "not " unless $foo eq "ok 3\n";
+print "ok 10\n";
+unlink "lib/file-$$";
+
+move "file-$$", "lib";
+open(R, "lib/file-$$") or die; $foo = <R>; close(R);
+print "not " unless $foo eq "ok 3\n" and not -e "file-$$";;
+print "ok 11\n";
+unlink "lib/file-$$";
 
-unlink "file-$$";
index 8dd786b..1cf325a 100755 (executable)
@@ -1,5 +1,4 @@
 #!./perl -w
-use strict;
 
 BEGIN {
     chdir 't' if -d 't';
@@ -8,6 +7,7 @@ BEGIN {
     $SIG{__WARN__} = sub { die @_ };
 }
 
+use strict;
 use IO::Handle;
 use IPC::Open2;
 #require 'open2.pl'; use subs 'open2';
index a4a978e..a5d7f2e 100755 (executable)
@@ -1,5 +1,4 @@
 #!./perl -w
-use strict;
 
 BEGIN {
     chdir 't' if -d 't';
@@ -8,6 +7,7 @@ BEGIN {
     $SIG{__WARN__} = sub { die @_ };
 }
 
+use strict;
 use IO::Handle;
 use IPC::Open3;
 #require 'open3.pl'; use subs 'open3';
index d93e6d6..d9941fa 100755 (executable)
@@ -2,7 +2,7 @@
 
 # $RCSfile: pat.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:12 $
 
-print "1..60\n";
+print "1..61\n";
 
 $x = "abc\ndef\n";
 
@@ -134,17 +134,19 @@ print join(':',@words) eq "now:is:the:time:for:all:good:men:to:come:to"
     : "not ok 45\n";
 
 @words = ();
+pos = 0;
 while (/to/g) {
     push(@words, $&);
 }
 print join(':',@words) eq "to:to"
     ? "ok 46\n"
-    : "not ok 46 @words\n";
+    : "not ok 46 `@words'\n";
 
+pos $_ = 0;
 @words = /to/g;
 print join(':',@words) eq "to:to"
     ? "ok 47\n"
-    : "not ok 47 @words\n";
+    : "not ok 47 `@words'\n";
 
 $_ = "abcdefghi";
 
@@ -191,12 +193,14 @@ $x=/abc/g;
 print $` eq "abcfoo" ? "ok 53\n" : "not ok 53\n" if $x;
 $x=/abc/g;
 print $x == 0 ? "ok 54\n" : "not ok 54\n";
+pos = 0;
 $x=/ABC/gi;
 print $` eq "" ? "ok 55\n" : "not ok 55\n" if $x;
 $x=/ABC/gi;
 print $` eq "abcfoo" ? "ok 56\n" : "not ok 56\n" if $x;
 $x=/ABC/gi;
 print $x == 0 ? "ok 57\n" : "not ok 57\n";
+pos = 0;
 $x=/abc/g;
 print $' eq "fooabcbar" ? "ok 58\n" : "not ok 58\n" if $x;
 $x=/abc/g;
@@ -204,3 +208,9 @@ print $' eq "bar" ? "ok 59\n" : "not ok 59\n" if $x;
 $_ .= '';
 @x=/abc/g;
 print scalar @x == 2 ? "ok 60\n" : "not ok 60\n";
+
+$_ = "abdc";
+pos $_ = 2;
+/\Gc/g;
+print "not " if (pos $_) != 2;
+print "ok 61\n";
diff --git a/taint.c b/taint.c
index d9fac77..dbb0a1e 100644 (file)
--- a/taint.c
+++ b/taint.c
@@ -9,7 +9,7 @@
 
 void
 taint_proper(f, s)
-char *f;
+const char *f;
 char *s;
 {
     char *ug;
diff --git a/toke.c b/toke.c
index 4c79d7b..6884fa9 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -1208,7 +1208,7 @@ STRLEN append;
        { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "TERMBLOCK" };
 #endif
 
-extern int yychar;             /* last token */
+EXT int yychar;                /* last token */
 
 int
 yylex()
@@ -2915,7 +2915,7 @@ yylex()
 
        case KEY_if:
            yylval.ival = curcop->cop_line;
-           PRETERMBLOCK(IF);
+           OPERATOR(IF);
 
        case KEY_index:
            LOP(OP_INDEX,XTERM);
@@ -3430,11 +3430,11 @@ yylex()
 
        case KEY_until:
            yylval.ival = curcop->cop_line;
-           PRETERMBLOCK(UNTIL);
+           OPERATOR(UNTIL);
 
        case KEY_unless:
            yylval.ival = curcop->cop_line;
-           PRETERMBLOCK(UNLESS);
+           OPERATOR(UNLESS);
 
        case KEY_unlink:
            LOP(OP_UNLINK,XTERM);
@@ -3486,7 +3486,7 @@ yylex()
 
        case KEY_while:
            yylval.ival = curcop->cop_line;
-           PRETERMBLOCK(WHILE);
+           OPERATOR(WHILE);
 
        case KEY_warn:
            hints |= HINT_BLOCK_SCOPE;
diff --git a/util.c b/util.c
index d14a117..84c5573 100644 (file)
--- a/util.c
+++ b/util.c
@@ -1037,12 +1037,12 @@ register I32 len;
 
 #ifdef I_STDARG
 char *
-mess(char *pat, va_list *args)
+mess(const char *pat, va_list *args)
 #else
 /*VARARGS0*/
 char *
 mess(pat, args)
-    char *pat;
+    const char *pat;
     va_list *args;
 #endif
 {
@@ -1112,12 +1112,12 @@ mess(pat, args)
 
 #ifdef I_STDARG
 OP *
-die(char* pat, ...)
+die(const char* pat, ...)
 #else
 /*VARARGS0*/
 OP *
 die(pat, va_alist)
-    char *pat;
+    const char *pat;
     va_dcl
 #endif
 {
@@ -1167,7 +1167,7 @@ die(pat, va_alist)
 
 #ifdef I_STDARG
 void
-croak(char* pat, ...)
+croak(const char* pat, ...)
 #else
 /*VARARGS0*/
 void
@@ -1233,11 +1233,11 @@ croak(pat, va_alist)
 
 void
 #ifdef I_STDARG
-warn(char* pat,...)
+warn(const char* pat,...)
 #else
 /*VARARGS0*/
 warn(pat,va_alist)
-    char *pat;
+    const char *pat;
     va_dcl
 #endif
 {
@@ -1416,7 +1416,9 @@ char *
 int
 #endif
 vsprintf(dest, pat, args)
-char *dest, *pat, *args;
+char *dest;
+const char *pat;
+char *args;
 {
     FILE fakebuf;
 
@@ -2143,7 +2145,7 @@ I32 *retlen;
     return retval;
 }
 
-unsigned long
+UV
 scan_hex(start, len, retlen)
 char *start;
 I32 len;
index 3622ad9..542e139 100644 (file)
@@ -44,7 +44,7 @@ OBJVAL = $@
 #> .endif
 
 # Updated by fndvers.com -- do not edit by hand
-PERL_VERSION = 5_00311#
+PERL_VERSION = 5_00313#
 
 
 ARCHDIR =  [.lib.$(ARCH).$(PERL_VERSION)]
@@ -248,10 +248,10 @@ utils : [.lib.pod]perldoc [.lib.ExtUtils]Miniperl.pm [.utils]c2ph [.utils]h2ph [
 podxform : [.lib.pod]pod2text [.lib.pod]pod2html [.lib.pod]pod2latex [.lib.pod]pod2man
        @ $(NOOP)
 
-pod1 = [.lib.pod]perl.pod [.lib.pod]perlbook.pod [.lib.pod]perlbot.pod [.lib.pod]perlcall.pod
+pod1 = [.lib.pod]perl.pod [.lib.pod]perlapio.pod [.lib.pod]perlbook.pod [.lib.pod]perlbot.pod [.lib.pod]perlcall.pod
 pod2 = [.lib.pod]perldata.pod [.lib.pod]perldebug.pod [.lib.pod]perldiag.pod [.lib.pod]perldsc.pod
 pod3 = [.lib.pod]perlembed.pod [.lib.pod]perlform.pod [.lib.pod]perlfunc.pod [.lib.pod]perlguts.pod
-pod4 = [.lib.pod]perlipc.pod [.lib.pod]perllol.pod [.lib.pod]perlmod.pod [.lib.pod]perlobj.pod
+pod4 = [.lib.pod]perlipc.pod [.lib.pod]perllocale.pod [.lib.pod]perllol.pod [.lib.pod]perlmod.pod [.lib.pod]perlobj.pod
 pod5 = [.lib.pod]perlop.pod [.lib.pod]perlovl.pod [.lib.pod]perlpod.pod [.lib.pod]perlre.pod
 pod6 = [.lib.pod]perlref.pod [.lib.pod]perlrun.pod [.lib.pod]perlsec.pod [.lib.pod]perlstyle.pod
 pod7 = [.lib.pod]perlsub.pod [.lib.pod]perlsyn.pod [.lib.pod]perltie.pod [.lib.pod]perltoc.pod
@@ -488,6 +488,10 @@ IO : [.lib]IO.pm [.lib.IO]File.pm [.lib.IO]Handle.pm [.lib.IO]Pipe.pm [.lib.IO]S
 [.utils]pl2pm : [.utils]pl2pm.PL $(ARCHDIR)Config.pm
        $(MINIPERL) [.utils]pl2pm.PL
 
+[.lib]splain : [.utils]splain.PL $(ARCHDIR)Config.pm
+       $(MINIPERL) [.utils]splain.PL
+       Rename/Log [.utils]splain $@
+
 [.lib.pod]pod2html : [.pod]pod2html.PL $(ARCHDIR)Config.pm
        @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
        $(MINIPERL) [.pod]pod2html.PL
@@ -517,6 +521,10 @@ preplibrary : $(MINIPERL_EXE) $(ARCHDIR)Config.pm [.lib]DynaLoader.pm [.lib.VMS]
        @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
        @ Copy/Log [.pod]perl.pod $@
 
+[.lib.pod]perlapio.pod : [.pod]perlapio.pod
+       @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log [.pod]perlapio.pod $@
+
 [.lib.pod]perlbook.pod : [.pod]perlbook.pod
        @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
        @ Copy/Log [.pod]perlbook.pod $@
@@ -561,6 +569,10 @@ preplibrary : $(MINIPERL_EXE) $(ARCHDIR)Config.pm [.lib]DynaLoader.pm [.lib.VMS]
        @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
        @ Copy/Log [.pod]perlguts.pod $@
 
+[.lib.pod]perllocale.pod : [.pod]perllocale.pod
+       @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log [.pod]perllocale.pod $@
+
 [.lib.pod]perlipc.pod : [.pod]perlipc.pod
        @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
        @ Copy/Log [.pod]perlipc.pod $@
index 186df81..48aa6a5 100644 (file)
  * when Perl is built.  Please do not change it by hand; make
  * any changes to FndVers.Com instead.
  */
-#define ARCHLIB_EXP "/perl_root/lib/VMS_VAX/5_00310"  /**/
+#define ARCHLIB_EXP "/perl_root/lib/VMS_VAX/5_00314"  /**/
 #define ARCHLIB ARCHLIB_EXP    /*config-skip*/
 
+/* BINCOMPAT3:
+ *     This symbol, if defined, indicates that Perl 5.004 should be
+ *     binary-compatible with Perl 5.003.
+ */
+#undef BINCOMPAT3
+
 /* CPPSTDIN:
  *     This symbol contains the first part of the string which will invoke
  *     the C preprocessor on the standard input and produce to standard
  */
 #define HAS_FSETPOS    /**/
 
+/* HAS_GETTIMEOFDAY:
+ *     This symbol, if defined, indicates that the gettimeofday() system
+ *     call is available for a sub-second accuracy clock. Usually, the file
+ *     <sys/resource.h> needs to be included (see I_SYS_RESOURCE).
+ *     The type "Timeval" should be used to refer to "struct timeval".    
+ */
+#undef HAS_GETTIMEOFDAY /**/
+#ifdef HAS_GETTIMEOFDAY
+#  define Timeval struct timeval /*config-skip*/
+#endif
+
 /* HAS_GETGROUPS:
  *     This symbol, if defined, indicates that the getgroups() routine is
  *     available to get the list of process groups.  If unavailable, multiple
 
 /* HAS_STRTOD:
  *     This symbol, if defined, indicates that the strtod routine is
- *     available to translate strings to doubles.
+ *     available to provide better numeric string conversion than atof().
  */
 #define HAS_STRTOD     /**/
 
 /* HAS_STRTOL:
- *     This symbol, if defined, indicates that the strtol routine is
- *     available to translate strings to integers.
+ *     This symbol, if defined, indicates that the strtol routine is available
+ *     to provide better numeric string conversion than atoi() and friends.
  */
 #define HAS_STRTOL     /**/
 
 /* HAS_STRTOUL:
  *     This symbol, if defined, indicates that the strtoul routine is
- *     available to translate strings to integers.
+ *     available to provide conversion of strings to unsigned long.
  */
 #define HAS_STRTOUL    /**/
 
 #undef SETUID_SCRIPTS_ARE_SECURE_NOW   /**/
 #undef DOSUID          /**/
 
+/* HAS_INET_ATON:
+ *     This symbol, if defined, indicates to the C program that the
+ *     inet_aton() function is available to parse IP address "dotted-quad"
+ *     strings.
+ *     VMS: SocketShr doesn't support this, so we let the Socket extension
+ *     roll its own.
+ */
+#undef HAS_INET_ATON           /**/
+
 /* HAS_ISASCII:
  *     This manifest constant lets the C program know that the
  *     isascii is available.
 #define HAS_SAFE_MEMCPY        /**/
 
 /* HAS_SANE_MEMCMP:
- *     This symbol, if defined, indicates that the memcmp() routine is
- *     available to compare memory blocks for relative magnitude. If this
- *     symbol is not defined, and if HAS_MEMCMP is defined, then memcmp()
- *     may be used only to compare memory blocks for equality.
+ *     This symbol, if defined, indicates that the memcmp routine is available
+ *     and can be used to compare relative magnitudes of chars with their high
+ *     bits set.  If it is not defined, roll your own version.
  */
 #define HAS_SANE_MEMCMP        /**/
 
index b86cbd5..9bfdf0c 100644 (file)
@@ -65,7 +65,7 @@ OBJVAL = $(MMS$TARGET_NAME)$(O)
 .endif
 
 # Updated by fndvers.com -- do not edit by hand
-PERL_VERSION = 5_00311#
+PERL_VERSION = 5_00314#
 
 
 ARCHDIR =  [.lib.$(ARCH).$(PERL_VERSION)]
@@ -279,10 +279,10 @@ utils : [.lib.pod]perldoc [.lib.ExtUtils]Miniperl.pm [.utils]c2ph [.utils]h2ph [
 podxform : [.lib.pod]pod2text [.lib.pod]pod2html [.lib.pod]pod2latex [.lib.pod]pod2man
        @ $(NOOP)
 
-pod1 = [.lib.pod]perl.pod [.lib.pod]perlbook.pod [.lib.pod]perlbot.pod [.lib.pod]perlcall.pod
+pod1 = [.lib.pod]perl.pod [.lib.pod]perlapio.pod [.lib.pod]perlbook.pod [.lib.pod]perlbot.pod [.lib.pod]perlcall.pod
 pod2 = [.lib.pod]perldata.pod [.lib.pod]perldebug.pod [.lib.pod]perldiag.pod [.lib.pod]perldsc.pod
 pod3 = [.lib.pod]perlembed.pod [.lib.pod]perlform.pod [.lib.pod]perlfunc.pod [.lib.pod]perlguts.pod
-pod4 = [.lib.pod]perlipc.pod [.lib.pod]perllol.pod [.lib.pod]perlmod.pod [.lib.pod]perlobj.pod
+pod4 = [.lib.pod]perlipc.pod [.lib.pod]perllocale.pod [.lib.pod]perllol.pod [.lib.pod]perlmod.pod [.lib.pod]perlobj.pod
 pod5 = [.lib.pod]perlop.pod [.lib.pod]perlovl.pod [.lib.pod]perlpod.pod [.lib.pod]perlre.pod
 pod6 = [.lib.pod]perlref.pod [.lib.pod]perlrun.pod [.lib.pod]perlsec.pod [.lib.pod]perlstyle.pod
 pod7 = [.lib.pod]perlsub.pod [.lib.pod]perlsyn.pod [.lib.pod]perltie.pod [.lib.pod]perltoc.pod
@@ -519,6 +519,10 @@ IO : [.lib]IO.pm [.lib.IO]File.pm [.lib.IO]Handle.pm [.lib.IO]Pipe.pm [.lib.IO]S
 [.utils]pl2pm : [.utils]pl2pm.PL $(ARCHDIR)Config.pm
        $(MINIPERL) $(MMS$SOURCE)
 
+[.lib]splain : [.utils]splain.PL $(ARCHDIR)Config.pm
+       $(MINIPERL) $(MMS$SOURCE)
+       Rename/Log [.utils]splain $(MMS$TARGET)
+
 [.lib.pod]pod2html : [.pod]pod2html.PL $(ARCHDIR)Config.pm
        @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
        $(MINIPERL) $(MMS$SOURCE)
@@ -548,6 +552,10 @@ preplibrary : $(MINIPERL_EXE) $(ARCHDIR)Config.pm [.lib]DynaLoader.pm [.lib.VMS]
        @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
        @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
 
+[.lib.pod]perlapio.pod : [.pod]perlapio.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
 [.lib.pod]perlbook.pod : [.pod]perlbook.pod
        @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
        @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
@@ -592,6 +600,10 @@ preplibrary : $(MINIPERL_EXE) $(ARCHDIR)Config.pm [.lib]DynaLoader.pm [.lib.VMS]
        @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
        @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
 
+[.lib.pod]perllocale.pod : [.pod]perllocale.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
 [.lib.pod]perlipc.pod : [.pod]perlipc.pod
        @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
        @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
index 87b493f..48092ba 100644 (file)
 #     (i.e. /Define=DEBUGGING,EMBED,MULTIPLICITY)?
 #
 # Author: Charles Bailey  bailey@genetics.upenn.edu
-# Revised:  3-Dec-1996
 
 require 5.000;
 
 $debug = $ENV{'GEN_SHRFLS_DEBUG'};
 
+print "gen_shrfls.pl Rev. 14-Dec-1996\n" if $debug;
+
 if ($ARGV[0] eq '-f') {
   open(INP,$ARGV[1]) or die "Can't read input file $ARGV[1]: $!\n";
   print "Input taken from file $ARGV[1]\n" if $debug;
@@ -78,7 +79,9 @@ if ($docc) {
   $isvaxc = 0;
   $isgcc = `$cc_cmd _nla0:/Version` =~ /GNU/
            or 0; # make debug output nice
-  $isvaxc = (!$isgcc && $isvax && `$cc_cmd /prefix=all _nla0:` =~ /IVQUAL/)
+  $isvaxc = (!$isgcc && $isvax &&
+             # Check exit status too, in case message is shut off
+             (`$cc_cmd /prefix=all _nla0:` =~ /IVQUAL/ || $? == 0x38240))
             or 0; # again, make debug output nice
   print "\$isgcc: $isgcc\n" if $debug;
   print "\$isvaxc: $isvaxc\n" if $debug;
@@ -139,6 +142,7 @@ sub scan_enum {
 
 sub scan_var {
   my($line) = @_;
+  my($const) = $line =~ /^EXTCONST/;
 
   print "\tchecking for global variable\n" if $debug > 1;
   $line =~ s/INIT\(.*\)//;
@@ -147,8 +151,21 @@ sub scan_var {
   $line =~ s/\W*;?\s*$//;
   print "\tfiltered to \\$line\\\n" if $debug > 1;
   if ($line =~ /(\w+)$/) {
-    print "\tvar name is \\$1\\\n" if $debug > 1;
-   $vars{$1}++;
+    print "\tvar name is \\$1\\" . ($const ? ' (const)' : '') . "\n" if $debug > 1;
+   if ($const) { $cvars{$1}++; }
+   else        { $vars{$1}++;  }
+  }
+  if ($isvaxc) {
+    my($type) = $line =~ /^EXT\w*\s+(\w+)/;
+    print "\tchecking for use of enum (type is \"$type\")\n" if $debug > 2;
+    if ($type eq 'expectation') {
+      $used_expectation_enum++;
+      print "\tsaw global use of enum \"expectation\"\n" if $debug > 1;
+    }
+    if ($type eq 'opcode') {
+      $used_opcode_enum++;
+      print "\tsaw global use of enum \"opcode\"\n" if $debug > 1;
+    }
   }
 }
 
@@ -203,20 +220,8 @@ LINE: while (<CPP>) {
     else        { &scan_func($_); }
     last LINE unless $_ = <CPP>;
   }
-  print $_ if $debug > 3;
-  if (($type) = /^EXT\s+(\w+)/) {
-    if ($isvaxc) {
-      if ($type eq 'expectation') {
-        $used_expectation_enum++;
-        print "\tsaw global use of enum \"expectation\"\n" if $debug > 1;
-      }
-      if ($type eq 'opcode') {
-        $used_opcode_enum++;
-        print "\tsaw global use of enum \"opcode\"\n" if $debug > 1;
-      }
-    }
-    &scan_var($_);
-  }
+  print $_ if $debug > 3 && ($debug > 5 || length($_));
+  if (/^EXT/) { &scan_var($_); }
 }
 close CPP;
 
@@ -277,7 +282,11 @@ if ($isvax) {
     or die "$0: Can't write to ${dir}perlshr_gbl${marord}.mar: $!\n";
   print MAR "\t.title perlshr_gbl$marord\n";
 }
-foreach $var (sort keys %vars) {
+unless ($isgcc) {
+  print OPTBLD "PSECT_ATTR=\$GLOBAL_RO_VARS,PIC,NOEXE,RD,NOWRT,SHR\n";
+  print OPTBLD "PSECT_ATTR=\$GLOBAL_RW_VARS,PIC,NOEXE,RD,WRT,NOSHR\n";
+}
+foreach $var (sort (keys %vars,keys %cvars)) {
   if ($isvax) { print OPTBLD "UNIVERSAL=$var\n"; }
   else { print OPTBLD "SYMBOL_VECTOR=($var=DATA)\n"; }
   # This hack brought to you by the lack of a globaldef in gcc.
@@ -312,9 +321,19 @@ if ($isvax) {
 
 open(OPTATTR,">${dir}perlshr_attr.opt")
   or die "$0: Can't write to ${dir}perlshr_attr.opt: $!\n";
-print OPTATTR "PSECT_ATTR=\$CHAR_STRING_CONSTANTS,PIC,SHR,NOEXE,RD,NOWRT\n";
-foreach $var (sort keys %vars) {
-  print OPTATTR "PSECT_ATTR=${var},PIC,OVR,RD,NOEXE,WRT,NOSHR\n";
+if ($isvaxc) {
+  print OPTATTR "PSECT_ATTR=\$CHAR_STRING_CONSTANTS,PIC,SHR,NOEXE,RD,NOWRT\n";
+}
+elsif ($isgcc) {
+  foreach $var (sort keys %cvars) {
+    print OPTATTR "PSECT_ATTR=${var},PIC,OVR,RD,NOEXE,NOWRT,SHR\n";
+  }
+  foreach $var (sort keys %vars) {
+    print OPTATTR "PSECT_ATTR=${var},PIC,OVR,RD,NOEXE,WRT,NOSHR\n";
+  }
+}
+else {
+  print OPTATTR "! No additional linker directives are needed when using DECC\n";
 }
 close OPTATTR;
 
index 521be99..da295f7 100644 (file)
@@ -126,7 +126,9 @@ foreach (@ARGV) {
       print OUT "gccversion='$1'\n";
     }
     elsif ($archsufx eq 'VAX' &&
-           `$val/NoObject/NoList /prefix=all _nla0:` =~ /IVQUAL/) {
+           # Check exit status too, in case message is turned off
+           ( `$val/NoObject/NoList /prefix=all _nla0:` =~ /IVQUAL/ ||
+              $? == 0x38240 )) {
       $cctype = 'vaxc';
       $d_attr = 'undef';
     }
index 53ee6a8..3d3e5fe 100644 (file)
@@ -16,13 +16,16 @@ $ if y .nes. "" .and. -
 $ then
 $   name = f$element(0,"/",y)
 $   tail = f$extract(f$length(name),1024,y)
-$   name = f$parse(name,"sys$share:.exe;")   ! Look where image activator will
-$   name = f$search(name)                    ! Does it really exist?
-$   if name .nes. ""
+$   if f$trnlnm(name) .eqs. ""  ! If it's a logical name, assume it's OK as is
 $   then
-$     name = name - f$parse(name,,,"version")  ! Insist on current version
-$     y = name + tail
-$   endif
+$     name = f$parse(name,"sys$share:.exe;")   ! Look where image activator will
+$     name = f$search(name)                    ! Does it really exist?
+$     if name .nes. ""
+$     then
+$       name = name - f$parse(name,,,"version")  ! Insist on current version
+$       y = name + tail
+$     endif
+$  endif
 $ endif
 $ if y .nes. "" then write file y
 $ element=element+1
index 28b84e4..dfc096c 100644 (file)
@@ -1,4 +1,4 @@
-/* Postprocessed by vms_yfix.pl 1.1 to add VMS declarations of globals */
+/* Postprocessed by vms_yfix.pl 1.11 to add VMS declarations of globals */
 #ifndef lint
 static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91";
 #endif
@@ -18,1044 +18,1007 @@ dep()
 dEXT short yylhs[] = {                                        -1,
    40,    0,    7,    5,    8,    6,    9,    9,    9,   10,
    10,   10,   10,   22,   22,   22,   22,   22,   22,   13,
-   13,   13,   12,   12,   12,   12,   37,   37,   11,   11,
-   11,   11,   11,   11,   11,   11,   11,   24,   24,   25,
-   25,   26,   27,   28,   29,   30,   39,   39,    1,    1,
-    1,    1,    3,    3,   41,   41,   36,   36,    4,   42,
-   42,   43,   14,   14,   14,   23,   23,   23,   34,   34,
-   34,   34,   34,   34,   34,   34,   35,   35,   15,   15,
+   13,   13,   12,   12,   37,   37,   11,   11,   11,   11,
+   11,   11,   11,   24,   24,   25,   25,   26,   27,   28,
+   29,   30,   39,   39,    1,    1,    1,    1,    3,    3,
+   41,   41,   36,   36,    4,   42,   42,   43,   14,   14,
+   14,   23,   23,   23,   34,   34,   34,   34,   34,   34,
+   34,   34,   35,   35,   15,   15,   15,   15,   15,   15,
    15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
    15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
    15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
    15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
    15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
    15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-   15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-   15,   15,   31,   31,   32,   32,   32,    2,    2,   38,
-   21,   16,   17,   18,   19,   20,   33,   33,   33,   33,
+   15,   15,   15,   15,   15,   15,   15,   15,   31,   31,
+   32,   32,   32,    2,    2,   38,   21,   16,   17,   18,
+   19,   20,   33,   33,   33,   33,
 };
 dEXT short yylen[] = {                                         2,
     0,    2,    4,    0,    4,    0,    0,    2,    2,    2,
     1,    2,    3,    1,    1,    3,    3,    3,    3,    0,
-    2,    6,    7,    7,    4,    4,    0,    2,    8,    8,
-    5,    5,   10,    9,    8,   11,    3,    0,    1,    0,
-    1,    1,    1,    1,    1,    1,    0,    1,    1,    1,
-    1,    1,    4,    3,    5,    5,    0,    1,    0,    3,
-    2,    6,    3,    3,    1,    2,    3,    1,    3,    5,
-    6,    3,    5,    2,    4,    4,    1,    1,    3,    3,
-    3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-    5,    3,    2,    2,    2,    2,    2,    2,    2,    2,
-    2,    2,    3,    2,    3,    2,    4,    3,    4,    1,
-    5,    1,    4,    5,    4,    1,    1,    1,    5,    6,
-    5,    6,    5,    4,    5,    1,    1,    3,    4,    3,
-    2,    2,    4,    5,    4,    5,    1,    2,    2,    1,
-    2,    2,    2,    1,    3,    1,    3,    4,    4,    6,
-    1,    1,    0,    1,    0,    1,    2,    1,    1,    1,
-    2,    2,    2,    2,    2,    2,    1,    1,    1,    1,
+    2,    6,    7,    7,    0,    2,    8,    8,   10,    9,
+    8,   11,    3,    0,    1,    0,    1,    1,    1,    1,
+    1,    1,    0,    1,    1,    1,    1,    1,    4,    3,
+    5,    5,    0,    1,    0,    3,    2,    6,    3,    3,
+    1,    2,    3,    1,    3,    5,    6,    3,    5,    2,
+    4,    4,    1,    1,    3,    3,    3,    3,    3,    3,
+    3,    3,    3,    3,    3,    3,    5,    3,    2,    2,
+    2,    2,    2,    2,    2,    2,    2,    2,    3,    2,
+    3,    2,    4,    3,    4,    1,    5,    1,    4,    5,
+    4,    1,    1,    1,    5,    6,    5,    6,    5,    4,
+    5,    1,    1,    3,    4,    3,    2,    2,    4,    5,
+    4,    5,    1,    2,    2,    1,    2,    2,    2,    1,
+    3,    1,    3,    4,    4,    6,    1,    1,    0,    1,
+    0,    1,    2,    1,    1,    1,    2,    2,    2,    2,
+    2,    2,    1,    1,    1,    1,
 };
 dEXT short yydefred[] = {                                      1,
-    0,    7,    0,   48,   59,   59,    0,   59,    8,   49,
-    9,   11,    0,   50,   51,   52,    0,    0,    0,   61,
-    0,   14,    4,  151,    0,    0,  126,    0,  146,    0,
-   59,   59,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,  158,  159,    0,
+    0,    7,    0,   44,   55,   55,    0,   55,    8,   45,
+    9,   11,    0,   46,   47,   48,    0,    0,    0,   57,
+    0,   14,    4,  147,    0,    0,  122,    0,  142,    0,
+   55,   55,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  154,  155,    0,
     0,    0,    0,    0,    0,    0,    0,   12,    0,    0,
     0,    0,    0,    0,    0,    0,    0,   10,    0,    0,
-    0,    0,  116,  118,    0,    0,    0,    0,  152,    0,
-   54,    0,   60,    0,    7,  167,  170,  169,  168,    0,
-    0,    0,    0,    0,    0,    4,    0,    4,    0,    4,
-    0,    4,    0,    4,    4,    0,    0,    0,    0,    0,
-  141,    0,    0,    0,    0,   74,    0,  165,    0,  132,
-    0,    0,    0,    0,    0,  161,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,  106,    0,  162,  163,
-  164,  166,    0,    0,   37,    0,    0,    0,    0,    0,
+    0,    0,  112,  114,    0,    0,    0,    0,  148,    0,
+   50,    0,   56,    0,    7,  163,  166,  165,  164,    0,
+    0,    0,    0,    0,    0,    4,    4,    4,    4,    4,
+    4,    0,    0,    0,    0,    0,  137,    0,    0,    0,
+    0,   70,    0,  161,    0,  128,    0,    0,    0,    0,
+    0,  157,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  102,    0,  158,  159,  160,  162,    0,    0,
+   33,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   94,   95,    0,    0,    0,    0,    0,    0,
+    0,    0,   13,    0,   49,   54,    0,    0,    0,   68,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,   98,   99,    0,    0,
-    0,    0,    0,    0,    0,    0,   13,    0,   53,   58,
-    0,    0,    0,   72,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    4,  145,
-  147,    0,    0,    0,    0,    0,    0,    0,  108,    0,
-  130,    0,    0,  105,   28,    0,    0,   19,    0,    0,
-    0,   63,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,   77,    0,
-   78,    0,    0,    0,    0,    0,    0,    0,  128,    0,
-    0,   56,   55,    0,    3,    0,  149,    0,   76,  109,
-    0,   45,    0,   31,   46,    0,   32,    0,    0,    0,
-    0,   25,    0,   26,  160,    0,    0,   39,   44,    0,
-    0,    0,  148,  157,   75,    0,  133,    0,  135,    0,
-  107,    0,    0,    0,    0,    0,    0,    0,  115,    0,
-  113,    0,  124,    0,  129,   62,   73,    0,    0,    0,
-    0,    6,   21,    0,    0,    0,    0,    0,    0,   70,
-  134,  136,  123,    0,  121,    0,    0,  114,    0,  119,
-  125,  111,  150,    0,    0,    0,    7,    0,    0,    0,
-    0,    0,    0,  122,  120,   71,   29,   30,   23,    0,
-    0,   24,    0,   35,    0,    0,    5,    0,    0,    0,
-   34,   22,   33,    0,   36,
+    4,  141,  143,    0,    0,    0,    0,    0,    0,    0,
+  104,    0,  126,    0,    0,  101,   26,    0,    0,   19,
+    0,    0,    0,   59,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+   73,    0,   74,    0,    0,    0,    0,    0,    0,    0,
+  124,    0,    0,   52,   51,    0,    3,    0,  145,    0,
+   72,  105,    0,   41,    0,   42,    0,    0,    0,    0,
+  156,    0,    0,   35,   40,    0,    0,    0,  144,  153,
+   71,    0,  129,    0,  131,    0,  103,    0,    0,    0,
+    0,    0,    0,    0,  111,    0,  109,    0,  120,    0,
+  125,   58,   69,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   66,  130,  132,  119,    0,  117,    0,    0,
+  110,    0,  115,  121,  107,  146,    6,    0,    0,    0,
+    0,    0,    0,    0,    0,  118,  116,   67,    7,   27,
+   28,    0,    0,   23,   24,    0,   31,    0,    0,    0,
+   21,    0,    0,    0,   30,    5,    0,   29,    0,    0,
+   32,    0,   22,
 };
 dEXT short yydgoto[] = {                                       1,
-    9,   66,   10,   17,   85,  337,   88,  313,    3,   11,
-   12,   68,  272,  268,   70,   71,   72,   73,   74,   75,
-   76,  278,   78,  279,  262,  265,  269,  281,  263,  266,
-  116,  204,   90,   79,  242,  181,  145,  276,   13,    2,
+    9,   66,   10,   17,   85,  329,   88,  318,    3,   11,
+   12,   68,  334,  258,   70,   71,   72,   73,   74,   75,
+   76,  264,   78,  265,  254,  256,  259,  267,  255,  257,
+  112,  196,   90,   79,  234,  177,  141,  262,   13,    2,
    14,   15,   16,
 };
 dEXT short yysindex[] = {                                      0,
-    0,    0, -178,    0,    0,    0,  -49,    0,    0,    0,
-    0,    0,  616,    0,    0,    0, -108, -233,    3,    0,
- -230,    0,    0,    0,  -24,  -24,    0,   28,    0, 1899,
-    0,    0,  -17,  -12,  -11,  -10,  -35, 1899,   39,   54,
-   60,  992,  936,  -24, 1055, 1319, -217,    0,    0,  -24,
- 1899, 1899, 1899, 1899, 1899, 1899, 1375,    0, 1899, 1899,
- 1431,  -24,  -24,  -24,  -24, 1899, -161,    0,  277, 3829,
-  -69,  -42,    0,    0,   -4,   88,   89,   97,    0,   24,
-    0, -107,    0, -105,    0,    0,    0,    0,    0, 1899,
-  114, 1899,  328,   24, -107,    0,   24,    0,   24,    0,
-   24,    0,   24,    0,    0,  115, 3829,  133, 1490,  936,
-    0,  328,    0,  -69,   97,    0, 1899,    0,  137,    0,
-  328,  -19,   56,   19, 1899,    0,   97,   98,   98,   98,
-  -82,  -82,   93,  -21,   98,   98,    0,  -87,    0,    0,
-    0,    0,  328,   24,    0, 1899, 1899, 1899, 1899, 1899,
- 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
- 1899, 1899, 1899, 1899, 1899, 1899,    0,    0,  -32, 1899,
- 1899, 1899, 1899, 1899, 1899, 1665,    0, 1899,    0,    0,
-   -8, 1899,  357,    0, 1899,   82, 1899,   24, 1899, -161,
- 1899, -161, 1899, -234, 1899, -234,  144, 1724,    0,    0,
-    0,    4,   11,  138, 1899,   97, 1780, 1836,    0,   61,
-    0, 1899,   96,    0,    0, -176, -176,    0, -176, -176,
-  -95,    0,   21, 1092,  328,  373,  434,   92, 3829, 1204,
- 3238, 3721, 2430,  815,  419,   98,   98, 1899,    0, 1899,
-    0,  173,  -80,   55,  -68,   57,  -54,   68,    0,    6,
- 3829,    0,    0,  157,    0,  178,    0, 1899,    0,    0,
- -176,    0,  181,    0,    0,  183,    0, -176,  190,  112,
-  209,    0,  231,    0,    0,  210,  277,    0,    0,  237,
-  224, 1899,    0,    0,    0,    9,    0,   15,    0,   17,
-    0,  105, 1899,  163, 1899,   81,  119, 1899,    0,  168,
-    0,  175,    0,  185,    0,    0,    0, 1146,  112,  112,
-  112,    0,    0, 1899,  112, 1899,  112, 1899,  279,    0,
-    0,    0,    0,  143,    0, 3863,  202,    0,  300,    0,
-    0,    0,    0, -161, -161, -234,    0,  321, -234,  326,
- -161,  309,  112,    0,    0,    0,    0,    0,    0,  398,
-  112,    0,  112,    0, 1724, -161,    0, -234, -161,  336,
-    0,    0,    0,  112,    0,
+    0,    0,  236,    0,    0,    0,  -45,    0,    0,    0,
+    0,    0,  557,    0,    0,    0, -106, -232,  -20,    0,
+ -216,    0,    0,    0,   -8,   -8,    0,    9,    0, 1840,
+    0,    0,   11,   15,   19,   22,  -33, 1840,   38,   47,
+   51,  933,  877,   -8,  996, 1260, -212,    0,    0,   -8,
+ 1840, 1840, 1840, 1840, 1840, 1840, 1316,    0, 1840, 1840,
+ 1372,   -8,   -8,   -8,   -8, 1840, -193,    0,  273, 3713,
+  -67,  -55,    0,    0,  -26,   72,   57,   59,    0,    3,
+    0, -137,    0, -130,    0,    0,    0,    0,    0, 1840,
+   96, 1840, 1871,    3, -137,    0,    0,    0,    0,    0,
+    0,   97, 3713,   99, 1431,  877,    0, 1871,    0,  -67,
+   59,    0, 1840,    0,  106,    0, 1871,  -25,   27,   52,
+ 1840,    0,   59,   98,   98,   98,  -85,  -85,   74,  -40,
+   98,   98,    0,  -88,    0,    0,    0,    0, 1871,    3,
+    0, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840,
+ 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840,
+ 1840, 1840,    0,    0,  -34, 1840, 1840, 1840, 1840, 1840,
+ 1840, 1606,    0, 1840,    0,    0,  -51, 1840,  242,    0,
+ 1840, 1089, 1840,    3, 1840, 1840, 1840, 1840,  130, 1665,
+    0,    0,    0,  -30,   44,  126, 1840,   59, 1721, 1777,
+    0,   53,    0, 1840,   79,    0,    0, -244, -244,    0,
+ -244, -244, -127,    0,   54, 1027, 1871,  756,  360,  869,
+ 3713, 3679, 3540, 3764, 1195,  340, 1054,   98,   98, 1840,
+    0, 1840,    0,  134,  -83,   58,  -75,   60,  -71,   62,
+    0,  -18, 3713,    0,    0,  117,    0,  138,    0, 1840,
+    0,    0, -244,    0,  139,    0,  140, -244,  141,  142,
+    0,  145,  273,    0,    0,  149,  136, 1840,    0,    0,
+    0,  -15,    0,   40,    0,   42,    0,  -59, 1840,   68,
+ 1840,   85,   46, 1840,    0,   75,    0,   77,    0,   80,
+    0,    0,    0, 1143,   84,   84,   84,   84, 1840,   84,
+ 1840,  167,    0,    0,    0,    0,   95,    0,  263,   86,
+    0,  172,    0,    0,    0,    0,    0, -193, -193, -177,
+ -177,  175, -193,  159,   84,    0,    0,    0,    0,    0,
+    0,   84,  194,    0,    0,   84,    0, 1665, -193,  256,
+    0, 1840, -193,  191,    0,    0,  196,    0,   84,   84,
+    0, -177,    0,
 };
 dEXT short yyrindex[] = {                                      0,
-    0,    0,  220,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  161,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0, 2100, 1930,    0,
+    0, 2740, 2808,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0, 2159, 1989,    0,
-    0, 2799, 2867,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   37,    0,   -9, 3616,
+ 2851, 2895,    0,    0, 2166, 1989,    0,   17,    0,    0,
+    0,  -39,    0,    0,    0,    0,    0,    0,    0, 2225,
+    0,    0, 3367,    0,  112,    0,    0,    0,    0,    0,
+    0,    0, 3635,    0,    0,  215,    0, 3410,  437,  498,
+ 2336,    0,    0,    0, 2052,    0, 3448, 2851,    0,    0,
+ 2225,    0, 2461, 2938, 2976, 3014,  -28,  600, 2504,    0,
+ 3087, 3131,    0,    0,    0,    0,    0,    0, 3486,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,   65,    0,  -25,  193,
- 2910, 2954,    0,    0, 2225, 2048,    0,  333,    0,    0,
-    0,    2,    0,    0,    0,    0,    0,    0,    0, 2284,
-    0,    0, 3575,    0,  257,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0, 3017,    0,    0,  348,
-    0, 3642,  496,  557, 2395,    0,    0,    0, 2111,    0,
- 3695, 2910,    0,    0, 2284,    0, 2520, 3065, 3103, 3190,
-  659, 2997, 2563,    0, 3301, 3354,    0,    0,    0,    0,
-    0,    0, 3741,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0, 2631,    0,    0,
-    0,  331,  880,    0,  348,    0, 2284,    0,  352,   65,
-    0,   65,    0,  164,    0,  164,    0,  338,    0,    0,
-    0,    0,  358,    0,    0, 2674,    0,    0,    0,    0,
-    0,    0, 2718,    0,    0,  -22,   36,    0,   91,  110,
-  -33,    0,    0, 2573, 1267, 1531, 3476, 3521, 3675,    0,
-  -27, 3826, 3794, 1587,   -6, 3392, 3440,    0,    0,    0,
+    0,    0,    0, 2572,    0,    0,    0,  205,  821,    0,
+  215,    0, 2225,    0,  245,    0,    0,    0,    0,  240,
+    0,    0,    0,    0,  272,    0,    0, 2615,    0,    0,
+    0,    0,    0,    0, 2659,    0,    0,    5,   45,    0,
+   49,   61,  -32,    0,    0,  192, 1472, 1528, 3250, 3286,
+ 3645,    0, 2514, 3603, 3559, 3522, 3323, 3174, 3212,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
- 3787,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-  134,    0,    0,    0,    0,    0,    0,  359,    0,    0,
-    0,    0,    0,    0,    0,    0,  155,    0,    0,    0,
+    0,    0, 3675,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   65,    0,    0,    0,    0,  277,    0,    0,
+    0,    0,   66,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,  348,    0,    0,
+    0,    0,    0,  215,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,  349,    0,    0,
-    0,    0,    0,    0,    0, 1953,    0,    0,    0,    0,
-    0,    0,    0,   65,   65,  164,    0,    0,  164,    0,
-   65,    0,    0,    0,    0,    0,    0,    0,    0,  880,
-    0,    0,    0,    0,  368,   65,    0,  164,   65,    0,
-    0,    0,    0,    0,    0,
+  265,    0,    0,    0,    0,    0,    0,    0, 1894,    0,
+    0,    0,    0,    0,    0,    0,    0,   37,   37,  105,
+  105,    0,   37,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  286,   37,  821,
+    0,    0,   37,    0,    0,    0,    0,    0,    0,    0,
+    0,  105,    0,
 };
 dEXT short yygindex[] = {                                      0,
-    0,    0,    0,  136,  -29,    0, 4145,  680,  -78,    0,
-    0,    0, -193,  -13, 3266,  519,    0,    0,    0,    0,
-    0,  400,  885,    0,    0,  267, -196,   63,  124,  250,
-  -16, -167,   20,    0,    0,  320,  356,    0,    0,    0,
+    0,    0,    0,   63,  418,    0,  914,  335,  -81,    0,
+    0,    0, -292,  -13, 3885, 2516,    0,    0,    0,    0,
+    0,  321,  530,    0,    0,  203, -150,   -3,   93,  165,
+  -69, -162,  575,    0,    0,  300, -276,    0,    0,    0,
     0,    0,    0,
 };
-#define YYTABLESIZE 4333
+#define YYTABLESIZE 4166
 dEXT short yytable[] = {                                      69,
-   62,  280,  274,   62,  105,  214,  183,   64,  170,   20,
-   64,   62,  299,   90,   23,   15,   90,  256,   18,  213,
-  208,  172,   96,   82,  301,   64,   84,   98,  100,  102,
-   90,   90,  124,   15,   83,   90,   18,   83,  303,  125,
-  152,  270,  271,  134,  283,   91,  305,  138,  174,  320,
-  252,   83,   83,  171,  284,  321,   83,  322,  240,   64,
-   57,   83,  117,  118,   27,   90,  189,   92,  191,  126,
-  193,  172,  195,  184,  197,  198,   42,  210,  108,  294,
-  173,  139,  140,  141,  142,  319,   83,    4,    5,    6,
-  238,    7,    8,  109,   42,  202,  203,   27,   23,  110,
-   27,   27,   27,  171,   27,   23,   27,   27,  211,   27,
-   23,   23,   23,  300,   23,  302,  144,  338,  175,  340,
-  150,  151,  257,   27,   57,  258,  304,  176,   27,  205,
-  329,   16,  216,  217,  219,  220,  221,  222,  223,  327,
-  178,   18,  349,   21,  159,  352,   23,  177,   80,   16,
-   17,  182,  180,  185,  199,   27,  243,  244,  245,  246,
-  247,  248,  250,   20,  362,  254,   94,   95,   17,  282,
-  259,  203,  170,  200,   41,  261,  207,  217,  285,   62,
-  209,  217,  170,  212,  277,  291,  293,   27,  170,   27,
-   27,  286,   41,  288,  290,   43,   20,  323,  292,   20,
-   20,   20,  151,   20,  152,   20,   20,   19,   20,  150,
-  151,  328,  298,   15,  152,  306,  150,  151,  307,    2,
-  152,  309,   20,  310,  296,  239,  297,   20,  150,  151,
-  311,  169,   86,   68,  312,  344,   68,   87,   64,   64,
-   64,   64,  150,  151,   90,   90,   90,   90,  314,  316,
-   68,   68,   47,   90,   20,   47,   47,   47,  350,   47,
-  104,   47,   47,   64,   47,   83,   83,   83,   83,   90,
-   90,  315,   90,   90,   83,  150,  151,  317,   47,  324,
-   83,   83,  318,   47,  203,   68,   20,  325,   20,   20,
-   83,   83,  330,   83,   83,   83,   83,   83,   83,  331,
-  150,  151,  150,  151,  261,  150,  151,  150,  151,  332,
-   47,  150,  151,  150,  151,  150,  151,  150,  151,  343,
-   27,   27,   27,   27,   27,   27,  345,   27,   27,   27,
-   27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
-  346,   69,   47,   27,   27,   47,   27,   27,   27,   27,
-   27,  150,  151,  150,  151,   27,   27,   27,   27,   27,
-   27,  351,  153,   27,  150,  151,  353,  355,  154,  155,
-  156,  157,   27,   65,   27,   27,  364,  150,  151,   57,
-  156,  158,  160,  161,  162,  163,  164,  165,  155,  153,
-  166,   65,   40,  167,  168,  169,   38,  165,  156,   43,
-  166,  150,  151,  167,  168,  169,  166,   40,   38,  167,
-  168,  169,   77,  218,  188,  150,  151,  360,  170,   20,
-   20,   20,   20,   20,   20,   65,   20,   20,   20,   20,
-   20,   20,   20,   20,   20,   20,   20,   20,   20,  150,
-  151,  342,   20,   20,  273,   20,   20,   20,   20,   20,
-  152,    0,    0,    0,   20,   20,   20,   20,   20,   20,
-    0,    0,   20,  170,   68,   68,   68,   68,    0,    0,
-    0,   20,    0,   20,   20,   47,   47,   47,   47,   47,
-   47,  255,   47,   47,   47,    0,    0,    0,   47,   68,
-   68,   47,   47,   47,   47,  152,    0,    0,   47,   47,
-    0,   47,   47,   47,   47,   47,    0,    0,    0,  170,
-   47,   47,   47,   47,   47,   47,    0,    0,   47,    0,
-    0,    0,  357,    0,  170,    0,    0,   47,  167,   47,
-   47,  167,  167,  167,    0,  167,  151,  167,  167,  151,
-  167,  152,    0,   89,   89,  264,    0,  267,  146,  147,
-  148,  149,    0,  151,  151,  106,  152,    0,  151,  167,
-    0,  114,   89,  122,    0,    0,    0,    0,   89,    0,
-    0,    0,    0,  150,  151,    0,    0,    0,    0,    0,
-   89,   89,   89,   89,    0,    0,  151,    0,  151,  168,
-    0,    0,  168,  168,  168,    0,  168,  110,  168,  168,
-  110,  168,    0,    0,   65,   65,   65,   65,    0,    0,
-    0,    0,    0,    0,  110,  110,  156,  157,  151,  110,
-  168,  167,    4,    5,    6,    0,    7,    8,  114,   65,
-   65,    0,  164,  165,    0,    0,  166,    0,    0,  167,
-  168,  169,    0,    0,    0,    0,    0,    0,   52,  110,
-    0,   62,   64,   50,    0,   57,    0,   65,   60,  154,
-   59,  156,  157,    4,    5,    6,    0,    7,    8,    0,
-    0,    0,    0,    0,   58,    0,    0,  164,  165,   63,
-    0,  166,  168,    0,  167,  168,  169,  241,    0,  347,
-  348,    0,    0,    0,    0,    0,  354,    0,    0,  100,
-    0,    0,  100,    0,    0,    0,   61,  156,  157,    0,
-    0,  361,    0,    0,  363,  275,  100,  100,    0,    0,
-    0,  100,    0,    0,  165,    0,    0,  166,    0,    0,
-  167,  168,  169,    0,    0,    0,    0,    0,   23,  165,
-    0,   53,  166,    0,    0,  167,  168,  169,    0,    0,
-    0,  100,  167,  167,  167,  167,  167,    0,  167,  167,
-  167,    0,    0,    0,  167,    0,    0,  151,  151,  151,
-  151,    0,    0,    0,    0,  167,  151,  167,  167,  167,
-  167,  167,  151,  151,  151,  151,  167,  167,  167,  167,
-  167,  167,  151,  151,  167,  151,  151,  151,  151,  151,
-  151,  151,    0,  167,  151,  167,  167,  151,  151,  151,
-    0,    0,    0,  168,  168,  168,  168,  168,    0,  168,
-  168,  168,    0,    0,    0,  168,    0,    0,  110,  110,
-  110,  110,    0,    0,    0,    0,  168,  110,  168,  168,
-  168,  168,  168,  110,  110,  110,  110,  168,  168,  168,
-  168,  168,  168,  110,  110,  168,  110,  110,  110,  110,
-  110,  110,  110,    0,  168,  110,  168,  168,  110,  110,
-  110,   22,   24,   25,   26,   27,   28,    0,   29,   30,
-   31,    0,    0,    0,   32,    0,    0,   33,   34,   35,
-   36,    0,    0,    0,   37,   38,    0,   39,   40,   41,
-   42,   43,    0,    0,    0,  170,   44,   45,   46,   47,
-   48,   49,   47,    0,   51,   47,   47,   47,    0,   47,
-    0,   47,   47,   54,   47,   55,   56,  115,    0,    0,
-  100,  100,  100,  100,    0,  127,    0,  152,   47,  100,
-    0,    0,    0,   47,    0,  100,  100,  100,  100,    0,
-    0,    0,    0,    0,    0,  100,  100,    0,  100,  100,
-  100,  100,  100,  100,  100,    0,    0,  100,   52,    0,
-   47,   62,   64,   50,  115,   57,    0,   65,   60,    0,
-   59,    0,    0,    0,    0,    0,    0,    0,  334,  335,
-  336,    0,    0,    0,  339,    0,  341,    0,    0,   63,
-    0,  206,   47,    0,    0,   47,    0,    0,    0,  115,
+  205,   62,   62,  179,  206,  166,  101,  244,   60,  285,
+  269,   60,   96,   20,  200,   96,   23,  287,  248,   53,
+  180,  289,  291,  168,   82,  303,   60,   62,  335,   96,
+   96,   15,  120,  306,   96,  170,   25,  148,   83,  266,
+   84,  330,  331,  130,  121,   18,  337,  134,   92,   15,
+   96,  203,  146,  147,   97,  167,  232,   61,   98,  353,
+   60,   99,  345,   18,   96,  168,  348,  169,   18,   25,
+   21,   23,   25,   25,   25,   61,   25,  104,   25,   25,
+  304,   25,  305,   53,  140,   38,  105,  270,  230,   16,
+  106,  194,  195,   94,   95,   25,  171,  167,  332,  333,
+   25,   17,  174,   38,   20,   37,   39,   16,  246,   61,
+  202,  172,  280,  251,   23,  173,  286,  302,  288,   17,
+  290,  312,  176,   37,   15,   23,  178,   25,  208,  209,
+  211,  212,  213,  214,  215,  181,  191,   20,  311,  192,
+   20,   20,   20,  310,   20,  199,   20,   20,  322,   20,
+   80,  201,  235,  236,  237,  238,  239,  240,  242,   25,
+    2,   25,   25,   20,  204,   62,  271,  195,   20,  279,
+  147,  253,  209,  284,  209,  292,  263,  277,  293,  295,
+  296,  297,  298,  272,  299,  274,  276,  326,  166,  300,
+  278,  347,  308,   43,  301,   20,   43,   43,   43,  313,
+   43,  314,   43,   43,  315,   43,  317,  325,  146,  147,
+  327,   19,  328,  146,  147,  336,  282,  338,  283,   43,
+  148,  146,  147,  231,   43,  146,  147,   20,  165,   20,
+   20,  349,   84,  342,   53,   84,  350,  146,  147,   60,
+   60,   60,   60,   96,   96,   96,   96,  340,   86,   84,
+   84,   43,   96,   87,   84,  151,  146,  147,   96,   96,
+   96,   96,  100,  149,   60,  307,  146,  147,   96,   96,
+  195,   96,   96,   96,   96,   96,   96,   96,  146,  147,
+   96,  146,  147,   43,   84,   36,   43,  253,   61,   61,
+   61,   61,   25,   25,   25,   25,   25,   25,   34,   25,
+   25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+   25,   25,  152,   61,   61,   25,   25,   39,   25,   25,
+   25,   25,   25,   36,   69,  155,   34,   25,   25,   25,
+   25,   25,   25,   77,  344,   25,  146,  147,  146,  147,
+  146,  147,  146,  147,   25,  210,   25,   25,  146,  147,
+  146,  147,  260,  166,  146,  147,  146,  147,  146,  147,
+   20,   20,   20,   20,   20,   20,  247,   20,   20,   20,
+   20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
+  346,  146,  147,   20,   20,  148,   20,   20,   20,   20,
+   20,  146,  147,  324,  184,   20,   20,   20,   20,   20,
+   20,    0,    0,   20,    0,    0,  162,    0,    0,  163,
+  164,  165,   20,    0,   20,   20,   43,   43,   43,   43,
+   43,   43,    0,   43,   43,   43,    0,    0,    0,   43,
+  166,    0,   43,   43,   43,   43,    0,    0,    0,   43,
+   43,    0,   43,   43,   43,   43,   43,    0,    0,    0,
+  166,   43,   43,   43,   43,   43,   43,    0,    0,   43,
+    0,    0,  148,   84,   84,   84,   84,    0,   43,  163,
+   43,   43,  163,  163,  163,    0,  163,  147,  163,  163,
+  147,  163,  148,    0,    0,    0,    0,    0,   84,   84,
+    0,   84,    0,    0,  147,  147,    0,    0,    0,  147,
+  163,    4,    5,    6,    0,    7,    8,    4,    5,    6,
+    0,    7,    8,  185,  186,  187,  188,  189,  190,    0,
+    0,    4,    5,    6,    0,    7,    8,  147,    0,  147,
+  164,    0,    0,  164,  164,  164,    0,  164,  106,  164,
+  164,  106,  164,  149,  142,  143,  144,  145,    0,  150,
+  151,  152,  153,    0,    0,  106,  106,    0,    0,  147,
+  106,  164,  163,  156,  157,  158,  159,  160,  161,  146,
+  147,  162,  111,    0,  163,  164,  165,    0,    0,    0,
+  123,    0,    0,    0,    0,    0,    0,    0,    0,   52,
+  106,    0,   62,   64,   50,    0,   57,    0,   65,   60,
+   91,   59,    0,    0,    0,    0,    0,    0,  268,    0,
+    0,    0,    0,    0,    0,   58,    0,  113,  114,  111,
+   63,    0,    0,  164,  122,    0,  150,  151,  152,  153,
+  319,  320,  321,    0,  323,    0,  135,  136,  137,  138,
+   97,    0,  198,   97,  160,  161,    0,   61,  162,    0,
+  111,  163,  164,  165,    0,    0,    0,   97,   97,  339,
+    0,    0,   97,    0,    0,  161,  341,    0,  162,    0,
+  343,  163,  164,  165,    0,    0,    0,    0,    0,   23,
+  197,    0,   53,  351,  352,    0,    0,    0,    0,    0,
+    0,    0,   97,  163,  163,  163,  163,  163,    0,  163,
+  163,  163,    0,    0,    0,  163,    0,  111,  147,  147,
+  147,  147,  111,    0,    0,    0,  163,  147,  163,  163,
+  163,  163,  163,  147,  147,  147,  147,  163,  163,  163,
+  163,  163,  163,  147,  147,  163,  147,  147,  147,  147,
+  147,  147,  147,    0,  163,  147,  163,  163,  147,  147,
+  147,    0,    0,    0,  164,  164,  164,  164,  164,    0,
+  164,  164,  164,    0,    0,    0,  164,    0,    0,  106,
+  106,  106,  106,    0,    0,    0,    0,  164,  106,  164,
+  164,  164,  164,  164,  106,  106,  106,  106,  164,  164,
+  164,  164,  164,  164,  106,  106,  164,  106,  106,  106,
+  106,  106,  106,  106,    0,  164,  106,  164,  164,  106,
+  106,  106,   22,   24,   25,   26,   27,   28,    0,   29,
+   30,   31,    0,    0,    0,   32,    0,    0,   33,   34,
+   35,   36,    0,    0,    0,   37,   38,    0,   39,   40,
+   41,   42,   43,    0,    0,    0,  166,   44,   45,   46,
+   47,   48,   49,   43,    0,   51,   43,   43,   43,    0,
+   43,    0,   43,   43,   54,   43,   55,   56,    0,    0,
+    0,   97,   97,   97,   97,    0,    0,    0,  148,   43,
+   97,    0,    0,    0,   43,    0,   97,   97,   97,   97,
+    0,    0,    0,    0,    0,    0,   97,   97,    0,   97,
+   97,   97,   97,   97,   97,   97,    0,    0,   97,   52,
+    0,   43,   62,   64,   50,    0,   57,    0,   65,   60,
+    0,   59,    0,    0,    0,    0,   67,    0,    0,    0,
+   81,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+   63,    0,    0,   43,    0,    0,   43,    0,    0,    0,
+    0,    0,    0,    0,    0,  107,    0,    0,  116,  166,
+    0,    0,    0,    0,    0,   52,    0,   61,   62,   64,
+   50,    0,   57,    0,   65,   60,    0,   59,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  356,    0,   52,    0,   61,   62,   64,   50,
-  358,   57,  359,   65,   60,    0,   59,    0,    0,    0,
-    0,    0,    0,  365,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,   63,    0,    0,   23,    0,
-    0,   53,    0,    0,    0,    0,  115,    0,    0,    0,
-    0,  115,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   61,    0,    0,    0,    0,   52,    0,    0,
-   62,   64,   50,    0,   57,    0,   65,   60,    0,   59,
-    0,  154,  155,  156,  157,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,   23,    0,    0,   53,   63,  164,
-  165,    0,    0,  166,    0,    0,  167,  168,  169,    0,
-    0,    0,    0,    0,    0,   47,   47,   47,   47,   47,
-   47,    0,   47,   47,   47,   61,    0,    0,   47,    0,
-    0,   47,   47,   47,   47,    0,    0,    0,   47,   47,
-    0,   47,   47,   47,   47,   47,    0,    0,    0,    0,
-   47,   47,   47,   47,   47,   47,    0,   23,   47,    0,
-   53,    0,  170,    0,    0,    0,  333,   47,    0,   47,
-   47,    0,  113,   25,   26,   27,   28,   87,   29,   30,
-   31,    0,    0,    0,   32,    0,    0,    0,  159,    0,
-    0,    0,    0,    0,  152,   38,    0,   39,   40,   41,
+    0,  148,    0,  175,    0,    0,   63,    0,    0,   23,
+    0,    0,   53,    0,    0,    0,    0,  183,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   61,    0,    0,    0,    0,   52,    0,
+    0,   62,   64,   50,    0,   57,    0,   65,   60,    0,
+   59,    0,  150,    0,  152,  153,    0,    0,    0,    0,
+    0,    0,    0,  207,    0,   23,    0,    0,   53,   63,
+  160,  161,    0,    0,  162,    0,    0,  163,  164,  165,
+    0,    0,    0,    0,    0,    0,   43,   43,   43,   43,
+   43,   43,    0,   43,   43,   43,   61,    0,    0,   43,
+  245,    0,   43,   43,   43,   43,    0,  252,    0,   43,
+   43,    0,   43,   43,   43,   43,   43,    0,    0,    0,
+    0,   43,   43,   43,   43,   43,   43,  166,   23,   43,
+    0,   53,    0,    0,    0,    0,    0,    0,   43,  249,
+   43,   43,  250,  109,   25,   26,   27,   28,   87,   29,
+   30,   31,    0,    0,  166,   32,    0,    0,    0,  148,
+    0,  155,    0,    0,    0,    0,   38,  152,   39,   40,
+   41,   42,   43,    0,    0,    0,    0,   44,   45,   46,
+   47,   48,   49,    0,  161,   51,  148,  162,    0,  166,
+  163,  164,  165,  316,   54,    0,   55,   56,    0,   24,
+   25,   26,   27,   28,    0,   29,   30,   31,    0,    0,
+    0,   32,    0,    0,    0,  155,    0,    0,    0,    0,
+    0,  148,   38,    0,   39,   40,   41,   42,   43,    0,
+    0,    0,    0,   44,   45,   46,   47,   48,   49,    0,
+    0,   51,    0,  166,    0,    0,    0,    0,    0,    0,
+   54,    0,   55,   56,    0,    0,    0,    0,    0,    0,
+    0,    0,  115,   25,   26,   27,   28,    0,   29,   30,
+   31,    0,    0,    0,   32,  148,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,   38,    0,   39,   40,   41,
+   42,   43,    0,    0,    0,  166,   44,   45,   46,   47,
+   48,   49,   52,    0,   51,   62,   64,   50,    0,   57,
+    0,   65,   60,   54,   59,   55,   56,    0,    0,    0,
+    0,    0,    0,  150,  151,  152,  153,  148,  119,    0,
+    0,    0,    0,   63,    0,    0,    0,  156,  157,  158,
+  159,  160,  161,    0,    0,  162,    0,    0,  163,  164,
+  165,    0,  152,  153,    0,    0,    0,    0,   52,    0,
+   61,   62,   64,   50,    0,   57,  129,   65,   60,  161,
+   59,    0,  162,    0,    0,  163,  164,  165,    0,  149,
+    0,    0,    0,    0,    0,  150,  151,  152,  153,   63,
+    0,    0,    0,    0,    0,   53,    0,    0,  154,  156,
+  157,  158,  159,  160,  161,    0,    0,  162,    0,    0,
+  163,  164,  165,    0,   52,    0,   61,   62,   64,   50,
+    0,   57,    0,   65,   60,    0,   59,    0,    0,    0,
+    0,    0,    0,  149,    0,    0,    0,    0,    0,  150,
+  151,  152,  153,    0,    0,   63,    0,    0,    0,    0,
+    0,   53,  154,  156,  157,  158,  159,  160,  161,    0,
+    0,  162,    0,    0,  163,  164,  165,    0,    0,    0,
+    0,    0,   61,   52,  133,    0,   62,   64,   50,    0,
+   57,  193,   65,   60,    0,   59,    0,    0,    0,    0,
+    0,  150,  151,  152,  153,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   63,    0,    0,   53,  159,  160,
+  161,    0,    0,  162,    0,    0,  163,  164,  165,    0,
+    0,    0,   80,    0,    0,   80,   24,   25,   26,   27,
+   28,   61,   29,   30,   31,    0,    0,    0,   32,   80,
+   80,    0,    0,    0,   80,    0,    0,    0,    0,   38,
+    0,   39,   40,   41,   42,   43,    0,    0,    0,    0,
+   44,   45,   46,   47,   48,   49,   53,    0,   51,    0,
+    0,    0,    0,    0,   80,    0,    0,   54,   81,   55,
+   56,   81,   24,   25,   26,   27,   28,    0,   29,   30,
+   31,    0,    0,    0,   32,   81,   81,    0,    0,    0,
+   81,    0,    0,    0,    0,   38,    0,   39,   40,   41,
    42,   43,    0,    0,    0,    0,   44,   45,   46,   47,
-   48,   49,    0,    0,   51,    0,  170,    0,    0,    0,
-    0,    0,    0,   54,    0,   55,   56,    0,   24,   25,
-   26,   27,   28,    0,   29,   30,   31,    0,    0,    0,
-   32,  295,    0,    0,    0,    0,  159,    0,  152,    0,
-    0,   38,    0,   39,   40,   41,   42,   43,    0,    0,
-    0,    0,   44,   45,   46,   47,   48,   49,    0,    0,
-   51,    0,    0,    0,  170,    0,    0,    0,    0,   54,
-    0,   55,   56,    0,    0,    0,    0,   84,    0,    0,
-   84,  119,   25,   26,   27,   28,    0,   29,   30,   31,
-    0,    0,    0,   32,   84,   84,  152,    0,    0,   84,
-    0,    0,    0,    0,   38,    0,   39,   40,   41,   42,
-   43,    0,    0,    0,    0,   44,   45,   46,   47,   48,
-   49,   52,    0,   51,   62,   64,   50,    0,   57,   84,
-   65,   60,   54,   59,   55,   56,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,  123,  154,  155,
-  156,  157,   63,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  160,  161,  162,  163,  164,  165,    0,    0,
-  166,    0,    0,  167,  168,  169,    0,   52,    0,   61,
-   62,   64,   50,    0,   57,  133,   65,   60,    0,   59,
-    0,    0,    0,    0,    0,    0,  153,    0,    0,    0,
-    0,    0,  154,  155,  156,  157,    0,    0,   63,    0,
-    0,    0,    0,    0,   53,  158,  160,  161,  162,  163,
-  164,  165,    0,    0,  166,    0,    0,  167,  168,  169,
-    0,    0,    0,   52,    0,   61,   62,   64,   50,    0,
-   57,    0,   65,   60,    0,   59,    0,    0,    0,    0,
-    0,    0,    0,    0,  153,    0,    0,    0,    0,    0,
-  154,  155,  156,  157,   63,    0,    0,    0,    0,    0,
-   53,    0,    0,  158,  160,  161,  162,  163,  164,  165,
-    0,    0,  166,    0,    0,  167,  168,  169,    0,    0,
-    0,   61,   52,  137,    0,   62,   64,   50,    0,   57,
-  201,   65,   60,    0,   59,    0,    0,    0,   84,   84,
-   84,   84,    0,    0,    0,    0,    0,   84,    0,    0,
-    0,    0,    0,   63,   84,    0,   53,    0,    0,    0,
-    0,    0,    0,   84,   84,    0,   84,   84,   84,   84,
-   84,   85,    0,    0,   85,   24,   25,   26,   27,   28,
-   61,   29,   30,   31,    0,    0,    0,   32,   85,   85,
-    0,    0,    0,   85,    0,    0,    0,    0,   38,    0,
-   39,   40,   41,   42,   43,    0,    0,    0,    0,   44,
-   45,   46,   47,   48,   49,   53,    0,   51,    0,    0,
-    0,    0,    0,   85,    0,    0,   54,   86,   55,   56,
-   86,   24,   25,   26,   27,   28,    0,   29,   30,   31,
-    0,    0,    0,   32,   86,   86,    0,    0,    0,   86,
-    0,    0,    0,    0,   38,    0,   39,   40,   41,   42,
-   43,    0,    0,    0,    0,   44,   45,   46,   47,   48,
-   49,    0,    0,   51,    0,    0,    0,    0,    0,   86,
-    0,    0,   54,    0,   55,   56,    0,   24,   25,   26,
-   27,   28,    0,   29,   30,   31,    0,   52,    0,   32,
-   62,   64,   50,    0,   57,  249,   65,   60,    0,   59,
+   48,   49,    0,    0,   51,    0,    0,    0,    0,    0,
+   81,    0,    0,   54,    0,   55,   56,    0,   24,   25,
+   26,   27,   28,    0,   29,   30,   31,    0,   52,    0,
+   32,   62,   64,   50,    0,   57,  241,   65,   60,    0,
+   59,   38,    0,   39,   40,   41,   42,   43,    0,    0,
+    0,    0,   44,   45,   46,   47,   48,   49,    0,   63,
+   51,    0,    0,    0,    0,    0,    0,    0,    0,   54,
+    0,   55,   56,    0,    0,    0,    0,   24,   25,   26,
+   27,   28,    0,   29,   30,   31,   61,   52,    0,   32,
+   62,   64,   50,    0,   57,    0,   65,   60,    0,   59,
    38,    0,   39,   40,   41,   42,   43,    0,    0,    0,
     0,   44,   45,   46,   47,   48,   49,    0,   63,   51,
-    0,    0,    0,    0,    0,    0,    0,    0,   54,    0,
-   55,   56,    0,    0,    0,    0,   24,   25,   26,   27,
-   28,    0,   29,   30,   31,   61,   52,    0,   32,   62,
-   64,   50,    0,   57,    0,   65,   60,    0,   59,   38,
-    0,   39,   40,   41,   42,   43,    0,    0,    0,    0,
-   44,   45,   46,   47,   48,   49,    0,   63,   51,    0,
-   53,    0,    0,    0,    0,    0,    0,   54,    0,   55,
-   56,    0,   85,   85,   85,   85,    0,    0,    0,    0,
-    0,   85,   52,    0,   61,   62,   64,   50,    0,   57,
-  287,   65,   60,    0,   59,    0,    0,   85,   85,    0,
-   85,   85,   85,   85,   85,    0,    0,    0,    0,    0,
-    0,    0,    0,   63,    0,    0,    0,    0,    0,   53,
-    0,    0,    0,    0,    0,    0,    0,    0,   86,   86,
-   86,   86,    0,    0,    0,    0,    0,   86,   52,    0,
-   61,   62,   64,   50,    0,   57,  289,   65,   60,    0,
-   59,    0,    0,   86,   86,    0,   86,   86,   86,   86,
-   86,    0,    0,    0,    0,    0,    0,    0,    0,   63,
-    0,    0,    0,    0,    0,   53,    0,    0,    0,    0,
+    0,   53,    0,    0,    0,    0,    0,    0,   54,    0,
+   55,   56,    0,   80,   80,   80,   80,    0,    0,    0,
+    0,    0,   80,   52,    0,   61,   62,   64,   50,   80,
+   57,  273,   65,   60,    0,   59,    0,    0,   80,   80,
+    0,   80,   80,   80,   80,   80,    0,    0,    0,    0,
+    0,    0,    0,    0,   63,    0,    0,    0,    0,    0,
+   53,    0,    0,    0,    0,    0,    0,    0,    0,   81,
+   81,   81,   81,    0,    0,    0,    0,    0,   81,   52,
+    0,   61,   62,   64,   50,    0,   57,  275,   65,   60,
+    0,   59,    0,    0,   81,   81,    0,   81,   81,   81,
+   81,   81,    0,    0,    0,    0,    0,    0,    0,    0,
+   63,    0,    0,    0,    0,    0,   53,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,   24,   25,   26,   27,   28,   61,   29,   30,   31,
-    0,   52,    0,   32,   62,   64,   50,    0,   57,    0,
-   65,   60,    0,   59,   38,    0,   39,   40,   41,   42,
-   43,    0,    0,    0,    0,   44,   45,   46,   47,   48,
-   49,   53,   63,   51,    0,    0,    0,    0,    0,    0,
-    0,    0,   54,    0,   55,   56,    0,    0,    0,   22,
-   24,   25,   26,   27,   28,    0,   29,   30,   31,   61,
-    0,    0,   32,   91,    0,    0,   91,    0,    0,    0,
-    0,    0,    0,   38,    0,   39,   40,   41,   42,   43,
-   91,   91,    0,    0,   44,   45,   46,   47,   48,   49,
-    0,    0,   51,    0,   53,    0,    0,    0,    0,  144,
-    0,   54,  144,   55,   56,    0,   24,   25,   26,   27,
-   28,    0,   29,   30,   31,   91,  144,  144,   32,    0,
-    0,  144,    0,    0,    0,    0,    0,    0,    0,   38,
-    0,   39,   40,   41,   42,   43,    0,    0,    0,    0,
-   44,   45,   46,   47,   48,   49,    0,    0,   51,  144,
-    0,  144,    0,    0,    0,    0,    0,   54,  127,   55,
-   56,  127,   24,   25,   26,   27,   28,    0,   29,   30,
-   31,    0,    0,    0,   32,  127,  127,    0,    0,    0,
-  127,  144,    0,    0,    0,   38,    0,   39,   40,   41,
+    0,    0,   24,   25,   26,   27,   28,   61,   29,   30,
+   31,    0,   52,    0,   32,   62,   64,   50,    0,   57,
+    0,   65,   60,    0,   59,   38,    0,   39,   40,   41,
    42,   43,    0,    0,    0,    0,   44,   45,   46,   47,
-   48,   49,    0,    0,   51,    0,    0,    0,  127,    0,
-  127,    0,    0,   54,    0,   55,   56,    0,    0,    0,
-    0,  151,    0,    0,  151,   24,   25,   26,   27,   28,
-    0,   29,   30,   31,    0,    0,    0,   32,  151,  151,
-  127,    0,    0,  151,    0,    0,    0,    0,   38,    0,
-   39,   40,   41,   42,   43,    0,    0,    0,    0,   44,
-   45,   46,   47,   48,   49,    0,    0,   51,    0,  137,
-    0,  151,  137,  151,    0,    0,   54,    0,   55,   56,
-    0,    0,    0,    0,    0,    0,  137,  137,    0,    0,
-    0,  137,    0,    0,   91,   91,   91,   91,    0,    0,
-    0,    0,    0,  151,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,   91,
-   91,  137,   91,    0,    0,    0,    0,    0,    0,    0,
-  144,  144,  144,  144,    0,  112,    0,    0,  112,  144,
-    0,    0,    0,    0,    0,  144,  144,  144,  144,    0,
-    0,  137,  112,  112,    0,  144,  144,  112,  144,  144,
-  144,  144,  144,  144,  144,    0,    0,  144,    0,    0,
-  144,  144,  144,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,  112,    0,  112,    0,  127,
-  127,  127,  127,    0,  153,    0,    0,  153,  127,    0,
-    0,    0,    0,    0,  127,  127,  127,  127,    0,    0,
-    0,  153,  153,    0,  127,  127,  153,  127,  127,  127,
-  127,  127,  127,  127,    0,    0,  127,    0,    0,  127,
-  127,  127,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,  153,    0,    0,    0,
-    0,    0,  151,  151,  151,  151,    0,    0,    0,    0,
-    0,  151,    0,    0,    0,    0,    0,  151,  151,  151,
-  151,    0,    0,    0,    0,    0,  153,  151,  151,    0,
-  151,  151,  151,  151,  151,  151,  151,    0,    0,  151,
-    0,    0,  151,  151,  151,    0,    0,    0,    0,    0,
-  137,  137,  137,  137,    0,  154,    0,    0,    0,  137,
-    0,    0,    0,    0,    0,  137,  137,  137,  137,    0,
-    0,    0,  154,  154,    0,  137,  137,  154,  137,  137,
-  137,  137,  137,  137,  137,    0,    0,  137,    0,    0,
-  137,  137,  137,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,  154,    0,  154,    0,    0,
-    0,    0,    0,    0,    0,    0,  112,  112,  112,  112,
-    0,    0,    0,    0,    0,  112,    0,    0,    0,    0,
-    0,  112,  112,  112,  112,    0,    0,  154,    0,    0,
-  170,  112,  112,    0,  112,  112,  112,  112,  112,  112,
-  112,    0,    0,  112,    0,    0,  112,  112,  112,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  152,    0,    0,  153,  153,  153,  153,    0,
-  139,    0,    0,    0,  153,    0,    0,    0,    0,    0,
-  153,  153,  153,  153,    0,    0,    0,  139,  139,    0,
-  153,  153,  139,  153,  153,  153,  153,  153,  153,  153,
-    0,    0,  153,    0,    0,  153,  153,  153,    0,    0,
-    0,    0,    0,  104,    0,    0,  104,    0,    0,    0,
-  139,    0,  139,   88,    0,    0,   88,    0,    0,    0,
-  104,  104,    0,    0,    0,  104,    0,    0,    0,    0,
-   88,   88,    0,    0,    0,   88,    0,    0,    0,    0,
-    0,    0,  139,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,  104,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,   88,  154,  154,  154,  154,
-    0,   66,    0,    0,   66,  154,    0,    0,    0,    0,
-    0,  154,  154,  154,  154,  104,    0,    0,   66,   66,
-    0,  154,  154,   66,  154,  154,  154,  154,  154,  154,
-  154,    0,    0,  154,    0,    0,  154,  154,  154,    0,
-    0,    0,    0,    0,   69,    0,  154,  155,  156,  157,
-    0,    0,    0,   66,    0,    0,    0,    0,    0,    0,
-    0,   69,   69,  163,  164,  165,   69,    0,  166,    0,
-    0,  167,  168,  169,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,   66,    0,    0,    0,    0,  103,    0,
-    0,  103,    0,    0,   69,    0,   69,    0,    0,    0,
-    0,    0,    0,    0,    0,  103,  103,    0,    0,    0,
-  103,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,  139,  139,  139,  139,    0,   69,    0,    0,    0,
-  139,    0,    0,    0,    0,    0,  139,  139,  139,  139,
-  103,    0,    0,    0,    0,    0,  139,  139,    0,  139,
-  139,  139,  139,  139,  139,  139,    0,    0,  139,    0,
-    0,  139,  139,  139,  104,  104,  104,  104,    0,  140,
-  103,    0,  140,  104,   88,   88,   88,   88,    0,  104,
-  104,  104,  104,    0,    0,    0,  140,  140,    0,  104,
-  104,  140,  104,  104,  104,  104,  104,  104,  104,   88,
-   88,  104,   88,    0,  104,  104,  104,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,  140,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   66,   66,   66,   66,    0,  153,    0,    0,
-  153,   66,    0,    0,    0,    0,    0,   66,   66,   66,
-   66,    0,    0,    0,  153,  153,    0,   66,   66,  153,
-   66,   66,   66,   66,   66,   66,   66,    0,    0,   66,
-    0,    0,   66,   66,   66,   69,   69,   69,   69,    0,
-  110,    0,    0,  110,   69,    0,    0,    0,    0,  153,
-   69,   69,   69,   69,    0,    0,    0,  110,  110,    0,
-   69,   69,  110,   69,   69,   69,   69,   69,   69,   69,
-    0,    0,   69,    0,    0,   69,   69,   69,    0,  103,
-  103,  103,  103,    0,  117,    0,    0,  117,  103,    0,
-    0,    0,  110,    0,  103,  103,  103,  103,    0,    0,
-    0,  117,  117,    0,  103,  103,  117,  103,  103,  103,
-  103,  103,  103,  103,    0,    0,  103,    0,    0,  103,
-  103,  103,    0,    0,    0,    0,    0,  101,    0,    0,
-  101,    0,    0,    0,    0,    0,  117,    0,    0,    0,
-    0,    0,    0,    0,  101,  101,    0,  138,    0,  101,
-  138,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-  140,  140,  140,  140,  138,  138,    0,    0,    0,  140,
-    0,    0,    0,    0,    0,  140,  140,  140,  140,  101,
-    0,    0,    0,    0,    0,  140,  140,    0,  140,  140,
-  140,  140,  140,  140,  140,   95,    0,  140,   95,  138,
-  140,  140,  140,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   95,   95,    0,    0,    0,   95,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,  153,  153,
-  153,  153,    0,   96,    0,    0,   96,  153,    0,    0,
-    0,    0,    0,  153,  153,  153,  153,   95,    0,    0,
-   96,   96,    0,  153,  153,   96,  153,  153,  153,  153,
-  153,  153,  153,    0,    0,  153,    0,    0,  153,  153,
-  153,  110,  110,  110,  110,    0,    0,    0,    0,    0,
-  110,    0,    0,    0,    0,   96,  110,  110,  110,  110,
-    0,    0,    0,    0,    0,    0,  110,  110,    0,  110,
-  110,  110,  110,  110,  110,  110,    0,    0,  110,    0,
-    0,  110,  110,  110,    0,  117,  117,  117,  117,    0,
-   97,    0,    0,   97,  117,    0,    0,    0,    0,    0,
-  117,  117,  117,  117,    0,    0,    0,   97,   97,    0,
-  117,  117,   97,  117,  117,  117,  117,  117,  117,  117,
-    0,    0,  117,    0,    0,  117,  117,  117,  101,  101,
-  101,  101,    0,    0,    0,    0,    0,  101,    0,    0,
-    0,    0,   97,  101,  101,  101,  101,    0,  138,  138,
-  138,  138,    0,  101,  101,   93,  101,  101,  101,  101,
-  101,  101,  101,  107,    0,  101,    0,  112,    0,    0,
-  121,    0,    0,  138,  138,    0,    0,  128,  129,  130,
-  131,  132,    0,    0,  135,  136,    0,    0,  170,    0,
-    0,  143,    0,    0,    0,    0,   95,   95,   95,   95,
-    0,   93,    0,    0,   93,   95,    0,    0,    0,    0,
-    0,   95,   95,   95,   95,    0,    0,  186,   93,   93,
-  152,   95,   95,   93,   95,   95,   95,   95,   95,   95,
-   95,    0,    0,    0,   96,   96,   96,   96,    0,    0,
-    0,    0,    0,   96,    0,    0,    0,    0,    0,   96,
-   96,   96,   96,   93,   94,    0,    0,   94,    0,   96,
-   96,    0,   96,   96,   96,   96,   96,   96,   96,    0,
-    0,   94,   94,    0,    0,    0,   94,    0,  224,  225,
-  226,  227,  228,  229,  230,  231,  232,  233,  234,  235,
-  236,  237,   92,    0,    0,   92,    0,    0,    0,    0,
-    0,    0,    0,  251,    0,    0,   94,    0,    0,   92,
-   92,    0,    0,    0,   92,    0,    0,    0,    0,    0,
-    0,   97,   97,   97,   97,    0,    0,    0,    0,    0,
-   97,    0,    0,    0,    0,    0,   97,   97,   97,   97,
-   80,    0,    0,   80,   92,    0,   97,   97,    0,   97,
-   97,   97,   97,   97,   97,   97,    0,   80,   80,    0,
-    0,    0,   80,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,   81,    0,    0,   81,
-    0,    0,    0,  308,  154,  155,  156,  157,    0,    0,
-    0,    0,   80,   81,   81,    0,    0,    0,   81,  161,
-  162,  163,  164,  165,    0,    0,  166,    0,    0,  167,
-  168,  169,    0,    0,    0,    0,    0,    0,    0,    0,
-  326,   82,    0,    0,   82,    0,    0,    0,   81,    0,
-    0,    0,   93,   93,   93,   93,    0,    0,   82,   82,
-    0,   93,    0,   82,    0,    0,    0,   93,   93,   93,
-   93,    0,    0,    0,    0,    0,    0,   93,   93,    0,
-   93,   93,   93,   93,   93,   93,   93,    0,    0,    0,
-    0,    0,    0,   82,    0,  143,    0,    0,  143,    0,
-    0,    0,    0,    0,    0,   94,   94,   94,   94,    0,
-    0,    0,  143,  143,   94,    0,    0,  143,    0,    0,
-   94,   94,   94,   94,    0,    0,    0,    0,    0,    0,
-   94,   94,    0,   94,   94,   94,   94,   94,   94,   94,
-    0,    0,    0,   92,   92,   92,   92,  143,    0,    0,
-    0,    0,   92,    0,    0,    0,    0,    0,   92,   92,
-   92,   92,  142,    0,    0,  142,    0,    0,   92,   92,
-    0,   92,   92,   92,   92,   92,   92,   92,    0,  142,
-  142,    0,    0,    0,  142,    0,    0,    0,    0,    0,
-    0,   80,   80,   80,   80,   79,    0,    0,   79,    0,
-   80,    0,    0,    0,    0,    0,   80,   80,   80,   80,
-    0,    0,   79,   79,  142,  131,   80,   80,  131,   80,
-   80,   80,   80,   80,   80,   80,    0,   81,   81,   81,
-   81,    0,  131,  131,    0,    0,   81,  131,    0,    0,
-    0,    0,   81,   81,   81,   81,    0,   79,    0,    0,
-    0,    0,   81,   81,    0,   81,   81,   81,   81,   81,
-   81,  102,    0,    0,  102,    0,    0,  131,    0,    0,
-    0,    0,   82,   82,   82,   82,    0,    0,  102,  102,
-    0,   82,    0,  102,    0,    0,    0,   82,   82,    0,
-   82,  170,    0,    0,    0,    0,    0,   82,   82,    0,
-   82,   82,   82,   82,   82,   82,    0,   67,    0,    0,
-   67,    0,    0,  102,   87,    0,    0,   87,    0,    0,
-    0,    0,    0,  152,   67,   67,  143,  143,  143,  143,
-    0,   87,   87,    0,    0,  143,   87,    0,    0,    0,
-    0,  143,  143,    0,    0,    0,   89,    0,    0,   89,
-    0,  143,  143,    0,  143,  143,  143,  143,  143,   67,
-    0,    0,    0,   89,   89,    0,   87,    0,   89,    0,
-    0,  159,    0,    0,    0,    0,    0,    0,    0,    0,
+   48,   49,   53,   63,   51,    0,    0,    0,    0,    0,
+    0,    0,    0,   54,    0,   55,   56,    0,    0,    0,
+   22,   24,   25,   26,   27,   28,    0,   29,   30,   31,
+   61,    0,    0,   32,   87,    0,    0,   87,    0,    0,
+    0,    0,    0,    0,   38,    0,   39,   40,   41,   42,
+   43,   87,   87,    0,    0,   44,   45,   46,   47,   48,
+   49,  166,    0,   51,    0,   53,    0,    0,    0,    0,
+  140,    0,   54,  140,   55,   56,    0,   24,   25,   26,
+   27,   28,    0,   29,   30,   31,   87,  140,  140,   32,
+    0,    0,  140,  148,    0,    0,    0,    0,    0,    0,
+   38,    0,   39,   40,   41,   42,   43,    0,    0,    0,
+    0,   44,   45,   46,   47,   48,   49,    0,    0,   51,
+  140,    0,  140,    0,    0,    0,    0,    0,   54,  123,
+   55,   56,  123,   24,   25,   26,   27,   28,    0,   29,
+   30,   31,    0,    0,    0,   32,  123,  123,    0,    0,
+    0,  123,  140,    0,    0,    0,   38,    0,   39,   40,
+   41,   42,   43,    0,    0,    0,    0,   44,   45,   46,
+   47,   48,   49,    0,    0,   51,    0,    0,    0,  123,
+    0,  123,    0,    0,   54,    0,   55,   56,    0,    0,
+    0,    0,  147,    0,    0,  147,   24,   25,   26,   27,
+   28,    0,   29,   30,   31,    0,    0,    0,   32,  147,
+  147,  123,    0,    0,  147,    0,    0,    0,    0,   38,
+    0,   39,   40,   41,   42,   43,    0,    0,    0,    0,
+   44,   45,   46,   47,   48,   49,    0,    0,   51,    0,
+  133,    0,  147,  133,  147,    0,    0,   54,    0,   55,
+   56,    0,    0,    0,    0,    0,    0,  133,  133,  152,
+  153,    0,  133,    0,    0,   87,   87,   87,   87,    0,
+    0,    0,    0,    0,  147,  160,  161,    0,    0,  162,
+    0,    0,  163,  164,  165,    0,    0,    0,    0,    0,
+   87,   87,  133,   87,    0,    0,    0,    0,    0,    0,
+    0,  140,  140,  140,  140,    0,  108,    0,    0,  108,
+  140,    0,    0,    0,    0,    0,  140,  140,  140,  140,
+    0,    0,  133,  108,  108,    0,  140,  140,  108,  140,
+  140,  140,  140,  140,  140,  140,    0,    0,  140,    0,
+    0,  140,  140,  140,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  108,    0,  108,    0,
+  123,  123,  123,  123,    0,  149,    0,    0,  149,  123,
+    0,    0,    0,    0,    0,  123,  123,  123,  123,    0,
+    0,    0,  149,  149,    0,  123,  123,  149,  123,  123,
+  123,  123,  123,  123,  123,    0,    0,  123,    0,    0,
+  123,  123,  123,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  149,    0,    0,
+    0,    0,    0,  147,  147,  147,  147,    0,    0,    0,
+    0,    0,  147,    0,    0,    0,    0,    0,  147,  147,
+  147,  147,    0,    0,    0,    0,    0,  149,  147,  147,
+    0,  147,  147,  147,  147,  147,  147,  147,    0,    0,
+  147,    0,    0,  147,  147,  147,    0,    0,    0,    0,
+    0,  133,  133,  133,  133,    0,  150,    0,    0,    0,
+  133,    0,    0,    0,    0,    0,  133,  133,  133,  133,
+    0,    0,    0,  150,  150,    0,  133,  133,  150,  133,
+  133,  133,  133,  133,  133,  133,    0,    0,  133,    0,
+    0,  133,  133,  133,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  150,    0,  150,    0,
+    0,    0,    0,    0,    0,    0,    0,  108,  108,  108,
+  108,    0,    0,    0,    0,    0,  108,    0,    0,    0,
+    0,    0,  108,  108,  108,  108,    0,    0,  150,    0,
+    0,    0,  108,  108,    0,  108,  108,  108,  108,  108,
+  108,  108,    0,    0,  108,    0,    0,  108,  108,  108,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,  142,  142,  142,  142,    0,   89,  170,
-    0,    0,  142,    0,    0,  159,    0,    0,  142,  142,
-    0,    0,    0,    0,    0,    0,    0,    0,  142,  142,
-    0,  142,  142,  142,  142,  142,   79,   79,   79,   79,
-    0,  152,    0,  170,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,  131,  131,  131,  131,
-    0,   79,   79,    0,    0,  131,    0,    0,    0,    0,
-    0,  131,  131,    0,    0,  152,    0,    0,    0,    0,
-    0,  131,  131,    0,  131,  131,  131,  131,  131,    0,
-    0,    0,    0,    0,    0,    0,    0,  154,  155,  156,
-  157,    0,  102,  102,  102,  102,    0,    0,    0,    0,
-    0,  102,    0,  162,  163,  164,  165,  102,  102,  166,
-    0,    0,  167,  168,  169,    0,    0,  102,  102,    0,
-  102,  102,  102,  102,  102,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,   67,   67,
-   67,   67,    0,    0,    0,   87,   87,   87,   87,    0,
-    0,    0,    0,    0,   87,    0,    0,    0,    0,    0,
-    0,    0,    0,   67,   67,    0,    0,    0,    0,    0,
-   87,   87,    0,   87,   87,   87,   87,   89,   89,   89,
-   89,    0,    0,    0,    0,    0,   89,    0,    0,  153,
-    0,    0,    0,    0,    0,  154,  155,  156,  157,    0,
-    0,    0,   89,   89,    0,   89,   89,   89,  158,  160,
-  161,  162,  163,  164,  165,    0,    0,  166,    0,    0,
-  167,  168,  169,  153,    0,    0,    0,    0,    0,  154,
-  155,  156,  157,    0,    0,    0,    0,   67,    0,    0,
-    0,   81,    0,  160,  161,  162,  163,  164,  165,    0,
-    0,  166,    0,    0,  167,  168,  169,   97,   99,  101,
-  103,    0,    0,    0,    0,    0,  111,    0,    0,  120,
+    0,    0,    0,    0,    0,    0,  149,  149,  149,  149,
+    0,  135,    0,    0,    0,  149,    0,    0,    0,    0,
+    0,  149,  149,  149,  149,    0,    0,    0,  135,  135,
+    0,  149,  149,  135,  149,  149,  149,  149,  149,  149,
+  149,    0,    0,  149,    0,    0,  149,  149,  149,    0,
+   89,   89,    0,    0,  100,    0,    0,  100,    0,    0,
+    0,  135,  102,  135,   86,    0,    0,   86,  110,   89,
+  118,  100,  100,    0,    0,   89,  100,    0,    0,    0,
+    0,   86,   86,    0,    0,    0,   86,   89,   89,   89,
+   89,    0,    0,  135,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  100,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   86,  150,  150,  150,
+  150,    0,   62,    0,    0,   62,  150,    0,    0,    0,
+    0,  110,  150,  150,  150,  150,  100,    0,    0,   62,
+   62,    0,  150,  150,   62,  150,  150,  150,  150,  150,
+  150,  150,    0,    0,  150,    0,    0,  150,  150,  150,
+    0,    0,    0,    0,    0,   65,    0,    0,    0,    0,
+    0,    0,    0,    0,   62,    0,    0,    0,    0,    0,
+    0,    0,   65,   65,    0,    0,    0,   65,    0,    0,
+  233,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   62,    0,    0,    0,    0,   99,
+    0,    0,   99,    0,  261,   65,    0,   65,    0,    0,
+    0,    0,    0,    0,    0,    0,   99,   99,    0,    0,
+    0,   99,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  135,  135,  135,  135,    0,   65,    0,    0,
+    0,  135,    0,    0,    0,    0,    0,  135,  135,  135,
+  135,   99,    0,    0,    0,    0,    0,  135,  135,    0,
+  135,  135,  135,  135,  135,  135,  135,    0,    0,  135,
+    0,    0,  135,  135,  135,  100,  100,  100,  100,    0,
+  136,   99,    0,  136,  100,   86,   86,   86,   86,    0,
+  100,  100,  100,  100,   86,    0,    0,  136,  136,    0,
+  100,  100,  136,  100,  100,  100,  100,  100,  100,  100,
+   86,   86,  100,   86,   86,  100,  100,  100,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  136,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   62,   62,   62,   62,    0,  149,    0,
+    0,  149,   62,    0,    0,    0,    0,    0,   62,   62,
+   62,   62,    0,    0,    0,  149,  149,    0,   62,   62,
+  149,   62,   62,   62,   62,   62,   62,   62,    0,    0,
+   62,    0,    0,   62,   62,   62,   65,   65,   65,   65,
+    0,  106,    0,    0,  106,   65,    0,    0,    0,    0,
+  149,   65,   65,   65,   65,    0,    0,    0,  106,  106,
+    0,   65,   65,  106,   65,   65,   65,   65,   65,   65,
+   65,    0,    0,   65,    0,    0,   65,   65,   65,    0,
+   99,   99,   99,   99,    0,  113,    0,    0,  113,   99,
+    0,    0,    0,  106,    0,   99,   99,   99,   99,    0,
+    0,    0,  113,  113,    0,   99,   99,  113,   99,   99,
+   99,   99,   99,   99,   99,    0,    0,   99,    0,    0,
+   99,   99,   99,    0,    0,    0,    0,    0,   91,    0,
+    0,   91,    0,    0,    0,    0,    0,  113,    0,    0,
+    0,    0,    0,    0,    0,   91,   91,    0,    0,    0,
+   91,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  136,  136,  136,  136,    0,   92,    0,    0,   92,
+  136,    0,    0,    0,    0,    0,  136,  136,  136,  136,
+   91,    0,    0,   92,   92,    0,  136,  136,   92,  136,
+  136,  136,  136,  136,  136,  136,    0,    0,  136,    0,
+    0,  136,  136,  136,   93,    0,    0,   93,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   92,    0,
+    0,   93,   93,    0,    0,    0,   93,    0,    0,  149,
+  149,  149,  149,    0,    0,    0,    0,    0,  149,    0,
+    0,    0,    0,    0,  149,  149,  149,  149,    0,    0,
+    0,    0,    0,    0,  149,  149,   93,  149,  149,  149,
+  149,  149,  149,  149,    0,    0,  149,    0,    0,  149,
+  149,  149,  106,  106,  106,  106,    0,   89,    0,    0,
+   89,  106,    0,    0,    0,    0,    0,  106,  106,  106,
+  106,    0,    0,    0,   89,   89,    0,  106,  106,   89,
+  106,  106,  106,  106,  106,  106,  106,    0,    0,  106,
+    0,    0,  106,  106,  106,    0,  113,  113,  113,  113,
+    0,   90,    0,    0,   90,  113,    0,    0,    0,   89,
+    0,  113,  113,  113,  113,    0,    0,    0,   90,   90,
+    0,  113,  113,   90,  113,  113,  113,  113,  113,  113,
+  113,    0,    0,  113,    0,    0,  113,  113,  113,   91,
+   91,   91,   91,    0,   88,    0,    0,   88,   91,    0,
+    0,    0,    0,   90,   91,   91,   91,   91,    0,    0,
+    0,   88,   88,    0,   91,   91,   88,   91,   91,   91,
+   91,   91,   91,   91,    0,    0,    0,   92,   92,   92,
+   92,    0,   76,    0,    0,   76,   92,    0,    0,    0,
+    0,    0,   92,   92,   92,   92,   88,    0,    0,   76,
+   76,    0,   92,   92,   76,   92,   92,   92,   92,   92,
+   92,   92,    0,    0,    0,   93,   93,   93,   93,    0,
+   77,    0,    0,   77,   93,    0,    0,    0,    0,    0,
+   93,   93,   93,   93,   76,    0,    0,   77,   77,    0,
+   93,   93,   77,   93,   93,   93,   93,   93,   93,   93,
+    0,    0,    0,    0,    0,    0,   78,    0,    0,   78,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   77,   78,   78,    0,    0,    0,   78,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   89,   89,
+   89,   89,    0,   79,    0,    0,   79,   89,    0,    0,
+    0,    0,    0,   89,   89,   89,   89,    0,   78,    0,
+   79,   79,    0,   89,   89,   79,   89,   89,   89,   89,
+   89,   89,   89,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   90,   90,   90,   90,    0,  139,    0,    0,
+  139,   90,    0,    0,    0,   79,    0,   90,   90,   90,
+   90,    0,    0,    0,  139,  139,    0,   90,   90,  139,
+   90,   90,   90,   90,   90,   90,   90,    0,    0,    0,
+    0,    0,    0,    0,    0,   88,   88,   88,   88,    0,
+  138,    0,    0,  138,   88,    0,    0,    0,    0,  139,
+   88,   88,   88,   88,    0,    0,    0,  138,  138,    0,
+   88,   88,  138,   88,   88,   88,   88,   88,   88,   88,
+    0,    0,    0,   76,   76,   76,   76,    0,  127,    0,
+    0,  127,   76,    0,    0,    0,    0,    0,   76,   76,
+   76,   76,  138,    0,    0,  127,  127,    0,   76,   76,
+  127,   76,   76,   76,   76,   76,   76,   76,    0,    0,
+    0,   77,   77,   77,   77,    0,   98,    0,    0,   98,
+   77,    0,    0,    0,    0,    0,   77,   77,   77,   77,
+  127,    0,    0,   98,   98,    0,   77,   77,   98,   77,
+   77,   77,   77,   77,   77,    0,    0,   78,   78,   78,
+   78,    0,   82,    0,    0,   82,   78,    0,    0,    0,
+    0,    0,   78,   78,    0,   78,    0,    0,   98,   82,
+   82,    0,   78,   78,   82,   78,   78,   78,   78,   78,
+   78,    0,    0,    0,   79,   79,   79,   79,    0,   83,
+    0,    0,   83,   79,    0,    0,    0,    0,    0,   79,
+   79,    0,    0,    0,   82,    0,   83,   83,    0,   79,
+   79,   83,   79,   79,   79,   79,   79,   79,    0,    0,
+  166,    0,    0,    0,    0,    0,    0,    0,  139,  139,
+  139,  139,    0,   85,    0,    0,   85,  139,    0,    0,
+    0,   83,    0,  139,  139,    0,   64,    0,    0,   64,
+   85,   85,  148,  139,  139,   85,  139,  139,  139,  139,
+  139,    0,    0,   64,   64,  134,    0,    0,  134,    0,
+    0,  138,  138,  138,  138,   75,    0,    0,   75,    0,
+  138,    0,  134,  134,    0,   85,  138,  138,    0,    0,
+    0,    0,   75,   75,    0,    0,  138,  138,   64,  138,
+  138,  138,  138,  138,    0,   63,    0,    0,   63,  127,
+  127,  127,  127,    0,    0,    0,    0,  134,  127,    0,
+    0,    0,   63,   63,  127,  127,  281,   75,    0,    0,
+    0,  155,    0,    0,  127,  127,    0,  127,  127,  127,
+  127,  127,    0,    0,    0,    0,    0,   98,   98,   98,
+   98,    0,    0,    0,    0,    0,   98,   63,    0,  166,
+    0,    0,   98,   98,    0,  155,    0,    0,    0,    0,
+    0,    0,   98,   98,    0,   98,   98,   98,   98,   98,
+    0,    0,    0,   82,   82,   82,   82,    0,    0,    0,
+    0,  148,   82,  166,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   82,   82,
+    0,   82,   82,   82,   82,   82,  150,  151,  152,  153,
+   83,   83,   83,   83,    0,  148,    0,    0,    0,   83,
+    0,  157,  158,  159,  160,  161,    0,    0,  162,    0,
+    0,  163,  164,  165,  166,   83,   83,    0,   83,   83,
+   83,   83,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   85,   85,   85,   85,    0,    0,
+    0,    0,    0,   85,    0,    0,  148,   64,   64,   64,
+   64,    0,    0,    0,    0,    0,    0,    0,    0,   85,
+   85,    0,   85,   85,   85,    0,  134,  134,  134,  134,
+    0,    0,   64,   64,   93,    0,   75,   75,   75,   75,
+    0,    0,  103,    0,    0,    0,  108,    0,    0,  117,
+    0,  134,  134,    0,    0,    0,  124,  125,  126,  127,
+  128,   75,   75,  131,  132,    0,   63,   63,   63,   63,
+  139,    0,    0,    0,    0,    0,    0,    0,    0,  149,
+    0,    0,    0,    0,    0,  150,  151,  152,  153,    0,
+    0,   63,   63,    0,    0,    0,  182,    0,  154,  156,
+  157,  158,  159,  160,  161,    0,    0,  162,    0,    0,
+  163,  164,  165,  149,    0,    0,    0,    0,    0,  150,
+  151,  152,  153,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  154,  156,  157,  158,  159,  160,  161,    0,
+    0,  162,    0,    0,  163,  164,  165,    0,    0,    0,
+    0,    0,    0,  216,  217,  218,  219,  220,  221,  222,
+  223,  224,  225,  226,  227,  228,  229,    0,    0,    0,
+  150,  151,  152,  153,    0,    0,    0,    0,  243,    0,
+    0,    0,    0,    0,    0,    0,  158,  159,  160,  161,
+    0,    0,  162,    0,    0,  163,  164,  165,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,  179,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,  187,    0,
-    0,  190,    0,  192,    0,  194,    0,  196,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    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,
+    0,    0,    0,    0,  294,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,  253,    0,    0,    0,    0,
-    0,    0,  260,
+    0,    0,    0,    0,    0,  309,
 };
 dEXT short yycheck[] = {                                      13,
-   36,  198,  196,   36,   40,   93,   85,   41,   91,   59,
-   44,   36,   93,   41,  123,   41,   44,  185,   41,   41,
-   40,   91,   40,  257,   93,   59,  257,   40,   40,   40,
-   58,   59,   46,   59,   41,   63,   59,   44,   93,  257,
-  123,  276,  277,   57,   41,   26,   41,   61,   91,   41,
-   59,   58,   59,  123,   44,   41,   63,   41,   91,   93,
-   59,   59,   43,   44,    0,   93,   96,   40,   98,   50,
-  100,   91,  102,   90,  104,  105,   41,   59,   40,   59,
-  123,   62,   63,   64,   65,  282,   93,  266,  267,  268,
-  123,  270,  271,   40,   59,  109,  110,   33,  123,   40,
-   36,   37,   38,  123,   40,  123,   42,   43,  125,   45,
-  123,  123,  123,   59,  123,   59,  278,  314,  123,  316,
-  297,  298,   41,   59,  123,   44,   59,   40,   64,  110,
-  298,   41,  146,  147,  148,  149,  150,  151,  152,   59,
-   44,    6,  336,    8,   63,  339,  123,   59,  257,   59,
-   41,  257,  260,   40,   40,   91,  170,  171,  172,  173,
-  174,  175,  176,    0,  358,  182,   31,   32,   59,  199,
-  187,  185,   91,   41,   41,  189,   40,  191,   41,   36,
-  125,  195,   91,   91,  198,  125,   91,  123,   91,  125,
-  126,  205,   59,  207,  208,   41,   33,   93,  212,   36,
-   37,   38,  298,   40,  123,   42,   43,  257,   45,  297,
-  298,   93,   40,   59,  123,   59,  297,  298,   41,    0,
-  123,   41,   59,   41,  238,  258,  240,   64,  297,  298,
-   41,  314,  257,   41,  123,   93,   44,  262,  272,  273,
-  274,  275,  297,  298,  272,  273,  274,  275,   40,   40,
-   58,   59,   33,  281,   91,   36,   37,   38,  337,   40,
-  296,   42,   43,  297,   45,  272,  273,  274,  275,  297,
-  298,   41,  300,  301,  281,  297,  298,   41,   59,  293,
-  287,  288,   59,   64,  298,   93,  123,  125,  125,  126,
-  297,  298,  125,  300,  301,  302,  303,  304,  305,  125,
-  297,  298,  297,  298,  318,  297,  298,  297,  298,  125,
-   91,  297,  298,  297,  298,  297,  298,  297,  298,   41,
+   41,   36,   36,   85,   93,   91,   40,   59,   41,   93,
+   41,   44,   41,   59,   40,   44,  123,   93,  181,   59,
+   90,   93,   41,   91,  257,   41,   59,   36,  321,   58,
+   59,   41,   46,   93,   63,   91,    0,  123,   59,  190,
+  257,  318,  319,   57,  257,   41,  323,   61,   40,   59,
+   40,  121,  297,  298,   40,  123,   91,   41,   40,  352,
+   93,   40,  339,   59,   93,   91,  343,  123,    6,   33,
+    8,  123,   36,   37,   38,   59,   40,   40,   42,   43,
+   41,   45,   41,  123,  278,   41,   40,   44,  123,   41,
+   40,  105,  106,   31,   32,   59,  123,  123,  276,  277,
+   64,   41,   44,   59,    0,   41,   41,   59,  178,   93,
+   59,   40,   59,  183,  123,   59,   59,  268,   59,   59,
+   59,  284,  260,   59,   59,  123,  257,   91,  142,  143,
+  144,  145,  146,  147,  148,   40,   40,   33,   93,   41,
+   36,   37,   38,   59,   40,   40,   42,   43,  299,   45,
+  257,  125,  166,  167,  168,  169,  170,  171,  172,  123,
+    0,  125,  126,   59,   91,   36,   41,  181,   64,   91,
+  298,  185,  186,   40,  188,   59,  190,  125,   41,   41,
+   41,   41,   41,  197,   40,  199,  200,   93,   91,   41,
+  204,  342,  125,   33,   59,   91,   36,   37,   38,  125,
+   40,  125,   42,   43,  125,   45,  123,   41,  297,  298,
+  125,  257,   41,  297,  298,   41,  230,   59,  232,   59,
+  123,  297,  298,  258,   64,  297,  298,  123,  314,  125,
+  126,   41,   41,   40,  123,   44,   41,  297,  298,  272,
+  273,  274,  275,  272,  273,  274,  275,  329,  257,   58,
+   59,   91,  281,  262,   63,   41,  297,  298,  287,  288,
+  289,  290,  296,   59,  297,  279,  297,  298,  297,  298,
+  284,  300,  301,  302,  303,  304,  305,  306,  297,  298,
+  309,  297,  298,  123,   93,   41,  126,  301,  272,  273,
+  274,  275,  256,  257,  258,  259,  260,  261,   59,  263,
+  264,  265,  266,  267,  268,  269,  270,  271,  272,  273,
+  274,  275,   41,  297,  298,  279,  280,   41,  282,  283,
+  284,  285,  286,   59,  338,   63,   41,  291,  292,  293,
+  294,  295,  296,   13,  338,  299,  297,  298,  297,  298,
+  297,  298,  297,  298,  308,  143,  310,  311,  297,  298,
+  297,  298,  188,   91,  297,  298,  297,  298,  297,  298,
   256,  257,  258,  259,  260,  261,  125,  263,  264,  265,
   266,  267,  268,  269,  270,  271,  272,  273,  274,  275,
-   41,  355,  123,  279,  280,  126,  282,  283,  284,  285,
-  286,  297,  298,  297,  298,  291,  292,  293,  294,  295,
-  296,   41,  281,  299,  297,  298,   41,   59,  287,  288,
-  289,  290,  308,   41,  310,  311,   41,  297,  298,  123,
-  289,  300,  301,  302,  303,  304,  305,  306,   41,   59,
-  309,   59,   41,  312,  313,  314,   59,  306,   41,   41,
-  309,  297,  298,  312,  313,  314,  309,   59,   41,  312,
-  313,  314,   13,  147,   95,  297,  298,  355,   91,  256,
-  257,  258,  259,  260,  261,   93,  263,  264,  265,  266,
-  267,  268,  269,  270,  271,  272,  273,  274,  275,  297,
-  298,  318,  279,  280,  195,  282,  283,  284,  285,  286,
-  123,   -1,   -1,   -1,  291,  292,  293,  294,  295,  296,
-   -1,   -1,  299,   91,  272,  273,  274,  275,   -1,   -1,
-   -1,  308,   -1,  310,  311,  256,  257,  258,  259,  260,
-  261,  125,  263,  264,  265,   -1,   -1,   -1,  269,  297,
-  298,  272,  273,  274,  275,  123,   -1,   -1,  279,  280,
-   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,   91,
-  291,  292,  293,  294,  295,  296,   -1,   -1,  299,   -1,
-   -1,   -1,  125,   -1,   91,   -1,   -1,  308,   33,  310,
-  311,   36,   37,   38,   -1,   40,   41,   42,   43,   44,
-   45,  123,   -1,   25,   26,  190,   -1,  192,  272,  273,
-  274,  275,   -1,   58,   59,   37,  123,   -1,   63,   64,
-   -1,   43,   44,   45,   -1,   -1,   -1,   -1,   50,   -1,
-   -1,   -1,   -1,  297,  298,   -1,   -1,   -1,   -1,   -1,
-   62,   63,   64,   65,   -1,   -1,   91,   -1,   93,   33,
-   -1,   -1,   36,   37,   38,   -1,   40,   41,   42,   43,
-   44,   45,   -1,   -1,  272,  273,  274,  275,   -1,   -1,
-   -1,   -1,   -1,   -1,   58,   59,  289,  290,  123,   63,
-   64,  126,  266,  267,  268,   -1,  270,  271,  110,  297,
-  298,   -1,  305,  306,   -1,   -1,  309,   -1,   -1,  312,
-  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,   33,   93,
-   -1,   36,   37,   38,   -1,   40,   -1,   42,   43,  287,
-   45,  289,  290,  266,  267,  268,   -1,  270,  271,   -1,
-   -1,   -1,   -1,   -1,   59,   -1,   -1,  305,  306,   64,
-   -1,  309,  126,   -1,  312,  313,  314,  169,   -1,  334,
-  335,   -1,   -1,   -1,   -1,   -1,  341,   -1,   -1,   41,
-   -1,   -1,   44,   -1,   -1,   -1,   91,  289,  290,   -1,
-   -1,  356,   -1,   -1,  359,  197,   58,   59,   -1,   -1,
-   -1,   63,   -1,   -1,  306,   -1,   -1,  309,   -1,   -1,
-  312,  313,  314,   -1,   -1,   -1,   -1,   -1,  123,  306,
-   -1,  126,  309,   -1,   -1,  312,  313,  314,   -1,   -1,
-   -1,   93,  257,  258,  259,  260,  261,   -1,  263,  264,
-  265,   -1,   -1,   -1,  269,   -1,   -1,  272,  273,  274,
-  275,   -1,   -1,   -1,   -1,  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,   -1,  308,  309,  310,  311,  312,  313,  314,
-   -1,   -1,   -1,  257,  258,  259,  260,  261,   -1,  263,
-  264,  265,   -1,   -1,   -1,  269,   -1,   -1,  272,  273,
-  274,  275,   -1,   -1,   -1,   -1,  280,  281,  282,  283,
+  125,  297,  298,  279,  280,  123,  282,  283,  284,  285,
+  286,  297,  298,  301,   95,  291,  292,  293,  294,  295,
+  296,   -1,   -1,  299,   -1,   -1,  309,   -1,   -1,  312,
+  313,  314,  308,   -1,  310,  311,  256,  257,  258,  259,
+  260,  261,   -1,  263,  264,  265,   -1,   -1,   -1,  269,
+   91,   -1,  272,  273,  274,  275,   -1,   -1,   -1,  279,
+  280,   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,
+   91,  291,  292,  293,  294,  295,  296,   -1,   -1,  299,
+   -1,   -1,  123,  272,  273,  274,  275,   -1,  308,   33,
+  310,  311,   36,   37,   38,   -1,   40,   41,   42,   43,
+   44,   45,  123,   -1,   -1,   -1,   -1,   -1,  297,  298,
+   -1,  300,   -1,   -1,   58,   59,   -1,   -1,   -1,   63,
+   64,  266,  267,  268,   -1,  270,  271,  266,  267,  268,
+   -1,  270,  271,   96,   97,   98,   99,  100,  101,   -1,
+   -1,  266,  267,  268,   -1,  270,  271,   91,   -1,   93,
+   33,   -1,   -1,   36,   37,   38,   -1,   40,   41,   42,
+   43,   44,   45,  281,  272,  273,  274,  275,   -1,  287,
+  288,  289,  290,   -1,   -1,   58,   59,   -1,   -1,  123,
+   63,   64,  126,  301,  302,  303,  304,  305,  306,  297,
+  298,  309,   43,   -1,  312,  313,  314,   -1,   -1,   -1,
+   51,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   33,
+   93,   -1,   36,   37,   38,   -1,   40,   -1,   42,   43,
+   26,   45,   -1,   -1,   -1,   -1,   -1,   -1,  191,   -1,
+   -1,   -1,   -1,   -1,   -1,   59,   -1,   43,   44,   90,
+   64,   -1,   -1,  126,   50,   -1,  287,  288,  289,  290,
+  296,  297,  298,   -1,  300,   -1,   62,   63,   64,   65,
+   41,   -1,  113,   44,  305,  306,   -1,   91,  309,   -1,
+  121,  312,  313,  314,   -1,   -1,   -1,   58,   59,  325,
+   -1,   -1,   63,   -1,   -1,  306,  332,   -1,  309,   -1,
+  336,  312,  313,  314,   -1,   -1,   -1,   -1,   -1,  123,
+  106,   -1,  126,  349,  350,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   93,  257,  258,  259,  260,  261,   -1,  263,
+  264,  265,   -1,   -1,   -1,  269,   -1,  178,  272,  273,
+  274,  275,  183,   -1,   -1,   -1,  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,   -1,  308,  309,  310,  311,  312,  313,
-  314,  256,  257,  258,  259,  260,  261,   -1,  263,  264,
-  265,   -1,   -1,   -1,  269,   -1,   -1,  272,  273,  274,
-  275,   -1,   -1,   -1,  279,  280,   -1,  282,  283,  284,
+  314,   -1,   -1,   -1,  257,  258,  259,  260,  261,   -1,
+  263,  264,  265,   -1,   -1,   -1,  269,   -1,   -1,  272,
+  273,  274,  275,   -1,   -1,   -1,   -1,  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,   -1,  308,  309,  310,  311,  312,
+  313,  314,  256,  257,  258,  259,  260,  261,   -1,  263,
+  264,  265,   -1,   -1,   -1,  269,   -1,   -1,  272,  273,
+  274,  275,   -1,   -1,   -1,  279,  280,   -1,  282,  283,
+  284,  285,  286,   -1,   -1,   -1,   91,  291,  292,  293,
+  294,  295,  296,   33,   -1,  299,   36,   37,   38,   -1,
+   40,   -1,   42,   43,  308,   45,  310,  311,   -1,   -1,
+   -1,  272,  273,  274,  275,   -1,   -1,   -1,  123,   59,
+  281,   -1,   -1,   -1,   64,   -1,  287,  288,  289,  290,
+   -1,   -1,   -1,   -1,   -1,   -1,  297,  298,   -1,  300,
+  301,  302,  303,  304,  305,  306,   -1,   -1,  309,   33,
+   -1,   91,   36,   37,   38,   -1,   40,   -1,   42,   43,
+   -1,   45,   -1,   -1,   -1,   -1,   13,   -1,   -1,   -1,
+   17,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   64,   -1,   -1,  123,   -1,   -1,  126,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   42,   -1,   -1,   45,   91,
+   -1,   -1,   -1,   -1,   -1,   33,   -1,   91,   36,   37,
+   38,   -1,   40,   -1,   42,   43,   -1,   45,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  123,   -1,   80,   -1,   -1,   64,   -1,   -1,  123,
+   -1,   -1,  126,   -1,   -1,   -1,   -1,   94,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   91,   -1,   -1,   -1,   -1,   33,   -1,
+   -1,   36,   37,   38,   -1,   40,   -1,   42,   43,   -1,
+   45,   -1,  287,   -1,  289,  290,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  140,   -1,  123,   -1,   -1,  126,   64,
+  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,  257,  258,  259,
+  260,  261,   -1,  263,  264,  265,   91,   -1,   -1,  269,
+  177,   -1,  272,  273,  274,  275,   -1,  184,   -1,  279,
+  280,   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,
+   -1,  291,  292,  293,  294,  295,  296,   91,  123,  299,
+   -1,  126,   -1,   -1,   -1,   -1,   -1,   -1,  308,   41,
+  310,  311,   44,  257,  258,  259,  260,  261,  262,  263,
+  264,  265,   -1,   -1,   91,  269,   -1,   -1,   -1,  123,
+   -1,   63,   -1,   -1,   -1,   -1,  280,  289,  282,  283,
+  284,  285,  286,   -1,   -1,   -1,   -1,  291,  292,  293,
+  294,  295,  296,   -1,  306,  299,  123,  309,   -1,   91,
+  312,  313,  314,   41,  308,   -1,  310,  311,   -1,  257,
+  258,  259,  260,  261,   -1,  263,  264,  265,   -1,   -1,
+   -1,  269,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,
+   -1,  123,  280,   -1,  282,  283,  284,  285,  286,   -1,
+   -1,   -1,   -1,  291,  292,  293,  294,  295,  296,   -1,
+   -1,  299,   -1,   91,   -1,   -1,   -1,   -1,   -1,   -1,
+  308,   -1,  310,  311,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  257,  258,  259,  260,  261,   -1,  263,  264,
+  265,   -1,   -1,   -1,  269,  123,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  280,   -1,  282,  283,  284,
   285,  286,   -1,   -1,   -1,   91,  291,  292,  293,  294,
   295,  296,   33,   -1,  299,   36,   37,   38,   -1,   40,
-   -1,   42,   43,  308,   45,  310,  311,   43,   -1,   -1,
-  272,  273,  274,  275,   -1,   51,   -1,  123,   59,  281,
-   -1,   -1,   -1,   64,   -1,  287,  288,  289,  290,   -1,
-   -1,   -1,   -1,   -1,   -1,  297,  298,   -1,  300,  301,
-  302,  303,  304,  305,  306,   -1,   -1,  309,   33,   -1,
-   91,   36,   37,   38,   90,   40,   -1,   42,   43,   -1,
-   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  309,  310,
-  311,   -1,   -1,   -1,  315,   -1,  317,   -1,   -1,   64,
-   -1,  117,  123,   -1,   -1,  126,   -1,   -1,   -1,  125,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  343,   -1,   33,   -1,   91,   36,   37,   38,
-  351,   40,  353,   42,   43,   -1,   45,   -1,   -1,   -1,
-   -1,   -1,   -1,  364,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   64,   -1,   -1,  123,   -1,
-   -1,  126,   -1,   -1,   -1,   -1,  182,   -1,   -1,   -1,
-   -1,  187,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   91,   -1,   -1,   -1,   -1,   33,   -1,   -1,
-   36,   37,   38,   -1,   40,   -1,   42,   43,   -1,   45,
+   -1,   42,   43,  308,   45,  310,  311,   -1,   -1,   -1,
+   -1,   -1,   -1,  287,  288,  289,  290,  123,   59,   -1,
+   -1,   -1,   -1,   64,   -1,   -1,   -1,  301,  302,  303,
+  304,  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,
+  314,   -1,  289,  290,   -1,   -1,   -1,   -1,   33,   -1,
+   91,   36,   37,   38,   -1,   40,   41,   42,   43,  306,
+   45,   -1,  309,   -1,   -1,  312,  313,  314,   -1,  281,
+   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,   64,
+   -1,   -1,   -1,   -1,   -1,  126,   -1,   -1,  300,  301,
+  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,
+  312,  313,  314,   -1,   33,   -1,   91,   36,   37,   38,
+   -1,   40,   -1,   42,   43,   -1,   45,   -1,   -1,   -1,
+   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,  287,
+  288,  289,  290,   -1,   -1,   64,   -1,   -1,   -1,   -1,
+   -1,  126,  300,  301,  302,  303,  304,  305,  306,   -1,
+   -1,  309,   -1,   -1,  312,  313,  314,   -1,   -1,   -1,
+   -1,   -1,   91,   33,   93,   -1,   36,   37,   38,   -1,
+   40,   41,   42,   43,   -1,   45,   -1,   -1,   -1,   -1,
    -1,  287,  288,  289,  290,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,  123,   -1,   -1,  126,   64,  305,
+   -1,   -1,   -1,   -1,   64,   -1,   -1,  126,  304,  305,
   306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,
-   -1,   -1,   -1,   -1,   -1,  256,  257,  258,  259,  260,
-  261,   -1,  263,  264,  265,   91,   -1,   -1,  269,   -1,
-   -1,  272,  273,  274,  275,   -1,   -1,   -1,  279,  280,
+   -1,   -1,   41,   -1,   -1,   44,  257,  258,  259,  260,
+  261,   91,  263,  264,  265,   -1,   -1,   -1,  269,   58,
+   59,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,  280,
    -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,   -1,
-  291,  292,  293,  294,  295,  296,   -1,  123,  299,   -1,
-  126,   -1,   91,   -1,   -1,   -1,   41,  308,   -1,  310,
-  311,   -1,  257,  258,  259,  260,  261,  262,  263,  264,
-  265,   -1,   -1,   -1,  269,   -1,   -1,   -1,   63,   -1,
-   -1,   -1,   -1,   -1,  123,  280,   -1,  282,  283,  284,
+  291,  292,  293,  294,  295,  296,  126,   -1,  299,   -1,
+   -1,   -1,   -1,   -1,   93,   -1,   -1,  308,   41,  310,
+  311,   44,  257,  258,  259,  260,  261,   -1,  263,  264,
+  265,   -1,   -1,   -1,  269,   58,   59,   -1,   -1,   -1,
+   63,   -1,   -1,   -1,   -1,  280,   -1,  282,  283,  284,
   285,  286,   -1,   -1,   -1,   -1,  291,  292,  293,  294,
-  295,  296,   -1,   -1,  299,   -1,   91,   -1,   -1,   -1,
-   -1,   -1,   -1,  308,   -1,  310,  311,   -1,  257,  258,
-  259,  260,  261,   -1,  263,  264,  265,   -1,   -1,   -1,
-  269,   58,   -1,   -1,   -1,   -1,   63,   -1,  123,   -1,
-   -1,  280,   -1,  282,  283,  284,  285,  286,   -1,   -1,
-   -1,   -1,  291,  292,  293,  294,  295,  296,   -1,   -1,
-  299,   -1,   -1,   -1,   91,   -1,   -1,   -1,   -1,  308,
-   -1,  310,  311,   -1,   -1,   -1,   -1,   41,   -1,   -1,
-   44,  257,  258,  259,  260,  261,   -1,  263,  264,  265,
-   -1,   -1,   -1,  269,   58,   59,  123,   -1,   -1,   63,
-   -1,   -1,   -1,   -1,  280,   -1,  282,  283,  284,  285,
-  286,   -1,   -1,   -1,   -1,  291,  292,  293,  294,  295,
-  296,   33,   -1,  299,   36,   37,   38,   -1,   40,   93,
-   42,   43,  308,   45,  310,  311,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   59,  287,  288,
-  289,  290,   64,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  301,  302,  303,  304,  305,  306,   -1,   -1,
-  309,   -1,   -1,  312,  313,  314,   -1,   33,   -1,   91,
-   36,   37,   38,   -1,   40,   41,   42,   43,   -1,   45,
-   -1,   -1,   -1,   -1,   -1,   -1,  281,   -1,   -1,   -1,
-   -1,   -1,  287,  288,  289,  290,   -1,   -1,   64,   -1,
-   -1,   -1,   -1,   -1,  126,  300,  301,  302,  303,  304,
-  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,
-   -1,   -1,   -1,   33,   -1,   91,   36,   37,   38,   -1,
-   40,   -1,   42,   43,   -1,   45,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,
-  287,  288,  289,  290,   64,   -1,   -1,   -1,   -1,   -1,
-  126,   -1,   -1,  300,  301,  302,  303,  304,  305,  306,
-   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,   -1,
-   -1,   91,   33,   93,   -1,   36,   37,   38,   -1,   40,
-   41,   42,   43,   -1,   45,   -1,   -1,   -1,  272,  273,
-  274,  275,   -1,   -1,   -1,   -1,   -1,  281,   -1,   -1,
-   -1,   -1,   -1,   64,  288,   -1,  126,   -1,   -1,   -1,
-   -1,   -1,   -1,  297,  298,   -1,  300,  301,  302,  303,
-  304,   41,   -1,   -1,   44,  257,  258,  259,  260,  261,
-   91,  263,  264,  265,   -1,   -1,   -1,  269,   58,   59,
-   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,  280,   -1,
-  282,  283,  284,  285,  286,   -1,   -1,   -1,   -1,  291,
-  292,  293,  294,  295,  296,  126,   -1,  299,   -1,   -1,
-   -1,   -1,   -1,   93,   -1,   -1,  308,   41,  310,  311,
-   44,  257,  258,  259,  260,  261,   -1,  263,  264,  265,
-   -1,   -1,   -1,  269,   58,   59,   -1,   -1,   -1,   63,
-   -1,   -1,   -1,   -1,  280,   -1,  282,  283,  284,  285,
-  286,   -1,   -1,   -1,   -1,  291,  292,  293,  294,  295,
-  296,   -1,   -1,  299,   -1,   -1,   -1,   -1,   -1,   93,
-   -1,   -1,  308,   -1,  310,  311,   -1,  257,  258,  259,
-  260,  261,   -1,  263,  264,  265,   -1,   33,   -1,  269,
-   36,   37,   38,   -1,   40,   41,   42,   43,   -1,   45,
+  295,  296,   -1,   -1,  299,   -1,   -1,   -1,   -1,   -1,
+   93,   -1,   -1,  308,   -1,  310,  311,   -1,  257,  258,
+  259,  260,  261,   -1,  263,  264,  265,   -1,   33,   -1,
+  269,   36,   37,   38,   -1,   40,   41,   42,   43,   -1,
+   45,  280,   -1,  282,  283,  284,  285,  286,   -1,   -1,
+   -1,   -1,  291,  292,  293,  294,  295,  296,   -1,   64,
+  299,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  308,
+   -1,  310,  311,   -1,   -1,   -1,   -1,  257,  258,  259,
+  260,  261,   -1,  263,  264,  265,   91,   33,   -1,  269,
+   36,   37,   38,   -1,   40,   -1,   42,   43,   -1,   45,
   280,   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,
    -1,  291,  292,  293,  294,  295,  296,   -1,   64,  299,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  308,   -1,
-  310,  311,   -1,   -1,   -1,   -1,  257,  258,  259,  260,
-  261,   -1,  263,  264,  265,   91,   33,   -1,  269,   36,
-   37,   38,   -1,   40,   -1,   42,   43,   -1,   45,  280,
-   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,   -1,
-  291,  292,  293,  294,  295,  296,   -1,   64,  299,   -1,
-  126,   -1,   -1,   -1,   -1,   -1,   -1,  308,   -1,  310,
-  311,   -1,  272,  273,  274,  275,   -1,   -1,   -1,   -1,
-   -1,  281,   33,   -1,   91,   36,   37,   38,   -1,   40,
-   41,   42,   43,   -1,   45,   -1,   -1,  297,  298,   -1,
-  300,  301,  302,  303,  304,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   64,   -1,   -1,   -1,   -1,   -1,  126,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,  273,
-  274,  275,   -1,   -1,   -1,   -1,   -1,  281,   33,   -1,
-   91,   36,   37,   38,   -1,   40,   41,   42,   43,   -1,
-   45,   -1,   -1,  297,  298,   -1,  300,  301,  302,  303,
-  304,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   64,
-   -1,   -1,   -1,   -1,   -1,  126,   -1,   -1,   -1,   -1,
+   -1,  126,   -1,   -1,   -1,   -1,   -1,   -1,  308,   -1,
+  310,  311,   -1,  272,  273,  274,  275,   -1,   -1,   -1,
+   -1,   -1,  281,   33,   -1,   91,   36,   37,   38,  288,
+   40,   41,   42,   43,   -1,   45,   -1,   -1,  297,  298,
+   -1,  300,  301,  302,  303,  304,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   64,   -1,   -1,   -1,   -1,   -1,
+  126,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,
+  273,  274,  275,   -1,   -1,   -1,   -1,   -1,  281,   33,
+   -1,   91,   36,   37,   38,   -1,   40,   41,   42,   43,
+   -1,   45,   -1,   -1,  297,  298,   -1,  300,  301,  302,
+  303,  304,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   64,   -1,   -1,   -1,   -1,   -1,  126,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,  257,  258,  259,  260,  261,   91,  263,  264,  265,
-   -1,   33,   -1,  269,   36,   37,   38,   -1,   40,   -1,
-   42,   43,   -1,   45,  280,   -1,  282,  283,  284,  285,
-  286,   -1,   -1,   -1,   -1,  291,  292,  293,  294,  295,
-  296,  126,   64,  299,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  308,   -1,  310,  311,   -1,   -1,   -1,  256,
-  257,  258,  259,  260,  261,   -1,  263,  264,  265,   91,
-   -1,   -1,  269,   41,   -1,   -1,   44,   -1,   -1,   -1,
-   -1,   -1,   -1,  280,   -1,  282,  283,  284,  285,  286,
-   58,   59,   -1,   -1,  291,  292,  293,  294,  295,  296,
-   -1,   -1,  299,   -1,  126,   -1,   -1,   -1,   -1,   41,
-   -1,  308,   44,  310,  311,   -1,  257,  258,  259,  260,
-  261,   -1,  263,  264,  265,   93,   58,   59,  269,   -1,
-   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  280,
-   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,   -1,
-  291,  292,  293,  294,  295,  296,   -1,   -1,  299,   91,
-   -1,   93,   -1,   -1,   -1,   -1,   -1,  308,   41,  310,
-  311,   44,  257,  258,  259,  260,  261,   -1,  263,  264,
-  265,   -1,   -1,   -1,  269,   58,   59,   -1,   -1,   -1,
-   63,  123,   -1,   -1,   -1,  280,   -1,  282,  283,  284,
+   -1,   -1,  257,  258,  259,  260,  261,   91,  263,  264,
+  265,   -1,   33,   -1,  269,   36,   37,   38,   -1,   40,
+   -1,   42,   43,   -1,   45,  280,   -1,  282,  283,  284,
   285,  286,   -1,   -1,   -1,   -1,  291,  292,  293,  294,
-  295,  296,   -1,   -1,  299,   -1,   -1,   -1,   91,   -1,
-   93,   -1,   -1,  308,   -1,  310,  311,   -1,   -1,   -1,
-   -1,   41,   -1,   -1,   44,  257,  258,  259,  260,  261,
-   -1,  263,  264,  265,   -1,   -1,   -1,  269,   58,   59,
-  123,   -1,   -1,   63,   -1,   -1,   -1,   -1,  280,   -1,
-  282,  283,  284,  285,  286,   -1,   -1,   -1,   -1,  291,
-  292,  293,  294,  295,  296,   -1,   -1,  299,   -1,   41,
-   -1,   91,   44,   93,   -1,   -1,  308,   -1,  310,  311,
-   -1,   -1,   -1,   -1,   -1,   -1,   58,   59,   -1,   -1,
-   -1,   63,   -1,   -1,  272,  273,  274,  275,   -1,   -1,
-   -1,   -1,   -1,  123,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  297,
-  298,   93,  300,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,  281,
-   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,   -1,
-   -1,  123,   58,   59,   -1,  297,  298,   63,  300,  301,
-  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,
-  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   91,   -1,   93,   -1,  272,
-  273,  274,  275,   -1,   41,   -1,   -1,   44,  281,   -1,
-   -1,   -1,   -1,   -1,  287,  288,  289,  290,   -1,   -1,
-   -1,   58,   59,   -1,  297,  298,   63,  300,  301,  302,
-  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,  312,
-  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,   -1,
-   -1,   -1,  272,  273,  274,  275,   -1,   -1,   -1,   -1,
-   -1,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,
-  290,   -1,   -1,   -1,   -1,   -1,  123,  297,  298,   -1,
-  300,  301,  302,  303,  304,  305,  306,   -1,   -1,  309,
+  295,  296,  126,   64,  299,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  308,   -1,  310,  311,   -1,   -1,   -1,
+  256,  257,  258,  259,  260,  261,   -1,  263,  264,  265,
+   91,   -1,   -1,  269,   41,   -1,   -1,   44,   -1,   -1,
+   -1,   -1,   -1,   -1,  280,   -1,  282,  283,  284,  285,
+  286,   58,   59,   -1,   -1,  291,  292,  293,  294,  295,
+  296,   91,   -1,  299,   -1,  126,   -1,   -1,   -1,   -1,
+   41,   -1,  308,   44,  310,  311,   -1,  257,  258,  259,
+  260,  261,   -1,  263,  264,  265,   93,   58,   59,  269,
+   -1,   -1,   63,  123,   -1,   -1,   -1,   -1,   -1,   -1,
+  280,   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,
+   -1,  291,  292,  293,  294,  295,  296,   -1,   -1,  299,
+   91,   -1,   93,   -1,   -1,   -1,   -1,   -1,  308,   41,
+  310,  311,   44,  257,  258,  259,  260,  261,   -1,  263,
+  264,  265,   -1,   -1,   -1,  269,   58,   59,   -1,   -1,
+   -1,   63,  123,   -1,   -1,   -1,  280,   -1,  282,  283,
+  284,  285,  286,   -1,   -1,   -1,   -1,  291,  292,  293,
+  294,  295,  296,   -1,   -1,  299,   -1,   -1,   -1,   91,
+   -1,   93,   -1,   -1,  308,   -1,  310,  311,   -1,   -1,
+   -1,   -1,   41,   -1,   -1,   44,  257,  258,  259,  260,
+  261,   -1,  263,  264,  265,   -1,   -1,   -1,  269,   58,
+   59,  123,   -1,   -1,   63,   -1,   -1,   -1,   -1,  280,
+   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,   -1,
+  291,  292,  293,  294,  295,  296,   -1,   -1,  299,   -1,
+   41,   -1,   91,   44,   93,   -1,   -1,  308,   -1,  310,
+  311,   -1,   -1,   -1,   -1,   -1,   -1,   58,   59,  289,
+  290,   -1,   63,   -1,   -1,  272,  273,  274,  275,   -1,
+   -1,   -1,   -1,   -1,  123,  305,  306,   -1,   -1,  309,
    -1,   -1,  312,  313,  314,   -1,   -1,   -1,   -1,   -1,
-  272,  273,  274,  275,   -1,   41,   -1,   -1,   -1,  281,
+  297,  298,   93,  300,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,
+  281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,
+   -1,   -1,  123,   58,   59,   -1,  297,  298,   63,  300,
+  301,  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,
+   -1,  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   91,   -1,   93,   -1,
+  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,  281,
    -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,   -1,
    -1,   -1,   58,   59,   -1,  297,  298,   63,  300,  301,
   302,  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,
   312,  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   91,   -1,   93,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,
+   -1,   -1,   -1,  272,  273,  274,  275,   -1,   -1,   -1,
+   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,
+  289,  290,   -1,   -1,   -1,   -1,   -1,  123,  297,  298,
+   -1,  300,  301,  302,  303,  304,  305,  306,   -1,   -1,
+  309,   -1,   -1,  312,  313,  314,   -1,   -1,   -1,   -1,
+   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,   -1,
+  281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,
+   -1,   -1,   -1,   58,   59,   -1,  297,  298,   63,  300,
+  301,  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,
+   -1,  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   91,   -1,   93,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,  273,  274,
+  275,   -1,   -1,   -1,   -1,   -1,  281,   -1,   -1,   -1,
+   -1,   -1,  287,  288,  289,  290,   -1,   -1,  123,   -1,
+   -1,   -1,  297,  298,   -1,  300,  301,  302,  303,  304,
+  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,  272,  273,  274,  275,
-   -1,   -1,   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,
-   -1,  287,  288,  289,  290,   -1,   -1,  123,   -1,   -1,
-   91,  297,  298,   -1,  300,  301,  302,  303,  304,  305,
+   -1,   41,   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,
+   -1,  287,  288,  289,  290,   -1,   -1,   -1,   58,   59,
+   -1,  297,  298,   63,  300,  301,  302,  303,  304,  305,
   306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  123,   -1,   -1,  272,  273,  274,  275,   -1,
-   41,   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,
-  287,  288,  289,  290,   -1,   -1,   -1,   58,   59,   -1,
+   25,   26,   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,
+   -1,   91,   37,   93,   41,   -1,   -1,   44,   43,   44,
+   45,   58,   59,   -1,   -1,   50,   63,   -1,   -1,   -1,
+   -1,   58,   59,   -1,   -1,   -1,   63,   62,   63,   64,
+   65,   -1,   -1,  123,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   93,  272,  273,  274,
+  275,   -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,
+   -1,  106,  287,  288,  289,  290,  123,   -1,   -1,   58,
+   59,   -1,  297,  298,   63,  300,  301,  302,  303,  304,
+  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,
+   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   93,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   58,   59,   -1,   -1,   -1,   63,   -1,   -1,
+  165,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  123,   -1,   -1,   -1,   -1,   41,
+   -1,   -1,   44,   -1,  189,   91,   -1,   93,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   58,   59,   -1,   -1,
+   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  272,  273,  274,  275,   -1,  123,   -1,   -1,
+   -1,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,
+  290,   93,   -1,   -1,   -1,   -1,   -1,  297,  298,   -1,
+  300,  301,  302,  303,  304,  305,  306,   -1,   -1,  309,
+   -1,   -1,  312,  313,  314,  272,  273,  274,  275,   -1,
+   41,  123,   -1,   44,  281,  272,  273,  274,  275,   -1,
+  287,  288,  289,  290,  281,   -1,   -1,   58,   59,   -1,
   297,  298,   63,  300,  301,  302,  303,  304,  305,  306,
-   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,   -1,
-   -1,   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,
-   91,   -1,   93,   41,   -1,   -1,   44,   -1,   -1,   -1,
-   58,   59,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,
-   58,   59,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,
-   -1,   -1,  123,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   93,  272,  273,  274,  275,
+  297,  298,  309,  300,  301,  312,  313,  314,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   93,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  272,  273,  274,  275,   -1,   41,   -1,
+   -1,   44,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,
+  289,  290,   -1,   -1,   -1,   58,   59,   -1,  297,  298,
+   63,  300,  301,  302,  303,  304,  305,  306,   -1,   -1,
+  309,   -1,   -1,  312,  313,  314,  272,  273,  274,  275,
    -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,   -1,
-   -1,  287,  288,  289,  290,  123,   -1,   -1,   58,   59,
+   93,  287,  288,  289,  290,   -1,   -1,   -1,   58,   59,
    -1,  297,  298,   63,  300,  301,  302,  303,  304,  305,
   306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,
-   -1,   -1,   -1,   -1,   41,   -1,  287,  288,  289,  290,
-   -1,   -1,   -1,   93,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   58,   59,  304,  305,  306,   63,   -1,  309,   -1,
-   -1,  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,  123,   -1,   -1,   -1,   -1,   41,   -1,
-   -1,   44,   -1,   -1,   91,   -1,   93,   -1,   -1,   -1,
+  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,  281,
+   -1,   -1,   -1,   93,   -1,  287,  288,  289,  290,   -1,
+   -1,   -1,   58,   59,   -1,  297,  298,   63,  300,  301,
+  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,
+  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   41,   -1,
+   -1,   44,   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   58,   59,   -1,   -1,   -1,
    63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,  272,  273,  274,  275,   -1,  123,   -1,   -1,   -1,
+   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,
   281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,
-   93,   -1,   -1,   -1,   -1,   -1,  297,  298,   -1,  300,
+   93,   -1,   -1,   58,   59,   -1,  297,  298,   63,  300,
   301,  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,
-   -1,  312,  313,  314,  272,  273,  274,  275,   -1,   41,
-  123,   -1,   44,  281,  272,  273,  274,  275,   -1,  287,
-  288,  289,  290,   -1,   -1,   -1,   58,   59,   -1,  297,
-  298,   63,  300,  301,  302,  303,  304,  305,  306,  297,
-  298,  309,  300,   -1,  312,  313,  314,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   93,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,
+   -1,  312,  313,  314,   41,   -1,   -1,   44,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   93,   -1,
+   -1,   58,   59,   -1,   -1,   -1,   63,   -1,   -1,  272,
+  273,  274,  275,   -1,   -1,   -1,   -1,   -1,  281,   -1,
+   -1,   -1,   -1,   -1,  287,  288,  289,  290,   -1,   -1,
+   -1,   -1,   -1,   -1,  297,  298,   93,  300,  301,  302,
+  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,  312,
+  313,  314,  272,  273,  274,  275,   -1,   41,   -1,   -1,
    44,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,
   290,   -1,   -1,   -1,   58,   59,   -1,  297,  298,   63,
   300,  301,  302,  303,  304,  305,  306,   -1,   -1,  309,
-   -1,   -1,  312,  313,  314,  272,  273,  274,  275,   -1,
-   41,   -1,   -1,   44,  281,   -1,   -1,   -1,   -1,   93,
-  287,  288,  289,  290,   -1,   -1,   -1,   58,   59,   -1,
-  297,  298,   63,  300,  301,  302,  303,  304,  305,  306,
-   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,  272,
+   -1,   -1,  312,  313,  314,   -1,  272,  273,  274,  275,
+   -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,   93,
+   -1,  287,  288,  289,  290,   -1,   -1,   -1,   58,   59,
+   -1,  297,  298,   63,  300,  301,  302,  303,  304,  305,
+  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,  272,
   273,  274,  275,   -1,   41,   -1,   -1,   44,  281,   -1,
-   -1,   -1,   93,   -1,  287,  288,  289,  290,   -1,   -1,
+   -1,   -1,   -1,   93,  287,  288,  289,  290,   -1,   -1,
    -1,   58,   59,   -1,  297,  298,   63,  300,  301,  302,
-  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,  312,
-  313,  314,   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,
-   44,   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   58,   59,   -1,   41,   -1,   63,
-   44,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-  272,  273,  274,  275,   58,   59,   -1,   -1,   -1,  281,
-   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,   93,
-   -1,   -1,   -1,   -1,   -1,  297,  298,   -1,  300,  301,
-  302,  303,  304,  305,  306,   41,   -1,  309,   44,   93,
-  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   58,   59,   -1,   -1,   -1,   63,   -1,   -1,
+  303,  304,  305,  306,   -1,   -1,   -1,  272,  273,  274,
+  275,   -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,
+   -1,   -1,  287,  288,  289,  290,   93,   -1,   -1,   58,
+   59,   -1,  297,  298,   63,  300,  301,  302,  303,  304,
+  305,  306,   -1,   -1,   -1,  272,  273,  274,  275,   -1,
+   41,   -1,   -1,   44,  281,   -1,   -1,   -1,   -1,   -1,
+  287,  288,  289,  290,   93,   -1,   -1,   58,   59,   -1,
+  297,  298,   63,  300,  301,  302,  303,  304,  305,  306,
+   -1,   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,   44,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   93,   58,   59,   -1,   -1,   -1,   63,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,  273,
   274,  275,   -1,   41,   -1,   -1,   44,  281,   -1,   -1,
-   -1,   -1,   -1,  287,  288,  289,  290,   93,   -1,   -1,
+   -1,   -1,   -1,  287,  288,  289,  290,   -1,   93,   -1,
    58,   59,   -1,  297,  298,   63,  300,  301,  302,  303,
-  304,  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,
-  314,  272,  273,  274,  275,   -1,   -1,   -1,   -1,   -1,
-  281,   -1,   -1,   -1,   -1,   93,  287,  288,  289,  290,
-   -1,   -1,   -1,   -1,   -1,   -1,  297,  298,   -1,  300,
-  301,  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,
-   -1,  312,  313,  314,   -1,  272,  273,  274,  275,   -1,
-   41,   -1,   -1,   44,  281,   -1,   -1,   -1,   -1,   -1,
+  304,  305,  306,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,
+   44,  281,   -1,   -1,   -1,   93,   -1,  287,  288,  289,
+  290,   -1,   -1,   -1,   58,   59,   -1,  297,  298,   63,
+  300,  301,  302,  303,  304,  305,  306,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  272,  273,  274,  275,   -1,
+   41,   -1,   -1,   44,  281,   -1,   -1,   -1,   -1,   93,
   287,  288,  289,  290,   -1,   -1,   -1,   58,   59,   -1,
   297,  298,   63,  300,  301,  302,  303,  304,  305,  306,
-   -1,   -1,  309,   -1,   -1,  312,  313,  314,  272,  273,
-  274,  275,   -1,   -1,   -1,   -1,   -1,  281,   -1,   -1,
-   -1,   -1,   93,  287,  288,  289,  290,   -1,  272,  273,
-  274,  275,   -1,  297,  298,   30,  300,  301,  302,  303,
-  304,  305,  306,   38,   -1,  309,   -1,   42,   -1,   -1,
-   45,   -1,   -1,  297,  298,   -1,   -1,   52,   53,   54,
-   55,   56,   -1,   -1,   59,   60,   -1,   -1,   91,   -1,
-   -1,   66,   -1,   -1,   -1,   -1,  272,  273,  274,  275,
-   -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,   -1,
-   -1,  287,  288,  289,  290,   -1,   -1,   92,   58,   59,
-  123,  297,  298,   63,  300,  301,  302,  303,  304,  305,
-  306,   -1,   -1,   -1,  272,  273,  274,  275,   -1,   -1,
-   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,  287,
-  288,  289,  290,   93,   41,   -1,   -1,   44,   -1,  297,
-  298,   -1,  300,  301,  302,  303,  304,  305,  306,   -1,
-   -1,   58,   59,   -1,   -1,   -1,   63,   -1,  153,  154,
-  155,  156,  157,  158,  159,  160,  161,  162,  163,  164,
-  165,  166,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,  178,   -1,   -1,   93,   -1,   -1,   58,
-   59,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,   -1,
-   -1,  272,  273,  274,  275,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  272,  273,  274,  275,   -1,   41,   -1,
+   -1,   44,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,
+  289,  290,   93,   -1,   -1,   58,   59,   -1,  297,  298,
+   63,  300,  301,  302,  303,  304,  305,  306,   -1,   -1,
+   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,
   281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,
-   41,   -1,   -1,   44,   93,   -1,  297,  298,   -1,  300,
-  301,  302,  303,  304,  305,  306,   -1,   58,   59,   -1,
-   -1,   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,   44,
-   -1,   -1,   -1,  258,  287,  288,  289,  290,   -1,   -1,
-   -1,   -1,   93,   58,   59,   -1,   -1,   -1,   63,  302,
-  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,  312,
-  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-  295,   41,   -1,   -1,   44,   -1,   -1,   -1,   93,   -1,
-   -1,   -1,  272,  273,  274,  275,   -1,   -1,   58,   59,
-   -1,  281,   -1,   63,   -1,   -1,   -1,  287,  288,  289,
-  290,   -1,   -1,   -1,   -1,   -1,   -1,  297,  298,   -1,
-  300,  301,  302,  303,  304,  305,  306,   -1,   -1,   -1,
-   -1,   -1,   -1,   93,   -1,   41,   -1,   -1,   44,   -1,
-   -1,   -1,   -1,   -1,   -1,  272,  273,  274,  275,   -1,
-   -1,   -1,   58,   59,  281,   -1,   -1,   63,   -1,   -1,
-  287,  288,  289,  290,   -1,   -1,   -1,   -1,   -1,   -1,
-  297,  298,   -1,  300,  301,  302,  303,  304,  305,  306,
-   -1,   -1,   -1,  272,  273,  274,  275,   93,   -1,   -1,
-   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,
-  289,  290,   41,   -1,   -1,   44,   -1,   -1,  297,  298,
-   -1,  300,  301,  302,  303,  304,  305,  306,   -1,   58,
-   59,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,   -1,
+   93,   -1,   -1,   58,   59,   -1,  297,  298,   63,  300,
+  301,  302,  303,  304,  305,   -1,   -1,  272,  273,  274,
+  275,   -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,
+   -1,   -1,  287,  288,   -1,  290,   -1,   -1,   93,   58,
+   59,   -1,  297,  298,   63,  300,  301,  302,  303,  304,
+  305,   -1,   -1,   -1,  272,  273,  274,  275,   -1,   41,
+   -1,   -1,   44,  281,   -1,   -1,   -1,   -1,   -1,  287,
+  288,   -1,   -1,   -1,   93,   -1,   58,   59,   -1,  297,
+  298,   63,  300,  301,  302,  303,  304,  305,   -1,   -1,
+   91,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,  273,
+  274,  275,   -1,   41,   -1,   -1,   44,  281,   -1,   -1,
+   -1,   93,   -1,  287,  288,   -1,   41,   -1,   -1,   44,
+   58,   59,  123,  297,  298,   63,  300,  301,  302,  303,
+  304,   -1,   -1,   58,   59,   41,   -1,   -1,   44,   -1,
    -1,  272,  273,  274,  275,   41,   -1,   -1,   44,   -1,
-  281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,
-   -1,   -1,   58,   59,   93,   41,  297,  298,   44,  300,
-  301,  302,  303,  304,  305,  306,   -1,  272,  273,  274,
-  275,   -1,   58,   59,   -1,   -1,  281,   63,   -1,   -1,
-   -1,   -1,  287,  288,  289,  290,   -1,   93,   -1,   -1,
+  281,   -1,   58,   59,   -1,   93,  287,  288,   -1,   -1,
+   -1,   -1,   58,   59,   -1,   -1,  297,  298,   93,  300,
+  301,  302,  303,  304,   -1,   41,   -1,   -1,   44,  272,
+  273,  274,  275,   -1,   -1,   -1,   -1,   93,  281,   -1,
+   -1,   -1,   58,   59,  287,  288,   58,   93,   -1,   -1,
+   -1,   63,   -1,   -1,  297,  298,   -1,  300,  301,  302,
+  303,  304,   -1,   -1,   -1,   -1,   -1,  272,  273,  274,
+  275,   -1,   -1,   -1,   -1,   -1,  281,   93,   -1,   91,
+   -1,   -1,  287,  288,   -1,   63,   -1,   -1,   -1,   -1,
    -1,   -1,  297,  298,   -1,  300,  301,  302,  303,  304,
-  305,   41,   -1,   -1,   44,   -1,   -1,   93,   -1,   -1,
-   -1,   -1,  272,  273,  274,  275,   -1,   -1,   58,   59,
-   -1,  281,   -1,   63,   -1,   -1,   -1,  287,  288,   -1,
-  290,   91,   -1,   -1,   -1,   -1,   -1,  297,  298,   -1,
-  300,  301,  302,  303,  304,  305,   -1,   41,   -1,   -1,
-   44,   -1,   -1,   93,   41,   -1,   -1,   44,   -1,   -1,
-   -1,   -1,   -1,  123,   58,   59,  272,  273,  274,  275,
-   -1,   58,   59,   -1,   -1,  281,   63,   -1,   -1,   -1,
-   -1,  287,  288,   -1,   -1,   -1,   41,   -1,   -1,   44,
-   -1,  297,  298,   -1,  300,  301,  302,  303,  304,   93,
-   -1,   -1,   -1,   58,   59,   -1,   93,   -1,   63,   -1,
-   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,  272,  273,  274,  275,   -1,   93,   91,
-   -1,   -1,  281,   -1,   -1,   63,   -1,   -1,  287,  288,
+   -1,   -1,   -1,  272,  273,  274,  275,   -1,   -1,   -1,
+   -1,  123,  281,   91,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  297,  298,
-   -1,  300,  301,  302,  303,  304,  272,  273,  274,  275,
-   -1,  123,   -1,   91,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,  272,  273,  274,  275,
-   -1,  297,  298,   -1,   -1,  281,   -1,   -1,   -1,   -1,
-   -1,  287,  288,   -1,   -1,  123,   -1,   -1,   -1,   -1,
-   -1,  297,  298,   -1,  300,  301,  302,  303,  304,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,
-  290,   -1,  272,  273,  274,  275,   -1,   -1,   -1,   -1,
-   -1,  281,   -1,  303,  304,  305,  306,  287,  288,  309,
-   -1,   -1,  312,  313,  314,   -1,   -1,  297,  298,   -1,
-  300,  301,  302,  303,  304,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,  273,
-  274,  275,   -1,   -1,   -1,  272,  273,  274,  275,   -1,
-   -1,   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,  297,  298,   -1,   -1,   -1,   -1,   -1,
-  297,  298,   -1,  300,  301,  302,  303,  272,  273,  274,
-  275,   -1,   -1,   -1,   -1,   -1,  281,   -1,   -1,  281,
+   -1,  300,  301,  302,  303,  304,  287,  288,  289,  290,
+  272,  273,  274,  275,   -1,  123,   -1,   -1,   -1,  281,
+   -1,  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,
+   -1,  312,  313,  314,   91,  297,  298,   -1,  300,  301,
+  302,  303,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  272,  273,  274,  275,   -1,   -1,
+   -1,   -1,   -1,  281,   -1,   -1,  123,  272,  273,  274,
+  275,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  297,
+  298,   -1,  300,  301,  302,   -1,  272,  273,  274,  275,
+   -1,   -1,  297,  298,   30,   -1,  272,  273,  274,  275,
+   -1,   -1,   38,   -1,   -1,   -1,   42,   -1,   -1,   45,
+   -1,  297,  298,   -1,   -1,   -1,   52,   53,   54,   55,
+   56,  297,  298,   59,   60,   -1,  272,  273,  274,  275,
+   66,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  281,
    -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,   -1,
-   -1,   -1,  297,  298,   -1,  300,  301,  302,  300,  301,
+   -1,  297,  298,   -1,   -1,   -1,   92,   -1,  300,  301,
   302,  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,
   312,  313,  314,  281,   -1,   -1,   -1,   -1,   -1,  287,
-  288,  289,  290,   -1,   -1,   -1,   -1,   13,   -1,   -1,
-   -1,   17,   -1,  301,  302,  303,  304,  305,  306,   -1,
-   -1,  309,   -1,   -1,  312,  313,  314,   33,   34,   35,
-   36,   -1,   -1,   -1,   -1,   -1,   42,   -1,   -1,   45,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  288,  289,  290,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  300,  301,  302,  303,  304,  305,  306,   -1,
+   -1,  309,   -1,   -1,  312,  313,  314,   -1,   -1,   -1,
+   -1,   -1,   -1,  149,  150,  151,  152,  153,  154,  155,
+  156,  157,  158,  159,  160,  161,  162,   -1,   -1,   -1,
+  287,  288,  289,  290,   -1,   -1,   -1,   -1,  174,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  303,  304,  305,  306,
+   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   80,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   94,   -1,
-   -1,   97,   -1,   99,   -1,  101,   -1,  103,   -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,  144,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  250,   -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,  181,   -1,   -1,   -1,   -1,
-   -1,   -1,  188,
+   -1,   -1,   -1,   -1,   -1,  281,
 };
 #define YYFINAL 1
 #ifndef YYDEBUG
@@ -1106,14 +1069,10 @@ dEXT char * yyrule[] = {
 "else : ELSIF '(' mexpr ')' mblock else",
 "cond : IF '(' remember mexpr ')' mblock else",
 "cond : UNLESS '(' remember miexpr ')' mblock else",
-"cond : IF block block else",
-"cond : UNLESS block block else",
 "cont :",
 "cont : CONTINUE block",
 "loop : label WHILE '(' remember mtexpr ')' mblock cont",
 "loop : label UNTIL '(' remember miexpr ')' mblock cont",
-"loop : label WHILE block block cont",
-"loop : label UNTIL block block cont",
 "loop : label FOR MY remember my_scalar '(' mexpr ')' mblock cont",
 "loop : label FOR scalar '(' remember mexpr ')' mblock cont",
 "loop : label FOR '(' remember mexpr ')' mblock cont",
@@ -1274,9 +1233,9 @@ dEXT int yyerrflag;
 dEXT int yychar;
 dEXT YYSTYPE yyval;
 dEXT YYSTYPE yylval;
-#line 624 "perly.y"
+#line 602 "perly.y"
  /* PROGRAM */
-#line 1349 "perly.c"
+#line 1308 "perly.c"
 #define YYABORT goto yyabort
 #define YYACCEPT goto yyaccept
 #define YYERROR goto yyerrlab
@@ -1620,77 +1579,47 @@ case 24:
                                   newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); }
 break;
 case 25:
-#line 177 "perly.y"
-{ copline = yyvsp[-3].ival;
-                           deprecate("if BLOCK BLOCK");
-                           yyval.opval = newCONDOP(0, scope(yyvsp[-2].opval), scope(yyvsp[-1].opval), yyvsp[0].opval); }
+#line 179 "perly.y"
+{ yyval.opval = Nullop; }
 break;
 case 26:
 #line 181 "perly.y"
-{ copline = yyvsp[-3].ival;
-                           deprecate("unless BLOCK BLOCK");
-                           yyval.opval = newCONDOP(0, invert(scalar(scope(yyvsp[-2].opval))),
-                                               scope(yyvsp[-1].opval), yyvsp[0].opval); }
-break;
-case 27:
-#line 188 "perly.y"
-{ yyval.opval = Nullop; }
-break;
-case 28:
-#line 190 "perly.y"
 { yyval.opval = scope(yyvsp[0].opval); }
 break;
-case 29:
-#line 194 "perly.y"
+case 27:
+#line 185 "perly.y"
 { copline = yyvsp[-6].ival;
                            yyval.opval = block_end(yyvsp[-4].ival,
                                   newSTATEOP(0, yyvsp[-7].pval,
                                     newWHILEOP(0, 1, (LOOP*)Nullop,
                                                yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); }
 break;
-case 30:
-#line 200 "perly.y"
+case 28:
+#line 191 "perly.y"
 { copline = yyvsp[-6].ival;
                            yyval.opval = block_end(yyvsp[-4].ival,
                                   newSTATEOP(0, yyvsp[-7].pval,
                                     newWHILEOP(0, 1, (LOOP*)Nullop,
                                                yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); }
 break;
-case 31:
-#line 206 "perly.y"
-{ copline = yyvsp[-3].ival;
-                           deprecate("while BLOCK BLOCK");
-                           yyval.opval = newSTATEOP(0, yyvsp[-4].pval,
-                                  newWHILEOP(0, 1, (LOOP*)Nullop,
-                                             scope(yyvsp[-2].opval), yyvsp[-1].opval, yyvsp[0].opval)); }
-break;
-case 32:
-#line 212 "perly.y"
-{ copline = yyvsp[-3].ival;
-                           deprecate("until BLOCK BLOCK");
-                           yyval.opval = newSTATEOP(0, yyvsp[-4].pval,
-                                  newWHILEOP(0, 1, (LOOP*)Nullop,
-                                             invert(scalar(scope(yyvsp[-2].opval))),
-                                             yyvsp[-1].opval, yyvsp[0].opval)); }
-break;
-case 33:
-#line 219 "perly.y"
+case 29:
+#line 197 "perly.y"
 { yyval.opval = block_end(yyvsp[-6].ival,
                                 newFOROP(0, yyvsp[-9].pval, yyvsp[-8].ival, yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
-case 34:
-#line 222 "perly.y"
+case 30:
+#line 200 "perly.y"
 { yyval.opval = block_end(yyvsp[-4].ival,
                                 newFOROP(0, yyvsp[-8].pval, yyvsp[-7].ival, mod(yyvsp[-6].opval, OP_ENTERLOOP),
                                          yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
-case 35:
-#line 226 "perly.y"
+case 31:
+#line 204 "perly.y"
 { yyval.opval = block_end(yyvsp[-4].ival,
                                 newFOROP(0, yyvsp[-7].pval, yyvsp[-6].ival, Nullop, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
-case 36:
-#line 230 "perly.y"
+case 32:
+#line 208 "perly.y"
 { copline = yyvsp[-9].ival;
                            yyval.opval = block_end(yyvsp[-7].ival,
                                   append_elem(OP_LINESEQ, scalar(yyvsp[-6].opval),
@@ -1699,365 +1628,365 @@ case 36:
                                                  scalar(yyvsp[-4].opval),
                                                  yyvsp[0].opval, scalar(yyvsp[-2].opval))))); }
 break;
-case 37:
-#line 238 "perly.y"
+case 33:
+#line 216 "perly.y"
 { yyval.opval = newSTATEOP(0,
                                yyvsp[-2].pval, newWHILEOP(0, 1, (LOOP*)Nullop,
                                        Nullop, yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
-case 38:
-#line 244 "perly.y"
+case 34:
+#line 222 "perly.y"
 { yyval.opval = Nullop; }
 break;
-case 40:
-#line 249 "perly.y"
+case 36:
+#line 227 "perly.y"
 { (void)scan_num("1"); yyval.opval = yylval.opval; }
 break;
-case 42:
-#line 254 "perly.y"
+case 38:
+#line 232 "perly.y"
 { yyval.opval = invert(scalar(yyvsp[0].opval)); }
 break;
-case 43:
-#line 258 "perly.y"
+case 39:
+#line 236 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
-case 44:
-#line 262 "perly.y"
+case 40:
+#line 240 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
-case 45:
-#line 266 "perly.y"
+case 41:
+#line 244 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
-case 46:
-#line 270 "perly.y"
+case 42:
+#line 248 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
-case 47:
-#line 274 "perly.y"
+case 43:
+#line 252 "perly.y"
 { yyval.pval = Nullch; }
 break;
-case 49:
-#line 279 "perly.y"
+case 45:
+#line 257 "perly.y"
 { yyval.ival = 0; }
 break;
-case 50:
-#line 281 "perly.y"
+case 46:
+#line 259 "perly.y"
 { yyval.ival = 0; }
 break;
-case 51:
-#line 283 "perly.y"
+case 47:
+#line 261 "perly.y"
 { yyval.ival = 0; }
 break;
-case 52:
-#line 285 "perly.y"
+case 48:
+#line 263 "perly.y"
 { yyval.ival = 0; }
 break;
-case 53:
-#line 289 "perly.y"
+case 49:
+#line 267 "perly.y"
 { newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
-case 54:
-#line 291 "perly.y"
+case 50:
+#line 269 "perly.y"
 { newFORM(yyvsp[-1].ival, Nullop, yyvsp[0].opval); }
 break;
-case 55:
-#line 295 "perly.y"
+case 51:
+#line 273 "perly.y"
 { newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
-case 56:
-#line 297 "perly.y"
+case 52:
+#line 275 "perly.y"
 { newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, Nullop); expect = XSTATE; }
 break;
-case 57:
-#line 301 "perly.y"
+case 53:
+#line 279 "perly.y"
 { yyval.opval = Nullop; }
 break;
-case 59:
-#line 306 "perly.y"
+case 55:
+#line 284 "perly.y"
 { yyval.ival = start_subparse(); }
 break;
-case 60:
-#line 310 "perly.y"
+case 56:
+#line 288 "perly.y"
 { package(yyvsp[-1].opval); }
 break;
-case 61:
-#line 312 "perly.y"
+case 57:
+#line 290 "perly.y"
 { package(Nullop); }
 break;
-case 62:
-#line 316 "perly.y"
+case 58:
+#line 294 "perly.y"
 { utilize(yyvsp[-5].ival, yyvsp[-4].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval); }
 break;
-case 63:
-#line 320 "perly.y"
+case 59:
+#line 298 "perly.y"
 { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 64:
-#line 322 "perly.y"
+case 60:
+#line 300 "perly.y"
 { yyval.opval = newLOGOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 66:
-#line 327 "perly.y"
+case 62:
+#line 305 "perly.y"
 { yyval.opval = yyvsp[-1].opval; }
 break;
-case 67:
-#line 329 "perly.y"
+case 63:
+#line 307 "perly.y"
 { yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 69:
-#line 334 "perly.y"
+case 65:
+#line 312 "perly.y"
 { yyval.opval = convert(yyvsp[-2].ival, OPf_STACKED,
                                prepend_elem(OP_LIST, newGVREF(yyvsp[-2].ival,yyvsp[-1].opval), yyvsp[0].opval) ); }
 break;
-case 70:
-#line 337 "perly.y"
+case 66:
+#line 315 "perly.y"
 { yyval.opval = convert(yyvsp[-4].ival, OPf_STACKED,
                                prepend_elem(OP_LIST, newGVREF(yyvsp[-4].ival,yyvsp[-2].opval), yyvsp[-1].opval) ); }
 break;
-case 71:
-#line 340 "perly.y"
+case 67:
+#line 318 "perly.y"
 { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, scalar(yyvsp[-5].opval), yyvsp[-1].opval),
                                    newUNOP(OP_METHOD, 0, yyvsp[-3].opval))); }
 break;
-case 72:
-#line 345 "perly.y"
+case 68:
+#line 323 "perly.y"
 { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, yyvsp[-1].opval, yyvsp[0].opval),
                                    newUNOP(OP_METHOD, 0, yyvsp[-2].opval))); }
 break;
-case 73:
-#line 350 "perly.y"
+case 69:
+#line 328 "perly.y"
 { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, yyvsp[-3].opval, yyvsp[-1].opval),
                                    newUNOP(OP_METHOD, 0, yyvsp[-4].opval))); }
 break;
-case 74:
-#line 355 "perly.y"
+case 70:
+#line 333 "perly.y"
 { yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
-case 75:
-#line 357 "perly.y"
+case 71:
+#line 335 "perly.y"
 { yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
 break;
-case 76:
-#line 359 "perly.y"
+case 72:
+#line 337 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST,
                              prepend_elem(OP_LIST, newANONSUB(yyvsp[-2].ival, 0, yyvsp[-1].opval), yyvsp[0].opval),
                              yyvsp[-3].opval)); }
 break;
-case 79:
-#line 370 "perly.y"
+case 75:
+#line 348 "perly.y"
 { yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); }
 break;
-case 80:
-#line 372 "perly.y"
+case 76:
+#line 350 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 81:
-#line 374 "perly.y"
+case 77:
+#line 352 "perly.y"
 {   if (yyvsp[-1].ival != OP_REPEAT)
                                scalar(yyvsp[-2].opval);
                            yyval.opval = newBINOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, scalar(yyvsp[0].opval)); }
 break;
-case 82:
-#line 378 "perly.y"
+case 78:
+#line 356 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 83:
-#line 380 "perly.y"
+case 79:
+#line 358 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 84:
-#line 382 "perly.y"
+case 80:
+#line 360 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 85:
-#line 384 "perly.y"
+case 81:
+#line 362 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 86:
-#line 386 "perly.y"
+case 82:
+#line 364 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 87:
-#line 388 "perly.y"
+case 83:
+#line 366 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 88:
-#line 390 "perly.y"
+case 84:
+#line 368 "perly.y"
 { yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));}
 break;
-case 89:
-#line 392 "perly.y"
+case 85:
+#line 370 "perly.y"
 { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 90:
-#line 394 "perly.y"
+case 86:
+#line 372 "perly.y"
 { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 91:
-#line 396 "perly.y"
+case 87:
+#line 374 "perly.y"
 { yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 92:
-#line 398 "perly.y"
+case 88:
+#line 376 "perly.y"
 { yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 93:
-#line 401 "perly.y"
+case 89:
+#line 379 "perly.y"
 { yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); }
 break;
-case 94:
-#line 403 "perly.y"
+case 90:
+#line 381 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 95:
-#line 405 "perly.y"
+case 91:
+#line 383 "perly.y"
 { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
 break;
-case 96:
-#line 407 "perly.y"
+case 92:
+#line 385 "perly.y"
 { yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));}
 break;
-case 97:
-#line 409 "perly.y"
+case 93:
+#line 387 "perly.y"
 { yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); }
 break;
-case 98:
-#line 411 "perly.y"
+case 94:
+#line 389 "perly.y"
 { yyval.opval = newUNOP(OP_POSTINC, 0,
                                        mod(scalar(yyvsp[-1].opval), OP_POSTINC)); }
 break;
-case 99:
-#line 414 "perly.y"
+case 95:
+#line 392 "perly.y"
 { yyval.opval = newUNOP(OP_POSTDEC, 0,
                                        mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); }
 break;
-case 100:
-#line 417 "perly.y"
+case 96:
+#line 395 "perly.y"
 { yyval.opval = newUNOP(OP_PREINC, 0,
                                        mod(scalar(yyvsp[0].opval), OP_PREINC)); }
 break;
-case 101:
-#line 420 "perly.y"
+case 97:
+#line 398 "perly.y"
 { yyval.opval = newUNOP(OP_PREDEC, 0,
                                        mod(scalar(yyvsp[0].opval), OP_PREDEC)); }
 break;
-case 102:
-#line 423 "perly.y"
+case 98:
+#line 401 "perly.y"
 { yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); }
 break;
-case 103:
-#line 425 "perly.y"
+case 99:
+#line 403 "perly.y"
 { yyval.opval = sawparens(yyvsp[-1].opval); }
 break;
-case 104:
-#line 427 "perly.y"
+case 100:
+#line 405 "perly.y"
 { yyval.opval = sawparens(newNULLLIST()); }
 break;
-case 105:
-#line 429 "perly.y"
+case 101:
+#line 407 "perly.y"
 { yyval.opval = newANONLIST(yyvsp[-1].opval); }
 break;
-case 106:
-#line 431 "perly.y"
+case 102:
+#line 409 "perly.y"
 { yyval.opval = newANONLIST(Nullop); }
 break;
-case 107:
-#line 433 "perly.y"
+case 103:
+#line 411 "perly.y"
 { yyval.opval = newANONHASH(yyvsp[-2].opval); }
 break;
-case 108:
-#line 435 "perly.y"
+case 104:
+#line 413 "perly.y"
 { yyval.opval = newANONHASH(Nullop); }
 break;
-case 109:
-#line 437 "perly.y"
+case 105:
+#line 415 "perly.y"
 { yyval.opval = newANONSUB(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
-case 110:
-#line 439 "perly.y"
+case 106:
+#line 417 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 111:
-#line 441 "perly.y"
+case 107:
+#line 419 "perly.y"
 { yyval.opval = newBINOP(OP_GELEM, 0, newGVREF(0,yyvsp[-4].opval), yyvsp[-2].opval); }
 break;
-case 112:
-#line 443 "perly.y"
+case 108:
+#line 421 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 113:
-#line 445 "perly.y"
+case 109:
+#line 423 "perly.y"
 { yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); }
 break;
-case 114:
-#line 447 "perly.y"
+case 110:
+#line 425 "perly.y"
 { yyval.opval = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF(yyvsp[-4].opval),OP_RV2AV),
                                        scalar(yyvsp[-1].opval));}
 break;
-case 115:
-#line 451 "perly.y"
+case 111:
+#line 429 "perly.y"
 { assertref(yyvsp[-3].opval); yyval.opval = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF(yyvsp[-3].opval),OP_RV2AV),
                                        scalar(yyvsp[-1].opval));}
 break;
-case 116:
-#line 455 "perly.y"
+case 112:
+#line 433 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 117:
-#line 457 "perly.y"
+case 113:
+#line 435 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 118:
-#line 459 "perly.y"
+case 114:
+#line 437 "perly.y"
 { yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));}
 break;
-case 119:
-#line 461 "perly.y"
+case 115:
+#line 439 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval));
                            expect = XOPERATOR; }
 break;
-case 120:
-#line 464 "perly.y"
+case 116:
+#line 442 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF(yyvsp[-5].opval),OP_RV2HV),
                                        jmaybe(yyvsp[-2].opval));
                            expect = XOPERATOR; }
 break;
-case 121:
-#line 469 "perly.y"
+case 117:
+#line 447 "perly.y"
 { assertref(yyvsp[-4].opval); yyval.opval = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF(yyvsp[-4].opval),OP_RV2HV),
                                        jmaybe(yyvsp[-2].opval));
                            expect = XOPERATOR; }
 break;
-case 122:
-#line 474 "perly.y"
+case 118:
+#line 452 "perly.y"
 { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); }
 break;
-case 123:
-#line 476 "perly.y"
+case 119:
+#line 454 "perly.y"
 { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); }
 break;
-case 124:
-#line 478 "perly.y"
+case 120:
+#line 456 "perly.y"
 { yyval.opval = prepend_elem(OP_ASLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_ASLICE, 0,
                                        list(yyvsp[-1].opval),
                                        ref(yyvsp[-3].opval, OP_ASLICE))); }
 break;
-case 125:
-#line 484 "perly.y"
+case 121:
+#line 462 "perly.y"
 { yyval.opval = prepend_elem(OP_HSLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_HSLICE, 0,
@@ -2065,38 +1994,38 @@ case 125:
                                        ref(oopsHV(yyvsp[-4].opval), OP_HSLICE)));
                            expect = XOPERATOR; }
 break;
-case 126:
-#line 491 "perly.y"
+case 122:
+#line 469 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 127:
-#line 493 "perly.y"
+case 123:
+#line 471 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); }
 break;
-case 128:
-#line 495 "perly.y"
+case 124:
+#line 473 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); }
 break;
-case 129:
-#line 497 "perly.y"
+case 125:
+#line 475 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); }
 break;
-case 130:
-#line 500 "perly.y"
+case 126:
+#line 478 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); }
 break;
-case 131:
-#line 503 "perly.y"
+case 127:
+#line 481 "perly.y"
 { yyval.opval = newUNOP(OP_DOFILE, 0, scalar(yyvsp[0].opval)); }
 break;
-case 132:
-#line 505 "perly.y"
+case 128:
+#line 483 "perly.y"
 { yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); }
 break;
-case 133:
-#line 507 "perly.y"
+case 129:
+#line 485 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
@@ -2105,8 +2034,8 @@ case 133:
                                    scalar(yyvsp[-2].opval)
                                )),Nullop)); dep();}
 break;
-case 134:
-#line 515 "perly.y"
+case 130:
+#line 493 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            append_elem(OP_LIST,
@@ -2116,151 +2045,151 @@ case 134:
                                    scalar(yyvsp[-3].opval)
                                )))); dep();}
 break;
-case 135:
-#line 524 "perly.y"
+case 131:
+#line 502 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
                                scalar(newCVREF(0,scalar(yyvsp[-2].opval))), Nullop)); dep();}
 break;
-case 136:
-#line 528 "perly.y"
+case 132:
+#line 506 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
                                yyvsp[-1].opval,
                                scalar(newCVREF(0,scalar(yyvsp[-3].opval))))); dep();}
 break;
-case 137:
-#line 533 "perly.y"
+case 133:
+#line 511 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL);
                            hints |= HINT_BLOCK_SCOPE; }
 break;
-case 138:
-#line 536 "perly.y"
+case 134:
+#line 514 "perly.y"
 { yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); }
 break;
-case 139:
-#line 538 "perly.y"
+case 135:
+#line 516 "perly.y"
 { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
 break;
-case 140:
-#line 540 "perly.y"
+case 136:
+#line 518 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, 0); }
 break;
-case 141:
-#line 542 "perly.y"
+case 137:
+#line 520 "perly.y"
 { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
-case 142:
-#line 544 "perly.y"
+case 138:
+#line 522 "perly.y"
 { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
-case 143:
-#line 546 "perly.y"
+case 139:
+#line 524 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); }
 break;
-case 144:
-#line 549 "perly.y"
+case 140:
+#line 527 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, 0); }
 break;
-case 145:
-#line 551 "perly.y"
+case 141:
+#line 529 "perly.y"
 { yyval.opval = newOP(yyvsp[-2].ival, 0); }
 break;
-case 146:
-#line 553 "perly.y"
+case 142:
+#line 531 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, 0,
                                scalar(yyvsp[0].opval)); }
 break;
-case 147:
-#line 556 "perly.y"
+case 143:
+#line 534 "perly.y"
 { yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); }
 break;
-case 148:
-#line 558 "perly.y"
+case 144:
+#line 536 "perly.y"
 { yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
 break;
-case 149:
-#line 560 "perly.y"
+case 145:
+#line 538 "perly.y"
 { yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); }
 break;
-case 150:
-#line 562 "perly.y"
+case 146:
+#line 540 "perly.y"
 { yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); }
 break;
-case 153:
-#line 568 "perly.y"
+case 149:
+#line 546 "perly.y"
 { yyval.opval = Nullop; }
 break;
-case 154:
-#line 570 "perly.y"
+case 150:
+#line 548 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 155:
-#line 574 "perly.y"
+case 151:
+#line 552 "perly.y"
 { yyval.opval = Nullop; }
 break;
-case 156:
-#line 576 "perly.y"
+case 152:
+#line 554 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 157:
-#line 578 "perly.y"
+case 153:
+#line 556 "perly.y"
 { yyval.opval = yyvsp[-1].opval; }
 break;
-case 158:
-#line 581 "perly.y"
+case 154:
+#line 559 "perly.y"
 { yyval.ival = 0; }
 break;
-case 159:
-#line 582 "perly.y"
+case 155:
+#line 560 "perly.y"
 { yyval.ival = 1; }
 break;
-case 160:
-#line 586 "perly.y"
+case 156:
+#line 564 "perly.y"
 { in_my = 0; yyval.opval = my(yyvsp[0].opval); }
 break;
-case 161:
-#line 590 "perly.y"
+case 157:
+#line 568 "perly.y"
 { yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); }
 break;
-case 162:
-#line 594 "perly.y"
+case 158:
+#line 572 "perly.y"
 { yyval.opval = newSVREF(yyvsp[0].opval); }
 break;
-case 163:
-#line 598 "perly.y"
+case 159:
+#line 576 "perly.y"
 { yyval.opval = newAVREF(yyvsp[0].opval); }
 break;
-case 164:
-#line 602 "perly.y"
+case 160:
+#line 580 "perly.y"
 { yyval.opval = newHVREF(yyvsp[0].opval); }
 break;
-case 165:
-#line 606 "perly.y"
+case 161:
+#line 584 "perly.y"
 { yyval.opval = newAVREF(yyvsp[0].opval); }
 break;
-case 166:
-#line 610 "perly.y"
+case 162:
+#line 588 "perly.y"
 { yyval.opval = newGVREF(0,yyvsp[0].opval); }
 break;
-case 167:
-#line 614 "perly.y"
+case 163:
+#line 592 "perly.y"
 { yyval.opval = scalar(yyvsp[0].opval); }
 break;
-case 168:
-#line 616 "perly.y"
+case 164:
+#line 594 "perly.y"
 { yyval.opval = scalar(yyvsp[0].opval);  }
 break;
-case 169:
-#line 618 "perly.y"
+case 165:
+#line 596 "perly.y"
 { yyval.opval = scope(yyvsp[0].opval); }
 break;
-case 170:
-#line 621 "perly.y"
+case 166:
+#line 599 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-#line 2249 "perly.c"
+#line 2178 "perly.c"
     }
     yyssp -= yym;
     yystate = *yyssp;
index dd92764..ebeaaf7 100644 (file)
@@ -1,4 +1,4 @@
-/* Postprocessed by vms_yfix.pl 1.1 to add VMS declarations of globals */
+/* Postprocessed by vms_yfix.pl 1.11 to add VMS declarations of globals */
 #define WORD 257
 #define METHOD 258
 #define FUNCMETH 259
index 2afe93c..6f521d2 100644 (file)
@@ -74,7 +74,7 @@ $
 $!  And do it
 $   testdir = "Directory/NoHead/NoTrail/Column=1"
 $   Define/User Perlshr Sys$Disk:[-]PerlShr'exe'
-$   MCR Sys$Disk:[]Perl. "''p2'" "''p3'" "''p4'" "''p5'" "''p6'"
+$   MCR Sys$Disk:[]Perl. - "''p2'" "''p3'" "''p4'" "''p5'" "''p6'"
 $   Deck/Dollar=$$END-OF-TEST$$
 # $RCSfile: TEST,v $$Revision: 4.1 $$Date: 92/08/07 18:27:00 $
 # Modified for VMS 30-Sep-1994  Charles Bailey  bailey@genetics.upenn.edu
@@ -85,13 +85,22 @@ $   Deck/Dollar=$$END-OF-TEST$$
 # skip those tests we know will fail entirely or cause perl to hang bacause
 # of Unixisms in the tests.  (The Perl operators being tested may work fine,
 # but the tests may use other operators which don't.)
+use Config;
+
 @compexcl=('cpp.t','script.t');
 @ioexcl=('argv.t','dup.t','fs.t','inplace.t','pipe.t');
 @libexcl=('anydbm.t','db-btree.t','db-hash.t','db-recno.t',
           'gdbm.t','io_dup.t', 'io_pipe.t', 'io_sock.t',
-          'ndbm.t','odbm.t','posix.t','sdbm.t','soundex.t');
-          # Note: POSIX is not part of basic build, but can be built
-          # separately if you're using DECC
+          'ndbm.t','odbm.t','open2.t','open3.t','posix.t',
+          'sdbm.t','soundex.t');
+
+# Note: POSIX is not part of basic build, but can be built
+# separately if you're using DECC
+# io_xs.t tests the new_tmpfile routine, which doesn't work with the
+# VAXCRTL, since the file can't be stat()d, an Perl's do_open()
+# insists on stat()ing a file descriptor before it'll use it.
+push(@libexcl,'io_xs.t') if $Config{'vms_cc_type'} ne 'decc';
+
 @opexcl=('exec.t','fork.t','glob.t','groups.t','magic.t','misc.t','stat.t');
 @exclist=(@compexcl,@ioexcl,@libexcl,@opexcl);
 foreach $file (@exclist) { $skip{$file}++; }
index e13747a..992e75f 100644 (file)
--- a/vms/vms.c
+++ b/vms/vms.c
@@ -402,7 +402,6 @@ kill_file(char *name)
           set_errno(ENOENT); break;
         case RMS$_DEV:
           set_errno(ENODEV); break;
-        case RMS$_FNM:
         case RMS$_SYN:
         case SS$_INVFILFOROP:
           set_errno(EINVAL); break;
@@ -860,6 +859,14 @@ my_gconvert(double val, int ndig, int trail, char *buf)
   char *loc;
 
   loc = buf ? buf : __gcvtbuf;
+
+#ifndef __DECC  /* VAXCRTL gcvt uses E format for numbers < 1 */
+  if (val < 1) {
+    sprintf(loc,"%.*g",ndig,val);
+    return loc;
+  }
+#endif
+
   if (val) {
     if (!buf && ndig > DBL_DIG) ndig = DBL_DIG;
     return gcvt(val,ndig,loc);
@@ -2140,6 +2147,7 @@ unsigned long int zero = 0, sts;
                set_errno(ENOENT); break;
            case RMS$_DEV:
                set_errno(ENODEV); break;
+           case RMS$_FNM:
            case RMS$_SYN:
                set_errno(EINVAL); break;
            case RMS$_PRV:
@@ -3424,6 +3432,7 @@ int
 flex_fstat(int fd, struct mystat *statbufp)
 {
   if (!fstat(fd,(stat_t *) statbufp)) {
+    if (statbufp == &statcache) *namecache == '\0';
     statbufp->st_dev = encode_dev(statbufp->st_devnam);
     return 0;
   }
@@ -3486,16 +3495,22 @@ my_binmode(FILE *fp, char iotype)
     fpos_t pos;
 
     if (!fgetname(fp,filespec)) return NULL;
-    if (fgetpos(fp,&pos) == -1) return NULL;
+    if (iotype != '-' && fgetpos(fp,&pos) == -1) return NULL;
     switch (iotype) {
       case '<': case 'r':           acmode = "rb";                      break;
-      case '>': case 'w':           acmode = "wb";                      break;
-      case '+': case '|': case 's': acmode = "rb+";                     break;
+      case '>': case 'w':
+        /* use 'a' instead of 'w' to avoid creating new file;
+           fsetpos below will take care of restoring file position */
       case 'a':                     acmode = "ab";                      break;
-      case '-':                     acmode = fileno(fp) ? "wb" : "rb";  break;
+      case '+': case '|': case 's': acmode = "rb+";                     break;
+      case '-':                     acmode = fileno(fp) ? "ab" : "rb";  break;
+      default:
+        warn("Unrecognized iotype %c in my_binmode",iotype);
+        acmode = "rb+";
     }
     if (freopen(filespec,acmode,fp) == NULL) return NULL;
-    if (fsetpos(fp,&pos) == -1) return NULL;
+    if (iotype != '-' && fsetpos(fp,&pos) == -1) return NULL;
+    return fp;
 }  /* end of my_binmode() */
 /*}}}*/
 
index 33af914..9f29c80 100644 (file)
@@ -6,10 +6,12 @@
 # If it finds that the input files are already patches for VMS,
 # it just copies the input to the output.
 #
-# Revised 29-Jan-1996 by Charles Bailey  bailey@genetics.upenn.edu
+# Revised 20-Dec-1996 by Charles Bailey  bailey@genetics.upenn.edu
 
-$VERSION = '1.1';
+$VERSION = '1.11';
 
+push(@ARGV,(qw[ perly.c perly.h vms/perly_c.vms vms/perly_h.vms])[@ARGV..4])
+    if @ARGV < 4;
 ($cinfile,$hinfile,$coutfile,$houtfile) = @ARGV;
 
 open C,$cinfile or die "Can't read $cinfile: $!\n";