diff --git a/BNFC.cabal b/BNFC.cabal
--- a/BNFC.cabal
+++ b/BNFC.cabal
@@ -1,5 +1,5 @@
 Name: BNFC
-Version: 2.9.2.1
+Version: 2.9.3
 cabal-version: 2.0
   -- >=1.24 for the custom-setup section
   -- >=2.0  for the build-tools: hspec-discover
@@ -27,61 +27,54 @@
   a LaTeX file containing a readable specification of the language.
 
 tested-with:
-  GHC == 9.12.2
-  GHC == 9.10.3
-  GHC == 9.8.4
-  GHC == 9.6.7
-  GHC == 9.4.8
-  GHC == 9.2.8
-  GHC == 9.0.2
-  GHC == 8.10.7
-  GHC == 8.8.4
-  GHC == 8.6.5
-  GHC == 8.4.4
-  GHC == 8.2.2
+  GHC == 7.10.3
   GHC == 8.0.2
-  -- GHC == 7.10.3
+  GHC == 8.2.2
+  GHC == 8.4.4
+  GHC == 8.6.5
+  GHC == 8.8.4
+  GHC == 8.10.7
+  GHC == 9.0.1
+  GHC == 9.2.0.20210821
 
-Extra-doc-files:
+Extra-source-files:
   README.md
   CHANGELOG.md
   -- LICENSE is automatically included
-
-Extra-source-files:
   Makefile
   src/BNFC.cf
   src/Makefile
-  stack-9.12.yaml
-  stack-9.10.yaml
-  stack-9.8.yaml
-  stack-9.6.yaml
-  stack-9.4.yaml
-  stack-9.2.yaml
-  stack-9.0.yaml
-  stack-8.10.yaml
-  stack-8.8.yaml
-  stack-8.6.yaml
-  stack-8.4.yaml
-  stack-8.2.yaml
+  stack-9.0.1.yaml
+  stack-8.10.7.yaml
+  stack-8.10.4.yaml
+  stack-8.10.3.yaml
+  stack-8.10.2.yaml
+  stack-8.8.4.yaml
+  stack-8.8.3.yaml
+  stack-8.8.2.yaml
+  stack-8.6.5.yaml
+  stack-8.6.4.yaml
+  stack-8.4.4.yaml
+  stack-8.2.2.yaml
   stack-8.0.2.yaml
   stack-7.10.3.yaml
 
 Source-repository head
   type:     git
-  location: https://github.com/BNFC/bnfc.git
+  location: git://github.com/BNFC/bnfc.git
   subdir:   source
 
 Source-repository this
   type:     git
-  location: https://github.com/BNFC/bnfc.git
+  location: git://github.com/BNFC/bnfc.git
   subdir:   source
-  tag:      v2.9.2.1
+  tag:      v2.9.3
 
 -- Setup using https://github.com/haskellari/cabal-doctest
 custom-setup
  setup-depends:
-   base >= 4 && < 5,
-   Cabal >= 2.0 && < 4,
+   base >= 4 && <5,
+   Cabal >= 2.0,
    cabal-doctest >= 1 && < 1.1
 
 executable bnfc
@@ -94,8 +87,6 @@
   other-modules:
     -- Generated by cabal
     Paths_BNFC
-  autogen-modules:
-    Paths_BNFC
   default-extensions:
     -- Keep in alphabetical order.
     LambdaCase
@@ -125,7 +116,7 @@
     , process
     , string-qq
     , time
-  if impl(ghc < 8)
+  if impl(ghc < 8.0)
     build-depends:
       semigroups
   build-tool-depends:
@@ -133,6 +124,11 @@
     happy:happy
   hs-source-dirs:
     src
+  ghc-options:
+    -W
+  if impl(ghc >= 8.0)
+    ghc-options:
+      -Wcompat
   default-extensions:
     -- Keep the list of language extensions in sync with its other occurrences.
     -- Keep in alphabetical order.
@@ -161,8 +157,6 @@
   other-modules:
     -- Generated by cabal
     Paths_BNFC
-  autogen-modules:
-    Paths_BNFC
   exposed-modules:
     -- Generated from LICENSE
     BNFC.License
@@ -295,7 +289,7 @@
     deepseq,
     string-qq,
     time
-  if impl(ghc < 8)
+  if impl(ghc < 8.0)
     build-depends:
       semigroups
   build-tool-depends:
@@ -308,6 +302,9 @@
     test
   ghc-options:
     -W
+  if impl(ghc >= 8.0)
+    ghc-options:
+      -Wcompat
   default-extensions:
     -- Keep in alphabetical order.
     LambdaCase
diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,9 +1,13 @@
-# 2.9.2.1
+# 2.9.3
 
-Andreas Abel <andreas.abel@gu.se>  Jan 2026
+Andreas Abel <andreas.abel@gu.se>  September 2021
 
-* Cabal 3.12 compatibility: remove generated `Lex.hs` and `Par.hs` from source tarball
-* Build tested with GHC 7.10.3 - 9.12.2
+* BNFC now uniformly signs generated files with its version number [#373]
+* C/C++: include `stdio.h` in parser header files [#381]
+* C++: fixed parser regression in 2.9.2: missing `#include <algorithm>` [#377]
+* Ocaml: lex CR as whitespace [see also #376]
+* Ocaml: correct position in parse errors [#380]
+* Ocaml/Haskell: make printer for lists categories total [#383]
 
 # 2.9.2
 
@@ -35,12 +39,6 @@
 
 * C/C++: instead of `_SYMB_nnn`, more readable token names in lexer & parser
 
-# 2.9.1.1
-
-Andreas Abel <andreas.abel@gu.se>  Jan 2026
-
-* Cabal 3.12 compatibility: remove generated `Lex.hs` and `Par.hs` from source tarball
-* Build tested with GHC 7.10.3 - 9.12.2
 
 # 2.9.1
 
diff --git a/src/BNFC/Abs.hs b/src/BNFC/Abs.hs
--- a/src/BNFC/Abs.hs
+++ b/src/BNFC/Abs.hs
@@ -1,5 +1,4 @@
--- Haskell data types for the abstract syntax.
--- Generated by the BNF converter.
+-- File generated by the BNF Converter (bnfc 2.9.3).
 
 {-# LANGUAGE PatternSynonyms #-}
 
diff --git a/src/BNFC/Backend/Agda.hs b/src/BNFC/Backend/Agda.hs
--- a/src/BNFC/Backend/Agda.hs
+++ b/src/BNFC/Backend/Agda.hs
@@ -138,7 +138,7 @@
 import BNFC.CF
 import BNFC.Backend.Base           (Backend, mkfile)
 import BNFC.Backend.Haskell.HsOpts
-import BNFC.Backend.Haskell.Utils  (parserName, catToType, mkDefName, typeToHaskell')
+import BNFC.Backend.Haskell.Utils  (parserName, catToType, mkDefName, typeToHaskell', comment)
 import BNFC.Options                (SharedOptions, TokenText(..), tokenText)
 import BNFC.PrettyPrint
 import BNFC.Utils                  (ModuleName, replace, when, table)
@@ -165,18 +165,18 @@
   -> Backend
 makeAgda time opts cf = do
   -- Generate AST bindings.
-  mkfile (agdaASTFile opts) $
+  mkfile (agdaASTFile opts) comment $
     cf2AgdaAST time (tokenText opts) (agdaASTFileM opts) (absFileM opts) (printerFileM opts) cf
   -- Generate parser bindings.
-  mkfile (agdaParserFile opts) $
+  mkfile (agdaParserFile opts) comment $
     cf2AgdaParser time (tokenText opts) (agdaParserFileM opts) (agdaASTFileM opts) (errFileM opts) (happyFileM opts)
       layoutMod
       parserCats
   -- Generate an I/O library for the test parser.
-  mkfile (agdaLibFile opts) $
+  mkfile (agdaLibFile opts) comment $
     agdaLibContents (agdaLibFileM opts)
   -- Generate test parser.
-  mkfile (agdaMainFile opts) $
+  mkfile (agdaMainFile opts) comment $
     agdaMainContents (agdaMainFileM opts) (agdaLibFileM opts) (agdaASTFileM opts) (agdaParserFileM opts)
       (hasLayout cf)
       (firstEntry cf)
@@ -315,7 +315,6 @@
   -> Doc
 preamble _time what = vcat $
   [ hcat [ "-- Agda bindings for the Haskell ", text what, "." ]
-  , hcat [ "-- Generated by BNFC." ]
   -- -- Time stamp does not work well with BNFC's mkfile logic.
   -- , hcat [ "-- Generated by BNFC at "         , text time, "." ]
   ]
@@ -656,7 +655,7 @@
 definedRules :: CF -> Doc
 definedRules cf = vsep $ map mkDef $ definitions cf
   where
-    mkDef (Define f args e t) = vcat $ concat
+    mkDef (Define f args e _) = vcat $ concat
       [ [ text $ unwords [ mkDefName f, ":", typeToHaskell' "→" $ wpThing t ]
         | t <- maybeToList $ sigLookup f cf
         ]
@@ -863,8 +862,7 @@
   :: String      -- ^ Name of Agda library module.
   -> Doc         -- ^ Contents of Agda library module.
 agdaLibContents mod = vcat
-  [ "-- Generated by BNFC."
-  , "-- Basic I/O library."
+  [ "-- Basic I/O library."
   , ""
   , "module" <+> text mod <+> "where"
   , ""
@@ -930,7 +928,6 @@
   -> Doc         -- ^ Contents of Agda main module.
 agdaMainContents mod lmod amod pmod layout c = vcat
   [ "-- Test for Agda binding of parser.  Requires Agda >= 2.5.4."
-  , "-- Generated by BNFC."
   , ""
   , "module" <+> text mod <+> "where"
   , when layout "\nopen import Agda.Builtin.Bool using (true)"
diff --git a/src/BNFC/Backend/Base.hs b/src/BNFC/Backend/Base.hs
--- a/src/BNFC/Backend/Base.hs
+++ b/src/BNFC/Backend/Base.hs
@@ -7,24 +7,33 @@
 module BNFC.Backend.Base
   ( Backend
   , MkFiles
+  , GeneratedFile(..)
+  , MakeComment
   , execBackend
   , mkfile
   , liftIO
   , writeFiles
   ) where
 
+import Control.Arrow    ( (&&&) )
 import Control.Monad.Writer
 
-import Data.Char (isSpace)
+import Data.Char        ( isSpace )
+import Data.Function    ( on )
 import qualified Data.List as List
 
-import System.Directory (createDirectoryIfMissing)
-import System.FilePath (dropFileName, (</>))
+import System.Directory ( createDirectoryIfMissing )
+import System.FilePath  ( dropFileName, takeExtension, (</>) )
 
+import BNFC.Options     ( versionString )
 import BNFC.PrettyPrint
-import BNFC.Utils (writeFileRep)
+import BNFC.Utils       ( writeFileRep )
 
--- | Define the type of the backend functions For more purity, instead of
+-- | Stamp BNFC puts in the header of each generated file.
+msgGenerated :: String
+msgGenerated = "File generated by the BNF Converter (bnfc " ++ versionString ++ ")."
+
+-- | Define the type of the backend functions.  For more purity, instead of
 -- having each backend writing the generated files to disk, they return a list
 -- of pairs containing the (relative) file path and the file content. This
 -- allow for 1) easier testing, 2) implement common options like changing the
@@ -34,19 +43,40 @@
 -- The writer monad provides a more convenient API to generate the list. Note
 -- that we still use the `IO` monad for now because some backends insist on
 -- printing stuff to the screen while generating the files.
-type MkFiles a = WriterT [(FilePath, String)] IO a
+type MkFiles a = WriterT [GeneratedFile] IO a
 type Backend = MkFiles ()
 
+-- | A result file of a backend.
+data GeneratedFile = GeneratedFile
+  { fileName    :: FilePath
+      -- ^ Name of the file to write.
+  , makeComment :: MakeComment
+      -- ^ Function to generate a comment.
+      --   Used to prefix the file with a stamp ("Generated by BNFC").
+  , fileContent :: String
+      -- ^ Content of the file to write.
+  }
 
+-- quick-and-dirty instances for HSpec test-suite
+
+instance Show GeneratedFile where
+  show (GeneratedFile x _  y) = unwords [ "GeneratedFile", show x, "_", show y ]
+
+instance Eq GeneratedFile where
+  (==) = (==) `on` fileName &&& fileContent
+
+-- | Type of comment-generating functions.
+type MakeComment = String -> String
+
 -- | Named after execWriter, this function execute the given backend
 -- and returns the generated file paths and contents.
-execBackend :: MkFiles () -> IO [(FilePath, String)]
+execBackend :: MkFiles () -> IO [GeneratedFile]
 execBackend = execWriterT
 
 -- | A specialized version of `tell` that adds a file and its content to the
 -- list of generated files.
-mkfile :: (FileContent c) => FilePath -> c -> MkFiles ()
-mkfile path content = tell [(path, fileContentToString content)]
+mkfile :: FileContent c => FilePath -> MakeComment -> c -> MkFiles ()
+mkfile path f content = tell [GeneratedFile path f (fileContentToString content)]
 
 -- | While we are moving to generating `Text.PrettyPrint.Doc` instead of `String`,
 -- it is nice to be able to use both as argument to 'mkfile'.
@@ -70,12 +100,17 @@
 -- @$ROOT\/a\/b@)
 writeFiles :: FilePath -> MkFiles () -> IO ()
 writeFiles root fw = do
-  -- First we check that the directory exists
+  -- First we check that the directory exists.
   fb <- execBackend fw
   createDirectoryIfMissing True root
-  mapM_ (uncurry writeFile') fb
-  where
-  writeFile' :: FilePath -> String -> IO ()
-  writeFile' path content = do
+  forM_ fb $ \ (GeneratedFile path mkComment content) -> do
     createDirectoryIfMissing True (root </> dropFileName path)
-    writeFileRep (root </> path) content
+     -- Then we write the files, adding the BNFC stamp as header.
+    writeFileRep (root </> path) $
+      -- TODO: the following is a hack, make this more systematic:
+      if takeExtension path == ".txt" then
+        -- Sign at the end since e.g. txt2tags cannot handle comments at beginning of file.
+        unlines [ content, mkComment msgGenerated ]
+      else
+        -- Sign at the beginning (JFlex cannot handle comments in general, only at beginning).
+        mkComment msgGenerated ++ "\n\n" ++ content
diff --git a/src/BNFC/Backend/C.hs b/src/BNFC/Backend/C.hs
--- a/src/BNFC/Backend/C.hs
+++ b/src/BNFC/Backend/C.hs
@@ -1,11 +1,12 @@
 {-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE OverloadedStrings #-}
 
 {-
     BNF Converter: C Main file
     Copyright (C) 2004  Author:  Michael Pellauer
     Copyright (C) 2020  Andreas Abel
 -}
-module BNFC.Backend.C (makeC, bufferC, bufferH) where
+module BNFC.Backend.C (makeC, bufferC, bufferH, comment, testfileHeader) where
 
 import Prelude hiding ((<>))
 
@@ -28,24 +29,23 @@
 makeC :: SharedOptions -> CF -> MkFiles ()
 makeC opts cf = do
     let (hfile, cfile) = cf2CAbs (linenumbers opts) prefix cf
-    mkfile "Absyn.h" hfile
-    mkfile "Absyn.c" cfile
-    mkfile "Buffer.h" bufferH
-    mkfile "Buffer.c" $ bufferC "Buffer.h"
+    mkCFile "Absyn.h" hfile
+    mkCFile "Absyn.c" cfile
+    mkCFile "Buffer.h" bufferH
+    mkCFile "Buffer.c" $ bufferC "Buffer.h"
     let (flex, env) = cf2flex parserMode cf
-    mkfile (name ++ ".l") flex
-    let bison = cf2Bison (linenumbers opts) parserMode cf env
-    mkfile (name ++ ".y") bison
-    let header = mkHeaderFile (linenumbers opts) cf (Map.elems env)
-    mkfile "Parser.h" header
+    mkfile (name ++ ".l") commentWithEmacsModeHint flex
+    mkfile (name ++ ".y") commentWithEmacsModeHint $
+      cf2Bison (linenumbers opts) parserMode cf env
+    mkCFile "Parser.h" $ mkHeaderFile (linenumbers opts) cf (Map.elems env)
     let (skelH, skelC) = cf2CSkel cf
-    mkfile "Skeleton.h" skelH
-    mkfile "Skeleton.c" skelC
+    mkCFile "Skeleton.h" skelH
+    mkCFile "Skeleton.c" skelC
     let (prinH, prinC) = cf2CPrinter cf
-    mkfile "Printer.h" prinH
-    mkfile "Printer.c" prinC
-    mkfile "Test.c" (ctest cf)
-    Makefile.mkMakefile opts (makefile name prefix)
+    mkCFile "Printer.h" prinH
+    mkCFile "Printer.c" prinC
+    mkCFile "Test.c" (ctest cf)
+    Makefile.mkMakefile opts $ makefile name prefix
   where
     name :: String
     name = lang opts
@@ -56,6 +56,7 @@
     prefix = snakeCase_ name ++ "_"
     parserMode :: ParserMode
     parserMode = CParser False prefix
+    mkCFile x = mkfile x comment
 
 
 makefile :: String -> String -> String -> Doc
@@ -120,18 +121,30 @@
     ]
   where testName = "Test" ++ name
 
+-- | Put string into a block comment.
+comment :: String -> String
+comment x = unwords ["/*", x, "*/"]
+
+-- | C line comment including mode hint for emacs.
+commentWithEmacsModeHint :: String -> String
+commentWithEmacsModeHint = comment . ("-*- c -*- " ++)
+
+-- | A heading comment for the generated parser test.
+testfileHeader :: [String]
+testfileHeader =
+  [ "/************************* Compiler Front-End Test *************************/"
+  , "/*                                                                         */"
+  , "/*  This test will parse a file, print the abstract syntax tree, and then  */"
+  , "/*  pretty-print the result.                                               */"
+  , "/*                                                                         */"
+  , "/***************************************************************************/"
+  ]
+
 -- | Generate a test program that parses stdin and prints the AST and it's
 -- linearization
 ctest :: CF -> String
-ctest cf =
-  unlines
+ctest cf = unlines $ testfileHeader ++
    [
-    "/*** Compiler Front-End Test automatically generated by the BNF Converter ***/",
-    "/*                                                                          */",
-    "/* This test will parse a file, print the abstract syntax tree, and then    */",
-    "/* pretty-print the result.                                                 */",
-    "/*                                                                          */",
-    "/****************************************************************************/",
     "",
     "#include <stdio.h>",
     "#include <stdlib.h>",
@@ -206,10 +219,11 @@
   dat = identCat . normCat $ cat
 
 mkHeaderFile :: RecordPositions -> CF -> [String] -> String
-mkHeaderFile _ cf env = unlines $ concat
+mkHeaderFile _ cf _env = unlines $ concat
   [ [ "#ifndef PARSER_HEADER_FILE"
     , "#define PARSER_HEADER_FILE"
     , ""
+    , "#include <stdio.h>"
     , "#include \"Absyn.h\""
     , ""
     ]
@@ -232,9 +246,7 @@
 
 bufferH :: String
 bufferH = unlines
-  [ "/* This utility file was automatically generated by BNFC. */"
-  , ""
-  , "/* A dynamically allocated character buffer that grows as it is appended. */"
+  [ "/* A dynamically allocated character buffer that grows as it is appended. */"
   , ""
   , "#ifndef BUFFER_HEADER"
   , "#define BUFFER_HEADER"
@@ -276,9 +288,7 @@
 
 bufferC :: String -> String
 bufferC bufferH = unlines
-  [ "/* This utility file was automatically generated by BNFC. */"
-  , ""
-  , "/* A dynamically allocated character buffer that grows as it is appended. */"
+  [ "/* A dynamically allocated character buffer that grows as it is appended. */"
   , ""
   , "#include <assert.h>  /* assert */"
   , "#include <stdlib.h>  /* free, malloc */"
diff --git a/src/BNFC/Backend/C/CFtoBisonC.hs b/src/BNFC/Backend/C/CFtoBisonC.hs
--- a/src/BNFC/Backend/C/CFtoBisonC.hs
+++ b/src/BNFC/Backend/C/CFtoBisonC.hs
@@ -30,7 +30,6 @@
 import Data.Char       ( toLower, isUpper )
 import Data.Foldable   ( toList )
 import Data.List       ( intercalate, nub )
-import Data.Maybe
 import qualified Data.Map as Map
 import System.FilePath ( (<.>) )
 
@@ -76,7 +75,6 @@
     , nsEnd inPackage
     ]
   where
-  name = parserName mode
   inPackage = parserPackage mode
   posCats
     | stlParser mode = map TokenCat $ positionCats cf
@@ -87,7 +85,7 @@
 
 header :: ParserMode -> CF -> String
 header mode cf = unlines $ concat
-  [ [ "/* -*- c -*- This Bison file was machine-generated by BNFC */"
+  [ [ "/* Parser definition to be used with Bison. */"
     , ""
     , "/* Generate header file for lexer. */"
     , "%defines \"" ++ ("Bison" <.> h) ++ "\""
@@ -115,8 +113,14 @@
     , "%{"
     , "/* Begin C preamble code */"
     , ""
+    ]
+    -- Andreas, 2021-08-26, issue #377:  Some C++ compilers want "algorithm".
+    -- Fixing regression introduced in 2.9.2.
+  , when (stlParser mode)
+    [ "#include <algorithm> /* for std::reverse */"  -- mandatory e.g. with GNU C++ 11
+    ]
+  , [ "#include <stdio.h>"
     , "#include <stdlib.h>"
-    , "#include <stdio.h>"
     , "#include <string.h>"
     , "#include \"" ++ ("Absyn" <.> h) ++ "\""
     , ""
@@ -148,12 +152,7 @@
     ]
   ]
   where
-  eps = toList (allEntryPoints cf)
-     -- Andreas, 2019-04-29, #210: Generate also parsers for CoercCat.
-     -- WAS:  (allCatsNorm cf)
-     -- Found old comment:
-     -- -- M.F. 2004-09-17 changed allEntryPoints to allCatsIdNorm. Seems to fix the [Ty2] bug.
-  h = parserHExt mode
+  h    = parserHExt mode
   name = parserName mode
 
 -- | Code that needs the @YYSTYPE@ defined by the @%union@ pragma.
diff --git a/src/BNFC/Backend/C/CFtoCAbs.hs b/src/BNFC/Backend/C/CFtoCAbs.hs
--- a/src/BNFC/Backend/C/CFtoCAbs.hs
+++ b/src/BNFC/Backend/C/CFtoCAbs.hs
@@ -33,7 +33,7 @@
 import BNFC.CF
 import BNFC.PrettyPrint
 import BNFC.Options  ( RecordPositions(..) )
-import BNFC.Utils    ( (+++), uncurry3, unless )
+import BNFC.Utils    ( (+++), unless )
 import BNFC.Backend.Common.NamedVariables
 import BNFC.Backend.C.Common ( posixC )
 
@@ -66,7 +66,7 @@
     , "#include <stddef.h>  /* NULL */"
     , "#include <string.h>  /* strdup */"
     , ""
-    , "/* C++ Abstract Syntax Interface generated by the BNF Converter.*/"
+    , "/* C++ Abstract Syntax Interface.*/"
     , ""
     , prTypeDefs user
     , "/********************   Forward Declarations    ***********************/"
@@ -186,7 +186,7 @@
     LitDouble d -> return $ show d
     LitChar   c -> return $ show c
     LitString s -> return $ concat [ "strdup(", show s, ")" ]  -- so that free() does not crash!
-  con g ~(FunT ts t)
+  con g ~(FunT _ts t)
     | isConsFun g = identType t
     | otherwise   = g
   -- If more than one argument, or complex argument, put space before opening parenthesis.
@@ -275,7 +275,7 @@
 
 -- | Makes the .C file
 mkCFile :: [Data] -> CF -> String
-mkCFile datas cf = concat
+mkCFile datas _cf = concat
   [ header
   , render $ vsep $ concatMap prDataC datas
   , unlines [ "", "" ]
@@ -288,7 +288,7 @@
   ]
   where
   header = unlines
-    [ "/* C Abstract Syntax Implementation generated by the BNF Converter. */"
+    [ "/* C Abstract Syntax Implementation. */"
     , ""
     , "#include <stdio.h>"
     , "#include <stdlib.h>"
@@ -475,7 +475,7 @@
   -- | This goes on to recurse to the instance variables.
 
   prFreeCat :: String -> (Cat, Doc) -> Maybe String
-  prFreeCat fnm (TokenCat c, nt)
+  prFreeCat _fnm (TokenCat c, _nt)
     | c `elem` ["Char", "Double", "Integer"] = Nothing
       -- Only pointer need to be freed.
   prFreeCat fnm (cat, nt) = Just $ concat
diff --git a/src/BNFC/Backend/C/CFtoCPrinter.hs b/src/BNFC/Backend/C/CFtoCPrinter.hs
--- a/src/BNFC/Backend/C/CFtoCPrinter.hs
+++ b/src/BNFC/Backend/C/CFtoCPrinter.hs
@@ -26,11 +26,10 @@
 import Data.Either    ( lefts )
 import Data.Foldable  ( toList )
 import Data.List      ( nub )
-import Data.Maybe     ( isJust )
 
 import BNFC.CF
 import BNFC.PrettyPrint
-import BNFC.Utils     ( (+++), uniqOn, whenJust, unless, unlessNull )
+import BNFC.Utils     ( (+++), uniqOn, unless, unlessNull )
 
 import BNFC.Backend.Common
 import BNFC.Backend.Common.NamedVariables
@@ -153,7 +152,7 @@
     eps = nub . map normCat . toList $ allEntryPoints cf
     header = unlines
      [
-      "/*** BNFC-Generated Pretty Printer and Abstract Syntax Viewer ***/",
+      "/*** Pretty Printer and Abstract Syntax Viewer ***/",
       "",
       "#include <ctype.h>   /* isspace */",
       "#include <stdio.h>",
diff --git a/src/BNFC/Backend/C/CFtoCSkel.hs b/src/BNFC/Backend/C/CFtoCSkel.hs
--- a/src/BNFC/Backend/C/CFtoCSkel.hs
+++ b/src/BNFC/Backend/C/CFtoCSkel.hs
@@ -86,7 +86,7 @@
   where
     user = map fst $ tokenPragmas cf
     header = unlines [
-      "/*** BNFC-Generated Visitor Traversal Skeleton. ***/",
+      "/*** Visitor Traversal Skeleton. ***/",
       "/* This traverses the abstract syntax tree.",
       "   To use, copy Skeleton.h and Skeleton.c to",
       "   new files. */",
diff --git a/src/BNFC/Backend/C/CFtoFlexC.hs b/src/BNFC/Backend/C/CFtoFlexC.hs
--- a/src/BNFC/Backend/C/CFtoFlexC.hs
+++ b/src/BNFC/Backend/C/CFtoFlexC.hs
@@ -38,10 +38,9 @@
 import BNFC.Backend.C.Common         ( posixC )
 import BNFC.Backend.C.RegToFlex
 import BNFC.Backend.Common.NamedVariables
-import BNFC.Backend.CPP.STL.STLUtils ( nsDefine, nsString )
 import BNFC.Options                  ( InPackage )
 import BNFC.PrettyPrint
-import BNFC.Utils                    ( cstring, symbolToName, unless, when, whenJust )
+import BNFC.Utils                    ( cstring, symbolToName, unless, when )
 
 data ParserMode
   = CParser Bool String    -- ^ @C@ (@False@) or @C++ no STL@ (@True@) mode, with @name@ to use as prefix.
@@ -92,7 +91,7 @@
 
 prelude :: Bool -> ParserMode -> String
 prelude stringLiterals mode = unlines $ concat
-  [ [ "/* -*- c -*- This FLex file was machine-generated by the BNF converter */"
+  [ [ "/* Lexer definition for use with FLex */"
     , ""
     -- noinput and nounput are most often unused
     -- https://stackoverflow.com/questions/39075510/option-noinput-nounput-what-are-they-for
@@ -131,7 +130,7 @@
     , "  loc->first_column = loc->last_column;"
     , "  int i = 0;"  -- put this here as @for (int i...)@ is only allowed in C99
     , "  for (; text[i] != '\\0'; ++i) {"
-    , "      if (text[i] == '\\n') {"
+    , "      if (text[i] == '\\n') {"        -- Checking for \n is good enough to also support \r\n (but not \r)
     , "          ++loc->last_line;"
     , "          loc->last_column = 0; "
     , "      } else {"
@@ -206,7 +205,7 @@
          s' = escapeChars s
 
 restOfFlex :: InPackage -> CF -> SymMap -> String
-restOfFlex inPackage cf env = unlines $ concat
+restOfFlex _inPackage cf env = unlines $ concat
   [ [ render $ lexComments $ comments cf
     , ""
     ]
@@ -249,10 +248,12 @@
     , "<STRING>\\\\             \t BEGIN ESCAPED;"
     , "<STRING>\\\"             \t " ++ yylval ++ "->_string = LITERAL_BUFFER_HARVEST(); BEGIN INITIAL; return " ++ stringToken ++ ";"
     , "<STRING>.              \t LITERAL_BUFFER_APPEND_CHAR(yytext[0]);"
+    , "<ESCAPED>f             \t LITERAL_BUFFER_APPEND_CHAR('\\f'); BEGIN STRING;"
     , "<ESCAPED>n             \t LITERAL_BUFFER_APPEND_CHAR('\\n'); BEGIN STRING;"
+    , "<ESCAPED>r             \t LITERAL_BUFFER_APPEND_CHAR('\\r'); BEGIN STRING;"
+    , "<ESCAPED>t             \t LITERAL_BUFFER_APPEND_CHAR('\\t'); BEGIN STRING;"
     , "<ESCAPED>\\\"            \t LITERAL_BUFFER_APPEND_CHAR('\"');  BEGIN STRING;"
     , "<ESCAPED>\\\\            \t LITERAL_BUFFER_APPEND_CHAR('\\\\'); BEGIN STRING;"
-    , "<ESCAPED>t             \t LITERAL_BUFFER_APPEND_CHAR('\\t'); BEGIN STRING;"
     , "<ESCAPED>.             \t LITERAL_BUFFER_APPEND(yytext);    BEGIN STRING;"
     , "<STRING,ESCAPED><<EOF>>\t LITERAL_BUFFER_FREE(); return " ++ errorToken ++ ";"
     ]
@@ -263,7 +264,9 @@
     [ "<INITIAL>\"'\" \tBEGIN CHAR;"
     , "<CHAR>\\\\      \t BEGIN CHARESC;"
     , "<CHAR>[^']      \t BEGIN CHAREND; " ++ yylval ++ "->_char = yytext[0]; return " ++ charToken ++ ";"
+    , "<CHARESC>f      \t BEGIN CHAREND; " ++ yylval ++ "->_char = '\\f';     return " ++ charToken ++ ";"
     , "<CHARESC>n      \t BEGIN CHAREND; " ++ yylval ++ "->_char = '\\n';     return " ++ charToken ++ ";"
+    , "<CHARESC>r      \t BEGIN CHAREND; " ++ yylval ++ "->_char = '\\r';     return " ++ charToken ++ ";"
     , "<CHARESC>t      \t BEGIN CHAREND; " ++ yylval ++ "->_char = '\\t';     return " ++ charToken ++ ";"
     , "<CHARESC>.      \t BEGIN CHAREND; " ++ yylval ++ "->_char = yytext[0]; return " ++ charToken ++ ";"
     , "<CHAREND>\"'\"      \t BEGIN INITIAL;"
diff --git a/src/BNFC/Backend/CPP/Common.hs b/src/BNFC/Backend/CPP/Common.hs
--- a/src/BNFC/Backend/CPP/Common.hs
+++ b/src/BNFC/Backend/CPP/Common.hs
@@ -5,13 +5,19 @@
 module BNFC.Backend.CPP.Common where
 
 import Data.Char  ( isUpper )
-import Data.List  ( nub, intercalate )
+import Data.List  ( intercalate )
 
 import BNFC.CF
 import BNFC.TypeChecker
 
+import BNFC.Backend.C          ( comment )
 import BNFC.Backend.CPP.Naming
 
+-- | C++ line comment including mode hint for emacs.
+
+commentWithEmacsModeHint :: String -> String
+commentWithEmacsModeHint = comment . ("-*- c++ -*- " ++)
+
 -- | C++ code for the @define@d constructors.
 --
 -- @definedRules Nothing@ only prints the header.
@@ -23,14 +29,6 @@
     theLines = map rule $ definitions cf
 
     ctx = buildContext cf
-
-    list = LC
-      { nil  =  const ("[]", dummyType)
-      , cons = \ t -> ("List" ++ unBase t, dummyType)
-      }
-      where
-        unBase (ListT t) = unBase t
-        unBase (BaseT x) = x
 
     rule (Define f args e t) =
       case mlc of
diff --git a/src/BNFC/Backend/CPP/Makefile.hs b/src/BNFC/Backend/CPP/Makefile.hs
--- a/src/BNFC/Backend/CPP/Makefile.hs
+++ b/src/BNFC/Backend/CPP/Makefile.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE OverloadedStrings #-}
+
 module BNFC.Backend.CPP.Makefile (makefile) where
 
 import BNFC.Backend.Common.Makefile
diff --git a/src/BNFC/Backend/CPP/NoSTL.hs b/src/BNFC/Backend/CPP/NoSTL.hs
--- a/src/BNFC/Backend/CPP/NoSTL.hs
+++ b/src/BNFC/Backend/CPP/NoSTL.hs
@@ -5,18 +5,17 @@
 
 module BNFC.Backend.CPP.NoSTL (makeCppNoStl) where
 
-import Data.Char
 import Data.Foldable (toList)
-import Data.List (nub)
 import qualified Data.Map as Map
 
 import BNFC.Utils
 import BNFC.CF
 import BNFC.Options
 import BNFC.Backend.Base
-import BNFC.Backend.C            (bufferH, bufferC)
-import BNFC.Backend.C.CFtoBisonC (cf2Bison)
-import BNFC.Backend.C.CFtoFlexC  (cf2flex, ParserMode(..))
+import BNFC.Backend.C            ( bufferH, bufferC, comment, testfileHeader )
+import BNFC.Backend.C.CFtoBisonC ( cf2Bison )
+import BNFC.Backend.C.CFtoFlexC  ( cf2flex, ParserMode(..) )
+import BNFC.Backend.CPP.Common   ( commentWithEmacsModeHint )
 import BNFC.Backend.CPP.Makefile
 import BNFC.Backend.CPP.NoSTL.CFtoCPPAbs
 import BNFC.Backend.CPP.STL.CFtoCVisitSkelSTL
@@ -26,23 +25,22 @@
 makeCppNoStl :: SharedOptions -> CF -> MkFiles ()
 makeCppNoStl opts cf = do
     let (hfile, cfile) = cf2CPPAbs name cf
-    mkfile "Absyn.H" hfile
-    mkfile "Absyn.C" cfile
-    mkfile "Buffer.H" bufferH
-    mkfile "Buffer.C" $ bufferC "Buffer.H"
+    mkCppFile "Absyn.H" hfile
+    mkCppFile "Absyn.C" cfile
+    mkCppFile "Buffer.H" bufferH
+    mkCppFile "Buffer.C" $ bufferC "Buffer.H"
     let (flex, env) = cf2flex parserMode cf
-    mkfile (name ++ ".l") flex
-    let bison = cf2Bison(linenumbers opts) parserMode cf env
-    mkfile (name ++ ".y") bison
-    let header = mkHeaderFile cf (allParserCats cf) (toList $ allEntryPoints cf) (Map.elems env)
-    mkfile "Parser.H" header
+    mkCppFileWithHint (name ++ ".l") flex
+    mkCppFileWithHint (name ++ ".y") $ cf2Bison (linenumbers opts) parserMode cf env
+    mkCppFile "Parser.H" $
+      mkHeaderFile cf (allParserCats cf) (toList $ allEntryPoints cf) (Map.elems env)
     let (skelH, skelC) = cf2CVisitSkel False Nothing cf
-    mkfile "Skeleton.H" skelH
-    mkfile "Skeleton.C" skelC
+    mkCppFile "Skeleton.H" skelH
+    mkCppFile "Skeleton.C" skelC
     let (prinH, prinC) = cf2CPPPrinter False Nothing cf
-    mkfile "Printer.H" prinH
-    mkfile "Printer.C" prinC
-    mkfile "Test.C" (cpptest cf)
+    mkCppFile "Printer.H" prinH
+    mkCppFile "Printer.C" prinC
+    mkCppFile "Test.C" (cpptest cf)
     Makefile.mkMakefile opts $ makefile prefix name
   where
     name :: String
@@ -54,17 +52,13 @@
     prefix = snakeCase_ name ++ "_"
     parserMode :: ParserMode
     parserMode = CParser True prefix
+    mkCppFile         x = mkfile x comment
+    mkCppFileWithHint x = mkfile x commentWithEmacsModeHint
 
 cpptest :: CF -> String
-cpptest cf =
-  unlines
-   [
-    "/*** Compiler Front-End Test automatically generated by the BNF Converter ***/",
-    "/*                                                                          */",
-    "/* This test will parse a file, print the abstract syntax tree, and then    */",
-    "/* pretty-print the result.                                                 */",
-    "/*                                                                          */",
-    "/****************************************************************************/",
+cpptest cf = unlines $ concat
+  [ testfileHeader
+  , [ "",
     "#include <stdio.h>",
     "#include <string.h>",
     "#include \"Parser.H\"",
@@ -126,16 +120,18 @@
     "  return 1;",
     "}",
     ""
-   ]
+    ]
+  ]
   where
    cat = firstEntry cf
    dat = identCat $ normCat cat
    def = identCat cat
 
-mkHeaderFile cf cats eps env = unlines $ concat
+mkHeaderFile _cf _cats eps _env = unlines $ concat
   [ [ "#ifndef PARSER_HEADER_FILE"
     , "#define PARSER_HEADER_FILE"
     , ""
+    , "#include <stdio.h>"
     , "#include \"Absyn.H\""
     , ""
     ]
diff --git a/src/BNFC/Backend/CPP/NoSTL/CFtoCPPAbs.hs b/src/BNFC/Backend/CPP/NoSTL/CFtoCPPAbs.hs
--- a/src/BNFC/Backend/CPP/NoSTL/CFtoCPPAbs.hs
+++ b/src/BNFC/Backend/CPP/NoSTL/CFtoCPPAbs.hs
@@ -20,7 +20,7 @@
 
 import Prelude hiding ((<>))
 
-import Data.List  ( findIndices, intersperse )
+import Data.List  ( findIndices )
 import Data.Char  ( toLower )
 import Text.PrettyPrint
 
@@ -66,7 +66,7 @@
  where
   user = fst (unzip (tokenPragmas cf)) -- includes position tokens
   -- user = [ name | TokenReg name False _ <- cfgPragmas cf ]  -- position tokens are in allClasses already
-  header = "/* ~~~ C++ Abstract Syntax Interface generated by the BNF Converter.\n ~~~ */"
+  header = "/* ~~~ C++ Abstract Syntax Interface.\n ~~~ */"
   ca = cf2cabs cf
   classes = absclasses ca ++ conclasses ca ++ map fst (listtypes ca)
   -- classes = allClasses (cf2cabs cf)  -- includes position tokens
diff --git a/src/BNFC/Backend/CPP/PrettyPrinter.hs b/src/BNFC/Backend/CPP/PrettyPrinter.hs
--- a/src/BNFC/Backend/CPP/PrettyPrinter.hs
+++ b/src/BNFC/Backend/CPP/PrettyPrinter.hs
@@ -25,7 +25,6 @@
 
 import Data.Bifunctor (second)
 import Data.Char  (toLower)
-import Data.Maybe (isJust)
 
 import BNFC.CF
 import BNFC.Utils
@@ -237,7 +236,7 @@
   where
     header = unlines
      [
-      "/*** BNFC-Generated Pretty Printer and Abstract Syntax Viewer ***/",
+      "/*** Pretty Printer and Abstract Syntax Viewer ***/",
       "",
       "#include <string>",
       "#include \"Printer.H\"",
@@ -410,7 +409,7 @@
 -- | Generate pretty printer visitor for a list category (STL version).
 --
 genPrintVisitorList :: (Cat, [Rule]) -> Doc
-genPrintVisitorList (cat@(ListCat c), rules) = vcat
+genPrintVisitorList (cat@(ListCat _), rules) = vcat
   [ "void PrintAbsyn::visit" <> lty <> parens (lty <+> "*" <> vname)
   , codeblock 2
     [ "iter" <> lty <> parens (vname <> "->begin()" <> comma <+> vname <> "->end()") <> semi ]
@@ -463,7 +462,7 @@
 prListRule_ (Rule _ _ items _) = for items $ \case
   Right t       -> "render(" <> text (snd (renderCharOrString t)) <> ");"
   Left c
-    | Just t <- maybeTokenCat c
+    | Just{} <- maybeTokenCat c
                 -> "visit" <> dat <> "(*i);"
     | isList c  -> "iter" <> dat <> "(i+1, j);"
     | otherwise -> "(*i)->accept(this);"
@@ -474,7 +473,7 @@
 -- between the versions with and without STL.
 -- The present version has been adapted from CFtoCPrinter.
 genPrintVisitorListNoStl :: (Cat, [Rule]) -> String
-genPrintVisitorListNoStl (cat@(ListCat c), rules) = unlines $ concat
+genPrintVisitorListNoStl (cat@(ListCat _), rules) = unlines $ concat
   [ [ "void PrintAbsyn::visit" ++ cl ++ "("++ cl ++ " *" ++ vname ++ ")"
     , "{"
       , "  if (" ++ vname +++ "== 0)"
@@ -512,7 +511,7 @@
 
 --Pretty Printer methods for a rule.
 prPrintRule :: Maybe String -> Rule -> String
-prPrintRule inPackage r@(Rule fun _ items _) | isProperLabel fun = unlines $ concat
+prPrintRule inPackage r@(Rule fun _ _ _) | isProperLabel fun = unlines $ concat
   [ [ "void PrintAbsyn::visit" ++ funName fun ++ "(" ++ funName fun +++ "*" ++ fnm ++ ")"
     , "{"
     , "  int oldi = _i_;"
diff --git a/src/BNFC/Backend/CPP/STL.hs b/src/BNFC/Backend/CPP/STL.hs
--- a/src/BNFC/Backend/CPP/STL.hs
+++ b/src/BNFC/Backend/CPP/STL.hs
@@ -9,18 +9,17 @@
 
 module BNFC.Backend.CPP.STL (makeCppStl,) where
 
-import Data.Char
 import Data.Foldable (toList)
-import qualified Data.List as List
 import qualified Data.Map as Map
 
 import BNFC.Utils
 import BNFC.CF
 import BNFC.Options
 import BNFC.Backend.Base
-import BNFC.Backend.C            (bufferH, bufferC)
-import BNFC.Backend.C.CFtoBisonC (cf2Bison)
-import BNFC.Backend.C.CFtoFlexC  (cf2flex, ParserMode(..))
+import BNFC.Backend.C            ( bufferH, bufferC, comment, testfileHeader )
+import BNFC.Backend.C.CFtoBisonC ( cf2Bison )
+import BNFC.Backend.C.CFtoFlexC  ( cf2flex, ParserMode(..) )
+import BNFC.Backend.CPP.Common   ( commentWithEmacsModeHint )
 import BNFC.Backend.CPP.Makefile
 import BNFC.Backend.CPP.STL.CFtoSTLAbs
 import BNFC.Backend.CPP.STL.CFtoCVisitSkelSTL
@@ -31,24 +30,23 @@
 makeCppStl :: SharedOptions -> CF -> MkFiles ()
 makeCppStl opts cf = do
     let (hfile, cfile) = cf2CPPAbs (linenumbers opts) (inPackage opts) name cf
-    mkfile "Absyn.H" hfile
-    mkfile "Absyn.C" cfile
-    mkfile "Buffer.H" bufferH
-    mkfile "Buffer.C" $ bufferC "Buffer.H"
+    mkCppFile "Absyn.H" hfile
+    mkCppFile "Absyn.C" cfile
+    mkCppFile "Buffer.H" bufferH
+    mkCppFile "Buffer.C" $ bufferC "Buffer.H"
     let (flex, env) = cf2flex parserMode cf
-    mkfile (name ++ ".l") flex
-    let bison = cf2Bison (linenumbers opts) parserMode cf env
-    mkfile (name ++ ".y") bison
-    let header = mkHeaderFile (inPackage opts) cf (allParserCats cf) (toList $ allEntryPoints cf) (Map.elems env)
-    mkfile "Parser.H" header
-    mkfile "ParserError.H" $ printParseErrHeader (inPackage opts)
+    mkCppFileWithHint (name ++ ".l") flex
+    mkCppFileWithHint (name ++ ".y") $ cf2Bison (linenumbers opts) parserMode cf env
+    mkCppFile "Parser.H" $
+      mkHeaderFile (inPackage opts) cf (allParserCats cf) (toList $ allEntryPoints cf) (Map.elems env)
+    mkCppFile "ParserError.H" $ printParseErrHeader (inPackage opts)
     let (skelH, skelC) = cf2CVisitSkel True (inPackage opts) cf
-    mkfile "Skeleton.H" skelH
-    mkfile "Skeleton.C" skelC
+    mkCppFile "Skeleton.H" skelH
+    mkCppFile "Skeleton.C" skelC
     let (prinH, prinC) = cf2CPPPrinter True (inPackage opts) cf
-    mkfile "Printer.H" prinH
-    mkfile "Printer.C" prinC
-    mkfile "Test.C" (cpptest (inPackage opts) cf)
+    mkCppFile "Printer.H" prinH
+    mkCppFile "Printer.C" prinC
+    mkCppFile "Test.C" (cpptest (inPackage opts) cf)
     Makefile.mkMakefile opts $ makefile prefix name
   where
     name :: String
@@ -60,6 +58,8 @@
     prefix = snakeCase_ name ++ "_"
     parserMode :: ParserMode
     parserMode = CppParser (inPackage opts) prefix
+    mkCppFile         x = mkfile x comment
+    mkCppFileWithHint x = mkfile x commentWithEmacsModeHint
 
 printParseErrHeader :: Maybe String -> String
 printParseErrHeader inPackage =
@@ -86,15 +86,9 @@
      ]
 
 cpptest :: Maybe String -> CF -> String
-cpptest inPackage cf =
-  unlines
-   [
-    "/*** Compiler Front-End Test automatically generated by the BNF Converter ***/",
-    "/*                                                                          */",
-    "/* This test will parse a file, print the abstract syntax tree, and then    */",
-    "/* pretty-print the result.                                                 */",
-    "/*                                                                          */",
-    "/****************************************************************************/",
+cpptest inPackage cf = unlines $ concat
+  [ testfileHeader
+  , [ "",
     "#include <cstdio>",
     "#include <string>",
     "#include <iostream>",
@@ -163,19 +157,21 @@
     "  return 1;",
     "}",
     ""
-   ]
+    ]
+  ]
   where
    cat = firstEntry cf
    dat = identCat $ normCat cat
    def = identCat cat
    scope = nsScope inPackage
 
-mkHeaderFile inPackage cf cats eps env = unlines $ concat
+mkHeaderFile inPackage _cf _cats eps _env = unlines $ concat
   [ [ "#ifndef " ++ hdef
     , "#define " ++ hdef
     , ""
     , "#include<vector>"
     , "#include<string>"
+    , "#include<cstdio>"
     , "#include \"Absyn.H\""
     , ""
     , nsStart inPackage
diff --git a/src/BNFC/Backend/CPP/STL/CFtoCVisitSkelSTL.hs b/src/BNFC/Backend/CPP/STL/CFtoCVisitSkelSTL.hs
--- a/src/BNFC/Backend/CPP/STL/CFtoCVisitSkelSTL.hs
+++ b/src/BNFC/Backend/CPP/STL/CFtoCVisitSkelSTL.hs
@@ -103,7 +103,7 @@
        where field = v ++ "->" ++ var
 
 headerC = unlines [
-      "/*** BNFC-Generated Visitor Design Pattern Skeleton. ***/",
+      "/*** Visitor Design Pattern Skeleton. ***/",
       "/* This implements the common visitor design pattern.",
       "   Note that this method uses Visitor-traversal of lists, so",
       "   List->accept() does NOT traverse the list. This allows different",
diff --git a/src/BNFC/Backend/CPP/STL/CFtoSTLAbs.hs b/src/BNFC/Backend/CPP/STL/CFtoSTLAbs.hs
--- a/src/BNFC/Backend/CPP/STL/CFtoSTLAbs.hs
+++ b/src/BNFC/Backend/CPP/STL/CFtoSTLAbs.hs
@@ -49,7 +49,7 @@
   "#include<string>",
   "#include<vector>",
   "",
-  "//C++ Abstract Syntax Interface generated by the BNF Converter.",
+  "//C++ Abstract Syntax Interface.",
   nsStart inPackage,
   "/********************   TypeDef Section    ********************/",
   "",
@@ -162,7 +162,7 @@
 
 mkCFile :: Maybe String -> CAbs -> CF -> String
 mkCFile inPackage cabs cf = unlines $ [
-  "//C++ Abstract Syntax Implementation generated by the BNF Converter.",
+  "//C++ Abstract Syntax Implementation.",
   "#include <algorithm>",
   "#include <string>",
   "#include <vector>",
diff --git a/src/BNFC/Backend/Common/Makefile.hs b/src/BNFC/Backend/Common/Makefile.hs
--- a/src/BNFC/Backend/Common/Makefile.hs
+++ b/src/BNFC/Backend/Common/Makefile.hs
@@ -60,5 +60,5 @@
 -- | Create the Makefile file using the name specified in the option record.
 --
 mkMakefile :: SharedOptions -> (String -> Doc) -> Backend
-mkMakefile Options{make = Just m } mkContent = mkfile m (mkContent m)
+mkMakefile Options{make = Just m } mkContent = mkfile m ("## " ++) (mkContent m)
 mkMakefile Options{make = Nothing} _         = return ()
diff --git a/src/BNFC/Backend/Haskell.hs b/src/BNFC/Backend/Haskell.hs
--- a/src/BNFC/Backend/Haskell.hs
+++ b/src/BNFC/Backend/Haskell.hs
@@ -4,6 +4,7 @@
 
 -}
 
+{-# LANGUAGE NamedFieldPuns #-}
 {-# LANGUAGE OverloadedStrings #-}
 
 module BNFC.Backend.Haskell (makeHaskell, AlexVersion(..), makefile, testfile) where
@@ -26,12 +27,15 @@
 import BNFC.Backend.Haskell.MkErrM
 import BNFC.Backend.Haskell.Utils
 import BNFC.Backend.Txt2Tag
-import BNFC.Backend.XML
+import BNFC.Backend.XML (makeXML)
 import qualified BNFC.Backend.Common.Makefile as Makefile
 
 import BNFC.CF
-import BNFC.Options hiding (Backend)
-import BNFC.Utils (when, unless, table, getZonedTimeTruncatedToSeconds)
+import BNFC.Options
+  ( SharedOptions(..), TokenText(..), AlexVersion(..), HappyMode(..)
+  , isDefault, printOptions
+  )
+import BNFC.Utils (when, table, getZonedTimeTruncatedToSeconds)
 
 
 -- | Entrypoint for the Haskell backend.
@@ -49,31 +53,31 @@
       errMod = errFileM opts
   do
     -- Generate abstract syntax and pretty printer.
-    mkfile (absFile opts) $ cf2Abstract opts absMod cf
-    mkfile (printerFile opts) $ cf2Printer (tokenText opts) (functor opts) False prMod absMod cf
+    mkfile (absFile opts) comment $ cf2Abstract opts absMod cf
+    mkfile (printerFile opts) comment $ cf2Printer (tokenText opts) (functor opts) False prMod absMod cf
 
     -- Generate Alex lexer.  Layout is resolved after lexing.
     case alexMode opts of
       Alex3 -> do
-        mkfile (alexFile opts) $ cf2alex3 lexMod (tokenText opts) cf
+        mkfile (alexFile opts) commentWithEmacsModeHint $ cf2alex3 lexMod (tokenText opts) cf
         liftIO $ printf "Use Alex 3 to compile %s.\n" (alexFile opts)
 
-    Ctrl.when (hasLayout cf) $ mkfile (layoutFile opts) $
+    Ctrl.when (hasLayout cf) $ mkfile (layoutFile opts) comment $
       cf2Layout layMod lexMod cf
 
     -- Generate Happy parser and matching test program.
     do
-      mkfile (happyFile opts) $
+      mkfile (happyFile opts) commentWithEmacsModeHint $
         cf2Happy parMod absMod lexMod (glr opts) (tokenText opts) (functor opts) cf
       -- liftIO $ printf "%s Tested with Happy 1.15\n" (happyFile opts)
-      mkfile (tFile opts)        $ testfile opts cf
+      mkfile (tFile opts) comment $ testfile opts cf
 
     -- Both Happy parser and skeleton (template) rely on Err.
-    mkfile (errFile opts) $ mkErrM errMod
-    mkfile (templateFile opts) $ cf2Template (templateFileM opts) absMod (functor opts) cf
+    mkfile (errFile opts) comment $ mkErrM errMod
+    mkfile (templateFile opts) comment $ cf2Template (templateFileM opts) absMod (functor opts) cf
 
     -- Generate txt2tags documentation.
-    mkfile (txtFile opts)      $ cfToTxt (lang opts) cf
+    mkfile (txtFile opts) t2tComment $ cfToTxt (lang opts) cf
 
     -- Generate XML and DTD printers.
     case xml opts of
@@ -166,7 +170,7 @@
 
 makefileHeader :: Options -> Doc
 makefileHeader Options{ glr } = vcat
-  [ "# Makefile generated by BNFC."
+  [ "# Makefile for building the parser and test program."
   , ""
   , "GHC        = ghc"
   , "HAPPY      = happy"
@@ -292,7 +296,7 @@
 
 testfile :: Options -> CF -> String
 testfile opts cf = unlines $ concat $
-  [ [ "-- Program to test parser, automatically generated by BNF Converter."
+  [ [ "-- | Program to test parser."
     , ""
     , "module Main where"
     , ""
diff --git a/src/BNFC/Backend/Haskell/CFtoAbstract.hs b/src/BNFC/Backend/Haskell/CFtoAbstract.hs
--- a/src/BNFC/Backend/Haskell/CFtoAbstract.hs
+++ b/src/BNFC/Backend/Haskell/CFtoAbstract.hs
@@ -38,11 +38,7 @@
 -- generic   :: Bool      -- ^ Derive @Data@, Generic@, @Typeable@?
 -- functor   :: Bool      -- ^ Make the tree a functor?
 cf2Abstract Options{ lang, tokenText, generic, functor } name cf = vsep . concat $
-    [ [ vcat
-        [ "-- Haskell data types for the abstract syntax."
-        , "-- Generated by the BNF converter."
-        ]
-      ]
+    [ []
 
     -- Modules header
     , [ vcat . concat $
@@ -297,7 +293,7 @@
 definedRules :: Bool -> CF -> [Doc]
 definedRules functor cf = map mkDef $ definitions cf
   where
-  mkDef (Define f args e t) = vcat $ concat
+  mkDef (Define f args e _) = vcat $ concat
     [ [ text $ unwords [ fName, "::", typ $ wpThing t ]
       | t <- maybeToList $ sigLookup f cf
       ]
diff --git a/src/BNFC/Backend/Haskell/CFtoAlex3.hs b/src/BNFC/Backend/Haskell/CFtoAlex3.hs
--- a/src/BNFC/Backend/Haskell/CFtoAlex3.hs
+++ b/src/BNFC/Backend/Haskell/CFtoAlex3.hs
@@ -6,6 +6,9 @@
 
 -}
 
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+
 module BNFC.Backend.Haskell.CFtoAlex3 (cf2alex3) where
 
 import Data.Char
@@ -32,8 +35,7 @@
 
 prelude :: String -> TokenText -> [String]
 prelude name tokenText = concat
-  [ [ "-- -*- haskell -*-"
-    , "-- This Alex file was machine-generated by the BNF converter"
+  [ [ "-- Lexer definition for use with Alex 3"
     , "{"
     , "{-# OPTIONS -fno-warn-incomplete-patterns #-}"
     , "{-# OPTIONS_GHC -w #-}"
diff --git a/src/BNFC/Backend/Haskell/CFtoHappy.hs b/src/BNFC/Backend/Haskell/CFtoHappy.hs
--- a/src/BNFC/Backend/Haskell/CFtoHappy.hs
+++ b/src/BNFC/Backend/Haskell/CFtoHappy.hs
@@ -59,7 +59,7 @@
 -- | Construct the header.
 header :: ModuleName -> ModuleName -> ModuleName -> TokenText -> [Cat] -> String
 header modName absName lexName tokenText eps = unlines $ concat
-  [ [ "-- This Happy file was machine-generated by the BNF converter"
+  [ [ "-- Parser definition for use with Happy"
     , "{"
     , "{-# OPTIONS_GHC -fno-warn-incomplete-patterns -fno-warn-overlapping-patterns #-}"
     , "{-# LANGUAGE PatternSynonyms #-}"
@@ -255,7 +255,7 @@
 -- Finally, some haskell code.
 
 footer :: ModuleName -> TokenText -> Bool -> [Cat] -> CF -> String
-footer absName tokenText functor eps cf = unlines $ concat
+footer absName tokenText functor eps _cf = unlines $ concat
   [ [ "{"
     , ""
     , "type Err = Either String"
diff --git a/src/BNFC/Backend/Haskell/CFtoLayout.hs b/src/BNFC/Backend/Haskell/CFtoLayout.hs
--- a/src/BNFC/Backend/Haskell/CFtoLayout.hs
+++ b/src/BNFC/Backend/Haskell/CFtoLayout.hs
@@ -5,12 +5,13 @@
 
 -}
 
+{-# LANGUAGE OverloadedStrings #-}
+
 module BNFC.Backend.Haskell.CFtoLayout where
 
-import Data.Maybe                 ( fromMaybe )
+import Data.Maybe                 ( fromMaybe, mapMaybe )
 
 import BNFC.CF
-import BNFC.Options               ( TokenText )
 import BNFC.PrettyPrint
 import BNFC.Utils                 ( caseMaybe, for, whenJust )
 
@@ -22,9 +23,7 @@
 
 cf2Layout :: String -> String -> CF -> String
 cf2Layout layName lexName cf = unlines $ concat
-  [ [ "-- Generated by the BNF Converter"
-    , ""
-    , "{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}"
+  [ [ "{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}"
     , ""
     , "{-# LANGUAGE LambdaCase #-}"
     , "{-# LANGUAGE PatternGuards #-}"
@@ -70,6 +69,10 @@
       , [ "map (delimSep . snd) layoutWords" ]
       ]
     , ""
+    , "parenOpen, parenClose :: [TokSymbol]"
+    , render $ prettyList 2 "parenOpen  =" "[" "]" "," $ map (text . show) parenOpen
+    , render $ prettyList 2 "parenClose =" "[" "]" "," $ map (text . show) parenClose
+    , ""
     , "-- | Replace layout syntax with explicit layout tokens."
     , "resolveLayout :: Bool    -- ^ Whether to use top-level layout."
     , "              -> [Token] -> [Token]"
@@ -101,11 +104,11 @@
     , "    -- put an explicit layout block on the stack."
     , "    -- This is done even if there was no layout word,"
     , "    -- to keep opening and closing braces."
-    , "    | isLayoutOpen t0"
+    , "    | isLayoutOpen t0 || isParenOpen t0"
     , "      = t0 : res (Just t0) (Explicit : st) ts"
     , ""
     , "    -- If we encounter a closing brace, exit the first explicit layout block."
-    , "    | isLayoutClose t0"
+    , "    | isLayoutClose t0 || isParenClose t0"
     , "      , let (imps, rest) = span isImplicit st"
     , "      , let st' = drop 1 rest"
     , "      = if null st'"
@@ -332,19 +335,28 @@
     , "-- | Check if a token is the layout close token."
     , "isLayoutClose :: Token -> Bool"
     , "isLayoutClose = isTokenIn layoutClose"
+    , ""
+    , "-- | Check if a token is an opening parenthesis."
+    , "isParenOpen :: Token -> Bool"
+    , "isParenOpen = isTokenIn parenOpen"
+    , ""
+    , "-- | Check if a token is a closing parenthesis."
+    , "isParenClose :: Token -> Bool"
+    , "isParenClose = isTokenIn parenClose"
     ]
   ]
   where
   (top0, lay0, stop0) = layoutPragmas cf
-  top      = fmap mkTokSymbol top0
+  top      = mkTokSymbol =<< top0
   topDelim = fmap (\ sep -> LayoutDelimiters sep Nothing Nothing) top
   lay      = for lay0 $ \ (kw, Delimiters sep open close) ->
-    ( mkTokSymbol kw
-    , LayoutDelimiters (mkTokSymbol sep) (Just $ mkTokSymbol open) (Just $ mkTokSymbol close)
+    ( fromMaybe undefined $ mkTokSymbol kw
+    , LayoutDelimiters (fromMaybe undefined $ mkTokSymbol sep) (mkTokSymbol open) (mkTokSymbol close)
     )
-  stop = map mkTokSymbol stop0
-  mkTokSymbol :: String -> TokSymbol
-  mkTokSymbol x = TokSymbol x n
-    where
-    n = fromMaybe (-1) $ lookup x tokens
+  stop = mapMaybe mkTokSymbol stop0
+  mkTokSymbol :: String -> Maybe TokSymbol
+  mkTokSymbol x = TokSymbol x <$> lookup x tokens
   tokens = cfTokens cf
+  -- Extra parentheses to keep track of (#370).
+  parenOpen  = mapMaybe mkTokSymbol [ "(", "[" ]
+  parenClose = mapMaybe mkTokSymbol [ ")", "]" ]
diff --git a/src/BNFC/Backend/Haskell/CFtoPrinter.hs b/src/BNFC/Backend/Haskell/CFtoPrinter.hs
--- a/src/BNFC/Backend/Haskell/CFtoPrinter.hs
+++ b/src/BNFC/Backend/Haskell/CFtoPrinter.hs
@@ -68,10 +68,10 @@
     , "#endif"
     ]
   , [ ""
-    , "{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}"
-    , ""
+    -- -- WAS: Needed for precedence category lists, e.g. @[Exp2]@:
+    -- , "{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}"
+    -- , ""
     , "-- | Pretty-printer for " ++ takeWhile ('.' /=) name ++ "."
-    , "--   Generated by the BNF converter."
     , ""
     , "module " ++ name +++ "where"
     , ""
@@ -219,7 +219,7 @@
 doubleRule absMod cf = showsPrintRule absMod cf $ TokenCat catDouble
 
 showsPrintRule :: AbsMod -> CF -> Cat -> [Doc]
-showsPrintRule absMod cf t =
+showsPrintRule absMod _cf t =
   [ hsep [ "instance Print" , text (qualifiedCat absMod t) , "where" ]
   , "  prt _ x = doc (shows x)"
   , ""
@@ -293,7 +293,7 @@
 
       -- Special printing of lists (precedence changes concrete syntax!)
       if isList cat then
-        map mkPrtListCase $ List.sortBy compareRules $ rulesForNormalizedCat cf cat
+        listCases $ List.sortBy compareRules $ rulesForNormalizedCat cf cat
 
       -- Ordinary category
       else
@@ -311,6 +311,20 @@
       ListCat c    -> "[" <> type' c <> "]"
       c@TokenCat{} -> text (qualifiedCat absMod c)
       c            -> text (qualifiedCat absMod c) <> "' a"
+    listCases [] = []
+    listCases rules = concat
+      [ [ "prt _ [] = concatD []" | not $ any isNilFun rules ]
+            -- Andreas, 2021-09-22, issue #386
+            -- If the list is @nonempty@ according to the grammar, still add a nil case.
+            -- In the AST it is simply a list, and the AST could be created
+            -- by other means than by parsing.
+      , map (mkPrtListCase minPrec) rules
+      ]
+      where
+      -- Andreas, 2021-09-22, issue #384:
+      -- The minimum precedence of a rule lhs category in the rules set.
+      -- This is considered the default precedence; used to make the printing function total.
+      minPrec = minimum $ map precRule rules
 
 -- | When writing the Print instance for a category (in case_fun), we have
 -- a different case for each constructor for this category.
@@ -369,34 +383,38 @@
 
 -- | Pattern match on the list constructor and the coercion level
 --
--- >>> mkPrtListCase (npRule "[]" (ListCat (Cat "Foo")) [] Parsable)
+-- >>> mkPrtListCase 0 (npRule "[]" (ListCat (Cat "Foo")) [] Parsable)
 -- prt _ [] = concatD []
 --
--- >>> mkPrtListCase (npRule "(:[])" (ListCat (Cat "Foo")) [Left (Cat "FOO")] Parsable)
+-- >>> mkPrtListCase 0 (npRule "(:[])" (ListCat (Cat "Foo")) [Left (Cat "FOO")] Parsable)
 -- prt _ [x] = concatD [prt 0 x]
 --
--- >>> mkPrtListCase (npRule "(:)" (ListCat (Cat "Foo")) [Left (Cat "Foo"), Left (ListCat (Cat "Foo"))] Parsable)
+-- >>> mkPrtListCase 0 (npRule "(:)" (ListCat (Cat "Foo")) [Left (Cat "Foo"), Left (ListCat (Cat "Foo"))] Parsable)
 -- prt _ (x:xs) = concatD [prt 0 x, prt 0 xs]
 --
--- >>> mkPrtListCase (npRule "[]" (ListCat (CoercCat "Foo" 2)) [] Parsable)
+-- >>> mkPrtListCase 0 (npRule "[]" (ListCat (CoercCat "Foo" 2)) [] Parsable)
 -- prt 2 [] = concatD []
 --
--- >>> mkPrtListCase (npRule "(:[])" (ListCat (CoercCat "Foo" 2)) [Left (CoercCat "Foo" 2)] Parsable)
+-- >>> mkPrtListCase 0 (npRule "(:[])" (ListCat (CoercCat "Foo" 2)) [Left (CoercCat "Foo" 2)] Parsable)
 -- prt 2 [x] = concatD [prt 2 x]
 --
--- >>> mkPrtListCase (npRule "(:)" (ListCat (CoercCat "Foo" 2)) [Left (CoercCat "Foo" 2), Left (ListCat (CoercCat "Foo" 2))] Parsable)
--- prt 2 (x:xs) = concatD [prt 2 x, prt 2 xs]
+-- >>> mkPrtListCase 2 (npRule "(:)" (ListCat (CoercCat "Foo" 2)) [Left (CoercCat "Foo" 2), Left (ListCat (CoercCat "Foo" 2))] Parsable)
+-- prt _ (x:xs) = concatD [prt 2 x, prt 2 xs]
 --
-mkPrtListCase :: Rule -> Doc
-mkPrtListCase (Rule f (WithPosition _ (ListCat c)) rhs _internal)
+mkPrtListCase
+  :: Integer -- ^ The lowest precedence of a lhs in a list rule.  Default: 0.
+  -> Rule    -- ^ The list rule.
+  -> Doc
+mkPrtListCase minPrec (Rule f (WithPosition _ (ListCat c)) rhs _internal)
   | isNilFun f = "prt" <+> precPattern <+> "[]" <+> "=" <+> body
   | isOneFun f = "prt" <+> precPattern <+> "[x]" <+> "=" <+> body
   | isConsFun f = "prt" <+> precPattern <+> "(x:xs)" <+> "=" <+> body
   | otherwise = empty -- (++) constructor
   where
-    precPattern = case precCat c of 0 -> "_" ; p -> integer p
+    precPattern = if p <= minPrec then "_" else integer p
+    p = precCat c
     body = mkRhs ["x", "xs"] rhs
-mkPrtListCase _ = error "mkPrtListCase undefined for non-list categories"
+mkPrtListCase _ _ = error "mkPrtListCase undefined for non-list categories"
 
 
 -- | Define an ordering on lists' rules with the following properties:
diff --git a/src/BNFC/Backend/Haskell/CFtoTemplate.hs b/src/BNFC/Backend/Haskell/CFtoTemplate.hs
--- a/src/BNFC/Backend/Haskell/CFtoTemplate.hs
+++ b/src/BNFC/Backend/Haskell/CFtoTemplate.hs
@@ -17,7 +17,7 @@
 
 cf2Template :: ModuleName -> ModuleName -> Bool -> CF -> String
 cf2Template skelName absName functor cf = unlines $ concat
-  [ [ "-- Haskell module generated by the BNF converter"
+  [ [ "-- Templates for pattern matching on abstract syntax"
     , ""
     , noWarnUnusedMatches
     , ""
diff --git a/src/BNFC/Backend/Haskell/Utils.hs b/src/BNFC/Backend/Haskell/Utils.hs
--- a/src/BNFC/Backend/Haskell/Utils.hs
+++ b/src/BNFC/Backend/Haskell/Utils.hs
@@ -2,7 +2,8 @@
 {-# LANGUAGE OverloadedStrings #-}
 
 module BNFC.Backend.Haskell.Utils
-  ( posType, posConstr, noPosConstr
+  ( comment, commentWithEmacsModeHint
+  , posType, posConstr, noPosConstr
   , hasPositionClass, hasPositionMethod
   , noWarnUnusedMatches
   , parserName
@@ -23,6 +24,16 @@
 import BNFC.CF      (Cat(..), catToStr, identCat, baseTokenCatNames, Base, Type(FunT), IsFun(..))
 import BNFC.Options (TokenText(..))
 import BNFC.Utils   (mkNames, NameStyle(..))
+
+-- | Haskell line comments.
+
+comment :: String -> String
+comment = ("-- " ++)
+
+-- | Haskell line comment including mode hint for emacs.
+
+commentWithEmacsModeHint :: String -> String
+commentWithEmacsModeHint = comment . ("-*- haskell -*- " ++)
 
 -- * GHC pragmas
 
diff --git a/src/BNFC/Backend/HaskellGADT.hs b/src/BNFC/Backend/HaskellGADT.hs
--- a/src/BNFC/Backend/HaskellGADT.hs
+++ b/src/BNFC/Backend/HaskellGADT.hs
@@ -12,6 +12,7 @@
 import BNFC.Options
 import BNFC.Backend.Base hiding (Backend)
 import BNFC.Backend.Haskell.HsOpts
+import BNFC.Backend.Haskell.Utils (comment, commentWithEmacsModeHint)
 import BNFC.CF
 import BNFC.Backend.Haskell.CFtoHappy
 import BNFC.Backend.Haskell.CFtoAlex3
@@ -19,7 +20,7 @@
 import BNFC.Backend.HaskellGADT.CFtoTemplateGADT
 import BNFC.Backend.Haskell.CFtoPrinter
 import BNFC.Backend.Haskell.CFtoLayout
-import BNFC.Backend.XML
+import BNFC.Backend.XML (makeXML)
 import BNFC.Backend.Haskell.MkErrM
 import qualified BNFC.Backend.Common.Makefile as Makefile
 import qualified BNFC.Backend.Haskell as Haskell
@@ -37,26 +38,27 @@
       layMod = layoutFileM opts
       errMod = errFileM opts
   do
-    mkfile (absFile opts) $ cf2Abstract (tokenText opts) absMod cf composOpMod
-    mkfile (composOpFile opts) $ composOp composOpMod
-    case alexMode opts of
-      Alex3 -> do
-        mkfile (alexFile opts) $ cf2alex3 lexMod (tokenText opts) cf
-        liftIO $ putStrLn "   (Use Alex 3 to compile.)"
-    mkfile (happyFile opts) $
+    mkHsFile (absFile opts) $ cf2Abstract (tokenText opts) absMod cf composOpMod
+    mkHsFile (composOpFile opts) $ composOp composOpMod
+    mkHsFileHint (alexFile opts) $ cf2alex3 lexMod (tokenText opts) cf
+    liftIO $ putStrLn "   (Use Alex 3 to compile.)"
+    mkHsFileHint (happyFile opts) $
       cf2Happy parMod absMod lexMod (glr opts) (tokenText opts) False cf
     liftIO $ putStrLn "   (Tested with Happy 1.15 - 1.20)"
-    mkfile (templateFile opts) $ cf2Template (templateFileM opts) absMod cf
-    mkfile (printerFile opts)  $ cf2Printer StringToken False True prMod absMod cf
-    when (hasLayout cf) $ mkfile (layoutFile opts) $
+    mkHsFile (templateFile opts) $ cf2Template (templateFileM opts) absMod cf
+    mkHsFile (printerFile opts)  $ cf2Printer StringToken False True prMod absMod cf
+    when (hasLayout cf) $ mkHsFile (layoutFile opts) $
       cf2Layout layMod lexMod cf
-    mkfile (tFile opts)        $ Haskell.testfile opts cf
-    mkfile (errFile opts) $ mkErrM errMod
+    mkHsFile (tFile opts)        $ Haskell.testfile opts cf
+    mkHsFile (errFile opts) $ mkErrM errMod
     Makefile.mkMakefile opts $ Haskell.makefile opts cf
     case xml opts of
       2 -> makeXML opts True cf
       1 -> makeXML opts False cf
       _ -> return ()
+  where
+  mkHsFile x = mkfile x comment
+  mkHsFileHint x = mkfile x commentWithEmacsModeHint
 
 composOp :: String -> String
 composOp composOpMod = unlines
diff --git a/src/BNFC/Backend/HaskellGADT/CFtoAbstractGADT.hs b/src/BNFC/Backend/HaskellGADT/CFtoAbstractGADT.hs
--- a/src/BNFC/Backend/HaskellGADT/CFtoAbstractGADT.hs
+++ b/src/BNFC/Backend/HaskellGADT/CFtoAbstractGADT.hs
@@ -20,8 +20,7 @@
 
 cf2Abstract :: TokenText -> String -> CF -> String -> String
 cf2Abstract tokenText name cf composOpMod = unlines $ concat $
-  [ [ "-- Haskell module generated by the BNF converter"
-    , "-- For GHC version 7.10 or higher"
+  [ [ "-- For GHC version 7.10 or higher"
     , ""
     , "{-# LANGUAGE GADTs, KindSignatures, DataKinds #-}"
     ]
diff --git a/src/BNFC/Backend/HaskellGADT/CFtoTemplateGADT.hs b/src/BNFC/Backend/HaskellGADT/CFtoTemplateGADT.hs
--- a/src/BNFC/Backend/HaskellGADT/CFtoTemplateGADT.hs
+++ b/src/BNFC/Backend/HaskellGADT/CFtoTemplateGADT.hs
@@ -22,8 +22,6 @@
     , ""
     , noWarnUnusedMatches
     , ""
-    , "-- Haskell module generated by the BNF converter"
-    , ""
     , "module "++ skelName ++ " where"
     , ""
     , "import Prelude (Either(..), Show(..), String, ($), (++))"
diff --git a/src/BNFC/Backend/Java.hs b/src/BNFC/Backend/Java.hs
--- a/src/BNFC/Backend/Java.hs
+++ b/src/BNFC/Backend/Java.hs
@@ -1,4 +1,6 @@
 {-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 {-
     BNF Converter: Java Top File
@@ -82,12 +84,12 @@
                 (head $ results lexmake) -- lexer class
                 (head $ results parmake) -- parser class
             )
-        makebnfcfile x = mkfile (javaex (fst $ x bnfcfiles))
+        makebnfcfile x = mkfile (javaex (fst $ x bnfcfiles)) comment
                                         (snd $ x bnfcfiles)
 
     let absynFiles = remDups $ cf2JavaAbs dirAbsyn packageBase packageAbsyn cf rp
         absynFileNames = map fst absynFiles
-    mapM_ (\ (n, s) -> mkfile (n <.> "java") s) absynFiles
+    mapM_ (\ (n, s) -> mkfile (n <.> "java") comment s) absynFiles
     makebnfcfile bprettyprinter
     makebnfcfile bskel
     makebnfcfile bcompos
@@ -97,11 +99,11 @@
     makebnfcfile btest
     let (lex, env) = lexfun packageBase cf
     -- Where the lexer file is created. lex is the content!
-    mkfile (dirBase </> inputfile lexmake ) lex
+    mkfile (dirBase </> inputfile lexmake ) commentWithEmacsModeHint lex
     liftIO $ putStrLn $ "   (Tested with" +++ toolname lexmake
                                           +++ toolversion lexmake  ++ ")"
     -- where the parser file is created.
-    mkfile (dirBase </> inputfile parmake)
+    mkfile (dirBase </> inputfile parmake) commentWithEmacsModeHint
           $ parsefun packageBase packageAbsyn cf rp env
     liftIO $ putStrLn $
       if supportsEntryPoints parmake
@@ -125,6 +127,7 @@
     parmake      = makeparserdetails (parser parselexspec)
     lexmake      = makelexerdetails  (lexer parselexspec)
     rp           = (Options.linenumbers options)
+    commentWithEmacsModeHint = comment . ("-*- Java -*- " ++)
 
 makefile ::  FilePath -> FilePath -> [String] -> ParserLexerSpecification -> String -> Doc
 makefile  dirBase dirAbsyn absynFileNames jlexpar basename = vcat $
diff --git a/src/BNFC/Backend/Java/CFtoAbstractVisitor.hs b/src/BNFC/Backend/Java/CFtoAbstractVisitor.hs
--- a/src/BNFC/Backend/Java/CFtoAbstractVisitor.hs
+++ b/src/BNFC/Backend/Java/CFtoAbstractVisitor.hs
@@ -15,7 +15,7 @@
 cf2AbstractVisitor packageBase packageAbsyn cf = unlines
     [ "package" +++ packageBase ++ ";"
     , ""
-    , "/** BNFC-Generated Abstract Visitor */"
+    , "/** Abstract Visitor */"
     , ""
     , "public class AbstractVisitor<R,A> implements AllVisitor<R,A> {"
     , concatMap (prData packageAbsyn user) groups
diff --git a/src/BNFC/Backend/Java/CFtoAllVisitor.hs b/src/BNFC/Backend/Java/CFtoAllVisitor.hs
--- a/src/BNFC/Backend/Java/CFtoAllVisitor.hs
+++ b/src/BNFC/Backend/Java/CFtoAllVisitor.hs
@@ -7,7 +7,7 @@
 
 module BNFC.Backend.Java.CFtoAllVisitor (cf2AllVisitor) where
 
-import Data.List
+import Data.List (intercalate)
 import BNFC.CF
 import BNFC.Utils ((+++))
 import BNFC.Backend.Common.NamedVariables
@@ -17,7 +17,7 @@
 cf2AllVisitor packageBase packageAbsyn cf = unlines $ concat
   [ [ "package" +++ packageBase ++ ";"
     , ""
-    , "/** BNFC-Generated All Visitor */"
+    , "/** All Visitor */"
     , ""
     , "public interface AllVisitor<R,A>" ++ if null is then "" else " extends"
     ]
diff --git a/src/BNFC/Backend/Java/CFtoAntlr4Lexer.hs b/src/BNFC/Backend/Java/CFtoAntlr4Lexer.hs
--- a/src/BNFC/Backend/Java/CFtoAntlr4Lexer.hs
+++ b/src/BNFC/Backend/Java/CFtoAntlr4Lexer.hs
@@ -48,7 +48,7 @@
 -- | File prelude
 prelude ::  String -> Doc
 prelude packageBase = vcat
-    [ "// This Antlr4 file was machine-generated by the BNF converter"
+    [ "// Lexer definition for use with Antlr4"
     , "lexer grammar" <+> text name <> "Lexer;"
     ]
     where name = getLastInPackage packageBase
diff --git a/src/BNFC/Backend/Java/CFtoAntlr4Parser.hs b/src/BNFC/Backend/Java/CFtoAntlr4Parser.hs
--- a/src/BNFC/Backend/Java/CFtoAntlr4Parser.hs
+++ b/src/BNFC/Backend/Java/CFtoAntlr4Parser.hs
@@ -61,7 +61,7 @@
   where
     header :: String
     header = unlines
-        [ "// -*- Java -*- This ANTLRv4 file was machine-generated by BNFC"
+        [ "// Parser definition for use with ANTLRv4"
         , "parser grammar" +++ identifier ++ "Parser;"
         ]
     tokens :: String
diff --git a/src/BNFC/Backend/Java/CFtoComposVisitor.hs b/src/BNFC/Backend/Java/CFtoComposVisitor.hs
--- a/src/BNFC/Backend/Java/CFtoComposVisitor.hs
+++ b/src/BNFC/Backend/Java/CFtoComposVisitor.hs
@@ -36,7 +36,7 @@
     is     = map (prInterface packageAbsyn) groups
     header = unlines $ concat
       [ [ "package" +++ packageBase ++ ";"
-        , "/** BNFC-Generated Composition Visitor"
+        , "/** Composition Visitor"
         , "*/"
         , ""
         , "public class ComposVisitor<A>" ++ if null is then "" else " implements"
diff --git a/src/BNFC/Backend/Java/CFtoCup15.hs b/src/BNFC/Backend/Java/CFtoCup15.hs
--- a/src/BNFC/Backend/Java/CFtoCup15.hs
+++ b/src/BNFC/Backend/Java/CFtoCup15.hs
@@ -16,7 +16,6 @@
 
 module BNFC.Backend.Java.CFtoCup15 ( cf2Cup ) where
 
-import Data.Char
 import Data.List (intercalate)
 
 import BNFC.CF
@@ -24,7 +23,6 @@
 import BNFC.Utils ( (+++) )
 
 import BNFC.Backend.Common.NamedVariables
-import BNFC.Backend.Java.CFtoJavaAbs15    ( typename )
 import BNFC.Backend.Java.Utils            ( getRuleName )
 
 type Rules   = [(NonTerminal,[(Pattern,Action)])]
@@ -46,7 +44,7 @@
   where
     header :: String
     header = unlines
-      [ "// -*- Java -*- This Cup file was machine-generated by BNFC"
+      [ "// Parser definition for use with Java Cup"
       , "package" +++ packageBase ++ ";"
       , ""
       , "action code {:"
diff --git a/src/BNFC/Backend/Java/CFtoFoldVisitor.hs b/src/BNFC/Backend/Java/CFtoFoldVisitor.hs
--- a/src/BNFC/Backend/Java/CFtoFoldVisitor.hs
+++ b/src/BNFC/Backend/Java/CFtoFoldVisitor.hs
@@ -23,7 +23,7 @@
   unlines
     ["package" +++ packageBase ++ ";",
      "",
-     "/** BNFC-Generated Fold Visitor */",
+     "/** Fold Visitor */",
      "public abstract class FoldVisitor<R,A> implements AllVisitor<R,A> {",
      "    public abstract R leaf(A arg);",
      "    public abstract R combine(R x, R y, A arg);",
diff --git a/src/BNFC/Backend/Java/CFtoJLex15.hs b/src/BNFC/Backend/Java/CFtoJLex15.hs
--- a/src/BNFC/Backend/Java/CFtoJLex15.hs
+++ b/src/BNFC/Backend/Java/CFtoJLex15.hs
@@ -1,4 +1,6 @@
 {-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TupleSections #-}
 
 {-
     BNF Converter: Java JLex generator
@@ -42,7 +44,7 @@
 -- | File prelude.
 prelude :: JavaLexerParser -> RecordPositions -> String -> Doc
 prelude jflex rp packageBase = vcat
-    [ hsep [ "// This", lexerName, "file was machine-generated by the BNF converter" ]
+    [ hsep [ "// Lexer definition for use with", lexerName ]
     , "package" <+> text packageBase <> ";"
     , ""
     , "import java_cup.runtime.*;"
diff --git a/src/BNFC/Backend/Java/CFtoJavaAbs15.hs b/src/BNFC/Backend/Java/CFtoJavaAbs15.hs
--- a/src/BNFC/Backend/Java/CFtoJavaAbs15.hs
+++ b/src/BNFC/Backend/Java/CFtoJavaAbs15.hs
@@ -29,13 +29,13 @@
 import Data.Function   ( on )
 import Data.List       ( findIndices, intercalate )
 import Data.Maybe      ( mapMaybe )
-import System.FilePath ( (<.>), (</>) )
+import System.FilePath ( (</>) )
 import Text.PrettyPrint as P
 
 import BNFC.CF
 import BNFC.Options     ( RecordPositions(..) )
 import BNFC.TypeChecker ( buildContext, ctxTokens, isToken )
-import BNFC.Utils       ( (+++), (++++), uncurry3, unless )
+import BNFC.Utils       ( (+++), (++++), unless )
 
 import BNFC.Backend.Common.NamedVariables ( UserDef, showNum )
 import BNFC.Backend.Java.Utils            ( getRuleName )
@@ -61,12 +61,12 @@
   , map (first mkPath) $ concatMap (prData rp header packageAbsyn user) rules
   ]
   where
-  header = "package " ++ packageAbsyn ++ "; // Java Package generated by the BNF Converter.\n"
+  header = "package " ++ packageAbsyn ++ ";\n"
   user   = [ n | (n,_) <- tokenPragmas cf ]
   rules  = getAbstractSyntax cf
   defs   = definitions cf
   deftext= concat
-   [ [ "package " ++ packageBase ++ "; // Java Package generated by the BNF Converter."
+   [ [ "package " ++ packageBase ++ ";"
      , ""
      , "public class AbsynDef {"
      , ""
diff --git a/src/BNFC/Backend/Java/CFtoJavaPrinter15.hs b/src/BNFC/Backend/Java/CFtoJavaPrinter15.hs
--- a/src/BNFC/Backend/Java/CFtoJavaPrinter15.hs
+++ b/src/BNFC/Backend/Java/CFtoJavaPrinter15.hs
@@ -33,7 +33,6 @@
 import Data.Char      ( toLower, isSpace )
 import Data.Either    ( lefts )
 import Data.List      ( intersperse )
-import Data.Maybe     ( isJust )
 
 import BNFC.CF
 import BNFC.PrettyPrint
diff --git a/src/BNFC/Backend/Java/CFtoVisitSkel15.hs b/src/BNFC/Backend/Java/CFtoVisitSkel15.hs
--- a/src/BNFC/Backend/Java/CFtoVisitSkel15.hs
+++ b/src/BNFC/Backend/Java/CFtoVisitSkel15.hs
@@ -45,7 +45,7 @@
     header = unlines [
       "package" +++ packageBase ++ ";",
       "",
-      "/*** BNFC-Generated Visitor Design Pattern Skeleton. ***/",
+      "/*** Visitor Design Pattern Skeleton. ***/",
       "",
       "/* This implements the common visitor design pattern.",
       "   Tests show it to be slightly less efficient than the",
diff --git a/src/BNFC/Backend/Java/RegToAntlrLexer.hs b/src/BNFC/Backend/Java/RegToAntlrLexer.hs
--- a/src/BNFC/Backend/Java/RegToAntlrLexer.hs
+++ b/src/BNFC/Backend/Java/RegToAntlrLexer.hs
@@ -2,7 +2,7 @@
 
 -- modified from RegToJLex.hs
 
-import Data.Char (ord, showLitChar)
+import Data.Char (ord)
 import Numeric (showHex)
 
 import BNFC.Abs
diff --git a/src/BNFC/Backend/Java/RegToJLex.hs b/src/BNFC/Backend/Java/RegToJLex.hs
--- a/src/BNFC/Backend/Java/RegToJLex.hs
+++ b/src/BNFC/Backend/Java/RegToJLex.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE LambdaCase #-}
+
 module BNFC.Backend.Java.RegToJLex (printRegJLex, escapeChar) where
 
 import Data.Char           (ord, showLitChar)
diff --git a/src/BNFC/Backend/Java/Utils.hs b/src/BNFC/Backend/Java/Utils.hs
--- a/src/BNFC/Backend/Java/Utils.hs
+++ b/src/BNFC/Backend/Java/Utils.hs
@@ -4,6 +4,11 @@
 import BNFC.Utils ( mkName, NameStyle(..))
 import BNFC.Backend.Common.NamedVariables
 
+-- | Make a Java line comment
+
+comment :: String -> String
+comment = ("// " ++)
+
 javaReserved =
   [ "abstract"
   , "assert"
diff --git a/src/BNFC/Backend/Latex.hs b/src/BNFC/Backend/Latex.hs
--- a/src/BNFC/Backend/Latex.hs
+++ b/src/BNFC/Backend/Latex.hs
@@ -24,7 +24,7 @@
 makeLatex :: SharedOptions -> CF -> Backend
 makeLatex opts cf = do
     let texfile = name <.> "tex"
-    mkfile texfile (cfToLatex name cf)
+    mkfile texfile comment (cfToLatex name cf)
     Makefile.mkMakefile opts (makefile texfile)
   where name = lang opts
 
@@ -58,6 +58,9 @@
         auxfile = replaceExtension texfile "aux"
         logfile = replaceExtension texfile "log"
 
+comment :: String -> String
+comment = ("%% " ++)
+
 -- | Create content of .tex file.
 cfToLatex :: String -> CF -> String
 cfToLatex name cf = unlines
@@ -275,8 +278,7 @@
 
 beginDocument :: String -> String
 beginDocument name = unlines
- [ "%This Latex file is machine-generated by the BNF-converter"
- , ""
+ [ ""
  , "\\documentclass[a4paper,11pt]{article}"
  , "\\usepackage[T1]{fontenc}"
  , "\\usepackage[utf8x]{inputenc}"
diff --git a/src/BNFC/Backend/OCaml.hs b/src/BNFC/Backend/OCaml.hs
--- a/src/BNFC/Backend/OCaml.hs
+++ b/src/BNFC/Backend/OCaml.hs
@@ -11,21 +11,23 @@
 
 import System.FilePath (pathSeparator, (</>))
 
-import BNFC.Backend.Base hiding (Backend)
+import BNFC.Backend.Base                    (MkFiles, mkfile)
 import BNFC.Backend.Common.Makefile
 import BNFC.Backend.OCaml.CFtoOCamlAbs
 import BNFC.Backend.OCaml.CFtoOCamlLex
 import BNFC.Backend.OCaml.CFtoOCamlPrinter
 import BNFC.Backend.OCaml.CFtoOCamlShow
 import BNFC.Backend.OCaml.CFtoOCamlTemplate
-import BNFC.Backend.OCaml.CFtoOCamlTest
+import BNFC.Backend.OCaml.CFtoOCamlTest     (ocamlTestfile)
 import BNFC.Backend.OCaml.CFtoOCamlYacc
-import BNFC.Backend.XML
+import BNFC.Backend.XML                     (makeXML)
 import BNFC.CF
 import BNFC.Options
 import BNFC.PrettyPrint
 import BNFC.Utils
 
+import qualified BNFC.Backend.C as C
+
 -- naming conventions
 
 noLang :: SharedOptions -> String -> String
@@ -78,21 +80,24 @@
       prMod  = printerFileM opts
       showMod = showFileM opts
   do
-    mkfile (absFile opts) $ cf2Abstract absMod cf
-    mkfile (ocamllexFile opts) $ cf2ocamllex lexMod parMod cf
-    mkfile (ocamlyaccFile opts) $
-                 cf2ocamlyacc parMod absMod lexMod  cf
-    mkfile (templateFile opts) $ cf2Template (templateFileM opts) absMod cf
-    mkfile (printerFile opts)  $ cf2Printer prMod absMod cf
-    mkfile (showFile opts)  $ cf2show showMod absMod cf
-    mkfile (tFile opts) $ ocamlTestfile absMod lexMod parMod prMod showMod cf
-    mkfile (utilFile opts) utilM
+    mkfile (absFile opts)       comment $ cf2Abstract absMod cf
+    mkfile (ocamllexFile opts)  comment $ cf2ocamllex lexMod parMod cf
+    mkfile (ocamlyaccFile opts) C.comment $
+      cf2ocamlyacc (ocamlParser opts) parMod absMod lexMod  cf
+    mkfile (templateFile opts)  comment $ cf2Template (templateFileM opts) absMod cf
+    mkfile (printerFile opts)   comment $ cf2Printer prMod absMod cf
+    mkfile (showFile opts)      comment $ cf2show showMod absMod cf
+    mkfile (tFile opts)         comment $ ocamlTestfile absMod lexMod parMod prMod showMod cf
+    mkfile (utilFile opts)      comment $ utilM
     mkMakefile opts $ makefile opts
     case xml opts of
       2 -> makeXML opts True cf
       1 -> makeXML opts False cf
       _ -> return ()
 
+comment :: String -> String
+comment x = unwords [ "(*", x, "*)" ]
+
 pkgToDir :: String -> FilePath
 pkgToDir = replace '.' pathSeparator
 
@@ -140,9 +145,7 @@
 
 utilM :: String
 utilM = unlines
-    ["(* automatically generated by BNFC *)",
-     "",
-     "open Lexing",
+    ["open Lexing",
      "",
      "(* this should really be in the parser, but ocamlyacc won't put it in the .mli *)",
      "exception Parse_error of Lexing.position * Lexing.position"
diff --git a/src/BNFC/Backend/OCaml/CFtoOCamlAbs.hs b/src/BNFC/Backend/OCaml/CFtoOCamlAbs.hs
--- a/src/BNFC/Backend/OCaml/CFtoOCamlAbs.hs
+++ b/src/BNFC/Backend/OCaml/CFtoOCamlAbs.hs
@@ -20,10 +20,7 @@
 -- to produce an OCaml module
 cf2Abstract :: String -> CF -> String
 cf2Abstract _ cf = unlines $ concat
-  [ [ "(* OCaml module generated by the BNF converter *)"
-    , ""
-    ]
-  , mutualRecDefs $ concat
+  [ mutualRecDefs $ concat
     [ map (prSpecialData cf) (specialCats cf)
     , map prData (cf2data cf)
     ]
@@ -40,7 +37,7 @@
 definedRules :: CF -> [String]
 definedRules cf = map mkDef $ definitions cf
   where
-    mkDef (Define f args e t) =
+    mkDef (Define f args e _) =
       "let " ++ sanitizeOcaml (funName f) ++ " " ++ mkTuple (map fst args) ++ " = " ++ ocamlExp False e
 
     ocamlExp :: Bool -> Exp -> String
diff --git a/src/BNFC/Backend/OCaml/CFtoOCamlLex.hs b/src/BNFC/Backend/OCaml/CFtoOCamlLex.hs
--- a/src/BNFC/Backend/OCaml/CFtoOCamlLex.hs
+++ b/src/BNFC/Backend/OCaml/CFtoOCamlLex.hs
@@ -37,7 +37,7 @@
 
 header :: String -> CF -> [String]
 header parserMod cf = List.intercalate [""] . filter (not . null) $ concat
-  [ [ [ "(* This ocamllex file was machine-generated by the BNF converter *)"
+  [ [ [ "(* Lexer definition for ocamllex. *)"
       , ""
       , "(* preamble *)"
       , "{"
@@ -199,7 +199,7 @@
     , ( "'\\'' (([^ '\\\'' '\\\\']) | ('\\\\' ('\\\\' | '\\\'' | 'n' | 't' | 'r'))) '\\\''"
       , "TOK_Char (lexeme lexbuf).[1]")
     -- spaces
-    , ( "[' ' '\\t']", "token lexbuf")
+    , ( "[' ' '\\t' '\\r']", "token lexbuf")
     -- new lines
     , ( "'\\n'", "incr_lineno lexbuf; token lexbuf" )
     -- end of file
diff --git a/src/BNFC/Backend/OCaml/CFtoOCamlPrinter.hs b/src/BNFC/Backend/OCaml/CFtoOCamlPrinter.hs
--- a/src/BNFC/Backend/OCaml/CFtoOCamlPrinter.hs
+++ b/src/BNFC/Backend/OCaml/CFtoOCamlPrinter.hs
@@ -39,7 +39,7 @@
 
 prologue :: String
 prologue = unlines [
-  "(* pretty-printer generated by the BNF converter *)",
+  "(* pretty-printer *)",
   "",
   "open Printf",
   "",
@@ -174,9 +174,10 @@
 --   mkListRule rs = unlines $ ("and prt" ++ fixTypeUpper cat ++ "ListBNFC" +++ "_ es : doc = match es with"):rs
 
 ifList :: CF -> Cat -> String
-ifList cf cat = render $
-  case cases of
-    []         -> empty
+ifList cf cat
+  | null rules = ""
+  | otherwise  = render $ case cases of
+    []         -> empty  -- IMPOSSIBLE CASE when (rules /= [])
     first:rest -> vcat
         [ "and prt" <> text (fixTypeUpper cat)  <> "ListBNFC i es : doc = match (i, es) with"
         , nest 4 first
@@ -184,39 +185,53 @@
         ]
   where
     rules = sortBy compareRules $ rulesForNormalizedCat cf (ListCat cat)
-    cases = [ d | r <- rules, let d = mkPrtListCase r, not (isEmpty d) ]
-
+    cases = concat
+      [ [ "(_,[]) -> (concatD [])" | not $ any isNilFun rules ]
+            -- Andreas, 2021-09-22, issue #386
+            -- If the list is @nonempty@ according to the grammar, still add a nil case.
+            -- In the AST it is simply a list, and the AST could be created
+            -- by other means than by parsing.
+      , [ d | r <- rules, let d = mkPrtListCase minPrec r, not (isEmpty d) ]
+      ]
+    -- Andreas, 2021-09-22, issue #384:
+    -- The minimum precedence of a rule lhs category in the rules set.
+    -- This is considered the default precedence; used to make the printing function total.
+    minPrec = minimum $ map precRule rules
 
 -- | Pattern match on the list constructor and the coercion level
 --
--- >>> mkPrtListCase (npRule "[]" (ListCat (Cat "Foo")) [] Parsable)
+-- >>> mkPrtListCase 0 (npRule "[]" (ListCat (Cat "Foo")) [] Parsable)
 -- (_,[]) -> (concatD [])
 --
--- >>> mkPrtListCase (npRule "(:[])" (ListCat (Cat "Foo")) [Left (Cat "Foo")] Parsable)
+-- >>> mkPrtListCase 0 (npRule "(:[])" (ListCat (Cat "Foo")) [Left (Cat "Foo")] Parsable)
 -- (_,[x]) -> (concatD [prtFoo 0 x])
 --
--- >>> mkPrtListCase (npRule "(:)" (ListCat (Cat "Foo")) [Left (Cat "Foo"), Left (ListCat (Cat "Foo"))] Parsable)
+-- >>> mkPrtListCase 0 (npRule "(:)" (ListCat (Cat "Foo")) [Left (Cat "Foo"), Left (ListCat (Cat "Foo"))] Parsable)
 -- (_,x::xs) -> (concatD [prtFoo 0 x ; prtFooListBNFC 0 xs])
 --
--- >>> mkPrtListCase (npRule "[]" (ListCat (CoercCat "Foo" 2)) [] Parsable)
+-- >>> mkPrtListCase 0 (npRule "[]" (ListCat (CoercCat "Foo" 2)) [] Parsable)
 -- (2,[]) -> (concatD [])
 --
--- >>> mkPrtListCase (npRule "(:[])" (ListCat (CoercCat "Foo" 2)) [Left (CoercCat "Foo" 2)] Parsable)
+-- >>> mkPrtListCase 0 (npRule "(:[])" (ListCat (CoercCat "Foo" 2)) [Left (CoercCat "Foo" 2)] Parsable)
 -- (2,[x]) -> (concatD [prtFoo 2 x])
 --
--- >>> mkPrtListCase (npRule "(:)" (ListCat (CoercCat "Foo" 2)) [Left (CoercCat "Foo" 2), Left (ListCat (CoercCat "Foo" 2))] Parsable)
--- (2,x::xs) -> (concatD [prtFoo 2 x ; prtFooListBNFC 2 xs])
+-- >>> mkPrtListCase 2 (npRule "(:)" (ListCat (CoercCat "Foo" 2)) [Left (CoercCat "Foo" 2), Left (ListCat (CoercCat "Foo" 2))] Parsable)
+-- (_,x::xs) -> (concatD [prtFoo 2 x ; prtFooListBNFC 2 xs])
 --
-mkPrtListCase :: Rule -> Doc
-mkPrtListCase (Rule f (WithPosition _ (ListCat c)) rhs _)
+mkPrtListCase
+  :: Integer -- ^ The lowest precedence of a lhs in a list rule.  Default: 0.
+  -> Rule    -- ^ The list rule.
+  -> Doc
+mkPrtListCase minPrec (Rule f (WithPosition _ (ListCat c)) rhs _)
   | isNilFun f  = parens (precPattern <> "," <> "[]") <+> "->" <+> body
   | isOneFun f  = parens (precPattern <> "," <> "[x]") <+> "->" <+> body
   | isConsFun f = parens (precPattern <> "," <>"x::xs") <+> "->" <+> body
   | otherwise = empty -- (++) constructor
   where
-    precPattern = case precCat c of 0 -> "_" ; p -> integer p
+    precPattern = if p <= minPrec then "_" else integer p
+    p = precCat c
     body = text $ mkRhs ["x", "xs"] rhs
-mkPrtListCase _ = error "mkPrtListCase undefined for non-list categories"
+mkPrtListCase _ _ = error "mkPrtListCase undefined for non-list categories"
 
 mkRhs args its =
   "(concatD [" ++ unwords (intersperse ";" (mk args its)) ++ "])"
diff --git a/src/BNFC/Backend/OCaml/CFtoOCamlShow.hs b/src/BNFC/Backend/OCaml/CFtoOCamlShow.hs
--- a/src/BNFC/Backend/OCaml/CFtoOCamlShow.hs
+++ b/src/BNFC/Backend/OCaml/CFtoOCamlShow.hs
@@ -32,7 +32,7 @@
 
 prologue :: String
 prologue = unlines [
-  "(* show functions generated by the BNF converter *)\n",
+  "(* show functions *)",
   "",
   "(* use string buffers for efficient string concatenations *)",
   "type showable = Buffer.t -> unit",
diff --git a/src/BNFC/Backend/OCaml/CFtoOCamlTemplate.hs b/src/BNFC/Backend/OCaml/CFtoOCamlTemplate.hs
--- a/src/BNFC/Backend/OCaml/CFtoOCamlTemplate.hs
+++ b/src/BNFC/Backend/OCaml/CFtoOCamlTemplate.hs
@@ -23,7 +23,6 @@
 cf2Template skelName absName cf = unlines
   [
   "module "++ skelName ++ " = struct\n",
-  "(* OCaml module generated by the BNF converter *)\n",
   "open " ++ absName ++ "\n",
   "type result = string\n",
   "let failure x = failwith \"Undefined case.\" (* x discarded *)\n",
diff --git a/src/BNFC/Backend/OCaml/CFtoOCamlTest.hs b/src/BNFC/Backend/OCaml/CFtoOCamlTest.hs
--- a/src/BNFC/Backend/OCaml/CFtoOCamlTest.hs
+++ b/src/BNFC/Backend/OCaml/CFtoOCamlTest.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE OverloadedStrings #-}
 
 {-
     BNF Converter: Generate main/test module for OCaml
@@ -40,9 +41,7 @@
           ]
         topType     = text (fixTypeQual absM $ normCat cat)
     in vcat
-        [ comment "automatically generated by the BNF Converter"
-        , ""
-        , "open Lexing"
+        [ "open Lexing"
         , ""
         , "let parse (c : in_channel) :" <+> topType <+> "="
         , nest 4 (parserName <+> lexerName <+> "(Lexing.from_channel c)")
@@ -74,8 +73,13 @@
             , nest 4 $ vcat
                 [ "Printf.printf \"Parse error at %d.%d-%d.%d\\n\""
                 , nest 4 $ vcat
-                    [ "start_pos.pos_lnum (start_pos.pos_cnum - start_pos.pos_bol)"
-                    , "end_pos.pos_lnum (end_pos.pos_cnum - end_pos.pos_bol);" ]
+                    -- Andreas, 2021-09-16, issue #380:
+                    -- To have column counting start with 1 (and not with 0), we have to
+                    -- add 1 to the difference between current offset and the offset of the
+                    -- beginning of the line.
+                    -- See e.g. https://github.com/let-def/ocamllex/blob/e5c8421f8fe56017e9b4e58c3496356631843802/lexer.mll#L54
+                    [ "start_pos.pos_lnum (start_pos.pos_cnum - start_pos.pos_bol + 1)"
+                    , "end_pos.pos_lnum (end_pos.pos_cnum - end_pos.pos_bol + 1);" ]
                 , "exit 1" ]]
         , ";;"
         , ""
diff --git a/src/BNFC/Backend/OCaml/CFtoOCamlYacc.hs b/src/BNFC/Backend/OCaml/CFtoOCamlYacc.hs
--- a/src/BNFC/Backend/OCaml/CFtoOCamlYacc.hs
+++ b/src/BNFC/Backend/OCaml/CFtoOCamlYacc.hs
@@ -18,7 +18,8 @@
 import Data.Foldable (toList)
 
 import BNFC.CF
-import BNFC.Utils ((+++))
+import BNFC.Options ( OCamlParser(..) )
+import BNFC.Utils   ( (+++) )
 import BNFC.Backend.Common
 import BNFC.Backend.OCaml.OCamlUtil
 
@@ -30,19 +31,19 @@
 
 -- The main function, that given a CF
 -- generates a ocamlyacc module.
-cf2ocamlyacc :: String -> String -> String -> CF -> String
-cf2ocamlyacc name absName lexName cf
+cf2ocamlyacc :: OCamlParser -> String -> String -> String -> CF -> String
+cf2ocamlyacc ocamlParser name absName lexName cf
  = unlines
     [header name absName lexName cf,
     declarations absName cf,
     "%%",
-    rules cf
+    rules ocamlParser cf
     ]
 
 
 header :: String -> String -> String -> CF -> String
-header _ absName _ cf = unlines
-         ["/* This ocamlyacc file was machine-generated by the BNF converter */",
+header _ absName _ _ = unlines
+         ["/* Parser definition for use with ocamlyacc */",
           "%{",
           "open " ++ absName,
           "open Lexing",
@@ -133,18 +134,33 @@
                     [] -> []
                     c:cs -> toUpper c : cs
 
-entryPointRules :: CF -> String
-entryPointRules cf = unlines $ map mkRule $ toList $ allEntryPoints cf
-    where
-        mkRule :: Cat -> String
-        mkRule s = unlines [
-            epName s ++ " : " ++ nonterminal s ++ " TOK_EOF { $1 }",
-            "  | error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };"
-            ]
+entryPointRules :: OCamlParser -> CF -> String
+entryPointRules ocamlParser cf =
+  unlines $ map mkRule $ toList $ allEntryPoints cf
+  where
+  mkRule :: Cat -> String
+  mkRule s = unlines
+    [ epName s ++ " : " ++ nonterminal s ++ " TOK_EOF { $1 }"
+    , concat
+      [ "  | error { raise (BNFC_Util.Parse_error ("
+        -- Andreas, 2021-09-16, issue #380
+        -- menhir has dedicated macros for position info,
+        -- the use of the @Parsing@ structure is deprecated
+        -- (and does not seem to work).
+      , case ocamlParser of
+          OCamlYacc -> "Parsing.symbol_start_pos ()"
+          Menhir    -> "$symbolstartpos"
+      , ", "
+      , case ocamlParser of
+          OCamlYacc -> "Parsing.symbol_end_pos ()"
+          Menhir    -> "$endpos"
+      , ")) };"
+      ]
+    ]
 
-rules :: CF -> String
-rules cf = unlines [
-    entryPointRules cf,
+rules :: OCamlParser -> CF -> String
+rules ocamlParser cf = unlines [
+    entryPointRules ocamlParser cf,
     (unlines $ map (prOne . mkOne) (ruleGroups cf)),
     specialRules cf
     ]
diff --git a/src/BNFC/Backend/Pygments.hs b/src/BNFC/Backend/Pygments.hs
--- a/src/BNFC/Backend/Pygments.hs
+++ b/src/BNFC/Backend/Pygments.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE OverloadedStrings #-}
 
 {- Generates a Pygments lexer from a BNF grammar.
  -
@@ -23,9 +24,12 @@
 makePygments opts cf = do
     let lexerfile = render (lowerCase name <> "/__init__.py")
         setupfile = "setup.py"
-    mkfile lexerfile (lexer name cf)
-    mkfile setupfile (setup name)
+    mkfile lexerfile comment (lexer name cf)
+    mkfile setupfile comment (setup name)
   where name = lang opts
+
+comment :: String -> String
+comment = ("# " ++)
 
 setup :: String -> Doc
 setup name = vcat
diff --git a/src/BNFC/Backend/Txt2Tag.hs b/src/BNFC/Backend/Txt2Tag.hs
--- a/src/BNFC/Backend/Txt2Tag.hs
+++ b/src/BNFC/Backend/Txt2Tag.hs
@@ -4,8 +4,10 @@
 
 -}
 
-module BNFC.Backend.Txt2Tag (cfToTxt)where
+{-# LANGUAGE LambdaCase #-}
 
+module BNFC.Backend.Txt2Tag (cfToTxt, t2tComment) where
+
 import qualified Data.List as List
 
 import BNFC.Abs (Reg (..))
@@ -201,7 +203,6 @@
  "BNF Converter",
  "",
  "",
- "%This txt2tags file is machine-generated by the BNF-converter",
  "%Process by txt2tags to generate html or latex",
  ""
  ]
@@ -227,3 +228,6 @@
   ifPar i j s = if i > j then "(" ++ s ++ ")" else s
 
 quote s = "``" ++ s ++ "``"
+
+t2tComment :: String -> String
+t2tComment = ("%% " ++)
diff --git a/src/BNFC/Backend/XML.hs b/src/BNFC/Backend/XML.hs
--- a/src/BNFC/Backend/XML.hs
+++ b/src/BNFC/Backend/XML.hs
@@ -4,6 +4,9 @@
 
 -}
 
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+
 module BNFC.Backend.XML ---- (cf2DTD, cf2XML)
   where
 
@@ -15,20 +18,21 @@
 import BNFC.CF
 import BNFC.PrettyPrint
 import BNFC.Utils
-import BNFC.Backend.Base
-import BNFC.Options hiding ( Backend )
+import BNFC.Backend.Base (Backend, mkfile)
+import BNFC.Options (SharedOptions(..), pattern TargetHaskellGadt)
 import BNFC.Backend.Haskell.CFtoTemplate ()
 import BNFC.Backend.Haskell.HsOpts ( xmlFile, xmlFileM, absFileM )
 import BNFC.Backend.Haskell.Utils  ( catToVar )
+import qualified BNFC.Backend.Haskell.Utils as Haskell
 
 type Coding = Bool ---- change to at least three values
 
 makeXML :: SharedOptions -> Coding -> CF -> Backend
 makeXML opts typ cf = do
   let name = lang opts
-  mkfile (name ++ ".dtd") $ cf2DTD typ name cf
+  mkfile (name ++ ".dtd") comment $ cf2DTD typ name cf
   let absmod = "XML" ++ name
-  mkfile (xmlFile opts) $ cf2XMLPrinter typ opts absmod cf
+  mkfile (xmlFile opts) Haskell.comment $ cf2XMLPrinter typ opts absmod cf
 
 -- derive a DTD from a BNF grammar. AR 21/8/2004
 cf2DTD :: Coding -> String -> CF -> String
@@ -44,6 +48,9 @@
   "]>"
   ]
 
+comment :: String -> String
+comment x = unwords [ "<!--", x, "-->" ]
+
 -- | >>> tag "test"
 -- "<test>"
 tag :: String -> String
@@ -148,7 +155,7 @@
 
 prologue :: Bool -> SharedOptions -> String -> String
 prologue b opts _ = unlines [
-  "-- pretty-printer generated by the BNF converter",
+  "-- Pretty printing to XML",
   "",
   "module " ++ xmlFileM opts +++ "where",
   "",
diff --git a/src/BNFC/CF.hs b/src/BNFC/CF.hs
--- a/src/BNFC/CF.hs
+++ b/src/BNFC/CF.hs
@@ -23,9 +23,9 @@
 import Data.Ord      ( Down(..) )
 import qualified Data.Either as Either
 import Data.Function ( on )
-import Data.List     ( nub, intersperse, sort, group, intercalate, find )
+import Data.List     ( nub, sort, group )
 import qualified Data.List as List
-import Data.List.NonEmpty (pattern (:|), (<|))
+import Data.List.NonEmpty (pattern (:|))
 import qualified Data.List.NonEmpty as List1
 import Data.Maybe
 import Data.Map  (Map)
@@ -40,7 +40,7 @@
 import qualified BNFC.Abs as Abs
 
 import BNFC.PrettyPrint
-import BNFC.Utils (headWithDefault, spanEnd)
+import BNFC.Utils (spanEnd)
 
 type List1 = List1.NonEmpty
 
diff --git a/src/BNFC/Check/EmptyTypes.hs b/src/BNFC/Check/EmptyTypes.hs
--- a/src/BNFC/Check/EmptyTypes.hs
+++ b/src/BNFC/Check/EmptyTypes.hs
@@ -12,11 +12,9 @@
 
 import Data.Maybe
 import Data.Map (Map)
-import Data.Set (Set)
 
 import qualified Data.List as List
 import qualified Data.Map as Map
-import qualified Data.Set as Set
 
 import BNFC.CF
 
diff --git a/src/BNFC/Lex.hs b/src/BNFC/Lex.hs
new file mode 100644
--- /dev/null
+++ b/src/BNFC/Lex.hs
@@ -0,0 +1,596 @@
+{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-missing-signatures #-}
+{-# LANGUAGE CPP,MagicHash #-}
+{-# LINE 5 "BNFC/Lex.x" #-}
+
+{-# OPTIONS -fno-warn-incomplete-patterns #-}
+{-# OPTIONS_GHC -w #-}
+
+{-# LANGUAGE PatternSynonyms #-}
+
+module BNFC.Lex where
+
+import Prelude
+
+import qualified Data.Bits
+import Data.Char     (ord)
+import Data.Function (on)
+import Data.Word     (Word8)
+
+#if __GLASGOW_HASKELL__ >= 603
+#include "ghcconfig.h"
+#elif defined(__GLASGOW_HASKELL__)
+#include "config.h"
+#endif
+#if __GLASGOW_HASKELL__ >= 503
+import Data.Array
+#else
+import Array
+#endif
+#if __GLASGOW_HASKELL__ >= 503
+import Data.Array.Base (unsafeAt)
+import GHC.Exts
+#else
+import GlaExts
+#endif
+alex_tab_size :: Int
+alex_tab_size = 8
+alex_base :: AlexAddr
+alex_base = AlexA#
+  "\xf8\xff\xff\xff\x49\x00\x00\x00\xc9\xff\xff\xff\xe0\xff\xff\xff\xc9\x00\x00\x00\x9c\x01\x00\x00\x2d\x00\x00\x00\x1c\x02\x00\x00\x9c\x02\x00\x00\x1c\x03\x00\x00\x9c\x03\x00\x00\x1c\x04\x00\x00\x9c\x04\x00\x00\x0d\x05\x00\x00\x00\x00\x00\x00\x8d\x05\x00\x00\x00\x00\x00\x00\xfe\x05\x00\x00\x00\x00\x00\x00\x6f\x06\x00\x00\x00\x00\x00\x00\x0b\x01\x00\x00\x00\x00\x00\x00\xb0\x06\x00\x00\x00\x00\x00\x00\xf1\x06\x00\x00\xf1\x07\x00\x00\xb1\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x08\x00\x00\x22\x09\x00\x00\xe2\x08\x00\x00\x00\x00\x00\x00\xbb\x09\x00\x00\xbb\x0a\x00\x00\xc1\x09\x00\x00\x7b\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x0a\x00\x00\xdb\xff\xff\xff\x47\x00\x00\x00\x72\x00\x00\x00\xb2\x0b\x00\x00\x3d\x0b\x00\x00\x32\x0c\x00\x00\xf2\x0c\x00\x00\xb2\x0c\x00\x00\x00\x00\x00\x00\xa8\x0d\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\xdc\xff\xff\xff\xdd\xff\xff\xff\x00\x00\x00\x00\xdf\xff\xff\xff\x81\x0e\x00\x00\xe4\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\xb9\x09\x00\x00\x8c\x00\x00\x00"#
+
+alex_table :: AlexAddr
+alex_table = AlexA#
+  "\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x37\x00\x3c\x00\x2b\x00\x32\x00\x05\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x34\x00\x02\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x35\x00\x37\x00\x00\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x38\x00\x37\x00\x00\x00\x37\x00\x00\x00\x37\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x37\x00\x03\x00\x37\x00\x00\x00\x37\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x36\x00\x37\x00\x37\x00\x01\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x2a\x00\x00\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x33\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1b\x00\x0a\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0f\x00\x0e\x00\x0e\x00\x0e\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x01\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1b\x00\x0a\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0f\x00\x0e\x00\x0e\x00\x0e\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x23\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x1f\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x1a\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x08\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x09\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x17\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x20\x00\x09\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x17\x00\x0c\x00\x10\x00\x10\x00\x10\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3b\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x00\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x25\x00\x08\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x19\x00\x0b\x00\x12\x00\x12\x00\x12\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x30\x00\x04\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x28\x00\x07\x00\x1d\x00\x1d\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x2e\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+alex_check :: AlexAddr
+alex_check = AlexA#
+  "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x3d\x00\x27\x00\x2d\x00\x2d\x00\x2d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\x20\x00\x3a\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x27\x00\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x2d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\x74\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xc3\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x2d\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x27\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x22\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+
+alex_deflt :: AlexAddr
+alex_deflt = AlexA#
+  "\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x14\x00\xff\xff\x16\x00\x16\x00\x18\x00\x18\x00\x1c\x00\x1c\x00\x21\x00\x21\x00\x26\x00\x26\x00\x05\x00\x05\x00\x05\x00\x27\x00\x27\x00\x03\x00\x03\x00\x03\x00\x03\x00\x2c\x00\xff\xff\x2c\x00\x2c\x00\x31\x00\x31\x00\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\x32\x00\x32\x00\x32\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+
+alex_accept = listArray (0 :: Int, 63)
+  [ AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccSkip
+  , AlexAccSkip
+  , AlexAccSkip
+  , AlexAcc 10
+  , AlexAcc 9
+  , AlexAcc 8
+  , AlexAcc 7
+  , AlexAcc 6
+  , AlexAcc 5
+  , AlexAcc 4
+  , AlexAcc 3
+  , AlexAcc 2
+  , AlexAcc 1
+  , AlexAcc 0
+  ]
+
+alex_actions = array (0 :: Int, 11)
+  [ (10,alex_action_3)
+  , (9,alex_action_3)
+  , (8,alex_action_3)
+  , (7,alex_action_3)
+  , (6,alex_action_4)
+  , (5,alex_action_5)
+  , (4,alex_action_6)
+  , (3,alex_action_7)
+  , (2,alex_action_8)
+  , (1,alex_action_9)
+  , (0,alex_action_9)
+  ]
+
+{-# LINE 73 "BNFC/Lex.x" #-}
+
+-- | Create a token with position.
+tok :: (String -> Tok) -> (Posn -> String -> Token)
+tok f p = PT p . f
+
+-- | Token without position.
+data Tok
+  = TK {-# UNPACK #-} !TokSymbol  -- ^ Reserved word or symbol.
+  | TL !String                    -- ^ String literal.
+  | TI !String                    -- ^ Integer literal.
+  | TV !String                    -- ^ Identifier.
+  | TD !String                    -- ^ Float literal.
+  | TC !String                    -- ^ Character literal.
+  | T_Identifier !String
+  deriving (Eq, Show, Ord)
+
+-- | Smart constructor for 'Tok' for the sake of backwards compatibility.
+pattern TS :: String -> Int -> Tok
+pattern TS t i = TK (TokSymbol t i)
+
+-- | Keyword or symbol tokens have a unique ID.
+data TokSymbol = TokSymbol
+  { tsText :: String
+      -- ^ Keyword or symbol text.
+  , tsID   :: !Int
+      -- ^ Unique ID.
+  } deriving (Show)
+
+-- | Keyword/symbol equality is determined by the unique ID.
+instance Eq  TokSymbol where (==)    = (==)    `on` tsID
+
+-- | Keyword/symbol ordering is determined by the unique ID.
+instance Ord TokSymbol where compare = compare `on` tsID
+
+-- | Token with position.
+data Token
+  = PT  Posn Tok
+  | Err Posn
+  deriving (Eq, Show, Ord)
+
+-- | Pretty print a position.
+printPosn :: Posn -> String
+printPosn (Pn _ l c) = "line " ++ show l ++ ", column " ++ show c
+
+-- | Pretty print the position of the first token in the list.
+tokenPos :: [Token] -> String
+tokenPos (t:_) = printPosn (tokenPosn t)
+tokenPos []    = "end of file"
+
+-- | Get the position of a token.
+tokenPosn :: Token -> Posn
+tokenPosn (PT p _) = p
+tokenPosn (Err p)  = p
+
+-- | Get line and column of a token.
+tokenLineCol :: Token -> (Int, Int)
+tokenLineCol = posLineCol . tokenPosn
+
+-- | Get line and column of a position.
+posLineCol :: Posn -> (Int, Int)
+posLineCol (Pn _ l c) = (l,c)
+
+-- | Convert a token into "position token" form.
+mkPosToken :: Token -> ((Int, Int), String)
+mkPosToken t = (tokenLineCol t, tokenText t)
+
+-- | Convert a token to its text.
+tokenText :: Token -> String
+tokenText t = case t of
+  PT _ (TS s _) -> s
+  PT _ (TL s)   -> show s
+  PT _ (TI s)   -> s
+  PT _ (TV s)   -> s
+  PT _ (TD s)   -> s
+  PT _ (TC s)   -> s
+  Err _         -> "#error"
+  PT _ (T_Identifier s) -> s
+
+-- | Convert a token to a string.
+prToken :: Token -> String
+prToken t = tokenText t
+
+-- | Finite map from text to token organized as binary search tree.
+data BTree
+  = N -- ^ Nil (leaf).
+  | B String Tok BTree BTree
+      -- ^ Binary node.
+  deriving (Show)
+
+-- | Convert potential keyword into token or use fallback conversion.
+eitherResIdent :: (String -> Tok) -> String -> Tok
+eitherResIdent tv s = treeFind resWords
+  where
+  treeFind N = tv s
+  treeFind (B a t left right) =
+    case compare s a of
+      LT -> treeFind left
+      GT -> treeFind right
+      EQ -> t
+
+-- | The keywords and symbols of the language organized as binary search tree.
+resWords :: BTree
+resWords =
+  b "delimiters" 20
+    (b ";" 10
+       (b "," 5
+          (b "*" 3 (b ")" 2 (b "(" 1 N N) N) (b "+" 4 N N))
+          (b ":" 8 (b "." 7 (b "-" 6 N N) N) (b "::=" 9 N N)))
+       (b "_" 15
+          (b "[" 13 (b "?" 12 (b "=" 11 N N) N) (b "]" 14 N N))
+          (b "comment" 18
+             (b "coercions" 17 (b "char" 16 N N) N) (b "define" 19 N N))))
+    (b "rules" 30
+       (b "layout" 25
+          (b "eps" 23
+             (b "entrypoints" 22 (b "digit" 21 N N) N) (b "internal" 24 N N))
+          (b "nonempty" 28
+             (b "lower" 27 (b "letter" 26 N N) N) (b "position" 29 N N)))
+       (b "toplevel" 35
+          (b "terminator" 33
+             (b "stop" 32 (b "separator" 31 N N) N) (b "token" 34 N N))
+          (b "|" 38 (b "{" 37 (b "upper" 36 N N) N) (b "}" 39 N N))))
+  where
+  b s n = B bs (TS bs n)
+    where
+    bs = s
+
+-- | Unquote string literal.
+unescapeInitTail :: String -> String
+unescapeInitTail = id . unesc . tail . id
+  where
+  unesc s = case s of
+    '\\':c:cs | elem c ['\"', '\\', '\''] -> c : unesc cs
+    '\\':'n':cs  -> '\n' : unesc cs
+    '\\':'t':cs  -> '\t' : unesc cs
+    '\\':'r':cs  -> '\r' : unesc cs
+    '\\':'f':cs  -> '\f' : unesc cs
+    '"':[]       -> []
+    c:cs         -> c : unesc cs
+    _            -> []
+
+-------------------------------------------------------------------
+-- Alex wrapper code.
+-- A modified "posn" wrapper.
+-------------------------------------------------------------------
+
+data Posn = Pn !Int !Int !Int
+  deriving (Eq, Show, Ord)
+
+alexStartPos :: Posn
+alexStartPos = Pn 0 1 1
+
+alexMove :: Posn -> Char -> Posn
+alexMove (Pn a l c) '\t' = Pn (a+1)  l     (((c+7) `div` 8)*8+1)
+alexMove (Pn a l c) '\n' = Pn (a+1) (l+1)   1
+alexMove (Pn a l c) _    = Pn (a+1)  l     (c+1)
+
+type Byte = Word8
+
+type AlexInput = (Posn,     -- current position,
+                  Char,     -- previous char
+                  [Byte],   -- pending bytes on the current char
+                  String)   -- current input string
+
+tokens :: String -> [Token]
+tokens str = go (alexStartPos, '\n', [], str)
+    where
+      go :: AlexInput -> [Token]
+      go inp@(pos, _, _, str) =
+               case alexScan inp 0 of
+                AlexEOF                   -> []
+                AlexError (pos, _, _, _)  -> [Err pos]
+                AlexSkip  inp' len        -> go inp'
+                AlexToken inp' len act    -> act pos (take len str) : (go inp')
+
+alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)
+alexGetByte (p, c, (b:bs), s) = Just (b, (p, c, bs, s))
+alexGetByte (p, _, [], s) =
+  case s of
+    []  -> Nothing
+    (c:s) ->
+             let p'     = alexMove p c
+                 (b:bs) = utf8Encode c
+              in p' `seq` Just (b, (p', c, bs, s))
+
+alexInputPrevChar :: AlexInput -> Char
+alexInputPrevChar (p, c, bs, s) = c
+
+-- | Encode a Haskell String to a list of Word8 values, in UTF8 format.
+utf8Encode :: Char -> [Word8]
+utf8Encode = map fromIntegral . go . ord
+  where
+  go oc
+   | oc <= 0x7f       = [oc]
+
+   | oc <= 0x7ff      = [ 0xc0 + (oc `Data.Bits.shiftR` 6)
+                        , 0x80 + oc Data.Bits..&. 0x3f
+                        ]
+
+   | oc <= 0xffff     = [ 0xe0 + (oc `Data.Bits.shiftR` 12)
+                        , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)
+                        , 0x80 + oc Data.Bits..&. 0x3f
+                        ]
+   | otherwise        = [ 0xf0 + (oc `Data.Bits.shiftR` 18)
+                        , 0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f)
+                        , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)
+                        , 0x80 + oc Data.Bits..&. 0x3f
+                        ]
+
+alex_action_3 =  tok (eitherResIdent TV) 
+alex_action_4 =  tok (eitherResIdent T_Identifier) 
+alex_action_5 =  tok (eitherResIdent TV) 
+alex_action_6 =  tok (TL . unescapeInitTail) 
+alex_action_7 =  tok TC 
+alex_action_8 =  tok TI 
+alex_action_9 =  tok TD 
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+-- -----------------------------------------------------------------------------
+-- ALEX TEMPLATE
+--
+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use
+-- it for any purpose whatsoever.
+
+-- -----------------------------------------------------------------------------
+-- INTERNALS and main scanner engine
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
+#if __GLASGOW_HASKELL__ > 706
+#define GTE(n,m) (tagToEnum# (n >=# m))
+#define EQ(n,m) (tagToEnum# (n ==# m))
+#else
+#define GTE(n,m) (n >=# m)
+#define EQ(n,m) (n ==# m)
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+data AlexAddr = AlexA# Addr#
+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
+#if __GLASGOW_HASKELL__ < 503
+uncheckedShiftL# = shiftL#
+#endif
+
+{-# INLINE alexIndexInt16OffAddr #-}
+alexIndexInt16OffAddr :: AlexAddr -> Int# -> Int#
+alexIndexInt16OffAddr (AlexA# arr) off =
+#ifdef WORDS_BIGENDIAN
+  narrow16Int# i
+  where
+        i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)
+        high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
+        low  = int2Word# (ord# (indexCharOffAddr# arr off'))
+        off' = off *# 2#
+#else
+#if __GLASGOW_HASKELL__ >= 901
+  int16ToInt#
+#endif
+    (indexInt16OffAddr# arr off)
+#endif
+
+
+
+
+
+{-# INLINE alexIndexInt32OffAddr #-}
+alexIndexInt32OffAddr :: AlexAddr -> Int# -> Int#
+alexIndexInt32OffAddr (AlexA# arr) off =
+#ifdef WORDS_BIGENDIAN
+  narrow32Int# i
+  where
+   i    = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`
+                     (b2 `uncheckedShiftL#` 16#) `or#`
+                     (b1 `uncheckedShiftL#` 8#) `or#` b0)
+   b3   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))
+   b2   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))
+   b1   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
+   b0   = int2Word# (ord# (indexCharOffAddr# arr off'))
+   off' = off *# 4#
+#else
+#if __GLASGOW_HASKELL__ >= 901
+  int32ToInt#
+#endif
+    (indexInt32OffAddr# arr off)
+#endif
+
+
+
+
+
+
+#if __GLASGOW_HASKELL__ < 503
+quickIndex arr i = arr ! i
+#else
+-- GHC >= 503, unsafeAt is available from Data.Array.Base.
+quickIndex = unsafeAt
+#endif
+
+
+
+
+-- -----------------------------------------------------------------------------
+-- Main lexing routines
+
+data AlexReturn a
+  = AlexEOF
+  | AlexError  !AlexInput
+  | AlexSkip   !AlexInput !Int
+  | AlexToken  !AlexInput !Int a
+
+-- alexScan :: AlexInput -> StartCode -> AlexReturn a
+alexScan input__ (I# (sc))
+  = alexScanUser undefined input__ (I# (sc))
+
+alexScanUser user__ input__ (I# (sc))
+  = case alex_scan_tkn user__ input__ 0# input__ sc AlexNone of
+  (AlexNone, input__') ->
+    case alexGetByte input__ of
+      Nothing ->
+
+
+
+                                   AlexEOF
+      Just _ ->
+
+
+
+                                   AlexError input__'
+
+  (AlexLastSkip input__'' len, _) ->
+
+
+
+    AlexSkip input__'' len
+
+  (AlexLastAcc k input__''' len, _) ->
+
+
+
+    AlexToken input__''' len (alex_actions ! k)
+
+
+-- Push the input through the DFA, remembering the most recent accepting
+-- state it encountered.
+
+alex_scan_tkn user__ orig_input len input__ s last_acc =
+  input__ `seq` -- strict in the input
+  let
+  new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))
+  in
+  new_acc `seq`
+  case alexGetByte input__ of
+     Nothing -> (new_acc, input__)
+     Just (c, new_input) ->
+
+
+
+      case fromIntegral c of { (I# (ord_c)) ->
+        let
+                base   = alexIndexInt32OffAddr alex_base s
+                offset = (base +# ord_c)
+                check  = alexIndexInt16OffAddr alex_check offset
+
+                new_s = if GTE(offset,0#) && EQ(check,ord_c)
+                          then alexIndexInt16OffAddr alex_table offset
+                          else alexIndexInt16OffAddr alex_deflt s
+        in
+        case new_s of
+            -1# -> (new_acc, input__)
+                -- on an error, we want to keep the input *before* the
+                -- character that failed, not after.
+            _ -> alex_scan_tkn user__ orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)
+                                                -- note that the length is increased ONLY if this is the 1st byte in a char encoding)
+                        new_input new_s new_acc
+      }
+  where
+        check_accs (AlexAccNone) = last_acc
+        check_accs (AlexAcc a  ) = AlexLastAcc a input__ (I# (len))
+        check_accs (AlexAccSkip) = AlexLastSkip  input__ (I# (len))
+
+
+
+
+
+
+
+
+
+
+
+
+
+data AlexLastAcc
+  = AlexNone
+  | AlexLastAcc !Int !AlexInput !Int
+  | AlexLastSkip     !AlexInput !Int
+
+data AlexAcc user
+  = AlexAccNone
+  | AlexAcc Int
+  | AlexAccSkip
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/BNFC/Lex.x b/src/BNFC/Lex.x
--- a/src/BNFC/Lex.x
+++ b/src/BNFC/Lex.x
@@ -1,5 +1,6 @@
--- -*- haskell -*-
--- This Alex file was machine-generated by the BNF converter
+-- -*- haskell -*- File generated by the BNF Converter (bnfc 2.9.3).
+
+-- Lexer definition for use with Alex 3
 {
 {-# OPTIONS -fno-warn-incomplete-patterns #-}
 {-# OPTIONS_GHC -w #-}
diff --git a/src/BNFC/Options.hs b/src/BNFC/Options.hs
--- a/src/BNFC/Options.hs
+++ b/src/BNFC/Options.hs
@@ -6,7 +6,7 @@
 
 module BNFC.Options
   ( Mode(..), Target(..), Backend
-  , parseMode, usage, help
+  , parseMode, usage, help, versionString
   , SharedOptions(..)
   , defaultOptions, isDefault, printOptions
   , AlexVersion(..), HappyMode(..), OCamlParser(..), JavaLexerParser(..)
@@ -394,9 +394,12 @@
 
 -- ~~~ Help strings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+versionString :: String
+versionString = showVersion version
+
 title :: [String]
 title =
-  [ "The BNF Converter, " ++ showVersion version ++ " (c) 2002-today BNFC development team."
+  [ "The BNF Converter, " ++ versionString ++ " (c) 2002-today BNFC development team."
   , "Free software under the BSD 3-clause license."
   , "List of recent contributors at https://github.com/BNFC/bnfc/graphs/contributors."
   , "Report bugs at https://github.com/BNFC/bnfc/issues."
diff --git a/src/BNFC/Par.hs b/src/BNFC/Par.hs
new file mode 100644
--- /dev/null
+++ b/src/BNFC/Par.hs
@@ -0,0 +1,1604 @@
+{-# OPTIONS_GHC -w #-}
+{-# OPTIONS -XMagicHash -XBangPatterns -XTypeSynonymInstances -XFlexibleInstances -cpp #-}
+#if __GLASGOW_HASKELL__ >= 710
+{-# OPTIONS_GHC -XPartialTypeSignatures #-}
+#endif
+{-# OPTIONS_GHC -fno-warn-incomplete-patterns -fno-warn-overlapping-patterns #-}
+{-# LANGUAGE PatternSynonyms #-}
+
+module BNFC.Par
+  ( happyError
+  , myLexer
+  , pGrammar
+  , pListDef
+  , pDef
+  , pItem
+  , pListItem
+  , pCat
+  , pListCat
+  , pLabel
+  , pArg
+  , pListArg
+  , pSeparation
+  , pListString
+  , pExp
+  , pExp1
+  , pExp2
+  , pListExp
+  , pListExp2
+  , pRHS
+  , pListRHS
+  , pMinimumSize
+  , pReg
+  , pReg1
+  , pReg2
+  , pReg3
+  ) where
+
+import Prelude
+
+import qualified BNFC.Abs
+import BNFC.Lex
+import qualified Data.Array as Happy_Data_Array
+import qualified Data.Bits as Bits
+import qualified GHC.Exts as Happy_GHC_Exts
+import Control.Applicative(Applicative(..))
+import Control.Monad (ap)
+
+-- parser produced by Happy Version 1.20.0
+
+newtype HappyAbsSyn  = HappyAbsSyn HappyAny
+#if __GLASGOW_HASKELL__ >= 607
+type HappyAny = Happy_GHC_Exts.Any
+#else
+type HappyAny = forall a . a
+#endif
+newtype HappyWrap27 = HappyWrap27 (Char)
+happyIn27 :: (Char) -> (HappyAbsSyn )
+happyIn27 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap27 x)
+{-# INLINE happyIn27 #-}
+happyOut27 :: (HappyAbsSyn ) -> HappyWrap27
+happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut27 #-}
+newtype HappyWrap28 = HappyWrap28 (Double)
+happyIn28 :: (Double) -> (HappyAbsSyn )
+happyIn28 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap28 x)
+{-# INLINE happyIn28 #-}
+happyOut28 :: (HappyAbsSyn ) -> HappyWrap28
+happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut28 #-}
+newtype HappyWrap29 = HappyWrap29 (Integer)
+happyIn29 :: (Integer) -> (HappyAbsSyn )
+happyIn29 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap29 x)
+{-# INLINE happyIn29 #-}
+happyOut29 :: (HappyAbsSyn ) -> HappyWrap29
+happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut29 #-}
+newtype HappyWrap30 = HappyWrap30 (String)
+happyIn30 :: (String) -> (HappyAbsSyn )
+happyIn30 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap30 x)
+{-# INLINE happyIn30 #-}
+happyOut30 :: (HappyAbsSyn ) -> HappyWrap30
+happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut30 #-}
+newtype HappyWrap31 = HappyWrap31 (BNFC.Abs.Identifier)
+happyIn31 :: (BNFC.Abs.Identifier) -> (HappyAbsSyn )
+happyIn31 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap31 x)
+{-# INLINE happyIn31 #-}
+happyOut31 :: (HappyAbsSyn ) -> HappyWrap31
+happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut31 #-}
+newtype HappyWrap32 = HappyWrap32 (BNFC.Abs.Grammar)
+happyIn32 :: (BNFC.Abs.Grammar) -> (HappyAbsSyn )
+happyIn32 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap32 x)
+{-# INLINE happyIn32 #-}
+happyOut32 :: (HappyAbsSyn ) -> HappyWrap32
+happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut32 #-}
+newtype HappyWrap33 = HappyWrap33 ([BNFC.Abs.Def])
+happyIn33 :: ([BNFC.Abs.Def]) -> (HappyAbsSyn )
+happyIn33 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap33 x)
+{-# INLINE happyIn33 #-}
+happyOut33 :: (HappyAbsSyn ) -> HappyWrap33
+happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut33 #-}
+newtype HappyWrap34 = HappyWrap34 (BNFC.Abs.Def)
+happyIn34 :: (BNFC.Abs.Def) -> (HappyAbsSyn )
+happyIn34 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap34 x)
+{-# INLINE happyIn34 #-}
+happyOut34 :: (HappyAbsSyn ) -> HappyWrap34
+happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut34 #-}
+newtype HappyWrap35 = HappyWrap35 (BNFC.Abs.Item)
+happyIn35 :: (BNFC.Abs.Item) -> (HappyAbsSyn )
+happyIn35 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap35 x)
+{-# INLINE happyIn35 #-}
+happyOut35 :: (HappyAbsSyn ) -> HappyWrap35
+happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut35 #-}
+newtype HappyWrap36 = HappyWrap36 ([BNFC.Abs.Item])
+happyIn36 :: ([BNFC.Abs.Item]) -> (HappyAbsSyn )
+happyIn36 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap36 x)
+{-# INLINE happyIn36 #-}
+happyOut36 :: (HappyAbsSyn ) -> HappyWrap36
+happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut36 #-}
+newtype HappyWrap37 = HappyWrap37 (BNFC.Abs.Cat)
+happyIn37 :: (BNFC.Abs.Cat) -> (HappyAbsSyn )
+happyIn37 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap37 x)
+{-# INLINE happyIn37 #-}
+happyOut37 :: (HappyAbsSyn ) -> HappyWrap37
+happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut37 #-}
+newtype HappyWrap38 = HappyWrap38 ([BNFC.Abs.Cat])
+happyIn38 :: ([BNFC.Abs.Cat]) -> (HappyAbsSyn )
+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap38 x)
+{-# INLINE happyIn38 #-}
+happyOut38 :: (HappyAbsSyn ) -> HappyWrap38
+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut38 #-}
+newtype HappyWrap39 = HappyWrap39 (BNFC.Abs.Label)
+happyIn39 :: (BNFC.Abs.Label) -> (HappyAbsSyn )
+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap39 x)
+{-# INLINE happyIn39 #-}
+happyOut39 :: (HappyAbsSyn ) -> HappyWrap39
+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut39 #-}
+newtype HappyWrap40 = HappyWrap40 (BNFC.Abs.Arg)
+happyIn40 :: (BNFC.Abs.Arg) -> (HappyAbsSyn )
+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap40 x)
+{-# INLINE happyIn40 #-}
+happyOut40 :: (HappyAbsSyn ) -> HappyWrap40
+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut40 #-}
+newtype HappyWrap41 = HappyWrap41 ([BNFC.Abs.Arg])
+happyIn41 :: ([BNFC.Abs.Arg]) -> (HappyAbsSyn )
+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap41 x)
+{-# INLINE happyIn41 #-}
+happyOut41 :: (HappyAbsSyn ) -> HappyWrap41
+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut41 #-}
+newtype HappyWrap42 = HappyWrap42 (BNFC.Abs.Separation)
+happyIn42 :: (BNFC.Abs.Separation) -> (HappyAbsSyn )
+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap42 x)
+{-# INLINE happyIn42 #-}
+happyOut42 :: (HappyAbsSyn ) -> HappyWrap42
+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut42 #-}
+newtype HappyWrap43 = HappyWrap43 ([String])
+happyIn43 :: ([String]) -> (HappyAbsSyn )
+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap43 x)
+{-# INLINE happyIn43 #-}
+happyOut43 :: (HappyAbsSyn ) -> HappyWrap43
+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut43 #-}
+newtype HappyWrap44 = HappyWrap44 (BNFC.Abs.Exp)
+happyIn44 :: (BNFC.Abs.Exp) -> (HappyAbsSyn )
+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap44 x)
+{-# INLINE happyIn44 #-}
+happyOut44 :: (HappyAbsSyn ) -> HappyWrap44
+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut44 #-}
+newtype HappyWrap45 = HappyWrap45 (BNFC.Abs.Exp)
+happyIn45 :: (BNFC.Abs.Exp) -> (HappyAbsSyn )
+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap45 x)
+{-# INLINE happyIn45 #-}
+happyOut45 :: (HappyAbsSyn ) -> HappyWrap45
+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut45 #-}
+newtype HappyWrap46 = HappyWrap46 (BNFC.Abs.Exp)
+happyIn46 :: (BNFC.Abs.Exp) -> (HappyAbsSyn )
+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap46 x)
+{-# INLINE happyIn46 #-}
+happyOut46 :: (HappyAbsSyn ) -> HappyWrap46
+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut46 #-}
+newtype HappyWrap47 = HappyWrap47 ([BNFC.Abs.Exp])
+happyIn47 :: ([BNFC.Abs.Exp]) -> (HappyAbsSyn )
+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap47 x)
+{-# INLINE happyIn47 #-}
+happyOut47 :: (HappyAbsSyn ) -> HappyWrap47
+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut47 #-}
+newtype HappyWrap48 = HappyWrap48 ([BNFC.Abs.Exp])
+happyIn48 :: ([BNFC.Abs.Exp]) -> (HappyAbsSyn )
+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap48 x)
+{-# INLINE happyIn48 #-}
+happyOut48 :: (HappyAbsSyn ) -> HappyWrap48
+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut48 #-}
+newtype HappyWrap49 = HappyWrap49 (BNFC.Abs.RHS)
+happyIn49 :: (BNFC.Abs.RHS) -> (HappyAbsSyn )
+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap49 x)
+{-# INLINE happyIn49 #-}
+happyOut49 :: (HappyAbsSyn ) -> HappyWrap49
+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut49 #-}
+newtype HappyWrap50 = HappyWrap50 ([BNFC.Abs.RHS])
+happyIn50 :: ([BNFC.Abs.RHS]) -> (HappyAbsSyn )
+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap50 x)
+{-# INLINE happyIn50 #-}
+happyOut50 :: (HappyAbsSyn ) -> HappyWrap50
+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut50 #-}
+newtype HappyWrap51 = HappyWrap51 (BNFC.Abs.MinimumSize)
+happyIn51 :: (BNFC.Abs.MinimumSize) -> (HappyAbsSyn )
+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap51 x)
+{-# INLINE happyIn51 #-}
+happyOut51 :: (HappyAbsSyn ) -> HappyWrap51
+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut51 #-}
+newtype HappyWrap52 = HappyWrap52 (BNFC.Abs.Reg)
+happyIn52 :: (BNFC.Abs.Reg) -> (HappyAbsSyn )
+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap52 x)
+{-# INLINE happyIn52 #-}
+happyOut52 :: (HappyAbsSyn ) -> HappyWrap52
+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut52 #-}
+newtype HappyWrap53 = HappyWrap53 (BNFC.Abs.Reg)
+happyIn53 :: (BNFC.Abs.Reg) -> (HappyAbsSyn )
+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap53 x)
+{-# INLINE happyIn53 #-}
+happyOut53 :: (HappyAbsSyn ) -> HappyWrap53
+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut53 #-}
+newtype HappyWrap54 = HappyWrap54 (BNFC.Abs.Reg)
+happyIn54 :: (BNFC.Abs.Reg) -> (HappyAbsSyn )
+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap54 x)
+{-# INLINE happyIn54 #-}
+happyOut54 :: (HappyAbsSyn ) -> HappyWrap54
+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut54 #-}
+newtype HappyWrap55 = HappyWrap55 (BNFC.Abs.Reg)
+happyIn55 :: (BNFC.Abs.Reg) -> (HappyAbsSyn )
+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap55 x)
+{-# INLINE happyIn55 #-}
+happyOut55 :: (HappyAbsSyn ) -> HappyWrap55
+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut55 #-}
+happyInTok :: (Token) -> (HappyAbsSyn )
+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyInTok #-}
+happyOutTok :: (HappyAbsSyn ) -> (Token)
+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOutTok #-}
+
+
+happyExpList :: HappyAddr
+happyExpList = HappyA# "\x00\x00\x00\x00\x00\x00\x80\x00\xa9\xd7\xb8\x01\x04\x00\x00\x00\x00\x00\x00\x08\x90\x7a\x8d\x1b\x40\x00\x00\x00\x00\x00\x00\x80\x00\xa8\xd7\xb8\x01\x04\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x08\x80\x02\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x80\x00\x08\x00\x00\xc0\x07\x00\x00\x00\x00\x00\x00\x08\x80\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x80\x00\x08\x00\x00\xc0\x07\x00\x00\x00\x00\x00\x00\x08\x80\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x80\x00\x08\x00\x00\xc0\x07\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x48\x28\x03\x4c\x00\x00\x00\x00\x00\x00\x00\x08\x80\x84\x32\xc0\x04\x00\x00\x00\x00\x00\x00\x80\x00\x48\x28\x03\x4c\x00\x00\x00\x00\x00\x00\x00\x08\x80\x84\x32\xc0\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x48\x28\x03\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x08\x80\x84\x32\xc0\x04\x00\x00\x00\x00\x00\x00\x00\x06\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x48\x28\x03\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x80\x00\x08\x00\x00\xc0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x08\x80\x02\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x02\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\xa9\xd7\xb8\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\xa9\xd7\xb8\x01\x04\x00\x00\x00\x00\x00\x00\x08\x80\x84\x32\xc0\x04\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x08\x80\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x80\x00\x08\x00\x00\xc0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x48\x28\x03\x4c\x00\x00\x00\x00\x00\x00\x00\x08\x80\x84\x32\xc0\x04\x00\x00\x00\x00\x00\x00\x00\x06\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x84\x32\xc0\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x84\x32\xc0\x04\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+{-# NOINLINE happyExpListPerState #-}
+happyExpListPerState st =
+    token_strs_expected
+  where token_strs = ["error","%dummy","%start_pGrammar","%start_pListDef","%start_pDef","%start_pItem","%start_pListItem","%start_pCat","%start_pListCat","%start_pLabel","%start_pArg","%start_pListArg","%start_pSeparation","%start_pListString","%start_pExp","%start_pExp1","%start_pExp2","%start_pListExp","%start_pListExp2","%start_pRHS","%start_pListRHS","%start_pMinimumSize","%start_pReg","%start_pReg1","%start_pReg2","%start_pReg3","Char","Double","Integer","String","Identifier","Grammar","ListDef","Def","Item","ListItem","Cat","ListCat","Label","Arg","ListArg","Separation","ListString","Exp","Exp1","Exp2","ListExp","ListExp2","RHS","ListRHS","MinimumSize","Reg","Reg1","Reg2","Reg3","'('","')'","'*'","'+'","','","'-'","'.'","':'","'::='","';'","'='","'?'","'['","']'","'_'","'char'","'coercions'","'comment'","'define'","'delimiters'","'digit'","'entrypoints'","'eps'","'internal'","'layout'","'letter'","'lower'","'nonempty'","'position'","'rules'","'separator'","'stop'","'terminator'","'token'","'toplevel'","'upper'","'{'","'|'","'}'","L_charac","L_doubl","L_integ","L_quoted","L_Identifier","%eof"]
+        bit_start = st Prelude.* 100
+        bit_end = (st Prelude.+ 1) Prelude.* 100
+        read_bit = readArrayBit happyExpList
+        bits = Prelude.map read_bit [bit_start..bit_end Prelude.- 1]
+        bits_indexed = Prelude.zip bits [0..99]
+        token_strs_expected = Prelude.concatMap f bits_indexed
+        f (Prelude.False, _) = []
+        f (Prelude.True, nr) = [token_strs Prelude.!! nr]
+
+happyActOffsets :: HappyAddr
+happyActOffsets = HappyA# "\x1e\x00\x1e\x00\x40\x00\xf6\xff\xf6\xff\xf4\xff\xf4\xff\x2b\x00\x18\x00\x18\x00\x2f\x00\xe0\xff\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\xf6\xff\xf6\xff\x4c\x00\x59\x00\x59\x00\x59\x00\x59\x00\x45\x00\x00\x00\x00\x00\x06\x00\x59\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x01\x00\xb6\x00\x11\x00\x59\x00\xdf\xff\x7a\x00\x55\x00\x00\x00\x00\x00\x00\x00\xf6\xff\x00\x00\x00\x00\x61\x00\x74\x00\xf4\xff\x00\x00\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x00\x74\x00\x1d\x00\x1d\x00\x00\x00\x00\x00\x1d\x00\x9e\x00\xb0\x00\x00\x00\x79\x00\x79\x00\x79\x00\x79\x00\xba\x00\xa1\x00\xa1\x00\xac\x00\xac\x00\x00\x00\xb5\x00\xaf\x00\xaf\x00\x00\x00\xaf\x00\xd6\x00\xda\x00\x00\x00\xfb\x00\xe7\x00\xe7\x00\xe7\x00\xe7\x00\xe7\x00\xef\x00\xe9\x00\xfe\x00\x07\x01\xf4\xff\xf4\xff\x2b\x00\x85\x00\x1d\x01\x1b\x01\x36\x01\x36\x01\x30\x01\x31\x01\x67\x01\x1e\x00\x46\x01\x00\x00\x00\x00\x1e\x00\x59\x00\xf4\xff\xf4\xff\x69\x01\x48\x01\x00\x00\x4a\x01\x00\x00\x6f\x01\x00\x00\x4c\x01\x4e\x01\x51\x01\x4f\x01\xf4\xff\xf4\xff\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x52\x01\x1d\x00\x1d\x00\x00\x00\x6a\x01\x79\x01\x00\x00\x70\x01\xf6\xff\x00\x00\x59\x00\x59\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x58\x01\x72\x01\x13\x00\x00\x00\x00\x00\x00\x00\x7b\x01\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x01\x00\x00\x7a\x01\x00\x00\x00\x00\x7c\x01\x5a\x01\xf4\xff\x00\x00\x59\x00\xf6\xff\x5a\x01\x5a\x01\x5e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x01\x7d\x01\x2f\x00\x1d\x00\xf6\xff\x86\x01\x00\x00\x00\x00\x00\x00\x6d\x01\xf6\xff\x00\x00\x00\x00\x00\x00"#
+
+happyGotoOffsets :: HappyAddr
+happyGotoOffsets = HappyA# "\xf5\x00\x24\x01\x35\x01\x50\x01\x3a\x01\x2a\x01\x55\x01\x5f\x00\x48\x00\x57\x00\x7e\x01\x03\x00\xec\x00\x0f\x01\x23\x01\xaa\x00\x8f\x00\x16\x01\xc9\x00\x73\x01\x5c\x00\x72\x00\x08\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x87\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x01\x4b\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x01\x00\x00\x00\x00\x00\x00\x00\x00\x61\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x00\x00\xf1\x00\xb2\x00\x00\x00\x00\x00\x9c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x01\x8c\x01\x00\x00\xb3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x01\x8f\x01\x90\x01\x62\x01\x57\x01\x29\x01\x04\x00\x00\x00\x91\x01\x78\x01\x7f\x01\x92\x01\x00\x00\x00\x00\x2b\x01\x00\x00\x00\x00\x00\x00\x34\x01\x6a\x00\x63\x01\x64\x01\x00\x00\x94\x01\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x96\x01\xd9\x00\x97\x01\x99\x01\x65\x01\x59\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x05\x01\xc7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x00\x00\x00\x27\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x01\x66\x01\x00\x00\x6f\x00\xe1\x00\x9b\x01\x9c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x01\x0a\x01\x45\x01\x00\x00\x00\x00\x00\x00\x00\x00\x88\x01\x4d\x01\x00\x00\x00\x00\x00\x00"#
+
+happyAdjustOffset :: Happy_GHC_Exts.Int# -> Happy_GHC_Exts.Int#
+happyAdjustOffset off = off
+
+happyDefActions :: HappyAddr
+happyDefActions = HappyA# "\xe1\xff\xe1\xff\x00\x00\x00\x00\xcb\xff\x00\x00\xc7\xff\x00\x00\x00\x00\xbe\xff\xbc\xff\x00\x00\x00\x00\x00\x00\x00\x00\xac\xff\x00\x00\xcb\xff\xcb\xff\xa3\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\xff\x98\xff\x00\x00\x00\x00\x00\x00\x91\xff\x95\xff\x99\xff\x94\xff\x92\xff\x93\xff\x00\x00\x00\x00\x9d\xff\x00\x00\x9f\xff\x00\x00\xa1\xff\x00\x00\xa4\xff\xcd\xff\xc8\xff\xcb\xff\xa7\xff\xcc\xff\xa6\xff\x00\x00\x00\x00\xe4\xff\xe3\xff\x00\x00\xb1\xff\xaf\xff\xb2\xff\xb0\xff\xb3\xff\xa9\xff\x00\x00\x00\x00\xac\xff\xe6\xff\xe5\xff\xb3\xff\xab\xff\xb6\xff\xb4\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb9\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbf\xff\xbe\xff\x00\x00\x00\x00\xc4\xff\x00\x00\x00\x00\x00\x00\xc3\xff\xc6\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa3\xff\xa3\xff\x00\x00\x00\x00\xe0\xff\xe1\xff\x00\x00\xe2\xff\xde\xff\xe1\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\xff\x00\x00\xce\xff\x00\x00\xd7\xff\x00\x00\xbe\xff\xdc\xff\x00\x00\x00\x00\xc7\xff\xc2\xff\x00\x00\xbd\xff\xbb\xff\xba\xff\x00\x00\x00\x00\xac\xff\xb5\xff\x00\x00\x00\x00\xa8\xff\x00\x00\xcb\xff\xca\xff\x00\x00\x00\x00\x9e\xff\x9c\xff\x9b\xff\x9a\xff\x00\x00\x00\x00\x00\x00\x90\xff\x97\xff\x96\xff\xa2\xff\xa0\xff\xa5\xff\xc9\xff\xad\xff\xae\xff\xaa\xff\xb7\xff\xb8\xff\xc1\xff\x00\x00\xc5\xff\x00\x00\xd3\xff\xdb\xff\x00\x00\x00\x00\x00\x00\xcf\xff\x00\x00\xcb\xff\x00\x00\x00\x00\xd9\xff\xdf\xff\xd5\xff\xd6\xff\xd2\xff\xd8\xff\x00\x00\xbc\xff\x00\x00\xcb\xff\x00\x00\xc0\xff\xdd\xff\xd1\xff\xa3\xff\xcb\xff\xda\xff\xd4\xff"#
+
+happyCheck :: HappyAddr
+happyCheck = HappyA# "\xff\xff\x0d\x00\x01\x00\x0d\x00\x02\x00\x26\x00\x03\x00\x03\x00\x00\x00\x03\x00\x04\x00\x2b\x00\x2d\x00\x03\x00\x0d\x00\x0d\x00\x03\x00\x10\x00\x0c\x00\x10\x00\x10\x00\x02\x00\x15\x00\x06\x00\x17\x00\x00\x00\x10\x00\x1a\x00\x1b\x00\x10\x00\x01\x00\x01\x00\x2c\x00\x2b\x00\x2c\x00\x1b\x00\x1c\x00\x24\x00\x25\x00\x00\x00\x0a\x00\x28\x00\x0d\x00\x0d\x00\x01\x00\x0f\x00\x2d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x2d\x00\x16\x00\x1c\x00\x18\x00\x19\x00\x0d\x00\x26\x00\x0f\x00\x1d\x00\x1e\x00\x1f\x00\x2d\x00\x21\x00\x22\x00\x01\x00\x1b\x00\x1c\x00\x2c\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2c\x00\x00\x00\x04\x00\x0d\x00\x1f\x00\x0f\x00\x21\x00\x11\x00\x12\x00\x13\x00\x14\x00\x0d\x00\x16\x00\x2c\x00\x18\x00\x19\x00\x01\x00\x04\x00\x00\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x21\x00\x22\x00\x04\x00\x0d\x00\x0e\x00\x0d\x00\x1c\x00\x1c\x00\x10\x00\x00\x00\x0c\x00\x2c\x00\x28\x00\x15\x00\x00\x00\x17\x00\x2b\x00\x00\x00\x1a\x00\x1b\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x24\x00\x25\x00\x00\x00\x06\x00\x28\x00\x2d\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x26\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1a\x00\x1b\x00\x1c\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x1b\x00\x1c\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x2d\x00\x13\x00\x05\x00\x15\x00\x20\x00\x2d\x00\x13\x00\x23\x00\x15\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x13\x00\x2b\x00\x15\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x04\x00\x08\x00\x03\x00\x04\x00\x11\x00\x12\x00\x13\x00\x14\x00\x05\x00\x0d\x00\x0e\x00\x0c\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x03\x00\x04\x00\x2d\x00\x03\x00\x04\x00\x08\x00\x09\x00\x0a\x00\x08\x00\x09\x00\x0a\x00\x2b\x00\x11\x00\x12\x00\x13\x00\x14\x00\x2d\x00\x04\x00\x08\x00\x16\x00\x17\x00\x2c\x00\x16\x00\x17\x00\x03\x00\x04\x00\x0d\x00\x0e\x00\x0e\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x07\x00\x16\x00\x17\x00\x04\x00\x05\x00\x06\x00\x07\x00\x11\x00\x12\x00\x13\x00\x05\x00\x0c\x00\x11\x00\x12\x00\x13\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x2d\x00\x2c\x00\x11\x00\x12\x00\x13\x00\x03\x00\x04\x00\x11\x00\x12\x00\x13\x00\x08\x00\x09\x00\x0a\x00\x12\x00\x13\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x04\x00\x2b\x00\x06\x00\x07\x00\x16\x00\x04\x00\x04\x00\x04\x00\x0c\x00\x06\x00\x07\x00\x2c\x00\x0a\x00\x0c\x00\x13\x00\x0c\x00\x04\x00\x04\x00\x06\x00\x07\x00\x07\x00\x03\x00\x04\x00\x22\x00\x0c\x00\x0c\x00\x08\x00\x09\x00\x0a\x00\x03\x00\x04\x00\x2c\x00\x03\x00\x04\x00\x08\x00\x09\x00\x0a\x00\x08\x00\x09\x00\x0a\x00\x03\x00\x04\x00\x1c\x00\x03\x00\x04\x00\x08\x00\x09\x00\x0a\x00\x08\x00\x04\x00\x0a\x00\x04\x00\x2c\x00\x04\x00\x2d\x00\x0a\x00\x0b\x00\x0a\x00\x0b\x00\x0a\x00\x0b\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x09\x00\x2d\x00\x2c\x00\x2b\x00\x07\x00\x2b\x00\x0e\x00\x2a\x00\x2c\x00\x02\x00\x2b\x00\x2b\x00\x0e\x00\x27\x00\x0e\x00\x06\x00\x0e\x00\x09\x00\x26\x00\x2b\x00\x09\x00\x0b\x00\x02\x00\x1c\x00\x03\x00\x18\x00\x03\x00\x0f\x00\x03\x00\x03\x00\x18\x00\x04\x00\x03\x00\x0f\x00\x04\x00\x04\x00\x04\x00\x18\x00\x04\x00\x03\x00\x03\x00\x02\x00\xff\xff\x03\x00\x03\x00\x03\x00\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+
+happyTable :: HappyAddr
+happyTable = HappyA# "\x00\x00\x35\x00\x1d\x00\x35\x00\xa8\x00\x94\x00\x4b\x00\x4b\x00\x1a\x00\x96\x00\x97\x00\x36\x00\xff\xff\x4b\x00\x1e\x00\xa9\x00\x4b\x00\x1f\x00\x98\x00\x4c\x00\x78\x00\x9c\x00\x20\x00\x93\x00\x21\x00\x1a\x00\xb0\x00\x22\x00\x23\x00\xa6\x00\x40\x00\x57\x00\x37\x00\x36\x00\x37\x00\x25\x00\x26\x00\x24\x00\x25\x00\x1a\x00\x6f\x00\x1a\x00\x41\x00\x58\x00\x57\x00\x59\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\xff\xff\x65\x00\x1b\x00\x66\x00\x67\x00\x58\x00\x94\x00\x59\x00\x68\x00\x69\x00\x6a\x00\xff\xff\x6b\x00\x6c\x00\x57\x00\x9f\x00\x26\x00\x37\x00\x1a\x00\x42\x00\x43\x00\x36\x00\x37\x00\x37\x00\x1a\x00\x50\x00\x58\x00\x4f\x00\x59\x00\x50\x00\x61\x00\x62\x00\x63\x00\x64\x00\x53\x00\x65\x00\x37\x00\x66\x00\x67\x00\x1d\x00\x50\x00\x1a\x00\x68\x00\x69\x00\x6a\x00\x1a\x00\x6b\x00\x6c\x00\x54\x00\x51\x00\x52\x00\x1e\x00\x94\x00\x2d\x00\x1f\x00\x1a\x00\x55\x00\x37\x00\x1a\x00\x20\x00\x1a\x00\x21\x00\x36\x00\x1a\x00\x22\x00\x23\x00\x29\x00\x2a\x00\x28\x00\x26\x00\x9a\x00\x2a\x00\x28\x00\x26\x00\x24\x00\x25\x00\x1a\x00\x93\x00\x1a\x00\xff\xff\xb5\x00\x2a\x00\x28\x00\x26\x00\x91\x00\xba\x00\x2a\x00\x28\x00\x26\x00\x27\x00\x28\x00\x26\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x9e\x00\x28\x00\x26\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3d\x00\x8b\x00\x3e\x00\x7a\x00\xff\xff\x3d\x00\x7b\x00\x8e\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x43\x00\x3d\x00\x36\x00\x8b\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x43\x00\x50\x00\x8a\x00\x96\x00\x97\x00\x44\x00\x45\x00\x46\x00\x47\x00\x89\x00\x51\x00\x85\x00\x98\x00\x44\x00\x45\x00\x46\x00\x8c\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x43\x00\x2d\x00\x2e\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x2f\x00\x30\x00\x31\x00\x36\x00\x44\x00\x45\x00\x46\x00\xa4\x00\xff\xff\x50\x00\x85\x00\x32\x00\x33\x00\x37\x00\x32\x00\xa0\x00\x2d\x00\x2e\x00\x51\x00\xad\x00\x84\x00\x2f\x00\x30\x00\x31\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x43\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x43\x00\x82\x00\x32\x00\xb9\x00\x54\x00\x6f\x00\x70\x00\x6d\x00\x4a\x00\x45\x00\x46\x00\x83\x00\x5f\x00\x8d\x00\x45\x00\x46\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x43\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x43\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x43\x00\xff\xff\x37\x00\xa5\x00\x45\x00\x46\x00\x2d\x00\x2e\x00\xc2\x00\x45\x00\x46\x00\x2f\x00\x30\x00\x31\x00\x49\x00\x46\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x54\x00\x36\x00\x6c\x00\x6d\x00\x37\x00\x54\x00\x2e\x00\x54\x00\x5f\x00\x71\x00\x6d\x00\x37\x00\x5b\x00\x7b\x00\x48\x00\x5f\x00\x54\x00\x54\x00\xb6\x00\x6d\x00\x5e\x00\x2d\x00\x2e\x00\x78\x00\x5f\x00\x5f\x00\x2f\x00\x5c\x00\x31\x00\x2d\x00\x2e\x00\x37\x00\x2d\x00\x2e\x00\x2f\x00\x91\x00\x31\x00\x2f\x00\xc1\x00\x31\x00\x2d\x00\x2e\x00\x2d\x00\x2d\x00\x2e\x00\x2f\x00\xc5\x00\x31\x00\x5d\x00\x2e\x00\x31\x00\x2e\x00\x37\x00\x2e\x00\xff\xff\x59\x00\x5a\x00\x59\x00\x7c\x00\x59\x00\xa9\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x8f\x00\x7d\x00\xb4\x00\xb3\x00\xaa\x00\xbb\x00\x73\x00\xb3\x00\xff\xff\x37\x00\x36\x00\xb0\x00\x36\x00\xa4\x00\x43\x00\x37\x00\xa3\x00\x36\x00\x36\x00\xa2\x00\x9e\x00\x9d\x00\x93\x00\xc0\x00\xbf\x00\x94\x00\x36\x00\xc5\x00\xbe\x00\xc1\x00\x2d\x00\x99\x00\x2b\x00\x98\x00\x4d\x00\x87\x00\x86\x00\x75\x00\x80\x00\x7f\x00\xc3\x00\x7e\x00\x76\x00\x73\x00\x74\x00\xb1\x00\xae\x00\xac\x00\xab\x00\x00\x00\xbc\x00\xb8\x00\xb7\x00\xc6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+happyReduceArr = Happy_Data_Array.array (24, 111) [
+	(24 , happyReduce_24),
+	(25 , happyReduce_25),
+	(26 , happyReduce_26),
+	(27 , happyReduce_27),
+	(28 , happyReduce_28),
+	(29 , happyReduce_29),
+	(30 , happyReduce_30),
+	(31 , happyReduce_31),
+	(32 , happyReduce_32),
+	(33 , happyReduce_33),
+	(34 , happyReduce_34),
+	(35 , happyReduce_35),
+	(36 , happyReduce_36),
+	(37 , happyReduce_37),
+	(38 , happyReduce_38),
+	(39 , happyReduce_39),
+	(40 , happyReduce_40),
+	(41 , happyReduce_41),
+	(42 , happyReduce_42),
+	(43 , happyReduce_43),
+	(44 , happyReduce_44),
+	(45 , happyReduce_45),
+	(46 , happyReduce_46),
+	(47 , happyReduce_47),
+	(48 , happyReduce_48),
+	(49 , happyReduce_49),
+	(50 , happyReduce_50),
+	(51 , happyReduce_51),
+	(52 , happyReduce_52),
+	(53 , happyReduce_53),
+	(54 , happyReduce_54),
+	(55 , happyReduce_55),
+	(56 , happyReduce_56),
+	(57 , happyReduce_57),
+	(58 , happyReduce_58),
+	(59 , happyReduce_59),
+	(60 , happyReduce_60),
+	(61 , happyReduce_61),
+	(62 , happyReduce_62),
+	(63 , happyReduce_63),
+	(64 , happyReduce_64),
+	(65 , happyReduce_65),
+	(66 , happyReduce_66),
+	(67 , happyReduce_67),
+	(68 , happyReduce_68),
+	(69 , happyReduce_69),
+	(70 , happyReduce_70),
+	(71 , happyReduce_71),
+	(72 , happyReduce_72),
+	(73 , happyReduce_73),
+	(74 , happyReduce_74),
+	(75 , happyReduce_75),
+	(76 , happyReduce_76),
+	(77 , happyReduce_77),
+	(78 , happyReduce_78),
+	(79 , happyReduce_79),
+	(80 , happyReduce_80),
+	(81 , happyReduce_81),
+	(82 , happyReduce_82),
+	(83 , happyReduce_83),
+	(84 , happyReduce_84),
+	(85 , happyReduce_85),
+	(86 , happyReduce_86),
+	(87 , happyReduce_87),
+	(88 , happyReduce_88),
+	(89 , happyReduce_89),
+	(90 , happyReduce_90),
+	(91 , happyReduce_91),
+	(92 , happyReduce_92),
+	(93 , happyReduce_93),
+	(94 , happyReduce_94),
+	(95 , happyReduce_95),
+	(96 , happyReduce_96),
+	(97 , happyReduce_97),
+	(98 , happyReduce_98),
+	(99 , happyReduce_99),
+	(100 , happyReduce_100),
+	(101 , happyReduce_101),
+	(102 , happyReduce_102),
+	(103 , happyReduce_103),
+	(104 , happyReduce_104),
+	(105 , happyReduce_105),
+	(106 , happyReduce_106),
+	(107 , happyReduce_107),
+	(108 , happyReduce_108),
+	(109 , happyReduce_109),
+	(110 , happyReduce_110),
+	(111 , happyReduce_111)
+	]
+
+happy_n_terms = 46 :: Prelude.Int
+happy_n_nonterms = 29 :: Prelude.Int
+
+happyReduce_24 = happySpecReduce_1  0# happyReduction_24
+happyReduction_24 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (PT _ (TC happy_var_1)) -> 
+	happyIn27
+		 ((read happy_var_1) :: Char
+	)}
+
+happyReduce_25 = happySpecReduce_1  1# happyReduction_25
+happyReduction_25 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (PT _ (TD happy_var_1)) -> 
+	happyIn28
+		 ((read happy_var_1) :: Double
+	)}
+
+happyReduce_26 = happySpecReduce_1  2# happyReduction_26
+happyReduction_26 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (PT _ (TI happy_var_1)) -> 
+	happyIn29
+		 ((read happy_var_1) :: Integer
+	)}
+
+happyReduce_27 = happySpecReduce_1  3# happyReduction_27
+happyReduction_27 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (PT _ (TL happy_var_1)) -> 
+	happyIn30
+		 (happy_var_1
+	)}
+
+happyReduce_28 = happySpecReduce_1  4# happyReduction_28
+happyReduction_28 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn31
+		 (BNFC.Abs.Identifier (mkPosToken happy_var_1)
+	)}
+
+happyReduce_29 = happySpecReduce_1  5# happyReduction_29
+happyReduction_29 happy_x_1
+	 =  case happyOut33 happy_x_1 of { (HappyWrap33 happy_var_1) -> 
+	happyIn32
+		 (BNFC.Abs.Grammar happy_var_1
+	)}
+
+happyReduce_30 = happySpecReduce_0  6# happyReduction_30
+happyReduction_30  =  happyIn33
+		 ([]
+	)
+
+happyReduce_31 = happySpecReduce_1  6# happyReduction_31
+happyReduction_31 happy_x_1
+	 =  case happyOut34 happy_x_1 of { (HappyWrap34 happy_var_1) -> 
+	happyIn33
+		 ((:[]) happy_var_1
+	)}
+
+happyReduce_32 = happySpecReduce_3  6# happyReduction_32
+happyReduction_32 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut34 happy_x_1 of { (HappyWrap34 happy_var_1) -> 
+	case happyOut33 happy_x_3 of { (HappyWrap33 happy_var_3) -> 
+	happyIn33
+		 ((:) happy_var_1 happy_var_3
+	)}}
+
+happyReduce_33 = happySpecReduce_2  6# happyReduction_33
+happyReduction_33 happy_x_2
+	happy_x_1
+	 =  case happyOut33 happy_x_2 of { (HappyWrap33 happy_var_2) -> 
+	happyIn33
+		 (happy_var_2
+	)}
+
+happyReduce_34 = happyReduce 5# 7# happyReduction_34
+happyReduction_34 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut39 happy_x_1 of { (HappyWrap39 happy_var_1) -> 
+	case happyOut37 happy_x_3 of { (HappyWrap37 happy_var_3) -> 
+	case happyOut36 happy_x_5 of { (HappyWrap36 happy_var_5) -> 
+	happyIn34
+		 (BNFC.Abs.Rule happy_var_1 happy_var_3 happy_var_5
+	) `HappyStk` happyRest}}}
+
+happyReduce_35 = happySpecReduce_2  7# happyReduction_35
+happyReduction_35 happy_x_2
+	happy_x_1
+	 =  case happyOut30 happy_x_2 of { (HappyWrap30 happy_var_2) -> 
+	happyIn34
+		 (BNFC.Abs.Comment happy_var_2
+	)}
+
+happyReduce_36 = happySpecReduce_3  7# happyReduction_36
+happyReduction_36 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut30 happy_x_2 of { (HappyWrap30 happy_var_2) -> 
+	case happyOut30 happy_x_3 of { (HappyWrap30 happy_var_3) -> 
+	happyIn34
+		 (BNFC.Abs.Comments happy_var_2 happy_var_3
+	)}}
+
+happyReduce_37 = happyReduce 6# 7# happyReduction_37
+happyReduction_37 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut39 happy_x_2 of { (HappyWrap39 happy_var_2) -> 
+	case happyOut37 happy_x_4 of { (HappyWrap37 happy_var_4) -> 
+	case happyOut36 happy_x_6 of { (HappyWrap36 happy_var_6) -> 
+	happyIn34
+		 (BNFC.Abs.Internal happy_var_2 happy_var_4 happy_var_6
+	) `HappyStk` happyRest}}}
+
+happyReduce_38 = happySpecReduce_3  7# happyReduction_38
+happyReduction_38 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut31 happy_x_2 of { (HappyWrap31 happy_var_2) -> 
+	case happyOut52 happy_x_3 of { (HappyWrap52 happy_var_3) -> 
+	happyIn34
+		 (BNFC.Abs.Token happy_var_2 happy_var_3
+	)}}
+
+happyReduce_39 = happyReduce 4# 7# happyReduction_39
+happyReduction_39 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut31 happy_x_3 of { (HappyWrap31 happy_var_3) -> 
+	case happyOut52 happy_x_4 of { (HappyWrap52 happy_var_4) -> 
+	happyIn34
+		 (BNFC.Abs.PosToken happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_40 = happySpecReduce_2  7# happyReduction_40
+happyReduction_40 happy_x_2
+	happy_x_1
+	 =  case happyOut38 happy_x_2 of { (HappyWrap38 happy_var_2) -> 
+	happyIn34
+		 (BNFC.Abs.Entryp happy_var_2
+	)}
+
+happyReduce_41 = happyReduce 4# 7# happyReduction_41
+happyReduction_41 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> 
+	case happyOut37 happy_x_3 of { (HappyWrap37 happy_var_3) -> 
+	case happyOut30 happy_x_4 of { (HappyWrap30 happy_var_4) -> 
+	happyIn34
+		 (BNFC.Abs.Separator happy_var_2 happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}}
+
+happyReduce_42 = happyReduce 4# 7# happyReduction_42
+happyReduction_42 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> 
+	case happyOut37 happy_x_3 of { (HappyWrap37 happy_var_3) -> 
+	case happyOut30 happy_x_4 of { (HappyWrap30 happy_var_4) -> 
+	happyIn34
+		 (BNFC.Abs.Terminator happy_var_2 happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}}
+
+happyReduce_43 = happyReduce 6# 7# happyReduction_43
+happyReduction_43 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut37 happy_x_2 of { (HappyWrap37 happy_var_2) -> 
+	case happyOut30 happy_x_3 of { (HappyWrap30 happy_var_3) -> 
+	case happyOut30 happy_x_4 of { (HappyWrap30 happy_var_4) -> 
+	case happyOut42 happy_x_5 of { (HappyWrap42 happy_var_5) -> 
+	case happyOut51 happy_x_6 of { (HappyWrap51 happy_var_6) -> 
+	happyIn34
+		 (BNFC.Abs.Delimiters happy_var_2 happy_var_3 happy_var_4 happy_var_5 happy_var_6
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_44 = happySpecReduce_3  7# happyReduction_44
+happyReduction_44 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut31 happy_x_2 of { (HappyWrap31 happy_var_2) -> 
+	case happyOut29 happy_x_3 of { (HappyWrap29 happy_var_3) -> 
+	happyIn34
+		 (BNFC.Abs.Coercions happy_var_2 happy_var_3
+	)}}
+
+happyReduce_45 = happyReduce 4# 7# happyReduction_45
+happyReduction_45 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut31 happy_x_2 of { (HappyWrap31 happy_var_2) -> 
+	case happyOut50 happy_x_4 of { (HappyWrap50 happy_var_4) -> 
+	happyIn34
+		 (BNFC.Abs.Rules happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_46 = happyReduce 5# 7# happyReduction_46
+happyReduction_46 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut31 happy_x_2 of { (HappyWrap31 happy_var_2) -> 
+	case happyOut41 happy_x_3 of { (HappyWrap41 happy_var_3) -> 
+	case happyOut44 happy_x_5 of { (HappyWrap44 happy_var_5) -> 
+	happyIn34
+		 (BNFC.Abs.Function happy_var_2 happy_var_3 happy_var_5
+	) `HappyStk` happyRest}}}
+
+happyReduce_47 = happySpecReduce_2  7# happyReduction_47
+happyReduction_47 happy_x_2
+	happy_x_1
+	 =  case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> 
+	happyIn34
+		 (BNFC.Abs.Layout happy_var_2
+	)}
+
+happyReduce_48 = happySpecReduce_3  7# happyReduction_48
+happyReduction_48 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut43 happy_x_3 of { (HappyWrap43 happy_var_3) -> 
+	happyIn34
+		 (BNFC.Abs.LayoutStop happy_var_3
+	)}
+
+happyReduce_49 = happySpecReduce_2  7# happyReduction_49
+happyReduction_49 happy_x_2
+	happy_x_1
+	 =  happyIn34
+		 (BNFC.Abs.LayoutTop
+	)
+
+happyReduce_50 = happySpecReduce_1  8# happyReduction_50
+happyReduction_50 happy_x_1
+	 =  case happyOut30 happy_x_1 of { (HappyWrap30 happy_var_1) -> 
+	happyIn35
+		 (BNFC.Abs.Terminal happy_var_1
+	)}
+
+happyReduce_51 = happySpecReduce_1  8# happyReduction_51
+happyReduction_51 happy_x_1
+	 =  case happyOut37 happy_x_1 of { (HappyWrap37 happy_var_1) -> 
+	happyIn35
+		 (BNFC.Abs.NTerminal happy_var_1
+	)}
+
+happyReduce_52 = happySpecReduce_0  9# happyReduction_52
+happyReduction_52  =  happyIn36
+		 ([]
+	)
+
+happyReduce_53 = happySpecReduce_2  9# happyReduction_53
+happyReduction_53 happy_x_2
+	happy_x_1
+	 =  case happyOut35 happy_x_1 of { (HappyWrap35 happy_var_1) -> 
+	case happyOut36 happy_x_2 of { (HappyWrap36 happy_var_2) -> 
+	happyIn36
+		 ((:) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_54 = happySpecReduce_3  10# happyReduction_54
+happyReduction_54 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut37 happy_x_2 of { (HappyWrap37 happy_var_2) -> 
+	happyIn37
+		 (BNFC.Abs.ListCat happy_var_2
+	)}
+
+happyReduce_55 = happySpecReduce_1  10# happyReduction_55
+happyReduction_55 happy_x_1
+	 =  case happyOut31 happy_x_1 of { (HappyWrap31 happy_var_1) -> 
+	happyIn37
+		 (BNFC.Abs.IdCat happy_var_1
+	)}
+
+happyReduce_56 = happySpecReduce_0  11# happyReduction_56
+happyReduction_56  =  happyIn38
+		 ([]
+	)
+
+happyReduce_57 = happySpecReduce_1  11# happyReduction_57
+happyReduction_57 happy_x_1
+	 =  case happyOut37 happy_x_1 of { (HappyWrap37 happy_var_1) -> 
+	happyIn38
+		 ((:[]) happy_var_1
+	)}
+
+happyReduce_58 = happySpecReduce_3  11# happyReduction_58
+happyReduction_58 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut37 happy_x_1 of { (HappyWrap37 happy_var_1) -> 
+	case happyOut38 happy_x_3 of { (HappyWrap38 happy_var_3) -> 
+	happyIn38
+		 ((:) happy_var_1 happy_var_3
+	)}}
+
+happyReduce_59 = happySpecReduce_1  12# happyReduction_59
+happyReduction_59 happy_x_1
+	 =  case happyOut31 happy_x_1 of { (HappyWrap31 happy_var_1) -> 
+	happyIn39
+		 (BNFC.Abs.Id happy_var_1
+	)}
+
+happyReduce_60 = happySpecReduce_1  12# happyReduction_60
+happyReduction_60 happy_x_1
+	 =  happyIn39
+		 (BNFC.Abs.Wild
+	)
+
+happyReduce_61 = happySpecReduce_2  12# happyReduction_61
+happyReduction_61 happy_x_2
+	happy_x_1
+	 =  happyIn39
+		 (BNFC.Abs.ListE
+	)
+
+happyReduce_62 = happySpecReduce_3  12# happyReduction_62
+happyReduction_62 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  happyIn39
+		 (BNFC.Abs.ListCons
+	)
+
+happyReduce_63 = happyReduce 5# 12# happyReduction_63
+happyReduction_63 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = happyIn39
+		 (BNFC.Abs.ListOne
+	) `HappyStk` happyRest
+
+happyReduce_64 = happySpecReduce_1  13# happyReduction_64
+happyReduction_64 happy_x_1
+	 =  case happyOut31 happy_x_1 of { (HappyWrap31 happy_var_1) -> 
+	happyIn40
+		 (BNFC.Abs.Arg happy_var_1
+	)}
+
+happyReduce_65 = happySpecReduce_0  14# happyReduction_65
+happyReduction_65  =  happyIn41
+		 ([]
+	)
+
+happyReduce_66 = happySpecReduce_2  14# happyReduction_66
+happyReduction_66 happy_x_2
+	happy_x_1
+	 =  case happyOut40 happy_x_1 of { (HappyWrap40 happy_var_1) -> 
+	case happyOut41 happy_x_2 of { (HappyWrap41 happy_var_2) -> 
+	happyIn41
+		 ((:) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_67 = happySpecReduce_0  15# happyReduction_67
+happyReduction_67  =  happyIn42
+		 (BNFC.Abs.SepNone
+	)
+
+happyReduce_68 = happySpecReduce_2  15# happyReduction_68
+happyReduction_68 happy_x_2
+	happy_x_1
+	 =  case happyOut30 happy_x_2 of { (HappyWrap30 happy_var_2) -> 
+	happyIn42
+		 (BNFC.Abs.SepTerm happy_var_2
+	)}
+
+happyReduce_69 = happySpecReduce_2  15# happyReduction_69
+happyReduction_69 happy_x_2
+	happy_x_1
+	 =  case happyOut30 happy_x_2 of { (HappyWrap30 happy_var_2) -> 
+	happyIn42
+		 (BNFC.Abs.SepSepar happy_var_2
+	)}
+
+happyReduce_70 = happySpecReduce_1  16# happyReduction_70
+happyReduction_70 happy_x_1
+	 =  case happyOut30 happy_x_1 of { (HappyWrap30 happy_var_1) -> 
+	happyIn43
+		 ((:[]) happy_var_1
+	)}
+
+happyReduce_71 = happySpecReduce_3  16# happyReduction_71
+happyReduction_71 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut30 happy_x_1 of { (HappyWrap30 happy_var_1) -> 
+	case happyOut43 happy_x_3 of { (HappyWrap43 happy_var_3) -> 
+	happyIn43
+		 ((:) happy_var_1 happy_var_3
+	)}}
+
+happyReduce_72 = happySpecReduce_3  17# happyReduction_72
+happyReduction_72 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut45 happy_x_1 of { (HappyWrap45 happy_var_1) -> 
+	case happyOut44 happy_x_3 of { (HappyWrap44 happy_var_3) -> 
+	happyIn44
+		 (BNFC.Abs.Cons happy_var_1 happy_var_3
+	)}}
+
+happyReduce_73 = happySpecReduce_1  17# happyReduction_73
+happyReduction_73 happy_x_1
+	 =  case happyOut45 happy_x_1 of { (HappyWrap45 happy_var_1) -> 
+	happyIn44
+		 (happy_var_1
+	)}
+
+happyReduce_74 = happySpecReduce_2  18# happyReduction_74
+happyReduction_74 happy_x_2
+	happy_x_1
+	 =  case happyOut31 happy_x_1 of { (HappyWrap31 happy_var_1) -> 
+	case happyOut48 happy_x_2 of { (HappyWrap48 happy_var_2) -> 
+	happyIn45
+		 (BNFC.Abs.App happy_var_1 happy_var_2
+	)}}
+
+happyReduce_75 = happySpecReduce_1  18# happyReduction_75
+happyReduction_75 happy_x_1
+	 =  case happyOut46 happy_x_1 of { (HappyWrap46 happy_var_1) -> 
+	happyIn45
+		 (happy_var_1
+	)}
+
+happyReduce_76 = happySpecReduce_1  19# happyReduction_76
+happyReduction_76 happy_x_1
+	 =  case happyOut31 happy_x_1 of { (HappyWrap31 happy_var_1) -> 
+	happyIn46
+		 (BNFC.Abs.Var happy_var_1
+	)}
+
+happyReduce_77 = happySpecReduce_1  19# happyReduction_77
+happyReduction_77 happy_x_1
+	 =  case happyOut29 happy_x_1 of { (HappyWrap29 happy_var_1) -> 
+	happyIn46
+		 (BNFC.Abs.LitInt happy_var_1
+	)}
+
+happyReduce_78 = happySpecReduce_1  19# happyReduction_78
+happyReduction_78 happy_x_1
+	 =  case happyOut27 happy_x_1 of { (HappyWrap27 happy_var_1) -> 
+	happyIn46
+		 (BNFC.Abs.LitChar happy_var_1
+	)}
+
+happyReduce_79 = happySpecReduce_1  19# happyReduction_79
+happyReduction_79 happy_x_1
+	 =  case happyOut30 happy_x_1 of { (HappyWrap30 happy_var_1) -> 
+	happyIn46
+		 (BNFC.Abs.LitString happy_var_1
+	)}
+
+happyReduce_80 = happySpecReduce_1  19# happyReduction_80
+happyReduction_80 happy_x_1
+	 =  case happyOut28 happy_x_1 of { (HappyWrap28 happy_var_1) -> 
+	happyIn46
+		 (BNFC.Abs.LitDouble happy_var_1
+	)}
+
+happyReduce_81 = happySpecReduce_3  19# happyReduction_81
+happyReduction_81 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut47 happy_x_2 of { (HappyWrap47 happy_var_2) -> 
+	happyIn46
+		 (BNFC.Abs.List happy_var_2
+	)}
+
+happyReduce_82 = happySpecReduce_3  19# happyReduction_82
+happyReduction_82 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut44 happy_x_2 of { (HappyWrap44 happy_var_2) -> 
+	happyIn46
+		 (happy_var_2
+	)}
+
+happyReduce_83 = happySpecReduce_0  20# happyReduction_83
+happyReduction_83  =  happyIn47
+		 ([]
+	)
+
+happyReduce_84 = happySpecReduce_1  20# happyReduction_84
+happyReduction_84 happy_x_1
+	 =  case happyOut44 happy_x_1 of { (HappyWrap44 happy_var_1) -> 
+	happyIn47
+		 ((:[]) happy_var_1
+	)}
+
+happyReduce_85 = happySpecReduce_3  20# happyReduction_85
+happyReduction_85 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut44 happy_x_1 of { (HappyWrap44 happy_var_1) -> 
+	case happyOut47 happy_x_3 of { (HappyWrap47 happy_var_3) -> 
+	happyIn47
+		 ((:) happy_var_1 happy_var_3
+	)}}
+
+happyReduce_86 = happySpecReduce_1  21# happyReduction_86
+happyReduction_86 happy_x_1
+	 =  case happyOut46 happy_x_1 of { (HappyWrap46 happy_var_1) -> 
+	happyIn48
+		 ((:[]) happy_var_1
+	)}
+
+happyReduce_87 = happySpecReduce_2  21# happyReduction_87
+happyReduction_87 happy_x_2
+	happy_x_1
+	 =  case happyOut46 happy_x_1 of { (HappyWrap46 happy_var_1) -> 
+	case happyOut48 happy_x_2 of { (HappyWrap48 happy_var_2) -> 
+	happyIn48
+		 ((:) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_88 = happySpecReduce_1  22# happyReduction_88
+happyReduction_88 happy_x_1
+	 =  case happyOut36 happy_x_1 of { (HappyWrap36 happy_var_1) -> 
+	happyIn49
+		 (BNFC.Abs.RHS happy_var_1
+	)}
+
+happyReduce_89 = happySpecReduce_1  23# happyReduction_89
+happyReduction_89 happy_x_1
+	 =  case happyOut49 happy_x_1 of { (HappyWrap49 happy_var_1) -> 
+	happyIn50
+		 ((:[]) happy_var_1
+	)}
+
+happyReduce_90 = happySpecReduce_3  23# happyReduction_90
+happyReduction_90 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut49 happy_x_1 of { (HappyWrap49 happy_var_1) -> 
+	case happyOut50 happy_x_3 of { (HappyWrap50 happy_var_3) -> 
+	happyIn50
+		 ((:) happy_var_1 happy_var_3
+	)}}
+
+happyReduce_91 = happySpecReduce_1  24# happyReduction_91
+happyReduction_91 happy_x_1
+	 =  happyIn51
+		 (BNFC.Abs.MNonempty
+	)
+
+happyReduce_92 = happySpecReduce_0  24# happyReduction_92
+happyReduction_92  =  happyIn51
+		 (BNFC.Abs.MEmpty
+	)
+
+happyReduce_93 = happySpecReduce_3  25# happyReduction_93
+happyReduction_93 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut52 happy_x_1 of { (HappyWrap52 happy_var_1) -> 
+	case happyOut53 happy_x_3 of { (HappyWrap53 happy_var_3) -> 
+	happyIn52
+		 (BNFC.Abs.RAlt happy_var_1 happy_var_3
+	)}}
+
+happyReduce_94 = happySpecReduce_1  25# happyReduction_94
+happyReduction_94 happy_x_1
+	 =  case happyOut53 happy_x_1 of { (HappyWrap53 happy_var_1) -> 
+	happyIn52
+		 (happy_var_1
+	)}
+
+happyReduce_95 = happySpecReduce_3  26# happyReduction_95
+happyReduction_95 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut53 happy_x_1 of { (HappyWrap53 happy_var_1) -> 
+	case happyOut54 happy_x_3 of { (HappyWrap54 happy_var_3) -> 
+	happyIn53
+		 (BNFC.Abs.RMinus happy_var_1 happy_var_3
+	)}}
+
+happyReduce_96 = happySpecReduce_1  26# happyReduction_96
+happyReduction_96 happy_x_1
+	 =  case happyOut54 happy_x_1 of { (HappyWrap54 happy_var_1) -> 
+	happyIn53
+		 (happy_var_1
+	)}
+
+happyReduce_97 = happySpecReduce_2  27# happyReduction_97
+happyReduction_97 happy_x_2
+	happy_x_1
+	 =  case happyOut54 happy_x_1 of { (HappyWrap54 happy_var_1) -> 
+	case happyOut55 happy_x_2 of { (HappyWrap55 happy_var_2) -> 
+	happyIn54
+		 (BNFC.Abs.RSeq happy_var_1 happy_var_2
+	)}}
+
+happyReduce_98 = happySpecReduce_1  27# happyReduction_98
+happyReduction_98 happy_x_1
+	 =  case happyOut55 happy_x_1 of { (HappyWrap55 happy_var_1) -> 
+	happyIn54
+		 (happy_var_1
+	)}
+
+happyReduce_99 = happySpecReduce_2  28# happyReduction_99
+happyReduction_99 happy_x_2
+	happy_x_1
+	 =  case happyOut55 happy_x_1 of { (HappyWrap55 happy_var_1) -> 
+	happyIn55
+		 (BNFC.Abs.RStar happy_var_1
+	)}
+
+happyReduce_100 = happySpecReduce_2  28# happyReduction_100
+happyReduction_100 happy_x_2
+	happy_x_1
+	 =  case happyOut55 happy_x_1 of { (HappyWrap55 happy_var_1) -> 
+	happyIn55
+		 (BNFC.Abs.RPlus happy_var_1
+	)}
+
+happyReduce_101 = happySpecReduce_2  28# happyReduction_101
+happyReduction_101 happy_x_2
+	happy_x_1
+	 =  case happyOut55 happy_x_1 of { (HappyWrap55 happy_var_1) -> 
+	happyIn55
+		 (BNFC.Abs.ROpt happy_var_1
+	)}
+
+happyReduce_102 = happySpecReduce_1  28# happyReduction_102
+happyReduction_102 happy_x_1
+	 =  happyIn55
+		 (BNFC.Abs.REps
+	)
+
+happyReduce_103 = happySpecReduce_1  28# happyReduction_103
+happyReduction_103 happy_x_1
+	 =  case happyOut27 happy_x_1 of { (HappyWrap27 happy_var_1) -> 
+	happyIn55
+		 (BNFC.Abs.RChar happy_var_1
+	)}
+
+happyReduce_104 = happySpecReduce_3  28# happyReduction_104
+happyReduction_104 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut30 happy_x_2 of { (HappyWrap30 happy_var_2) -> 
+	happyIn55
+		 (BNFC.Abs.RAlts happy_var_2
+	)}
+
+happyReduce_105 = happySpecReduce_3  28# happyReduction_105
+happyReduction_105 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut30 happy_x_2 of { (HappyWrap30 happy_var_2) -> 
+	happyIn55
+		 (BNFC.Abs.RSeqs happy_var_2
+	)}
+
+happyReduce_106 = happySpecReduce_1  28# happyReduction_106
+happyReduction_106 happy_x_1
+	 =  happyIn55
+		 (BNFC.Abs.RDigit
+	)
+
+happyReduce_107 = happySpecReduce_1  28# happyReduction_107
+happyReduction_107 happy_x_1
+	 =  happyIn55
+		 (BNFC.Abs.RLetter
+	)
+
+happyReduce_108 = happySpecReduce_1  28# happyReduction_108
+happyReduction_108 happy_x_1
+	 =  happyIn55
+		 (BNFC.Abs.RUpper
+	)
+
+happyReduce_109 = happySpecReduce_1  28# happyReduction_109
+happyReduction_109 happy_x_1
+	 =  happyIn55
+		 (BNFC.Abs.RLower
+	)
+
+happyReduce_110 = happySpecReduce_1  28# happyReduction_110
+happyReduction_110 happy_x_1
+	 =  happyIn55
+		 (BNFC.Abs.RAny
+	)
+
+happyReduce_111 = happySpecReduce_3  28# happyReduction_111
+happyReduction_111 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut52 happy_x_2 of { (HappyWrap52 happy_var_2) -> 
+	happyIn55
+		 (happy_var_2
+	)}
+
+happyNewToken action sts stk [] =
+	happyDoAction 45# notHappyAtAll action sts stk []
+
+happyNewToken action sts stk (tk:tks) =
+	let cont i = happyDoAction i tk action sts stk tks in
+	case tk of {
+	PT _ (TS _ 1) -> cont 1#;
+	PT _ (TS _ 2) -> cont 2#;
+	PT _ (TS _ 3) -> cont 3#;
+	PT _ (TS _ 4) -> cont 4#;
+	PT _ (TS _ 5) -> cont 5#;
+	PT _ (TS _ 6) -> cont 6#;
+	PT _ (TS _ 7) -> cont 7#;
+	PT _ (TS _ 8) -> cont 8#;
+	PT _ (TS _ 9) -> cont 9#;
+	PT _ (TS _ 10) -> cont 10#;
+	PT _ (TS _ 11) -> cont 11#;
+	PT _ (TS _ 12) -> cont 12#;
+	PT _ (TS _ 13) -> cont 13#;
+	PT _ (TS _ 14) -> cont 14#;
+	PT _ (TS _ 15) -> cont 15#;
+	PT _ (TS _ 16) -> cont 16#;
+	PT _ (TS _ 17) -> cont 17#;
+	PT _ (TS _ 18) -> cont 18#;
+	PT _ (TS _ 19) -> cont 19#;
+	PT _ (TS _ 20) -> cont 20#;
+	PT _ (TS _ 21) -> cont 21#;
+	PT _ (TS _ 22) -> cont 22#;
+	PT _ (TS _ 23) -> cont 23#;
+	PT _ (TS _ 24) -> cont 24#;
+	PT _ (TS _ 25) -> cont 25#;
+	PT _ (TS _ 26) -> cont 26#;
+	PT _ (TS _ 27) -> cont 27#;
+	PT _ (TS _ 28) -> cont 28#;
+	PT _ (TS _ 29) -> cont 29#;
+	PT _ (TS _ 30) -> cont 30#;
+	PT _ (TS _ 31) -> cont 31#;
+	PT _ (TS _ 32) -> cont 32#;
+	PT _ (TS _ 33) -> cont 33#;
+	PT _ (TS _ 34) -> cont 34#;
+	PT _ (TS _ 35) -> cont 35#;
+	PT _ (TS _ 36) -> cont 36#;
+	PT _ (TS _ 37) -> cont 37#;
+	PT _ (TS _ 38) -> cont 38#;
+	PT _ (TS _ 39) -> cont 39#;
+	PT _ (TC happy_dollar_dollar) -> cont 40#;
+	PT _ (TD happy_dollar_dollar) -> cont 41#;
+	PT _ (TI happy_dollar_dollar) -> cont 42#;
+	PT _ (TL happy_dollar_dollar) -> cont 43#;
+	PT _ (T_Identifier _) -> cont 44#;
+	_ -> happyError' ((tk:tks), [])
+	}
+
+happyError_ explist 45# tk tks = happyError' (tks, explist)
+happyError_ explist _ tk tks = happyError' ((tk:tks), explist)
+
+happyThen :: () => Err a -> (a -> Err b) -> Err b
+happyThen = ((>>=))
+happyReturn :: () => a -> Err a
+happyReturn = (return)
+happyThen1 m k tks = ((>>=)) m (\a -> k a tks)
+happyReturn1 :: () => a -> b -> Err a
+happyReturn1 = \a tks -> (return) a
+happyError' :: () => ([(Token)], [Prelude.String]) -> Err a
+happyError' = (\(tokens, _) -> happyError tokens)
+pGrammar tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (let {(HappyWrap32 x') = happyOut32 x} in x'))
+
+pListDef tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (let {(HappyWrap33 x') = happyOut33 x} in x'))
+
+pDef tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 2# tks) (\x -> happyReturn (let {(HappyWrap34 x') = happyOut34 x} in x'))
+
+pItem tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 3# tks) (\x -> happyReturn (let {(HappyWrap35 x') = happyOut35 x} in x'))
+
+pListItem tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 4# tks) (\x -> happyReturn (let {(HappyWrap36 x') = happyOut36 x} in x'))
+
+pCat tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 5# tks) (\x -> happyReturn (let {(HappyWrap37 x') = happyOut37 x} in x'))
+
+pListCat tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 6# tks) (\x -> happyReturn (let {(HappyWrap38 x') = happyOut38 x} in x'))
+
+pLabel tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 7# tks) (\x -> happyReturn (let {(HappyWrap39 x') = happyOut39 x} in x'))
+
+pArg tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 8# tks) (\x -> happyReturn (let {(HappyWrap40 x') = happyOut40 x} in x'))
+
+pListArg tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 9# tks) (\x -> happyReturn (let {(HappyWrap41 x') = happyOut41 x} in x'))
+
+pSeparation tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 10# tks) (\x -> happyReturn (let {(HappyWrap42 x') = happyOut42 x} in x'))
+
+pListString tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 11# tks) (\x -> happyReturn (let {(HappyWrap43 x') = happyOut43 x} in x'))
+
+pExp tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 12# tks) (\x -> happyReturn (let {(HappyWrap44 x') = happyOut44 x} in x'))
+
+pExp1 tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 13# tks) (\x -> happyReturn (let {(HappyWrap45 x') = happyOut45 x} in x'))
+
+pExp2 tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 14# tks) (\x -> happyReturn (let {(HappyWrap46 x') = happyOut46 x} in x'))
+
+pListExp tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 15# tks) (\x -> happyReturn (let {(HappyWrap47 x') = happyOut47 x} in x'))
+
+pListExp2 tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 16# tks) (\x -> happyReturn (let {(HappyWrap48 x') = happyOut48 x} in x'))
+
+pRHS tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 17# tks) (\x -> happyReturn (let {(HappyWrap49 x') = happyOut49 x} in x'))
+
+pListRHS tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 18# tks) (\x -> happyReturn (let {(HappyWrap50 x') = happyOut50 x} in x'))
+
+pMinimumSize tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 19# tks) (\x -> happyReturn (let {(HappyWrap51 x') = happyOut51 x} in x'))
+
+pReg tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 20# tks) (\x -> happyReturn (let {(HappyWrap52 x') = happyOut52 x} in x'))
+
+pReg1 tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 21# tks) (\x -> happyReturn (let {(HappyWrap53 x') = happyOut53 x} in x'))
+
+pReg2 tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 22# tks) (\x -> happyReturn (let {(HappyWrap54 x') = happyOut54 x} in x'))
+
+pReg3 tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 23# tks) (\x -> happyReturn (let {(HappyWrap55 x') = happyOut55 x} in x'))
+
+happySeq = happyDontSeq
+
+
+type Err = Either String
+
+happyError :: [Token] -> Err a
+happyError ts = Left $
+  "syntax error at " ++ tokenPos ts ++
+  case ts of
+    []      -> []
+    [Err _] -> " due to lexer error"
+    t:_     -> " before `" ++ (prToken t) ++ "'"
+
+myLexer :: String -> [Token]
+myLexer = tokens
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+-- $Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp $
+
+
+
+
+
+
+
+
+
+
+
+
+
+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
+#if __GLASGOW_HASKELL__ > 706
+#define LT(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.<# m)) :: Prelude.Bool)
+#define GTE(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.>=# m)) :: Prelude.Bool)
+#define EQ(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.==# m)) :: Prelude.Bool)
+#else
+#define LT(n,m) (n Happy_GHC_Exts.<# m)
+#define GTE(n,m) (n Happy_GHC_Exts.>=# m)
+#define EQ(n,m) (n Happy_GHC_Exts.==# m)
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+infixr 9 `HappyStk`
+data HappyStk a = HappyStk a (HappyStk a)
+
+-----------------------------------------------------------------------------
+-- starting the parse
+
+happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll
+
+-----------------------------------------------------------------------------
+-- Accepting the parse
+
+-- If the current token is ERROR_TOK, it means we've just accepted a partial
+-- parse (a %partial parser).  We must ignore the saved token on the top of
+-- the stack in this case.
+happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =
+        happyReturn1 ans
+happyAccept j tk st sts (HappyStk ans _) = 
+        (happyTcHack j (happyTcHack st)) (happyReturn1 ans)
+
+-----------------------------------------------------------------------------
+-- Arrays only: do the next action
+
+
+
+happyDoAction i tk st
+        = {- nothing -}
+          case action of
+                0#           -> {- nothing -}
+                                     happyFail (happyExpListPerState ((Happy_GHC_Exts.I# (st)) :: Prelude.Int)) i tk st
+                -1#          -> {- nothing -}
+                                     happyAccept i tk st
+                n | LT(n,(0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}
+                                                   (happyReduceArr Happy_Data_Array.! rule) i tk st
+                                                   where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))
+                n                 -> {- nothing -}
+                                     happyShift new_state i tk st
+                                     where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))
+   where off    = happyAdjustOffset (indexShortOffAddr happyActOffsets st)
+         off_i  = (off Happy_GHC_Exts.+# i)
+         check  = if GTE(off_i,(0# :: Happy_GHC_Exts.Int#))
+                  then EQ(indexShortOffAddr happyCheck off_i, i)
+                  else Prelude.False
+         action
+          | check     = indexShortOffAddr happyTable off_i
+          | Prelude.otherwise = indexShortOffAddr happyDefActions st
+
+
+
+
+indexShortOffAddr (HappyA# arr) off =
+        Happy_GHC_Exts.narrow16Int# i
+  where
+        i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)
+        high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))
+        low  = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))
+        off' = off Happy_GHC_Exts.*# 2#
+
+
+
+
+{-# INLINE happyLt #-}
+happyLt x y = LT(x,y)
+
+
+readArrayBit arr bit =
+    Bits.testBit (Happy_GHC_Exts.I# (indexShortOffAddr arr ((unbox_int bit) `Happy_GHC_Exts.iShiftRA#` 4#))) (bit `Prelude.mod` 16)
+  where unbox_int (Happy_GHC_Exts.I# x) = x
+
+
+
+
+
+
+data HappyAddr = HappyA# Happy_GHC_Exts.Addr#
+
+
+-----------------------------------------------------------------------------
+-- HappyState data type (not arrays)
+
+
+
+
+
+
+
+
+
+
+
+
+
+-----------------------------------------------------------------------------
+-- Shifting a token
+
+happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =
+     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in
+--     trace "shifting the error token" $
+     happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)
+
+happyShift new_state i tk st sts stk =
+     happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)
+
+-- happyReduce is specialised for the common cases.
+
+happySpecReduce_0 i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happySpecReduce_0 nt fn j tk st@((action)) sts stk
+     = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)
+
+happySpecReduce_1 i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')
+     = let r = fn v1 in
+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))
+
+happySpecReduce_2 i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')
+     = let r = fn v1 v2 in
+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))
+
+happySpecReduce_3 i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')
+     = let r = fn v1 v2 v3 in
+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))
+
+happyReduce k i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happyReduce k nt fn j tk st sts stk
+     = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of
+         sts1@((HappyCons (st1@(action)) (_))) ->
+                let r = fn stk in  -- it doesn't hurt to always seq here...
+                happyDoSeq r (happyGoto nt j tk st1 sts1 r)
+
+happyMonadReduce k nt fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happyMonadReduce k nt fn j tk st sts stk =
+      case happyDrop k (HappyCons (st) (sts)) of
+        sts1@((HappyCons (st1@(action)) (_))) ->
+          let drop_stk = happyDropStk k stk in
+          happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))
+
+happyMonad2Reduce k nt fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happyMonad2Reduce k nt fn j tk st sts stk =
+      case happyDrop k (HappyCons (st) (sts)) of
+        sts1@((HappyCons (st1@(action)) (_))) ->
+         let drop_stk = happyDropStk k stk
+
+             off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st1)
+             off_i = (off Happy_GHC_Exts.+# nt)
+             new_state = indexShortOffAddr happyTable off_i
+
+
+
+
+          in
+          happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))
+
+happyDrop 0# l = l
+happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t
+
+happyDropStk 0# l = l
+happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs
+
+-----------------------------------------------------------------------------
+-- Moving to a new state after a reduction
+
+
+happyGoto nt j tk st = 
+   {- nothing -}
+   happyDoAction j tk new_state
+   where off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st)
+         off_i = (off Happy_GHC_Exts.+# nt)
+         new_state = indexShortOffAddr happyTable off_i
+
+
+
+
+-----------------------------------------------------------------------------
+-- Error recovery (ERROR_TOK is the error token)
+
+-- parse error if we are in recovery and we fail again
+happyFail explist 0# tk old_st _ stk@(x `HappyStk` _) =
+     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in
+--      trace "failing" $ 
+        happyError_ explist i tk
+
+{-  We don't need state discarding for our restricted implementation of
+    "error".  In fact, it can cause some bogus parses, so I've disabled it
+    for now --SDM
+
+-- discard a state
+happyFail  ERROR_TOK tk old_st CONS(HAPPYSTATE(action),sts) 
+                                                (saved_tok `HappyStk` _ `HappyStk` stk) =
+--      trace ("discarding state, depth " ++ show (length stk))  $
+        DO_ACTION(action,ERROR_TOK,tk,sts,(saved_tok`HappyStk`stk))
+-}
+
+-- Enter error recovery: generate an error token,
+--                       save the old token and carry on.
+happyFail explist i tk (action) sts stk =
+--      trace "entering error recovery" $
+        happyDoAction 0# tk action sts ((Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)
+
+-- Internal happy errors:
+
+notHappyAtAll :: a
+notHappyAtAll = Prelude.error "Internal Happy error\n"
+
+-----------------------------------------------------------------------------
+-- Hack to get the typechecker to accept our action functions
+
+
+happyTcHack :: Happy_GHC_Exts.Int# -> a -> a
+happyTcHack x y = y
+{-# INLINE happyTcHack #-}
+
+
+-----------------------------------------------------------------------------
+-- Seq-ing.  If the --strict flag is given, then Happy emits 
+--      happySeq = happyDoSeq
+-- otherwise it emits
+--      happySeq = happyDontSeq
+
+happyDoSeq, happyDontSeq :: a -> b -> b
+happyDoSeq   a b = a `Prelude.seq` b
+happyDontSeq a b = b
+
+-----------------------------------------------------------------------------
+-- Don't inline any functions from the template.  GHC has a nasty habit
+-- of deciding to inline happyGoto everywhere, which increases the size of
+-- the generated parser quite a bit.
+
+
+{-# NOINLINE happyDoAction #-}
+{-# NOINLINE happyTable #-}
+{-# NOINLINE happyCheck #-}
+{-# NOINLINE happyActOffsets #-}
+{-# NOINLINE happyGotoOffsets #-}
+{-# NOINLINE happyDefActions #-}
+
+{-# NOINLINE happyShift #-}
+{-# NOINLINE happySpecReduce_0 #-}
+{-# NOINLINE happySpecReduce_1 #-}
+{-# NOINLINE happySpecReduce_2 #-}
+{-# NOINLINE happySpecReduce_3 #-}
+{-# NOINLINE happyReduce #-}
+{-# NOINLINE happyMonadReduce #-}
+{-# NOINLINE happyGoto #-}
+{-# NOINLINE happyFail #-}
+
+-- end of Happy Template.
diff --git a/src/BNFC/Par.y b/src/BNFC/Par.y
--- a/src/BNFC/Par.y
+++ b/src/BNFC/Par.y
@@ -1,4 +1,6 @@
--- This Happy file was machine-generated by the BNF converter
+-- -*- haskell -*- File generated by the BNF Converter (bnfc 2.9.3).
+
+-- Parser definition for use with Happy
 {
 {-# OPTIONS_GHC -fno-warn-incomplete-patterns -fno-warn-overlapping-patterns #-}
 {-# LANGUAGE PatternSynonyms #-}
diff --git a/src/BNFC/Print.hs b/src/BNFC/Print.hs
--- a/src/BNFC/Print.hs
+++ b/src/BNFC/Print.hs
@@ -1,3 +1,5 @@
+-- File generated by the BNF Converter (bnfc 2.9.3).
+
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE LambdaCase #-}
@@ -8,7 +10,6 @@
 {-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}
 
 -- | Pretty-printer for BNFC.
---   Generated by the BNF converter.
 
 module BNFC.Print where
 
@@ -44,13 +45,14 @@
   rend i p = \case
       "["      :ts -> char '[' . rend i False ts
       "("      :ts -> char '(' . rend i False ts
-      "{"      :ts -> onNewLine i     p . showChar '{'    . new (i+1) ts
+      "{"      :ts -> onNewLine i     p . showChar   '{'  . new (i+1) ts
       "}" : ";":ts -> onNewLine (i-1) p . showString "};" . new (i-1) ts
-      "}"      :ts -> onNewLine (i-1) p . showChar '}'    . new (i-1) ts
+      "}"      :ts -> onNewLine (i-1) p . showChar   '}'  . new (i-1) ts
       [";"]        -> char ';'
       ";"      :ts -> char ';' . new i ts
-      t  : ts@(s:_) | closingOrPunctuation s -> showString t . rend i False ts
-      t        :ts -> pending . space t . rend i False ts
+      t  : ts@(s:_) | closingOrPunctuation s
+                   -> pending . showString t . rend i False ts
+      t        :ts -> pending . space t      . rend i False ts
       []           -> id
     where
     -- Output character after pending indentation.
diff --git a/src/BNFC/Utils.hs b/src/BNFC/Utils.hs
--- a/src/BNFC/Utils.hs
+++ b/src/BNFC/Utils.hs
@@ -37,14 +37,13 @@
 
 import Data.Char
 import Data.List          (intercalate)
-import Data.List.NonEmpty (pattern (:|), (<|))
+import Data.List.NonEmpty (pattern (:|))
 import Data.Map           (Map)
 import Data.Semigroup     (Semigroup(..))
 import Data.Time
 
 import qualified Data.Foldable      as Fold
 import qualified Data.Map           as Map
-import qualified Data.Set           as Set
 import qualified Data.List.NonEmpty as List1
 
 import System.IO       (IOMode(ReadMode),hClose,hGetContents,openFile)
diff --git a/stack-8.10.2.yaml b/stack-8.10.2.yaml
new file mode 100644
--- /dev/null
+++ b/stack-8.10.2.yaml
@@ -0,0 +1,3 @@
+resolver: nightly-2020-12-14
+compiler: ghc-8.10.2
+compiler-check: match-exact
diff --git a/stack-8.10.3.yaml b/stack-8.10.3.yaml
new file mode 100644
--- /dev/null
+++ b/stack-8.10.3.yaml
@@ -0,0 +1,3 @@
+resolver: lts-17.2
+compiler: ghc-8.10.3
+compiler-check: match-exact
diff --git a/stack-8.10.4.yaml b/stack-8.10.4.yaml
new file mode 100644
--- /dev/null
+++ b/stack-8.10.4.yaml
@@ -0,0 +1,3 @@
+resolver: lts-17.13
+compiler: ghc-8.10.4
+compiler-check: match-exact
diff --git a/stack-8.10.7.yaml b/stack-8.10.7.yaml
new file mode 100644
--- /dev/null
+++ b/stack-8.10.7.yaml
@@ -0,0 +1,3 @@
+resolver: lts-18.10
+compiler: ghc-8.10.7
+compiler-check: match-exact
diff --git a/stack-8.10.yaml b/stack-8.10.yaml
deleted file mode 100644
--- a/stack-8.10.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-resolver: lts-18.28
-compiler: ghc-8.10.7
-compiler-check: newer-minor
diff --git a/stack-8.2.2.yaml b/stack-8.2.2.yaml
new file mode 100644
--- /dev/null
+++ b/stack-8.2.2.yaml
@@ -0,0 +1,1 @@
+resolver: lts-11.22
diff --git a/stack-8.2.yaml b/stack-8.2.yaml
deleted file mode 100644
--- a/stack-8.2.yaml
+++ /dev/null
@@ -1,1 +0,0 @@
-resolver: lts-11.22
diff --git a/stack-8.4.4.yaml b/stack-8.4.4.yaml
new file mode 100644
--- /dev/null
+++ b/stack-8.4.4.yaml
@@ -0,0 +1,1 @@
+resolver: lts-12.26
diff --git a/stack-8.4.yaml b/stack-8.4.yaml
deleted file mode 100644
--- a/stack-8.4.yaml
+++ /dev/null
@@ -1,1 +0,0 @@
-resolver: lts-12.26
diff --git a/stack-8.6.4.yaml b/stack-8.6.4.yaml
new file mode 100644
--- /dev/null
+++ b/stack-8.6.4.yaml
@@ -0,0 +1,2 @@
+resolver: lts-13.19
+
diff --git a/stack-8.6.5.yaml b/stack-8.6.5.yaml
new file mode 100644
--- /dev/null
+++ b/stack-8.6.5.yaml
@@ -0,0 +1,1 @@
+resolver: lts-14.27
diff --git a/stack-8.6.yaml b/stack-8.6.yaml
deleted file mode 100644
--- a/stack-8.6.yaml
+++ /dev/null
@@ -1,1 +0,0 @@
-resolver: lts-14.27
diff --git a/stack-8.8.2.yaml b/stack-8.8.2.yaml
new file mode 100644
--- /dev/null
+++ b/stack-8.8.2.yaml
@@ -0,0 +1,2 @@
+resolver: lts-15.3
+
diff --git a/stack-8.8.3.yaml b/stack-8.8.3.yaml
new file mode 100644
--- /dev/null
+++ b/stack-8.8.3.yaml
@@ -0,0 +1,2 @@
+resolver: lts-15.8
+
diff --git a/stack-8.8.4.yaml b/stack-8.8.4.yaml
new file mode 100644
--- /dev/null
+++ b/stack-8.8.4.yaml
@@ -0,0 +1,4 @@
+resolver: lts-16.2
+compiler: ghc-8.8.4
+compiler-check: match-exact
+
diff --git a/stack-8.8.yaml b/stack-8.8.yaml
deleted file mode 100644
--- a/stack-8.8.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-resolver: lts-16.31
-compiler: ghc-8.8.4
-compiler-check: newer-minor
diff --git a/stack-9.0.1.yaml b/stack-9.0.1.yaml
new file mode 100644
--- /dev/null
+++ b/stack-9.0.1.yaml
@@ -0,0 +1,33 @@
+resolver: ghc-9.0.1
+compiler: ghc-9.0.1
+# compiler-check: match-exact
+
+extra-deps:
+- alex-3.2.6
+- cabal-doctest-1.0.8
+- happy-1.20.0
+- string-qq-0.0.4
+
+# For --test:
+- HUnit-1.6.2.0
+- QuickCheck-2.14.2
+- ansi-terminal-0.11
+- base-compat-0.11.2
+- call-stack-0.4.0
+- clock-0.8.2
+- code-page-0.2.1
+- colour-2.3.5
+- doctest-0.18.1
+- ghc-paths-0.1.0.12@rev:2
+- hspec-2.8.2
+- hspec-core-2.8.2
+- hspec-discover-2.8.2
+- hspec-expectations-0.8.2
+- primitive-0.7.1.0
+- quickcheck-io-0.2.0
+- random-1.2.0
+- setenv-0.1.1.3
+- splitmix-0.1.0.3
+- syb-0.7.2.1
+- temporary-1.3
+- tf-random-0.5
diff --git a/stack-9.0.yaml b/stack-9.0.yaml
deleted file mode 100644
--- a/stack-9.0.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-resolver: lts-19.33
-compiler: ghc-9.0.2
-compiler-check: newer-minor
diff --git a/stack-9.10.yaml b/stack-9.10.yaml
deleted file mode 100644
--- a/stack-9.10.yaml
+++ /dev/null
@@ -1,1 +0,0 @@
-resolver: lts-24.15
diff --git a/stack-9.12.yaml b/stack-9.12.yaml
deleted file mode 100644
--- a/stack-9.12.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-resolver: nightly-2025-10-14
-compiler: ghc-9.12.2
-compiler-check: newer-minor
diff --git a/stack-9.2.yaml b/stack-9.2.yaml
deleted file mode 100644
--- a/stack-9.2.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-resolver: lts-20.26
-compiler: ghc-9.2.8
-compiler-check: newer-minor
diff --git a/stack-9.4.yaml b/stack-9.4.yaml
deleted file mode 100644
--- a/stack-9.4.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-resolver: lts-21.25
-compiler: ghc-9.4.8
-compiler-check: newer-minor
diff --git a/stack-9.6.yaml b/stack-9.6.yaml
deleted file mode 100644
--- a/stack-9.6.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-resolver: lts-22.44
-compiler: ghc-9.6.7
-compiler-check: newer-minor
diff --git a/stack-9.8.yaml b/stack-9.8.yaml
deleted file mode 100644
--- a/stack-9.8.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-resolver: lts-23.28
-compiler: ghc-9.8.4
-compiler-check: newer-minor
-
-packages:
-- .
diff --git a/test/BNFC/Backend/BaseSpec.hs b/test/BNFC/Backend/BaseSpec.hs
--- a/test/BNFC/Backend/BaseSpec.hs
+++ b/test/BNFC/Backend/BaseSpec.hs
@@ -3,6 +3,8 @@
 
 module BNFC.Backend.BaseSpec where
 
+import Data.List (isInfixOf)
+
 import System.Directory
 import System.IO.Temp (withSystemTempDirectory)
 
@@ -14,12 +16,16 @@
 
 spec :: Spec
 spec = do
+  -- -- Andreas, 2021-07-17
+  -- -- I don't really believe in these unit tests; important are system tests.
+  -- -- So I am not putting in much energy to maintain them.
   describe "Backend monad" $ do
     it "empty computation generates empty list of files" $
       execBackend (return ()) `shouldReturn` []
-    it "returns the file created using mkfile" $
-      execBackend (mkfile "test.txt" "abcd")
-        `shouldReturn` [("test.txt", "abcd\n")]
+    -- -- Test broken: mkfile also puts the BNFC signature containing the version number.
+    -- it "returns the file created using mkfile" $
+    --   execBackend (mkfile "test.txt" "abcd")
+    --     `shouldReturn` [("test.txt", "abcd\n")]
   describe "writeFiles" $ do
     it "creates the root directory if it doesn't exists" $
       withSystemTempDirectory "bnfc-test" $ \tmpdir -> do
@@ -29,23 +35,23 @@
     it "creates a file from the bucket" $
       withSystemTempDirectory "bnfc-test" $ \tmpdir -> do
         setCurrentDirectory tmpdir
-        writeFiles "." (mkfile "file.txt" "")
+        writeFiles "." (mkfile "file.txt" id "")
         doesFileExist "file.txt"
       `shouldReturn` True
     it "put the right content in the file" $
       withSystemTempDirectory "bnfc-test" $ \tmpdir -> do
         setCurrentDirectory tmpdir
-        writeFiles "." (mkfile "file.txt" "abcd")
-        readFile "file.txt"
-      `shouldReturn` "abcd\n"
+        writeFiles "." (mkfile "file.txt" id "abcd")
+        readFile "file.txt" >>=
+          (`shouldSatisfy` isInfixOf "abcd\n")
     it "creates subdirectories" $
       withSystemTempDirectory "bnfc-test" $ \tmpdir -> do
         setCurrentDirectory tmpdir
-        writeFiles "." (mkfile "subdir/file.txt" "abcd")
+        writeFiles "." (mkfile "subdir/file.txt" id "abcd")
         doesDirectoryExist "subdir"
       `shouldReturn` True
     it "creates files in the root directory" $
       withSystemTempDirectory "bnfc-test" $ \tmpdir -> do
         setCurrentDirectory tmpdir
-        writeFiles "root/" (mkfile "foo/bar.txt" "abcd")
+        writeFiles "root/" (mkfile "foo/bar.txt" id "abcd")
         doesFileExist "root/foo/bar.txt" `shouldReturn` True
diff --git a/test/BNFC/Backend/Common/MakefileSpec.hs b/test/BNFC/Backend/Common/MakefileSpec.hs
--- a/test/BNFC/Backend/Common/MakefileSpec.hs
+++ b/test/BNFC/Backend/Common/MakefileSpec.hs
@@ -1,8 +1,10 @@
+{-# LANGUAGE LambdaCase #-}
+
 module BNFC.Backend.Common.MakefileSpec where
 
 import Test.Hspec
 
-import BNFC.Backend.Base (execBackend)
+import BNFC.Backend.Base (GeneratedFile(..), execBackend)
 import BNFC.Options (defaultOptions,make)
 import BNFC.Backend.Common.Makefile -- SUT
 
@@ -11,4 +13,8 @@
   describe "mkMakefile" $ do
     it "uses the names in the options dictionary" $
       let opts = defaultOptions { make = Just "MyMakefile" } in
-      execBackend (mkMakefile opts (const "")) `shouldReturn` [("MyMakefile","")]
+      execBackend (mkMakefile opts (const "")) >>=
+        (`shouldSatisfy` \case
+           [ GeneratedFile "MyMakefile" _ "" ] -> True
+           _ -> False
+        )
diff --git a/test/BNFC/Backend/HaskellSpec.hs b/test/BNFC/Backend/HaskellSpec.hs
--- a/test/BNFC/Backend/HaskellSpec.hs
+++ b/test/BNFC/Backend/HaskellSpec.hs
@@ -23,12 +23,12 @@
     it "generates a file called AbsCalc.hs" $ do
       calc <- getCalc
       files <- execBackend (makeHaskell calcOptions calc)
-      map fst files `shouldSatisfy` elem "AbsCalc.hs"
+      map fileName files `shouldSatisfy` elem "AbsCalc.hs"
 
     it "generates a file called LexCalc.x" $ do
       calc <- getCalc
       files <- execBackend (makeHaskell calcOptions calc)
-      map fst files `shouldSatisfy` elem "LexCalc.x"
+      map fileName files `shouldSatisfy` elem "LexCalc.x"
 
     it "generates a file called ParCalc.y" $ do
       calc <- getCalc
diff --git a/test/BNFC/Hspec.hs b/test/BNFC/Hspec.hs
--- a/test/BNFC/Hspec.hs
+++ b/test/BNFC/Hspec.hs
@@ -18,6 +18,6 @@
   -> Expectation
 backend `shouldGenerate` file = do
   files <- execBackend backend
-  let filenames = map fst files
+  let filenames = map fileName files
   file `elem` filenames
     @? printf "file %s not found in %s" file (show filenames)
